From c6528c6d7fa00b21564408903357c546cc1366a7 Mon Sep 17 00:00:00 2001 From: Claws Mail Team Date: Wed, 22 Aug 2001 14:36:11 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'post_wrap_change'. Sprout from master 2001-08-22 14:36:10 UTC alte 'initial message templates support' Delete: .cvsignore ABOUT-NLS AUTHORS COPYING ChangeLog ChangeLog.claws ChangeLog.jp INSTALL INSTALL.jp Makefile.am NEWS README README.jp TODO TODO.jp ac/.cvsignore ac/Makefile.am ac/aclocal-include.m4 ac/check-type.m4 ac/gnupg-check-typedef.m4 ac/gpgme.m4 acconfig.h autogen.sh config.guess config.sub configure.in doc/manual/.cvsignore doc/manual/Makefile.am doc/manual/en/.cvsignore doc/manual/en/Makefile.am doc/manual/en/sylpheed-1.html doc/manual/en/sylpheed-10.html doc/manual/en/sylpheed-11.html doc/manual/en/sylpheed-12.html doc/manual/en/sylpheed-13.html doc/manual/en/sylpheed-14.html doc/manual/en/sylpheed-15.html doc/manual/en/sylpheed-16.html doc/manual/en/sylpheed-17.html doc/manual/en/sylpheed-18.html doc/manual/en/sylpheed-19.html doc/manual/en/sylpheed-2.html doc/manual/en/sylpheed-20.html doc/manual/en/sylpheed-21.html doc/manual/en/sylpheed-3.html doc/manual/en/sylpheed-4.html doc/manual/en/sylpheed-5.html doc/manual/en/sylpheed-6.html doc/manual/en/sylpheed-7.html doc/manual/en/sylpheed-8.html doc/manual/en/sylpheed-9.html doc/manual/en/sylpheed.html doc/manual/ja/.cvsignore doc/manual/ja/Makefile.am doc/manual/ja/sylpheed-1.html doc/manual/ja/sylpheed-10.html doc/manual/ja/sylpheed-11.html doc/manual/ja/sylpheed-12.html doc/manual/ja/sylpheed-13.html doc/manual/ja/sylpheed-14.html doc/manual/ja/sylpheed-15.html doc/manual/ja/sylpheed-16.html doc/manual/ja/sylpheed-17.html doc/manual/ja/sylpheed-2.html doc/manual/ja/sylpheed-3.html doc/manual/ja/sylpheed-4.html doc/manual/ja/sylpheed-5.html doc/manual/ja/sylpheed-6.html doc/manual/ja/sylpheed-7.html doc/manual/ja/sylpheed-8.html doc/manual/ja/sylpheed-9.html doc/manual/ja/sylpheed.html doc/manual/ja/sylpheed.sgml doc/src/maintainer_guide.txt doc/src/readme.txt doc/src/rfc1939.txt doc/src/rfc2015.txt doc/src/rfc2045.txt doc/src/rfc2046.txt doc/src/rfc2047.txt doc/src/rfc2048.txt doc/src/rfc2049.txt doc/src/rfc2060.txt doc/src/rfc2487.txt doc/src/rfc2821.txt doc/src/rfc2822.txt doc/src/rfc977.txt install-sh intl/.cvsignore intl/ChangeLog intl/Makefile.in intl/VERSION intl/bindtextdom.c intl/config.charset intl/dcgettext.c intl/dcigettext.c intl/dcngettext.c intl/dgettext.c intl/dngettext.c intl/explodename.c intl/finddomain.c intl/gettext.c intl/gettext.h intl/gettextP.h intl/hash-string.h intl/intl-compat.c intl/l10nflist.c intl/libgettext.h intl/libgnuintl.h intl/loadinfo.h intl/loadmsgcat.c intl/localcharset.c intl/locale.alias intl/localealias.c intl/ngettext.c intl/plural.c intl/plural.y intl/ref-add.sin intl/ref-del.sin intl/textdomain.c libkcc/.cvsignore libkcc/Makefile.am libkcc/Makefile.std libkcc/README libkcc/ROUTINE libkcc/buffer.c libkcc/check.c libkcc/compare.c libkcc/dec.c libkcc/euc.c libkcc/filter.c libkcc/getstr.c libkcc/guess.c libkcc/jis.c libkcc/kcc.h libkcc/libkcc.h libkcc/out.c libkcc/outchar.c libkcc/outsjis.c libkcc/setfunc.c libkcc/showcode.c libkcc/sjis.c libkcc/test.c libkcc/test_check.c libkcc/test_file libkcc/test_file.sjis libkcc/test_filter.c libkcc/testfile ltconfig ltmain.sh missing mkinstalldirs po/.cvsignore po/ChangeLog po/Makefile.in.in po/POTFILES.in po/cs.po po/de.po po/el.po po/es.po po/fr.po po/it.po po/ja.po po/ko.po po/nl.po po/pl.po po/pt_BR.po po/ru.po po/stamp-cat-id po/zh_CN.GB2312.po po/zh_TW.Big5.po src/.cvsignore src/Makefile.am src/about.c src/about.h src/account.c src/account.h src/addr_compl.c src/addr_compl.h src/addressbook.c src/addressbook.h src/addressitem.h src/alertpanel.c src/alertpanel.h src/automaton.c src/automaton.h src/base64.c src/base64.h src/codeconv.c src/codeconv.h src/compose.c src/compose.h src/customheader.c src/customheader.h src/defs.h src/displayheader.c src/displayheader.h src/editjpilot.c src/editjpilot.h src/editldap.c src/editldap.h src/editldap_basedn.c src/editldap_basedn.h src/editvcard.c src/editvcard.h src/esmtp.c src/esmtp.h src/export.c src/export.h src/filesel.c src/filesel.h src/filter.c src/filter.h src/filtering.c src/filtering.h src/folder.c src/folder.h src/foldersel.c src/foldersel.h src/folderview.c src/folderview.h src/grouplistdialog.c src/grouplistdialog.h src/gtksctree.c src/gtksctree.h src/gtkshruler.c src/gtkshruler.h src/gtkspell.c src/gtkspell.h src/gtkstext.c src/gtkstext.h src/gtkutils.c src/gtkutils.h src/gtkxtext.h src/headerview.c src/headerview.h src/headerwindow.c src/headerwindow.h src/html.c src/html.h src/imageview.c src/imageview.h src/imap.c src/imap.h src/import.c src/import.h src/inc.c src/inc.h src/inputdialog.c src/inputdialog.h src/intl.h src/jpilot.c src/jpilot.h src/labelcolors.c src/labelcolors.h src/logwindow.c src/logwindow.h src/main.c src/main.h src/mainwindow.c src/mainwindow.h src/manage_window.c src/manage_window.h src/manual.c src/manual.h src/matcher.c src/matcher.h src/matcher_parser.h src/matcher_parser_lex.h src/matcher_parser_lex.l src/matcher_parser_parse.y src/mbox.c src/mbox.h src/mbox_folder.c src/mbox_folder.h src/md5.c src/md5.h src/menu.c src/menu.h src/messageview.c src/messageview.h src/mgutils.c src/mgutils.h src/mh.c src/mh.h src/mimeview.c src/mimeview.h src/news.c src/news.h src/nntp.c src/nntp.h src/passphrase.c src/passphrase.h src/pixmaps/category.xpm src/pixmaps/clip.xpm src/pixmaps/complete.xpm src/pixmaps/continue.xpm src/pixmaps/deleted.xpm src/pixmaps/dir-close.xpm src/pixmaps/dir-open.xpm src/pixmaps/error.xpm src/pixmaps/folder.xpm src/pixmaps/forwarded.xpm src/pixmaps/group.xpm src/pixmaps/ignorethread.xpm src/pixmaps/inbox.xpm src/pixmaps/jpilot.xpm src/pixmaps/ldap.xpm src/pixmaps/linewrap.xpm src/pixmaps/mark.xpm src/pixmaps/new.xpm src/pixmaps/outbox.xpm src/pixmaps/regular.xpm src/pixmaps/replied.xpm src/pixmaps/stock_close.xpm src/pixmaps/stock_down_arrow.xpm src/pixmaps/stock_exec.xpm src/pixmaps/stock_mail.xpm src/pixmaps/stock_mail_attach.xpm src/pixmaps/stock_mail_compose.xpm src/pixmaps/stock_mail_forward.xpm src/pixmaps/stock_mail_receive.xpm src/pixmaps/stock_mail_receive_all.xpm src/pixmaps/stock_mail_reply.xpm src/pixmaps/stock_mail_reply_to_all.xpm src/pixmaps/stock_mail_reply_to_author.xpm src/pixmaps/stock_mail_send.xpm src/pixmaps/stock_mail_send_queue.xpm src/pixmaps/stock_news_compose.xpm src/pixmaps/stock_paste.xpm src/pixmaps/stock_preferences.xpm src/pixmaps/stock_properties.xpm src/pixmaps/stock_search.xpm src/pixmaps/stock_trash.xpm src/pixmaps/stock_up_arrow.xpm src/pixmaps/sylpheed-logo.xpm src/pixmaps/tb_address_book.xpm src/pixmaps/trash.xpm src/pixmaps/unread.xpm src/pixmaps/vcard.xpm src/pop.c src/pop.h src/prefs.c src/prefs.h src/prefs_account.c src/prefs_account.h src/prefs_common.c src/prefs_common.h src/prefs_customheader.c src/prefs_customheader.h src/prefs_display_header.c src/prefs_display_header.h src/prefs_filter.c src/prefs_filter.h src/prefs_filtering.c src/prefs_filtering.h src/prefs_folder_item.c src/prefs_folder_item.h src/prefs_matcher.c src/prefs_matcher.h src/prefs_scoring.c src/prefs_scoring.h src/procheader.c src/procheader.h src/procmime.c src/procmime.h src/procmsg.c src/procmsg.h src/progressdialog.c src/progressdialog.h src/quote_fmt.h src/quote_fmt_lex.h src/quote_fmt_lex.l src/quote_fmt_parse.y src/recv.c src/recv.h src/rfc2015.c src/rfc2015.h src/rfc822.c src/rfc822.h src/scoring.c src/scoring.h src/select-keys.c src/select-keys.h src/send.c src/send.h src/session.c src/session.h src/setup.c src/setup.h src/sigstatus.c src/sigstatus.h src/simple-gettext.c src/smtp.c src/smtp.h src/socket.c src/socket.h src/sourcewindow.c src/sourcewindow.h src/ssl.c src/ssl.h src/statusbar.c src/statusbar.h src/summary_search.c src/summary_search.h src/summaryview.c src/summaryview.h src/syldap.c src/syldap.h src/template.c src/template.h src/textview.c src/textview.h src/unmime.c src/unmime.h src/utils.c src/utils.h src/uuencode.c src/uuencode.h src/vcard.c src/vcard.h src/xml.c src/xml.h sylpheed.desktop sylpheed.png sylpheed.spec.in tools/README tools/filter_conv.pl tools/gif2xface.pl tools/ldif-to-xml.py --- .cvsignore | 17 - ABOUT-NLS | 296 -- AUTHORS | 81 - COPYING | 304 -- ChangeLog | 4498 -------------------- ChangeLog.claws | 2418 ----------- ChangeLog.jp | 4469 -------------------- INSTALL | 111 - INSTALL.jp | 112 - Makefile.am | 33 - NEWS | 0 README | 159 - README.jp | 195 - TODO | 69 - TODO.jp | 70 - ac/.cvsignore | 2 - ac/Makefile.am | 7 - ac/aclocal-include.m4 | 12 - ac/check-type.m4 | 27 - ac/gnupg-check-typedef.m4 | 17 - ac/gpgme.m4 | 170 - acconfig.h | 42 - autogen.sh | 7 - config.guess | 1371 ------ config.sub | 1215 ------ configure.in | 323 -- doc/manual/.cvsignore | 2 - doc/manual/Makefile.am | 1 - doc/manual/en/.cvsignore | 2 - doc/manual/en/Makefile.am | 25 - doc/manual/en/sylpheed-1.html | 82 - doc/manual/en/sylpheed-10.html | 43 - doc/manual/en/sylpheed-11.html | 42 - doc/manual/en/sylpheed-12.html | 148 - doc/manual/en/sylpheed-13.html | 35 - doc/manual/en/sylpheed-14.html | 68 - doc/manual/en/sylpheed-15.html | 32 - doc/manual/en/sylpheed-16.html | 98 - doc/manual/en/sylpheed-17.html | 36 - doc/manual/en/sylpheed-18.html | 34 - doc/manual/en/sylpheed-19.html | 48 - doc/manual/en/sylpheed-2.html | 44 - doc/manual/en/sylpheed-20.html | 48 - doc/manual/en/sylpheed-21.html | 34 - doc/manual/en/sylpheed-3.html | 35 - doc/manual/en/sylpheed-4.html | 142 - doc/manual/en/sylpheed-5.html | 37 - doc/manual/en/sylpheed-6.html | 132 - doc/manual/en/sylpheed-7.html | 97 - doc/manual/en/sylpheed-8.html | 48 - doc/manual/en/sylpheed-9.html | 33 - doc/manual/en/sylpheed.html | 185 - doc/manual/ja/.cvsignore | 2 - doc/manual/ja/Makefile.am | 26 - 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 ---------- doc/src/maintainer_guide.txt | 71 - doc/src/readme.txt | 12 - doc/src/rfc1939.txt | 1291 ------ doc/src/rfc2015.txt | 451 -- doc/src/rfc2045.txt | 1739 -------- doc/src/rfc2046.txt | 2467 ----------- doc/src/rfc2047.txt | 843 ---- doc/src/rfc2048.txt | 1180 ------ doc/src/rfc2049.txt | 1347 ------ doc/src/rfc2060.txt | 4595 -------------------- doc/src/rfc2487.txt | 451 -- doc/src/rfc2821.txt | 4427 -------------------- doc/src/rfc2822.txt | 2859 ------------- doc/src/rfc977.txt | 1539 ------- install-sh | 251 -- intl/.cvsignore | 2 - intl/ChangeLog | 4 - intl/Makefile.in | 312 -- intl/VERSION | 1 - intl/bindtextdom.c | 368 -- intl/config.charset | 438 -- intl/dcgettext.c | 57 - intl/dcigettext.c | 1257 ------ intl/dcngettext.c | 59 - intl/dgettext.c | 58 - intl/dngettext.c | 60 - intl/explodename.c | 191 - intl/finddomain.c | 197 - intl/gettext.c | 63 - intl/gettext.h | 101 - intl/gettextP.h | 251 -- intl/hash-string.h | 58 - intl/intl-compat.c | 165 - intl/l10nflist.c | 404 -- intl/libgettext.h | 48 - intl/libgnuintl.h | 127 - intl/loadinfo.h | 108 - intl/loadmsgcat.c | 566 --- intl/localcharset.c | 271 -- intl/locale.alias | 77 - intl/localealias.c | 403 -- intl/ngettext.c | 67 - intl/plural.c | 1325 ------ intl/plural.y | 412 -- intl/ref-add.sin | 31 - intl/ref-del.sin | 26 - intl/textdomain.c | 141 - libkcc/.cvsignore | 3 - libkcc/Makefile.am | 54 - 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 | 4946 ---------------------- missing | 190 - mkinstalldirs | 40 - po/.cvsignore | 6 - po/ChangeLog | 117 - po/Makefile.in.in | 196 - po/POTFILES.in | 78 - po/cs.po | 4271 ------------------- po/de.po | 5173 ----------------------- po/el.po | 4126 ------------------ po/es.po | 5436 ------------------------ po/fr.po | 4296 ------------------- po/it.po | 4076 ------------------ po/ja.po | 4082 ------------------ po/ko.po | 4108 ------------------ po/nl.po | 5157 ----------------------- po/pl.po | 4491 -------------------- po/pt_BR.po | 5207 ----------------------- po/ru.po | 4139 ------------------ po/stamp-cat-id | 1 - po/zh_CN.GB2312.po | 4189 ------------------- po/zh_TW.Big5.po | 4207 ------------------- src/.cvsignore | 14 - src/Makefile.am | 189 - src/about.c | 259 -- src/about.h | 25 - src/account.c | 798 ---- src/account.h | 53 - src/addr_compl.c | 988 ----- src/addr_compl.h | 54 - src/addressbook.c | 3707 ----------------- src/addressbook.h | 192 - src/addressitem.h | 63 - src/alertpanel.c | 317 -- src/alertpanel.h | 57 - src/automaton.c | 82 - src/automaton.h | 57 - src/base64.c | 176 - src/base64.h | 15 - src/codeconv.c | 1168 ------ src/codeconv.h | 155 - src/compose.c | 4955 ---------------------- src/compose.h | 204 - src/customheader.c | 101 - src/customheader.h | 40 - src/defs.h | 100 - src/displayheader.c | 59 - src/displayheader.h | 37 - src/editjpilot.c | 443 -- src/editjpilot.h | 39 - src/editldap.c | 596 --- src/editldap.h | 39 - src/editldap_basedn.c | 335 -- src/editldap_basedn.h | 40 - src/editvcard.c | 325 -- src/editvcard.h | 35 - src/esmtp.c | 166 - src/esmtp.h | 40 - src/export.c | 241 -- src/export.h | 29 - src/filesel.c | 296 -- src/filesel.h | 29 - src/filter.c | 252 -- src/filter.h | 81 - src/filtering.c | 1255 ------ src/filtering.h | 74 - src/folder.c | 1475 ------- src/folder.h | 303 -- src/foldersel.c | 307 -- src/foldersel.h | 31 - src/folderview.c | 2220 ---------- src/folderview.h | 86 - src/grouplistdialog.c | 307 -- src/grouplistdialog.h | 29 - src/gtksctree.c | 538 --- src/gtksctree.h | 64 - src/gtkshruler.c | 210 - src/gtkshruler.h | 63 - src/gtkspell.c | 809 ---- src/gtkspell.h | 53 - src/gtkstext.c | 6220 ---------------------------- src/gtkstext.h | 262 -- src/gtkutils.c | 333 -- src/gtkutils.h | 101 - src/gtkxtext.h | 81 - src/headerview.c | 344 -- src/headerview.h | 55 - src/headerwindow.c | 179 - src/headerwindow.h | 42 - src/html.c | 683 --- src/html.h | 70 - src/imageview.c | 158 - src/imageview.h | 46 - src/imap.c | 2308 ----------- src/imap.h | 130 - src/import.c | 245 -- src/import.h | 29 - src/inc.c | 1123 ----- src/inc.h | 113 - src/inputdialog.c | 224 - src/inputdialog.h | 32 - src/intl.h | 22 - src/jpilot.c | 1264 ------ src/jpilot.h | 171 - src/labelcolors.c | 332 -- src/labelcolors.h | 40 - src/logwindow.c | 159 - src/logwindow.h | 53 - src/main.c | 501 --- src/main.h | 32 - src/mainwindow.c | 2694 ------------ src/mainwindow.h | 162 - src/manage_window.c | 63 - src/manage_window.h | 41 - src/manual.c | 55 - src/manual.h | 31 - src/matcher.c | 1474 ------- src/matcher.h | 127 - src/matcher_parser.h | 71 - src/matcher_parser_lex.h | 47 - src/matcher_parser_lex.l | 118 - src/matcher_parser_parse.y | 743 ---- src/mbox.c | 445 -- src/mbox.h | 47 - src/mbox_folder.c | 2223 ---------- src/mbox_folder.h | 60 - src/md5.c | 433 -- src/md5.h | 51 - src/menu.c | 141 - src/menu.h | 60 - src/messageview.c | 550 --- src/messageview.h | 70 - src/mgutils.c | 403 -- src/mgutils.h | 83 - src/mh.c | 1119 ----- src/mh.h | 73 - src/mimeview.c | 915 ---- src/mimeview.h | 72 - src/news.c | 749 ---- src/news.h | 61 - src/nntp.c | 361 -- src/nntp.h | 98 - src/passphrase.c | 257 -- src/passphrase.h | 27 - src/pixmaps/category.xpm | 35 - src/pixmaps/clip.xpm | 17 - src/pixmaps/complete.xpm | 41 - src/pixmaps/continue.xpm | 76 - src/pixmaps/deleted.xpm | 15 - src/pixmaps/dir-close.xpm | 47 - src/pixmaps/dir-open.xpm | 53 - src/pixmaps/error.xpm | 193 - src/pixmaps/folder.xpm | 80 - src/pixmaps/forwarded.xpm | 23 - src/pixmaps/group.xpm | 47 - src/pixmaps/ignorethread.xpm | 19 - src/pixmaps/inbox.xpm | 25 - src/pixmaps/jpilot.xpm | 25 - src/pixmaps/ldap.xpm | 25 - src/pixmaps/linewrap.xpm | 29 - src/pixmaps/mark.xpm | 16 - 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_reply_to_author.xpm | 127 - src/pixmaps/stock_mail_send.xpm | 162 - src/pixmaps/stock_mail_send_queue.xpm | 244 -- src/pixmaps/stock_news_compose.xpm | 64 - 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/pixmaps/vcard.xpm | 25 - src/pop.c | 505 --- src/pop.h | 100 - src/prefs.c | 802 ---- src/prefs.h | 156 - src/prefs_account.c | 1843 --------- src/prefs_account.h | 150 - src/prefs_common.c | 3430 --------------- src/prefs_common.h | 219 - src/prefs_customheader.c | 630 --- src/prefs_customheader.h | 29 - src/prefs_display_header.c | 655 --- src/prefs_display_header.h | 27 - src/prefs_filter.c | 856 ---- src/prefs_filter.h | 27 - src/prefs_filtering.c | 1176 ------ src/prefs_filtering.h | 29 - src/prefs_folder_item.c | 372 -- src/prefs_folder_item.h | 65 - src/prefs_matcher.c | 1474 ------- src/prefs_matcher.h | 36 - src/prefs_scoring.c | 760 ---- src/prefs_scoring.h | 35 - src/procheader.c | 781 ---- src/procheader.h | 82 - src/procmime.c | 910 ---- src/procmime.h | 145 - src/procmsg.c | 841 ---- src/procmsg.h | 236 -- src/progressdialog.c | 135 - src/progressdialog.h | 46 - src/quote_fmt.h | 9 - src/quote_fmt_lex.h | 47 - src/quote_fmt_lex.l | 46 - src/quote_fmt_parse.y | 415 -- src/recv.c | 220 - src/recv.h | 46 - src/rfc2015.c | 1231 ------ src/rfc2015.h | 39 - src/rfc822.c | 424 -- src/rfc822.h | 3 - src/scoring.c | 442 -- src/scoring.h | 38 - src/select-keys.c | 526 --- src/select-keys.h | 29 - src/send.c | 529 --- src/send.h | 32 - src/session.c | 43 - src/session.h | 57 - src/setup.c | 95 - src/setup.h | 29 - src/sigstatus.c | 243 -- src/sigstatus.h | 33 - src/simple-gettext.c | 386 -- src/smtp.c | 183 - src/smtp.h | 47 - src/socket.c | 634 --- src/socket.h | 109 - src/sourcewindow.c | 174 - src/sourcewindow.h | 45 - src/ssl.c | 139 - src/ssl.h | 46 - src/statusbar.c | 124 - src/statusbar.h | 38 - src/summary_search.c | 381 -- src/summary_search.h | 31 - src/summaryview.c | 4193 ------------------- src/summaryview.h | 210 - src/syldap.c | 1056 ----- src/syldap.h | 98 - src/template.c | 174 - src/template.h | 38 - src/textview.c | 1302 ------ src/textview.h | 77 - src/unmime.c | 995 ----- src/unmime.h | 23 - src/utils.c | 2095 ---------- src/utils.h | 304 -- src/uuencode.c | 101 - src/uuencode.h | 24 - src/vcard.c | 691 --- src/vcard.h | 92 - src/xml.c | 511 --- src/xml.h | 94 - sylpheed.desktop | 7 - sylpheed.png | Bin 3419 -> 0 bytes sylpheed.spec.in | 264 -- tools/README | 85 - tools/filter_conv.pl | 55 - tools/gif2xface.pl | 100 - tools/ldif-to-xml.py | 102 - 430 files changed, 221116 deletions(-) delete mode 100644 .cvsignore delete mode 100644 ABOUT-NLS delete mode 100644 AUTHORS delete mode 100644 COPYING delete mode 100644 ChangeLog delete mode 100644 ChangeLog.claws delete mode 100644 ChangeLog.jp delete mode 100644 INSTALL delete mode 100644 INSTALL.jp delete mode 100644 Makefile.am delete mode 100644 NEWS delete mode 100644 README delete mode 100644 README.jp delete mode 100644 TODO delete mode 100644 TODO.jp delete mode 100644 ac/.cvsignore delete mode 100644 ac/Makefile.am delete mode 100644 ac/aclocal-include.m4 delete mode 100644 ac/check-type.m4 delete mode 100644 ac/gnupg-check-typedef.m4 delete mode 100644 ac/gpgme.m4 delete mode 100644 acconfig.h delete mode 100644 autogen.sh delete mode 100644 config.guess delete mode 100644 config.sub delete mode 100644 configure.in delete mode 100644 doc/manual/.cvsignore delete mode 100644 doc/manual/Makefile.am delete mode 100644 doc/manual/en/.cvsignore delete mode 100644 doc/manual/en/Makefile.am delete mode 100644 doc/manual/en/sylpheed-1.html delete mode 100644 doc/manual/en/sylpheed-10.html delete mode 100644 doc/manual/en/sylpheed-11.html delete mode 100644 doc/manual/en/sylpheed-12.html delete mode 100644 doc/manual/en/sylpheed-13.html delete mode 100644 doc/manual/en/sylpheed-14.html delete mode 100644 doc/manual/en/sylpheed-15.html delete mode 100644 doc/manual/en/sylpheed-16.html delete mode 100644 doc/manual/en/sylpheed-17.html delete mode 100644 doc/manual/en/sylpheed-18.html delete mode 100644 doc/manual/en/sylpheed-19.html delete mode 100644 doc/manual/en/sylpheed-2.html delete mode 100644 doc/manual/en/sylpheed-20.html delete mode 100644 doc/manual/en/sylpheed-21.html delete mode 100644 doc/manual/en/sylpheed-3.html delete mode 100644 doc/manual/en/sylpheed-4.html delete mode 100644 doc/manual/en/sylpheed-5.html delete mode 100644 doc/manual/en/sylpheed-6.html delete mode 100644 doc/manual/en/sylpheed-7.html delete mode 100644 doc/manual/en/sylpheed-8.html delete mode 100644 doc/manual/en/sylpheed-9.html delete mode 100644 doc/manual/en/sylpheed.html delete mode 100644 doc/manual/ja/.cvsignore delete mode 100644 doc/manual/ja/Makefile.am delete mode 100644 doc/manual/ja/sylpheed-1.html delete mode 100644 doc/manual/ja/sylpheed-10.html delete mode 100644 doc/manual/ja/sylpheed-11.html delete mode 100644 doc/manual/ja/sylpheed-12.html delete mode 100644 doc/manual/ja/sylpheed-13.html delete mode 100644 doc/manual/ja/sylpheed-14.html delete mode 100644 doc/manual/ja/sylpheed-15.html delete mode 100644 doc/manual/ja/sylpheed-16.html delete mode 100644 doc/manual/ja/sylpheed-17.html delete mode 100644 doc/manual/ja/sylpheed-2.html delete mode 100644 doc/manual/ja/sylpheed-3.html delete mode 100644 doc/manual/ja/sylpheed-4.html delete mode 100644 doc/manual/ja/sylpheed-5.html delete mode 100644 doc/manual/ja/sylpheed-6.html delete mode 100644 doc/manual/ja/sylpheed-7.html delete mode 100644 doc/manual/ja/sylpheed-8.html delete mode 100644 doc/manual/ja/sylpheed-9.html delete mode 100644 doc/manual/ja/sylpheed.html delete mode 100644 doc/manual/ja/sylpheed.sgml delete mode 100644 doc/src/maintainer_guide.txt delete mode 100644 doc/src/readme.txt delete mode 100644 doc/src/rfc1939.txt delete mode 100644 doc/src/rfc2015.txt delete mode 100644 doc/src/rfc2045.txt delete mode 100644 doc/src/rfc2046.txt delete mode 100644 doc/src/rfc2047.txt delete mode 100644 doc/src/rfc2048.txt delete mode 100644 doc/src/rfc2049.txt delete mode 100644 doc/src/rfc2060.txt delete mode 100644 doc/src/rfc2487.txt delete mode 100644 doc/src/rfc2821.txt delete mode 100644 doc/src/rfc2822.txt delete mode 100644 doc/src/rfc977.txt delete mode 100644 install-sh delete mode 100644 intl/.cvsignore delete mode 100644 intl/ChangeLog delete mode 100644 intl/Makefile.in delete mode 100644 intl/VERSION delete mode 100644 intl/bindtextdom.c delete mode 100644 intl/config.charset delete mode 100644 intl/dcgettext.c delete mode 100644 intl/dcigettext.c delete mode 100644 intl/dcngettext.c delete mode 100644 intl/dgettext.c delete mode 100644 intl/dngettext.c delete mode 100644 intl/explodename.c delete mode 100644 intl/finddomain.c delete mode 100644 intl/gettext.c delete mode 100644 intl/gettext.h delete mode 100644 intl/gettextP.h delete mode 100644 intl/hash-string.h delete mode 100644 intl/intl-compat.c delete mode 100644 intl/l10nflist.c delete mode 100644 intl/libgettext.h delete mode 100644 intl/libgnuintl.h delete mode 100644 intl/loadinfo.h delete mode 100644 intl/loadmsgcat.c delete mode 100644 intl/localcharset.c delete mode 100644 intl/locale.alias delete mode 100644 intl/localealias.c delete mode 100644 intl/ngettext.c delete mode 100644 intl/plural.c delete mode 100644 intl/plural.y delete mode 100644 intl/ref-add.sin delete mode 100644 intl/ref-del.sin delete mode 100644 intl/textdomain.c delete mode 100644 libkcc/.cvsignore delete mode 100644 libkcc/Makefile.am delete mode 100644 libkcc/Makefile.std delete mode 100644 libkcc/README delete mode 100644 libkcc/ROUTINE delete mode 100644 libkcc/buffer.c delete mode 100644 libkcc/check.c delete mode 100644 libkcc/compare.c delete mode 100644 libkcc/dec.c delete mode 100644 libkcc/euc.c delete mode 100644 libkcc/filter.c delete mode 100644 libkcc/getstr.c delete mode 100644 libkcc/guess.c delete mode 100644 libkcc/jis.c delete mode 100644 libkcc/kcc.h delete mode 100644 libkcc/libkcc.h delete mode 100644 libkcc/out.c delete mode 100644 libkcc/outchar.c delete mode 100644 libkcc/outsjis.c delete mode 100644 libkcc/setfunc.c delete mode 100644 libkcc/showcode.c delete mode 100644 libkcc/sjis.c delete mode 100644 libkcc/test.c delete mode 100644 libkcc/test_check.c delete mode 100644 libkcc/test_file delete mode 100644 libkcc/test_file.sjis delete mode 100644 libkcc/test_filter.c delete mode 100644 libkcc/testfile delete mode 100644 ltconfig delete mode 100644 ltmain.sh delete mode 100644 missing delete mode 100644 mkinstalldirs delete mode 100644 po/.cvsignore delete mode 100644 po/ChangeLog delete mode 100644 po/Makefile.in.in delete mode 100644 po/POTFILES.in delete mode 100644 po/cs.po delete mode 100644 po/de.po delete mode 100644 po/el.po delete mode 100644 po/es.po delete mode 100644 po/fr.po delete mode 100644 po/it.po delete mode 100644 po/ja.po delete mode 100644 po/ko.po delete mode 100644 po/nl.po delete mode 100644 po/pl.po delete mode 100644 po/pt_BR.po delete mode 100644 po/ru.po delete mode 100644 po/stamp-cat-id delete mode 100644 po/zh_CN.GB2312.po delete mode 100644 po/zh_TW.Big5.po delete mode 100644 src/.cvsignore delete mode 100644 src/Makefile.am delete mode 100644 src/about.c delete mode 100644 src/about.h delete mode 100644 src/account.c delete mode 100644 src/account.h delete mode 100644 src/addr_compl.c delete mode 100644 src/addr_compl.h delete mode 100644 src/addressbook.c delete mode 100644 src/addressbook.h delete mode 100644 src/addressitem.h delete mode 100644 src/alertpanel.c delete mode 100644 src/alertpanel.h delete mode 100644 src/automaton.c delete mode 100644 src/automaton.h delete mode 100644 src/base64.c delete mode 100644 src/base64.h delete mode 100644 src/codeconv.c delete mode 100644 src/codeconv.h delete mode 100644 src/compose.c delete mode 100644 src/compose.h delete mode 100644 src/customheader.c delete mode 100644 src/customheader.h delete mode 100644 src/defs.h delete mode 100644 src/displayheader.c delete mode 100644 src/displayheader.h delete mode 100644 src/editjpilot.c delete mode 100644 src/editjpilot.h delete mode 100644 src/editldap.c delete mode 100644 src/editldap.h delete mode 100644 src/editldap_basedn.c delete mode 100644 src/editldap_basedn.h delete mode 100644 src/editvcard.c delete mode 100644 src/editvcard.h delete mode 100644 src/esmtp.c delete mode 100644 src/esmtp.h delete mode 100644 src/export.c delete mode 100644 src/export.h delete mode 100644 src/filesel.c delete mode 100644 src/filesel.h delete mode 100644 src/filter.c delete mode 100644 src/filter.h delete mode 100644 src/filtering.c delete mode 100644 src/filtering.h delete mode 100644 src/folder.c delete mode 100644 src/folder.h delete mode 100644 src/foldersel.c delete mode 100644 src/foldersel.h delete mode 100644 src/folderview.c delete mode 100644 src/folderview.h delete mode 100644 src/grouplistdialog.c delete mode 100644 src/grouplistdialog.h delete mode 100644 src/gtksctree.c delete mode 100644 src/gtksctree.h delete mode 100644 src/gtkshruler.c delete mode 100644 src/gtkshruler.h delete mode 100644 src/gtkspell.c delete mode 100644 src/gtkspell.h delete mode 100644 src/gtkstext.c delete mode 100644 src/gtkstext.h delete mode 100644 src/gtkutils.c delete mode 100644 src/gtkutils.h delete mode 100644 src/gtkxtext.h delete mode 100644 src/headerview.c delete mode 100644 src/headerview.h delete mode 100644 src/headerwindow.c delete mode 100644 src/headerwindow.h delete mode 100644 src/html.c delete mode 100644 src/html.h delete mode 100644 src/imageview.c delete mode 100644 src/imageview.h delete mode 100644 src/imap.c delete mode 100644 src/imap.h delete mode 100644 src/import.c delete mode 100644 src/import.h delete mode 100644 src/inc.c delete mode 100644 src/inc.h delete mode 100644 src/inputdialog.c delete mode 100644 src/inputdialog.h delete mode 100644 src/intl.h delete mode 100644 src/jpilot.c delete mode 100644 src/jpilot.h delete mode 100644 src/labelcolors.c delete mode 100644 src/labelcolors.h delete mode 100644 src/logwindow.c delete mode 100644 src/logwindow.h delete mode 100644 src/main.c delete mode 100644 src/main.h delete mode 100644 src/mainwindow.c delete mode 100644 src/mainwindow.h delete mode 100644 src/manage_window.c delete mode 100644 src/manage_window.h delete mode 100644 src/manual.c delete mode 100644 src/manual.h delete mode 100644 src/matcher.c delete mode 100644 src/matcher.h delete mode 100644 src/matcher_parser.h delete mode 100644 src/matcher_parser_lex.h delete mode 100644 src/matcher_parser_lex.l delete mode 100644 src/matcher_parser_parse.y delete mode 100644 src/mbox.c delete mode 100644 src/mbox.h delete mode 100644 src/mbox_folder.c delete mode 100644 src/mbox_folder.h delete mode 100644 src/md5.c delete mode 100644 src/md5.h delete mode 100644 src/menu.c delete mode 100644 src/menu.h delete mode 100644 src/messageview.c delete mode 100644 src/messageview.h delete mode 100644 src/mgutils.c delete mode 100644 src/mgutils.h delete mode 100644 src/mh.c delete mode 100644 src/mh.h delete mode 100644 src/mimeview.c delete mode 100644 src/mimeview.h delete mode 100644 src/news.c delete mode 100644 src/news.h delete mode 100644 src/nntp.c delete mode 100644 src/nntp.h delete mode 100644 src/passphrase.c delete mode 100644 src/passphrase.h delete mode 100644 src/pixmaps/category.xpm delete mode 100644 src/pixmaps/clip.xpm delete mode 100644 src/pixmaps/complete.xpm delete mode 100644 src/pixmaps/continue.xpm delete mode 100644 src/pixmaps/deleted.xpm delete mode 100644 src/pixmaps/dir-close.xpm delete mode 100644 src/pixmaps/dir-open.xpm delete mode 100644 src/pixmaps/error.xpm delete mode 100644 src/pixmaps/folder.xpm delete mode 100644 src/pixmaps/forwarded.xpm delete mode 100644 src/pixmaps/group.xpm delete mode 100644 src/pixmaps/ignorethread.xpm delete mode 100644 src/pixmaps/inbox.xpm delete mode 100644 src/pixmaps/jpilot.xpm delete mode 100644 src/pixmaps/ldap.xpm delete mode 100644 src/pixmaps/linewrap.xpm delete mode 100644 src/pixmaps/mark.xpm delete mode 100644 src/pixmaps/new.xpm delete mode 100644 src/pixmaps/outbox.xpm delete mode 100644 src/pixmaps/regular.xpm delete mode 100644 src/pixmaps/replied.xpm delete mode 100644 src/pixmaps/stock_close.xpm delete mode 100644 src/pixmaps/stock_down_arrow.xpm delete mode 100644 src/pixmaps/stock_exec.xpm delete mode 100644 src/pixmaps/stock_mail.xpm delete mode 100644 src/pixmaps/stock_mail_attach.xpm delete mode 100644 src/pixmaps/stock_mail_compose.xpm delete mode 100644 src/pixmaps/stock_mail_forward.xpm delete mode 100644 src/pixmaps/stock_mail_receive.xpm delete mode 100644 src/pixmaps/stock_mail_receive_all.xpm delete mode 100644 src/pixmaps/stock_mail_reply.xpm delete mode 100644 src/pixmaps/stock_mail_reply_to_all.xpm delete mode 100644 src/pixmaps/stock_mail_reply_to_author.xpm delete mode 100644 src/pixmaps/stock_mail_send.xpm delete mode 100644 src/pixmaps/stock_mail_send_queue.xpm delete mode 100644 src/pixmaps/stock_news_compose.xpm delete mode 100644 src/pixmaps/stock_paste.xpm delete mode 100644 src/pixmaps/stock_preferences.xpm delete mode 100644 src/pixmaps/stock_properties.xpm delete mode 100644 src/pixmaps/stock_search.xpm delete mode 100644 src/pixmaps/stock_trash.xpm delete mode 100644 src/pixmaps/stock_up_arrow.xpm delete mode 100644 src/pixmaps/sylpheed-logo.xpm delete mode 100644 src/pixmaps/tb_address_book.xpm delete mode 100644 src/pixmaps/trash.xpm delete mode 100644 src/pixmaps/unread.xpm delete mode 100644 src/pixmaps/vcard.xpm delete mode 100644 src/pop.c delete mode 100644 src/pop.h delete mode 100644 src/prefs.c delete mode 100644 src/prefs.h delete mode 100644 src/prefs_account.c delete mode 100644 src/prefs_account.h delete mode 100644 src/prefs_common.c delete mode 100644 src/prefs_common.h delete mode 100644 src/prefs_customheader.c delete mode 100644 src/prefs_customheader.h delete mode 100644 src/prefs_display_header.c delete mode 100644 src/prefs_display_header.h delete mode 100644 src/prefs_filter.c delete mode 100644 src/prefs_filter.h delete mode 100644 src/prefs_filtering.c delete mode 100644 src/prefs_filtering.h delete mode 100644 src/prefs_folder_item.c delete mode 100644 src/prefs_folder_item.h delete mode 100644 src/prefs_matcher.c delete mode 100644 src/prefs_matcher.h delete mode 100644 src/prefs_scoring.c delete mode 100644 src/prefs_scoring.h delete mode 100644 src/procheader.c delete mode 100644 src/procheader.h delete mode 100644 src/procmime.c delete mode 100644 src/procmime.h delete mode 100644 src/procmsg.c delete mode 100644 src/procmsg.h delete mode 100644 src/progressdialog.c delete mode 100644 src/progressdialog.h delete mode 100644 src/quote_fmt.h delete mode 100644 src/quote_fmt_lex.h delete mode 100644 src/quote_fmt_lex.l delete mode 100644 src/quote_fmt_parse.y delete mode 100644 src/recv.c delete mode 100644 src/recv.h delete mode 100644 src/rfc2015.c delete mode 100644 src/rfc2015.h delete mode 100644 src/rfc822.c delete mode 100644 src/rfc822.h delete mode 100644 src/scoring.c delete mode 100644 src/scoring.h delete mode 100644 src/select-keys.c delete mode 100644 src/select-keys.h delete mode 100644 src/send.c delete mode 100644 src/send.h delete mode 100644 src/session.c delete mode 100644 src/session.h delete mode 100644 src/setup.c delete mode 100644 src/setup.h delete mode 100644 src/sigstatus.c delete mode 100644 src/sigstatus.h delete mode 100644 src/simple-gettext.c delete mode 100644 src/smtp.c delete mode 100644 src/smtp.h delete mode 100644 src/socket.c delete mode 100644 src/socket.h delete mode 100644 src/sourcewindow.c delete mode 100644 src/sourcewindow.h delete mode 100644 src/ssl.c delete mode 100644 src/ssl.h delete mode 100644 src/statusbar.c delete mode 100644 src/statusbar.h delete mode 100644 src/summary_search.c delete mode 100644 src/summary_search.h delete mode 100644 src/summaryview.c delete mode 100644 src/summaryview.h delete mode 100644 src/syldap.c delete mode 100644 src/syldap.h delete mode 100644 src/template.c delete mode 100644 src/template.h delete mode 100644 src/textview.c delete mode 100644 src/textview.h delete mode 100644 src/unmime.c delete mode 100644 src/unmime.h delete mode 100644 src/utils.c delete mode 100644 src/utils.h delete mode 100644 src/uuencode.c delete mode 100644 src/uuencode.h delete mode 100644 src/vcard.c delete mode 100644 src/vcard.h delete mode 100644 src/xml.c delete mode 100644 src/xml.h delete mode 100644 sylpheed.desktop delete mode 100644 sylpheed.png delete mode 100644 sylpheed.spec.in delete mode 100644 tools/README delete mode 100644 tools/filter_conv.pl delete mode 100644 tools/gif2xface.pl delete mode 100644 tools/ldif-to-xml.py diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index 5f2fcf229..000000000 --- a/.cvsignore +++ /dev/null @@ -1,17 +0,0 @@ -config.log -config.h -config.h.in -config.cache -libtool -config.status -stamp-h -Makefile -sylpheed.spec -configure -Makefile.in -aclocal.m4 -stamp-h -stamp-h.in -tags -TAGS -*.swp diff --git a/ABOUT-NLS b/ABOUT-NLS deleted file mode 100644 index 7e6b38093..000000000 --- a/ABOUT-NLS +++ /dev/null @@ -1,296 +0,0 @@ -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. - -Quick configuration advice -========================== - - If you want to exploit the full power of internationalization, you -should configure it using - - ./configure --with-included-gettext - -to force usage of internationalizing routines provided within this -package, despite the existence of internationalizing capabilities in the -operating system where this package is being installed. So far, only -the `gettext' implementation in the GNU C library version 2 provides as -many features (such as locale alias, message inheritance, automatic -charset conversion or plural form handling) as the implementation here. -It is also not possible to offer this additional functionality on top -of a `catgets' implementation. Future versions of GNU `gettext' will -very likely convey even more functionality. So it might be a good idea -to change to GNU `gettext' as soon as possible. - - So you need _not_ provide this option if you are using GNU libc 2 or -you have installed a recent copy of the GNU gettext package with the -included `libintl'. - -INSTALL Matters -=============== - - Some packages are "localizable" when properly installed; the -programs they contain can be made to speak your own native language. -Most such packages use GNU `gettext'. Other packages have their own -ways to internationalization, predating GNU `gettext'. - - By default, this package will be installed to allow translation of -messages. It will automatically detect whether the system already -provides the GNU `gettext' functions. If not, the GNU `gettext' own -library will be used. This library is wholly contained within this -package, usually in the `intl/' subdirectory, so prior installation of -the GNU `gettext' package is _not_ required. Installers may use -special options at configuration time for changing the default -behaviour. The commands: - - ./configure --with-included-gettext - ./configure --disable-nls - -will respectively bypass any pre-existing `gettext' to use the -internationalizing routines provided within this package, or else, -_totally_ disable translation of messages. - - When you already have GNU `gettext' installed on your system and run -configure without an option for your new package, `configure' will -probably detect the previously built and installed `libintl.a' file and -will decide to use this. This might be not what is desirable. You -should use the more recent version of the GNU `gettext' library. I.e. -if the file `intl/VERSION' shows that the library which comes with this -package is more recent, you should use - - ./configure --with-included-gettext - -to prevent auto-detection. - - The configuration process will not test for the `catgets' function -and therefore it will not be used. The reason is that even an -emulation of `gettext' on top of `catgets' could not provide all the -extensions of the GNU `gettext' library. - - Internationalized packages have usually many `po/LL.po' files, where -LL gives an ISO 639 two-letter code identifying the language. Unless -translations have been forbidden at `configure' time by using the -`--disable-nls' switch, all available translations are installed -together with the package. However, the environment variable `LINGUAS' -may be set, prior to configuration, to limit the installed set. -`LINGUAS' should then contain a space separated list of two-letter -codes, stating which languages are allowed. - -Using This Package -================== - - As a user, if your language has been installed for this package, you -only have to set the `LANG' environment variable to the appropriate -`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, -and `CC' is an ISO 3166 two-letter country code. For example, let's -suppose that you speak German and live in Germany. At the shell -prompt, merely execute `setenv LANG de_DE' (in `csh'), -`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). -This can be done from your `.login' or `.profile' file, once and for -all. - - You might think that the country code specification is redundant. -But in fact, some languages have dialects in different countries. For -example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The -country code serves to distinguish the dialects. - - Not all programs have translations for all languages. By default, an -English message is shown in place of a nonexistent translation. If you -understand other languages, you can set up a priority list of languages. -This is done through a different environment variable, called -`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' -for the purpose of message handling, but you still need to have `LANG' -set to the primary language; this is required by other parts of the -system libraries. For example, some Swedish users who would rather -read translations in German than English for when Swedish is not -available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. - - In the `LANGUAGE' environment variable, but not in the `LANG' -environment variable, `LL_CC' combinations can be abbreviated as `LL' -to denote the language's main dialect. For example, `de' is equivalent -to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' -(Portuguese as spoken in Portugal) in this context. - -Translating Teams -================= - - For the Free Translation Project to be a success, we need interested -people who like their own language and write it well, and who are also -able to synergize with other translators speaking the same language. -Each translation team has its own mailing list. The up-to-date list of -teams can be found at the Free Translation Project's homepage, -`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" -area. - - If you'd like to volunteer to _work_ at translating messages, you -should become a member of the translating team for your own language. -The subscribing address is _not_ the same as the list itself, it has -`-request' appended. For example, speakers of Swedish can send a -message to `sv-request@li.org', having this message body: - - subscribe - - Keep in mind that team members are expected to participate -_actively_ in translations, or at solving translational difficulties, -rather than merely lurking around. If your team does not exist yet and -you want to start one, or if you are unsure about what to do or how to -get started, please write to `translation@iro.umontreal.ca' to reach the -coordinator for all translator teams. - - The English team is special. It works at improving and uniformizing -the terminology in use. Proven linguistic skill are praised more than -programming skill, here. - -Available Packages -================== - - Languages are not equally supported in all packages. The following -matrix shows the current state of internationalization, as of May 2001. -The matrix shows, in regard of each package, for which languages PO -files have been submitted to translation coordination, with a -translation percentage of at least 50%. - - Ready PO files bg cs da de el en eo es et fi fr gl hr id it - +----------------------------------------------+ - a2ps | [] [] | - bash | [] [] [] [] | - bison | [] [] [] [] | - clisp | [] [] [] [] | - cpio | [] [] [] [] | - diffutils | [] [] [] [] [] [] [] | - enscript | [] [] | - error | [] | - fileutils | [] [] [] [] [] [] [] | - findutils | [] [] [] [] [] [] [] [] | - flex | [] [] [] | - gawk | | - gcal | | - gcc | [] | - gettext | [] [] [] [] [] [] [] [] [] | - gnupg | [] [] [] [] [] | - grep | [] [] [] | - hello | [] [] [] [] [] [] [] [] [] | - id-utils | [] [] | - indent | [] [] [] [] [] | - libc | [] [] [] [] [] [] [] [] | - lilypond | | - lynx | [] [] [] | - m4 | [] [] [] [] [] [] [] | - make | [] [] [] [] | - parted | [] [] | - ptx | [] [] [] [] [] [] [] | - python | | - recode | [] [] [] [] [] [] [] [] | - sed | [] [] [] [] [] [] [] [] [] | - sh-utils | [] [] [] [] [] [] [] [] [] | - sharutils | [] [] [] [] [] [] [] | - soundtracker | | - sp | | - tar | [] [] [] [] [] [] [] [] | - texinfo | [] [] [] [] | - textutils | [] [] [] [] [] [] [] | - util-linux | [] | - wdiff | [] [] [] [] [] [] [] | - wget | [] [] [] [] [] [] [] [] [] | - +----------------------------------------------+ - bg cs da de el en eo es et fi fr gl hr id it - 0 14 21 27 10 1 8 20 13 1 28 17 0 9 11 - - ja ko lv nl no pl pt pt_BR ru sk sl sv tr zh - +----------------------------------------------+ - a2ps | [] [] [] | 5 - bash | | 4 - bison | [] [] [] | 7 - clisp | [] | 5 - cpio | [] [] [] [] [] | 9 - diffutils | [] [] [] | 10 - enscript | [] [] [] | 5 - error | | 1 - fileutils | [] [] [] [] [] [] [] [] [] | 16 - findutils | [] [] [] [] [] [] | 14 - flex | [] [] [] | 6 - gawk | | 0 - gcal | | 0 - gcc | [] | 2 - gettext | [] [] [] [] [] [] [] [] [] [] | 19 - gnupg | [] [] [] | 8 - grep | | 3 - hello | [] [] [] [] [] [] [] [] | 17 - id-utils | [] [] [] | 5 - indent | [] [] [] [] [] [] [] | 12 - libc | [] [] [] [] [] [] [] | 15 - lilypond | [] | 1 - lynx | [] [] [] [] [] | 8 - m4 | [] [] [] [] [] | 12 - make | [] [] [] [] [] | 9 - parted | [] [] [] | 5 - ptx | [] [] [] [] [] [] | 13 - python | | 0 - recode | [] [] [] | 11 - sed | [] [] [] [] [] [] [] | 16 - sh-utils | [] [] [] [] [] [] [] [] [] [] | 19 - sharutils | [] [] [] [] | 11 - soundtracker | | 0 - sp | | 0 - tar | [] [] [] [] [] [] [] [] | 16 - texinfo | [] [] | 6 - textutils | [] [] [] [] [] [] [] [] | 15 - util-linux | [] | 2 - wdiff | [] [] [] [] [] | 12 - wget | [] [] [] [] [] [] [] [] | 17 - +----------------------------------------------+ - 29 teams ja ko lv nl no pl pt pt_BR ru sk sl sv tr zh - 40 domains 18 8 0 23 6 16 1 15 26 9 9 20 2 3 336 - - 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 May 2001 seems to be old, you may fetch a more recent copy of -this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date -matrix with full percentage details can be found at -`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. - -Using `gettext' in new packages -=============================== - - If you are writing a freely available program and want to -internationalize it you are welcome to use GNU `gettext' in your -package. Of course the GNU Public License applies to your sources from -then if you include `gettext' directly in your distribution on but -since you are writing free software anyway this is no restriction. - - Once the sources are change appropriately and the setup can handle to -use of `gettext' the only thing missing are the translations. The Free -Translation Project is also available for packages which are not -developed inside the GNU project. Therefore the information given above -applies also for every other Free Software Project. Contact -`translation@iro.umontreal.ca' to make the `.pot' files available to -the translation teams. - diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index cd7c93df5..000000000 --- a/AUTHORS +++ /dev/null @@ -1,81 +0,0 @@ -main-branch (http://sylpheed.good-day.net) - - Hiroyuki Yamamoto - - -claws-branch (http://sylpheed-claws.sourceforge.net) - - Hoa viet Dinh - Match Grun - Christoph Hohmann - Alfons Hoogervorst - Darko Koruga - Paul Mangan - Sergey Vlasov - Hiroyuki Yamamoto - -sylpheed-w32 (http://www.gnupg.org/cvs-access.html) - - Werner Koch - -user manuals - - Yoichi Imai (Japanese) - Paul Kater (English) - -contributors (beside the above; based on Changelog) - - Alte - Pierric Descamps - Ohmasa - Stephen Anthony - HIRAMATSU Masami - Jorge Van Hemelryck - TAKANO - Masahiro Tomita - Mathias Intemann - Chideok Hwang - Marc Hoper - David Mehrmann - Setoh - Yuuki NINOMIYA - Suzuki Mio - Ishihara - Jason McCarver - Martin Schaaf - Sakamoto - Hiramatu - John E.P. Hynes - Maki - Takahashi - Leandro Pereira - Nishimura - Yoichi Imai - Tsutsui - Yanase - TOGAWA - Higuchi - Paul Rolland - KUROSAWA - NAKAGAWA - HIROSHIMA - Tanaka - Hashimoto - T. Yamamoto - YAMAGUCHI - Tomita - Nishiyama - Michihide Hotta - Nishika - shigeri - Tajiri - Kazunao Wakai - Rodrigo Dias Arruda Senra - Fabio Junior Beneditto - Satoshi Nagayasu - Jens Oberender - Ricardo Mones Lastra - Henrik Carlqvist - Don Quijote - David Looney - Eric Limpens diff --git a/COPYING b/COPYING deleted file mode 100644 index 9a799a5f1..000000000 --- a/COPYING +++ /dev/null @@ -1,304 +0,0 @@ -The code in this distribution is Copyright 1999-2001 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. - -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 deleted file mode 100644 index 732ae7793..000000000 --- a/ChangeLog +++ /dev/null @@ -1,4498 +0,0 @@ -2001-08-21 - - * src/pop.c: pop3_getsize_list_recv(), pop3_retr_recv(), - pop3_delete_recv(): don't try to receive messages which are not - exist. - -2001-08-21 - - * src/mainwindow.c: main_window_lock(), main_window_unlock(): - removed the whole menubar locking. - main_window_set_menu_sensitive(): process the sensitivity change - with a table, and deal with locking. - -2001-08-20 - - * src/summaryview.[ch]: summary_get_selection_type(): new. - It returns the current selection state of summary view. - summary_key_pressed(): abort on some commands if main window - is locked. - * src/mainwindow.[ch]: main_window_lock(), main_window_unlock(): - increase/decrease the lock count. - -2001-08-19 - - * src/prefs_filter.c: prefs_filter_create(): added List-Id to the - default header list. - * src/prefs_common.[ch]: added the option for receive dialog mode - to the Interface tab. - * src/inc.[ch]: inc_progress_dialog_create(): don't make the dialog - transient, and show dialog only if the setting is - RECV_DIALOG_ALWAYS, or RECV_DIALOG_ACTIVE and a window is active. - * src/mainwindow.[ch]: main_window_lock(), main_window_unlock(): - new. Lock / unlock the user-interface. - * src/progressdialog.c: progress_dialog_create(): don't make the - dialog modal. - -2001-08-18 - - * src/folderview.c: folderview_update_node(): suppressed unnecessary - recursive call. - * src/menu.[ch]: menu_button_position(): new. It calculates the - position of popup menu. - * src/mainwindow.c: toolbar_account_button_pressed(), - ac_label_button_pressed(): put the popup menu to the correct - position. Change the style of the button while opening the menu. - ac_menu_popup_closed(): new function called on selection_done - event. - * src/gtkutils.c: gtkut_ctree_node_next(): fixed a crash bug when - node == NULL. - * src/summaryview.c: applied the summary fix patch from Sergey Vlasov - (thanks!). - Fixed the bug that didn't select previous message in refresh mode - if threads were not expanded. - summary_select_node(): new. - * src/inc.c: applied the summary view update optimization patch from - Sergey Vlasov (thanks!). - If no new messages are received, don't perform summary refreshing. - In addition to the Vlasov's patch, POP3 receive information is - also used. - * src/inc.h: added a new member cur_total_num to Pop3State. - * src/pop.c: pop3_retr_recv(): increase state->cur_total_num. - -2001-08-14 - - * version 0.5.3 - -2001-08-14 - - * src/summaryview.c: summary_set_row_marks(): got the color of - unread row set properly. - * src/folderview.c: foldreview_update_node(): don't use - gtk_style_copy(), and reuse previously allocated styles. - * README, README.jp: modified. - -2001-08-14 - - * src/pop.c: pop3_getsize_list_recv(): fixed a remotly exploitable - memory corruption bug (thanks to David Looney). - * src/inc.c: inc_all_account_mail(): call inc_finished() even if - there are no enabled accounts, or local spool only. - * src/summaryview.c: applied the summary update improvement patch - from Sergey Vlasov (thanks!). It keeps the position of the - message displayed. Selected and displayed message are also kept. - summary_get_msgnum(): new. - summary_get_current_msgnum(): removed. - summary_select_by_msgnum(): don't display the message. - * src/account.c: added "Get all" column. - account_clist_set_row(): show default and get-all flags with the - mark icon. - * src/utils.c: to_human_readable(): increased the number of decimals - of MB and GB to 2. - -2001-08-13 - - * implemented the long-awaited :) "Add sender to address book" feature. - * src/address.[ch]: added the argument for remarks to - address_item_new(). - address_get_folder_list(): new. It traverses the address tree and - returns the folder list. - address_delete_object(): modified so that it removes the node - from the tree. - * src/addressbook.[ch]: addressbook_add_submenu(): new. It creates - a address folder menu and attaches it to the menu item. - addressbook_refresh(): reload the address book folder tree. - * src/summaryview.c: summary_set_add_sender_menu(): new. It attaches - the menu to add sender to address book. - summary_button_pressed(): call summary_set_add_sender_menu() - before popup the menu. - -2001-08-12 - - * src/summaryview.c: summary_thread_build(): fixed a bug that locked - up the process. Optimized the initial thread build. - -2001-08-12 - - * src/summaryview.c: made many code cleanups. - summary_show(): block/unblock the signal handlers instead of - disconnect/connect them. - summary_set_row_marks(): made the font of collapsed node bold if - it has cnildren marked as unread. - summary_thread_build(): block tree_expand signals while processing. - Use loop instead of the recursive function. Mark collapsed nodes - correctly. - summary_unthread(): block tree_collapse signals while processing. - Use loop instead of the recursive function. - summary_thread_func(), summary_unthread_func(): removed. - summary_tree_expanded(), summary_tree_collapsed(): new callback - functions. - * src/inc.[ch]: inc_pop3_session_do(): don't show alert panel when - failed to connect. Show more detailed status on the dialog. - -2001-08-10 - - * src/folderview.c: folderview_update_all_node(): new. It updates - all local folders. - * src/inc.c: update all local folders after incorporation if - scan_all_after_inc option is set. - * src/prefs_common.[ch]: added scan_all_after_inc option. - * src/folder.h: FOLDER_IS_LOCAL(): new macro. - -2001-08-09 - - * src/defs.h - src/headerview.c - src/headerwindow.c - src/textview.c - src/prefs_common.c - src/prefs_common.h: made bold and small font configurable. - src/summaryview.c: display unread messages with bold font. - * src/prefs_common.c - src/prefs_common.h - src/summaryview.c: added an option to enable/disable the - emphasis of unread messages. - -2001-08-08 - - * src/pixmaps/mark.xpm: modified. - * src/gtkutils.[ch]: gtkut_ctree_expand_parent_all(): new. - * src/summaryview.c: summary_set_ctree_from_list(): don't expand - the root messages of threads for performance improvement. - summary_show() - summary_select_next_unread() - summary_step(): expand threads when opening messages. - summary_thread_build(): expand threads if the option is turned on. - * src/prefs_common.[ch]: added "Expand threads" option. - -2001-08-08 - - * src/prefs_common.c: removed "Emulate the behavior of mouse - operation of Emacs-based mailer". - * src/prefs_common.c - src/prefs_account.c: changed the value of VSPACING_NARROW to 3. - * src/pixmaps/new.xpm - src/pixmaps/unread.xpm: reverted. - -2001-08-07 - - * src/address.[ch]: - address_folder_new() - address_group_new() - address_item_new(): changed the return value to AddressObject. - address_build_tree(): don't put assertion for file. - * src/pixmaps/new.xpm - src/pixmaps/unread.xpm: modified a bit. - -2001-08-06 - - * src/addressbook.c: fixed some bugs. - -2001-08-06 - - * separated the logic part of addressbook into another module - (still in progress). - * src/address.[ch]: new. It contains the logic part of addressbook. - * src/addressbook.[ch]: removed the logic part. - -2001-08-04 - - * src/textview.c: textview_show_header(): fixed a bug that a garbage - character was shown after header names. - -2001-08-02 - - * src/inc.c: inc_start(): don't abort with non-fatal error. - -2001-08-01 - - * version 0.5.2 - -2001-08-01 - - * src/mimeview.c: mimeview_view_file(): added -x option to the - metamail to prevent the suspention of the main process. - mimeview_button_pressed(): deactivate `Open' menu item if - content-type is application/octet-stream. - -2001-07-31 - - * src/imap.c: imap_parse_atom(): parse escaped characters properly. - get_quoted(): new. It handles the escape character '\'. - * src/folder.c: folder_read_list(): don't output warning if - folderlist.xml doesn't exist. - * src/main.c: main(): write folder list after setup. - * src/textview.c: textview_create() - src/compose.c: compose_create(): set default tab width to 8. - -2001-07-29 - - * src/prefs_common.c: date_format_select_row(): fixed a bug that - caused segfault when selecting the list with key. - -2001-07-28 - - * src/mainwindow.c: main_window_popup(): deiconize the window - when popup (thanks to Henrik Carlqvist). - * src/procmime.c: procmime_scan_mime_type(): new. - procmime_scan_content_type(): use procmime_scan_mime_type(). - procmime_scan_mime_header(): scan the extension of attached files - and add the correct MIME type if the Content-Type is - "application/octet-stream" (thanks to Don Quijote). - * src/compose.c: compose_toolbar_create(): added a new "Send later" - icon (thanks to Leandro Pereira). - -2001-07-27 - - * src/prefs_common.c: date_format_create(): modified the layout of - the dialog. - -2001-07-26 - - * src/account.c: account_find_from_address(): fixed a minor bug. - * src/prefs_common.c: incorporated the user-interface for setting - date format from the claws branch, and made some modification to - that. - -2001-07-25 - - * src/account.[ch]: account_edit_create(): modified the text of - default button. - account_find_from_address(): new. - * src/procmime.c: - procmime_scan_content_type(), procmime_scan_content_disposition(): - fixed ESC code detection. - * src/compose.c: compose_reply(): automatically select account - according to the message header. - * src/prefs_common.[ch]: added member "reply_account_autosel". - -2001-07-25 - - * src/progressdialog.c: made the CList scrollable. - * src/inc.c: inc_start(): don't abort with non-fatal error. - -2001-07-24 - - * added English Sylpheed User's Manual by Paul Kater - (paul@nlpagan.net) (thanks!). - * configure.in - manual/Makefile.am - src/mainwindow.c: added support for English manual. - * manual/en/sylpheed*.html: added English documentation. - * AUTHORS: updated. - -2001-07-23 - - * src/nntp.c: nntp_ok(): fixed the bug that didn't handle a response - that didn't have any trailing messages. - * src/smtp.c: smtp_ok(): ditto. - * src/compose.c: compose_account_option_menu_create(): modified - the style of the account option menu. - -2001-07-22 - - * src/prefs_customheader.c: prefs_custom_header_clist_set_row(): - remove return code from strings automatically. - prefs_custom_header_create(): added "X-Face" to the default - option. - * src/news.c: news_fetch_msg(), news_get_group_list() - src/imap.c: imap_fetch_msg(): create the cache directory before - writing. - * src/procmime.c: - procmime_scan_content_type() - procmime_scan_content_disposition(): convert JIS into EUC-JP - before parsing. - * src/codeconv.c: conv_unmime_header(): cleaned up a bit. - * src/compose.c: don't append attachment headers if the attach - pane is visible but the list is empty. - * src/recv.c: recv_bytes_write(): use g_malloc() instead of alloca(). - -2001-07-18 - - * version 0.5.1 - -2001-07-18 - - * src/compose.c: compose_quote_parse_fmt() - src/prefs_common.c: prefs_quote_description_create(): added the - symbol `%c' that allows to include Cc in reply format (thanks - to Cyril Bellot). - * src/base64.[ch] - src/procmime.c: procmime_decode_content(): applied the patch - from Sergey Vlasov that allows to decode base64 data with - unusual line length (not a multiple of 4) (thanks!). - -2001-07-17 - - * src/procmsg.[ch]: separated the permanent flags and temporary - flags into two variables, and made MsgFlags a structure that - includes them. - MSG_SET_PERM_FLAGS() - MSG_SET_TMP_FLAGS() - MSG_UNSET_PERM_FLAGS() - MSG_UNSET_TMP_FLAGS(): new macros. - * src/compose.c - src/imap.c - src/inc.c - src/messageview.c - src/mh.c - src/news.c - src/procheader.c - src/summaryview.c: modified for the new MsgFlags. - * src/utils.[ch]: hash_free_value_mem(): new. It frees the values - of hash table. - -2001-07-16 - - * src/inc.c: inc_pop3_recv_func(), inc_progress_update(): - display current size with human-readable format. - * src/grouplistdialog.c: grouplist_recv_func(): ditto. - * TODO - TODO.jp: updated. - -2001-07-16 - - * src/codeconv.c: - conv_unmime_header(), conv_unmime_header_overwrite(): workaround - for raw-JIS code in header fields. - * src/folder.c: - folder_get_default_folder() - folder_get_default_inbox() - folder_get_default_outbox() - folder_get_default_draft() - folder_get_default_queue() - folder_get_default_trash(): fixed a bug that caused segfault - if folder_list is NULL. - -2001-07-15 - - * README - README.jp - INSTALL - INSTALL.jp - TODO - TODO.jp: updated. - * src/grouplistdialog.c: grouplist_dialog_set_list(): update UI - while retrieving newsgroup list. - grouplist_dialog_create(): added entry widget and status label. - grouplist_recv_func(): new. - refresh_clicked(): added exclusive lock variable. - clist_selected(): set text entry when the CList is selected. - renamed from group_clist_select(). - entry_activated(): new. - grouplist_clear(): renamed from grouplist_free(). Also clears - list and entry widget. - * src/news.c: news_get_group_list(): sped up the list appending - (g_slist_append() becomes very slow if list size is large). - * src/defs.h: added UI_REFRESH_INTERVAL definition. - Changed the definition of NEWSGROUP_LIST. - * src/recv.c: recv_write() - src/send.c: send_message_smtp(): changed the UI refresh interval - to UI_REFRESH_INTERVAL (50msec). - * src/account.c: account_add(): fixed a bug that didn't update - folder tree when a news account was added. - * src/grouplistdialog.c: made exclusive lock variable global, and - lock at grouplist_dialog_set_list(). - * src/textview.c: fixed a bug that disabled clickable URI if - message color was disabled. - -2001-07-15 - - * src/grouplistdialog.c: ok_clicked(), cancel_clicked(): don't - quit main loop if gtk_main_level() is 1. - grouplist_dialog_set_list(): freeze CList while appending the list. - grouplist_dialog(): show dialog before updating the list. - -2001-07-14 - - * src/folder.c: folder_write_list_recursive(): add the attribute - `collapsed' if a node have some children. - * src/grouplistdialog.[ch]: new. Newsgroups can be selected from - the list. - * src/news.[ch]: - news_get_group_list(): new. It returns newsgroup list. - news_remove_group_list(): new. It removes newsgroup list cache. - * src/folderview.c: folderview_new_news_group_cb(): call - grouplist_dialog() instead of input_dialog(). - -2001-07-12 - - * autogen.sh: modified. - * src/folder.[ch] - src/folderview.c: made expand/collapse state of folders persistent - (thanks to Alfons). - -2001-07-06 - - * version 0.5.0 - -2001-07-06 - - * src/imap.c: imap_remove_folder(): select INBOX with EXAMINE before - DELETE. - imap_cmd_do_select(): new. It toggles between SELECT and EXAMINE - according to the argument. - imap_cmd_select(): use imap_cmd_do_select(). - imap_cmd_examine(): new. - * src/folderview.c: folderview_rm_imap_folder_cb(): select current - folder again when removing failed. - -2001-07-05 - - * version 0.5.0pre4 - - * manual/ja/sylpheed.sgml - manual/ja/*.html: updated the Japanese manual (thanks to Imai). - * src/summaryview.c: summary_set_row_marks(): fixed a bug that - didn't set foreground correctly. - * src/folderview.h - src/summaryview.h: removed the member color_normal from FolderView - and SummaryView. - * src/mainwindow.c: main_window_create(): removed color_normal. - -2001-07-04 - - * src/prefs_account.[ch]: the port numbers of IMAP4 and NNTP - became specifiable. - * src/imap.c: imap_session_get() - src/news.c: news_session_new_for_folder(), news_session_get(): - use user-defined port number if specified. - -2001-07-03 - - * src/imap.c: imap_scan_tree_recursive(): get mailbox status when - scanning. - imap_scan_folder(): implemented. It updates the numbers of new, - unread and total messages. - imap_status(): new. It parses the response of STATUS command. - imap_status_uidnext(): removed. - imap_cmd_status(): removed. - * src/textview.c: textview_show_part(): fixed potential memory leaks. - -2001-07-03 - - * src/alertpanel.c: alertpanel_create(): fixed truncated message. - * src/rfc2015.c: rfc2015_decrypt_message(): fixed the case problem - of content-type (thanks to René Rebe for the patch). - * src/codeconv.c: code_get_code_conv_func(): fixed the ISO-8859-1 - detection. - * src/prefs_common.c: prefs_send_create(): made some more character - sets specifiable when not using libjconv. - * configure.in: disabled --enable-threads option temporarily. - * INSTALL - INSTALL.jp: deleted the description about --enable-threads option. - -2001-07-02 - - * updated gettext to 0.10.38. - -2001-07-01 - - * version 0.5.0pre3 - - * src/folderview.[ch]: folderview_set_all(): new. - * src/account.c: account_add(): call folderview_set_all() after - creating IMAP4 tree. - account_edit_create(): account preferences dialog can be opened - with double clicking of the list. - account_selected(): new. - account_clist_set(): made the CList focus set correctly. - -2001-06-30 - - * src/imap.c: imap_scan_tree(): call imap_create_trash() if trash - is not found. - imap_scan_tree_recursive(): search the sub folders of INBOX. - recognize Trash folder. - imap_create_tree(): separated the part of creating trash. - imap_create_trash(): new. - * src/folder.c: folder_build_tree(), folder_write_list_recursive(): - preserve no_sub and no_select. - * src/summaryview.c: summary_show(): don't proceed if item->no_select - is TRUE. - -2001-06-29 - - * src/imap.c: imap_scan_tree(): fixed a bug that didn't set the - root folder correctly. - -2001-06-28 - - * src/folderview.[ch]: - folderview_update_tree(): new. It updates one folder tree. - folderview_update_tree_cb(): new. - Added "Update folder tree" to the popup menu, and modified some - expressions. - -2001-06-27 - - * src/imap.c: implemented the autoscan of IMAP4 folder list. - imap_scan_tree(): new. It scans the whole IMAP4 folder. - imap_scan_tree_recursive(): new. It traverses the IMAP4 folder tree. - imap_parse_list(): new. It parses the LIST response. - imap_get_real_path(): new. It converts local path into IMAP4 path. - * src/folder.h: added no_sub and no_select to FolderItem. - * src/folder.c: folder_tree_destroy(): reset some variables. - * src/folderview.c: folderview_scan_tree_func(): supported IMAP4. - -2001-06-26 - - * src/imap.c: imap_parse_envelope(): fixed a bug that didn't - parse the FETCH response that continues to the next line. - imap_parse_fetch_element(): removed. - imap_parse_atom(), imap_parse_one_address(), imap_parse_address(), - imap_parse_envelope(), imap_get_uncached_messages(): use GString - and sock_getline() to parse the FETCH response. - imap_remove_all_msg(): fixed a bug that didn't delete messages - correctly. - imap_parse_address(): fixed a bug that didn't concaternate - addresses correctly, using GString. - * src/socket.[ch]: sock_getline(), fd_getline(): new. They read - the whole line and return the newly allocated string. - * src/prefs_account.[ch]: added `IMAP server directory' entry. - -2001-06-25 - - * version 0.5.0pre2 - - * src/imap.c: imap_create_tree(): pass the path that is separated - by the local filesystem separator to imap_create_folder(). - imap_create_folder(): examine the existence of folders using - LIST command instead of STATUS. - imap_cmd_list(): new. - imap_query_password(): new. - imap_session_new(): query password if it is not set. - -2001-06-24 - - * src/imap.c: imap_parse_envelope(): FETCH results can be parsed - with arbitrary order. - imap_parse_fetch_element(): new. it parses one pair of name and - value of FETCH results. - imap_parse_flags(): modified for more flexibility. - * src/utils.[ch]: set_log_file(): new. it opens a new file for - logging. - close_log_file(): new. it closes the opened log file. - log_print(), log_message(), log_warning(), log_error(): also - output to log file. - -2001-06-22 - - * src/imap.c: imap_cmd_status(): check the pointer to "value" - before the assignment (thanks to NISHIJIMA). - -2001-06-21 - - * src/folderview.c: folderview_drag_motion_cb(): don't allow DnD - across MH and IMAP4 folder (for now) (thanks to Hiramatu). - * src/foldersel.[ch]: don't show folders which can't be targets - for current folder. - -2001-06-20 - - * version 0.5.0pre1 - - * src/imap.c: - imap_get_msg_list() - imap_cmd_envelope() - imap_cmd_fetch() - imap_cmd_copy() - imap_cmd_store(): use UID instead of sequential number. - Renamed imap_set_article_flags() to imap_set_message_flags(). - * src/summaryview.c: summary_execute(): don't update summary - even if current folder is IMAP4. - * src/utils.[ch]: remove_numbered_files(): changed the type of - arguments from gint to guint. - -2001-06-19 - - * src/imap.c: imap_cmd_login(), imap_cmd_select(), imap_cmd_status(), - imap_cmd_create(), imap_cmd_delete(), imap_cmd_copy(): don't - enclose with double quotation if string doesn't have space - (workaround for old Cyrus IMAP4 server). - imap_create_folder(): fixed a bug of separator substitution. - renamed imap_session_connect_if_not() to imap_session_get(). - imap_get_msg_list(): delete all cached messages if use_cache - is off. - imap_delete_cached_messages(): remove cached files in between - the specified range by reading directory entry. - imap_parse_one_address(): set fromname same as the from address - if it is empty. - * src/utils.[ch]: remove_numbered_files(): new. The range is - specifiable. - * src/summaryview.c: summary_execute(): update summary if current - folder is IMAP4. - KEY_PRESS_EVENT_STOP(): new macro. - summary_key_pressed(): stop signal emission when calling - summary_execute(). - summary_select_by_msgnum(): show message only if - msg_is_toggled_on is TRUE. Move current page to the selected - node. - * src/news.c; news_delete_old_articles(): remove cached files in - between the specified range by reading directory entry. - * src/folderview.c: - folderview_selected(), folderview_button_released(): fixed a bug - that didn't select folder correctly. - -2001-06-18 - - * src/mainwindow.c - src/summaryview.c - src/prefs_common.c: improvements to the English (thanks to Paul - Mangan). - * src/mainwindow.c: compose_cb() - src/summaryview.c: summary_key_pressed() - src/compose.c: compose_new_with_recipient(): newsgroups entry - is automatically filled when composing a new article. - -2001-06-17 - - * src/procmsg.c: procmsg_msg_list_free(): fixed a bug that didn't - free list correctly. - -2001-06-16 - - * version 0.4.99 - - * src/imap.c: imap_find_namespace(): replace namespace path - separator with slash before comparison. - imap_remove_folder(): use namespace. - imap_create_tree(): use namespece when creating Trash. - imap_get_msg_list(): fixed a bug that returned old list and caused - memory leak if exists == 0. - imap_select(): new. It's a wrapper for imap_cmd_select(). - * src/foldersel.c: foldersel_set_tree(): show IMAP4 folder too. - -2001-06-15 - - * src/folderview.c: - folderview_new_folder_cb() - folderview_new_imap_folder_cb(): show error dialog when creation - or deletion of folder failed. - Made it allow users to create a folder which contains subfolders. - folderview_button_pressed(): disabled delete menu on the special - IMAP4 folder. - * AUTHORS: incorporated from claws branch. It now contains all - contributors. - * src/send.c: enabled cancellation. - EXIT_IF_CANCELLED(): new macro. - Added cancelled flag to SendProgressDialog. - * src/utils.[ch]: strtailchomp(): new. It removes the trailing - specified character. - * src/imap.c: imap_cmd_fetch(): a fix for MS Exchange 2000 server. - -2001-06-15 - - * src/imap.c: imap_create_tree(): new. It creates required - folders such as INBOX and Trash. - imap_do_copy(), imap_do_copy_msgs_with_dest(): don't expunge - if COPY failed. - imap_remove_all_msg(): return immediately if exists == 0. - * src/account.c: account_add(), account_set_missing_folder(): - made them use folder->create_tree(). - -2001-06-14 - - * src/imap.c: more namespace implementation. - imap_find_namespace(), imap_path_separator_subst(): new. - -2001-06-13 - - * src/imap.c: imap_parse_namespace(), imap_cmd_namespace(): new. - -2001-06-11 - - * src/summaryview.c: summary_show(): fixed a glitch in folder view. - -2001-06-08 - - * src/imap.[ch]: added imap_add_msg(), and imap_append_message(), - which appends file into IMAP4 folder. - imap_status(): new. - imap_create_folder(): check the existence of a folder before - create it. - renamed the prefix of low-level IMAP4rev1 functions to imap_cmd. - * src/account.c: account_add(), account_set_missing_folder(): - create INBOX automatically when creating IMAP4 account. - -2001-06-07 - - * src/utils.[ch]: added itos_buf() that takes the buffer for its - argument. - * src/imap.[ch]: imap_copy_msg(), imap_copy_msgs_with_dest(): new. - * src/folder.c: added copy_msg and copy_msgs_with_dest methods - to the IMAP class. - -2001-06-06 - - * src/utils.[ch]: move_file(): new. - * src/mh.c: mh_move_msg(), mh_move_msgs_with_dest(): modified to - use move_file(), and fixed a bug that didn't close file when - error occured. - -2001-06-06 - - * src/imap.c: renamed imap_delete_messages() and - imap_delete_all_messages() to imap_delete_cached_messages() and - imap_delete_all_cached_messages(). Some code cleanups. - * src/utils.[ch]: added a function remove_all_numbered_files(). - * src/mh.c: mh_remove_all_msg() - src/imap.c: imap_delete_all_cached_messages(): - use remove_all_numbered_files(). - * src/mainwindow.c - src/summaryview.c - src/compose.[ch]: added `Reply to sender'. - compose_reply() - compose_reply_set_entry(): added an argument `ignore_replyto'. - -2001-06-05 - - * src/folderview.c: folderview_selected() - src/summaryview.c: summary_show(): fixed a bug that updated wrong - folder when remaining marks were processed. - -2001-06-04 - - * src/headerwindow.c: headerwindow_show_cb(): always try to show - msginfo, and use the selected message, not the displayed one. - * src/smtp.c: smtp_ok(): fixed sock_gets() error handling. - -2001-06-02 - - * src/folderview.c: folderview_selected() - src/mimeview.c: mimeview_selected(): ungrab the mouse event. - * src/summaryview.c: summary_show(): process the left marks if any. - -2001-05-27 - - * src/passphrase.c: enclosed with #if USE_GPGME. - * src/prefs_account.c: added NNTP AUTH check button. - * src/alertpanel.[ch]: alertpanel_create(): added new argument - `can_disable', all existing callers changed to pass FALSE; - created a check button to disable the message. - alertpanel_message_with_disable(): new. - alertpanel_show(): mask value with G_ALERT_VALUE_MASK. - alertpanel_button_toggled(): new. - alertpanel_button_clicked(), alertpanel_close(): set value using - G_ALERT_VALUE_MASK. - * src/prefs_common.[ch]: added option to toggle GnuPG signature - check popup window, and GnuPG warning. - * src/rfc2015.c: check_signature(): show signature check dialog - only if it is enabled. - * src/main.c: modified GnuPG checking. - * src/main.c - src/prefs_common.c: fixed some compilation bugs when enabled - GPGME. - -2001-05-26 - - * src/codeconv.c: conv_get_code_conv_func(): fix for ISO-8859-* - encodings with libjconv. - conv_encode_header(): fixed an endless loop bug when encountering - an invalid wide character (thanks to Alte). - * src/headerview.c: SET_FONT_STYLE(): fixed segfault with invalid - bold font. - * src/imap.c: imap_create_folder(): don't create folder if the - name is INBOX. - * src/mainwindow.c: main_window_reflect_prefs_all(): hide the - execute button when immediate execution is enabled. - -2001-05-22 - - * README - README.jp: added the "How to run" section. - -2001-05-19 - - * merged NNTP AUTH from the claws branch. - * src/news.[ch]: supported NNTP AUTH. - * src/nntp.[ch]: wrapped SockInfo with NNTPSockInfo for NNTP AUTH. - * INSTALL - INSTALL.jp: modified the confirmation list and the warning about - threads. - -2001-05-18 - - * src/gtkutils.[ch]: moved folderview_find_collapsed_parent() to - gtkut_ctree_find_collapsed_parent(). - * src/folderview.c: folderview_select_node(): automatically expand - the parent folders when selected. - * configure.in: made the version number to 0.4.99 (0.5pre) - * src/main.c: main(): moved parse_cmd_opt() before gtk_init() - so that X is not necessary for --help and --version. - parse_cmd_opt(): changed g_get_prgname() to g_basename(argv[0]). - * src/folderview.c: folderview_update_node(): a fix for collapsed - nodes. - -2001-05-17 - - * src/main.c: lock_socket_input_cb(): changed fd_read() to fd_gets(). - It caused garbages in --compose option. - * src/socket.[ch]: made fd_gets() public. - -2001-05-16 - - * src/gtkutils.[ch]: gtkut_ctree_node_next(): new. - * src/folderview.c: folderview_find_next_unread(): new. - folderview_select_next_unread(): modified so that it can find - the hidden folder. - -2001-05-15 - - * src/compose.c: compose_write_headers(): excluded also From, To, - Sender because they could be used for SPAM. - * src/folderview.c: add '+' mark to the collapsed folder that have - some unread folders. - folderview_search_new_recursive(), - folderview_have_new_children(), - folderview_search_unread_recursive(), - folderview_have_unread_children(), - folderview_find_collapsed_parent(): new. - folderview_update_node(): display the number of queued messages. - -2001-05-14 - - * src/folder.[ch] - src/mh.[ch]: modified *_add_msg() to use link(). Added the - argument to switch whether to remove the source file or not. - * src/compose.c - src/inc.c - src/mbox.c: modified the argument of folder_item_add_msg() and - removed some unlink()'s. - -2001-05-13 - - * src/prefs_customheader.[ch]: renamed prefs_headers_* to - prefs_custom_header_*. Removed `(New)' row and `Substitute' - button. Supported empty value. - prefs_custom_header_row_moved(): new. Connected "row_move" signal - to the function, and made it set header list. - * src/customheader.c: custom_header_get_str() - src/compose.c: compose_write_headers(): supported empty value. - * src/prefs_display_header.c: prefs_display_header_row_moved(): new. - Connected "row_move" signal to the function, and made it set - header list. - * src/compose.c: compose_write_headers(): modified the order of - headers, and made it encode the custom headers. - * src/prefs_customheader.c: prefs_custom_header_delete_cb() - src/prefs_filter.c: prefs_filter_delete_cb(): treat closing the - alert panel by ESC as "No". - -2001-05-13 - - * merged the custom header stuff from claws branch: - * src/customheader.[ch] - src/prefs_customheader.[ch]: new. - * src/customheader.c: custom_header_read_str(): use strtol() instead - of atoi() and check errors. - custom_header_find(): new function. - * src/compose.c: IS_IN_CUSTOM_HEADER(): new macro. - compose_write_headers(): made it replace headers with user-defined - headers except for some automatically generated headers. - -2001-05-11 - - * src/inc.c: connection_check_cb(): fixed a bug that caused - segmentation fault if connection was not established. - * src/compose.c: compose_create(): even if set_autobcc or set - autoreplyto is checked and the entries are empty, show them. - -2001-05-10 - - * src/textview.c: textview_show_mime_part(): modified the messages. - TEXT_INSERT(): new macro. - * po/ja.po: fixed. - * src/prefs_display_header.c: prefs_display_header_create(): - modified the text of checkbutton. - -2001-05-09 - - * src/mimeview.c: added "Open with..." to the context menu. - * src/summaryview.c: summary_print() - src/inputdialog.c: input_dialog(): fixed memory leaks. - * src/textview.c: textview_show_mime_part(): updated the description. - * src/send.c: implemented sending progress dialog. - (TODO: automaton should be used.) - send_progress_dialog_create(), send_progress_dialog_destroy(), - send_cancel(): new. - send_message_smtp(): made it update the dialog for each stage. - * src/utils.[ch]: get_left_file_size(): new. Get the left bytes - of opened file. - * src/summaryview.c: summary_show(): when open_inbox_on_inc is set, - go to first unread message even if folder is same as previous. - * src/prefs_common.c: made color selection dialog transient, and - made escape key close the dialogs. - -2001-05-08 - - * version 0.4.66 - - * src/select-keys.c: delete_event_cb(): removed `;' from its end. - * src/recv.c: recv_write(): changed the interval to 10msec. - * src/prefs_display_header.c: modified the layout of the dialog, - and made the hidden headers list insensitive when `Show other - headers' is not checked. - * src/textview.c: changed strcasecmp() and strncasecmp() to - the corresponding glib functions. - * src/inc.c: get_spool(): make a temporary file in the home - directory. - -2001-05-07 - - * src/prefs_common.c - src/prefs_account.c - src/prefs_filter.c - src/account.c - src/alertpanel.c - src/filesel.c - src/foldersel.c - src/export.c - src/import.c - src/inputdialog.c - src/passphrase.c - src/select-keys.c - src/sigstatus.c: fixed a bug that accidentally destroyed dialogs - when closed them with delete_event (thanks to DINH). - Added *_deleted() and *delete_event() which handle delete_event - signal correctly. - -2001-05-06 - - * src/prefs_display_header.c: merged some changes from claws branch: - prefs_display_header_create(): allow reordering of headers by - dragging. - prefs_display_header_find_header(): new function. - prefs_display_header_clist_set_row(): don't allow duplicates. - * src/prefs_account.c: prefs_account_receive_create(): changed - the label of the check button. - -2001-05-05 - - * src/pop.c: pop3_getsize_list_recv(): if sscanf() failed, break - immediately. - * src/inc.h: removed cur_msg_bytes from Pop3State. - * src/inc.c: pop3_recv_func() - src/recv.[ch]: made the second arguments of RecvUIFunc current - total read bytes. - recv_write(): made it call UI func if elapsed time is greater - than 0.1 sec. - * src/recv.c: recv_write(): changed the interval to 300 usec. - * src/textview.c: textview_show_header(): if header is Subject, - unfold it. - * src/utils.[ch]: unfold_line(): new. - * src/procheader.[ch]: procheader_get_header_array(): new. - * src/prefs_display_header.c: updated defaults. - -2001-05-05 - - * some merge from the sylpheed-claws branch. - It allows user to specify displayed headers in message view. - (symbol names were also changed.) - * src/prefs_display_header.[ch] - src/displayheader.[ch]: new. - * src/prefs_display_header.c: - removed prefs_display_headers_other_headers_toggled(). - removed "(New)" row from the list. - * src/defs.h: added DISPLAY_HEADER_RC. - * src/prefs_common.c: prefs_message_create(): added a button for - opening the display header setting dialog. - * src/prefs_common.h: added show_other_header and disphdr_list - to PrefsCommon. - * src/procheader.[ch]: procheader_get_header_list_from_file(), - procheader_get_header_array_asis(): new. - procheader_get_header_list(): modified so that it takes FILE - pointer for its argument. - procheader_header_array_destroy(), procheader_header_free(): new. - * src/main.c: main(): made it call prefs_display_header_*_config(). - * src/textview.c: textview_scan_header(): modified so that it - sorts headers according to user setting. - src/textview_show_header(): made it call - textview_make_clickable_parts(). - textview_make_clickable_parts(): added GdkFont to its arguments, - and removed GtkText from them. - -2001-05-04 - - * implemented auto-checking of new mail based on the patch from - Pierric Descamps (thanks!). - * src/inc.c: added inc_autocheck_timer_init(), - inc_autocheck_timer_set(), inc_autocheck_timer_remove(), - inc_autocheck_func() for auto-checking of new mail. - * src/main.c: main(): call inc_autocheck_timer_init(). - * src/prefs_common.c: prefs_receive_create(): activated the - auto-checking UI. Added prefs_common_cancel(), and connected - some signals to that. - * src/prefs_common.c - src/prefs_account.c - src/prefs_filter.c - src/account.c: Disabled auto-checking while opening the dialog. - * src/headerview.c: headerview_show_xface(): fixed a bug that - showed a warning when header pane was hidden. - -2001-05-03 - - * src/inc.c - src/pop.c - src/recv.c: removed non-blocking socket mode support since it - does nothing. - * src/pop.c - src/inc.c: modified the messages of incorporation dialog. - -2001-05-02 - - * src/utils.h: made u32 the typedef of guint32. - added BIG_ENDIAN_HOST macro that is used by md5.c. - * src/md5.c: renamed md5c.c. Fixed the indentation. Fixed a bug - that didn't calculate MD5 correctly on big endian machines. - -2001-05-01 - - * version 0.4.65 - - * src/folder.c: folder_init(): added the method imap_remove_folder. - * src/folderview.c: folderview_rm_imap_folder_cb(): made it - actually remove folder from IMAP4 server. - * src/imap.[ch]: imap_create_folder(): made it actually create - folder on IMAP4 server. - imap_remove_folder(): added. - imap_create(), imap_delete(): added. - * src/summaryview.c: summary_execute_delete(): don't check trash - if folder type is not F_MH. - * thanks to Ishihara for the above changes. - * configure.in - ac/check-type.m4: better wint_t typedef detection (renamed - sv_CHECK_TYPE to SYLPHEED_CHECK_TYPE). - -2001-04-30 - - * src/recv.c: recv_bytes_write(): fixed another bug that caused - infinite loop and buffer overrun. - -2001-04-30 - - * src/socket.[ch]: renamed sock_read() and fd_read() to - sock_gets() and fd_gets() for preventing confusion. - Added sock_read() and fd_read() which is the wrapper of read(). - * src/recv.c: recv_bytes_write(): fixed a bug that caused infinite - loop. Use sock_read() instead of fd_read(). - * src/esmtp.c - src/imap.c - src/news.c - src/nntp.c - src/pop.c - src/recv.c - src/smtp.c: use sock_gets() instead of sock_read(). - * src/imap.c: imap_session_new(): fixed the error detection - of imap_open(). - -2001-04-28 - - * src/inc.c: made it displays current read bytes to the dialog. - * src/pop.c: recv_write(): call UI function before editing - strings. - -2001-04-27 - - * src/progressdialog.c: progress_dialog_create(): modified the - size of dialog and made it stretchable. - * src/smtp.c - src/esmtp.c: smtp_ok(), esmtp_ok(): fixed a bug that didn't - process an error response correctly (thanks to Ohmasa). - * src/pop.[ch]: added pop3_getsize_list_send(), - pop3_getsize_list_recv(). - * src/recv.[ch]: added recv_set_ui_func() that makes recv_write() - call the callback function for each sock_read(). - * src/inc.h: in Pop3State, renamed bytes to total_bytes, and added - cur_msg_bytes, cur_total_bytes, and sizes. - * src/inc.c: added inc_pop3_recv_func() that updates the progress - bar for each sock_read(). - -2001-04-26 - - * src/mh.c: mh_is_maildir_one(): modified so that it uses - is_dir_exist(). - -2001-04-25 Werner Koch - - * src/mh.c (mh_is_maildir_one, mh_is_maildir): New. - (mh_scan_tree_recursive): Do not include Maildir style directories - in the scan. - - Changed the use of integers to describe sockets by an more abstract - data structure. - - * src/automaton.h (struct _Automaton): Add help_sock. - * src/automaton.c (automaton_input_cb): Changed source to be - SockInfo and use wrapper for gdk_input_add. - - * src/send.c (SEND_EXIT_IF_ERROR): Adjusted tests and removed test - for invalid socket because this is now done in sock_close. Set - sock to NULL. - (SEND_EXIT_IF_NOTOK): Set closed sock to NULL. - (send_smtp_open): Use only SockInfo. - - * src/news.c (news_session_new): Use SockInfo here. - (news_session_destroy): Ditto and set sock to NULL. - - * src/nntp.c: Use SockInfo instead of integers - * src/smtp.c: Ditto. - * src/pop.c: Ditto. - * src/recv.c: Ditto. - - * src/inc.c (inc_pop3_session_do): Removed sock_sockinfo_free. Put - gdk_input_add into a wrapper. - - * src/esmtp.c: Changed socket descriptors to use SockInfo. - * src/esmtp.h: Ditto, included socket.h. - * src/session.h (struct _Session): Likewise. - * src/imap.c (imap_open): Return SockInfo ptr and not an integer. - Removed access to internal data of SockInfo. Changed all callers - and functions to take SockInfo. - (imap_session_new): Use sock_close here. - (imap_session_destroy): Ditto. - - * src/compose.c (compose_exec_ext_editor): Replaced sock_write by - fd_write. - - * src/main.c (app_will_exit): Close lock socket using fd_close. - (prohibit_duplicate_launch): Use fd_xxx functions instead of sock_xxx. - (lock_socket_input_cb): Ditto. - - * src/socket.h, src/socket.c: Prepared SockInfo structure to use - glib channels. Changed all sock_xxx to use SockInfo instead of an - integer. - (sock_connect_unix, sock_open_unix, sock_accept): Renamed to .. - (fd_connect_unix, fd_open_unix, fd_accept): .. this and changed all - callers. - (fd_read, fd_write, fd_close): New. - (sock_sockinfo_free): Removed. - * src/socket.c (sock_connect_nb): Use close instead sock_close here. - (sock_connect): Ditto. - -2001-04-26 - - * config.h.in: removed. - * ac/Makefile.am: added gnupg-check-typedef.m4 to MACROS. - * .cvsignore: added. - * src/inc.c - src/progressdialog.[ch] - src/pixmaps/complete.xpm - src/pixmaps/continue.xpm - src/pixmaps/error.xpm: applied the patch from Leandro Pereira - that displays the state of message incorporation (thanks!). - * src/inc.c: made the progress dialog change the text of status. - -2001-04-25 - - * removed po/*.gmo, configure, stamp-h.in, aclocal.m4, Makefile.in - from the cvs tree. - * COPYING: removed RSA copyright notice. - * removed po/sylpheed.pot, po/stamp-cat-id, po/cat-id-tbl.c. - * configure.in: added the check of sys/utsname.h. - -2001-04-24 Werner Koch - - Merged most of the changes from the W32 branch in. - - * configure.in: Require gpgme >= 0.2.1 - - * acconfig.h (HAVE_U32_TYPEDEF): New. - * ac/gnupg-check-typedef.m4: New. - * configure.in: Check for u32 type and the size of some types. - * src/utils.h: Define the u32 type and related constants. - - * src/about.c (about_create): Removed the note about MD5. We are - not any longer using the RSA Inc. implementation. - * src/md5ify.c, src/md5ify.h, src/md5global.h: Removed. - * src/md5c.c, src/md5c.h: Replaced by an FSF implementation and - renamed the function to standard lowercase convention. Changed all - callers. - (md5_hex_digest): New. - (md5_hmac): Add hmac function by Martin Schaaf with some - modifications. - (md5_hex_hmac): New. - * src/esmtp.c, src/esmtp.h (md5_hex_hmac): Removed. - (hmac_md5): Removed. - * src/pop.c (pop3_getauth_apop_send): Replaced the md5_digest by - the new md5_hex_digest function. - - * src/about.c: Include utsname.h only if available - - * src/utils.c, src/utils.h (get_home_dir): New to better cope with - special Windoze requirements. Changed all calls to - g_get_home_dir() to this function. - - * simple-gettext.c: New. - - * src/main.c (main): Issue a warning if GnuPG is not properly - installed. - - * src/sigstatus.c, src/sigstatus.h: New. - * src/rfc2015.c (check_signature): Use the sigstatus window and - get the status texts from a utility function. - - * src/select-keys.c: Removed the global select_keys var and - pass an allocated one along all functions. - (set_row): Display only keys capable of encryption. - (update_progress): Replaced the progressbar by - a windmill and a text showing for which key we are collecting - info. Removed progressbar everywhere else and updated callers. - - * src/prefs_common.c (prefs_privacy_create) [__MINGW32__]: Do not - display the grab button. - -2001-04-24 - - * src/prefs_common.[ch] - src/procheader.c: applied the patch from Darko Koruga that - allows user to define their own format for displaying date in - summary view using strftime() (thanks!). - * src/prefs_common.c: prefs_quote_colors_dialog() - src/mainwindow.c: main_window_reflect_prefs_all(): made it - update message colors if the colors setting is changed. - * src/main.[ch]: made it remember the startup directory. - * src/export.c: export_mbox(): made it initially chdir to the - startup directory. - * src/filesel.c: filesel_select_file(): made it open the startup - directory at first. - -2001-04-23 - - * added option to warn about queued messages on exit [sergey]: - - * src/compose.c: compose_queue(): call folder_item_scan() - and folderview_update_item() after queueing. - * src/folderview.c: folderview_update_node(): draw the queue - folder in bold font if there are queued messages. - * src/mainwindow.c: queued_messages(): new function. - app_exit_cb(): display warning if there are queued messages - if warn_queued_on_exit is set. - * prefs_common.[ch]: add warn_queued_on_exit option. - - * src/mainwindow.c: moved queued_messages() to main.c, and renamed - it to get_queued_message_num(). - * src/main.c: app_will_exit(): moved warning dialog code from - app_exit_cb(), and added manage_window_focus_in(). - - * enhanced GnuPG key selection support [sergey]: - - * src/select-keys.c: updated to newer version from Win32 - branch with support for selecting arbitrary keys. - * src/prefs_account.c: added the Privacy tab to the account - options window. - prefs_account_privacy_create(), - prefs_account_sign_key_set_data_from_radiobtn(), - prefs_account_sign_key_set_radiobtn(): new functions. - * src/prefs_account.h: new preferences sign_key_type, sign_key_id. - * src/rfc2015.c: set_signers(): new function. - pgp_sign(): add the account parameter, call set_signers(). - rfc2015_sign(): add the account parameter, pass it to pgp_sign(). - * src/rfc2015.h: rfc2015_sign(): updated prototype. - * src/compose.c: pass the current account to rfc2015_sign(). - -2001-04-22 - - * src/mbox.c: export_to_mbox(): fixed a memory leak bug. - -2001-04-20 - - * src/mbox.[ch]: renamed export_mbox() to export_to_mbox(). - Fixed a memory leak bug. - * src/export.[ch]: added for exporting folder to mbox. - * src/import.[ch]: made import_mbox() take default folder. - Added description to the dialog. - * src/summaryview.c: summary_show(): fixed a bug that kept the - toolbar buttons insensitive after receiving messages. - * src/export.c - src/import.c: fixed a bug that caused quitting of the program - when OK or Cancel button was clicked several time. - * src/prefs_common.[ch] - src/addressbook.c: added "Add address to destination when - double-clicked" option. - -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.claws b/ChangeLog.claws deleted file mode 100644 index 99dc0719d..000000000 --- a/ChangeLog.claws +++ /dev/null @@ -1,2418 +0,0 @@ -2001-08-22 [alte] - * src/Makefile.am, src/compose.[ch], src/defs.h, src/mainwindow.c, - src/prefs_templates.[ch], src/template.[ch], src/template_select.[ch] - initial message templates support - - -2001-08-22 [paul] - - * configure.in - change version number to 0.5.3claws2 - - * sync with sylpheed 0.5.3cvs4 - - * src/procmsg.h src/summaryview.c - re-implement (un)ignore thread - -2001-08-21 [paul] - - * src/summaryview.c - remove unnecessary code - * src/compose.c - enable 'dynamic' signatures (submitted by - Eric Limpens ) - -2001-08-21 [paul] - - clean up after sync with sylpheed 0.5.3 release - - * src/folderview.c - fix re-introduced font mess, see Christoph's - entry 2001-06-24 - - * src/summaryview.c - remove prev_msgnum - use sylpheed's small font instead of - gtk default font for summary view - - -2001-08-17 [paul] - - * configure.in - add pl to ALL_LINGUAS - sync with main branch - - * po/de.po, po/es.po, po/nl.po, po/pt_BR.po - Updated. Translations by Jens Oberender, Ricardo Mones - Lastra, Alfons, and Fabio Junior Beneditto respectively. - - * po/pl.po ** NEW FILE ** - sync with the main branch - - * src/folderview.c - fix target folder colorizing and refresh problem - - -2001-08-17 [christoph] - - * src/mainwindow.c - claws uses 4 colors for target folder coloring. - arrays were not long enough and destroyed the - stack causing a segfault. - target folder colorizing does not work anymore - for me - -2001-08-16 [paul] - - * configure.in - change to version 0.5.3claws1 - - * src/folder.h, src/folderview.[ch], src/gtkutils.[ch], - src/inc.[ch], src/mainwindow.c, src/pop.c, src/prefs_account.c, - src/prefs_common.[ch], src/summaryview.[ch], src/textview.c, src/utils.c - - sync with sylpheed 0.5.3 release, but keep claws method of - configuring/saving fonts - - * src/addressbook.[ch] - rename addressbook_add_contact_by_menu() to addressbook_add_submenu() - in line with a similar change in Hiroyuki's branch - - * src/mainwindow.[ch] - disable main_window_set_thread_option() - * src/prefs_folder_item.c - comment out &tmps_prefs.enable_thread, - * src/mbox_folder.c, src/procmsg.[ch] - comment out MSG_IS_IGNORE_THREAD - * src/summaryview.c - comment out summary_ignore_thread() and summary_unignore_thread() - comment out MSG_IS_IGNORE_THREAD - - use Hiroyuki's threading instead. - - - -2001-08-15 [paul] - - * src/account.c - use Hiroyuki's 0.5.3 column scheme but also - include the enable/disable button. - * src/pixmaps/mark.xpm - add Hiroyuki's amended pixmap - -2001-08-13 [christoph] - - * src/account.c - receive at get all column showed wrong state for APOP - button should only work for POP3 and APOP accounts - * src/prefs_account.c - added missing preprocessor statement for SSL - -2001-08-12 [paul] - - * src/account.[ch] - add 'receive at get all' column and enable/disable - button. - -2001-08-06 [christoph] - - * src/account.c - show usage of SSL in protocol column - - * src/imap.c - * src/inc.c - renamed ssl options - - * src/prefs_account.[ch] - moved ssl options to a new page - - * src/send.c - * src/smtp.c - * src/ssl.[ch] - renamed ssl options - added support for SMTP STARTTLS command - -2001-08-05 [christoph] - - * configure.in - debian autoconf needs version check to find - correct autoconf version. if the file is - named configure.in 2.13 is used, which does - not work with this configure.in script. - other solution would be to rename the script - to configure.ac as suggested in the autoconf - manual. - - * src/inc.c - disable final error popup if popups are - diabled in config - - * src/socket.c - bugfix in ssl_gets - fixes IMAP over SSL problem - -2001-08-03 [paul] - - * configure.in - change to 0.5.2claws1 - - * sync with sylpheed 0.5.2cvs1 - -2001-08-02 [alfons] - - * configure.in - quick fix for ispell detection... - -2001-08-01 [paul] - - * configure.in - change to 0.5.1claws4 - - * sync with sylpheed 0.5.1cvs7 - -2001-07-31 [alfons] - - * src/prefs_common.c, src/prefs_common.h, - src/gtkspell.c, src/gtkspell.h - add global spelling checker settings (compose tab) + - selection of dictionary - - * configure.in - guess valid ispell location - -2001-07-31 [paul] - - * po/POTFILES.in - removal of 'src/quote_fmt_parse.c' - * po/de.po - Updated de.po - (submitted by Jens Oberender ) - -2001-07-31 [darko] - - * src/folder.[ch] - * src/folderview.[ch] - * src/mainwindow.c - * src/mh.c - * src/prefs_common.[ch] - * src/summaryview.c - target folder colourization - -2001-07-30 [paul] - - more sync with Sylpheed 0.5.1cvs6 - -2001-07-30 [darko] - - * src/mh.c - * src/prefs_folder_item.[hc] - * src/summaryview.c - shared folders support with a GUI - -2001-07-29 [paul] - - 0.5.1claws3 - - * sync with Sylpheed 0.5.1cvs6 - -2001-07-29 [paul] - - * po/pt_BR.po - updated - (submitted by Fabio Junior Beneditto) - -2001-07-28 [paul] - - * src/procmime.c - * AUTHORS - patch to correct bad image mime headers - (submitted by Don Quijote ) - -2001-07-28 [paul] - - * tools/gif2xface.pl **NEW FILE** - * tools/README - script to convert file.gif to file.xface for - use in a custom header. - (submitted by Ricardo Mones Lastra ) - -2001-07-27 [alfons] - - * configure.in - change macros for detecting JPilot and LDAP - -2001-07-27 [christoph] - - * src/filtering.c - code cleanup (MIN / MAX warning, needed casting) - -2001-07-27 [alfons] - - * procheader.c - disallow setting flags when detecting certain headers - (X-Status, Status, Seen, X-Seen). - - * sync with Hiroyuki's Sylpheed 0.5.1cvs5 - -2001-07-27 [christoph] - - * src/prefs_filter.c - * src/prefs_filtering.c - * src/prefs_matcher.c - * src/prefs_scoring.c - scroll list when moving rows up or down - - * src/imap.c - * src/imap.h - * src/prefs_account.c - * src/prefs_account.h - * src/send.c - SMTP over SSL (untested, feedback requested) - IMAP over SSL - - * src/ssl.c - code cleanup - -2001-07-26 [alfons] - - * configure.in, acconfig.h - define CLAWS (need this for main / claws detection) - -2001-07-25 [alfons] - - * configure.in - Sylpheed 0.5.1claws2 - - * sync with Sylpheed 0.5.1cvs4 - -2001-07-25 [christoph] - - * src/scoring.c - fixed segfault - item->prefs == NULL (don't know why) - -2001-07-25 [alfons] - - * configure.in - Sylpheed 0.5.1claws1 - - * sync with Sylpheed 0.5.1cvs1-3 - -2001-07-24 [christoph] - - * src/folderview.c - * src/prefs_folder_item.[ch] - added folderitem preferences dialog with - default To: and auto request return receipt - - * src/compose.[ch] - * src/menu.[ch] - changes to handle new folderitem preferences - - * src/mainwindow.c - * src/summaryview.c - call compose new mail with current folderitem - -2001-07-24 [alfons] - - Release Sylpheed 0.5.1claws - - * configure.in - change to release version 0.5.1claws - -2001-07-24 [christoph] - - * src/summaryview.c - fixed segfault that happend when the selected - message was removed while retrieving new messages. - - * po/es.po - updated translation - (submitted by Ricardo Mones Lastra ) - -2001-07-22 [alfons] - - add English User Manual for Sylpheed by Paul Kater (paul@nlpagan.net). - this is a work in progress, for more information: http://nlpagan.net/sylman - - * configure.in, src/mainwindow.c, manual/Makefile.am - add support for English manual - - * AUTHORS - add authors of user manuals - - * manual/en/sylpheed*.html - add English documentation - -2001-07-22 [christoph] - - * po/POTFILES.in - added src/ssl.c - * src/ssl.c - changed a wrong debug message - -2001-07-22 [alfons] - - * po/nl.po - update Dutch translation - - * src/prefs_filtering.c, - src/prefs_matcher.c - add more translatable strings - -2001-07-21 [alfons] - - 0.5.0claws7 - - * configure.in - change version - - * src/inc.c, src/summaryview.[ch] - prevent update of mark file when filtering has done, by - using a variable; this affects two functions: - inc.c::inc_finished() - summaryview.c::summary_show() - -2001-07-20 [alfons] - - * src/filtering.[ch], src/prefs_filtering.c, - src/matcher.[ch] - add filtering action for label coloring - - * po/POTFILES.in - add labelcolors.c - - * added src/labelcolors.c - * added src/labelcolors.h - * src/Makefile.am, src/summaryview.c - rearrange label coloring code - - * src/procmsg.h - add more parentheses so label colouring works correctly - - * src/filtering.c - don't really delete message, but move it to Trash - - * src/prefs_matcher.c - add quote options to info dialog - -2001-07-20 [christoph] - - * src/Makefile.am - * src/inc.c - * src/main.[ch] - * src/socket.h - * src/ssl.[ch] (new) - moved ssl stuff to a seperate file - -2001-07-20 [darko] - - * src/summaryview.c - fix show sender using address book with no e-mail - address in From: field - -2001-07-19 [alfons] - - * src/matcher.[ch], src/filtering.c, src/prefs_filtering.c - fix messy handling of escaping... now at least the - execute command is useful. escape char is '\', we - accept \n and \r too. - - Real life example: - - subject match "GIMME YOUR FILTERS" execute "mail -s \"%f don\'t hurt me, please!\" %f < ~/.sylpheed/filteringrc - subject match "GIMME YOUR FILTERS" execute "mail -s \"mommy, mommy, %f is being mean!\" admin < %F - -2001-07-18 [alfons] - - 0.5.0claws6 - - * src/summaryview.c - clean up - - * src/matcher.c, src/filtering.[ch], src/inc.c, src/mbox.c, - src/procmsg.[ch] - revise filtering; currently move, copy, marking have - been tested. if you like bleeding edge stuff, you - should definitely go for this version :) - - * mark old working stuff as VERSION_0_5_0_CLAWS5 - -2001-07-17 [christoph] - - * src/utils.c - timestamp log - -2001-07-17 [alfons] - - 0.5.0claws5 - - * sync with Hiroyuki's 0.5.0cvs5; this version allows us to put more - bits in the mark file, without affecting either branch. Lots of - files changed, also in claws branch. - - UNTESTED: use of mbox folders - - * src/summaryview.c - added mark all read; however this was a quick hack used for - cleaning up mess after initial merge with Hiroyuki - - * configure.in - change claws version number back to 0.5.0claws5 to clear up - confusion & pretension (recent release was technically - 0.5.0claws4, so we neatly align with Hiroyuki :-) - -2001-07-16 [alfons] - - sync with Hiroyuki's 0.5.0cvs4 - -2001-07-16 [alfons] - - 0.5.1claws3 - - * src/filtering.[ch] - remove invalid updating of mark files for - filter actions MATCHING_ACTION_MOVE and - MATCHING_ACTION_DELETE; this should fix the - folder update bug - - * src/procmsg.c - revert Christoph's stab at fixing the folder - update bug - - * po/POTFILES.in - add missing files with translatable strings - - * src/summaryview.c - remove debug print - -2001-07-15 [alfons] - - * src/addr_compl.[ch], src/prefs_filtering.c - make "filtering pref dialog's destination entry" an - "address completable entry", if filter destination is - an email address - - 0.5.1claws2 - - sync with Hiroyuki's 0.5.0cvs2-3 - -2001-07-15 [christoph] - - * src/procmsg.c - fixed folder stats update after incorporation - -2001-07-15 [alfons] - - * src/summaryview.c - * finish label colouring stuff (for now) - * fix incorrect colour bug (off by one) - -2001-07-14 [alfons] - - * src/mainwindow.c - change text labels for news and mail message so there's - plenty of toolbar estate left - - * configure.in - 0.5.1claws1 - - * src/folderview.c - src/folder.[ch] - sync with Hiroyuki's 0.5.0cvs1 - - * src/summaryview.c - more rewrite label colouring - -2001-07-14 [alfons] - - * src/summaryview.[ch] - * start rewrite label colouring - * fix proper location "Add Sender To Addressbook" menu item - -2001-07-13 - - Release 0.5.0claws "Paul Will Be Back Soon, Promise!" - (actually this is 0.5.0claws4) - -2001-07-13 [alfons] - - * po/pt_BR.po - * fix duplicate message - * add updated Portugese / Brazilian translation - submitted by Fabio Junior Beneditto - -2001-07-12 [alfons] - - * AUTHORS - add Jens - - * po/nl.po - add updated Dutch translation - - * po/de.po - add updated German translation submitted by Jens - -2001-07-11 [alfons] - - Prerelease before 0.5.0claws. Please test. - This version is temporarily tagged as VERSION_0_5_0_TEST - - * src/matcher.[ch], src/summaryview.c, src/scoring.[ch] - src/prefs_scoring.c, src/prefs_matcher.c, - src/prefs_filtering.c, src/mbox.c, - src/main.c, src/inc.c, src/filtering.[ch] - revert new Hoa's new matcher (does not work yet) - - * src/Makefile.am - clean up - -2001-07-10 - - Release 0.5.0claws "Paul Will Be Back Soon, Promise!" - - -2001-07-10 [alfons] - - * Makefile.am - add ChangeLog.claws to EXTRA_DIST - * src/Makefile.am - add matcher_parser_parse.h to EXTRA_DIST - -2001-07-10 [christoph] - - * src/inc.c - add destination folder to table of - folders that need to be updated after - incorporation - -2001-07-10 [alfons] - - * folder.[ch] - folderview.c - make collapse state of folders and folder items persistent, i.e. - if you collapse a folder tree, the next time sylpheed-claws starts - up the folder tree remains collapsed. - -2001-07-10 [christoph] - - * acconfig.h - * configure.in - added --enable-ssl - * src/md5.[ch] - renamed MD5_CTX to MD5_CTX_syl - conflicts with a struct in openssl - * src/inc.c - * src/main.[ch] - * src/prefs_account.[ch] - * src/socket.[ch] - SSL support for POP - * src/mainwindow.c - fixed compose with current account - broken by new compose button stuff - -2001-07-09 [hoa] - - * AUTHORS - changed my email address - - * src/matcher_parser_parse.y - clean the parser to remove conflicts - -2001-07-09 [alfons] - - * AUTHORS - add Match Grun - - * configure.in - fix incorrect description of --enable-ldap parameter - - * src/prefs_common.[ch] - src/compose.c - add experimental option "smart wrapping" which makes the - compose editor auto wrap. - - | TODO: the problem with the buggy cursor handling is caused | - | by the GtkText. when deleting / backspacing text its | - | wrapping algorithm does not take in account the previous | - | line. should find a way to hack this in. | - | or should perhaps combine this with the word wrapping | - | patch i wrote in january. | - - * src/about.c - show build parameters for LDAP and JPilot - - * src/summaryview.c - revert Christoph's bugfix for selecting next unread message, - because folder stats aren't updated correctly - -2001-07-08 [hoa] - - * src/filtering.c - * src/mainwindow.c - * src/matcher.c - * src/matcher_parser_lex.l - * src/matcher_parser_parse.y - * src/prefs_filtering.c - * src/prefs_scoring.c - * src/scoring.c - bugfix of the config file parser - -2001-07-08 [alfons] - - * src/Makefile.am - added generated matcher sources to BUILT_SOURCES - -2001-07-08 [hoa] - - * src/Makefile.am - * src/.cvsignore - added new config file parser - - * src/scoring.[ch] - * src/filtering.[ch] - * src/matcher.[ch] - * src/prefs_filtering.c - * src/prefs_matcher.c - * src/prefs_scoring.c - * added src/matcher_parser.h - * added src/matcher_parser_lex.h - * added src/matcher_parser_lex.l - * added src/matcher_parser_parse.y - lex & yacc config file parser - - * src/mbox.c - * src/inc.c - * src/main.c - changes prefs_filtering into global_filtering - - * src/summaryview.c - build threads with subjects only if "Re: " is at the - beginning of the subject - -2001-07-07 [paul] - - 0.5.0claws - - sync with sylpheed 0.5.0 - change of version number only - -2001-07-06 [paul] - - 0.5.0claws5 - - sync with sylpheed 0.5.0pre5 - -2001-07-05 [paul] - - sync with sylpheed 0.5.0pre4 release - /po and /manual/ja not sync'ed - -2001-07-04 [paul] - - more sync with sylpheed 0.5.0pre4 - -2001-07-03 [christoph] - - * src/addressbook.c - fixed address book broken by address book - for VCard, JPilot, LDAP - -2001-07-03 [alfons] - - * src/matcher.c - * src/textview.c - stopped memory leaks - -2001-07-03 [paul] - - more sync with sylpheed 0.5.0pre4 - -2001-07-02 [match] - - * included address book patch for VCard, JPilot, LDAP - * pref_common.c - fixed Font options on Display tab (cosmetic) - * alertpanel.c - fixed truncated message - -2001-07-02 [christoph] - - * src/mbox_folder.c - * src/procmsg.[ch] - * src/summaryview.c - mark threads for ignoring - -2001-07-02 [paul] - - 0.5.0claws4 - - * sync with sylpheed 0.5.0pre4 - updated gettext to 0.10.38. - -2001-07-01 [paul] - - * src/ mainwindow.c - * src/procmsg.h - * src/summaryview.[ch] - new right-click option: Label. - substitute for 'Mark-->Mark/Unmark', colours the line. - (submitted by Satoshi Nagayasu ) - -2001-07-01 [christoph] - - * src/folderview.c - fixed font for trash - * src/summaryview.c - move ctree to unread message - -2001-07-01 [paul] - - * sync with sylpheed 0.5.0pre3 release - -2001-06-30 [alfons] - - * src/filesel.[ch] - * src/compose.c - allow inserting / attaching multiple files in - the composer window - -2001-06-30 [paul] - - * src/codeconv.c - small change to Alfons' previous stuff so that it - actually makes - -2001-06-30 [alfons] - - * lots of files changed; first attempt to merge the changes - and bugfixes submitted by Andre Eibel (ae@baltic-online.de). - -2001-06-30 [paul] - - * po/pt_BR.po - updated and completed, translations by Fabio - Junior Beneditto - -2001-06-29 [alfons] - - * src/compose.c - * src/mimeproc.[ch] - allow selecting an attached files' mime type from a - list of types. - -2001-06-29 [paul] - - * more sync with sylpheed 0.5.0pre3 - -2001-06-29 [paul] - - * po/pt_BR.po - merge with sylpheed.pot and pt_BR.po provided by - Fabio Junior Beneditto. - -2001-06-29 [darko] - - * src/procmime.c - make MIME types case insensitive - -2001-06-28 [alfons] - - * po/nl.po - merge with sylpheed.pot and old nl.po; translations added. - -2001-06-28 [paul] - - * more sync with sylpheed 0.5.0pre3 - -2001-06-27 [alfons] - - * src/summaryview.c - don't crash when removing parent node of messages - attracted by subject. this was caused by not deleting - the parent node from the subject line hash table. - -2001-06-27 [alfons] - - * src/summaryview.c - * src/compose.[ch] - * src/mainwindow.c - if there are multiple messages selected, allow forwarding - them as attachments. - -2001-06-27 [paul] - - * more sync with sylpheed 0.5.0pre3 - -2001-06-26 [paul] - - 0.5.0claws3 - - * sync with sylpheed 0.5.0pre3 - -2001-06-25 [paul] - - * src/mainwindow.c - fixed 'compose news article' bug - from icon-and-text toolbar - -2001-06-25 [paul] - - * sync with sylpheed 0.5.0pre2 release - -2001-06-24 [christoph] - - * src/prefs_common.c - bug fix in font selection - * src/folderview.c - use sylpheed's normal font instead of - gtk default font for folders without - new messages - -2001-06-24 [alfons] - - * src/mainwindow.[ch] - added composite compose mail / news button (an idea by Leandro - Pereira ) - -2001-06-24 [paul] - - Added instructions for ldif-to-xml.py - - * tools/README - -2001-06-23 [alfons] - - Some minor things. - - * src/pixmaps/stock_news_compose.xpm - added pixmap by Leandro - * src/prefs_common.c - tested built-in spelling checker of GCC 3.0 :) - * po/nl.po - merged dutch translation of sylpheed-main with - sylpheed.pot - -2001-06-23 [paul] - - Added tools directory and files. - - * tools/filter_conv.pl - converts old filter system to new filtering system - * tools/ldif-to-xml.py - converts netscape addressbook to sylpheed addressbook - * tools/README - descriptions/instructions for above two files - -2001-06-23 [christoph] - - * src/inc.c - * src/manage_window.[ch] - * src/prefs_common.[ch] - mail retrieval dialog can be enabled, disabled - or hidden if non of sylpheed's windows is active - -2001-06-22 [paul] - - 0.5.0claws2 - - * sync with sylpheed 0.5.0pre2 - -2001-06-21 [christoph] - - * src/summaryview.c - show recipient on 'from' for all accounts - - * src/inc.c - * src/prefs_common.[ch] - disable error popup on mail receive errors - -2001-06-21 [alfons] - - * src/compose.c - made the ruler correctly appear and disappear. - - * src/Makefile.am - removed Hoa's work-in-progress-stuff (interesting!) so - claws compiles ok. - -2001-06-20 [christoph] - - * src/inc.c - * src/progressdialog.c - added scrolled window for list in progressdialog - -2001-06-20 [paul] - - sync with sylpheed 0.5.0pre1 release - -2001-06-20 [christoph] - - * src/summeryview.c - make building threads by subject work when - thread view is enabled - - * src/compose.c - * src/prefs_common.[ch] - automatically select account for mail replys - -2001-06-19 [sergey] - - * src/compose.c (compose_create): keep Bcc and Reply-To visible if - they are filled in from the account settings. - -2001-06-19 [paul] - - * more sync with sylpheed 0.5.0pre1 - -2001-06-18 [alfons] - - * src/Makefile.am, - src/procmime.c - added --sysconfdir to CPPFLAGS for pointing to the correct - location of mime.types. - - NOTE: make sure you use --sysconfdir when running ./autogen.sh - or ./configure! - -2001-06-18 [hoa] - - * src/summaryview.c - fixed some bug when building threads - -2001-06-18 [paul] - - * src/prefs_account.c - UI stuff: More changes to the English - -2001-06-18 [paul] - - * src/pixmaps/stock_news_compose.xpm: new file - * src/Makefile.am - * src/mainwindow.c - * src/summaryview.c - Added new icon for Hoa's 'compose a news - message', plus minor improvements to the - English - - * po/ja.po - * ChangeLog - * ChangeLog.jp - more sync with sylpheed 0.5.0pre1 - -2001-06-18 [hoa] - - * src/compose.[ch] - * src/mainwindow.c - Follow-up and reply to - - * src/summaryview.[ch] - Build threads also with subjects - -2001-06-17 [hoa] - - * src/compose.c - forwarding use the current account. - - * src/mainwindow.c - the "compose message" button has been replaced with - "new mail" and "new news" buttons - - * src/prefs_common.[ch] - added a configuration option to use the forward button - as "forward as attachment" - changed reply and forward format description - - * src/quote_fmt_lex.l - * src/quote_fmt_parse.y - added message with no signature in format for reply - and forward. - -2001-06-17 [paul] - - Minor UI stuff - - * src/mainwindow.c - * src/summaryview.c - Improvements to the English - - * src/prefs_common.c - Improvements to the English and some - clarity/continuity improvements in the - description of Quote symbols. - -2001-06-17 [paul] - - 0.5.0claws1 - - * sync with sylpheed 0.5.0pre1 - -2001-06-17 [hoa] - - * src/compose.c - Better interface for compose, displayed fields - are updated whenever we change account. - Newsgroups field is automatically filled. - - * src/mainwindow.c - Newsgroups field is automatically filled. - - * src/prefs_account.c - Some interface stuff when fields appear and - disappear. - -2001-06-16 [paul] - - 0.4.99claws - - * sync with sylpheed 0.4.99 - -2001-06-16 [sergey] - - * src/base64.c, src/base64.h (Base64Decoder, base64_decoder_new, - base64_decoder_free, base64_decoder_decode): new object and - functions for decoding base64 streams. - * src/procmime.c (procmime_decode_content): modified to use the - new base64 decoder. - -2001-06-15 [paul] - - 0.4.99claws10 - - * sync with sylpheed 0.4.99cvs11 - -2001-06-13 [paul] - - 0.4.99claws9 - - * sync with sylpheed 0.4.99cvs9 - -2001-06-13 [hoa] - - * src/compose.c - * src/prefs_account.c - - SMTP server can be defined in the news account - mime type of attachment are kept. - - * src/summaryview.c - - now choose the highest important score between default - and important score of folder. - -2001-06-09 [alfons] - - * src/prefs_common.c: - - (prefs_quote_description_create): corrected description of - quote format characters - -2001-06-09 [paul] - - 0.4.99claws8 - - * sync with sylpheed 0.4.99cvs8 - -2001-06-08 [sergey] - - * src/Makefile.am: fix for "make dist": added quote_fmt_parse.h - and pixmaps/stock_mail_reply_to_author.xpm to EXTRA_DIST. - -2001-06-08 [paul] - - 0.4.99claws7 - - * sync with sylpheed 0.4.99cvs7 - -2001-06-06 [sergey] - - * src/quote_fmt.h: renamed from src/quote_fmt_parse.h (which - clashes with autogenerated header). - * src/compose.c, src/quote_fmt_parse.y: #include "quote_fmt.h" - * src/Makefile.am: added quote_fmt.h. - * src/.cvsignore: added lex/yacc autogenerated files - (quote_fmt_lex.c, quote_fmt_parse.c, quote_fmt_parse.h). - -2001-06-06 [paul] - - 0.4.99claws6 - - * sync with sylpheed 0.4.99cvs6 - -2001-06-06 [hoa] - - * added src/quote_fmt_parse.h - * src/compose.c - removed warnings - - * src/prefs.[ch] - don't modify readonly configuration files - - * src/prefs_account.c - * src/prefs_common.c - * src/prefs_customheader.c - * src/prefs_display_header.c - * src/prefs_filter.c - * src/prefs_filtering.c - * src/prefs_scoring.c - don't open dialog box when configuration files - are readonly - -2001-06-05 [sergey] - - * configure.in: added AM_PROG_LEX and AC_PROG_YACC. - - * src/Makefile.am: replaced quote_fmt.tab.[ch] by - quote_fmt_lex.[lh], quote_fmt_parse.y; added YFLAGS=-d; added - BUILT_SOURCES to make all files rebuild properly. - - * src/compose.c: removed #include "quote_fmt.tab.h". - - * src/quote_fmt_lex.l: renamed from quote_fmt.l; changed to return - CHARACTER value in yylval. - - * src/quote_fmt_parse.y: renamed from quote_fmt.y; changed to - receive CHARACTER value by documented means (yylval). - - * src/lex.quote_fmt.c, src/quote_fmt.{l,y,tab.{c,h}}: removed. - -2001-06-05 [hoa] - - * src/Makefile.am - changed quote_fmt.[ch] into quote_fmt.tab.[ch] - - * src/filtering.c - * src/matcher.c - * src/matcher.h - * src/prefs_filtering.c - now keep the configuration for execute action - - * src/mbox_folder.c - fixed a warning - -2001-06-05 [paul] - - * sync with sylpheed 0.4.99cvs5 - -2001-06-05 [hoa] - - * src/Makefile.am - added quote_fmt.[ch] - - * added src/quote_fmt.y - * added src/quote_fmt.l - * added src/quote_fmt.tab.h - * added src/quote_fmt.tab.c - * added src/lex.quote_fmt.c - parsing configuration for replying - and forwarding - - * src/prefs_common.[ch] - added configuration UI for replying - and forwarding - - * src/compose.c - using configuration for replying - and forwarding - -2001-06-04 [hoa] - - * src/filtering.c - * src/matcher.c - * src/matcher.h - * src/prefs_filtering.c - * src/prefs_matcher.c - * src/prefs_matcher.h - action "run a command" for filtering - and matching with a command. - fixed the "whole message" matching - - * src/mbox_folder.c - changed temporary filename for security - - * src/messageview.c - queue the notification if it fails to send. - - * src/prefs_common.c - * src/prefs_folder_item.c - changed the default important score - - * src/prefs_scoring.c - * src/scoring.c - hide kill score input when the folder is not - a newsgroup - -2001-06-03 [alfons] - - * src/prefs_common.c: - - (prefs_font_select): pass font name in font entry box to font - selection dialog. - -2001-06-03 [sergey] - - * src/smtp.c (smtp_ok): fixed sock_gets() error handling. - -2001-06-03 [paul] - - * sync with sylpheed 0.4.99cvs4 - -2001-06-03 [alfons] - - * src/headerwindow.c: - - (headerwindow_show_cb): use the selected summary view item, not - the displayed item. - -2001-06-02 [alfons] - - * src/headerwindow.c: - - (headerwindow_show_cb): always try to show msginfo - -2001-06-02 [hoa] - - * src/compose.c - keep attached parts when reediting or forwarding. - -2001-06-01 [hoa] - - * src/folderview.c - * src/prefs_folder_item.[ch] - * src/prefs_scoring.[ch] - * src/scoring.[ch] - * src/summaryview.[ch] - * src/main.c - * src/mainwindow.c - * src/prefs_common.[ch] - support for folder scoring - kill score and important score for messages - - * src/prefs_account.c - some display bug fixed for local account - preferences - -2001-05-31 [alfons] - - * src/summaryview.c: - - (add_sender_to_cb): don't crash when no or invalid sender; the add - sender to address book menu item is disabled. - -2001-05-30 [hoa] - - * src/filtering.[ch] - * src/summaryview.c - handling summary menu / filter messages - - * src/folder.[ch] - add some stuff - - * src/foldersel.c - imap folders now appears in list - - * src/mbox_folder.c - doesn't crash if destination mail is not writeable - -2001-05-29 [hoa] - - * src/compose.c - removed some warnings - - * src/filtering.c - * src/folder.[ch] - * src/prefs_filtering.c - global string to identify any folders - removed some debug info - filtering to mbox folders is now possible - - * src/mainwindow.c - removed some warnings - - * src/mbox_folder.c - permission on files are changed to read/write for user only, - nothing for other. - creation of subfolder is handled better. - -2001-05-28 [alfons] - - Verified the sync for src/prefs_common.[ch] and - src/prefs_account.[ch]. I believe there were some - minor indentation differences. - -2001-05-28 [paul] - - 0.4.99claws3 - - * sync with 0.4.99cvs3 - -2001-05-28 [hoa] - - * src/compose.c - handling flags for mbox format - - * src/filtering.c - use of mark file only for MH format - handling flags for mbox format - filtering cannot yet move or copy mails to mbox folders. - - * src/folder.[ch] - changed move_msg, copy_msg, - move_msgs_with_dest, copy_msgs_with_dest functions - uses only folder->copy_msg() function - uses folder->finished_copy() to handle the destination - folder at the end of the copy or move operation. - - * src/foldersel.c - included mbox directories. - - * src/folderview.[ch] - * src/mainwindow.c - handle folders operation for mbox format - - * src/mbox.c - disable conversion of "From " header - - * src/mbox_folder.[ch] - completion of mbox format handling - - * src/mh.c - changed mh_copy_msg() function and - removed mh_move_msg(), mh_move_msgs_with_dest(), - mh_copy_msgs_with_dest() - - * src/prefs_filtering.c - removed some warnings - - * src/prefs_matcher.c - default boolean operation is AND - - * src/procheader.c - handling flags for mbox format - handling of "From " header - - * src/procmsg.[ch] - removed data field - added MSG_REALLY_DELETED flags to handle deletion of - messages in mbox format. - - * src/summaryview.c - handling flags for mbox format - disable the MSG_DELETED flags when messages - are deleted in mbox format - - * src/textview.c - "From " headers display fixed. - -2001-05-27 [alfons] - - * src/textview.c: - - (get_email_part): skip quoted email addresses, like in e.g. - "'alfons@proteus.demon.nl'". - -2001-05-26 [alfons] - - Minor GUI fixes adding horizontal scrollbars to Hoa's matcher dialogs, - and fixing the persistence troubles when using separate windows. - - * src/mainwindow.c: - - Added #define SEPARATE_ACTION used in the gtk item factory for - the SEPARATE_FOLDER and SEPARATE_MESSAGE items, so we can - use gtk_item_factory_get_widget_by_action() to get the items. - - Removed separate_widget_cb from the gtk item factory data - - (mainwindow_create): connect separate_widget_cb() to check - menu item "toggled" signal. also passing a MainWindow pointer - as object data for both check menu items. - - (separate_widget_cb): definition of separate_widget_cb() to match - GtkCheckMenuItem's "toggled" signal. Now get the pointer to the main - window using gtk_object_get_data(). The type of window separation - (SEPARATE_MESSAGE or SEPARATE_FOLDER) is passed as the signal's data - - * src/prefs_filtering.c, - src/prefs_matcher.c: added horizontal scrollbars - -2001-05-25 [darko] - - * src/headerview.c - fix segfault with invalid bold font - * src/summaryview.c - correctly display summary stats after row is marked - -2001-05-23 [sergey] - - * src/codeconv.c (conv_get_code_conv_func): fix for ISO-8859-* - encodings with libjconv. - -2001-05-23 [hoa] - - * src/Makefile.am - added mbox_folder.[ch] - * src/defs.h - mbox temporary folder - * src/folder.[ch] - * added src/mbox_folder.[ch] - * src/folderview.c - * src/procheader.[ch] - added mbox support - * src/mbox.c - bugfix for file incorporation filtering - * src/imap.c - enable creation of MBOX - * src/prefs_display_header.c - enable use of headers like "From " - something that should be fixed : - displaying of such headers add an extra space - * src/prefs_folder_item.c - don't create folders because it is not necessary - * src/procmsg.h - added data field to MsgInfo for mbox internal use - * src/summaryview.c - added some support for mbox - * src/utils.[ch] - added get_mbox_cache_dir() function - -2001-05-23 [hiroyuki] - - * src/headerwindow.c - src/inc.c - src/main.c - src/mh.c - src/nntp.c - src/procmsg.h - src/session.h - src/socket.[ch] - src/summaryview.c - src/textview.c - src/automaton.c - src/folderview.c: more sync with 0.4.99cvs2. - - * src/headerwindow.c: reverted. - -2001-05-22 [paul] - - 0.4.99claws2 - - * sync with sylpheed 0.4.99cvs2 - * src/news.[ch] - * src/nntp.[ch] - * INSTALL - * INSTALL.jp - -2001-05-22 [alfons] - - * src/summaryview.c: bugfixed a premature assignment in summaryview_add_sender_to_cb() - -2001-05-21 [alfons] - - Minor things: - - * configure.in: if gnome-config not found, "no" is displayed - - * sylpheed.desktop: "Hello World" is replaced with "Sylpheed Mail" - - * src/textview.c: now also possible to add mail addresses by right - clicking in the text view - - * src/codeconv.c: merged patch which fixes endless loop when encountering - invalid wide characters; from Alte <010@imis.ru> - -2001-05-20 [alfons] - - Added installation of gnome specific things: - - * Makefile.am: gnome conditional - - * configure.in: check for installed gnome - - * added sylpheed.png, sylpheed.desktop - -2001-05-20 [sergey] - - * src/pixmaps/stock_mail_reply_to_author.xpm: new file. - - * src/mainwindow.h (main_window_toolbar_create): created a button - for "Reply to all". - (main_window_set_toolbar_sensitive): enable/disable the new button - appropriately. - (toolbar_reply_to_author_cb): handle the new button. - - * src/send.c (SEND_EXIT_IF_ERROR, SEND_EXIT_IF_NOTOK): call - send_progress_dialog_destroy() on failure (fixes hang on SMTP - failure). - -2001-05-19 [sergey] - - * src/compose.h (ComposeReplyMode): new modes - COMPOSE_REPLY_TO_AUTHOR, COMPOSE_REPLY_TO_AUTHOR_WITH_QUOTE, - COMPOSE_REPLY_TO_AUTHOR_WITHOUT_QUOTE. - - * src/compose.c - (compose_send): move some code into a new function: - (compose_current_mail_account): new function. - (compose_reply): new argument to_author, all callers changed; if - to_author==TRUE and account->protocol==A_NNTP, find and use an - appropriate mail account for replying. - (compose_reply_set_entry): new argument to_author; ignore - compose->replyto if to_author==TRUE. - - * src/mainwindow.c: new command "Message/Reply to author". - (main_window_set_menu_sensitive): enable/disable it. - (reply_cb): handle it. - - * src/summaryview.c: new command "Reply to author". - (summary_set_menu_sensitive): enable/disable it. - (summary_reply_cb): handle it. - - * src/account.c (account_find_mail_from_address): new function. - -2001-05-18 [paul] - - 0.4.99claws1 - - * sync with sylpheed 0.4.99cvs1 - -2001-05-18 [hoa] - - * src/compose.[ch] - * src/filtering.c - * src/summaryview.c - new filtering action : forward and forward as attachment - - * src/main.c - no need for $DISPLAY when we run sylpheed --help - call to parse_cmd_opt() is moved - - * src/mainwindow.[ch] - execute button is hidden when immediate execute - is chosen - - * src/mh.c - * src/news.c - * src/prefs_folder_item.c - * src/procmsg.c - better handling of missing directories - - * src/summaryview.c - reedit is enabled in outbox - reedit is enabled in queue - -2001-05-17 [hoa] - - * src/filtering.c - * src/matcher.[ch] - * src/prefs_filtering.c - changed attachement into attachment - -2001-05-17 [alfons] - - 0.4.67claws4 - - * sync with sylpheed 0.4.67cvs9 - * sync with sylpheed 0.4.67cvs7-8 - -2001-05-17 [hoa] - - * src/Makefile.am - added prefs_filtering.c - - * src/filtering.[ch] - * src/matcher.[ch] - removed action : forward_news and forward_news_as_attachement - (forward and forward_as_attachement can be used instead) - - * src/mainwindow.c - added menu option to access filtering configuration - - * src/prefs_account.c - changed mail_command default to /usr/sbin/sendmail - - * added src/prefs_filtering.[ch] - dialog box for filtering configuration - - * src/prefs_matcher.c - added function prefs_matcher_get_criteria_from_matching() - - * src/prefs_scoring.c - reset the dialog when register or substitute is clicked - -2001-05-15 [hoa] - - * src/Makefile.am - added filtering.[ch] - * src/inc.c - using filering.[ch] instead of filter.[ch] - * src/main.c - reading new filtering configuration - * src/matcher.[ch] - added some filtering actions - and fixed a bug for headers and mail body matching - * src/mbox.c - using filering.[ch] instead of filter.[ch] - * src/mh.c - handling invalid MsgInfo in mh_copy_msg() and mh_move_msg() - * src/summaryview.c - some fixes for filtering - -2001-05-14 [hiroyuki] - - * src/send.c: fixed some weird indentations. - send_message_with_command(): call pclose() only if p != NULL. - * src/textview.c: get_email_part(): modified the code for readability. - -2001-05-14 [hiroyuki] - - * src/md5global.h - src/md5ify.c - src/md5ify.h: removed from the cvs. - -2001-05-13 [sergey] - - * src/main.c: include rfc2015.h to avoid compiler warnings. - * src/alertpanel.c (alertpanel_message_with_disable): return 0 if - the panel is already on screen. - * src/prefs_customheader.c (prefs_custom_header_delete_cb): treat - closing the alert window by ESC as "No". - * src/prefs_common.c (prefs_interface_create): moved return - receipt check button to the correct place. - -2001-03-13 [alfons] - - * src/prefs_common.c: - moved return receipt check button to the Send tab. (prefs_send_create) - removed the date format ui related globals. (prefs_display_create) - - 0.4.67claws3 - - * sync with sylpheed 0.4.67cvs5-6 - -2001-05-13 [paul] - - * added Alfons' font selection patch - - * src/defs.h - * src/headerwindow.c - * src/prefs_common.c - * src/prefs_common.h - -2001-05-13 [hoa] - * src/defs.h - changed version of cache - * src/matcher.[ch] - * src/prefs_matcher.c - added additionnal matching criteria - * src/procheader.c - * src/procmsg.[ch] - * src/news.c - added references in MsgInfo - -2001-05-12 [hoa] - - * src/defs.h - prepared some things for new filtering - * src/matcher.[ch] - added some matching properties - inreplyto need to be enhanced - prepared some things for new filtering - * src/messageview.c - added Return-Receipt-To handling - * src/prefs_folder_item.c - changed default value to TRUE - * src/prefs_matcher.c - added some matching properties - * src/prefs_scoring.[ch] - the scoring dialog is finished - * src/procheader.c - added Return-Receipt-To handling - Reference need to be added - * src/procmsg.[ch] - added Return-Receipt-To handling - added threadscore to get a better score sorting when - threads are enabled - * src/summaryview.c - suppressed a bug when we sort the list - when no folder is opened. - better score sorting when threads are enabled - -2001-05-12 [alfons] - - * reverted previous patch because of potential errors - - 0.4.67claws2 - - * src/inc.c, src/prefs_common.c, src/prefs_common.h: - applied "toggle mail-retrieval dialog window" patch submitted - by Eric Limpens - - * sync with sylpheed 0.4.67cvs4 - -2001-05-12 [sergey] - - * src/matcher.c, src/scoring.c: changed "#ifdef 0" to "#if 0" for - some picky compilers. - * src/rfc2015.h: provide prototype for rfc2015_disable_all(). - * src/grouplist_dialog.c: include alertpanel.h. - * src/prefs_headers.c (prefs_headers_deleted): added GTK_BUTTON to - fix compile warning. - * src/scoring.c, src/prefs_folder_item.c, src/matcher.c: brought - #include "defs.h" before others to prevent the warning of `MIN' - and `MAX' redefinition. - -2001-05-11 [hoa] - - * src/main.c - * src/messageview.c - * src/prefs_account.c - * src/prefs_display_header.c - removed warning - * src/Makefile.am - added prefs_scoring.[ch] - * src/grouplist_dialog.c - display an error dialog box if the group list - cannot be fetched. - * src/mainwindow.[ch] - added main_window_set_thread_option() function - scoring dialog box enabled - * src/matcher.[ch] - added flags matching unread /new / marked - / deleted / replied / forwarded - * src/news.c - newsgroups are now finally in newscache - * src/prefs_matcher.[ch] - finished preferences for matching dialog - * added src/prefs_scoring.[ch] - scoring dialog box completed - * src/scoring.[ch] - conversion to string : added scoringprop_to_string() - write config for preferences : - added prefs_scoring_write_config() - * src/summaryview.c - threads can be enabled/disabled independently - for each folder - -2001-05-10 [alfons] - - 0.4.67claws1 - - * AUTHORS: - thought it would be nice to have a list of all - contributors (used Changelog as a reference) - - * configure.in: - messed up version numbering... - - 0.4.66claws1 - - * sync with sylpheed 0.4.67cvs1-3 - -2001-05-10 [darko] - - * src/prefs_common.c: - better UI for strftime format, double clicking - on format now inserts the format in text entry - replaced close button with standard OK/Cancel - moved date format button to the right of the - text entry field - -2001-05-09 [alfons] - - * src/gtkstext.c: - Ctrl-Home / Ctrl-End have proper cursor navigation - -2001-05-09 [hoa] - - * src/prefs_matcher.c - finished UI to define matching properties - added ok and cancel button - * src/prefs_filter.c - added ok and cancel button - * src/news.c - fixed some bug in xhdr parsing - -2001-05-08 [alfons] - - * src/textview.c: - fixed a bug in textview_show_header(), which displayed two colons (':'); - cleaned up some warnings - -2001-05-08 [hoa] - - * src/Makefile.am - added prefs_matcher.[ch] - compilation with -W -Wall - * src/alertpanel.c - ungrab the mouse events if grabbed - does it - fix the bug for disposition notification ? - * src/mainwindow.c - added a menu option to open the matching dialog. - * src/matcher.[ch] - added matcherprop_to_string() and matcherlist_to_string() - fixed some bugs, changed the name of some options - age_sup and age_inf becomes age_greater and age_lower, - body and messageheaders becomes body_part and headers_part, - changed the names of constants from SCORING_XXX to MATCHING_XXX - * src/prefs_display_header.c - * src/prefs_headers.c - fixed a bug that accidentally destroyed dialogs - when closed them with delete_event - Added *_deleted() which handle delete_event signal correctly. - * src/prefs_folder_item.[ch] - added "enable_thread" field for future customization - * added src/prefs_matcher.[ch] - sample of the UI to define matching properties - * src/procheader.c - using procheader_headername_equal instead of str*cmp functions - using procheader_parse_header() function - * src/scoring.c - using MATCHING_XXX instead of SCORING_XXX - * src/summaryview.c - display the sender of the news even if this is ourself - when this is a news message. - * src/textview.c - using headername_equal() instead of str*cmp functions - -2001-05-08 [alfons] - - 0.4.66claws - - * sync with sylpheed 0.4.66 - * src/gtkstext.c: trace logs added - -2001-05-08 [sergey] - - * src/prefs_common.[ch]: added option to enable/disable GnuPG - signature check popup. - * src/rfc2015.c (check_signature): show signature check popup only - if it is enabled in preferences. - -2001-05-07 [alfons] - - 0.4.66claws4 - - * sync with sylpheed 0.4.66cvs6 - -2001-05-07 [darko] - - * src/prefs_common.[ch]: added option to enable/disable - looking up sender name in address book for summary pane - * src/summaryview.c: look up sender in the address book - by using Alfons' address completion code - -2001-05-07 [hiroyuki] - - * src/inc.h - src/pop.c: pop3_retr_recv(): removed cur_msg_bytes from the - member of Pop3State. - * src/news.c: brought #include "defs.h" before #include - to prevent the warning of `MIN' and `MAX' redefinition. - -2001-05-06 [hoa] - - * removed src/headers_display.[ch] - * removed src/prefs_display_headers.[ch] - * src/inc.c - use a temporary file in the user directory for mbox import - * src/news.c - added XHDR support to get "To" and "Cc" headers - (in order to match news with to or cc field for - scoring) - added function news_parse_xhdr() to get XHDR response - * src/nntp.[ch] - added function nntp_xhdr() - * src/matcher.c - fetch the message if necessary - -2001-05-06 [alfons] - - 0.4.66claws3 - - * sync with sylpheed 0.4.66cvs3-5 - -2001-05-06 [hoa] - - * src/utils.[ch] - added function itos_buf() to enable use of several buffers - * src/summaryview.c - use of itos_buf() instead of itos() in summary list - to fix the broken display of message number. - -2001-05-06 [alfons] - - * src/gtkstext.c: bug in cursor up navigation fixed, - fixed another unsigned / signed comparison (we're getting there :-) - -2001-05-06 [hoa] - - * src/Makefile.am - added scoring.c scoring.h - prefs_folder_item.c prefs_folder_item.h - matcher.c matcher.h - * src/defs.h - added FOLDERITEM_RC SCORING_RC - * src/folder.[ch] - added prefs field in FolderItem : - properties for each folder (PrefsFolderItem), - sorting type and mode were added as the first properties. - * src/main.c - read config for scoring - * added src/matcher.[ch] - gives functions to parse configuration file to do - matching on mails with a list of conditions. - * src/mainwindow.c - add option to sort by score - * src/prefs_common.[ch] - added preference option to show score and for - the score column size - * added src/prefs_folder_item.[ch] - properties for each folder (PrefsFolderItem), - sorting type and mode were added as the first properties. - * src/procheader.[ch] - added procheader_parse_header() - added procheader_header_free() - added procheader_headername_equal() - and made modification to use them. - * src/procmsg.[ch] - added score field to MsgInfo structure - * added src/scoring.[ch] - gives functions to parse configuration file to do - scoring on mails with a list of conditions. - * src/summaryview.[ch] - save the sorting type and mode for the folder - added column to display the score of the mail - added function summary_score_clicked() - sorting type and mode are restored to the folder - when it is reopen - * src/textview.c - use procheader_parse_header(), procheader_headername_equal() - removed memory leak in text_scan_header when freeing headers - * src/filter.c - changed the function to match names of headers - using procheader_headername_equal() - - Scoring functions are implemented, an interface is needed - to configure that. - -2001-05-04 [alfons] - - * src/gtkstext.c: - hopefully fixed the row up navigation bug, - removed adding back / forward lines to cache - -2001-05-04 [sergey] - - * src/prefs_display_headers.c: user interface changes: - (prefs_display_headers_create): remove unused "Show" check button; - allow reordering of headers by dragging. - (prefs_display_headers_write_config): remove unused variables. - (prefs_display_headers_set_dialog): do not insert "(New)" at top - of lists (not needed with the new UI). - (prefs_display_headers_set_list): scan lists starting from row 0, - not 1 (do not skip "(New)"). - (prefs_display_headers_find_header): new function. - (prefs_display_headers_clist_set_row): do not allow duplicates. - (prefs_display_headers_delete_cb): do not skip row 0; treat - closing the alert window by ESC as "No". - (prefs_display_headers_up): do not protect row 0. - (prefs_display_headers_down): do not protect row 0. - -2001-05-04 [sergey] - - * src/mainwindow.c (next_marked_cb, prev_marked_cb): new - functions. - - * src/summaryview.c - (summary_find_next_marked_msg, summary_find_prev_marked_msg, - summary_select_next_marked, summary_select_prev_marked): new - functions. - -2001-05-03 [sergey] - - * src/news.c: fixed a bug when no article can be fetched after - server timeout if the connection was restored by news_post(): - (news_select_group): new function. - (news_fetch_msg): call news_select_group() before fetching - article. - (news_get_uncached_articles): set session->group after successful - GROUP command. - -2001-05-03 [hoa] - - * src/defs.h - * src/procmsg.[ch] - * src/procheader.c - changed version of cache, added cc field - - * src/prefs_display_headers.c - the interface was changed - - * src/prefs_headers.c - added cancel button - -2001-05-03 [alfons] - - * completed sync of sylpheed cvs2 - * src/gtkstext.c: updated row up / down cursor navigation - * src/textview.c: re-edited, prepared for fixing the email address - scanner. - -2001-05-03 [darko] - - * src/prefs_common.c: use alfons' strftime ui code - entry_datefmt and datefmt_sample widgets have to be - global in this module because of this change - -2001-05-03 [hoa] - - * src/messageview.c - * src/prefs_common.[ch] added option to activate the return receipt - feature. - -2001-05-02 [alfons] - - * src/gtkstext.c: fix for row up/down cursor navigation. - - 0.4.66claws2 - - * sync with 0.4.66cvs2 - -2001-05-02 [paul] - - added add-sender-to-addressbook patch - - * src/addressbook.c - * src/addressbook.h - * src/summaryview.c - -2001-05-02 [sergey] - - * src/alertpanel.h (AlertValue): added G_ALERT_VALUE_MASK, - G_ALERTDISABLE. - - * src/alertpanel.c (alertpanel_create): new argument can_disable, - all existing callers changed to pass FALSE; create a check button - to disable the message. - (alertpanel_message_with_disable): new function. - (alertpanel_show): mask value with G_ALERT_VALUE_MASK. - (alertpanel_button_toggled): new function. - (alertpanel_button_clicked, alertpanel_close): set value using - G_ALERT_VALUE_MASK. - - * src/prefs_common.h (PrefsCommon): new field gpgme_warning. - - * src/prefs_common.c (prefs_privacy_create): new check button - checkbtn_gpgme_warning. - - * src/main.c (main): moved preferences reading before gpgme - initialization; check prefs_common.gpgme_warning before giving the - GnuPG warning and set it to FALSE if the user wants to disable the - warning. - -2001-05-02 [hiroyuki] - - * src/prefs_display_headers.c: modified the layout and some labels. - -2001-05-02 [sergey] - - * src/prefs_account.c (prefs_account_fix_size): new function. - (prefs_account_create): call prefs_account_fix_size(); use - gtk_widget_show instead of gtk_widget_show_all (fixes too large - size when the window is shown for the first time). - (prefs_account_basic_create): changed layout of serv_table; moved - localmbox_entry above smtpserv_entry (logically it replaces - POP3/IMAP server). - (prefs_account_protocol_activated): set sensitivity of - nntpauth_chkbtn according to the protocol (in addition to - hide/show); commented out gtk_table_set_row_spacing() calls. - (prefs_account_nntpauth_toggled): do nothing if nntpauth_chkbtn is - not sensitive (fixes a bug with disabled username/password boxes - when editing POP3 account after NNTP with authentication). - -2001-05-02 [hoa] - - * src/account.c - * src/inc.c - * src/prefs_account.[ch] - * src/send.c - removed local account without SMTP server - added option to use mail command instead of a connexion - to SMTP server when a local account is used - * src/prefs_headers.c - fixed a bug - * src/news.c - fixed a bug when connexion immediately closed - -2001-05-01 [alfons] - - 0.4.66claws1 - - * sync with 0.4.65 - -2001-05-01 [sergey] - - * src/prefs_account.c (Basic, prefs_account_basic_create): new - widget nntpauth_chkbtn. - (prefs_account_protocol_activated): handle nntpauth_chkbtn - visibility. - (prefs_account_nntpauth_toggled): new function. - - * src/news.c (news_session_new_for_folder): use NNTP - authentication only if ac->use_nntp_auth is set. - -2001-05-01 [hoa] - - * src/Makefile.am changed headers.[ch] in customheader.[ch] - * src/prefs_display_headers.c changed the UI - * src/prefs_headers.c changed account_name to account_id - * src/compose.c using customheader.h - -2001-05-01 [hiroyuki] - - * src/esmtp.c - src/news.c - src/nntp.c: changed sock_read() to sock_gets(), they've been left - unsynched. - -2001-05-01 [hoa] - - * src/Makefile.am added prefs_display_headers.[ch] headers_display.[ch] - * src/defs.h added HEADERS_DISPLAY_RC : name of the config file - for displaying of headers - * src/grouplist_dialog.[ch] minor changes to remove warnings - * src/prefs_display_headers.[ch] dialog to choose the - headers to display in the mail viewer. - * src/headers.h correction of #define - * src/headers_display.[ch] configuration for displaying of headers. - * src/main.c read config of displaying of headers - * src/prefs_common.c add a button to access the config dialog - for displaying of headers - * src/prefs_display_headers.[ch] dialog for configuration for - displaying of the headers. - * src/prefs_headers.c cleaning of code - * src/procheader.c comments added to code - * src/textview.c changes to reorder the headers depending - on the config for displaying of headers - -2001-04-30 [alfons] - - 0.4.65claws7 - - * sync with 0.4.65cvs12 - - NOTE: nntp.c and news.c in claws and cvs branch differ significantly! - -2001-04-30 [sergey] - - * src/nntp.h (NNTPSockInfo): new field auth_failed. - - * src/nntp.c (nntp_mode): return NN_AUTHREQ if sock->auth_failed - is set to force reconnection after authentication failure. - (nntp_gen_command): set sock->auth_failed on authentication - failure, or if sock->userid and sock->passwd are not set. - - * src/news.c (news_session_new_for_folder): set userid=NULL if - password dialog is cancelled. - -2001-04-30 [sergey] - - * src/nntp.h (NNTPSockInfo): new type. - - * src/nntp.c: all functions updated to use NNTPSockInfo instead of - SockInfo. - (nntp_open_auth, nntp_close): new functions. - (nntp_gen_command): new function to handle authentication; all - NNTP command functions updated to use it. - (nntp_authinfo_user, nntp_authinfo_pass): deleted. - (nntp_list): removed old useless code. - - * src/news.h (NNTPSession): new field nntp_sock. - - * src/news.c: all functions updated to use NNTPSockInfo instead of - SockInfo. - (news_session_new): new arguments (userid, passwd); made static; - use nntp_open_auth() if needed. - (news_session_destroy): use nntp_close() instead of sock_close(). - (news_query_password): changed arguments. - (news_session_new_for_folder): new function. - (news_session_get): use news_session_new_for_folder(). - (news_authenticate): deleted. - (news_get_uncached_articles): removed old authentication code. - -2001-04-30 [sergey] - - * src/news.c: reverted my previous changes (need to do NNTP - authentication in a cleaner way). - -2001-04-29 [sergey] - - * src/news.c (news_nntp_group, news_nntp_list, news_nntp_xover, - news_nntp_post, news_nntp_mode): new functions (wrappers with - authentication support). - (news_get_article_cmd, news_get_article, news_get_header): new - argument "folder"; all callers changed. - (news_get_article_cmd): added authentication support. - (news_session_get): use news_nntp_mode() instead of nntp_mode(). - (news_post): use news_nntp_post() instead of nntp_post(). - (news_get_uncached_articles): use news_nntp_group() instead of - nntp_group() and news_nntp_xover() instead of nntp_xover(); - removed old authentication code. - (news_get_group_list): use news_nntp_list() instead of nntp_list(). - - * src/nntp.c (nntp_list): return real error code instead of - hardcoded NN_ERROR. - -2001-04-29 [sergey] - - * configure.in: fixed wint_t typedef detection again - -2001-04-28 [hoa] - - * src/prefs_account.[ch], added A_LOCAL_CMD - (send mail with mail command) - * src/send.c added function send_message_with_command() - * src/inc.c made a more secure get_spool() function with - mktemp() but maybe mkstemp() or something more - secure can be used. - -2001-04-28 [alfons] - - * src/textview.c, colorization of email addresses in headers - - 0.4.65claws6 - - * bug sync with sylpheed - * prefs_common.c: created date format ui for darko - * sync with 0.4.65cvs11 - * configure.in: corrected to have the new gpg checks - -2001-04-27 [alfons] - - * completed sync with 0.4.65cvs10 - * minor debug things added to gtkstext.c - -2001-04-27 [darko] - - * configure.in: remove check for availability of - strftime() as advised by Hiroyuki - * src/prefs_common.[ch], src/procheader.c: - synch strftime() code with Hiroyki's main branch - -2001-04-26 [sergey] - - * src/news.c: news_query_password(), news_authenticate(): new - functions. - news_get_uncached_articles(): added NNTP authentication - handling. - * src/nntp.[ch]: nntp_authinfo_user(), nntp_authinfo_pass(): - new functions. - * src/prefs_account.c: prefs_account_protocol_activated(): - enable userid and password fields for NNTP. - -2001-04-26 - - * configure.in: check for availability of strftime() - [darko] - * src/prefs_common.[ch], src/procheader.c: use - strftime() for displaying date in summary pane if it - is available - -2001-04-25 - - * more .cvsignore cleanups [alfons] - -2001-04-25 - - * ac/sv-check-type.m4: new autoconf macro. - * configure.in: fixed wint_t typedef detection (did not work - with gcc-2.96). - -2001-04-25 - - * acconfig.h: added USE_GTKGDK_XIM definition for autoheader. - [hiroyuki] - -2001-04-24 - * modified gtkstext.c : buggy cursor navigation fixed, - and font descent also taken in account when drawing - cursor. [alfons] - -2001-04-24 [hoa] - * added comments in src/news.c src/nntp.c - * added src/prefs_headers.[ch] - * added src/headers.[ch] - * modified compose.c to activate custom headers - added function is_in_custom_headers - * modified prefs_account.[ch] - added function prefs_account_customhdr_edit - * modified src/defs.h : - added HEADERS_RC : name of the config file - for the custom headers - -2001-04-24 - - 0.4.65claws5 - - * configure.in - src/gtkstext.[ch] - src/compose.c - src/Makefile.am - - added gtkstext with configure.in patch by Hiroyuki which - should fix the XIM detection [alfons] - - * more clean up of cvs [alfons] - - * removed all Makefile.in files to attic. - - * updated all .cvsignores to really ignore things that could - be unintentionally committed by a recursive commit. - -2001-04-23 [hoa] - * added src/grouplist_dialog.[ch] - * changed src/folderview.c to call grouplist_dialog instead - of inputdialog - * src/news.c : - added functions news_reset_group_list - and news_get_group_list - * src/nntp.c : - added function nntp_list - * src/defs.h : - added GROUPLIST_FILE : name of the newsgroup list cache file - -2001-04-21 - - * added option to warn about queued messages on exit [sergey]: - - * src/compose.c: compose_queue(): call folder_item_scan() - and folderview_update_item() after queueing. - * src/folderview.c: folderview_update_node(): draw the queue - folder in bold font if there are queued messages. - * src/mainwindow.c: queued_messages(): new function. - app_exit_cb(): display warning if there are queued messages - if warn_queued_on_exit is set. - * prefs_common.[ch]: add warn_queued_on_exit option. - - * enhanced GnuPG key selection support [sergey]: - - * src/select-keys.c: updated to newer version from Win32 - branch with support for selecting arbitrary keys. - * src/prefs_account.c: added the Privacy tab to the account - options window. - prefs_account_privacy_create(), - prefs_account_sign_key_set_data_from_radiobtn(), - prefs_account_sign_key_set_radiobtn(): new functions. - * src/prefs_account.h: new preferences sign_key_type, sign_key_id. - * src/rfc2015.c: set_signers(): new function. - pgp_sign(): add the account parameter, call set_signers(). - rfc2015_sign(): add the account parameter, pass it to pgp_sign(). - * src/rfc2015.h: rfc2015_sign(): updated prototype. - * src/compose.c: pass the current account to rfc2015_sign(). - - * tag name claws added to prevent confusion with main branch [alfons] - - * Sync with sylpheed-0.4.65cvs4 and made it compile. [sergey] - - * autogen.sh: Added "--enable-maintainer-mode". [sergey] - - * sync with recent sylpheed cvs. Untested though. [alfons] - diff --git a/ChangeLog.jp b/ChangeLog.jp deleted file mode 100644 index 991bd2f80..000000000 --- a/ChangeLog.jp +++ /dev/null @@ -1,4469 +0,0 @@ -2001-08-21 - - * src/pop.c: pop3_getsize_list_recv(), pop3_retr_recv(), - pop3_delete_recv(): ¸ºß¤·¤Ê¤¤¥á¥Ã¥»¡¼¥¸¤ò¼èÆÀ¤·¤è¤¦¤È¤·¤Ê¤¤¤è¤¦ - ¤Ë¤·¤¿¡£ - -2001-08-21 - - * src/mainwindow.c: main_window_lock(), main_window_unlock(): - ¥á¥Ë¥å¡¼¥Ð¡¼Á´ÂΤΥí¥Ã¥¯¤òºï½ü¡£ - main_window_set_menu_sensitive(): sensitivity ¤ÎÊѹ¹¤ò¥Æ¡¼¥Ö¥ë - ¤Ç¹Ô¤¦¤è¤¦¤Ë¤·¡¢¥í¥Ã¥¯¤ËÂбþ¡£ - -2001-08-20 - - * src/summaryview.[ch]: summary_get_selection_type(): ¿·µ¬¡£¥µ¥Þ¥ê - ¥Ó¥å¡¼¤Î¸½ºß¤ÎÁªÂò¾õÂÖ¤òÊÖ¤¹¡£ - summary_key_pressed(): ¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤¿¤é - ¤¤¤¯¤Ä¤«¤Î¥³¥Þ¥ó¥É¤ÇÈ´¤±¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/mainwindow.[ch]: main_window_lock(), main_window_unlock(): - ¥í¥Ã¥¯¥«¥¦¥ó¥È¤òÁý²Ã/¸º¾¯¤µ¤»¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-08-19 - - * src/prefs_filter.c: prefs_filter_create(): ¥Ç¥Õ¥©¥ë¥È¤Î¥Ø¥Ã¥À - ¥ê¥¹¥È¤Ë List-Id ¤òÄɲᣠ- * src/prefs_common.[ch]: ¼õ¿®¥À¥¤¥¢¥í¥°¥â¡¼¥É¤Î¥ª¥×¥·¥ç¥ó¤ò - ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥¿¥Ö¤ËÄɲᣠ- * src/inc.[ch]: inc_progress_dialog_create(): ¥À¥¤¥¢¥í¥°¤ò transient - ¤Ë¤·¤Ê¤¤¤è¤¦¤Ë¤·¡¢ÀßÄ꤬ RECV_DIALOG_ALWAYS ¤«¡¢¤Þ¤¿¤Ï - RECV_DIALOG_ACTIVE ¤Ç¥¦¥£¥ó¥É¥¦¤¬¥¢¥¯¥Æ¥£¥Ö¤Î¤È¤­¤Î¤ß¥À¥¤¥¢¥í¥°¤ò - ɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/mainwindow.[ch]: main_window_lock(), main_window_unlock(): - ¿·µ¬¡£¥æ¡¼¥¶¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¥í¥Ã¥¯/¥í¥Ã¥¯²ò½ü¤¹¤ë¡£ - * src/progressdialog.c: progress_dialog_create(): ¥À¥¤¥¢¥í¥°¤ò - ¥â¡¼¥À¥ë¤Ë¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - -2001-08-18 - - * src/folderview.c: folderview_update_node(): ÉÔÍפʺƵ¢¸Æ¤Ó½Ð¤·¤ò - ÍÞÀ©¡£ - * src/menu.[ch]: menu_button_position(): ¿·µ¬¡£¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼ - ¤Î°ÌÃÖ¤ò·×»»¤¹¤ë¡£ - * src/mainwindow.c: toolbar_account_button_pressed(), - ac_label_button_pressed(): ¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤òÀµ¤·¤¤°ÌÃÖ¤Ë - ÃÖ¤¯¤è¤¦¤Ë¤·¤¿¡£¥á¥Ë¥å¡¼¤ò³«¤¤¤Æ¤¤¤ë´Ö¥Ü¥¿¥ó¤Î¥¹¥¿¥¤¥ë¤òÊѲ½ - ¤µ¤»¤ë¤è¤¦¤Ë¤·¤¿¡£ - ac_menu_popup_closed(): selection_done ¥¤¥Ù¥ó¥È»þ¤Ë¸Æ¤Ð¤ì¤ë¿·µ¬ - ´Ø¿ô¡£ - * src/gtkutils.c: gtkut_ctree_node_next(): node == NULL ¤Î¤È¤­¤Ë - ¥¯¥é¥Ã¥·¥å¤¹¤ë¥Ð¥°¤ò½¤Àµ¡£ - * src/summaryview.c: Sergey Vlasov ¤µ¤ó¤«¤é¤Î¥µ¥Þ¥ê½¤Àµ¥Ñ¥Ã¥Á¤ò - ŬÍÑ(thanks!)¡£ - ¥¹¥ì¥Ã¥É¤òŸ³«¤·¤Ê¤¤¾ì¹ç¤Ë¹¹¿·¥â¡¼¥É¤Ç°ÊÁ°¤Î¥á¥Ã¥»¡¼¥¸¤òÁªÂò - ¤Ç¤­¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ - summary_select_node(): ¿·µ¬¡£ - * src/inc.c: Sergey Vlasov ¤µ¤ó¤«¤é¤Î¥µ¥Þ¥ê¥Ó¥å¡¼¹¹¿·ºÇŬ²½¥Ñ¥Ã¥Á - ¤òŬÍÑ(thanks!)¡£ - ¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬¼õ¿®¤µ¤ì¤Ê¤±¤ì¤Ð¡¢¥µ¥Þ¥ê¤Î¹¹¿·¤ò¹Ô¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - Vlasov »á¤Î¥Ñ¥Ã¥Á¤Ë²Ã¤¨¡¢ POP3 ¤Î¼õ¿®¾ðÊó¤âƱÍͤ˻ÈÍÑ¡£ - * src/inc.h: Pop3State ¤Ë¿·¥á¥ó¥Ð cur_total_num ¤òÄɲᣠ- * src/pop.c: pop3_retr_recv(): state->cur_total_num ¤òÁý²Ã¤µ¤»¤ë¡£ - -2001-08-14 - - * version 0.5.3 - -2001-08-14 - - * src/summaryview.c: summary_set_row_marks(): ̤ÆɤιԤ理¬Àµ¤·¤¯ - »ØÄꤵ¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/folderview.c: foldreview_update_node(): gtk_style_copy() ¤ò - »ÈÍѤ»¤º¡¢¤¢¤é¤«¤¸¤á³ä¤êÅö¤Æ¤é¤ì¤¿ style ¤òºÆ»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * README, README.jp: ½¤Àµ¡£ - -2001-08-14 - - * src/pop.c: pop3_getsize_list_recv(): ¥ê¥â¡¼¥È¤«¤é¹¶·â²Äǽ¤Ê - ¥á¥â¥êÇ˲õ¥Ð¥°¤ò½¤Àµ(David Looney ¤µ¤ó thanks)¡£ - * src/inc.c: inc_all_account_mail(): Í­¸ú¤Ê¥¢¥«¥¦¥ó¥È¤¬¤Ê¤¤¡¢ - ¤¢¤ë¤¤¤Ï¥í¡¼¥«¥ë¥¹¥×¡¼¥ë¤Î¤ß¤Î¾ì¹ç¤Ç¤â inc_finished() ¤ò¸Æ¤Ö - ¤è¤¦¤Ë¤·¤¿¡£ - * src/summaryview.c: ¥µ¥Þ¥ê¤Î¹¹¿·¤ò²þÎɤ¹¤ë Sergey Vlasov ¤µ¤ó - ¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£É½¼¨¤µ¤ì¤Æ¤¤¤ë¥á¥Ã¥»¡¼¥¸¤Î°ÌÃÖ¤¬ - ÊÝ»ý¤µ¤ì¤ë¡£ÁªÂò¡¢É½¼¨¤µ¤ì¤Æ¤¤¤ë¥á¥Ã¥»¡¼¥¸¤âƱÍͤËÊÝ»ý¤µ¤ì¤ë¡£ - summary_get_msgnum(): ¿·µ¬¡£ - summary_get_current_msgnum(): ºï½ü¡£ - summary_select_by_msgnum(): ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - * src/account.c: ¡ÖÁ´¼õ¿®¡×¥«¥é¥à¤òÄɲᣠ- account_clist_set_row(): Ä̾ï»ÈÍѤÈÁ´¼õ¿®¤Î¥Õ¥é¥°¤ò¥Þ¡¼¥¯¥¢¥¤¥³¥ó - ¤Çɽ¼¨¡£ - * src/utils.c: to_human_readable(): MB ¤È GB ¤Î¾®¿ôÅÀ°Ê²¼¤Î·å¿ô - ¤ò 2 ¤ËÁý²Ã¡£ - -2001-08-13 - - * ÂÔ˾¤Î :)¡Öº¹½Ð¿Í¤ò¥¢¥É¥ì¥¹Ä¢¤ËÄɲá׵¡Ç½¤ò¼ÂÁõ¡£ - * src/address.[ch]: address_item_new() ¤ËÈ÷¹Í¤Î¤¿¤á¤Î°ú¿ô¤òÄɲᣠ- address_get_folder_list(): ¿·µ¬¡£¥¢¥É¥ì¥¹¥Ä¥ê¡¼¤ò¥È¥é¥Ð¡¼¥¹¤·¡¢ - ¥Õ¥©¥ë¥À¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£ - address_delete_object(): ¥Ä¥ê¡¼¤«¤é¥Î¡¼¥É¤òºï½ü¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ - * src/addressbook.[ch]: addressbook_add_submenu(): ¿·µ¬¡£¥¢¥É¥ì¥¹ - ¥Õ¥©¥ë¥À¤Î¥á¥Ë¥å¡¼¤òºîÀ®¤·¡¢¤½¤ì¤ò¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤ËÉղ乤롣 - addressbook_refresh(): ¥¢¥É¥ì¥¹Ä¢¤Î¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤òºÆÆɹþ¤¹¤ë¡£ - * src/summaryview.c: summary_set_add_sender_menu(): ¿·µ¬¡£º¹½Ð¿Í - ¤ò¥¢¥É¥ì¥¹Ä¢¤ËÄɲ乤뤿¤á¤Î¥á¥Ë¥å¡¼¤òÉղ乤롣 - summary_button_pressed(): ¥á¥Ë¥å¡¼¤ò¥Ý¥Ã¥×¥¢¥Ã¥×¤¹¤ëÁ°¤Ë - summary_set_add_sender_menu() ¤ò¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ - -2001-08-12 - - * src/summaryview.c: summary_thread_build(): ¥×¥í¥»¥¹¤ò¸Ç¤Þ¤é¤»¤ë - ¥Ð¥°¤ò½¤Àµ¡£½é´ü¤Î¥¹¥ì¥Ã¥É¹½ÃÛ¤òºÇŬ²½¡£ - -2001-08-12 - - * src/summaryview.c: ¿¿ô¤Î¥³¡¼¥É¤ÎÀ°Íý¤ò¹Ô¤Ã¤¿¡£ - summary_show(): ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀÚÃÇ/Àܳ¤¹¤ëÂå¤ï¤ê¤Ë¥Ö¥í¥Ã¥¯/ - ¥Ö¥í¥Ã¥¯²ò½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - summary_set_row_marks(): ÊĤ¸¤¿¥Î¡¼¥É¤¬Ì¤ÆÉ¥Þ¡¼¥¯¤ÎÉÕ¤¤¤¿»Ò¤ò - »ý¤Ã¤Æ¤¤¤ì¤Ð¥Õ¥©¥ó¥È¤ò¥Ü¡¼¥ë¥É¤Çɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - summary_thread_build(): ½èÍýÃæ¤Ë tree_expand ¥·¥°¥Ê¥ë¤ò¥Ö¥í¥Ã¥¯ - ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ºÆµ¢´Ø¿ô¤ÎÂå¤ï¤ê¤Ë¥ë¡¼¥×¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - ÊĤ¸¤¿¥Î¡¼¥É¤òÀµ¤·¤¯¥Þ¡¼¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - summary_unthread(): ½èÍýÃæ¤Ë tree_collapse ¥·¥°¥Ê¥ë¤ò¥Ö¥í¥Ã¥¯ - ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ºÆµ¢´Ø¿ô¤ÎÂå¤ï¤ê¤Ë¥ë¡¼¥×¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - summary_thread_func(), summary_unthread_func(): ºï½ü¡£ - summary_tree_expanded(), summary_tree_collapsed(): ¿·µ¬¥³¡¼¥ë - ¥Ð¥Ã¥¯´Ø¿ô¡£ - * src/inc.[ch]: inc_pop3_session_do(): Àܳ¤Ë¼ºÇÔ¤·¤¿¤È¤­¤Ë·Ù¹ð¥Ñ¥Í¥ë - ¤òɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£¥À¥¤¥¢¥í¥°¤Ë¤è¤ê¾ÜºÙ¤Ê¾õÂÖ¤òɽ¼¨¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ - -2001-08-10 - - * src/folderview.c: folderview_update_all_node(): ¿·µ¬¡£Á´¤Æ¤Î - ¥í¡¼¥«¥ë¥Õ¥©¥ë¥À¤ò¹¹¿·¤¹¤ë¡£ - * src/inc.c: scan_all_after_inc ¥ª¥×¥·¥ç¥ó¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ì¤Ð - ¼õ¿®¸å¤Ë¥í¡¼¥«¥ë¥Õ¥©¥ë¥À¤ò¹¹¿·¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_common.[ch]: scan_all_after_inc ¥ª¥×¥·¥ç¥ó¤òÄɲᣠ- * src/folder.h: FOLDER_IS_LOCAL(): ¿·µ¬¥Þ¥¯¥í¡£ - -2001-08-09 - - * src/defs.h - src/headerview.c - src/headerwindow.c - src/textview.c - src/prefs_common.c - src/prefs_common.h: ¥Ü¡¼¥ë¥É¤È¾®¥Õ¥©¥ó¥È¤òÀßÄê²Äǽ¤Ë¤·¤¿¡£ - src/summaryview.c: ̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò¥Ü¡¼¥ë¥É¥Õ¥©¥ó¥È¤Çɽ¼¨¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_common.c - src/prefs_common.h - src/summaryview.c: ̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Î¶¯Ä´¤òÍ­¸ú/̵¸ú¤Ë¤¹¤ë¥ª¥×¥·¥ç¥ó - ¤òÄɲᣠ- -2001-08-08 - - * src/pixmaps/mark.xpm: ½¤Àµ¡£ - * src/gtkutils.[ch]: gtkut_ctree_expand_parent_all(): ¿·µ¬¡£ - * src/summaryview.c: summary_set_ctree_from_list(): ¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹ - ¸þ¾å¤Î¤¿¤á¤Ë¥¹¥ì¥Ã¥É¤Î¥ë¡¼¥È¥á¥Ã¥»¡¼¥¸¤òŸ³«¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - summary_show() - summary_select_next_unread() - summary_step(): ¥á¥Ã¥»¡¼¥¸¤ò³«¤¯¤È¤­¤Ë¥¹¥ì¥Ã¥É¤òŸ³«¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - summary_thread_build(): ¥ª¥×¥·¥ç¥ó¤¬ ON ¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤é¥¹¥ì¥Ã¥É¤ò - Ÿ³«¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_common.[ch]: ¡Ö¥¹¥ì¥Ã¥É¤òŸ³«¤¹¤ë¡×¥ª¥×¥·¥ç¥ó¤òÄɲᣠ- -2001-08-08 - - * src/prefs_common.c: ¡ÖEmacs¾å¤Î¥á¡¼¥é¤Î¥Þ¥¦¥¹Áàºî»þ¤ÎµóÆ°¤ò - ¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë¡×¤òºï½ü¡£ - * src/prefs_common.c - src/prefs_account.c: VSPACING_NARROW ¤ÎÃͤò 3 ¤ËÊѹ¹¡£ - * src/pixmaps/new.xpm - src/pixmaps/unread.xpm: ¸µ¤ËÌᤷ¤¿¡£ - -2001-08-07 - - * src/address.[ch]: - address_folder_new() - address_group_new() - address_item_new(): Ìá¤êÃͤò AddressObject ¤ËÊѹ¹¡£ - address_build_tree(): file ¤Î assertion ¤ò½Ð¤µ¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - * src/pixmaps/new.xpm - src/pixmaps/unread.xpm: ¾¯¤·½¤Àµ¡£ - -2001-08-06 - - * src/addressbook.c: ¤¤¤¯¤Ä¤«¤Î¥Ð¥°¤ò½¤Àµ¡£ - -2001-08-06 - - * ¥¢¥É¥ì¥¹Ä¢¤Î¥í¥¸¥Ã¥¯Éôʬ¤òÊ̥⥸¥å¡¼¥ë¤ËʬΥ(¸½ºß¿Ê¹ÔÃæ)¡£ - * src/address.[ch]: ¿·µ¬¡£¥¢¥É¥ì¥¹Ä¢¤Î¥í¥¸¥Ã¥¯Éôʬ¤ò´Þ¤à¡£ - * src/addressbook.[ch]: ¥í¥¸¥Ã¥¯Éôʬ¤òºï½ü¡£ - -2001-08-04 - - * src/textview.c: textview_show_header(): ¥Ø¥Ã¥À̾¤Î¸å¤Ë¥´¥ßʸ»ú¤¬ - ɽ¼¨¤µ¤ì¤ë¥Ð¥°¤ò½¤Àµ¡£ - -2001-08-02 - - * src/inc.c: inc_start(): Ã×̿Ū¤Ç¤Ê¤¤¥¨¥é¡¼¤ÇÃæÃǤ·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - -2001-08-01 - - * version 0.5.2 - -2001-08-01 - - * src/mimeview.c: mimeview_view_file(): ¥á¥¤¥ó¥×¥í¥»¥¹¤Î¥µ¥¹¥Ú¥ó¥É - ¤òËɤ°¤¿¤á¤Ë metamail ¤Ë -x ¥ª¥×¥·¥ç¥ó¤òÄɲᣠ- mimeview_button_pressed(): content-type ¤¬ application/octet-stream - ¤Î¾ì¹ç¤Ï `³«¤¯' ¥á¥Ë¥å¡¼¹àÌܤòÁªÂòÉԲĤˤ·¤¿¡£ - -2001-07-31 - - * src/imap.c: imap_parse_atom(): ¥¨¥¹¥±¡¼¥×¤µ¤ì¤¿Ê¸»ú¤òÀµ¤·¤¯½èÍý - ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - get_quoted(): ¿·µ¬¡£¥¨¥¹¥±¡¼¥×ʸ»ú '\' ¤ò½èÍý¤¹¤ë¡£ - * src/folder.c: folder_read_list(): folderlist.xml ¤¬Â¸ºß¤·¤Ê¤¤ - ¾ì¹ç·Ù¹ð¤ò½ÐÎϤ·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - * src/main.c: main(): ¥»¥Ã¥È¥¢¥Ã¥×¤Î¸å¥Õ¥©¥ë¥À¥ê¥¹¥È¤ò½ñ¤­½Ð¤¹¤è¤¦ - ¤Ë¤·¤¿¡£ - * src/textview.c: textview_create() - src/compose.c: compose_create(): ¥Ç¥Õ¥©¥ë¥È¤Î¥¿¥ÖÉý¤ò8¤Ë¤·¤¿¡£ - -2001-07-29 - - * src/prefs_common.c: date_format_select_row(): ¥ê¥¹¥È¤ò¥­¡¼¤ÇÁªÂò - ¤·¤¿¤È¤­¤Ë segfault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ - -2001-07-28 - - * src/mainwindow.c: main_window_popup(): ¥Ý¥Ã¥×¥¢¥Ã¥×»þ¤Ë¥¦¥£¥ó¥É¥¦ - ¤òÈó¥¢¥¤¥³¥ó²½¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/procmime.c: procmime_scan_mime_type(): ¿·µ¬¡£ - procmime_scan_content_type(): procmime_scan_mime_type() ¤ò»ÈÍÑ - ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - procmime_scan_mime_header(): Content-Type ¤¬ - "application/octet-stream" ¤Î¾ì¹ç¤ÏźÉÕ¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤òÄ´¤Ù¤Æ - Àµ¤·¤¤ MIME ¥¿¥¤¥×¤òÉÕ¤±¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-07-27 - - * src/prefs_common.c: date_format_create(): ¥À¥¤¥¢¥í¥°¤Î¥ì¥¤¥¢¥¦¥È - ¤ò½¤Àµ¡£ - -2001-07-26 - - * src/account.c: account_find_from_address(): ¥Þ¥¤¥Ê¡¼¤Ê¥Ð¥°¤ò½¤Àµ¡£ - * src/prefs_common.c: claws ¥Ö¥é¥ó¥Á¤«¤éÆüÉդηÁ¼°¤ÎÀßÄê¤Î¥æ¡¼¥¶ - ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼è¤ê¹þ¤ß¡¢¤¤¤¯¤Ä¤«¤Î½¤Àµ¤ò²Ã¤¨¤¿¡£ - -2001-07-25 - - * src/account.[ch]: account_edit_create(): ¥Ç¥Õ¥©¥ë¥È¥Ü¥¿¥ó¤Îʸ»úÎó - ¤ò½¤Àµ¡£ - account_find_from_address(): ¿·µ¬¡£ - * src/procmime.c: - procmime_scan_content_type(), procmime_scan_content_disposition(): - ESC ¥³¡¼¥É¸¡½Ð¤ò½¤Àµ¡£ - * src/compose.c: compose_reply(): ¥á¥Ã¥»¡¼¥¸¥Ø¥Ã¥À¤Ë½¾¤Ã¤Æ¥¢¥«¥¦¥ó¥È - ¤ò¼«Æ°Åª¤ËÁªÂò¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_common.[ch]: ¥á¥ó¥Ð "reply_account_autosel" ¤òÄɲᣠ- -2001-07-25 - - * src/progressdialog.c: CList ¤ò¥¹¥¯¥í¡¼¥ë²Äǽ¤Ë¤·¤¿¡£ - * src/inc.c: inc_start(): Ã×̿Ū¤Ç¤Ê¤¤¥¨¥é¡¼¤ÇÃæÃǤ·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - -2001-07-24 - - * Paul Kater ¤µ¤óºî¤Î±Ñ¸ìÈÇ Sylpheed User's Manual (paul@nlpagan.net) - ¤òÄɲÃ(thanks!)¡£ - * configure.in - manual/Makefile.am - src/mainwindow.c: ±Ñ¸ìÈǥޥ˥奢¥ë¤ËÂбþ¡£ - * manual/en/sylpheed*.html: ±Ñ¸ì¤Îʸ½ñ¤òÄɲᣠ- * AUTHORS: ¹¹¿·¡£ - -2001-07-23 - - * src/nntp.c: nntp_ok(): ¸å¤Ë³¤¯¥á¥Ã¥»¡¼¥¸¤ò»ý¤¿¤Ê¤¤±þÅú¤ò½èÍý - ¤Ç¤­¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ - * src/smtp.c: smtp_ok(): Ʊ¾å¡£ - * src/compose.c: compose_account_option_menu_create(): ¥¢¥«¥¦¥ó¥È - ¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤Îɽ¼¨·Á¼°¤òÊѹ¹¡£ - -2001-07-22 - - * src/prefs_customheader.c: prefs_custom_header_clist_set_row(): - ʸ»úÎ󤫤é²þ¹Ô¥³¡¼¥É¤ò¼«Æ°Åª¤Ë¼è¤ê½ü¤¯¤è¤¦¤Ë¤·¤¿¡£ - prefs_custom_header_create(): ¥Ç¥Õ¥©¥ë¥È¤ÎÁªÂò»è¤Ë "X-Face" ¤ò - Äɲᣠ- * src/news.c: news_fetch_msg(), news_get_group_list() - src/imap.c: imap_fetch_msg(): ½ñ¤­¹þ¤ß¤ÎÁ°¤Ë¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê - ¤òºîÀ®¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/procmime.c: - procmime_scan_content_type() - procmime_scan_content_disposition(): ¥Ñ¡¼¥¹Á°¤Ë JIS ¤ò EUC-JP - ¤ËÊÑ´¹¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/codeconv.c: conv_unmime_header(): ¾¯¤·¥³¡¼¥É¤òÀ°Íý¡£ - * src/compose.c: źÉÕ¥Ú¥¤¥ó¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¤¬¥ê¥¹¥È¤¬¶õ¤Î¾ì¹ç¤Ï - źÉեإåÀ¤òÉÕ¤±¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - * src/recv.c: recv_bytes_write(): alloca() ¤ÎÂå¤ï¤ê¤Ë g_malloc() - ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-07-18 - - * version 0.5.1 - -2001-07-18 - - * src/compose.c: compose_quote_parse_fmt() - src/prefs_common.c: prefs_quote_description_create(): Cc ¤ò - ÊÖ¿®¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë´Þ¤á¤ëµ­¹æ `%c' ¤òÄɲÃ(Cyril Bellot ¤µ¤ó thanks)¡£ - * src/base64.[ch] - src/procmime.c: procmime_decode_content(): Ä̾ï¤Î¹ÔĹ(4¤ÎÇÜ¿ô)¤Ç¤Ï - ¤Ê¤¤ base64 ¥Ç¡¼¥¿¤ò¥Ç¥³¡¼¥É¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë Sergey Vlasov ¤µ¤ó - ¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ - -2001-07-17 - - * src/procmsg.[ch]: ±Ê³¥Õ¥é¥°¤È°ì»þ¥Õ¥é¥°¤ò2¤Ä¤ÎÊÑ¿ô¤ËʬΥ¤·¡¢ - MsgFlags ¤ò¤½¤ì¤é¤ò´Þ¤à¹½Â¤ÂΤˤ·¤¿¡£ - MSG_SET_PERM_FLAGS() - MSG_SET_TMP_FLAGS() - MSG_UNSET_PERM_FLAGS() - MSG_UNSET_TMP_FLAGS(): ¿·µ¬¥Þ¥¯¥í¡£ - * src/compose.c - src/imap.c - src/inc.c - src/messageview.c - src/mh.c - src/news.c - src/procheader.c - src/summaryview.c: ¿·¤·¤¤ MsgFlags ¤Î¤¿¤á¤ËÊѹ¹¡£ - * src/utils.[ch]: hash_free_value_mem(): ¿·µ¬¡£¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Î - Ãͤò²òÊü¤¹¤ë¡£ - -2001-07-16 - - * src/inc.c: inc_pop3_recv_func(), inc_progress_update(): - ¸½ºß¤Î¥µ¥¤¥º¤ò¿Í´Ö¤¬Æɤߤ䤹¤¤·Á¼°¤Çɽ¼¨¡£ - * src/grouplistdialog.c: grouplist_recv_func(): Ʊ¾å¡£ - * TODO - TODO.jp: ¹¹¿·¡£ - -2001-07-16 - - * src/codeconv.c: - conv_unmime_header(), conv_unmime_header_overwrite(): ¥Ø¥Ã¥À - ¥Õ¥£¡¼¥ë¥É¤ÎÀ¸ JIS ¥³¡¼¥É¤ËÂФ¹¤ëÂн衣 - * src/folder.c: - folder_get_default_folder() - folder_get_default_inbox() - folder_get_default_outbox() - folder_get_default_draft() - folder_get_default_queue() - folder_get_default_trash(): folder_list ¤¬ NULL ¤Î¤È¤­¤Ë segfault - ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ - -2001-07-15 - - * README - README.jp - INSTALL - INSTALL.jp - TODO - TODO.jp: ¹¹¿·¡£ - * src/grouplistdialog.c: grouplist_dialog_set_list(): ¥Ë¥å¡¼¥¹ - ¥°¥ë¡¼¥×¤Î¥ê¥¹¥È¤ò¼õ¿®Ãæ¤Ë UI ¤ò¹¹¿·¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - grouplist_dialog_create(): ¥¨¥ó¥È¥ê¥¦¥£¥¸¥§¥Ã¥È¤È¥¹¥Æ¡¼¥¿¥¹¥é¥Ù¥ë - ¤òÄɲᣠ- grouplist_recv_func(): ¿·µ¬¡£ - refresh_clicked(): ÇÓ¾¥í¥Ã¥¯ÊÑ¿ô¤òÄɲᣠ- clist_selected(): CList ¤¬ÁªÂò¤µ¤ì¤¿¤é¥Æ¥­¥¹¥È¥¨¥ó¥È¥ê¤ò¥»¥Ã¥È¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ group_clist_select() ¤«¤é²þ̾¡£ - entry_activated(): ¿·µ¬¡£ - grouplist_clear(): grouplist_free() ¤«¤é²þ̾¡£¥ê¥¹¥È¤È¥¨¥ó¥È¥ê - ¥¦¥£¥¸¥§¥Ã¥È¤â¥¯¥ê¥¢¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/news.c: news_get_group_list(): ¥ê¥¹¥È¤ÎÄɲäò¹â®²½ - (g_slist_append() ¤Ï¥ê¥¹¥È¤Î¥µ¥¤¥º¤¬Â礭¤¯¤Ê¤ë¤ÈÈó¾ï¤ËÃÙ¤¯¤Ê¤ë)¡£ - * src/defs.h: UI_REFRESH_INTERVAL ¤ÎÄêµÁ¤òÄɲᣠ- NEWSGROUP_LIST ¤ÎÄêµÁ¤òÊѹ¹¡£ - * src/recv.c: recv_write() - src/send.c: send_message_smtp(): UI ¤Î¹¹¿·´Ö³Ö¤ò UI_REFRESH_INTERVAL - (50msec) ¤ËÊѹ¹¡£ - * src/account.c: account_add(): ¥Ë¥å¡¼¥¹¥¢¥«¥¦¥ó¥È¤òÄɲä·¤¿¤È¤­¤Ë - ¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ò¹¹¿·¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ - * src/grouplistdialog.c: ÇÓ¾¥í¥Ã¥¯ÊÑ¿ô¤ò¥°¥í¡¼¥Ð¥ë¤Ë¤·¡¢ - grouplist_dialog_set_list() ¤Ç¥í¥Ã¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/textview.c: ¥á¥Ã¥»¡¼¥¸¤Î¿§¤ò̵¸ú¤Ë¤·¤¿¤È¤­¤Ë¥¯¥ê¥Ã¥«¥Ö¥ë URI - ¤â̵¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ - -2001-07-15 - - * src/grouplistdialog.c: ok_clicked(), cancel_clicked(): - gtk_main_level() ¤¬ 1 ¤Ê¤é¥á¥¤¥ó¥ë¡¼¥×¤òÈ´¤±¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - grouplist_dialog_set_list(): ¥ê¥¹¥È¤ÎÄɲÃÃæ¤Ë CList ¤ò¥Õ¥ê¡¼¥º - ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - grouplist_dialog(): ¥ê¥¹¥È¤ò¹¹¿·¤¹¤ëÁ°¤Ë¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ - -2001-07-14 - - * src/folder.c: folder_write_list_recursive(): ¥Î¡¼¥É¤¬»Ò¤ò»ý¤Ã¤Æ - ¤¤¤ì¤Ð `collapsed' °À­¤òÄɲ乤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/grouplistdialog.[ch]: ¿·µ¬¡£¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤ò°ìÍ÷¤«¤éÁªÂò - ²Äǽ¡£ - * src/news.[ch] - news_get_group_list(): ¿·µ¬¡£¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£ - news_remove_group_list(): ¿·µ¬¡£¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¥ê¥¹¥È¤Î¥­¥ã¥Ã¥·¥å - ¤òºï½ü¤¹¤ë¡£ - * src/folderview.c: folderview_new_news_group_cb(): input_dialog() - ¤ÎÂå¤ï¤ê¤Ë grouplist_dialog() ¤ò¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ - -2001-07-12 - - * autogen.sh: ½¤Àµ¡£ - * src/folder.[ch] - src/folderview.c: ¥Õ¥©¥ë¥À¤Î³«ÊľõÂÖ¤¬Êݸ¤µ¤ì¤ë¤è¤¦¤Ë¤·¤¿ - (Alfons ¤µ¤ó thanks)¡£ - -2001-07-06 - - * version 0.5.0 - -2001-07-06 - - * src/imap.c: imap_remove_folder(): DELETE ¤ÎÁ°¤Ë EXAMINE ¤Ç INBOX - ¤òÁªÂò¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_cmd_do_select(): ¿·µ¬¡£°ú¿ô¤Ë±þ¤¸¤Æ SELECT ¤È EXAMINE ¤ò - ÀÚ¤êÂؤ¨¤ë¡£ - imap_cmd_select(): imap_cmd_do_select() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_cmd_examine(): ¿·µ¬¡£ - * src/folderview.c: folderview_rm_imap_folder_cb(): ºï½ü¤Ë¼ºÇÔ¤·¤¿¤é - ¸½ºß¤Î¥Õ¥©¥ë¥À¤òºÆÅÙÁªÂò¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-07-05 - - * version 0.5.0pre4 - - * manual/ja/sylpheed.sgml - manual/ja/*.html: ÆüËܸì¥Þ¥Ë¥å¥¢¥ë¤ò¹¹¿·(º£°æ¤µ¤ó thanks)¡£ - * src/summaryview.c: summary_set_row_marks(): ¥Õ¥©¥¢¥°¥é¥¦¥ó¥É¤ò - Àµ¤·¤¯»ØÄꤷ¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ - * src/folderview.h - src/summaryview.h: color_normal ¥á¥ó¥Ð¤ò FolderView ¤È SummaryView - ¤«¤éºï½ü¡£ - * src/mainwindow.c: main_window_create(): color_normal ¤òºï½ü¡£ - -2001-07-04 - - * src/prefs_account.[ch]: IMAP4 ¤È NNTP ¤Î¥Ý¡¼¥ÈÈÖ¹æ¤ò»ØÄê²Äǽ¤Ë¤·¤¿¡£ - * src/imap.c: imap_session_get() - src/news.c: news_session_new_for_folder(), news_session_get(): - »ØÄꤵ¤ì¤Æ¤¤¤ì¤Ð¥æ¡¼¥¶ÄêµÁ¤Î¥Ý¡¼¥ÈÈÖ¹æ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-07-03 - - * src/imap.c: imap_scan_tree_recursive(): ¥¹¥­¥ã¥óÃæ¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ - ¤Î¥¹¥Æ¡¼¥¿¥¹¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_scan_folder(): ¼ÂÁõ¡£¿·Ã塢̤ÆÉ¡¢¹ç·×¤Î¥á¥Ã¥»¡¼¥¸¿ô¤ò¹¹¿·¤¹¤ë¡£ - imap_status(): ¿·µ¬¡£ STATUS ¥³¥Þ¥ó¥É¤Î±þÅú¤ò²òÀϤ¹¤ë¡£ - imap_status_uidnext(): ºï½ü¡£ - imap_cmd_status(): ºï½ü¡£ - * src/textview.c: textview_show_part(): ÀøºßŪ¤Ê¥á¥â¥ê¥ê¡¼¥¯¤ò½¤Àµ¡£ - -2001-07-03 - - * src/alertpanel.c: alertpanel_create(): ¥á¥Ã¥»¡¼¥¸¤¬ÅÓÀÚ¤ì¤ë¤Î¤ò½¤Àµ¡£ - * src/rfc2015.c: rfc2015_decrypt_message(): content-type ¤ÎÂ羮ʸ»ú - ÌäÂê¤ò½¤Àµ(¤³¤Î patch ¤Ë´Ø¤·¤Æ Rene Rebe ¤µ¤ó thanks)¡£ - * src/codeconv.c: code_get_code_conv_func(): ISO-8859-1 ¤Î¸¡½ÐÉô¤ò - ½¤Àµ¡£ - * src/prefs_common.c: prefs_send_create(): libjconv ̤»ÈÍÑ»þ¤Ë - ÄɲäǤ¤¤¯¤Ä¤«¤Îʸ»ú¥³¡¼¥É¥»¥Ã¥È¤ò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ - * configure.in: °ì»þŪ¤Ë --enable-threads ¤ò̵¸ú¤Ë¤·¤¿¡£ - * INSTALL - INSTALL.jp: --enable-threads ¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Îµ­½Ò¤òºï½ü¡£ - -2001-07-01 - - * version 0.5.0pre3 - - * src/folderview.[ch]: folderview_set_all(): ¿·µ¬¡£ - * src/account.c: account_add(): IMAP4 ¥Ä¥ê¡¼¤òºîÀ®¤·¤¿¸å - folderview_set_all() ¤ò¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ - account_edit_create(): ¥ê¥¹¥È¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ¥¢¥«¥¦¥ó¥È¤ÎÀßÄê - ¥À¥¤¥¢¥í¥°¤ò³«¤±¤ë¤è¤¦¤Ë¤·¤¿¡£ - account_selected(): ¿·µ¬¡£ - account_clist_set(): CList ¤Î¥Õ¥©¡¼¥«¥¹¤òÀµ¤·¤¯¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-06-30 - - * src/imap.c: imap_scan_tree(): trash ¤¬¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð - imap_create_tree() ¤ò¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ - imap_scan_tree_recursive(): INBOX ¤Î¥µ¥Ö¥Õ¥©¥ë¥À¤òõ¤¹¤è¤¦¤Ë¤·¤¿¡£ - Trash ¥Õ¥©¥ë¥À¤òǧ¼±¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_create_tree(): trash ¤òºîÀ®¤¹¤ëÉôʬ¤òʬ³ä¤·¤¿¡£ - imap_create_trash(): ¿·µ¬¡£ - * src/folder.c: folder_build_tree(), folder_write_list_recursive(): - no_sub ¤È no_select ¤òÊݸ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/summaryview.c: summary_show(): item->no_select ¤¬¿¿¤Î¾ì¹ç - ³¹Ô¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - -2001-06-29 - - * src/imap.c: imap_scan_tree(): ¥ë¡¼¥È¥Õ¥©¥ë¥À¤òÀµ¤·¤¯¥»¥Ã¥È¤·¤Æ - ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ - -2001-06-28 - - * src/folderview.[ch]: - folderview_update_tree(): ¿·µ¬¡£°ì¤Ä¤Î¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ò¹¹¿·¤¹¤ë¡£ - folderview_update_tree_cb(): ¿·µ¬¡£ - ¡Ö¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ò¹¹¿·¡×¤ò¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤ËÄɲä·¡¢É½¸½¤ò - ¤¤¤¯¤Ä¤«Êѹ¹¡£ - -2001-06-27 - - * src/imap.c: IMAP4 ¥Õ¥©¥ë¥À¥ê¥¹¥È¤Î¼«Æ°¥¹¥­¥ã¥ó¤ò¼ÂÁõ¡£ - imap_scan_tree(): ¿·µ¬¡£ IMAP4 ¥Õ¥©¥ë¥ÀÁ´ÂΤò¥¹¥­¥ã¥ó¤¹¤ë¡£ - imap_scan_tree_recursive(): ¿·µ¬¡£ IMAP4 ¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ò - ¥È¥é¥Ð¡¼¥¹¤¹¤ë¡£ - imap_parse_list(): ¿·µ¬¡£¥í¡¼¥«¥ë¥Ñ¥¹¤ò IMAP4 ¥Ñ¥¹¤ËÊÑ´¹¤¹¤ë¡£ - * src/folder.h: no_sub ¤È no_select ¤ò FolderItem ¤ËÄɲᣠ- * src/folder.c: folder_tree_destroy(): ÊÑ¿ô¤ò¤¤¤¯¤Ä¤«¥ê¥»¥Ã¥È¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ - * src/folderview.c: folderview_scan_tree_func(): IMAP4 ¤ËÂбþ¡£ - -2001-06-26 - - * src/imap.c: imap_parse_envelope(): ¼¡¤Î¹Ô¤Ë³¤¯ FETCH ±þÅú¤ò - ²òÀϤǤ­¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ - imap_parse_fetch_element(): ºï½ü¡£ - imap_parse_atom(), imap_parse_one_address(), imap_parse_address(), - imap_parse_envelope(), imap_get_uncached_messages(): FETCH ±þÅú - ¤ò²òÀϤ¹¤ë¤¿¤á¤Ë GString ¤È sock_getline() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_remove_all_msg(): ¥á¥Ã¥»¡¼¥¸¤òÀµ¤·¤¯ºï½ü¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò - ½¤Àµ¡£ - imap_parse_address(): ¥¢¥É¥ì¥¹¤òÀµ¤·¤¯·ë¹ç¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò - GString ¤ò»ÈÍѤ·¤Æ½¤Àµ¡£ - * src/socket.[ch]: sock_getline(), fd_getline(): ¿·µ¬¡£¹ÔÁ´ÂΤò - Æɤ߹þ¤ß¡¢¿·µ¬¤Ë¥¢¥í¥±¡¼¥È¤µ¤ì¤¿Ê¸»úÎó¤òÊÖ¤¹¡£ - * src/prefs_account.[ch]: ¡ÖIMAP¥µ¡¼¥Ð¥Ç¥£¥ì¥¯¥È¥ê¡×¥¨¥ó¥È¥ê¤òÄɲᣠ- -2001-06-25 - - * version 0.5.0pre2 - - * src/imap.c: imap_create_tree(): imap_create_folder() ¤Ë¥í¡¼¥«¥ë - ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥»¥Ñ¥ì¡¼¥¿¤Ç¶èÀÚ¤é¤ì¤Æ¤¤¤ë¥Ñ¥¹¤òÅϤ¹¤è¤¦¤Ë¤·¤¿¡£ - imap_create_folder(): STATUS ¥³¥Þ¥ó¥É¤ÎÂå¤ï¤ê¤Ë LIST ¤ò»È¤Ã¤Æ - ¥Õ¥©¥ë¥À¤Î¸ºß¤òÄ´¤Ù¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_cmd_list(): ¿·µ¬¡£ - imap_query_password(): ¿·µ¬¡£ - imap_session_new(): ¥Ñ¥¹¥ï¡¼¥É¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¿Ò¤Í¤ë¤è¤¦¤Ë - ¤·¤¿¡£ - -2001-06-24 - - * src/imap.c: imap_parse_envelope(): FETCH ¤Î·ë²Ì¤òǤ°Õ¤Î½ç½ø¤Ç - ²òÀϤǤ­¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_parse_fetch_element(): ¿·µ¬¡£ FETCH ¤Î·ë²Ì¤Î̾Á°¤ÈÃͤΥڥ¢ - ¤ò²òÀϤ¹¤ë¡£ - imap_parse_flags(): ¤è¤ê½ÀÆðÀ­¤ò»ý¤¿¤»¤ë¤¿¤á¤Ë½¤Àµ¡£ - * src/utils.[ch]: set_log_file(): ¿·µ¬¡£¥í¥®¥ó¥°¤Î¤¿¤á¤Ë¿·¤·¤¤ - ¥Õ¥¡¥¤¥ë¤ò³«¤¯¡£ - close_log_file(): ¿·µ¬¡£³«¤¤¤¿¥í¥°¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë¡£ - log_print(), log_message(), log_warning(), log_error(): ¥í¥° - ¥Õ¥¡¥¤¥ë¤Ë¤â½ÐÎϤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-06-22 - - * src/imap.c: imap_cmd_status(): ÂåÆþ¤ÎÁ°¤Ë "value" ¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò - ¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿(À¾Å礵¤ó thanks)¡£ - -2001-06-21 - - * src/folderview.c: folderview_drag_motion_cb(): MH ¤È IMAP4 ¥Õ¥©¥ë¥À - ´Ö¤Î DnD ¤¬(º£¤Î¤È¤³¤í)¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤·¤¿(Ê¿¾¾¤µ¤ó thanks)¡£ - * src/foldersel.[ch]: ¸½ºß¤Î¥Õ¥©¥ë¥À¤ÎÂоݤˤʤì¤Ê¤¤¥Õ¥©¥ë¥À¤ò - ɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - -2001-06-20 - - * version 0.5.0pre1 - - * src/imap.c - imap_get_msg_list() - imap_cmd_envelope() - imap_cmd_fetch() - imap_cmd_copy() - imap_cmd_store(): Ï¢ÈÖ¤ÎÂå¤ï¤ê¤Ë UID ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_set_article_flags() ¤ò imap_set_message_flags() ¤Ë̾¾ÎÊѹ¹¡£ - * src/summaryview.c: summary_execute(): ¸½ºß¤Î¥Õ¥©¥ë¥À¤¬ IMAP4 - ¤Ç¤â¥µ¥Þ¥ê¤ò¹¹¿·¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - * src/utils.[ch]: remove_numbered_files(): °ú¿ô¤Î·¿¤ò gint ¤«¤é - guint ¤Ë¤·¤¿¡£ - -2001-06-19 - - * src/imap.c: imap_cmd_login(), imap_cmd_select(), imap_cmd_status(), - imap_cmd_create(), imap_cmd_delete(), imap_cmd_copy(): ʸ»úÎó - ¤Ë¥¹¥Ú¡¼¥¹¤¬Æþ¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¥À¥Ö¥ë¥¯¥©¡¼¥Æ¡¼¥·¥ç¥ó¤Ç°Ï¤Þ¤Ê¤¤ - ¤è¤¦¤Ë¤·¤¿(¸Å¤¤ Cyrus IMAP4 server ¤Ø¤ÎÂнè)¡£ - imap_create_folder(): ¥»¥Ñ¥ì¡¼¥¿ÃÖ´¹¤Î¥Ð¥°½¤Àµ¡£ - imap_session_connect_if_not() ¤ò imap_session_get() ¤Ë̾¾ÎÊѹ¹¡£ - imap_get_msg_list(): use_cache ¤¬ off ¤Î¤È¤­¤ÏÁ´¤Æ¤Î¥­¥ã¥Ã¥·¥åºÑ - ¥á¥Ã¥»¡¼¥¸¤òºï½ü¡£ - imap_delete_cached_messages(): ¥Ç¥£¥ì¥¯¥È¥ê¥¨¥ó¥È¥ê¤òÆɤó¤Ç»ØÄê - ¤·¤¿ÈϰϤΥ­¥ã¥Ã¥·¥åºÑ¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_parse_one_address(): fromname ¤¬¶õ¤Î¾ì¹ç¤Ïº¹½Ð¿Í¥¢¥É¥ì¥¹¤È - Ʊ¤¸¤Ë¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/utils.[ch]: remove_numbered_files(): ¿·µ¬¡£ÈϰϤò»ØÄê²Äǽ¡£ - * src/summaryview.c: summary_execute(): ¸½ºß¤Î¥Õ¥©¥ë¥À¤¬ IMAP4 - ¤Î¾ì¹ç¥µ¥Þ¥ê¤ò¹¹¿·¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - KEY_PRESS_EVENT_STOP(): ¿·µ¬¥Þ¥¯¥í¡£ - summary_key_pressed(): summary_execute() ¤ò¸Æ¤Ö¤È¤­¤Ë¥·¥°¥Ê¥ë¤Î - ȯ¹Ô¤ò»ß¤á¤ë¤è¤¦¤Ë¤·¤¿¡£ - summary_select_by_msgnum(): msg_is_toggled_on ¤¬ TRUE ¤Î¤È¤­¤À¤± - ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£¸½ºß¤Î¥Ú¡¼¥¸¤òÁªÂò¤µ¤ì¤¿¥Î¡¼¥É - ¤Î¤È¤³¤í¤Ø°ÜÆ°¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/news.c; news_delete_old_articles(): ¥Ç¥£¥ì¥¯¥È¥ê¥¨¥ó¥È¥ê¤ò - Æɤó¤Ç»ØÄꤷ¤¿ÈϰϤΥ­¥ã¥Ã¥·¥åºÑ¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/folderview.c: - folderview_selected(), folderview_button_released(): ¥Õ¥©¥ë¥À¤ò - Àµ¤·¤¯ÁªÂò¤·¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ - -2001-06-18 - - * src/mainwindow.c - src/summaryview.c - src/prefs_common.c: ±Ñ¸ìɽ¸½¤Î²þÁ±(Paul Mangan ¤µ¤ó thanks)¡£ - * src/mainwindow.c: compose_cb() - src/summaryview.c: summary_key_pressed() - src/compose.c: compose_new_with_recipient(): ¿·µ¬µ­»ö¤òºîÀ®¤¹¤ë - ¤È¤­¤Ë¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¥¨¥ó¥È¥ê¤ò¼«Æ°Åª¤ËËä¤á¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-06-17 - - * src/procmsg.c: procmsg_msg_list_free(): ¥ê¥¹¥È¤òÀµ¤·¤¯²òÊü¤·¤Æ - ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ - -2001-06-16 - - * version 0.4.99 - - * src/imap.c: imap_find_namespace(): namespace ¤Î¥Ñ¥¹¶èÀÚ¤ê¤ò - Èæ³Ó¤ÎÁ°¤Ë¥¹¥é¥Ã¥·¥å¤ÇÃÖ´¹¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_remove_folder(): namespace ¤ò»ÈÍÑ¡£ - imap_create_tree(): Trash ¤òºîÀ®¤¹¤ë¤È¤­¤Ë namespace ¤ò»È¤¦¤è¤¦¤Ë - ¤·¤¿¡£ - imap_get_msg_list(): exists == 0 ¤Î¤È¤­¤Ë¸Å¤¤¥ê¥¹¥È¤òÊÖ¤·¥á¥â¥ê - ¥ê¡¼¥¯¤òµ¯¤³¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ - imap_select(): ¿·µ¬¡£ imap_cmd_select() ¤Î¥é¥Ã¥Ñ¡¼¡£ - * src/foldersel.c: foldersel_set_tree(): IMAP4 ¥Õ¥©¥ë¥À¤âɽ¼¨¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ - -2001-06-15 - - * src/folderview.c: - folderview_new_folder_cb() - folderview_new_imap_folder_cb(): ¥Õ¥©¥ë¥À¤ÎºîÀ®¤Þ¤¿¤Ïºï½ü¤Ë¼ºÇÔ - ¤·¤¿¤é¥¨¥é¡¼¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - ¥µ¥Ö¥Õ¥©¥ë¥À¤ò´Þ¤à¥Õ¥©¥ë¥À¤òºîÀ®¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ - folderview_button_pressed(): ÆÃÊÌ¤Ê IMAP4 ¥Õ¥©¥ë¥À¾å¤Çºï½ü¥á¥Ë¥å¡¼ - ¤ò̵¸ú¤Ë¤·¤¿¡£ - * AUTHORS: claws ¥Ö¥é¥ó¥Á¤«¤é¼è¹þ¡£Á´¤Æ¤Î contributor ¤ò´Þ¤ó¤Ç¤¤¤ë¡£ - * src/send.c: ¥­¥ã¥ó¥»¥ë¤òÍ­¸ú¤Ë¤·¤¿¡£ - EXIT_IF_CANCELLED(): ¿·µ¬¥Þ¥¯¥í¡£ - SendProgressDialog ¤Ë cancelled ¥Õ¥é¥°¤òÄɲᣠ- * src/utils.[ch]: strtailchomp(): ¿·µ¬¡£ËöÈø¤Î»ØÄꤷ¤¿Ê¸»ú¤ò¼è¤ê½ü¤¯¡£ - * src/imap.c: imap_cmd_fetch(): MS Exchange 2000 ¥µ¡¼¥Ð¤Î¤¿¤á¤Î½¤Àµ¡£ - -2001-06-15 - - * src/imap.c: imap_create_tree(): ¿·µ¬¡£ INBOX ¤ä Trash ¤Î¤è¤¦¤Ê - ɬÍפʥե©¥ë¥À¤òºîÀ®¤¹¤ë¡£ - imap_do_copy(), imap_do_copy_msgs_with_dest(): COPY ¤¬¼ºÇÔ¤·¤¿¤é - expunge ¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - imap_remove_all_msg(): exists == 0 ¤Ê¤é¤¹¤°¤Ë return ¤¹¤ë¤è¤¦¤Ë - ¤·¤¿¡£ - * src/account.c: account_add(), account_set_missing_folder(): - folder->create_tree() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-06-14 - - * src/imap.c: ¤µ¤é¤Ë namespace ¤ò¼ÂÁõ¡£ - * imap_find_namespace(), imap_path_separator_subst(): ¿·µ¬¡£ - -2001-06-13 - - * src/imap.c: imap_parse_namespace(), imap_cmd_namespace(): ¿·µ¬¡£ - -2001-06-11 - - * src/summaryview.c: summary_show(): ¥Õ¥©¥ë¥À¥Ó¥å¡¼¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ¡£ - -2001-06-08 - - * src/imap.[ch]: ¥Õ¥¡¥¤¥ë¤ò IMAP4 ¥Õ¥©¥ë¥À¤ËÄɲ乤ë - imap_add_msg() ¤È imap_append_message() ¤òÄɲᣠ- imap_status(): ¿·µ¬¡£ - imap_create_folder(): ¥Õ¥©¥ë¥À¤òºîÀ®¤¹¤ëÁ°¤Ë¤½¤Î¸ºß¤ò¥Á¥§¥Ã¥¯ - ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - Äã¥ì¥Ù¥ë IMAP4rev1 ´Ø¿ô¤Î¥×¥ì¥Õ¥£¥¯¥¹¤ò imap_cmd ¤ËÊѹ¹¡£ - * src/account.c: account_add(), account_set_missing_folder(): - IMAP4 ¥¢¥«¥¦¥ó¥È¤òºîÀ®¤¹¤ë¤È¤­¤Ë INBOX ¤ò¼«Æ°Åª¤ËºîÀ®¤¹¤ë¤è¤¦¤Ë - ¤·¤¿¡£ - -2001-06-07 - - * src/utils.[ch]: °ú¿ô¤Ë¥Ð¥Ã¥Õ¥¡¤ò¤È¤ë itos_buf() ¤òÄɲᣠ- * src/imap.[ch]: imap_copy_msg(), imap_copy_msgs_with_dest(): ¿·µ¬¡£ - * src/folder.c: copy_msg ¤È copy_msgs_with_dest ¥á¥½¥Ã¥É¤ò IMAP - ¥¯¥é¥¹¤ËÄɲᣠ- -2001-06-06 - - * src/utils.[ch]: move_file(): ¿·µ¬¡£ - * src/mh.c: mh_move_msg(), mh_move_msgs_with_dest(): move_file() - ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë½¤Àµ¡£¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤È¤­¤Ë¥Õ¥¡¥¤¥ë¤òÊĤ¸¤Æ - ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ - -2001-06-06 - - * src/imap.c: imap_delete_messages() ¤È imap_delete_all_messages() - ¤ò imap_delete_cached_messages() ¤È - imap_delete_all_cached_messages() ¤Ë̾¾ÎÊѹ¹¡£¥³¡¼¥É¤ÎÀ°Íý¡£ - * src/utils.[ch]: ´Ø¿ô remove_all_numbered_files() ¤òÄɲᣠ- * src/mh.c: mh_remove_all_msg() - src/imap.c: imap_delete_all_cached_messages(): - remove_all_numbered_files() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/mainwindow.c - src/summaryview.c - src/compose.[ch]: ¡Öº¹½Ð¿Í¤ËÊÖ¿®¡×¤òÄɲᣠ- compose_reply() - compose_reply_set_entry(): °ú¿ô¤Ë `ignore_replyto' ¤òÄɲᣠ- -2001-06-05 - - * src/folderview.c: folderview_selected() - src/summaryview.c: summary_show(): »Ä¤Ã¤¿¥Þ¡¼¥¯¤ò½èÍý¤·¤¿¾ì¹ç¤Ë - ¸í¤Ã¤¿¥Õ¥©¥ë¥À¤ò¹¹¿·¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ - -2001-06-04 - - * src/headerwindow.c: headerwindow_show_cb(): ¾ï¤Ë msginfo ¤òɽ¼¨ - ¤¹¤ë¤è¤¦¤Ë¤·¡¢É½¼¨¤µ¤ì¤Æ¤¤¤ë¥á¥Ã¥»¡¼¥¸¤Ç¤Ï¤Ê¤¯ÁªÂò¤µ¤ì¤Æ¤¤¤ë¤â¤Î - ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/smtp.c: smtp_ok(): sock_gets() ¤Î¥¨¥é¡¼½èÍý¤ò½¤Àµ¡£ - -2001-06-02 - - * src/folderview.c: folderview_selected() - src/mimeview.c: mimeview_selected(): ¥Þ¥¦¥¹¥¤¥Ù¥ó¥È¤ÎÊ᪤ò²ò½ü - ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/summaryview.c: summary_show(): ¥Þ¡¼¥¯¤¬»Ä¤Ã¤Æ¤¤¤ì¤Ð½èÍý¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ - -2001-05-27 - - * src/passphrase.c: #if USE_GPGME ¤Ç°Ï¤Ã¤¿¡£ - * src/prefs_account.c: NNTP AUTH ¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤òÄɲᣠ- * src/alertpanel.[ch]: alertpanel_create(): ¿·¤¿¤Ê°ú¿ô `can_disable' - ¤òÄɲá£Á´¤Æ¤Î¸Æ¤Ó½Ð¤·Â¦¤ò FALSE ¤òÅϤ¹¤è¤¦¤ËÊѹ¹¡£ - ¥á¥Ã¥»¡¼¥¸¤ò̵¸ú¤Ë¤¹¤ë¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤òºîÀ®¡£ - alertpanel_message_with_disable(): ¿·µ¬¡£ - alertpanel_show(): G_ALERT_VALUE_MASK ¤ÇÃͤò¥Þ¥¹¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - alertpanel_button_toggled(): ¿·µ¬¡£ - alertpanel_button_clicked(), alertpanel_close(): G_ALERT_VALUE_MASK - ¤ò»È¤Ã¤ÆÃͤò¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_common.[ch]: GnuPG ½ð̾¸¡¾Ú¥Ý¥Ã¥×¥¢¥Ã¥×¥¦¥£¥ó¥É¥¦¤È¡¢ - GnuPG ¤Î·Ù¹ð¤òÀÚ¤êÂؤ¨¤ë¥ª¥×¥·¥ç¥ó¤òÄɲᣠ- * src/rfc2015.c: check_signature(): Í­¸ú¤Ê¾ì¹ç¤Î¤ß½ð̾¥Á¥§¥Ã¥¯ - ¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/main.c: GnuPG ¤Î¥Á¥§¥Ã¥¯¤ò½¤Àµ¡£ - * src/main.c - src/prefs_common.c: GPGME ¤òÍ­¸ú¤Ë¤·¤¿¤È¤­¤Î¥³¥ó¥Ñ¥¤¥ë»þ¤Î¥Ð¥°¤ò - ¤¤¤¯¤Ä¤«½¤Àµ¡£ - -2001-05-26 - - * src/codeconv.c: conv_get_code_conv_func(): libjconv »ÈÍÑ»þ¤Î - ISO-8859-* ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ë¤Ä¤¤¤Æ½¤Àµ¡£ - conv_encode_header(): ÉÔÀµ¤Ê¥ï¥¤¥É¥­¥ã¥é¥¯¥¿¤¬¸½¤ì¤¿¤È¤­Ìµ¸Â¥ë¡¼¥× - ¤Ë¤Ê¤ë¥Ð¥°¤ò½¤Àµ(Alte ¤µ¤ó thanks)¡£ - * src/headerview.c: SET_FONT_STYLE(): ¥Ü¡¼¥ë¥É¥Õ¥©¥ó¥È¤¬Ìµ¸ú¤Î¤È¤­ - ¤Î segfault ¤ò½¤Àµ¡£ - * src/imap.c: imap_create_folder(): ¥Õ¥©¥ë¥À̾¤¬ INBOX ¤Î¤È¤­¤Ï - ¥Õ¥©¥ë¥À¤òºîÀ®¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - * src/mainwindow.c: main_window_reflect_prefs_all(): ¨ºÂ¤Ë¼Â¹Ô¤¬ - Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ì¤Ð¼Â¹Ô¥Ü¥¿¥ó¤ò±£¤¹¤è¤¦¤Ë¤·¤¿¡£ - -2001-05-22 - - * README - README.jp: ¡Öµ¯Æ°ÊýË¡¡×¥»¥¯¥·¥ç¥ó¤òÄɲᣠ- -2001-05-19 - - * claws ¥Ö¥é¥ó¥Á¤«¤é NNTP AUTH ¤ò¥Þ¡¼¥¸¡£ - * src/news.[ch]: NNTP AUTH ¤ËÂбþ¡£ - * src/nntp.[ch]: NNTP AUTH ¤Î¤¿¤á¤Ë SockInfo ¤ò NNTPSockInfo ¤Ç - ¥é¥Ã¥×¤·¤¿¡£ - * INSTALL - INSTALL.jp: Æ°ºî³Îǧ¥ê¥¹¥È¤È¥¹¥ì¥Ã¥É¤Ë´Ø¤¹¤ë·Ù¹ð¤ò½¤Àµ¡£ - -2001-05-18 - - * src/gtkutils.[ch]: folderview_find_collapsed_parent() ¤ò - gtkut_ctree_find_collapsed_parent() ¤Ë°ÜÆ°¡£ - * src/folderview.c: folderview_select_node(): ÁªÂò¤µ¤ì¤¿¤È¤­¤Ë - ¿Æ¥Õ¥©¥ë¥À¤ò¼«Æ°Åª¤ËŸ³«¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * configure.in: ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤ò 0.4.99 (0.5pre) ¤Ë¤·¤¿¡£ - * src/main.c: main(): --help ¤È --version ¤Ë X ¤¬ÉÔÍפˤʤë¤è¤¦¤Ë - parse_cmd_opt() ¤ò gtk_init() ¤ÎÁ°¤Ë°ÜÆ°¡£ - parse_cmd_opt(): g_get_prgname() ¤ò g_basename(argv[0]) ¤ËÊѹ¹¡£ - * src/folderview.c: folderview_update_node(): ÀÞ¤ê¾ö¤Þ¤ì¤¿¥Î¡¼¥É - ¤ËÂФ¹¤ë½¤Àµ¡£ - -2001-05-17 - - * src/main.c: lock_socket_input_cb(): fd_read() ¤ò fd_gets() ¤Ë - Êѹ¹¡£ --compose ¥ª¥×¥·¥ç¥ó¤Ç¥´¥ß¤òȯÀ¸¤·¤Æ¤¤¤¿¡£ - * src/socket.[ch]: fd_gets() ¤ò public ¤Ë¤·¤¿¡£ - -2001-05-16 - - * src/gtkutils.[ch]: gtkut_ctree_node_next(): ¿·µ¬¡£ - * src/folderview.c: folderview_find_next_unread(): ¿·µ¬¡£ - folderview_select_next_unread(): ±£¤ì¤¿¥Õ¥©¥ë¥À¤â¸«ÉÕ¤±¤é¤ì¤ë - ¤è¤¦¤Ë½¤Àµ¡£ - -2001-05-15 - - * src/compose.c: compose_write_headers(): SPAM ¤Ë»ÈÍѤµ¤ì¤ë²ÄǽÀ­ - ¤¬¤¢¤ë¤Î¤Ç¡¢ From, To, Sender ¤â½ü³°¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/folderview.c: ̤ÆÉ¥Õ¥©¥ë¥À¤¬¤¢¤ëÀÞ¤ê¾ö¤Þ¤ì¤¿¥Õ¥©¥ë¥À¤Ë '+' - ¥Þ¡¼¥¯¤òÉÕ¤±¤ë¤è¤¦¤Ë¤·¤¿¡£ - folderview_search_new_recursive(), - folderview_have_new_children(), - folderview_search_unread_recursive(), - folderview_have_unread_children(), - folderview_find_collapsed_parent(): ¿·µ¬¡£ - folderview_update_node(): ¥­¥å¡¼¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤Î¿ô¤òɽ¼¨¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ - -2001-05-14 - - * src/folder.[ch] - src/mh.[ch]: *_add_msg() ¤ò link() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë½¤Àµ¡£ - ¸µ¤Î¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë¤«¤É¤¦¤«¤òÀÚÂؤ¨¤ë°ú¿ô¤òÄɲᣠ- * src/compose.c - src/inc.c - src/mbox.c: folder_item_add_msg() ¤Î°ú¿ô¤ò½¤Àµ¤·¡¢¤¤¤¯¤Ä¤«¤Î - unlink() ¤òºï½ü¡£ - -2001-05-13 - - * src/prefs_customheader.[ch]: prefs_headers_* ¤ò - prefs_custom_header_* ¤Ë̾¾ÎÊѹ¹¡£ `(New)' ¹Ô¤È `ÃÖ´¹' ¥Ü¥¿¥ó¤ò - ºï½ü¡£¶õ¤ÎÆâÍƤËÂбþ¡£ - prefs_custom_header_row_moved(): ¿·µ¬¡£ "row_move" ¥·¥°¥Ê¥ë¤ò - ¤½¤ì¤ËÀܳ¤·¡¢¥Ø¥Ã¥À¥ê¥¹¥È¤ò¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/customheader.c: custom_header_get_str() - src/compose.c: compose_write_headers(): ¶õ¤ÎÆâÍƤËÂбþ¡£ - * src/prefs_display_header.c: prefs_display_header_row_moved(): ¿·µ¬¡£ - "row_move" ¥·¥°¥Ê¥ë¤ò¤½¤ì¤ËÀܳ¤·¡¢¥Ø¥Ã¥À¥ê¥¹¥È¤ò¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë - ¤·¤¿¡£ - * src/compose.c: compose_write_headers(): ¥Ø¥Ã¥À¤Î½ç½ø¤ò½¤Àµ¤·¡¢ - ¥«¥¹¥¿¥à¥Ø¥Ã¥À¤ò¥¨¥ó¥³¡¼¥É¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_customheader.c: prefs_custom_header_delete_cb() - src/prefs_filter.c: prefs_filter_delete_cb(): ESC ¤Ç·Ù¹ð¥Ñ¥Í¥ë - ¤òÊĤ¸¤ë¤Î¤ò¡Ö¤¤¤¤¤¨¡×¤È¤·¤Æ°·¤¦¤è¤¦¤Ë¤·¤¿¡£ - -2001-05-13 - - * claws ¥Ö¥é¥ó¥Á¤«¤é¥«¥¹¥¿¥à¥Ø¥Ã¥À´ØÏ¢¤ò¥Þ¡¼¥¸: - * src/customheader.[ch] - src/prefs_customheader.[ch]: ¿·µ¬¡£ - * src/customheader.c: custom_header_read_str(): atoi() ¤ÎÂå¤ï¤ê¤Ë - strtol() ¤ò»ÈÍѤ·¡¢¥¨¥é¡¼¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/compose.c: IS_IN_CUSTOM_HEADER(): ¿·µ¬¥Þ¥¯¥í¡£ - compose_write_headers(): ¥Ø¥Ã¥À¤ò¥æ¡¼¥¶ÄêµÁ¤Î¥Ø¥Ã¥À¤ÇÃÖ´¹¤¹¤ë - ¤è¤¦¤Ë¤·¤¿(¤¤¤¯¤Ä¤«¤Î¼«Æ°Åª¤ËÀ¸À®¤µ¤ì¤ë¥Ø¥Ã¥À¤ò½ü¤¯)¡£ - -2001-05-11 - - * src/inc.c: connection_check_cb(): Àܳ¤¬³ÎΩ¤·¤Ê¤«¤Ã¤¿¤È¤­¤Ë - segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ - * src/compose.c: compose_create(): set_autobcc ¤Þ¤¿¤Ï set_autoreplyto - ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤¿¤é¡¢¤½¤ì¤é¤¬¶õ¤Ç¤âɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-05-10 - - * src/textview.c: textview_show_mime_part(): ¥á¥Ã¥»¡¼¥¸¤ò½¤Àµ¡£ - TEXT_INSERT(): ¿·µ¬¥Þ¥¯¥í¡£ - * po/ja.po: ½¤Àµ¡£ - * src/prefs_display_header.c: prefs_display_header_create(): - ¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤Î¥Æ¥­¥¹¥È¤ò½¤Àµ¡£ - -2001-05-09 - - * src/mimeview.c: ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤Ë¡Ö¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤«¤é - ³«¤¯...¡×¤òÄɲᣠ- * src/summaryview.c: summary_print() - src/inputdialog.c: input_dialog(): ¥á¥â¥ê¥ê¡¼¥¯¤ò½¤Àµ¡£ - * src/textview.c: textview_show_mime_part(): ÀâÌÀʸ¤ò¹¹¿·¡£ - * src/send.c: Á÷¿®¿ÊĽ¥À¥¤¥¢¥í¥°¤ò¼ÂÁõ¡£ - (TODO: automaton ¤ò»ÈÍѤ¹¤Ù¤­¡£) - send_progress_dialog_create(), send_progress_dialog_destroy(), - send_cancel(): ¿·µ¬¡£ - send_message_smtp(): ³Æ¥¹¥Æ¡¼¥¸¤Ç¥À¥¤¥¢¥í¥°¤ò¹¹¿·¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/utils.[ch]: get_left_file_size(): ¿·µ¬¡£¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥¡¥¤¥ë - ¤Î»Ä¤ê¤Î¥Ð¥¤¥È¿ô¤òÆÀ¤ë¡£ - * src/summaryview.c: summary_show(): open_inbox_on_inc ¤¬¥»¥Ã¥È¤µ¤ì - ¤Æ¤¤¤ë¤È¤­¤Ï¡¢¥Õ¥©¥ë¥À¤¬Á°¤ÈƱ¤¸¤Ç¤¢¤Ã¤Æ¤âºÇ½é¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ë - °ÜÆ°¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_common.c: ¥«¥é¡¼¥»¥ì¥¯¥·¥ç¥ó¥À¥¤¥¢¥í¥°¤ò transient ¤Ë - ¤·¡¢¥¨¥¹¥±¡¼¥×¥­¡¼¤Ç¥À¥¤¥¢¥í¥°¤òÊĤ¸¤é¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-05-08 - - * version 0.4.66 - - * src/select-keys.c: delete_event_cb(): ½ªÃ¼¤«¤é `;' ¤ò¼è¤ê½ü¤¤¤¿¡£ - * src/recv.c: recv_write(): ´Ö³Ö¤ò10msec ¤Ë¤·¤¿¡£ - * src/prefs_display_header.c: ¥À¥¤¥¢¥í¥°¤Î¥ì¥¤¥¢¥¦¥È¤ò½¤Àµ¤·¡¢ - ¡Ö¾¤Î¥Ø¥Ã¥À¤òɽ¼¨¡×¤¬¥Á¥§¥Ã¥¯¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ïɽ¼¨¤·¤Ê¤¤¥Ø¥Ã¥À - ¤Î¥ê¥¹¥È¤ò insensitive ¤Ë¤·¤¿¡£ - * src/textview.c: strcasecmp() and strncasecmp() ¤ò¤½¤ì¤¾¤ìÂбþ¤¹¤ë - glib ¤Î´Ø¿ô¤ËÊѹ¹¡£ - * src/inc.c: get_spool(): ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤ÎÃæ¤Ë°ì»þ¥Õ¥¡¥¤¥ë¤ò - ºîÀ®¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-05-07 - - * src/prefs_common.c - src/prefs_account.c - src/prefs_filter.c - src/account.c - src/alertpanel.c - src/filesel.c - src/foldersel.c - src/export.c - src/import.c - src/inputdialog.c - src/passphrase.c - src/select-keys.c - src/sigstatus.c: delete_event ¤Ç¥À¥¤¥¢¥í¥°¤òÊĤ¸¤¿¤È¤­¤Ë¤½¤ì¤ò - ¸í¤Ã¤ÆÇ˲õ¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ(DINH ¤µ¤ó thanks)¡£ - delete_event ¥·¥°¥Ê¥ë¤òÀµ¤·¤¯°·¤¦ *_deleted() ¤È *delete_event() - ¤òÄɲᣠ- -2001-05-06 - - * src/prefs_display_header.c: claws ¥Ö¥é¥ó¥Á¤«¤é¤¤¤¯¤Ä¤«¤ÎÊѹ¹¤ò - ¥Þ¡¼¥¸: - prefs_display_header_create(): ¥É¥é¥Ã¥°¤Ë¤è¤ë¥Ø¥Ã¥À¤ÎʤӴ¹¤¨¤¬ - ¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ - prefs_display_header_find_header(): ¿·µ¬´Ø¿ô¡£ - prefs_display_header_clist_set_row(): ½ÅÊ£¤òǧ¤á¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_account.c: prefs_account_receive_create(): ¥Á¥§¥Ã¥¯ - ¥Ü¥¿¥ó¤Î¥é¥Ù¥ë¤òÊѹ¹¡£ - -2001-05-05 - - * src/pop.c: pop3_getsize_list_recv(): sscanf() ¤¬¼ºÇÔ¤·¤¿¤é¡¢ - ¤¹¤°¤Ë break ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/inc.h: Pop3State ¤«¤é cur_msg_bytes ¤òºï½ü¡£ - * src/inc.c: pop3_recv_func() - src/recv.[ch]: RecvUIFunc ¤ÎÂèÆó°ú¿ô¤ò¸½ºß¤Î¹ç·×¥Ð¥¤¥È¿ô¤Ë¤·¤¿¡£ - recv_write(): ·Ð²á»þ´Ö¤¬0.1Éäè¤êÂ礭¤±¤ì¤Ð UI ´Ø¿ô¤ò¸Æ¤Ö¤è¤¦¤Ë - ¤·¤¿¡£ - * src/recv.c: recv_write(): ´Ö³Ö¤ò300 usec ¤Ë¤·¤¿¡£ - * src/textview.c: textview_show_header(): ¥Ø¥Ã¥À¤¬ Subject ¤Î¾ì¹ç¡¢ - °ì¹Ô¤Ë¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/utils.[ch]: unfold_line(): ¿·µ¬¡£ - * src/procheader.[ch]: procheader_get_header_array(): ¿·µ¬¡£ - * src/prefs_display_header.c: ¥Ç¥Õ¥©¥ë¥È¤ò¹¹¿·¡£ - -2001-05-05 - - * sylpheed-claws ¥Ö¥é¥ó¥Á¤«¤é¤¤¤¯¤Ä¤«¥Þ¡¼¥¸¡£ - ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ëɽ¼¨¤µ¤ì¤ë¥Ø¥Ã¥À¤ò¥æ¡¼¥¶¤¬»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£ - (¥·¥ó¥Ü¥ë̾¤ÏÊѹ¹¡£) - * src/prefs_display_header.[ch] - src/displayheader.[ch]: ¿·µ¬¡£ - * src/prefs_display_header.c: - prefs_display_headers_other_headers_toggled() ¤òºï½ü¡£ - ¥ê¥¹¥È¤«¤é "(¿·µ¬)" ¹Ô¤òºï½ü¡£ - * src/defs.h: DISPLAY_HEADER_RC ¤òÄɲᣠ- * src/prefs_common.c: prefs_message_create(): ɽ¼¨¥Ø¥Ã¥À¤ÎÀßÄê - ¥À¥¤¥¢¥í¥°¤ò³«¤¯¥Ü¥¿¥ó¤òÄɲᣠ- * src/prefs_common.h: PrefsCommon ¤Ë show_other_header ¤È - disphdr_list ¤òÄɲᣠ- * src/procheader.[ch]: procheader_get_header_list_from_file(), - procheader_get_header_array_asis(): ¿·µ¬¡£ - procheader_get_header_list(): °ú¿ô¤Ë FILE ¥Ý¥¤¥ó¥¿¤ò¤È¤ë¤è¤¦¤Ë - ½¤Àµ¡£ - procheader_header_array_destroy(), procheader_header_free() ¿·µ¬¡£ - * src/main.c: main(): prefs_display_header_*_config() ¤ò¸Æ¤Ö¤è¤¦¤Ë - ¤·¤¿¡£ - * src/textview.c: textview_scan_header(): ¥æ¡¼¥¶¤ÎÀßÄê¤Ë¤è¤Ã¤Æ - ¥Ø¥Ã¥À¤òʤӴ¹¤¨¤ë¤è¤¦¤Ë½¤Àµ¡£ - src/textview_show_header(): textview_make_clickable_parts() ¤ò - ¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ - textview_make_clickable_parts(): °ú¿ô¤Ë GdkFont ¤ò¤È¤ë¤è¤¦¤Ë¤·¡¢ - °ú¿ô¤«¤é GtkText ¤ò½ü¤¤¤¿¡£ - -2001-05-04 - - * Pierric Descamps ¤µ¤ó¤Î¥Ñ¥Ã¥Á¤Ë´ð¤Å¤¤¤Æ¿·Ãå¥á¡¼¥ë¤Î¼«Æ°¥Á¥§¥Ã¥¯ - ¤ò¼ÂÁõ(thanks!)¡£ - * src/inc.c: inc_autocheck_timer_init(), inc_autocheck_timer_set(), - inc_autocheck_timer_remove(), inc_autocheck_func() ¤ò¿·Ãå¥á¡¼¥ë - ¤Î¼«Æ°¥Á¥§¥Ã¥¯¤Î¤¿¤á¤ËÄɲᣠ- * src/main.c: main(): inc_autocheck_timer_init() ¤ò¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ - * src/prefs_common.c: prefs_receive_create(): ¼«Æ°¥Á¥§¥Ã¥¯¤Î UI - ¤ò¥¢¥¯¥Æ¥£¥Ö¤Ë¤·¤¿¡£ prefs_common_cancel() ¤òÄɲä·¡¢¤¤¤¯¤Ä¤«¤Î - ¥·¥°¥Ê¥ë¤ò¤½¤ì¤ËÀܳ¡£ - * src/prefs_common.c - src/prefs_account.c - src/prefs_filter.c - src/account.c: ¥À¥¤¥¢¥í¥°¤ò³«¤¤¤Æ¤¤¤ë¤È¤­¤Ï¼«Æ°¥Á¥§¥Ã¥¯¤ò̵¸ú¤Ë - ¤·¤¿¡£ - * src/headerview.c: headerview_show_xface(): ¥Ø¥Ã¥À¥Ú¥¤¥ó¤òÈóɽ¼¨ - ¤Ë¤·¤Æ¤¤¤ë¾ì¹ç¤Ë·Ù¹ð¤¬½Ð¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ - -2001-05-03 - - * src/inc.c - src/pop.c - src/recv.c: ¥Î¥ó¥Ö¥í¥Ã¥­¥ó¥°¥½¥±¥Ã¥È¥â¡¼¥É¤ÎÂбþ¤òºï½ü(Ìò¤Ë - Ω¤Ã¤Æ¤¤¤Ê¤¤¤Î¤Ç)¡£ - * src/pop.c - src/inc.c: ¼õ¿®¥À¥¤¥¢¥í¥°¤Î¥á¥Ã¥»¡¼¥¸¤ò½¤Àµ¡£ - -2001-05-02 - - * src/utils.h: u32 ¤ò guint32 ¤Î typedef ¤Ë¤·¤¿¡£ - md5.c ¤Ç»ÈÍѤµ¤ì¤ë¥Þ¥¯¥í BIG_ENDIAN_HOST ¤òÄɲᣠ- * src/md5.c: md5c.c ¤ò̾¾ÎÊѹ¹¡£¥¤¥ó¥Ç¥ó¥È¤ò½¤Àµ¡£¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó - ¤Ê¥Þ¥·¥ó¤Ç MD5 ¤òÀµ¤·¤¯·×»»¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ - -2001-05-01 - - * version 0.4.65 - - * src/folder.c: folder_init(): ¥á¥½¥Ã¥É imap_remove_folder ¤òÄɲᣠ- * src/folderview.c: folderview_rm_imap_folder_cb(): ¼ÂºÝ¤Ë IMAP4 - ¥µ¡¼¥Ð¤«¤é¥Õ¥©¥ë¥À¤òºï½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/imap.[ch]: imap_create_folder(): ¼ÂºÝ¤Ë IMAP4 ¥µ¡¼¥Ð¤Ë¥Õ¥©¥ë¥À - ¤òºîÀ®¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - imap_remove_folder(): Äɲᣠ- imap_create(), imap_delete(): Äɲᣠ- * src/summaryview.c: summary_execute_delete(): ¥Õ¥©¥ë¥À¥¿¥¤¥×¤¬ - F_MH ¤Ç¤Ê¤±¤ì¤Ð trash ¤ò¥Á¥§¥Ã¥¯¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - * ¾åµ­¤ÎÊѹ¹¤Ë´Ø¤·¤ÆÀ趤µ¤ó¤Ë´¶¼Õ¡£ - * configure.in - ac/check-type.m4: wint_t ¤Î typedef ¸¡½Ð¤ò²þÎÉ(sv_CHECK_TYPE ¤ò - SYLPHEED_CHECK_TYPE ¤Ë²þ̾)¡£ - -2001-04-30 - - * src/recv.c: recv_bytes_write(): ̵¸Â¥ë¡¼¥×¤È¥Ð¥Ã¥Õ¥¡¥ª¡¼¥Ð¡¼¥é¥ó - ¤òµ¯¤³¤¹¤â¤¦°ì¤Ä¤Î¥Ð¥°¤ò½¤Àµ¡£ - -2001-04-30 - - * src/socket.[ch]: º®Íð¤òÈò¤±¤ë¤¿¤á¡¢ sock_read() ¤È fd_read() ¤ò - sock_gets() ¤È fd_read() ¤Ë̾¾ÎÊѹ¹¡£ read() ¤Î¥é¥Ã¥Ñ¡¼¤Ç¤¢¤ë - sock_read() ¤È fd_read() ¤òÄɲᣠ- * src/recv.c: recv_bytes_write(): ̵¸Â¥ë¡¼¥×¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ - fd_read() ¤ÎÂå¤ï¤ê¤Ë sock_read() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/esmtp.c - src/imap.c - src/news.c - src/nntp.c - src/pop.c - src/recv.c - src/smtp.c: sock_read() ¤ÎÂå¤ï¤ê¤Ë sock_gets() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë - ¤·¤¿¡£ - * src/imap.c: imap_session_new(): imap_open() ¤Î¥¨¥é¡¼¸¡½Ð¤ò½¤Àµ¡£ - -2001-04-28 - - * src/inc.c: ¥À¥¤¥¢¥í¥°¤Ë¸½ºß¤ÎÆɤ߹þ¤ó¤À¥Ð¥¤¥È¿ô¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë - ¤·¤¿¡£ - * src/pop.c: recv_write(): ʸ»úÎó¤òÊÔ½¸¤¹¤ëÁ°¤Ë UI ´Ø¿ô¤ò¸Æ¤Ö¤è¤¦¤Ë - ¤·¤¿¡£ - -2001-04-27 - - * src/progressdialog.c: progress_dialog_create(): ¥À¥¤¥¢¥í¥°¤Î - ¥µ¥¤¥º¤ò½¤Àµ¤·¡¢³ÈÂç²Äǽ¤Ë¤·¤¿¡£ - * src/smtp.c - src/esmtp.c: smtp_ok(), esmtp_ok(): ¥¨¥é¡¼±þÅú¤òÀµ¤·¤¯½èÍý¤·¤Æ - ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ(ÂçÀ¯¤µ¤ó thanks)¡£ - * src/pop.[ch]: pop3_getsize_list_send() ¤È pop3_getsize_list_recv() - ¤òÄɲᣠ- * src/recv.[ch]: recv_write() ¤¬³Æ sock_read() Ëè¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô - ¤ò¸Æ¤Ö¤è¤¦¤Ë¤¹¤ë recv_set_ui_func() ¤òÄɲᣠ- * src/inc.h: Pop3State ¤Ë¤ª¤¤¤Æ¡¢ bytes ¤ò total_bytes ¤Ë²þ̾¤·¡¢ - cur_msg_bytes, cur_total_bytes, ¤½¤·¤Æ sizes ¤òÄɲᣠ- * src/inc.c: ³Æ sock_read() Ëè¤Ë¥×¥í¥°¥ì¥¹¥Ð¡¼¤ò¹¹¿·¤¹¤ë - inc_pop3_recv_func() ¤òÄɲᣠ- -2001-04-26 - - * src/mh.c: mh_is_maildir_one(): is_dir_exist() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë - ½¤Àµ¡£ - -2001-04-25 Werner Koch - - * src/mh.c (mh_is_maildir_one, mh_is_maildir): ¿·µ¬¡£ - (mh_scan_tree_recursive): ¥¹¥­¥ã¥ó¤Ç Maildir ·¿¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò - ´Þ¤Þ¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - - À°¿ô·¿¤Ç socket ¤òɽ¤·¤Æ¤¤¤¿¤Î¤ò¡¢¤è¤êÃê¾ÝŪ¤Ê¥Ç¡¼¥¿¹½Â¤¤ËÊѹ¹¡£ - - * src/automaton.h (struct _Automaton): help_sock ¤òÄɲᣠ- * src/automaton.c (automaton_input_cb): source ¤ò SockInfo ¤ËÄɲà - ¤·¡¢ gdk_input_add ¤Î¥é¥Ã¥Ñ¡¼¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - - * src/send.c (SEND_EXIT_IF_ERROR): ¥Æ¥¹¥È¤ò½¤Àµ¤·¡¢Ìµ¸ú¤Ê socket - ¤Î¥Æ¥¹¥È¤ò¼è¤ê½ü¤¤¤¿(sock_close ¤Ç¹Ô¤ï¤ì¤ë¤¿¤á)¡£ sock ¤ò NULL - ¤Ë¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - (SEND_EXIT_IF_NOTOK): ÊĤ¸¤é¤ì¤¿ sock ¤ò NULL ¤Ë¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë - ¤·¤¿¡£ - (send_smtp_open): SockInfo ¤Î¤ß¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - - * src/news.c (news_session_new): SockInfo ¤ò»ÈÍÑ¡£ - (news_session_destroy): Ʊ¾å¡¢ sock ¤ò NULL ¤Ë¥»¥Ã¥È¡£ - - * src/nntp.c: À°¿ô·¿¤ÎÂå¤ï¤ê¤Ë SockInfo ¤ò»ÈÍÑ¡£ - * src/smtp.c: Ʊ¾å¡£ - * src/pop.c: Ʊ¾å¡£ - * src/recv.c: Ʊ¾å¡£ - - * src/inc.c (inc_pop3_session_do): sock_sockinfo_free ¤òºï½ü¡£ - gdk_input_add ¤ò¥é¥Ã¥Ñ¡¼¤ÇÊñ¤ó¤À¡£ - - * src/esmtp.c: socket »Ø¼¨»Ò¤ò SockInfo ¤ò»È¤¦¤è¤¦¤ËÊѹ¹¡£ - * src/esmtp.h: Ʊ¾å¡¢ socket.h ¤ò include ¤·¤¿¡£ - * src/session.h (struct _Session): Ʊ¤¸¤¯¡£ - * src/imap.c (imap_open): À°¿ô·¿¤Ç¤Ê¤¯ SockInfo ¤òÊÖ¤¹¤è¤¦¤Ë¤·¤¿¡£ - SockInfo ¤ÎÆâÉô¥Ç¡¼¥¿¤Ø¤Î¥¢¥¯¥»¥¹¤òºï½ü¡£Á´¤Æ¤Î¸Æ¤Ó½Ð¤·Â¦¤È´Ø¿ô - ¤¬ SockInfo ¤ò¤È¤ë¤è¤¦¤Ë¤·¤¿¡£ - (imap_session_new): sock_close ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - (imap_session_destroy): Ʊ¾å¡£ - - * src/compose.c (compose_exec_ext_editor): sock_write ¤ò fd_write - ¤ÇÃÖ¤­´¹¤¨¤¿¡£ - - * src/main.c (app_will_exit): lock socket ¤ò fd_close ¤Ç close ¤¹¤ë - ¤è¤¦¤Ë¤·¤¿¡£ - (prohibit_duplicate_launch): sock_xxx ¤ÎÂå¤ï¤ê¤Ë fd_xxx ¤ò»ÈÍÑ¡£ - (lock_socket_input_cb): Ʊ¾å¡£ - - * src/socket.h, src/socket.c: SockInfo ¹½Â¤ÂΤò glib ¥Á¥ã¥Í¥ë¤ò - »ÈÍѤ¹¤ë¤è¤¦¤Ë½àÈ÷¡£Á´¤Æ¤Î sock_xxx ¤ò¡¢À°¿ô·¿¤ÎÂå¤ï¤ê¤Ë SockInfo - ¤ò»ÈÍѤ¹¤ë¤è¤¦¤ËÊѹ¹¡£ - (sock_connect_unix, sock_open_unix, sock_accept): ̾Á°¤ò .. - (fd_connect_unix, fd_open_unix, fd_accept): .. ¤³¤ì¤ËÊѹ¹¤·¡¢Á´¤Æ¤Î - ¸Æ¤Ó½Ð¤·Â¦¤âÊѹ¹¡£ - (fd_read, fd_write, fd_close): ¿·µ¬¡£ - (sock_sockinfo_free): ºï½ü¡£ - * src/socket.c (sock_connect_nb): ¤³¤³¤Ç¤Ï sock_close ¤ÎÂå¤ï¤ê¤Ë - close ¤ò»ÈÍÑ¡£ - (sock_connect): Ʊ¾å¡£ - -2001-04-26 - - * config.h.in: ºï½ü¡£ - * ac/Makefile.am: gnupg-check-typedef.m4 ¤ò MACROS ¤ËÄɲᣠ- * .cvsignore: Äɲᣠ- * src/inc.c - src/progressdialog.[ch] - src/pixmaps/complete.xpm - src/pixmaps/continue.xpm - src/pixmaps/error.xpm: ¥á¥Ã¥»¡¼¥¸¤Î¼è¤ê¹þ¤ß¤Î¾õÂÖ¤òɽ¼¨¤¹¤ë - Leandro Pereira ¤µ¤ó¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ - * src/inc.c: ¾õÂÖ¤Îʸ»úÎó¤òÀÚÂؤ¨¤ë¤è¤¦¤Ë¤·¤¿¡£ - -2001-04-25 - - * cvs ¥Ä¥ê¡¼¤«¤é po/*.gmo, configure, stamp-h.in, aclocal.m4, - Makefile.in ¤òºï½ü¡£ - * COPYING: RSA ¤ÎÃøºî¸¢É½¼¨¤òºï½ü¡£ - * po/sylpheed.pot, po/stamp-cat-id, po/cat-id-tbl.c ¤òºï½ü¡£ - * configure.in: sys/utsname.h ¤Î¥Á¥§¥Ã¥¯¤òÄɲᣠ- -2001-04-24 Werner Koch - - W32 ¥Ö¥é¥ó¥Á¤ÎÂçÉôʬ¤ò¥Þ¡¼¥¸¡£ - - * configure.in: gpgme >= 0.2.1 ¤òÍ׵ᡣ - - * acconfig.h (HAVE_U32_TYPEDEF): ¿·µ¬¡£ - * ac/gnupg-check-typedef.m4: ¿·µ¬¡£ - * configure.in: u32 ·¿¤È¤¤¤¯¤Ä¤«¤Î·¿¤Î¥µ¥¤¥º¤ò¥Á¥§¥Ã¥¯¡£ - * src/utils.h: u32 ·¿¤È´Ø·¸¤¹¤ëÄê¿ô¤òÄêµÁ¡£ - - * src/about.c (about_create): MD5 ¤Ë´Ø¤¹¤ëɽ¼¨¤òºï½ü¡£RSA Inc ¤Î - ¼ÂÁõ¤Ï¤â¤¦»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£ - * src/md5ify.c, src/md5ify.h, src/md5global.h: ºï½ü¡£ - * src/md5c.c, src/md5c.h: FSF ¤Î¼ÂÁõ¤ÇÃÖ´¹¤·¡¢´Ø¿ô̾¤òɸ½à¤Î¾®Ê¸»ú - ¤Î̿̾µ¬Â§¤Ë¤·¤¿¤¬¤Ã¤ÆÊѹ¹¡£Á´¤Æ¤Î¸Æ¤Ó½Ð¤·Â¦¤òÊѹ¹¡£ - (md5_hex_digest): ¿·µ¬¡£ - (md5_hmac): Martin Schaaf ¤µ¤ó¤Ë¤è¤ë hmac ´Ø¿ô¤ò¾¯¤·½¤Àµ¤·¤ÆÄɲᣠ- (md5_hex_hmac): ¿·µ¬¡£ - * src/esmtp.c, src/esmtp.h (md5_hex_hmac): ºï½ü¡£ - (hmac_md5): ºï½ü¡£ - * src/pop.c (pop3_getauth_apop_send): md5_digest ¤ò¿·¤·¤¤´Ø¿ô - md5_hex_digest ¤ÇÃÖ´¹¡£ - - * src/about.c: ÍøÍѲÄǽ¤Ê¾ì¹ç¤Î¤ß utsname.h ¤ò include ¤¹¤ë¤è¤¦¤Ë - ¤·¤¿¡£ - - * src/utils.c, src/utils.h (get_home_dir): ÆÃÊÌ¤Ê Windoze ¤ÎÍ×µá - ¤Ë¤è¤ê¤è¤¯Âбþ¤¹¤ë¤¿¤á¤ËÄɲá£Á´¤Æ¤Î g_get_home_dir() ¤Î¸Æ¤Ó½Ð¤· - ¤ò¤³¤Î´Ø¿ô¤ËÊѹ¹¡£ - - * simple-gettext.c: ¿·µ¬¡£ - - * src/main.c (main): GnuPG ¤¬Àµ¤·¤¯¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð - ·Ù¹ð¤ò½Ð¤¹¤è¤¦¤Ë¤·¤¿¡£ - - * src/sigstatus.c, src/sigstatus.h: ¿·µ¬¡£ - * src/rfc2015.c (check_signature): sigstatus ¥¦¥£¥ó¥É¥¦¤ò»ÈÍѤ·¡¢ - ¥æ¡¼¥Æ¥£¥ê¥Æ¥£´Ø¿ô¤«¤é¥¹¥Æ¡¼¥¿¥¹¥Æ¥­¥¹¥È¤òÆÀ¤ë¤è¤¦¤Ë¤·¤¿¡£ - - * src/select-keys.c: ¥°¥í¡¼¥Ð¥ë¤Î select_keys ÊÑ¿ô¤òºï½ü¤·¡¢ - ¥¢¥í¥±¡¼¥È¤·¤¿ÊÑ¿ô¤òÁ´¤Æ¤Î´Ø¿ô¤ÇÅϤ¹¤è¤¦¤Ë¤·¤¿¡£ - (set_row): °Å¹æ²½¤Ç¤­¤ë¸°¤Î¤ß¤òɽ¼¨¡£ - (update_progress): ¥×¥í¥°¥ì¥¹¥Ð¡¼¤ò¡¢É÷¼Ö¤È¤É¤Î¸°¤Î¾ðÊó¤ò¼ý½¸ - ¤·¤Æ¤¤¤ë¤«¤ò¼¨¤¹¥Æ¥­¥¹¥È¤ÇÃÖ¤­´¹¤¨¤¿¡£Â¾¤ÎÁ´¤Æ¤Î¥×¥í¥°¥ì¥¹¥Ð¡¼ - ¤òºï½ü¤·¡¢¸Æ¤Ó½Ð¤·Â¦¤ò¹¹¿·¡£ - - * src/prefs_common.c (prefs_privacy_create) [__MINGW32__]: Ê᪠- ¥Ü¥¿¥ó¤òɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ - -2001-04-24 - - * src/prefs_common.[ch] - src/procheader.c: strftime() ¤ò»È¤¤¡¢¥æ¡¼¥¶¤¬¥µ¥Þ¥ê¥Ó¥å¡¼¤Ç - ÆüÉÕ¤Îɽ¼¨¤Î½ñ¼°¤òÄêµÁ¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë Darko Koruga ¤µ¤ó¤Î¥Ñ¥Ã¥Á - ¤òŬÍÑ(thanks!)¡£ - * src/prefs_common.c: prefs_quote_colors_dialog() - src/mainwindow.c: main_window_reflect_prefs_all(): ¿§¤ÎÀßÄ꤬ - Êѹ¹¤µ¤ì¤¿¤é¥á¥Ã¥»¡¼¥¸¤Î¿§¤ò¹¹¿·¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/main.[ch]: µ¯Æ°»þ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òµ­²±¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/export.c: export_mbox(): ºÇ½é¤Ëµ¯Æ°»þ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë chdir - ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/filesel.c: filesel_select_file(): ºÇ½é¤Ëµ¯Æ°»þ¤Î¥Ç¥£¥ì¥¯¥È¥ê - ¤ò³«¤¯¤è¤¦¤Ë¤·¤¿¡£ - -2001-04-23 - - * ½ªÎ»»þ¤ËÁ÷¿®ÂÔ¤Á¤Î¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ì¤Ð·Ù¹ð¤¹¤ë¥ª¥×¥·¥ç¥ó¤òÄɲà - [sergey]: - - * src/compose.c: compose_queue(): Á÷¿®ÂÔµ¡¸å¤Ë folder_item_scan() - ¤È folderview_update_item() ¤ò¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ - * src/folderview.c: folderview_update_node(): Á÷¿®ÂÔ¤Á¤Î¥á¥Ã¥»¡¼¥¸ - ¤¬¤¢¤ì¤ÐÁ÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤ò¥Ü¡¼¥ë¥É¥Õ¥©¥ó¥È¤ÇÉÁ²è¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * src/mainwindow.c: queued_messages(): ¿·¤·¤¤´Ø¿ô¡£ - app_exit_cb(): warn_queued_on_exit ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Æ¡¢Á÷¿®ÂÔ¤Á - ¤Î¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ì¤Ð·Ù¹ð¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ - * prefs_common.[ch]: warn_queued_on_exit ¥ª¥×¥·¥ç¥ó¤òÄɲᣠ- - * src/mainwindow.c: queued_messages() ¤ò main.c ¤Ë°ÜÆ°¤·¡¢ - get_queued_message_num() ¤Ë̾¾ÎÊѹ¹¡£ - * src/main.c: app_will_exit(): app_exit_cb() ¤«¤é·Ù¹ð¥À¥¤¥¢¥í¥°¤Î - ¥³¡¼¥É¤ò°ÜÆ°¤·¡¢manage_window_focus_in() ¤òÄɲᣠ- - * GnuPG ¸°ÁªÂòÂбþ¤ò³ÈÄ¥ [sergey]: - - * src/select-keys.c: Win32 ¥Ö¥é¥ó¥Á¤ÎºÇ¿·ÈǤ˹¹¿·¤·¡¢Ç¤°Õ¤Î¸°¤Î - ÁªÂò¤ËÂбþ¡£ - * src/prefs_account.c: ¥¢¥«¥¦¥ó¥È¥ª¥×¥·¥ç¥ó¥¦¥£¥ó¥É¥¦¤Ë¡Öµ¡Ì©¡× - ¥¿¥Ö¤òÄɲᣠ- prefs_account_privacy_create(), - prefs_account_sign_key_set_data_from_radiobtn(), - prefs_account_sign_key_set_radiobtn(): ¿·¤·¤¤´Ø¿ô¡£ - * src/prefs_account.h: ¿·¤·¤¤ÀßÄê: sign_key_type, sign_key_id. - * src/rfc2015.c: set_signers(): ¿·¤·¤¤´Ø¿ô¡£ - pgp_sign(): ¥¢¥«¥¦¥ó¥È¥Ñ¥é¥á¡¼¥¿¤È set_signer() ¤Î¸Æ½Ð¤·¤òÄɲᣠ- rfc2015_sign(): ¥¢¥«¥¦¥ó¥È¥Ñ¥é¥á¡¼¥¿¤òÄɲä·¡¢pgp_sign() ¤Ë - ÅϤ¹¤è¤¦¤Ë¤·¤¿¡£ - * src/rfc2015.h: rfc2015_sign(): ¥×¥í¥È¥¿¥¤¥×¤ò¹¹¿·¡£ - * src/compose.c: ¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤ò rfc2015_sign() ¤ËÅϤ¹¤è¤¦¤Ë - ¤·¤¿¡£ - -2001-04-22 - - * src/mbox.c: export_to_mbox(): ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¡£ - -2001-04-20 - - * src/mbox.[ch]: export_mbox() ¤ò export_to_mbox() ¤ËÊѹ¹¡£ - ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¡£ - * src/export.[ch]: ¥Õ¥©¥ë¥À¤ò mbox ¤Ë¥¨¥¯¥¹¥Ý¡¼¥È¤¹¤ë¤¿¤á¤ËÄɲᣠ- * src/import.[ch]: import_mbox() ¤¬¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥©¥ë¥À¤ò¤È¤ë - ¤è¤¦¤Ë¤·¤¿¡£¥À¥¤¥¢¥í¥°¤ËÀâÌÀ¤òÄɲᣠ- * src/summaryview.c: summary_show(): ¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®¸å¤Ë¥Ä¡¼¥ë¥Ð¡¼ - ¤Î¥Ü¥¿¥ó¤¬²¡¤»¤Ê¤¤¤Þ¤Þ¤Ë¤Ê¤Ã¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ - * src/export.c - src/import.c: OK ¤Þ¤¿¤Ï¥­¥ã¥ó¥»¥ë¥Ü¥¿¥ó¤¬¿ô²ó²¡¤µ¤ì¤¿¤é¥×¥í¥°¥é¥à - ¤¬½ªÎ»¤·¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£ - * src/prefs_common.[ch] - src/addressbook.c: ¡Ö¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤¿¤È¤­¤Ë¥¢¥É¥ì¥¹¤ò°¸Àè¤Ë - Äɲ乤ë¡×¥ª¥×¥·¥ç¥ó¤òÄɲᣠ- -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 deleted file mode 100644 index 14ed9d978..000000000 --- a/INSTALL +++ /dev/null @@ -1,111 +0,0 @@ -Installation -============ - -This program requires GTK+ 1.2.6 or higher to be compiled. - -This program is developed on Debian GNU/Linux (woody/sid) -(Linux 2.4.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.x) -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 RedHat Linux 7.1 -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 -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 SuSE Linux 7.2 -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 NetBSD 1.5.1 -o OpenBSD 2.7 -o OpenBSD 2.8 (i386) -o OpenBSD 2.9 -o BSD/OS 4.0.1 -o Solaris 2.5 -o Solaris 2.5.1 -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 Tru64 Unix 5.0 (OSF1 V5.0) -o SCO UnixWare 7 -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 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 deleted file mode 100644 index 87b0071ee..000000000 --- a/INSTALL.jp +++ /dev/null @@ -1,112 +0,0 @@ -¥¤¥ó¥¹¥È¡¼¥ëÊýË¡ -================ - -¤³¤Î¥×¥í¥°¥é¥à¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤Ë¤Ï GTK+ 1.2.6 °Ê¹ß¤¬É¬ÍפǤ¹¡£ - -¤³¤Î¥×¥í¥°¥é¥à¤Ï Debian GNU/Linux (woody/sid) (Linux 2.4.x + glibc 2.2.x) -¾å¤Ç³«È¯¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢Â¾¤Î´Ä¶­¤Ç¤Ï¤¦¤Þ¤¯Æ°ºî¤·¤Ê¤¤²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£ - -°Ê²¼¤Î´Ä¶­¤ÇÆ°ºî¤¬³Îǧ¤µ¤ì¤Æ¤¤¤Þ¤¹: - -o Debian GNU/Linux (woody/sid) (glibc 2.2.x) -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 RedHat Linux 7.1 -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 -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 SuSE Linux 7.2 -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 NetBSD 1.5.1 -o OpenBSD 2.7 -o OpenBSD 2.8 (i386) -o OpenBSD 2.9 -o BSD/OS 4.0.1 -o Solaris 2.5 -o Solaris 2.5.1 -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 Tru64 Unix 5.0 (OSF1 V5.0) -o SCO UnixWare 7 -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 ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤ª¤¯ -¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£ - - -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 deleted file mode 100644 index 7e5b9be56..000000000 --- a/Makefile.am +++ /dev/null @@ -1,33 +0,0 @@ -SUBDIRS = ac po intl libkcc src manual - -EXTRA_DIST = \ - ChangeLog.jp \ - INSTALL.jp \ - README.jp \ - TODO.jp \ - sylpheed.spec \ - sylpheed.spec.in \ - autogen.sh \ - sylpheed.png \ - sylpheed.desktop \ - ChangeLog.claws - -if SYLPHEED_GNOME -pixmapdir=$(gnomedir)/share/pixmaps -pixmap_DATA=sylpheed.png -gnomapdir=$(gnomedir)/share/gnome/apps/Internet -gnomap_DATA=sylpheed.desktop -else -pixmapdir= -pixmap_DATA= -gnomapdir= -gnomap_DATA= -endif - -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/NEWS b/NEWS deleted file mode 100644 index e69de29bb..000000000 diff --git a/README b/README deleted file mode 100644 index 93d946fe2..000000000 --- a/README +++ /dev/null @@ -1,159 +0,0 @@ - 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, 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 IMAP4rev1 support - 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 / exporting - 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 - -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 -===== - -How to run ----------- - -Input `sylpheed' on a command line, or double-click the icon on a file -manager to execute. - -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 deleted file mode 100644 index dcd9861c9..000000000 --- a/README.jp +++ /dev/null @@ -1,195 +0,0 @@ - Sylpheed - GTK+ ¥Ù¡¼¥¹¤Î·ÚÎ̤ǹ⮤ÊÅŻҥ᡼¥ë¥¯¥é¥¤¥¢¥ó¥È - - 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, 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 IMAP4rev1 Âбþ - 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 ¤Ë¤è¤ë¥á¥Ã¥»¡¼¥¸¤Î¹ñºÝ²½¤ËÂбþ - -Windows ¾å¤Î¥á¡¼¥é¡¢¤¢¤ë¤¤¤Ï Mew ¤ä Wanderlust ¤ò»ÈÍѤ·¤¿¤³¤È¤Î¤¢¤ë¿Í¤Ê¤é -¤¹¤°¤Ë»È¤¤Êý¤Ïʬ¤«¤ë¤È»×¤¤¤Þ¤¹¡£ - -¥¤¥ó¥¹¥È¡¼¥ëÊýË¡ -================ - -¥¤¥ó¥¹¥È¡¼¥ë¤ÎÀâÌÀ¤Ï INSTALL ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ - -»ÈÍÑÊýË¡ -======== - -µ¯Æ°Á°¤Î½àÈ÷ ------------- - -ÆüËܸì¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¡¢ Sylpheed ¤ò¼Â¹Ô¤¹¤ëÁ°¤Ë¥í¥«¡¼¥ë¤Ë´ØÏ¢¤¹¤ë -´Ä¶­ÊÑ¿ô¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó(ÆüËܸì Linux ¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó -¤Î¾ì¹ç¤ÏÂçÄñ¤¹¤Ç¤ËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹)¡£Î㤨¤Ð¡¢ - -% export LANG=ja_JP.eucJP - -¤Þ¤¿¤Ï - -% setenv LANG ja_JP.eucJP - -(ja_JP.eucJP ¤ÏŬÀÚ¤Ê¥í¥«¡¼¥ë̾¤ËÃÖ¤­´¹¤¨¤Æ¤¯¤À¤µ¤¤¡£) - -ËÝÌõ¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ÎÊý¤¬Îɤ±¤ì¤Ð¡¢ LANG ¤ÈƱÍÍ¤Ë LC_MESSAGES ¤â»ØÄꤷ¤Æ -¤¯¤À¤µ¤¤¡£ - -µ¯Æ°ÊýË¡ --------- - -¥³¥Þ¥ó¥É¥é¥¤¥ó¤«¤é sylpheed ¤ÈÆþÎϤ¹¤ë¤«¡¢¤Þ¤¿¤Ï¥Õ¥¡¥¤¥ë¥Þ¥Í¡¼¥¸¥ã -¤«¤é¥¢¥¤¥³¥ó¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤¹¤ë¤Ê¤ê¤·¤Æµ¯Æ°¤·¤Æ¤¯¤À¤µ¤¤¡£ - -½é²óµ¯Æ°»þ¤ÎÃí°Õ ----------------- - -½é²ó¤Îµ¯Æ°»þ¤Ë¡¢ ~/.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 deleted file mode 100644 index e8bf552d0..000000000 --- a/TODO +++ /dev/null @@ -1,69 +0,0 @@ -TODO -==== - -(The upper item has the greater priority or feasibility... maybe :-) - -o POP before SMTP -o full-text search of messages (plain, or hooking up with Namazu) -o original icons and logos -o autosave -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 customization of key bindings -o customization of toolbar -o configuration for each folders -o RFC 2231 (MIME filename encoding) compliant -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) -. progress display of time-consuming processes -. modification of display color - -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) -* periodical check of newly arrived mails -* designate the displayed headers -* user-defined headers -* list view of newsgroups and subscription of groups from there diff --git a/TODO.jp b/TODO.jp deleted file mode 100644 index 2b5c506f8..000000000 --- a/TODO.jp +++ /dev/null @@ -1,70 +0,0 @@ -TODO -==== - -(¾å¤Î¤â¤Î¤Û¤É½ÅÍ×ÅÙ¡¢¼Â¸½²ÄǽÀ­¤¬¹â¤¯¤Ê¤ë¡¢¤«¤â(^^;) - -o POP before SMTP -o ¥á¥Ã¥»¡¼¥¸¤ÎÁ´Ê¸¸¡º÷ (¥Ù¥¿¡¢ Namazu ¤È¤ÎÏ¢·È) -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 RFC 2231 (MIME ¥Õ¥¡¥¤¥ë̾¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°) Âбþ -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/.cvsignore b/ac/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/ac/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/ac/Makefile.am b/ac/Makefile.am deleted file mode 100644 index 8eb004143..000000000 --- a/ac/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -MACROS = \ - aclocal-include.m4 \ - check-type.m4 \ - gnupg-check-typedef.m4 \ - gpgme.m4 - -EXTRA_DIST = $(MACROS) diff --git a/ac/aclocal-include.m4 b/ac/aclocal-include.m4 deleted file mode 100644 index aac5f8a02..000000000 --- a/ac/aclocal-include.m4 +++ /dev/null @@ -1,12 +0,0 @@ -# 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/check-type.m4 b/ac/check-type.m4 deleted file mode 100644 index 1a71b6afe..000000000 --- a/ac/check-type.m4 +++ /dev/null @@ -1,27 +0,0 @@ -dnl SYLPHEED_CHECK_TYPE(TYPE, DEFAULT [, INCLUDES]) -dnl -dnl Like AC_CHECK_TYPE, but in addition to `sys/types.h', `stdlib.h' and -dnl `stddef.h' checks files included by INCLUDES, which should be a -dnl series of #include statements. If TYPE is not defined, define it -dnl to DEFAULT. -dnl -AC_DEFUN(SYLPHEED_CHECK_TYPE, -[AC_REQUIRE([AC_HEADER_STDC])dnl -AC_MSG_CHECKING(for $1) -AC_CACHE_VAL(sylpheed_cv_type_$1, -[AC_TRY_COMPILE([ -#include -#if STDC_HEADERS -#include -#include -#endif -$3 -], [ -#undef $1 -int a = sizeof($1); -], sylpheed_cv_type_$1=yes, sylpheed_cv_type_$1=no)])dnl -AC_MSG_RESULT($sylpheed_cv_type_$1) -if test $sylpheed_cv_type_$1 = no; then - AC_DEFINE($1, $2) -fi -]) diff --git a/ac/gnupg-check-typedef.m4 b/ac/gnupg-check-typedef.m4 deleted file mode 100644 index 9f1d7826e..000000000 --- a/ac/gnupg-check-typedef.m4 +++ /dev/null @@ -1,17 +0,0 @@ -dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME) -dnl Check whether a typedef exists and create a #define $2 if it exists -dnl -AC_DEFUN(GNUPG_CHECK_TYPEDEF, - [ AC_MSG_CHECKING(for $1 typedef) - AC_CACHE_VAL(gnupg_cv_typedef_$1, - [AC_TRY_COMPILE([#include - #include ], [ - #undef $1 - int a = sizeof($1); - ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )]) - AC_MSG_RESULT($gnupg_cv_typedef_$1) - if test "$gnupg_cv_typedef_$1" = yes; then - AC_DEFINE($2) - fi - ]) - diff --git a/ac/gpgme.m4 b/ac/gpgme.m4 deleted file mode 100644 index c00071a22..000000000 --- a/ac/gpgme.m4 +++ /dev/null @@ -1,170 +0,0 @@ -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 deleted file mode 100644 index 3194d263a..000000000 --- a/acconfig.h +++ /dev/null @@ -1,42 +0,0 @@ -#undef ENABLE_NLS -#undef HAVE_CATGETS -#undef HAVE_GETTEXT -#undef HAVE_LC_MESSAGES -#undef HAVE_STPCPY - -#undef HAVE_GDK_PIXBUF -#undef HAVE_GDK_IMLIB - -#undef USE_GTKGDK_XIM - -/* Whether to use multithread or not */ -#undef USE_THREADS - -/* Define if you want IPv6 support. */ -#undef INET6 - -/* Define if you want JPilot support in addressbook. */ -#undef USE_JPILOT - -/* Define if you want LDAP support in addressbook. */ -#undef USE_LDAP - -/* Define if we use GPGME to support OpenPGP */ -#undef USE_GPGME - -/* Define if we use GPGME to support OpenPGP */ -#undef USE_SSL - -/* Define to `unsigned int' if or doesn't define. */ -#undef wint_t - -/* Used to test for a u32 typedef */ -#undef HAVE_U32_TYPEDEF - -#undef PACKAGE -#undef VERSION - -#undef CLAWS - -/* Has ispell path */ -#undef ISPELL_PATH diff --git a/autogen.sh b/autogen.sh deleted file mode 100644 index 9b71bf130..000000000 --- a/autogen.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -aclocal -I ac \ - && autoheader \ - && automake --add-missing --foreign --copy \ - && autoconf \ - && ./configure --enable-maintainer-mode $@ diff --git a/config.guess b/config.guess deleted file mode 100644 index ba6616516..000000000 --- a/config.guess +++ /dev/null @@ -1,1371 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. - -timestamp='2001-04-20' - -# 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 . -# Please send patches to . -# -# 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 build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - - -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int dummy(){}" > $dummy.c - for c in cc gcc c89 ; do - ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 - if test $? = 0 ; then - CC_FOR_BUILD="$c"; break - fi - done - rm -f $dummy.c $dummy.o $dummy.rel - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac - -# 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 - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # Netbsd (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # Determine the machine/vendor (is the vendor relevant). - case "${UNAME_MACHINE}" in - amiga) machine=m68k-unknown ;; - arm32) machine=arm-unknown ;; - atari*) machine=m68k-atari ;; - sun3*) machine=m68k-sun ;; - mac68k) machine=m68k-apple ;; - macppc) machine=powerpc-apple ;; - hp3[0-9][05]) machine=m68k-hp ;; - ibmrt|romp-ibm) machine=romp-ibm ;; - *) machine=${UNAME_MACHINE}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE}" in - i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit 0 ;; - 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 - .data -\$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - - .text - .globl main - .align 4 - .ent main -main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - 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-unknown-sysv4 - 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 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - SR2?01:HI-UX/MPP:*:* | SR8000: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*: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*:OpenBSD:*:*) - echo m68k-unknown-openbsd${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 ;; - 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 -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - 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 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 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 ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 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 -f $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:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${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 BSD 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:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - case "${HPUX_REV}" in - 11.[0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - esac ;; - esac - fi ;; - esac - if [ "${HP_ARCH}" = "" ]; then - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` - if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi - rm -f $dummy.c $dummy - fi ;; - esac - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-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 -f $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} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3D:*:*:*) - echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/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:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`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*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - 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 ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux - exit 0 ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - mips:Linux:*:*) - cat >$dummy.c < /* for printf() prototype */ -int main (int argc, char *argv[]) { -#else -int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __MIPSEB__ - printf ("%s-unknown-linux-gnu\n", argv[1]); -#endif -#ifdef __MIPSEL__ - printf ("%sel-unknown-linux-gnu\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - ;; - ppc:Linux:*:*) - # 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("unknown\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 ;; - alpha:Linux:*:*) - cat <$dummy.s - .data - \$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - .text - .globl main - .align 4 - .ent main - main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - LIBC="" - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) UNAME_MACHINE="alpha" ;; - 1-0) UNAME_MACHINE="alphaev5" ;; - 1-1) UNAME_MACHINE="alphaev56" ;; - 1-101) UNAME_MACHINE="alphapca56" ;; - 2-303) UNAME_MACHINE="alphaev6" ;; - 2-307) UNAME_MACHINE="alphaev67" ;; - 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 ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit 0 ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit 0 ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit 0 ;; - i*86:Linux:*:*) - # 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_supported_emulations=`cd /; ld --help 2>&1 \ - | 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 - ;; - elf_i*86) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - i*86coff) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 - ;; - esac - # 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. - test -z "$ld_supported_emulations" && 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 -#include /* for printf() prototype */ - 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 -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 - ;; -# 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.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit 0 ;; - i*86:*:5:7*) - # Fixed at (any) Pentium or better - UNAME_MACHINE=i586 - if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then - echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} - fi - 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 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming 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]??A:*: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.*:* | m68*:LynxOS:3.0*:*) - 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]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-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 ;; - *:Darwin:*:*) - echo `uname -p`-apple-darwin${UNAME_RELEASE} - exit 0 ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - if test "${UNAME_MACHINE}" = "x86pc"; then - UNAME_MACHINE=pc - fi - echo `uname -p`-${UNAME_MACHINE}-nto-qnx - exit 0 ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit 0 ;; - NSR-[KW]:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit 0 ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit 0 ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit 0 ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit 0 ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit 0 ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit 0 ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit 0 ;; - *:ITS:*:*) - echo pdp10-unknown-its - 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) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# 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 -f $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 - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/config.sub b/config.sub deleted file mode 100644 index 2436b4534..000000000 --- a/config.sub +++ /dev/null @@ -1,1215 +0,0 @@ -#! /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.in b/configure.in deleted file mode 100644 index 362971e0e..000000000 --- a/configure.in +++ /dev/null @@ -1,323 +0,0 @@ -dnl check for needed autoconf version -AC_PREREQ(2.50) - -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=5 -MICRO_VERSION=3 -INTERFACE_AGE=0 -BINARY_AGE=0 -EXTRA_VERSION=claws2 -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 GNOME installed? -AC_PATH_PROG(GNOME_CONFIG, gnome-config, no) -if test "$GNOME_CONFIG" != no; then - gnomedir="`gnome-config --prefix`" - AC_SUBST(gnomedir) -fi -AM_CONDITIONAL(SYLPHEED_GNOME, test -d "$gnomedir") - -dnl Claws version -AC_DEFINE(CLAWS, 1) - -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 -AM_PROG_LEX -AC_PROG_YACC - -SYLPHEED_ACLOCAL_INCLUDE(ac) - -dnl for gettext -ALL_LINGUAS="cs de el es fr it ja ko nl pl 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.2.1, AC_DEFINE(USE_GPGME), [use_gpgme=no]) -fi - -dnl Use OpenSSL for SSL connections -AC_MSG_CHECKING([whether to use ssl]) -AC_ARG_ENABLE(ssl, - [ --enable-ssl Enable SSL support using OpenSSL [default=no]], - [ac_cv_enable_ssl=$enableval], [ac_cv_enable_ssl=no]) -if test $ac_cv_enable_ssl = yes; then - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) -fi - -if test $ac_cv_enable_ssl = yes; then - AC_MSG_CHECKING([whether to openssl is available]) - LIBS="$LIBS -lssl" - AC_TRY_LINK([ -#include -], [ return(OPENSSL_VERSION_NUMBER); ], - [ AC_MSG_RESULT(yes) - AC_DEFINE(USE_SSL) ], - [ AC_MSG_RESULT(no) - LIBS="$ac_save_LIBS" ]) -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 for JPilot support in addressbook -dnl no check for libraries: these are dynamically loaded -AC_ARG_ENABLE(jpilot, - [ --enable-jpilot Enable JPilot support [default=no]], - [ac_cv_enable_jpilot=$enableval], [ac_cv_enable_jpilot=no]) - -AC_MSG_CHECKING([whether to use jpilot]) -if test "$ac_cv_enable_jpilot" = yes; then - AC_MSG_RESULT(yes) - if test "$ac_cv_enable_jpilot" = yes; then - AC_CHECK_HEADERS(pi-args.h pi-appinfo.h pi-address.h, , [ac_cv_enable_jpilot=no]) - if test "$ac_cv_enable_jpilot" = yes; then - LIBS="$LIBS -lpisock" - AC_DEFINE(USE_JPILOT) - fi - fi - AC_MSG_CHECKING(whether jpilot is available) - if test "$ac_cv_enable_jpilot" = yes; then - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi -else - AC_MSG_RESULT(no) -fi - -dnl for LDAP support in addressbook -dnl no check for libraries; dynamically loaded -AC_ARG_ENABLE(ldap, - [ --enable-ldap Enable LDAP support [default=no]], - [ac_cv_enable_ldap=$enableval], [ac_cv_enable_ldap=no]) - -AC_MSG_CHECKING([whether to use ldap]) -if test "$ac_cv_enable_ldap" = yes; then - AC_MSG_RESULT(yes) - if test "$ac_cv_enable_ldap" = yes; then - AC_CHECK_HEADERS(ldap.h lber.h pthread.h, , [ac_cv_enable_ldap=no]) - if test "$ac_cv_enable_ldap" = yes; then - LIBS="$LIBS -lldap -llber -lpthread -lresolv" - AC_DEFINE(USE_LDAP) - fi - fi - AC_MSG_CHECKING(whether ldap is available) - if test "$ac_cv_enable_ldap" = yes; then - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi -else - AC_MSG_RESULT(no) -fi - -dnl get ispell path -dnl -AC_PATH_PROG(ispell_path, ispell, no) -if test "$ispell_path" != no; then - AC_DEFINE_UNQUOTED(ISPELL_PATH, "$ispell_path") - AC_SUBST(ISPELL_PATH) -else - AC_DEFINE_UNQUOTED(ISPELL_PATH, "/usr/bin/ispell") - AC_SUBST(ISPELL_PATH) -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 -dnl AC_ARG_ENABLE(threads, -dnl [ --enable-threads Enable multithread support [default=no]], -dnl [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 check if gdk / gtk was compiled with USE_XIM -AC_MSG_CHECKING([whether GTK was compiled with XIM support]) -CFLAGS_SAVE="$CFLAGS" -LDFLAGS_SAVE="$LDFLAGS" -CFLAGS="$CFLAGS `$GLIB_CONFIG --cflags` `gtk-config --cflags`" -LDFLAGS="$LIBS `$GLIB_CONFIG --libs` `gtk-config --libs`" -AC_CACHE_VAL(ac_cv_use_gtkgdk_xim, [ - AC_TRY_COMPILE([#include - #include ], - [extern gint gdk_im_open(void); gdk_im_open();], - ac_cv_use_gtkgdk_xim=yes, ac_cv_use_gtkgdk_xim=no) - ]) -AC_MSG_RESULT($ac_cv_use_gtkgdk_xim) -if test $ac_cv_use_gtkgdk_xim = yes; then - AC_DEFINE(USE_GTKGDK_XIM) -fi -CFLAGS="$CFLAGS_SAVE" -LDFLAGS="$LDFLAGS_SAVE" - - -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 sys/utsname.h \ - wchar.h wctype.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 - -dnl AC_CHECK_TYPE(wint_t, unsigned int) does not work because wint_t -dnl may be defined only in wchar.h (this happens with gcc-2.96). -dnl So we need to use this extended macro. -SYLPHEED_CHECK_TYPE(wint_t, unsigned int, -[ -#if HAVE_WCHAR_H -#include -#endif -]) - -GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF) -AC_CHECK_SIZEOF(unsigned short, 2) -AC_CHECK_SIZEOF(unsigned int, 4) -AC_CHECK_SIZEOF(unsigned long, 4) - -dnl Checks for library functions. -AC_FUNC_ALLOCA -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 -manual/en/Makefile -]) diff --git a/doc/manual/.cvsignore b/doc/manual/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/doc/manual/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/doc/manual/Makefile.am b/doc/manual/Makefile.am deleted file mode 100644 index 6b1c7b98c..000000000 --- a/doc/manual/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = en ja diff --git a/doc/manual/en/.cvsignore b/doc/manual/en/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/doc/manual/en/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/doc/manual/en/Makefile.am b/doc/manual/en/Makefile.am deleted file mode 100644 index ff7ed3013..000000000 --- a/doc/manual/en/Makefile.am +++ /dev/null @@ -1,25 +0,0 @@ -manualdatadir = $(manualdir)/en - -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 - -# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'` - -EXTRA_DIST = $(manualdata_DATA) diff --git a/doc/manual/en/sylpheed-1.html b/doc/manual/en/sylpheed-1.html deleted file mode 100644 index 7f3fcf895..000000000 --- a/doc/manual/en/sylpheed-1.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - Sylpheed User's Manual: What is Sylpheed? - - - - - -Next -Previous -Contents -
-

1. What is Sylpheed?

- -

1.1 Introduction to Sylpheed. -

- -

Sylpheed is a fast e-mail and news client. It will run on just about any Linux or Unix compliant system. -

The power of Sylpheed is that it is -

    -
  • light on resources
  • -
  • very fast
  • -
  • intuitive for most people
  • -
  • easy to work with
  • -
  • loaded with features
  • -
  • graceful and sophisticated in its interface
  • -
-

1.2 Interface -

- -

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 for receiving (like inc or imget). -i -

1.3 Main features -

- -

Currently implemented features are: -

    -
  • Unlimited multiple account handling
  • -
  • Thread display
  • -
  • Filtering
  • -
  • MIME (attachments)
  • -
  • built-in image view
  • -
  • X-Face support
  • -
  • External editor support
  • -
  • Message queueing
  • -
  • Draft message function
  • -
  • Line-wrapping
  • -
  • Clickable URI
  • -
  • XML-based addressbook
  • -
  • Newly arrived and unread message management
  • -
  • Multiple MH folder support
  • -
  • Mew/Wanderlust compatible key bindings
  • -
  • News reader function
  • -
  • Printing
  • -
  • UIDL support
  • -
  • APOP authentication
  • -
  • SMTP AUTH support
  • -
  • IPv6 support
  • -
  • Autoconf, automake support
  • -
  • Support of i18n of messages by gettext
  • -
  • Supports many locales, including UTF-8 (Unicode), when using libjconv
  • -
  • IMAP4 compliant
  • -
- -This list is not complete, but this will at least show you the most common features in Sylpheed. -

1.4 Methods for managing messages -

- -

This section has not been written yet. -

1.5 Features for the future -

- -

This section has not been written yet. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-10.html b/doc/manual/en/sylpheed-10.html deleted file mode 100644 index c00e4c23f..000000000 --- a/doc/manual/en/sylpheed-10.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - Sylpheed User's Manual: Composing Messages - - - - - -Next -Previous -Contents -
-

10. Composing Messages

- -

10.1 Composing a New Message -

- -

When you start writing a new message, you are presented a nice dialog in which you can enter all kinds of information. In the From: line you find a dropdown list. In there you can select the e-mail account you want to use as the sending account. -

In the To: / Cc: / Bcc: part, you write the e-mail address of the receiver. You can enter several e-mail addresses, as long as they are separated by commas. An important utility here is the button "Address". When you click that, you see the address book. You can point at an address, click the "To:", "Cc:" or "Bcc:" button, and Sylpheed will place the address in the selected line. The Bcc: may be greyed out. In order to make that accessible, you need to add the Bcc: line to the message. You do that through the Message menu, and checking the Bcc option. -

In the Subject line you enter a short descriptive text what your message will be about. -

You can move between these lines by pressing TAB (to skip to the next line) and SHIFT-TAB (to go back up). When you press TAB in the last line, you will be moved to the message body. -

Did you select a signature file in the settings for the active account, it will be in the message text already. You can now write your message. When you are done, you can click Send, Send later or Draft in the toolbar. Send attempts to send the message immediately. Send later will place it in the Send folder, and Draft will place it in the Draft folder. -

10.2 Replying to a Message -

- -

To reply to a message, you use the "reply" function. In Sylpheed you activate this through either the "Reply" button, or by pressing Alt-R. -

A new message window will be created, with the e-mail address of the recipient and the subject already set for you. Most of the things described in Composing a new message are also applicable to this window. -

10.3 Replying to a Message with Quotation -

- -

If you want to have Sylpheed quote the text you are replying to, you need to go into the Configuration menu. There you select Common preferences, go to the Compose tab, and check the "Quote message when replying" box. There you can also edit the quotation mark (the mark put in front of each quoted line in the reply mail) and the reply attribution (which is placed in front of the reply text). -

10.4 Forwarding Messages -

- -

Forwarding a message means: you send the entire message, including headers (Sender address, date sent etc.) on to someone else. For this you press the "Forward" button, or you press Ctrl-F. A new message window is created, containing the text of the selected message. You can then supply the name(s) of the recipient(s) of the message as in composing a new message, perhaps add a few lines of text to the message and send it on its way. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-11.html b/doc/manual/en/sylpheed-11.html deleted file mode 100644 index 9d3bcc39f..000000000 --- a/doc/manual/en/sylpheed-11.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Sylpheed User's Manual: Address Book - - - - - -Next -Previous -Contents -
-

11. Address Book

- -

In the address book, accessible through Alt-A, the Addressbook button, or through the tool menu, you store e-mail addresses of the people and places you want to write more often. -

-

-

11.1 Adding and Deleting Addresses -

- -

Adding an address to the address book is quite easy too. Rightclick the folder or group you want to add the address to, select "new address" and fill in the dialog that comes up. You can also directly click the Add button in the address book window, and the dialog comes up. In this case the address is moved into the folder/group that is selected at the moment of adding. -

Deleting an address is equally simple. Find the address, click it once, and press the Delete button. -

-

11.2 Folders and Groups -

- -

The address book, like the mail folders, can be expanded into an entire tree of sections. For this you right-click on the folder where you want to add a new folder, and select "new folder". Then you can enter a descriptive name for the folder, click Ok, and your folder is created. -

In this same way you can create a new group in a folder. Right-click on the folder, select "new group", enter a name for it, and that's it. -

-

11.3 Combination with Message Composition Window -

- -

Open the address-book through one of the available ways (toolbar, shortcut key). -Finding an e-mail address: enter part of the start of the name or the address you are looking for and press the TAB key. A dropdown list will appear with the selections that have been found to match. Select one and press enter. After that you can use the To:, Cc: or Bcc: buttons to add the address to an e-mail, if you are writing one. Otherwise these buttons are greyed out and not functional. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-12.html b/doc/manual/en/sylpheed-12.html deleted file mode 100644 index 2e2c79e0c..000000000 --- a/doc/manual/en/sylpheed-12.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - Sylpheed User's Manual: Filtering Messages - - - - - -Next -Previous -Contents -
-

12. Filtering Messages

- -

Written by Nick Selby (sylpheed@nickselby.com) -

-

-

12.1 Filtering Messages -

- -

Sylpheed provides powerful filters to allow users to automatically pre-sort incoming -mail based on a set of rules that the user defines. As a most simple example, let's -say you work at the Acme Grommet Company, and you want all e-mail from your co-workers -to be placed in one mailbox. To accomplish this, you would set up a filter that would -place all mail whose "From" header includes the phrase "acmegrommet.com" into a specific mailbox. -

Sylpheed allows you much more control than just that simple setup; you may create -filters based on several variables, including an "If this AND that" or "If the message -contains this OR does NOT contain that" etc. It's very cool. -

Finding The Filter Setting Dialog

- -

The filter settings dialog is located in the Configuration menu, under the title -"Filter Setting". You may also use establish a keyboard shortcut (see Keyboard Shortcuts). -

Setting Up Filters

- -

Operator(s) and Processing instructions combine to create a Filter Rule. -

* Operators -The dialog's first setting option establishes the Operator, the variable that will -tell the filter what specific text to look for to trigger a filter. Each Filter Rule may have up to two operator sets. -

Each Operator variable contains three sections: Header, Keyword and Predicate. -

Header is a drop-down box which defines in which message header Sylpheed's filter will search. Choices range from Subject to X-Mailer. -

Keyword is a a text box in which you may enter the text for which the filter will search. -

Predicate allows you to choose to filter based on whether the operator -contains, or does not contain, the text you enter in the Keyword field. -

Example: Create an Operator in which the X-Mailer field of an incoming message contains the word 'Eudora'. -

    -
  • Step 1. Under the Header drop-down box, select X-Mailer.
  • -
  • Step 2. In the Keyword text box, type 'eudora' (case insensitive)
  • -
  • Step 3. Determine appropriate Predicate setting. Default is "Contains".
  • -
- -The second Operator setting, which is set identically to the first, also allows the -user to select an AND/OR setting declaring the relationship between the two operators. -

Example: Create an Operator set which will process mail with a "From" header of -bob@acmegrommet.com AND a subject of "2001 Spring Grommet Collection" -

    -
  • Step 1. Under the first Operator set's Header drop-down box, select "From".
  • -
  • Step 2. In the "Keyword" text box, type 'bob@acmegrommet.com' (case insensitive)
  • -
  • Step 3. Leave "Predicate" setting on default, "Contains"
  • -
  • Step 4. Leave "AND/OR" box on default setting, "AND"
  • -
  • Step 5. Under the second Operator set's "Header" drop-down box, select "Subject".
  • -
  • Step 6. In the "Keyword" text box, type '2001 spring grommet collection' (case insensitive)
  • -
  • Step 7. Leave "Predicate" setting on default, "Contains"
  • -
-

Message Processing

- -

Once you've established the Operator(s) that will define which messages will be -processed, it's time to tell Sylpheed what to do with messages that match the -operator(s). You may choose between two radio button-selected settings: "Destination" and "Don't Receive". -

Selecting "Destinations" will enable you to route the mail into -a mailbox which you specify. -

Selecting "Don't Receive" will instruct Sylpheed to not download messages with that -operator. Note that with "Don't Receive", Sylpheed merely leaves the message on your mailserver - it does not delete it. -

To specify a mailbox to which you want the message transfered, click on the radio -button to the left of the word "Destination" in the dialog. (Currently, in order to -specify a mailbox you must have created that mailbox prior to activating the Filter -Setting dialog.) Clicking the "Select" button will open a pop-up window containing all -mail folders currently active in your copy of Sylpheed. Select the mailbox you wish by -either (a) double clicking on the mail folder name or (b) clicking the mail folder name and then clicking "OK". -

To specify that the message not be retrieved, and left on your mail server, click the -radio button to the left of the words "Don't Receive". -

Filter Registration

- -

Now that you have set the Operator and the Processing Rule, all that's left to do is -tell Sylpheed to save the entire Filter Rule. If you skip this step, the filter won't work. -

The "Register Rules" configuration has three options: "Register", "Substitute" and "Delete". -

    -
  • "Register" saves the Filter Rule.
  • -
  • "Substitute" modifies an existing registered Filter Rule.
  • -
  • "Delete" will remove a previously registered Filter Rule.
  • -
- -Example of Registering A Filter Rule: Create a Filter Rule that moves all mail with -the subject of "Sylpheed Manual" into the (previously created) mail folder "Sylpheed Manual Mail". -
    -
  • Step 1. Under the first Operator set's "Header" drop-down box, select "Subject".
  • -
  • Step 2. In the "Keyword" text box, type 'sylpheed manual' (case insensitive)
  • -
  • Step 3. Leave "Predicate" setting on default, "Contains". Leave second Operator set empty.
  • -
  • Step 4. Click "Destinations" radio button; select "Sylpheed Manual Mail" folder
  • -
  • Step 5. Click "Register"
  • -
  • Step 6. Click OK
  • -
- -Example of Substituting A Filter Rule: Modify a previously created Filter Rule that -moves all mail with the subject of "Sylpheed Manual" to sort mail not to the -mail folder "Sylpheed Manual Mail" but rather the mail folder "Sylpheed Questions" -
    -
  • Step 1. Under the first Operator set's Header drop-down box, select Subject.
  • -
  • Step 2. In the Keyword text box, type 'sylpheed manual' (case insensitive)
  • -
  • Step 3. Leave Predicate setting on default, "Contains". Leave second Operator set empty.
  • -
  • Step 4. Click "Destinations" radio button; select "Sylpheed Questions" folder
  • -
  • Step 5. Click "Substitute"
  • -
  • Step 6. Click OK
  • -
- -Example of Deleting a Filter Rule: Remove the previously created Filter Rule which refers to Subject:Sylpheed Questions. -
    -
  • Step 1. In the "Registered Rules" select box, highlight the filter entitled "Subject:Sylpheed Manual: :::Sylpheed Questions:1:1:m"
  • -
  • Step 2. Click the "Delete" Button
  • -
  • Step 3. Confirm the deletion by clicking "Yes" in the confirmation pop-up that asks, "Do you really want to delete this rule?
  • -
  • Step 4. Click "OK"
  • -
-

Registered Rule Order

- -

One caveat about all this: the order in which Filter Rules are created could adversely -affect your intended message sorting, and one needs to consider this when creating or updating Filter Rules. -

For example, a Filter Rule saying, "Move anything containing 'ABC' to Mailbox X" listed above another Filter Rule saying "Move anything containing 'ABCDEF' to Mailbox Y" will cause the latter of these filters not to process. -

Think about the way Sylpheed goes down its list: first, it would say.."Hmm, any messages with ABC? Ah, there's one! Move it." Then it would think, "Okay, any messages with ABCDEF?" To which the answer would be "no" - that ABCDEF was already filtered because it contained "ABC". -

Bummer. -

In order to avoid this, you must ensure that the more complex Filter Rule is processed first, by placing it higher than a similar, conflicting Filter Rule. -

To move a Registered Rule higher or lower within the Registered Rule box, select the rule you would like to move, and click on the "Up" or "Down" buttons. This will "move" the rule up or down, above or below a potentially conflicting Filter Rule. -

12.2 How to Filter Messages -

- -

Filtering messages can be done in several ways: -

    -
  • Sylpheed automatically filters incoming mail from POP and IMAP servers.
  • -
  • If you incorporate mail from a unix mailbox, then in the Common preferences (Configuration menu), you need to check the box called "Filter on incorporation". You find this box in the Receive tab in the space "Local spool".
  • -
  • You can also select the option "Filter messages" from the Summary menu.
  • -
-

-


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-13.html b/doc/manual/en/sylpheed-13.html deleted file mode 100644 index 8f5ef2108..000000000 --- a/doc/manual/en/sylpheed-13.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - Sylpheed User's Manual: Conversion of Other Mail Format into Sylpheed (MH Format) - - - - - -Next -Previous -Contents -
-

13. Conversion of Other Mail Format into Sylpheed (MH Format)

- -

13.1 Importing Messages of mbox Format -

- -

Sylpheed lets you import messages of the Mbox format from the File menu. First you create the mail folder where you want the messages to end up in, then you select File->import Mbox file. Use the browse function to select the Mbox file and the Sylpheed mail folder, and press Ok. And voila, there is your mail, imported. -

That was easy, wasn't it? -

13.2 Importing from Windows Mailers (Becky!, AL-Mail, Outlook Express4, etc.) -

- -

For import possibilities of the mail folders of these and more mail programs you can download the program mbx2mbox at sourceforge.net. The project is located at http://mbx2mbox.sourceforge.net. -

13.3 Importing dbx Format of Outlook Express 5 -

- -

For import possibilities of the mail folders of these and more mail programs you can download the program mbx2mbox at sourceforge.net. The project is located at http://mbx2mbox.sourceforge.net. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-14.html b/doc/manual/en/sylpheed-14.html deleted file mode 100644 index 089bee7d0..000000000 --- a/doc/manual/en/sylpheed-14.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - Sylpheed User's Manual: NetNews - - - - - -Next -Previous -Contents -
-

14. NetNews

- -

What is netnews? -

Netnews, also called Usenet, is a collection of "news servers" that contain a great deal of information. News, as it is called in short, can be about anything. About making your own wine, about old cars or radios. You name it, and there probably is a newsgroup about it. -

This is what we will set up here. Accessing newsgroups. Note that this is different from e-mails. You can almost compare it to a mailing list, but yet the concept is a bit different. -

14.1 Adding and Deleting Servers -

- -

-

Adding a news server

- -

To add a news server, go to the configuration menu and select the "create new account" option. -There you can name the news-account to anything of your liking. This is important, so you can identify the account later. -

In the BASIC tab, in the block 'personal information' you also can enter your own name, your e-mail address (so you can reply to news message by e-mail), optionally your organization (if you are organized at all). -

In the block 'Server information' you select the "News (NNTP)" protocol. Forget about "Inbox", that does not matter in this setup. Next you enter the name of the newsserver you want to connect to. You can get that name from your ISP, if you don't already have that. -

If you need to log into the news server, check the box next to "This server requires authentication", and then fill the fields for User ID and Password. -

Next step is to go to the Send tab. Since Receive is only there for e-mail, there is no need to do anything there. You can't even do anything in the Receive tab, for that matter. So, in Send you can select a few options: -

    -
  • If you want a date header field added to posts
  • -
  • If Sylpheed should generate a Message-ID
  • -
  • If you want to add user-defined headers
  • -
- -The next items only apply to when you reply to a news message through e-mail. You can set an automatic CC, BCC or Reply-To address here. In case your ISP requires SMTP authentication, you can select the checkbox here below. -

The next tab, Compose, allows you to select a default signature file. This will be added to each post to the newsgroups you do. -

Finally, in the "Advanced" tab, you can specify the port on which Sylpheed has to connect to the news server. The default is 119, and only in rare cases you should have to do something about that. -

Now you click "OK" and the account is created! You can verify this by checking the folder pane in Sylpheed. There you will see a new folder created with the name of the account you entered, and (news) behind it. -

-

Deleting a news-server.

- -

If you want to delete a news-account, right-click the news-folder and select "Remove news account". After confirming that you want this to be done, the account and all files related will be removed. -

14.2 Subscribing and Unsubscribing to NewsGroups -

- -

Okay. Here the real stuff begins. First you have to let Sylpheed load the list of news groups that is on the news system. Right-click the new NEWS folder and select "Subscribe to newsgroups". Sylpheed will tell you that the groups need to be downloaded, so sit back and wait a while. Of course, during time, new groups are added, and dead groups are removed. For this you can click the "refresh" button in the newsgroup dialog, so a new list is downloaded and you are up to date -

After a while the groups are loaded and displayed in a window. Now you can look up a group that is interesting, for example comp.os.linux.networking. Click the name once and then select OK. The group will be added to the news folder as a subfolder. When you now click the name of the new subfolder, Sylpheed will connect to the news server and download the headers (subject lines, in e-mail talk), to your computer. Some groups have -large- amounts of articles, so this may take a while!! -

-

14.3 Reading News -

- -

When the articles are displayed, in the summary view, you can click one of them to be downloaded so you can read it. This will usually go very quickly on discussion groups. -

If you want to respond to a message, press Alt-R (or press "Reply") and a message window will pop up, with the name of the newsgroup already in the "To" field. Depending on whether or not you selected quoting of the message, the original message will be in the body of the message already. Write away, then send, and soon the entire world will be able to read what you wrote on the subject. -

Starting a new message in a newsgroup is equally simple: press Alt-N (or click "New"), the name of the newsgroup is in the "To" field, and you can write your question or reply. -

A note about binary files

- -

In newsgroups you can download binary files. These are programs, images etc. Often these are posted as so called UUencoded files. Sylpheed will as upto version 0.5.1 not decode UUencoded files. You need to save these articles to disk as separate files, and use a separate decoder program, like juju, to decode the garble of text. A UUencoded file usually looks something like this: -

begin 666 sundown.jpg -

after which you will find nicely formatted blocks of characters that don't seem to mean anything. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-15.html b/doc/manual/en/sylpheed-15.html deleted file mode 100644 index 2bf44c7b0..000000000 --- a/doc/manual/en/sylpheed-15.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - Sylpheed User's Manual: Customization (General Setup) - - - - - -Next -Previous -Contents -
-

15. Customization (General Setup)

- -

This section has not been written yet. -

-

15.1 General Setup Window -

- -

This section has not been written yet. -

15.2 Description of Each Entry -

- -

This section has not been written yet. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-16.html b/doc/manual/en/sylpheed-16.html deleted file mode 100644 index c33a0b90d..000000000 --- a/doc/manual/en/sylpheed-16.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - Sylpheed User's Manual: Reference - - - - - -Next -Previous -Contents -
-

16. Reference

- -

In this section you will find a few pieces of information that might be handy in making Sylpheed more clear for you in respect to the used shortcut keys, and a layout of the format of the address book. -

16.1 Short-Cut Key List -

- -

Shortcuts to the File menu: -

    -
  • Alt-F: open FILE menu
  • -
  • Alt-P: print
  • -
  • Alt-W: close
  • -
  • Alt-Q: exit
  • -
- -Shortcuts to the Edit menu -
    -
  • Alt-E: open EDIT menu
  • -
  • Ctrl-C: copy
  • -
  • Ctrl-A: select all
  • -
  • Ctrl-S: search
  • -
- -Shortcuts to the View menu -
    -
  • Alt-V: open VIEW menu
  • -
- -Shortcuts to the Message menu -
    -
  • Alt-M: open MESSAGE menu
  • -
  • Alt-I: check mail for current account
  • -
  • Shift-Alt-I: Check mail for all accounts
  • -
  • Alt-N: compose new message
  • -
  • Alt-R: reply to message
  • -
  • Ctrl-Alt-R: reply to sender (contrary to reply to e.g. mailing list)
  • -
  • Shift-Alt-R: reply to all (includes all addresses in To: and Cc:)
  • -
  • Ctrl-F: forward message
  • -
  • Shift-Ctrl-F: forward message as attachment
  • -
  • Alt-O: move message
  • -
  • Alt-D: delete message
  • -
  • Shift-Ctrl-N: open message in new window
  • -
  • Ctrl-U: view message source
  • -
  • Ctrl-H: show all message headers
  • -
- -Shortcuts to the Summary menu -
    -
  • Alt-S: open SUMMARY menu
  • -
  • Alt-X: execute (pending commands, only useful when commands are not executed immediately)
  • -
  • Alt-U: update view
  • -
  • Alt-G: go to other folder
  • -
  • Ctrl-T: thread view
  • -
  • Shift-Ctrl-T: unthread view
  • -
- -Shortcuts to the Tool menu: -
    -
  • Alt-T: open tool menu
  • -
  • Alt-A: open addressbook
  • -
  • Alt-L: open logfile
  • -
-

16.2 Data Format of Address Book -

- -

The addressbook is located in  /.sylpheed. It is named addressbook.xml. -The general format of the addressbook is: -

< addressbook > -

< common_address > -

< group name="Common addresses" > -

< item > -

< name > Paul < /name > -

< address > paul@nlpagan.net < /address > -

< remarks > Writes Sylph. manual < /remarks > -

< /item > -

< /group > -

< /common_address > -

< /addressbook > -

-


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-17.html b/doc/manual/en/sylpheed-17.html deleted file mode 100644 index d8ec02d87..000000000 --- a/doc/manual/en/sylpheed-17.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Sylpheed User's Manual: FAQ - - - - - -Next -Previous -Contents -
-

17. FAQ

- -

You can find the latest, updated, FAQ (Frequently Asked Questions list) at http://nlpagan.net/sylpheedfaq.htm. -

-

17.1 Unread News Messages -

- -

17.2 Using MSN Mail Accounts -

- -

17.3 Changing Fonts on Menu, etc. -

- -

17.4 Changing Key Binding of Short-Cut Key -

- -
-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-18.html b/doc/manual/en/sylpheed-18.html deleted file mode 100644 index bdf2ce42c..000000000 --- a/doc/manual/en/sylpheed-18.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - Sylpheed User's Manual: Information - - - - - -Next -Previous -Contents -
-

18. Information

- -

18.1 Websites on Sylpheed -

- -

This section has not been written yet. -

18.2 Mailing Lists -

- -

This section has not been written yet. -

18.3 Anonymous CVS -

- -

This section has not been written yet. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-19.html b/doc/manual/en/sylpheed-19.html deleted file mode 100644 index 83616d03e..000000000 --- a/doc/manual/en/sylpheed-19.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - Sylpheed User's Manual: About This Document - - - - -Next -Previous -Contents -
-

19. About This Document

- -

19.1 Copyright Notice -

- -

This section has not been written yet. -

19.2 GNU General Public License -

- -

This section has not been written yet. -

19.3 Where to Get the Latest Version of This Document -

- -

You can find the latest version of this document on the sort of official Sylpheed manual pages at http://nlpagan.net/sylman/index.html. -

Here the manual is uploaded as HTML pages. From this page you can download these pages as a tar.gz file for offline browsing on your own computer. -

You can also tap into the CVS repository at http://sourceforge.net and look for the project "sylpheeddoc". The document is stored there as an SGML file, you will need the SGML tools for this! -

19.4 Ending Remark -

- -

I wish to thank everyone involved in the Sylpheed project. -

Hiroyuki Yamamoto and all the other developers for the fabulous program they have created. -

Francois Barriere who helped me become friends with the CVS system. -

All the help I received from everyone on the Sylpheed mailing list while writing the FAQ and this manual. -

Nick Selby, for offering his well appreciated assistance in writing along in this manual. -

And Linus Torvald, who got us a great operating system! ;-) -

19.5 Change Log -

- -

This section has not been written yet. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-2.html b/doc/manual/en/sylpheed-2.html deleted file mode 100644 index b57e84480..000000000 --- a/doc/manual/en/sylpheed-2.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - Sylpheed User's Manual: Quick-guide to mail setup. - - - - - -Next -Previous -Contents -
-

2. Quick-guide to mail setup.

- -

2.1 Setup for reading your Unix mailbox in a hurry -

- -

In the configuration menu, select "Create new account" -

In the "Basic" tab, enter the relevant data. You name the account, enter your name and e-mail address, etc. You can select this account to be the default account ("Usually used"). To select your local unix mailbox, in the Protocol box you select "None (local)". -

When you select this option, the "Server for receiving" is greyed out, since this is not relevant. You can enter the server to send (SMTP) in this tab also. -

The "Receive" tab is not used in this setup, since you are not polling a server, your mail is delivered to you. -

In the "Send" tab you can set up some more settings. -

In the "Compose" tab you can define your signature file. -

In the "Advanced" tab you can edit the portnumbers for the servers you will be using. This normally will need no change. -

This is basically everything you need to start using Sylpheed for local mailboxes. You can press Alt-I or select "Message -> receive new mail" and see if there is new mail! -

2.2 Setup for reading POP3 mail in a hurry -

- -

In the configuration menu, select "Create new account" -

In the "Basic" tab, enter the relevant data. You name the account, enter your name and e-mail address, etc. You can select this account to be the default account ("Usually used"). To check your POP3 mail, in the Protocol box you select "POP3 (normal)". -

Enter the server information for "Server for receiving". You can then enter the server to send (SMTP) in this tab. -

In the "Receive" tab you can define some selections or preferences that you want to use. -

In the "Send" tab you can set up some more settings. -

In the "Compose" tab you can define your signature file. -

In the "Advanced" tab you can edit the portnumbers for the servers you will be using. This normally will need no change. -

This is basically everything you need to start using Sylpheed for POP3 mailsystems. You can press Alt-I or select "Message -> receive new mail" and see if there is new mail! -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-20.html b/doc/manual/en/sylpheed-20.html deleted file mode 100644 index f6ff2714e..000000000 --- a/doc/manual/en/sylpheed-20.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - Sylpheed User's Manual: About This Document - - - - -Next -Previous -Contents -
-

20. About This Document

- -

20.1 Copyright Notice -

- -

This section has not been written yet. -

20.2 GNU General Public License -

- -

This section has not been written yet. -

20.3 Where to Get the Latest Version of This Document -

- -

You can find the latest version of this document on the sort of official Sylpheed manual pages at http://nlpagan.net/sylman/index.html. -

Here the manual is uploaded as HTML pages. From this page you can download these pages as a tar.gz file for offline browsing on your own computer. -

You can also tap into the CVS repository at http://sourceforge.net and look for the project "sylpheeddoc". The document is stored there as an SGML file, you will need the SGML tools for this! -

20.4 Ending Remark -

- -

I wish to thank everyone involved in the Sylpheed project. -

Hiroyuki Yamamoto and all the other developers for the fabulous program they have created. -

Francois Barriere who helped me become friends with the CVS system. -

All the help I received from everyone on the Sylpheed mailing list while writing the FAQ and this manual. -

Nick Selby, for offering his well appreciated assistance in writing along in this manual. -

And Linus Torvald, who got us a great operating system! ;-) -

20.5 Change Log -

- -

This section has not been written yet. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-21.html b/doc/manual/en/sylpheed-21.html deleted file mode 100644 index 9c80445c9..000000000 --- a/doc/manual/en/sylpheed-21.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - Sylpheed User's Manual: Quick-guide for news setup - - - - -Next -Previous -Contents -
-

21. Quick-guide for news setup

- -

-

21.1 Getting news in a hurry. -

- -

-

In the configuration menu, select "Create new account" -

In the "Basic" tab, enter the relevant data. You name the account, enter your name and e-mail address, etc. To connect to news, in the Protocol box you select "News (NNTP)". -

Enter the newsserver information. -

Skip the "Receive" tab. -

In the "Send" tab you can set up some more settings. -

In the "Compose" tab you can define your signature file. -

In the "Advanced" tab you can edit the portnumbers for the servers you will be using. This normally will need no change. -

Close the dialogs, right click the new News folder in the folder pane and select "Subscribe to newsgroups". If not done already, a list of groups will be downloaded from the server. From there you will find your way, so good luck! -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-3.html b/doc/manual/en/sylpheed-3.html deleted file mode 100644 index f980208bd..000000000 --- a/doc/manual/en/sylpheed-3.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - Sylpheed User's Manual: Quick-guide for news setup - - - - - -Next -Previous -Contents -
-

3. Quick-guide for news setup

- -

-

3.1 Getting news in a hurry. -

- -

-

In the configuration menu, select "Create new account" -

In the "Basic" tab, enter the relevant data. You name the account, enter your name and e-mail address, etc. To connect to news, in the Protocol box you select "News (NNTP)". -

Enter the newsserver information. -

Skip the "Receive" tab. -

In the "Send" tab you can set up some more settings. -

In the "Compose" tab you can define your signature file. -

In the "Advanced" tab you can edit the portnumbers for the servers you will be using. This normally will need no change. -

Close the dialogs, right click the new News folder in the folder pane and select "Subscribe to newsgroups". If not done already, a list of groups will be downloaded from the server. From there you will find your way, so good luck! -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-4.html b/doc/manual/en/sylpheed-4.html deleted file mode 100644 index 1bbc99e95..000000000 --- a/doc/manual/en/sylpheed-4.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - Sylpheed User's Manual: Installation. - - - - - -Next -Previous -Contents -
-

4. Installation.

- -

4.1 Required environment -

- -

To succesfully compile Sylpheed, you need at least: -

    -
  • Any POSIX compliant UNIX or similar OS eg. Linux, FreeBSD, Solaris
  • -
  • GTK+ 1.2.6 or later
  • -
  • A recent ANSI C compiler (gcc 2.7.2.3 should also work) Note: it is reported that Sun C will not compile Sylpheed.
  • -
- -Optionally you need: -
    -
  • Imlib or gdk-pixbuf (for built-in image view)
  • -
  • libcompface (for X-Face)
  • -
  • libjconv (for I18N)
  • -
  • GPGME (for GnuPG)
  • -
  • the equivalent of GTK+-devel and Xfree86-devel. (Otherwise ./configure will fail.)
  • -
- -Notice: Sylpheed may be unstable depending on the environment. Please use the newest version of libraries if possible. -

4.2 Environments known as valid for Sylpheed -

- -

-

    -
  • Debian GNU/Linux unstable (sid) (glibc 2.2) (development environment)
  • -
  • Debian GNU/Linux 2.2 (potato) (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) (Intel, PPC)
  • -
  • Vine Linux 2.1
  • -
  • Laser5 Linux 6.0 (glibc 2.1.x) , 6.2, 6.4
  • -
  • TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs)
  • -
  • TurboLinux 6.0 (glibc 2.1.2)
  • -
  • Miracle Linux Standard Edition Version1.0
  • -
  • Miracle Linux for PostgreSQL Version1.0
  • -
  • Miracle Linux for Samba Version1.0
  • -
  • RedHat Linux 5.2 (glibc 2.0.7)
  • -
  • RedHat Linux 6.0
  • -
  • RedHat Linux 6.1 + Helix GNOME (glibc 2.1.x)
  • -
  • RedHat Linux 6.2 / 6.2J (glibc 2.1.x)
  • -
  • RedHat Linux 7.0 / 7.0J
  • -
  • RedHat Linux 7.1
  • -
  • LinuxPPC2000 + Yukikaze(Japanization kit)
  • -
  • Linux2000G (Intel, PowerPC)
  • -
  • HOLON Linux 2.0 (Intel / PPC)
  • -
  • Linux for PPC Japanese Edition 2.0 and 3.0 (glibc 2.1.x)
  • -
  • Linux MLD4
  • -
  • Linux MLD5
  • -
  • Plamo Linux 2.0
  • -
  • Slackware 7.1
  • -
  • Linux Mandrake 7.0 through 8.0
  • -
  • SuSE Linux 6.3 (glibc 2.1.2)
  • -
  • SuSE Linux 6.4, 7.0, 7.1
  • -
  • OpenLinux 2.3 (glibc 2.1.1 -> 2.1.3)
  • -
  • Caldera OpenDesktop 2.4
  • -
  • Conectiva Linux 4.0 and 5.0
  • -
  • Vector Linux 1.5
  • -
  • FreeBSD releases 3.2, 3.4, 4.0, 4.1, 4.2 and 5.0
  • -
  • NetBSD 1.4.2
  • -
  • NetBSD 1.5 + XPG4DL
  • -
  • OpenBSD 2.7
  • -
  • OpenBSD 2.8 (i386)
  • -
  • BSD/OS 4.0.1
  • -
  • Solaris 2.5, 2.5.2., 2.6, 7, 8
  • -
  • IRIX 6.3 and 6.5, 6.5.8m
  • -
  • HP-UX 10.20
  • -
  • Mac OS X (Darwin 1.3) + Xtools (has locale problem)
  • -
  • Windows (cygwin + GTK+ for win32) (unstable)
  • -
-

4.3 Nuts and bolts of installation -

- -

-

    -
  • Untar the sourcefiles to a new directory
  • -
  • tar -xvfz sylpheed-.tar.gz (for tar.gz)
  • -
  • tar -xvfI sylpheed-.tar.bz2 (for tar.bz2)
  • -
  • cd to the new sylpheed- directory
  • -
  • Run ./configure to check your environment and create the installation make files
  • -
  • Run the 'make' program which will compile the sources. Do not proceed with this step if there are fatal errors in the previous step. Fatal errors indicate that things are missing in order to compile Sylpheed properly.
  • -
-

If the make process has completed, run "make install" (as root), to install the program and the supportfiles -

4.4 Installation on Linux using RPM -

- -

As root, run the "rpm -ivh " command on the RPM file you downloaded. As soon as this process is complete you can run Sylpheed as user. -

4.5 Installation on Debian Linux -

- -

With an internet connection : -

apt-get install sylpheed (to install it with a internet connection) -

Without internet connection, fetch the debian package for example on http://packages.debian.org/unstable/mail/sylpheed.html -

dpkg -i sylpheedx.x.x-1i386.deb -

dpkg --install sylpheedx.x.x-1i386.deb -

4.6 Installation on FreeBSD -

- -

using the /stand/sysinstall tool (it is a menu-based interface) : -

run "/stand/sysinstall" as root -

in the main menu choose "Configure" -> "Packages" -> "mail", then "sylpheed" then, back to the "Packages" list, choose "Install" -

Using the ports -

Get the sylpheed port on : -

ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-4.3-release/mail -

then, as root: pkg-add sylpheed-0.x.x.tgz -

using the ports with compiling: -

first, update your port, fetch it on http://www.freebsd.org/ports/mail.html -

cd /usr/ports/mail/sylpheed -

make -

If it succeeds, type "make install" -

In case it fails, fetch the required package if necessary -(on the same page), put the package file in /usr/ports/distfiles/ -then : -

    -
  • cd /usr/ports/mail/sylpheed
  • -
  • make
  • -
  • make install
  • -
-

Need a more up-to-date version ? -

Just use the Unix standard method (see "Nuts and bolts of installation") -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-5.html b/doc/manual/en/sylpheed-5.html deleted file mode 100644 index 97d5f3f33..000000000 --- a/doc/manual/en/sylpheed-5.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - Sylpheed User's Manual: Starting and quitting Sylpheed - - - - - -Next -Previous -Contents -
-

5. Starting and quitting Sylpheed

- -

5.1 Starting Sylpheed -

- -

Starting Sylpheed can be done by typing "sylpheed" on a prompt in a terminal and pressing Enter. You can also add Sylpheed to a menu in KDE or Gnome, or create a shortcut to it on the desktop, if your window manager allows that. -

When you first start Sylpheed, the program will ask you where you want to store the mails that you downloaded. You can accept the default ($HOME/Mail) or set up your own mail folder. -

Sylpheed will then load with it's default settings. The way to change these are written about further on in this manual. -

5.2 Quitting Sylpheed -

- -

Ending Sylpheed can be done in several ways: -

    -
  • Select "quit" from the File menu
  • -
  • Press Ctrl-Q
  • -
  • Click the "program close" button in the titlebar.
  • -
-
-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-6.html b/doc/manual/en/sylpheed-6.html deleted file mode 100644 index 18c88295f..000000000 --- a/doc/manual/en/sylpheed-6.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - Sylpheed User's Manual: Going through the parts of Sylpheed - - - - - -Next -Previous -Contents -
-

6. Going through the parts of Sylpheed

- -

6.1 The menu options of Sylpheed. -

- -

The menu in Sylpheed is the primary entry to all the things you can do with Sylpheed. The menu structure gives you following options: -

File menu

- -

-

    -
  • Add mailbox: this option lets you add a new MH mail-directory. It will generate IN, OUT, QUEUE, DRAFT and TRASH mailfolders inside the new mailbox.
  • -
  • Update folder tree: rescans the entire tree of existing mailboxes to reflect the correct state (usually won't be necessary).
  • -
  • Folder: lets you add, rename or delete a mailfolder.
  • -
  • Import mbox file...: lets you import an mbox file (like created by Pine) into an MH mailbox.
  • -
  • Export to mbox file: lets you export an MH mailbox to an mbox file.
  • -
  • Empty trash: obviously, this will empty the trash folder.
  • -
  • Save as: lets you save the selected e-mail to a plain textfile on disk.
  • -
  • Print: lets you print the selected e-mail to a printer.
  • -
  • Close: ends Sylpheed.
  • -
  • Exit: also ends Sylpheed.
  • -
-

Edit menu

- -

-

    -
  • copy: lets you copy the selected text to a buffer, from where you can paste it into a different place. Shortcut: Ctrl-C
  • -
  • select all: selects all the text in the current window. Shortcut: Ctrl-A
  • -
  • search: searches the current window for text you enter. Shortcut: Ctrl-S
  • -
-

View menu

- -

The view menu allows you to change the way that Sylpheed appears. You can set different windows separately (folder view, messages etc.), enable or disable the statusbar and so on. -

-

    -
  • Folder tree: not implemented yet
  • -
  • Message view: not implemented yet
  • -
  • Toolbar: sets how you want to see the toolbar. Icons and text, or one of these.
  • -
  • Status bar: show it or hide it.
  • -
  • Separate folder tree: selects between having the folder tree attached to the main window, or floating separately.
  • -
  • Separate message view: selects between having the selected message in the summary pane attached to the main window, or floating separately.
  • -
  • Code set: allows you to select what codeset you want to use for your e-mails.
  • -
-

Message menu

- -

Here you find the following options: -

    -
  • Receive new mail: this will collect all new mail for your default mail-identity.
  • -
  • Receive from all accounts: Sylpheed will poll all defined mail-identities for new mail.
  • -
  • Send queued messages: all the messages that you put into the "Queue" folder will now be sent off.
  • -
  • Compose new message: allows you to write a new e-mail message.
  • -
  • Reply: an e-mail message will be created with the sender of the selected message in the summary pane as recipient. Depending on the settings, your signature will be added to the mail, and the original mail text will be quoted.
  • -
  • Reply to all: as Reply, but the recipients will be all e-mail addresses in the original messages (including the ones in the cc: part).
  • -
  • Forward: a message will be created with the original message in the summary pane as text. You can then enter a recipient e-mail address, edit the text if you want, and send it.
  • -
  • Forward as attachment: as Forward, but the message text will sent along as a separate textfile.
  • -
  • Move: lets you move the message to a different folder. You can select the destination folder from a browse-window.
  • -
  • Copy: as Move, only that the message is copied to the new folder, instead of moved.
  • -
  • Delete: lets you delete the message that is selected in the summary pane.
  • -
  • Mark: Gives a submenu: Mark/Unmark/Mark as read/Unmark as read. When you mark messages, you can do a specific action (e.g. move, delete) on all of the marked messages. You can unmark messages that you mistakenly marked. The other options do as they say, they mark or unmark a message as read.
  • -
  • Open in new window: This will open the message in the summary pane into a new window, allowing you to see more text at once.You can close this window by clicking the close button or pressing Escape.
  • -
  • View source: opens a new window with the message in it, including all message headers. You can close this window by clicking the close button or pressing Escape.
  • -
  • Show all header: opens a new window with only the message headers. You can close this window by clicking the close button or pressing Escape.
  • -
  • Reedit: this option is only available when you select a message in the Draft folder. You can then edit the draft message.
  • -
- -A note on functions like Move, Copy and Delete: if you did not specify to execute the commands immediately (in the configuration), you will have to select the "Execute" command. This is a button in the toolbar, and can also be found in the Summary menu. -

Summary menu

- -

In the Summary menu you can perform all kinds of functions that are related to handling messages. The actions are done on the message summary pane. -

    -
  • Delete duplicate messages: This will remove messages from the active folder that were sent twice to you. For example you received a message directly and through a mailing list at the same time.
  • -
  • Filter messages: you can use this option if you want to filter existing messages through a new filter you set up.
  • -
  • Execute: this option is needed if you did not set "execute immediately" in the preferences. "Execute" will then do the actions you want (e.g. Copy, Move, Filter etc.)
  • -
  • Update: refreshes the message pane view to reflect any changes.
  • -
  • Prev message: selects the previous message. Pine ex-users can also use "p".
  • -
  • Next message: select the next message. Pine ex-users can also use "n".
  • -
  • Next unread message: skips to the next unread message in the folder.
  • -
  • Go to other folder: allows you to open a new mail folder. You can use a browse window for this.
  • -
  • Sort: this option will allow you to sort the mail view in several ways. You can sort by date, by subject, by number (MH's internal message number is meant here) etc. Note that "Attract by subject" is different from sorting by subject. Attract by subject overlooks the "Re:" references in the subject. In that way messages are sorted in a more logical way.
  • -
  • Thread view: messages are linked together in a tree view, on subject.
  • -
  • Unthread view: undos the previous item.
  • -
  • Set display item: shows a dialog box in which you can check and uncheck the items you want to see in the summary pane.
  • -
-

Tool menu

- -

In the Tool menu you will find 2 options (upto version 0.4.66). It is the address book and the log window. -

In the address book, as you may expect, you can store the e-mail addresses that you want to save. You can create folders within the address book, to keep addresses together. -

In the log window, you can see what Sylpheed is doing. Keeping track of things in that way is very good when you suspect there is something wrong. You can paste the info of the log window into an e-mail and send it to the developer or the mailing list. -

Configuration menu

- -

In the Configuration menu, clearly, you can set up Sylpheed the way you want it to work and react. -

    -
  • Common preferences: in this option you will be presented a dialog in which you can select a number of tabs. Each tab represents a specific set of settings in Sylpheed. In the next chapter, these dialog options are explained in more detail. -
  • -
  • Filtering: this option shows you a dialog in which you can set up the filtering rules that you want Sylpheed to process on receiving new e-mails. You first specify on which part(s) of the e-mail Sylpheed has to check, and then you tell Sylpheed what to do. You can move the message to a different directory (including trash to get rid of spam mail). Selecting the destination folder is possible through a browser window that comes up when you press "Select..."

    You can choose not to receive the e-mail. Note that this will leave the message on the mailserver of your provider, the message will not be removed! -

    When you press the "Register" button, the filter rule is added to the list of rules. Do you select "Substitute", then the selected rule is replaced by the information of the setting entered. "Delete" in the end will delete the selected filtering rule. -

    Please note that you can set up 2 selections for a rule, which can be "OR'd" or "AND'd". OR means that one of the 2 selections will have to match for the rule to be executed. AND means that both selections have to match before an action is performed. -

    To the right of the selection rules you see buttons called UP and DOWN. You can move rules up and down in the list. This will often trigger different behaviour in the selections, so consider the order in which you set the rules. -

  • -
  • Preferences per account: here you can set the specifics for the account you are currently using. Should mail be deleted after fetching, what is the server it comes from, etc. Basically it is the same dialog form as shown in setting up a new account.
  • -
  • Create new account: here you name the account (each account has a recognizable name), you set up your name and e-mail address etc. You set up the type of server you access (POP4, IMAP4, local mailbox, newsserver) and where the downloaded messages have to go (default folder is the inbox). In the RECEIVE tab you select or unselect options, in SEND you can set up how to send your messages. In COMPOSE you can point to a specific signature file, and in ADVANCED you can set up alternate ports for the server, if these exist. (Do not mess with these unless you are sure you have to!!)
  • -
  • Edit accounts: here you can select one of the accounts you created, from a list, and edit the information about them. Note that you cannot edit an account for which you are writing a message at the same time. This to ensure data integrity.
  • -
  • Change current account: here you can select what account you want to use, to write a message.
  • -
-

Help menu

- -

This menu lets you look at the (japanese for now) manual, and you can also see the "about" info, who wrote Sylpheed. -

6.2 Context menu -

- -

You can pull up context menus (through clicking button2) for the folder tree and the summary pane. (windows users: button2 is the right mouse button.) -

In the folder view you can add, rename and remove folders through the context menu. -

In the message summary you can do a host of things from the context menu, like viewing message headers, opening a message in a separate window (also possible by double clicking on a message) etc. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-7.html b/doc/manual/en/sylpheed-7.html deleted file mode 100644 index f2591f088..000000000 --- a/doc/manual/en/sylpheed-7.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - Sylpheed User's Manual: Dialogs and views - - - - - -Next -Previous -Contents -
-

7. Dialogs and views

- -

-

7.1 Folder view -

- -

The folder view shows you all the mail folders that you have created, in a tree-like structure. If you want to see the headers of the messages in a specific folder, just click the name of the folder once, and in the summary view you can see the messages in the selected mail folder. -

When you see a + sign in front of a folder name, that means the folder branch of that part of the tree is 'collapsed'. You can expand that part by clicking the + sign. In that same manner you can also collapse the - sign in front of an expanded branch of the folder tree. -

Special folders: -

Draft: here you store messages that you want to send out more often, or you want to work on some more. Using the 'reedit' option from the message menu, you can edit the message further. -

Trash: in here all your deleted messages go. Depending on the common preferences setting, this box is or is not emptied when you end Sylpheed. -

7.2 Summary view -

- -

The summary pane can show you many things. You can select what you want to see from the Summary menu, selecting the option "Set display item". A list of all options is: -

    -
  • Mark: shows if the message is marked.
  • -
  • Unread: shows if the message is read or not
  • -
  • MIME: shows MIME attachments
  • -
  • Number: shows the MH number of the message
  • -
  • Size: the size of the entire message including attachments
  • -
  • Date: the date of sending by the sender
  • -
  • From: who sent the message
  • -
  • Subject: what the message is about
  • -
- -You can sort the summary view in many ways, by clicking the button that is above the column. Click once to sort going up (a-z), click once more to sort going down (z-a). -

If you think the size of a column is not right, you can adjust that by placing the mouse cursor next to the button of the column you want to adjust, press mouebutton1 (left button) and drag the column to the width you want it to have. -

Select a message by clicking on it with the mouse. Once the summary pane has the focus of the program, you can also move up and down in the list through the cursor keys, or pressing "p"(revious) and "n"(ext) as in Pine. -

7.3 Message view -

- -

In the message view you can read the message that you selected in the summary pane. If you entered the summary pane without selecting a message, the message view will be empty. At the top of the message view some info is presented about the message you are reading, as well as some statistics on the selected folder. -

You can scroll up and down in the message by using the arrow keys (after clicking inside the message), or by using the scrollbar. -

7.4 Common preferences -

- -

The Common Preferences, found in the Configuration menu, shows you the following tabs: -

Receive tab

- -

In here you can set up how to receive messages. -

    -
  • You can define a special program to pick up messages from the default unix mailbox. Usually this is not used, but you can use it. Actually, this information may be wrong. If someone knows better, please let me know.
  • -
  • Local spool lets you define where your local mailbox is located. You can also tell Sylpheed whether or not to filter the incoming messages from that mail spool file.
  • -
  • Autocheck new mail. When you check this option, Sylpheed will check if there is new mail on the set interval.
  • -
  • Check new mail on startup means that Sylpheed will immediately look for new mail on all the selected accounts when it loads.
  • -
  • In the news section you can specify how many articles should be downloaded when opening a newsgroup.
  • -
-

7.5 Setting up an account/changing an account -

- -

In order to set up an account in Sylpheed, in the configuration menu you select "Create new account". If you want to change the settings of an existing account, you select the "Edit accounts..." option from the configuration menu, and there you select the account you want to change. After that you press "edit". Then a dialog appears in which you can enter or update the following areas: -

-

Basic tab

- -

In the "Basic" tab you name the account. This is to make identifying the account easier. -

Choose a name that tells something about the account, like the name of the ISP, mailbox or news-server you are setting up. You can select this account to be the default account ("Usually used"). -

Enter your name and e-mail address, and if you have one, the organization that you use Sylpheed for. -In the Protocol box you select the type of service that this account will be using. The flavors you can choose are: POP3 normal, POP3 APOP auth, IMAP4, NNTP news or None (local). -In the "inbox" field you can enter the mail folder where the mail for this account will be stored in. This option is disabled when you set up an NNTP News account. -

For POP3 and IMAP services you can then specify the server where your mail is stored. Details about this name, and also the name that goes into the field for "SMPT server (send)" should be given to you by your ISP. -

For a local unix mailbox, the "Server for receiving" is disabled, since the mail will be received for you. -

The fields for User ID and Password will also be disabled for accounts that do no deal with POP3 or IMAP services. Otherwise you can enter the login name and password for the e-mail server with your ISP here. Usually these are the same as your login name and password to access the dial-in service, but this is not standard. If in doubt, contact the helpdesk of your ISP. -

-

Receive tab

- -

-

The "Receive" tab is only used for POP3 accounts. Here you specify if the mails that were successfully retrieved should be removed from the server. You can also tell Sylpheed to get all the messages there, not only the ones you already received (in case you leave your messages on the server). The third option enables this account to be included when mail is checked for "all accounts" (see the message menu for this), and if the incoming messages should immediately be filtered when received. -

Send tab

- -

In the "Send" tab you can set up some more settings. -

Compose tab

- -

In the "Compose" tab you can define your signature file. -

Advanced tab

- -

In the "Advanced" tab you can edit the portnumbers for the servers you will be using. This normally will need no change. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-8.html b/doc/manual/en/sylpheed-8.html deleted file mode 100644 index 40c8dcad6..000000000 --- a/doc/manual/en/sylpheed-8.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - Sylpheed User's Manual: Viewing messages - - - - - -Next -Previous -Contents -
-

8. Viewing messages

- -

8.1 Reading a message -

- -

Reading a message is quite simple. If you have the message pane within view, all you need to do is once click the message you want to read and it already appears in the message view. When you double-click the message, a separate window will open, showing you the message. You can close the opened window by pressing ESCape or clicking the 'close' button. -

8.2 Viewing Multipart MIME (Attached Files) -

- -

When a message contains an attachment, you can have several options to view the information in that file. Sylpheed can be able, when compiled against the proper libraries, to display images "inline". This means you can click the name of the image and you can see it in the lower part of the message screen. -

How do you see an attachment is in an e- mail? -

This shows through an extra section that appears between the summary pane and the message view. In it you can see the separate parts of the e-mail. Sometimes you can't view the contents of an attachment directly. Then you can rightclick the name of the file and select "OPEN" from the appearing menu. If this does not work, it means that the extension of the file is not recognized through the directives in the mailcap file. In that case you can always use the "Save as..." option in the popup menu, save the file to disk and open the file with the proper program. -

8.3 Extending and Closing Threads -

- -

Sylpheed offers the option to view messages in threads. Threads are no more than series of e-mails in a logical sequence. Suppose 15 people sent you a mail called "Re: bananas". You can't easily tell which one is the first and which one is the last in that sequence. -

By activating threads (summary menu), Sylpheed will attempt to show the sequence of mails as they were written/sent from first to last. -

To undo the threads view, you simply select the same menu option again and the e-mails are displayed in standard order again. -

8.4 Message Operations (Moving, Deleting, etc.) -

- -

Sylpheed gives you many ways to manage your messages. You can move them to new mailboxes, or delete them. Through the message menu (see that section for more details) plenty of options are available to do with your e-mails what you want done. The advantage of moving messages to different mailboxes (also see Filtering for that, as described in the Configuration menu section) is that you keep an overview of your inbox. Suppose you are collecting e-mails in there of 8 different subjects. And you are looking for a specific one on a specific subject. That will give you a lot of work, trying to find the right message. Creating a new mail folder for each subject, and moving the messages to that new one, lifts a lot of work afterwards from your hands. -

8.5 URL in a Message -

- -

At times you may find a URL in a message. A URL is a link to a website. Usually it is shown in the form "http://www.somewhere.something". -

If you want to visit that website, you only need to double-click the URL, and the default webbrowser you set up (usually Netscape) will activate and load the website. -

In the configuration options, Sylpheed has a color setting specific for URL's so you can spot a URL easily. -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed-9.html b/doc/manual/en/sylpheed-9.html deleted file mode 100644 index 4d4155451..000000000 --- a/doc/manual/en/sylpheed-9.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - Sylpheed User's Manual: Recieving Messages - - - - - -Next -Previous -Contents -
-

9. Recieving Messages

- -

9.1 Using POP Reception Function in Sylpheed -

- -

Receiving messages from a POP server is very easy, once you set up Sylpheed the proper way. You can refer to the section "Setting up an account" on how to do this. -

Once you are connected to the internet, or by another network that gives you access to the POP server, simply press the "Get new mail" button (or press Alt-I) and Sylpheed will connect to the server to fetch your new mail. Once this is retrieved, any filters you may have set up will be executed and then the folder pane will show you, marked in bold, which folder/mailbox contains new messages. -

9.2 Using Other Programs such as fetchmail -

- -

Although it is not within the scope of this manual, a bit of information on fetchmail or getmail. -

You need to have either of these programs installed, and configured correctly. See the man pages/README files of the appropriate program on doing this. -

After setting the program up, you can invoke it, either by hand or through CRON, to get your mail. The mail will usually be downloaded into /var/spool/mail/your_user_id. You can then tell Sylpheed, through an account that looks in your local unix mailbox, to get mail from there. For this you press the "Get mail" button, or press "Alt-I". -


-Next -Previous -Contents - - diff --git a/doc/manual/en/sylpheed.html b/doc/manual/en/sylpheed.html deleted file mode 100644 index 471eb7184..000000000 --- a/doc/manual/en/sylpheed.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Sylpheed User's Manual - - - - - -Next -Previous -Contents -
-

Sylpheed User's Manual

- - -

Paul Kater (paul@nlpagan.net) -

-


- Sylpheed User's Manual for Sylpheed-0.5.1 - -
-

-

1. What is Sylpheed?

- - -

-

2. Quick-guide to mail setup.

- - -

-

3. Quick-guide for news setup

- - -

-

4. Installation.

- - -

-

5. Starting and quitting Sylpheed

- - -

-

6. Going through the parts of Sylpheed

- - -

-

7. Dialogs and views

- - -

-

8. Viewing messages

- - -

-

9. Recieving Messages

- - -

-

10. Composing Messages

- - -

-

11. Address Book

- - -

-

12. Filtering Messages

- - -

-

13. Conversion of Other Mail Format into Sylpheed (MH Format)

- - -

-

14. NetNews

- - -

-

15. Customization (General Setup)

- - -

-

16. Reference

- - -

-

17. FAQ

- - -

-

18. Information

- - -

-

19. About This Document

- - -
-Next -Previous -Contents - - diff --git a/doc/manual/ja/.cvsignore b/doc/manual/ja/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/doc/manual/ja/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/doc/manual/ja/Makefile.am b/doc/manual/ja/Makefile.am deleted file mode 100644 index 1a7a6040f..000000000 --- a/doc/manual/ja/Makefile.am +++ /dev/null @@ -1,26 +0,0 @@ -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/sylpheed-1.html b/doc/manual/ja/sylpheed-1.html deleted file mode 100644 index 981e1c8e6..000000000 --- a/doc/manual/ja/sylpheed-1.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - 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 deleted file mode 100644 index aa6c311d6..000000000 --- a/doc/manual/ja/sylpheed-10.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - 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 deleted file mode 100644 index 1074f0c97..000000000 --- a/doc/manual/ja/sylpheed-11.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - 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 deleted file mode 100644 index f71b02c42..000000000 --- a/doc/manual/ja/sylpheed-12.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - 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 deleted file mode 100644 index 1fdf09296..000000000 --- a/doc/manual/ja/sylpheed-13.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - 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 deleted file mode 100644 index eb5f96de1..000000000 --- a/doc/manual/ja/sylpheed-14.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - 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 deleted file mode 100644 index c32f33d3c..000000000 --- a/doc/manual/ja/sylpheed-15.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - 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 deleted file mode 100644 index 9e001e466..000000000 --- a/doc/manual/ja/sylpheed-16.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - 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 deleted file mode 100644 index 96f5a77b9..000000000 --- a/doc/manual/ja/sylpheed-17.html +++ /dev/null @@ -1,444 +0,0 @@ - - - - - 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 deleted file mode 100644 index d52bf4f32..000000000 --- a/doc/manual/ja/sylpheed-2.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - - 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 deleted file mode 100644 index fc5b990b7..000000000 --- a/doc/manual/ja/sylpheed-3.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - 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 deleted file mode 100644 index 79d6cba1b..000000000 --- a/doc/manual/ja/sylpheed-4.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - 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 deleted file mode 100644 index 7f02c1274..000000000 --- a/doc/manual/ja/sylpheed-5.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - 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 deleted file mode 100644 index 43c75be95..000000000 --- a/doc/manual/ja/sylpheed-6.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - 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 deleted file mode 100644 index 4e78c604b..000000000 --- a/doc/manual/ja/sylpheed-7.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - 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 deleted file mode 100644 index d9ed6409b..000000000 --- a/doc/manual/ja/sylpheed-8.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - 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 deleted file mode 100644 index 074304e04..000000000 --- a/doc/manual/ja/sylpheed-9.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - 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 deleted file mode 100644 index c14c3944e..000000000 --- a/doc/manual/ja/sylpheed.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - 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 deleted file mode 100644 index 564ce004c..000000000 --- a/doc/manual/ja/sylpheed.sgml +++ /dev/null @@ -1,2132 +0,0 @@ - -
- 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/doc/src/maintainer_guide.txt b/doc/src/maintainer_guide.txt deleted file mode 100644 index 80dee3286..000000000 --- a/doc/src/maintainer_guide.txt +++ /dev/null @@ -1,71 +0,0 @@ -1. Files - -about.c is the about dialog -account.c is the accounts list dialog -addressbook.c is the address book dialog -addr_compl.c is the address completion process -base64.c handles the base64 conversion -compose.c is the compose dialog -esmtp.c handles the esmtp protocol with authentification -filesel.c is a file selection dialog -filter.c handles the filtering process -folder.c handles the folder structure (left panel) without any gtk -foldersel.c / folderview.c is the left panel gtk implementation -gtksctree.c ********* NO DESCRIPTION ************* -gtkshruler.c ********* NO DESCRIPTION ************* -gtkutils ********* NO DESCRIPTION ************* -headerview.c is the little header viewer between the list of mails and - the mail viewer. -headerwin.c is the displaying of the all the header in a window - (show all headers option) -html.c is an HTML parser -imageview.c is the image viewer -imap.c is the handling of the IMAP4 procotol -import.c import from mbox dialog -inc.c ********* NO DESCRIPTION ************* -inputdialog.c is a dialog where you can enter texts -logwindow.c is the log window (tool menu / log window) -main.c ********* NO DESCRIPTION ************* -mainwindow.c is the 3-paned main window -manage_window.c ********* NO DESCRIPTION ************* -manual.c ********* NO DESCRIPTION ************* -mbox.c is the mbox importer/exporter -md5.c / md5ify.c is the md5 processing -md5ify.c -menu.c -messageview.c is the mail viewer part of the main window -mh.c handles mh folders -mimeview.c is the displaying of the list of the MIME part of the mail - (at the top of the mail viewer when it is displayed) -news.c is the news session handling (it uses the nntp protocol) -nntp.c is the handling of the NNTP procotol -passphrase.c is the dialog box to enter a password -pop.c is the handling of the POP3 protocol -prefs.c is a preference file parser and somes function that - set values from the state of a gtk component. -prefs_account.c is preferences for account dialog -prefs_common.c is the preference dialog -prefs_filter.c is preferences for filter dialog -procheader.c is the RFC822 headers parser. -procmime.c is a MIME parser. -procmsg.c handle the list of message files. -progressdialog.c is a dialog box with a progress bar -recv.c ********* NO DESCRIPTION ************* -rfc2015.c ********* NO DESCRIPTION ************* -rfc822.c ********* NO DESCRIPTION ************* -select-keys.c ********* NO DESCRIPTION ************* -send.c is the message sender (SMTP only). -session.c ********* NO DESCRIPTION ************* -setup.c ********* NO DESCRIPTION ************* -smtp.c is the handling of the SMTP protocol. -socket.c is some function to make it easier to use TCP/unix socket. -sourcewindow.c ********* NO DESCRIPTION ************* -statusbar.c ********* NO DESCRIPTION ************* -summaryview.c is the displaying of list of the mail in a folder - (up/right in the main window). -textview.c is the mail (without MIME part) displaying of the - mail viewer. -unmime.c ********* NO DESCRIPTION ************* -utils.c ********* NO DESCRIPTION ************* -uuencode.c ********* NO DESCRIPTION ************* -xml.c ********* NO DESCRIPTION ************* diff --git a/doc/src/readme.txt b/doc/src/readme.txt deleted file mode 100644 index 85bf418b4..000000000 --- a/doc/src/readme.txt +++ /dev/null @@ -1,12 +0,0 @@ -rfc1939.txt POP3 -rfc2821.txt SMTP -rfc2822.txt Internet Message Format -rfc977.txt NNTP -rfc2045.txt MIME 1 -rfc2046.txt MIME 2 -rfc2047.txt MIME 3 -rfc2048.txt MIME 4 -rfc2049.txt MIME 5 -rfc2060.txt IMAP4 -rfc2015.txt MIME Security with Pretty Good Privacy (PGP) -rfc2487.txt SMTP Service Extension for Secure SMTP over TLS diff --git a/doc/src/rfc1939.txt b/doc/src/rfc1939.txt deleted file mode 100644 index 207c45ddf..000000000 --- a/doc/src/rfc1939.txt +++ /dev/null @@ -1,1291 +0,0 @@ - - - - - - -Network Working Group J. Myers -Request for Comments: 1939 Carnegie Mellon -STD: 53 M. Rose -Obsoletes: 1725 Dover Beach Consulting, Inc. -Category: Standards Track May 1996 - - - Post Office Protocol - Version 3 - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Table of Contents - - 1. Introduction ................................................ 2 - 2. A Short Digression .......................................... 2 - 3. Basic Operation ............................................. 3 - 4. The AUTHORIZATION State ..................................... 4 - QUIT Command ................................................ 5 - 5. The TRANSACTION State ....................................... 5 - STAT Command ................................................ 6 - LIST Command ................................................ 6 - RETR Command ................................................ 8 - DELE Command ................................................ 8 - NOOP Command ................................................ 9 - RSET Command ................................................ 9 - 6. The UPDATE State ............................................ 10 - QUIT Command ................................................ 10 - 7. Optional POP3 Commands ...................................... 11 - TOP Command ................................................. 11 - UIDL Command ................................................ 12 - USER Command ................................................ 13 - PASS Command ................................................ 14 - APOP Command ................................................ 15 - 8. Scaling and Operational Considerations ...................... 16 - 9. POP3 Command Summary ........................................ 18 - 10. Example POP3 Session ....................................... 19 - 11. Message Format ............................................. 19 - 12. References ................................................. 20 - 13. Security Considerations .................................... 20 - 14. Acknowledgements ........................................... 20 - 15. Authors' Addresses ......................................... 21 - Appendix A. Differences from RFC 1725 .......................... 22 - - - -Myers & Rose Standards Track [Page 1] - -RFC 1939 POP3 May 1996 - - - Appendix B. Command Index ...................................... 23 - -1. Introduction - - On certain types of smaller nodes in the Internet it is often - impractical to maintain a message transport system (MTS). For - example, a workstation may not have sufficient resources (cycles, - disk space) in order to permit a SMTP server [RFC821] and associated - local mail delivery system to be kept resident and continuously - running. Similarly, it may be expensive (or impossible) to keep a - personal computer interconnected to an IP-style network for long - amounts of time (the node is lacking the resource known as - "connectivity"). - - Despite this, it is often very useful to be able to manage mail on - these smaller nodes, and they often support a user agent (UA) to aid - the tasks of mail handling. To solve this problem, a node which can - support an MTS entity offers a maildrop service to these less endowed - nodes. The Post Office Protocol - Version 3 (POP3) is intended to - permit a workstation to dynamically access a maildrop on a server - host in a useful fashion. Usually, this means that the POP3 protocol - is used to allow a workstation to retrieve mail that the server is - holding for it. - - POP3 is not intended to provide extensive manipulation operations of - mail on the server; normally, mail is downloaded and then deleted. A - more advanced (and complex) protocol, IMAP4, is discussed in - [RFC1730]. - - For the remainder of this memo, the term "client host" refers to a - host making use of the POP3 service, while the term "server host" - refers to a host which offers the POP3 service. - -2. A Short Digression - - This memo does not specify how a client host enters mail into the - transport system, although a method consistent with the philosophy of - this memo is presented here: - - When the user agent on a client host wishes to enter a message - into the transport system, it establishes an SMTP connection to - its relay host and sends all mail to it. This relay host could - be, but need not be, the POP3 server host for the client host. Of - course, the relay host must accept mail for delivery to arbitrary - recipient addresses, that functionality is not required of all - SMTP servers. - - - - - -Myers & Rose Standards Track [Page 2] - -RFC 1939 POP3 May 1996 - - -3. Basic Operation - - Initially, the server host starts the POP3 service by listening on - TCP port 110. When a client host wishes to make use of the service, - it establishes a TCP connection with the server host. When the - connection is established, the POP3 server sends a greeting. The - client and POP3 server then exchange commands and responses - (respectively) until the connection is closed or aborted. - - Commands in the POP3 consist of a case-insensitive keyword, possibly - followed by one or more arguments. All commands are terminated by a - CRLF pair. Keywords and arguments consist of printable ASCII - characters. Keywords and arguments are each separated by a single - SPACE character. Keywords are three or four characters long. Each - argument may be up to 40 characters long. - - Responses in the POP3 consist of a status indicator and a keyword - possibly followed by additional information. All responses are - terminated by a CRLF pair. Responses may be up to 512 characters - long, including the terminating CRLF. There are currently two status - indicators: positive ("+OK") and negative ("-ERR"). Servers MUST - send the "+OK" and "-ERR" in upper case. - - Responses to certain commands are multi-line. In these cases, which - are clearly indicated below, after sending the first line of the - response and a CRLF, any additional lines are sent, each terminated - by a CRLF pair. When all lines of the response have been sent, a - final line is sent, consisting of a termination octet (decimal code - 046, ".") and a CRLF pair. If any line of the multi-line response - begins with the termination octet, the line is "byte-stuffed" by - pre-pending the termination octet to that line of the response. - Hence a multi-line response is terminated with the five octets - "CRLF.CRLF". When examining a multi-line response, the client checks - to see if the line begins with the termination octet. If so and if - octets other than CRLF follow, the first octet of the line (the - termination octet) is stripped away. If so and if CRLF immediately - follows the termination character, then the response from the POP - server is ended and the line containing ".CRLF" is not considered - part of the multi-line response. - - A POP3 session progresses through a number of states during its - lifetime. Once the TCP connection has been opened and the POP3 - server has sent the greeting, the session enters the AUTHORIZATION - state. In this state, the client must identify itself to the POP3 - server. Once the client has successfully done this, the server - acquires resources associated with the client's maildrop, and the - session enters the TRANSACTION state. In this state, the client - requests actions on the part of the POP3 server. When the client has - - - -Myers & Rose Standards Track [Page 3] - -RFC 1939 POP3 May 1996 - - - issued the QUIT command, the session enters the UPDATE state. In - this state, the POP3 server releases any resources acquired during - the TRANSACTION state and says goodbye. The TCP connection is then - closed. - - A server MUST respond to an unrecognized, unimplemented, or - syntactically invalid command by responding with a negative status - indicator. A server MUST respond to a command issued when the - session is in an incorrect state by responding with a negative status - indicator. There is no general method for a client to distinguish - between a server which does not implement an optional command and a - server which is unwilling or unable to process the command. - - A POP3 server MAY have an inactivity autologout timer. Such a timer - MUST be of at least 10 minutes' duration. The receipt of any command - from the client during that interval should suffice to reset the - autologout timer. When the timer expires, the session does NOT enter - the UPDATE state--the server should close the TCP connection without - removing any messages or sending any response to the client. - -4. The AUTHORIZATION State - - Once the TCP connection has been opened by a POP3 client, the POP3 - server issues a one line greeting. This can be any positive - response. An example might be: - - S: +OK POP3 server ready - - The POP3 session is now in the AUTHORIZATION state. The client must - now identify and authenticate itself to the POP3 server. Two - possible mechanisms for doing this are described in this document, - the USER and PASS command combination and the APOP command. Both - mechanisms are described later in this document. Additional - authentication mechanisms are described in [RFC1734]. While there is - no single authentication mechanism that is required of all POP3 - servers, a POP3 server must of course support at least one - authentication mechanism. - - Once the POP3 server has determined through the use of any - authentication command that the client should be given access to the - appropriate maildrop, the POP3 server then acquires an exclusive- - access lock on the maildrop, as necessary to prevent messages from - being modified or removed before the session enters the UPDATE state. - If the lock is successfully acquired, the POP3 server responds with a - positive status indicator. The POP3 session now enters the - TRANSACTION state, with no messages marked as deleted. If the - maildrop cannot be opened for some reason (for example, a lock can - not be acquired, the client is denied access to the appropriate - - - -Myers & Rose Standards Track [Page 4] - -RFC 1939 POP3 May 1996 - - - maildrop, or the maildrop cannot be parsed), the POP3 server responds - with a negative status indicator. (If a lock was acquired but the - POP3 server intends to respond with a negative status indicator, the - POP3 server must release the lock prior to rejecting the command.) - After returning a negative status indicator, the server may close the - connection. If the server does not close the connection, the client - may either issue a new authentication command and start again, or the - client may issue the QUIT command. - - After the POP3 server has opened the maildrop, it assigns a message- - number to each message, and notes the size of each message in octets. - The first message in the maildrop is assigned a message-number of - "1", the second is assigned "2", and so on, so that the nth message - in a maildrop is assigned a message-number of "n". In POP3 commands - and responses, all message-numbers and message sizes are expressed in - base-10 (i.e., decimal). - - Here is the summary for the QUIT command when used in the - AUTHORIZATION state: - - QUIT - - Arguments: none - - Restrictions: none - - Possible Responses: - +OK - - Examples: - C: QUIT - S: +OK dewey POP3 server signing off - -5. The TRANSACTION State - - Once the client has successfully identified itself to the POP3 server - and the POP3 server has locked and opened the appropriate maildrop, - the POP3 session is now in the TRANSACTION state. The client may now - issue any of the following POP3 commands repeatedly. After each - command, the POP3 server issues a response. Eventually, the client - issues the QUIT command and the POP3 session enters the UPDATE state. - - - - - - - - - - -Myers & Rose Standards Track [Page 5] - -RFC 1939 POP3 May 1996 - - - Here are the POP3 commands valid in the TRANSACTION state: - - STAT - - Arguments: none - - Restrictions: - may only be given in the TRANSACTION state - - Discussion: - The POP3 server issues a positive response with a line - containing information for the maildrop. This line is - called a "drop listing" for that maildrop. - - In order to simplify parsing, all POP3 servers are - required to use a certain format for drop listings. The - positive response consists of "+OK" followed by a single - space, the number of messages in the maildrop, a single - space, and the size of the maildrop in octets. This memo - makes no requirement on what follows the maildrop size. - Minimal implementations should just end that line of the - response with a CRLF pair. More advanced implementations - may include other information. - - NOTE: This memo STRONGLY discourages implementations - from supplying additional information in the drop - listing. Other, optional, facilities are discussed - later on which permit the client to parse the messages - in the maildrop. - - Note that messages marked as deleted are not counted in - either total. - - Possible Responses: - +OK nn mm - - Examples: - C: STAT - S: +OK 2 320 - - - LIST [msg] - - Arguments: - a message-number (optional), which, if present, may NOT - refer to a message marked as deleted - - - - - -Myers & Rose Standards Track [Page 6] - -RFC 1939 POP3 May 1996 - - - Restrictions: - may only be given in the TRANSACTION state - - Discussion: - If an argument was given and the POP3 server issues a - positive response with a line containing information for - that message. This line is called a "scan listing" for - that message. - - If no argument was given and the POP3 server issues a - positive response, then the response given is multi-line. - After the initial +OK, for each message in the maildrop, - the POP3 server responds with a line containing - information for that message. This line is also called a - "scan listing" for that message. If there are no - messages in the maildrop, then the POP3 server responds - with no scan listings--it issues a positive response - followed by a line containing a termination octet and a - CRLF pair. - - In order to simplify parsing, all POP3 servers are - required to use a certain format for scan listings. A - scan listing consists of the message-number of the - message, followed by a single space and the exact size of - the message in octets. Methods for calculating the exact - size of the message are described in the "Message Format" - section below. This memo makes no requirement on what - follows the message size in the scan listing. Minimal - implementations should just end that line of the response - with a CRLF pair. More advanced implementations may - include other information, as parsed from the message. - - NOTE: This memo STRONGLY discourages implementations - from supplying additional information in the scan - listing. Other, optional, facilities are discussed - later on which permit the client to parse the messages - in the maildrop. - - Note that messages marked as deleted are not listed. - - Possible Responses: - +OK scan listing follows - -ERR no such message - - Examples: - C: LIST - S: +OK 2 messages (320 octets) - S: 1 120 - - - -Myers & Rose Standards Track [Page 7] - -RFC 1939 POP3 May 1996 - - - S: 2 200 - S: . - ... - C: LIST 2 - S: +OK 2 200 - ... - C: LIST 3 - S: -ERR no such message, only 2 messages in maildrop - - - RETR msg - - Arguments: - a message-number (required) which may NOT refer to a - message marked as deleted - - Restrictions: - may only be given in the TRANSACTION state - - Discussion: - If the POP3 server issues a positive response, then the - response given is multi-line. After the initial +OK, the - POP3 server sends the message corresponding to the given - message-number, being careful to byte-stuff the termination - character (as with all multi-line responses). - - Possible Responses: - +OK message follows - -ERR no such message - - Examples: - C: RETR 1 - S: +OK 120 octets - S: <the POP3 server sends the entire message here> - S: . - - - DELE msg - - Arguments: - a message-number (required) which may NOT refer to a - message marked as deleted - - Restrictions: - may only be given in the TRANSACTION state - - - - - - -Myers & Rose Standards Track [Page 8] - -RFC 1939 POP3 May 1996 - - - Discussion: - The POP3 server marks the message as deleted. Any future - reference to the message-number associated with the message - in a POP3 command generates an error. The POP3 server does - not actually delete the message until the POP3 session - enters the UPDATE state. - - Possible Responses: - +OK message deleted - -ERR no such message - - Examples: - C: DELE 1 - S: +OK message 1 deleted - ... - C: DELE 2 - S: -ERR message 2 already deleted - - - NOOP - - Arguments: none - - Restrictions: - may only be given in the TRANSACTION state - - Discussion: - The POP3 server does nothing, it merely replies with a - positive response. - - Possible Responses: - +OK - - Examples: - C: NOOP - S: +OK - - - RSET - - Arguments: none - - Restrictions: - may only be given in the TRANSACTION state - - Discussion: - If any messages have been marked as deleted by the POP3 - server, they are unmarked. The POP3 server then replies - - - -Myers & Rose Standards Track [Page 9] - -RFC 1939 POP3 May 1996 - - - with a positive response. - - Possible Responses: - +OK - - Examples: - C: RSET - S: +OK maildrop has 2 messages (320 octets) - -6. The UPDATE State - - When the client issues the QUIT command from the TRANSACTION state, - the POP3 session enters the UPDATE state. (Note that if the client - issues the QUIT command from the AUTHORIZATION state, the POP3 - session terminates but does NOT enter the UPDATE state.) - - If a session terminates for some reason other than a client-issued - QUIT command, the POP3 session does NOT enter the UPDATE state and - MUST not remove any messages from the maildrop. - - QUIT - - Arguments: none - - Restrictions: none - - Discussion: - The POP3 server removes all messages marked as deleted - from the maildrop and replies as to the status of this - operation. If there is an error, such as a resource - shortage, encountered while removing messages, the - maildrop may result in having some or none of the messages - marked as deleted be removed. In no case may the server - remove any messages not marked as deleted. - - Whether the removal was successful or not, the server - then releases any exclusive-access lock on the maildrop - and closes the TCP connection. - - Possible Responses: - +OK - -ERR some deleted messages not removed - - Examples: - C: QUIT - S: +OK dewey POP3 server signing off (maildrop empty) - ... - C: QUIT - - - -Myers & Rose Standards Track [Page 10] - -RFC 1939 POP3 May 1996 - - - S: +OK dewey POP3 server signing off (2 messages left) - ... - -7. Optional POP3 Commands - - The POP3 commands discussed above must be supported by all minimal - implementations of POP3 servers. - - The optional POP3 commands described below permit a POP3 client - greater freedom in message handling, while preserving a simple POP3 - server implementation. - - NOTE: This memo STRONGLY encourages implementations to support - these commands in lieu of developing augmented drop and scan - listings. In short, the philosophy of this memo is to put - intelligence in the part of the POP3 client and not the POP3 - server. - - TOP msg n - - Arguments: - a message-number (required) which may NOT refer to to a - message marked as deleted, and a non-negative number - of lines (required) - - Restrictions: - may only be given in the TRANSACTION state - - Discussion: - If the POP3 server issues a positive response, then the - response given is multi-line. After the initial +OK, the - POP3 server sends the headers of the message, the blank - line separating the headers from the body, and then the - number of lines of the indicated message's body, being - careful to byte-stuff the termination character (as with - all multi-line responses). - - Note that if the number of lines requested by the POP3 - client is greater than than the number of lines in the - body, then the POP3 server sends the entire message. - - Possible Responses: - +OK top of message follows - -ERR no such message - - Examples: - C: TOP 1 10 - S: +OK - - - -Myers & Rose Standards Track [Page 11] - -RFC 1939 POP3 May 1996 - - - S: <the POP3 server sends the headers of the - message, a blank line, and the first 10 lines - of the body of the message> - S: . - ... - C: TOP 100 3 - S: -ERR no such message - - - UIDL [msg] - - Arguments: - a message-number (optional), which, if present, may NOT - refer to a message marked as deleted - - Restrictions: - may only be given in the TRANSACTION state. - - Discussion: - If an argument was given and the POP3 server issues a positive - response with a line containing information for that message. - This line is called a "unique-id listing" for that message. - - If no argument was given and the POP3 server issues a positive - response, then the response given is multi-line. After the - initial +OK, for each message in the maildrop, the POP3 server - responds with a line containing information for that message. - This line is called a "unique-id listing" for that message. - - In order to simplify parsing, all POP3 servers are required to - use a certain format for unique-id listings. A unique-id - listing consists of the message-number of the message, - followed by a single space and the unique-id of the message. - No information follows the unique-id in the unique-id listing. - - The unique-id of a message is an arbitrary server-determined - string, consisting of one to 70 characters in the range 0x21 - to 0x7E, which uniquely identifies a message within a - maildrop and which persists across sessions. This - persistence is required even if a session ends without - entering the UPDATE state. The server should never reuse an - unique-id in a given maildrop, for as long as the entity - using the unique-id exists. - - Note that messages marked as deleted are not listed. - - While it is generally preferable for server implementations - to store arbitrarily assigned unique-ids in the maildrop, - - - -Myers & Rose Standards Track [Page 12] - -RFC 1939 POP3 May 1996 - - - this specification is intended to permit unique-ids to be - calculated as a hash of the message. Clients should be able - to handle a situation where two identical copies of a - message in a maildrop have the same unique-id. - - Possible Responses: - +OK unique-id listing follows - -ERR no such message - - Examples: - C: UIDL - S: +OK - S: 1 whqtswO00WBw418f9t5JxYwZ - S: 2 QhdPYR:00WBw1Ph7x7 - S: . - ... - C: UIDL 2 - S: +OK 2 QhdPYR:00WBw1Ph7x7 - ... - C: UIDL 3 - S: -ERR no such message, only 2 messages in maildrop - - - USER name - - Arguments: - a string identifying a mailbox (required), which is of - significance ONLY to the server - - Restrictions: - may only be given in the AUTHORIZATION state after the POP3 - greeting or after an unsuccessful USER or PASS command - - Discussion: - To authenticate using the USER and PASS command - combination, the client must first issue the USER - command. If the POP3 server responds with a positive - status indicator ("+OK"), then the client may issue - either the PASS command to complete the authentication, - or the QUIT command to terminate the POP3 session. If - the POP3 server responds with a negative status indicator - ("-ERR") to the USER command, then the client may either - issue a new authentication command or may issue the QUIT - command. - - The server may return a positive response even though no - such mailbox exists. The server may return a negative - response if mailbox exists, but does not permit plaintext - - - -Myers & Rose Standards Track [Page 13] - -RFC 1939 POP3 May 1996 - - - password authentication. - - Possible Responses: - +OK name is a valid mailbox - -ERR never heard of mailbox name - - Examples: - C: USER frated - S: -ERR sorry, no mailbox for frated here - ... - C: USER mrose - S: +OK mrose is a real hoopy frood - - - PASS string - - Arguments: - a server/mailbox-specific password (required) - - Restrictions: - may only be given in the AUTHORIZATION state immediately - after a successful USER command - - Discussion: - When the client issues the PASS command, the POP3 server - uses the argument pair from the USER and PASS commands to - determine if the client should be given access to the - appropriate maildrop. - - Since the PASS command has exactly one argument, a POP3 - server may treat spaces in the argument as part of the - password, instead of as argument separators. - - Possible Responses: - +OK maildrop locked and ready - -ERR invalid password - -ERR unable to lock maildrop - - Examples: - C: USER mrose - S: +OK mrose is a real hoopy frood - C: PASS secret - S: -ERR maildrop already locked - ... - C: USER mrose - S: +OK mrose is a real hoopy frood - C: PASS secret - S: +OK mrose's maildrop has 2 messages (320 octets) - - - -Myers & Rose Standards Track [Page 14] - -RFC 1939 POP3 May 1996 - - - APOP name digest - - Arguments: - a string identifying a mailbox and a MD5 digest string - (both required) - - Restrictions: - may only be given in the AUTHORIZATION state after the POP3 - greeting or after an unsuccessful USER or PASS command - - Discussion: - Normally, each POP3 session starts with a USER/PASS - exchange. This results in a server/user-id specific - password being sent in the clear on the network. For - intermittent use of POP3, this may not introduce a sizable - risk. However, many POP3 client implementations connect to - the POP3 server on a regular basis -- to check for new - mail. Further the interval of session initiation may be on - the order of five minutes. Hence, the risk of password - capture is greatly enhanced. - - An alternate method of authentication is required which - provides for both origin authentication and replay - protection, but which does not involve sending a password - in the clear over the network. The APOP command provides - this functionality. - - A POP3 server which implements the APOP command will - include a timestamp in its banner greeting. The syntax of - the timestamp corresponds to the `msg-id' in [RFC822], and - MUST be different each time the POP3 server issues a banner - greeting. For example, on a UNIX implementation in which a - separate UNIX process is used for each instance of a POP3 - server, the syntax of the timestamp might be: - - <process-ID.clock@hostname> - - where `process-ID' is the decimal value of the process's - PID, clock is the decimal value of the system clock, and - hostname is the fully-qualified domain-name corresponding - to the host where the POP3 server is running. - - The POP3 client makes note of this timestamp, and then - issues the APOP command. The `name' parameter has - identical semantics to the `name' parameter of the USER - command. The `digest' parameter is calculated by applying - the MD5 algorithm [RFC1321] to a string consisting of the - timestamp (including angle-brackets) followed by a shared - - - -Myers & Rose Standards Track [Page 15] - -RFC 1939 POP3 May 1996 - - - secret. This shared secret is a string known only to the - POP3 client and server. Great care should be taken to - prevent unauthorized disclosure of the secret, as knowledge - of the secret will allow any entity to successfully - masquerade as the named user. The `digest' parameter - itself is a 16-octet value which is sent in hexadecimal - format, using lower-case ASCII characters. - - When the POP3 server receives the APOP command, it verifies - the digest provided. If the digest is correct, the POP3 - server issues a positive response, and the POP3 session - enters the TRANSACTION state. Otherwise, a negative - response is issued and the POP3 session remains in the - AUTHORIZATION state. - - Note that as the length of the shared secret increases, so - does the difficulty of deriving it. As such, shared - secrets should be long strings (considerably longer than - the 8-character example shown below). - - Possible Responses: - +OK maildrop locked and ready - -ERR permission denied - - Examples: - S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us> - C: APOP mrose c4c9334bac560ecc979e58001b3e22fb - S: +OK maildrop has 1 message (369 octets) - - In this example, the shared secret is the string `tan- - staaf'. Hence, the MD5 algorithm is applied to the string - - <1896.697170952@dbc.mtview.ca.us>tanstaaf - - which produces a digest value of - - c4c9334bac560ecc979e58001b3e22fb - -8. Scaling and Operational Considerations - - Since some of the optional features described above were added to the - POP3 protocol, experience has accumulated in using them in large- - scale commercial post office operations where most of the users are - unrelated to each other. In these situations and others, users and - vendors of POP3 clients have discovered that the combination of using - the UIDL command and not issuing the DELE command can provide a weak - version of the "maildrop as semi-permanent repository" functionality - normally associated with IMAP. Of course the other capabilities of - - - -Myers & Rose Standards Track [Page 16] - -RFC 1939 POP3 May 1996 - - - IMAP, such as polling an existing connection for newly arrived - messages and supporting multiple folders on the server, are not - present in POP3. - - When these facilities are used in this way by casual users, there has - been a tendency for already-read messages to accumulate on the server - without bound. This is clearly an undesirable behavior pattern from - the standpoint of the server operator. This situation is aggravated - by the fact that the limited capabilities of the POP3 do not permit - efficient handling of maildrops which have hundreds or thousands of - messages. - - Consequently, it is recommended that operators of large-scale multi- - user servers, especially ones in which the user's only access to the - maildrop is via POP3, consider such options as: - - * Imposing a per-user maildrop storage quota or the like. - - A disadvantage to this option is that accumulation of messages may - result in the user's inability to receive new ones into the - maildrop. Sites which choose this option should be sure to inform - users of impending or current exhaustion of quota, perhaps by - inserting an appropriate message into the user's maildrop. - - * Enforce a site policy regarding mail retention on the server. - - Sites are free to establish local policy regarding the storage and - retention of messages on the server, both read and unread. For - example, a site might delete unread messages from the server after - 60 days and delete read messages after 7 days. Such message - deletions are outside the scope of the POP3 protocol and are not - considered a protocol violation. - - Server operators enforcing message deletion policies should take - care to make all users aware of the policies in force. - - Clients must not assume that a site policy will automate message - deletions, and should continue to explicitly delete messages using - the DELE command when appropriate. - - It should be noted that enforcing site message deletion policies - may be confusing to the user community, since their POP3 client - may contain configuration options to leave mail on the server - which will not in fact be supported by the server. - - One special case of a site policy is that messages may only be - downloaded once from the server, and are deleted after this has - been accomplished. This could be implemented in POP3 server - - - -Myers & Rose Standards Track [Page 17] - -RFC 1939 POP3 May 1996 - - - software by the following mechanism: "following a POP3 login by a - client which was ended by a QUIT, delete all messages downloaded - during the session with the RETR command". It is important not to - delete messages in the event of abnormal connection termination - (ie, if no QUIT was received from the client) because the client - may not have successfully received or stored the messages. - Servers implementing a download-and-delete policy may also wish to - disable or limit the optional TOP command, since it could be used - as an alternate mechanism to download entire messages. - -9. POP3 Command Summary - - Minimal POP3 Commands: - - USER name valid in the AUTHORIZATION state - PASS string - QUIT - - STAT valid in the TRANSACTION state - LIST [msg] - RETR msg - DELE msg - NOOP - RSET - QUIT - - Optional POP3 Commands: - - APOP name digest valid in the AUTHORIZATION state - - TOP msg n valid in the TRANSACTION state - UIDL [msg] - - POP3 Replies: - - +OK - -ERR - - Note that with the exception of the STAT, LIST, and UIDL commands, - the reply given by the POP3 server to any command is significant - only to "+OK" and "-ERR". Any text occurring after this reply - may be ignored by the client. - - - - - - - - - -Myers & Rose Standards Track [Page 18] - -RFC 1939 POP3 May 1996 - - -10. Example POP3 Session - - S: <wait for connection on TCP port 110> - C: <open connection> - S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us> - C: APOP mrose c4c9334bac560ecc979e58001b3e22fb - S: +OK mrose's maildrop has 2 messages (320 octets) - C: STAT - S: +OK 2 320 - C: LIST - S: +OK 2 messages (320 octets) - S: 1 120 - S: 2 200 - S: . - C: RETR 1 - S: +OK 120 octets - S: <the POP3 server sends message 1> - S: . - C: DELE 1 - S: +OK message 1 deleted - C: RETR 2 - S: +OK 200 octets - S: <the POP3 server sends message 2> - S: . - C: DELE 2 - S: +OK message 2 deleted - C: QUIT - S: +OK dewey POP3 server signing off (maildrop empty) - C: <close connection> - S: <wait for next connection> - -11. Message Format - - All messages transmitted during a POP3 session are assumed to conform - to the standard for the format of Internet text messages [RFC822]. - - It is important to note that the octet count for a message on the - server host may differ from the octet count assigned to that message - due to local conventions for designating end-of-line. Usually, - during the AUTHORIZATION state of the POP3 session, the POP3 server - can calculate the size of each message in octets when it opens the - maildrop. For example, if the POP3 server host internally represents - end-of-line as a single character, then the POP3 server simply counts - each occurrence of this character in a message as two octets. Note - that lines in the message which start with the termination octet need - not (and must not) be counted twice, since the POP3 client will - remove all byte-stuffed termination characters when it receives a - multi-line response. - - - -Myers & Rose Standards Track [Page 19] - -RFC 1939 POP3 May 1996 - - -12. References - - [RFC821] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC - 821, USC/Information Sciences Institute, August 1982. - - [RFC822] Crocker, D., "Standard for the Format of ARPA-Internet Text - Messages", STD 11, RFC 822, University of Delaware, August 1982. - - [RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, - MIT Laboratory for Computer Science, April 1992. - - [RFC1730] Crispin, M., "Internet Message Access Protocol - Version - 4", RFC 1730, University of Washington, December 1994. - - [RFC1734] Myers, J., "POP3 AUTHentication command", RFC 1734, - Carnegie Mellon, December 1994. - -13. Security Considerations - - It is conjectured that use of the APOP command provides origin - identification and replay protection for a POP3 session. - Accordingly, a POP3 server which implements both the PASS and APOP - commands should not allow both methods of access for a given user; - that is, for a given mailbox name, either the USER/PASS command - sequence or the APOP command is allowed, but not both. - - Further, note that as the length of the shared secret increases, so - does the difficulty of deriving it. - - Servers that answer -ERR to the USER command are giving potential - attackers clues about which names are valid. - - Use of the PASS command sends passwords in the clear over the - network. - - Use of the RETR and TOP commands sends mail in the clear over the - network. - - Otherwise, security issues are not discussed in this memo. - -14. Acknowledgements - - The POP family has a long and checkered history. Although primarily - a minor revision to RFC 1460, POP3 is based on the ideas presented in - RFCs 918, 937, and 1081. - - In addition, Alfred Grimstad, Keith McCloghrie, and Neil Ostroff - provided significant comments on the APOP command. - - - -Myers & Rose Standards Track [Page 20] - -RFC 1939 POP3 May 1996 - - -15. Authors' Addresses - - John G. Myers - Carnegie-Mellon University - 5000 Forbes Ave - Pittsburgh, PA 15213 - - EMail: jgm+@cmu.edu - - - Marshall T. Rose - Dover Beach Consulting, Inc. - 420 Whisman Court - Mountain View, CA 94043-2186 - - EMail: mrose@dbc.mtview.ca.us - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Myers & Rose Standards Track [Page 21] - -RFC 1939 POP3 May 1996 - - -Appendix A. Differences from RFC 1725 - - This memo is a revision to RFC 1725, a Draft Standard. It makes the - following changes from that document: - - - clarifies that command keywords are case insensitive. - - - specifies that servers must send "+OK" and "-ERR" in - upper case. - - - specifies that the initial greeting is a positive response, - instead of any string which should be a positive response. - - - clarifies behavior for unimplemented commands. - - - makes the USER and PASS commands optional. - - - clarified the set of possible responses to the USER command. - - - reverses the order of the examples in the USER and PASS - commands, to reduce confusion. - - - clarifies that the PASS command may only be given immediately - after a successful USER command. - - - clarified the persistence requirements of UIDs and added some - implementation notes. - - - specifies a UID length limitation of one to 70 octets. - - - specifies a status indicator length limitation - of 512 octets, including the CRLF. - - - clarifies that LIST with no arguments on an empty mailbox - returns success. - - - adds a reference from the LIST command to the Message Format - section - - - clarifies the behavior of QUIT upon failure - - - clarifies the security section to not imply the use of the - USER command with the APOP command. - - - adds references to RFCs 1730 and 1734 - - - clarifies the method by which a UA may enter mail into the - transport system. - - - -Myers & Rose Standards Track [Page 22] - -RFC 1939 POP3 May 1996 - - - - clarifies that the second argument to the TOP command is a - number of lines. - - - changes the suggestion in the Security Considerations section - for a server to not accept both PASS and APOP for a given user - from a "must" to a "should". - - - adds a section on scaling and operational considerations - -Appendix B. Command Index - - APOP ....................................................... 15 - DELE ....................................................... 8 - LIST ....................................................... 6 - NOOP ....................................................... 9 - PASS ....................................................... 14 - QUIT ....................................................... 5 - QUIT ....................................................... 10 - RETR ....................................................... 8 - RSET ....................................................... 9 - STAT ....................................................... 6 - TOP ........................................................ 11 - UIDL ....................................................... 12 - USER ....................................................... 13 - - - - - - - - - - - - - - - - - - - - - - - - - - - -Myers & Rose Standards Track [Page 23] - diff --git a/doc/src/rfc2015.txt b/doc/src/rfc2015.txt deleted file mode 100644 index 747335d67..000000000 --- a/doc/src/rfc2015.txt +++ /dev/null @@ -1,451 +0,0 @@ - - - - - - -Network Working Group M. Elkins -Request for Comments: 2015 The Aerospace Corporation -Category: Standards Track October 1996 - - - MIME Security with Pretty Good Privacy (PGP) - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Abstract - - This document describes how Pretty Good Privacy (PGP) can be used to - provide privacy and authentication using the Multipurpose Internet - Mail Extensions (MIME) security content types described in RFC1847. - -1. Introduction - - Previous work on integrating PGP with MIME (including the since - withdrawn application/pgp content type) has suffered from a number of - problems, the most significant of which is the inability to recover - signed message bodies without parsing data structures specific to - PGP. This work makes use of the elegant solution proposed in - RFC1847, which defines security multipart formats for MIME. The - security multiparts clearly separate the signed message body from the - signature, and have a number of other desirable properties. This - document is styled after RFC 1848, which defines MIME Object Security - Services (MOSS) for providing security and authentication. - - This document defines three new content types for implementing - security and privacy with PGP: application/pgp-encrypted, - application/pgp-signature and application/pgp-keys. - -1.1 Compliance - - In order for an implementation to be compliant with this - specification, is it absolutely necessary for it to obey all items - labeled as MUST or REQUIRED. - - - - - - - - -Elkins Standards Track [Page 1] - -RFC 2015 MIME Security with PGP October 1996 - - -2. PGP data formats - - PGP can generate either ASCII armor (described in [3]) or 8-bit - binary output when encrypting data, generating a digital signature, - or extracting public key data. The ASCII armor output is the - REQUIRED method for data transfer. This allows those users who do - not have the means to interpret the formats described in this - document to be able extract and use the PGP information in the - message. - - When the amount of data to be transmitted requires that it be sent in - many parts, the MIME message/partial mechanism should be used rather - than the multipart ASCII armor PGP format. - -3. Content-Transfer-Encoding restrictions - - Multipart/signed and multipart/encrypted are to be treated by agents - as opaque, meaning that the data is not to be altered in any way [1]. - However, many existing mail gateways will detect if the next hop does - not support MIME or 8-bit data and perform conversion to either - Quoted-Printable or Base64. This presents serious problems for - multipart/signed, in particular, where the signature is invalidated - when such an operation occurs. For this reason all data signed - according to this protocol MUST be constrained to 7 bits (8- bit data - should be encoded using either Quoted-Printable or Base64). Note - that this also includes the case where a signed object is also - encrypted (see section 6). This restriction will increase the - likelihood that the signature will be valid upon receipt. - - Data that is ONLY to be encrypted is allowed to contain 8-bit - characters and therefore need not be converted to a 7-bit format. - - Implementor's note: It cannot be stressed enough that applications - using this standard should follow MIME's suggestion that you "be - conservative in what you generate, and liberal in what you accept." - In this particular case it means it would be wise for an - implementation to accept messages with any content-transfer- - encoding, but restrict generation to the 7-bit format required by - this memo. This will allow future compatibility in the event the - Internet SMTP framework becomes 8-bit friendly. - -4. PGP encrypted data - - Before encryption with PGP, the data should be written in MIME - canonical format (body and headers). - - PGP encrypted data is denoted by the "multipart/encrypted" content - type, described in [1], and MUST have a "protocol" parameter value of - - - -Elkins Standards Track [Page 2] - -RFC 2015 MIME Security with PGP October 1996 - - - "application/pgp-encrypted". Note that the value of the parameter - MUST be enclosed in quotes. - - The multipart/encrypted MUST consist of exactly two parts. The first - MIME body part must have a content type of "application/pgp- - encrypted". This body contains the control information. A message - complying with this standard MUST contain a "Version: 1" field in - this body. Since the PGP packet format contains all other - information necessary for decrypting, no other information is - required here. - - The second MIME body part MUST contain the actual encrypted data. It - must be labeled with a content type of "application/octet- stream". - - Example message: - - From: Michael Elkins <elkins@aero.org> - To: Michael Elkins <elkins@aero.org> - Mime-Version: 1.0 - Content-Type: multipart/encrypted; boundary=foo; - protocol="application/pgp-encrypted" - - --foo - Content-Type: application/pgp-encrypted - - Version: 1 - - --foo - Content-Type: application/octet-stream - - -----BEGIN PGP MESSAGE----- - Version: 2.6.2 - - hIwDY32hYGCE8MkBA/wOu7d45aUxF4Q0RKJprD3v5Z9K1YcRJ2fve87lMlDlx4Oj - eW4GDdBfLbJE7VUpp13N19GL8e/AqbyyjHH4aS0YoTk10QQ9nnRvjY8nZL3MPXSZ - g9VGQxFeGqzykzmykU6A26MSMexR4ApeeON6xzZWfo+0yOqAq6lb46wsvldZ96YA - AABH78hyX7YX4uT1tNCWEIIBoqqvCeIMpp7UQ2IzBrXg6GtukS8NxbukLeamqVW3 - 1yt21DYOjuLzcMNe/JNsD9vDVCvOOG3OCi8= - =zzaA - -----END PGP MESSAGE----- - - --foo-- - -5. PGP signed data - - PGP signed messages are denoted by the "multipart/signed" content - type, described in [1], with a "protocol" parameter which MUST have a - value of "application/pgp-signature" (MUST be quoted). The "micalg" - - - -Elkins Standards Track [Page 3] - -RFC 2015 MIME Security with PGP October 1996 - - - parameter MUST have a value of "pgp-<hash-symbol>", where <hash- - symbol> identifies the message integrity check (MIC) used to generate - the signature. The currently defined values for <hash-symbol> are - "md5" for the MD5 checksum, and "sha1" for the SHA.1 algorithm. - - The multipart/signed body MUST consist of exactly two parts. The - first part contains the signed data in MIME canonical format, - including a set of appropriate content headers describing the data. - - The second body MUST contain the PGP digital signature. It MUST be - labeled with a content type of "application/pgp-signature". - - When the PGP digital signature is generated: - - (1) The data to be signed must first be converted to its - type/subtype specific canonical form. For text/plain, this - means conversion to an appropriate character set and conversion - of line endings to the canonical <CR><LF> sequence. - - (2) An appropriate Content-Transfer-Encoding is then applied. Each - line of the encoded data MUST end with the canonical <CR><LF> - sequence. - - (3) MIME content headers are then added to the body, each ending - with the canonical <CR><LF> sequence. - - (4) As described in [1], the digital signature MUST be calculated - over both the data to be signed and its set of content headers. - - (5) The signature MUST be generated detached from the signed data - so that the process does not alter the signed data in any way. - - Example message: - - From: Michael Elkins <elkins@aero.org> - To: Michael Elkins <elkins@aero.org> - Mime-Version: 1.0 - Content-Type: multipart/signed; boundary=bar; micalg=pgp-md5; - protocol="application/pgp-signature" - - --bar - & Content-Type: text/plain; charset=iso-8859-1 - & Content-Transfer-Encoding: quoted-printable - & - & =A1Hola! - & - & Did you know that talking to yourself is a sign of senility? - & - - - -Elkins Standards Track [Page 4] - -RFC 2015 MIME Security with PGP October 1996 - - - & It's generally a good idea to encode lines that begin with - & From=20because some mail transport agents will insert a greater- - & than (>) sign, thus invalidating the signature. - & - & Also, in some cases it might be desirable to encode any =20 - &railing whitespace that occurs on lines in order to ensure =20 - & that the message signature is not invalidated when passing =20 - & a gateway that modifies such whitespace (like BITNET). =20 - & - & me - - --bar - Content-Type: application/pgp-signature - - -----BEGIN PGP MESSAGE----- - Version: 2.6.2 - - iQCVAwUBMJrRF2N9oWBghPDJAQE9UQQAtl7LuRVndBjrk4EqYBIb3h5QXIX/LC// - jJV5bNvkZIGPIcEmI5iFd9boEgvpirHtIREEqLQRkYNoBActFBZmh9GC3C041WGq - uMbrbxc+nIs1TIKlA08rVi9ig/2Yh7LFrK5Ein57U/W72vgSxLhe/zhdfolT9Brn - HOxEa44b+EI= - =ndaj - -----END PGP MESSAGE----- - - --bar-- - - The "&"s in the previous example indicate the portion of the data - over which the signature was calculated. - - Though not required, it is generally a good idea to use Quoted- - Printable encoding in the first step (writing out the data to be - signed in MIME canonical format) if any of the lines in the data - begin with "From ", and encode the "F". This will avoid an MTA - inserting a ">" in front of the line, thus invalidating the - signature! - - Upon receipt of a signed message, an application MUST: - - (1) Convert line endings to the canonical <CR><LF> sequence before - the signature can be verified. This is necessary since the - local MTA may have converted to a local end of line convention. - - (2) Pass both the signed data and its associated content headers - along with the PGP signature to the signature verification - service. - - - - - - -Elkins Standards Track [Page 5] - -RFC 2015 MIME Security with PGP October 1996 - - -6. Encrypted and Signed Data - - Sometimes it is desirable to both digitally sign and then encrypt a - message to be sent. This protocol allows for two methods of - accomplishing this task. - -6.1 RFC1847 Encapsulation - - [1], it is stated that the data should first be signed as a - multipart/signature body, and then encrypted to form the final - multipart/encrypted body, i.e., - - Content-Type: multipart/encrypted; - protocol="application/pgp-encrypted"; boundary=foo - - --foo - Content-Type: application/pgp-encrypted - - Version: 1 - - --foo - Content-Type: application/octet-stream - - -----BEGIN PGP MESSAGE----- - & Content-Type: multipart/signed; micalg=pgp-md5 - & protocol="application/pgp-signature"; boundary=bar - & - & --bar - & Content-Type: text/plain; charset=us-ascii - & - & This message was first signed, and then encrypted. - & - & --bar - & Content-Type: application/pgp-signature - & - & -----BEGIN PGP MESSAGE----- - & Version: 2.6.2 - & - & iQCVAwUBMJrRF2N9oWBghPDJAQE9UQQAtl7LuRVndBjrk4EqYBIb3h5QXIX/LC// - & jJV5bNvkZIGPIcEmI5iFd9boEgvpirHtIREEqLQRkYNoBActFBZmh9GC3C041WGq - & uMbrbxc+nIs1TIKlA08rVi9ig/2Yh7LFrK5Ein57U/W72vgSxLhe/zhdfolT9Brn - & HOxEa44b+EI= - & =ndaj - & -----END PGP MESSAGE----- - & - & --bar-- - -----END PGP MESSAGE----- - - - - -Elkins Standards Track [Page 6] - -RFC 2015 MIME Security with PGP October 1996 - - - --foo-- - - (The text preceded by '&' indicates that it is really - encrypted, but presented as text for clarity.) - -6.2 Combined method - - Versions 2.x of PGP also allow data to be signed and encrypted in one - operation. This method is an acceptable shortcut, and has the - benefit of less overhead. The resulting data should be formed as a - "multipart/encrypted" object as described above. - - Messages which are encrypted and signed in this combined fashion are - REQUIRED to follow the same canonicalization rules as for - multipart/signed objects. - - It is explicitly allowed for an agent to decrypt a combined message - and rewrite it as a multipart/signed object using the signature data - embedded in the encrypted version. - -7. Distribution of PGP public keys - - Content-Type: application/pgp-keys - Required parameters: none - Optional parameters: none - - This is the content type which should be used for relaying public key - blocks. - -8. Notes - - PGP and Pretty Good Privacy are trademarks of Philip Zimmermann. - -9. Security Considerations - - Use of this protocol has the same security considerations as PGP, and - is not known to either increase or decrease the security of messages - using it; see [3] for more information. - -10. Author's Address - - Michael Elkins - P.O. Box 92957 - M1/102 - Los Angeles, CA 90009-2957 - - Phone: +1 310 336 8040 - Fax: +1 310 336 4402 - - - - -Elkins Standards Track [Page 7] - -RFC 2015 MIME Security with PGP October 1996 - - -References - - [1] Galvin, J., Murphy, G., Crocker, S., and N. Freed, "Security - Multiparts for MIME: Multipart/Signed and Multipart/Encrypted", - RFC 1847, October 1995. - - [2] Galvin, J., Murphy, G., Crocker, S., and N. Freed, "MIME Object - Security Services", RFC 1848, October 1995. - - [3] Atkins, D., Stallings, W., and P. Zimmermann, "PGP Message - Exchange Formats", RFC 1991, August 1996. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Elkins Standards Track [Page 8] - diff --git a/doc/src/rfc2045.txt b/doc/src/rfc2045.txt deleted file mode 100644 index 9f286b1a9..000000000 --- a/doc/src/rfc2045.txt +++ /dev/null @@ -1,1739 +0,0 @@ - - - - - - -Network Working Group N. Freed -Request for Comments: 2045 Innosoft -Obsoletes: 1521, 1522, 1590 N. Borenstein -Category: Standards Track First Virtual - November 1996 - - - Multipurpose Internet Mail Extensions - (MIME) Part One: - Format of Internet Message Bodies - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Abstract - - STD 11, RFC 822, defines a message representation protocol specifying - considerable detail about US-ASCII message headers, and leaves the - message content, or message body, as flat US-ASCII text. This set of - documents, collectively called the Multipurpose Internet Mail - Extensions, or MIME, redefines the format of messages to allow for - - (1) textual message bodies in character sets other than - US-ASCII, - - (2) an extensible set of different formats for non-textual - message bodies, - - (3) multi-part message bodies, and - - (4) textual header information in character sets other than - US-ASCII. - - These documents are based on earlier work documented in RFC 934, STD - 11, and RFC 1049, but extends and revises them. Because RFC 822 said - so little about message bodies, these documents are largely - orthogonal to (rather than a revision of) RFC 822. - - This initial document specifies the various headers used to describe - the structure of MIME messages. The second document, RFC 2046, - defines the general structure of the MIME media typing system and - defines an initial set of media types. The third document, RFC 2047, - describes extensions to RFC 822 to allow non-US-ASCII text data in - - - -Freed & Borenstein Standards Track [Page 1] - -RFC 2045 Internet Message Bodies November 1996 - - - Internet mail header fields. The fourth document, RFC 2048, specifies - various IANA registration procedures for MIME-related facilities. The - fifth and final document, RFC 2049, describes MIME conformance - criteria as well as providing some illustrative examples of MIME - message formats, acknowledgements, and the bibliography. - - These documents are revisions of RFCs 1521, 1522, and 1590, which - themselves were revisions of RFCs 1341 and 1342. An appendix in RFC - 2049 describes differences and changes from previous versions. - -Table of Contents - - 1. Introduction ......................................... 3 - 2. Definitions, Conventions, and Generic BNF Grammar .... 5 - 2.1 CRLF ................................................ 5 - 2.2 Character Set ....................................... 6 - 2.3 Message ............................................. 6 - 2.4 Entity .............................................. 6 - 2.5 Body Part ........................................... 7 - 2.6 Body ................................................ 7 - 2.7 7bit Data ........................................... 7 - 2.8 8bit Data ........................................... 7 - 2.9 Binary Data ......................................... 7 - 2.10 Lines .............................................. 7 - 3. MIME Header Fields ................................... 8 - 4. MIME-Version Header Field ............................ 8 - 5. Content-Type Header Field ............................ 10 - 5.1 Syntax of the Content-Type Header Field ............. 12 - 5.2 Content-Type Defaults ............................... 14 - 6. Content-Transfer-Encoding Header Field ............... 14 - 6.1 Content-Transfer-Encoding Syntax .................... 14 - 6.2 Content-Transfer-Encodings Semantics ................ 15 - 6.3 New Content-Transfer-Encodings ...................... 16 - 6.4 Interpretation and Use .............................. 16 - 6.5 Translating Encodings ............................... 18 - 6.6 Canonical Encoding Model ............................ 19 - 6.7 Quoted-Printable Content-Transfer-Encoding .......... 19 - 6.8 Base64 Content-Transfer-Encoding .................... 24 - 7. Content-ID Header Field .............................. 26 - 8. Content-Description Header Field ..................... 27 - 9. Additional MIME Header Fields ........................ 27 - 10. Summary ............................................. 27 - 11. Security Considerations ............................. 27 - 12. Authors' Addresses .................................. 28 - A. Collected Grammar .................................... 29 - - - - - - -Freed & Borenstein Standards Track [Page 2] - -RFC 2045 Internet Message Bodies November 1996 - - -1. Introduction - - Since its publication in 1982, RFC 822 has defined the standard - format of textual mail messages on the Internet. Its success has - been such that the RFC 822 format has been adopted, wholly or - partially, well beyond the confines of the Internet and the Internet - SMTP transport defined by RFC 821. As the format has seen wider use, - a number of limitations have proven increasingly restrictive for the - user community. - - RFC 822 was intended to specify a format for text messages. As such, - non-text messages, such as multimedia messages that might include - audio or images, are simply not mentioned. Even in the case of text, - however, RFC 822 is inadequate for the needs of mail users whose - languages require the use of character sets richer than US-ASCII. - Since RFC 822 does not specify mechanisms for mail containing audio, - video, Asian language text, or even text in most European languages, - additional specifications are needed. - - One of the notable limitations of RFC 821/822 based mail systems is - the fact that they limit the contents of electronic mail messages to - relatively short lines (e.g. 1000 characters or less [RFC-821]) of - 7bit US-ASCII. This forces users to convert any non-textual data - that they may wish to send into seven-bit bytes representable as - printable US-ASCII characters before invoking a local mail UA (User - Agent, a program with which human users send and receive mail). - Examples of such encodings currently used in the Internet include - pure hexadecimal, uuencode, the 3-in-4 base 64 scheme specified in - RFC 1421, the Andrew Toolkit Representation [ATK], and many others. - - The limitations of RFC 822 mail become even more apparent as gateways - are designed to allow for the exchange of mail messages between RFC - 822 hosts and X.400 hosts. X.400 [X400] specifies mechanisms for the - inclusion of non-textual material within electronic mail messages. - The current standards for the mapping of X.400 messages to RFC 822 - messages specify either that X.400 non-textual material must be - converted to (not encoded in) IA5Text format, or that they must be - discarded, notifying the RFC 822 user that discarding has occurred. - This is clearly undesirable, as information that a user may wish to - receive is lost. Even though a user agent may not have the - capability of dealing with the non-textual material, the user might - have some mechanism external to the UA that can extract useful - information from the material. Moreover, it does not allow for the - fact that the message may eventually be gatewayed back into an X.400 - message handling system (i.e., the X.400 message is "tunneled" - through Internet mail), where the non-textual information would - definitely become useful again. - - - - -Freed & Borenstein Standards Track [Page 3] - -RFC 2045 Internet Message Bodies November 1996 - - - This document describes several mechanisms that combine to solve most - of these problems without introducing any serious incompatibilities - with the existing world of RFC 822 mail. In particular, it - describes: - - (1) A MIME-Version header field, which uses a version - number to declare a message to be conformant with MIME - and allows mail processing agents to distinguish - between such messages and those generated by older or - non-conformant software, which are presumed to lack - such a field. - - (2) A Content-Type header field, generalized from RFC 1049, - which can be used to specify the media type and subtype - of data in the body of a message and to fully specify - the native representation (canonical form) of such - data. - - (3) A Content-Transfer-Encoding header field, which can be - used to specify both the encoding transformation that - was applied to the body and the domain of the result. - Encoding transformations other than the identity - transformation are usually applied to data in order to - allow it to pass through mail transport mechanisms - which may have data or character set limitations. - - (4) Two additional header fields that can be used to - further describe the data in a body, the Content-ID and - Content-Description header fields. - - All of the header fields defined in this document are subject to the - general syntactic rules for header fields specified in RFC 822. In - particular, all of these header fields except for Content-Disposition - can include RFC 822 comments, which have no semantic content and - should be ignored during MIME processing. - - Finally, to specify and promote interoperability, RFC 2049 provides a - basic applicability statement for a subset of the above mechanisms - that defines a minimal level of "conformance" with this document. - - HISTORICAL NOTE: Several of the mechanisms described in this set of - documents may seem somewhat strange or even baroque at first reading. - It is important to note that compatibility with existing standards - AND robustness across existing practice were two of the highest - priorities of the working group that developed this set of documents. - In particular, compatibility was always favored over elegance. - - - - - -Freed & Borenstein Standards Track [Page 4] - -RFC 2045 Internet Message Bodies November 1996 - - - Please refer to the current edition of the "Internet Official - Protocol Standards" for the standardization state and status of this - protocol. RFC 822 and STD 3, RFC 1123 also provide essential - background for MIME since no conforming implementation of MIME can - violate them. In addition, several other informational RFC documents - will be of interest to the MIME implementor, in particular RFC 1344, - RFC 1345, and RFC 1524. - -2. Definitions, Conventions, and Generic BNF Grammar - - Although the mechanisms specified in this set of documents are all - described in prose, most are also described formally in the augmented - BNF notation of RFC 822. Implementors will need to be familiar with - this notation in order to understand this set of documents, and are - referred to RFC 822 for a complete explanation of the augmented BNF - notation. - - Some of the augmented BNF in this set of documents makes named - references to syntax rules defined in RFC 822. A complete formal - grammar, then, is obtained by combining the collected grammar - appendices in each document in this set with the BNF of RFC 822 plus - the modifications to RFC 822 defined in RFC 1123 (which specifically - changes the syntax for `return', `date' and `mailbox'). - - All numeric and octet values are given in decimal notation in this - set of documents. All media type values, subtype values, and - parameter names as defined are case-insensitive. However, parameter - values are case-sensitive unless otherwise specified for the specific - parameter. - - FORMATTING NOTE: Notes, such at this one, provide additional - nonessential information which may be skipped by the reader without - missing anything essential. The primary purpose of these non- - essential notes is to convey information about the rationale of this - set of documents, or to place these documents in the proper - historical or evolutionary context. Such information may in - particular be skipped by those who are focused entirely on building a - conformant implementation, but may be of use to those who wish to - understand why certain design choices were made. - -2.1. CRLF - - The term CRLF, in this set of documents, refers to the sequence of - octets corresponding to the two US-ASCII characters CR (decimal value - 13) and LF (decimal value 10) which, taken together, in this order, - denote a line break in RFC 822 mail. - - - - - -Freed & Borenstein Standards Track [Page 5] - -RFC 2045 Internet Message Bodies November 1996 - - -2.2. Character Set - - The term "character set" is used in MIME to refer to a method of - converting a sequence of octets into a sequence of characters. Note - that unconditional and unambiguous conversion in the other direction - is not required, in that not all characters may be representable by a - given character set and a character set may provide more than one - sequence of octets to represent a particular sequence of characters. - - This definition is intended to allow various kinds of character - encodings, from simple single-table mappings such as US-ASCII to - complex table switching methods such as those that use ISO 2022's - techniques, to be used as character sets. However, the definition - associated with a MIME character set name must fully specify the - mapping to be performed. In particular, use of external profiling - information to determine the exact mapping is not permitted. - - NOTE: The term "character set" was originally to describe such - straightforward schemes as US-ASCII and ISO-8859-1 which have a - simple one-to-one mapping from single octets to single characters. - Multi-octet coded character sets and switching techniques make the - situation more complex. For example, some communities use the term - "character encoding" for what MIME calls a "character set", while - using the phrase "coded character set" to denote an abstract mapping - from integers (not octets) to characters. - -2.3. Message - - The term "message", when not further qualified, means either a - (complete or "top-level") RFC 822 message being transferred on a - network, or a message encapsulated in a body of type "message/rfc822" - or "message/partial". - -2.4. Entity - - The term "entity", refers specifically to the MIME-defined header - fields and contents of either a message or one of the parts in the - body of a multipart entity. The specification of such entities is - the essence of MIME. Since the contents of an entity are often - called the "body", it makes sense to speak about the body of an - entity. Any sort of field may be present in the header of an entity, - but only those fields whose names begin with "content-" actually have - any MIME-related meaning. Note that this does NOT imply thay they - have no meaning at all -- an entity that is also a message has non- - MIME header fields whose meanings are defined by RFC 822. - - - - - - -Freed & Borenstein Standards Track [Page 6] - -RFC 2045 Internet Message Bodies November 1996 - - -2.5. Body Part - - The term "body part" refers to an entity inside of a multipart - entity. - -2.6. Body - - The term "body", when not further qualified, means the body of an - entity, that is, the body of either a message or of a body part. - - NOTE: The previous four definitions are clearly circular. This is - unavoidable, since the overall structure of a MIME message is indeed - recursive. - -2.7. 7bit Data - - "7bit data" refers to data that is all represented as relatively - short lines with 998 octets or less between CRLF line separation - sequences [RFC-821]. No octets with decimal values greater than 127 - are allowed and neither are NULs (octets with decimal value 0). CR - (decimal value 13) and LF (decimal value 10) octets only occur as - part of CRLF line separation sequences. - -2.8. 8bit Data - - "8bit data" refers to data that is all represented as relatively - short lines with 998 octets or less between CRLF line separation - sequences [RFC-821]), but octets with decimal values greater than 127 - may be used. As with "7bit data" CR and LF octets only occur as part - of CRLF line separation sequences and no NULs are allowed. - -2.9. Binary Data - - "Binary data" refers to data where any sequence of octets whatsoever - is allowed. - -2.10. Lines - - "Lines" are defined as sequences of octets separated by a CRLF - sequences. This is consistent with both RFC 821 and RFC 822. - "Lines" only refers to a unit of data in a message, which may or may - not correspond to something that is actually displayed by a user - agent. - - - - - - - - -Freed & Borenstein Standards Track [Page 7] - -RFC 2045 Internet Message Bodies November 1996 - - -3. MIME Header Fields - - MIME defines a number of new RFC 822 header fields that are used to - describe the content of a MIME entity. These header fields occur in - at least two contexts: - - (1) As part of a regular RFC 822 message header. - - (2) In a MIME body part header within a multipart - construct. - - The formal definition of these header fields is as follows: - - entity-headers := [ content CRLF ] - [ encoding CRLF ] - [ id CRLF ] - [ description CRLF ] - *( MIME-extension-field CRLF ) - - MIME-message-headers := entity-headers - fields - version CRLF - ; The ordering of the header - ; fields implied by this BNF - ; definition should be ignored. - - MIME-part-headers := entity-headers - [ fields ] - ; Any field not beginning with - ; "content-" can have no defined - ; meaning and may be ignored. - ; The ordering of the header - ; fields implied by this BNF - ; definition should be ignored. - - The syntax of the various specific MIME header fields will be - described in the following sections. - -4. MIME-Version Header Field - - Since RFC 822 was published in 1982, there has really been only one - format standard for Internet messages, and there has been little - perceived need to declare the format standard in use. This document - is an independent specification that complements RFC 822. Although - the extensions in this document have been defined in such a way as to - be compatible with RFC 822, there are still circumstances in which it - might be desirable for a mail-processing agent to know whether a - message was composed with the new standard in mind. - - - -Freed & Borenstein Standards Track [Page 8] - -RFC 2045 Internet Message Bodies November 1996 - - - Therefore, this document defines a new header field, "MIME-Version", - which is to be used to declare the version of the Internet message - body format standard in use. - - Messages composed in accordance with this document MUST include such - a header field, with the following verbatim text: - - MIME-Version: 1.0 - - The presence of this header field is an assertion that the message - has been composed in compliance with this document. - - Since it is possible that a future document might extend the message - format standard again, a formal BNF is given for the content of the - MIME-Version field: - - version := "MIME-Version" ":" 1*DIGIT "." 1*DIGIT - - Thus, future format specifiers, which might replace or extend "1.0", - are constrained to be two integer fields, separated by a period. If - a message is received with a MIME-version value other than "1.0", it - cannot be assumed to conform with this document. - - Note that the MIME-Version header field is required at the top level - of a message. It is not required for each body part of a multipart - entity. It is required for the embedded headers of a body of type - "message/rfc822" or "message/partial" if and only if the embedded - message is itself claimed to be MIME-conformant. - - It is not possible to fully specify how a mail reader that conforms - with MIME as defined in this document should treat a message that - might arrive in the future with some value of MIME-Version other than - "1.0". - - It is also worth noting that version control for specific media types - is not accomplished using the MIME-Version mechanism. In particular, - some formats (such as application/postscript) have version numbering - conventions that are internal to the media format. Where such - conventions exist, MIME does nothing to supersede them. Where no - such conventions exist, a MIME media type might use a "version" - parameter in the content-type field if necessary. - - - - - - - - - - -Freed & Borenstein Standards Track [Page 9] - -RFC 2045 Internet Message Bodies November 1996 - - - NOTE TO IMPLEMENTORS: When checking MIME-Version values any RFC 822 - comment strings that are present must be ignored. In particular, the - following four MIME-Version fields are equivalent: - - MIME-Version: 1.0 - - MIME-Version: 1.0 (produced by MetaSend Vx.x) - - MIME-Version: (produced by MetaSend Vx.x) 1.0 - - MIME-Version: 1.(produced by MetaSend Vx.x)0 - - In the absence of a MIME-Version field, a receiving mail user agent - (whether conforming to MIME requirements or not) may optionally - choose to interpret the body of the message according to local - conventions. Many such conventions are currently in use and it - should be noted that in practice non-MIME messages can contain just - about anything. - - It is impossible to be certain that a non-MIME mail message is - actually plain text in the US-ASCII character set since it might well - be a message that, using some set of nonstandard local conventions - that predate MIME, includes text in another character set or non- - textual data presented in a manner that cannot be automatically - recognized (e.g., a uuencoded compressed UNIX tar file). - -5. Content-Type Header Field - - The purpose of the Content-Type field is to describe the data - contained in the body fully enough that the receiving user agent can - pick an appropriate agent or mechanism to present the data to the - user, or otherwise deal with the data in an appropriate manner. The - value in this field is called a media type. - - HISTORICAL NOTE: The Content-Type header field was first defined in - RFC 1049. RFC 1049 used a simpler and less powerful syntax, but one - that is largely compatible with the mechanism given here. - - The Content-Type header field specifies the nature of the data in the - body of an entity by giving media type and subtype identifiers, and - by providing auxiliary information that may be required for certain - media types. After the media type and subtype names, the remainder - of the header field is simply a set of parameters, specified in an - attribute=value notation. The ordering of parameters is not - significant. - - - - - - -Freed & Borenstein Standards Track [Page 10] - -RFC 2045 Internet Message Bodies November 1996 - - - In general, the top-level media type is used to declare the general - type of data, while the subtype specifies a specific format for that - type of data. Thus, a media type of "image/xyz" is enough to tell a - user agent that the data is an image, even if the user agent has no - knowledge of the specific image format "xyz". Such information can - be used, for example, to decide whether or not to show a user the raw - data from an unrecognized subtype -- such an action might be - reasonable for unrecognized subtypes of text, but not for - unrecognized subtypes of image or audio. For this reason, registered - subtypes of text, image, audio, and video should not contain embedded - information that is really of a different type. Such compound - formats should be represented using the "multipart" or "application" - types. - - Parameters are modifiers of the media subtype, and as such do not - fundamentally affect the nature of the content. The set of - meaningful parameters depends on the media type and subtype. Most - parameters are associated with a single specific subtype. However, a - given top-level media type may define parameters which are applicable - to any subtype of that type. Parameters may be required by their - defining content type or subtype or they may be optional. MIME - implementations must ignore any parameters whose names they do not - recognize. - - For example, the "charset" parameter is applicable to any subtype of - "text", while the "boundary" parameter is required for any subtype of - the "multipart" media type. - - There are NO globally-meaningful parameters that apply to all media - types. Truly global mechanisms are best addressed, in the MIME - model, by the definition of additional Content-* header fields. - - An initial set of seven top-level media types is defined in RFC 2046. - Five of these are discrete types whose content is essentially opaque - as far as MIME processing is concerned. The remaining two are - composite types whose contents require additional handling by MIME - processors. - - This set of top-level media types is intended to be substantially - complete. It is expected that additions to the larger set of - supported types can generally be accomplished by the creation of new - subtypes of these initial types. In the future, more top-level types - may be defined only by a standards-track extension to this standard. - If another top-level type is to be used for any reason, it must be - given a name starting with "X-" to indicate its non-standard status - and to avoid a potential conflict with a future official name. - - - - - -Freed & Borenstein Standards Track [Page 11] - -RFC 2045 Internet Message Bodies November 1996 - - -5.1. Syntax of the Content-Type Header Field - - In the Augmented BNF notation of RFC 822, a Content-Type header field - value is defined as follows: - - content := "Content-Type" ":" type "/" subtype - *(";" parameter) - ; Matching of media type and subtype - ; is ALWAYS case-insensitive. - - type := discrete-type / composite-type - - discrete-type := "text" / "image" / "audio" / "video" / - "application" / extension-token - - composite-type := "message" / "multipart" / extension-token - - extension-token := ietf-token / x-token - - ietf-token := <An extension token defined by a - standards-track RFC and registered - with IANA.> - - x-token := <The two characters "X-" or "x-" followed, with - no intervening white space, by any token> - - subtype := extension-token / iana-token - - iana-token := <A publicly-defined extension token. Tokens - of this form must be registered with IANA - as specified in RFC 2048.> - - parameter := attribute "=" value - - attribute := token - ; Matching of attributes - ; is ALWAYS case-insensitive. - - value := token / quoted-string - - token := 1*<any (US-ASCII) CHAR except SPACE, CTLs, - or tspecials> - - tspecials := "(" / ")" / "<" / ">" / "@" / - "," / ";" / ":" / "\" / <"> - "/" / "[" / "]" / "?" / "=" - ; Must be in quoted-string, - ; to use within parameter values - - - -Freed & Borenstein Standards Track [Page 12] - -RFC 2045 Internet Message Bodies November 1996 - - - Note that the definition of "tspecials" is the same as the RFC 822 - definition of "specials" with the addition of the three characters - "/", "?", and "=", and the removal of ".". - - Note also that a subtype specification is MANDATORY -- it may not be - omitted from a Content-Type header field. As such, there are no - default subtypes. - - The type, subtype, and parameter names are not case sensitive. For - example, TEXT, Text, and TeXt are all equivalent top-level media - types. Parameter values are normally case sensitive, but sometimes - are interpreted in a case-insensitive fashion, depending on the - intended use. (For example, multipart boundaries are case-sensitive, - but the "access-type" parameter for message/External-body is not - case-sensitive.) - - Note that the value of a quoted string parameter does not include the - quotes. That is, the quotation marks in a quoted-string are not a - part of the value of the parameter, but are merely used to delimit - that parameter value. In addition, comments are allowed in - accordance with RFC 822 rules for structured header fields. Thus the - following two forms - - Content-type: text/plain; charset=us-ascii (Plain text) - - Content-type: text/plain; charset="us-ascii" - - are completely equivalent. - - Beyond this syntax, the only syntactic constraint on the definition - of subtype names is the desire that their uses must not conflict. - That is, it would be undesirable to have two different communities - using "Content-Type: application/foobar" to mean two different - things. The process of defining new media subtypes, then, is not - intended to be a mechanism for imposing restrictions, but simply a - mechanism for publicizing their definition and usage. There are, - therefore, two acceptable mechanisms for defining new media subtypes: - - (1) Private values (starting with "X-") may be defined - bilaterally between two cooperating agents without - outside registration or standardization. Such values - cannot be registered or standardized. - - (2) New standard values should be registered with IANA as - described in RFC 2048. - - The second document in this set, RFC 2046, defines the initial set of - media types for MIME. - - - -Freed & Borenstein Standards Track [Page 13] - -RFC 2045 Internet Message Bodies November 1996 - - -5.2. Content-Type Defaults - - Default RFC 822 messages without a MIME Content-Type header are taken - by this protocol to be plain text in the US-ASCII character set, - which can be explicitly specified as: - - Content-type: text/plain; charset=us-ascii - - This default is assumed if no Content-Type header field is specified. - It is also recommend that this default be assumed when a - syntactically invalid Content-Type header field is encountered. In - the presence of a MIME-Version header field and the absence of any - Content-Type header field, a receiving User Agent can also assume - that plain US-ASCII text was the sender's intent. Plain US-ASCII - text may still be assumed in the absence of a MIME-Version or the - presence of an syntactically invalid Content-Type header field, but - the sender's intent might have been otherwise. - -6. Content-Transfer-Encoding Header Field - - Many media types which could be usefully transported via email are - represented, in their "natural" format, as 8bit character or binary - data. Such data cannot be transmitted over some transfer protocols. - For example, RFC 821 (SMTP) restricts mail messages to 7bit US-ASCII - data with lines no longer than 1000 characters including any trailing - CRLF line separator. - - It is necessary, therefore, to define a standard mechanism for - encoding such data into a 7bit short line format. Proper labelling - of unencoded material in less restrictive formats for direct use over - less restrictive transports is also desireable. This document - specifies that such encodings will be indicated by a new "Content- - Transfer-Encoding" header field. This field has not been defined by - any previous standard. - -6.1. Content-Transfer-Encoding Syntax - - The Content-Transfer-Encoding field's value is a single token - specifying the type of encoding, as enumerated below. Formally: - - encoding := "Content-Transfer-Encoding" ":" mechanism - - mechanism := "7bit" / "8bit" / "binary" / - "quoted-printable" / "base64" / - ietf-token / x-token - - These values are not case sensitive -- Base64 and BASE64 and bAsE64 - are all equivalent. An encoding type of 7BIT requires that the body - - - -Freed & Borenstein Standards Track [Page 14] - -RFC 2045 Internet Message Bodies November 1996 - - - is already in a 7bit mail-ready representation. This is the default - value -- that is, "Content-Transfer-Encoding: 7BIT" is assumed if the - Content-Transfer-Encoding header field is not present. - -6.2. Content-Transfer-Encodings Semantics - - This single Content-Transfer-Encoding token actually provides two - pieces of information. It specifies what sort of encoding - transformation the body was subjected to and hence what decoding - operation must be used to restore it to its original form, and it - specifies what the domain of the result is. - - The transformation part of any Content-Transfer-Encodings specifies, - either explicitly or implicitly, a single, well-defined decoding - algorithm, which for any sequence of encoded octets either transforms - it to the original sequence of octets which was encoded, or shows - that it is illegal as an encoded sequence. Content-Transfer- - Encodings transformations never depend on any additional external - profile information for proper operation. Note that while decoders - must produce a single, well-defined output for a valid encoding no - such restrictions exist for encoders: Encoding a given sequence of - octets to different, equivalent encoded sequences is perfectly legal. - - Three transformations are currently defined: identity, the "quoted- - printable" encoding, and the "base64" encoding. The domains are - "binary", "8bit" and "7bit". - - The Content-Transfer-Encoding values "7bit", "8bit", and "binary" all - mean that the identity (i.e. NO) encoding transformation has been - performed. As such, they serve simply as indicators of the domain of - the body data, and provide useful information about the sort of - encoding that might be needed for transmission in a given transport - system. The terms "7bit data", "8bit data", and "binary data" are - all defined in Section 2. - - The quoted-printable and base64 encodings transform their input from - an arbitrary domain into material in the "7bit" range, thus making it - safe to carry over restricted transports. The specific definition of - the transformations are given below. - - The proper Content-Transfer-Encoding label must always be used. - Labelling unencoded data containing 8bit characters as "7bit" is not - allowed, nor is labelling unencoded non-line-oriented data as - anything other than "binary" allowed. - - Unlike media subtypes, a proliferation of Content-Transfer-Encoding - values is both undesirable and unnecessary. However, establishing - only a single transformation into the "7bit" domain does not seem - - - -Freed & Borenstein Standards Track [Page 15] - -RFC 2045 Internet Message Bodies November 1996 - - - possible. There is a tradeoff between the desire for a compact and - efficient encoding of largely- binary data and the desire for a - somewhat readable encoding of data that is mostly, but not entirely, - 7bit. For this reason, at least two encoding mechanisms are - necessary: a more or less readable encoding (quoted-printable) and a - "dense" or "uniform" encoding (base64). - - Mail transport for unencoded 8bit data is defined in RFC 1652. As of - the initial publication of this document, there are no standardized - Internet mail transports for which it is legitimate to include - unencoded binary data in mail bodies. Thus there are no - circumstances in which the "binary" Content-Transfer-Encoding is - actually valid in Internet mail. However, in the event that binary - mail transport becomes a reality in Internet mail, or when MIME is - used in conjunction with any other binary-capable mail transport - mechanism, binary bodies must be labelled as such using this - mechanism. - - NOTE: The five values defined for the Content-Transfer-Encoding field - imply nothing about the media type other than the algorithm by which - it was encoded or the transport system requirements if unencoded. - -6.3. New Content-Transfer-Encodings - - Implementors may, if necessary, define private Content-Transfer- - Encoding values, but must use an x-token, which is a name prefixed by - "X-", to indicate its non-standard status, e.g., "Content-Transfer- - Encoding: x-my-new-encoding". Additional standardized Content- - Transfer-Encoding values must be specified by a standards-track RFC. - The requirements such specifications must meet are given in RFC 2048. - As such, all content-transfer-encoding namespace except that - beginning with "X-" is explicitly reserved to the IETF for future - use. - - Unlike media types and subtypes, the creation of new Content- - Transfer-Encoding values is STRONGLY discouraged, as it seems likely - to hinder interoperability with little potential benefit - -6.4. Interpretation and Use - - If a Content-Transfer-Encoding header field appears as part of a - message header, it applies to the entire body of that message. If a - Content-Transfer-Encoding header field appears as part of an entity's - headers, it applies only to the body of that entity. If an entity is - of type "multipart" the Content-Transfer-Encoding is not permitted to - have any value other than "7bit", "8bit" or "binary". Even more - severe restrictions apply to some subtypes of the "message" type. - - - - -Freed & Borenstein Standards Track [Page 16] - -RFC 2045 Internet Message Bodies November 1996 - - - It should be noted that most media types are defined in terms of - octets rather than bits, so that the mechanisms described here are - mechanisms for encoding arbitrary octet streams, not bit streams. If - a bit stream is to be encoded via one of these mechanisms, it must - first be converted to an 8bit byte stream using the network standard - bit order ("big-endian"), in which the earlier bits in a stream - become the higher-order bits in a 8bit byte. A bit stream not ending - at an 8bit boundary must be padded with zeroes. RFC 2046 provides a - mechanism for noting the addition of such padding in the case of the - application/octet-stream media type, which has a "padding" parameter. - - The encoding mechanisms defined here explicitly encode all data in - US-ASCII. Thus, for example, suppose an entity has header fields - such as: - - Content-Type: text/plain; charset=ISO-8859-1 - Content-transfer-encoding: base64 - - This must be interpreted to mean that the body is a base64 US-ASCII - encoding of data that was originally in ISO-8859-1, and will be in - that character set again after decoding. - - Certain Content-Transfer-Encoding values may only be used on certain - media types. In particular, it is EXPRESSLY FORBIDDEN to use any - encodings other than "7bit", "8bit", or "binary" with any composite - media type, i.e. one that recursively includes other Content-Type - fields. Currently the only composite media types are "multipart" and - "message". All encodings that are desired for bodies of type - multipart or message must be done at the innermost level, by encoding - the actual body that needs to be encoded. - - It should also be noted that, by definition, if a composite entity - has a transfer-encoding value such as "7bit", but one of the enclosed - entities has a less restrictive value such as "8bit", then either the - outer "7bit" labelling is in error, because 8bit data are included, - or the inner "8bit" labelling placed an unnecessarily high demand on - the transport system because the actual included data were actually - 7bit-safe. - - NOTE ON ENCODING RESTRICTIONS: Though the prohibition against using - content-transfer-encodings on composite body data may seem overly - restrictive, it is necessary to prevent nested encodings, in which - data are passed through an encoding algorithm multiple times, and - must be decoded multiple times in order to be properly viewed. - Nested encodings add considerable complexity to user agents: Aside - from the obvious efficiency problems with such multiple encodings, - they can obscure the basic structure of a message. In particular, - they can imply that several decoding operations are necessary simply - - - -Freed & Borenstein Standards Track [Page 17] - -RFC 2045 Internet Message Bodies November 1996 - - - to find out what types of bodies a message contains. Banning nested - encodings may complicate the job of certain mail gateways, but this - seems less of a problem than the effect of nested encodings on user - agents. - - Any entity with an unrecognized Content-Transfer-Encoding must be - treated as if it has a Content-Type of "application/octet-stream", - regardless of what the Content-Type header field actually says. - - NOTE ON THE RELATIONSHIP BETWEEN CONTENT-TYPE AND CONTENT-TRANSFER- - ENCODING: It may seem that the Content-Transfer-Encoding could be - inferred from the characteristics of the media that is to be encoded, - or, at the very least, that certain Content-Transfer-Encodings could - be mandated for use with specific media types. There are several - reasons why this is not the case. First, given the varying types of - transports used for mail, some encodings may be appropriate for some - combinations of media types and transports but not for others. (For - example, in an 8bit transport, no encoding would be required for text - in certain character sets, while such encodings are clearly required - for 7bit SMTP.) - - Second, certain media types may require different types of transfer - encoding under different circumstances. For example, many PostScript - bodies might consist entirely of short lines of 7bit data and hence - require no encoding at all. Other PostScript bodies (especially - those using Level 2 PostScript's binary encoding mechanism) may only - be reasonably represented using a binary transport encoding. - Finally, since the Content-Type field is intended to be an open-ended - specification mechanism, strict specification of an association - between media types and encodings effectively couples the - specification of an application protocol with a specific lower-level - transport. This is not desirable since the developers of a media - type should not have to be aware of all the transports in use and - what their limitations are. - -6.5. Translating Encodings - - The quoted-printable and base64 encodings are designed so that - conversion between them is possible. The only issue that arises in - such a conversion is the handling of hard line breaks in quoted- - printable encoding output. When converting from quoted-printable to - base64 a hard line break in the quoted-printable form represents a - CRLF sequence in the canonical form of the data. It must therefore be - converted to a corresponding encoded CRLF in the base64 form of the - data. Similarly, a CRLF sequence in the canonical form of the data - obtained after base64 decoding must be converted to a quoted- - printable hard line break, but ONLY when converting text data. - - - - -Freed & Borenstein Standards Track [Page 18] - -RFC 2045 Internet Message Bodies November 1996 - - -6.6. Canonical Encoding Model - - There was some confusion, in the previous versions of this RFC, - regarding the model for when email data was to be converted to - canonical form and encoded, and in particular how this process would - affect the treatment of CRLFs, given that the representation of - newlines varies greatly from system to system, and the relationship - between content-transfer-encodings and character sets. A canonical - model for encoding is presented in RFC 2049 for this reason. - -6.7. Quoted-Printable Content-Transfer-Encoding - - The Quoted-Printable encoding is intended to represent data that - largely consists of octets that correspond to printable characters in - the US-ASCII character set. It encodes the data in such a way that - the resulting octets are unlikely to be modified by mail transport. - If the data being encoded are mostly US-ASCII text, the encoded form - of the data remains largely recognizable by humans. A body which is - entirely US-ASCII may also be encoded in Quoted-Printable to ensure - the integrity of the data should the message pass through a - character-translating, and/or line-wrapping gateway. - - In this encoding, octets are to be represented as determined by the - following rules: - - (1) (General 8bit representation) Any octet, except a CR or - LF that is part of a CRLF line break of the canonical - (standard) form of the data being encoded, may be - represented by an "=" followed by a two digit - hexadecimal representation of the octet's value. The - digits of the hexadecimal alphabet, for this purpose, - are "0123456789ABCDEF". Uppercase letters must be - used; lowercase letters are not allowed. Thus, for - example, the decimal value 12 (US-ASCII form feed) can - be represented by "=0C", and the decimal value 61 (US- - ASCII EQUAL SIGN) can be represented by "=3D". This - rule must be followed except when the following rules - allow an alternative encoding. - - (2) (Literal representation) Octets with decimal values of - 33 through 60 inclusive, and 62 through 126, inclusive, - MAY be represented as the US-ASCII characters which - correspond to those octets (EXCLAMATION POINT through - LESS THAN, and GREATER THAN through TILDE, - respectively). - - (3) (White Space) Octets with values of 9 and 32 MAY be - represented as US-ASCII TAB (HT) and SPACE characters, - - - -Freed & Borenstein Standards Track [Page 19] - -RFC 2045 Internet Message Bodies November 1996 - - - respectively, but MUST NOT be so represented at the end - of an encoded line. Any TAB (HT) or SPACE characters - on an encoded line MUST thus be followed on that line - by a printable character. In particular, an "=" at the - end of an encoded line, indicating a soft line break - (see rule #5) may follow one or more TAB (HT) or SPACE - characters. It follows that an octet with decimal - value 9 or 32 appearing at the end of an encoded line - must be represented according to Rule #1. This rule is - necessary because some MTAs (Message Transport Agents, - programs which transport messages from one user to - another, or perform a portion of such transfers) are - known to pad lines of text with SPACEs, and others are - known to remove "white space" characters from the end - of a line. Therefore, when decoding a Quoted-Printable - body, any trailing white space on a line must be - deleted, as it will necessarily have been added by - intermediate transport agents. - - (4) (Line Breaks) A line break in a text body, represented - as a CRLF sequence in the text canonical form, must be - represented by a (RFC 822) line break, which is also a - CRLF sequence, in the Quoted-Printable encoding. Since - the canonical representation of media types other than - text do not generally include the representation of - line breaks as CRLF sequences, no hard line breaks - (i.e. line breaks that are intended to be meaningful - and to be displayed to the user) can occur in the - quoted-printable encoding of such types. Sequences - like "=0D", "=0A", "=0A=0D" and "=0D=0A" will routinely - appear in non-text data represented in quoted- - printable, of course. - - Note that many implementations may elect to encode the - local representation of various content types directly - rather than converting to canonical form first, - encoding, and then converting back to local - representation. In particular, this may apply to plain - text material on systems that use newline conventions - other than a CRLF terminator sequence. Such an - implementation optimization is permissible, but only - when the combined canonicalization-encoding step is - equivalent to performing the three steps separately. - - (5) (Soft Line Breaks) The Quoted-Printable encoding - REQUIRES that encoded lines be no more than 76 - characters long. If longer lines are to be encoded - with the Quoted-Printable encoding, "soft" line breaks - - - -Freed & Borenstein Standards Track [Page 20] - -RFC 2045 Internet Message Bodies November 1996 - - - must be used. An equal sign as the last character on a - encoded line indicates such a non-significant ("soft") - line break in the encoded text. - - Thus if the "raw" form of the line is a single unencoded line that - says: - - Now's the time for all folk to come to the aid of their country. - - This can be represented, in the Quoted-Printable encoding, as: - - Now's the time = - for all folk to come= - to the aid of their country. - - This provides a mechanism with which long lines are encoded in such a - way as to be restored by the user agent. The 76 character limit does - not count the trailing CRLF, but counts all other characters, - including any equal signs. - - Since the hyphen character ("-") may be represented as itself in the - Quoted-Printable encoding, care must be taken, when encapsulating a - quoted-printable encoded body inside one or more multipart entities, - to ensure that the boundary delimiter does not appear anywhere in the - encoded body. (A good strategy is to choose a boundary that includes - a character sequence such as "=_" which can never appear in a - quoted-printable body. See the definition of multipart messages in - RFC 2046.) - - NOTE: The quoted-printable encoding represents something of a - compromise between readability and reliability in transport. Bodies - encoded with the quoted-printable encoding will work reliably over - most mail gateways, but may not work perfectly over a few gateways, - notably those involving translation into EBCDIC. A higher level of - confidence is offered by the base64 Content-Transfer-Encoding. A way - to get reasonably reliable transport through EBCDIC gateways is to - also quote the US-ASCII characters - - !"#$@[\]^`{|}~ - - according to rule #1. - - Because quoted-printable data is generally assumed to be line- - oriented, it is to be expected that the representation of the breaks - between the lines of quoted-printable data may be altered in - transport, in the same manner that plain text mail has always been - altered in Internet mail when passing between systems with differing - newline conventions. If such alterations are likely to constitute a - - - -Freed & Borenstein Standards Track [Page 21] - -RFC 2045 Internet Message Bodies November 1996 - - - corruption of the data, it is probably more sensible to use the - base64 encoding rather than the quoted-printable encoding. - - NOTE: Several kinds of substrings cannot be generated according to - the encoding rules for the quoted-printable content-transfer- - encoding, and hence are formally illegal if they appear in the output - of a quoted-printable encoder. This note enumerates these cases and - suggests ways to handle such illegal substrings if any are - encountered in quoted-printable data that is to be decoded. - - (1) An "=" followed by two hexadecimal digits, one or both - of which are lowercase letters in "abcdef", is formally - illegal. A robust implementation might choose to - recognize them as the corresponding uppercase letters. - - (2) An "=" followed by a character that is neither a - hexadecimal digit (including "abcdef") nor the CR - character of a CRLF pair is illegal. This case can be - the result of US-ASCII text having been included in a - quoted-printable part of a message without itself - having been subjected to quoted-printable encoding. A - reasonable approach by a robust implementation might be - to include the "=" character and the following - character in the decoded data without any - transformation and, if possible, indicate to the user - that proper decoding was not possible at this point in - the data. - - (3) An "=" cannot be the ultimate or penultimate character - in an encoded object. This could be handled as in case - (2) above. - - (4) Control characters other than TAB, or CR and LF as - parts of CRLF pairs, must not appear. The same is true - for octets with decimal values greater than 126. If - found in incoming quoted-printable data by a decoder, a - robust implementation might exclude them from the - decoded data and warn the user that illegal characters - were discovered. - - (5) Encoded lines must not be longer than 76 characters, - not counting the trailing CRLF. If longer lines are - found in incoming, encoded data, a robust - implementation might nevertheless decode the lines, and - might report the erroneous encoding to the user. - - - - - - -Freed & Borenstein Standards Track [Page 22] - -RFC 2045 Internet Message Bodies November 1996 - - - WARNING TO IMPLEMENTORS: If binary data is encoded in quoted- - printable, care must be taken to encode CR and LF characters as "=0D" - and "=0A", respectively. In particular, a CRLF sequence in binary - data should be encoded as "=0D=0A". Otherwise, if CRLF were - represented as a hard line break, it might be incorrectly decoded on - platforms with different line break conventions. - - For formalists, the syntax of quoted-printable data is described by - the following grammar: - - quoted-printable := qp-line *(CRLF qp-line) - - qp-line := *(qp-segment transport-padding CRLF) - qp-part transport-padding - - qp-part := qp-section - ; Maximum length of 76 characters - - qp-segment := qp-section *(SPACE / TAB) "=" - ; Maximum length of 76 characters - - qp-section := [*(ptext / SPACE / TAB) ptext] - - ptext := hex-octet / safe-char - - safe-char := <any octet with decimal value of 33 through - 60 inclusive, and 62 through 126> - ; Characters not listed as "mail-safe" in - ; RFC 2049 are also not recommended. - - hex-octet := "=" 2(DIGIT / "A" / "B" / "C" / "D" / "E" / "F") - ; Octet must be used for characters > 127, =, - ; SPACEs or TABs at the ends of lines, and is - ; recommended for any character not listed in - ; RFC 2049 as "mail-safe". - - transport-padding := *LWSP-char - ; Composers MUST NOT generate - ; non-zero length transport - ; padding, but receivers MUST - ; be able to handle padding - ; added by message transports. - - IMPORTANT: The addition of LWSP between the elements shown in this - BNF is NOT allowed since this BNF does not specify a structured - header field. - - - - - -Freed & Borenstein Standards Track [Page 23] - -RFC 2045 Internet Message Bodies November 1996 - - -6.8. Base64 Content-Transfer-Encoding - - The Base64 Content-Transfer-Encoding is designed to represent - arbitrary sequences of octets in a form that need not be humanly - readable. The encoding and decoding algorithms are simple, but the - encoded data are consistently only about 33 percent larger than the - unencoded data. This encoding is virtually identical to the one used - in Privacy Enhanced Mail (PEM) applications, as defined in RFC 1421. - - A 65-character subset of US-ASCII is used, enabling 6 bits to be - represented per printable character. (The extra 65th character, "=", - is used to signify a special processing function.) - - NOTE: This subset has the important property that it is represented - identically in all versions of ISO 646, including US-ASCII, and all - characters in the subset are also represented identically in all - versions of EBCDIC. Other popular encodings, such as the encoding - used by the uuencode utility, Macintosh binhex 4.0 [RFC-1741], and - the base85 encoding specified as part of Level 2 PostScript, do not - share these properties, and thus do not fulfill the portability - requirements a binary transport encoding for mail must meet. - - The encoding process represents 24-bit groups of input bits as output - strings of 4 encoded characters. Proceeding from left to right, a - 24-bit input group is formed by concatenating 3 8bit input groups. - These 24 bits are then treated as 4 concatenated 6-bit groups, each - of which is translated into a single digit in the base64 alphabet. - When encoding a bit stream via the base64 encoding, the bit stream - must be presumed to be ordered with the most-significant-bit first. - That is, the first bit in the stream will be the high-order bit in - the first 8bit byte, and the eighth bit will be the low-order bit in - the first 8bit byte, and so on. - - Each 6-bit group is used as an index into an array of 64 printable - characters. The character referenced by the index is placed in the - output string. These characters, identified in Table 1, below, are - selected so as to be universally representable, and the set excludes - characters with particular significance to SMTP (e.g., ".", CR, LF) - and to the multipart boundary delimiters defined in RFC 2046 (e.g., - "-"). - - - - - - - - - - - -Freed & Borenstein Standards Track [Page 24] - -RFC 2045 Internet Message Bodies November 1996 - - - Table 1: The Base64 Alphabet - - Value Encoding Value Encoding Value Encoding Value Encoding - 0 A 17 R 34 i 51 z - 1 B 18 S 35 j 52 0 - 2 C 19 T 36 k 53 1 - 3 D 20 U 37 l 54 2 - 4 E 21 V 38 m 55 3 - 5 F 22 W 39 n 56 4 - 6 G 23 X 40 o 57 5 - 7 H 24 Y 41 p 58 6 - 8 I 25 Z 42 q 59 7 - 9 J 26 a 43 r 60 8 - 10 K 27 b 44 s 61 9 - 11 L 28 c 45 t 62 + - 12 M 29 d 46 u 63 / - 13 N 30 e 47 v - 14 O 31 f 48 w (pad) = - 15 P 32 g 49 x - 16 Q 33 h 50 y - - The encoded output stream must be represented in lines of no more - than 76 characters each. All line breaks or other characters not - found in Table 1 must be ignored by decoding software. In base64 - data, characters other than those in Table 1, line breaks, and other - white space probably indicate a transmission error, about which a - warning message or even a message rejection might be appropriate - under some circumstances. - - Special processing is performed if fewer than 24 bits are available - at the end of the data being encoded. A full encoding quantum is - always completed at the end of a body. When fewer than 24 input bits - are available in an input group, zero bits are added (on the right) - to form an integral number of 6-bit groups. Padding at the end of - the data is performed using the "=" character. Since all base64 - input is an integral number of octets, only the following cases can - arise: (1) the final quantum of encoding input is an integral - multiple of 24 bits; here, the final unit of encoded output will be - an integral multiple of 4 characters with no "=" padding, (2) the - final quantum of encoding input is exactly 8 bits; here, the final - unit of encoded output will be two characters followed by two "=" - padding characters, or (3) the final quantum of encoding input is - exactly 16 bits; here, the final unit of encoded output will be three - characters followed by one "=" padding character. - - Because it is used only for padding at the end of the data, the - occurrence of any "=" characters may be taken as evidence that the - end of the data has been reached (without truncation in transit). No - - - -Freed & Borenstein Standards Track [Page 25] - -RFC 2045 Internet Message Bodies November 1996 - - - such assurance is possible, however, when the number of octets - transmitted was a multiple of three and no "=" characters are - present. - - Any characters outside of the base64 alphabet are to be ignored in - base64-encoded data. - - Care must be taken to use the proper octets for line breaks if base64 - encoding is applied directly to text material that has not been - converted to canonical form. In particular, text line breaks must be - converted into CRLF sequences prior to base64 encoding. The - important thing to note is that this may be done directly by the - encoder rather than in a prior canonicalization step in some - implementations. - - NOTE: There is no need to worry about quoting potential boundary - delimiters within base64-encoded bodies within multipart entities - because no hyphen characters are used in the base64 encoding. - -7. Content-ID Header Field - - In constructing a high-level user agent, it may be desirable to allow - one body to make reference to another. Accordingly, bodies may be - labelled using the "Content-ID" header field, which is syntactically - identical to the "Message-ID" header field: - - id := "Content-ID" ":" msg-id - - Like the Message-ID values, Content-ID values must be generated to be - world-unique. - - The Content-ID value may be used for uniquely identifying MIME - entities in several contexts, particularly for caching data - referenced by the message/external-body mechanism. Although the - Content-ID header is generally optional, its use is MANDATORY in - implementations which generate data of the optional MIME media type - "message/external-body". That is, each message/external-body entity - must have a Content-ID field to permit caching of such data. - - It is also worth noting that the Content-ID value has special - semantics in the case of the multipart/alternative media type. This - is explained in the section of RFC 2046 dealing with - multipart/alternative. - - - - - - - - -Freed & Borenstein Standards Track [Page 26] - -RFC 2045 Internet Message Bodies November 1996 - - -8. Content-Description Header Field - - The ability to associate some descriptive information with a given - body is often desirable. For example, it may be useful to mark an - "image" body as "a picture of the Space Shuttle Endeavor." Such text - may be placed in the Content-Description header field. This header - field is always optional. - - description := "Content-Description" ":" *text - - The description is presumed to be given in the US-ASCII character - set, although the mechanism specified in RFC 2047 may be used for - non-US-ASCII Content-Description values. - -9. Additional MIME Header Fields - - Future documents may elect to define additional MIME header fields - for various purposes. Any new header field that further describes - the content of a message should begin with the string "Content-" to - allow such fields which appear in a message header to be - distinguished from ordinary RFC 822 message header fields. - - MIME-extension-field := <Any RFC 822 header field which - begins with the string - "Content-"> - -10. Summary - - Using the MIME-Version, Content-Type, and Content-Transfer-Encoding - header fields, it is possible to include, in a standardized way, - arbitrary types of data with RFC 822 conformant mail messages. No - restrictions imposed by either RFC 821 or RFC 822 are violated, and - care has been taken to avoid problems caused by additional - restrictions imposed by the characteristics of some Internet mail - transport mechanisms (see RFC 2049). - - The next document in this set, RFC 2046, specifies the initial set of - media types that can be labelled and transported using these headers. - -11. Security Considerations - - Security issues are discussed in the second document in this set, RFC - 2046. - - - - - - - - -Freed & Borenstein Standards Track [Page 27] - -RFC 2045 Internet Message Bodies November 1996 - - -12. Authors' Addresses - - For more information, the authors of this document are best contacted - via Internet mail: - - Ned Freed - Innosoft International, Inc. - 1050 East Garvey Avenue South - West Covina, CA 91790 - USA - - Phone: +1 818 919 3600 - Fax: +1 818 919 3614 - EMail: ned@innosoft.com - - - Nathaniel S. Borenstein - First Virtual Holdings - 25 Washington Avenue - Morristown, NJ 07960 - USA - - Phone: +1 201 540 8967 - Fax: +1 201 993 3032 - EMail: nsb@nsb.fv.com - - - MIME is a result of the work of the Internet Engineering Task Force - Working Group on RFC 822 Extensions. The chairman of that group, - Greg Vaudreuil, may be reached at: - - Gregory M. Vaudreuil - Octel Network Services - 17080 Dallas Parkway - Dallas, TX 75248-1905 - USA - - EMail: Greg.Vaudreuil@Octel.Com - - - - - - - - - - - - - -Freed & Borenstein Standards Track [Page 28] - -RFC 2045 Internet Message Bodies November 1996 - - -Appendix A -- Collected Grammar - - This appendix contains the complete BNF grammar for all the syntax - specified by this document. - - By itself, however, this grammar is incomplete. It refers by name to - several syntax rules that are defined by RFC 822. Rather than - reproduce those definitions here, and risk unintentional differences - between the two, this document simply refers the reader to RFC 822 - for the remaining definitions. Wherever a term is undefined, it - refers to the RFC 822 definition. - - attribute := token - ; Matching of attributes - ; is ALWAYS case-insensitive. - - composite-type := "message" / "multipart" / extension-token - - content := "Content-Type" ":" type "/" subtype - *(";" parameter) - ; Matching of media type and subtype - ; is ALWAYS case-insensitive. - - description := "Content-Description" ":" *text - - discrete-type := "text" / "image" / "audio" / "video" / - "application" / extension-token - - encoding := "Content-Transfer-Encoding" ":" mechanism - - entity-headers := [ content CRLF ] - [ encoding CRLF ] - [ id CRLF ] - [ description CRLF ] - *( MIME-extension-field CRLF ) - - extension-token := ietf-token / x-token - - hex-octet := "=" 2(DIGIT / "A" / "B" / "C" / "D" / "E" / "F") - ; Octet must be used for characters > 127, =, - ; SPACEs or TABs at the ends of lines, and is - ; recommended for any character not listed in - ; RFC 2049 as "mail-safe". - - iana-token := <A publicly-defined extension token. Tokens - of this form must be registered with IANA - as specified in RFC 2048.> - - - - -Freed & Borenstein Standards Track [Page 29] - -RFC 2045 Internet Message Bodies November 1996 - - - ietf-token := <An extension token defined by a - standards-track RFC and registered - with IANA.> - - id := "Content-ID" ":" msg-id - - mechanism := "7bit" / "8bit" / "binary" / - "quoted-printable" / "base64" / - ietf-token / x-token - - MIME-extension-field := <Any RFC 822 header field which - begins with the string - "Content-"> - - MIME-message-headers := entity-headers - fields - version CRLF - ; The ordering of the header - ; fields implied by this BNF - ; definition should be ignored. - - MIME-part-headers := entity-headers - [fields] - ; Any field not beginning with - ; "content-" can have no defined - ; meaning and may be ignored. - ; The ordering of the header - ; fields implied by this BNF - ; definition should be ignored. - - parameter := attribute "=" value - - ptext := hex-octet / safe-char - - qp-line := *(qp-segment transport-padding CRLF) - qp-part transport-padding - - qp-part := qp-section - ; Maximum length of 76 characters - - qp-section := [*(ptext / SPACE / TAB) ptext] - - qp-segment := qp-section *(SPACE / TAB) "=" - ; Maximum length of 76 characters - - quoted-printable := qp-line *(CRLF qp-line) - - - - - -Freed & Borenstein Standards Track [Page 30] - -RFC 2045 Internet Message Bodies November 1996 - - - safe-char := <any octet with decimal value of 33 through - 60 inclusive, and 62 through 126> - ; Characters not listed as "mail-safe" in - ; RFC 2049 are also not recommended. - - subtype := extension-token / iana-token - - token := 1*<any (US-ASCII) CHAR except SPACE, CTLs, - or tspecials> - - transport-padding := *LWSP-char - ; Composers MUST NOT generate - ; non-zero length transport - ; padding, but receivers MUST - ; be able to handle padding - ; added by message transports. - - tspecials := "(" / ")" / "<" / ">" / "@" / - "," / ";" / ":" / "\" / <"> - "/" / "[" / "]" / "?" / "=" - ; Must be in quoted-string, - ; to use within parameter values - - type := discrete-type / composite-type - - value := token / quoted-string - - version := "MIME-Version" ":" 1*DIGIT "." 1*DIGIT - - x-token := <The two characters "X-" or "x-" followed, with - no intervening white space, by any token> - - - - - - - - - - - - - - - - - - - - -Freed & Borenstein Standards Track [Page 31] - diff --git a/doc/src/rfc2046.txt b/doc/src/rfc2046.txt deleted file mode 100644 index 84d90c109..000000000 --- a/doc/src/rfc2046.txt +++ /dev/null @@ -1,2467 +0,0 @@ - - - - - - -Network Working Group N. Freed -Request for Comments: 2046 Innosoft -Obsoletes: 1521, 1522, 1590 N. Borenstein -Category: Standards Track First Virtual - November 1996 - - - Multipurpose Internet Mail Extensions - (MIME) Part Two: - Media Types - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Abstract - - STD 11, RFC 822 defines a message representation protocol specifying - considerable detail about US-ASCII message headers, but which leaves - the message content, or message body, as flat US-ASCII text. This - set of documents, collectively called the Multipurpose Internet Mail - Extensions, or MIME, redefines the format of messages to allow for - - (1) textual message bodies in character sets other than - US-ASCII, - - (2) an extensible set of different formats for non-textual - message bodies, - - (3) multi-part message bodies, and - - (4) textual header information in character sets other than - US-ASCII. - - These documents are based on earlier work documented in RFC 934, STD - 11, and RFC 1049, but extends and revises them. Because RFC 822 said - so little about message bodies, these documents are largely - orthogonal to (rather than a revision of) RFC 822. - - The initial document in this set, RFC 2045, specifies the various - headers used to describe the structure of MIME messages. This second - document defines the general structure of the MIME media typing - system and defines an initial set of media types. The third document, - RFC 2047, describes extensions to RFC 822 to allow non-US-ASCII text - - - -Freed & Borenstein Standards Track [Page 1] - -RFC 2046 Media Types November 1996 - - - data in Internet mail header fields. The fourth document, RFC 2048, - specifies various IANA registration procedures for MIME-related - facilities. The fifth and final document, RFC 2049, describes MIME - conformance criteria as well as providing some illustrative examples - of MIME message formats, acknowledgements, and the bibliography. - - These documents are revisions of RFCs 1521 and 1522, which themselves - were revisions of RFCs 1341 and 1342. An appendix in RFC 2049 - describes differences and changes from previous versions. - -Table of Contents - - 1. Introduction ......................................... 3 - 2. Definition of a Top-Level Media Type ................. 4 - 3. Overview Of The Initial Top-Level Media Types ........ 4 - 4. Discrete Media Type Values ........................... 6 - 4.1 Text Media Type ..................................... 6 - 4.1.1 Representation of Line Breaks ..................... 7 - 4.1.2 Charset Parameter ................................. 7 - 4.1.3 Plain Subtype ..................................... 11 - 4.1.4 Unrecognized Subtypes ............................. 11 - 4.2 Image Media Type .................................... 11 - 4.3 Audio Media Type .................................... 11 - 4.4 Video Media Type .................................... 12 - 4.5 Application Media Type .............................. 12 - 4.5.1 Octet-Stream Subtype .............................. 13 - 4.5.2 PostScript Subtype ................................ 14 - 4.5.3 Other Application Subtypes ........................ 17 - 5. Composite Media Type Values .......................... 17 - 5.1 Multipart Media Type ................................ 17 - 5.1.1 Common Syntax ..................................... 19 - 5.1.2 Handling Nested Messages and Multiparts ........... 24 - 5.1.3 Mixed Subtype ..................................... 24 - 5.1.4 Alternative Subtype ............................... 24 - 5.1.5 Digest Subtype .................................... 26 - 5.1.6 Parallel Subtype .................................. 27 - 5.1.7 Other Multipart Subtypes .......................... 28 - 5.2 Message Media Type .................................. 28 - 5.2.1 RFC822 Subtype .................................... 28 - 5.2.2 Partial Subtype ................................... 29 - 5.2.2.1 Message Fragmentation and Reassembly ............ 30 - 5.2.2.2 Fragmentation and Reassembly Example ............ 31 - 5.2.3 External-Body Subtype ............................. 33 - 5.2.4 Other Message Subtypes ............................ 40 - 6. Experimental Media Type Values ....................... 40 - 7. Summary .............................................. 41 - 8. Security Considerations .............................. 41 - 9. Authors' Addresses ................................... 42 - - - -Freed & Borenstein Standards Track [Page 2] - -RFC 2046 Media Types November 1996 - - - A. Collected Grammar .................................... 43 - -1. Introduction - - The first document in this set, RFC 2045, defines a number of header - fields, including Content-Type. The Content-Type field is used to - specify the nature of the data in the body of a MIME entity, by - giving media type and subtype identifiers, and by providing auxiliary - information that may be required for certain media types. After the - type and subtype names, the remainder of the header field is simply a - set of parameters, specified in an attribute/value notation. The - ordering of parameters is not significant. - - In general, the top-level media type is used to declare the general - type of data, while the subtype specifies a specific format for that - type of data. Thus, a media type of "image/xyz" is enough to tell a - user agent that the data is an image, even if the user agent has no - knowledge of the specific image format "xyz". Such information can - be used, for example, to decide whether or not to show a user the raw - data from an unrecognized subtype -- such an action might be - reasonable for unrecognized subtypes of "text", but not for - unrecognized subtypes of "image" or "audio". For this reason, - registered subtypes of "text", "image", "audio", and "video" should - not contain embedded information that is really of a different type. - Such compound formats should be represented using the "multipart" or - "application" types. - - Parameters are modifiers of the media subtype, and as such do not - fundamentally affect the nature of the content. The set of - meaningful parameters depends on the media type and subtype. Most - parameters are associated with a single specific subtype. However, a - given top-level media type may define parameters which are applicable - to any subtype of that type. Parameters may be required by their - defining media type or subtype or they may be optional. MIME - implementations must also ignore any parameters whose names they do - not recognize. - - MIME's Content-Type header field and media type mechanism has been - carefully designed to be extensible, and it is expected that the set - of media type/subtype pairs and their associated parameters will grow - significantly over time. Several other MIME facilities, such as - transfer encodings and "message/external-body" access types, are - likely to have new values defined over time. In order to ensure that - the set of such values is developed in an orderly, well-specified, - and public manner, MIME sets up a registration process which uses the - Internet Assigned Numbers Authority (IANA) as a central registry for - MIME's various areas of extensibility. The registration process for - these areas is described in a companion document, RFC 2048. - - - -Freed & Borenstein Standards Track [Page 3] - -RFC 2046 Media Types November 1996 - - - The initial seven standard top-level media type are defined and - described in the remainder of this document. - -2. Definition of a Top-Level Media Type - - The definition of a top-level media type consists of: - - (1) a name and a description of the type, including - criteria for whether a particular type would qualify - under that type, - - (2) the names and definitions of parameters, if any, which - are defined for all subtypes of that type (including - whether such parameters are required or optional), - - (3) how a user agent and/or gateway should handle unknown - subtypes of this type, - - (4) general considerations on gatewaying entities of this - top-level type, if any, and - - (5) any restrictions on content-transfer-encodings for - entities of this top-level type. - -3. Overview Of The Initial Top-Level Media Types - - The five discrete top-level media types are: - - (1) text -- textual information. The subtype "plain" in - particular indicates plain text containing no - formatting commands or directives of any sort. Plain - text is intended to be displayed "as-is". No special - software is required to get the full meaning of the - text, aside from support for the indicated character - set. Other subtypes are to be used for enriched text in - forms where application software may enhance the - appearance of the text, but such software must not be - required in order to get the general idea of the - content. Possible subtypes of "text" thus include any - word processor format that can be read without - resorting to software that understands the format. In - particular, formats that employ embeddded binary - formatting information are not considered directly - readable. A very simple and portable subtype, - "richtext", was defined in RFC 1341, with a further - revision in RFC 1896 under the name "enriched". - - - - - -Freed & Borenstein Standards Track [Page 4] - -RFC 2046 Media Types November 1996 - - - (2) image -- image data. "Image" requires a display device - (such as a graphical display, a graphics printer, or a - FAX machine) to view the information. An initial - subtype is defined for the widely-used image format - JPEG. . subtypes are defined for two widely-used image - formats, jpeg and gif. - - (3) audio -- audio data. "Audio" requires an audio output - device (such as a speaker or a telephone) to "display" - the contents. An initial subtype "basic" is defined in - this document. - - (4) video -- video data. "Video" requires the capability - to display moving images, typically including - specialized hardware and software. An initial subtype - "mpeg" is defined in this document. - - (5) application -- some other kind of data, typically - either uninterpreted binary data or information to be - processed by an application. The subtype "octet- - stream" is to be used in the case of uninterpreted - binary data, in which case the simplest recommended - action is to offer to write the information into a file - for the user. The "PostScript" subtype is also defined - for the transport of PostScript material. Other - expected uses for "application" include spreadsheets, - data for mail-based scheduling systems, and languages - for "active" (computational) messaging, and word - processing formats that are not directly readable. - Note that security considerations may exist for some - types of application data, most notably - "application/PostScript" and any form of active - messaging. These issues are discussed later in this - document. - - The two composite top-level media types are: - - (1) multipart -- data consisting of multiple entities of - independent data types. Four subtypes are initially - defined, including the basic "mixed" subtype specifying - a generic mixed set of parts, "alternative" for - representing the same data in multiple formats, - "parallel" for parts intended to be viewed - simultaneously, and "digest" for multipart entities in - which each part has a default type of "message/rfc822". - - - - - - -Freed & Borenstein Standards Track [Page 5] - -RFC 2046 Media Types November 1996 - - - (2) message -- an encapsulated message. A body of media - type "message" is itself all or a portion of some kind - of message object. Such objects may or may not in turn - contain other entities. The "rfc822" subtype is used - when the encapsulated content is itself an RFC 822 - message. The "partial" subtype is defined for partial - RFC 822 messages, to permit the fragmented transmission - of bodies that are thought to be too large to be passed - through transport facilities in one piece. Another - subtype, "external-body", is defined for specifying - large bodies by reference to an external data source. - - It should be noted that the list of media type values given here may - be augmented in time, via the mechanisms described above, and that - the set of subtypes is expected to grow substantially. - -4. Discrete Media Type Values - - Five of the seven initial media type values refer to discrete bodies. - The content of these types must be handled by non-MIME mechanisms; - they are opaque to MIME processors. - -4.1. Text Media Type - - The "text" media type is intended for sending material which is - principally textual in form. A "charset" parameter may be used to - indicate the character set of the body text for "text" subtypes, - notably including the subtype "text/plain", which is a generic - subtype for plain text. Plain text does not provide for or allow - formatting commands, font attribute specifications, processing - instructions, interpretation directives, or content markup. Plain - text is seen simply as a linear sequence of characters, possibly - interrupted by line breaks or page breaks. Plain text may allow the - stacking of several characters in the same position in the text. - Plain text in scripts like Arabic and Hebrew may also include - facilitites that allow the arbitrary mixing of text segments with - opposite writing directions. - - Beyond plain text, there are many formats for representing what might - be known as "rich text". An interesting characteristic of many such - representations is that they are to some extent readable even without - the software that interprets them. It is useful, then, to - distinguish them, at the highest level, from such unreadable data as - images, audio, or text represented in an unreadable form. In the - absence of appropriate interpretation software, it is reasonable to - show subtypes of "text" to the user, while it is not reasonable to do - so with most nontextual data. Such formatted textual data should be - represented using subtypes of "text". - - - -Freed & Borenstein Standards Track [Page 6] - -RFC 2046 Media Types November 1996 - - -4.1.1. Representation of Line Breaks - - The canonical form of any MIME "text" subtype MUST always represent a - line break as a CRLF sequence. Similarly, any occurrence of CRLF in - MIME "text" MUST represent a line break. Use of CR and LF outside of - line break sequences is also forbidden. - - This rule applies regardless of format or character set or sets - involved. - - NOTE: The proper interpretation of line breaks when a body is - displayed depends on the media type. In particular, while it is - appropriate to treat a line break as a transition to a new line when - displaying a "text/plain" body, this treatment is actually incorrect - for other subtypes of "text" like "text/enriched" [RFC-1896]. - Similarly, whether or not line breaks should be added during display - operations is also a function of the media type. It should not be - necessary to add any line breaks to display "text/plain" correctly, - whereas proper display of "text/enriched" requires the appropriate - addition of line breaks. - - NOTE: Some protocols defines a maximum line length. E.g. SMTP [RFC- - 821] allows a maximum of 998 octets before the next CRLF sequence. - To be transported by such protocols, data which includes too long - segments without CRLF sequences must be encoded with a suitable - content-transfer-encoding. - -4.1.2. Charset Parameter - - A critical parameter that may be specified in the Content-Type field - for "text/plain" data is the character set. This is specified with a - "charset" parameter, as in: - - Content-type: text/plain; charset=iso-8859-1 - - Unlike some other parameter values, the values of the charset - parameter are NOT case sensitive. The default character set, which - must be assumed in the absence of a charset parameter, is US-ASCII. - - The specification for any future subtypes of "text" must specify - whether or not they will also utilize a "charset" parameter, and may - possibly restrict its values as well. For other subtypes of "text" - than "text/plain", the semantics of the "charset" parameter should be - defined to be identical to those specified here for "text/plain", - i.e., the body consists entirely of characters in the given charset. - In particular, definers of future "text" subtypes should pay close - attention to the implications of multioctet character sets for their - subtype definitions. - - - -Freed & Borenstein Standards Track [Page 7] - -RFC 2046 Media Types November 1996 - - - The charset parameter for subtypes of "text" gives a name of a - character set, as "character set" is defined in RFC 2045. The rules - regarding line breaks detailed in the previous section must also be - observed -- a character set whose definition does not conform to - these rules cannot be used in a MIME "text" subtype. - - An initial list of predefined character set names can be found at the - end of this section. Additional character sets may be registered - with IANA. - - Other media types than subtypes of "text" might choose to employ the - charset parameter as defined here, but with the CRLF/line break - restriction removed. Therefore, all character sets that conform to - the general definition of "character set" in RFC 2045 can be - registered for MIME use. - - Note that if the specified character set includes 8-bit characters - and such characters are used in the body, a Content-Transfer-Encoding - header field and a corresponding encoding on the data are required in - order to transmit the body via some mail transfer protocols, such as - SMTP [RFC-821]. - - The default character set, US-ASCII, has been the subject of some - confusion and ambiguity in the past. Not only were there some - ambiguities in the definition, there have been wide variations in - practice. In order to eliminate such ambiguity and variations in the - future, it is strongly recommended that new user agents explicitly - specify a character set as a media type parameter in the Content-Type - header field. "US-ASCII" does not indicate an arbitrary 7-bit - character set, but specifies that all octets in the body must be - interpreted as characters according to the US-ASCII character set. - National and application-oriented versions of ISO 646 [ISO-646] are - usually NOT identical to US-ASCII, and in that case their use in - Internet mail is explicitly discouraged. The omission of the ISO 646 - character set from this document is deliberate in this regard. The - character set name of "US-ASCII" explicitly refers to the character - set defined in ANSI X3.4-1986 [US- ASCII]. The new international - reference version (IRV) of the 1991 edition of ISO 646 is identical - to US-ASCII. The character set name "ASCII" is reserved and must not - be used for any purpose. - - NOTE: RFC 821 explicitly specifies "ASCII", and references an earlier - version of the American Standard. Insofar as one of the purposes of - specifying a media type and character set is to permit the receiver - to unambiguously determine how the sender intended the coded message - to be interpreted, assuming anything other than "strict ASCII" as the - default would risk unintentional and incompatible changes to the - semantics of messages now being transmitted. This also implies that - - - -Freed & Borenstein Standards Track [Page 8] - -RFC 2046 Media Types November 1996 - - - messages containing characters coded according to other versions of - ISO 646 than US-ASCII and the 1991 IRV, or using code-switching - procedures (e.g., those of ISO 2022), as well as 8bit or multiple - octet character encodings MUST use an appropriate character set - specification to be consistent with MIME. - - The complete US-ASCII character set is listed in ANSI X3.4- 1986. - Note that the control characters including DEL (0-31, 127) have no - defined meaning in apart from the combination CRLF (US-ASCII values - 13 and 10) indicating a new line. Two of the characters have de - facto meanings in wide use: FF (12) often means "start subsequent - text on the beginning of a new page"; and TAB or HT (9) often (though - not always) means "move the cursor to the next available column after - the current position where the column number is a multiple of 8 - (counting the first column as column 0)." Aside from these - conventions, any use of the control characters or DEL in a body must - either occur - - (1) because a subtype of text other than "plain" - specifically assigns some additional meaning, or - - (2) within the context of a private agreement between the - sender and recipient. Such private agreements are - discouraged and should be replaced by the other - capabilities of this document. - - NOTE: An enormous proliferation of character sets exist beyond US- - ASCII. A large number of partially or totally overlapping character - sets is NOT a good thing. A SINGLE character set that can be used - universally for representing all of the world's languages in Internet - mail would be preferrable. Unfortunately, existing practice in - several communities seems to point to the continued use of multiple - character sets in the near future. A small number of standard - character sets are, therefore, defined for Internet use in this - document. - - The defined charset values are: - - (1) US-ASCII -- as defined in ANSI X3.4-1986 [US-ASCII]. - - (2) ISO-8859-X -- where "X" is to be replaced, as - necessary, for the parts of ISO-8859 [ISO-8859]. Note - that the ISO 646 character sets have deliberately been - omitted in favor of their 8859 replacements, which are - the designated character sets for Internet mail. As of - the publication of this document, the legitimate values - for "X" are the digits 1 through 10. - - - - -Freed & Borenstein Standards Track [Page 9] - -RFC 2046 Media Types November 1996 - - - Characters in the range 128-159 has no assigned meaning in ISO-8859- - X. Characters with values below 128 in ISO-8859-X have the same - assigned meaning as they do in US-ASCII. - - Part 6 of ISO 8859 (Latin/Arabic alphabet) and part 8 (Latin/Hebrew - alphabet) includes both characters for which the normal writing - direction is right to left and characters for which it is left to - right, but do not define a canonical ordering method for representing - bi-directional text. The charset values "ISO-8859-6" and "ISO-8859- - 8", however, specify that the visual method is used [RFC-1556]. - - All of these character sets are used as pure 7bit or 8bit sets - without any shift or escape functions. The meaning of shift and - escape sequences in these character sets is not defined. - - The character sets specified above are the ones that were relatively - uncontroversial during the drafting of MIME. This document does not - endorse the use of any particular character set other than US-ASCII, - and recognizes that the future evolution of world character sets - remains unclear. - - Note that the character set used, if anything other than US- ASCII, - must always be explicitly specified in the Content-Type field. - - No character set name other than those defined above may be used in - Internet mail without the publication of a formal specification and - its registration with IANA, or by private agreement, in which case - the character set name must begin with "X-". - - Implementors are discouraged from defining new character sets unless - absolutely necessary. - - The "charset" parameter has been defined primarily for the purpose of - textual data, and is described in this section for that reason. - However, it is conceivable that non-textual data might also wish to - specify a charset value for some purpose, in which case the same - syntax and values should be used. - - In general, composition software should always use the "lowest common - denominator" character set possible. For example, if a body contains - only US-ASCII characters, it SHOULD be marked as being in the US- - ASCII character set, not ISO-8859-1, which, like all the ISO-8859 - family of character sets, is a superset of US-ASCII. More generally, - if a widely-used character set is a subset of another character set, - and a body contains only characters in the widely-used subset, it - should be labelled as being in that subset. This will increase the - chances that the recipient will be able to view the resulting entity - correctly. - - - -Freed & Borenstein Standards Track [Page 10] - -RFC 2046 Media Types November 1996 - - -4.1.3. Plain Subtype - - The simplest and most important subtype of "text" is "plain". This - indicates plain text that does not contain any formatting commands or - directives. Plain text is intended to be displayed "as-is", that is, - no interpretation of embedded formatting commands, font attribute - specifications, processing instructions, interpretation directives, - or content markup should be necessary for proper display. The - default media type of "text/plain; charset=us-ascii" for Internet - mail describes existing Internet practice. That is, it is the type - of body defined by RFC 822. - - No other "text" subtype is defined by this document. - -4.1.4. Unrecognized Subtypes - - Unrecognized subtypes of "text" should be treated as subtype "plain" - as long as the MIME implementation knows how to handle the charset. - Unrecognized subtypes which also specify an unrecognized charset - should be treated as "application/octet- stream". - -4.2. Image Media Type - - A media type of "image" indicates that the body contains an image. - The subtype names the specific image format. These names are not - case sensitive. An initial subtype is "jpeg" for the JPEG format - using JFIF encoding [JPEG]. - - The list of "image" subtypes given here is neither exclusive nor - exhaustive, and is expected to grow as more types are registered with - IANA, as described in RFC 2048. - - Unrecognized subtypes of "image" should at a miniumum be treated as - "application/octet-stream". Implementations may optionally elect to - pass subtypes of "image" that they do not specifically recognize to a - secure and robust general-purpose image viewing application, if such - an application is available. - - NOTE: Using of a generic-purpose image viewing application this way - inherits the security problems of the most dangerous type supported - by the application. - -4.3. Audio Media Type - - A media type of "audio" indicates that the body contains audio data. - Although there is not yet a consensus on an "ideal" audio format for - use with computers, there is a pressing need for a format capable of - providing interoperable behavior. - - - -Freed & Borenstein Standards Track [Page 11] - -RFC 2046 Media Types November 1996 - - - The initial subtype of "basic" is specified to meet this requirement - by providing an absolutely minimal lowest common denominator audio - format. It is expected that richer formats for higher quality and/or - lower bandwidth audio will be defined by a later document. - - The content of the "audio/basic" subtype is single channel audio - encoded using 8bit ISDN mu-law [PCM] at a sample rate of 8000 Hz. - - Unrecognized subtypes of "audio" should at a miniumum be treated as - "application/octet-stream". Implementations may optionally elect to - pass subtypes of "audio" that they do not specifically recognize to a - robust general-purpose audio playing application, if such an - application is available. - -4.4. Video Media Type - - A media type of "video" indicates that the body contains a time- - varying-picture image, possibly with color and coordinated sound. - The term 'video' is used in its most generic sense, rather than with - reference to any particular technology or format, and is not meant to - preclude subtypes such as animated drawings encoded compactly. The - subtype "mpeg" refers to video coded according to the MPEG standard - [MPEG]. - - Note that although in general this document strongly discourages the - mixing of multiple media in a single body, it is recognized that many - so-called video formats include a representation for synchronized - audio, and this is explicitly permitted for subtypes of "video". - - Unrecognized subtypes of "video" should at a minumum be treated as - "application/octet-stream". Implementations may optionally elect to - pass subtypes of "video" that they do not specifically recognize to a - robust general-purpose video display application, if such an - application is available. - -4.5. Application Media Type - - The "application" media type is to be used for discrete data which do - not fit in any of the other categories, and particularly for data to - be processed by some type of application program. This is - information which must be processed by an application before it is - viewable or usable by a user. Expected uses for the "application" - media type include file transfer, spreadsheets, data for mail-based - scheduling systems, and languages for "active" (computational) - material. (The latter, in particular, can pose security problems - which must be understood by implementors, and are considered in - detail in the discussion of the "application/PostScript" media type.) - - - - -Freed & Borenstein Standards Track [Page 12] - -RFC 2046 Media Types November 1996 - - - For example, a meeting scheduler might define a standard - representation for information about proposed meeting dates. An - intelligent user agent would use this information to conduct a dialog - with the user, and might then send additional material based on that - dialog. More generally, there have been several "active" messaging - languages developed in which programs in a suitably specialized - language are transported to a remote location and automatically run - in the recipient's environment. - - Such applications may be defined as subtypes of the "application" - media type. This document defines two subtypes: - - octet-stream, and PostScript. - - The subtype of "application" will often be either the name or include - part of the name of the application for which the data are intended. - This does not mean, however, that any application program name may be - used freely as a subtype of "application". - -4.5.1. Octet-Stream Subtype - - The "octet-stream" subtype is used to indicate that a body contains - arbitrary binary data. The set of currently defined parameters is: - - (1) TYPE -- the general type or category of binary data. - This is intended as information for the human recipient - rather than for any automatic processing. - - (2) PADDING -- the number of bits of padding that were - appended to the bit-stream comprising the actual - contents to produce the enclosed 8bit byte-oriented - data. This is useful for enclosing a bit-stream in a - body when the total number of bits is not a multiple of - 8. - - Both of these parameters are optional. - - An additional parameter, "CONVERSIONS", was defined in RFC 1341 but - has since been removed. RFC 1341 also defined the use of a "NAME" - parameter which gave a suggested file name to be used if the data - were to be written to a file. This has been deprecated in - anticipation of a separate Content-Disposition header field, to be - defined in a subsequent RFC. - - The recommended action for an implementation that receives an - "application/octet-stream" entity is to simply offer to put the data - in a file, with any Content-Transfer-Encoding undone, or perhaps to - use it as input to a user-specified process. - - - -Freed & Borenstein Standards Track [Page 13] - -RFC 2046 Media Types November 1996 - - - To reduce the danger of transmitting rogue programs, it is strongly - recommended that implementations NOT implement a path-search - mechanism whereby an arbitrary program named in the Content-Type - parameter (e.g., an "interpreter=" parameter) is found and executed - using the message body as input. - -4.5.2. PostScript Subtype - - A media type of "application/postscript" indicates a PostScript - program. Currently two variants of the PostScript language are - allowed; the original level 1 variant is described in [POSTSCRIPT] - and the more recent level 2 variant is described in [POSTSCRIPT2]. - - PostScript is a registered trademark of Adobe Systems, Inc. Use of - the MIME media type "application/postscript" implies recognition of - that trademark and all the rights it entails. - - The PostScript language definition provides facilities for internal - labelling of the specific language features a given program uses. - This labelling, called the PostScript document structuring - conventions, or DSC, is very general and provides substantially more - information than just the language level. The use of document - structuring conventions, while not required, is strongly recommended - as an aid to interoperability. Documents which lack proper - structuring conventions cannot be tested to see whether or not they - will work in a given environment. As such, some systems may assume - the worst and refuse to process unstructured documents. - - The execution of general-purpose PostScript interpreters entails - serious security risks, and implementors are discouraged from simply - sending PostScript bodies to "off- the-shelf" interpreters. While it - is usually safe to send PostScript to a printer, where the potential - for harm is greatly constrained by typical printer environments, - implementors should consider all of the following before they add - interactive display of PostScript bodies to their MIME readers. - - The remainder of this section outlines some, though probably not all, - of the possible problems with the transport of PostScript entities. - - (1) Dangerous operations in the PostScript language - include, but may not be limited to, the PostScript - operators "deletefile", "renamefile", "filenameforall", - and "file". "File" is only dangerous when applied to - something other than standard input or output. - Implementations may also define additional nonstandard - file operators; these may also pose a threat to - security. "Filenameforall", the wildcard file search - operator, may appear at first glance to be harmless. - - - -Freed & Borenstein Standards Track [Page 14] - -RFC 2046 Media Types November 1996 - - - Note, however, that this operator has the potential to - reveal information about what files the recipient has - access to, and this information may itself be - sensitive. Message senders should avoid the use of - potentially dangerous file operators, since these - operators are quite likely to be unavailable in secure - PostScript implementations. Message receiving and - displaying software should either completely disable - all potentially dangerous file operators or take - special care not to delegate any special authority to - their operation. These operators should be viewed as - being done by an outside agency when interpreting - PostScript documents. Such disabling and/or checking - should be done completely outside of the reach of the - PostScript language itself; care should be taken to - insure that no method exists for re-enabling full- - function versions of these operators. - - (2) The PostScript language provides facilities for exiting - the normal interpreter, or server, loop. Changes made - in this "outer" environment are customarily retained - across documents, and may in some cases be retained - semipermanently in nonvolatile memory. The operators - associated with exiting the interpreter loop have the - potential to interfere with subsequent document - processing. As such, their unrestrained use - constitutes a threat of service denial. PostScript - operators that exit the interpreter loop include, but - may not be limited to, the exitserver and startjob - operators. Message sending software should not - generate PostScript that depends on exiting the - interpreter loop to operate, since the ability to exit - will probably be unavailable in secure PostScript - implementations. Message receiving and displaying - software should completely disable the ability to make - retained changes to the PostScript environment by - eliminating or disabling the "startjob" and - "exitserver" operations. If these operations cannot be - eliminated or completely disabled the password - associated with them should at least be set to a hard- - to-guess value. - - (3) PostScript provides operators for setting system-wide - and device-specific parameters. These parameter - settings may be retained across jobs and may - potentially pose a threat to the correct operation of - the interpreter. The PostScript operators that set - system and device parameters include, but may not be - - - -Freed & Borenstein Standards Track [Page 15] - -RFC 2046 Media Types November 1996 - - - limited to, the "setsystemparams" and "setdevparams" - operators. Message sending software should not - generate PostScript that depends on the setting of - system or device parameters to operate correctly. The - ability to set these parameters will probably be - unavailable in secure PostScript implementations. - Message receiving and displaying software should - disable the ability to change system and device - parameters. If these operators cannot be completely - disabled the password associated with them should at - least be set to a hard-to-guess value. - - (4) Some PostScript implementations provide nonstandard - facilities for the direct loading and execution of - machine code. Such facilities are quite obviously open - to substantial abuse. Message sending software should - not make use of such features. Besides being totally - hardware-specific, they are also likely to be - unavailable in secure implementations of PostScript. - Message receiving and displaying software should not - allow such operators to be used if they exist. - - (5) PostScript is an extensible language, and many, if not - most, implementations of it provide a number of their - own extensions. This document does not deal with such - extensions explicitly since they constitute an unknown - factor. Message sending software should not make use - of nonstandard extensions; they are likely to be - missing from some implementations. Message receiving - and displaying software should make sure that any - nonstandard PostScript operators are secure and don't - present any kind of threat. - - (6) It is possible to write PostScript that consumes huge - amounts of various system resources. It is also - possible to write PostScript programs that loop - indefinitely. Both types of programs have the - potential to cause damage if sent to unsuspecting - recipients. Message-sending software should avoid the - construction and dissemination of such programs, which - is antisocial. Message receiving and displaying - software should provide appropriate mechanisms to abort - processing after a reasonable amount of time has - elapsed. In addition, PostScript interpreters should be - limited to the consumption of only a reasonable amount - of any given system resource. - - - - - -Freed & Borenstein Standards Track [Page 16] - -RFC 2046 Media Types November 1996 - - - (7) It is possible to include raw binary information inside - PostScript in various forms. This is not recommended - for use in Internet mail, both because it is not - supported by all PostScript interpreters and because it - significantly complicates the use of a MIME Content- - Transfer-Encoding. (Without such binary, PostScript - may typically be viewed as line-oriented data. The - treatment of CRLF sequences becomes extremely - problematic if binary and line-oriented data are mixed - in a single Postscript data stream.) - - (8) Finally, bugs may exist in some PostScript interpreters - which could possibly be exploited to gain unauthorized - access to a recipient's system. Apart from noting this - possibility, there is no specific action to take to - prevent this, apart from the timely correction of such - bugs if any are found. - -4.5.3. Other Application Subtypes - - It is expected that many other subtypes of "application" will be - defined in the future. MIME implementations must at a minimum treat - any unrecognized subtypes as being equivalent to "application/octet- - stream". - -5. Composite Media Type Values - - The remaining two of the seven initial Content-Type values refer to - composite entities. Composite entities are handled using MIME - mechanisms -- a MIME processor typically handles the body directly. - -5.1. Multipart Media Type - - In the case of multipart entities, in which one or more different - sets of data are combined in a single body, a "multipart" media type - field must appear in the entity's header. The body must then contain - one or more body parts, each preceded by a boundary delimiter line, - and the last one followed by a closing boundary delimiter line. - After its boundary delimiter line, each body part then consists of a - header area, a blank line, and a body area. Thus a body part is - similar to an RFC 822 message in syntax, but different in meaning. - - A body part is an entity and hence is NOT to be interpreted as - actually being an RFC 822 message. To begin with, NO header fields - are actually required in body parts. A body part that starts with a - blank line, therefore, is allowed and is a body part for which all - default values are to be assumed. In such a case, the absence of a - Content-Type header usually indicates that the corresponding body has - - - -Freed & Borenstein Standards Track [Page 17] - -RFC 2046 Media Types November 1996 - - - a content-type of "text/plain; charset=US-ASCII". - - The only header fields that have defined meaning for body parts are - those the names of which begin with "Content-". All other header - fields may be ignored in body parts. Although they should generally - be retained if at all possible, they may be discarded by gateways if - necessary. Such other fields are permitted to appear in body parts - but must not be depended on. "X-" fields may be created for - experimental or private purposes, with the recognition that the - information they contain may be lost at some gateways. - - NOTE: The distinction between an RFC 822 message and a body part is - subtle, but important. A gateway between Internet and X.400 mail, - for example, must be able to tell the difference between a body part - that contains an image and a body part that contains an encapsulated - message, the body of which is a JPEG image. In order to represent - the latter, the body part must have "Content-Type: message/rfc822", - and its body (after the blank line) must be the encapsulated message, - with its own "Content-Type: image/jpeg" header field. The use of - similar syntax facilitates the conversion of messages to body parts, - and vice versa, but the distinction between the two must be - understood by implementors. (For the special case in which parts - actually are messages, a "digest" subtype is also defined.) - - As stated previously, each body part is preceded by a boundary - delimiter line that contains the boundary delimiter. The boundary - delimiter MUST NOT appear inside any of the encapsulated parts, on a - line by itself or as the prefix of any line. This implies that it is - crucial that the composing agent be able to choose and specify a - unique boundary parameter value that does not contain the boundary - parameter value of an enclosing multipart as a prefix. - - All present and future subtypes of the "multipart" type must use an - identical syntax. Subtypes may differ in their semantics, and may - impose additional restrictions on syntax, but must conform to the - required syntax for the "multipart" type. This requirement ensures - that all conformant user agents will at least be able to recognize - and separate the parts of any multipart entity, even those of an - unrecognized subtype. - - As stated in the definition of the Content-Transfer-Encoding field - [RFC 2045], no encoding other than "7bit", "8bit", or "binary" is - permitted for entities of type "multipart". The "multipart" boundary - delimiters and header fields are always represented as 7bit US-ASCII - in any case (though the header fields may encode non-US-ASCII header - text as per RFC 2047) and data within the body parts can be encoded - on a part-by-part basis, with Content-Transfer-Encoding fields for - each appropriate body part. - - - -Freed & Borenstein Standards Track [Page 18] - -RFC 2046 Media Types November 1996 - - -5.1.1. Common Syntax - - This section defines a common syntax for subtypes of "multipart". - All subtypes of "multipart" must use this syntax. A simple example - of a multipart message also appears in this section. An example of a - more complex multipart message is given in RFC 2049. - - The Content-Type field for multipart entities requires one parameter, - "boundary". The boundary delimiter line is then defined as a line - consisting entirely of two hyphen characters ("-", decimal value 45) - followed by the boundary parameter value from the Content-Type header - field, optional linear whitespace, and a terminating CRLF. - - NOTE: The hyphens are for rough compatibility with the earlier RFC - 934 method of message encapsulation, and for ease of searching for - the boundaries in some implementations. However, it should be noted - that multipart messages are NOT completely compatible with RFC 934 - encapsulations; in particular, they do not obey RFC 934 quoting - conventions for embedded lines that begin with hyphens. This - mechanism was chosen over the RFC 934 mechanism because the latter - causes lines to grow with each level of quoting. The combination of - this growth with the fact that SMTP implementations sometimes wrap - long lines made the RFC 934 mechanism unsuitable for use in the event - that deeply-nested multipart structuring is ever desired. - - WARNING TO IMPLEMENTORS: The grammar for parameters on the Content- - type field is such that it is often necessary to enclose the boundary - parameter values in quotes on the Content-type line. This is not - always necessary, but never hurts. Implementors should be sure to - study the grammar carefully in order to avoid producing invalid - Content-type fields. Thus, a typical "multipart" Content-Type header - field might look like this: - - Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08j34c0p - - But the following is not valid: - - Content-Type: multipart/mixed; boundary=gc0pJq0M:08jU534c0p - - (because of the colon) and must instead be represented as - - Content-Type: multipart/mixed; boundary="gc0pJq0M:08jU534c0p" - - This Content-Type value indicates that the content consists of one or - more parts, each with a structure that is syntactically identical to - an RFC 822 message, except that the header area is allowed to be - completely empty, and that the parts are each preceded by the line - - - - -Freed & Borenstein Standards Track [Page 19] - -RFC 2046 Media Types November 1996 - - - --gc0pJq0M:08jU534c0p - - The boundary delimiter MUST occur at the beginning of a line, i.e., - following a CRLF, and the initial CRLF is considered to be attached - to the boundary delimiter line rather than part of the preceding - part. The boundary may be followed by zero or more characters of - linear whitespace. It is then terminated by either another CRLF and - the header fields for the next part, or by two CRLFs, in which case - there are no header fields for the next part. If no Content-Type - field is present it is assumed to be "message/rfc822" in a - "multipart/digest" and "text/plain" otherwise. - - NOTE: The CRLF preceding the boundary delimiter line is conceptually - attached to the boundary so that it is possible to have a part that - does not end with a CRLF (line break). Body parts that must be - considered to end with line breaks, therefore, must have two CRLFs - preceding the boundary delimiter line, the first of which is part of - the preceding body part, and the second of which is part of the - encapsulation boundary. - - Boundary delimiters must not appear within the encapsulated material, - and must be no longer than 70 characters, not counting the two - leading hyphens. - - The boundary delimiter line following the last body part is a - distinguished delimiter that indicates that no further body parts - will follow. Such a delimiter line is identical to the previous - delimiter lines, with the addition of two more hyphens after the - boundary parameter value. - - --gc0pJq0M:08jU534c0p-- - - NOTE TO IMPLEMENTORS: Boundary string comparisons must compare the - boundary value with the beginning of each candidate line. An exact - match of the entire candidate line is not required; it is sufficient - that the boundary appear in its entirety following the CRLF. - - There appears to be room for additional information prior to the - first boundary delimiter line and following the final boundary - delimiter line. These areas should generally be left blank, and - implementations must ignore anything that appears before the first - boundary delimiter line or after the last one. - - NOTE: These "preamble" and "epilogue" areas are generally not used - because of the lack of proper typing of these parts and the lack of - clear semantics for handling these areas at gateways, particularly - X.400 gateways. However, rather than leaving the preamble area - blank, many MIME implementations have found this to be a convenient - - - -Freed & Borenstein Standards Track [Page 20] - -RFC 2046 Media Types November 1996 - - - place to insert an explanatory note for recipients who read the - message with pre-MIME software, since such notes will be ignored by - MIME-compliant software. - - NOTE: Because boundary delimiters must not appear in the body parts - being encapsulated, a user agent must exercise care to choose a - unique boundary parameter value. The boundary parameter value in the - example above could have been the result of an algorithm designed to - produce boundary delimiters with a very low probability of already - existing in the data to be encapsulated without having to prescan the - data. Alternate algorithms might result in more "readable" boundary - delimiters for a recipient with an old user agent, but would require - more attention to the possibility that the boundary delimiter might - appear at the beginning of some line in the encapsulated part. The - simplest boundary delimiter line possible is something like "---", - with a closing boundary delimiter line of "-----". - - As a very simple example, the following multipart message has two - parts, both of them plain text, one of them explicitly typed and one - of them implicitly typed: - - From: Nathaniel Borenstein <nsb@bellcore.com> - To: Ned Freed <ned@innosoft.com> - Date: Sun, 21 Mar 1993 23:56:48 -0800 (PST) - Subject: Sample message - MIME-Version: 1.0 - Content-type: multipart/mixed; boundary="simple boundary" - - This is the preamble. It is to be ignored, though it - is a handy place for composition agents to include an - explanatory note to non-MIME conformant readers. - - --simple boundary - - This is implicitly typed plain US-ASCII text. - It does NOT end with a linebreak. - --simple boundary - Content-type: text/plain; charset=us-ascii - - This is explicitly typed plain US-ASCII text. - It DOES end with a linebreak. - - --simple boundary-- - - This is the epilogue. It is also to be ignored. - - - - - - -Freed & Borenstein Standards Track [Page 21] - -RFC 2046 Media Types November 1996 - - - The use of a media type of "multipart" in a body part within another - "multipart" entity is explicitly allowed. In such cases, for obvious - reasons, care must be taken to ensure that each nested "multipart" - entity uses a different boundary delimiter. See RFC 2049 for an - example of nested "multipart" entities. - - The use of the "multipart" media type with only a single body part - may be useful in certain contexts, and is explicitly permitted. - - NOTE: Experience has shown that a "multipart" media type with a - single body part is useful for sending non-text media types. It has - the advantage of providing the preamble as a place to include - decoding instructions. In addition, a number of SMTP gateways move - or remove the MIME headers, and a clever MIME decoder can take a good - guess at multipart boundaries even in the absence of the Content-Type - header and thereby successfully decode the message. - - The only mandatory global parameter for the "multipart" media type is - the boundary parameter, which consists of 1 to 70 characters from a - set of characters known to be very robust through mail gateways, and - NOT ending with white space. (If a boundary delimiter line appears to - end with white space, the white space must be presumed to have been - added by a gateway, and must be deleted.) It is formally specified - by the following BNF: - - boundary := 0*69<bchars> bcharsnospace - - bchars := bcharsnospace / " " - - bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / - "+" / "_" / "," / "-" / "." / - "/" / ":" / "=" / "?" - - Overall, the body of a "multipart" entity may be specified as - follows: - - dash-boundary := "--" boundary - ; boundary taken from the value of - ; boundary parameter of the - ; Content-Type field. - - multipart-body := [preamble CRLF] - dash-boundary transport-padding CRLF - body-part *encapsulation - close-delimiter transport-padding - [CRLF epilogue] - - - - - -Freed & Borenstein Standards Track [Page 22] - -RFC 2046 Media Types November 1996 - - - transport-padding := *LWSP-char - ; Composers MUST NOT generate - ; non-zero length transport - ; padding, but receivers MUST - ; be able to handle padding - ; added by message transports. - - encapsulation := delimiter transport-padding - CRLF body-part - - delimiter := CRLF dash-boundary - - close-delimiter := delimiter "--" - - preamble := discard-text - - epilogue := discard-text - - discard-text := *(*text CRLF) *text - ; May be ignored or discarded. - - body-part := MIME-part-headers [CRLF *OCTET] - ; Lines in a body-part must not start - ; with the specified dash-boundary and - ; the delimiter must not appear anywhere - ; in the body part. Note that the - ; semantics of a body-part differ from - ; the semantics of a message, as - ; described in the text. - - OCTET := <any 0-255 octet value> - - IMPORTANT: The free insertion of linear-white-space and RFC 822 - comments between the elements shown in this BNF is NOT allowed since - this BNF does not specify a structured header field. - - NOTE: In certain transport enclaves, RFC 822 restrictions such as - the one that limits bodies to printable US-ASCII characters may not - be in force. (That is, the transport domains may exist that resemble - standard Internet mail transport as specified in RFC 821 and assumed - by RFC 822, but without certain restrictions.) The relaxation of - these restrictions should be construed as locally extending the - definition of bodies, for example to include octets outside of the - US-ASCII range, as long as these extensions are supported by the - transport and adequately documented in the Content- Transfer-Encoding - header field. However, in no event are headers (either message - headers or body part headers) allowed to contain anything other than - US-ASCII characters. - - - -Freed & Borenstein Standards Track [Page 23] - -RFC 2046 Media Types November 1996 - - - NOTE: Conspicuously missing from the "multipart" type is a notion of - structured, related body parts. It is recommended that those wishing - to provide more structured or integrated multipart messaging - facilities should define subtypes of multipart that are syntactically - identical but define relationships between the various parts. For - example, subtypes of multipart could be defined that include a - distinguished part which in turn is used to specify the relationships - between the other parts, probably referring to them by their - Content-ID field. Old implementations will not recognize the new - subtype if this approach is used, but will treat it as - multipart/mixed and will thus be able to show the user the parts that - are recognized. - -5.1.2. Handling Nested Messages and Multiparts - - The "message/rfc822" subtype defined in a subsequent section of this - document has no terminating condition other than running out of data. - Similarly, an improperly truncated "multipart" entity may not have - any terminating boundary marker, and can turn up operationally due to - mail system malfunctions. - - It is essential that such entities be handled correctly when they are - themselves imbedded inside of another "multipart" structure. MIME - implementations are therefore required to recognize outer level - boundary markers at ANY level of inner nesting. It is not sufficient - to only check for the next expected marker or other terminating - condition. - -5.1.3. Mixed Subtype - - The "mixed" subtype of "multipart" is intended for use when the body - parts are independent and need to be bundled in a particular order. - Any "multipart" subtypes that an implementation does not recognize - must be treated as being of subtype "mixed". - -5.1.4. Alternative Subtype - - The "multipart/alternative" type is syntactically identical to - "multipart/mixed", but the semantics are different. In particular, - each of the body parts is an "alternative" version of the same - information. - - Systems should recognize that the content of the various parts are - interchangeable. Systems should choose the "best" type based on the - local environment and references, in some cases even through user - interaction. As with "multipart/mixed", the order of body parts is - significant. In this case, the alternatives appear in an order of - increasing faithfulness to the original content. In general, the - - - -Freed & Borenstein Standards Track [Page 24] - -RFC 2046 Media Types November 1996 - - - best choice is the LAST part of a type supported by the recipient - system's local environment. - - "Multipart/alternative" may be used, for example, to send a message - in a fancy text format in such a way that it can easily be displayed - anywhere: - - From: Nathaniel Borenstein <nsb@bellcore.com> - To: Ned Freed <ned@innosoft.com> - Date: Mon, 22 Mar 1993 09:41:09 -0800 (PST) - Subject: Formatted text mail - MIME-Version: 1.0 - Content-Type: multipart/alternative; boundary=boundary42 - - --boundary42 - Content-Type: text/plain; charset=us-ascii - - ... plain text version of message goes here ... - - --boundary42 - Content-Type: text/enriched - - ... RFC 1896 text/enriched version of same message - goes here ... - - --boundary42 - Content-Type: application/x-whatever - - ... fanciest version of same message goes here ... - - --boundary42-- - - In this example, users whose mail systems understood the - "application/x-whatever" format would see only the fancy version, - while other users would see only the enriched or plain text version, - depending on the capabilities of their system. - - In general, user agents that compose "multipart/alternative" entities - must place the body parts in increasing order of preference, that is, - with the preferred format last. For fancy text, the sending user - agent should put the plainest format first and the richest format - last. Receiving user agents should pick and display the last format - they are capable of displaying. In the case where one of the - alternatives is itself of type "multipart" and contains unrecognized - sub-parts, the user agent may choose either to show that alternative, - an earlier alternative, or both. - - - - - -Freed & Borenstein Standards Track [Page 25] - -RFC 2046 Media Types November 1996 - - - NOTE: From an implementor's perspective, it might seem more sensible - to reverse this ordering, and have the plainest alternative last. - However, placing the plainest alternative first is the friendliest - possible option when "multipart/alternative" entities are viewed - using a non-MIME-conformant viewer. While this approach does impose - some burden on conformant MIME viewers, interoperability with older - mail readers was deemed to be more important in this case. - - It may be the case that some user agents, if they can recognize more - than one of the formats, will prefer to offer the user the choice of - which format to view. This makes sense, for example, if a message - includes both a nicely- formatted image version and an easily-edited - text version. What is most critical, however, is that the user not - automatically be shown multiple versions of the same data. Either - the user should be shown the last recognized version or should be - given the choice. - - THE SEMANTICS OF CONTENT-ID IN MULTIPART/ALTERNATIVE: Each part of a - "multipart/alternative" entity represents the same data, but the - mappings between the two are not necessarily without information - loss. For example, information is lost when translating ODA to - PostScript or plain text. It is recommended that each part should - have a different Content-ID value in the case where the information - content of the two parts is not identical. And when the information - content is identical -- for example, where several parts of type - "message/external-body" specify alternate ways to access the - identical data -- the same Content-ID field value should be used, to - optimize any caching mechanisms that might be present on the - recipient's end. However, the Content-ID values used by the parts - should NOT be the same Content-ID value that describes the - "multipart/alternative" as a whole, if there is any such Content-ID - field. That is, one Content-ID value will refer to the - "multipart/alternative" entity, while one or more other Content-ID - values will refer to the parts inside it. - -5.1.5. Digest Subtype - - This document defines a "digest" subtype of the "multipart" Content- - Type. This type is syntactically identical to "multipart/mixed", but - the semantics are different. In particular, in a digest, the default - Content-Type value for a body part is changed from "text/plain" to - "message/rfc822". This is done to allow a more readable digest - format that is largely compatible (except for the quoting convention) - with RFC 934. - - Note: Though it is possible to specify a Content-Type value for a - body part in a digest which is other than "message/rfc822", such as a - "text/plain" part containing a description of the material in the - - - -Freed & Borenstein Standards Track [Page 26] - -RFC 2046 Media Types November 1996 - - - digest, actually doing so is undesireble. The "multipart/digest" - Content-Type is intended to be used to send collections of messages. - If a "text/plain" part is needed, it should be included as a seperate - part of a "multipart/mixed" message. - - A digest in this format might, then, look something like this: - - From: Moderator-Address - To: Recipient-List - Date: Mon, 22 Mar 1994 13:34:51 +0000 - Subject: Internet Digest, volume 42 - MIME-Version: 1.0 - Content-Type: multipart/mixed; - boundary="---- main boundary ----" - - ------ main boundary ---- - - ...Introductory text or table of contents... - - ------ main boundary ---- - Content-Type: multipart/digest; - boundary="---- next message ----" - - ------ next message ---- - - From: someone-else - Date: Fri, 26 Mar 1993 11:13:32 +0200 - Subject: my opinion - - ...body goes here ... - - ------ next message ---- - - From: someone-else-again - Date: Fri, 26 Mar 1993 10:07:13 -0500 - Subject: my different opinion - - ... another body goes here ... - - ------ next message ------ - - ------ main boundary ------ - -5.1.6. Parallel Subtype - - This document defines a "parallel" subtype of the "multipart" - Content-Type. This type is syntactically identical to - "multipart/mixed", but the semantics are different. In particular, - - - -Freed & Borenstein Standards Track [Page 27] - -RFC 2046 Media Types November 1996 - - - in a parallel entity, the order of body parts is not significant. - - A common presentation of this type is to display all of the parts - simultaneously on hardware and software that are capable of doing so. - However, composing agents should be aware that many mail readers will - lack this capability and will show the parts serially in any event. - -5.1.7. Other Multipart Subtypes - - Other "multipart" subtypes are expected in the future. MIME - implementations must in general treat unrecognized subtypes of - "multipart" as being equivalent to "multipart/mixed". - -5.2. Message Media Type - - It is frequently desirable, in sending mail, to encapsulate another - mail message. A special media type, "message", is defined to - facilitate this. In particular, the "rfc822" subtype of "message" is - used to encapsulate RFC 822 messages. - - NOTE: It has been suggested that subtypes of "message" might be - defined for forwarded or rejected messages. However, forwarded and - rejected messages can be handled as multipart messages in which the - first part contains any control or descriptive information, and a - second part, of type "message/rfc822", is the forwarded or rejected - message. Composing rejection and forwarding messages in this manner - will preserve the type information on the original message and allow - it to be correctly presented to the recipient, and hence is strongly - encouraged. - - Subtypes of "message" often impose restrictions on what encodings are - allowed. These restrictions are described in conjunction with each - specific subtype. - - Mail gateways, relays, and other mail handling agents are commonly - known to alter the top-level header of an RFC 822 message. In - particular, they frequently add, remove, or reorder header fields. - These operations are explicitly forbidden for the encapsulated - headers embedded in the bodies of messages of type "message." - -5.2.1. RFC822 Subtype - - A media type of "message/rfc822" indicates that the body contains an - encapsulated message, with the syntax of an RFC 822 message. - However, unlike top-level RFC 822 messages, the restriction that each - "message/rfc822" body must include a "From", "Date", and at least one - destination header is removed and replaced with the requirement that - at least one of "From", "Subject", or "Date" must be present. - - - -Freed & Borenstein Standards Track [Page 28] - -RFC 2046 Media Types November 1996 - - - It should be noted that, despite the use of the numbers "822", a - "message/rfc822" entity isn't restricted to material in strict - conformance to RFC822, nor are the semantics of "message/rfc822" - objects restricted to the semantics defined in RFC822. More - specifically, a "message/rfc822" message could well be a News article - or a MIME message. - - No encoding other than "7bit", "8bit", or "binary" is permitted for - the body of a "message/rfc822" entity. The message header fields are - always US-ASCII in any case, and data within the body can still be - encoded, in which case the Content-Transfer-Encoding header field in - the encapsulated message will reflect this. Non-US-ASCII text in the - headers of an encapsulated message can be specified using the - mechanisms described in RFC 2047. - -5.2.2. Partial Subtype - - The "partial" subtype is defined to allow large entities to be - delivered as several separate pieces of mail and automatically - reassembled by a receiving user agent. (The concept is similar to IP - fragmentation and reassembly in the basic Internet Protocols.) This - mechanism can be used when intermediate transport agents limit the - size of individual messages that can be sent. The media type - "message/partial" thus indicates that the body contains a fragment of - a larger entity. - - Because data of type "message" may never be encoded in base64 or - quoted-printable, a problem might arise if "message/partial" entities - are constructed in an environment that supports binary or 8bit - transport. The problem is that the binary data would be split into - multiple "message/partial" messages, each of them requiring binary - transport. If such messages were encountered at a gateway into a - 7bit transport environment, there would be no way to properly encode - them for the 7bit world, aside from waiting for all of the fragments, - reassembling the inner message, and then encoding the reassembled - data in base64 or quoted-printable. Since it is possible that - different fragments might go through different gateways, even this is - not an acceptable solution. For this reason, it is specified that - entities of type "message/partial" must always have a content- - transfer-encoding of 7bit (the default). In particular, even in - environments that support binary or 8bit transport, the use of a - content- transfer-encoding of "8bit" or "binary" is explicitly - prohibited for MIME entities of type "message/partial". This in turn - implies that the inner message must not use "8bit" or "binary" - encoding. - - - - - - -Freed & Borenstein Standards Track [Page 29] - -RFC 2046 Media Types November 1996 - - - Because some message transfer agents may choose to automatically - fragment large messages, and because such agents may use very - different fragmentation thresholds, it is possible that the pieces of - a partial message, upon reassembly, may prove themselves to comprise - a partial message. This is explicitly permitted. - - Three parameters must be specified in the Content-Type field of type - "message/partial": The first, "id", is a unique identifier, as close - to a world-unique identifier as possible, to be used to match the - fragments together. (In general, the identifier is essentially a - message-id; if placed in double quotes, it can be ANY message-id, in - accordance with the BNF for "parameter" given in RFC 2045.) The - second, "number", an integer, is the fragment number, which indicates - where this fragment fits into the sequence of fragments. The third, - "total", another integer, is the total number of fragments. This - third subfield is required on the final fragment, and is optional - (though encouraged) on the earlier fragments. Note also that these - parameters may be given in any order. - - Thus, the second piece of a 3-piece message may have either of the - following header fields: - - Content-Type: Message/Partial; number=2; total=3; - id="oc=jpbe0M2Yt4s@thumper.bellcore.com" - - Content-Type: Message/Partial; - id="oc=jpbe0M2Yt4s@thumper.bellcore.com"; - number=2 - - But the third piece MUST specify the total number of fragments: - - Content-Type: Message/Partial; number=3; total=3; - id="oc=jpbe0M2Yt4s@thumper.bellcore.com" - - Note that fragment numbering begins with 1, not 0. - - When the fragments of an entity broken up in this manner are put - together, the result is always a complete MIME entity, which may have - its own Content-Type header field, and thus may contain any other - data type. - -5.2.2.1. Message Fragmentation and Reassembly - - The semantics of a reassembled partial message must be those of the - "inner" message, rather than of a message containing the inner - message. This makes it possible, for example, to send a large audio - message as several partial messages, and still have it appear to the - recipient as a simple audio message rather than as an encapsulated - - - -Freed & Borenstein Standards Track [Page 30] - -RFC 2046 Media Types November 1996 - - - message containing an audio message. That is, the encapsulation of - the message is considered to be "transparent". - - When generating and reassembling the pieces of a "message/partial" - message, the headers of the encapsulated message must be merged with - the headers of the enclosing entities. In this process the following - rules must be observed: - - (1) Fragmentation agents must split messages at line - boundaries only. This restriction is imposed because - splits at points other than the ends of lines in turn - depends on message transports being able to preserve - the semantics of messages that don't end with a CRLF - sequence. Many transports are incapable of preserving - such semantics. - - (2) All of the header fields from the initial enclosing - message, except those that start with "Content-" and - the specific header fields "Subject", "Message-ID", - "Encrypted", and "MIME-Version", must be copied, in - order, to the new message. - - (3) The header fields in the enclosed message which start - with "Content-", plus the "Subject", "Message-ID", - "Encrypted", and "MIME-Version" fields, must be - appended, in order, to the header fields of the new - message. Any header fields in the enclosed message - which do not start with "Content-" (except for the - "Subject", "Message-ID", "Encrypted", and "MIME- - Version" fields) will be ignored and dropped. - - (4) All of the header fields from the second and any - subsequent enclosing messages are discarded by the - reassembly process. - -5.2.2.2. Fragmentation and Reassembly Example - - If an audio message is broken into two pieces, the first piece might - look something like this: - - X-Weird-Header-1: Foo - From: Bill@host.com - To: joe@otherhost.com - Date: Fri, 26 Mar 1993 12:59:38 -0500 (EST) - Subject: Audio mail (part 1 of 2) - Message-ID: <id1@host.com> - MIME-Version: 1.0 - Content-type: message/partial; id="ABC@host.com"; - - - -Freed & Borenstein Standards Track [Page 31] - -RFC 2046 Media Types November 1996 - - - number=1; total=2 - - X-Weird-Header-1: Bar - X-Weird-Header-2: Hello - Message-ID: <anotherid@foo.com> - Subject: Audio mail - MIME-Version: 1.0 - Content-type: audio/basic - Content-transfer-encoding: base64 - - ... first half of encoded audio data goes here ... - - and the second half might look something like this: - - From: Bill@host.com - To: joe@otherhost.com - Date: Fri, 26 Mar 1993 12:59:38 -0500 (EST) - Subject: Audio mail (part 2 of 2) - MIME-Version: 1.0 - Message-ID: <id2@host.com> - Content-type: message/partial; - id="ABC@host.com"; number=2; total=2 - - ... second half of encoded audio data goes here ... - - Then, when the fragmented message is reassembled, the resulting - message to be displayed to the user should look something like this: - - X-Weird-Header-1: Foo - From: Bill@host.com - To: joe@otherhost.com - Date: Fri, 26 Mar 1993 12:59:38 -0500 (EST) - Subject: Audio mail - Message-ID: <anotherid@foo.com> - MIME-Version: 1.0 - Content-type: audio/basic - Content-transfer-encoding: base64 - - ... first half of encoded audio data goes here ... - ... second half of encoded audio data goes here ... - - The inclusion of a "References" field in the headers of the second - and subsequent pieces of a fragmented message that references the - Message-Id on the previous piece may be of benefit to mail readers - that understand and track references. However, the generation of - such "References" fields is entirely optional. - - - - - -Freed & Borenstein Standards Track [Page 32] - -RFC 2046 Media Types November 1996 - - - Finally, it should be noted that the "Encrypted" header field has - been made obsolete by Privacy Enhanced Messaging (PEM) [RFC-1421, - RFC-1422, RFC-1423, RFC-1424], but the rules above are nevertheless - believed to describe the correct way to treat it if it is encountered - in the context of conversion to and from "message/partial" fragments. - -5.2.3. External-Body Subtype - - The external-body subtype indicates that the actual body data are not - included, but merely referenced. In this case, the parameters - describe a mechanism for accessing the external data. - - When a MIME entity is of type "message/external-body", it consists of - a header, two consecutive CRLFs, and the message header for the - encapsulated message. If another pair of consecutive CRLFs appears, - this of course ends the message header for the encapsulated message. - However, since the encapsulated message's body is itself external, it - does NOT appear in the area that follows. For example, consider the - following message: - - Content-type: message/external-body; - access-type=local-file; - name="/u/nsb/Me.jpeg" - - Content-type: image/jpeg - Content-ID: <id42@guppylake.bellcore.com> - Content-Transfer-Encoding: binary - - THIS IS NOT REALLY THE BODY! - - The area at the end, which might be called the "phantom body", is - ignored for most external-body messages. However, it may be used to - contain auxiliary information for some such messages, as indeed it is - when the access-type is "mail- server". The only access-type defined - in this document that uses the phantom body is "mail-server", but - other access-types may be defined in the future in other - specifications that use this area. - - The encapsulated headers in ALL "message/external-body" entities MUST - include a Content-ID header field to give a unique identifier by - which to reference the data. This identifier may be used for caching - mechanisms, and for recognizing the receipt of the data when the - access-type is "mail-server". - - Note that, as specified here, the tokens that describe external-body - data, such as file names and mail server commands, are required to be - in the US-ASCII character set. - - - - -Freed & Borenstein Standards Track [Page 33] - -RFC 2046 Media Types November 1996 - - - If this proves problematic in practice, a new mechanism may be - required as a future extension to MIME, either as newly defined - access-types for "message/external-body" or by some other mechanism. - - As with "message/partial", MIME entities of type "message/external- - body" MUST have a content-transfer-encoding of 7bit (the default). - In particular, even in environments that support binary or 8bit - transport, the use of a content- transfer-encoding of "8bit" or - "binary" is explicitly prohibited for entities of type - "message/external-body". - -5.2.3.1. General External-Body Parameters - - The parameters that may be used with any "message/external- body" - are: - - (1) ACCESS-TYPE -- A word indicating the supported access - mechanism by which the file or data may be obtained. - This word is not case sensitive. Values include, but - are not limited to, "FTP", "ANON-FTP", "TFTP", "LOCAL- - FILE", and "MAIL-SERVER". Future values, except for - experimental values beginning with "X-", must be - registered with IANA, as described in RFC 2048. - This parameter is unconditionally mandatory and MUST be - present on EVERY "message/external-body". - - (2) EXPIRATION -- The date (in the RFC 822 "date-time" - syntax, as extended by RFC 1123 to permit 4 digits in - the year field) after which the existence of the - external data is not guaranteed. This parameter may be - used with ANY access-type and is ALWAYS optional. - - (3) SIZE -- The size (in octets) of the data. The intent - of this parameter is to help the recipient decide - whether or not to expend the necessary resources to - retrieve the external data. Note that this describes - the size of the data in its canonical form, that is, - before any Content-Transfer-Encoding has been applied - or after the data have been decoded. This parameter - may be used with ANY access-type and is ALWAYS - optional. - - (4) PERMISSION -- A case-insensitive field that indicates - whether or not it is expected that clients might also - attempt to overwrite the data. By default, or if - permission is "read", the assumption is that they are - not, and that if the data is retrieved once, it is - never needed again. If PERMISSION is "read-write", - - - -Freed & Borenstein Standards Track [Page 34] - -RFC 2046 Media Types November 1996 - - - this assumption is invalid, and any local copy must be - considered no more than a cache. "Read" and "Read- - write" are the only defined values of permission. This - parameter may be used with ANY access-type and is - ALWAYS optional. - - The precise semantics of the access-types defined here are described - in the sections that follow. - -5.2.3.2. The 'ftp' and 'tftp' Access-Types - - An access-type of FTP or TFTP indicates that the message body is - accessible as a file using the FTP [RFC-959] or TFTP [RFC- 783] - protocols, respectively. For these access-types, the following - additional parameters are mandatory: - - (1) NAME -- The name of the file that contains the actual - body data. - - (2) SITE -- A machine from which the file may be obtained, - using the given protocol. This must be a fully - qualified domain name, not a nickname. - - (3) Before any data are retrieved, using FTP, the user will - generally need to be asked to provide a login id and a - password for the machine named by the site parameter. - For security reasons, such an id and password are not - specified as content-type parameters, but must be - obtained from the user. - - In addition, the following parameters are optional: - - (1) DIRECTORY -- A directory from which the data named by - NAME should be retrieved. - - (2) MODE -- A case-insensitive string indicating the mode - to be used when retrieving the information. The valid - values for access-type "TFTP" are "NETASCII", "OCTET", - and "MAIL", as specified by the TFTP protocol [RFC- - 783]. The valid values for access-type "FTP" are - "ASCII", "EBCDIC", "IMAGE", and "LOCALn" where "n" is a - decimal integer, typically 8. These correspond to the - representation types "A" "E" "I" and "L n" as specified - by the FTP protocol [RFC-959]. Note that "BINARY" and - "TENEX" are not valid values for MODE and that "OCTET" - or "IMAGE" or "LOCAL8" should be used instead. IF MODE - is not specified, the default value is "NETASCII" for - TFTP and "ASCII" otherwise. - - - -Freed & Borenstein Standards Track [Page 35] - -RFC 2046 Media Types November 1996 - - -5.2.3.3. The 'anon-ftp' Access-Type - - The "anon-ftp" access-type is identical to the "ftp" access type, - except that the user need not be asked to provide a name and password - for the specified site. Instead, the ftp protocol will be used with - login "anonymous" and a password that corresponds to the user's mail - address. - -5.2.3.4. The 'local-file' Access-Type - - An access-type of "local-file" indicates that the actual body is - accessible as a file on the local machine. Two additional parameters - are defined for this access type: - - (1) NAME -- The name of the file that contains the actual - body data. This parameter is mandatory for the - "local-file" access-type. - - (2) SITE -- A domain specifier for a machine or set of - machines that are known to have access to the data - file. This optional parameter is used to describe the - locality of reference for the data, that is, the site - or sites at which the file is expected to be visible. - Asterisks may be used for wildcard matching to a part - of a domain name, such as "*.bellcore.com", to indicate - a set of machines on which the data should be directly - visible, while a single asterisk may be used to - indicate a file that is expected to be universally - available, e.g., via a global file system. - -5.2.3.5. The 'mail-server' Access-Type - - The "mail-server" access-type indicates that the actual body is - available from a mail server. Two additional parameters are defined - for this access-type: - - (1) SERVER -- The addr-spec of the mail server from which - the actual body data can be obtained. This parameter - is mandatory for the "mail-server" access-type. - - (2) SUBJECT -- The subject that is to be used in the mail - that is sent to obtain the data. Note that keying mail - servers on Subject lines is NOT recommended, but such - mail servers are known to exist. This is an optional - parameter. - - - - - - -Freed & Borenstein Standards Track [Page 36] - -RFC 2046 Media Types November 1996 - - - Because mail servers accept a variety of syntaxes, some of which is - multiline, the full command to be sent to a mail server is not - included as a parameter in the content-type header field. Instead, - it is provided as the "phantom body" when the media type is - "message/external-body" and the access-type is mail-server. - - Note that MIME does not define a mail server syntax. Rather, it - allows the inclusion of arbitrary mail server commands in the phantom - body. Implementations must include the phantom body in the body of - the message it sends to the mail server address to retrieve the - relevant data. - - Unlike other access-types, mail-server access is asynchronous and - will happen at an unpredictable time in the future. For this reason, - it is important that there be a mechanism by which the returned data - can be matched up with the original "message/external-body" entity. - MIME mail servers must use the same Content-ID field on the returned - message that was used in the original "message/external-body" - entities, to facilitate such matching. - -5.2.3.6. External-Body Security Issues - - "Message/external-body" entities give rise to two important security - issues: - - (1) Accessing data via a "message/external-body" reference - effectively results in the message recipient performing - an operation that was specified by the message - originator. It is therefore possible for the message - originator to trick a recipient into doing something - they would not have done otherwise. For example, an - originator could specify a action that attempts - retrieval of material that the recipient is not - authorized to obtain, causing the recipient to - unwittingly violate some security policy. For this - reason, user agents capable of resolving external - references must always take steps to describe the - action they are to take to the recipient and ask for - explicit permisssion prior to performing it. - - The 'mail-server' access-type is particularly - vulnerable, in that it causes the recipient to send a - new message whose contents are specified by the - original message's originator. Given the potential for - abuse, any such request messages that are constructed - should contain a clear indication that they were - generated automatically (e.g. in a Comments: header - field) in an attempt to resolve a MIME - - - -Freed & Borenstein Standards Track [Page 37] - -RFC 2046 Media Types November 1996 - - - "message/external-body" reference. - - (2) MIME will sometimes be used in environments that - provide some guarantee of message integrity and - authenticity. If present, such guarantees may apply - only to the actual direct content of messages -- they - may or may not apply to data accessed through MIME's - "message/external-body" mechanism. In particular, it - may be possible to subvert certain access mechanisms - even when the messaging system itself is secure. - - It should be noted that this problem exists either with - or without the availabilty of MIME mechanisms. A - casual reference to an FTP site containing a document - in the text of a secure message brings up similar - issues -- the only difference is that MIME provides for - automatic retrieval of such material, and users may - place unwarranted trust is such automatic retrieval - mechanisms. - -5.2.3.7. Examples and Further Explanations - - When the external-body mechanism is used in conjunction with the - "multipart/alternative" media type it extends the functionality of - "multipart/alternative" to include the case where the same entity is - provided in the same format but via different accces mechanisms. - When this is done the originator of the message must order the parts - first in terms of preferred formats and then by preferred access - mechanisms. The recipient's viewer should then evaluate the list - both in terms of format and access mechanisms. - - With the emerging possibility of very wide-area file systems, it - becomes very hard to know in advance the set of machines where a file - will and will not be accessible directly from the file system. - Therefore it may make sense to provide both a file name, to be tried - directly, and the name of one or more sites from which the file is - known to be accessible. An implementation can try to retrieve remote - files using FTP or any other protocol, using anonymous file retrieval - or prompting the user for the necessary name and password. If an - external body is accessible via multiple mechanisms, the sender may - include multiple entities of type "message/external-body" within the - body parts of an enclosing "multipart/alternative" entity. - - However, the external-body mechanism is not intended to be limited to - file retrieval, as shown by the mail-server access-type. Beyond - this, one can imagine, for example, using a video server for external - references to video clips. - - - - -Freed & Borenstein Standards Track [Page 38] - -RFC 2046 Media Types November 1996 - - - The embedded message header fields which appear in the body of the - "message/external-body" data must be used to declare the media type - of the external body if it is anything other than plain US-ASCII - text, since the external body does not have a header section to - declare its type. Similarly, any Content-transfer-encoding other - than "7bit" must also be declared here. Thus a complete - "message/external-body" message, referring to an object in PostScript - format, might look like this: - - From: Whomever - To: Someone - Date: Whenever - Subject: whatever - MIME-Version: 1.0 - Message-ID: <id1@host.com> - Content-Type: multipart/alternative; boundary=42 - Content-ID: <id001@guppylake.bellcore.com> - - --42 - Content-Type: message/external-body; name="BodyFormats.ps"; - site="thumper.bellcore.com"; mode="image"; - access-type=ANON-FTP; directory="pub"; - expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" - - Content-type: application/postscript - Content-ID: <id42@guppylake.bellcore.com> - - --42 - Content-Type: message/external-body; access-type=local-file; - name="/u/nsb/writing/rfcs/RFC-MIME.ps"; - site="thumper.bellcore.com"; - expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" - - Content-type: application/postscript - Content-ID: <id42@guppylake.bellcore.com> - - --42 - Content-Type: message/external-body; - access-type=mail-server - server="listserv@bogus.bitnet"; - expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" - - Content-type: application/postscript - Content-ID: <id42@guppylake.bellcore.com> - - get RFC-MIME.DOC - - --42-- - - - -Freed & Borenstein Standards Track [Page 39] - -RFC 2046 Media Types November 1996 - - - Note that in the above examples, the default Content-transfer- - encoding of "7bit" is assumed for the external postscript data. - - Like the "message/partial" type, the "message/external-body" media - type is intended to be transparent, that is, to convey the data type - in the external body rather than to convey a message with a body of - that type. Thus the headers on the outer and inner parts must be - merged using the same rules as for "message/partial". In particular, - this means that the Content-type and Subject fields are overridden, - but the From field is preserved. - - Note that since the external bodies are not transported along with - the external body reference, they need not conform to transport - limitations that apply to the reference itself. In particular, - Internet mail transports may impose 7bit and line length limits, but - these do not automatically apply to binary external body references. - Thus a Content-Transfer-Encoding is not generally necessary, though - it is permitted. - - Note that the body of a message of type "message/external-body" is - governed by the basic syntax for an RFC 822 message. In particular, - anything before the first consecutive pair of CRLFs is header - information, while anything after it is body information, which is - ignored for most access-types. - -5.2.4. Other Message Subtypes - - MIME implementations must in general treat unrecognized subtypes of - "message" as being equivalent to "application/octet-stream". - - Future subtypes of "message" intended for use with email should be - restricted to "7bit" encoding. A type other than "message" should be - used if restriction to "7bit" is not possible. - -6. Experimental Media Type Values - - A media type value beginning with the characters "X-" is a private - value, to be used by consenting systems by mutual agreement. Any - format without a rigorous and public definition must be named with an - "X-" prefix, and publicly specified values shall never begin with - "X-". (Older versions of the widely used Andrew system use the "X- - BE2" name, so new systems should probably choose a different name.) - - In general, the use of "X-" top-level types is strongly discouraged. - Implementors should invent subtypes of the existing types whenever - possible. In many cases, a subtype of "application" will be more - appropriate than a new top-level type. - - - - -Freed & Borenstein Standards Track [Page 40] - -RFC 2046 Media Types November 1996 - - -7. Summary - - The five discrete media types provide provide a standardized - mechanism for tagging entities as "audio", "image", or several other - kinds of data. The composite "multipart" and "message" media types - allow mixing and hierarchical structuring of entities of different - types in a single message. A distinguished parameter syntax allows - further specification of data format details, particularly the - specification of alternate character sets. Additional optional - header fields provide mechanisms for certain extensions deemed - desirable by many implementors. Finally, a number of useful media - types are defined for general use by consenting user agents, notably - "message/partial" and "message/external-body". - -9. Security Considerations - - Security issues are discussed in the context of the - "application/postscript" type, the "message/external-body" type, and - in RFC 2048. Implementors should pay special attention to the - security implications of any media types that can cause the remote - execution of any actions in the recipient's environment. In such - cases, the discussion of the "application/postscript" type may serve - as a model for considering other media types with remote execution - capabilities. - - - - - - - - - - - - - - - - - - - - - - - - - - - -Freed & Borenstein Standards Track [Page 41] - -RFC 2046 Media Types November 1996 - - -9. Authors' Addresses - - For more information, the authors of this document are best contacted - via Internet mail: - - Ned Freed - Innosoft International, Inc. - 1050 East Garvey Avenue South - West Covina, CA 91790 - USA - - Phone: +1 818 919 3600 - Fax: +1 818 919 3614 - EMail: ned@innosoft.com - - - Nathaniel S. Borenstein - First Virtual Holdings - 25 Washington Avenue - Morristown, NJ 07960 - USA - - Phone: +1 201 540 8967 - Fax: +1 201 993 3032 - EMail: nsb@nsb.fv.com - - - MIME is a result of the work of the Internet Engineering Task Force - Working Group on RFC 822 Extensions. The chairman of that group, - Greg Vaudreuil, may be reached at: - - Gregory M. Vaudreuil - Octel Network Services - 17080 Dallas Parkway - Dallas, TX 75248-1905 - USA - - EMail: Greg.Vaudreuil@Octel.Com - - - - - - - - - - - - - -Freed & Borenstein Standards Track [Page 42] - -RFC 2046 Media Types November 1996 - - -Appendix A -- Collected Grammar - - This appendix contains the complete BNF grammar for all the syntax - specified by this document. - - By itself, however, this grammar is incomplete. It refers by name to - several syntax rules that are defined by RFC 822. Rather than - reproduce those definitions here, and risk unintentional differences - between the two, this document simply refers the reader to RFC 822 - for the remaining definitions. Wherever a term is undefined, it - refers to the RFC 822 definition. - - boundary := 0*69<bchars> bcharsnospace - - bchars := bcharsnospace / " " - - bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / - "+" / "_" / "," / "-" / "." / - "/" / ":" / "=" / "?" - - body-part := <"message" as defined in RFC 822, with all - header fields optional, not starting with the - specified dash-boundary, and with the - delimiter not occurring anywhere in the - body part. Note that the semantics of a - part differ from the semantics of a message, - as described in the text.> - - close-delimiter := delimiter "--" - - dash-boundary := "--" boundary - ; boundary taken from the value of - ; boundary parameter of the - ; Content-Type field. - - delimiter := CRLF dash-boundary - - discard-text := *(*text CRLF) - ; May be ignored or discarded. - - encapsulation := delimiter transport-padding - CRLF body-part - - epilogue := discard-text - - multipart-body := [preamble CRLF] - dash-boundary transport-padding CRLF - body-part *encapsulation - - - -Freed & Borenstein Standards Track [Page 43] - -RFC 2046 Media Types November 1996 - - - close-delimiter transport-padding - [CRLF epilogue] - - preamble := discard-text - - transport-padding := *LWSP-char - ; Composers MUST NOT generate - ; non-zero length transport - ; padding, but receivers MUST - ; be able to handle padding - ; added by message transports. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Freed & Borenstein Standards Track [Page 44] - diff --git a/doc/src/rfc2047.txt b/doc/src/rfc2047.txt deleted file mode 100644 index ff9a744bf..000000000 --- a/doc/src/rfc2047.txt +++ /dev/null @@ -1,843 +0,0 @@ - - - - - - -Network Working Group K. Moore -Request for Comments: 2047 University of Tennessee -Obsoletes: 1521, 1522, 1590 November 1996 -Category: Standards Track - - - MIME (Multipurpose Internet Mail Extensions) Part Three: - Message Header Extensions for Non-ASCII Text - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Abstract - - STD 11, RFC 822, defines a message representation protocol specifying - considerable detail about US-ASCII message headers, and leaves the - message content, or message body, as flat US-ASCII text. This set of - documents, collectively called the Multipurpose Internet Mail - Extensions, or MIME, redefines the format of messages to allow for - - (1) textual message bodies in character sets other than US-ASCII, - - (2) an extensible set of different formats for non-textual message - bodies, - - (3) multi-part message bodies, and - - (4) textual header information in character sets other than US-ASCII. - - These documents are based on earlier work documented in RFC 934, STD - 11, and RFC 1049, but extends and revises them. Because RFC 822 said - so little about message bodies, these documents are largely - orthogonal to (rather than a revision of) RFC 822. - - This particular document is the third document in the series. It - describes extensions to RFC 822 to allow non-US-ASCII text data in - Internet mail header fields. - - - - - - - - - -Moore Standards Track [Page 1] - -RFC 2047 Message Header Extensions November 1996 - - - Other documents in this series include: - - + RFC 2045, which specifies the various headers used to describe - the structure of MIME messages. - - + RFC 2046, which defines the general structure of the MIME media - typing system and defines an initial set of media types, - - + RFC 2048, which specifies various IANA registration procedures - for MIME-related facilities, and - - + RFC 2049, which describes MIME conformance criteria and - provides some illustrative examples of MIME message formats, - acknowledgements, and the bibliography. - - These documents are revisions of RFCs 1521, 1522, and 1590, which - themselves were revisions of RFCs 1341 and 1342. An appendix in RFC - 2049 describes differences and changes from previous versions. - -1. Introduction - - RFC 2045 describes a mechanism for denoting textual body parts which - are coded in various character sets, as well as methods for encoding - such body parts as sequences of printable US-ASCII characters. This - memo describes similar techniques to allow the encoding of non-ASCII - text in various portions of a RFC 822 [2] message header, in a manner - which is unlikely to confuse existing message handling software. - - Like the encoding techniques described in RFC 2045, the techniques - outlined here were designed to allow the use of non-ASCII characters - in message headers in a way which is unlikely to be disturbed by the - quirks of existing Internet mail handling programs. In particular, - some mail relaying programs are known to (a) delete some message - header fields while retaining others, (b) rearrange the order of - addresses in To or Cc fields, (c) rearrange the (vertical) order of - header fields, and/or (d) "wrap" message headers at different places - than those in the original message. In addition, some mail reading - programs are known to have difficulty correctly parsing message - headers which, while legal according to RFC 822, make use of - backslash-quoting to "hide" special characters such as "<", ",", or - ":", or which exploit other infrequently-used features of that - specification. - - While it is unfortunate that these programs do not correctly - interpret RFC 822 headers, to "break" these programs would cause - severe operational problems for the Internet mail system. The - extensions described in this memo therefore do not rely on little- - used features of RFC 822. - - - -Moore Standards Track [Page 2] - -RFC 2047 Message Header Extensions November 1996 - - - Instead, certain sequences of "ordinary" printable ASCII characters - (known as "encoded-words") are reserved for use as encoded data. The - syntax of encoded-words is such that they are unlikely to - "accidentally" appear as normal text in message headers. - Furthermore, the characters used in encoded-words are restricted to - those which do not have special meanings in the context in which the - encoded-word appears. - - Generally, an "encoded-word" is a sequence of printable ASCII - characters that begins with "=?", ends with "?=", and has two "?"s in - between. It specifies a character set and an encoding method, and - also includes the original text encoded as graphic ASCII characters, - according to the rules for that encoding method. - - A mail composer that implements this specification will provide a - means of inputting non-ASCII text in header fields, but will - translate these fields (or appropriate portions of these fields) into - encoded-words before inserting them into the message header. - - A mail reader that implements this specification will recognize - encoded-words when they appear in certain portions of the message - header. Instead of displaying the encoded-word "as is", it will - reverse the encoding and display the original text in the designated - character set. - -NOTES - - This memo relies heavily on notation and terms defined RFC 822 and - RFC 2045. In particular, the syntax for the ABNF used in this memo - is defined in RFC 822, as well as many of the terminal or nonterminal - symbols from RFC 822 are used in the grammar for the header - extensions defined here. Among the symbols defined in RFC 822 and - referenced in this memo are: 'addr-spec', 'atom', 'CHAR', 'comment', - 'CTLs', 'ctext', 'linear-white-space', 'phrase', 'quoted-pair'. - 'quoted-string', 'SPACE', and 'word'. Successful implementation of - this protocol extension requires careful attention to the RFC 822 - definitions of these terms. - - When the term "ASCII" appears in this memo, it refers to the "7-Bit - American Standard Code for Information Interchange", ANSI X3.4-1986. - The MIME charset name for this character set is "US-ASCII". When not - specifically referring to the MIME charset name, this document uses - the term "ASCII", both for brevity and for consistency with RFC 822. - However, implementors are warned that the character set name must be - spelled "US-ASCII" in MIME message and body part headers. - - - - - - -Moore Standards Track [Page 3] - -RFC 2047 Message Header Extensions November 1996 - - - This memo specifies a protocol for the representation of non-ASCII - text in message headers. It specifically DOES NOT define any - translation between "8-bit headers" and pure ASCII headers, nor is - any such translation assumed to be possible. - -2. Syntax of encoded-words - - An 'encoded-word' is defined by the following ABNF grammar. The - notation of RFC 822 is used, with the exception that white space - characters MUST NOT appear between components of an 'encoded-word'. - - encoded-word = "=?" charset "?" encoding "?" encoded-text "?=" - - charset = token ; see section 3 - - encoding = token ; see section 4 - - token = 1*<Any CHAR except SPACE, CTLs, and especials> - - especials = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / " - <"> / "/" / "[" / "]" / "?" / "." / "=" - - encoded-text = 1*<Any printable ASCII character other than "?" - or SPACE> - ; (but see "Use of encoded-words in message - ; headers", section 5) - - Both 'encoding' and 'charset' names are case-independent. Thus the - charset name "ISO-8859-1" is equivalent to "iso-8859-1", and the - encoding named "Q" may be spelled either "Q" or "q". - - An 'encoded-word' may not be more than 75 characters long, including - 'charset', 'encoding', 'encoded-text', and delimiters. If it is - desirable to encode more text than will fit in an 'encoded-word' of - 75 characters, multiple 'encoded-word's (separated by CRLF SPACE) may - be used. - - While there is no limit to the length of a multiple-line header - field, each line of a header field that contains one or more - 'encoded-word's is limited to 76 characters. - - The length restrictions are included both to ease interoperability - through internetwork mail gateways, and to impose a limit on the - amount of lookahead a header parser must employ (while looking for a - final ?= delimiter) before it can decide whether a token is an - "encoded-word" or something else. - - - - - -Moore Standards Track [Page 4] - -RFC 2047 Message Header Extensions November 1996 - - - IMPORTANT: 'encoded-word's are designed to be recognized as 'atom's - by an RFC 822 parser. As a consequence, unencoded white space - characters (such as SPACE and HTAB) are FORBIDDEN within an - 'encoded-word'. For example, the character sequence - - =?iso-8859-1?q?this is some text?= - - would be parsed as four 'atom's, rather than as a single 'atom' (by - an RFC 822 parser) or 'encoded-word' (by a parser which understands - 'encoded-words'). The correct way to encode the string "this is some - text" is to encode the SPACE characters as well, e.g. - - =?iso-8859-1?q?this=20is=20some=20text?= - - The characters which may appear in 'encoded-text' are further - restricted by the rules in section 5. - -3. Character sets - - The 'charset' portion of an 'encoded-word' specifies the character - set associated with the unencoded text. A 'charset' can be any of - the character set names allowed in an MIME "charset" parameter of a - "text/plain" body part, or any character set name registered with - IANA for use with the MIME text/plain content-type. - - Some character sets use code-switching techniques to switch between - "ASCII mode" and other modes. If unencoded text in an 'encoded-word' - contains a sequence which causes the charset interpreter to switch - out of ASCII mode, it MUST contain additional control codes such that - ASCII mode is again selected at the end of the 'encoded-word'. (This - rule applies separately to each 'encoded-word', including adjacent - 'encoded-word's within a single header field.) - - When there is a possibility of using more than one character set to - represent the text in an 'encoded-word', and in the absence of - private agreements between sender and recipients of a message, it is - recommended that members of the ISO-8859-* series be used in - preference to other character sets. - -4. Encodings - - Initially, the legal values for "encoding" are "Q" and "B". These - encodings are described below. The "Q" encoding is recommended for - use when most of the characters to be encoded are in the ASCII - character set; otherwise, the "B" encoding should be used. - Nevertheless, a mail reader which claims to recognize 'encoded-word's - MUST be able to accept either encoding for any character set which it - supports. - - - -Moore Standards Track [Page 5] - -RFC 2047 Message Header Extensions November 1996 - - - Only a subset of the printable ASCII characters may be used in - 'encoded-text'. Space and tab characters are not allowed, so that - the beginning and end of an 'encoded-word' are obvious. The "?" - character is used within an 'encoded-word' to separate the various - portions of the 'encoded-word' from one another, and thus cannot - appear in the 'encoded-text' portion. Other characters are also - illegal in certain contexts. For example, an 'encoded-word' in a - 'phrase' preceding an address in a From header field may not contain - any of the "specials" defined in RFC 822. Finally, certain other - characters are disallowed in some contexts, to ensure reliability for - messages that pass through internetwork mail gateways. - - The "B" encoding automatically meets these requirements. The "Q" - encoding allows a wide range of printable characters to be used in - non-critical locations in the message header (e.g., Subject), with - fewer characters available for use in other locations. - -4.1. The "B" encoding - - The "B" encoding is identical to the "BASE64" encoding defined by RFC - 2045. - -4.2. The "Q" encoding - - The "Q" encoding is similar to the "Quoted-Printable" content- - transfer-encoding defined in RFC 2045. It is designed to allow text - containing mostly ASCII characters to be decipherable on an ASCII - terminal without decoding. - - (1) Any 8-bit value may be represented by a "=" followed by two - hexadecimal digits. For example, if the character set in use - were ISO-8859-1, the "=" character would thus be encoded as - "=3D", and a SPACE by "=20". (Upper case should be used for - hexadecimal digits "A" through "F".) - - (2) The 8-bit hexadecimal value 20 (e.g., ISO-8859-1 SPACE) may be - represented as "_" (underscore, ASCII 95.). (This character may - not pass through some internetwork mail gateways, but its use - will greatly enhance readability of "Q" encoded data with mail - readers that do not support this encoding.) Note that the "_" - always represents hexadecimal 20, even if the SPACE character - occupies a different code position in the character set in use. - - (3) 8-bit values which correspond to printable ASCII characters other - than "=", "?", and "_" (underscore), MAY be represented as those - characters. (But see section 5 for restrictions.) In - particular, SPACE and TAB MUST NOT be represented as themselves - within encoded words. - - - -Moore Standards Track [Page 6] - -RFC 2047 Message Header Extensions November 1996 - - -5. Use of encoded-words in message headers - - An 'encoded-word' may appear in a message header or body part header - according to the following rules: - -(1) An 'encoded-word' may replace a 'text' token (as defined by RFC 822) - in any Subject or Comments header field, any extension message - header field, or any MIME body part field for which the field body - is defined as '*text'. An 'encoded-word' may also appear in any - user-defined ("X-") message or body part header field. - - Ordinary ASCII text and 'encoded-word's may appear together in the - same header field. However, an 'encoded-word' that appears in a - header field defined as '*text' MUST be separated from any adjacent - 'encoded-word' or 'text' by 'linear-white-space'. - -(2) An 'encoded-word' may appear within a 'comment' delimited by "(" and - ")", i.e., wherever a 'ctext' is allowed. More precisely, the RFC - 822 ABNF definition for 'comment' is amended as follows: - - comment = "(" *(ctext / quoted-pair / comment / encoded-word) ")" - - A "Q"-encoded 'encoded-word' which appears in a 'comment' MUST NOT - contain the characters "(", ")" or " - 'encoded-word' that appears in a 'comment' MUST be separated from - any adjacent 'encoded-word' or 'ctext' by 'linear-white-space'. - - It is important to note that 'comment's are only recognized inside - "structured" field bodies. In fields whose bodies are defined as - '*text', "(" and ")" are treated as ordinary characters rather than - comment delimiters, and rule (1) of this section applies. (See RFC - 822, sections 3.1.2 and 3.1.3) - -(3) As a replacement for a 'word' entity within a 'phrase', for example, - one that precedes an address in a From, To, or Cc header. The ABNF - definition for 'phrase' from RFC 822 thus becomes: - - phrase = 1*( encoded-word / word ) - - In this case the set of characters that may be used in a "Q"-encoded - 'encoded-word' is restricted to: <upper and lower case ASCII - letters, decimal digits, "!", "*", "+", "-", "/", "=", and "_" - (underscore, ASCII 95.)>. An 'encoded-word' that appears within a - 'phrase' MUST be separated from any adjacent 'word', 'text' or - 'special' by 'linear-white-space'. - - - - - - -Moore Standards Track [Page 7] - -RFC 2047 Message Header Extensions November 1996 - - - These are the ONLY locations where an 'encoded-word' may appear. In - particular: - - + An 'encoded-word' MUST NOT appear in any portion of an 'addr-spec'. - - + An 'encoded-word' MUST NOT appear within a 'quoted-string'. - - + An 'encoded-word' MUST NOT be used in a Received header field. - - + An 'encoded-word' MUST NOT be used in parameter of a MIME - Content-Type or Content-Disposition field, or in any structured - field body except within a 'comment' or 'phrase'. - - The 'encoded-text' in an 'encoded-word' must be self-contained; - 'encoded-text' MUST NOT be continued from one 'encoded-word' to - another. This implies that the 'encoded-text' portion of a "B" - 'encoded-word' will be a multiple of 4 characters long; for a "Q" - 'encoded-word', any "=" character that appears in the 'encoded-text' - portion will be followed by two hexadecimal characters. - - Each 'encoded-word' MUST encode an integral number of octets. The - 'encoded-text' in each 'encoded-word' must be well-formed according - to the encoding specified; the 'encoded-text' may not be continued in - the next 'encoded-word'. (For example, "=?charset?Q?=?= - =?charset?Q?AB?=" would be illegal, because the two hex digits "AB" - must follow the "=" in the same 'encoded-word'.) - - Each 'encoded-word' MUST represent an integral number of characters. - A multi-octet character may not be split across adjacent 'encoded- - word's. - - Only printable and white space character data should be encoded using - this scheme. However, since these encoding schemes allow the - encoding of arbitrary octet values, mail readers that implement this - decoding should also ensure that display of the decoded data on the - recipient's terminal will not cause unwanted side-effects. - - Use of these methods to encode non-textual data (e.g., pictures or - sounds) is not defined by this memo. Use of 'encoded-word's to - represent strings of purely ASCII characters is allowed, but - discouraged. In rare cases it may be necessary to encode ordinary - text that looks like an 'encoded-word'. - - - - - - - - - -Moore Standards Track [Page 8] - -RFC 2047 Message Header Extensions November 1996 - - -6. Support of 'encoded-word's by mail readers - -6.1. Recognition of 'encoded-word's in message headers - - A mail reader must parse the message and body part headers according - to the rules in RFC 822 to correctly recognize 'encoded-word's. - - 'encoded-word's are to be recognized as follows: - - (1) Any message or body part header field defined as '*text', or any - user-defined header field, should be parsed as follows: Beginning - at the start of the field-body and immediately following each - occurrence of 'linear-white-space', each sequence of up to 75 - printable characters (not containing any 'linear-white-space') - should be examined to see if it is an 'encoded-word' according to - the syntax rules in section 2. Any other sequence of printable - characters should be treated as ordinary ASCII text. - - (2) Any header field not defined as '*text' should be parsed - according to the syntax rules for that header field. However, - any 'word' that appears within a 'phrase' should be treated as an - 'encoded-word' if it meets the syntax rules in section 2. - Otherwise it should be treated as an ordinary 'word'. - - (3) Within a 'comment', any sequence of up to 75 printable characters - (not containing 'linear-white-space'), that meets the syntax - rules in section 2, should be treated as an 'encoded-word'. - Otherwise it should be treated as normal comment text. - - (4) A MIME-Version header field is NOT required to be present for - 'encoded-word's to be interpreted according to this - specification. One reason for this is that the mail reader is - not expected to parse the entire message header before displaying - lines that may contain 'encoded-word's. - -6.2. Display of 'encoded-word's - - Any 'encoded-word's so recognized are decoded, and if possible, the - resulting unencoded text is displayed in the original character set. - - NOTE: Decoding and display of encoded-words occurs *after* a - structured field body is parsed into tokens. It is therefore - possible to hide 'special' characters in encoded-words which, when - displayed, will be indistinguishable from 'special' characters in the - surrounding text. For this and other reasons, it is NOT generally - possible to translate a message header containing 'encoded-word's to - an unencoded form which can be parsed by an RFC 822 mail reader. - - - - -Moore Standards Track [Page 9] - -RFC 2047 Message Header Extensions November 1996 - - - When displaying a particular header field that contains multiple - 'encoded-word's, any 'linear-white-space' that separates a pair of - adjacent 'encoded-word's is ignored. (This is to allow the use of - multiple 'encoded-word's to represent long strings of unencoded text, - without having to separate 'encoded-word's where spaces occur in the - unencoded text.) - - In the event other encodings are defined in the future, and the mail - reader does not support the encoding used, it may either (a) display - the 'encoded-word' as ordinary text, or (b) substitute an appropriate - message indicating that the text could not be decoded. - - If the mail reader does not support the character set used, it may - (a) display the 'encoded-word' as ordinary text (i.e., as it appears - in the header), (b) make a "best effort" to display using such - characters as are available, or (c) substitute an appropriate message - indicating that the decoded text could not be displayed. - - If the character set being used employs code-switching techniques, - display of the encoded text implicitly begins in "ASCII mode". In - addition, the mail reader must ensure that the output device is once - again in "ASCII mode" after the 'encoded-word' is displayed. - -6.3. Mail reader handling of incorrectly formed 'encoded-word's - - It is possible that an 'encoded-word' that is legal according to the - syntax defined in section 2, is incorrectly formed according to the - rules for the encoding being used. For example: - - (1) An 'encoded-word' which contains characters which are not legal - for a particular encoding (for example, a "-" in the "B" - encoding, or a SPACE or HTAB in either the "B" or "Q" encoding), - is incorrectly formed. - - (2) Any 'encoded-word' which encodes a non-integral number of - characters or octets is incorrectly formed. - - A mail reader need not attempt to display the text associated with an - 'encoded-word' that is incorrectly formed. However, a mail reader - MUST NOT prevent the display or handling of a message because an - 'encoded-word' is incorrectly formed. - -7. Conformance - - A mail composing program claiming compliance with this specification - MUST ensure that any string of non-white-space printable ASCII - characters within a '*text' or '*ctext' that begins with "=?" and - ends with "?=" be a valid 'encoded-word'. ("begins" means: at the - - - -Moore Standards Track [Page 10] - -RFC 2047 Message Header Extensions November 1996 - - - start of the field-body, immediately following 'linear-white-space', - or immediately following a "(" for an 'encoded-word' within '*ctext'; - "ends" means: at the end of the field-body, immediately preceding - 'linear-white-space', or immediately preceding a ")" for an - 'encoded-word' within '*ctext'.) In addition, any 'word' within a - 'phrase' that begins with "=?" and ends with "?=" must be a valid - 'encoded-word'. - - A mail reading program claiming compliance with this specification - must be able to distinguish 'encoded-word's from 'text', 'ctext', or - 'word's, according to the rules in section 6, anytime they appear in - appropriate places in message headers. It must support both the "B" - and "Q" encodings for any character set which it supports. The - program must be able to display the unencoded text if the character - set is "US-ASCII". For the ISO-8859-* character sets, the mail - reading program must at least be able to display the characters which - are also in the ASCII set. - -8. Examples - - The following are examples of message headers containing 'encoded- - word's: - - From: =?US-ASCII?Q?Keith_Moore?= <moore@cs.utk.edu> - To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk> - CC: =?ISO-8859-1?Q?Andr=E9?= Pirard <PIRARD@vm1.ulg.ac.be> - Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= - =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?= - - Note: In the first 'encoded-word' of the Subject field above, the - last "=" at the end of the 'encoded-text' is necessary because each - 'encoded-word' must be self-contained (the "=" character completes a - group of 4 base64 characters representing 2 octets). An additional - octet could have been encoded in the first 'encoded-word' (so that - the encoded-word would contain an exact multiple of 3 encoded - octets), except that the second 'encoded-word' uses a different - 'charset' than the first one. - - From: =?ISO-8859-1?Q?Olle_J=E4rnefors?= <ojarnef@admin.kth.se> - To: ietf-822@dimacs.rutgers.edu, ojarnef@admin.kth.se - Subject: Time for ISO 10646? - - To: Dave Crocker <dcrocker@mordor.stanford.edu> - Cc: ietf-822@dimacs.rutgers.edu, paf@comsol.se - From: =?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= <paf@nada.kth.se> - Subject: Re: RFC-HDR care and feeding - - - - - -Moore Standards Track [Page 11] - -RFC 2047 Message Header Extensions November 1996 - - - From: Nathaniel Borenstein <nsb@thumper.bellcore.com> - (=?iso-8859-8?b?7eXs+SDv4SDp7Oj08A==?=) - To: Greg Vaudreuil <gvaudre@NRI.Reston.VA.US>, Ned Freed - <ned@innosoft.com>, Keith Moore <moore@cs.utk.edu> - Subject: Test of new header generator - MIME-Version: 1.0 - Content-type: text/plain; charset=ISO-8859-1 - - The following examples illustrate how text containing 'encoded-word's - which appear in a structured field body. The rules are slightly - different for fields defined as '*text' because "(" and ")" are not - recognized as 'comment' delimiters. [Section 5, paragraph (1)]. - - In each of the following examples, if the same sequence were to occur - in a '*text' field, the "displayed as" form would NOT be treated as - encoded words, but be identical to the "encoded form". This is - because each of the encoded-words in the following examples is - adjacent to a "(" or ")" character. - - encoded form displayed as - --------------------------------------------------------------------- - (=?ISO-8859-1?Q?a?=) (a) - - (=?ISO-8859-1?Q?a?= b) (a b) - - Within a 'comment', white space MUST appear between an - 'encoded-word' and surrounding text. [Section 5, - paragraph (2)]. However, white space is not needed between - the initial "(" that begins the 'comment', and the - 'encoded-word'. - - - (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=) (ab) - - White space between adjacent 'encoded-word's is not - displayed. - - (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=) (ab) - - Even multiple SPACEs between 'encoded-word's are ignored - for the purpose of display. - - (=?ISO-8859-1?Q?a?= (ab) - =?ISO-8859-1?Q?b?=) - - Any amount of linear-space-white between 'encoded-word's, - even if it includes a CRLF followed by one or more SPACEs, - is ignored for the purposes of display. - - - -Moore Standards Track [Page 12] - -RFC 2047 Message Header Extensions November 1996 - - - (=?ISO-8859-1?Q?a_b?=) (a b) - - In order to cause a SPACE to be displayed within a portion - of encoded text, the SPACE MUST be encoded as part of the - 'encoded-word'. - - (=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=) (a b) - - In order to cause a SPACE to be displayed between two strings - of encoded text, the SPACE MAY be encoded as part of one of - the 'encoded-word's. - -9. References - - [RFC 822] Crocker, D., "Standard for the Format of ARPA Internet Text - Messages", STD 11, RFC 822, UDEL, August 1982. - - [RFC 2049] Borenstein, N., and N. Freed, "Multipurpose Internet Mail - Extensions (MIME) Part Five: Conformance Criteria and Examples", - RFC 2049, November 1996. - - [RFC 2045] Borenstein, N., and N. Freed, "Multipurpose Internet Mail - Extensions (MIME) Part One: Format of Internet Message Bodies", - RFC 2045, November 1996. - - [RFC 2046] Borenstein N., and N. Freed, "Multipurpose Internet Mail - Extensions (MIME) Part Two: Media Types", RFC 2046, - November 1996. - - [RFC 2048] Freed, N., Klensin, J., and J. Postel, "Multipurpose - Internet Mail Extensions (MIME) Part Four: Registration - Procedures", RFC 2048, November 1996. - - - - - - - - - - - - - - - - - - - -Moore Standards Track [Page 13] - -RFC 2047 Message Header Extensions November 1996 - - -10. Security Considerations - - Security issues are not discussed in this memo. - -11. Acknowledgements - - The author wishes to thank Nathaniel Borenstein, Issac Chan, Lutz - Donnerhacke, Paul Eggert, Ned Freed, Andreas M. Kirchwitz, Olle - Jarnefors, Mike Rosin, Yutaka Sato, Bart Schaefer, and Kazuhiko - Yamamoto, for their helpful advice, insightful comments, and - illuminating questions in response to earlier versions of this - specification. - -12. Author's Address - - Keith Moore - University of Tennessee - 107 Ayres Hall - Knoxville TN 37996-1301 - - EMail: moore@cs.utk.edu - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Moore Standards Track [Page 14] - -RFC 2047 Message Header Extensions November 1996 - - -Appendix - changes since RFC 1522 (in no particular order) - - + explicitly state that the MIME-Version is not requried to use - 'encoded-word's. - - + add explicit note that SPACEs and TABs are not allowed within - 'encoded-word's, explaining that an 'encoded-word' must look like an - 'atom' to an RFC822 parser.values, to be precise). - - + add examples from Olle Jarnefors (thanks!) which illustrate how - encoded-words with adjacent linear-white-space are displayed. - - + explicitly list terms defined in RFC822 and referenced in this memo - - + fix transcription typos that caused one or two lines and a couple of - characters to disappear in the resulting text, due to nroff quirks. - - + clarify that encoded-words are allowed in '*text' fields in both - RFC822 headers and MIME body part headers, but NOT as parameter - values. - - + clarify the requirement to switch back to ASCII within the encoded - portion of an 'encoded-word', for any charset that uses code switching - sequences. - - + add a note about 'encoded-word's being delimited by "(" and ")" - within a comment, but not in a *text (how bizarre!). - - + fix the Andre Pirard example to get rid of the trailing "_" after - the =E9. (no longer needed post-1342). - - + clarification: an 'encoded-word' may appear immediately following - the initial "(" or immediately before the final ")" that delimits a - comment, not just adjacent to "(" and ")" *within* *ctext. - - + add a note to explain that a "B" 'encoded-word' will always have a - multiple of 4 characters in the 'encoded-text' portion. - - + add note about the "=" in the examples - - + note that processing of 'encoded-word's occurs *after* parsing, and - some of the implications thereof. - - + explicitly state that you can't expect to translate between - 1522 and either vanilla 822 or so-called "8-bit headers". - - + explicitly state that 'encoded-word's are not valid within a - 'quoted-string'. - - - -Moore Standards Track [Page 15] - diff --git a/doc/src/rfc2048.txt b/doc/src/rfc2048.txt deleted file mode 100644 index a3b18b31e..000000000 --- a/doc/src/rfc2048.txt +++ /dev/null @@ -1,1180 +0,0 @@ - - - - - - -Network Working Group N. Freed -Request for Comments: 2048 Innosoft -BCP: 13 J. Klensin -Obsoletes: 1521, 1522, 1590 MCI -Category: Best Current Practice J. Postel - ISI - November 1996 - - - Multipurpose Internet Mail Extensions - (MIME) Part Four: - Registration Procedures - -Status of this Memo - - This document specifies an Internet Best Current Practices for the - Internet Community, and requests discussion and suggestions for - improvements. Distribution of this memo is unlimited. - -Abstract - - STD 11, RFC 822, defines a message representation protocol specifying - considerable detail about US-ASCII message headers, and leaves the - message content, or message body, as flat US-ASCII text. This set of - documents, collectively called the Multipurpose Internet Mail - Extensions, or MIME, redefines the format of messages to allow for - - (1) textual message bodies in character sets other than - US-ASCII, - - (2) an extensible set of different formats for non-textual - message bodies, - - (3) multi-part message bodies, and - - (4) textual header information in character sets other than - US-ASCII. - - These documents are based on earlier work documented in RFC 934, STD - 11, and RFC 1049, but extends and revises them. Because RFC 822 said - so little about message bodies, these documents are largely - orthogonal to (rather than a revision of) RFC 822. - - - - - - - - - -Freed, et. al. Best Current Practice [Page 1] - -RFC 2048 MIME Registration Procedures November 1996 - - - This fourth document, RFC 2048, specifies various IANA registration - procedures for the following MIME facilities: - - (1) media types, - - (2) external body access types, - - (3) content-transfer-encodings. - - Registration of character sets for use in MIME is covered elsewhere - and is no longer addressed by this document. - - These documents are revisions of RFCs 1521 and 1522, which themselves - were revisions of RFCs 1341 and 1342. An appendix in RFC 2049 - describes differences and changes from previous versions. - -Table of Contents - - 1. Introduction ......................................... 3 - 2. Media Type Registration .............................. 4 - 2.1 Registration Trees and Subtype Names ................ 4 - 2.1.1 IETF Tree ......................................... 4 - 2.1.2 Vendor Tree ....................................... 4 - 2.1.3 Personal or Vanity Tree ........................... 5 - 2.1.4 Special `x.' Tree ................................. 5 - 2.1.5 Additional Registration Trees ..................... 6 - 2.2 Registration Requirements ........................... 6 - 2.2.1 Functionality Requirement ......................... 6 - 2.2.2 Naming Requirements ............................... 6 - 2.2.3 Parameter Requirements ............................ 7 - 2.2.4 Canonicalization and Format Requirements .......... 7 - 2.2.5 Interchange Recommendations ....................... 8 - 2.2.6 Security Requirements ............................. 8 - 2.2.7 Usage and Implementation Non-requirements ......... 9 - 2.2.8 Publication Requirements .......................... 10 - 2.2.9 Additional Information ............................ 10 - 2.3 Registration Procedure .............................. 11 - 2.3.1 Present the Media Type to the Community for Review 11 - 2.3.2 IESG Approval ..................................... 12 - 2.3.3 IANA Registration ................................. 12 - 2.4 Comments on Media Type Registrations ................ 12 - 2.5 Location of Registered Media Type List .............. 12 - 2.6 IANA Procedures for Registering Media Types ......... 12 - 2.7 Change Control ...................................... 13 - 2.8 Registration Template ............................... 14 - 3. External Body Access Types ........................... 14 - 3.1 Registration Requirements ........................... 15 - 3.1.1 Naming Requirements ............................... 15 - - - -Freed, et. al. Best Current Practice [Page 2] - -RFC 2048 MIME Registration Procedures November 1996 - - - 3.1.2 Mechanism Specification Requirements .............. 15 - 3.1.3 Publication Requirements .......................... 15 - 3.1.4 Security Requirements ............................. 15 - 3.2 Registration Procedure .............................. 15 - 3.2.1 Present the Access Type to the Community .......... 16 - 3.2.2 Access Type Reviewer .............................. 16 - 3.2.3 IANA Registration ................................. 16 - 3.3 Location of Registered Access Type List ............. 16 - 3.4 IANA Procedures for Registering Access Types ........ 16 - 4. Transfer Encodings ................................... 17 - 4.1 Transfer Encoding Requirements ...................... 17 - 4.1.1 Naming Requirements ............................... 17 - 4.1.2 Algorithm Specification Requirements .............. 18 - 4.1.3 Input Domain Requirements ......................... 18 - 4.1.4 Output Range Requirements ......................... 18 - 4.1.5 Data Integrity and Generality Requirements ........ 18 - 4.1.6 New Functionality Requirements .................... 18 - 4.2 Transfer Encoding Definition Procedure .............. 19 - 4.3 IANA Procedures for Transfer Encoding Registration... 19 - 4.4 Location of Registered Transfer Encodings List ...... 19 - 5. Authors' Addresses ................................... 20 - A. Grandfathered Media Types ............................ 21 - -1. Introduction - - Recent Internet protocols have been carefully designed to be easily - extensible in certain areas. In particular, MIME [RFC 2045] is an - open-ended framework and can accommodate additional object types, - character sets, and access methods without any changes to the basic - protocol. A registration process is needed, however, to ensure that - the set of such values is developed in an orderly, well-specified, - and public manner. - - This document defines registration procedures which use the Internet - Assigned Numbers Authority (IANA) as a central registry for such - values. - - Historical Note: The registration process for media types was - initially defined in the context of the asynchronous Internet mail - environment. In this mail environment there is a need to limit the - number of possible media types to increase the likelihood of - interoperability when the capabilities of the remote mail system are - not known. As media types are used in new environments, where the - proliferation of media types is not a hindrance to interoperability, - the original procedure was excessively restrictive and had to be - generalized. - - - - - -Freed, et. al. Best Current Practice [Page 3] - -RFC 2048 MIME Registration Procedures November 1996 - - -2. Media Type Registration - - Registration of a new media type or types starts with the - construction of a registration proposal. Registration may occur in - several different registration trees, which have different - requirements as discussed below. In general, the new registration - proposal is circulated and reviewed in a fashion appropriate to the - tree involved. The media type is then registered if the proposal is - acceptable. The following sections describe the requirements and - procedures used for each of the different registration trees. - -2.1. Registration Trees and Subtype Names - - In order to increase the efficiency and flexibility of the - registration process, different structures of subtype names may be - registered to accomodate the different natural requirements for, - e.g., a subtype that will be recommended for wide support and - implementation by the Internet Community or a subtype that is used to - move files associated with proprietary software. The following - subsections define registration "trees", distinguished by the use of - faceted names (e.g., names of the form "tree.subtree...type"). Note - that some media types defined prior to this document do not conform - to the naming conventions described below. See Appendix A for a - discussion of them. - -2.1.1. IETF Tree - - The IETF tree is intended for types of general interest to the - Internet Community. Registration in the IETF tree requires approval - by the IESG and publication of the media type registration as some - form of RFC. - - Media types in the IETF tree are normally denoted by names that are - not explicitly faceted, i.e., do not contain period (".", full stop) - characters. - - The "owner" of a media type registration in the IETF tree is assumed - to be the IETF itself. Modification or alteration of the - specification requires the same level of processing (e.g. standards - track) required for the initial registration. - -2.1.2. Vendor Tree - - The vendor tree is used for media types associated with commercially - available products. "Vendor" or "producer" are construed as - equivalent and very broadly in this context. - - - - - -Freed, et. al. Best Current Practice [Page 4] - -RFC 2048 MIME Registration Procedures November 1996 - - - A registration may be placed in the vendor tree by anyone who has - need to interchange files associated with the particular product. - However, the registration formally belongs to the vendor or - organization producing the software or file format. Changes to the - specification will be made at their request, as discussed in - subsequent sections. - - Registrations in the vendor tree will be distinguished by the leading - facet "vnd.". That may be followed, at the discretion of the - registration, by either a media type name from a well-known producer - (e.g., "vnd.mudpie") or by an IANA-approved designation of the - producer's name which is then followed by a media type or product - designation (e.g., vnd.bigcompany.funnypictures). - - While public exposure and review of media types to be registered in - the vendor tree is not required, using the ietf-types list for review - is strongly encouraged to improve the quality of those - specifications. Registrations in the vendor tree may be submitted - directly to the IANA. - -2.1.3. Personal or Vanity Tree - - Registrations for media types created experimentally or as part of - products that are not distributed commercially may be registered in - the personal or vanity tree. The registrations are distinguished by - the leading facet "prs.". - - The owner of "personal" registrations and associated specifications - is the person or entity making the registration, or one to whom - responsibility has been transferred as described below. - - While public exposure and review of media types to be registered in - the personal tree is not required, using the ietf-types list for - review is strongly encouraged to improve the quality of those - specifications. Registrations in the personl tree may be submitted - directly to the IANA. - -2.1.4. Special `x.' Tree - - For convenience and symmetry with this registration scheme, media - type names with "x." as the first facet may be used for the same - purposes for which names starting in "x-" are normally used. These - types are unregistered, experimental, and should be used only with - the active agreement of the parties exchanging them. - - - - - - - -Freed, et. al. Best Current Practice [Page 5] - -RFC 2048 MIME Registration Procedures November 1996 - - - However, with the simplified registration procedures described above - for vendor and personal trees, it should rarely, if ever, be - necessary to use unregistered experimental types, and as such use of - both "x-" and "x." forms is discouraged. - -2.1.5. Additional Registration Trees - - From time to time and as required by the community, the IANA may, - with the advice and consent of the IESG, create new top-level - registration trees. It is explicitly assumed that these trees may be - created for external registration and management by well-known - permanent bodies, such as scientific societies for media types - specific to the sciences they cover. In general, the quality of - review of specifications for one of these additional registration - trees is expected to be equivalent to that which IETF would give to - registrations in its own tree. Establishment of these new trees will - be announced through RFC publication approved by the IESG. - -2.2. Registration Requirements - - Media type registration proposals are all expected to conform to - various requirements laid out in the following sections. Note that - requirement specifics sometimes vary depending on the registration - tree, again as detailed in the following sections. - -2.2.1. Functionality Requirement - - Media types must function as an actual media format: Registration of - things that are better thought of as a transfer encoding, as a - character set, or as a collection of separate entities of another - type, is not allowed. For example, although applications exist to - decode the base64 transfer encoding [RFC 2045], base64 cannot be - registered as a media type. - - This requirement applies regardless of the registration tree - involved. - -2.2.2. Naming Requirements - - All registered media types must be assigned MIME type and subtype - names. The combination of these names then serves to uniquely - identify the media type and the format of the subtype name identifies - the registration tree. - - The choice of top-level type name must take the nature of media type - involved into account. For example, media normally used for - representing still images should be a subtype of the image content - type, whereas media capable of representing audio information belongs - - - -Freed, et. al. Best Current Practice [Page 6] - -RFC 2048 MIME Registration Procedures November 1996 - - - under the audio content type. See RFC 2046 for additional information - on the basic set of top-level types and their characteristics. - - New subtypes of top-level types must conform to the restrictions of - the top-level type, if any. For example, all subtypes of the - multipart content type must use the same encapsulation syntax. - - In some cases a new media type may not "fit" under any currently - defined top-level content type. Such cases are expected to be quite - rare. However, if such a case arises a new top-level type can be - defined to accommodate it. Such a definition must be done via - standards-track RFC; no other mechanism can be used to define - additional top-level content types. - - These requirements apply regardless of the registration tree - involved. - -2.2.3. Parameter Requirements - - Media types may elect to use one or more MIME content type - parameters, or some parameters may be automatically made available to - the media type by virtue of being a subtype of a content type that - defines a set of parameters applicable to any of its subtypes. In - either case, the names, values, and meanings of any parameters must - be fully specified when a media type is registered in the IETF tree, - and should be specified as completely as possible when media types - are registered in the vendor or personal trees. - - New parameters must not be defined as a way to introduce new - functionality in types registered in the IETF tree, although new - parameters may be added to convey additional information that does - not otherwise change existing functionality. An example of this - would be a "revision" parameter to indicate a revision level of an - external specification such as JPEG. Similar behavior is encouraged - for media types registered in the vendor or personal trees but is not - required. - -2.2.4. Canonicalization and Format Requirements - - All registered media types must employ a single, canonical data - format, regardless of registration tree. - - A precise and openly available specification of the format of each - media type is required for all types registered in the IETF tree and - must at a minimum be referenced by, if it isn't actually included in, - the media type registration proposal itself. - - - - - -Freed, et. al. Best Current Practice [Page 7] - -RFC 2048 MIME Registration Procedures November 1996 - - - The specifications of format and processing particulars may or may - not be publically available for media types registered in the vendor - tree, and such registration proposals are explicitly permitted to - include only a specification of which software and version produce or - process such media types. References to or inclusion of format - specifications in registration proposals is encouraged but not - required. - - Format specifications are still required for registration in the - personal tree, but may be either published as RFCs or otherwise - deposited with IANA. The deposited specifications will meet the same - criteria as those required to register a well-known TCP port and, in - particular, need not be made public. - - Some media types involve the use of patented technology. The - registration of media types involving patented technology is - specifically permitted. However, the restrictions set forth in RFC - 1602 on the use of patented technology in standards-track protocols - must be respected when the specification of a media type is part of a - standards-track protocol. - -2.2.5. Interchange Recommendations - - Media types should, whenever possible, interoperate across as many - systems and applications as possible. However, some media types will - inevitably have problems interoperating across different platforms. - Problems with different versions, byte ordering, and specifics of - gateway handling can and will arise. - - Universal interoperability of media types is not required, but known - interoperability issues should be identified whenever possible. - Publication of a media type does not require an exhaustive review of - interoperability, and the interoperability considerations section is - subject to continuing evaluation. - - These recommendations apply regardless of the registration tree - involved. - -2.2.6. Security Requirements - - An analysis of security issues is required for for all types - registered in the IETF Tree. (This is in accordance with the basic - requirements for all IETF protocols.) A similar analysis for media - types registered in the vendor or personal trees is encouraged but - not required. However, regardless of what security analysis has or - has not been done, all descriptions of security issues must be as - accurate as possible regardless of registration tree. In particular, - a statement that there are "no security issues associated with this - - - -Freed, et. al. Best Current Practice [Page 8] - -RFC 2048 MIME Registration Procedures November 1996 - - - type" must not be confused with "the security issues associates with - this type have not been assessed". - - There is absolutely no requirement that media types registered in any - tree be secure or completely free from risks. Nevertheless, all - known security risks must be identified in the registration of a - media type, again regardless of registration tree. - - The security considerations section of all registrations is subject - to continuing evaluation and modification, and in particular may be - extended by use of the "comments on media types" mechanism described - in subsequent sections. - - Some of the issues that should be looked at in a security analysis of - a media type are: - - (1) Complex media types may include provisions for - directives that institute actions on a recipient's - files or other resources. In many cases provision is - made for originators to specify arbitrary actions in an - unrestricted fashion which may then have devastating - effects. See the registration of the - application/postscript media type in RFC 2046 for - an example of such directives and how to handle them. - - (2) Complex media types may include provisions for - directives that institute actions which, while not - directly harmful to the recipient, may result in - disclosure of information that either facilitates a - subsequent attack or else violates a recipient's - privacy in some way. Again, the registration of the - application/postscript media type illustrates how such - directives can be handled. - - (3) A media type might be targeted for applications that - require some sort of security assurance but not provide - the necessary security mechanisms themselves. For - example, a media type could be defined for storage of - confidential medical information which in turn requires - an external confidentiality service. - -2.2.7. Usage and Implementation Non-requirements - - In the asynchronous mail environment, where information on the - capabilities of the remote mail agent is frequently not available to - the sender, maximum interoperability is attained by restricting the - number of media types used to those "common" formats expected to be - widely implemented. This was asserted in the past as a reason to - - - -Freed, et. al. Best Current Practice [Page 9] - -RFC 2048 MIME Registration Procedures November 1996 - - - limit the number of possible media types and resulted in a - registration process with a significant hurdle and delay for those - registering media types. - - However, the need for "common" media types does not require limiting - the registration of new media types. If a limited set of media types - is recommended for a particular application, that should be asserted - by a separate applicability statement specific for the application - and/or environment. - - As such, universal support and implementation of a media type is NOT - a requirement for registration. If, however, a media type is - explicitly intended for limited use, this should be noted in its - registration. - -2.2.8. Publication Requirements - - Proposals for media types registered in the IETF tree must be - published as RFCs. RFC publication of vendor and personal media type - proposals is encouraged but not required. In all cases IANA will - retain copies of all media type proposals and "publish" them as part - of the media types registration tree itself. - - Other than in the IETF tree, the registration of a data type does not - imply endorsement, approval, or recommendation by IANA or IETF or - even certification that the specification is adequate. To become - Internet Standards, protocol, data objects, or whatever must go - through the IETF standards process. This is too difficult and too - lengthy a process for the convenient registration of media types. - - The IETF tree exists for media types that do require require a - substantive review and approval process with the vendor and personal - trees exist for those that do not. It is expected that applicability - statements for particular applications will be published from time to - time that recommend implementation of, and support for, media types - that have proven particularly useful in those contexts. - - As discussed above, registration of a top-level type requires - standards-track processing and, hence, RFC publication. - -2.2.9. Additional Information - - Various sorts of optional information may be included in the - specification of a media type if it is available: - - (1) Magic number(s) (length, octet values). Magic numbers - are byte sequences that are always present and thus can - be used to identify entities as being of a given media - - - -Freed, et. al. Best Current Practice [Page 10] - -RFC 2048 MIME Registration Procedures November 1996 - - - type. - - (2) File extension(s) commonly used on one or more - platforms to indicate that some file containing a given - type of media. - - (3) Macintosh File Type code(s) (4 octets) used to label - files containing a given type of media. - - Such information is often quite useful to implementors and if - available should be provided. - -2.3. Registration Procedure - - The following procedure has been implemented by the IANA for review - and approval of new media types. This is not a formal standards - process, but rather an administrative procedure intended to allow - community comment and sanity checking without excessive time delay. - For registration in the IETF tree, the normal IETF processes should - be followed, treating posting of an internet-draft and announcement - on the ietf-types list (as described in the next subsection) as a - first step. For registrations in the vendor or personal tree, the - initial review step described below may be omitted and the type - registered directly by submitting the template and an explanation - directly to IANA (at iana@iana.org). However, authors of vendor or - personal media type specifications are encouraged to seek community - review and comment whenever that is feasible. - -2.3.1. Present the Media Type to the Community for Review - - Send a proposed media type registration to the "ietf-types@iana.org" - mailing list for a two week review period. This mailing list has - been established for the purpose of reviewing proposed media and - access types. Proposed media types are not formally registered and - must not be used; the "x-" prefix specified in RFC 2045 can be used - until registration is complete. - - The intent of the public posting is to solicit comments and feedback - on the choice of type/subtype name, the unambiguity of the references - with respect to versions and external profiling information, and a - review of any interoperability or security considerations. The - submitter may submit a revised registration, or withdraw the - registration completely, at any time. - - - - - - - - -Freed, et. al. Best Current Practice [Page 11] - -RFC 2048 MIME Registration Procedures November 1996 - - -2.3.2. IESG Approval - - Media types registered in the IETF tree must be submitted to the IESG - for approval. - -2.3.3. IANA Registration - - Provided that the media type meets the requirements for media types - and has obtained approval that is necessary, the author may submit - the registration request to the IANA, which will register the media - type and make the media type registration available to the community. - -2.4. Comments on Media Type Registrations - - Comments on registered media types may be submitted by members of the - community to IANA. These comments will be passed on to the "owner" - of the media type if possible. Submitters of comments may request - that their comment be attached to the media type registration itself, - and if IANA approves of this the comment will be made accessible in - conjunction with the type registration itself. - -2.5. Location of Registered Media Type List - - Media type registrations will be posted in the anonymous FTP - directory "ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/" - and all registered media types will be listed in the periodically - issued "Assigned Numbers" RFC [currently STD 2, RFC 1700]. The media - type description and other supporting material may also be published - as an Informational RFC by sending it to "rfc-editor@isi.edu" (please - follow the instructions to RFC authors [RFC-1543]). - -2.6. IANA Procedures for Registering Media Types - - The IANA will only register media types in the IETF tree in response - to a communication from the IESG stating that a given registration - has been approved. Vendor and personal types will be registered by - the IANA automatically and without any formal review as long as the - following minimal conditions are met: - - (1) Media types must function as an actual media format. - In particular, character sets and transfer encodings - may not be registered as media types. - - (2) All media types must have properly formed type and - subtype names. All type names must be defined by a - standards-track RFC. All subtype names must be unique, - must conform to the MIME grammar for such names, and - must contain the proper tree prefix. - - - -Freed, et. al. Best Current Practice [Page 12] - -RFC 2048 MIME Registration Procedures November 1996 - - - (3) Types registered in the personal tree must either - provide a format specification or a pointer to one. - - (4) Any security considerations given must not be obviously - bogus. (It is neither possible nor necessary for the - IANA to conduct a comprehensive security review of - media type registrations. Nevertheless, IANA has the - authority to identify obviously incompetent material - and exclude it.) - -2.7. Change Control - - Once a media type has been published by IANA, the author may request - a change to its definition. The descriptions of the different - registration trees above designate the "owners" of each type of - registration. The change request follows the same procedure as the - registration request: - - (1) Publish the revised template on the ietf-types list. - - (2) Leave at least two weeks for comments. - - (3) Publish using IANA after formal review if required. - - Changes should be requested only when there are serious omission or - errors in the published specification. When review is required, a - change request may be denied if it renders entities that were valid - under the previous definition invalid under the new definition. - - The owner of a content type may pass responsibility for the content - type to another person or agency by informing IANA and the ietf-types - list; this can be done without discussion or review. - - The IESG may reassign responsibility for a media type. The most - common case of this will be to enable changes to be made to types - where the author of the registration has died, moved out of contact - or is otherwise unable to make changes that are important to the - community. - - Media type registrations may not be deleted; media types which are no - longer believed appropriate for use can be declared OBSOLETE by a - change to their "intended use" field; such media types will be - clearly marked in the lists published by IANA. - - - - - - - - -Freed, et. al. Best Current Practice [Page 13] - -RFC 2048 MIME Registration Procedures November 1996 - - -2.8. Registration Template - - To: ietf-types@iana.org - Subject: Registration of MIME media type XXX/YYY - - MIME media type name: - - MIME subtype name: - - Required parameters: - - Optional parameters: - - Encoding considerations: - - Security considerations: - - Interoperability considerations: - - Published specification: - - Applications which use this media type: - - Additional information: - - Magic number(s): - File extension(s): - Macintosh File Type Code(s): - - Person & email address to contact for further information: - - Intended usage: - - (One of COMMON, LIMITED USE or OBSOLETE) - - Author/Change controller: - - (Any other information that the author deems interesting may be - added below this line.) - -3. External Body Access Types - - RFC 2046 defines the message/external-body media type, whereby a MIME - entity can act as pointer to the actual body data in lieu of - including the data directly in the entity body. Each - message/external-body reference specifies an access type, which - determines the mechanism used to retrieve the actual body data. RFC - 2046 defines an initial set of access types, but allows for the - - - -Freed, et. al. Best Current Practice [Page 14] - -RFC 2048 MIME Registration Procedures November 1996 - - - registration of additional access types to accommodate new retrieval - mechanisms. - -3.1. Registration Requirements - - New access type specifications must conform to a number of - requirements as described below. - -3.1.1. Naming Requirements - - Each access type must have a unique name. This name appears in the - access-type parameter in the message/external-body content-type - header field, and must conform to MIME content type parameter syntax. - -3.1.2. Mechanism Specification Requirements - - All of the protocols, transports, and procedures used by a given - access type must be described, either in the specification of the - access type itself or in some other publicly available specification, - in sufficient detail for the access type to be implemented by any - competent implementor. Use of secret and/or proprietary methods in - access types are expressly prohibited. The restrictions imposed by - RFC 1602 on the standardization of patented algorithms must be - respected as well. - -3.1.3. Publication Requirements - - All access types must be described by an RFC. The RFC may be - informational rather than standards-track, although standard-track - review and approval are encouraged for all access types. - -3.1.4. Security Requirements - - Any known security issues that arise from the use of the access type - must be completely and fully described. It is not required that the - access type be secure or that it be free from risks, but that the - known risks be identified. Publication of a new access type does not - require an exhaustive security review, and the security - considerations section is subject to continuing evaluation. - Additional security considerations should be addressed by publishing - revised versions of the access type specification. - -3.2. Registration Procedure - - Registration of a new access type starts with the construction of a - draft of an RFC. - - - - - -Freed, et. al. Best Current Practice [Page 15] - -RFC 2048 MIME Registration Procedures November 1996 - - -3.2.1. Present the Access Type to the Community - - Send a proposed access type specification to the "ietf- - types@iana.org" mailing list for a two week review period. This - mailing list has been established for the purpose of reviewing - proposed access and media types. Proposed access types are not - formally registered and must not be used. - - The intent of the public posting is to solicit comments and feedback - on the access type specification and a review of any security - considerations. - -3.2.2. Access Type Reviewer - - When the two week period has passed, the access type reviewer, who is - appointed by the IETF Applications Area Director, either forwards the - request to iana@isi.edu, or rejects it because of significant - objections raised on the list. - - Decisions made by the reviewer must be posted to the ietf-types - mailing list within 14 days. Decisions made by the reviewer may be - appealed to the IESG. - -3.2.3. IANA Registration - - Provided that the access type has either passed review or has been - successfully appealed to the IESG, the IANA will register the access - type and make the registration available to the community. The - specification of the access type must also be published as an RFC. - Informational RFCs are published by sending them to "rfc- - editor@isi.edu" (please follow the instructions to RFC authors [RFC- - 1543]). - -3.3. Location of Registered Access Type List - - Access type registrations will be posted in the anonymous FTP - directory "ftp://ftp.isi.edu/in-notes/iana/assignments/access-types/" - and all registered access types will be listed in the periodically - issued "Assigned Numbers" RFC [currently RFC-1700]. - -3.4. IANA Procedures for Registering Access Types - - The identity of the access type reviewer is communicated to the IANA - by the IESG. The IANA then only acts in response to access type - definitions that either are approved by the access type reviewer and - forwarded by the reviewer to the IANA for registration, or in - response to a communication from the IESG that an access type - definition appeal has overturned the access type reviewer's ruling. - - - -Freed, et. al. Best Current Practice [Page 16] - -RFC 2048 MIME Registration Procedures November 1996 - - -4. Transfer Encodings - - Transfer encodings are tranformations applied to MIME media types - after conversion to the media type's canonical form. Transfer - encodings are used for several purposes: - - (1) Many transports, especially message transports, can - only handle data consisting of relatively short lines - of text. There can also be severe restrictions on what - characters can be used in these lines of text -- some - transports are restricted to a small subset of US-ASCII - and others cannot handle certain character sequences. - Transfer encodings are used to transform binary data - into textual form that can survive such transports. - Examples of this sort of transfer encoding include the - base64 and quoted-printable transfer encodings defined - in RFC 2045. - - (2) Image, audio, video, and even application entities are - sometimes quite large. Compression algorithms are often - quite effective in reducing the size of large entities. - Transfer encodings can be used to apply general-purpose - non-lossy compression algorithms to MIME entities. - - (3) Transport encodings can be defined as a means of - representing existing encoding formats in a MIME - context. - - IMPORTANT: The standardization of a large numbers of different - transfer encodings is seen as a significant barrier to widespread - interoperability and is expressely discouraged. Nevertheless, the - following procedure has been defined to provide a means of defining - additional transfer encodings, should standardization actually be - justified. - -4.1. Transfer Encoding Requirements - - Transfer encoding specifications must conform to a number of - requirements as described below. - -4.1.1. Naming Requirements - - Each transfer encoding must have a unique name. This name appears in - the Content-Transfer-Encoding header field and must conform to the - syntax of that field. - - - - - - -Freed, et. al. Best Current Practice [Page 17] - -RFC 2048 MIME Registration Procedures November 1996 - - -4.1.2. Algorithm Specification Requirements - - All of the algorithms used in a transfer encoding (e.g. conversion - to printable form, compression) must be described in their entirety - in the transfer encoding specification. Use of secret and/or - proprietary algorithms in standardized transfer encodings are - expressly prohibited. The restrictions imposed by RFC 1602 on the - standardization of patented algorithms must be respected as well. - -4.1.3. Input Domain Requirements - - All transfer encodings must be applicable to an arbitrary sequence of - octets of any length. Dependence on particular input forms is not - allowed. - - It should be noted that the 7bit and 8bit encodings do not conform to - this requirement. Aside from the undesireability of having - specialized encodings, the intent here is to forbid the addition of - additional encodings along the lines of 7bit and 8bit. - -4.1.4. Output Range Requirements - - There is no requirement that a particular tranfer encoding produce a - particular form of encoded output. However, the output format for - each transfer encoding must be fully and completely documented. In - particular, each specification must clearly state whether the output - format always lies within the confines of 7bit data, 8bit data, or is - simply pure binary data. - -4.1.5. Data Integrity and Generality Requirements - - All transfer encodings must be fully invertible on any platform; it - must be possible for anyone to recover the original data by - performing the corresponding decoding operation. Note that this - requirement effectively excludes all forms of lossy compression as - well as all forms of encryption from use as a transfer encoding. - -4.1.6. New Functionality Requirements - - All transfer encodings must provide some sort of new functionality. - Some degree of functionality overlap with previously defined transfer - encodings is acceptable, but any new transfer encoding must also - offer something no other transfer encoding provides. - - - - - - - - -Freed, et. al. Best Current Practice [Page 18] - -RFC 2048 MIME Registration Procedures November 1996 - - -4.2. Transfer Encoding Definition Procedure - - Definition of a new transfer encoding starts with the construction of - a draft of a standards-track RFC. The RFC must define the transfer - encoding precisely and completely, and must also provide substantial - justification for defining and standardizing a new transfer encoding. - This specification must then be presented to the IESG for - consideration. The IESG can - - (1) reject the specification outright as being - inappropriate for standardization, - - (2) approve the formation of an IETF working group to work - on the specification in accordance with IETF - procedures, or, - - (3) accept the specification as-is and put it directly on - the standards track. - - Transfer encoding specifications on the standards track follow normal - IETF rules for standards track documents. A transfer encoding is - considered to be defined and available for use once it is on the - standards track. - -4.3. IANA Procedures for Transfer Encoding Registration - - There is no need for a special procedure for registering Transfer - Encodings with the IANA. All legitimate transfer encoding - registrations must appear as a standards-track RFC, so it is the - IESG's responsibility to notify the IANA when a new transfer encoding - has been approved. - -4.4. Location of Registered Transfer Encodings List - - Transfer encoding registrations will be posted in the anonymous FTP - directory "ftp://ftp.isi.edu/in-notes/iana/assignments/transfer- - encodings/" and all registered transfer encodings will be listed in - the periodically issued "Assigned Numbers" RFC [currently RFC-1700]. - - - - - - - - - - - - - -Freed, et. al. Best Current Practice [Page 19] - -RFC 2048 MIME Registration Procedures November 1996 - - -5. Authors' Addresses - - For more information, the authors of this document are best - contacted via Internet mail: - - Ned Freed - Innosoft International, Inc. - 1050 East Garvey Avenue South - West Covina, CA 91790 - USA - - Phone: +1 818 919 3600 - Fax: +1 818 919 3614 - EMail: ned@innosoft.com - - - John Klensin - MCI - 2100 Reston Parkway - Reston, VA 22091 - - Phone: +1 703 715-7361 - Fax: +1 703 715-7436 - EMail: klensin@mci.net - - - Jon Postel - USC/Information Sciences Institute - 4676 Admiralty Way - Marina del Rey, CA 90292 - USA - - - Phone: +1 310 822 1511 - Fax: +1 310 823 6714 - EMail: Postel@ISI.EDU - - - - - - - - - - - - - - - -Freed, et. al. Best Current Practice [Page 20] - -RFC 2048 MIME Registration Procedures November 1996 - - -Appendix A -- Grandfathered Media Types - - A number of media types, registered prior to 1996, would, if - registered under the guidelines in this document, be placed into - either the vendor or personal trees. Reregistration of those types - to reflect the appropriate trees is encouraged, but not required. - Ownership and change control principles outlined in this document - apply to those types as if they had been registered in the trees - described above. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Freed, et. al. Best Current Practice [Page 21] - diff --git a/doc/src/rfc2049.txt b/doc/src/rfc2049.txt deleted file mode 100644 index 99f174b95..000000000 --- a/doc/src/rfc2049.txt +++ /dev/null @@ -1,1347 +0,0 @@ - - - - - - -Network Working Group N. Freed -Request for Comments: 2049 Innosoft -Obsoletes: 1521, 1522, 1590 N. Borenstein -Category: Standards Track First Virtual - November 1996 - - - Multipurpose Internet Mail Extensions - (MIME) Part Five: - Conformance Criteria and Examples - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Abstract - - STD 11, RFC 822, defines a message representation protocol specifying - considerable detail about US-ASCII message headers, and leaves the - message content, or message body, as flat US-ASCII text. This set of - documents, collectively called the Multipurpose Internet Mail - Extensions, or MIME, redefines the format of messages to allow for - - (1) textual message bodies in character sets other than - US-ASCII, - - (2) an extensible set of different formats for non-textual - message bodies, - - (3) multi-part message bodies, and - - (4) textual header information in character sets other than - US-ASCII. - - These documents are based on earlier work documented in RFC 934, STD - 11, and RFC 1049, but extends and revises them. Because RFC 822 said - so little about message bodies, these documents are largely - orthogonal to (rather than a revision of) RFC 822. - - The initial document in this set, RFC 2045, specifies the various - headers used to describe the structure of MIME messages. The second - document defines the general structure of the MIME media typing - system and defines an initial set of media types. The third - document, RFC 2047, describes extensions to RFC 822 to allow non-US- - - - -Freed & Borenstein Standards Track [Page 1] - -RFC 2049 MIME Conformance November 1996 - - - ASCII text data in Internet mail header fields. The fourth document, - RFC 2048, specifies various IANA registration procedures for MIME- - related facilities. This fifth and final document describes MIME - conformance criteria as well as providing some illustrative examples - of MIME message formats, acknowledgements, and the bibliography. - - These documents are revisions of RFCs 1521, 1522, and 1590, which - themselves were revisions of RFCs 1341 and 1342. Appendix B of this - document describes differences and changes from previous versions. - -Table of Contents - - 1. Introduction .......................................... 2 - 2. MIME Conformance ...................................... 2 - 3. Guidelines for Sending Email Data ..................... 6 - 4. Canonical Encoding Model .............................. 9 - 5. Summary ............................................... 12 - 6. Security Considerations ............................... 12 - 7. Authors' Addresses .................................... 12 - 8. Acknowledgements ...................................... 13 - A. A Complex Multipart Example ........................... 15 - B. Changes from RFC 1521, 1522, and 1590 ................. 16 - C. References ............................................ 20 - -1. Introduction - - The first and second documents in this set define MIME header fields - and the initial set of MIME media types. The third document - describes extensions to RFC822 formats to allow for character sets - other than US-ASCII. This document describes what portions of MIME - must be supported by a conformant MIME implementation. It also - describes various pitfalls of contemporary messaging systems as well - as the canonical encoding model MIME is based on. - -2. MIME Conformance - - The mechanisms described in these documents are open-ended. It is - definitely not expected that all implementations will support all - available media types, nor that they will all share the same - extensions. In order to promote interoperability, however, it is - useful to define the concept of "MIME-conformance" to define a - certain level of implementation that allows the useful interworking - of messages with content that differs from US-ASCII text. In this - section, we specify the requirements for such conformance. - - - - - - - -Freed & Borenstein Standards Track [Page 2] - -RFC 2049 MIME Conformance November 1996 - - - A mail user agent that is MIME-conformant MUST: - - (1) Always generate a "MIME-Version: 1.0" header field in - any message it creates. - - (2) Recognize the Content-Transfer-Encoding header field - and decode all received data encoded by either quoted- - printable or base64 implementations. The identity - transformations 7bit, 8bit, and binary must also be - recognized. - - Any non-7bit data that is sent without encoding must be - properly labelled with a content-transfer-encoding of - 8bit or binary, as appropriate. If the underlying - transport does not support 8bit or binary (as SMTP - [RFC-821] does not), the sender is required to both - encode and label data using an appropriate Content- - Transfer-Encoding such as quoted-printable or base64. - - (3) Must treat any unrecognized Content-Transfer-Encoding - as if it had a Content-Type of "application/octet- - stream", regardless of whether or not the actual - Content-Type is recognized. - - (4) Recognize and interpret the Content-Type header field, - and avoid showing users raw data with a Content-Type - field other than text. Implementations must be able - to send at least text/plain messages, with the - character set specified with the charset parameter if - it is not US-ASCII. - - (5) Ignore any content type parameters whose names they do - not recognize. - - (6) Explicitly handle the following media type values, to - at least the following extents: - - Text: - - -- Recognize and display "text" mail with the - character set "US-ASCII." - - -- Recognize other character sets at least to the - extent of being able to inform the user about what - character set the message uses. - - - - - - -Freed & Borenstein Standards Track [Page 3] - -RFC 2049 MIME Conformance November 1996 - - - -- Recognize the "ISO-8859-*" character sets to the - extent of being able to display those characters that - are common to ISO-8859-* and US-ASCII, namely all - characters represented by octet values 1-127. - - -- For unrecognized subtypes in a known character - set, show or offer to show the user the "raw" version - of the data after conversion of the content from - canonical form to local form. - - -- Treat material in an unknown character set as if - it were "application/octet-stream". - - Image, audio, and video: - - -- At a minumum provide facilities to treat any - unrecognized subtypes as if they were - "application/octet-stream". - - Application: - - -- Offer the ability to remove either of the quoted- - printable or base64 encodings defined in this - document if they were used and put the resulting - information in a user file. - - Multipart: - - -- Recognize the mixed subtype. Display all relevant - information on the message level and the body part - header level and then display or offer to display - each of the body parts individually. - - -- Recognize the "alternative" subtype, and avoid - showing the user redundant parts of - multipart/alternative mail. - - -- Recognize the "multipart/digest" subtype, - specifically using "message/rfc822" rather than - "text/plain" as the default media type for body parts - inside "multipart/digest" entities. - - -- Treat any unrecognized subtypes as if they were - "mixed". - - - - - - - -Freed & Borenstein Standards Track [Page 4] - -RFC 2049 MIME Conformance November 1996 - - - Message: - - -- Recognize and display at least the RFC822 message - encapsulation (message/rfc822) in such a way as to - preserve any recursive structure, that is, displaying - or offering to display the encapsulated data in - accordance with its media type. - - -- Treat any unrecognized subtypes as if they were - "application/octet-stream". - - (7) Upon encountering any unrecognized Content-Type field, - an implementation must treat it as if it had a media - type of "application/octet-stream" with no parameter - sub-arguments. How such data are handled is up to an - implementation, but likely options for handling such - unrecognized data include offering the user to write it - into a file (decoded from its mail transport format) or - offering the user to name a program to which the - decoded data should be passed as input. - - (8) Conformant user agents are required, if they provide - non-standard support for non-MIME messages employing - character sets other than US-ASCII, to do so on - received messages only. Conforming user agents must not - send non-MIME messages containing anything other than - US-ASCII text. - - In particular, the use of non-US-ASCII text in mail - messages without a MIME-Version field is strongly - discouraged as it impedes interoperability when sending - messages between regions with different localization - conventions. Conforming user agents MUST include proper - MIME labelling when sending anything other than plain - text in the US-ASCII character set. - - In addition, non-MIME user agents should be upgraded if - at all possible to include appropriate MIME header - information in the messages they send even if nothing - else in MIME is supported. This upgrade will have - little, if any, effect on non-MIME recipients and will - aid MIME in correctly displaying such messages. It - also provides a smooth transition path to eventual - adoption of other MIME capabilities. - - (9) Conforming user agents must ensure that any string of - non-white-space printable US-ASCII characters within a - "*text" or "*ctext" that begins with "=?" and ends with - - - -Freed & Borenstein Standards Track [Page 5] - -RFC 2049 MIME Conformance November 1996 - - - "?=" be a valid encoded-word. ("begins" means: At the - start of the field-body or immediately following - linear-white-space; "ends" means: At the end of the - field-body or immediately preceding linear-white- - space.) In addition, any "word" within a "phrase" that - begins with "=?" and ends with "?=" must be a valid - encoded-word. - - (10) Conforming user agents must be able to distinguish - encoded-words from "text", "ctext", or "word"s, - according to the rules in section 4, anytime they - appear in appropriate places in message headers. It - must support both the "B" and "Q" encodings for any - character set which it supports. The program must be - able to display the unencoded text if the character set - is "US-ASCII". For the ISO-8859-* character sets, the - mail reading program must at least be able to display - the characters which are also in the US-ASCII set. - - A user agent that meets the above conditions is said to be MIME- - conformant. The meaning of this phrase is that it is assumed to be - "safe" to send virtually any kind of properly-marked data to users of - such mail systems, because such systems will at least be able to - treat the data as undifferentiated binary, and will not simply splash - it onto the screen of unsuspecting users. - - There is another sense in which it is always "safe" to send data in a - format that is MIME-conformant, which is that such data will not - break or be broken by any known systems that are conformant with RFC - 821 and RFC 822. User agents that are MIME-conformant have the - additional guarantee that the user will not be shown data that were - never intended to be viewed as text. - -3. Guidelines for Sending Email Data - - Internet email is not a perfect, homogeneous system. Mail may become - corrupted at several stages in its travel to a final destination. - Specifically, email sent throughout the Internet may travel across - many networking technologies. Many networking and mail technologies - do not support the full functionality possible in the SMTP transport - environment. Mail traversing these systems is likely to be modified - in order that it can be transported. - - There exist many widely-deployed non-conformant MTAs in the Internet. - These MTAs, speaking the SMTP protocol, alter messages on the fly to - take advantage of the internal data structure of the hosts they are - implemented on, or are just plain broken. - - - - -Freed & Borenstein Standards Track [Page 6] - -RFC 2049 MIME Conformance November 1996 - - - The following guidelines may be useful to anyone devising a data - format (media type) that is supposed to survive the widest range of - networking technologies and known broken MTAs unscathed. Note that - anything encoded in the base64 encoding will satisfy these rules, but - that some well-known mechanisms, notably the UNIX uuencode facility, - will not. Note also that anything encoded in the Quoted-Printable - encoding will survive most gateways intact, but possibly not some - gateways to systems that use the EBCDIC character set. - - (1) Under some circumstances the encoding used for data may - change as part of normal gateway or user agent - operation. In particular, conversion from base64 to - quoted-printable and vice versa may be necessary. This - may result in the confusion of CRLF sequences with line - breaks in text bodies. As such, the persistence of - CRLF as something other than a line break must not be - relied on. - - (2) Many systems may elect to represent and store text data - using local newline conventions. Local newline - conventions may not match the RFC822 CRLF convention -- - systems are known that use plain CR, plain LF, CRLF, or - counted records. The result is that isolated CR and LF - characters are not well tolerated in general; they may - be lost or converted to delimiters on some systems, and - hence must not be relied on. - - (3) The transmission of NULs (US-ASCII value 0) is - problematic in Internet mail. (This is largely the - result of NULs being used as a termination character by - many of the standard runtime library routines in the C - programming language.) The practice of using NULs as - termination characters is so entrenched now that - messages should not rely on them being preserved. - - (4) TAB (HT) characters may be misinterpreted or may be - automatically converted to variable numbers of spaces. - This is unavoidable in some environments, notably those - not based on the US-ASCII character set. Such - conversion is STRONGLY DISCOURAGED, but it may occur, - and mail formats must not rely on the persistence of - TAB (HT) characters. - - (5) Lines longer than 76 characters may be wrapped or - truncated in some environments. Line wrapping or line - truncation imposed by mail transports is STRONGLY - DISCOURAGED, but unavoidable in some cases. - Applications which require long lines must somehow - - - -Freed & Borenstein Standards Track [Page 7] - -RFC 2049 MIME Conformance November 1996 - - - differentiate between soft and hard line breaks. (A - simple way to do this is to use the quoted-printable - encoding.) - - (6) Trailing "white space" characters (SPACE, TAB (HT)) on - a line may be discarded by some transport agents, while - other transport agents may pad lines with these - characters so that all lines in a mail file are of - equal length. The persistence of trailing white space, - therefore, must not be relied on. - - (7) Many mail domains use variations on the US-ASCII - character set, or use character sets such as EBCDIC - which contain most but not all of the US-ASCII - characters. The correct translation of characters not - in the "invariant" set cannot be depended on across - character converting gateways. For example, this - situation is a problem when sending uuencoded - information across BITNET, an EBCDIC system. Similar - problems can occur without crossing a gateway, since - many Internet hosts use character sets other than US- - ASCII internally. The definition of Printable Strings - in X.400 adds further restrictions in certain special - cases. In particular, the only characters that are - known to be consistent across all gateways are the 73 - characters that correspond to the upper and lower case - letters A-Z and a-z, the 10 digits 0-9, and the - following eleven special characters: - - "'" (US-ASCII decimal value 39) - "(" (US-ASCII decimal value 40) - ")" (US-ASCII decimal value 41) - "+" (US-ASCII decimal value 43) - "," (US-ASCII decimal value 44) - "-" (US-ASCII decimal value 45) - "." (US-ASCII decimal value 46) - "/" (US-ASCII decimal value 47) - ":" (US-ASCII decimal value 58) - "=" (US-ASCII decimal value 61) - "?" (US-ASCII decimal value 63) - - A maximally portable mail representation will confine - itself to relatively short lines of text in which the - only meaningful characters are taken from this set of - 73 characters. The base64 encoding follows this rule. - - (8) Some mail transport agents will corrupt data that - includes certain literal strings. In particular, a - - - -Freed & Borenstein Standards Track [Page 8] - -RFC 2049 MIME Conformance November 1996 - - - period (".") alone on a line is known to be corrupted - by some (incorrect) SMTP implementations, and a line - that starts with the five characters "From " (the fifth - character is a SPACE) are commonly corrupted as well. - A careful composition agent can prevent these - corruptions by encoding the data (e.g., in the quoted- - printable encoding using "=46rom " in place of "From " - at the start of a line, and "=2E" in place of "." alone - on a line). - - Please note that the above list is NOT a list of recommended - practices for MTAs. RFC 821 MTAs are prohibited from altering the - character of white space or wrapping long lines. These BAD and - invalid practices are known to occur on established networks, and - implementations should be robust in dealing with the bad effects they - can cause. - -4. Canonical Encoding Model - - There was some confusion, in earlier versions of these documents, - regarding the model for when email data was to be converted to - canonical form and encoded, and in particular how this process would - affect the treatment of CRLFs, given that the representation of - newlines varies greatly from system to system. For this reason, a - canonical model for encoding is presented below. - - The process of composing a MIME entity can be modeled as being done - in a number of steps. Note that these steps are roughly similar to - those steps used in PEM [RFC-1421] and are performed for each - "innermost level" body: - - (1) Creation of local form. - - The body to be transmitted is created in the system's - native format. The native character set is used and, - where appropriate, local end of line conventions are - used as well. The body may be a UNIX-style text file, - or a Sun raster image, or a VMS indexed file, or audio - data in a system-dependent format stored only in - memory, or anything else that corresponds to the local - model for the representation of some form of - information. Fundamentally, the data is created in the - "native" form that corresponds to the type specified by - the media type. - - - - - - - -Freed & Borenstein Standards Track [Page 9] - -RFC 2049 MIME Conformance November 1996 - - - (2) Conversion to canonical form. - - The entire body, including "out-of-band" information - such as record lengths and possibly file attribute - information, is converted to a universal canonical - form. The specific media type of the body as well as - its associated attributes dictate the nature of the - canonical form that is used. Conversion to the proper - canonical form may involve character set conversion, - transformation of audio data, compression, or various - other operations specific to the various media types. - If character set conversion is involved, however, care - must be taken to understand the semantics of the media - type, which may have strong implications for any - character set conversion, e.g. with regard to - syntactically meaningful characters in a text subtype - other than "plain". - - For example, in the case of text/plain data, the text - must be converted to a supported character set and - lines must be delimited with CRLF delimiters in - accordance with RFC 822. Note that the restriction on - line lengths implied by RFC 822 is eliminated if the - next step employs either quoted-printable or base64 - encoding. - - (3) Apply transfer encoding. - - A Content-Transfer-Encoding appropriate for this body - is applied. Note that there is no fixed relationship - between the media type and the transfer encoding. In - particular, it may be appropriate to base the choice of - base64 or quoted-printable on character frequency - counts which are specific to a given instance of a - body. - - (4) Insertion into entity. - - The encoded body is inserted into a MIME entity with - appropriate headers. The entity is then inserted into - the body of a higher-level entity (message or - multipart) as needed. - - Conversion from entity form to local form is accomplished by - reversing these steps. Note that reversal of these steps may produce - differing results since there is no guarantee that the original and - final local forms are the same. - - - - -Freed & Borenstein Standards Track [Page 10] - -RFC 2049 MIME Conformance November 1996 - - - It is vital to note that these steps are only a model; they are - specifically NOT a blueprint for how an actual system would be built. - In particular, the model fails to account for two common designs: - - (1) In many cases the conversion to a canonical form prior - to encoding will be subsumed into the encoder itself, - which understands local formats directly. For example, - the local newline convention for text bodies might be - carried through to the encoder itself along with - knowledge of what that format is. - - (2) The output of the encoders may have to pass through one - or more additional steps prior to being transmitted as - a message. As such, the output of the encoder may not - be conformant with the formats specified by RFC 822. - In particular, once again it may be appropriate for the - converter's output to be expressed using local newline - conventions rather than using the standard RFC 822 CRLF - delimiters. - - Other implementation variations are conceivable as well. The vital - aspect of this discussion is that, in spite of any optimizations, - collapsings of required steps, or insertion of additional processing, - the resulting messages must be consistent with those produced by the - model described here. For example, a message with the following - header fields: - - Content-type: text/foo; charset=bar - Content-Transfer-Encoding: base64 - - must be first represented in the text/foo form, then (if necessary) - represented in the "bar" character set, and finally transformed via - the base64 algorithm into a mail-safe form. - - NOTE: Some confusion has been caused by systems that represent - messages in a format which uses local newline conventions which - differ from the RFC822 CRLF convention. It is important to note that - these formats are not canonical RFC822/MIME. These formats are - instead *encodings* of RFC822, where CRLF sequences in the canonical - representation of the message are encoded as the local newline - convention. Note that formats which encode CRLF sequences as, for - example, LF are not capable of representing MIME messages containing - binary data which contains LF octets not part of CRLF line separation - sequences. - - - - - - - -Freed & Borenstein Standards Track [Page 11] - -RFC 2049 MIME Conformance November 1996 - - -5. Summary - - This document defines what is meant by MIME Conformance. It also - details various problems known to exist in the Internet email system - and how to use MIME to overcome them. Finally, it describes MIME's - canonical encoding model. - -6. Security Considerations - - Security issues are discussed in the second document in this set, RFC - 2046. - -7. Authors' Addresses - - For more information, the authors of this document are best contacted - via Internet mail: - - Ned Freed - Innosoft International, Inc. - 1050 East Garvey Avenue South - West Covina, CA 91790 - USA - - Phone: +1 818 919 3600 - Fax: +1 818 919 3614 - EMail: ned@innosoft.com - - Nathaniel S. Borenstein - First Virtual Holdings - 25 Washington Avenue - Morristown, NJ 07960 - USA - - Phone: +1 201 540 8967 - Fax: +1 201 993 3032 - EMail: nsb@nsb.fv.com - - MIME is a result of the work of the Internet Engineering Task Force - Working Group on RFC 822 Extensions. The chairman of that group, - Greg Vaudreuil, may be reached at: - - Gregory M. Vaudreuil - Octel Network Services - 17080 Dallas Parkway - Dallas, TX 75248-1905 - USA - - EMail: Greg.Vaudreuil@Octel.Com - - - -Freed & Borenstein Standards Track [Page 12] - -RFC 2049 MIME Conformance November 1996 - - -8. Acknowledgements - - This document is the result of the collective effort of a large - number of people, at several IETF meetings, on the IETF-SMTP and - IETF-822 mailing lists, and elsewhere. Although any enumeration - seems doomed to suffer from egregious omissions, the following are - among the many contributors to this effort: - - Harald Tveit Alvestrand Marc Andreessen - Randall Atkinson Bob Braden - Philippe Brandon Brian Capouch - Kevin Carosso Uhhyung Choi - Peter Clitherow Dave Collier-Brown - Cristian Constantinof John Coonrod - Mark Crispin Dave Crocker - Stephen Crocker Terry Crowley - Walt Daniels Jim Davis - Frank Dawson Axel Deininger - Hitoshi Doi Kevin Donnelly - Steve Dorner Keith Edwards - Chris Eich Dana S. Emery - Johnny Eriksson Craig Everhart - Patrik Faltstrom Erik E. Fair - Roger Fajman Alain Fontaine - Martin Forssen James M. Galvin - Stephen Gildea Philip Gladstone - Thomas Gordon Keld Simonsen - Terry Gray Phill Gross - James Hamilton David Herron - Mark Horton Bruce Howard - Bill Janssen Olle Jarnefors - Risto Kankkunen Phil Karn - Alan Katz Tim Kehres - Neil Katin Steve Kille - Kyuho Kim Anders Klemets - John Klensin Valdis Kletniek - Jim Knowles Stev Knowles - Bob Kummerfeld Pekka Kytolaakso - Stellan Lagerstrom Vincent Lau - Timo Lehtinen Donald Lindsay - Warner Losh Carlyn Lowery - Laurence Lundblade Charles Lynn - John R. MacMillan Larry Masinter - Rick McGowan Michael J. McInerny - Leo Mclaughlin Goli Montaser-Kohsari - Tom Moore John Gardiner Myers - Erik Naggum Mark Needleman - Chris Newman John Noerenberg - - - -Freed & Borenstein Standards Track [Page 13] - -RFC 2049 MIME Conformance November 1996 - - - Mats Ohrman Julian Onions - Michael Patton David J. Pepper - Erik van der Poel Blake C. Ramsdell - Christer Romson Luc Rooijakkers - Marshall T. Rose Jonathan Rosenberg - Guido van Rossum Jan Rynning - Harri Salminen Michael Sanderson - Yutaka Sato Markku Savela - Richard Alan Schafer Masahiro Sekiguchi - Mark Sherman Bob Smart - Peter Speck Henry Spencer - Einar Stefferud Michael Stein - Klaus Steinberger Peter Svanberg - James Thompson Steve Uhler - Stuart Vance Peter Vanderbilt - Greg Vaudreuil Ed Vielmetti - Larry W. Virden Ryan Waldron - Rhys Weatherly Jay Weber - Dave Wecker Wally Wedel - Sven-Ove Westberg Brian Wideen - John Wobus Glenn Wright - Rayan Zachariassen David Zimmerman - - The authors apologize for any omissions from this list, which are - certainly unintentional. - - - - - - - - - - - - - - - - - - - - - - - - - - -Freed & Borenstein Standards Track [Page 14] - -RFC 2049 MIME Conformance November 1996 - - -Appendix A -- A Complex Multipart Example - - What follows is the outline of a complex multipart message. This - message contains five parts that are to be displayed serially: two - introductory plain text objects, an embedded multipart message, a - text/enriched object, and a closing encapsulated text message in a - non-ASCII character set. The embedded multipart message itself - contains two objects to be displayed in parallel, a picture and an - audio fragment. - - MIME-Version: 1.0 - From: Nathaniel Borenstein <nsb@nsb.fv.com> - To: Ned Freed <ned@innosoft.com> - Date: Fri, 07 Oct 1994 16:15:05 -0700 (PDT) - Subject: A multipart example - Content-Type: multipart/mixed; - boundary=unique-boundary-1 - - This is the preamble area of a multipart message. - Mail readers that understand multipart format - should ignore this preamble. - - If you are reading this text, you might want to - consider changing to a mail reader that understands - how to properly display multipart messages. - - --unique-boundary-1 - - ... Some text appears here ... - - [Note that the blank between the boundary and the start - of the text in this part means no header fields were - given and this is text in the US-ASCII character set. - It could have been done with explicit typing as in the - next part.] - - --unique-boundary-1 - Content-type: text/plain; charset=US-ASCII - - This could have been part of the previous part, but - illustrates explicit versus implicit typing of body - parts. - - --unique-boundary-1 - Content-Type: multipart/parallel; boundary=unique-boundary-2 - - --unique-boundary-2 - Content-Type: audio/basic - - - -Freed & Borenstein Standards Track [Page 15] - -RFC 2049 MIME Conformance November 1996 - - - Content-Transfer-Encoding: base64 - - ... base64-encoded 8000 Hz single-channel - mu-law-format audio data goes here ... - - --unique-boundary-2 - Content-Type: image/jpeg - Content-Transfer-Encoding: base64 - - ... base64-encoded image data goes here ... - - --unique-boundary-2-- - - --unique-boundary-1 - Content-type: text/enriched - - This is <bold><italic>enriched.</italic></bold> - <smaller>as defined in RFC 1896</smaller> - - Isn't it - <bigger><bigger>cool?</bigger></bigger> - - --unique-boundary-1 - Content-Type: message/rfc822 - - From: (mailbox in US-ASCII) - To: (address in US-ASCII) - Subject: (subject in US-ASCII) - Content-Type: Text/plain; charset=ISO-8859-1 - Content-Transfer-Encoding: Quoted-printable - - ... Additional text in ISO-8859-1 goes here ... - - --unique-boundary-1-- - -Appendix B -- Changes from RFC 1521, 1522, and 1590 - - These documents are a revision of RFC 1521, 1522, and 1590. For the - convenience of those familiar with the earlier documents, the changes - from those documents are summarized in this appendix. For further - history, note that Appendix H in RFC 1521 specified how that document - differed from its predecessor, RFC 1341. - - (1) This document has been completely reformatted and split - into multiple documents. This was done to improve the - quality of the plain text version of this document, - which is required to be the reference copy. - - - - -Freed & Borenstein Standards Track [Page 16] - -RFC 2049 MIME Conformance November 1996 - - - (2) BNF describing the overall structure of MIME object - headers has been added. This is a documentation change - only -- the underlying syntax has not changed in any - way. - - (3) The specific BNF for the seven media types in MIME has - been removed. This BNF was incorrect, incomplete, amd - inconsistent with the type-indendependent BNF. And - since the type-independent BNF already fully specifies - the syntax of the various MIME headers, the type- - specific BNF was, in the final analysis, completely - unnecessary and caused more problems than it solved. - - (4) The more specific "US-ASCII" character set name has - replaced the use of the informal term ASCII in many - parts of these documents. - - (5) The informal concept of a primary subtype has been - removed. - - (6) The term "object" was being used inconsistently. The - definition of this term has been clarified, along with - the related terms "body", "body part", and "entity", - and usage has been corrected where appropriate. - - (7) The BNF for the multipart media type has been - rearranged to make it clear that the CRLF preceeding - the boundary marker is actually part of the marker - itself rather than the preceeding body part. - - (8) The prose and BNF describing the multipart media type - have been changed to make it clear that the body parts - within a multipart object MUST NOT contain any lines - beginning with the boundary parameter string. - - (9) In the rules on reassembling "message/partial" MIME - entities, "Subject" is added to the list of headers to - take from the inner message, and the example is - modified to clarify this point. - - (10) "Message/partial" fragmenters are restricted to - splitting MIME objects only at line boundaries. - - (11) In the discussion of the application/postscript type, - an additional paragraph has been added warning about - possible interoperability problems caused by embedding - of binary data inside a PostScript MIME entity. - - - - -Freed & Borenstein Standards Track [Page 17] - -RFC 2049 MIME Conformance November 1996 - - - (12) Added a clarifying note to the basic syntax rules for - the Content-Type header field to make it clear that the - following two forms: - - Content-type: text/plain; charset=us-ascii (comment) - - Content-type: text/plain; charset="us-ascii" - - are completely equivalent. - - (13) The following sentence has been removed from the - discussion of the MIME-Version header: "However, - conformant software is encouraged to check the version - number and at least warn the user if an unrecognized - MIME-version is encountered." - - (14) A typo was fixed that said "application/external-body" - instead of "message/external-body". - - (15) The definition of a character set has been reorganized - to make the requirements clearer. - - (16) The definition of the "image/gif" media type has been - moved to a separate document. This change was made - because of potential conflicts with IETF rules - governing the standardization of patented technology. - - (17) The definitions of "7bit" and "8bit" have been - tightened so that use of bare CR, LF can only be used - as end-of-line sequences. The document also no longer - requires that NUL characters be preserved, which brings - MIME into alignment with real-world implementations. - - (18) The definition of canonical text in MIME has been - tightened so that line breaks must be represented by a - CRLF sequence. CR and LF characters are not allowed - outside of this usage. The definition of quoted- - printable encoding has been altered accordingly. - - (19) The definition of the quoted-printable encoding now - includes a number of suggestions for how quoted- - printable encoders might best handle improperly encoded - material. - - (20) Prose was added to clarify the use of the "7bit", - "8bit", and "binary" transfer-encodings on multipart or - message entities encapsulating "8bit" or "binary" data. - - - - -Freed & Borenstein Standards Track [Page 18] - -RFC 2049 MIME Conformance November 1996 - - - (21) In the section on MIME Conformance, "multipart/digest" - support was added to the list of requirements for - minimal MIME conformance. Also, the requirement for - "message/rfc822" support were strengthened to clarify - the importance of recognizing recursive structure. - - (22) The various restrictions on subtypes of "message" are - now specified entirely on a subtype by subtype basis. - - (23) The definition of "message/rfc822" was changed to - indicate that at least one of the "From", "Subject", or - "Date" headers must be present. - - (24) The required handling of unrecognized subtypes as - "application/octet-stream" has been made more explicit - in both the type definitions sections and the - conformance guidelines. - - (25) Examples using text/richtext were changed to - text/enriched. - - (26) The BNF definition of subtype has been changed to make - it clear that either an IANA registered subtype or a - nonstandard "X-" subtype must be used in a Content-Type - header field. - - (27) MIME media types that are simply registered for use and - those that are standardized by the IETF are now - distinguished in the MIME BNF. - - (28) All of the various MIME registration procedures have - been extensively revised. IANA registration procedures - for character sets have been moved to a separate - document that is no included in this set of documents. - - (29) The use of escape and shift mechanisms in the US-ASCII - and ISO-8859-X character sets these documents define - have been clarified: Such mechanisms should never be - used in conjunction with these character sets and their - effect if they are used is undefined. - - (30) The definition of the AFS access-type for - message/external-body has been removed. - - (31) The handling of the combination of - multipart/alternative and message/external-body is now - specifically addressed. - - - - -Freed & Borenstein Standards Track [Page 19] - -RFC 2049 MIME Conformance November 1996 - - - (32) Security issues specific to message/external-body are - now discussed in some detail. - -Appendix C -- References - - [ATK] - Borenstein, Nathaniel S., Multimedia Applications - Development with the Andrew Toolkit, Prentice-Hall, 1990. - - [ISO-2022] - International Standard -- Information Processing -- - Character Code Structure and Extension Techniques, - ISO/IEC 2022:1994, 4th ed. - - [ISO-8859] - International Standard -- Information Processing -- 8-bit - Single-Byte Coded Graphic Character Sets - - Part 1: Latin Alphabet No. 1, ISO 8859-1:1987, 1st ed. - - Part 2: Latin Alphabet No. 2, ISO 8859-2:1987, 1st ed. - - Part 3: Latin Alphabet No. 3, ISO 8859-3:1988, 1st ed. - - Part 4: Latin Alphabet No. 4, ISO 8859-4:1988, 1st ed. - - Part 5: Latin/Cyrillic Alphabet, ISO 8859-5:1988, 1st - ed. - - Part 6: Latin/Arabic Alphabet, ISO 8859-6:1987, 1st ed. - - Part 7: Latin/Greek Alphabet, ISO 8859-7:1987, 1st ed. - - Part 8: Latin/Hebrew Alphabet, ISO 8859-8:1988, 1st ed. - - Part 9: Latin Alphabet No. 5, ISO/IEC 8859-9:1989, 1st - ed. - International Standard -- Information Technology -- 8-bit - Single-Byte Coded Graphic Character Sets - - Part 10: Latin Alphabet No. 6, ISO/IEC 8859-10:1992, - 1st ed. - - [ISO-646] - International Standard -- Information Technology -- ISO - 7-bit Coded Character Set for Information Interchange, - ISO 646:1991, 3rd ed.. - - [JPEG] - JPEG Draft Standard ISO 10918-1 CD. - - [MPEG] - Video Coding Draft Standard ISO 11172 CD, ISO - IEC/JTC1/SC2/WG11 (Motion Picture Experts Group), May, - 1991. - - - - - - -Freed & Borenstein Standards Track [Page 20] - -RFC 2049 MIME Conformance November 1996 - - - [PCM] - CCITT, Fascicle III.4 - Recommendation G.711, "Pulse Code - Modulation (PCM) of Voice Frequencies", Geneva, 1972. - - [POSTSCRIPT] - Adobe Systems, Inc., PostScript Language Reference - Manual, Addison-Wesley, 1985. - - [POSTSCRIPT2] - Adobe Systems, Inc., PostScript Language Reference - Manual, Addison-Wesley, Second Ed., 1990. - - [RFC-783] - Sollins, K.R., "TFTP Protocol (revision 2)", RFC-783, - MIT, June 1981. - - [RFC-821] - Postel, J.B., "Simple Mail Transfer Protocol", STD 10, - RFC 821, USC/Information Sciences Institute, August 1982. - - [RFC-822] - Crocker, D., "Standard for the Format of ARPA Internet - Text Messages", STD 11, RFC 822, UDEL, August 1982. - - [RFC-934] - Rose, M. and E. Stefferud, "Proposed Standard for Message - Encapsulation", RFC 934, Delaware and NMA, January 1985. - - [RFC-959] - Postel, J. and J. Reynolds, "File Transfer Protocol", STD - 9, RFC 959, USC/Information Sciences Institute, October - 1985. - - [RFC-1049] - Sirbu, M., "Content-Type Header Field for Internet - Messages", RFC 1049, CMU, March 1988. - - [RFC-1154] - Robinson, D., and R. Ullmann, "Encoding Header Field for - Internet Messages", RFC 1154, Prime Computer, Inc., April - 1990. - - [RFC-1341] - Borenstein, N., and N. Freed, "MIME (Multipurpose - Internet Mail Extensions): Mechanisms for Specifying and - Describing the Format of Internet Message Bodies", RFC - 1341, Bellcore, Innosoft, June 1992. - - - - -Freed & Borenstein Standards Track [Page 21] - -RFC 2049 MIME Conformance November 1996 - - - [RFC-1342] - Moore, K., "Representation of Non-Ascii Text in Internet - Message Headers", RFC 1342, University of Tennessee, June - 1992. - - [RFC-1344] - Borenstein, N., "Implications of MIME for Internet Mail - Gateways", RFC 1344, Bellcore, June 1992. - - [RFC-1345] - Simonsen, K., "Character Mnemonics & Character Sets", RFC - 1345, Rationel Almen Planlaegning, June 1992. - - [RFC-1421] - Linn, J., "Privacy Enhancement for Internet Electronic - Mail: Part I -- Message Encryption and Authentication - Procedures", RFC 1421, IAB IRTF PSRG, IETF PEM WG, - February 1993. - - [RFC-1422] - Kent, S., "Privacy Enhancement for Internet Electronic - Mail: Part II -- Certificate-Based Key Management", RFC - 1422, IAB IRTF PSRG, IETF PEM WG, February 1993. - - [RFC-1423] - Balenson, D., "Privacy Enhancement for Internet - Electronic Mail: Part III -- Algorithms, Modes, and - Identifiers", IAB IRTF PSRG, IETF PEM WG, February 1993. - - [RFC-1424] - Kaliski, B., "Privacy Enhancement for Internet Electronic - Mail: Part IV -- Key Certification and Related - Services", IAB IRTF PSRG, IETF PEM WG, February 1993. - - [RFC-1521] - Borenstein, N., and Freed, N., "MIME (Multipurpose - Internet Mail Extensions): Mechanisms for Specifying and - Describing the Format of Internet Message Bodies", RFC - 1521, Bellcore, Innosoft, September, 1993. - - [RFC-1522] - Moore, K., "Representation of Non-ASCII Text in Internet - Message Headers", RFC 1522, University of Tennessee, - September 1993. - - - - - - - -Freed & Borenstein Standards Track [Page 22] - -RFC 2049 MIME Conformance November 1996 - - - [RFC-1524] - Borenstein, N., "A User Agent Configuration Mechanism for - Multimedia Mail Format Information", RFC 1524, Bellcore, - September 1993. - - [RFC-1543] - Postel, J., "Instructions to RFC Authors", RFC 1543, - USC/Information Sciences Institute, October 1993. - - [RFC-1556] - Nussbacher, H., "Handling of Bi-directional Texts in - MIME", RFC 1556, Israeli Inter-University Computer - Center, December 1993. - - [RFC-1590] - Postel, J., "Media Type Registration Procedure", RFC - 1590, USC/Information Sciences Institute, March 1994. - - [RFC-1602] - Internet Architecture Board, Internet Engineering - Steering Group, Huitema, C., Gross, P., "The Internet - Standards Process -- Revision 2", March 1994. - - [RFC-1652] - Klensin, J., (WG Chair), Freed, N., (Editor), Rose, M., - Stefferud, E., and Crocker, D., "SMTP Service Extension - for 8bit-MIME transport", RFC 1652, United Nations - University, Innosoft, Dover Beach Consulting, Inc., - Network Management Associates, Inc., The Branch Office, - March 1994. - - [RFC-1700] - Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, - RFC 1700, USC/Information Sciences Institute, October - 1994. - - [RFC-1741] - Faltstrom, P., Crocker, D., and Fair, E., "MIME Content - Type for BinHex Encoded Files", December 1994. - - [RFC-1896] - Resnick, P., and A. Walker, "The text/enriched MIME - Content-type", RFC 1896, February, 1996. - - - - - - - - -Freed & Borenstein Standards Track [Page 23] - -RFC 2049 MIME Conformance November 1996 - - - [RFC-2045] - Freed, N., and and N. Borenstein, "Multipurpose Internet Mail - Extensions (MIME) Part One: Format of Internet Message - Bodies", RFC 2045, Innosoft, First Virtual Holdings, - November 1996. - - [RFC-2046] - Freed, N., and N. Borenstein, "Multipurpose Internet Mail - Extensions (MIME) Part Two: Media Types", RFC 2046, - Innosoft, First Virtual Holdings, November 1996. - - [RFC-2047] - Moore, K., "Multipurpose Internet Mail Extensions (MIME) - Part Three: Representation of Non-ASCII Text in Internet - Message Headers", RFC 2047, University of - Tennessee, November 1996. - - [RFC-2048] - Freed, N., Klensin, J., and J. Postel, "Multipurpose - Internet Mail Extensions (MIME) Part Four: MIME - Registration Procedures", RFC 2048, Innosoft, MCI, - ISI, November 1996. - - [RFC-2049] - Freed, N. and N. Borenstein, "Multipurpose Internet Mail - Extensions (MIME) Part Five: Conformance Criteria and - Examples", RFC 2049 (this document), Innosoft, First - Virtual Holdings, November 1996. - - [US-ASCII] - Coded Character Set -- 7-Bit American Standard Code for - Information Interchange, ANSI X3.4-1986. - - [X400] - Schicker, Pietro, "Message Handling Systems, X.400", - Message Handling Systems and Distributed Applications, E. - Stefferud, O-j. Jacobsen, and P. Schicker, eds., North- - Holland, 1989, pp. 3-41. - - - - - - - - - - - - - -Freed & Borenstein Standards Track [Page 24] - diff --git a/doc/src/rfc2060.txt b/doc/src/rfc2060.txt deleted file mode 100644 index cf46159a2..000000000 --- a/doc/src/rfc2060.txt +++ /dev/null @@ -1,4595 +0,0 @@ - - - - - - -Network Working Group M. Crispin -Request for Comments: 2060 University of Washington -Obsoletes: 1730 December 1996 -Category: Standards Track - - - INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Abstract - - The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1) - allows a client to access and manipulate electronic mail messages on - a server. IMAP4rev1 permits manipulation of remote message folders, - called "mailboxes", in a way that is functionally equivalent to local - mailboxes. IMAP4rev1 also provides the capability for an offline - client to resynchronize with the server (see also [IMAP-DISC]). - - IMAP4rev1 includes operations for creating, deleting, and renaming - mailboxes; checking for new messages; permanently removing messages; - setting and clearing flags; [RFC-822] and [MIME-IMB] parsing; - searching; and selective fetching of message attributes, texts, and - portions thereof. Messages in IMAP4rev1 are accessed by the use of - numbers. These numbers are either message sequence numbers or unique - identifiers. - - IMAP4rev1 supports a single server. A mechanism for accessing - configuration information to support multiple IMAP4rev1 servers is - discussed in [ACAP]. - - IMAP4rev1 does not specify a means of posting mail; this function is - handled by a mail transfer protocol such as [SMTP]. - - IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and - unpublished IMAP2bis protocols. In the course of the evolution of - IMAP4rev1, some aspects in the earlier protocol have become obsolete. - Obsolete commands, responses, and data formats which an IMAP4rev1 - implementation may encounter when used with an earlier implementation - are described in [IMAP-OBSOLETE]. - - - - - -Crispin Standards Track [Page 1] - -RFC 2060 IMAP4rev1 December 1996 - - - Other compatibility issues with IMAP2bis, the most common variant of - the earlier protocol, are discussed in [IMAP-COMPAT]. A full - discussion of compatibility issues with rare (and presumed extinct) - variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is - primarily of historical interest. - -Table of Contents - -IMAP4rev1 Protocol Specification .................................. 4 -1. How to Read This Document ................................. 4 -1.1. Organization of This Document ............................. 4 -1.2. Conventions Used in This Document ......................... 4 -2. Protocol Overview ......................................... 5 -2.1. Link Level ................................................ 5 -2.2. Commands and Responses .................................... 6 -2.2.1. Client Protocol Sender and Server Protocol Receiver ....... 6 -2.2.2. Server Protocol Sender and Client Protocol Receiver ....... 7 -2.3. Message Attributes ........................................ 7 -2.3.1. Message Numbers ........................................... 7 -2.3.1.1. Unique Identifier (UID) Message Attribute ......... 7 -2.3.1.2. Message Sequence Number Message Attribute ......... 9 -2.3.2. Flags Message Attribute .................................... 9 -2.3.3. Internal Date Message Attribute ........................... 10 -2.3.4. [RFC-822] Size Message Attribute .......................... 11 -2.3.5. Envelope Structure Message Attribute ...................... 11 -2.3.6. Body Structure Message Attribute .......................... 11 -2.4. Message Texts ............................................. 11 -3. State and Flow Diagram .................................... 11 -3.1. Non-Authenticated State ................................... 11 -3.2. Authenticated State ....................................... 11 -3.3. Selected State ............................................ 12 -3.4. Logout State .............................................. 12 -4. Data Formats .............................................. 12 -4.1. Atom ...................................................... 13 -4.2. Number .................................................... 13 -4.3. String ..................................................... 13 -4.3.1. 8-bit and Binary Strings .................................. 13 -4.4. Parenthesized List ........................................ 14 -4.5. NIL ....................................................... 14 -5. Operational Considerations ................................ 14 -5.1. Mailbox Naming ............................................ 14 -5.1.1. Mailbox Hierarchy Naming .................................. 14 -5.1.2. Mailbox Namespace Naming Convention ....................... 14 -5.1.3. Mailbox International Naming Convention ................... 15 -5.2. Mailbox Size and Message Status Updates ................... 16 -5.3. Response when no Command in Progress ...................... 16 -5.4. Autologout Timer .......................................... 16 -5.5. Multiple Commands in Progress ............................. 17 - - - -Crispin Standards Track [Page 2] - -RFC 2060 IMAP4rev1 December 1996 - - -6. Client Commands ........................................... 17 -6.1. Client Commands - Any State ............................... 18 -6.1.1. CAPABILITY Command ........................................ 18 -6.1.2. NOOP Command .............................................. 19 -6.1.3. LOGOUT Command ............................................ 20 -6.2. Client Commands - Non-Authenticated State ................. 20 -6.2.1. AUTHENTICATE Command ...................................... 21 -6.2.2. LOGIN Command ............................................. 22 -6.3. Client Commands - Authenticated State ..................... 22 -6.3.1. SELECT Command ............................................ 23 -6.3.2. EXAMINE Command ........................................... 24 -6.3.3. CREATE Command ............................................ 25 -6.3.4. DELETE Command ............................................ 26 -6.3.5. RENAME Command ............................................ 27 -6.3.6. SUBSCRIBE Command ......................................... 29 -6.3.7. UNSUBSCRIBE Command ....................................... 30 -6.3.8. LIST Command .............................................. 30 -6.3.9. LSUB Command .............................................. 32 -6.3.10. STATUS Command ............................................ 33 -6.3.11. APPEND Command ............................................ 34 -6.4. Client Commands - Selected State .......................... 35 -6.4.1. CHECK Command ............................................. 36 -6.4.2. CLOSE Command ............................................. 36 -6.4.3. EXPUNGE Command ........................................... 37 -6.4.4. SEARCH Command ............................................ 37 -6.4.5. FETCH Command ............................................. 41 -6.4.6. STORE Command ............................................. 45 -6.4.7. COPY Command .............................................. 46 -6.4.8. UID Command ............................................... 47 -6.5. Client Commands - Experimental/Expansion .................. 48 -6.5.1. X<atom> Command ........................................... 48 -7. Server Responses .......................................... 48 -7.1. Server Responses - Status Responses ....................... 49 -7.1.1. OK Response ............................................... 51 -7.1.2. NO Response ............................................... 51 -7.1.3. BAD Response .............................................. 52 -7.1.4. PREAUTH Response .......................................... 52 -7.1.5. BYE Response .............................................. 52 -7.2. Server Responses - Server and Mailbox Status .............. 53 -7.2.1. CAPABILITY Response ....................................... 53 -7.2.2. LIST Response .............................................. 54 -7.2.3. LSUB Response ............................................. 55 -7.2.4 STATUS Response ........................................... 55 -7.2.5. SEARCH Response ........................................... 55 -7.2.6. FLAGS Response ............................................ 56 -7.3. Server Responses - Mailbox Size ........................... 56 -7.3.1. EXISTS Response ........................................... 56 -7.3.2. RECENT Response ........................................... 57 - - - -Crispin Standards Track [Page 3] - -RFC 2060 IMAP4rev1 December 1996 - - -7.4. Server Responses - Message Status ......................... 57 -7.4.1. EXPUNGE Response .......................................... 57 -7.4.2. FETCH Response ............................................ 58 -7.5. Server Responses - Command Continuation Request ........... 63 -8. Sample IMAP4rev1 connection ............................... 63 -9. Formal Syntax ............................................. 64 -10. Author's Note ............................................. 74 -11. Security Considerations ................................... 74 -12. Author's Address .......................................... 75 -Appendices ........................................................ 76 -A. References ................................................ 76 -B. Changes from RFC 1730 ..................................... 77 -C. Key Word Index ............................................ 79 - - -IMAP4rev1 Protocol Specification - -1. How to Read This Document - -1.1. Organization of This Document - - This document is written from the point of view of the implementor of - an IMAP4rev1 client or server. Beyond the protocol overview in - section 2, it is not optimized for someone trying to understand the - operation of the protocol. The material in sections 3 through 5 - provides the general context and definitions with which IMAP4rev1 - operates. - - Sections 6, 7, and 9 describe the IMAP commands, responses, and - syntax, respectively. The relationships among these are such that it - is almost impossible to understand any of them separately. In - particular, do not attempt to deduce command syntax from the command - section alone; instead refer to the Formal Syntax section. - -1.2. Conventions Used in This Document - - In examples, "C:" and "S:" indicate lines sent by the client and - server respectively. - - The following terms are used in this document to signify the - requirements of this specification. - - 1) MUST, or the adjective REQUIRED, means that the definition is - an absolute requirement of the specification. - - 2) MUST NOT that the definition is an absolute prohibition of the - specification. - - - - -Crispin Standards Track [Page 4] - -RFC 2060 IMAP4rev1 December 1996 - - - 3) SHOULD means that there may exist valid reasons in particular - circumstances to ignore a particular item, but the full - implications MUST be understood and carefully weighed before - choosing a different course. - - 4) SHOULD NOT means that there may exist valid reasons in - particular circumstances when the particular behavior is - acceptable or even useful, but the full implications SHOULD be - understood and the case carefully weighed before implementing - any behavior described with this label. - - 5) MAY, or the adjective OPTIONAL, means that an item is truly - optional. One vendor may choose to include the item because a - particular marketplace requires it or because the vendor feels - that it enhances the product while another vendor may omit the - same item. An implementation which does not include a - particular option MUST be prepared to interoperate with another - implementation which does include the option. - - "Can" is used instead of "may" when referring to a possible - circumstance or situation, as opposed to an optional facility of - the protocol. - - "User" is used to refer to a human user, whereas "client" refers - to the software being run by the user. - - "Connection" refers to the entire sequence of client/server - interaction from the initial establishment of the network - connection until its termination. "Session" refers to the - sequence of client/server interaction from the time that a mailbox - is selected (SELECT or EXAMINE command) until the time that - selection ends (SELECT or EXAMINE of another mailbox, CLOSE - command, or connection termination). - - Characters are 7-bit US-ASCII unless otherwise specified. Other - character sets are indicated using a "CHARSET", as described in - [MIME-IMT] and defined in [CHARSET]. CHARSETs have important - additional semantics in addition to defining character set; refer - to these documents for more detail. - -2. Protocol Overview - -2.1. Link Level - - The IMAP4rev1 protocol assumes a reliable data stream such as - provided by TCP. When TCP is used, an IMAP4rev1 server listens on - port 143. - - - - -Crispin Standards Track [Page 5] - -RFC 2060 IMAP4rev1 December 1996 - - -2.2. Commands and Responses - - An IMAP4rev1 connection consists of the establishment of a - client/server network connection, an initial greeting from the - server, and client/server interactions. These client/server - interactions consist of a client command, server data, and a server - completion result response. - - All interactions transmitted by client and server are in the form of - lines; that is, strings that end with a CRLF. The protocol receiver - of an IMAP4rev1 client or server is either reading a line, or is - reading a sequence of octets with a known count followed by a line. - -2.2.1. Client Protocol Sender and Server Protocol Receiver - - The client command begins an operation. Each client command is - prefixed with an identifier (typically a short alphanumeric string, - e.g. A0001, A0002, etc.) called a "tag". A different tag is - generated by the client for each command. - - There are two cases in which a line from the client does not - represent a complete command. In one case, a command argument is - quoted with an octet count (see the description of literal in String - under Data Formats); in the other case, the command arguments require - server feedback (see the AUTHENTICATE command). In either case, the - server sends a command continuation request response if it is ready - for the octets (if appropriate) and the remainder of the command. - This response is prefixed with the token "+". - - Note: If, instead, the server detected an error in the command, it - sends a BAD completion response with tag matching the command (as - described below) to reject the command and prevent the client from - sending any more of the command. - - It is also possible for the server to send a completion response - for some other command (if multiple commands are in progress), or - untagged data. In either case, the command continuation request - is still pending; the client takes the appropriate action for the - response, and reads another response from the server. In all - cases, the client MUST send a complete command (including - receiving all command continuation request responses and command - continuations for the command) before initiating a new command. - - The protocol receiver of an IMAP4rev1 server reads a command line - from the client, parses the command and its arguments, and transmits - server data and a server command completion result response. - - - - - -Crispin Standards Track [Page 6] - -RFC 2060 IMAP4rev1 December 1996 - - -2.2.2. Server Protocol Sender and Client Protocol Receiver - - Data transmitted by the server to the client and status responses - that do not indicate command completion are prefixed with the token - "*", and are called untagged responses. - - Server data MAY be sent as a result of a client command, or MAY be - sent unilaterally by the server. There is no syntactic difference - between server data that resulted from a specific command and server - data that were sent unilaterally. - - The server completion result response indicates the success or - failure of the operation. It is tagged with the same tag as the - client command which began the operation. Thus, if more than one - command is in progress, the tag in a server completion response - identifies the command to which the response applies. There are - three possible server completion responses: OK (indicating success), - NO (indicating failure), or BAD (indicating protocol error such as - unrecognized command or command syntax error). - - The protocol receiver of an IMAP4rev1 client reads a response line - from the server. It then takes action on the response based upon the - first token of the response, which can be a tag, a "*", or a "+". - - A client MUST be prepared to accept any server response at all times. - This includes server data that was not requested. Server data SHOULD - be recorded, so that the client can reference its recorded copy - rather than sending a command to the server to request the data. In - the case of certain server data, the data MUST be recorded. - - This topic is discussed in greater detail in the Server Responses - section. - -2.3. Message Attributes - - In addition to message text, each message has several attributes - associated with it. These attributes may be retrieved individually - or in conjunction with other attributes or message texts. - -2.3.1. Message Numbers - - Messages in IMAP4rev1 are accessed by one of two numbers; the unique - identifier and the message sequence number. - -2.3.1.1. Unique Identifier (UID) Message Attribute - - A 32-bit value assigned to each message, which when used with the - unique identifier validity value (see below) forms a 64-bit value - - - -Crispin Standards Track [Page 7] - -RFC 2060 IMAP4rev1 December 1996 - - - that is permanently guaranteed not to refer to any other message in - the mailbox. Unique identifiers are assigned in a strictly ascending - fashion in the mailbox; as each message is added to the mailbox it is - assigned a higher UID than the message(s) which were added - previously. - - Unlike message sequence numbers, unique identifiers are not - necessarily contiguous. Unique identifiers also persist across - sessions. This permits a client to resynchronize its state from a - previous session with the server (e.g. disconnected or offline access - clients); this is discussed further in [IMAP-DISC]. - - Associated with every mailbox is a unique identifier validity value, - which is sent in an UIDVALIDITY response code in an OK untagged - response at mailbox selection time. If unique identifiers from an - earlier session fail to persist to this session, the unique - identifier validity value MUST be greater than the one used in the - earlier session. - - Note: Unique identifiers MUST be strictly ascending in the mailbox - at all times. If the physical message store is re-ordered by a - non-IMAP agent, this requires that the unique identifiers in the - mailbox be regenerated, since the former unique identifers are no - longer strictly ascending as a result of the re-ordering. Another - instance in which unique identifiers are regenerated is if the - message store has no mechanism to store unique identifiers. - Although this specification recognizes that this may be - unavoidable in certain server environments, it STRONGLY ENCOURAGES - message store implementation techniques that avoid this problem. - - Another cause of non-persistance is if the mailbox is deleted and - a new mailbox with the same name is created at a later date, Since - the name is the same, a client may not know that this is a new - mailbox unless the unique identifier validity is different. A - good value to use for the unique identifier validity value is a - 32-bit representation of the creation date/time of the mailbox. - It is alright to use a constant such as 1, but only if it - guaranteed that unique identifiers will never be reused, even in - the case of a mailbox being deleted (or renamed) and a new mailbox - by the same name created at some future time. - - The unique identifier of a message MUST NOT change during the - session, and SHOULD NOT change between sessions. However, if it is - not possible to preserve the unique identifier of a message in a - subsequent session, each subsequent session MUST have a new unique - identifier validity value that is larger than any that was used - previously. - - - - -Crispin Standards Track [Page 8] - -RFC 2060 IMAP4rev1 December 1996 - - -2.3.1.2. Message Sequence Number Message Attribute - - A relative position from 1 to the number of messages in the mailbox. - This position MUST be ordered by ascending unique identifier. As - each new message is added, it is assigned a message sequence number - that is 1 higher than the number of messages in the mailbox before - that new message was added. - - Message sequence numbers can be reassigned during the session. For - example, when a message is permanently removed (expunged) from the - mailbox, the message sequence number for all subsequent messages is - decremented. Similarly, a new message can be assigned a message - sequence number that was once held by some other message prior to an - expunge. - - In addition to accessing messages by relative position in the - mailbox, message sequence numbers can be used in mathematical - calculations. For example, if an untagged "EXISTS 11" is received, - and previously an untagged "8 EXISTS" was received, three new - messages have arrived with message sequence numbers of 9, 10, and 11. - Another example; if message 287 in a 523 message mailbox has UID - 12345, there are exactly 286 messages which have lesser UIDs and 236 - messages which have greater UIDs. - -2.3.2. Flags Message Attribute - - A list of zero or more named tokens associated with the message. A - flag is set by its addition to this list, and is cleared by its - removal. There are two types of flags in IMAP4rev1. A flag of - either type may be permanent or session-only. - - A system flag is a flag name that is pre-defined in this - specification. All system flags begin with "\". Certain system - flags (\Deleted and \Seen) have special semantics described - elsewhere. The currently-defined system flags are: - - \Seen Message has been read - - \Answered Message has been answered - - \Flagged Message is "flagged" for urgent/special attention - - \Deleted Message is "deleted" for removal by later EXPUNGE - - \Draft Message has not completed composition (marked as a - draft). - - - - - -Crispin Standards Track [Page 9] - -RFC 2060 IMAP4rev1 December 1996 - - - \Recent Message is "recently" arrived in this mailbox. This - session is the first session to have been notified - about this message; subsequent sessions will not see - \Recent set for this message. This flag can not be - altered by the client. - - If it is not possible to determine whether or not - this session is the first session to be notified - about a message, then that message SHOULD be - considered recent. - - If multiple connections have the same mailbox - selected simultaneously, it is undefined which of - these connections will see newly-arrives messages - with \Recent set and which will see it without - \Recent set. - - A keyword is defined by the server implementation. Keywords do - not begin with "\". Servers MAY permit the client to define new - keywords in the mailbox (see the description of the - PERMANENTFLAGS response code for more information). - - A flag may be permanent or session-only on a per-flag basis. - Permanent flags are those which the client can add or remove - from the message flags permanently; that is, subsequent sessions - will see any change in permanent flags. Changes to session - flags are valid only in that session. - - Note: The \Recent system flag is a special case of a - session flag. \Recent can not be used as an argument in a - STORE command, and thus can not be changed at all. - -2.3.3. Internal Date Message Attribute - - The internal date and time of the message on the server. This is not - the date and time in the [RFC-822] header, but rather a date and time - which reflects when the message was received. In the case of - messages delivered via [SMTP], this SHOULD be the date and time of - final delivery of the message as defined by [SMTP]. In the case of - messages delivered by the IMAP4rev1 COPY command, this SHOULD be the - internal date and time of the source message. In the case of - messages delivered by the IMAP4rev1 APPEND command, this SHOULD be - the date and time as specified in the APPEND command description. - All other cases are implementation defined. - - - - - - - -Crispin Standards Track [Page 10] - -RFC 2060 IMAP4rev1 December 1996 - - -2.3.4. [RFC-822] Size Message Attribute - - The number of octets in the message, as expressed in [RFC-822] - format. - -2.3.5. Envelope Structure Message Attribute - - A parsed representation of the [RFC-822] envelope information (not to - be confused with an [SMTP] envelope) of the message. - -2.3.6. Body Structure Message Attribute - - A parsed representation of the [MIME-IMB] body structure information - of the message. - -2.4. Message Texts - - In addition to being able to fetch the full [RFC-822] text of a - message, IMAP4rev1 permits the fetching of portions of the full - message text. Specifically, it is possible to fetch the [RFC-822] - message header, [RFC-822] message body, a [MIME-IMB] body part, or a - [MIME-IMB] header. - -3. State and Flow Diagram - - An IMAP4rev1 server is in one of four states. Most commands are - valid in only certain states. It is a protocol error for the client - to attempt a command while the command is in an inappropriate state. - In this case, a server will respond with a BAD or NO (depending upon - server implementation) command completion result. - -3.1. Non-Authenticated State - - In non-authenticated state, the client MUST supply authentication - credentials before most commands will be permitted. This state is - entered when a connection starts unless the connection has been pre- - authenticated. - -3.2. Authenticated State - - In authenticated state, the client is authenticated and MUST select a - mailbox to access before commands that affect messages will be - permitted. This state is entered when a pre-authenticated connection - starts, when acceptable authentication credentials have been - provided, or after an error in selecting a mailbox. - - - - - - -Crispin Standards Track [Page 11] - -RFC 2060 IMAP4rev1 December 1996 - - -3.3. Selected State - - In selected state, a mailbox has been selected to access. This state - is entered when a mailbox has been successfully selected. - -3.4. Logout State - - In logout state, the connection is being terminated, and the server - will close the connection. This state can be entered as a result of - a client request or by unilateral server decision. - - +--------------------------------------+ - |initial connection and server greeting| - +--------------------------------------+ - || (1) || (2) || (3) - VV || || - +-----------------+ || || - |non-authenticated| || || - +-----------------+ || || - || (7) || (4) || || - || VV VV || - || +----------------+ || - || | authenticated |<=++ || - || +----------------+ || || - || || (7) || (5) || (6) || - || || VV || || - || || +--------+ || || - || || |selected|==++ || - || || +--------+ || - || || || (7) || - VV VV VV VV - +--------------------------------------+ - | logout and close connection | - +--------------------------------------+ - - (1) connection without pre-authentication (OK greeting) - (2) pre-authenticated connection (PREAUTH greeting) - (3) rejected connection (BYE greeting) - (4) successful LOGIN or AUTHENTICATE command - (5) successful SELECT or EXAMINE command - (6) CLOSE command, or failed SELECT or EXAMINE command - (7) LOGOUT command, server shutdown, or connection closed - -4. Data Formats - - IMAP4rev1 uses textual commands and responses. Data in IMAP4rev1 can - be in one of several forms: atom, number, string, parenthesized list, - or NIL. - - - -Crispin Standards Track [Page 12] - -RFC 2060 IMAP4rev1 December 1996 - - -4.1. Atom - - An atom consists of one or more non-special characters. - -4.2. Number - - A number consists of one or more digit characters, and represents a - numeric value. - -4.3. String - - A string is in one of two forms: literal and quoted string. The - literal form is the general form of string. The quoted string form - is an alternative that avoids the overhead of processing a literal at - the cost of limitations of characters that can be used in a quoted - string. - - A literal is a sequence of zero or more octets (including CR and LF), - prefix-quoted with an octet count in the form of an open brace ("{"), - the number of octets, close brace ("}"), and CRLF. In the case of - literals transmitted from server to client, the CRLF is immediately - followed by the octet data. In the case of literals transmitted from - client to server, the client MUST wait to receive a command - continuation request (described later in this document) before - sending the octet data (and the remainder of the command). - - A quoted string is a sequence of zero or more 7-bit characters, - excluding CR and LF, with double quote (<">) characters at each end. - - The empty string is represented as either "" (a quoted string with - zero characters between double quotes) or as {0} followed by CRLF (a - literal with an octet count of 0). - - Note: Even if the octet count is 0, a client transmitting a - literal MUST wait to receive a command continuation request. - -4.3.1. 8-bit and Binary Strings - - 8-bit textual and binary mail is supported through the use of a - [MIME-IMB] content transfer encoding. IMAP4rev1 implementations MAY - transmit 8-bit or multi-octet characters in literals, but SHOULD do - so only when the [CHARSET] is identified. - - - - - - - - - -Crispin Standards Track [Page 13] - -RFC 2060 IMAP4rev1 December 1996 - - - Although a BINARY body encoding is defined, unencoded binary strings - are not permitted. A "binary string" is any string with NUL - characters. Implementations MUST encode binary data into a textual - form such as BASE64 before transmitting the data. A string with an - excessive amount of CTL characters MAY also be considered to be - binary. - -4.4. Parenthesized List - - Data structures are represented as a "parenthesized list"; a sequence - of data items, delimited by space, and bounded at each end by - parentheses. A parenthesized list can contain other parenthesized - lists, using multiple levels of parentheses to indicate nesting. - - The empty list is represented as () -- a parenthesized list with no - members. - -4.5. NIL - - The special atom "NIL" represents the non-existence of a particular - data item that is represented as a string or parenthesized list, as - distinct from the empty string "" or the empty parenthesized list (). - -5. Operational Considerations - -5.1. Mailbox Naming - - The interpretation of mailbox names is implementation-dependent. - However, the case-insensitive mailbox name INBOX is a special name - reserved to mean "the primary mailbox for this user on this server". - -5.1.1. Mailbox Hierarchy Naming - - If it is desired to export hierarchical mailbox names, mailbox names - MUST be left-to-right hierarchical using a single character to - separate levels of hierarchy. The same hierarchy separator character - is used for all levels of hierarchy within a single name. - -5.1.2. Mailbox Namespace Naming Convention - - By convention, the first hierarchical element of any mailbox name - which begins with "#" identifies the "namespace" of the remainder of - the name. This makes it possible to disambiguate between different - types of mailbox stores, each of which have their own namespaces. - - - - - - - -Crispin Standards Track [Page 14] - -RFC 2060 IMAP4rev1 December 1996 - - - For example, implementations which offer access to USENET - newsgroups MAY use the "#news" namespace to partition the USENET - newsgroup namespace from that of other mailboxes. Thus, the - comp.mail.misc newsgroup would have an mailbox name of - "#news.comp.mail.misc", and the name "comp.mail.misc" could refer - to a different object (e.g. a user's private mailbox). - -5.1.3. Mailbox International Naming Convention - - By convention, international mailbox names are specified using a - modified version of the UTF-7 encoding described in [UTF-7]. The - purpose of these modifications is to correct the following problems - with UTF-7: - - 1) UTF-7 uses the "+" character for shifting; this conflicts with - the common use of "+" in mailbox names, in particular USENET - newsgroup names. - - 2) UTF-7's encoding is BASE64 which uses the "/" character; this - conflicts with the use of "/" as a popular hierarchy delimiter. - - 3) UTF-7 prohibits the unencoded usage of "\"; this conflicts with - the use of "\" as a popular hierarchy delimiter. - - 4) UTF-7 prohibits the unencoded usage of "~"; this conflicts with - the use of "~" in some servers as a home directory indicator. - - 5) UTF-7 permits multiple alternate forms to represent the same - string; in particular, printable US-ASCII chararacters can be - represented in encoded form. - - In modified UTF-7, printable US-ASCII characters except for "&" - represent themselves; that is, characters with octet values 0x20-0x25 - and 0x27-0x7e. The character "&" (0x26) is represented by the two- - octet sequence "&-". - - All other characters (octet values 0x00-0x1f, 0x7f-0xff, and all - Unicode 16-bit octets) are represented in modified BASE64, with a - further modification from [UTF-7] that "," is used instead of "/". - Modified BASE64 MUST NOT be used to represent any printing US-ASCII - character which can represent itself. - - "&" is used to shift to modified BASE64 and "-" to shift back to US- - ASCII. All names start in US-ASCII, and MUST end in US-ASCII (that - is, a name that ends with a Unicode 16-bit octet MUST end with a "- - "). - - - - - -Crispin Standards Track [Page 15] - -RFC 2060 IMAP4rev1 December 1996 - - - For example, here is a mailbox name which mixes English, Japanese, - and Chinese text: ~peter/mail/&ZeVnLIqe-/&U,BTFw- - -5.2. Mailbox Size and Message Status Updates - - At any time, a server can send data that the client did not request. - Sometimes, such behavior is REQUIRED. For example, agents other than - the server MAY add messages to the mailbox (e.g. new mail delivery), - change the flags of message in the mailbox (e.g. simultaneous access - to the same mailbox by multiple agents), or even remove messages from - the mailbox. A server MUST send mailbox size updates automatically - if a mailbox size change is observed during the processing of a - command. A server SHOULD send message flag updates automatically, - without requiring the client to request such updates explicitly. - Special rules exist for server notification of a client about the - removal of messages to prevent synchronization errors; see the - description of the EXPUNGE response for more detail. - - Regardless of what implementation decisions a client makes on - remembering data from the server, a client implementation MUST record - mailbox size updates. It MUST NOT assume that any command after - initial mailbox selection will return the size of the mailbox. - -5.3. Response when no Command in Progress - - Server implementations are permitted to send an untagged response - (except for EXPUNGE) while there is no command in progress. Server - implementations that send such responses MUST deal with flow control - considerations. Specifically, they MUST either (1) verify that the - size of the data does not exceed the underlying transport's available - window size, or (2) use non-blocking writes. - -5.4. Autologout Timer - - If a server has an inactivity autologout timer, that timer MUST be of - at least 30 minutes' duration. The receipt of ANY command from the - client during that interval SHOULD suffice to reset the autologout - timer. - - - - - - - - - - - - - -Crispin Standards Track [Page 16] - -RFC 2060 IMAP4rev1 December 1996 - - -5.5. Multiple Commands in Progress - - The client MAY send another command without waiting for the - completion result response of a command, subject to ambiguity rules - (see below) and flow control constraints on the underlying data - stream. Similarly, a server MAY begin processing another command - before processing the current command to completion, subject to - ambiguity rules. However, any command continuation request responses - and command continuations MUST be negotiated before any subsequent - command is initiated. - - The exception is if an ambiguity would result because of a command - that would affect the results of other commands. Clients MUST NOT - send multiple commands without waiting if an ambiguity would result. - If the server detects a possible ambiguity, it MUST execute commands - to completion in the order given by the client. - - The most obvious example of ambiguity is when a command would affect - the results of another command; for example, a FETCH of a message's - flags and a STORE of that same message's flags. - - A non-obvious ambiguity occurs with commands that permit an untagged - EXPUNGE response (commands other than FETCH, STORE, and SEARCH), - since an untagged EXPUNGE response can invalidate sequence numbers in - a subsequent command. This is not a problem for FETCH, STORE, or - SEARCH commands because servers are prohibited from sending EXPUNGE - responses while any of those commands are in progress. Therefore, if - the client sends any command other than FETCH, STORE, or SEARCH, it - MUST wait for a response before sending a command with message - sequence numbers. - - For example, the following non-waiting command sequences are invalid: - - FETCH + NOOP + STORE - STORE + COPY + FETCH - COPY + COPY - CHECK + FETCH - - The following are examples of valid non-waiting command sequences: - - FETCH + STORE + SEARCH + CHECK - STORE + COPY + EXPUNGE - -6. Client Commands - - IMAP4rev1 commands are described in this section. Commands are - organized by the state in which the command is permitted. Commands - which are permitted in multiple states are listed in the minimum - - - -Crispin Standards Track [Page 17] - -RFC 2060 IMAP4rev1 December 1996 - - - permitted state (for example, commands valid in authenticated and - selected state are listed in the authenticated state commands). - - Command arguments, identified by "Arguments:" in the command - descriptions below, are described by function, not by syntax. The - precise syntax of command arguments is described in the Formal Syntax - section. - - Some commands cause specific server responses to be returned; these - are identified by "Responses:" in the command descriptions below. - See the response descriptions in the Responses section for - information on these responses, and the Formal Syntax section for the - precise syntax of these responses. It is possible for server data to - be transmitted as a result of any command; thus, commands that do not - specifically require server data specify "no specific responses for - this command" instead of "none". - - The "Result:" in the command description refers to the possible - tagged status responses to a command, and any special interpretation - of these status responses. - -6.1. Client Commands - Any State - - The following commands are valid in any state: CAPABILITY, NOOP, and - LOGOUT. - -6.1.1. CAPABILITY Command - - Arguments: none - - Responses: REQUIRED untagged response: CAPABILITY - - Result: OK - capability completed - BAD - command unknown or arguments invalid - - The CAPABILITY command requests a listing of capabilities that the - server supports. The server MUST send a single untagged - CAPABILITY response with "IMAP4rev1" as one of the listed - capabilities before the (tagged) OK response. This listing of - capabilities is not dependent upon connection state or user. It - is therefore not necessary to issue a CAPABILITY command more than - once in a connection. - - - - - - - - - -Crispin Standards Track [Page 18] - -RFC 2060 IMAP4rev1 December 1996 - - - A capability name which begins with "AUTH=" indicates that the - server supports that particular authentication mechanism. All - such names are, by definition, part of this specification. For - example, the authorization capability for an experimental - "blurdybloop" authenticator would be "AUTH=XBLURDYBLOOP" and not - "XAUTH=BLURDYBLOOP" or "XAUTH=XBLURDYBLOOP". - - Other capability names refer to extensions, revisions, or - amendments to this specification. See the documentation of the - CAPABILITY response for additional information. No capabilities, - beyond the base IMAP4rev1 set defined in this specification, are - enabled without explicit client action to invoke the capability. - - See the section entitled "Client Commands - - Experimental/Expansion" for information about the form of site or - implementation-specific capabilities. - - Example: C: abcd CAPABILITY - S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 - S: abcd OK CAPABILITY completed - -6.1.2. NOOP Command - - Arguments: none - - Responses: no specific responses for this command (but see below) - - Result: OK - noop completed - BAD - command unknown or arguments invalid - - The NOOP command always succeeds. It does nothing. - - Since any command can return a status update as untagged data, the - NOOP command can be used as a periodic poll for new messages or - message status updates during a period of inactivity. The NOOP - command can also be used to reset any inactivity autologout timer - on the server. - - Example: C: a002 NOOP - S: a002 OK NOOP completed - . . . - C: a047 NOOP - S: * 22 EXPUNGE - S: * 23 EXISTS - S: * 3 RECENT - S: * 14 FETCH (FLAGS (\Seen \Deleted)) - S: a047 OK NOOP completed - - - - -Crispin Standards Track [Page 19] - -RFC 2060 IMAP4rev1 December 1996 - - -6.1.3. LOGOUT Command - - Arguments: none - - Responses: REQUIRED untagged response: BYE - - Result: OK - logout completed - BAD - command unknown or arguments invalid - - The LOGOUT command informs the server that the client is done with - the connection. The server MUST send a BYE untagged response - before the (tagged) OK response, and then close the network - connection. - - Example: C: A023 LOGOUT - S: * BYE IMAP4rev1 Server logging out - S: A023 OK LOGOUT completed - (Server and client then close the connection) - -6.2. Client Commands - Non-Authenticated State - - In non-authenticated state, the AUTHENTICATE or LOGIN command - establishes authentication and enter authenticated state. The - AUTHENTICATE command provides a general mechanism for a variety of - authentication techniques, whereas the LOGIN command uses the - traditional user name and plaintext password pair. - - Server implementations MAY allow non-authenticated access to certain - mailboxes. The convention is to use a LOGIN command with the userid - "anonymous". A password is REQUIRED. It is implementation-dependent - what requirements, if any, are placed on the password and what access - restrictions are placed on anonymous users. - - Once authenticated (including as anonymous), it is not possible to - re-enter non-authenticated state. - - In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), - the following commands are valid in non-authenticated state: - AUTHENTICATE and LOGIN. - - - - - - - - - - - - -Crispin Standards Track [Page 20] - -RFC 2060 IMAP4rev1 December 1996 - - -6.2.1. AUTHENTICATE Command - - Arguments: authentication mechanism name - - Responses: continuation data can be requested - - Result: OK - authenticate completed, now in authenticated state - NO - authenticate failure: unsupported authentication - mechanism, credentials rejected - BAD - command unknown or arguments invalid, - authentication exchange cancelled - - The AUTHENTICATE command indicates an authentication mechanism, - such as described in [IMAP-AUTH], to the server. If the server - supports the requested authentication mechanism, it performs an - authentication protocol exchange to authenticate and identify the - client. It MAY also negotiate an OPTIONAL protection mechanism - for subsequent protocol interactions. If the requested - authentication mechanism is not supported, the server SHOULD - reject the AUTHENTICATE command by sending a tagged NO response. - - The authentication protocol exchange consists of a series of - server challenges and client answers that are specific to the - authentication mechanism. A server challenge consists of a - command continuation request response with the "+" token followed - by a BASE64 encoded string. The client answer consists of a line - consisting of a BASE64 encoded string. If the client wishes to - cancel an authentication exchange, it issues a line with a single - "*". If the server receives such an answer, it MUST reject the - AUTHENTICATE command by sending a tagged BAD response. - - A protection mechanism provides integrity and privacy protection - to the connection. If a protection mechanism is negotiated, it is - applied to all subsequent data sent over the connection. The - protection mechanism takes effect immediately following the CRLF - that concludes the authentication exchange for the client, and the - CRLF of the tagged OK response for the server. Once the - protection mechanism is in effect, the stream of command and - response octets is processed into buffers of ciphertext. Each - buffer is transferred over the connection as a stream of octets - prepended with a four octet field in network byte order that - represents the length of the following data. The maximum - ciphertext buffer length is defined by the protection mechanism. - - Authentication mechanisms are OPTIONAL. Protection mechanisms are - also OPTIONAL; an authentication mechanism MAY be implemented - without any protection mechanism. If an AUTHENTICATE command - fails with a NO response, the client MAY try another - - - -Crispin Standards Track [Page 21] - -RFC 2060 IMAP4rev1 December 1996 - - - authentication mechanism by issuing another AUTHENTICATE command, - or MAY attempt to authenticate by using the LOGIN command. In - other words, the client MAY request authentication types in - decreasing order of preference, with the LOGIN command as a last - resort. - - Example: S: * OK KerberosV4 IMAP4rev1 Server - C: A001 AUTHENTICATE KERBEROS_V4 - S: + AmFYig== - C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT - +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd - WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh - S: + or//EoAADZI= - C: DiAF5A4gA+oOIALuBkAAmw== - S: A001 OK Kerberos V4 authentication successful - - Note: the line breaks in the first client answer are for editorial - clarity and are not in real authenticators. - -6.2.2. LOGIN Command - - Arguments: user name - password - - Responses: no specific responses for this command - - Result: OK - login completed, now in authenticated state - NO - login failure: user name or password rejected - BAD - command unknown or arguments invalid - - The LOGIN command identifies the client to the server and carries - the plaintext password authenticating this user. - - Example: C: a001 LOGIN SMITH SESAME - S: a001 OK LOGIN completed - -6.3. Client Commands - Authenticated State - - In authenticated state, commands that manipulate mailboxes as atomic - entities are permitted. Of these commands, the SELECT and EXAMINE - commands will select a mailbox for access and enter selected state. - - In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), - the following commands are valid in authenticated state: SELECT, - EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, - STATUS, and APPEND. - - - - - -Crispin Standards Track [Page 22] - -RFC 2060 IMAP4rev1 December 1996 - - -6.3.1. SELECT Command - - Arguments: mailbox name - - Responses: REQUIRED untagged responses: FLAGS, EXISTS, RECENT - OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS - - Result: OK - select completed, now in selected state - NO - select failure, now in authenticated state: no - such mailbox, can't access mailbox - BAD - command unknown or arguments invalid - - The SELECT command selects a mailbox so that messages in the - mailbox can be accessed. Before returning an OK to the client, - the server MUST send the following untagged data to the client: - - FLAGS Defined flags in the mailbox. See the description - of the FLAGS response for more detail. - - <n> EXISTS The number of messages in the mailbox. See the - description of the EXISTS response for more detail. - - <n> RECENT The number of messages with the \Recent flag set. - See the description of the RECENT response for more - detail. - - OK [UIDVALIDITY <n>] - The unique identifier validity value. See the - description of the UID command for more detail. - - to define the initial state of the mailbox at the client. - - The server SHOULD also send an UNSEEN response code in an OK - untagged response, indicating the message sequence number of the - first unseen message in the mailbox. - - If the client can not change the permanent state of one or more of - the flags listed in the FLAGS untagged response, the server SHOULD - send a PERMANENTFLAGS response code in an OK untagged response, - listing the flags that the client can change permanently. - - Only one mailbox can be selected at a time in a connection; - simultaneous access to multiple mailboxes requires multiple - connections. The SELECT command automatically deselects any - currently selected mailbox before attempting the new selection. - Consequently, if a mailbox is selected and a SELECT command that - fails is attempted, no mailbox is selected. - - - - -Crispin Standards Track [Page 23] - -RFC 2060 IMAP4rev1 December 1996 - - - If the client is permitted to modify the mailbox, the server - SHOULD prefix the text of the tagged OK response with the - "[READ-WRITE]" response code. - - If the client is not permitted to modify the mailbox but is - permitted read access, the mailbox is selected as read-only, and - the server MUST prefix the text of the tagged OK response to - SELECT with the "[READ-ONLY]" response code. Read-only access - through SELECT differs from the EXAMINE command in that certain - read-only mailboxes MAY permit the change of permanent state on a - per-user (as opposed to global) basis. Netnews messages marked in - a server-based .newsrc file are an example of such per-user - permanent state that can be modified with read-only mailboxes. - - Example: C: A142 SELECT INBOX - S: * 172 EXISTS - S: * 1 RECENT - S: * OK [UNSEEN 12] Message 12 is first unseen - S: * OK [UIDVALIDITY 3857529045] UIDs valid - S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) - S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited - S: A142 OK [READ-WRITE] SELECT completed - -6.3.2. EXAMINE Command - - Arguments: mailbox name - - Responses: REQUIRED untagged responses: FLAGS, EXISTS, RECENT - OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS - - Result: OK - examine completed, now in selected state - NO - examine failure, now in authenticated state: no - such mailbox, can't access mailbox - BAD - command unknown or arguments invalid - - The EXAMINE command is identical to SELECT and returns the same - output; however, the selected mailbox is identified as read-only. - No changes to the permanent state of the mailbox, including - per-user state, are permitted. - - - - - - - - - - - - -Crispin Standards Track [Page 24] - -RFC 2060 IMAP4rev1 December 1996 - - - The text of the tagged OK response to the EXAMINE command MUST - begin with the "[READ-ONLY]" response code. - - Example: C: A932 EXAMINE blurdybloop - S: * 17 EXISTS - S: * 2 RECENT - S: * OK [UNSEEN 8] Message 8 is first unseen - S: * OK [UIDVALIDITY 3857529045] UIDs valid - S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) - S: * OK [PERMANENTFLAGS ()] No permanent flags permitted - S: A932 OK [READ-ONLY] EXAMINE completed - -6.3.3. CREATE Command - - Arguments: mailbox name - - Responses: no specific responses for this command - - Result: OK - create completed - NO - create failure: can't create mailbox with that name - BAD - command unknown or arguments invalid - - The CREATE command creates a mailbox with the given name. An OK - response is returned only if a new mailbox with that name has been - created. It is an error to attempt to create INBOX or a mailbox - with a name that refers to an extant mailbox. Any error in - creation will return a tagged NO response. - - If the mailbox name is suffixed with the server's hierarchy - separator character (as returned from the server by a LIST - command), this is a declaration that the client intends to create - mailbox names under this name in the hierarchy. Server - implementations that do not require this declaration MUST ignore - it. - - If the server's hierarchy separator character appears elsewhere in - the name, the server SHOULD create any superior hierarchical names - that are needed for the CREATE command to complete successfully. - In other words, an attempt to create "foo/bar/zap" on a server in - which "/" is the hierarchy separator character SHOULD create foo/ - and foo/bar/ if they do not already exist. - - If a new mailbox is created with the same name as a mailbox which - was deleted, its unique identifiers MUST be greater than any - unique identifiers used in the previous incarnation of the mailbox - UNLESS the new incarnation has a different unique identifier - validity value. See the description of the UID command for more - detail. - - - -Crispin Standards Track [Page 25] - -RFC 2060 IMAP4rev1 December 1996 - - - Example: C: A003 CREATE owatagusiam/ - S: A003 OK CREATE completed - C: A004 CREATE owatagusiam/blurdybloop - S: A004 OK CREATE completed - - Note: the interpretation of this example depends on whether "/" - was returned as the hierarchy separator from LIST. If "/" is the - hierarchy separator, a new level of hierarchy named "owatagusiam" - with a member called "blurdybloop" is created. Otherwise, two - mailboxes at the same hierarchy level are created. - -6.3.4. DELETE Command - - Arguments: mailbox name - - Responses: no specific responses for this command - - Result: OK - delete completed - NO - delete failure: can't delete mailbox with that name - BAD - command unknown or arguments invalid - - The DELETE command permanently removes the mailbox with the given - name. A tagged OK response is returned only if the mailbox has - been deleted. It is an error to attempt to delete INBOX or a - mailbox name that does not exist. - - The DELETE command MUST NOT remove inferior hierarchical names. - For example, if a mailbox "foo" has an inferior "foo.bar" - (assuming "." is the hierarchy delimiter character), removing - "foo" MUST NOT remove "foo.bar". It is an error to attempt to - delete a name that has inferior hierarchical names and also has - the \Noselect mailbox name attribute (see the description of the - LIST response for more details). - - It is permitted to delete a name that has inferior hierarchical - names and does not have the \Noselect mailbox name attribute. In - this case, all messages in that mailbox are removed, and the name - will acquire the \Noselect mailbox name attribute. - - The value of the highest-used unique identifier of the deleted - mailbox MUST be preserved so that a new mailbox created with the - same name will not reuse the identifiers of the former - incarnation, UNLESS the new incarnation has a different unique - identifier validity value. See the description of the UID command - for more detail. - - - - - - -Crispin Standards Track [Page 26] - -RFC 2060 IMAP4rev1 December 1996 - - - Examples: C: A682 LIST "" * - S: * LIST () "/" blurdybloop - S: * LIST (\Noselect) "/" foo - S: * LIST () "/" foo/bar - S: A682 OK LIST completed - C: A683 DELETE blurdybloop - S: A683 OK DELETE completed - C: A684 DELETE foo - S: A684 NO Name "foo" has inferior hierarchical names - C: A685 DELETE foo/bar - S: A685 OK DELETE Completed - C: A686 LIST "" * - S: * LIST (\Noselect) "/" foo - S: A686 OK LIST completed - C: A687 DELETE foo - S: A687 OK DELETE Completed - - - C: A82 LIST "" * - S: * LIST () "." blurdybloop - S: * LIST () "." foo - S: * LIST () "." foo.bar - S: A82 OK LIST completed - C: A83 DELETE blurdybloop - S: A83 OK DELETE completed - C: A84 DELETE foo - S: A84 OK DELETE Completed - C: A85 LIST "" * - S: * LIST () "." foo.bar - S: A85 OK LIST completed - C: A86 LIST "" % - S: * LIST (\Noselect) "." foo - S: A86 OK LIST completed - -6.3.5. RENAME Command - - Arguments: existing mailbox name - new mailbox name - - Responses: no specific responses for this command - - Result: OK - rename completed - NO - rename failure: can't rename mailbox with that name, - can't rename to mailbox with that name - BAD - command unknown or arguments invalid - - The RENAME command changes the name of a mailbox. A tagged OK - response is returned only if the mailbox has been renamed. It is - - - -Crispin Standards Track [Page 27] - -RFC 2060 IMAP4rev1 December 1996 - - - an error to attempt to rename from a mailbox name that does not - exist or to a mailbox name that already exists. Any error in - renaming will return a tagged NO response. - - If the name has inferior hierarchical names, then the inferior - hierarchical names MUST also be renamed. For example, a rename of - "foo" to "zap" will rename "foo/bar" (assuming "/" is the - hierarchy delimiter character) to "zap/bar". - - The value of the highest-used unique identifier of the old mailbox - name MUST be preserved so that a new mailbox created with the same - name will not reuse the identifiers of the former incarnation, - UNLESS the new incarnation has a different unique identifier - validity value. See the description of the UID command for more - detail. - - Renaming INBOX is permitted, and has special behavior. It moves - all messages in INBOX to a new mailbox with the given name, - leaving INBOX empty. If the server implementation supports - inferior hierarchical names of INBOX, these are unaffected by a - rename of INBOX. - - Examples: C: A682 LIST "" * - S: * LIST () "/" blurdybloop - S: * LIST (\Noselect) "/" foo - S: * LIST () "/" foo/bar - S: A682 OK LIST completed - C: A683 RENAME blurdybloop sarasoop - S: A683 OK RENAME completed - C: A684 RENAME foo zowie - S: A684 OK RENAME Completed - C: A685 LIST "" * - S: * LIST () "/" sarasoop - S: * LIST (\Noselect) "/" zowie - S: * LIST () "/" zowie/bar - S: A685 OK LIST completed - - - - - - - - - - - - - - - -Crispin Standards Track [Page 28] - -RFC 2060 IMAP4rev1 December 1996 - - - C: Z432 LIST "" * - S: * LIST () "." INBOX - S: * LIST () "." INBOX.bar - S: Z432 OK LIST completed - C: Z433 RENAME INBOX old-mail - S: Z433 OK RENAME completed - C: Z434 LIST "" * - S: * LIST () "." INBOX - S: * LIST () "." INBOX.bar - S: * LIST () "." old-mail - S: Z434 OK LIST completed - -6.3.6. SUBSCRIBE Command - - Arguments: mailbox - - Responses: no specific responses for this command - - Result: OK - subscribe completed - NO - subscribe failure: can't subscribe to that name - BAD - command unknown or arguments invalid - - The SUBSCRIBE command adds the specified mailbox name to the - server's set of "active" or "subscribed" mailboxes as returned by - the LSUB command. This command returns a tagged OK response only - if the subscription is successful. - - A server MAY validate the mailbox argument to SUBSCRIBE to verify - that it exists. However, it MUST NOT unilaterally remove an - existing mailbox name from the subscription list even if a mailbox - by that name no longer exists. - - Note: this requirement is because some server sites may routinely - remove a mailbox with a well-known name (e.g. "system-alerts") - after its contents expire, with the intention of recreating it - when new contents are appropriate. - - Example: C: A002 SUBSCRIBE #news.comp.mail.mime - S: A002 OK SUBSCRIBE completed - - - - - - - - - - - - -Crispin Standards Track [Page 29] - -RFC 2060 IMAP4rev1 December 1996 - - -6.3.7. UNSUBSCRIBE Command - - Arguments: mailbox name - - Responses: no specific responses for this command - - Result: OK - unsubscribe completed - NO - unsubscribe failure: can't unsubscribe that name - BAD - command unknown or arguments invalid - - The UNSUBSCRIBE command removes the specified mailbox name from - the server's set of "active" or "subscribed" mailboxes as returned - by the LSUB command. This command returns a tagged OK response - only if the unsubscription is successful. - - Example: C: A002 UNSUBSCRIBE #news.comp.mail.mime - S: A002 OK UNSUBSCRIBE completed - -6.3..8. LIST Command - - Arguments: reference name - mailbox name with possible wildcards - - Responses: untagged responses: LIST - - Result: OK - list completed - NO - list failure: can't list that reference or name - BAD - command unknown or arguments invalid - - The LIST command returns a subset of names from the complete set - of all names available to the client. Zero or more untagged LIST - replies are returned, containing the name attributes, hierarchy - delimiter, and name; see the description of the LIST reply for - more detail. - - The LIST command SHOULD return its data quickly, without undue - delay. For example, it SHOULD NOT go to excess trouble to - calculate \Marked or \Unmarked status or perform other processing; - if each name requires 1 second of processing, then a list of 1200 - names would take 20 minutes! - - An empty ("" string) reference name argument indicates that the - mailbox name is interpreted as by SELECT. The returned mailbox - names MUST match the supplied mailbox name pattern. A non-empty - reference name argument is the name of a mailbox or a level of - mailbox hierarchy, and indicates a context in which the mailbox - name is interpreted in an implementation-defined manner. - - - - -Crispin Standards Track [Page 30] - -RFC 2060 IMAP4rev1 December 1996 - - - An empty ("" string) mailbox name argument is a special request to - return the hierarchy delimiter and the root name of the name given - in the reference. The value returned as the root MAY be null if - the reference is non-rooted or is null. In all cases, the - hierarchy delimiter is returned. This permits a client to get the - hierarchy delimiter even when no mailboxes by that name currently - exist. - - The reference and mailbox name arguments are interpreted, in an - implementation-dependent fashion, into a canonical form that - represents an unambiguous left-to-right hierarchy. The returned - mailbox names will be in the interpreted form. - - Any part of the reference argument that is included in the - interpreted form SHOULD prefix the interpreted form. It SHOULD - also be in the same form as the reference name argument. This - rule permits the client to determine if the returned mailbox name - is in the context of the reference argument, or if something about - the mailbox argument overrode the reference argument. Without - this rule, the client would have to have knowledge of the server's - naming semantics including what characters are "breakouts" that - override a naming context. - - For example, here are some examples of how references and mailbox - names might be interpreted on a UNIX-based server: - - Reference Mailbox Name Interpretation - ------------ ------------ -------------- - ~smith/Mail/ foo.* ~smith/Mail/foo.* - archive/ % archive/% - #news. comp.mail.* #news.comp.mail.* - ~smith/Mail/ /usr/doc/foo /usr/doc/foo - archive/ ~fred/Mail/* ~fred/Mail/* - - The first three examples demonstrate interpretations in the - context of the reference argument. Note that "~smith/Mail" SHOULD - NOT be transformed into something like "/u2/users/smith/Mail", or - it would be impossible for the client to determine that the - interpretation was in the context of the reference. - - The character "*" is a wildcard, and matches zero or more - characters at this position. The character "%" is similar to "*", - but it does not match a hierarchy delimiter. If the "%" wildcard - is the last character of a mailbox name argument, matching levels - of hierarchy are also returned. If these levels of hierarchy are - not also selectable mailboxes, they are returned with the - \Noselect mailbox name attribute (see the description of the LIST - response for more details). - - - -Crispin Standards Track [Page 31] - -RFC 2060 IMAP4rev1 December 1996 - - - Server implementations are permitted to "hide" otherwise - accessible mailboxes from the wildcard characters, by preventing - certain characters or names from matching a wildcard in certain - situations. For example, a UNIX-based server might restrict the - interpretation of "*" so that an initial "/" character does not - match. - - The special name INBOX is included in the output from LIST, if - INBOX is supported by this server for this user and if the - uppercase string "INBOX" matches the interpreted reference and - mailbox name arguments with wildcards as described above. The - criteria for omitting INBOX is whether SELECT INBOX will return - failure; it is not relevant whether the user's real INBOX resides - on this or some other server. - - Example: C: A101 LIST "" "" - S: * LIST (\Noselect) "/" "" - S: A101 OK LIST Completed - C: A102 LIST #news.comp.mail.misc "" - S: * LIST (\Noselect) "." #news. - S: A102 OK LIST Completed - C: A103 LIST /usr/staff/jones "" - S: * LIST (\Noselect) "/" / - S: A103 OK LIST Completed - C: A202 LIST ~/Mail/ % - S: * LIST (\Noselect) "/" ~/Mail/foo - S: * LIST () "/" ~/Mail/meetings - S: A202 OK LIST completed - -6.3.9. LSUB Command - - Arguments: reference name - mailbox name with possible wildcards - - Responses: untagged responses: LSUB - - Result: OK - lsub completed - NO - lsub failure: can't list that reference or name - BAD - command unknown or arguments invalid - - The LSUB command returns a subset of names from the set of names - that the user has declared as being "active" or "subscribed". - Zero or more untagged LSUB replies are returned. The arguments to - LSUB are in the same form as those for LIST. - - A server MAY validate the subscribed names to see if they still - exist. If a name does not exist, it SHOULD be flagged with the - \Noselect attribute in the LSUB response. The server MUST NOT - - - -Crispin Standards Track [Page 32] - -RFC 2060 IMAP4rev1 December 1996 - - - unilaterally remove an existing mailbox name from the subscription - list even if a mailbox by that name no longer exists. - - Example: C: A002 LSUB "#news." "comp.mail.*" - S: * LSUB () "." #news.comp.mail.mime - S: * LSUB () "." #news.comp.mail.misc - S: A002 OK LSUB completed - -6.3.10. STATUS Command - - Arguments: mailbox name - status data item names - - Responses: untagged responses: STATUS - - Result: OK - status completed - NO - status failure: no status for that name - BAD - command unknown or arguments invalid - - The STATUS command requests the status of the indicated mailbox. - It does not change the currently selected mailbox, nor does it - affect the state of any messages in the queried mailbox (in - particular, STATUS MUST NOT cause messages to lose the \Recent - flag). - - The STATUS command provides an alternative to opening a second - IMAP4rev1 connection and doing an EXAMINE command on a mailbox to - query that mailbox's status without deselecting the current - mailbox in the first IMAP4rev1 connection. - - Unlike the LIST command, the STATUS command is not guaranteed to - be fast in its response. In some implementations, the server is - obliged to open the mailbox read-only internally to obtain certain - status information. Also unlike the LIST command, the STATUS - command does not accept wildcards. - - The currently defined status data items that can be requested are: - - MESSAGES The number of messages in the mailbox. - - RECENT The number of messages with the \Recent flag set. - - UIDNEXT The next UID value that will be assigned to a new - message in the mailbox. It is guaranteed that this - value will not change unless new messages are added - to the mailbox; and that it will change when new - messages are added even if those new messages are - subsequently expunged. - - - -Crispin Standards Track [Page 33] - -RFC 2060 IMAP4rev1 December 1996 - - - UIDVALIDITY The unique identifier validity value of the - mailbox. - - UNSEEN The number of messages which do not have the \Seen - flag set. - - - Example: C: A042 STATUS blurdybloop (UIDNEXT MESSAGES) - S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) - S: A042 OK STATUS completed - -6.3.11. APPEND Command - - Arguments: mailbox name - OPTIONAL flag parenthesized list - OPTIONAL date/time string - message literal - - Responses: no specific responses for this command - - Result: OK - append completed - NO - append error: can't append to that mailbox, error - in flags or date/time or message text - BAD - command unknown or arguments invalid - - The APPEND command appends the literal argument as a new message - to the end of the specified destination mailbox. This argument - SHOULD be in the format of an [RFC-822] message. 8-bit characters - are permitted in the message. A server implementation that is - unable to preserve 8-bit data properly MUST be able to reversibly - convert 8-bit APPEND data to 7-bit using a [MIME-IMB] content - transfer encoding. - - Note: There MAY be exceptions, e.g. draft messages, in which - required [RFC-822] header lines are omitted in the message literal - argument to APPEND. The full implications of doing so MUST be - understood and carefully weighed. - - If a flag parenthesized list is specified, the flags SHOULD be set in - the resulting message; otherwise, the flag list of the resulting - message is set empty by default. - - If a date_time is specified, the internal date SHOULD be set in the - resulting message; otherwise, the internal date of the resulting - message is set to the current date and time by default. - - - - - - -Crispin Standards Track [Page 34] - -RFC 2060 IMAP4rev1 December 1996 - - - If the append is unsuccessful for any reason, the mailbox MUST be - restored to its state before the APPEND attempt; no partial appending - is permitted. - - If the destination mailbox does not exist, a server MUST return an - error, and MUST NOT automatically create the mailbox. Unless it is - certain that the destination mailbox can not be created, the server - MUST send the response code "[TRYCREATE]" as the prefix of the text - of the tagged NO response. This gives a hint to the client that it - can attempt a CREATE command and retry the APPEND if the CREATE is - successful. - - If the mailbox is currently selected, the normal new mail actions - SHOULD occur. Specifically, the server SHOULD notify the client - immediately via an untagged EXISTS response. If the server does not - do so, the client MAY issue a NOOP command (or failing that, a CHECK - command) after one or more APPEND commands. - - Example: C: A003 APPEND saved-messages (\Seen) {310} - C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST) - C: From: Fred Foobar <foobar@Blurdybloop.COM> - C: Subject: afternoon meeting - C: To: mooch@owatagu.siam.edu - C: Message-Id: <B27397-0100000@Blurdybloop.COM> - C: MIME-Version: 1.0 - C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII - C: - C: Hello Joe, do you think we can meet at 3:30 tomorrow? - C: - S: A003 OK APPEND completed - - Note: the APPEND command is not used for message delivery, because - it does not provide a mechanism to transfer [SMTP] envelope - information. - -6.4. Client Commands - Selected State - - In selected state, commands that manipulate messages in a mailbox are - permitted. - - In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT), - and the authenticated state commands (SELECT, EXAMINE, CREATE, - DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and - APPEND), the following commands are valid in the selected state: - CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID. - - - - - - -Crispin Standards Track [Page 35] - -RFC 2060 IMAP4rev1 December 1996 - - -6.4.1. CHECK Command - - Arguments: none - - Responses: no specific responses for this command - - Result: OK - check completed - BAD - command unknown or arguments invalid - - The CHECK command requests a checkpoint of the currently selected - mailbox. A checkpoint refers to any implementation-dependent - housekeeping associated with the mailbox (e.g. resolving the - server's in-memory state of the mailbox with the state on its - disk) that is not normally executed as part of each command. A - checkpoint MAY take a non-instantaneous amount of real time to - complete. If a server implementation has no such housekeeping - considerations, CHECK is equivalent to NOOP. - - There is no guarantee that an EXISTS untagged response will happen - as a result of CHECK. NOOP, not CHECK, SHOULD be used for new - mail polling. - - Example: C: FXXZ CHECK - S: FXXZ OK CHECK Completed - -6.4.2. CLOSE Command - - Arguments: none - - Responses: no specific responses for this command - - Result: OK - close completed, now in authenticated state - NO - close failure: no mailbox selected - BAD - command unknown or arguments invalid - - The CLOSE command permanently removes from the currently selected - mailbox all messages that have the \Deleted flag set, and returns - to authenticated state from selected state. No untagged EXPUNGE - responses are sent. - - No messages are removed, and no error is given, if the mailbox is - selected by an EXAMINE command or is otherwise selected read-only. - - Even if a mailbox is selected, a SELECT, EXAMINE, or LOGOUT - command MAY be issued without previously issuing a CLOSE command. - The SELECT, EXAMINE, and LOGOUT commands implicitly close the - currently selected mailbox without doing an expunge. However, - when many messages are deleted, a CLOSE-LOGOUT or CLOSE-SELECT - - - -Crispin Standards Track [Page 36] - -RFC 2060 IMAP4rev1 December 1996 - - - sequence is considerably faster than an EXPUNGE-LOGOUT or - EXPUNGE-SELECT because no untagged EXPUNGE responses (which the - client would probably ignore) are sent. - - Example: C: A341 CLOSE - S: A341 OK CLOSE completed - -6.4.3. EXPUNGE Command - - Arguments: none - - Responses: untagged responses: EXPUNGE - - Result: OK - expunge completed - NO - expunge failure: can't expunge (e.g. permission - denied) - BAD - command unknown or arguments invalid - - The EXPUNGE command permanently removes from the currently - selected mailbox all messages that have the \Deleted flag set. - Before returning an OK to the client, an untagged EXPUNGE response - is sent for each message that is removed. - - Example: C: A202 EXPUNGE - S: * 3 EXPUNGE - S: * 3 EXPUNGE - S: * 5 EXPUNGE - S: * 8 EXPUNGE - S: A202 OK EXPUNGE completed - - Note: in this example, messages 3, 4, 7, and 11 had the - \Deleted flag set. See the description of the EXPUNGE - response for further explanation. - -6.4.4. SEARCH Command - - Arguments: OPTIONAL [CHARSET] specification - searching criteria (one or more) - - Responses: REQUIRED untagged response: SEARCH - - Result: OK - search completed - NO - search error: can't search that [CHARSET] or - criteria - BAD - command unknown or arguments invalid - - - - - - -Crispin Standards Track [Page 37] - -RFC 2060 IMAP4rev1 December 1996 - - - The SEARCH command searches the mailbox for messages that match - the given searching criteria. Searching criteria consist of one - or more search keys. The untagged SEARCH response from the server - contains a listing of message sequence numbers corresponding to - those messages that match the searching criteria. - - When multiple keys are specified, the result is the intersection - (AND function) of all the messages that match those keys. For - example, the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers - to all deleted messages from Smith that were placed in the mailbox - since February 1, 1994. A search key can also be a parenthesized - list of one or more search keys (e.g. for use with the OR and NOT - keys). - - Server implementations MAY exclude [MIME-IMB] body parts with - terminal content media types other than TEXT and MESSAGE from - consideration in SEARCH matching. - - The OPTIONAL [CHARSET] specification consists of the word - "CHARSET" followed by a registered [CHARSET]. It indicates the - [CHARSET] of the strings that appear in the search criteria. - [MIME-IMB] content transfer encodings, and [MIME-HDRS] strings in - [RFC-822]/[MIME-IMB] headers, MUST be decoded before comparing - text in a [CHARSET] other than US-ASCII. US-ASCII MUST be - supported; other [CHARSET]s MAY be supported. If the server does - not support the specified [CHARSET], it MUST return a tagged NO - response (not a BAD). - - In all search keys that use strings, a message matches the key if - the string is a substring of the field. The matching is case- - insensitive. - - The defined search keys are as follows. Refer to the Formal - Syntax section for the precise syntactic definitions of the - arguments. - - <message set> Messages with message sequence numbers - corresponding to the specified message sequence - number set - - ALL All messages in the mailbox; the default initial - key for ANDing. - - ANSWERED Messages with the \Answered flag set. - - BCC <string> Messages that contain the specified string in the - envelope structure's BCC field. - - - - -Crispin Standards Track [Page 38] - -RFC 2060 IMAP4rev1 December 1996 - - - BEFORE <date> Messages whose internal date is earlier than the - specified date. - - BODY <string> Messages that contain the specified string in the - body of the message. - - CC <string> Messages that contain the specified string in the - envelope structure's CC field. - - DELETED Messages with the \Deleted flag set. - - DRAFT Messages with the \Draft flag set. - - FLAGGED Messages with the \Flagged flag set. - - FROM <string> Messages that contain the specified string in the - envelope structure's FROM field. - - HEADER <field-name> <string> - Messages that have a header with the specified - field-name (as defined in [RFC-822]) and that - contains the specified string in the [RFC-822] - field-body. - - KEYWORD <flag> Messages with the specified keyword set. - - LARGER <n> Messages with an [RFC-822] size larger than the - specified number of octets. - - NEW Messages that have the \Recent flag set but not the - \Seen flag. This is functionally equivalent to - "(RECENT UNSEEN)". - - NOT <search-key> - Messages that do not match the specified search - key. - - OLD Messages that do not have the \Recent flag set. - This is functionally equivalent to "NOT RECENT" (as - opposed to "NOT NEW"). - - ON <date> Messages whose internal date is within the - specified date. - - OR <search-key1> <search-key2> - Messages that match either search key. - - RECENT Messages that have the \Recent flag set. - - - -Crispin Standards Track [Page 39] - -RFC 2060 IMAP4rev1 December 1996 - - - SEEN Messages that have the \Seen flag set. - - SENTBEFORE <date> - Messages whose [RFC-822] Date: header is earlier - than the specified date. - - SENTON <date> Messages whose [RFC-822] Date: header is within the - specified date. - - SENTSINCE <date> - Messages whose [RFC-822] Date: header is within or - later than the specified date. - - SINCE <date> Messages whose internal date is within or later - than the specified date. - - SMALLER <n> Messages with an [RFC-822] size smaller than the - specified number of octets. - - SUBJECT <string> - Messages that contain the specified string in the - envelope structure's SUBJECT field. - - TEXT <string> Messages that contain the specified string in the - header or body of the message. - - TO <string> Messages that contain the specified string in the - envelope structure's TO field. - - UID <message set> - Messages with unique identifiers corresponding to - the specified unique identifier set. - - UNANSWERED Messages that do not have the \Answered flag set. - - UNDELETED Messages that do not have the \Deleted flag set. - - UNDRAFT Messages that do not have the \Draft flag set. - - UNFLAGGED Messages that do not have the \Flagged flag set. - - UNKEYWORD <flag> - Messages that do not have the specified keyword - set. - - UNSEEN Messages that do not have the \Seen flag set. - - - - - -Crispin Standards Track [Page 40] - -RFC 2060 IMAP4rev1 December 1996 - - - Example: C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith" - S: * SEARCH 2 84 882 - S: A282 OK SEARCH completed - -6.4.5. FETCH Command - - Arguments: message set - message data item names - - Responses: untagged responses: FETCH - - Result: OK - fetch completed - NO - fetch error: can't fetch that data - BAD - command unknown or arguments invalid - - The FETCH command retrieves data associated with a message in the - mailbox. The data items to be fetched can be either a single atom - or a parenthesized list. - - The currently defined data items that can be fetched are: - - ALL Macro equivalent to: (FLAGS INTERNALDATE - RFC822.SIZE ENVELOPE) - - BODY Non-extensible form of BODYSTRUCTURE. - - BODY[<section>]<<partial>> - The text of a particular body section. The section - specification is a set of zero or more part - specifiers delimited by periods. A part specifier - is either a part number or one of the following: - HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and - TEXT. An empty section specification refers to the - entire message, including the header. - - Every message has at least one part number. - Non-[MIME-IMB] messages, and non-multipart - [MIME-IMB] messages with no encapsulated message, - only have a part 1. - - Multipart messages are assigned consecutive part - numbers, as they occur in the message. If a - particular part is of type message or multipart, - its parts MUST be indicated by a period followed by - the part number within that nested multipart part. - - - - - - -Crispin Standards Track [Page 41] - -RFC 2060 IMAP4rev1 December 1996 - - - A part of type MESSAGE/RFC822 also has nested part - numbers, referring to parts of the MESSAGE part's - body. - - The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, and - TEXT part specifiers can be the sole part specifier - or can be prefixed by one or more numeric part - specifiers, provided that the numeric part - specifier refers to a part of type MESSAGE/RFC822. - The MIME part specifier MUST be prefixed by one or - more numeric part specifiers. - - The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT - part specifiers refer to the [RFC-822] header of - the message or of an encapsulated [MIME-IMT] - MESSAGE/RFC822 message. HEADER.FIELDS and - HEADER.FIELDS.NOT are followed by a list of - field-name (as defined in [RFC-822]) names, and - return a subset of the header. The subset returned - by HEADER.FIELDS contains only those header fields - with a field-name that matches one of the names in - the list; similarly, the subset returned by - HEADER.FIELDS.NOT contains only the header fields - with a non-matching field-name. The field-matching - is case-insensitive but otherwise exact. In all - cases, the delimiting blank line between the header - and the body is always included. - - The MIME part specifier refers to the [MIME-IMB] - header for this part. - - The TEXT part specifier refers to the text body of - the message, omitting the [RFC-822] header. - - - - - - - - - - - - - - - - - - -Crispin Standards Track [Page 42] - -RFC 2060 IMAP4rev1 December 1996 - - - Here is an example of a complex message - with some of its part specifiers: - - HEADER ([RFC-822] header of the message) - TEXT MULTIPART/MIXED - 1 TEXT/PLAIN - 2 APPLICATION/OCTET-STREAM - 3 MESSAGE/RFC822 - 3.HEADER ([RFC-822] header of the message) - 3.TEXT ([RFC-822] text body of the message) - 3.1 TEXT/PLAIN - 3.2 APPLICATION/OCTET-STREAM - 4 MULTIPART/MIXED - 4.1 IMAGE/GIF - 4.1.MIME ([MIME-IMB] header for the IMAGE/GIF) - 4.2 MESSAGE/RFC822 - 4.2.HEADER ([RFC-822] header of the message) - 4.2.TEXT ([RFC-822] text body of the message) - 4.2.1 TEXT/PLAIN - 4.2.2 MULTIPART/ALTERNATIVE - 4.2.2.1 TEXT/PLAIN - 4.2.2.2 TEXT/RICHTEXT - - - It is possible to fetch a substring of the - designated text. This is done by appending an open - angle bracket ("<"), the octet position of the - first desired octet, a period, the maximum number - of octets desired, and a close angle bracket (">") - to the part specifier. If the starting octet is - beyond the end of the text, an empty string is - returned. - - Any partial fetch that attempts to read beyond the - end of the text is truncated as appropriate. A - partial fetch that starts at octet 0 is returned as - a partial fetch, even if this truncation happened. - - Note: this means that BODY[]<0.2048> of a - 1500-octet message will return BODY[]<0> - with a literal of size 1500, not BODY[]. - - Note: a substring fetch of a - HEADER.FIELDS or HEADER.FIELDS.NOT part - specifier is calculated after subsetting - the header. - - - - - -Crispin Standards Track [Page 43] - -RFC 2060 IMAP4rev1 December 1996 - - - The \Seen flag is implicitly set; if this causes - the flags to change they SHOULD be included as part - of the FETCH responses. - - BODY.PEEK[<section>]<<partial>> - An alternate form of BODY[<section>] that does not - implicitly set the \Seen flag. - - BODYSTRUCTURE The [MIME-IMB] body structure of the message. This - is computed by the server by parsing the [MIME-IMB] - header fields in the [RFC-822] header and - [MIME-IMB] headers. - - ENVELOPE The envelope structure of the message. This is - computed by the server by parsing the [RFC-822] - header into the component parts, defaulting various - fields as necessary. - - FAST Macro equivalent to: (FLAGS INTERNALDATE - RFC822.SIZE) - - FLAGS The flags that are set for this message. - - FULL Macro equivalent to: (FLAGS INTERNALDATE - RFC822.SIZE ENVELOPE BODY) - - INTERNALDATE The internal date of the message. - - RFC822 Functionally equivalent to BODY[], differing in the - syntax of the resulting untagged FETCH data (RFC822 - is returned). - - RFC822.HEADER Functionally equivalent to BODY.PEEK[HEADER], - differing in the syntax of the resulting untagged - FETCH data (RFC822.HEADER is returned). - - RFC822.SIZE The [RFC-822] size of the message. - - RFC822.TEXT Functionally equivalent to BODY[TEXT], differing in - the syntax of the resulting untagged FETCH data - (RFC822.TEXT is returned). - - UID The unique identifier for the message. - - - - - - - - -Crispin Standards Track [Page 44] - -RFC 2060 IMAP4rev1 December 1996 - - - Example: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) - S: * 2 FETCH .... - S: * 3 FETCH .... - S: * 4 FETCH .... - S: A654 OK FETCH completed - -6.4.6. STORE Command - - Arguments: message set - message data item name - value for message data item - - Responses: untagged responses: FETCH - - Result: OK - store completed - NO - store error: can't store that data - BAD - command unknown or arguments invalid - - The STORE command alters data associated with a message in the - mailbox. Normally, STORE will return the updated value of the - data with an untagged FETCH response. A suffix of ".SILENT" in - the data item name prevents the untagged FETCH, and the server - SHOULD assume that the client has determined the updated value - itself or does not care about the updated value. - - Note: regardless of whether or not the ".SILENT" suffix was - used, the server SHOULD send an untagged FETCH response if a - change to a message's flags from an external source is - observed. The intent is that the status of the flags is - determinate without a race condition. - - The currently defined data items that can be stored are: - - FLAGS <flag list> - Replace the flags for the message with the - argument. The new value of the flags are returned - as if a FETCH of those flags was done. - - FLAGS.SILENT <flag list> - Equivalent to FLAGS, but without returning a new - value. - - +FLAGS <flag list> - Add the argument to the flags for the message. The - new value of the flags are returned as if a FETCH - of those flags was done. - - - - - -Crispin Standards Track [Page 45] - -RFC 2060 IMAP4rev1 December 1996 - - - +FLAGS.SILENT <flag list> - Equivalent to +FLAGS, but without returning a new - value. - - -FLAGS <flag list> - Remove the argument from the flags for the message. - The new value of the flags are returned as if a - FETCH of those flags was done. - - -FLAGS.SILENT <flag list> - Equivalent to -FLAGS, but without returning a new - value. - - Example: C: A003 STORE 2:4 +FLAGS (\Deleted) - S: * 2 FETCH FLAGS (\Deleted \Seen) - S: * 3 FETCH FLAGS (\Deleted) - S: * 4 FETCH FLAGS (\Deleted \Flagged \Seen) - S: A003 OK STORE completed - -6.4.7. COPY Command - - Arguments: message set - mailbox name - - Responses: no specific responses for this command - - Result: OK - copy completed - NO - copy error: can't copy those messages or to that - name - BAD - command unknown or arguments invalid - - The COPY command copies the specified message(s) to the end of the - specified destination mailbox. The flags and internal date of the - message(s) SHOULD be preserved in the copy. - - If the destination mailbox does not exist, a server SHOULD return - an error. It SHOULD NOT automatically create the mailbox. Unless - it is certain that the destination mailbox can not be created, the - server MUST send the response code "[TRYCREATE]" as the prefix of - the text of the tagged NO response. This gives a hint to the - client that it can attempt a CREATE command and retry the COPY if - the CREATE is successful. - - - - - - - - - -Crispin Standards Track [Page 46] - -RFC 2060 IMAP4rev1 December 1996 - - - If the COPY command is unsuccessful for any reason, server - implementations MUST restore the destination mailbox to its state - before the COPY attempt. - - Example: C: A003 COPY 2:4 MEETING - S: A003 OK COPY completed - -6.4.8. UID Command - - Arguments: command name - command arguments - - Responses: untagged responses: FETCH, SEARCH - - Result: OK - UID command completed - NO - UID command error - BAD - command unknown or arguments invalid - - The UID command has two forms. In the first form, it takes as its - arguments a COPY, FETCH, or STORE command with arguments - appropriate for the associated command. However, the numbers in - the message set argument are unique identifiers instead of message - sequence numbers. - - In the second form, the UID command takes a SEARCH command with - SEARCH command arguments. The interpretation of the arguments is - the same as with SEARCH; however, the numbers returned in a SEARCH - response for a UID SEARCH command are unique identifiers instead - of message sequence numbers. For example, the command UID SEARCH - 1:100 UID 443:557 returns the unique identifiers corresponding to - the intersection of the message sequence number set 1:100 and the - UID set 443:557. - - Message set ranges are permitted; however, there is no guarantee - that unique identifiers be contiguous. A non-existent unique - identifier within a message set range is ignored without any error - message generated. - - The number after the "*" in an untagged FETCH response is always a - message sequence number, not a unique identifier, even for a UID - command response. However, server implementations MUST implicitly - include the UID message data item as part of any FETCH response - caused by a UID command, regardless of whether a UID was specified - as a message data item to the FETCH. - - - - - - - -Crispin Standards Track [Page 47] - -RFC 2060 IMAP4rev1 December 1996 - - - Example: C: A999 UID FETCH 4827313:4828442 FLAGS - S: * 23 FETCH (FLAGS (\Seen) UID 4827313) - S: * 24 FETCH (FLAGS (\Seen) UID 4827943) - S: * 25 FETCH (FLAGS (\Seen) UID 4828442) - S: A999 UID FETCH completed - -6.5. Client Commands - Experimental/Expansion - -6.5.1. X<atom> Command - - Arguments: implementation defined - - Responses: implementation defined - - Result: OK - command completed - NO - failure - BAD - command unknown or arguments invalid - - Any command prefixed with an X is an experimental command. - Commands which are not part of this specification, a standard or - standards-track revision of this specification, or an IESG- - approved experimental protocol, MUST use the X prefix. - - Any added untagged responses issued by an experimental command - MUST also be prefixed with an X. Server implementations MUST NOT - send any such untagged responses, unless the client requested it - by issuing the associated experimental command. - - Example: C: a441 CAPABILITY - S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN - S: a441 OK CAPABILITY completed - C: A442 XPIG-LATIN - S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay - S: A442 OK XPIG-LATIN ompleted-cay - -7. Server Responses - - Server responses are in three forms: status responses, server data, - and command continuation request. The information contained in a - server response, identified by "Contents:" in the response - descriptions below, is described by function, not by syntax. The - precise syntax of server responses is described in the Formal Syntax - section. - - The client MUST be prepared to accept any response at all times. - - - - - - -Crispin Standards Track [Page 48] - -RFC 2060 IMAP4rev1 December 1996 - - - Status responses can be tagged or untagged. Tagged status responses - indicate the completion result (OK, NO, or BAD status) of a client - command, and have a tag matching the command. - - Some status responses, and all server data, are untagged. An - untagged response is indicated by the token "*" instead of a tag. - Untagged status responses indicate server greeting, or server status - that does not indicate the completion of a command (for example, an - impending system shutdown alert). For historical reasons, untagged - server data responses are also called "unsolicited data", although - strictly speaking only unilateral server data is truly "unsolicited". - - Certain server data MUST be recorded by the client when it is - received; this is noted in the description of that data. Such data - conveys critical information which affects the interpretation of all - subsequent commands and responses (e.g. updates reflecting the - creation or destruction of messages). - - Other server data SHOULD be recorded for later reference; if the - client does not need to record the data, or if recording the data has - no obvious purpose (e.g. a SEARCH response when no SEARCH command is - in progress), the data SHOULD be ignored. - - An example of unilateral untagged server data occurs when the IMAP - connection is in selected state. In selected state, the server - checks the mailbox for new messages as part of command execution. - Normally, this is part of the execution of every command; hence, a - NOOP command suffices to check for new messages. If new messages are - found, the server sends untagged EXISTS and RECENT responses - reflecting the new size of the mailbox. Server implementations that - offer multiple simultaneous access to the same mailbox SHOULD also - send appropriate unilateral untagged FETCH and EXPUNGE responses if - another agent changes the state of any message flags or expunges any - messages. - - Command continuation request responses use the token "+" instead of a - tag. These responses are sent by the server to indicate acceptance - of an incomplete client command and readiness for the remainder of - the command. - -7.1. Server Responses - Status Responses - - Status responses are OK, NO, BAD, PREAUTH and BYE. OK, NO, and BAD - may be tagged or untagged. PREAUTH and BYE are always untagged. - - Status responses MAY include an OPTIONAL "response code". A response - code consists of data inside square brackets in the form of an atom, - possibly followed by a space and arguments. The response code - - - -Crispin Standards Track [Page 49] - -RFC 2060 IMAP4rev1 December 1996 - - - contains additional information or status codes for client software - beyond the OK/NO/BAD condition, and are defined when there is a - specific action that a client can take based upon the additional - information. - - The currently defined response codes are: - - ALERT The human-readable text contains a special alert - that MUST be presented to the user in a fashion - that calls the user's attention to the message. - - NEWNAME Followed by a mailbox name and a new mailbox name. - A SELECT or EXAMINE is failing because the target - mailbox name no longer exists because it was - renamed to the new mailbox name. This is a hint to - the client that the operation can succeed if the - SELECT or EXAMINE is reissued with the new mailbox - name. - - PARSE The human-readable text represents an error in - parsing the [RFC-822] header or [MIME-IMB] headers - of a message in the mailbox. - - PERMANENTFLAGS Followed by a parenthesized list of flags, - indicates which of the known flags that the client - can change permanently. Any flags that are in the - FLAGS untagged response, but not the PERMANENTFLAGS - list, can not be set permanently. If the client - attempts to STORE a flag that is not in the - PERMANENTFLAGS list, the server will either reject - it with a NO reply or store the state for the - remainder of the current session only. The - PERMANENTFLAGS list can also include the special - flag \*, which indicates that it is possible to - create new keywords by attempting to store those - flags in the mailbox. - - READ-ONLY The mailbox is selected read-only, or its access - while selected has changed from read-write to - read-only. - - READ-WRITE The mailbox is selected read-write, or its access - while selected has changed from read-only to - read-write. - - - - - - - -Crispin Standards Track [Page 50] - -RFC 2060 IMAP4rev1 December 1996 - - - TRYCREATE An APPEND or COPY attempt is failing because the - target mailbox does not exist (as opposed to some - other reason). This is a hint to the client that - the operation can succeed if the mailbox is first - created by the CREATE command. - - UIDVALIDITY Followed by a decimal number, indicates the unique - identifier validity value. - - UNSEEN Followed by a decimal number, indicates the number - of the first message without the \Seen flag set. - - Additional response codes defined by particular client or server - implementations SHOULD be prefixed with an "X" until they are - added to a revision of this protocol. Client implementations - SHOULD ignore response codes that they do not recognize. - -7.1.1. OK Response - - Contents: OPTIONAL response code - human-readable text - - The OK response indicates an information message from the server. - When tagged, it indicates successful completion of the associated - command. The human-readable text MAY be presented to the user as - an information message. The untagged form indicates an - information-only message; the nature of the information MAY be - indicated by a response code. - - The untagged form is also used as one of three possible greetings - at connection startup. It indicates that the connection is not - yet authenticated and that a LOGIN command is needed. - - Example: S: * OK IMAP4rev1 server ready - C: A001 LOGIN fred blurdybloop - S: * OK [ALERT] System shutdown in 10 minutes - S: A001 OK LOGIN Completed - -7.1.2. NO Response - - Contents: OPTIONAL response code - human-readable text - - The NO response indicates an operational error message from the - server. When tagged, it indicates unsuccessful completion of the - associated command. The untagged form indicates a warning; the - command can still complete successfully. The human-readable text - describes the condition. - - - -Crispin Standards Track [Page 51] - -RFC 2060 IMAP4rev1 December 1996 - - - Example: C: A222 COPY 1:2 owatagusiam - S: * NO Disk is 98% full, please delete unnecessary data - S: A222 OK COPY completed - C: A223 COPY 3:200 blurdybloop - S: * NO Disk is 98% full, please delete unnecessary data - S: * NO Disk is 99% full, please delete unnecessary data - S: A223 NO COPY failed: disk is full - -7.1.3. BAD Response - - Contents: OPTIONAL response code - human-readable text - - The BAD response indicates an error message from the server. When - tagged, it reports a protocol-level error in the client's command; - the tag indicates the command that caused the error. The untagged - form indicates a protocol-level error for which the associated - command can not be determined; it can also indicate an internal - server failure. The human-readable text describes the condition. - - Example: C: ...very long command line... - S: * BAD Command line too long - C: ...empty line... - S: * BAD Empty command line - C: A443 EXPUNGE - S: * BAD Disk crash, attempting salvage to a new disk! - S: * OK Salvage successful, no data lost - S: A443 OK Expunge completed - -7.1.4. PREAUTH Response - - Contents: OPTIONAL response code - human-readable text - - The PREAUTH response is always untagged, and is one of three - possible greetings at connection startup. It indicates that the - connection has already been authenticated by external means and - thus no LOGIN command is needed. - - Example: S: * PREAUTH IMAP4rev1 server logged in as Smith - -7.1.5. BYE Response - - Contents: OPTIONAL response code - human-readable text - - - - - - -Crispin Standards Track [Page 52] - -RFC 2060 IMAP4rev1 December 1996 - - - The BYE response is always untagged, and indicates that the server - is about to close the connection. The human-readable text MAY be - displayed to the user in a status report by the client. The BYE - response is sent under one of four conditions: - - 1) as part of a normal logout sequence. The server will close - the connection after sending the tagged OK response to the - LOGOUT command. - - 2) as a panic shutdown announcement. The server closes the - connection immediately. - - 3) as an announcement of an inactivity autologout. The server - closes the connection immediately. - - 4) as one of three possible greetings at connection startup, - indicating that the server is not willing to accept a - connection from this client. The server closes the - connection immediately. - - The difference between a BYE that occurs as part of a normal - LOGOUT sequence (the first case) and a BYE that occurs because of - a failure (the other three cases) is that the connection closes - immediately in the failure case. - - Example: S: * BYE Autologout; idle for too long - -7.2. Server Responses - Server and Mailbox Status - - These responses are always untagged. This is how server and mailbox - status data are transmitted from the server to the client. Many of - these responses typically result from a command with the same name. - -7.2.1. CAPABILITY Response - - Contents: capability listing - - The CAPABILITY response occurs as a result of a CAPABILITY - command. The capability listing contains a space-separated - listing of capability names that the server supports. The - capability listing MUST include the atom "IMAP4rev1". - - A capability name which begins with "AUTH=" indicates that the - server supports that particular authentication mechanism. - - - - - - - -Crispin Standards Track [Page 53] - -RFC 2060 IMAP4rev1 December 1996 - - - Other capability names indicate that the server supports an - extension, revision, or amendment to the IMAP4rev1 protocol. - Server responses MUST conform to this document until the client - issues a command that uses the associated capability. - - Capability names MUST either begin with "X" or be standard or - standards-track IMAP4rev1 extensions, revisions, or amendments - registered with IANA. A server MUST NOT offer unregistered or - non-standard capability names, unless such names are prefixed with - an "X". - - Client implementations SHOULD NOT require any capability name - other than "IMAP4rev1", and MUST ignore any unknown capability - names. - - Example: S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN - -7.2.2. LIST Response - - Contents: name attributes - hierarchy delimiter - name - - The LIST response occurs as a result of a LIST command. It - returns a single name that matches the LIST specification. There - can be multiple LIST responses for a single LIST command. - - Four name attributes are defined: - - \Noinferiors It is not possible for any child levels of - hierarchy to exist under this name; no child levels - exist now and none can be created in the future. - - \Noselect It is not possible to use this name as a selectable - mailbox. - - \Marked The mailbox has been marked "interesting" by the - server; the mailbox probably contains messages that - have been added since the last time the mailbox was - selected. - - \Unmarked The mailbox does not contain any additional - messages since the last time the mailbox was - selected. - - If it is not feasible for the server to determine whether the - mailbox is "interesting" or not, or if the name is a \Noselect - name, the server SHOULD NOT send either \Marked or \Unmarked. - - - -Crispin Standards Track [Page 54] - -RFC 2060 IMAP4rev1 December 1996 - - - The hierarchy delimiter is a character used to delimit levels of - hierarchy in a mailbox name. A client can use it to create child - mailboxes, and to search higher or lower levels of naming - hierarchy. All children of a top-level hierarchy node MUST use - the same separator character. A NIL hierarchy delimiter means - that no hierarchy exists; the name is a "flat" name. - - The name represents an unambiguous left-to-right hierarchy, and - MUST be valid for use as a reference in LIST and LSUB commands. - Unless \Noselect is indicated, the name MUST also be valid as an - argument for commands, such as SELECT, that accept mailbox - names. - - Example: S: * LIST (\Noselect) "/" ~/Mail/foo - -7.2.3. LSUB Response - - Contents: name attributes - hierarchy delimiter - name - - The LSUB response occurs as a result of an LSUB command. It - returns a single name that matches the LSUB specification. There - can be multiple LSUB responses for a single LSUB command. The - data is identical in format to the LIST response. - - Example: S: * LSUB () "." #news.comp.mail.misc - -7.2.4 STATUS Response - - Contents: name - status parenthesized list - - The STATUS response occurs as a result of an STATUS command. It - returns the mailbox name that matches the STATUS specification and - the requested mailbox status information. - - Example: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) - -7.2.5. SEARCH Response - - Contents: zero or more numbers - - - - - - - - - -Crispin Standards Track [Page 55] - -RFC 2060 IMAP4rev1 December 1996 - - - The SEARCH response occurs as a result of a SEARCH or UID SEARCH - command. The number(s) refer to those messages that match the - search criteria. For SEARCH, these are message sequence numbers; - for UID SEARCH, these are unique identifiers. Each number is - delimited by a space. - - Example: S: * SEARCH 2 3 6 - -7.2.6. FLAGS Response - - Contents: flag parenthesized list - - The FLAGS response occurs as a result of a SELECT or EXAMINE - command. The flag parenthesized list identifies the flags (at a - minimum, the system-defined flags) that are applicable for this - mailbox. Flags other than the system flags can also exist, - depending on server implementation. - - The update from the FLAGS response MUST be recorded by the client. - - Example: S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) - -7.3. Server Responses - Mailbox Size - - These responses are always untagged. This is how changes in the size - of the mailbox are trasnmitted from the server to the client. - Immediately following the "*" token is a number that represents a - message count. - -7.3.1. EXISTS Response - - Contents: none - - The EXISTS response reports the number of messages in the mailbox. - This response occurs as a result of a SELECT or EXAMINE command, - and if the size of the mailbox changes (e.g. new mail). - - The update from the EXISTS response MUST be recorded by the - client. - - Example: S: * 23 EXISTS - - - - - - - - - - -Crispin Standards Track [Page 56] - -RFC 2060 IMAP4rev1 December 1996 - - -7.3.2. RECENT Response - - Contents: none - - The RECENT response reports the number of messages with the - \Recent flag set. This response occurs as a result of a SELECT or - EXAMINE command, and if the size of the mailbox changes (e.g. new - mail). - - Note: It is not guaranteed that the message sequence numbers of - recent messages will be a contiguous range of the highest n - messages in the mailbox (where n is the value reported by the - RECENT response). Examples of situations in which this is not - the case are: multiple clients having the same mailbox open - (the first session to be notified will see it as recent, others - will probably see it as non-recent), and when the mailbox is - re-ordered by a non-IMAP agent. - - The only reliable way to identify recent messages is to look at - message flags to see which have the \Recent flag set, or to do - a SEARCH RECENT. - - The update from the RECENT response MUST be recorded by the - client. - - Example: S: * 5 RECENT - -7.4. Server Responses - Message Status - - These responses are always untagged. This is how message data are - transmitted from the server to the client, often as a result of a - command with the same name. Immediately following the "*" token is a - number that represents a message sequence number. - -7.4.1. EXPUNGE Response - - Contents: none - - The EXPUNGE response reports that the specified message sequence - number has been permanently removed from the mailbox. The message - sequence number for each successive message in the mailbox is - immediately decremented by 1, and this decrement is reflected in - message sequence numbers in subsequent responses (including other - untagged EXPUNGE responses). - - As a result of the immediate decrement rule, message sequence - numbers that appear in a set of successive EXPUNGE responses - depend upon whether the messages are removed starting from lower - - - -Crispin Standards Track [Page 57] - -RFC 2060 IMAP4rev1 December 1996 - - - numbers to higher numbers, or from higher numbers to lower - numbers. For example, if the last 5 messages in a 9-message - mailbox are expunged; a "lower to higher" server will send five - untagged EXPUNGE responses for message sequence number 5, whereas - a "higher to lower server" will send successive untagged EXPUNGE - responses for message sequence numbers 9, 8, 7, 6, and 5. - - An EXPUNGE response MUST NOT be sent when no command is in - progress; nor while responding to a FETCH, STORE, or SEARCH - command. This rule is necessary to prevent a loss of - synchronization of message sequence numbers between client and - server. - - The update from the EXPUNGE response MUST be recorded by the - client. - - Example: S: * 44 EXPUNGE - -7.4.2. FETCH Response - - Contents: message data - - The FETCH response returns data about a message to the client. - The data are pairs of data item names and their values in - parentheses. This response occurs as the result of a FETCH or - STORE command, as well as by unilateral server decision (e.g. flag - updates). - - The current data items are: - - BODY A form of BODYSTRUCTURE without extension data. - - BODY[<section>]<<origin_octet>> - A string expressing the body contents of the - specified section. The string SHOULD be - interpreted by the client according to the content - transfer encoding, body type, and subtype. - - If the origin octet is specified, this string is a - substring of the entire body contents, starting at - that origin octet. This means that BODY[]<0> MAY - be truncated, but BODY[] is NEVER truncated. - - 8-bit textual data is permitted if a [CHARSET] - identifier is part of the body parameter - parenthesized list for this section. Note that - headers (part specifiers HEADER or MIME, or the - header portion of a MESSAGE/RFC822 part), MUST be - - - -Crispin Standards Track [Page 58] - -RFC 2060 IMAP4rev1 December 1996 - - - 7-bit; 8-bit characters are not permitted in - headers. Note also that the blank line at the end - of the header is always included in header data. - - Non-textual data such as binary data MUST be - transfer encoded into a textual form such as BASE64 - prior to being sent to the client. To derive the - original binary data, the client MUST decode the - transfer encoded string. - - BODYSTRUCTURE A parenthesized list that describes the [MIME-IMB] - body structure of a message. This is computed by - the server by parsing the [MIME-IMB] header fields, - defaulting various fields as necessary. - - For example, a simple text message of 48 lines and - 2279 octets can have a body structure of: ("TEXT" - "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 2279 - 48) - - Multiple parts are indicated by parenthesis - nesting. Instead of a body type as the first - element of the parenthesized list there is a nested - body. The second element of the parenthesized list - is the multipart subtype (mixed, digest, parallel, - alternative, etc.). - - For example, a two part message consisting of a - text and a BASE645-encoded text attachment can have - a body structure of: (("TEXT" "PLAIN" ("CHARSET" - "US-ASCII") NIL NIL "7BIT" 1152 23)("TEXT" "PLAIN" - ("CHARSET" "US-ASCII" "NAME" "cc.diff") - "<960723163407.20117h@cac.washington.edu>" - "Compiler diff" "BASE64" 4554 73) "MIXED")) - - Extension data follows the multipart subtype. - Extension data is never returned with the BODY - fetch, but can be returned with a BODYSTRUCTURE - fetch. Extension data, if present, MUST be in the - defined order. - - The extension data of a multipart body part are in - the following order: - - body parameter parenthesized list - A parenthesized list of attribute/value pairs - [e.g. ("foo" "bar" "baz" "rag") where "bar" is - the value of "foo" and "rag" is the value of - - - -Crispin Standards Track [Page 59] - -RFC 2060 IMAP4rev1 December 1996 - - - "baz"] as defined in [MIME-IMB]. - - body disposition - A parenthesized list, consisting of a - disposition type string followed by a - parenthesized list of disposition - attribute/value pairs. The disposition type and - attribute names will be defined in a future - standards-track revision to [DISPOSITION]. - - body language - A string or parenthesized list giving the body - language value as defined in [LANGUAGE-TAGS]. - - Any following extension data are not yet defined in - this version of the protocol. Such extension data - can consist of zero or more NILs, strings, numbers, - or potentially nested parenthesized lists of such - data. Client implementations that do a - BODYSTRUCTURE fetch MUST be prepared to accept such - extension data. Server implementations MUST NOT - send such extension data until it has been defined - by a revision of this protocol. - - The basic fields of a non-multipart body part are - in the following order: - - body type - A string giving the content media type name as - defined in [MIME-IMB]. - - body subtype - A string giving the content subtype name as - defined in [MIME-IMB]. - - body parameter parenthesized list - A parenthesized list of attribute/value pairs - [e.g. ("foo" "bar" "baz" "rag") where "bar" is - the value of "foo" and "rag" is the value of - "baz"] as defined in [MIME-IMB]. - - body id - A string giving the content id as defined in - [MIME-IMB]. - - body description - A string giving the content description as - defined in [MIME-IMB]. - - - -Crispin Standards Track [Page 60] - -RFC 2060 IMAP4rev1 December 1996 - - - body encoding - A string giving the content transfer encoding as - defined in [MIME-IMB]. - - body size - A number giving the size of the body in octets. - Note that this size is the size in its transfer - encoding and not the resulting size after any - decoding. - - A body type of type MESSAGE and subtype RFC822 - contains, immediately after the basic fields, the - envelope structure, body structure, and size in - text lines of the encapsulated message. - - A body type of type TEXT contains, immediately - after the basic fields, the size of the body in - text lines. Note that this size is the size in its - content transfer encoding and not the resulting - size after any decoding. - - Extension data follows the basic fields and the - type-specific fields listed above. Extension data - is never returned with the BODY fetch, but can be - returned with a BODYSTRUCTURE fetch. Extension - data, if present, MUST be in the defined order. - - The extension data of a non-multipart body part are - in the following order: - - body MD5 - A string giving the body MD5 value as defined in - [MD5]. - - body disposition - A parenthesized list with the same content and - function as the body disposition for a multipart - body part. - - body language - A string or parenthesized list giving the body - language value as defined in [LANGUAGE-TAGS]. - - Any following extension data are not yet defined in - this version of the protocol, and would be as - described above under multipart extension data. - - - - - -Crispin Standards Track [Page 61] - -RFC 2060 IMAP4rev1 December 1996 - - - ENVELOPE A parenthesized list that describes the envelope - structure of a message. This is computed by the - server by parsing the [RFC-822] header into the - component parts, defaulting various fields as - necessary. - - The fields of the envelope structure are in the - following order: date, subject, from, sender, - reply-to, to, cc, bcc, in-reply-to, and message-id. - The date, subject, in-reply-to, and message-id - fields are strings. The from, sender, reply-to, - to, cc, and bcc fields are parenthesized lists of - address structures. - - An address structure is a parenthesized list that - describes an electronic mail address. The fields - of an address structure are in the following order: - personal name, [SMTP] at-domain-list (source - route), mailbox name, and host name. - - [RFC-822] group syntax is indicated by a special - form of address structure in which the host name - field is NIL. If the mailbox name field is also - NIL, this is an end of group marker (semi-colon in - RFC 822 syntax). If the mailbox name field is - non-NIL, this is a start of group marker, and the - mailbox name field holds the group name phrase. - - Any field of an envelope or address structure that - is not applicable is presented as NIL. Note that - the server MUST default the reply-to and sender - fields from the from field; a client is not - expected to know to do this. - - FLAGS A parenthesized list of flags that are set for this - message. - - INTERNALDATE A string representing the internal date of the - message. - - RFC822 Equivalent to BODY[]. - - RFC822.HEADER Equivalent to BODY.PEEK[HEADER]. - - RFC822.SIZE A number expressing the [RFC-822] size of the - message. - - RFC822.TEXT Equivalent to BODY[TEXT]. - - - -Crispin Standards Track [Page 62] - -RFC 2060 IMAP4rev1 December 1996 - - - UID A number expressing the unique identifier of the - message. - - - Example: S: * 23 FETCH (FLAGS (\Seen) RFC822.SIZE 44827) - -7.5. Server Responses - Command Continuation Request - - The command continuation request response is indicated by a "+" token - instead of a tag. This form of response indicates that the server is - ready to accept the continuation of a command from the client. The - remainder of this response is a line of text. - - This response is used in the AUTHORIZATION command to transmit server - data to the client, and request additional client data. This - response is also used if an argument to any command is a literal. - - The client is not permitted to send the octets of the literal unless - the server indicates that it expects it. This permits the server to - process commands and reject errors on a line-by-line basis. The - remainder of the command, including the CRLF that terminates a - command, follows the octets of the literal. If there are any - additional command arguments the literal octets are followed by a - space and those arguments. - - Example: C: A001 LOGIN {11} - S: + Ready for additional command text - C: FRED FOOBAR {7} - S: + Ready for additional command text - C: fat man - S: A001 OK LOGIN completed - C: A044 BLURDYBLOOP {102856} - S: A044 BAD No such command as "BLURDYBLOOP" - -8. Sample IMAP4rev1 connection - - The following is a transcript of an IMAP4rev1 connection. A long - line in this sample is broken for editorial clarity. - -S: * OK IMAP4rev1 Service Ready -C: a001 login mrc secret -S: a001 OK LOGIN completed -C: a002 select inbox -S: * 18 EXISTS -S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) -S: * 2 RECENT -S: * OK [UNSEEN 17] Message 17 is the first unseen message -S: * OK [UIDVALIDITY 3857529045] UIDs valid - - - -Crispin Standards Track [Page 63] - -RFC 2060 IMAP4rev1 December 1996 - - -S: a002 OK [READ-WRITE] SELECT completed -C: a003 fetch 12 full -S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700" - RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)" - "IMAP4rev1 WG mtg summary and minutes" - (("Terry Gray" NIL "gray" "cac.washington.edu")) - (("Terry Gray" NIL "gray" "cac.washington.edu")) - (("Terry Gray" NIL "gray" "cac.washington.edu")) - ((NIL NIL "imap" "cac.washington.edu")) - ((NIL NIL "minutes" "CNRI.Reston.VA.US") - ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL - "<B27397-0100000@cac.washington.edu>") - BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92)) -S: a003 OK FETCH completed -C: a004 fetch 12 body[header] -S: * 12 FETCH (BODY[HEADER] {350} -S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT) -S: From: Terry Gray <gray@cac.washington.edu> -S: Subject: IMAP4rev1 WG mtg summary and minutes -S: To: imap@cac.washington.edu -S: cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@INFOODS.MIT.EDU> -S: Message-Id: <B27397-0100000@cac.washington.edu> -S: MIME-Version: 1.0 -S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII -S: -S: ) -S: a004 OK FETCH completed -C: a005 store 12 +flags \deleted -S: * 12 FETCH (FLAGS (\Seen \Deleted)) -S: a005 OK +FLAGS completed -C: a006 logout -S: * BYE IMAP4rev1 server terminating connection -S: a006 OK LOGOUT completed - -9. Formal Syntax - - The following syntax specification uses the augmented Backus-Naur - Form (BNF) notation as specified in [RFC-822] with one exception; the - delimiter used with the "#" construct is a single space (SPACE) and - not one or more commas. - - In the case of alternative or optional rules in which a later rule - overlaps an earlier rule, the rule which is listed earlier MUST take - priority. For example, "\Seen" when parsed as a flag is the \Seen - flag name and not a flag_extension, even though "\Seen" could be - parsed as a flag_extension. Some, but not all, instances of this - rule are noted below. - - - - -Crispin Standards Track [Page 64] - -RFC 2060 IMAP4rev1 December 1996 - - - Except as noted otherwise, all alphabetic characters are case- - insensitive. The use of upper or lower case characters to define - token strings is for editorial clarity only. Implementations MUST - accept these strings in a case-insensitive fashion. - -address ::= "(" addr_name SPACE addr_adl SPACE addr_mailbox - SPACE addr_host ")" - -addr_adl ::= nstring - ;; Holds route from [RFC-822] route-addr if - ;; non-NIL - -addr_host ::= nstring - ;; NIL indicates [RFC-822] group syntax. - ;; Otherwise, holds [RFC-822] domain name - -addr_mailbox ::= nstring - ;; NIL indicates end of [RFC-822] group; if - ;; non-NIL and addr_host is NIL, holds - ;; [RFC-822] group name. - ;; Otherwise, holds [RFC-822] local-part - -addr_name ::= nstring - ;; Holds phrase from [RFC-822] mailbox if - ;; non-NIL - -alpha ::= "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" / - "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" - ;; Case-sensitive - -append ::= "APPEND" SPACE mailbox [SPACE flag_list] - [SPACE date_time] SPACE literal - -astring ::= atom / string - -atom ::= 1*ATOM_CHAR - -ATOM_CHAR ::= <any CHAR except atom_specials> - -atom_specials ::= "(" / ")" / "{" / SPACE / CTL / list_wildcards / - quoted_specials - - - - -Crispin Standards Track [Page 65] - -RFC 2060 IMAP4rev1 December 1996 - - -authenticate ::= "AUTHENTICATE" SPACE auth_type *(CRLF base64) - -auth_type ::= atom - ;; Defined by [IMAP-AUTH] - -base64 ::= *(4base64_char) [base64_terminal] - -base64_char ::= alpha / digit / "+" / "/" - -base64_terminal ::= (2base64_char "==") / (3base64_char "=") - -body ::= "(" body_type_1part / body_type_mpart ")" - -body_extension ::= nstring / number / "(" 1#body_extension ")" - ;; Future expansion. Client implementations - ;; MUST accept body_extension fields. Server - ;; implementations MUST NOT generate - ;; body_extension fields except as defined by - ;; future standard or standards-track - ;; revisions of this specification. - -body_ext_1part ::= body_fld_md5 [SPACE body_fld_dsp - [SPACE body_fld_lang - [SPACE 1#body_extension]]] - ;; MUST NOT be returned on non-extensible - ;; "BODY" fetch - -body_ext_mpart ::= body_fld_param - [SPACE body_fld_dsp SPACE body_fld_lang - [SPACE 1#body_extension]] - ;; MUST NOT be returned on non-extensible - ;; "BODY" fetch - -body_fields ::= body_fld_param SPACE body_fld_id SPACE - body_fld_desc SPACE body_fld_enc SPACE - body_fld_octets - -body_fld_desc ::= nstring - -body_fld_dsp ::= "(" string SPACE body_fld_param ")" / nil - -body_fld_enc ::= (<"> ("7BIT" / "8BIT" / "BINARY" / "BASE64"/ - "QUOTED-PRINTABLE") <">) / string - -body_fld_id ::= nstring - -body_fld_lang ::= nstring / "(" 1#string ")" - - - - -Crispin Standards Track [Page 66] - -RFC 2060 IMAP4rev1 December 1996 - - -body_fld_lines ::= number - -body_fld_md5 ::= nstring - -body_fld_octets ::= number - -body_fld_param ::= "(" 1#(string SPACE string) ")" / nil - -body_type_1part ::= (body_type_basic / body_type_msg / body_type_text) - [SPACE body_ext_1part] - -body_type_basic ::= media_basic SPACE body_fields - ;; MESSAGE subtype MUST NOT be "RFC822" - -body_type_mpart ::= 1*body SPACE media_subtype - [SPACE body_ext_mpart] - -body_type_msg ::= media_message SPACE body_fields SPACE envelope - SPACE body SPACE body_fld_lines - -body_type_text ::= media_text SPACE body_fields SPACE body_fld_lines - -capability ::= "AUTH=" auth_type / atom - ;; New capabilities MUST begin with "X" or be - ;; registered with IANA as standard or - ;; standards-track - -capability_data ::= "CAPABILITY" SPACE [1#capability SPACE] "IMAP4rev1" - [SPACE 1#capability] - ;; IMAP4rev1 servers which offer RFC 1730 - ;; compatibility MUST list "IMAP4" as the first - ;; capability. - -CHAR ::= <any 7-bit US-ASCII character except NUL, - 0x01 - 0x7f> - -CHAR8 ::= <any 8-bit octet except NUL, 0x01 - 0xff> - -command ::= tag SPACE (command_any / command_auth / - command_nonauth / command_select) CRLF - ;; Modal based on state - -command_any ::= "CAPABILITY" / "LOGOUT" / "NOOP" / x_command - ;; Valid in all states - -command_auth ::= append / create / delete / examine / list / lsub / - rename / select / status / subscribe / unsubscribe - ;; Valid only in Authenticated or Selected state - - - -Crispin Standards Track [Page 67] - -RFC 2060 IMAP4rev1 December 1996 - - -command_nonauth ::= login / authenticate - ;; Valid only when in Non-Authenticated state - -command_select ::= "CHECK" / "CLOSE" / "EXPUNGE" / - copy / fetch / store / uid / search - ;; Valid only when in Selected state - -continue_req ::= "+" SPACE (resp_text / base64) - -copy ::= "COPY" SPACE set SPACE mailbox - -CR ::= <ASCII CR, carriage return, 0x0D> - -create ::= "CREATE" SPACE mailbox - ;; Use of INBOX gives a NO error - -CRLF ::= CR LF - -CTL ::= <any ASCII control character and DEL, - 0x00 - 0x1f, 0x7f> - -date ::= date_text / <"> date_text <"> - -date_day ::= 1*2digit - ;; Day of month - -date_day_fixed ::= (SPACE digit) / 2digit - ;; Fixed-format version of date_day - -date_month ::= "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / - "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" - -date_text ::= date_day "-" date_month "-" date_year - -date_year ::= 4digit - -date_time ::= <"> date_day_fixed "-" date_month "-" date_year - SPACE time SPACE zone <"> - -delete ::= "DELETE" SPACE mailbox - ;; Use of INBOX gives a NO error - -digit ::= "0" / digit_nz - -digit_nz ::= "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / - "9" - - - - - -Crispin Standards Track [Page 68] - -RFC 2060 IMAP4rev1 December 1996 - - -envelope ::= "(" env_date SPACE env_subject SPACE env_from - SPACE env_sender SPACE env_reply_to SPACE env_to - SPACE env_cc SPACE env_bcc SPACE env_in_reply_to - SPACE env_message_id ")" - -env_bcc ::= "(" 1*address ")" / nil - -env_cc ::= "(" 1*address ")" / nil - -env_date ::= nstring - -env_from ::= "(" 1*address ")" / nil - -env_in_reply_to ::= nstring - -env_message_id ::= nstring - -env_reply_to ::= "(" 1*address ")" / nil - -env_sender ::= "(" 1*address ")" / nil - -env_subject ::= nstring - -env_to ::= "(" 1*address ")" / nil - -examine ::= "EXAMINE" SPACE mailbox - -fetch ::= "FETCH" SPACE set SPACE ("ALL" / "FULL" / - "FAST" / fetch_att / "(" 1#fetch_att ")") - -fetch_att ::= "ENVELOPE" / "FLAGS" / "INTERNALDATE" / - "RFC822" [".HEADER" / ".SIZE" / ".TEXT"] / - "BODY" ["STRUCTURE"] / "UID" / - "BODY" [".PEEK"] section - ["<" number "." nz_number ">"] - -flag ::= "\Answered" / "\Flagged" / "\Deleted" / - "\Seen" / "\Draft" / flag_keyword / flag_extension - -flag_extension ::= "\" atom - ;; Future expansion. Client implementations - ;; MUST accept flag_extension flags. Server - ;; implementations MUST NOT generate - ;; flag_extension flags except as defined by - ;; future standard or standards-track - ;; revisions of this specification. - -flag_keyword ::= atom - - - -Crispin Standards Track [Page 69] - -RFC 2060 IMAP4rev1 December 1996 - - -flag_list ::= "(" #flag ")" - -greeting ::= "*" SPACE (resp_cond_auth / resp_cond_bye) CRLF - -header_fld_name ::= astring - -header_list ::= "(" 1#header_fld_name ")" - -LF ::= <ASCII LF, line feed, 0x0A> - -list ::= "LIST" SPACE mailbox SPACE list_mailbox - -list_mailbox ::= 1*(ATOM_CHAR / list_wildcards) / string - -list_wildcards ::= "%" / "*" - -literal ::= "{" number "}" CRLF *CHAR8 - ;; Number represents the number of CHAR8 octets - -login ::= "LOGIN" SPACE userid SPACE password - -lsub ::= "LSUB" SPACE mailbox SPACE list_mailbox - -mailbox ::= "INBOX" / astring - ;; INBOX is case-insensitive. All case variants of - ;; INBOX (e.g. "iNbOx") MUST be interpreted as INBOX - ;; not as an astring. Refer to section 5.1 for - ;; further semantic details of mailbox names. - -mailbox_data ::= "FLAGS" SPACE flag_list / - "LIST" SPACE mailbox_list / - "LSUB" SPACE mailbox_list / - "MAILBOX" SPACE text / - "SEARCH" [SPACE 1#nz_number] / - "STATUS" SPACE mailbox SPACE - "(" #<status_att number ")" / - number SPACE "EXISTS" / number SPACE "RECENT" - -mailbox_list ::= "(" #("\Marked" / "\Noinferiors" / - "\Noselect" / "\Unmarked" / flag_extension) ")" - SPACE (<"> QUOTED_CHAR <"> / nil) SPACE mailbox - -media_basic ::= (<"> ("APPLICATION" / "AUDIO" / "IMAGE" / - "MESSAGE" / "VIDEO") <">) / string) - SPACE media_subtype - ;; Defined in [MIME-IMT] - -media_message ::= <"> "MESSAGE" <"> SPACE <"> "RFC822" <"> - - - -Crispin Standards Track [Page 70] - -RFC 2060 IMAP4rev1 December 1996 - - - ;; Defined in [MIME-IMT] - -media_subtype ::= string - ;; Defined in [MIME-IMT] - -media_text ::= <"> "TEXT" <"> SPACE media_subtype - ;; Defined in [MIME-IMT] - -message_data ::= nz_number SPACE ("EXPUNGE" / - ("FETCH" SPACE msg_att)) - -msg_att ::= "(" 1#("ENVELOPE" SPACE envelope / - "FLAGS" SPACE "(" #(flag / "\Recent") ")" / - "INTERNALDATE" SPACE date_time / - "RFC822" [".HEADER" / ".TEXT"] SPACE nstring / - "RFC822.SIZE" SPACE number / - "BODY" ["STRUCTURE"] SPACE body / - "BODY" section ["<" number ">"] SPACE nstring / - "UID" SPACE uniqueid) ")" - -nil ::= "NIL" - -nstring ::= string / nil - -number ::= 1*digit - ;; Unsigned 32-bit integer - ;; (0 <= n < 4,294,967,296) - -nz_number ::= digit_nz *digit - ;; Non-zero unsigned 32-bit integer - ;; (0 < n < 4,294,967,296) - -password ::= astring - -quoted ::= <"> *QUOTED_CHAR <"> - -QUOTED_CHAR ::= <any TEXT_CHAR except quoted_specials> / - "\" quoted_specials - -quoted_specials ::= <"> / "\" - -rename ::= "RENAME" SPACE mailbox SPACE mailbox - ;; Use of INBOX as a destination gives a NO error - -response ::= *(continue_req / response_data) response_done - -response_data ::= "*" SPACE (resp_cond_state / resp_cond_bye / - mailbox_data / message_data / capability_data) - - - -Crispin Standards Track [Page 71] - -RFC 2060 IMAP4rev1 December 1996 - - - CRLF - -response_done ::= response_tagged / response_fatal - -response_fatal ::= "*" SPACE resp_cond_bye CRLF - ;; Server closes connection immediately - -response_tagged ::= tag SPACE resp_cond_state CRLF - -resp_cond_auth ::= ("OK" / "PREAUTH") SPACE resp_text - ;; Authentication condition - -resp_cond_bye ::= "BYE" SPACE resp_text - -resp_cond_state ::= ("OK" / "NO" / "BAD") SPACE resp_text - ;; Status condition - -resp_text ::= ["[" resp_text_code "]" SPACE] (text_mime2 / text) - ;; text SHOULD NOT begin with "[" or "=" - -resp_text_code ::= "ALERT" / "PARSE" / - "PERMANENTFLAGS" SPACE "(" #(flag / "\*") ")" / - "READ-ONLY" / "READ-WRITE" / "TRYCREATE" / - "UIDVALIDITY" SPACE nz_number / - "UNSEEN" SPACE nz_number / - atom [SPACE 1*<any TEXT_CHAR except "]">] - -search ::= "SEARCH" SPACE ["CHARSET" SPACE astring SPACE] - 1#search_key - ;; [CHARSET] MUST be registered with IANA - -search_key ::= "ALL" / "ANSWERED" / "BCC" SPACE astring / - "BEFORE" SPACE date / "BODY" SPACE astring / - "CC" SPACE astring / "DELETED" / "FLAGGED" / - "FROM" SPACE astring / - "KEYWORD" SPACE flag_keyword / "NEW" / "OLD" / - "ON" SPACE date / "RECENT" / "SEEN" / - "SINCE" SPACE date / "SUBJECT" SPACE astring / - "TEXT" SPACE astring / "TO" SPACE astring / - "UNANSWERED" / "UNDELETED" / "UNFLAGGED" / - "UNKEYWORD" SPACE flag_keyword / "UNSEEN" / - ;; Above this line were in [IMAP2] - "DRAFT" / - "HEADER" SPACE header_fld_name SPACE astring / - "LARGER" SPACE number / "NOT" SPACE search_key / - "OR" SPACE search_key SPACE search_key / - "SENTBEFORE" SPACE date / "SENTON" SPACE date / - "SENTSINCE" SPACE date / "SMALLER" SPACE number / - - - -Crispin Standards Track [Page 72] - -RFC 2060 IMAP4rev1 December 1996 - - - "UID" SPACE set / "UNDRAFT" / set / - "(" 1#search_key ")" - -section ::= "[" [section_text / (nz_number *["." nz_number] - ["." (section_text / "MIME")])] "]" - -section_text ::= "HEADER" / "HEADER.FIELDS" [".NOT"] - SPACE header_list / "TEXT" - -select ::= "SELECT" SPACE mailbox - -sequence_num ::= nz_number / "*" - ;; * is the largest number in use. For message - ;; sequence numbers, it is the number of messages - ;; in the mailbox. For unique identifiers, it is - ;; the unique identifier of the last message in - ;; the mailbox. - -set ::= sequence_num / (sequence_num ":" sequence_num) / - (set "," set) - ;; Identifies a set of messages. For message - ;; sequence numbers, these are consecutive - ;; numbers from 1 to the number of messages in - ;; the mailbox - ;; Comma delimits individual numbers, colon - ;; delimits between two numbers inclusive. - ;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13, - ;; 14,15 for a mailbox with 15 messages. - -SPACE ::= <ASCII SP, space, 0x20> - -status ::= "STATUS" SPACE mailbox SPACE "(" 1#status_att ")" - -status_att ::= "MESSAGES" / "RECENT" / "UIDNEXT" / "UIDVALIDITY" / - "UNSEEN" - -store ::= "STORE" SPACE set SPACE store_att_flags - -store_att_flags ::= (["+" / "-"] "FLAGS" [".SILENT"]) SPACE - (flag_list / #flag) - -string ::= quoted / literal - -subscribe ::= "SUBSCRIBE" SPACE mailbox - -tag ::= 1*<any ATOM_CHAR except "+"> - -text ::= 1*TEXT_CHAR - - - -Crispin Standards Track [Page 73] - -RFC 2060 IMAP4rev1 December 1996 - - -text_mime2 ::= "=?" <charset> "?" <encoding> "?" - <encoded-text> "?=" - ;; Syntax defined in [MIME-HDRS] - -TEXT_CHAR ::= <any CHAR except CR and LF> - -time ::= 2digit ":" 2digit ":" 2digit - ;; Hours minutes seconds - -uid ::= "UID" SPACE (copy / fetch / search / store) - ;; Unique identifiers used instead of message - ;; sequence numbers - -uniqueid ::= nz_number - ;; Strictly ascending - -unsubscribe ::= "UNSUBSCRIBE" SPACE mailbox - -userid ::= astring - -x_command ::= "X" atom <experimental command arguments> - -zone ::= ("+" / "-") 4digit - ;; Signed four-digit value of hhmm representing - ;; hours and minutes west of Greenwich (that is, - ;; (the amount that the given time differs from - ;; Universal Time). Subtracting the timezone - ;; from the given time will give the UT form. - ;; The Universal Time zone is "+0000". - -10. Author's Note - - This document is a revision or rewrite of earlier documents, and - supercedes the protocol specification in those documents: RFC 1730, - unpublished IMAP2bis.TXT document, RFC 1176, and RFC 1064. - -11. Security Considerations - - IMAP4rev1 protocol transactions, including electronic mail data, are - sent in the clear over the network unless privacy protection is - negotiated in the AUTHENTICATE command. - - A server error message for an AUTHENTICATE command which fails due to - invalid credentials SHOULD NOT detail why the credentials are - invalid. - - Use of the LOGIN command sends passwords in the clear. This can be - avoided by using the AUTHENTICATE command instead. - - - -Crispin Standards Track [Page 74] - -RFC 2060 IMAP4rev1 December 1996 - - - A server error message for a failing LOGIN command SHOULD NOT specify - that the user name, as opposed to the password, is invalid. - - Additional security considerations are discussed in the section - discussing the AUTHENTICATE and LOGIN commands. - -12. Author's Address - - Mark R. Crispin - Networks and Distributed Computing - University of Washington - 4545 15th Aveneue NE - Seattle, WA 98105-4527 - - Phone: (206) 543-5762 - - EMail: MRC@CAC.Washington.EDU - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Crispin Standards Track [Page 75] - -RFC 2060 IMAP4rev1 December 1996 - - -Appendices - -A. References - -[ACAP] Myers, J. "ACAP -- Application Configuration Access Protocol", -Work in Progress. - -[CHARSET] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, -RFC 1700, USC/Information Sciences Institute, October 1994. - -[DISPOSITION] Troost, R., and Dorner, S., "Communicating Presentation -Information in Internet Messages: The Content-Disposition Header", -RFC 1806, June 1995. - -[IMAP-AUTH] Myers, J., "IMAP4 Authentication Mechanism", RFC 1731. -Carnegie-Mellon University, December 1994. - -[IMAP-COMPAT] Crispin, M., "IMAP4 Compatibility with IMAP2bis", RFC -2061, University of Washington, November 1996. - -[IMAP-DISC] Austein, R., "Synchronization Operations for Disconnected -IMAP4 Clients", Work in Progress. - -[IMAP-HISTORICAL] Crispin, M. "IMAP4 Compatibility with IMAP2 and -IMAP2bis", RFC 1732, University of Washington, December 1994. - -[IMAP-MODEL] Crispin, M., "Distributed Electronic Mail Models in -IMAP4", RFC 1733, University of Washington, December 1994. - -[IMAP-OBSOLETE] Crispin, M., "Internet Message Access Protocol - -Obsolete Syntax", RFC 2062, University of Washington, November 1996. - -[IMAP2] Crispin, M., "Interactive Mail Access Protocol - Version 2", -RFC 1176, University of Washington, August 1990. - -[LANGUAGE-TAGS] Alvestrand, H., "Tags for the Identification of -Languages", RFC 1766, March 1995. - -[MD5] Myers, J., and M. Rose, "The Content-MD5 Header Field", RFC -1864, October 1995. - -[MIME-IMB] Freed, N., and N. Borenstein, "MIME (Multipurpose Internet -Mail Extensions) Part One: Format of Internet Message Bodies", RFC -2045, November 1996. - -[MIME-IMT] Freed, N., and N. Borenstein, "MIME (Multipurpose -Internet Mail Extensions) Part Two: Media Types", RFC 2046, -November 1996. - - - -Crispin Standards Track [Page 76] - -RFC 2060 IMAP4rev1 December 1996 - - -[MIME-HDRS] Moore, K., "MIME (Multipurpose Internet Mail Extensions) -Part Three: Message Header Extensions for Non-ASCII Text", RFC -2047, November 1996. - -[RFC-822] Crocker, D., "Standard for the Format of ARPA Internet Text -Messages", STD 11, RFC 822, University of Delaware, August 1982. - -[SMTP] Postel, J., "Simple Mail Transfer Protocol", STD 10, -RFC 821, USC/Information Sciences Institute, August 1982. - -[UTF-7] Goldsmith, D., and Davis, M., "UTF-7: A Mail-Safe -Transformation Format of Unicode", RFC 1642, July 1994. - -B. Changes from RFC 1730 - -1) The STATUS command has been added. - -2) Clarify in the formal syntax that the "#" construct can never -refer to multiple spaces. - -3) Obsolete syntax has been moved to a separate document. - -4) The PARTIAL command has been obsoleted. - -5) The RFC822.HEADER.LINES, RFC822.HEADER.LINES.NOT, RFC822.PEEK, and -RFC822.TEXT.PEEK fetch attributes have been obsoleted. - -6) The "<" origin "." size ">" suffix for BODY text attributes has -been added. - -7) The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and TEXT part -specifiers have been added. - -8) Support for Content-Disposition and Content-Language has been -added. - -9) The restriction on fetching nested MULTIPART parts has been -removed. - -10) Body part number 0 has been obsoleted. - -11) Server-supported authenticators are now identified by -capabilities. - - - - - - - - -Crispin Standards Track [Page 77] - -RFC 2060 IMAP4rev1 December 1996 - - -12) The capability that identifies this protocol is now called -"IMAP4rev1". A server that provides backwards support for RFC 1730 -SHOULD emit the "IMAP4" capability in addition to "IMAP4rev1" in its -CAPABILITY response. Because RFC-1730 required "IMAP4" to appear as -the first capability, it MUST listed first in the response. - -13) A description of the mailbox name namespace convention has been -added. - -14) A description of the international mailbox name convention has -been added. - -15) The UID-NEXT and UID-VALIDITY status items are now called UIDNEXT -and UIDVALIDITY. This is a change from the IMAP STATUS -Work in Progress and not from RFC-1730 - -16) Add a clarification that a null mailbox name argument to the LIST -command returns an untagged LIST response with the hierarchy -delimiter and root of the reference argument. - -17) Define terms such as "MUST", "SHOULD", and "MUST NOT". - -18) Add a section which defines message attributes and more -thoroughly details the semantics of message sequence numbers, UIDs, -and flags. - -19) Add a clarification detailing the circumstances when a client may -send multiple commands without waiting for a response, and the -circumstances in which ambiguities may result. - -20) Add a recommendation on server behavior for DELETE and RENAME -when inferior hierarchical names of the given name exist. - -21) Add a clarification that a mailbox name may not be unilaterally -unsubscribed by the server, even if that mailbox name no longer -exists. - -22) Add a clarification that LIST should return its results quickly -without undue delay. - -23) Add a clarification that the date_time argument to APPEND sets -the internal date of the message. - -24) Add a clarification on APPEND behavior when the target mailbox is -the currently selected mailbox. - - - - - - -Crispin Standards Track [Page 78] - -RFC 2060 IMAP4rev1 December 1996 - - -25) Add a clarification that external changes to flags should be -always announced via an untagged FETCH even if the current command is -a STORE with the ".SILENT" suffix. - -26) Add a clarification that COPY appends to the target mailbox. - -27) Add the NEWNAME response code. - -28) Rewrite the description of the untagged BYE response to clarify -its semantics. - -29) Change the reference for the body MD5 to refer to the proper RFC. - -30) Clarify that the formal syntax contains rules which may overlap, -and that in the event of such an overlap the rule which occurs first -takes precedence. - -31) Correct the definition of body_fld_param. - -32) More formal syntax for capability_data. - -33) Clarify that any case variant of "INBOX" must be interpreted as -INBOX. - -34) Clarify that the human-readable text in resp_text should not -begin with "[" or "=". - -35) Change MIME references to Draft Standard documents. - -36) Clarify \Recent semantics. - -37) Additional examples. - -C. Key Word Index - - +FLAGS <flag list> (store command data item) ............... 45 - +FLAGS.SILENT <flag list> (store command data item) ........ 46 - -FLAGS <flag list> (store command data item) ............... 46 - -FLAGS.SILENT <flag list> (store command data item) ........ 46 - ALERT (response code) ...................................... 50 - ALL (fetch item) ........................................... 41 - ALL (search key) ........................................... 38 - ANSWERED (search key) ...................................... 38 - APPEND (command) ........................................... 34 - AUTHENTICATE (command) ..................................... 20 - BAD (response) ............................................. 52 - BCC <string> (search key) .................................. 38 - BEFORE <date> (search key) ................................. 39 - - - -Crispin Standards Track [Page 79] - -RFC 2060 IMAP4rev1 December 1996 - - - BODY (fetch item) .......................................... 41 - BODY (fetch result) ........................................ 58 - BODY <string> (search key) ................................. 39 - BODY.PEEK[<section>]<<partial>> (fetch item) ............... 44 - BODYSTRUCTURE (fetch item) ................................. 44 - BODYSTRUCTURE (fetch result) ............................... 59 - BODY[<section>]<<origin_octet>> (fetch result) ............. 58 - BODY[<section>]<<partial>> (fetch item) .................... 41 - BYE (response) ............................................. 52 - Body Structure (message attribute) ......................... 11 - CAPABILITY (command) ....................................... 18 - CAPABILITY (response) ...................................... 53 - CC <string> (search key) ................................... 39 - CHECK (command) ............................................ 36 - CLOSE (command) ............................................ 36 - COPY (command) ............................................. 46 - CREATE (command) ........................................... 25 - DELETE (command) ........................................... 26 - DELETED (search key) ....................................... 39 - DRAFT (search key) ......................................... 39 - ENVELOPE (fetch item) ...................................... 44 - ENVELOPE (fetch result) .................................... 62 - EXAMINE (command) .......................................... 24 - EXISTS (response) .......................................... 56 - EXPUNGE (command) .......................................... 37 - EXPUNGE (response) ......................................... 57 - Envelope Structure (message attribute) ..................... 11 - FAST (fetch item) .......................................... 44 - FETCH (command) ............................................ 41 - FETCH (response) ........................................... 58 - FLAGGED (search key) ....................................... 39 - FLAGS (fetch item) ......................................... 44 - FLAGS (fetch result) ....................................... 62 - FLAGS (response) ........................................... 56 - FLAGS <flag list> (store command data item) ................ 45 - FLAGS.SILENT <flag list> (store command data item) ......... 45 - FROM <string> (search key) ................................. 39 - FULL (fetch item) .......................................... 44 - Flags (message attribute) .................................. 9 - HEADER (part specifier) .................................... 41 - HEADER <field-name> <string> (search key) .................. 39 - HEADER.FIELDS <header_list> (part specifier) ............... 41 - HEADER.FIELDS.NOT <header_list> (part specifier) ........... 41 - INTERNALDATE (fetch item) .................................. 44 - INTERNALDATE (fetch result) ................................ 62 - Internal Date (message attribute) .......................... 10 - KEYWORD <flag> (search key) ................................ 39 - Keyword (type of flag) ..................................... 10 - - - -Crispin Standards Track [Page 80] - -RFC 2060 IMAP4rev1 December 1996 - - - LARGER <n> (search key) .................................... 39 - LIST (command) ............................................. 30 - LIST (response) ............................................ 54 - LOGIN (command) ............................................ 22 - LOGOUT (command) ........................................... 20 - LSUB (command) ............................................. 32 - LSUB (response) ............................................ 55 - MAY (specification requirement term) ....................... 5 - MESSAGES (status item) ..................................... 33 - MIME (part specifier) ...................................... 42 - MUST (specification requirement term) ...................... 4 - MUST NOT (specification requirement term) .................. 4 - Message Sequence Number (message attribute) ................ 9 - NEW (search key) ........................................... 39 - NEWNAME (response code) .................................... 50 - NO (response) .............................................. 51 - NOOP (command) ............................................. 19 - NOT <search-key> (search key) .............................. 39 - OK (response) .............................................. 51 - OLD (search key) ........................................... 39 - ON <date> (search key) ..................................... 39 - OPTIONAL (specification requirement term) .................. 5 - OR <search-key1> <search-key2> (search key) ................ 39 - PARSE (response code) ...................................... 50 - PERMANENTFLAGS (response code) ............................. 50 - PREAUTH (response) ......................................... 52 - Permanent Flag (class of flag) ............................. 10 - READ-ONLY (response code) .................................. 50 - READ-WRITE (response code) ................................. 50 - RECENT (response) .......................................... 57 - RECENT (search key) ........................................ 39 - RECENT (status item) ....................................... 33 - RENAME (command) ........................................... 27 - REQUIRED (specification requirement term) .................. 4 - RFC822 (fetch item) ........................................ 44 - RFC822 (fetch result) ...................................... 63 - RFC822.HEADER (fetch item) ................................. 44 - RFC822.HEADER (fetch result) ............................... 62 - RFC822.SIZE (fetch item) ................................... 44 - RFC822.SIZE (fetch result) ................................. 62 - RFC822.TEXT (fetch item) ................................... 44 - RFC822.TEXT (fetch result) ................................. 62 - SEARCH (command) ........................................... 37 - SEARCH (response) .......................................... 55 - SEEN (search key) .......................................... 40 - SELECT (command) ........................................... 23 - SENTBEFORE <date> (search key) ............................. 40 - SENTON <date> (search key) ................................. 40 - - - -Crispin Standards Track [Page 81] - -RFC 2060 IMAP4rev1 December 1996 - - - SENTSINCE <date> (search key) .............................. 40 - SHOULD (specification requirement term) .................... 5 - SHOULD NOT (specification requirement term) ................ 5 - SINCE <date> (search key) .................................. 40 - SMALLER <n> (search key) ................................... 40 - STATUS (command) ........................................... 33 - STATUS (response) .......................................... 55 - STORE (command) ............................................ 45 - SUBJECT <string> (search key) .............................. 40 - SUBSCRIBE (command) ........................................ 29 - Session Flag (class of flag) ............................... 10 - System Flag (type of flag) ................................. 9 - TEXT (part specifier) ...................................... 42 - TEXT <string> (search key) ................................. 40 - TO <string> (search key) ................................... 40 - TRYCREATE (response code) .................................. 51 - UID (command) .............................................. 47 - UID (fetch item) ........................................... 44 - UID (fetch result) ......................................... 63 - UID <message set> (search key) ............................. 40 - UIDNEXT (status item) ...................................... 33 - UIDVALIDITY (response code) ................................ 51 - UIDVALIDITY (status item) .................................. 34 - UNANSWERED (search key) .................................... 40 - UNDELETED (search key) ..................................... 40 - UNDRAFT (search key) ....................................... 40 - UNFLAGGED (search key) ..................................... 40 - UNKEYWORD <flag> (search key) .............................. 40 - UNSEEN (response code) ..................................... 51 - UNSEEN (search key) ........................................ 40 - UNSEEN (status item) ....................................... 34 - UNSUBSCRIBE (command) ...................................... 30 - Unique Identifier (UID) (message attribute) ................ 7 - X<atom> (command) .......................................... 48 - [RFC-822] Size (message attribute) ......................... 11 - \Answered (system flag) .................................... 9 - \Deleted (system flag) ..................................... 9 - \Draft (system flag) ....................................... 9 - \Flagged (system flag) ..................................... 9 - \Marked (mailbox name attribute) ........................... 54 - \Noinferiors (mailbox name attribute) ...................... 54 - \Noselect (mailbox name attribute) ......................... 54 - \Recent (system flag) ...................................... 10 - \Seen (system flag) ........................................ 9 - \Unmarked (mailbox name attribute) ......................... 54 - - - - - - -Crispin Standards Track [Page 82] - diff --git a/doc/src/rfc2487.txt b/doc/src/rfc2487.txt deleted file mode 100644 index fb1305f00..000000000 --- a/doc/src/rfc2487.txt +++ /dev/null @@ -1,451 +0,0 @@ - - - - - - -Network Working Group P. Hoffman -Request for Comments: 2487 Internet Mail Consortium -Category: Standards Track January 1999 - - - SMTP Service Extension for Secure SMTP over TLS - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Copyright Notice - - Copyright (C) The Internet Society (1999). All Rights Reserved. - -1. Abstract - - This document describes an extension to the SMTP service that allows - an SMTP server and client to use transport-layer security to provide - private, authenticated communication over the Internet. This gives - SMTP agents the ability to protect some or all of their - communications from eavesdroppers and attackers. - -2. Introduction - - SMTP [RFC-821] servers and clients normally communicate in the clear - over the Internet. In many cases, this communication goes through one - or more router that is not controlled or trusted by either entity. - Such an untrusted router might allow a third party to monitor or - alter the communications between the server and client. - - Further, there is often a desire for two SMTP agents to be able to - authenticate each others' identities. For example, a secure SMTP - server might only allow communications from other SMTP agents it - knows, or it might act differently for messages received from an - agent it knows than from one it doesn't know. - - TLS [TLS], more commonly known as SSL, is a popular mechanism for - enhancing TCP communications with privacy and authentication. TLS is - in wide use with the HTTP protocol, and is also being used for adding - security to many other common protocols that run over TCP. - - - - - - -Hoffman Standards Track [Page 1] - -RFC 2487 SMTP Service Extension January 1999 - - -2.1 Terminology - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", - "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this - document are to be interpreted as described in [RFC-2119]. - -3. STARTTLS Extension - - The STARTTLS extension to SMTP is laid out as follows: - - (1) the name of the SMTP service defined here is STARTTLS; - - (2) the EHLO keyword value associated with the extension is STARTTLS; - - (3) the STARTTLS keyword has no parameters; - - (4) a new SMTP verb, "STARTTLS", is defined; - - (5) no additional parameters are added to any SMTP command. - -4. The STARTTLS Keyword - - The STARTTLS keyword is used to tell the SMTP client that the SMTP - server allows use of TLS. It takes no parameters. - -5. The STARTTLS Command - - The format for the STARTTLS command is: - - STARTTLS - - with no parameters. - - After the client gives the STARTTLS command, the server responds with - one of the following reply codes: - - 220 Ready to start TLS - 501 Syntax error (no parameters allowed) - 454 TLS not available due to temporary reason - - A publicly-referenced SMTP server MUST NOT require use of the - STARTTLS extension in order to deliver mail locally. This rule - prevents the STARTTLS extension from damaging the interoperability of - the Internet's SMTP infrastructure. A publicly-referenced SMTP server - is an SMTP server which runs on port 25 of an Internet host listed in - the MX record (or A record if an MX record is not present) for the - domain name on the right hand side of an Internet mail address. - - - - -Hoffman Standards Track [Page 2] - -RFC 2487 SMTP Service Extension January 1999 - - - Any SMTP server may refuse to accept messages for relay based on - authentication supplied during the TLS negotiation. An SMTP server - that is not publicly referenced may refuse to accept any messages for - relay or local delivery based on authentication supplied during the - TLS negotiation. - - A SMTP server that is not publicly referenced may choose to require - that the client perform a TLS negotiation before accepting any - commands. In this case, the server SHOULD return the reply code: - - 530 Must issue a STARTTLS command first - - to every command other than NOOP, EHLO, STARTTLS, or QUIT. If the - client and server are using the ENHANCEDSTATUSCODES ESMTP extension - [RFC-2034], the status code to be returned SHOULD be 5.7.0. - - After receiving a 220 response to a STARTTLS command, the client - SHOULD start the TLS negotiation before giving any other SMTP - commands. - - If the SMTP client is using pipelining as defined in RFC 1854, the - STARTTLS command must be the last command in a group. - -5.1 Processing After the STARTTLS Command - - After the TLS handshake has been completed, both parties MUST - immediately decide whether or not to continue based on the - authentication and privacy achieved. The SMTP client and server may - decide to move ahead even if the TLS negotiation ended with no - authentication and/or no privacy because most SMTP services are - performed with no authentication and no privacy, but some SMTP - clients or servers may want to continue only if a particular level of - authentication and/or privacy was achieved. - - If the SMTP client decides that the level of authentication or - privacy is not high enough for it to continue, it SHOULD issue an - SMTP QUIT command immediately after the TLS negotiation is complete. - If the SMTP server decides that the level of authentication or - privacy is not high enough for it to continue, it SHOULD reply to - every SMTP command from the client (other than a QUIT command) with - the 554 reply code (with a possible text string such as "Command - refused due to lack of security"). - - The decision of whether or not to believe the authenticity of the - other party in a TLS negotiation is a local matter. However, some - general rules for the decisions are: - - - - - -Hoffman Standards Track [Page 3] - -RFC 2487 SMTP Service Extension January 1999 - - - - A SMTP client would probably only want to authenticate an SMTP - server whose server certificate has a domain name that is the - domain name that the client thought it was connecting to. - - A publicly-referenced SMTP server would probably want to accept - any certificate from an SMTP client, and would possibly want to - put distinguishing information about the certificate in the - Received header of messages that were relayed or submitted from - the client. - -5.2 Result of the STARTTLS Command - - Upon completion of the TLS handshake, the SMTP protocol is reset to - the initial state (the state in SMTP after a server issues a 220 - service ready greeting). The server MUST discard any knowledge - obtained from the client, such as the argument to the EHLO command, - which was not obtained from the TLS negotiation itself. The client - MUST discard any knowledge obtained from the server, such as the list - of SMTP service extensions, which was not obtained from the TLS - negotiation itself. The client SHOULD send an EHLO command as the - first command after a successful TLS negotiation. - - The list of SMTP service extensions returned in response to an EHLO - command received after the TLS handshake MAY be different than the - list returned before the TLS handshake. For example, an SMTP server - might not want to advertise support for a particular SASL mechanism - [SASL] unless a client has sent an appropriate client certificate - during a TLS handshake. - - Both the client and the server MUST know if there is a TLS session - active. A client MUST NOT attempt to start a TLS session if a TLS - session is already active. A server MUST NOT return the TLS extension - in response to an EHLO command received after a TLS handshake has - completed. - -6. Usage Example - - The following dialog illustrates how a client and server can start a - TLS session: - - S: <waits for connection on TCP port 25> - C: <opens connection> - S: 220 mail.imc.org SMTP service ready - C: EHLO mail.ietf.org - S: 250-mail.imc.org offers a warm hug of welcome - S: 250 STARTTLS - C: STARTTLS - S: 220 Go ahead - C: <starts TLS negotiation> - - - -Hoffman Standards Track [Page 4] - -RFC 2487 SMTP Service Extension January 1999 - - - C & S: <negotiate a TLS session> - C & S: <check result of negotiation> - C: <continues by sending an SMTP command> - . . . - -7. Security Considerations - - It should be noted that SMTP is not an end-to-end mechanism. Thus, if - an SMTP client/server pair decide to add TLS privacy, they are not - securing the transport from the originating mail user agent to the - recipient. Further, because delivery of a single piece of mail may - go between more than two SMTP servers, adding TLS privacy to one pair - of servers does not mean that the entire SMTP chain has been made - private. Further, just because an SMTP server can authenticate an - SMTP client, it does not mean that the mail from the SMTP client was - authenticated by the SMTP client when the client received it. - - Both the STMP client and server must check the result of the TLS - negotiation to see whether acceptable authentication or privacy was - achieved. Ignoring this step completely invalidates using TLS for - security. The decision about whether acceptable authentication or - privacy was achieved is made locally, is implementation-dependant, - and is beyond the scope of this document. - - The SMTP client and server should note carefully the result of the - TLS negotiation. If the negotiation results in no privacy, or if it - results in privacy using algorithms or key lengths that are deemed - not strong enough, or if the authentication is not good enough for - either party, the client may choose to end the SMTP session with an - immediate QUIT command, or the server may choose to not accept any - more SMTP commands. - - A server announcing in an EHLO response that it uses a particular TLS - protocol should not pose any security issues, since any use of TLS - will be at least as secure as no use of TLS. - - A man-in-the-middle attack can be launched by deleting the "250 - STARTTLS" response from the server. This would cause the client not - to try to start a TLS session. An SMTP client can protect against - this attack by recording the fact that a particular SMTP server - offers TLS during one session and generating an alarm if it does not - appear in the EHLO response for a later session. The lack of TLS - during a session SHOULD NOT result in the bouncing of email, although - it could result in delayed processing. - - - - - - - -Hoffman Standards Track [Page 5] - -RFC 2487 SMTP Service Extension January 1999 - - - Before the TLS handshake has begun, any protocol interactions are - performed in the clear and may be modified by an active attacker. For - this reason, clients and servers MUST discard any knowledge obtained - prior to the start of the TLS handshake upon completion of the TLS - handshake. - - The STARTTLS extension is not suitable for authenticating the author - of an email message unless every hop in the delivery chain, including - the submission to the first SMTP server, is authenticated. Another - proposal [SMTP-AUTH] can be used to authenticate delivery and MIME - security multiparts [MIME-SEC] can be used to authenticate the author - of an email message. In addition, the [SMTP-AUTH] proposal offers - simpler and more flexible options to authenticate an SMTP client and - the SASL EXTERNAL mechanism [SASL] MAY be used in conjunction with - the STARTTLS command to provide an authorization identity. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hoffman Standards Track [Page 6] - -RFC 2487 SMTP Service Extension January 1999 - - -A. References - - [RFC-821] Postel, J., "Simple Mail Transfer Protocol", RFC 821, - August 1982. - - [RFC-1869] Klensin, J., Freed, N, Rose, M, Stefferud, E. and D. - Crocker, "SMTP Service Extensions", STD 10, RFC 1869, - November 1995. - - [RFC-2034] Freed, N., "SMTP Service Extension for Returning Enhanced - Error Codes", RFC 2034, October 1996. - - [RFC-2119] Bradner, S., "Key words for use in RFCs to Indicate - Requirement Levels", BCP 14, RFC 2119, March 1997. - - [SASL] Myers, J., "Simple Authentication and Security Layer - (SASL)", RFC 2222, October 1997. - - [SMTP-AUTH] "SMTP Service Extension for Authentication", Work in - Progress. - - [TLS] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", - RFC 2246, January 1999. - -B. Author's Address - - Paul Hoffman - Internet Mail Consortium - 127 Segre Place - Santa Cruz, CA 95060 - - Phone: (831) 426-9827 - EMail: phoffman@imc.org - - - - - - - - - - - - - - - - - - -Hoffman Standards Track [Page 7] - -RFC 2487 SMTP Service Extension January 1999 - - -C. Full Copyright Statement - - Copyright (C) The Internet Society (1999). All Rights Reserved. - - This document and translations of it may be copied and furnished to - others, and derivative works that comment on or otherwise explain it - or assist in its implementation may be prepared, copied, published - and distributed, in whole or in part, without restriction of any - kind, provided that the above copyright notice and this paragraph are - included on all such copies and derivative works. However, this - document itself may not be modified in any way, such as by removing - the copyright notice or references to the Internet Society or other - Internet organizations, except as needed for the purpose of - developing Internet standards in which case the procedures for - copyrights defined in the Internet Standards process must be - followed, or as required to translate it into languages other than - English. - - The limited permissions granted above are perpetual and will not be - revoked by the Internet Society or its successors or assigns. - - This document and the information contained herein is provided on an - "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING - TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION - HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF - MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - - - - - - - - - - - - - - - - - - - - - - - - -Hoffman Standards Track [Page 8] - diff --git a/doc/src/rfc2821.txt b/doc/src/rfc2821.txt deleted file mode 100644 index 0eac91188..000000000 --- a/doc/src/rfc2821.txt +++ /dev/null @@ -1,4427 +0,0 @@ - - - - - - -Network Working Group J. Klensin, Editor -Request for Comments: 2821 AT&T Laboratories -Obsoletes: 821, 974, 1869 April 2001 -Updates: 1123 -Category: Standards Track - - - Simple Mail Transfer Protocol - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Copyright Notice - - Copyright (C) The Internet Society (2001). All Rights Reserved. - -Abstract - - This document is a self-contained specification of the basic protocol - for the Internet electronic mail transport. It consolidates, updates - and clarifies, but doesn't add new or change existing functionality - of the following: - - - the original SMTP (Simple Mail Transfer Protocol) specification of - RFC 821 [30], - - - domain name system requirements and implications for mail - transport from RFC 1035 [22] and RFC 974 [27], - - - the clarifications and applicability statements in RFC 1123 [2], - and - - - material drawn from the SMTP Extension mechanisms [19]. - - It obsoletes RFC 821, RFC 974, and updates RFC 1123 (replaces the - mail transport materials of RFC 1123). However, RFC 821 specifies - some features that were not in significant use in the Internet by the - mid-1990s and (in appendices) some additional transport models. - Those sections are omitted here in the interest of clarity and - brevity; readers needing them should refer to RFC 821. - - - - - - -Klensin Standards Track [Page 1] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - It also includes some additional material from RFC 1123 that required - amplification. This material has been identified in multiple ways, - mostly by tracking flaming on various lists and newsgroups and - problems of unusual readings or interpretations that have appeared as - the SMTP extensions have been deployed. Where this specification - moves beyond consolidation and actually differs from earlier - documents, it supersedes them technically as well as textually. - - Although SMTP was designed as a mail transport and delivery protocol, - this specification also contains information that is important to its - use as a 'mail submission' protocol, as recommended for POP [3, 26] - and IMAP [6]. Additional submission issues are discussed in RFC 2476 - [15]. - - Section 2.3 provides definitions of terms specific to this document. - Except when the historical terminology is necessary for clarity, this - document uses the current 'client' and 'server' terminology to - identify the sending and receiving SMTP processes, respectively. - - A companion document [32] discusses message headers, message bodies - and formats and structures for them, and their relationship. - -Table of Contents - - 1. Introduction .................................................. 4 - 2. The SMTP Model ................................................ 5 - 2.1 Basic Structure .............................................. 5 - 2.2 The Extension Model .......................................... 7 - 2.2.1 Background ................................................. 7 - 2.2.2 Definition and Registration of Extensions .................. 8 - 2.3 Terminology .................................................. 9 - 2.3.1 Mail Objects ............................................... 10 - 2.3.2 Senders and Receivers ...................................... 10 - 2.3.3 Mail Agents and Message Stores ............................. 10 - 2.3.4 Host ....................................................... 11 - 2.3.5 Domain ..................................................... 11 - 2.3.6 Buffer and State Table ..................................... 11 - 2.3.7 Lines ...................................................... 12 - 2.3.8 Originator, Delivery, Relay, and Gateway Systems ........... 12 - 2.3.9 Message Content and Mail Data .............................. 13 - 2.3.10 Mailbox and Address ....................................... 13 - 2.3.11 Reply ..................................................... 13 - 2.4 General Syntax Principles and Transaction Model .............. 13 - 3. The SMTP Procedures: An Overview .............................. 15 - 3.1 Session Initiation ........................................... 15 - 3.2 Client Initiation ............................................ 16 - 3.3 Mail Transactions ............................................ 16 - 3.4 Forwarding for Address Correction or Updating ................ 19 - - - -Klensin Standards Track [Page 2] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - 3.5 Commands for Debugging Addresses ............................. 20 - 3.5.1 Overview ................................................... 20 - 3.5.2 VRFY Normal Response ....................................... 22 - 3.5.3 Meaning of VRFY or EXPN Success Response ................... 22 - 3.5.4 Semantics and Applications of EXPN ......................... 23 - 3.6 Domains ...................................................... 23 - 3.7 Relaying ..................................................... 24 - 3.8 Mail Gatewaying .............................................. 25 - 3.8.1 Header Fields in Gatewaying ................................ 26 - 3.8.2 Received Lines in Gatewaying ............................... 26 - 3.8.3 Addresses in Gatewaying .................................... 26 - 3.8.4 Other Header Fields in Gatewaying .......................... 27 - 3.8.5 Envelopes in Gatewaying .................................... 27 - 3.9 Terminating Sessions and Connections ......................... 27 - 3.10 Mailing Lists and Aliases ................................... 28 - 3.10.1 Alias ..................................................... 28 - 3.10.2 List ...................................................... 28 - 4. The SMTP Specifications ....................................... 29 - 4.1 SMTP Commands ................................................ 29 - 4.1.1 Command Semantics and Syntax ............................... 29 - 4.1.1.1 Extended HELLO (EHLO) or HELLO (HELO) ................... 29 - 4.1.1.2 MAIL (MAIL) .............................................. 31 - 4.1.1.3 RECIPIENT (RCPT) ......................................... 31 - 4.1.1.4 DATA (DATA) .............................................. 33 - 4.1.1.5 RESET (RSET) ............................................. 34 - 4.1.1.6 VERIFY (VRFY) ............................................ 35 - 4.1.1.7 EXPAND (EXPN) ............................................ 35 - 4.1.1.8 HELP (HELP) .............................................. 35 - 4.1.1.9 NOOP (NOOP) .............................................. 35 - 4.1.1.10 QUIT (QUIT) ............................................. 36 - 4.1.2 Command Argument Syntax .................................... 36 - 4.1.3 Address Literals ........................................... 38 - 4.1.4 Order of Commands .......................................... 39 - 4.1.5 Private-use Commands ....................................... 40 - 4.2 SMTP Replies ................................................ 40 - 4.2.1 Reply Code Severities and Theory ........................... 42 - 4.2.2 Reply Codes by Function Groups ............................. 44 - 4.2.3 Reply Codes in Numeric Order .............................. 45 - 4.2.4 Reply Code 502 ............................................. 46 - 4.2.5 Reply Codes After DATA and the Subsequent <CRLF>.<CRLF> .... 46 - 4.3 Sequencing of Commands and Replies ........................... 47 - 4.3.1 Sequencing Overview ........................................ 47 - 4.3.2 Command-Reply Sequences .................................... 48 - 4.4 Trace Information ............................................ 49 - 4.5 Additional Implementation Issues ............................. 53 - 4.5.1 Minimum Implementation ..................................... 53 - 4.5.2 Transparency ............................................... 53 - 4.5.3 Sizes and Timeouts ......................................... 54 - - - -Klensin Standards Track [Page 3] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - 4.5.3.1 Size limits and minimums ................................. 54 - 4.5.3.2 Timeouts ................................................. 56 - 4.5.4 Retry Strategies ........................................... 57 - 4.5.4.1 Sending Strategy ......................................... 58 - 4.5.4.2 Receiving Strategy ....................................... 59 - 4.5.5 Messages with a null reverse-path .......................... 59 - 5. Address Resolution and Mail Handling .......................... 60 - 6. Problem Detection and Handling ................................ 62 - 6.1 Reliable Delivery and Replies by Email ....................... 62 - 6.2 Loop Detection ............................................... 63 - 6.3 Compensating for Irregularities .............................. 63 - 7. Security Considerations ....................................... 64 - 7.1 Mail Security and Spoofing ................................... 64 - 7.2 "Blind" Copies ............................................... 65 - 7.3 VRFY, EXPN, and Security ..................................... 65 - 7.4 Information Disclosure in Announcements ...................... 66 - 7.5 Information Disclosure in Trace Fields ....................... 66 - 7.6 Information Disclosure in Message Forwarding ................. 67 - 7.7 Scope of Operation of SMTP Servers ........................... 67 - 8. IANA Considerations ........................................... 67 - 9. References .................................................... 68 - 10. Editor's Address ............................................. 70 - 11. Acknowledgments .............................................. 70 - Appendices ....................................................... 71 - A. TCP Transport Service ......................................... 71 - B. Generating SMTP Commands from RFC 822 Headers ................. 71 - C. Source Routes ................................................. 72 - D. Scenarios ..................................................... 73 - E. Other Gateway Issues .......................................... 76 - F. Deprecated Features of RFC 821 ................................ 76 - Full Copyright Statement ......................................... 79 - -1. Introduction - - The objective of the Simple Mail Transfer Protocol (SMTP) is to - transfer mail reliably and efficiently. - - SMTP is independent of the particular transmission subsystem and - requires only a reliable ordered data stream channel. While this - document specifically discusses transport over TCP, other transports - are possible. Appendices to RFC 821 describe some of them. - - An important feature of SMTP is its capability to transport mail - across networks, usually referred to as "SMTP mail relaying" (see - section 3.8). A network consists of the mutually-TCP-accessible - hosts on the public Internet, the mutually-TCP-accessible hosts on a - firewall-isolated TCP/IP Intranet, or hosts in some other LAN or WAN - environment utilizing a non-TCP transport-level protocol. Using - - - -Klensin Standards Track [Page 4] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - SMTP, a process can transfer mail to another process on the same - network or to some other network via a relay or gateway process - accessible to both networks. - - In this way, a mail message may pass through a number of intermediate - relay or gateway hosts on its path from sender to ultimate recipient. - The Mail eXchanger mechanisms of the domain name system [22, 27] (and - section 5 of this document) are used to identify the appropriate - next-hop destination for a message being transported. - -2. The SMTP Model - -2.1 Basic Structure - - The SMTP design can be pictured as: - - +----------+ +----------+ - +------+ | | | | - | User |<-->| | SMTP | | - +------+ | Client- |Commands/Replies| Server- | - +------+ | SMTP |<-------------->| SMTP | +------+ - | File |<-->| | and Mail | |<-->| File | - |System| | | | | |System| - +------+ +----------+ +----------+ +------+ - SMTP client SMTP server - - When an SMTP client has a message to transmit, it establishes a two- - way transmission channel to an SMTP server. The responsibility of an - SMTP client is to transfer mail messages to one or more SMTP servers, - or report its failure to do so. - - The means by which a mail message is presented to an SMTP client, and - how that client determines the domain name(s) to which mail messages - are to be transferred is a local matter, and is not addressed by this - document. In some cases, the domain name(s) transferred to, or - determined by, an SMTP client will identify the final destination(s) - of the mail message. In other cases, common with SMTP clients - associated with implementations of the POP [3, 26] or IMAP [6] - protocols, or when the SMTP client is inside an isolated transport - service environment, the domain name determined will identify an - intermediate destination through which all mail messages are to be - relayed. SMTP clients that transfer all traffic, regardless of the - target domain names associated with the individual messages, or that - do not maintain queues for retrying message transmissions that - initially cannot be completed, may otherwise conform to this - specification but are not considered fully-capable. Fully-capable - SMTP implementations, including the relays used by these less capable - - - - -Klensin Standards Track [Page 5] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - ones, and their destinations, are expected to support all of the - queuing, retrying, and alternate address functions discussed in this - specification. - - The means by which an SMTP client, once it has determined a target - domain name, determines the identity of an SMTP server to which a - copy of a message is to be transferred, and then performs that - transfer, is covered by this document. To effect a mail transfer to - an SMTP server, an SMTP client establishes a two-way transmission - channel to that SMTP server. An SMTP client determines the address - of an appropriate host running an SMTP server by resolving a - destination domain name to either an intermediate Mail eXchanger host - or a final target host. - - An SMTP server may be either the ultimate destination or an - intermediate "relay" (that is, it may assume the role of an SMTP - client after receiving the message) or "gateway" (that is, it may - transport the message further using some protocol other than SMTP). - SMTP commands are generated by the SMTP client and sent to the SMTP - server. SMTP replies are sent from the SMTP server to the SMTP - client in response to the commands. - - In other words, message transfer can occur in a single connection - between the original SMTP-sender and the final SMTP-recipient, or can - occur in a series of hops through intermediary systems. In either - case, a formal handoff of responsibility for the message occurs: the - protocol requires that a server accept responsibility for either - delivering a message or properly reporting the failure to do so. - - Once the transmission channel is established and initial handshaking - completed, the SMTP client normally initiates a mail transaction. - Such a transaction consists of a series of commands to specify the - originator and destination of the mail and transmission of the - message content (including any headers or other structure) itself. - When the same message is sent to multiple recipients, this protocol - encourages the transmission of only one copy of the data for all - recipients at the same destination (or intermediate relay) host. - - The server responds to each command with a reply; replies may - indicate that the command was accepted, that additional commands are - expected, or that a temporary or permanent error condition exists. - Commands specifying the sender or recipients may include server- - permitted SMTP service extension requests as discussed in section - 2.2. The dialog is purposely lock-step, one-at-a-time, although this - can be modified by mutually-agreed extension requests such as command - pipelining [13]. - - - - - -Klensin Standards Track [Page 6] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - Once a given mail message has been transmitted, the client may either - request that the connection be shut down or may initiate other mail - transactions. In addition, an SMTP client may use a connection to an - SMTP server for ancillary services such as verification of email - addresses or retrieval of mailing list subscriber addresses. - - As suggested above, this protocol provides mechanisms for the - transmission of mail. This transmission normally occurs directly - from the sending user's host to the receiving user's host when the - two hosts are connected to the same transport service. When they are - not connected to the same transport service, transmission occurs via - one or more relay SMTP servers. An intermediate host that acts as - either an SMTP relay or as a gateway into some other transmission - environment is usually selected through the use of the domain name - service (DNS) Mail eXchanger mechanism. - - Usually, intermediate hosts are determined via the DNS MX record, not - by explicit "source" routing (see section 5 and appendices C and - F.2). - -2.2 The Extension Model - -2.2.1 Background - - In an effort that started in 1990, approximately a decade after RFC - 821 was completed, the protocol was modified with a "service - extensions" model that permits the client and server to agree to - utilize shared functionality beyond the original SMTP requirements. - The SMTP extension mechanism defines a means whereby an extended SMTP - client and server may recognize each other, and the server can inform - the client as to the service extensions that it supports. - - Contemporary SMTP implementations MUST support the basic extension - mechanisms. For instance, servers MUST support the EHLO command even - if they do not implement any specific extensions and clients SHOULD - preferentially utilize EHLO rather than HELO. (However, for - compatibility with older conforming implementations, SMTP clients and - servers MUST support the original HELO mechanisms as a fallback.) - Unless the different characteristics of HELO must be identified for - interoperability purposes, this document discusses only EHLO. - - SMTP is widely deployed and high-quality implementations have proven - to be very robust. However, the Internet community now considers - some services to be important that were not anticipated when the - protocol was first designed. If support for those services is to be - added, it must be done in a way that permits older implementations to - continue working acceptably. The extension framework consists of: - - - - -Klensin Standards Track [Page 7] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - - The SMTP command EHLO, superseding the earlier HELO, - - - a registry of SMTP service extensions, - - - additional parameters to the SMTP MAIL and RCPT commands, and - - - optional replacements for commands defined in this protocol, such - as for DATA in non-ASCII transmissions [33]. - - SMTP's strength comes primarily from its simplicity. Experience with - many protocols has shown that protocols with few options tend towards - ubiquity, whereas protocols with many options tend towards obscurity. - - Each and every extension, regardless of its benefits, must be - carefully scrutinized with respect to its implementation, deployment, - and interoperability costs. In many cases, the cost of extending the - SMTP service will likely outweigh the benefit. - -2.2.2 Definition and Registration of Extensions - - The IANA maintains a registry of SMTP service extensions. A - corresponding EHLO keyword value is associated with each extension. - Each service extension registered with the IANA must be defined in a - formal standards-track or IESG-approved experimental protocol - document. The definition must include: - - - the textual name of the SMTP service extension; - - - the EHLO keyword value associated with the extension; - - - the syntax and possible values of parameters associated with the - EHLO keyword value; - - - any additional SMTP verbs associated with the extension - (additional verbs will usually be, but are not required to be, the - same as the EHLO keyword value); - - - any new parameters the extension associates with the MAIL or RCPT - verbs; - - - a description of how support for the extension affects the - behavior of a server and client SMTP; and, - - - the increment by which the extension is increasing the maximum - length of the commands MAIL and/or RCPT, over that specified in - this standard. - - - - - -Klensin Standards Track [Page 8] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - In addition, any EHLO keyword value starting with an upper or lower - case "X" refers to a local SMTP service extension used exclusively - through bilateral agreement. Keywords beginning with "X" MUST NOT be - used in a registered service extension. Conversely, keyword values - presented in the EHLO response that do not begin with "X" MUST - correspond to a standard, standards-track, or IESG-approved - experimental SMTP service extension registered with IANA. A - conforming server MUST NOT offer non-"X"-prefixed keyword values that - are not described in a registered extension. - - Additional verbs and parameter names are bound by the same rules as - EHLO keywords; specifically, verbs beginning with "X" are local - extensions that may not be registered or standardized. Conversely, - verbs not beginning with "X" must always be registered. - -2.3 Terminology - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", - "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this - document are to be interpreted as described below. - - 1. MUST This word, or the terms "REQUIRED" or "SHALL", mean that - the definition is an absolute requirement of the specification. - - 2. MUST NOT This phrase, or the phrase "SHALL NOT", mean that the - definition is an absolute prohibition of the specification. - - 3. SHOULD This word, or the adjective "RECOMMENDED", mean that - there may exist valid reasons in particular circumstances to - ignore a particular item, but the full implications must be - understood and carefully weighed before choosing a different - course. - - 4. SHOULD NOT This phrase, or the phrase "NOT RECOMMENDED" mean - that there may exist valid reasons in particular circumstances - when the particular behavior is acceptable or even useful, but the - full implications should be understood and the case carefully - weighed before implementing any behavior described with this - label. - - 5. MAY This word, or the adjective "OPTIONAL", mean that an item is - truly optional. One vendor may choose to include the item because - a particular marketplace requires it or because the vendor feels - that it enhances the product while another vendor may omit the - same item. An implementation which does not include a particular - option MUST be prepared to interoperate with another - implementation which does include the option, though perhaps with - reduced functionality. In the same vein an implementation which - - - -Klensin Standards Track [Page 9] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - does include a particular option MUST be prepared to interoperate - with another implementation which does not include the option - (except, of course, for the feature the option provides.) - -2.3.1 Mail Objects - - SMTP transports a mail object. A mail object contains an envelope - and content. - - The SMTP envelope is sent as a series of SMTP protocol units - (described in section 3). It consists of an originator address (to - which error reports should be directed); one or more recipient - addresses; and optional protocol extension material. Historically, - variations on the recipient address specification command (RCPT TO) - could be used to specify alternate delivery modes, such as immediate - display; those variations have now been deprecated (see appendix F, - section F.6). - - The SMTP content is sent in the SMTP DATA protocol unit and has two - parts: the headers and the body. If the content conforms to other - contemporary standards, the headers form a collection of field/value - pairs structured as in the message format specification [32]; the - body, if structured, is defined according to MIME [12]. The content - is textual in nature, expressed using the US-ASCII repertoire [1]. - Although SMTP extensions (such as "8BITMIME" [20]) may relax this - restriction for the content body, the content headers are always - encoded using the US-ASCII repertoire. A MIME extension [23] defines - an algorithm for representing header values outside the US-ASCII - repertoire, while still encoding them using the US-ASCII repertoire. - -2.3.2 Senders and Receivers - - In RFC 821, the two hosts participating in an SMTP transaction were - described as the "SMTP-sender" and "SMTP-receiver". This document - has been changed to reflect current industry terminology and hence - refers to them as the "SMTP client" (or sometimes just "the client") - and "SMTP server" (or just "the server"), respectively. Since a - given host may act both as server and client in a relay situation, - "receiver" and "sender" terminology is still used where needed for - clarity. - -2.3.3 Mail Agents and Message Stores - - Additional mail system terminology became common after RFC 821 was - published and, where convenient, is used in this specification. In - particular, SMTP servers and clients provide a mail transport service - and therefore act as "Mail Transfer Agents" (MTAs). "Mail User - Agents" (MUAs or UAs) are normally thought of as the sources and - - - -Klensin Standards Track [Page 10] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - targets of mail. At the source, an MUA might collect mail to be - transmitted from a user and hand it off to an MTA; the final - ("delivery") MTA would be thought of as handing the mail off to an - MUA (or at least transferring responsibility to it, e.g., by - depositing the message in a "message store"). However, while these - terms are used with at least the appearance of great precision in - other environments, the implied boundaries between MUAs and MTAs - often do not accurately match common, and conforming, practices with - Internet mail. Hence, the reader should be cautious about inferring - the strong relationships and responsibilities that might be implied - if these terms were used elsewhere. - -2.3.4 Host - - For the purposes of this specification, a host is a computer system - attached to the Internet (or, in some cases, to a private TCP/IP - network) and supporting the SMTP protocol. Hosts are known by names - (see "domain"); identifying them by numerical address is discouraged. - -2.3.5 Domain - - A domain (or domain name) consists of one or more dot-separated - components. These components ("labels" in DNS terminology [22]) are - restricted for SMTP purposes to consist of a sequence of letters, - digits, and hyphens drawn from the ASCII character set [1]. Domain - names are used as names of hosts and of other entities in the domain - name hierarchy. For example, a domain may refer to an alias (label - of a CNAME RR) or the label of Mail eXchanger records to be used to - deliver mail instead of representing a host name. See [22] and - section 5 of this specification. - - The domain name, as described in this document and in [22], is the - entire, fully-qualified name (often referred to as an "FQDN"). A - domain name that is not in FQDN form is no more than a local alias. - Local aliases MUST NOT appear in any SMTP transaction. - -2.3.6 Buffer and State Table - - SMTP sessions are stateful, with both parties carefully maintaining a - common view of the current state. In this document we model this - state by a virtual "buffer" and a "state table" on the server which - may be used by the client to, for example, "clear the buffer" or - "reset the state table," causing the information in the buffer to be - discarded and the state to be returned to some previous state. - - - - - - - -Klensin Standards Track [Page 11] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -2.3.7 Lines - - SMTP commands and, unless altered by a service extension, message - data, are transmitted in "lines". Lines consist of zero or more data - characters terminated by the sequence ASCII character "CR" (hex value - 0D) followed immediately by ASCII character "LF" (hex value 0A). - This termination sequence is denoted as <CRLF> in this document. - Conforming implementations MUST NOT recognize or generate any other - character or character sequence as a line terminator. Limits MAY be - imposed on line lengths by servers (see section 4.5.3). - - In addition, the appearance of "bare" "CR" or "LF" characters in text - (i.e., either without the other) has a long history of causing - problems in mail implementations and applications that use the mail - system as a tool. SMTP client implementations MUST NOT transmit - these characters except when they are intended as line terminators - and then MUST, as indicated above, transmit them only as a <CRLF> - sequence. - -2.3.8 Originator, Delivery, Relay, and Gateway Systems - - This specification makes a distinction among four types of SMTP - systems, based on the role those systems play in transmitting - electronic mail. An "originating" system (sometimes called an SMTP - originator) introduces mail into the Internet or, more generally, - into a transport service environment. A "delivery" SMTP system is - one that receives mail from a transport service environment and - passes it to a mail user agent or deposits it in a message store - which a mail user agent is expected to subsequently access. A - "relay" SMTP system (usually referred to just as a "relay") receives - mail from an SMTP client and transmits it, without modification to - the message data other than adding trace information, to another SMTP - server for further relaying or for delivery. - - A "gateway" SMTP system (usually referred to just as a "gateway") - receives mail from a client system in one transport environment and - transmits it to a server system in another transport environment. - Differences in protocols or message semantics between the transport - environments on either side of a gateway may require that the gateway - system perform transformations to the message that are not permitted - to SMTP relay systems. For the purposes of this specification, - firewalls that rewrite addresses should be considered as gateways, - even if SMTP is used on both sides of them (see [11]). - - - - - - - - -Klensin Standards Track [Page 12] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -2.3.9 Message Content and Mail Data - - The terms "message content" and "mail data" are used interchangeably - in this document to describe the material transmitted after the DATA - command is accepted and before the end of data indication is - transmitted. Message content includes message headers and the - possibly-structured message body. The MIME specification [12] - provides the standard mechanisms for structured message bodies. - -2.3.10 Mailbox and Address - - As used in this specification, an "address" is a character string - that identifies a user to whom mail will be sent or a location into - which mail will be deposited. The term "mailbox" refers to that - depository. The two terms are typically used interchangeably unless - the distinction between the location in which mail is placed (the - mailbox) and a reference to it (the address) is important. An - address normally consists of user and domain specifications. The - standard mailbox naming convention is defined to be "local- - part@domain": contemporary usage permits a much broader set of - applications than simple "user names". Consequently, and due to a - long history of problems when intermediate hosts have attempted to - optimize transport by modifying them, the local-part MUST be - interpreted and assigned semantics only by the host specified in the - domain part of the address. - -2.3.11 Reply - - An SMTP reply is an acknowledgment (positive or negative) sent from - receiver to sender via the transmission channel in response to a - command. The general form of a reply is a numeric completion code - (indicating failure or success) usually followed by a text string. - The codes are for use by programs and the text is usually intended - for human users. Recent work [34] has specified further structuring - of the reply strings, including the use of supplemental and more - specific completion codes. - -2.4 General Syntax Principles and Transaction Model - - SMTP commands and replies have a rigid syntax. All commands begin - with a command verb. All Replies begin with a three digit numeric - code. In some commands and replies, arguments MUST follow the verb - or reply code. Some commands do not accept arguments (after the - verb), and some reply codes are followed, sometimes optionally, by - free form text. In both cases, where text appears, it is separated - from the verb or reply code by a space character. Complete - definitions of commands and replies appear in section 4. - - - - -Klensin Standards Track [Page 13] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - Verbs and argument values (e.g., "TO:" or "to:" in the RCPT command - and extension name keywords) are not case sensitive, with the sole - exception in this specification of a mailbox local-part (SMTP - Extensions may explicitly specify case-sensitive elements). That is, - a command verb, an argument value other than a mailbox local-part, - and free form text MAY be encoded in upper case, lower case, or any - mixture of upper and lower case with no impact on its meaning. This - is NOT true of a mailbox local-part. The local-part of a mailbox - MUST BE treated as case sensitive. Therefore, SMTP implementations - MUST take care to preserve the case of mailbox local-parts. Mailbox - domains are not case sensitive. In particular, for some hosts the - user "smith" is different from the user "Smith". However, exploiting - the case sensitivity of mailbox local-parts impedes interoperability - and is discouraged. - - A few SMTP servers, in violation of this specification (and RFC 821) - require that command verbs be encoded by clients in upper case. - Implementations MAY wish to employ this encoding to accommodate those - servers. - - The argument field consists of a variable length character string - ending with the end of the line, i.e., with the character sequence - <CRLF>. The receiver will take no action until this sequence is - received. - - The syntax for each command is shown with the discussion of that - command. Common elements and parameters are shown in section 4.1.2. - - Commands and replies are composed of characters from the ASCII - character set [1]. When the transport service provides an 8-bit byte - (octet) transmission channel, each 7-bit character is transmitted - right justified in an octet with the high order bit cleared to zero. - More specifically, the unextended SMTP service provides seven bit - transport only. An originating SMTP client which has not - successfully negotiated an appropriate extension with a particular - server MUST NOT transmit messages with information in the high-order - bit of octets. If such messages are transmitted in violation of this - rule, receiving SMTP servers MAY clear the high-order bit or reject - the message as invalid. In general, a relay SMTP SHOULD assume that - the message content it has received is valid and, assuming that the - envelope permits doing so, relay it without inspecting that content. - Of course, if the content is mislabeled and the data path cannot - accept the actual content, this may result in ultimate delivery of a - severely garbled message to the recipient. Delivery SMTP systems MAY - reject ("bounce") such messages rather than deliver them. No sending - SMTP system is permitted to send envelope commands in any character - - - - - -Klensin Standards Track [Page 14] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - set other than US-ASCII; receiving systems SHOULD reject such - commands, normally using "500 syntax error - invalid character" - replies. - - Eight-bit message content transmission MAY be requested of the server - by a client using extended SMTP facilities, notably the "8BITMIME" - extension [20]. 8BITMIME SHOULD be supported by SMTP servers. - However, it MUST not be construed as authorization to transmit - unrestricted eight bit material. 8BITMIME MUST NOT be requested by - senders for material with the high bit on that is not in MIME format - with an appropriate content-transfer encoding; servers MAY reject - such messages. - - The metalinguistic notation used in this document corresponds to the - "Augmented BNF" used in other Internet mail system documents. The - reader who is not familiar with that syntax should consult the ABNF - specification [8]. Metalanguage terms used in running text are - surrounded by pointed brackets (e.g., <CRLF>) for clarity. - -3. The SMTP Procedures: An Overview - - This section contains descriptions of the procedures used in SMTP: - session initiation, the mail transaction, forwarding mail, verifying - mailbox names and expanding mailing lists, and the opening and - closing exchanges. Comments on relaying, a note on mail domains, and - a discussion of changing roles are included at the end of this - section. Several complete scenarios are presented in appendix D. - -3.1 Session Initiation - - An SMTP session is initiated when a client opens a connection to a - server and the server responds with an opening message. - - SMTP server implementations MAY include identification of their - software and version information in the connection greeting reply - after the 220 code, a practice that permits more efficient isolation - and repair of any problems. Implementations MAY make provision for - SMTP servers to disable the software and version announcement where - it causes security concerns. While some systems also identify their - contact point for mail problems, this is not a substitute for - maintaining the required "postmaster" address (see section 4.5.1). - - The SMTP protocol allows a server to formally reject a transaction - while still allowing the initial connection as follows: a 554 - response MAY be given in the initial connection opening message - instead of the 220. A server taking this approach MUST still wait - for the client to send a QUIT (see section 4.1.1.10) before closing - the connection and SHOULD respond to any intervening commands with - - - -Klensin Standards Track [Page 15] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - "503 bad sequence of commands". Since an attempt to make an SMTP - connection to such a system is probably in error, a server returning - a 554 response on connection opening SHOULD provide enough - information in the reply text to facilitate debugging of the sending - system. - -3.2 Client Initiation - - Once the server has sent the welcoming message and the client has - received it, the client normally sends the EHLO command to the - server, indicating the client's identity. In addition to opening the - session, use of EHLO indicates that the client is able to process - service extensions and requests that the server provide a list of the - extensions it supports. Older SMTP systems which are unable to - support service extensions and contemporary clients which do not - require service extensions in the mail session being initiated, MAY - use HELO instead of EHLO. Servers MUST NOT return the extended - EHLO-style response to a HELO command. For a particular connection - attempt, if the server returns a "command not recognized" response to - EHLO, the client SHOULD be able to fall back and send HELO. - - In the EHLO command the host sending the command identifies itself; - the command may be interpreted as saying "Hello, I am <domain>" (and, - in the case of EHLO, "and I support service extension requests"). - -3.3 Mail Transactions - - There are three steps to SMTP mail transactions. The transaction - starts with a MAIL command which gives the sender identification. - (In general, the MAIL command may be sent only when no mail - transaction is in progress; see section 4.1.4.) A series of one or - more RCPT commands follows giving the receiver information. Then a - DATA command initiates transfer of the mail data and is terminated by - the "end of mail" data indicator, which also confirms the - transaction. - - The first step in the procedure is the MAIL command. - - MAIL FROM:<reverse-path> [SP <mail-parameters> ] <CRLF> - - This command tells the SMTP-receiver that a new mail transaction is - starting and to reset all its state tables and buffers, including any - recipients or mail data. The <reverse-path> portion of the first or - only argument contains the source mailbox (between "<" and ">" - brackets), which can be used to report errors (see section 4.2 for a - discussion of error reporting). If accepted, the SMTP server returns - a 250 OK reply. If the mailbox specification is not acceptable for - some reason, the server MUST return a reply indicating whether the - - - -Klensin Standards Track [Page 16] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - failure is permanent (i.e., will occur again if the client tries to - send the same address again) or temporary (i.e., the address might be - accepted if the client tries again later). Despite the apparent - scope of this requirement, there are circumstances in which the - acceptability of the reverse-path may not be determined until one or - more forward-paths (in RCPT commands) can be examined. In those - cases, the server MAY reasonably accept the reverse-path (with a 250 - reply) and then report problems after the forward-paths are received - and examined. Normally, failures produce 550 or 553 replies. - - Historically, the <reverse-path> can contain more than just a - mailbox, however, contemporary systems SHOULD NOT use source routing - (see appendix C). - - The optional <mail-parameters> are associated with negotiated SMTP - service extensions (see section 2.2). - - The second step in the procedure is the RCPT command. - - RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF> - - The first or only argument to this command includes a forward-path - (normally a mailbox and domain, always surrounded by "<" and ">" - brackets) identifying one recipient. If accepted, the SMTP server - returns a 250 OK reply and stores the forward-path. If the recipient - is known not to be a deliverable address, the SMTP server returns a - 550 reply, typically with a string such as "no such user - " and the - mailbox name (other circumstances and reply codes are possible). - This step of the procedure can be repeated any number of times. - - The <forward-path> can contain more than just a mailbox. - Historically, the <forward-path> can be a source routing list of - hosts and the destination mailbox, however, contemporary SMTP clients - SHOULD NOT utilize source routes (see appendix C). Servers MUST be - prepared to encounter a list of source routes in the forward path, - but SHOULD ignore the routes or MAY decline to support the relaying - they imply. Similarly, servers MAY decline to accept mail that is - destined for other hosts or systems. These restrictions make a - server useless as a relay for clients that do not support full SMTP - functionality. Consequently, restricted-capability clients MUST NOT - assume that any SMTP server on the Internet can be used as their mail - processing (relaying) site. If a RCPT command appears without a - previous MAIL command, the server MUST return a 503 "Bad sequence of - commands" response. The optional <rcpt-parameters> are associated - with negotiated SMTP service extensions (see section 2.2). - - The third step in the procedure is the DATA command (or some - alternative specified in a service extension). - - - -Klensin Standards Track [Page 17] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - DATA <CRLF> - - If accepted, the SMTP server returns a 354 Intermediate reply and - considers all succeeding lines up to but not including the end of - mail data indicator to be the message text. When the end of text is - successfully received and stored the SMTP-receiver sends a 250 OK - reply. - - Since the mail data is sent on the transmission channel, the end of - mail data must be indicated so that the command and reply dialog can - be resumed. SMTP indicates the end of the mail data by sending a - line containing only a "." (period or full stop). A transparency - procedure is used to prevent this from interfering with the user's - text (see section 4.5.2). - - The end of mail data indicator also confirms the mail transaction and - tells the SMTP server to now process the stored recipients and mail - data. If accepted, the SMTP server returns a 250 OK reply. The DATA - command can fail at only two points in the protocol exchange: - - - If there was no MAIL, or no RCPT, command, or all such commands - were rejected, the server MAY return a "command out of sequence" - (503) or "no valid recipients" (554) reply in response to the DATA - command. If one of those replies (or any other 5yz reply) is - received, the client MUST NOT send the message data; more - generally, message data MUST NOT be sent unless a 354 reply is - received. - - - If the verb is initially accepted and the 354 reply issued, the - DATA command should fail only if the mail transaction was - incomplete (for example, no recipients), or if resources were - unavailable (including, of course, the server unexpectedly - becoming unavailable), or if the server determines that the - message should be rejected for policy or other reasons. - - However, in practice, some servers do not perform recipient - verification until after the message text is received. These servers - SHOULD treat a failure for one or more recipients as a "subsequent - failure" and return a mail message as discussed in section 6. Using - a "550 mailbox not found" (or equivalent) reply code after the data - are accepted makes it difficult or impossible for the client to - determine which recipients failed. - - When RFC 822 format [7, 32] is being used, the mail data include the - memo header items such as Date, Subject, To, Cc, From. Server SMTP - systems SHOULD NOT reject messages based on perceived defects in the - RFC 822 or MIME [12] message header or message body. In particular, - - - - -Klensin Standards Track [Page 18] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - they MUST NOT reject messages in which the numbers of Resent-fields - do not match or Resent-to appears without Resent-from and/or Resent- - date. - - Mail transaction commands MUST be used in the order discussed above. - -3.4 Forwarding for Address Correction or Updating - - Forwarding support is most often required to consolidate and simplify - addresses within, or relative to, some enterprise and less frequently - to establish addresses to link a person's prior address with current - one. Silent forwarding of messages (without server notification to - the sender), for security or non-disclosure purposes, is common in - the contemporary Internet. - - In both the enterprise and the "new address" cases, information - hiding (and sometimes security) considerations argue against exposure - of the "final" address through the SMTP protocol as a side-effect of - the forwarding activity. This may be especially important when the - final address may not even be reachable by the sender. Consequently, - the "forwarding" mechanisms described in section 3.2 of RFC 821, and - especially the 251 (corrected destination) and 551 reply codes from - RCPT must be evaluated carefully by implementers and, when they are - available, by those configuring systems. - - In particular: - - * Servers MAY forward messages when they are aware of an address - change. When they do so, they MAY either provide address-updating - information with a 251 code, or may forward "silently" and return - a 250 code. But, if a 251 code is used, they MUST NOT assume that - the client will actually update address information or even return - that information to the user. - - Alternately, - - * Servers MAY reject or bounce messages when they are not - deliverable when addressed. When they do so, they MAY either - provide address-updating information with a 551 code, or may - reject the message as undeliverable with a 550 code and no - address-specific information. But, if a 551 code is used, they - MUST NOT assume that the client will actually update address - information or even return that information to the user. - - SMTP server implementations that support the 251 and/or 551 reply - codes are strongly encouraged to provide configuration mechanisms so - that sites which conclude that they would undesirably disclose - information can disable or restrict their use. - - - -Klensin Standards Track [Page 19] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -3.5 Commands for Debugging Addresses - -3.5.1 Overview - - SMTP provides commands to verify a user name or obtain the content of - a mailing list. This is done with the VRFY and EXPN commands, which - have character string arguments. Implementations SHOULD support VRFY - and EXPN (however, see section 3.5.2 and 7.3). - - For the VRFY command, the string is a user name or a user name and - domain (see below). If a normal (i.e., 250) response is returned, - the response MAY include the full name of the user and MUST include - the mailbox of the user. It MUST be in either of the following - forms: - - User Name <local-part@domain> - local-part@domain - - When a name that is the argument to VRFY could identify more than one - mailbox, the server MAY either note the ambiguity or identify the - alternatives. In other words, any of the following are legitimate - response to VRFY: - - 553 User ambiguous - - or - - 553- Ambiguous; Possibilities are - 553-Joe Smith <jsmith@foo.com> - 553-Harry Smith <hsmith@foo.com> - 553 Melvin Smith <dweep@foo.com> - - or - - 553-Ambiguous; Possibilities - 553- <jsmith@foo.com> - 553- <hsmith@foo.com> - 553 <dweep@foo.com> - - Under normal circumstances, a client receiving a 553 reply would be - expected to expose the result to the user. Use of exactly the forms - given, and the "user ambiguous" or "ambiguous" keywords, possibly - supplemented by extended reply codes such as those described in [34], - will facilitate automated translation into other languages as needed. - Of course, a client that was highly automated or that was operating - in another language than English, might choose to try to translate - the response, to return some other indication to the user than the - - - - -Klensin Standards Track [Page 20] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - literal text of the reply, or to take some automated action such as - consulting a directory service for additional information before - reporting to the user. - - For the EXPN command, the string identifies a mailing list, and the - successful (i.e., 250) multiline response MAY include the full name - of the users and MUST give the mailboxes on the mailing list. - - In some hosts the distinction between a mailing list and an alias for - a single mailbox is a bit fuzzy, since a common data structure may - hold both types of entries, and it is possible to have mailing lists - containing only one mailbox. If a request is made to apply VRFY to a - mailing list, a positive response MAY be given if a message so - addressed would be delivered to everyone on the list, otherwise an - error SHOULD be reported (e.g., "550 That is a mailing list, not a - user" or "252 Unable to verify members of mailing list"). If a - request is made to expand a user name, the server MAY return a - positive response consisting of a list containing one name, or an - error MAY be reported (e.g., "550 That is a user name, not a mailing - list"). - - In the case of a successful multiline reply (normal for EXPN) exactly - one mailbox is to be specified on each line of the reply. The case - of an ambiguous request is discussed above. - - "User name" is a fuzzy term and has been used deliberately. An - implementation of the VRFY or EXPN commands MUST include at least - recognition of local mailboxes as "user names". However, since - current Internet practice often results in a single host handling - mail for multiple domains, hosts, especially hosts that provide this - functionality, SHOULD accept the "local-part@domain" form as a "user - name"; hosts MAY also choose to recognize other strings as "user - names". - - The case of expanding a mailbox list requires a multiline reply, such - as: - - C: EXPN Example-People - S: 250-Jon Postel <Postel@isi.edu> - S: 250-Fred Fonebone <Fonebone@physics.foo-u.edu> - S: 250 Sam Q. Smith <SQSmith@specific.generic.com> - - or - - C: EXPN Executive-Washroom-List - S: 550 Access Denied to You. - - - - - -Klensin Standards Track [Page 21] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - The character string arguments of the VRFY and EXPN commands cannot - be further restricted due to the variety of implementations of the - user name and mailbox list concepts. On some systems it may be - appropriate for the argument of the EXPN command to be a file name - for a file containing a mailing list, but again there are a variety - of file naming conventions in the Internet. Similarly, historical - variations in what is returned by these commands are such that the - response SHOULD be interpreted very carefully, if at all, and SHOULD - generally only be used for diagnostic purposes. - -3.5.2 VRFY Normal Response - - When normal (2yz or 551) responses are returned from a VRFY or EXPN - request, the reply normally includes the mailbox name, i.e., - "<local-part@domain>", where "domain" is a fully qualified domain - name, MUST appear in the syntax. In circumstances exceptional enough - to justify violating the intent of this specification, free-form text - MAY be returned. In order to facilitate parsing by both computers - and people, addresses SHOULD appear in pointed brackets. When - addresses, rather than free-form debugging information, are returned, - EXPN and VRFY MUST return only valid domain addresses that are usable - in SMTP RCPT commands. Consequently, if an address implies delivery - to a program or other system, the mailbox name used to reach that - target MUST be given. Paths (explicit source routes) MUST NOT be - returned by VRFY or EXPN. - - Server implementations SHOULD support both VRFY and EXPN. For - security reasons, implementations MAY provide local installations a - way to disable either or both of these commands through configuration - options or the equivalent. When these commands are supported, they - are not required to work across relays when relaying is supported. - Since they were both optional in RFC 821, they MUST be listed as - service extensions in an EHLO response, if they are supported. - -3.5.3 Meaning of VRFY or EXPN Success Response - - A server MUST NOT return a 250 code in response to a VRFY or EXPN - command unless it has actually verified the address. In particular, - a server MUST NOT return 250 if all it has done is to verify that the - syntax given is valid. In that case, 502 (Command not implemented) - or 500 (Syntax error, command unrecognized) SHOULD be returned. As - stated elsewhere, implementation (in the sense of actually validating - addresses and returning information) of VRFY and EXPN are strongly - recommended. Hence, implementations that return 500 or 502 for VRFY - are not in full compliance with this specification. - - - - - - -Klensin Standards Track [Page 22] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - There may be circumstances where an address appears to be valid but - cannot reasonably be verified in real time, particularly when a - server is acting as a mail exchanger for another server or domain. - "Apparent validity" in this case would normally involve at least - syntax checking and might involve verification that any domains - specified were ones to which the host expected to be able to relay - mail. In these situations, reply code 252 SHOULD be returned. These - cases parallel the discussion of RCPT verification discussed in - section 2.1. Similarly, the discussion in section 3.4 applies to the - use of reply codes 251 and 551 with VRFY (and EXPN) to indicate - addresses that are recognized but that would be forwarded or bounced - were mail received for them. Implementations generally SHOULD be - more aggressive about address verification in the case of VRFY than - in the case of RCPT, even if it takes a little longer to do so. - -3.5.4 Semantics and Applications of EXPN - - EXPN is often very useful in debugging and understanding problems - with mailing lists and multiple-target-address aliases. Some systems - have attempted to use source expansion of mailing lists as a means of - eliminating duplicates. The propagation of aliasing systems with - mail on the Internet, for hosts (typically with MX and CNAME DNS - records), for mailboxes (various types of local host aliases), and in - various proxying arrangements, has made it nearly impossible for - these strategies to work consistently, and mail systems SHOULD NOT - attempt them. - -3.6 Domains - - Only resolvable, fully-qualified, domain names (FQDNs) are permitted - when domain names are used in SMTP. In other words, names that can - be resolved to MX RRs or A RRs (as discussed in section 5) are - permitted, as are CNAME RRs whose targets can be resolved, in turn, - to MX or A RRs. Local nicknames or unqualified names MUST NOT be - used. There are two exceptions to the rule requiring FQDNs: - - - The domain name given in the EHLO command MUST BE either a primary - host name (a domain name that resolves to an A RR) or, if the host - has no name, an address literal as described in section 4.1.1.1. - - - The reserved mailbox name "postmaster" may be used in a RCPT - command without domain qualification (see section 4.1.1.3) and - MUST be accepted if so used. - - - - - - - - -Klensin Standards Track [Page 23] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -3.7 Relaying - - In general, the availability of Mail eXchanger records in the domain - name system [22, 27] makes the use of explicit source routes in the - Internet mail system unnecessary. Many historical problems with - their interpretation have made their use undesirable. SMTP clients - SHOULD NOT generate explicit source routes except under unusual - circumstances. SMTP servers MAY decline to act as mail relays or to - accept addresses that specify source routes. When route information - is encountered, SMTP servers are also permitted to ignore the route - information and simply send to the final destination specified as the - last element in the route and SHOULD do so. There has been an - invalid practice of using names that do not appear in the DNS as - destination names, with the senders counting on the intermediate - hosts specified in source routing to resolve any problems. If source - routes are stripped, this practice will cause failures. This is one - of several reasons why SMTP clients MUST NOT generate invalid source - routes or depend on serial resolution of names. - - When source routes are not used, the process described in RFC 821 for - constructing a reverse-path from the forward-path is not applicable - and the reverse-path at the time of delivery will simply be the - address that appeared in the MAIL command. - - A relay SMTP server is usually the target of a DNS MX record that - designates it, rather than the final delivery system. The relay - server may accept or reject the task of relaying the mail in the same - way it accepts or rejects mail for a local user. If it accepts the - task, it then becomes an SMTP client, establishes a transmission - channel to the next SMTP server specified in the DNS (according to - the rules in section 5), and sends it the mail. If it declines to - relay mail to a particular address for policy reasons, a 550 response - SHOULD be returned. - - Many mail-sending clients exist, especially in conjunction with - facilities that receive mail via POP3 or IMAP, that have limited - capability to support some of the requirements of this specification, - such as the ability to queue messages for subsequent delivery - attempts. For these clients, it is common practice to make private - arrangements to send all messages to a single server for processing - and subsequent distribution. SMTP, as specified here, is not ideally - suited for this role, and work is underway on standardized mail - submission protocols that might eventually supercede the current - practices. In any event, because these arrangements are private and - fall outside the scope of this specification, they are not described - here. - - - - - -Klensin Standards Track [Page 24] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - It is important to note that MX records can point to SMTP servers - which act as gateways into other environments, not just SMTP relays - and final delivery systems; see sections 3.8 and 5. - - If an SMTP server has accepted the task of relaying the mail and - later finds that the destination is incorrect or that the mail cannot - be delivered for some other reason, then it MUST construct an - "undeliverable mail" notification message and send it to the - originator of the undeliverable mail (as indicated by the reverse- - path). Formats specified for non-delivery reports by other standards - (see, for example, [24, 25]) SHOULD be used if possible. - - This notification message must be from the SMTP server at the relay - host or the host that first determines that delivery cannot be - accomplished. Of course, SMTP servers MUST NOT send notification - messages about problems transporting notification messages. One way - to prevent loops in error reporting is to specify a null reverse-path - in the MAIL command of a notification message. When such a message - is transmitted the reverse-path MUST be set to null (see section - 4.5.5 for additional discussion). A MAIL command with a null - reverse-path appears as follows: - - MAIL FROM:<> - - As discussed in section 2.4.1, a relay SMTP has no need to inspect or - act upon the headers or body of the message data and MUST NOT do so - except to add its own "Received:" header (section 4.4) and, - optionally, to attempt to detect looping in the mail system (see - section 6.2). - -3.8 Mail Gatewaying - - While the relay function discussed above operates within the Internet - SMTP transport service environment, MX records or various forms of - explicit routing may require that an intermediate SMTP server perform - a translation function between one transport service and another. As - discussed in section 2.3.8, when such a system is at the boundary - between two transport service environments, we refer to it as a - "gateway" or "gateway SMTP". - - Gatewaying mail between different mail environments, such as - different mail formats and protocols, is complex and does not easily - yield to standardization. However, some general requirements may be - given for a gateway between the Internet and another mail - environment. - - - - - - -Klensin Standards Track [Page 25] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -3.8.1 Header Fields in Gatewaying - - Header fields MAY be rewritten when necessary as messages are - gatewayed across mail environment boundaries. This may involve - inspecting the message body or interpreting the local-part of the - destination address in spite of the prohibitions in section 2.4.1. - - Other mail systems gatewayed to the Internet often use a subset of - RFC 822 headers or provide similar functionality with a different - syntax, but some of these mail systems do not have an equivalent to - the SMTP envelope. Therefore, when a message leaves the Internet - environment, it may be necessary to fold the SMTP envelope - information into the message header. A possible solution would be to - create new header fields to carry the envelope information (e.g., - "X-SMTP-MAIL:" and "X-SMTP-RCPT:"); however, this would require - changes in mail programs in foreign environments and might risk - disclosure of private information (see section 7.2). - -3.8.2 Received Lines in Gatewaying - - When forwarding a message into or out of the Internet environment, a - gateway MUST prepend a Received: line, but it MUST NOT alter in any - way a Received: line that is already in the header. - - "Received:" fields of messages originating from other environments - may not conform exactly to this specification. However, the most - important use of Received: lines is for debugging mail faults, and - this debugging can be severely hampered by well-meaning gateways that - try to "fix" a Received: line. As another consequence of trace - fields arising in non-SMTP environments, receiving systems MUST NOT - reject mail based on the format of a trace field and SHOULD be - extremely robust in the light of unexpected information or formats in - those fields. - - The gateway SHOULD indicate the environment and protocol in the "via" - clauses of Received field(s) that it supplies. - -3.8.3 Addresses in Gatewaying - - From the Internet side, the gateway SHOULD accept all valid address - formats in SMTP commands and in RFC 822 headers, and all valid RFC - 822 messages. Addresses and headers generated by gateways MUST - conform to applicable Internet standards (including this one and RFC - 822). Gateways are, of course, subject to the same rules for - handling source routes as those described for other SMTP systems in - section 3.3. - - - - - -Klensin Standards Track [Page 26] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -3.8.4 Other Header Fields in Gatewaying - - The gateway MUST ensure that all header fields of a message that it - forwards into the Internet mail environment meet the requirements for - Internet mail. In particular, all addresses in "From:", "To:", - "Cc:", etc., fields MUST be transformed (if necessary) to satisfy RFC - 822 syntax, MUST reference only fully-qualified domain names, and - MUST be effective and useful for sending replies. The translation - algorithm used to convert mail from the Internet protocols to another - environment's protocol SHOULD ensure that error messages from the - foreign mail environment are delivered to the return path from the - SMTP envelope, not to the sender listed in the "From:" field (or - other fields) of the RFC 822 message. - -3.8.5 Envelopes in Gatewaying - - Similarly, when forwarding a message from another environment into - the Internet, the gateway SHOULD set the envelope return path in - accordance with an error message return address, if supplied by the - foreign environment. If the foreign environment has no equivalent - concept, the gateway must select and use a best approximation, with - the message originator's address as the default of last resort. - -3.9 Terminating Sessions and Connections - - An SMTP connection is terminated when the client sends a QUIT - command. The server responds with a positive reply code, after which - it closes the connection. - - An SMTP server MUST NOT intentionally close the connection except: - - - After receiving a QUIT command and responding with a 221 reply. - - - After detecting the need to shut down the SMTP service and - returning a 421 response code. This response code can be issued - after the server receives any command or, if necessary, - asynchronously from command receipt (on the assumption that the - client will receive it after the next command is issued). - - In particular, a server that closes connections in response to - commands that are not understood is in violation of this - specification. Servers are expected to be tolerant of unknown - commands, issuing a 500 reply and awaiting further instructions from - the client. - - - - - - - -Klensin Standards Track [Page 27] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - An SMTP server which is forcibly shut down via external means SHOULD - attempt to send a line containing a 421 response code to the SMTP - client before exiting. The SMTP client will normally read the 421 - response code after sending its next command. - - SMTP clients that experience a connection close, reset, or other - communications failure due to circumstances not under their control - (in violation of the intent of this specification but sometimes - unavoidable) SHOULD, to maintain the robustness of the mail system, - treat the mail transaction as if a 451 response had been received and - act accordingly. - -3.10 Mailing Lists and Aliases - - An SMTP-capable host SHOULD support both the alias and the list - models of address expansion for multiple delivery. When a message is - delivered or forwarded to each address of an expanded list form, the - return address in the envelope ("MAIL FROM:") MUST be changed to be - the address of a person or other entity who administers the list. - However, in this case, the message header [32] MUST be left - unchanged; in particular, the "From" field of the message header is - unaffected. - - An important mail facility is a mechanism for multi-destination - delivery of a single message, by transforming (or "expanding" or - "exploding") a pseudo-mailbox address into a list of destination - mailbox addresses. When a message is sent to such a pseudo-mailbox - (sometimes called an "exploder"), copies are forwarded or - redistributed to each mailbox in the expanded list. Servers SHOULD - simply utilize the addresses on the list; application of heuristics - or other matching rules to eliminate some addresses, such as that of - the originator, is strongly discouraged. We classify such a pseudo- - mailbox as an "alias" or a "list", depending upon the expansion - rules. - -3.10.1 Alias - - To expand an alias, the recipient mailer simply replaces the pseudo- - mailbox address in the envelope with each of the expanded addresses - in turn; the rest of the envelope and the message body are left - unchanged. The message is then delivered or forwarded to each - expanded address. - -3.10.2 List - - A mailing list may be said to operate by "redistribution" rather than - by "forwarding". To expand a list, the recipient mailer replaces the - pseudo-mailbox address in the envelope with all of the expanded - - - -Klensin Standards Track [Page 28] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - addresses. The return address in the envelope is changed so that all - error messages generated by the final deliveries will be returned to - a list administrator, not to the message originator, who generally - has no control over the contents of the list and will typically find - error messages annoying. - -4. The SMTP Specifications - -4.1 SMTP Commands - -4.1.1 Command Semantics and Syntax - - The SMTP commands define the mail transfer or the mail system - function requested by the user. SMTP commands are character strings - terminated by <CRLF>. The commands themselves are alphabetic - characters terminated by <SP> if parameters follow and <CRLF> - otherwise. (In the interest of improved interoperability, SMTP - receivers are encouraged to tolerate trailing white space before the - terminating <CRLF>.) The syntax of the local part of a mailbox must - conform to receiver site conventions and the syntax specified in - section 4.1.2. The SMTP commands are discussed below. The SMTP - replies are discussed in section 4.2. - - A mail transaction involves several data objects which are - communicated as arguments to different commands. The reverse-path is - the argument of the MAIL command, the forward-path is the argument of - the RCPT command, and the mail data is the argument of the DATA - command. These arguments or data objects must be transmitted and - held pending the confirmation communicated by the end of mail data - indication which finalizes the transaction. The model for this is - that distinct buffers are provided to hold the types of data objects, - that is, there is a reverse-path buffer, a forward-path buffer, and a - mail data buffer. Specific commands cause information to be appended - to a specific buffer, or cause one or more buffers to be cleared. - - Several commands (RSET, DATA, QUIT) are specified as not permitting - parameters. In the absence of specific extensions offered by the - server and accepted by the client, clients MUST NOT send such - parameters and servers SHOULD reject commands containing them as - having invalid syntax. - -4.1.1.1 Extended HELLO (EHLO) or HELLO (HELO) - - These commands are used to identify the SMTP client to the SMTP - server. The argument field contains the fully-qualified domain name - of the SMTP client if one is available. In situations in which the - SMTP client system does not have a meaningful domain name (e.g., when - its address is dynamically allocated and no reverse mapping record is - - - -Klensin Standards Track [Page 29] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - available), the client SHOULD send an address literal (see section - 4.1.3), optionally followed by information that will help to identify - the client system. y The SMTP server identifies itself to the SMTP - client in the connection greeting reply and in the response to this - command. - - A client SMTP SHOULD start an SMTP session by issuing the EHLO - command. If the SMTP server supports the SMTP service extensions it - will give a successful response, a failure response, or an error - response. If the SMTP server, in violation of this specification, - does not support any SMTP service extensions it will generate an - error response. Older client SMTP systems MAY, as discussed above, - use HELO (as specified in RFC 821) instead of EHLO, and servers MUST - support the HELO command and reply properly to it. In any event, a - client MUST issue HELO or EHLO before starting a mail transaction. - - These commands, and a "250 OK" reply to one of them, confirm that - both the SMTP client and the SMTP server are in the initial state, - that is, there is no transaction in progress and all state tables and - buffers are cleared. - - Syntax: - - ehlo = "EHLO" SP Domain CRLF - helo = "HELO" SP Domain CRLF - - Normally, the response to EHLO will be a multiline reply. Each line - of the response contains a keyword and, optionally, one or more - parameters. Following the normal syntax for multiline replies, these - keyworks follow the code (250) and a hyphen for all but the last - line, and the code and a space for the last line. The syntax for a - positive response, using the ABNF notation and terminal symbols of - [8], is: - - ehlo-ok-rsp = ( "250" domain [ SP ehlo-greet ] CRLF ) - / ( "250-" domain [ SP ehlo-greet ] CRLF - *( "250-" ehlo-line CRLF ) - "250" SP ehlo-line CRLF ) - - ehlo-greet = 1*(%d0-9 / %d11-12 / %d14-127) - ; string of any characters other than CR or LF - - ehlo-line = ehlo-keyword *( SP ehlo-param ) - - ehlo-keyword = (ALPHA / DIGIT) *(ALPHA / DIGIT / "-") - ; additional syntax of ehlo-params depends on - ; ehlo-keyword - - - - -Klensin Standards Track [Page 30] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - ehlo-param = 1*(%d33-127) - ; any CHAR excluding <SP> and all - ; control characters (US-ASCII 0-31 inclusive) - - Although EHLO keywords may be specified in upper, lower, or mixed - case, they MUST always be recognized and processed in a case- - insensitive manner. This is simply an extension of practices - specified in RFC 821 and section 2.4.1. - -4.1.1.2 MAIL (MAIL) - - This command is used to initiate a mail transaction in which the mail - data is delivered to an SMTP server which may, in turn, deliver it to - one or more mailboxes or pass it on to another system (possibly using - SMTP). The argument field contains a reverse-path and may contain - optional parameters. In general, the MAIL command may be sent only - when no mail transaction is in progress, see section 4.1.4. - - The reverse-path consists of the sender mailbox. Historically, that - mailbox might optionally have been preceded by a list of hosts, but - that behavior is now deprecated (see appendix C). In some types of - reporting messages for which a reply is likely to cause a mail loop - (for example, mail delivery and nondelivery notifications), the - reverse-path may be null (see section 3.7). - - This command clears the reverse-path buffer, the forward-path buffer, - and the mail data buffer; and inserts the reverse-path information - from this command into the reverse-path buffer. - - If service extensions were negotiated, the MAIL command may also - carry parameters associated with a particular service extension. - - Syntax: - - "MAIL FROM:" ("<>" / Reverse-Path) - [SP Mail-parameters] CRLF - -4.1.1.3 RECIPIENT (RCPT) - - This command is used to identify an individual recipient of the mail - data; multiple recipients are specified by multiple use of this - command. The argument field contains a forward-path and may contain - optional parameters. - - The forward-path normally consists of the required destination - mailbox. Sending systems SHOULD not generate the optional list of - hosts known as a source route. Receiving systems MUST recognize - - - - -Klensin Standards Track [Page 31] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - source route syntax but SHOULD strip off the source route - specification and utilize the domain name associated with the mailbox - as if the source route had not been provided. - - Similarly, relay hosts SHOULD strip or ignore source routes, and - names MUST NOT be copied into the reverse-path. When mail reaches - its ultimate destination (the forward-path contains only a - destination mailbox), the SMTP server inserts it into the destination - mailbox in accordance with its host mail conventions. - - For example, mail received at relay host xyz.com with envelope - commands - - MAIL FROM:<userx@y.foo.org> - RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org> - - will normally be sent directly on to host d.bar.org with envelope - commands - - MAIL FROM:<userx@y.foo.org> - RCPT TO:<userc@d.bar.org> - - As provided in appendix C, xyz.com MAY also choose to relay the - message to hosta.int, using the envelope commands - - MAIL FROM:<userx@y.foo.org> - RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org> - - or to jkl.org, using the envelope commands - - MAIL FROM:<userx@y.foo.org> - RCPT TO:<@jkl.org:userc@d.bar.org> - - Of course, since hosts are not required to relay mail at all, xyz.com - may also reject the message entirely when the RCPT command is - received, using a 550 code (since this is a "policy reason"). - - If service extensions were negotiated, the RCPT command may also - carry parameters associated with a particular service extension - offered by the server. The client MUST NOT transmit parameters other - than those associated with a service extension offered by the server - in its EHLO response. - -Syntax: - "RCPT TO:" ("<Postmaster@" domain ">" / "<Postmaster>" / Forward-Path) - [SP Rcpt-parameters] CRLF - - - - - -Klensin Standards Track [Page 32] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -4.1.1.4 DATA (DATA) - - The receiver normally sends a 354 response to DATA, and then treats - the lines (strings ending in <CRLF> sequences, as described in - section 2.3.7) following the command as mail data from the sender. - This command causes the mail data to be appended to the mail data - buffer. The mail data may contain any of the 128 ASCII character - codes, although experience has indicated that use of control - characters other than SP, HT, CR, and LF may cause problems and - SHOULD be avoided when possible. - - The mail data is terminated by a line containing only a period, that - is, the character sequence "<CRLF>.<CRLF>" (see section 4.5.2). This - is the end of mail data indication. Note that the first <CRLF> of - this terminating sequence is also the <CRLF> that ends the final line - of the data (message text) or, if there was no data, ends the DATA - command itself. An extra <CRLF> MUST NOT be added, as that would - cause an empty line to be added to the message. The only exception - to this rule would arise if the message body were passed to the - originating SMTP-sender with a final "line" that did not end in - <CRLF>; in that case, the originating SMTP system MUST either reject - the message as invalid or add <CRLF> in order to have the receiving - SMTP server recognize the "end of data" condition. - - The custom of accepting lines ending only in <LF>, as a concession to - non-conforming behavior on the part of some UNIX systems, has proven - to cause more interoperability problems than it solves, and SMTP - server systems MUST NOT do this, even in the name of improved - robustness. In particular, the sequence "<LF>.<LF>" (bare line - feeds, without carriage returns) MUST NOT be treated as equivalent to - <CRLF>.<CRLF> as the end of mail data indication. - - Receipt of the end of mail data indication requires the server to - process the stored mail transaction information. This processing - consumes the information in the reverse-path buffer, the forward-path - buffer, and the mail data buffer, and on the completion of this - command these buffers are cleared. If the processing is successful, - the receiver MUST send an OK reply. If the processing fails the - receiver MUST send a failure reply. The SMTP model does not allow - for partial failures at this point: either the message is accepted by - the server for delivery and a positive response is returned or it is - not accepted and a failure reply is returned. In sending a positive - completion reply to the end of data indication, the receiver takes - full responsibility for the message (see section 6.1). Errors that - are diagnosed subsequently MUST be reported in a mail message, as - discussed in section 4.4. - - - - - -Klensin Standards Track [Page 33] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - When the SMTP server accepts a message either for relaying or for - final delivery, it inserts a trace record (also referred to - interchangeably as a "time stamp line" or "Received" line) at the top - of the mail data. This trace record indicates the identity of the - host that sent the message, the identity of the host that received - the message (and is inserting this time stamp), and the date and time - the message was received. Relayed messages will have multiple time - stamp lines. Details for formation of these lines, including their - syntax, is specified in section 4.4. - - Additional discussion about the operation of the DATA command appears - in section 3.3. - - Syntax: - "DATA" CRLF - -4.1.1.5 RESET (RSET) - - This command specifies that the current mail transaction will be - aborted. Any stored sender, recipients, and mail data MUST be - discarded, and all buffers and state tables cleared. The receiver - MUST send a "250 OK" reply to a RSET command with no arguments. A - reset command may be issued by the client at any time. It is - effectively equivalent to a NOOP (i.e., if has no effect) if issued - immediately after EHLO, before EHLO is issued in the session, after - an end-of-data indicator has been sent and acknowledged, or - immediately before a QUIT. An SMTP server MUST NOT close the - connection as the result of receiving a RSET; that action is reserved - for QUIT (see section 4.1.1.10). - - Since EHLO implies some additional processing and response by the - server, RSET will normally be more efficient than reissuing that - command, even though the formal semantics are the same. - - There are circumstances, contrary to the intent of this - specification, in which an SMTP server may receive an indication that - the underlying TCP connection has been closed or reset. To preserve - the robustness of the mail system, SMTP servers SHOULD be prepared - for this condition and SHOULD treat it as if a QUIT had been received - before the connection disappeared. - - Syntax: - "RSET" CRLF - - - - - - - - -Klensin Standards Track [Page 34] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -4.1.1.6 VERIFY (VRFY) - - This command asks the receiver to confirm that the argument - identifies a user or mailbox. If it is a user name, information is - returned as specified in section 3.5. - - This command has no effect on the reverse-path buffer, the forward- - path buffer, or the mail data buffer. - - Syntax: - "VRFY" SP String CRLF - -4.1.1.7 EXPAND (EXPN) - - This command asks the receiver to confirm that the argument - identifies a mailing list, and if so, to return the membership of - that list. If the command is successful, a reply is returned - containing information as described in section 3.5. This reply will - have multiple lines except in the trivial case of a one-member list. - - This command has no effect on the reverse-path buffer, the forward- - path buffer, or the mail data buffer and may be issued at any time. - - Syntax: - "EXPN" SP String CRLF - -4.1.1.8 HELP (HELP) - - This command causes the server to send helpful information to the - client. The command MAY take an argument (e.g., any command name) - and return more specific information as a response. - - This command has no effect on the reverse-path buffer, the forward- - path buffer, or the mail data buffer and may be issued at any time. - - SMTP servers SHOULD support HELP without arguments and MAY support it - with arguments. - - Syntax: - "HELP" [ SP String ] CRLF - -4.1.1.9 NOOP (NOOP) - - This command does not affect any parameters or previously entered - commands. It specifies no action other than that the receiver send - an OK reply. - - - - - -Klensin Standards Track [Page 35] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - This command has no effect on the reverse-path buffer, the forward- - path buffer, or the mail data buffer and may be issued at any time. - If a parameter string is specified, servers SHOULD ignore it. - - Syntax: - "NOOP" [ SP String ] CRLF - -4.1.1.10 QUIT (QUIT) - - This command specifies that the receiver MUST send an OK reply, and - then close the transmission channel. - - The receiver MUST NOT intentionally close the transmission channel - until it receives and replies to a QUIT command (even if there was an - error). The sender MUST NOT intentionally close the transmission - channel until it sends a QUIT command and SHOULD wait until it - receives the reply (even if there was an error response to a previous - command). If the connection is closed prematurely due to violations - of the above or system or network failure, the server MUST cancel any - pending transaction, but not undo any previously completed - transaction, and generally MUST act as if the command or transaction - in progress had received a temporary error (i.e., a 4yz response). - - The QUIT command may be issued at any time. - - Syntax: - "QUIT" CRLF - -4.1.2 Command Argument Syntax - - The syntax of the argument fields of the above commands (using the - syntax specified in [8] where applicable) is given below. Some of - the productions given below are used only in conjunction with source - routes as described in appendix C. Terminals not defined in this - document, such as ALPHA, DIGIT, SP, CR, LF, CRLF, are as defined in - the "core" syntax [8 (section 6)] or in the message format syntax - [32]. - - Reverse-path = Path - Forward-path = Path - Path = "<" [ A-d-l ":" ] Mailbox ">" - A-d-l = At-domain *( "," A-d-l ) - ; Note that this form, the so-called "source route", - ; MUST BE accepted, SHOULD NOT be generated, and SHOULD be - ; ignored. - At-domain = "@" domain - Mail-parameters = esmtp-param *(SP esmtp-param) - Rcpt-parameters = esmtp-param *(SP esmtp-param) - - - -Klensin Standards Track [Page 36] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - esmtp-param = esmtp-keyword ["=" esmtp-value] - esmtp-keyword = (ALPHA / DIGIT) *(ALPHA / DIGIT / "-") - esmtp-value = 1*(%d33-60 / %d62-127) - ; any CHAR excluding "=", SP, and control characters - Keyword = Ldh-str - Argument = Atom - Domain = (sub-domain 1*("." sub-domain)) / address-literal - sub-domain = Let-dig [Ldh-str] - - address-literal = "[" IPv4-address-literal / - IPv6-address-literal / - General-address-literal "]" - ; See section 4.1.3 - - Mailbox = Local-part "@" Domain - - Local-part = Dot-string / Quoted-string - ; MAY be case-sensitive - - Dot-string = Atom *("." Atom) - - Atom = 1*atext - - Quoted-string = DQUOTE *qcontent DQUOTE - - String = Atom / Quoted-string - - While the above definition for Local-part is relatively permissive, - for maximum interoperability, a host that expects to receive mail - SHOULD avoid defining mailboxes where the Local-part requires (or - uses) the Quoted-string form or where the Local-part is case- - sensitive. For any purposes that require generating or comparing - Local-parts (e.g., to specific mailbox names), all quoted forms MUST - be treated as equivalent and the sending system SHOULD transmit the - form that uses the minimum quoting possible. - - Systems MUST NOT define mailboxes in such a way as to require the use - in SMTP of non-ASCII characters (octets with the high order bit set - to one) or ASCII "control characters" (decimal value 0-31 and 127). - These characters MUST NOT be used in MAIL or RCPT commands or other - commands that require mailbox names. - - Note that the backslash, "\", is a quote character, which is used to - indicate that the next character is to be used literally (instead of - its normal interpretation). For example, "Joe\,Smith" indicates a - single nine character user field with the comma being the fourth - character of the field. - - - - -Klensin Standards Track [Page 37] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - To promote interoperability and consistent with long-standing - guidance about conservative use of the DNS in naming and applications - (e.g., see section 2.3.1 of the base DNS document, RFC1035 [22]), - characters outside the set of alphas, digits, and hyphen MUST NOT - appear in domain name labels for SMTP clients or servers. In - particular, the underscore character is not permitted. SMTP servers - that receive a command in which invalid character codes have been - employed, and for which there are no other reasons for rejection, - MUST reject that command with a 501 response. - -4.1.3 Address Literals - - Sometimes a host is not known to the domain name system and - communication (and, in particular, communication to report and repair - the error) is blocked. To bypass this barrier a special literal form - of the address is allowed as an alternative to a domain name. For - IPv4 addresses, this form uses four small decimal integers separated - by dots and enclosed by brackets such as [123.255.37.2], which - indicates an (IPv4) Internet Address in sequence-of-octets form. For - IPv6 and other forms of addressing that might eventually be - standardized, the form consists of a standardized "tag" that - identifies the address syntax, a colon, and the address itself, in a - format specified as part of the IPv6 standards [17]. - - Specifically: - - IPv4-address-literal = Snum 3("." Snum) - IPv6-address-literal = "IPv6:" IPv6-addr - General-address-literal = Standardized-tag ":" 1*dcontent - Standardized-tag = Ldh-str - ; MUST be specified in a standards-track RFC - ; and registered with IANA - - Snum = 1*3DIGIT ; representing a decimal integer - ; value in the range 0 through 255 - Let-dig = ALPHA / DIGIT - Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig - - IPv6-addr = IPv6-full / IPv6-comp / IPv6v4-full / IPv6v4-comp - IPv6-hex = 1*4HEXDIG - IPv6-full = IPv6-hex 7(":" IPv6-hex) - IPv6-comp = [IPv6-hex *5(":" IPv6-hex)] "::" [IPv6-hex *5(":" - IPv6-hex)] - ; The "::" represents at least 2 16-bit groups of zeros - ; No more than 6 groups in addition to the "::" may be - ; present - IPv6v4-full = IPv6-hex 5(":" IPv6-hex) ":" IPv4-address-literal - IPv6v4-comp = [IPv6-hex *3(":" IPv6-hex)] "::" - - - -Klensin Standards Track [Page 38] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - [IPv6-hex *3(":" IPv6-hex) ":"] IPv4-address-literal - ; The "::" represents at least 2 16-bit groups of zeros - ; No more than 4 groups in addition to the "::" and - ; IPv4-address-literal may be present - -4.1.4 Order of Commands - - There are restrictions on the order in which these commands may be - used. - - A session that will contain mail transactions MUST first be - initialized by the use of the EHLO command. An SMTP server SHOULD - accept commands for non-mail transactions (e.g., VRFY or EXPN) - without this initialization. - - An EHLO command MAY be issued by a client later in the session. If - it is issued after the session begins, the SMTP server MUST clear all - buffers and reset the state exactly as if a RSET command had been - issued. In other words, the sequence of RSET followed immediately by - EHLO is redundant, but not harmful other than in the performance cost - of executing unnecessary commands. - - If the EHLO command is not acceptable to the SMTP server, 501, 500, - or 502 failure replies MUST be returned as appropriate. The SMTP - server MUST stay in the same state after transmitting these replies - that it was in before the EHLO was received. - - The SMTP client MUST, if possible, ensure that the domain parameter - to the EHLO command is a valid principal host name (not a CNAME or MX - name) for its host. If this is not possible (e.g., when the client's - address is dynamically assigned and the client does not have an - obvious name), an address literal SHOULD be substituted for the - domain name and supplemental information provided that will assist in - identifying the client. - - An SMTP server MAY verify that the domain name parameter in the EHLO - command actually corresponds to the IP address of the client. - However, the server MUST NOT refuse to accept a message for this - reason if the verification fails: the information about verification - failure is for logging and tracing only. - - The NOOP, HELP, EXPN, VRFY, and RSET commands can be used at any time - during a session, or without previously initializing a session. SMTP - servers SHOULD process these normally (that is, not return a 503 - code) even if no EHLO command has yet been received; clients SHOULD - open a session with EHLO before sending these commands. - - - - - -Klensin Standards Track [Page 39] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - If these rules are followed, the example in RFC 821 that shows "550 - access denied to you" in response to an EXPN command is incorrect - unless an EHLO command precedes the EXPN or the denial of access is - based on the client's IP address or other authentication or - authorization-determining mechanisms. - - The MAIL command (or the obsolete SEND, SOML, or SAML commands) - begins a mail transaction. Once started, a mail transaction consists - of a transaction beginning command, one or more RCPT commands, and a - DATA command, in that order. A mail transaction may be aborted by - the RSET (or a new EHLO) command. There may be zero or more - transactions in a session. MAIL (or SEND, SOML, or SAML) MUST NOT be - sent if a mail transaction is already open, i.e., it should be sent - only if no mail transaction had been started in the session, or it - the previous one successfully concluded with a successful DATA - command, or if the previous one was aborted with a RSET. - - If the transaction beginning command argument is not acceptable, a - 501 failure reply MUST be returned and the SMTP server MUST stay in - the same state. If the commands in a transaction are out of order to - the degree that they cannot be processed by the server, a 503 failure - reply MUST be returned and the SMTP server MUST stay in the same - state. - - The last command in a session MUST be the QUIT command. The QUIT - command cannot be used at any other time in a session, but SHOULD be - used by the client SMTP to request connection closure, even when no - session opening command was sent and accepted. - -4.1.5 Private-use Commands - - As specified in section 2.2.2, commands starting in "X" may be used - by bilateral agreement between the client (sending) and server - (receiving) SMTP agents. An SMTP server that does not recognize such - a command is expected to reply with "500 Command not recognized". An - extended SMTP server MAY list the feature names associated with these - private commands in the response to the EHLO command. - - Commands sent or accepted by SMTP systems that do not start with "X" - MUST conform to the requirements of section 2.2.2. - -4.2 SMTP Replies - - Replies to SMTP commands serve to ensure the synchronization of - requests and actions in the process of mail transfer and to guarantee - that the SMTP client always knows the state of the SMTP server. - Every command MUST generate exactly one reply. - - - - -Klensin Standards Track [Page 40] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - The details of the command-reply sequence are described in section - 4.3. - - An SMTP reply consists of a three digit number (transmitted as three - numeric characters) followed by some text unless specified otherwise - in this document. The number is for use by automata to determine - what state to enter next; the text is for the human user. The three - digits contain enough encoded information that the SMTP client need - not examine the text and may either discard it or pass it on to the - user, as appropriate. Exceptions are as noted elsewhere in this - document. In particular, the 220, 221, 251, 421, and 551 reply codes - are associated with message text that must be parsed and interpreted - by machines. In the general case, the text may be receiver dependent - and context dependent, so there are likely to be varying texts for - each reply code. A discussion of the theory of reply codes is given - in section 4.2.1. Formally, a reply is defined to be the sequence: a - three-digit code, <SP>, one line of text, and <CRLF>, or a multiline - reply (as defined in section 4.2.1). Since, in violation of this - specification, the text is sometimes not sent, clients which do not - receive it SHOULD be prepared to process the code alone (with or - without a trailing space character). Only the EHLO, EXPN, and HELP - commands are expected to result in multiline replies in normal - circumstances, however, multiline replies are allowed for any - command. - - In ABNF, server responses are: - - Greeting = "220 " Domain [ SP text ] CRLF - Reply-line = Reply-code [ SP text ] CRLF - - where "Greeting" appears only in the 220 response that announces that - the server is opening its part of the connection. - - An SMTP server SHOULD send only the reply codes listed in this - document. An SMTP server SHOULD use the text shown in the examples - whenever appropriate. - - An SMTP client MUST determine its actions only by the reply code, not - by the text (except for the "change of address" 251 and 551 and, if - necessary, 220, 221, and 421 replies); in the general case, any text, - including no text at all (although senders SHOULD NOT send bare - codes), MUST be acceptable. The space (blank) following the reply - code is considered part of the text. Whenever possible, a receiver- - SMTP SHOULD test the first digit (severity indication) of the reply - code. - - - - - - -Klensin Standards Track [Page 41] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - The list of codes that appears below MUST NOT be construed as - permanent. While the addition of new codes should be a rare and - significant activity, with supplemental information in the textual - part of the response being preferred, new codes may be added as the - result of new Standards or Standards-track specifications. - Consequently, a sender-SMTP MUST be prepared to handle codes not - specified in this document and MUST do so by interpreting the first - digit only. - -4.2.1 Reply Code Severities and Theory - - The three digits of the reply each have a special significance. The - first digit denotes whether the response is good, bad or incomplete. - An unsophisticated SMTP client, or one that receives an unexpected - code, will be able to determine its next action (proceed as planned, - redo, retrench, etc.) by examining this first digit. An SMTP client - that wants to know approximately what kind of error occurred (e.g., - mail system error, command syntax error) may examine the second - digit. The third digit and any supplemental information that may be - present is reserved for the finest gradation of information. - - There are five values for the first digit of the reply code: - - 1yz Positive Preliminary reply - The command has been accepted, but the requested action is being - held in abeyance, pending confirmation of the information in this - reply. The SMTP client should send another command specifying - whether to continue or abort the action. Note: unextended SMTP - does not have any commands that allow this type of reply, and so - does not have continue or abort commands. - - 2yz Positive Completion reply - The requested action has been successfully completed. A new - request may be initiated. - - 3yz Positive Intermediate reply - The command has been accepted, but the requested action is being - held in abeyance, pending receipt of further information. The - SMTP client should send another command specifying this - information. This reply is used in command sequence groups (i.e., - in DATA). - - 4yz Transient Negative Completion reply - The command was not accepted, and the requested action did not - occur. However, the error condition is temporary and the action - may be requested again. The sender should return to the beginning - of the command sequence (if any). It is difficult to assign a - meaning to "transient" when two different sites (receiver- and - - - -Klensin Standards Track [Page 42] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - sender-SMTP agents) must agree on the interpretation. Each reply - in this category might have a different time value, but the SMTP - client is encouraged to try again. A rule of thumb to determine - whether a reply fits into the 4yz or the 5yz category (see below) - is that replies are 4yz if they can be successful if repeated - without any change in command form or in properties of the sender - or receiver (that is, the command is repeated identically and the - receiver does not put up a new implementation.) - - 5yz Permanent Negative Completion reply - The command was not accepted and the requested action did not - occur. The SMTP client is discouraged from repeating the exact - request (in the same sequence). Even some "permanent" error - conditions can be corrected, so the human user may want to direct - the SMTP client to reinitiate the command sequence by direct - action at some point in the future (e.g., after the spelling has - been changed, or the user has altered the account status). - - The second digit encodes responses in specific categories: - - x0z Syntax: These replies refer to syntax errors, syntactically - correct commands that do not fit any functional category, and - unimplemented or superfluous commands. - - x1z Information: These are replies to requests for information, - such as status or help. - - x2z Connections: These are replies referring to the transmission - channel. - - x3z Unspecified. - - x4z Unspecified. - - x5z Mail system: These replies indicate the status of the receiver - mail system vis-a-vis the requested transfer or other mail system - action. - - The third digit gives a finer gradation of meaning in each category - specified by the second digit. The list of replies illustrates this. - Each reply text is recommended rather than mandatory, and may even - change according to the command with which it is associated. On the - other hand, the reply codes must strictly follow the specifications - in this section. Receiver implementations should not invent new - codes for slightly different situations from the ones described here, - but rather adapt codes already defined. - - - - - -Klensin Standards Track [Page 43] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - For example, a command such as NOOP, whose successful execution does - not offer the SMTP client any new information, will return a 250 - reply. The reply is 502 when the command requests an unimplemented - non-site-specific action. A refinement of that is the 504 reply for - a command that is implemented, but that requests an unimplemented - parameter. - - The reply text may be longer than a single line; in these cases the - complete text must be marked so the SMTP client knows when it can - stop reading the reply. This requires a special format to indicate a - multiple line reply. - - The format for multiline replies requires that every line, except the - last, begin with the reply code, followed immediately by a hyphen, - "-" (also known as minus), followed by text. The last line will - begin with the reply code, followed immediately by <SP>, optionally - some text, and <CRLF>. As noted above, servers SHOULD send the <SP> - if subsequent text is not sent, but clients MUST be prepared for it - to be omitted. - - For example: - - 123-First line - 123-Second line - 123-234 text beginning with numbers - 123 The last line - - In many cases the SMTP client then simply needs to search for a line - beginning with the reply code followed by <SP> or <CRLF> and ignore - all preceding lines. In a few cases, there is important data for the - client in the reply "text". The client will be able to identify - these cases from the current context. - -4.2.2 Reply Codes by Function Groups - - 500 Syntax error, command unrecognized - (This may include errors such as command line too long) - 501 Syntax error in parameters or arguments - 502 Command not implemented (see section 4.2.4) - 503 Bad sequence of commands - 504 Command parameter not implemented - - 211 System status, or system help reply - 214 Help message - (Information on how to use the receiver or the meaning of a - particular non-standard command; this reply is useful only - to the human user) - - - - -Klensin Standards Track [Page 44] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - 220 <domain> Service ready - 221 <domain> Service closing transmission channel - 421 <domain> Service not available, closing transmission channel - (This may be a reply to any command if the service knows it - must shut down) - - 250 Requested mail action okay, completed - 251 User not local; will forward to <forward-path> - (See section 3.4) - 252 Cannot VRFY user, but will accept message and attempt - delivery - (See section 3.5.3) - 450 Requested mail action not taken: mailbox unavailable - (e.g., mailbox busy) - 550 Requested action not taken: mailbox unavailable - (e.g., mailbox not found, no access, or command rejected - for policy reasons) - 451 Requested action aborted: error in processing - 551 User not local; please try <forward-path> - (See section 3.4) - 452 Requested action not taken: insufficient system storage - 552 Requested mail action aborted: exceeded storage allocation - 553 Requested action not taken: mailbox name not allowed - (e.g., mailbox syntax incorrect) - 354 Start mail input; end with <CRLF>.<CRLF> - 554 Transaction failed (Or, in the case of a connection-opening - response, "No SMTP service here") - -4.2.3 Reply Codes in Numeric Order - - 211 System status, or system help reply - 214 Help message - (Information on how to use the receiver or the meaning of a - particular non-standard command; this reply is useful only - to the human user) - 220 <domain> Service ready - 221 <domain> Service closing transmission channel - 250 Requested mail action okay, completed - 251 User not local; will forward to <forward-path> - (See section 3.4) - 252 Cannot VRFY user, but will accept message and attempt - delivery - (See section 3.5.3) - - 354 Start mail input; end with <CRLF>.<CRLF> - - - - - - -Klensin Standards Track [Page 45] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - 421 <domain> Service not available, closing transmission channel - (This may be a reply to any command if the service knows it - must shut down) - 450 Requested mail action not taken: mailbox unavailable - (e.g., mailbox busy) - 451 Requested action aborted: local error in processing - 452 Requested action not taken: insufficient system storage - 500 Syntax error, command unrecognized - (This may include errors such as command line too long) - 501 Syntax error in parameters or arguments - 502 Command not implemented (see section 4.2.4) - 503 Bad sequence of commands - 504 Command parameter not implemented - 550 Requested action not taken: mailbox unavailable - (e.g., mailbox not found, no access, or command rejected - for policy reasons) - 551 User not local; please try <forward-path> - (See section 3.4) - 552 Requested mail action aborted: exceeded storage allocation - 553 Requested action not taken: mailbox name not allowed - (e.g., mailbox syntax incorrect) - 554 Transaction failed (Or, in the case of a connection-opening - response, "No SMTP service here") - -4.2.4 Reply Code 502 - - Questions have been raised as to when reply code 502 (Command not - implemented) SHOULD be returned in preference to other codes. 502 - SHOULD be used when the command is actually recognized by the SMTP - server, but not implemented. If the command is not recognized, code - 500 SHOULD be returned. Extended SMTP systems MUST NOT list - capabilities in response to EHLO for which they will return 502 (or - 500) replies. - -4.2.5 Reply Codes After DATA and the Subsequent <CRLF>.<CRLF> - - When an SMTP server returns a positive completion status (2yz code) - after the DATA command is completed with <CRLF>.<CRLF>, it accepts - responsibility for: - - - delivering the message (if the recipient mailbox exists), or - - - if attempts to deliver the message fail due to transient - conditions, retrying delivery some reasonable number of times at - intervals as specified in section 4.5.4. - - - - - - -Klensin Standards Track [Page 46] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - - if attempts to deliver the message fail due to permanent - conditions, or if repeated attempts to deliver the message fail - due to transient conditions, returning appropriate notification to - the sender of the original message (using the address in the SMTP - MAIL command). - - When an SMTP server returns a permanent error status (5yz) code after - the DATA command is completed with <CRLF>.<CRLF>, it MUST NOT make - any subsequent attempt to deliver that message. The SMTP client - retains responsibility for delivery of that message and may either - return it to the user or requeue it for a subsequent attempt (see - section 4.5.4.1). - - The user who originated the message SHOULD be able to interpret the - return of a transient failure status (by mail message or otherwise) - as a non-delivery indication, just as a permanent failure would be - interpreted. I.e., if the client SMTP successfully handles these - conditions, the user will not receive such a reply. - - When an SMTP server returns a permanent error status (5yz) code after - the DATA command is completely with <CRLF>.<CRLF>, it MUST NOT make - any subsequent attempt to deliver the message. As with temporary - error status codes, the SMTP client retains responsibility for the - message, but SHOULD not again attempt delivery to the same server - without user review and intervention of the message. - -4.3 Sequencing of Commands and Replies - -4.3.1 Sequencing Overview - - The communication between the sender and receiver is an alternating - dialogue, controlled by the sender. As such, the sender issues a - command and the receiver responds with a reply. Unless other - arrangements are negotiated through service extensions, the sender - MUST wait for this response before sending further commands. - - One important reply is the connection greeting. Normally, a receiver - will send a 220 "Service ready" reply when the connection is - completed. The sender SHOULD wait for this greeting message before - sending any commands. - - Note: all the greeting-type replies have the official name (the - fully-qualified primary domain name) of the server host as the first - word following the reply code. Sometimes the host will have no - meaningful name. See 4.1.3 for a discussion of alternatives in these - situations. - - - - - -Klensin Standards Track [Page 47] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - For example, - - 220 ISIF.USC.EDU Service ready - or - 220 mail.foo.com SuperSMTP v 6.1.2 Service ready - or - 220 [10.0.0.1] Clueless host service ready - - The table below lists alternative success and failure replies for - each command. These SHOULD be strictly adhered to: a receiver may - substitute text in the replies, but the meaning and action implied by - the code numbers and by the specific command reply sequence cannot be - altered. - -4.3.2 Command-Reply Sequences - - Each command is listed with its usual possible replies. The prefixes - used before the possible replies are "I" for intermediate, "S" for - success, and "E" for error. Since some servers may generate other - replies under special circumstances, and to allow for future - extension, SMTP clients SHOULD, when possible, interpret only the - first digit of the reply and MUST be prepared to deal with - unrecognized reply codes by interpreting the first digit only. - Unless extended using the mechanisms described in section 2.2, SMTP - servers MUST NOT transmit reply codes to an SMTP client that are - other than three digits or that do not start in a digit between 2 and - 5 inclusive. - - These sequencing rules and, in principle, the codes themselves, can - be extended or modified by SMTP extensions offered by the server and - accepted (requested) by the client. - - In addition to the codes listed below, any SMTP command can return - any of the following codes if the corresponding unusual circumstances - are encountered: - - 500 For the "command line too long" case or if the command name was - not recognized. Note that producing a "command not recognized" - error in response to the required subset of these commands is a - violation of this specification. - - 501 Syntax error in command or arguments. In order to provide for - future extensions, commands that are specified in this document as - not accepting arguments (DATA, RSET, QUIT) SHOULD return a 501 - message if arguments are supplied in the absence of EHLO- - advertised extensions. - - 421 Service shutting down and closing transmission channel - - - -Klensin Standards Track [Page 48] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - Specific sequences are: - - CONNECTION ESTABLISHMENT - S: 220 - E: 554 - EHLO or HELO - S: 250 - E: 504, 550 - MAIL - S: 250 - E: 552, 451, 452, 550, 553, 503 - RCPT - S: 250, 251 (but see section 3.4 for discussion of 251 and 551) - E: 550, 551, 552, 553, 450, 451, 452, 503, 550 - DATA - I: 354 -> data -> S: 250 - E: 552, 554, 451, 452 - E: 451, 554, 503 - RSET - S: 250 - VRFY - S: 250, 251, 252 - E: 550, 551, 553, 502, 504 - EXPN - S: 250, 252 - E: 550, 500, 502, 504 - HELP - S: 211, 214 - E: 502, 504 - NOOP - S: 250 - QUIT - S: 221 - -4.4 Trace Information - - When an SMTP server receives a message for delivery or further - processing, it MUST insert trace ("time stamp" or "Received") - information at the beginning of the message content, as discussed in - section 4.1.1.4. - - This line MUST be structured as follows: - - - The FROM field, which MUST be supplied in an SMTP environment, - SHOULD contain both (1) the name of the source host as presented - in the EHLO command and (2) an address literal containing the IP - address of the source, determined from the TCP connection. - - - - -Klensin Standards Track [Page 49] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - - The ID field MAY contain an "@" as suggested in RFC 822, but this - is not required. - - - The FOR field MAY contain a list of <path> entries when multiple - RCPT commands have been given. This may raise some security - issues and is usually not desirable; see section 7.2. - - An Internet mail program MUST NOT change a Received: line that was - previously added to the message header. SMTP servers MUST prepend - Received lines to messages; they MUST NOT change the order of - existing lines or insert Received lines in any other location. - - As the Internet grows, comparability of Received fields is important - for detecting problems, especially slow relays. SMTP servers that - create Received fields SHOULD use explicit offsets in the dates - (e.g., -0800), rather than time zone names of any type. Local time - (with an offset) is preferred to UT when feasible. This formulation - allows slightly more information about local circumstances to be - specified. If UT is needed, the receiver need merely do some simple - arithmetic to convert the values. Use of UT loses information about - the time zone-location of the server. If it is desired to supply a - time zone name, it SHOULD be included in a comment. - - When the delivery SMTP server makes the "final delivery" of a - message, it inserts a return-path line at the beginning of the mail - data. This use of return-path is required; mail systems MUST support - it. The return-path line preserves the information in the <reverse- - path> from the MAIL command. Here, final delivery means the message - has left the SMTP environment. Normally, this would mean it had been - delivered to the destination user or an associated mail drop, but in - some cases it may be further processed and transmitted by another - mail system. - - It is possible for the mailbox in the return path to be different - from the actual sender's mailbox, for example, if error responses are - to be delivered to a special error handling mailbox rather than to - the message sender. When mailing lists are involved, this - arrangement is common and useful as a means of directing errors to - the list maintainer rather than the message originator. - - The text above implies that the final mail data will begin with a - return path line, followed by one or more time stamp lines. These - lines will be followed by the mail data headers and body [32]. - - It is sometimes difficult for an SMTP server to determine whether or - not it is making final delivery since forwarding or other operations - may occur after the message is accepted for delivery. Consequently, - - - - -Klensin Standards Track [Page 50] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - any further (forwarding, gateway, or relay) systems MAY remove the - return path and rebuild the MAIL command as needed to ensure that - exactly one such line appears in a delivered message. - - A message-originating SMTP system SHOULD NOT send a message that - already contains a Return-path header. SMTP servers performing a - relay function MUST NOT inspect the message data, and especially not - to the extent needed to determine if Return-path headers are present. - SMTP servers making final delivery MAY remove Return-path headers - before adding their own. - - The primary purpose of the Return-path is to designate the address to - which messages indicating non-delivery or other mail system failures - are to be sent. For this to be unambiguous, exactly one return path - SHOULD be present when the message is delivered. Systems using RFC - 822 syntax with non-SMTP transports SHOULD designate an unambiguous - address, associated with the transport envelope, to which error - reports (e.g., non-delivery messages) should be sent. - - Historical note: Text in RFC 822 that appears to contradict the use - of the Return-path header (or the envelope reverse path address from - the MAIL command) as the destination for error messages is not - applicable on the Internet. The reverse path address (as copied into - the Return-path) MUST be used as the target of any mail containing - delivery error messages. - - In particular: - - - a gateway from SMTP->elsewhere SHOULD insert a return-path header, - unless it is known that the "elsewhere" transport also uses - Internet domain addresses and maintains the envelope sender - address separately. - - - a gateway from elsewhere->SMTP SHOULD delete any return-path - header present in the message, and either copy that information to - the SMTP envelope or combine it with information present in the - envelope of the other transport system to construct the reverse - path argument to the MAIL command in the SMTP envelope. - - The server must give special treatment to cases in which the - processing following the end of mail data indication is only - partially successful. This could happen if, after accepting several - recipients and the mail data, the SMTP server finds that the mail - data could be successfully delivered to some, but not all, of the - recipients. In such cases, the response to the DATA command MUST be - an OK reply. However, the SMTP server MUST compose and send an - "undeliverable mail" notification message to the originator of the - message. - - - -Klensin Standards Track [Page 51] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - A single notification listing all of the failed recipients or - separate notification messages MUST be sent for each failed - recipient. For economy of processing by the sender, the former is - preferred when possible. All undeliverable mail notification - messages are sent using the MAIL command (even if they result from - processing the obsolete SEND, SOML, or SAML commands) and use a null - return path as discussed in section 3.7. - - The time stamp line and the return path line are formally defined as - follows: - -Return-path-line = "Return-Path:" FWS Reverse-path <CRLF> - -Time-stamp-line = "Received:" FWS Stamp <CRLF> - -Stamp = From-domain By-domain Opt-info ";" FWS date-time - - ; where "date-time" is as defined in [32] - ; but the "obs-" forms, especially two-digit - ; years, are prohibited in SMTP and MUST NOT be used. - -From-domain = "FROM" FWS Extended-Domain CFWS - -By-domain = "BY" FWS Extended-Domain CFWS - -Extended-Domain = Domain / - ( Domain FWS "(" TCP-info ")" ) / - ( Address-literal FWS "(" TCP-info ")" ) - -TCP-info = Address-literal / ( Domain FWS Address-literal ) - ; Information derived by server from TCP connection - ; not client EHLO. - -Opt-info = [Via] [With] [ID] [For] - -Via = "VIA" FWS Link CFWS - -With = "WITH" FWS Protocol CFWS - -ID = "ID" FWS String / msg-id CFWS - -For = "FOR" FWS 1*( Path / Mailbox ) CFWS - -Link = "TCP" / Addtl-Link -Addtl-Link = Atom - ; Additional standard names for links are registered with the - ; Internet Assigned Numbers Authority (IANA). "Via" is - ; primarily of value with non-Internet transports. SMTP - - - -Klensin Standards Track [Page 52] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - ; servers SHOULD NOT use unregistered names. -Protocol = "ESMTP" / "SMTP" / Attdl-Protocol -Attdl-Protocol = Atom - ; Additional standard names for protocols are registered with the - ; Internet Assigned Numbers Authority (IANA). SMTP servers - ; SHOULD NOT use unregistered names. - -4.5 Additional Implementation Issues - -4.5.1 Minimum Implementation - - In order to make SMTP workable, the following minimum implementation - is required for all receivers. The following commands MUST be - supported to conform to this specification: - - EHLO - HELO - MAIL - RCPT - DATA - RSET - NOOP - QUIT - VRFY - - Any system that includes an SMTP server supporting mail relaying or - delivery MUST support the reserved mailbox "postmaster" as a case- - insensitive local name. This postmaster address is not strictly - necessary if the server always returns 554 on connection opening (as - described in section 3.1). The requirement to accept mail for - postmaster implies that RCPT commands which specify a mailbox for - postmaster at any of the domains for which the SMTP server provides - mail service, as well as the special case of "RCPT TO:<Postmaster>" - (with no domain specification), MUST be supported. - - SMTP systems are expected to make every reasonable effort to accept - mail directed to Postmaster from any other system on the Internet. - In extreme cases --such as to contain a denial of service attack or - other breach of security-- an SMTP server may block mail directed to - Postmaster. However, such arrangements SHOULD be narrowly tailored - so as to avoid blocking messages which are not part of such attacks. - -4.5.2 Transparency - - Without some provision for data transparency, the character sequence - "<CRLF>.<CRLF>" ends the mail text and cannot be sent by the user. - In general, users are not aware of such "forbidden" sequences. To - - - - -Klensin Standards Track [Page 53] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - allow all user composed text to be transmitted transparently, the - following procedures are used: - - - Before sending a line of mail text, the SMTP client checks the - first character of the line. If it is a period, one additional - period is inserted at the beginning of the line. - - - When a line of mail text is received by the SMTP server, it checks - the line. If the line is composed of a single period, it is - treated as the end of mail indicator. If the first character is a - period and there are other characters on the line, the first - character is deleted. - - The mail data may contain any of the 128 ASCII characters. All - characters are to be delivered to the recipient's mailbox, including - spaces, vertical and horizontal tabs, and other control characters. - If the transmission channel provides an 8-bit byte (octet) data - stream, the 7-bit ASCII codes are transmitted right justified in the - octets, with the high order bits cleared to zero. See 3.7 for - special treatment of these conditions in SMTP systems serving a relay - function. - - In some systems it may be necessary to transform the data as it is - received and stored. This may be necessary for hosts that use a - different character set than ASCII as their local character set, that - store data in records rather than strings, or which use special - character sequences as delimiters inside mailboxes. If such - transformations are necessary, they MUST be reversible, especially if - they are applied to mail being relayed. - -4.5.3 Sizes and Timeouts - -4.5.3.1 Size limits and minimums - - There are several objects that have required minimum/maximum sizes. - Every implementation MUST be able to receive objects of at least - these sizes. Objects larger than these sizes SHOULD be avoided when - possible. However, some Internet mail constructs such as encoded - X.400 addresses [16] will often require larger objects: clients MAY - attempt to transmit these, but MUST be prepared for a server to - reject them if they cannot be handled by it. To the maximum extent - possible, implementation techniques which impose no limits on the - length of these objects should be used. - - local-part - The maximum total length of a user name or other local-part is 64 - characters. - - - - -Klensin Standards Track [Page 54] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - domain - The maximum total length of a domain name or number is 255 - characters. - - path - The maximum total length of a reverse-path or forward-path is 256 - characters (including the punctuation and element separators). - - command line - The maximum total length of a command line including the command - word and the <CRLF> is 512 characters. SMTP extensions may be - used to increase this limit. - - reply line - The maximum total length of a reply line including the reply code - and the <CRLF> is 512 characters. More information may be - conveyed through multiple-line replies. - - text line - The maximum total length of a text line including the <CRLF> is - 1000 characters (not counting the leading dot duplicated for - transparency). This number may be increased by the use of SMTP - Service Extensions. - - message content - The maximum total length of a message content (including any - message headers as well as the message body) MUST BE at least 64K - octets. Since the introduction of Internet standards for - multimedia mail [12], message lengths on the Internet have grown - dramatically, and message size restrictions should be avoided if - at all possible. SMTP server systems that must impose - restrictions SHOULD implement the "SIZE" service extension [18], - and SMTP client systems that will send large messages SHOULD - utilize it when possible. - - recipients buffer - The minimum total number of recipients that must be buffered is - 100 recipients. Rejection of messages (for excessive recipients) - with fewer than 100 RCPT commands is a violation of this - specification. The general principle that relaying SMTP servers - MUST NOT, and delivery SMTP servers SHOULD NOT, perform validation - tests on message headers suggests that rejecting a message based - on the total number of recipients shown in header fields is to be - discouraged. A server which imposes a limit on the number of - recipients MUST behave in an orderly fashion, such as to reject - additional addresses over its limit rather than silently - discarding addresses previously accepted. A client that needs to - - - - -Klensin Standards Track [Page 55] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - deliver a message containing over 100 RCPT commands SHOULD be - prepared to transmit in 100-recipient "chunks" if the server - declines to accept more than 100 recipients in a single message. - - Errors due to exceeding these limits may be reported by using the - reply codes. Some examples of reply codes are: - - 500 Line too long. - or - 501 Path too long - or - 452 Too many recipients (see below) - or - 552 Too much mail data. - - RFC 821 [30] incorrectly listed the error where an SMTP server - exhausts its implementation limit on the number of RCPT commands - ("too many recipients") as having reply code 552. The correct reply - code for this condition is 452. Clients SHOULD treat a 552 code in - this case as a temporary, rather than permanent, failure so the logic - below works. - - When a conforming SMTP server encounters this condition, it has at - least 100 successful RCPT commands in its recipients buffer. If the - server is able to accept the message, then at least these 100 - addresses will be removed from the SMTP client's queue. When the - client attempts retransmission of those addresses which received 452 - responses, at least 100 of these will be able to fit in the SMTP - server's recipients buffer. Each retransmission attempt which is - able to deliver anything will be able to dispose of at least 100 of - these recipients. - - If an SMTP server has an implementation limit on the number of RCPT - commands and this limit is exhausted, it MUST use a response code of - 452 (but the client SHOULD also be prepared for a 552, as noted - above). If the server has a configured site-policy limitation on the - number of RCPT commands, it MAY instead use a 5XX response code. - This would be most appropriate if the policy limitation was intended - to apply if the total recipient count for a particular message body - were enforced even if that message body was sent in multiple mail - transactions. - -4.5.3.2 Timeouts - - An SMTP client MUST provide a timeout mechanism. It MUST use per- - command timeouts rather than somehow trying to time the entire mail - transaction. Timeouts SHOULD be easily reconfigurable, preferably - without recompiling the SMTP code. To implement this, a timer is set - - - -Klensin Standards Track [Page 56] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - for each SMTP command and for each buffer of the data transfer. The - latter means that the overall timeout is inherently proportional to - the size of the message. - - Based on extensive experience with busy mail-relay hosts, the minimum - per-command timeout values SHOULD be as follows: - - Initial 220 Message: 5 minutes - An SMTP client process needs to distinguish between a failed TCP - connection and a delay in receiving the initial 220 greeting - message. Many SMTP servers accept a TCP connection but delay - delivery of the 220 message until their system load permits more - mail to be processed. - - MAIL Command: 5 minutes - - RCPT Command: 5 minutes - A longer timeout is required if processing of mailing lists and - aliases is not deferred until after the message was accepted. - - DATA Initiation: 2 minutes - This is while awaiting the "354 Start Input" reply to a DATA - command. - - Data Block: 3 minutes - This is while awaiting the completion of each TCP SEND call - transmitting a chunk of data. - - DATA Termination: 10 minutes. - This is while awaiting the "250 OK" reply. When the receiver gets - the final period terminating the message data, it typically - performs processing to deliver the message to a user mailbox. A - spurious timeout at this point would be very wasteful and would - typically result in delivery of multiple copies of the message, - since it has been successfully sent and the server has accepted - responsibility for delivery. See section 6.1 for additional - discussion. - - An SMTP server SHOULD have a timeout of at least 5 minutes while it - is awaiting the next command from the sender. - -4.5.4 Retry Strategies - - The common structure of a host SMTP implementation includes user - mailboxes, one or more areas for queuing messages in transit, and one - or more daemon processes for sending and receiving mail. The exact - structure will vary depending on the needs of the users on the host - - - - -Klensin Standards Track [Page 57] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - and the number and size of mailing lists supported by the host. We - describe several optimizations that have proved helpful, particularly - for mailers supporting high traffic levels. - - Any queuing strategy MUST include timeouts on all activities on a - per-command basis. A queuing strategy MUST NOT send error messages - in response to error messages under any circumstances. - -4.5.4.1 Sending Strategy - - The general model for an SMTP client is one or more processes that - periodically attempt to transmit outgoing mail. In a typical system, - the program that composes a message has some method for requesting - immediate attention for a new piece of outgoing mail, while mail that - cannot be transmitted immediately MUST be queued and periodically - retried by the sender. A mail queue entry will include not only the - message itself but also the envelope information. - - The sender MUST delay retrying a particular destination after one - attempt has failed. In general, the retry interval SHOULD be at - least 30 minutes; however, more sophisticated and variable strategies - will be beneficial when the SMTP client can determine the reason for - non-delivery. - - Retries continue until the message is transmitted or the sender gives - up; the give-up time generally needs to be at least 4-5 days. The - parameters to the retry algorithm MUST be configurable. - - A client SHOULD keep a list of hosts it cannot reach and - corresponding connection timeouts, rather than just retrying queued - mail items. - - Experience suggests that failures are typically transient (the target - system or its connection has crashed), favoring a policy of two - connection attempts in the first hour the message is in the queue, - and then backing off to one every two or three hours. - - The SMTP client can shorten the queuing delay in cooperation with the - SMTP server. For example, if mail is received from a particular - address, it is likely that mail queued for that host can now be sent. - Application of this principle may, in many cases, eliminate the - requirement for an explicit "send queues now" function such as ETRN - [9]. - - The strategy may be further modified as a result of multiple - addresses per host (see below) to optimize delivery time vs. resource - usage. - - - - -Klensin Standards Track [Page 58] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - An SMTP client may have a large queue of messages for each - unavailable destination host. If all of these messages were retried - in every retry cycle, there would be excessive Internet overhead and - the sending system would be blocked for a long period. Note that an - SMTP client can generally determine that a delivery attempt has - failed only after a timeout of several minutes and even a one-minute - timeout per connection will result in a very large delay if retries - are repeated for dozens, or even hundreds, of queued messages to the - same host. - - At the same time, SMTP clients SHOULD use great care in caching - negative responses from servers. In an extreme case, if EHLO is - issued multiple times during the same SMTP connection, different - answers may be returned by the server. More significantly, 5yz - responses to the MAIL command MUST NOT be cached. - - When a mail message is to be delivered to multiple recipients, and - the SMTP server to which a copy of the message is to be sent is the - same for multiple recipients, then only one copy of the message - SHOULD be transmitted. That is, the SMTP client SHOULD use the - command sequence: MAIL, RCPT, RCPT,... RCPT, DATA instead of the - sequence: MAIL, RCPT, DATA, ..., MAIL, RCPT, DATA. However, if there - are very many addresses, a limit on the number of RCPT commands per - MAIL command MAY be imposed. Implementation of this efficiency - feature is strongly encouraged. - - Similarly, to achieve timely delivery, the SMTP client MAY support - multiple concurrent outgoing mail transactions. However, some limit - may be appropriate to protect the host from devoting all its - resources to mail. - -4.5.4.2 Receiving Strategy - - The SMTP server SHOULD attempt to keep a pending listen on the SMTP - port at all times. This requires the support of multiple incoming - TCP connections for SMTP. Some limit MAY be imposed but servers that - cannot handle more than one SMTP transaction at a time are not in - conformance with the intent of this specification. - - As discussed above, when the SMTP server receives mail from a - particular host address, it could activate its own SMTP queuing - mechanisms to retry any mail pending for that host address. - -4.5.5 Messages with a null reverse-path - - There are several types of notification messages which are required - by existing and proposed standards to be sent with a null reverse - path, namely non-delivery notifications as discussed in section 3.7, - - - -Klensin Standards Track [Page 59] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - other kinds of Delivery Status Notifications (DSNs) [24], and also - Message Disposition Notifications (MDNs) [10]. All of these kinds of - messages are notifications about a previous message, and they are - sent to the reverse-path of the previous mail message. (If the - delivery of such a notification message fails, that usually indicates - a problem with the mail system of the host to which the notification - message is addressed. For this reason, at some hosts the MTA is set - up to forward such failed notification messages to someone who is - able to fix problems with the mail system, e.g., via the postmaster - alias.) - - All other types of messages (i.e., any message which is not required - by a standards-track RFC to have a null reverse-path) SHOULD be sent - with with a valid, non-null reverse-path. - - Implementors of automated email processors should be careful to make - sure that the various kinds of messages with null reverse-path are - handled correctly, in particular such systems SHOULD NOT reply to - messages with null reverse-path. - -5. Address Resolution and Mail Handling - - Once an SMTP client lexically identifies a domain to which mail will - be delivered for processing (as described in sections 3.6 and 3.7), a - DNS lookup MUST be performed to resolve the domain name [22]. The - names are expected to be fully-qualified domain names (FQDNs): - mechanisms for inferring FQDNs from partial names or local aliases - are outside of this specification and, due to a history of problems, - are generally discouraged. The lookup first attempts to locate an MX - record associated with the name. If a CNAME record is found instead, - the resulting name is processed as if it were the initial name. If - no MX records are found, but an A RR is found, the A RR is treated as - if it was associated with an implicit MX RR, with a preference of 0, - pointing to that host. If one or more MX RRs are found for a given - name, SMTP systems MUST NOT utilize any A RRs associated with that - name unless they are located using the MX RRs; the "implicit MX" rule - above applies only if there are no MX records present. If MX records - are present, but none of them are usable, this situation MUST be - reported as an error. - - When the lookup succeeds, the mapping can result in a list of - alternative delivery addresses rather than a single address, because - of multiple MX records, multihoming, or both. To provide reliable - mail transmission, the SMTP client MUST be able to try (and retry) - each of the relevant addresses in this list in order, until a - delivery attempt succeeds. However, there MAY also be a configurable - limit on the number of alternate addresses that can be tried. In any - case, the SMTP client SHOULD try at least two addresses. - - - -Klensin Standards Track [Page 60] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - Two types of information is used to rank the host addresses: multiple - MX records, and multihomed hosts. - - Multiple MX records contain a preference indication that MUST be used - in sorting (see below). Lower numbers are more preferred than higher - ones. If there are multiple destinations with the same preference - and there is no clear reason to favor one (e.g., by recognition of an - easily-reached address), then the sender-SMTP MUST randomize them to - spread the load across multiple mail exchangers for a specific - organization. - - The destination host (perhaps taken from the preferred MX record) may - be multihomed, in which case the domain name resolver will return a - list of alternative IP addresses. It is the responsibility of the - domain name resolver interface to have ordered this list by - decreasing preference if necessary, and SMTP MUST try them in the - order presented. - - Although the capability to try multiple alternative addresses is - required, specific installations may want to limit or disable the use - of alternative addresses. The question of whether a sender should - attempt retries using the different addresses of a multihomed host - has been controversial. The main argument for using the multiple - addresses is that it maximizes the probability of timely delivery, - and indeed sometimes the probability of any delivery; the counter- - argument is that it may result in unnecessary resource use. Note - that resource use is also strongly determined by the sending strategy - discussed in section 4.5.4.1. - - If an SMTP server receives a message with a destination for which it - is a designated Mail eXchanger, it MAY relay the message (potentially - after having rewritten the MAIL FROM and/or RCPT TO addresses), make - final delivery of the message, or hand it off using some mechanism - outside the SMTP-provided transport environment. Of course, neither - of the latter require that the list of MX records be examined - further. - - If it determines that it should relay the message without rewriting - the address, it MUST sort the MX records to determine candidates for - delivery. The records are first ordered by preference, with the - lowest-numbered records being most preferred. The relay host MUST - then inspect the list for any of the names or addresses by which it - might be known in mail transactions. If a matching record is found, - all records at that preference level and higher-numbered ones MUST be - discarded from consideration. If there are no records left at that - point, it is an error condition, and the message MUST be returned as - undeliverable. If records do remain, they SHOULD be tried, best - preference first, as described above. - - - -Klensin Standards Track [Page 61] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -6. Problem Detection and Handling - -6.1 Reliable Delivery and Replies by Email - - When the receiver-SMTP accepts a piece of mail (by sending a "250 OK" - message in response to DATA), it is accepting responsibility for - delivering or relaying the message. It must take this responsibility - seriously. It MUST NOT lose the message for frivolous reasons, such - as because the host later crashes or because of a predictable - resource shortage. - - If there is a delivery failure after acceptance of a message, the - receiver-SMTP MUST formulate and mail a notification message. This - notification MUST be sent using a null ("<>") reverse path in the - envelope. The recipient of this notification MUST be the address - from the envelope return path (or the Return-Path: line). However, - if this address is null ("<>"), the receiver-SMTP MUST NOT send a - notification. Obviously, nothing in this section can or should - prohibit local decisions (i.e., as part of the same system - environment as the receiver-SMTP) to log or otherwise transmit - information about null address events locally if that is desired. If - the address is an explicit source route, it MUST be stripped down to - its final hop. - - For example, suppose that an error notification must be sent for a - message that arrived with: - - MAIL FROM:<@a,@b:user@d> - - The notification message MUST be sent using: - - RCPT TO:<user@d> - - Some delivery failures after the message is accepted by SMTP will be - unavoidable. For example, it may be impossible for the receiving - SMTP server to validate all the delivery addresses in RCPT command(s) - due to a "soft" domain system error, because the target is a mailing - list (see earlier discussion of RCPT), or because the server is - acting as a relay and has no immediate access to the delivering - system. - - To avoid receiving duplicate messages as the result of timeouts, a - receiver-SMTP MUST seek to minimize the time required to respond to - the final <CRLF>.<CRLF> end of data indicator. See RFC 1047 [28] for - a discussion of this problem. - - - - - - -Klensin Standards Track [Page 62] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -6.2 Loop Detection - - Simple counting of the number of "Received:" headers in a message has - proven to be an effective, although rarely optimal, method of - detecting loops in mail systems. SMTP servers using this technique - SHOULD use a large rejection threshold, normally at least 100 - Received entries. Whatever mechanisms are used, servers MUST contain - provisions for detecting and stopping trivial loops. - -6.3 Compensating for Irregularities - - Unfortunately, variations, creative interpretations, and outright - violations of Internet mail protocols do occur; some would suggest - that they occur quite frequently. The debate as to whether a well- - behaved SMTP receiver or relay should reject a malformed message, - attempt to pass it on unchanged, or attempt to repair it to increase - the odds of successful delivery (or subsequent reply) began almost - with the dawn of structured network mail and shows no signs of - abating. Advocates of rejection claim that attempted repairs are - rarely completely adequate and that rejection of bad messages is the - only way to get the offending software repaired. Advocates of - "repair" or "deliver no matter what" argue that users prefer that - mail go through it if at all possible and that there are significant - market pressures in that direction. In practice, these market - pressures may be more important to particular vendors than strict - conformance to the standards, regardless of the preference of the - actual developers. - - The problems associated with ill-formed messages were exacerbated by - the introduction of the split-UA mail reading protocols [3, 26, 5, - 21]. These protocols have encouraged the use of SMTP as a posting - protocol, and SMTP servers as relay systems for these client hosts - (which are often only intermittently connected to the Internet). - Historically, many of those client machines lacked some of the - mechanisms and information assumed by SMTP (and indeed, by the mail - format protocol [7]). Some could not keep adequate track of time; - others had no concept of time zones; still others could not identify - their own names or addresses; and, of course, none could satisfy the - assumptions that underlay RFC 822's conception of authenticated - addresses. - - In response to these weak SMTP clients, many SMTP systems now - complete messages that are delivered to them in incomplete or - incorrect form. This strategy is generally considered appropriate - when the server can identify or authenticate the client, and there - are prior agreements between them. By contrast, there is at best - great concern about fixes applied by a relay or delivery SMTP server - that has little or no knowledge of the user or client machine. - - - -Klensin Standards Track [Page 63] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - The following changes to a message being processed MAY be applied - when necessary by an originating SMTP server, or one used as the - target of SMTP as an initial posting protocol: - - - Addition of a message-id field when none appears - - - Addition of a date, time or time zone when none appears - - - Correction of addresses to proper FQDN format - - The less information the server has about the client, the less likely - these changes are to be correct and the more caution and conservatism - should be applied when considering whether or not to perform fixes - and how. These changes MUST NOT be applied by an SMTP server that - provides an intermediate relay function. - - In all cases, properly-operating clients supplying correct - information are preferred to corrections by the SMTP server. In all - cases, documentation of actions performed by the servers (in trace - fields and/or header comments) is strongly encouraged. - -7. Security Considerations - -7.1 Mail Security and Spoofing - - SMTP mail is inherently insecure in that it is feasible for even - fairly casual users to negotiate directly with receiving and relaying - SMTP servers and create messages that will trick a naive recipient - into believing that they came from somewhere else. Constructing such - a message so that the "spoofed" behavior cannot be detected by an - expert is somewhat more difficult, but not sufficiently so as to be a - deterrent to someone who is determined and knowledgeable. - Consequently, as knowledge of Internet mail increases, so does the - knowledge that SMTP mail inherently cannot be authenticated, or - integrity checks provided, at the transport level. Real mail - security lies only in end-to-end methods involving the message - bodies, such as those which use digital signatures (see [14] and, - e.g., PGP [4] or S/MIME [31]). - - Various protocol extensions and configuration options that provide - authentication at the transport level (e.g., from an SMTP client to - an SMTP server) improve somewhat on the traditional situation - described above. However, unless they are accompanied by careful - handoffs of responsibility in a carefully-designed trust environment, - they remain inherently weaker than end-to-end mechanisms which use - digitally signed messages rather than depending on the integrity of - the transport system. - - - - -Klensin Standards Track [Page 64] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - Efforts to make it more difficult for users to set envelope return - path and header "From" fields to point to valid addresses other than - their own are largely misguided: they frustrate legitimate - applications in which mail is sent by one user on behalf of another - or in which error (or normal) replies should be directed to a special - address. (Systems that provide convenient ways for users to alter - these fields on a per-message basis should attempt to establish a - primary and permanent mailbox address for the user so that Sender - fields within the message data can be generated sensibly.) - - This specification does not further address the authentication issues - associated with SMTP other than to advocate that useful functionality - not be disabled in the hope of providing some small margin of - protection against an ignorant user who is trying to fake mail. - -7.2 "Blind" Copies - - Addresses that do not appear in the message headers may appear in the - RCPT commands to an SMTP server for a number of reasons. The two - most common involve the use of a mailing address as a "list exploder" - (a single address that resolves into multiple addresses) and the - appearance of "blind copies". Especially when more than one RCPT - command is present, and in order to avoid defeating some of the - purpose of these mechanisms, SMTP clients and servers SHOULD NOT copy - the full set of RCPT command arguments into the headers, either as - part of trace headers or as informational or private-extension - headers. Since this rule is often violated in practice, and cannot - be enforced, sending SMTP systems that are aware of "bcc" use MAY - find it helpful to send each blind copy as a separate message - transaction containing only a single RCPT command. - - There is no inherent relationship between either "reverse" (from - MAIL, SAML, etc., commands) or "forward" (RCPT) addresses in the SMTP - transaction ("envelope") and the addresses in the headers. Receiving - systems SHOULD NOT attempt to deduce such relationships and use them - to alter the headers of the message for delivery. The popular - "Apparently-to" header is a violation of this principle as well as a - common source of unintended information disclosure and SHOULD NOT be - used. - -7.3 VRFY, EXPN, and Security - - As discussed in section 3.5, individual sites may want to disable - either or both of VRFY or EXPN for security reasons. As a corollary - to the above, implementations that permit this MUST NOT appear to - have verified addresses that are not, in fact, verified. If a site - - - - - -Klensin Standards Track [Page 65] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - disables these commands for security reasons, the SMTP server MUST - return a 252 response, rather than a code that could be confused with - successful or unsuccessful verification. - - Returning a 250 reply code with the address listed in the VRFY - command after having checked it only for syntax violates this rule. - Of course, an implementation that "supports" VRFY by always returning - 550 whether or not the address is valid is equally not in - conformance. - - Within the last few years, the contents of mailing lists have become - popular as an address information source for so-called "spammers." - The use of EXPN to "harvest" addresses has increased as list - administrators have installed protections against inappropriate uses - of the lists themselves. Implementations SHOULD still provide - support for EXPN, but sites SHOULD carefully evaluate the tradeoffs. - As authentication mechanisms are introduced into SMTP, some sites may - choose to make EXPN available only to authenticated requestors. - -7.4 Information Disclosure in Announcements - - There has been an ongoing debate about the tradeoffs between the - debugging advantages of announcing server type and version (and, - sometimes, even server domain name) in the greeting response or in - response to the HELP command and the disadvantages of exposing - information that might be useful in a potential hostile attack. The - utility of the debugging information is beyond doubt. Those who - argue for making it available point out that it is far better to - actually secure an SMTP server rather than hope that trying to - conceal known vulnerabilities by hiding the server's precise identity - will provide more protection. Sites are encouraged to evaluate the - tradeoff with that issue in mind; implementations are strongly - encouraged to minimally provide for making type and version - information available in some way to other network hosts. - -7.5 Information Disclosure in Trace Fields - - In some circumstances, such as when mail originates from within a LAN - whose hosts are not directly on the public Internet, trace - ("Received") fields produced in conformance with this specification - may disclose host names and similar information that would not - normally be available. This ordinarily does not pose a problem, but - sites with special concerns about name disclosure should be aware of - it. Also, the optional FOR clause should be supplied with caution or - not at all when multiple recipients are involved lest it - inadvertently disclose the identities of "blind copy" recipients to - others. - - - - -Klensin Standards Track [Page 66] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -7.6 Information Disclosure in Message Forwarding - - As discussed in section 3.4, use of the 251 or 551 reply codes to - identify the replacement address associated with a mailbox may - inadvertently disclose sensitive information. Sites that are - concerned about those issues should ensure that they select and - configure servers appropriately. - -7.7 Scope of Operation of SMTP Servers - - It is a well-established principle that an SMTP server may refuse to - accept mail for any operational or technical reason that makes sense - to the site providing the server. However, cooperation among sites - and installations makes the Internet possible. If sites take - excessive advantage of the right to reject traffic, the ubiquity of - email availability (one of the strengths of the Internet) will be - threatened; considerable care should be taken and balance maintained - if a site decides to be selective about the traffic it will accept - and process. - - In recent years, use of the relay function through arbitrary sites - has been used as part of hostile efforts to hide the actual origins - of mail. Some sites have decided to limit the use of the relay - function to known or identifiable sources, and implementations SHOULD - provide the capability to perform this type of filtering. When mail - is rejected for these or other policy reasons, a 550 code SHOULD be - used in response to EHLO, MAIL, or RCPT as appropriate. - -8. IANA Considerations - - IANA will maintain three registries in support of this specification. - The first consists of SMTP service extensions with the associated - keywords, and, as needed, parameters and verbs. As specified in - section 2.2.2, no entry may be made in this registry that starts in - an "X". Entries may be made only for service extensions (and - associated keywords, parameters, or verbs) that are defined in - standards-track or experimental RFCs specifically approved by the - IESG for this purpose. - - The second registry consists of "tags" that identify forms of domain - literals other than those for IPv4 addresses (specified in RFC 821 - and in this document) and IPv6 addresses (specified in this - document). Additional literal types require standardization before - being used; none are anticipated at this time. - - The third, established by RFC 821 and renewed by this specification, - is a registry of link and protocol identifiers to be used with the - "via" and "with" subclauses of the time stamp ("Received: header") - - - -Klensin Standards Track [Page 67] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - described in section 4.4. Link and protocol identifiers in addition - to those specified in this document may be registered only by - standardization or by way of an RFC-documented, IESG-approved, - Experimental protocol extension. - -9. References - - [1] American National Standards Institute (formerly United States of - America Standards Institute), X3.4, 1968, "USA Code for - Information Interchange". ANSI X3.4-1968 has been replaced by - newer versions with slight modifications, but the 1968 version - remains definitive for the Internet. - - [2] Braden, R., "Requirements for Internet hosts - application and - support", STD 3, RFC 1123, October 1989. - - [3] Butler, M., Chase, D., Goldberger, J., Postel, J. and J. - Reynolds, "Post Office Protocol - version 2", RFC 937, February - 1985. - - [4] Callas, J., Donnerhacke, L., Finney, H. and R. Thayer, "OpenPGP - Message Format", RFC 2440, November 1998. - - [5] Crispin, M., "Interactive Mail Access Protocol - Version 2", RFC - 1176, August 1990. - - [6] Crispin, M., "Internet Message Access Protocol - Version 4", RFC - 2060, December 1996. - - [7] Crocker, D., "Standard for the Format of ARPA Internet Text - Messages", RFC 822, August 1982. - - [8] Crocker, D. and P. Overell, Eds., "Augmented BNF for Syntax - Specifications: ABNF", RFC 2234, November 1997. - - [9] De Winter, J., "SMTP Service Extension for Remote Message Queue - Starting", RFC 1985, August 1996. - - [10] Fajman, R., "An Extensible Message Format for Message - Disposition Notifications", RFC 2298, March 1998. - - [11] Freed, N, "Behavior of and Requirements for Internet Firewalls", - RFC 2979, October 2000. - - [12] Freed, N. and N. Borenstein, "Multipurpose Internet Mail - Extensions (MIME) Part One: Format of Internet Message Bodies", - RFC 2045, December 1996. - - - - -Klensin Standards Track [Page 68] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - [13] Freed, N., "SMTP Service Extension for Command Pipelining", RFC - 2920, September 2000. - - [14] Galvin, J., Murphy, S., Crocker, S. and N. Freed, "Security - Multiparts for MIME: Multipart/Signed and Multipart/Encrypted", - RFC 1847, October 1995. - - [15] Gellens, R. and J. Klensin, "Message Submission", RFC 2476, - December 1998. - - [16] Kille, S., "Mapping between X.400 and RFC822/MIME", RFC 2156, - January 1998. - - [17] Hinden, R and S. Deering, Eds. "IP Version 6 Addressing - Architecture", RFC 2373, July 1998. - - [18] Klensin, J., Freed, N. and K. Moore, "SMTP Service Extension for - Message Size Declaration", STD 10, RFC 1870, November 1995. - - [19] Klensin, J., Freed, N., Rose, M., Stefferud, E. and D. Crocker, - "SMTP Service Extensions", STD 10, RFC 1869, November 1995. - - [20] Klensin, J., Freed, N., Rose, M., Stefferud, E. and D. Crocker, - "SMTP Service Extension for 8bit-MIMEtransport", RFC 1652, July - 1994. - - [21] Lambert, M., "PCMAIL: A distributed mail system for personal - computers", RFC 1056, July 1988. - - [22] Mockapetris, P., "Domain names - implementation and - specification", STD 13, RFC 1035, November 1987. - - Mockapetris, P., "Domain names - concepts and facilities", STD - 13, RFC 1034, November 1987. - - [23] Moore, K., "MIME (Multipurpose Internet Mail Extensions) Part - Three: Message Header Extensions for Non-ASCII Text", RFC 2047, - December 1996. - - [24] Moore, K., "SMTP Service Extension for Delivery Status - Notifications", RFC 1891, January 1996. - - [25] Moore, K., and G. Vaudreuil, "An Extensible Message Format for - Delivery Status Notifications", RFC 1894, January 1996. - - [26] Myers, J. and M. Rose, "Post Office Protocol - Version 3", STD - 53, RFC 1939, May 1996. - - - - -Klensin Standards Track [Page 69] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - [27] Partridge, C., "Mail routing and the domain system", RFC 974, - January 1986. - - [28] Partridge, C., "Duplicate messages and SMTP", RFC 1047, February - 1988. - - [29] Postel, J., ed., "Transmission Control Protocol - DARPA Internet - Program Protocol Specification", STD 7, RFC 793, September 1981. - - [30] Postel, J., "Simple Mail Transfer Protocol", RFC 821, August - 1982. - - [31] Ramsdell, B., Ed., "S/MIME Version 3 Message Specification", RFC - 2633, June 1999. - - [32] Resnick, P., Ed., "Internet Message Format", RFC 2822, April - 2001. - - [33] Vaudreuil, G., "SMTP Service Extensions for Transmission of - Large and Binary MIME Messages", RFC 1830, August 1995. - - [34] Vaudreuil, G., "Enhanced Mail System Status Codes", RFC 1893, - January 1996. - -10. Editor's Address - - John C. Klensin - AT&T Laboratories - 99 Bedford St - Boston, MA 02111 USA - - Phone: 617-574-3076 - EMail: klensin@research.att.com - -11. Acknowledgments - - Many people worked long and hard on the many iterations of this - document. There was wide-ranging debate in the IETF DRUMS Working - Group, both on its mailing list and in face to face discussions, - about many technical issues and the role of a revised standard for - Internet mail transport, and many contributors helped form the - wording in this specification. The hundreds of participants in the - many discussions since RFC 821 was produced are too numerous to - mention, but they all helped this document become what it is. - - - - - - - -Klensin Standards Track [Page 70] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -APPENDICES - -A. TCP Transport Service - - The TCP connection supports the transmission of 8-bit bytes. The - SMTP data is 7-bit ASCII characters. Each character is transmitted - as an 8-bit byte with the high-order bit cleared to zero. Service - extensions may modify this rule to permit transmission of full 8-bit - data bytes as part of the message body, but not in SMTP commands or - responses. - -B. Generating SMTP Commands from RFC 822 Headers - - Some systems use RFC 822 headers (only) in a mail submission - protocol, or otherwise generate SMTP commands from RFC 822 headers - when such a message is handed to an MTA from a UA. While the MTA-UA - protocol is a private matter, not covered by any Internet Standard, - there are problems with this approach. For example, there have been - repeated problems with proper handling of "bcc" copies and - redistribution lists when information that conceptually belongs to a - mail envelopes is not separated early in processing from header - information (and kept separate). - - It is recommended that the UA provide its initial ("submission - client") MTA with an envelope separate from the message itself. - However, if the envelope is not supplied, SMTP commands SHOULD be - generated as follows: - - 1. Each recipient address from a TO, CC, or BCC header field SHOULD - be copied to a RCPT command (generating multiple message copies if - that is required for queuing or delivery). This includes any - addresses listed in a RFC 822 "group". Any BCC fields SHOULD then - be removed from the headers. Once this process is completed, the - remaining headers SHOULD be checked to verify that at least one - To:, Cc:, or Bcc: header remains. If none do, then a bcc: header - with no additional information SHOULD be inserted as specified in - [32]. - - 2. The return address in the MAIL command SHOULD, if possible, be - derived from the system's identity for the submitting (local) - user, and the "From:" header field otherwise. If there is a - system identity available, it SHOULD also be copied to the Sender - header field if it is different from the address in the From - header field. (Any Sender field that was already there SHOULD be - removed.) Systems may provide a way for submitters to override - the envelope return address, but may want to restrict its use to - privileged users. This will not prevent mail forgery, but may - lessen its incidence; see section 7.1. - - - -Klensin Standards Track [Page 71] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - When an MTA is being used in this way, it bears responsibility for - ensuring that the message being transmitted is valid. The mechanisms - for checking that validity, and for handling (or returning) messages - that are not valid at the time of arrival, are part of the MUA-MTA - interface and not covered by this specification. - - A submission protocol based on Standard RFC 822 information alone - MUST NOT be used to gateway a message from a foreign (non-SMTP) mail - system into an SMTP environment. Additional information to construct - an envelope must come from some source in the other environment, - whether supplemental headers or the foreign system's envelope. - - Attempts to gateway messages using only their header "to" and "cc" - fields have repeatedly caused mail loops and other behavior adverse - to the proper functioning of the Internet mail environment. These - problems have been especially common when the message originates from - an Internet mailing list and is distributed into the foreign - environment using envelope information. When these messages are then - processed by a header-only remailer, loops back to the Internet - environment (and the mailing list) are almost inevitable. - -C. Source Routes - - Historically, the <reverse-path> was a reverse source routing list of - hosts and a source mailbox. The first host in the <reverse-path> - SHOULD be the host sending the MAIL command. Similarly, the - <forward-path> may be a source routing lists of hosts and a - destination mailbox. However, in general, the <forward-path> SHOULD - contain only a mailbox and domain name, relying on the domain name - system to supply routing information if required. The use of source - routes is deprecated; while servers MUST be prepared to receive and - handle them as discussed in section 3.3 and F.2, clients SHOULD NOT - transmit them and this section was included only to provide context. - - For relay purposes, the forward-path may be a source route of the - form "@ONE,@TWO:JOE@THREE", where ONE, TWO, and THREE MUST BE fully- - qualified domain names. This form is used to emphasize the - distinction between an address and a route. The mailbox is an - absolute address, and the route is information about how to get - there. The two concepts should not be confused. - - If source routes are used, RFC 821 and the text below should be - consulted for the mechanisms for constructing and updating the - forward- and reverse-paths. - - - - - - - -Klensin Standards Track [Page 72] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - The SMTP server transforms the command arguments by moving its own - identifier (its domain name or that of any domain for which it is - acting as a mail exchanger), if it appears, from the forward-path to - the beginning of the reverse-path. - - Notice that the forward-path and reverse-path appear in the SMTP - commands and replies, but not necessarily in the message. That is, - there is no need for these paths and especially this syntax to appear - in the "To:" , "From:", "CC:", etc. fields of the message header. - Conversely, SMTP servers MUST NOT derive final message delivery - information from message header fields. - - When the list of hosts is present, it is a "reverse" source route and - indicates that the mail was relayed through each host on the list - (the first host in the list was the most recent relay). This list is - used as a source route to return non-delivery notices to the sender. - As each relay host adds itself to the beginning of the list, it MUST - use its name as known in the transport environment to which it is - relaying the mail rather than that of the transport environment from - which the mail came (if they are different). - -D. Scenarios - - This section presents complete scenarios of several types of SMTP - sessions. In the examples, "C:" indicates what is said by the SMTP - client, and "S:" indicates what is said by the SMTP server. - -D.1 A Typical SMTP Transaction Scenario - - This SMTP example shows mail sent by Smith at host bar.com, to Jones, - Green, and Brown at host foo.com. Here we assume that host bar.com - contacts host foo.com directly. The mail is accepted for Jones and - Brown. Green does not have a mailbox at host foo.com. - - S: 220 foo.com Simple Mail Transfer Service Ready - C: EHLO bar.com - S: 250-foo.com greets bar.com - S: 250-8BITMIME - S: 250-SIZE - S: 250-DSN - S: 250 HELP - C: MAIL FROM:<Smith@bar.com> - S: 250 OK - C: RCPT TO:<Jones@foo.com> - S: 250 OK - C: RCPT TO:<Green@foo.com> - S: 550 No such user here - C: RCPT TO:<Brown@foo.com> - - - -Klensin Standards Track [Page 73] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - S: 250 OK - C: DATA - S: 354 Start mail input; end with <CRLF>.<CRLF> - C: Blah blah blah... - C: ...etc. etc. etc. - C: . - S: 250 OK - C: QUIT - S: 221 foo.com Service closing transmission channel - -D.2 Aborted SMTP Transaction Scenario - - S: 220 foo.com Simple Mail Transfer Service Ready - C: EHLO bar.com - S: 250-foo.com greets bar.com - S: 250-8BITMIME - S: 250-SIZE - S: 250-DSN - S: 250 HELP - C: MAIL FROM:<Smith@bar.com> - S: 250 OK - C: RCPT TO:<Jones@foo.com> - S: 250 OK - C: RCPT TO:<Green@foo.com> - S: 550 No such user here - C: RSET - S: 250 OK - C: QUIT - S: 221 foo.com Service closing transmission channel - -D.3 Relayed Mail Scenario - - Step 1 -- Source Host to Relay Host - - S: 220 foo.com Simple Mail Transfer Service Ready - C: EHLO bar.com - S: 250-foo.com greets bar.com - S: 250-8BITMIME - S: 250-SIZE - S: 250-DSN - S: 250 HELP - C: MAIL FROM:<JQP@bar.com> - S: 250 OK - C: RCPT TO:<@foo.com:Jones@XYZ.COM> - S: 250 OK - C: DATA - S: 354 Start mail input; end with <CRLF>.<CRLF> - C: Date: Thu, 21 May 1998 05:33:29 -0700 - - - -Klensin Standards Track [Page 74] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - C: From: John Q. Public <JQP@bar.com> - C: Subject: The Next Meeting of the Board - C: To: Jones@xyz.com - C: - C: Bill: - C: The next meeting of the board of directors will be - C: on Tuesday. - C: John. - C: . - S: 250 OK - C: QUIT - S: 221 foo.com Service closing transmission channel - - Step 2 -- Relay Host to Destination Host - - S: 220 xyz.com Simple Mail Transfer Service Ready - C: EHLO foo.com - S: 250 xyz.com is on the air - C: MAIL FROM:<@foo.com:JQP@bar.com> - S: 250 OK - C: RCPT TO:<Jones@XYZ.COM> - S: 250 OK - C: DATA - S: 354 Start mail input; end with <CRLF>.<CRLF> - C: Received: from bar.com by foo.com ; Thu, 21 May 1998 - C: 05:33:29 -0700 - C: Date: Thu, 21 May 1998 05:33:22 -0700 - C: From: John Q. Public <JQP@bar.com> - C: Subject: The Next Meeting of the Board - C: To: Jones@xyz.com - C: - C: Bill: - C: The next meeting of the board of directors will be - C: on Tuesday. - C: John. - C: . - S: 250 OK - C: QUIT - S: 221 foo.com Service closing transmission channel - -D.4 Verifying and Sending Scenario - - S: 220 foo.com Simple Mail Transfer Service Ready - C: EHLO bar.com - S: 250-foo.com greets bar.com - S: 250-8BITMIME - S: 250-SIZE - S: 250-DSN - - - -Klensin Standards Track [Page 75] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - - S: 250-VRFY - S: 250 HELP - C: VRFY Crispin - S: 250 Mark Crispin <Admin.MRC@foo.com> - C: SEND FROM:<EAK@bar.com> - S: 250 OK - C: RCPT TO:<Admin.MRC@foo.com> - S: 250 OK - C: DATA - S: 354 Start mail input; end with <CRLF>.<CRLF> - C: Blah blah blah... - C: ...etc. etc. etc. - C: . - S: 250 OK - C: QUIT - S: 221 foo.com Service closing transmission channel - -E. Other Gateway Issues - - In general, gateways between the Internet and other mail systems - SHOULD attempt to preserve any layering semantics across the - boundaries between the two mail systems involved. Gateway- - translation approaches that attempt to take shortcuts by mapping, - (such as envelope information from one system to the message headers - or body of another) have generally proven to be inadequate in - important ways. Systems translating between environments that do not - support both envelopes and headers and Internet mail must be written - with the understanding that some information loss is almost - inevitable. - -F. Deprecated Features of RFC 821 - - A few features of RFC 821 have proven to be problematic and SHOULD - NOT be used in Internet mail. - -F.1 TURN - - This command, described in RFC 821, raises important security issues - since, in the absence of strong authentication of the host requesting - that the client and server switch roles, it can easily be used to - divert mail from its correct destination. Its use is deprecated; - SMTP systems SHOULD NOT use it unless the server can authenticate the - client. - - - - - - - - -Klensin Standards Track [Page 76] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -F.2 Source Routing - - RFC 821 utilized the concept of explicit source routing to get mail - from one host to another via a series of relays. The requirement to - utilize source routes in regular mail traffic was eliminated by the - introduction of the domain name system "MX" record and the last - significant justification for them was eliminated by the - introduction, in RFC 1123, of a clear requirement that addresses - following an "@" must all be fully-qualified domain names. - Consequently, the only remaining justifications for the use of source - routes are support for very old SMTP clients or MUAs and in mail - system debugging. They can, however, still be useful in the latter - circumstance and for routing mail around serious, but temporary, - problems such as problems with the relevant DNS records. - - SMTP servers MUST continue to accept source route syntax as specified - in the main body of this document and in RFC 1123. They MAY, if - necessary, ignore the routes and utilize only the target domain in - the address. If they do utilize the source route, the message MUST - be sent to the first domain shown in the address. In particular, a - server MUST NOT guess at shortcuts within the source route. - - Clients SHOULD NOT utilize explicit source routing except under - unusual circumstances, such as debugging or potentially relaying - around firewall or mail system configuration errors. - -F.3 HELO - - As discussed in sections 3.1 and 4.1.1, EHLO is strongly preferred to - HELO when the server will accept the former. Servers must continue - to accept and process HELO in order to support older clients. - -F.4 #-literals - - RFC 821 provided for specifying an Internet address as a decimal - integer host number prefixed by a pound sign, "#". In practice, that - form has been obsolete since the introduction of TCP/IP. It is - deprecated and MUST NOT be used. - -F.5 Dates and Years - - When dates are inserted into messages by SMTP clients or servers - (e.g., in trace fields), four-digit years MUST BE used. Two-digit - years are deprecated; three-digit years were never permitted in the - Internet mail system. - - - - - - -Klensin Standards Track [Page 77] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -F.6 Sending versus Mailing - - In addition to specifying a mechanism for delivering messages to - user's mailboxes, RFC 821 provided additional, optional, commands to - deliver messages directly to the user's terminal screen. These - commands (SEND, SAML, SOML) were rarely implemented, and changes in - workstation technology and the introduction of other protocols may - have rendered them obsolete even where they are implemented. - - Clients SHOULD NOT provide SEND, SAML, or SOML as services. Servers - MAY implement them. If they are implemented by servers, the - implementation model specified in RFC 821 MUST be used and the - command names MUST be published in the response to the EHLO command. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Klensin Standards Track [Page 78] - -RFC 2821 Simple Mail Transfer Protocol April 2001 - - -Full Copyright Statement - - Copyright (C) The Internet Society (2001). All Rights Reserved. - - This document and translations of it may be copied and furnished to - others, and derivative works that comment on or otherwise explain it - or assist in its implementation may be prepared, copied, published - and distributed, in whole or in part, without restriction of any - kind, provided that the above copyright notice and this paragraph are - included on all such copies and derivative works. However, this - document itself may not be modified in any way, such as by removing - the copyright notice or references to the Internet Society or other - Internet organizations, except as needed for the purpose of - developing Internet standards in which case the procedures for - copyrights defined in the Internet Standards process must be - followed, or as required to translate it into languages other than - English. - - The limited permissions granted above are perpetual and will not be - revoked by the Internet Society or its successors or assigns. - - This document and the information contained herein is provided on an - "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING - TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION - HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF - MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -Acknowledgement - - Funding for the RFC Editor function is currently provided by the - Internet Society. - - - - - - - - - - - - - - - - - - - -Klensin Standards Track [Page 79] - diff --git a/doc/src/rfc2822.txt b/doc/src/rfc2822.txt deleted file mode 100644 index 9f698f77d..000000000 --- a/doc/src/rfc2822.txt +++ /dev/null @@ -1,2859 +0,0 @@ - - - - - - -Network Working Group P. Resnick, Editor -Request for Comments: 2822 QUALCOMM Incorporated -Obsoletes: 822 April 2001 -Category: Standards Track - - - Internet Message Format - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Copyright Notice - - Copyright (C) The Internet Society (2001). All Rights Reserved. - -Abstract - - This standard specifies a syntax for text messages that are sent - between computer users, within the framework of "electronic mail" - messages. This standard supersedes the one specified in Request For - Comments (RFC) 822, "Standard for the Format of ARPA Internet Text - Messages", updating it to reflect current practice and incorporating - incremental changes that were specified in other RFCs. - -Table of Contents - - 1. Introduction ............................................... 3 - 1.1. Scope .................................................... 3 - 1.2. Notational conventions ................................... 4 - 1.2.1. Requirements notation .................................. 4 - 1.2.2. Syntactic notation ..................................... 4 - 1.3. Structure of this document ............................... 4 - 2. Lexical Analysis of Messages ............................... 5 - 2.1. General Description ...................................... 5 - 2.1.1. Line Length Limits ..................................... 6 - 2.2. Header Fields ............................................ 7 - 2.2.1. Unstructured Header Field Bodies ....................... 7 - 2.2.2. Structured Header Field Bodies ......................... 7 - 2.2.3. Long Header Fields ..................................... 7 - 2.3. Body ..................................................... 8 - 3. Syntax ..................................................... 9 - 3.1. Introduction ............................................. 9 - 3.2. Lexical Tokens ........................................... 9 - - - -Resnick Standards Track [Page 1] - -RFC 2822 Internet Message Format April 2001 - - - 3.2.1. Primitive Tokens ....................................... 9 - 3.2.2. Quoted characters ......................................10 - 3.2.3. Folding white space and comments .......................11 - 3.2.4. Atom ...................................................12 - 3.2.5. Quoted strings .........................................13 - 3.2.6. Miscellaneous tokens ...................................13 - 3.3. Date and Time Specification ..............................14 - 3.4. Address Specification ....................................15 - 3.4.1. Addr-spec specification ................................16 - 3.5 Overall message syntax ....................................17 - 3.6. Field definitions ........................................18 - 3.6.1. The origination date field .............................20 - 3.6.2. Originator fields ......................................21 - 3.6.3. Destination address fields .............................22 - 3.6.4. Identification fields ..................................23 - 3.6.5. Informational fields ...................................26 - 3.6.6. Resent fields ..........................................26 - 3.6.7. Trace fields ...........................................28 - 3.6.8. Optional fields ........................................29 - 4. Obsolete Syntax ............................................29 - 4.1. Miscellaneous obsolete tokens ............................30 - 4.2. Obsolete folding white space .............................31 - 4.3. Obsolete Date and Time ...................................31 - 4.4. Obsolete Addressing ......................................33 - 4.5. Obsolete header fields ...................................33 - 4.5.1. Obsolete origination date field ........................34 - 4.5.2. Obsolete originator fields .............................34 - 4.5.3. Obsolete destination address fields ....................34 - 4.5.4. Obsolete identification fields .........................35 - 4.5.5. Obsolete informational fields ..........................35 - 4.5.6. Obsolete resent fields .................................35 - 4.5.7. Obsolete trace fields ..................................36 - 4.5.8. Obsolete optional fields ...............................36 - 5. Security Considerations ....................................36 - 6. Bibliography ...............................................37 - 7. Editor's Address ...........................................38 - 8. Acknowledgements ...........................................39 - Appendix A. Example messages ..................................41 - A.1. Addressing examples ......................................41 - A.1.1. A message from one person to another with simple - addressing .............................................41 - A.1.2. Different types of mailboxes ...........................42 - A.1.3. Group addresses ........................................43 - A.2. Reply messages ...........................................43 - A.3. Resent messages ..........................................44 - A.4. Messages with trace fields ...............................46 - A.5. White space, comments, and other oddities ................47 - A.6. Obsoleted forms ..........................................47 - - - -Resnick Standards Track [Page 2] - -RFC 2822 Internet Message Format April 2001 - - - A.6.1. Obsolete addressing ....................................48 - A.6.2. Obsolete dates .........................................48 - A.6.3. Obsolete white space and comments ......................48 - Appendix B. Differences from earlier standards ................49 - Appendix C. Notices ...........................................50 - Full Copyright Statement ......................................51 - -1. Introduction - -1.1. Scope - - This standard specifies a syntax for text messages that are sent - between computer users, within the framework of "electronic mail" - messages. This standard supersedes the one specified in Request For - Comments (RFC) 822, "Standard for the Format of ARPA Internet Text - Messages" [RFC822], updating it to reflect current practice and - incorporating incremental changes that were specified in other RFCs - [STD3]. - - This standard specifies a syntax only for text messages. In - particular, it makes no provision for the transmission of images, - audio, or other sorts of structured data in electronic mail messages. - There are several extensions published, such as the MIME document - series [RFC2045, RFC2046, RFC2049], which describe mechanisms for the - transmission of such data through electronic mail, either by - extending the syntax provided here or by structuring such messages to - conform to this syntax. Those mechanisms are outside of the scope of - this standard. - - In the context of electronic mail, messages are viewed as having an - envelope and contents. The envelope contains whatever information is - needed to accomplish transmission and delivery. (See [RFC2821] for a - discussion of the envelope.) The contents comprise the object to be - delivered to the recipient. This standard applies only to the format - and some of the semantics of message contents. It contains no - specification of the information in the envelope. - - However, some message systems may use information from the contents - to create the envelope. It is intended that this standard facilitate - the acquisition of such information by programs. - - This specification is intended as a definition of what message - content format is to be passed between systems. Though some message - systems locally store messages in this format (which eliminates the - need for translation between formats) and others use formats that - differ from the one specified in this standard, local storage is - outside of the scope of this standard. - - - - -Resnick Standards Track [Page 3] - -RFC 2822 Internet Message Format April 2001 - - - Note: This standard is not intended to dictate the internal formats - used by sites, the specific message system features that they are - expected to support, or any of the characteristics of user interface - programs that create or read messages. In addition, this standard - does not specify an encoding of the characters for either transport - or storage; that is, it does not specify the number of bits used or - how those bits are specifically transferred over the wire or stored - on disk. - -1.2. Notational conventions - -1.2.1. Requirements notation - - This document occasionally uses terms that appear in capital letters. - When the terms "MUST", "SHOULD", "RECOMMENDED", "MUST NOT", "SHOULD - NOT", and "MAY" appear capitalized, they are being used to indicate - particular requirements of this specification. A discussion of the - meanings of these terms appears in [RFC2119]. - -1.2.2. Syntactic notation - - This standard uses the Augmented Backus-Naur Form (ABNF) notation - specified in [RFC2234] for the formal definitions of the syntax of - messages. Characters will be specified either by a decimal value - (e.g., the value %d65 for uppercase A and %d97 for lowercase A) or by - a case-insensitive literal value enclosed in quotation marks (e.g., - "A" for either uppercase or lowercase A). See [RFC2234] for the full - description of the notation. - -1.3. Structure of this document - - This document is divided into several sections. - - This section, section 1, is a short introduction to the document. - - Section 2 lays out the general description of a message and its - constituent parts. This is an overview to help the reader understand - some of the general principles used in the later portions of this - document. Any examples in this section MUST NOT be taken as - specification of the formal syntax of any part of a message. - - Section 3 specifies formal ABNF rules for the structure of each part - of a message (the syntax) and describes the relationship between - those parts and their meaning in the context of a message (the - semantics). That is, it describes the actual rules for the structure - of each part of a message (the syntax) as well as a description of - the parts and instructions on how they ought to be interpreted (the - semantics). This includes analysis of the syntax and semantics of - - - -Resnick Standards Track [Page 4] - -RFC 2822 Internet Message Format April 2001 - - - subparts of messages that have specific structure. The syntax - included in section 3 represents messages as they MUST be created. - There are also notes in section 3 to indicate if any of the options - specified in the syntax SHOULD be used over any of the others. - - Both sections 2 and 3 describe messages that are legal to generate - for purposes of this standard. - - Section 4 of this document specifies an "obsolete" syntax. There are - references in section 3 to these obsolete syntactic elements. The - rules of the obsolete syntax are elements that have appeared in - earlier revisions of this standard or have previously been widely - used in Internet messages. As such, these elements MUST be - interpreted by parsers of messages in order to be conformant to this - standard. However, since items in this syntax have been determined - to be non-interoperable or to cause significant problems for - recipients of messages, they MUST NOT be generated by creators of - conformant messages. - - Section 5 details security considerations to take into account when - implementing this standard. - - Section 6 is a bibliography of references in this document. - - Section 7 contains the editor's address. - - Section 8 contains acknowledgements. - - Appendix A lists examples of different sorts of messages. These - examples are not exhaustive of the types of messages that appear on - the Internet, but give a broad overview of certain syntactic forms. - - Appendix B lists the differences between this standard and earlier - standards for Internet messages. - - Appendix C has copyright and intellectual property notices. - -2. Lexical Analysis of Messages - -2.1. General Description - - At the most basic level, a message is a series of characters. A - message that is conformant with this standard is comprised of - characters with values in the range 1 through 127 and interpreted as - US-ASCII characters [ASCII]. For brevity, this document sometimes - refers to this range of characters as simply "US-ASCII characters". - - - - - -Resnick Standards Track [Page 5] - -RFC 2822 Internet Message Format April 2001 - - - Note: This standard specifies that messages are made up of characters - in the US-ASCII range of 1 through 127. There are other documents, - specifically the MIME document series [RFC2045, RFC2046, RFC2047, - RFC2048, RFC2049], that extend this standard to allow for values - outside of that range. Discussion of those mechanisms is not within - the scope of this standard. - - Messages are divided into lines of characters. A line is a series of - characters that is delimited with the two characters carriage-return - and line-feed; that is, the carriage return (CR) character (ASCII - value 13) followed immediately by the line feed (LF) character (ASCII - value 10). (The carriage-return/line-feed pair is usually written in - this document as "CRLF".) - - A message consists of header fields (collectively called "the header - of the message") followed, optionally, by a body. The header is a - sequence of lines of characters with special syntax as defined in - this standard. The body is simply a sequence of characters that - follows the header and is separated from the header by an empty line - (i.e., a line with nothing preceding the CRLF). - -2.1.1. Line Length Limits - - There are two limits that this standard places on the number of - characters in a line. Each line of characters MUST be no more than - 998 characters, and SHOULD be no more than 78 characters, excluding - the CRLF. - - The 998 character limit is due to limitations in many implementations - which send, receive, or store Internet Message Format messages that - simply cannot handle more than 998 characters on a line. Receiving - implementations would do well to handle an arbitrarily large number - of characters in a line for robustness sake. However, there are so - many implementations which (in compliance with the transport - requirements of [RFC2821]) do not accept messages containing more - than 1000 character including the CR and LF per line, it is important - for implementations not to create such messages. - - The more conservative 78 character recommendation is to accommodate - the many implementations of user interfaces that display these - messages which may truncate, or disastrously wrap, the display of - more than 78 characters per line, in spite of the fact that such - implementations are non-conformant to the intent of this - specification (and that of [RFC2821] if they actually cause - information to be lost). Again, even though this limitation is put on - messages, it is encumbant upon implementations which display messages - - - - - -Resnick Standards Track [Page 6] - -RFC 2822 Internet Message Format April 2001 - - - to handle an arbitrarily large number of characters in a line - (certainly at least up to the 998 character limit) for the sake of - robustness. - -2.2. Header Fields - - Header fields are lines composed of a field name, followed by a colon - (":"), followed by a field body, and terminated by CRLF. A field - name MUST be composed of printable US-ASCII characters (i.e., - characters that have values between 33 and 126, inclusive), except - colon. A field body may be composed of any US-ASCII characters, - except for CR and LF. However, a field body may contain CRLF when - used in header "folding" and "unfolding" as described in section - 2.2.3. All field bodies MUST conform to the syntax described in - sections 3 and 4 of this standard. - -2.2.1. Unstructured Header Field Bodies - - Some field bodies in this standard are defined simply as - "unstructured" (which is specified below as any US-ASCII characters, - except for CR and LF) with no further restrictions. These are - referred to as unstructured field bodies. Semantically, unstructured - field bodies are simply to be treated as a single line of characters - with no further processing (except for header "folding" and - "unfolding" as described in section 2.2.3). - -2.2.2. Structured Header Field Bodies - - Some field bodies in this standard have specific syntactical - structure more restrictive than the unstructured field bodies - described above. These are referred to as "structured" field bodies. - Structured field bodies are sequences of specific lexical tokens as - described in sections 3 and 4 of this standard. Many of these tokens - are allowed (according to their syntax) to be introduced or end with - comments (as described in section 3.2.3) as well as the space (SP, - ASCII value 32) and horizontal tab (HTAB, ASCII value 9) characters - (together known as the white space characters, WSP), and those WSP - characters are subject to header "folding" and "unfolding" as - described in section 2.2.3. Semantic analysis of structured field - bodies is given along with their syntax. - -2.2.3. Long Header Fields - - Each header field is logically a single line of characters comprising - the field name, the colon, and the field body. For convenience - however, and to deal with the 998/78 character limitations per line, - the field body portion of a header field can be split into a multiple - line representation; this is called "folding". The general rule is - - - -Resnick Standards Track [Page 7] - -RFC 2822 Internet Message Format April 2001 - - - that wherever this standard allows for folding white space (not - simply WSP characters), a CRLF may be inserted before any WSP. For - example, the header field: - - Subject: This is a test - - can be represented as: - - Subject: This - is a test - - Note: Though structured field bodies are defined in such a way that - folding can take place between many of the lexical tokens (and even - within some of the lexical tokens), folding SHOULD be limited to - placing the CRLF at higher-level syntactic breaks. For instance, if - a field body is defined as comma-separated values, it is recommended - that folding occur after the comma separating the structured items in - preference to other places where the field could be folded, even if - it is allowed elsewhere. - - The process of moving from this folded multiple-line representation - of a header field to its single line representation is called - "unfolding". Unfolding is accomplished by simply removing any CRLF - that is immediately followed by WSP. Each header field should be - treated in its unfolded form for further syntactic and semantic - evaluation. - -2.3. Body - - The body of a message is simply lines of US-ASCII characters. The - only two limitations on the body are as follows: - - - CR and LF MUST only occur together as CRLF; they MUST NOT appear - independently in the body. - - - Lines of characters in the body MUST be limited to 998 characters, - and SHOULD be limited to 78 characters, excluding the CRLF. - - Note: As was stated earlier, there are other standards documents, - specifically the MIME documents [RFC2045, RFC2046, RFC2048, RFC2049] - that extend this standard to allow for different sorts of message - bodies. Again, these mechanisms are beyond the scope of this - document. - - - - - - - - -Resnick Standards Track [Page 8] - -RFC 2822 Internet Message Format April 2001 - - -3. Syntax - -3.1. Introduction - - The syntax as given in this section defines the legal syntax of - Internet messages. Messages that are conformant to this standard - MUST conform to the syntax in this section. If there are options in - this section where one option SHOULD be generated, that is indicated - either in the prose or in a comment next to the syntax. - - For the defined expressions, a short description of the syntax and - use is given, followed by the syntax in ABNF, followed by a semantic - analysis. Primitive tokens that are used but otherwise unspecified - come from [RFC2234]. - - In some of the definitions, there will be nonterminals whose names - start with "obs-". These "obs-" elements refer to tokens defined in - the obsolete syntax in section 4. In all cases, these productions - are to be ignored for the purposes of generating legal Internet - messages and MUST NOT be used as part of such a message. However, - when interpreting messages, these tokens MUST be honored as part of - the legal syntax. In this sense, section 3 defines a grammar for - generation of messages, with "obs-" elements that are to be ignored, - while section 4 adds grammar for interpretation of messages. - -3.2. Lexical Tokens - - The following rules are used to define an underlying lexical - analyzer, which feeds tokens to the higher-level parsers. This - section defines the tokens used in structured header field bodies. - - Note: Readers of this standard need to pay special attention to how - these lexical tokens are used in both the lower-level and - higher-level syntax later in the document. Particularly, the white - space tokens and the comment tokens defined in section 3.2.3 get used - in the lower-level tokens defined here, and those lower-level tokens - are in turn used as parts of the higher-level tokens defined later. - Therefore, the white space and comments may be allowed in the - higher-level tokens even though they may not explicitly appear in a - particular definition. - -3.2.1. Primitive Tokens - - The following are primitive tokens referred to elsewhere in this - standard, but not otherwise defined in [RFC2234]. Some of them will - not appear anywhere else in the syntax, but they are convenient to - refer to in other parts of this document. - - - - -Resnick Standards Track [Page 9] - -RFC 2822 Internet Message Format April 2001 - - - Note: The "specials" below are just such an example. Though the - specials token does not appear anywhere else in this standard, it is - useful for implementers who use tools that lexically analyze - messages. Each of the characters in specials can be used to indicate - a tokenization point in lexical analysis. - -NO-WS-CTL = %d1-8 / ; US-ASCII control characters - %d11 / ; that do not include the - %d12 / ; carriage return, line feed, - %d14-31 / ; and white space characters - %d127 - -text = %d1-9 / ; Characters excluding CR and LF - %d11 / - %d12 / - %d14-127 / - obs-text - -specials = "(" / ")" / ; Special characters used in - "<" / ">" / ; other parts of the syntax - "[" / "]" / - ":" / ";" / - "@" / "\" / - "," / "." / - DQUOTE - - No special semantics are attached to these tokens. They are simply - single characters. - -3.2.2. Quoted characters - - Some characters are reserved for special interpretation, such as - delimiting lexical tokens. To permit use of these characters as - uninterpreted data, a quoting mechanism is provided. - -quoted-pair = ("\" text) / obs-qp - - Where any quoted-pair appears, it is to be interpreted as the text - character alone. That is to say, the "\" character that appears as - part of a quoted-pair is semantically "invisible". - - Note: The "\" character may appear in a message where it is not part - of a quoted-pair. A "\" character that does not appear in a - quoted-pair is not semantically invisible. The only places in this - standard where quoted-pair currently appears are ccontent, qcontent, - dcontent, no-fold-quote, and no-fold-literal. - - - - - -Resnick Standards Track [Page 10] - -RFC 2822 Internet Message Format April 2001 - - -3.2.3. Folding white space and comments - - White space characters, including white space used in folding - (described in section 2.2.3), may appear between many elements in - header field bodies. Also, strings of characters that are treated as - comments may be included in structured field bodies as characters - enclosed in parentheses. The following defines the folding white - space (FWS) and comment constructs. - - Strings of characters enclosed in parentheses are considered comments - so long as they do not appear within a "quoted-string", as defined in - section 3.2.5. Comments may nest. - - There are several places in this standard where comments and FWS may - be freely inserted. To accommodate that syntax, an additional token - for "CFWS" is defined for places where comments and/or FWS can occur. - However, where CFWS occurs in this standard, it MUST NOT be inserted - in such a way that any line of a folded header field is made up - entirely of WSP characters and nothing else. - -FWS = ([*WSP CRLF] 1*WSP) / ; Folding white space - obs-FWS - -ctext = NO-WS-CTL / ; Non white space controls - - %d33-39 / ; The rest of the US-ASCII - %d42-91 / ; characters not including "(", - %d93-126 ; ")", or "\" - -ccontent = ctext / quoted-pair / comment - -comment = "(" *([FWS] ccontent) [FWS] ")" - -CFWS = *([FWS] comment) (([FWS] comment) / FWS) - - Throughout this standard, where FWS (the folding white space token) - appears, it indicates a place where header folding, as discussed in - section 2.2.3, may take place. Wherever header folding appears in a - message (that is, a header field body containing a CRLF followed by - any WSP), header unfolding (removal of the CRLF) is performed before - any further lexical analysis is performed on that header field - according to this standard. That is to say, any CRLF that appears in - FWS is semantically "invisible." - - A comment is normally used in a structured field body to provide some - human readable informational text. Since a comment is allowed to - contain FWS, folding is permitted within the comment. Also note that - since quoted-pair is allowed in a comment, the parentheses and - - - -Resnick Standards Track [Page 11] - -RFC 2822 Internet Message Format April 2001 - - - backslash characters may appear in a comment so long as they appear - as a quoted-pair. Semantically, the enclosing parentheses are not - part of the comment; the comment is what is contained between the two - parentheses. As stated earlier, the "\" in any quoted-pair and the - CRLF in any FWS that appears within the comment are semantically - "invisible" and therefore not part of the comment either. - - Runs of FWS, comment or CFWS that occur between lexical tokens in a - structured field header are semantically interpreted as a single - space character. - -3.2.4. Atom - - Several productions in structured header field bodies are simply - strings of certain basic characters. Such productions are called - atoms. - - Some of the structured header field bodies also allow the period - character (".", ASCII value 46) within runs of atext. An additional - "dot-atom" token is defined for those purposes. - -atext = ALPHA / DIGIT / ; Any character except controls, - "!" / "#" / ; SP, and specials. - "$" / "%" / ; Used for atoms - "&" / "'" / - "*" / "+" / - "-" / "/" / - "=" / "?" / - "^" / "_" / - "`" / "{" / - "|" / "}" / - "~" - -atom = [CFWS] 1*atext [CFWS] - -dot-atom = [CFWS] dot-atom-text [CFWS] - -dot-atom-text = 1*atext *("." 1*atext) - - Both atom and dot-atom are interpreted as a single unit, comprised of - the string of characters that make it up. Semantically, the optional - comments and FWS surrounding the rest of the characters are not part - of the atom; the atom is only the run of atext characters in an atom, - or the atext and "." characters in a dot-atom. - - - - - - - -Resnick Standards Track [Page 12] - -RFC 2822 Internet Message Format April 2001 - - -3.2.5. Quoted strings - - Strings of characters that include characters other than those - allowed in atoms may be represented in a quoted string format, where - the characters are surrounded by quote (DQUOTE, ASCII value 34) - characters. - -qtext = NO-WS-CTL / ; Non white space controls - - %d33 / ; The rest of the US-ASCII - %d35-91 / ; characters not including "\" - %d93-126 ; or the quote character - -qcontent = qtext / quoted-pair - -quoted-string = [CFWS] - DQUOTE *([FWS] qcontent) [FWS] DQUOTE - [CFWS] - - A quoted-string is treated as a unit. That is, quoted-string is - identical to atom, semantically. Since a quoted-string is allowed to - contain FWS, folding is permitted. Also note that since quoted-pair - is allowed in a quoted-string, the quote and backslash characters may - appear in a quoted-string so long as they appear as a quoted-pair. - - Semantically, neither the optional CFWS outside of the quote - characters nor the quote characters themselves are part of the - quoted-string; the quoted-string is what is contained between the two - quote characters. As stated earlier, the "\" in any quoted-pair and - the CRLF in any FWS/CFWS that appears within the quoted-string are - semantically "invisible" and therefore not part of the quoted-string - either. - -3.2.6. Miscellaneous tokens - - Three additional tokens are defined, word and phrase for combinations - of atoms and/or quoted-strings, and unstructured for use in - unstructured header fields and in some places within structured - header fields. - -word = atom / quoted-string - -phrase = 1*word / obs-phrase - - - - - - - - -Resnick Standards Track [Page 13] - -RFC 2822 Internet Message Format April 2001 - - -utext = NO-WS-CTL / ; Non white space controls - %d33-126 / ; The rest of US-ASCII - obs-utext - -unstructured = *([FWS] utext) [FWS] - -3.3. Date and Time Specification - - Date and time occur in several header fields. This section specifies - the syntax for a full date and time specification. Though folding - white space is permitted throughout the date-time specification, it - is RECOMMENDED that a single space be used in each place that FWS - appears (whether it is required or optional); some older - implementations may not interpret other occurrences of folding white - space correctly. - -date-time = [ day-of-week "," ] date FWS time [CFWS] - -day-of-week = ([FWS] day-name) / obs-day-of-week - -day-name = "Mon" / "Tue" / "Wed" / "Thu" / - "Fri" / "Sat" / "Sun" - -date = day month year - -year = 4*DIGIT / obs-year - -month = (FWS month-name FWS) / obs-month - -month-name = "Jan" / "Feb" / "Mar" / "Apr" / - "May" / "Jun" / "Jul" / "Aug" / - "Sep" / "Oct" / "Nov" / "Dec" - -day = ([FWS] 1*2DIGIT) / obs-day - -time = time-of-day FWS zone - -time-of-day = hour ":" minute [ ":" second ] - -hour = 2DIGIT / obs-hour - -minute = 2DIGIT / obs-minute - -second = 2DIGIT / obs-second - -zone = (( "+" / "-" ) 4DIGIT) / obs-zone - - - - - -Resnick Standards Track [Page 14] - -RFC 2822 Internet Message Format April 2001 - - - The day is the numeric day of the month. The year is any numeric - year 1900 or later. - - The time-of-day specifies the number of hours, minutes, and - optionally seconds since midnight of the date indicated. - - The date and time-of-day SHOULD express local time. - - The zone specifies the offset from Coordinated Universal Time (UTC, - formerly referred to as "Greenwich Mean Time") that the date and - time-of-day represent. The "+" or "-" indicates whether the - time-of-day is ahead of (i.e., east of) or behind (i.e., west of) - Universal Time. The first two digits indicate the number of hours - difference from Universal Time, and the last two digits indicate the - number of minutes difference from Universal Time. (Hence, +hhmm - means +(hh * 60 + mm) minutes, and -hhmm means -(hh * 60 + mm) - minutes). The form "+0000" SHOULD be used to indicate a time zone at - Universal Time. Though "-0000" also indicates Universal Time, it is - used to indicate that the time was generated on a system that may be - in a local time zone other than Universal Time and therefore - indicates that the date-time contains no information about the local - time zone. - - A date-time specification MUST be semantically valid. That is, the - day-of-the-week (if included) MUST be the day implied by the date, - the numeric day-of-month MUST be between 1 and the number of days - allowed for the specified month (in the specified year), the - time-of-day MUST be in the range 00:00:00 through 23:59:60 (the - number of seconds allowing for a leap second; see [STD12]), and the - zone MUST be within the range -9959 through +9959. - -3.4. Address Specification - - Addresses occur in several message header fields to indicate senders - and recipients of messages. An address may either be an individual - mailbox, or a group of mailboxes. - -address = mailbox / group - -mailbox = name-addr / addr-spec - -name-addr = [display-name] angle-addr - -angle-addr = [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr - -group = display-name ":" [mailbox-list / CFWS] ";" - [CFWS] - - - - -Resnick Standards Track [Page 15] - -RFC 2822 Internet Message Format April 2001 - - -display-name = phrase - -mailbox-list = (mailbox *("," mailbox)) / obs-mbox-list - -address-list = (address *("," address)) / obs-addr-list - - A mailbox receives mail. It is a conceptual entity which does not - necessarily pertain to file storage. For example, some sites may - choose to print mail on a printer and deliver the output to the - addressee's desk. Normally, a mailbox is comprised of two parts: (1) - an optional display name that indicates the name of the recipient - (which could be a person or a system) that could be displayed to the - user of a mail application, and (2) an addr-spec address enclosed in - angle brackets ("<" and ">"). There is also an alternate simple form - of a mailbox where the addr-spec address appears alone, without the - recipient's name or the angle brackets. The Internet addr-spec - address is described in section 3.4.1. - - Note: Some legacy implementations used the simple form where the - addr-spec appears without the angle brackets, but included the name - of the recipient in parentheses as a comment following the addr-spec. - Since the meaning of the information in a comment is unspecified, - implementations SHOULD use the full name-addr form of the mailbox, - instead of the legacy form, to specify the display name associated - with a mailbox. Also, because some legacy implementations interpret - the comment, comments generally SHOULD NOT be used in address fields - to avoid confusing such implementations. - - When it is desirable to treat several mailboxes as a single unit - (i.e., in a distribution list), the group construct can be used. The - group construct allows the sender to indicate a named group of - recipients. This is done by giving a display name for the group, - followed by a colon, followed by a comma separated list of any number - of mailboxes (including zero and one), and ending with a semicolon. - Because the list of mailboxes can be empty, using the group construct - is also a simple way to communicate to recipients that the message - was sent to one or more named sets of recipients, without actually - providing the individual mailbox address for each of those - recipients. - -3.4.1. Addr-spec specification - - An addr-spec is a specific Internet identifier that contains a - locally interpreted string followed by the at-sign character ("@", - ASCII value 64) followed by an Internet domain. The locally - interpreted string is either a quoted-string or a dot-atom. If the - string can be represented as a dot-atom (that is, it contains no - characters other than atext characters or "." surrounded by atext - - - -Resnick Standards Track [Page 16] - -RFC 2822 Internet Message Format April 2001 - - - characters), then the dot-atom form SHOULD be used and the - quoted-string form SHOULD NOT be used. Comments and folding white - space SHOULD NOT be used around the "@" in the addr-spec. - -addr-spec = local-part "@" domain - -local-part = dot-atom / quoted-string / obs-local-part - -domain = dot-atom / domain-literal / obs-domain - -domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS] - -dcontent = dtext / quoted-pair - -dtext = NO-WS-CTL / ; Non white space controls - - %d33-90 / ; The rest of the US-ASCII - %d94-126 ; characters not including "[", - ; "]", or "\" - - The domain portion identifies the point to which the mail is - delivered. In the dot-atom form, this is interpreted as an Internet - domain name (either a host name or a mail exchanger name) as - described in [STD3, STD13, STD14]. In the domain-literal form, the - domain is interpreted as the literal Internet address of the - particular host. In both cases, how addressing is used and how - messages are transported to a particular host is covered in the mail - transport document [RFC2821]. These mechanisms are outside of the - scope of this document. - - The local-part portion is a domain dependent string. In addresses, - it is simply interpreted on the particular host as a name of a - particular mailbox. - -3.5 Overall message syntax - - A message consists of header fields, optionally followed by a message - body. Lines in a message MUST be a maximum of 998 characters - excluding the CRLF, but it is RECOMMENDED that lines be limited to 78 - characters excluding the CRLF. (See section 2.1.1 for explanation.) - In a message body, though all of the characters listed in the text - rule MAY be used, the use of US-ASCII control characters (values 1 - through 8, 11, 12, and 14 through 31) is discouraged since their - interpretation by receivers for display is not guaranteed. - - - - - - - -Resnick Standards Track [Page 17] - -RFC 2822 Internet Message Format April 2001 - - -message = (fields / obs-fields) - [CRLF body] - -body = *(*998text CRLF) *998text - - The header fields carry most of the semantic information and are - defined in section 3.6. The body is simply a series of lines of text - which are uninterpreted for the purposes of this standard. - -3.6. Field definitions - - The header fields of a message are defined here. All header fields - have the same general syntactic structure: A field name, followed by - a colon, followed by the field body. The specific syntax for each - header field is defined in the subsequent sections. - - Note: In the ABNF syntax for each field in subsequent sections, each - field name is followed by the required colon. However, for brevity - sometimes the colon is not referred to in the textual description of - the syntax. It is, nonetheless, required. - - It is important to note that the header fields are not guaranteed to - be in a particular order. They may appear in any order, and they - have been known to be reordered occasionally when transported over - the Internet. However, for the purposes of this standard, header - fields SHOULD NOT be reordered when a message is transported or - transformed. More importantly, the trace header fields and resent - header fields MUST NOT be reordered, and SHOULD be kept in blocks - prepended to the message. See sections 3.6.6 and 3.6.7 for more - information. - - The only required header fields are the origination date field and - the originator address field(s). All other header fields are - syntactically optional. More information is contained in the table - following this definition. - -fields = *(trace - *(resent-date / - resent-from / - resent-sender / - resent-to / - resent-cc / - resent-bcc / - resent-msg-id)) - *(orig-date / - from / - sender / - reply-to / - - - -Resnick Standards Track [Page 18] - -RFC 2822 Internet Message Format April 2001 - - - to / - cc / - bcc / - message-id / - in-reply-to / - references / - subject / - comments / - keywords / - optional-field) - - The following table indicates limits on the number of times each - field may occur in a message header as well as any special - limitations on the use of those fields. An asterisk next to a value - in the minimum or maximum column indicates that a special restriction - appears in the Notes column. - -Field Min number Max number Notes - -trace 0 unlimited Block prepended - see - 3.6.7 - -resent-date 0* unlimited* One per block, required - if other resent fields - present - see 3.6.6 - -resent-from 0 unlimited* One per block - see - 3.6.6 - -resent-sender 0* unlimited* One per block, MUST - occur with multi-address - resent-from - see 3.6.6 - -resent-to 0 unlimited* One per block - see - 3.6.6 - -resent-cc 0 unlimited* One per block - see - 3.6.6 - -resent-bcc 0 unlimited* One per block - see - 3.6.6 - -resent-msg-id 0 unlimited* One per block - see - 3.6.6 - -orig-date 1 1 - -from 1 1 See sender and 3.6.2 - - - -Resnick Standards Track [Page 19] - -RFC 2822 Internet Message Format April 2001 - - -sender 0* 1 MUST occur with multi- - address from - see 3.6.2 - -reply-to 0 1 - -to 0 1 - -cc 0 1 - -bcc 0 1 - -message-id 0* 1 SHOULD be present - see - 3.6.4 - -in-reply-to 0* 1 SHOULD occur in some - replies - see 3.6.4 - -references 0* 1 SHOULD occur in some - replies - see 3.6.4 - -subject 0 1 - -comments 0 unlimited - -keywords 0 unlimited - -optional-field 0 unlimited - - The exact interpretation of each field is described in subsequent - sections. - -3.6.1. The origination date field - - The origination date field consists of the field name "Date" followed - by a date-time specification. - -orig-date = "Date:" date-time CRLF - - The origination date specifies the date and time at which the creator - of the message indicated that the message was complete and ready to - enter the mail delivery system. For instance, this might be the time - that a user pushes the "send" or "submit" button in an application - program. In any case, it is specifically not intended to convey the - time that the message is actually transported, but rather the time at - which the human or other creator of the message has put the message - into its final form, ready for transport. (For example, a portable - computer user who is not connected to a network might queue a message - - - - -Resnick Standards Track [Page 20] - -RFC 2822 Internet Message Format April 2001 - - - for delivery. The origination date is intended to contain the date - and time that the user queued the message, not the time when the user - connected to the network to send the message.) - -3.6.2. Originator fields - - The originator fields of a message consist of the from field, the - sender field (when applicable), and optionally the reply-to field. - The from field consists of the field name "From" and a - comma-separated list of one or more mailbox specifications. If the - from field contains more than one mailbox specification in the - mailbox-list, then the sender field, containing the field name - "Sender" and a single mailbox specification, MUST appear in the - message. In either case, an optional reply-to field MAY also be - included, which contains the field name "Reply-To" and a - comma-separated list of one or more addresses. - -from = "From:" mailbox-list CRLF - -sender = "Sender:" mailbox CRLF - -reply-to = "Reply-To:" address-list CRLF - - The originator fields indicate the mailbox(es) of the source of the - message. The "From:" field specifies the author(s) of the message, - that is, the mailbox(es) of the person(s) or system(s) responsible - for the writing of the message. The "Sender:" field specifies the - mailbox of the agent responsible for the actual transmission of the - message. For example, if a secretary were to send a message for - another person, the mailbox of the secretary would appear in the - "Sender:" field and the mailbox of the actual author would appear in - the "From:" field. If the originator of the message can be indicated - by a single mailbox and the author and transmitter are identical, the - "Sender:" field SHOULD NOT be used. Otherwise, both fields SHOULD - appear. - - The originator fields also provide the information required when - replying to a message. When the "Reply-To:" field is present, it - indicates the mailbox(es) to which the author of the message suggests - that replies be sent. In the absence of the "Reply-To:" field, - replies SHOULD by default be sent to the mailbox(es) specified in the - "From:" field unless otherwise specified by the person composing the - reply. - - In all cases, the "From:" field SHOULD NOT contain any mailbox that - does not belong to the author(s) of the message. See also section - 3.6.3 for more information on forming the destination addresses for a - reply. - - - -Resnick Standards Track [Page 21] - -RFC 2822 Internet Message Format April 2001 - - -3.6.3. Destination address fields - - The destination fields of a message consist of three possible fields, - each of the same form: The field name, which is either "To", "Cc", or - "Bcc", followed by a comma-separated list of one or more addresses - (either mailbox or group syntax). - -to = "To:" address-list CRLF - -cc = "Cc:" address-list CRLF - -bcc = "Bcc:" (address-list / [CFWS]) CRLF - - The destination fields specify the recipients of the message. Each - destination field may have one or more addresses, and each of the - addresses indicate the intended recipients of the message. The only - difference between the three fields is how each is used. - - The "To:" field contains the address(es) of the primary recipient(s) - of the message. - - The "Cc:" field (where the "Cc" means "Carbon Copy" in the sense of - making a copy on a typewriter using carbon paper) contains the - addresses of others who are to receive the message, though the - content of the message may not be directed at them. - - The "Bcc:" field (where the "Bcc" means "Blind Carbon Copy") contains - addresses of recipients of the message whose addresses are not to be - revealed to other recipients of the message. There are three ways in - which the "Bcc:" field is used. In the first case, when a message - containing a "Bcc:" field is prepared to be sent, the "Bcc:" line is - removed even though all of the recipients (including those specified - in the "Bcc:" field) are sent a copy of the message. In the second - case, recipients specified in the "To:" and "Cc:" lines each are sent - a copy of the message with the "Bcc:" line removed as above, but the - recipients on the "Bcc:" line get a separate copy of the message - containing a "Bcc:" line. (When there are multiple recipient - addresses in the "Bcc:" field, some implementations actually send a - separate copy of the message to each recipient with a "Bcc:" - containing only the address of that particular recipient.) Finally, - since a "Bcc:" field may contain no addresses, a "Bcc:" field can be - sent without any addresses indicating to the recipients that blind - copies were sent to someone. Which method to use with "Bcc:" fields - is implementation dependent, but refer to the "Security - Considerations" section of this document for a discussion of each. - - - - - - -Resnick Standards Track [Page 22] - -RFC 2822 Internet Message Format April 2001 - - - When a message is a reply to another message, the mailboxes of the - authors of the original message (the mailboxes in the "From:" field) - or mailboxes specified in the "Reply-To:" field (if it exists) MAY - appear in the "To:" field of the reply since these would normally be - the primary recipients of the reply. If a reply is sent to a message - that has destination fields, it is often desirable to send a copy of - the reply to all of the recipients of the message, in addition to the - author. When such a reply is formed, addresses in the "To:" and - "Cc:" fields of the original message MAY appear in the "Cc:" field of - the reply, since these are normally secondary recipients of the - reply. If a "Bcc:" field is present in the original message, - addresses in that field MAY appear in the "Bcc:" field of the reply, - but SHOULD NOT appear in the "To:" or "Cc:" fields. - - Note: Some mail applications have automatic reply commands that - include the destination addresses of the original message in the - destination addresses of the reply. How those reply commands behave - is implementation dependent and is beyond the scope of this document. - In particular, whether or not to include the original destination - addresses when the original message had a "Reply-To:" field is not - addressed here. - -3.6.4. Identification fields - - Though optional, every message SHOULD have a "Message-ID:" field. - Furthermore, reply messages SHOULD have "In-Reply-To:" and - "References:" fields as appropriate, as described below. - - The "Message-ID:" field contains a single unique message identifier. - The "References:" and "In-Reply-To:" field each contain one or more - unique message identifiers, optionally separated by CFWS. - - The message identifier (msg-id) is similar in syntax to an angle-addr - construct without the internal CFWS. - -message-id = "Message-ID:" msg-id CRLF - -in-reply-to = "In-Reply-To:" 1*msg-id CRLF - -references = "References:" 1*msg-id CRLF - -msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS] - -id-left = dot-atom-text / no-fold-quote / obs-id-left - -id-right = dot-atom-text / no-fold-literal / obs-id-right - -no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE - - - -Resnick Standards Track [Page 23] - -RFC 2822 Internet Message Format April 2001 - - -no-fold-literal = "[" *(dtext / quoted-pair) "]" - - The "Message-ID:" field provides a unique message identifier that - refers to a particular version of a particular message. The - uniqueness of the message identifier is guaranteed by the host that - generates it (see below). This message identifier is intended to be - machine readable and not necessarily meaningful to humans. A message - identifier pertains to exactly one instantiation of a particular - message; subsequent revisions to the message each receive new message - identifiers. - - Note: There are many instances when messages are "changed", but those - changes do not constitute a new instantiation of that message, and - therefore the message would not get a new message identifier. For - example, when messages are introduced into the transport system, they - are often prepended with additional header fields such as trace - fields (described in section 3.6.7) and resent fields (described in - section 3.6.6). The addition of such header fields does not change - the identity of the message and therefore the original "Message-ID:" - field is retained. In all cases, it is the meaning that the sender - of the message wishes to convey (i.e., whether this is the same - message or a different message) that determines whether or not the - "Message-ID:" field changes, not any particular syntactic difference - that appears (or does not appear) in the message. - - The "In-Reply-To:" and "References:" fields are used when creating a - reply to a message. They hold the message identifier of the original - message and the message identifiers of other messages (for example, - in the case of a reply to a message which was itself a reply). The - "In-Reply-To:" field may be used to identify the message (or - messages) to which the new message is a reply, while the - "References:" field may be used to identify a "thread" of - conversation. - - When creating a reply to a message, the "In-Reply-To:" and - "References:" fields of the resultant message are constructed as - follows: - - The "In-Reply-To:" field will contain the contents of the "Message- - ID:" field of the message to which this one is a reply (the "parent - message"). If there is more than one parent message, then the "In- - Reply-To:" field will contain the contents of all of the parents' - "Message-ID:" fields. If there is no "Message-ID:" field in any of - the parent messages, then the new message will have no "In-Reply-To:" - field. - - - - - - -Resnick Standards Track [Page 24] - -RFC 2822 Internet Message Format April 2001 - - - The "References:" field will contain the contents of the parent's - "References:" field (if any) followed by the contents of the parent's - "Message-ID:" field (if any). If the parent message does not contain - a "References:" field but does have an "In-Reply-To:" field - containing a single message identifier, then the "References:" field - will contain the contents of the parent's "In-Reply-To:" field - followed by the contents of the parent's "Message-ID:" field (if - any). If the parent has none of the "References:", "In-Reply-To:", - or "Message-ID:" fields, then the new message will have no - "References:" field. - - Note: Some implementations parse the "References:" field to display - the "thread of the discussion". These implementations assume that - each new message is a reply to a single parent and hence that they - can walk backwards through the "References:" field to find the parent - of each message listed there. Therefore, trying to form a - "References:" field for a reply that has multiple parents is - discouraged and how to do so is not defined in this document. - - The message identifier (msg-id) itself MUST be a globally unique - identifier for a message. The generator of the message identifier - MUST guarantee that the msg-id is unique. There are several - algorithms that can be used to accomplish this. Since the msg-id has - a similar syntax to angle-addr (identical except that comments and - folding white space are not allowed), a good method is to put the - domain name (or a domain literal IP address) of the host on which the - message identifier was created on the right hand side of the "@", and - put a combination of the current absolute date and time along with - some other currently unique (perhaps sequential) identifier available - on the system (for example, a process id number) on the left hand - side. Using a date on the left hand side and a domain name or domain - literal on the right hand side makes it possible to guarantee - uniqueness since no two hosts use the same domain name or IP address - at the same time. Though other algorithms will work, it is - RECOMMENDED that the right hand side contain some domain identifier - (either of the host itself or otherwise) such that the generator of - the message identifier can guarantee the uniqueness of the left hand - side within the scope of that domain. - - Semantically, the angle bracket characters are not part of the - msg-id; the msg-id is what is contained between the two angle bracket - characters. - - - - - - - - - -Resnick Standards Track [Page 25] - -RFC 2822 Internet Message Format April 2001 - - -3.6.5. Informational fields - - The informational fields are all optional. The "Keywords:" field - contains a comma-separated list of one or more words or - quoted-strings. The "Subject:" and "Comments:" fields are - unstructured fields as defined in section 2.2.1, and therefore may - contain text or folding white space. - -subject = "Subject:" unstructured CRLF - -comments = "Comments:" unstructured CRLF - -keywords = "Keywords:" phrase *("," phrase) CRLF - - These three fields are intended to have only human-readable content - with information about the message. The "Subject:" field is the most - common and contains a short string identifying the topic of the - message. When used in a reply, the field body MAY start with the - string "Re: " (from the Latin "res", in the matter of) followed by - the contents of the "Subject:" field body of the original message. - If this is done, only one instance of the literal string "Re: " ought - to be used since use of other strings or more than one instance can - lead to undesirable consequences. The "Comments:" field contains any - additional comments on the text of the body of the message. The - "Keywords:" field contains a comma-separated list of important words - and phrases that might be useful for the recipient. - -3.6.6. Resent fields - - Resent fields SHOULD be added to any message that is reintroduced by - a user into the transport system. A separate set of resent fields - SHOULD be added each time this is done. All of the resent fields - corresponding to a particular resending of the message SHOULD be - together. Each new set of resent fields is prepended to the message; - that is, the most recent set of resent fields appear earlier in the - message. No other fields in the message are changed when resent - fields are added. - - Each of the resent fields corresponds to a particular field elsewhere - in the syntax. For instance, the "Resent-Date:" field corresponds to - the "Date:" field and the "Resent-To:" field corresponds to the "To:" - field. In each case, the syntax for the field body is identical to - the syntax given previously for the corresponding field. - - When resent fields are used, the "Resent-From:" and "Resent-Date:" - fields MUST be sent. The "Resent-Message-ID:" field SHOULD be sent. - "Resent-Sender:" SHOULD NOT be used if "Resent-Sender:" would be - identical to "Resent-From:". - - - -Resnick Standards Track [Page 26] - -RFC 2822 Internet Message Format April 2001 - - -resent-date = "Resent-Date:" date-time CRLF - -resent-from = "Resent-From:" mailbox-list CRLF - -resent-sender = "Resent-Sender:" mailbox CRLF - -resent-to = "Resent-To:" address-list CRLF - -resent-cc = "Resent-Cc:" address-list CRLF - -resent-bcc = "Resent-Bcc:" (address-list / [CFWS]) CRLF - -resent-msg-id = "Resent-Message-ID:" msg-id CRLF - - Resent fields are used to identify a message as having been - reintroduced into the transport system by a user. The purpose of - using resent fields is to have the message appear to the final - recipient as if it were sent directly by the original sender, with - all of the original fields remaining the same. Each set of resent - fields correspond to a particular resending event. That is, if a - message is resent multiple times, each set of resent fields gives - identifying information for each individual time. Resent fields are - strictly informational. They MUST NOT be used in the normal - processing of replies or other such automatic actions on messages. - - Note: Reintroducing a message into the transport system and using - resent fields is a different operation from "forwarding". - "Forwarding" has two meanings: One sense of forwarding is that a mail - reading program can be told by a user to forward a copy of a message - to another person, making the forwarded message the body of the new - message. A forwarded message in this sense does not appear to have - come from the original sender, but is an entirely new message from - the forwarder of the message. On the other hand, forwarding is also - used to mean when a mail transport program gets a message and - forwards it on to a different destination for final delivery. Resent - header fields are not intended for use with either type of - forwarding. - - The resent originator fields indicate the mailbox of the person(s) or - system(s) that resent the message. As with the regular originator - fields, there are two forms: a simple "Resent-From:" form which - contains the mailbox of the individual doing the resending, and the - more complex form, when one individual (identified in the - "Resent-Sender:" field) resends a message on behalf of one or more - others (identified in the "Resent-From:" field). - - Note: When replying to a resent message, replies behave just as they - would with any other message, using the original "From:", - - - -Resnick Standards Track [Page 27] - -RFC 2822 Internet Message Format April 2001 - - - "Reply-To:", "Message-ID:", and other fields. The resent fields are - only informational and MUST NOT be used in the normal processing of - replies. - - The "Resent-Date:" indicates the date and time at which the resent - message is dispatched by the resender of the message. Like the - "Date:" field, it is not the date and time that the message was - actually transported. - - The "Resent-To:", "Resent-Cc:", and "Resent-Bcc:" fields function - identically to the "To:", "Cc:", and "Bcc:" fields respectively, - except that they indicate the recipients of the resent message, not - the recipients of the original message. - - The "Resent-Message-ID:" field provides a unique identifier for the - resent message. - -3.6.7. Trace fields - - The trace fields are a group of header fields consisting of an - optional "Return-Path:" field, and one or more "Received:" fields. - The "Return-Path:" header field contains a pair of angle brackets - that enclose an optional addr-spec. The "Received:" field contains a - (possibly empty) list of name/value pairs followed by a semicolon and - a date-time specification. The first item of the name/value pair is - defined by item-name, and the second item is either an addr-spec, an - atom, a domain, or a msg-id. Further restrictions may be applied to - the syntax of the trace fields by standards that provide for their - use, such as [RFC2821]. - -trace = [return] - 1*received - -return = "Return-Path:" path CRLF - -path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) / - obs-path - -received = "Received:" name-val-list ";" date-time CRLF - -name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)] - -name-val-pair = item-name CFWS item-value - -item-name = ALPHA *(["-"] (ALPHA / DIGIT)) - -item-value = 1*angle-addr / addr-spec / - atom / domain / msg-id - - - -Resnick Standards Track [Page 28] - -RFC 2822 Internet Message Format April 2001 - - - A full discussion of the Internet mail use of trace fields is - contained in [RFC2821]. For the purposes of this standard, the trace - fields are strictly informational, and any formal interpretation of - them is outside of the scope of this document. - -3.6.8. Optional fields - - Fields may appear in messages that are otherwise unspecified in this - standard. They MUST conform to the syntax of an optional-field. - This is a field name, made up of the printable US-ASCII characters - except SP and colon, followed by a colon, followed by any text which - conforms to unstructured. - - The field names of any optional-field MUST NOT be identical to any - field name specified elsewhere in this standard. - -optional-field = field-name ":" unstructured CRLF - -field-name = 1*ftext - -ftext = %d33-57 / ; Any character except - %d59-126 ; controls, SP, and - ; ":". - - For the purposes of this standard, any optional field is - uninterpreted. - -4. Obsolete Syntax - - Earlier versions of this standard allowed for different (usually more - liberal) syntax than is allowed in this version. Also, there have - been syntactic elements used in messages on the Internet whose - interpretation have never been documented. Though some of these - syntactic forms MUST NOT be generated according to the grammar in - section 3, they MUST be accepted and parsed by a conformant receiver. - This section documents many of these syntactic elements. Taking the - grammar in section 3 and adding the definitions presented in this - section will result in the grammar to use for interpretation of - messages. - - Note: This section identifies syntactic forms that any implementation - MUST reasonably interpret. However, there are certainly Internet - messages which do not conform to even the additional syntax given in - this section. The fact that a particular form does not appear in any - section of this document is not justification for computer programs - to crash or for malformed data to be irretrievably lost by any - implementation. To repeat an example, though this document requires - lines in messages to be no longer than 998 characters, silently - - - -Resnick Standards Track [Page 29] - -RFC 2822 Internet Message Format April 2001 - - - discarding the 999th and subsequent characters in a line without - warning would still be bad behavior for an implementation. It is up - to the implementation to deal with messages robustly. - - One important difference between the obsolete (interpreting) and the - current (generating) syntax is that in structured header field bodies - (i.e., between the colon and the CRLF of any structured header - field), white space characters, including folding white space, and - comments can be freely inserted between any syntactic tokens. This - allows many complex forms that have proven difficult for some - implementations to parse. - - Another key difference between the obsolete and the current syntax is - that the rule in section 3.2.3 regarding lines composed entirely of - white space in comments and folding white space does not apply. See - the discussion of folding white space in section 4.2 below. - - Finally, certain characters that were formerly allowed in messages - appear in this section. The NUL character (ASCII value 0) was once - allowed, but is no longer for compatibility reasons. CR and LF were - allowed to appear in messages other than as CRLF; this use is also - shown here. - - Other differences in syntax and semantics are noted in the following - sections. - -4.1. Miscellaneous obsolete tokens - - These syntactic elements are used elsewhere in the obsolete syntax or - in the main syntax. The obs-char and obs-qp elements each add ASCII - value 0. Bare CR and bare LF are added to obs-text and obs-utext. - The period character is added to obs-phrase. The obs-phrase-list - provides for "empty" elements in a comma-separated list of phrases. - - Note: The "period" (or "full stop") character (".") in obs-phrase is - not a form that was allowed in earlier versions of this or any other - standard. Period (nor any other character from specials) was not - allowed in phrase because it introduced a parsing difficulty - distinguishing between phrases and portions of an addr-spec (see - section 4.4). It appears here because the period character is - currently used in many messages in the display-name portion of - addresses, especially for initials in names, and therefore must be - interpreted properly. In the future, period may appear in the - regular syntax of phrase. - -obs-qp = "\" (%d0-127) - -obs-text = *LF *CR *(obs-char *LF *CR) - - - -Resnick Standards Track [Page 30] - -RFC 2822 Internet Message Format April 2001 - - -obs-char = %d0-9 / %d11 / ; %d0-127 except CR and - %d12 / %d14-127 ; LF - -obs-utext = obs-text - -obs-phrase = word *(word / "." / CFWS) - -obs-phrase-list = phrase / 1*([phrase] [CFWS] "," [CFWS]) [phrase] - - Bare CR and bare LF appear in messages with two different meanings. - In many cases, bare CR or bare LF are used improperly instead of CRLF - to indicate line separators. In other cases, bare CR and bare LF are - used simply as ASCII control characters with their traditional ASCII - meanings. - -4.2. Obsolete folding white space - - In the obsolete syntax, any amount of folding white space MAY be - inserted where the obs-FWS rule is allowed. This creates the - possibility of having two consecutive "folds" in a line, and - therefore the possibility that a line which makes up a folded header - field could be composed entirely of white space. - - obs-FWS = 1*WSP *(CRLF 1*WSP) - -4.3. Obsolete Date and Time - - The syntax for the obsolete date format allows a 2 digit year in the - date field and allows for a list of alphabetic time zone - specifications that were used in earlier versions of this standard. - It also permits comments and folding white space between many of the - tokens. - -obs-day-of-week = [CFWS] day-name [CFWS] - -obs-year = [CFWS] 2*DIGIT [CFWS] - -obs-month = CFWS month-name CFWS - -obs-day = [CFWS] 1*2DIGIT [CFWS] - -obs-hour = [CFWS] 2DIGIT [CFWS] - -obs-minute = [CFWS] 2DIGIT [CFWS] - -obs-second = [CFWS] 2DIGIT [CFWS] - -obs-zone = "UT" / "GMT" / ; Universal Time - - - -Resnick Standards Track [Page 31] - -RFC 2822 Internet Message Format April 2001 - - - ; North American UT - ; offsets - "EST" / "EDT" / ; Eastern: - 5/ - 4 - "CST" / "CDT" / ; Central: - 6/ - 5 - "MST" / "MDT" / ; Mountain: - 7/ - 6 - "PST" / "PDT" / ; Pacific: - 8/ - 7 - - %d65-73 / ; Military zones - "A" - %d75-90 / ; through "I" and "K" - %d97-105 / ; through "Z", both - %d107-122 ; upper and lower case - - Where a two or three digit year occurs in a date, the year is to be - interpreted as follows: If a two digit year is encountered whose - value is between 00 and 49, the year is interpreted by adding 2000, - ending up with a value between 2000 and 2049. If a two digit year is - encountered with a value between 50 and 99, or any three digit year - is encountered, the year is interpreted by adding 1900. - - In the obsolete time zone, "UT" and "GMT" are indications of - "Universal Time" and "Greenwich Mean Time" respectively and are both - semantically identical to "+0000". - - The remaining three character zones are the US time zones. The first - letter, "E", "C", "M", or "P" stands for "Eastern", "Central", - "Mountain" and "Pacific". The second letter is either "S" for - "Standard" time, or "D" for "Daylight" (or summer) time. Their - interpretations are as follows: - - EDT is semantically equivalent to -0400 - EST is semantically equivalent to -0500 - CDT is semantically equivalent to -0500 - CST is semantically equivalent to -0600 - MDT is semantically equivalent to -0600 - MST is semantically equivalent to -0700 - PDT is semantically equivalent to -0700 - PST is semantically equivalent to -0800 - - The 1 character military time zones were defined in a non-standard - way in [RFC822] and are therefore unpredictable in their meaning. - The original definitions of the military zones "A" through "I" are - equivalent to "+0100" through "+0900" respectively; "K", "L", and "M" - are equivalent to "+1000", "+1100", and "+1200" respectively; "N" - through "Y" are equivalent to "-0100" through "-1200" respectively; - and "Z" is equivalent to "+0000". However, because of the error in - [RFC822], they SHOULD all be considered equivalent to "-0000" unless - there is out-of-band information confirming their meaning. - - - - -Resnick Standards Track [Page 32] - -RFC 2822 Internet Message Format April 2001 - - - Other multi-character (usually between 3 and 5) alphabetic time zones - have been used in Internet messages. Any such time zone whose - meaning is not known SHOULD be considered equivalent to "-0000" - unless there is out-of-band information confirming their meaning. - -4.4. Obsolete Addressing - - There are three primary differences in addressing. First, mailbox - addresses were allowed to have a route portion before the addr-spec - when enclosed in "<" and ">". The route is simply a comma-separated - list of domain names, each preceded by "@", and the list terminated - by a colon. Second, CFWS were allowed between the period-separated - elements of local-part and domain (i.e., dot-atom was not used). In - addition, local-part is allowed to contain quoted-string in addition - to just atom. Finally, mailbox-list and address-list were allowed to - have "null" members. That is, there could be two or more commas in - such a list with nothing in between them. - -obs-angle-addr = [CFWS] "<" [obs-route] addr-spec ">" [CFWS] - -obs-route = [CFWS] obs-domain-list ":" [CFWS] - -obs-domain-list = "@" domain *(*(CFWS / "," ) [CFWS] "@" domain) - -obs-local-part = word *("." word) - -obs-domain = atom *("." atom) - -obs-mbox-list = 1*([mailbox] [CFWS] "," [CFWS]) [mailbox] - -obs-addr-list = 1*([address] [CFWS] "," [CFWS]) [address] - - When interpreting addresses, the route portion SHOULD be ignored. - -4.5. Obsolete header fields - - Syntactically, the primary difference in the obsolete field syntax is - that it allows multiple occurrences of any of the fields and they may - occur in any order. Also, any amount of white space is allowed - before the ":" at the end of the field name. - -obs-fields = *(obs-return / - obs-received / - obs-orig-date / - obs-from / - obs-sender / - obs-reply-to / - obs-to / - - - -Resnick Standards Track [Page 33] - -RFC 2822 Internet Message Format April 2001 - - - obs-cc / - obs-bcc / - obs-message-id / - obs-in-reply-to / - obs-references / - obs-subject / - obs-comments / - obs-keywords / - obs-resent-date / - obs-resent-from / - obs-resent-send / - obs-resent-rply / - obs-resent-to / - obs-resent-cc / - obs-resent-bcc / - obs-resent-mid / - obs-optional) - - Except for destination address fields (described in section 4.5.3), - the interpretation of multiple occurrences of fields is unspecified. - Also, the interpretation of trace fields and resent fields which do - not occur in blocks prepended to the message is unspecified as well. - Unless otherwise noted in the following sections, interpretation of - other fields is identical to the interpretation of their non-obsolete - counterparts in section 3. - -4.5.1. Obsolete origination date field - -obs-orig-date = "Date" *WSP ":" date-time CRLF - -4.5.2. Obsolete originator fields - -obs-from = "From" *WSP ":" mailbox-list CRLF - -obs-sender = "Sender" *WSP ":" mailbox CRLF - -obs-reply-to = "Reply-To" *WSP ":" mailbox-list CRLF - -4.5.3. Obsolete destination address fields - -obs-to = "To" *WSP ":" address-list CRLF - -obs-cc = "Cc" *WSP ":" address-list CRLF - -obs-bcc = "Bcc" *WSP ":" (address-list / [CFWS]) CRLF - - - - - - -Resnick Standards Track [Page 34] - -RFC 2822 Internet Message Format April 2001 - - - When multiple occurrences of destination address fields occur in a - message, they SHOULD be treated as if the address-list in the first - occurrence of the field is combined with the address lists of the - subsequent occurrences by adding a comma and concatenating. - -4.5.4. Obsolete identification fields - - The obsolete "In-Reply-To:" and "References:" fields differ from the - current syntax in that they allow phrase (words or quoted strings) to - appear. The obsolete forms of the left and right sides of msg-id - allow interspersed CFWS, making them syntactically identical to - local-part and domain respectively. - -obs-message-id = "Message-ID" *WSP ":" msg-id CRLF - -obs-in-reply-to = "In-Reply-To" *WSP ":" *(phrase / msg-id) CRLF - -obs-references = "References" *WSP ":" *(phrase / msg-id) CRLF - -obs-id-left = local-part - -obs-id-right = domain - - For purposes of interpretation, the phrases in the "In-Reply-To:" and - "References:" fields are ignored. - - Semantically, none of the optional CFWS surrounding the local-part - and the domain are part of the obs-id-left and obs-id-right - respectively. - -4.5.5. Obsolete informational fields - -obs-subject = "Subject" *WSP ":" unstructured CRLF - -obs-comments = "Comments" *WSP ":" unstructured CRLF - -obs-keywords = "Keywords" *WSP ":" obs-phrase-list CRLF - -4.5.6. Obsolete resent fields - - The obsolete syntax adds a "Resent-Reply-To:" field, which consists - of the field name, the optional comments and folding white space, the - colon, and a comma separated list of addresses. - -obs-resent-from = "Resent-From" *WSP ":" mailbox-list CRLF - -obs-resent-send = "Resent-Sender" *WSP ":" mailbox CRLF - - - - -Resnick Standards Track [Page 35] - -RFC 2822 Internet Message Format April 2001 - - -obs-resent-date = "Resent-Date" *WSP ":" date-time CRLF - -obs-resent-to = "Resent-To" *WSP ":" address-list CRLF - -obs-resent-cc = "Resent-Cc" *WSP ":" address-list CRLF - -obs-resent-bcc = "Resent-Bcc" *WSP ":" - (address-list / [CFWS]) CRLF - -obs-resent-mid = "Resent-Message-ID" *WSP ":" msg-id CRLF - -obs-resent-rply = "Resent-Reply-To" *WSP ":" address-list CRLF - - As with other resent fields, the "Resent-Reply-To:" field is to be - treated as trace information only. - -4.5.7. Obsolete trace fields - - The obs-return and obs-received are again given here as template - definitions, just as return and received are in section 3. Their - full syntax is given in [RFC2821]. - -obs-return = "Return-Path" *WSP ":" path CRLF - -obs-received = "Received" *WSP ":" name-val-list CRLF - -obs-path = obs-angle-addr - -4.5.8. Obsolete optional fields - -obs-optional = field-name *WSP ":" unstructured CRLF - -5. Security Considerations - - Care needs to be taken when displaying messages on a terminal or - terminal emulator. Powerful terminals may act on escape sequences - and other combinations of ASCII control characters with a variety of - consequences. They can remap the keyboard or permit other - modifications to the terminal which could lead to denial of service - or even damaged data. They can trigger (sometimes programmable) - answerback messages which can allow a message to cause commands to be - issued on the recipient's behalf. They can also effect the operation - of terminal attached devices such as printers. Message viewers may - wish to strip potentially dangerous terminal escape sequences from - the message prior to display. However, other escape sequences appear - in messages for useful purposes (cf. [RFC2045, RFC2046, RFC2047, - RFC2048, RFC2049, ISO2022]) and therefore should not be stripped - indiscriminately. - - - -Resnick Standards Track [Page 36] - -RFC 2822 Internet Message Format April 2001 - - - Transmission of non-text objects in messages raises additional - security issues. These issues are discussed in [RFC2045, RFC2046, - RFC2047, RFC2048, RFC2049]. - - Many implementations use the "Bcc:" (blind carbon copy) field - described in section 3.6.3 to facilitate sending messages to - recipients without revealing the addresses of one or more of the - addressees to the other recipients. Mishandling this use of "Bcc:" - has implications for confidential information that might be revealed, - which could eventually lead to security problems through knowledge of - even the existence of a particular mail address. For example, if - using the first method described in section 3.6.3, where the "Bcc:" - line is removed from the message, blind recipients have no explicit - indication that they have been sent a blind copy, except insofar as - their address does not appear in the message header. Because of - this, one of the blind addressees could potentially send a reply to - all of the shown recipients and accidentally reveal that the message - went to the blind recipient. When the second method from section - 3.6.3 is used, the blind recipient's address appears in the "Bcc:" - field of a separate copy of the message. If the "Bcc:" field sent - contains all of the blind addressees, all of the "Bcc:" recipients - will be seen by each "Bcc:" recipient. Even if a separate message is - sent to each "Bcc:" recipient with only the individual's address, - implementations still need to be careful to process replies to the - message as per section 3.6.3 so as not to accidentally reveal the - blind recipient to other recipients. - -6. Bibliography - - [ASCII] American National Standards Institute (ANSI), Coded - Character Set - 7-Bit American National Standard Code for - Information Interchange, ANSI X3.4, 1986. - - [ISO2022] International Organization for Standardization (ISO), - Information processing - ISO 7-bit and 8-bit coded - character sets - Code extension techniques, Third edition - - 1986-05-01, ISO 2022, 1986. - - [RFC822] Crocker, D., "Standard for the Format of ARPA Internet - Text Messages", RFC 822, August 1982. - - [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail - Extensions (MIME) Part One: Format of Internet Message - Bodies", RFC 2045, November 1996. - - [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail - Extensions (MIME) Part Two: Media Types", RFC 2046, - November 1996. - - - -Resnick Standards Track [Page 37] - -RFC 2822 Internet Message Format April 2001 - - - [RFC2047] Moore, K., "Multipurpose Internet Mail Extensions (MIME) - Part Three: Message Header Extensions for Non-ASCII Text", - RFC 2047, November 1996. - - [RFC2048] Freed, N., Klensin, J. and J. Postel, "Multipurpose - Internet Mail Extensions (MIME) Part Four: Format of - Internet Message Bodies", RFC 2048, November 1996. - - [RFC2049] Freed, N. and N. Borenstein, "Multipurpose Internet Mail - Extensions (MIME) Part Five: Conformance Criteria and - Examples", RFC 2049, November 1996. - - [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate - Requirement Levels", BCP 14, RFC 2119, March 1997. - - [RFC2234] Crocker, D., Editor, and P. Overell, "Augmented BNF for - Syntax Specifications: ABNF", RFC 2234, November 1997. - - [RFC2821] Klensin, J., Editor, "Simple Mail Transfer Protocol", RFC - 2821, March 2001. - - [STD3] Braden, R., "Host Requirements", STD 3, RFC 1122 and RFC - 1123, October 1989. - - [STD12] Mills, D., "Network Time Protocol", STD 12, RFC 1119, - September 1989. - - [STD13] Mockapetris, P., "Domain Name System", STD 13, RFC 1034 - and RFC 1035, November 1987. - - [STD14] Partridge, C., "Mail Routing and the Domain System", STD - 14, RFC 974, January 1986. - -7. Editor's Address - - Peter W. Resnick - QUALCOMM Incorporated - 5775 Morehouse Drive - San Diego, CA 92121-1714 - USA - - Phone: +1 858 651 4478 - Fax: +1 858 651 1102 - EMail: presnick@qualcomm.com - - - - - - - -Resnick Standards Track [Page 38] - -RFC 2822 Internet Message Format April 2001 - - -8. Acknowledgements - - Many people contributed to this document. They included folks who - participated in the Detailed Revision and Update of Messaging - Standards (DRUMS) Working Group of the Internet Engineering Task - Force (IETF), the chair of DRUMS, the Area Directors of the IETF, and - people who simply sent their comments in via e-mail. The editor is - deeply indebted to them all and thanks them sincerely. The below - list includes everyone who sent e-mail concerning this document. - Hopefully, everyone who contributed is named here: - - Matti Aarnio Barry Finkel Larry Masinter - Tanaka Akira Erik Forsberg Denis McKeon - Russ Allbery Chuck Foster William P McQuillan - Eric Allman Paul Fox Alexey Melnikov - Harald Tveit Alvestrand Klaus M. Frank Perry E. Metzger - Ran Atkinson Ned Freed Steven Miller - Jos Backus Jochen Friedrich Keith Moore - Bruce Balden Randall C. Gellens John Gardiner Myers - Dave Barr Sukvinder Singh Gill Chris Newman - Alan Barrett Tim Goodwin John W. Noerenberg - John Beck Philip Guenther Eric Norman - J. Robert von Behren Tony Hansen Mike O'Dell - Jos den Bekker John Hawkinson Larry Osterman - D. J. Bernstein Philip Hazel Paul Overell - James Berriman Kai Henningsen Jacob Palme - Norbert Bollow Robert Herriot Michael A. Patton - Raj Bose Paul Hethmon Uzi Paz - Antony Bowesman Jim Hill Michael A. Quinlan - Scott Bradner Paul E. Hoffman Eric S. Raymond - Randy Bush Steve Hole Sam Roberts - Tom Byrer Kari Hurtta Hugh Sasse - Bruce Campbell Marco S. Hyman Bart Schaefer - Larry Campbell Ofer Inbar Tom Scola - W. J. Carpenter Olle Jarnefors Wolfgang Segmuller - Michael Chapman Kevin Johnson Nick Shelness - Richard Clayton Sudish Joseph John Stanley - Maurizio Codogno Maynard Kang Einar Stefferud - Jim Conklin Prabhat Keni Jeff Stephenson - R. Kelley Cook John C. Klensin Bernard Stern - Steve Coya Graham Klyne Peter Sylvester - Mark Crispin Brad Knowles Mark Symons - Dave Crocker Shuhei Kobayashi Eric Thomas - Matt Curtin Peter Koch Lee Thompson - Michael D'Errico Dan Kohn Karel De Vriendt - Cyrus Daboo Christian Kuhtz Matthew Wall - Jutta Degener Anand Kumria Rolf Weber - Mark Delany Steen Larsen Brent B. Welch - - - -Resnick Standards Track [Page 39] - -RFC 2822 Internet Message Format April 2001 - - - Steve Dorner Eliot Lear Dan Wing - Harold A. Driscoll Barry Leiba Jack De Winter - Michael Elkins Jay Levitt Gregory J. Woodhouse - Robert Elz Lars-Johan Liman Greg A. Woods - Johnny Eriksson Charles Lindsey Kazu Yamamoto - Erik E. Fair Pete Loshin Alain Zahm - Roger Fajman Simon Lyall Jamie Zawinski - Patrik Faltstrom Bill Manning Timothy S. Zurcher - Claus Andre Farber John Martin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Resnick Standards Track [Page 40] - -RFC 2822 Internet Message Format April 2001 - - -Appendix A. Example messages - - This section presents a selection of messages. These are intended to - assist in the implementation of this standard, but should not be - taken as normative; that is to say, although the examples in this - section were carefully reviewed, if there happens to be a conflict - between these examples and the syntax described in sections 3 and 4 - of this document, the syntax in those sections is to be taken as - correct. - - Messages are delimited in this section between lines of "----". The - "----" lines are not part of the message itself. - -A.1. Addressing examples - - The following are examples of messages that might be sent between two - individuals. - -A.1.1. A message from one person to another with simple addressing - - This could be called a canonical message. It has a single author, - John Doe, a single recipient, Mary Smith, a subject, the date, a - message identifier, and a textual message in the body. - ----- -From: John Doe <jdoe@machine.example> -To: Mary Smith <mary@example.net> -Subject: Saying Hello -Date: Fri, 21 Nov 1997 09:55:06 -0600 -Message-ID: <1234@local.machine.example> - -This is a message just to say hello. -So, "Hello". ----- - - - - - - - - - - - - - - - - - -Resnick Standards Track [Page 41] - -RFC 2822 Internet Message Format April 2001 - - - If John's secretary Michael actually sent the message, though John - was the author and replies to this message should go back to him, the - sender field would be used: - ----- -From: John Doe <jdoe@machine.example> -Sender: Michael Jones <mjones@machine.example> -To: Mary Smith <mary@example.net> -Subject: Saying Hello -Date: Fri, 21 Nov 1997 09:55:06 -0600 -Message-ID: <1234@local.machine.example> - -This is a message just to say hello. -So, "Hello". ----- - -A.1.2. Different types of mailboxes - - This message includes multiple addresses in the destination fields - and also uses several different forms of addresses. - ----- -From: "Joe Q. Public" <john.q.public@example.com> -To: Mary Smith <mary@x.test>, jdoe@example.org, Who? <one@y.test> -Cc: <boss@nil.test>, "Giant; \"Big\" Box" <sysservices@example.net> -Date: Tue, 1 Jul 2003 10:52:37 +0200 -Message-ID: <5678.21-Nov-1997@example.com> - -Hi everyone. ----- - - Note that the display names for Joe Q. Public and Giant; "Big" Box - needed to be enclosed in double-quotes because the former contains - the period and the latter contains both semicolon and double-quote - characters (the double-quote characters appearing as quoted-pair - construct). Conversely, the display name for Who? could appear - without them because the question mark is legal in an atom. Notice - also that jdoe@example.org and boss@nil.test have no display names - associated with them at all, and jdoe@example.org uses the simpler - address form without the angle brackets. - - - - - - - - - - - -Resnick Standards Track [Page 42] - -RFC 2822 Internet Message Format April 2001 - - -A.1.3. Group addresses - ----- -From: Pete <pete@silly.example> -To: A Group:Chris Jones <c@a.test>,joe@where.test,John <jdoe@one.test>; -Cc: Undisclosed recipients:; -Date: Thu, 13 Feb 1969 23:32:54 -0330 -Message-ID: <testabcd.1234@silly.example> - -Testing. ----- - - In this message, the "To:" field has a single group recipient named A - Group which contains 3 addresses, and a "Cc:" field with an empty - group recipient named Undisclosed recipients. - -A.2. Reply messages - - The following is a series of three messages that make up a - conversation thread between John and Mary. John firsts sends a - message to Mary, Mary then replies to John's message, and then John - replies to Mary's reply message. - - Note especially the "Message-ID:", "References:", and "In-Reply-To:" - fields in each message. - ----- -From: John Doe <jdoe@machine.example> -To: Mary Smith <mary@example.net> -Subject: Saying Hello -Date: Fri, 21 Nov 1997 09:55:06 -0600 -Message-ID: <1234@local.machine.example> - -This is a message just to say hello. -So, "Hello". ----- - - - - - - - - - - - - - - - -Resnick Standards Track [Page 43] - -RFC 2822 Internet Message Format April 2001 - - - When sending replies, the Subject field is often retained, though - prepended with "Re: " as described in section 3.6.5. - ----- -From: Mary Smith <mary@example.net> -To: John Doe <jdoe@machine.example> -Reply-To: "Mary Smith: Personal Account" <smith@home.example> -Subject: Re: Saying Hello -Date: Fri, 21 Nov 1997 10:01:10 -0600 -Message-ID: <3456@example.net> -In-Reply-To: <1234@local.machine.example> -References: <1234@local.machine.example> - -This is a reply to your hello. ----- - - Note the "Reply-To:" field in the above message. When John replies - to Mary's message above, the reply should go to the address in the - "Reply-To:" field instead of the address in the "From:" field. - ----- -To: "Mary Smith: Personal Account" <smith@home.example> -From: John Doe <jdoe@machine.example> -Subject: Re: Saying Hello -Date: Fri, 21 Nov 1997 11:00:00 -0600 -Message-ID: <abcd.1234@local.machine.tld> -In-Reply-To: <3456@example.net> -References: <1234@local.machine.example> <3456@example.net> - -This is a reply to your reply. ----- - -A.3. Resent messages - - Start with the message that has been used as an example several - times: - ----- -From: John Doe <jdoe@machine.example> -To: Mary Smith <mary@example.net> -Subject: Saying Hello -Date: Fri, 21 Nov 1997 09:55:06 -0600 -Message-ID: <1234@local.machine.example> - -This is a message just to say hello. -So, "Hello". ----- - - - - -Resnick Standards Track [Page 44] - -RFC 2822 Internet Message Format April 2001 - - - Say that Mary, upon receiving this message, wishes to send a copy of - the message to Jane such that (a) the message would appear to have - come straight from John; (b) if Jane replies to the message, the - reply should go back to John; and (c) all of the original - information, like the date the message was originally sent to Mary, - the message identifier, and the original addressee, is preserved. In - this case, resent fields are prepended to the message: - ----- -Resent-From: Mary Smith <mary@example.net> -Resent-To: Jane Brown <j-brown@other.example> -Resent-Date: Mon, 24 Nov 1997 14:22:01 -0800 -Resent-Message-ID: <78910@example.net> -From: John Doe <jdoe@machine.example> -To: Mary Smith <mary@example.net> -Subject: Saying Hello -Date: Fri, 21 Nov 1997 09:55:06 -0600 -Message-ID: <1234@local.machine.example> - -This is a message just to say hello. -So, "Hello". ----- - - If Jane, in turn, wished to resend this message to another person, - she would prepend her own set of resent header fields to the above - and send that. - - - - - - - - - - - - - - - - - - - - - - - - - -Resnick Standards Track [Page 45] - -RFC 2822 Internet Message Format April 2001 - - -A.4. Messages with trace fields - - As messages are sent through the transport system as described in - [RFC2821], trace fields are prepended to the message. The following - is an example of what those trace fields might look like. Note that - there is some folding white space in the first one since these lines - can be long. - ----- -Received: from x.y.test - by example.net - via TCP - with ESMTP - id ABC12345 - for <mary@example.net>; 21 Nov 1997 10:05:43 -0600 -Received: from machine.example by x.y.test; 21 Nov 1997 10:01:22 -0600 -From: John Doe <jdoe@machine.example> -To: Mary Smith <mary@example.net> -Subject: Saying Hello -Date: Fri, 21 Nov 1997 09:55:06 -0600 -Message-ID: <1234@local.machine.example> - -This is a message just to say hello. -So, "Hello". ----- - - - - - - - - - - - - - - - - - - - - - - - - - - -Resnick Standards Track [Page 46] - -RFC 2822 Internet Message Format April 2001 - - -A.5. White space, comments, and other oddities - - White space, including folding white space, and comments can be - inserted between many of the tokens of fields. Taking the example - from A.1.3, white space and comments can be inserted into all of the - fields. - ----- -From: Pete(A wonderful \) chap) <pete(his account)@silly.test(his host)> -To:A Group(Some people) - :Chris Jones <c@(Chris's host.)public.example>, - joe@example.org, - John <jdoe@one.test> (my dear friend); (the end of the group) -Cc:(Empty list)(start)Undisclosed recipients :(nobody(that I know)) ; -Date: Thu, - 13 - Feb - 1969 - 23:32 - -0330 (Newfoundland Time) -Message-ID: <testabcd.1234@silly.test> - -Testing. ----- - - The above example is aesthetically displeasing, but perfectly legal. - Note particularly (1) the comments in the "From:" field (including - one that has a ")" character appearing as part of a quoted-pair); (2) - the white space absent after the ":" in the "To:" field as well as - the comment and folding white space after the group name, the special - character (".") in the comment in Chris Jones's address, and the - folding white space before and after "joe@example.org,"; (3) the - multiple and nested comments in the "Cc:" field as well as the - comment immediately following the ":" after "Cc"; (4) the folding - white space (but no comments except at the end) and the missing - seconds in the time of the date field; and (5) the white space before - (but not within) the identifier in the "Message-ID:" field. - -A.6. Obsoleted forms - - The following are examples of obsolete (that is, the "MUST NOT - generate") syntactic elements described in section 4 of this - document. - - - - - - - - -Resnick Standards Track [Page 47] - -RFC 2822 Internet Message Format April 2001 - - -A.6.1. Obsolete addressing - - Note in the below example the lack of quotes around Joe Q. Public, - the route that appears in the address for Mary Smith, the two commas - that appear in the "To:" field, and the spaces that appear around the - "." in the jdoe address. - ----- -From: Joe Q. Public <john.q.public@example.com> -To: Mary Smith <@machine.tld:mary@example.net>, , jdoe@test . example -Date: Tue, 1 Jul 2003 10:52:37 +0200 -Message-ID: <5678.21-Nov-1997@example.com> - -Hi everyone. ----- - -A.6.2. Obsolete dates - - The following message uses an obsolete date format, including a non- - numeric time zone and a two digit year. Note that although the - day-of-week is missing, that is not specific to the obsolete syntax; - it is optional in the current syntax as well. - ----- -From: John Doe <jdoe@machine.example> -To: Mary Smith <mary@example.net> -Subject: Saying Hello -Date: 21 Nov 97 09:55:06 GMT -Message-ID: <1234@local.machine.example> - -This is a message just to say hello. -So, "Hello". ----- - -A.6.3. Obsolete white space and comments - - White space and comments can appear between many more elements than - in the current syntax. Also, folding lines that are made up entirely - of white space are legal. - - - - - - - - - - - - -Resnick Standards Track [Page 48] - -RFC 2822 Internet Message Format April 2001 - - ----- -From : John Doe <jdoe@machine(comment). example> -To : Mary Smith -__ - <mary@example.net> -Subject : Saying Hello -Date : Fri, 21 Nov 1997 09(comment): 55 : 06 -0600 -Message-ID : <1234 @ local(blah) .machine .example> - -This is a message just to say hello. -So, "Hello". ----- - - Note especially the second line of the "To:" field. It starts with - two space characters. (Note that "__" represent blank spaces.) - Therefore, it is considered part of the folding as described in - section 4.2. Also, the comments and white space throughout - addresses, dates, and message identifiers are all part of the - obsolete syntax. - -Appendix B. Differences from earlier standards - - This appendix contains a list of changes that have been made in the - Internet Message Format from earlier standards, specifically [RFC822] - and [STD3]. Items marked with an asterisk (*) below are items which - appear in section 4 of this document and therefore can no longer be - generated. - - 1. Period allowed in obsolete form of phrase. - 2. ABNF moved out of document to [RFC2234]. - 3. Four or more digits allowed for year. - 4. Header field ordering (and lack thereof) made explicit. - 5. Encrypted header field removed. - 6. Received syntax loosened to allow any token/value pair. - 7. Specifically allow and give meaning to "-0000" time zone. - 8. Folding white space is not allowed between every token. - 9. Requirement for destinations removed. - 10. Forwarding and resending redefined. - 11. Extension header fields no longer specifically called out. - 12. ASCII 0 (null) removed.* - 13. Folding continuation lines cannot contain only white space.* - 14. Free insertion of comments not allowed in date.* - 15. Non-numeric time zones not allowed.* - 16. Two digit years not allowed.* - 17. Three digit years interpreted, but not allowed for generation. - 18. Routes in addresses not allowed.* - 19. CFWS within local-parts and domains not allowed.* - 20. Empty members of address lists not allowed.* - - - -Resnick Standards Track [Page 49] - -RFC 2822 Internet Message Format April 2001 - - - 21. Folding white space between field name and colon not allowed.* - 22. Comments between field name and colon not allowed. - 23. Tightened syntax of in-reply-to and references.* - 24. CFWS within msg-id not allowed.* - 25. Tightened semantics of resent fields as informational only. - 26. Resent-Reply-To not allowed.* - 27. No multiple occurrences of fields (except resent and received).* - 28. Free CR and LF not allowed.* - 29. Routes in return path not allowed.* - 30. Line length limits specified. - 31. Bcc more clearly specified. - -Appendix C. Notices - - Intellectual Property - - The IETF takes no position regarding the validity or scope of any - intellectual property or other rights that might be claimed to - pertain to the implementation or use of the technology described in - this document or the extent to which any license under such rights - might or might not be available; neither does it represent that it - has made any effort to identify any such rights. Information on the - IETF's procedures with respect to rights in standards-track and - standards-related documentation can be found in BCP-11. Copies of - claims of rights made available for publication and any assurances of - licenses to be made available, or the result of an attempt made to - obtain a general license or permission for the use of such - proprietary rights by implementors or users of this specification can - be obtained from the IETF Secretariat. - - - - - - - - - - - - - - - - - - - - - - -Resnick Standards Track [Page 50] - -RFC 2822 Internet Message Format April 2001 - - -Full Copyright Statement - - Copyright (C) The Internet Society (2001). All Rights Reserved. - - This document and translations of it may be copied and furnished to - others, and derivative works that comment on or otherwise explain it - or assist in its implementation may be prepared, copied, published - and distributed, in whole or in part, without restriction of any - kind, provided that the above copyright notice and this paragraph are - included on all such copies and derivative works. However, this - document itself may not be modified in any way, such as by removing - the copyright notice or references to the Internet Society or other - Internet organizations, except as needed for the purpose of - developing Internet standards in which case the procedures for - copyrights defined in the Internet Standards process must be - followed, or as required to translate it into languages other than - English. - - The limited permissions granted above are perpetual and will not be - revoked by the Internet Society or its successors or assigns. - - This document and the information contained herein is provided on an - "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING - TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION - HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF - MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -Acknowledgement - - Funding for the RFC Editor function is currently provided by the - Internet Society. - - - - - - - - - - - - - - - - - - - -Resnick Standards Track [Page 51] - diff --git a/doc/src/rfc977.txt b/doc/src/rfc977.txt deleted file mode 100644 index 046a27097..000000000 --- a/doc/src/rfc977.txt +++ /dev/null @@ -1,1539 +0,0 @@ - - -Network Working Group Brian Kantor (U.C. San Diego) -Request for Comments: 977 Phil Lapsley (U.C. Berkeley) - February 1986 - - Network News Transfer Protocol - - A Proposed Standard for the Stream-Based - Transmission of News - -Status of This Memo - - NNTP specifies a protocol for the distribution, inquiry, retrieval, - and posting of news articles using a reliable stream-based - transmission of news among the ARPA-Internet community. NNTP is - designed so that news articles are stored in a central database - allowing a subscriber to select only those items he wishes to read. - Indexing, cross-referencing, and expiration of aged messages are also - provided. This RFC suggests a proposed protocol for the ARPA-Internet - community, and requests discussion and suggestions for improvements. - Distribution of this memo is unlimited. - -1. Introduction - - For many years, the ARPA-Internet community has supported the - distribution of bulletins, information, and data in a timely fashion - to thousands of participants. We collectively refer to such items of - information as "news". Such news provides for the rapid - dissemination of items of interest such as software bug fixes, new - product reviews, technical tips, and programming pointers, as well as - rapid-fire discussions of matters of concern to the working computer - professional. News is very popular among its readers. - - There are popularly two methods of distributing such news: the - Internet method of direct mailing, and the USENET news system. - -1.1. Internet Mailing Lists - - The Internet community distributes news by the use of mailing lists. - These are lists of subscriber's mailbox addresses and remailing - sublists of all intended recipients. These mailing lists operate by - remailing a copy of the information to be distributed to each - subscriber on the mailing list. Such remailing is inefficient when a - mailing list grows beyond a dozen or so people, since sending a - separate copy to each of the subscribers occupies large quantities of - network bandwidth, CPU resources, and significant amounts of disk - storage at the destination host. There is also a significant problem - in maintenance of the list itself: as subscribers move from one job - to another; as new subscribers join and old ones leave; and as hosts - come in and out of service. - - - - -Kantor & Lapsley [Page 1] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -1.2. The USENET News System - - Clearly, a worthwhile reduction of the amount of these resources used - can be achieved if articles are stored in a central database on the - receiving host instead of in each subscriber's mailbox. The USENET - news system provides a method of doing just this. There is a central - repository of the news articles in one place (customarily a spool - directory of some sort), and a set of programs that allow a - subscriber to select those items he wishes to read. Indexing, - cross-referencing, and expiration of aged messages are also provided. - -1.3. Central Storage of News - - For clusters of hosts connected together by fast local area networks - (such as Ethernet), it makes even more sense to consolidate news - distribution onto one (or a very few) hosts, and to allow access to - these news articles using a server and client model. Subscribers may - then request only the articles they wish to see, without having to - wastefully duplicate the storage of a copy of each item on each host. - -1.4. A Central News Server - - A way to achieve these economies is to have a central computer system - that can provide news service to the other systems on the local area - network. Such a server would manage the collection of news articles - and index files, with each person who desires to read news bulletins - doing so over the LAN. For a large cluster of computer systems, the - savings in total disk space is clearly worthwhile. Also, this allows - workstations with limited disk storage space to participate in the - news without incoming items consuming oppressive amounts of the - workstation's disk storage. - - We have heard rumors of somewhat successful attempts to provide - centralized news service using IBIS and other shared or distributed - file systems. While it is possible that such a distributed file - system implementation might work well with a group of similar - computers running nearly identical operating systems, such a scheme - is not general enough to offer service to a wide range of client - systems, especially when many diverse operating systems may be in use - among a group of clients. There are few (if any) shared or networked - file systems that can offer the generality of service that stream - connections using Internet TCP provide, particularly when a wide - range of host hardware and operating systems are considered. - - NNTP specifies a protocol for the distribution, inquiry, retrieval, - and posting of news articles using a reliable stream (such as TCP) - server-client model. NNTP is designed so that news articles need only - - -Kantor & Lapsley [Page 2] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - be stored on one (presumably central) host, and subscribers on other - hosts attached to the LAN may read news articles using stream - connections to the news host. - - NNTP is modelled upon the news article specifications in RFC 850, - which describes the USENET news system. However, NNTP makes few - demands upon the structure, content, or storage of news articles, and - thus we believe it easily can be adapted to other non-USENET news - systems. - - Typically, the NNTP server runs as a background process on one host, - and would accept connections from other hosts on the LAN. This works - well when there are a number of small computer systems (such as - workstations, with only one or at most a few users each), and a large - central server. - -1.5. Intermediate News Servers - - For clusters of machines with many users (as might be the case in a - university or large industrial environment), an intermediate server - might be used. This intermediate or "slave" server runs on each - computer system, and is responsible for mediating news reading - requests and performing local caching of recently-retrieved news - articles. - - Typically, a client attempting to obtain news service would first - attempt to connect to the news service port on the local machine. If - this attempt were unsuccessful, indicating a failed server, an - installation might choose to either deny news access, or to permit - connection to the central "master" news server. - - For workstations or other small systems, direct connection to the - master server would probably be the normal manner of operation. - - This specification does not cover the operation of slave NNTP - servers. We merely suggest that slave servers are a logical addition - to NNTP server usage which would enhance operation on large local - area networks. - -1.6. News Distribution - - NNTP has commands which provide a straightforward method of - exchanging articles between cooperating hosts. Hosts which are well - connected on a local area or other fast network and who wish to - actually obtain copies of news articles for local storage might well - find NNTP to be a more efficient way to distribute news than more - traditional transfer methods (such as UUCP). - - -Kantor & Lapsley [Page 3] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - In the traditional method of distributing news articles, news is - propagated from host to host by flooding - that is, each host will - send all its new news articles on to each host that it feeds. These - hosts will then in turn send these new articles on to other hosts - that they feed. Clearly, sending articles that a host already has - obtained a copy of from another feed (many hosts that receive news - are redundantly fed) again is a waste of time and communications - resources, but for transport mechanisms that are single-transaction - based rather than interactive (such as UUCP in the UNIX-world <1>), - distribution time is diminished by sending all articles and having - the receiving host simply discard the duplicates. This is an - especially true when communications sessions are limited to once a - day. - - Using NNTP, hosts exchanging news articles have an interactive - mechanism for deciding which articles are to be transmitted. A host - desiring new news, or which has new news to send, will typically - contact one or more of its neighbors using NNTP. First it will - inquire if any new news groups have been created on the serving host - by means of the NEWGROUPS command. If so, and those are appropriate - or desired (as established by local site-dependent rules), those new - newsgroups can be created. - - The client host will then inquire as to which new articles have - arrived in all or some of the newsgroups that it desires to receive, - using the NEWNEWS command. It will receive a list of new articles - from the server, and can request transmission of those articles that - it desires and does not already have. - - Finally, the client can advise the server of those new articles which - the client has recently received. The server will indicate those - articles that it has already obtained copies of, and which articles - should be sent to add to its collection. - - In this manner, only those articles which are not duplicates and - which are desired are transferred. - - - - - - - - - - - - - -Kantor & Lapsley [Page 4] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -2. The NNTP Specification - -2.1. Overview - - The news server specified by this document uses a stream connection - (such as TCP) and SMTP-like commands and responses. It is designed - to accept connections from hosts, and to provide a simple interface - to the news database. - - This server is only an interface between programs and the news - databases. It does not perform any user interaction or presentation- - level functions. These "user-friendly" functions are better left to - the client programs, which have a better understanding of the - environment in which they are operating. - - When used via Internet TCP, the contact port assigned for this - service is 119. - -2.2. Character Codes - - Commands and replies are composed of characters from the ASCII - character set. When the transport service provides an 8-bit byte - (octet) transmission channel, each 7-bit character is transmitted - right justified in an octet with the high order bit cleared to zero. - -2.3. Commands - - Commands consist of a command word, which in some cases may be - followed by a parameter. Commands with parameters must separate the - parameters from each other and from the command by one or more space - or tab characters. Command lines must be complete with all required - parameters, and may not contain more than one command. - - Commands and command parameters are not case sensitive. That is, a - command or parameter word may be upper case, lower case, or any - mixture of upper and lower case. - - Each command line must be terminated by a CR-LF (Carriage Return - - Line Feed) pair. - - Command lines shall not exceed 512 characters in length, counting all - characters including spaces, separators, punctuation, and the - trailing CR-LF (thus there are 510 characters maximum allowed for the - command and its parameters). There is no provision for continuation - command lines. - - - - -Kantor & Lapsley [Page 5] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -2.4. Responses - - Responses are of two kinds, textual and status. - -2.4.1. Text Responses - - Text is sent only after a numeric status response line has been sent - that indicates that text will follow. Text is sent as a series of - successive lines of textual matter, each terminated with CR-LF pair. - A single line containing only a period (.) is sent to indicate the - end of the text (i.e., the server will send a CR-LF pair at the end - of the last line of text, a period, and another CR-LF pair). - - If the text contained a period as the first character of the text - line in the original, that first period is doubled. Therefore, the - client must examine the first character of each line received, and - for those beginning with a period, determine either that this is the - end of the text or whether to collapse the doubled period to a single - one. - - The intention is that text messages will usually be displayed on the - user's terminal whereas command/status responses will be interpreted - by the client program before any possible display is done. - -2.4.2. Status Responses - - These are status reports from the server and indicate the response to - the last command received from the client. - - Status response lines begin with a 3 digit numeric code which is - sufficient to distinguish all responses. Some of these may herald - the subsequent transmission of text. - - The first digit of the response broadly indicates the success, - failure, or progress of the previous command. - - 1xx - Informative message - 2xx - Command ok - 3xx - Command ok so far, send the rest of it. - 4xx - Command was correct, but couldn't be performed for - some reason. - 5xx - Command unimplemented, or incorrect, or a serious - program error occurred. - - - - - - -Kantor & Lapsley [Page 6] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - The next digit in the code indicates the function response category. - - x0x - Connection, setup, and miscellaneous messages - x1x - Newsgroup selection - x2x - Article selection - x3x - Distribution functions - x4x - Posting - x8x - Nonstandard (private implementation) extensions - x9x - Debugging output - - The exact response codes that should be expected from each command - are detailed in the description of that command. In addition, below - is listed a general set of response codes that may be received at any - time. - - Certain status responses contain parameters such as numbers and - names. The number and type of such parameters is fixed for each - response code to simplify interpretation of the response. - - Parameters are separated from the numeric response code and from each - other by a single space. All numeric parameters are decimal, and may - have leading zeros. All string parameters begin after the separating - space, and end before the following separating space or the CR-LF - pair at the end of the line. (String parameters may not, therefore, - contain spaces.) All text, if any, in the response which is not a - parameter of the response must follow and be separated from the last - parameter by a space. Also, note that the text following a response - number may vary in different implementations of the server. The - 3-digit numeric code should be used to determine what response was - sent. - - Response codes not specified in this standard may be used for any - installation-specific additional commands also not specified. These - should be chosen to fit the pattern of x8x specified above. (Note - that debugging is provided for explicitly in the x9x response codes.) - The use of unspecified response codes for standard commands is - prohibited. - - We have provided a response pattern x9x for debugging. Since much - debugging output may be classed as "informative messages", we would - expect, therefore, that responses 190 through 199 would be used for - various debugging outputs. There is no requirement in this - specification for debugging output, but if such is provided over the - connected stream, it must use these response codes. If appropriate - to a specific implementation, other x9x codes may be used for - debugging. (An example might be to use e.g., 290 to acknowledge a - remote debugging request.) - - -Kantor & Lapsley [Page 7] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -2.4.3. General Responses - - The following is a list of general response codes that may be sent by - the NNTP server. These are not specific to any one command, but may - be returned as the result of a connection, a failure, or some unusual - condition. - - In general, 1xx codes may be ignored or displayed as desired; code - 200 or 201 is sent upon initial connection to the NNTP server - depending upon posting permission; code 400 will be sent when the - NNTP server discontinues service (by operator request, for example); - and 5xx codes indicate that the command could not be performed for - some unusual reason. - - 100 help text - 190 - through - 199 debug output - - 200 server ready - posting allowed - 201 server ready - no posting allowed - - 400 service discontinued - - 500 command not recognized - 501 command syntax error - 502 access restriction or permission denied - 503 program fault - command not performed - -3. Command and Response Details - - On the following pages are descriptions of each command recognized by - the NNTP server and the responses which will be returned by those - commands. - - Each command is shown in upper case for clarity, although case is - ignored in the interpretation of commands by the NNTP server. Any - parameters are shown in lower case. A parameter shown in [square - brackets] is optional. For example, [GMT] indicates that the - triglyph GMT may present or omitted. - - Every command described in this section must be implemented by all - NNTP servers. - - - - - - -Kantor & Lapsley [Page 8] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - There is no prohibition against additional commands being added; - however, it is recommended that any such unspecified command begin - with the letter "X" to avoid conflict with later revisions of this - specification. - - Implementors are reminded that such additional commands may not - redefine specified status response codes. Using additional - unspecified responses for standard commands is also prohibited. - -3.1. The ARTICLE, BODY, HEAD, and STAT commands - - There are two forms to the ARTICLE command (and the related BODY, - HEAD, and STAT commands), each using a different method of specifying - which article is to be retrieved. When the ARTICLE command is - followed by a message-id in angle brackets ("<" and ">"), the first - form of the command is used; when a numeric parameter or no parameter - is supplied, the second form is invoked. - - The text of the article is returned as a textual response, as - described earlier in this document. - - The HEAD and BODY commands are identical to the ARTICLE command - except that they respectively return only the header lines or text - body of the article. - - The STAT command is similar to the ARTICLE command except that no - text is returned. When selecting by message number within a group, - the STAT command serves to set the current article pointer without - sending text. The returned acknowledgement response will contain the - message-id, which may be of some value. Using the STAT command to - select by message-id is valid but of questionable value, since a - selection by message-id does NOT alter the "current article pointer". - -3.1.1. ARTICLE (selection by message-id) - - ARTICLE <message-id> - - Display the header, a blank line, then the body (text) of the - specified article. Message-id is the message id of an article as - shown in that article's header. It is anticipated that the client - will obtain the message-id from a list provided by the NEWNEWS - command, from references contained within another article, or from - the message-id provided in the response to some other commands. - - Please note that the internally-maintained "current article pointer" - is NOT ALTERED by this command. This is both to facilitate the - presentation of articles that may be referenced within an article - - -Kantor & Lapsley [Page 9] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - being read, and because of the semantic difficulties of determining - the proper sequence and membership of an article which may have been - posted to more than one newsgroup. - -3.1.2. ARTICLE (selection by number) - - ARTICLE [nnn] - - Displays the header, a blank line, then the body (text) of the - current or specified article. The optional parameter nnn is the - - numeric id of an article in the current newsgroup and must be chosen - from the range of articles provided when the newsgroup was selected. - If it is omitted, the current article is assumed. - - The internally-maintained "current article pointer" is set by this - command if a valid article number is specified. - - [the following applies to both forms of the article command.] A - response indicating the current article number, a message-id string, - and that text is to follow will be returned. - - The message-id string returned is an identification string contained - within angle brackets ("<" and ">"), which is derived from the header - of the article itself. The Message-ID header line (required by - RFC850) from the article must be used to supply this information. If - the message-id header line is missing from the article, a single - digit "0" (zero) should be supplied within the angle brackets. - - Since the message-id field is unique with each article, it may be - used by a news reading program to skip duplicate displays of articles - that have been posted more than once, or to more than one newsgroup. - -3.1.3. Responses - - 220 n <a> article retrieved - head and body follow - (n = article number, <a> = message-id) - 221 n <a> article retrieved - head follows - 222 n <a> article retrieved - body follows - 223 n <a> article retrieved - request text separately - 412 no newsgroup has been selected - 420 no current article has been selected - 423 no such article number in this group - 430 no such article found - - - - - -Kantor & Lapsley [Page 10] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -3.2. The GROUP command - -3.2.1. GROUP - - GROUP ggg - - The required parameter ggg is the name of the newsgroup to be - selected (e.g. "net.news"). A list of valid newsgroups may be - obtained from the LIST command. - - The successful selection response will return the article numbers of - the first and last articles in the group, and an estimate of the - number of articles on file in the group. It is not necessary that - the estimate be correct, although that is helpful; it must only be - equal to or larger than the actual number of articles on file. (Some - implementations will actually count the number of articles on file. - Others will just subtract first article number from last to get an - estimate.) - - When a valid group is selected by means of this command, the - internally maintained "current article pointer" is set to the first - article in the group. If an invalid group is specified, the - previously selected group and article remain selected. If an empty - newsgroup is selected, the "current article pointer" is in an - indeterminate state and should not be used. - - Note that the name of the newsgroup is not case-dependent. It must - otherwise match a newsgroup obtained from the LIST command or an - error will result. - -3.2.2. Responses - - 211 n f l s group selected - (n = estimated number of articles in group, - f = first article number in the group, - l = last article number in the group, - s = name of the group.) - 411 no such news group - - - - - - - - - - - -Kantor & Lapsley [Page 11] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -3.3. The HELP command - -3.3.1. HELP - - HELP - - Provides a short summary of commands that are understood by this - implementation of the server. The help text will be presented as a - textual response, terminated by a single period on a line by itself. - - 3.3.2. Responses - - 100 help text follows - -3.4. The IHAVE command - -3.4.1. IHAVE - - IHAVE <messageid> - - The IHAVE command informs the server that the client has an article - whose id is <messageid>. If the server desires a copy of that - article, it will return a response instructing the client to send the - entire article. If the server does not want the article (if, for - example, the server already has a copy of it), a response indicating - that the article is not wanted will be returned. - - If transmission of the article is requested, the client should send - the entire article, including header and body, in the manner - specified for text transmission from the server. A response code - indicating success or failure of the transferral of the article will - be returned. - - This function differs from the POST command in that it is intended - for use in transferring already-posted articles between hosts. - Normally it will not be used when the client is a personal - newsreading program. In particular, this function will invoke the - server's news posting program with the appropriate settings (flags, - options, etc) to indicate that the forthcoming article is being - forwarded from another host. - - The server may, however, elect not to post or forward the article if - after further examination of the article it deems it inappropriate to - do so. The 436 or 437 error codes may be returned as appropriate to - the situation. - - Reasons for such subsequent rejection of an article may include such - - -Kantor & Lapsley [Page 12] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - problems as inappropriate newsgroups or distributions, disk space - limitations, article lengths, garbled headers, and the like. These - are typically restrictions enforced by the server host's news - software and not necessarily the NNTP server itself. - -3.4.2. Responses - - 235 article transferred ok - 335 send article to be transferred. End with <CR-LF>.<CR-LF> - 435 article not wanted - do not send it - 436 transfer failed - try again later - 437 article rejected - do not try again - - An implementation note: - - Because some host news posting software may not be able to decide - immediately that an article is inappropriate for posting or - forwarding, it is acceptable to acknowledge the successful transfer - of the article and to later silently discard it. Thus it is - permitted to return the 235 acknowledgement code and later discard - the received article. This is not a fully satisfactory solution to - the problem. Perhaps some implementations will wish to send mail to - the author of the article in certain of these cases. - -3.5. The LAST command - -3.5.1. LAST - - LAST - - The internally maintained "current article pointer" is set to the - previous article in the current newsgroup. If already positioned at - the first article of the newsgroup, an error message is returned and - the current article remains selected. - - The internally-maintained "current article pointer" is set by this - command. - - A response indicating the current article number, and a message-id - string will be returned. No text is sent in response to this - command. - -3.5.2. Responses - - 223 n a article retrieved - request text separately - (n = article number, a = unique article id) - - - -Kantor & Lapsley [Page 13] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - 412 no newsgroup selected - 420 no current article has been selected - 422 no previous article in this group - -3.6. The LIST command - -3.6.1. LIST - - LIST - - Returns a list of valid newsgroups and associated information. Each - newsgroup is sent as a line of text in the following format: - - group last first p - - where <group> is the name of the newsgroup, <last> is the number of - the last known article currently in that newsgroup, <first> is the - number of the first article currently in the newsgroup, and <p> is - either 'y' or 'n' indicating whether posting to this newsgroup is - allowed ('y') or prohibited ('n'). - - The <first> and <last> fields will always be numeric. They may have - leading zeros. If the <last> field evaluates to less than the - <first> field, there are no articles currently on file in the - newsgroup. - - Note that posting may still be prohibited to a client even though the - LIST command indicates that posting is permitted to a particular - newsgroup. See the POST command for an explanation of client - prohibitions. The posting flag exists for each newsgroup because - some newsgroups are moderated or are digests, and therefore cannot be - posted to; that is, articles posted to them must be mailed to a - moderator who will post them for the submitter. This is independent - of the posting permission granted to a client by the NNTP server. - - Please note that an empty list (i.e., the text body returned by this - command consists only of the terminating period) is a possible valid - response, and indicates that there are currently no valid newsgroups. - -3.6.2. Responses - - 215 list of newsgroups follows - - - - - - - -Kantor & Lapsley [Page 14] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -3.7. The NEWGROUPS command - -3.7.1. NEWGROUPS - - NEWGROUPS date time [GMT] [<distributions>] - - A list of newsgroups created since <date and time> will be listed in - the same format as the LIST command. - - The date is sent as 6 digits in the format YYMMDD, where YY is the - last two digits of the year, MM is the two digits of the month (with - leading zero, if appropriate), and DD is the day of the month (with - leading zero, if appropriate). The closest century is assumed as - part of the year (i.e., 86 specifies 1986, 30 specifies 2030, 99 is - 1999, 00 is 2000). - - Time must also be specified. It must be as 6 digits HHMMSS with HH - being hours on the 24-hour clock, MM minutes 00-59, and SS seconds - 00-59. The time is assumed to be in the server's timezone unless the - token "GMT" appears, in which case both time and date are evaluated - at the 0 meridian. - - The optional parameter "distributions" is a list of distribution - groups, enclosed in angle brackets. If specified, the distribution - portion of a new newsgroup (e.g, 'net' in 'net.wombat') will be - examined for a match with the distribution categories listed, and - only those new newsgroups which match will be listed. If more than - one distribution group is to be listed, they must be separated by - commas within the angle brackets. - - Please note that an empty list (i.e., the text body returned by this - command consists only of the terminating period) is a possible valid - response, and indicates that there are currently no new newsgroups. - -3.7.2. Responses - - 231 list of new newsgroups follows - - - - - - - - - - - - -Kantor & Lapsley [Page 15] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -3.8. The NEWNEWS command - -3.8.1. NEWNEWS - - NEWNEWS newsgroups date time [GMT] [<distribution>] - - A list of message-ids of articles posted or received to the specified - newsgroup since "date" will be listed. The format of the listing will - be one message-id per line, as though text were being sent. A single - line consisting solely of one period followed by CR-LF will terminate - the list. - - Date and time are in the same format as the NEWGROUPS command. - - A newsgroup name containing a "*" (an asterisk) may be specified to - broaden the article search to some or all newsgroups. The asterisk - will be extended to match any part of a newsgroup name (e.g., - net.micro* will match net.micro.wombat, net.micro.apple, etc). Thus - if only an asterisk is given as the newsgroup name, all newsgroups - will be searched for new news. - - (Please note that the asterisk "*" expansion is a general - replacement; in particular, the specification of e.g., net.*.unix - should be correctly expanded to embrace names such as net.wombat.unix - and net.whocares.unix.) - - Conversely, if no asterisk appears in a given newsgroup name, only - the specified newsgroup will be searched for new articles. Newsgroup - names must be chosen from those returned in the listing of available - groups. Multiple newsgroup names (including a "*") may be specified - in this command, separated by a comma. No comma shall appear after - the last newsgroup in the list. [Implementors are cautioned to keep - the 512 character command length limit in mind.] - - The exclamation point ("!") may be used to negate a match. This can - be used to selectively omit certain newsgroups from an otherwise - larger list. For example, a newsgroups specification of - "net.*,mod.*,!mod.map.*" would specify that all net.<anything> and - all mod.<anything> EXCEPT mod.map.<anything> newsgroup names would be - matched. If used, the exclamation point must appear as the first - character of the given newsgroup name or pattern. - - The optional parameter "distributions" is a list of distribution - groups, enclosed in angle brackets. If specified, the distribution - portion of an article's newsgroup (e.g, 'net' in 'net.wombat') will - be examined for a match with the distribution categories listed, and - only those articles which have at least one newsgroup belonging to - - -Kantor & Lapsley [Page 16] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - the list of distributions will be listed. If more than one - distribution group is to be supplied, they must be separated by - commas within the angle brackets. - - The use of the IHAVE, NEWNEWS, and NEWGROUPS commands to distribute - news is discussed in an earlier part of this document. - - Please note that an empty list (i.e., the text body returned by this - command consists only of the terminating period) is a possible valid - response, and indicates that there is currently no new news. - -3.8.2. Responses - - 230 list of new articles by message-id follows - -3.9. The NEXT command - -3.9.1. NEXT - - NEXT - - The internally maintained "current article pointer" is advanced to - the next article in the current newsgroup. If no more articles - remain in the current group, an error message is returned and the - current article remains selected. - - The internally-maintained "current article pointer" is set by this - command. - - A response indicating the current article number, and the message-id - string will be returned. No text is sent in response to this - command. - -3.9.2. Responses - - 223 n a article retrieved - request text separately - (n = article number, a = unique article id) - 412 no newsgroup selected - 420 no current article has been selected - 421 no next article in this group - - - - - - - - - -Kantor & Lapsley [Page 17] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -3.10. The POST command - -3.10.1. POST - - POST - - If posting is allowed, response code 340 is returned to indicate that - the article to be posted should be sent. Response code 440 indicates - that posting is prohibited for some installation-dependent reason. - - If posting is permitted, the article should be presented in the - format specified by RFC850, and should include all required header - lines. After the article's header and body have been completely sent - by the client to the server, a further response code will be returned - to indicate success or failure of the posting attempt. - - The text forming the header and body of the message to be posted - should be sent by the client using the conventions for text received - from the news server: A single period (".") on a line indicates the - end of the text, with lines starting with a period in the original - text having that period doubled during transmission. - - No attempt shall be made by the server to filter characters, fold or - limit lines, or otherwise process incoming text. It is our intent - that the server just pass the incoming message to be posted to the - server installation's news posting software, which is separate from - this specification. See RFC850 for more details. - - Since most installations will want the client news program to allow - the user to prepare his message using some sort of text editor, and - transmit it to the server for posting only after it is composed, the - client program should take note of the herald message that greeted it - when the connection was first established. This message indicates - whether postings from that client are permitted or not, and can be - used to caution the user that his access is read-only if that is the - case. This will prevent the user from wasting a good deal of time - composing a message only to find posting of the message was denied. - The method and determination of which clients and hosts may post is - installation dependent and is not covered by this specification. - -3.10.2. Responses - - 240 article posted ok - 340 send article to be posted. End with <CR-LF>.<CR-LF> - 440 posting not allowed - 441 posting failed - - - -Kantor & Lapsley [Page 18] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - (for reference, one of the following codes will be sent upon initial - connection; the client program should determine whether posting is - generally permitted from these:) 200 server ready - posting allowed - 201 server ready - no posting allowed - -3.11. The QUIT command - -3.11.1. QUIT - - QUIT - - The server process acknowledges the QUIT command and then closes the - connection to the client. This is the preferred method for a client - to indicate that it has finished all its transactions with the NNTP - server. - - If a client simply disconnects (or the connection times out, or some - other fault occurs), the server should gracefully cease its attempts - to service the client. - -3.11.2. Responses - - 205 closing connection - goodbye! - -3.12. The SLAVE command - -3.12.1. SLAVE - - SLAVE - - Indicates to the server that this client connection is to a slave - server, rather than a user. - - This command is intended for use in separating connections to single - users from those to subsidiary ("slave") servers. It may be used to - indicate that priority should therefore be given to requests from - this client, as it is presumably serving more than one person. It - might also be used to determine which connections to close when - system load levels are exceeded, perhaps giving preference to slave - servers. The actual use this command is put to is entirely - implementation dependent, and may vary from one host to another. In - NNTP servers which do not give priority to slave servers, this - command must nonetheless be recognized and acknowledged. - -3.12.2. Responses - - 202 slave status noted - - -Kantor & Lapsley [Page 19] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -4. Sample Conversations - - These are samples of the conversations that might be expected with - the news server in hypothetical sessions. The notation C: indicates - commands sent to the news server from the client program; S: indicate - responses received from the server by the client. - -4.1. Example 1 - relative access with NEXT - - S: (listens at TCP port 119) - - C: (requests connection on TCP port 119) - S: 200 wombatvax news server ready - posting ok - - (client asks for a current newsgroup list) - C: LIST - S: 215 list of newsgroups follows - S: net.wombats 00543 00501 y - S: net.unix-wizards 10125 10011 y - (more information here) - S: net.idiots 00100 00001 n - S: . - - (client selects a newsgroup) - C: GROUP net.unix-wizards - S: 211 104 10011 10125 net.unix-wizards group selected - (there are 104 articles on file, from 10011 to 10125) - - (client selects an article to read) - C: STAT 10110 - S: 223 10110 <23445@sdcsvax.ARPA> article retrieved - statistics - only (article 10110 selected, its message-id is - <23445@sdcsvax.ARPA>) - - (client examines the header) - C: HEAD - S: 221 10110 <23445@sdcsvax.ARPA> article retrieved - head - follows (text of the header appears here) - S: . - - (client wants to see the text body of the article) - C: BODY - S: 222 10110 <23445@sdcsvax.ARPA> article retrieved - body - follows (body text here) - S: . - - (client selects next article in group) - - -Kantor & Lapsley [Page 20] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - C: NEXT - S: 223 10113 <21495@nudebch.uucp> article retrieved - statistics - only (article 10113 was next in group) - - (client finishes session) - C: QUIT - S: 205 goodbye. - -4.2. Example 2 - absolute article access with ARTICLE - - S: (listens at TCP port 119) - - C: (requests connection on TCP port 119) - S: 201 UCB-VAX netnews server ready -- no posting allowed - - C: GROUP msgs - S: 211 103 402 504 msgs Your new group is msgs - (there are 103 articles, from 402 to 504) - - C: ARTICLE 401 - S: 423 No such article in this newsgroup - - C: ARTICLE 402 - S: 220 402 <4105@ucbvax.ARPA> Article retrieved, text follows - S: (article header and body follow) - S: . - - C: HEAD 403 - S: 221 403 <3108@mcvax.UUCP> Article retrieved, header follows - S: (article header follows) - S: . - - C: QUIT - S: 205 UCB-VAX news server closing connection. Goodbye. - -4.3. Example 3 - NEWGROUPS command - - S: (listens at TCP port 119) - - C: (requests connection on TCP port 119) - S: 200 Imaginary Institute News Server ready (posting ok) - - (client asks for new newsgroups since April 3, 1985) - C: NEWGROUPS 850403 020000 - - S: 231 New newsgroups since 03/04/85 02:00:00 follow - - - -Kantor & Lapsley [Page 21] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - S: net.music.gdead - S: net.games.sources - S: . - - C: GROUP net.music.gdead - S: 211 0 1 1 net.music.gdead Newsgroup selected - (there are no articles in that newsgroup, and - the first and last article numbers should be ignored) - - C: QUIT - S: 205 Imaginary Institute news server ceasing service. Bye! - -4.4. Example 4 - posting a news article - - S: (listens at TCP port 119) - - C: (requests connection on TCP port 119) - S: 200 BANZAIVAX news server ready, posting allowed. - - C: POST - S: 340 Continue posting; Period on a line by itself to end - C: (transmits news article in RFC850 format) - C: . - S: 240 Article posted successfully. - - C: QUIT - S: 205 BANZAIVAX closing connection. Goodbye. - -4.5. Example 5 - interruption due to operator request - - S: (listens at TCP port 119) - - C: (requests connection on TCP port 119) - S: 201 genericvax news server ready, no posting allowed. - - (assume normal conversation for some time, and - that a newsgroup has been selected) - - C: NEXT - S: 223 1013 <5734@mcvax.UUCP> Article retrieved; text separate. - - C: HEAD - C: 221 1013 <5734@mcvax.UUCP> Article retrieved; head follows. - - S: (sends head of article, but halfway through is - interrupted by an operator request. The following - then occurs, without client intervention.) - - -Kantor & Lapsley [Page 22] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - S: (ends current line with a CR-LF pair) - S: . - S: 400 Connection closed by operator. Goodbye. - S: (closes connection) - -4.6. Example 6 - Using the news server to distribute news between - systems. - - S: (listens at TCP port 119) - - C: (requests connection on TCP port 119) - S: 201 Foobar NNTP server ready (no posting) - - (client asks for new newsgroups since 2 am, May 15, 1985) - C: NEWGROUPS 850515 020000 - S: 235 New newsgroups since 850515 follow - S: net.fluff - S: net.lint - S: . - - (client asks for new news articles since 2 am, May 15, 1985) - C: NEWNEWS * 850515 020000 - S: 230 New news since 850515 020000 follows - S: <1772@foo.UUCP> - S: <87623@baz.UUCP> - S: <17872@GOLD.CSNET> - S: . - - (client asks for article <1772@foo.UUCP>) - C: ARTICLE <1772@foo.UUCP> - S: 220 <1772@foo.UUCP> All of article follows - S: (sends entire message) - S: . - - (client asks for article <87623@baz.UUCP> - C: ARTICLE <87623@baz.UUCP> - S: 220 <87623@baz.UUCP> All of article follows - S: (sends entire message) - S: . - - (client asks for article <17872@GOLD.CSNET> - C: ARTICLE <17872@GOLD.CSNET> - S: 220 <17872@GOLD.CSNET> All of article follows - S: (sends entire message) - S: . - - - - -Kantor & Lapsley [Page 23] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - (client offers an article it has received recently) - C: IHAVE <4105@ucbvax.ARPA> - S: 435 Already seen that one, where you been? - - (client offers another article) - C: IHAVE <4106@ucbvax.ARPA> - S: 335 News to me! <CRLF.CRLF> to end. - C: (sends article) - C: . - S: 235 Article transferred successfully. Thanks. - - (or) - - S: 436 Transfer failed. - - (client is all through with the session) - C: QUIT - S: 205 Foobar NNTP server bids you farewell. - -4.7. Summary of commands and responses. - - The following are the commands recognized and responses returned by - the NNTP server. - -4.7.1. Commands - - ARTICLE - BODY - GROUP - HEAD - HELP - IHAVE - LAST - LIST - NEWGROUPS - NEWNEWS - NEXT - POST - QUIT - SLAVE - STAT - -4.7.2. Responses - - 100 help text follows - 199 debug output - - - -Kantor & Lapsley [Page 24] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - 200 server ready - posting allowed - 201 server ready - no posting allowed - 202 slave status noted - 205 closing connection - goodbye! - 211 n f l s group selected - 215 list of newsgroups follows - 220 n <a> article retrieved - head and body follow 221 n <a> article - retrieved - head follows - 222 n <a> article retrieved - body follows - 223 n <a> article retrieved - request text separately 230 list of new - articles by message-id follows - 231 list of new newsgroups follows - 235 article transferred ok - 240 article posted ok - - 335 send article to be transferred. End with <CR-LF>.<CR-LF> - 340 send article to be posted. End with <CR-LF>.<CR-LF> - - 400 service discontinued - 411 no such news group - 412 no newsgroup has been selected - 420 no current article has been selected - 421 no next article in this group - 422 no previous article in this group - 423 no such article number in this group - 430 no such article found - 435 article not wanted - do not send it - 436 transfer failed - try again later - 437 article rejected - do not try again. - 440 posting not allowed - 441 posting failed - - 500 command not recognized - 501 command syntax error - 502 access restriction or permission denied - 503 program fault - command not performed - -4.8. A Brief Word about the USENET News System - - In the UNIX world, which traditionally has been linked by 1200 baud - dial-up telephone lines, the USENET News system has evolved to handle - central storage, indexing, retrieval, and distribution of news. With - the exception of its underlying transport mechanism (UUCP), USENET - News is an efficient means of providing news and bulletin service to - subscribers on UNIX and other hosts worldwide. The USENET News - - - - -Kantor & Lapsley [Page 25] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - - system is discussed in detail in RFC 850. It runs on most versions - of UNIX and on many other operating systems, and is customarily - distributed without charge. - - USENET uses a spooling area on the UNIX host to store news articles, - one per file. Each article consists of a series of heading text, - which contain the sender's identification and organizational - affiliation, timestamps, electronic mail reply paths, subject, - newsgroup (subject category), and the like. A complete news article - is reproduced in its entirety below. Please consult RFC 850 for more - details. - - Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site - sdcsvax.UUCP - Posting-Version: version B 2.10.1 6/24/83 SMI; site unitek.uucp - Path:sdcsvax!sdcrdcf!hplabs!qantel!ihnp4!alberta!ubc-vision!unitek - !honman - From: honman@unitek.uucp (Man Wong) - Newsgroups: net.unix-wizards - Subject: foreground -> background ? - Message-ID: <167@unitek.uucp> - Date: 25 Sep 85 23:51:52 GMT - Date-Received: 29 Sep 85 09:54:48 GMT - Reply-To: honman@unitek.UUCP (Hon-Man Wong) - Distribution: net.all - Organization: Unitek Technologies Corporation - Lines: 12 - - I have a process (C program) which generates a child and waits for - it to return. What I would like to do is to be able to run the - child process interactively for a while before kicking itself into - the background so I can return to the parent process (while the - child process is RUNNING in the background). Can it be done? And - if it can, how? - - Please reply by E-mail. Thanks in advance. - - Hon-Man Wong - - - - - - - - - - - -Kantor & Lapsley [Page 26] - - - -RFC 977 February 1986 -Network News Transfer Protocol - - -5. References - - [1] Crocker, D., "Standard for the Format of ARPA Internet Text - Messages", RFC-822, Department of Electrical Engineering, - University of Delaware, August, 1982. - - [2] Horton, M., "Standard for Interchange of USENET Messages", - RFC-850, USENET Project, June, 1983. - - [3] Postel, J., "Transmission Control Protocol- DARPA Internet - Program Protocol Specification", RFC-793, USC/Information - Sciences Institute, September, 1981. - - [4] Postel, J., "Simple Mail Transfer Protocol", RFC-821, - USC/Information Sciences Institute, August, 1982. - -6. Acknowledgements - - The authors wish to express their heartfelt thanks to those many - people who contributed to this specification, and especially to Erik - Fair and Chuq von Rospach, without whose inspiration this whole thing - would not have been necessary. - -7. Notes - - <1> UNIX is a trademark of Bell Laboratories. - - - - - - - - - - - - - - - - - - - - - - - -Kantor & Lapsley [Page 27] - diff --git a/install-sh b/install-sh deleted file mode 100644 index e9de23842..000000000 --- a/install-sh +++ /dev/null @@ -1,251 +0,0 @@ -#!/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/.cvsignore b/intl/.cvsignore deleted file mode 100644 index 3b6496f88..000000000 --- a/intl/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -po2tbl.sed diff --git a/intl/ChangeLog b/intl/ChangeLog deleted file mode 100644 index df904de37..000000000 --- a/intl/ChangeLog +++ /dev/null @@ -1,4 +0,0 @@ -2001-05-23 GNU <bug-gnu-utils@gnu.org> - - * Version 0.10.38 released. - diff --git a/intl/Makefile.in b/intl/Makefile.in deleted file mode 100644 index 889ba2392..000000000 --- a/intl/Makefile.in +++ /dev/null @@ -1,312 +0,0 @@ -# Makefile for directory with message catalog handling in GNU NLS Utilities. -# Copyright (C) 1995-1998, 2000, 2001 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 = @libdir@ -includedir = @includedir@ -datadir = @datadir@ -localedir = $(datadir)/locale -gettextsrcdir = $(datadir)/gettext/intl -aliaspath = $(localedir) -subdir = intl - -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = @MKINSTALLDIRS@ -mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` - -l = @INTL_LIBTOOL_SUFFIX_PREFIX@ - -AR = ar -CC = @CC@ -LIBTOOL = @LIBTOOL@ -RANLIB = @RANLIB@ -YACC = @INTLBISON@ -y -d -YFLAGS = --name-prefix=__gettext - -DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ --DLIBDIR=\"$(libdir)\" @DEFS@ -CPPFLAGS = @CPPFLAGS@ -CFLAGS = @CFLAGS@ -LDFLAGS = @LDFLAGS@ - -COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) - -HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h -COMHDRS = gettext.h gettextP.h hash-string.h -SOURCES = $(COMSRCS) intl-compat.c -COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ -finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ -explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \ -localcharset.c -OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ -finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ -explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \ -plural.$lo localcharset.$lo -GETTOBJS = intl-compat.$lo -DISTFILES.common = Makefile.in \ -config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES) -DISTFILES.generated = plural.c -DISTFILES.normal = VERSION -DISTFILES.gettext = libintl.glibc -DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c - -# Libtool's library version information for libintl. -# Before making a gettext release, the gettext maintainer must change this -# according to the libtool documentation, section "Library interface versions". -# Maintainers of other packages that include the intl directory must *not* -# change these values. -LTV_CURRENT=1 -LTV_REVISION=1 -LTV_AGE=0 - -.SUFFIXES: -.SUFFIXES: .c .y .o .lo .sin .sed -.c.o: - $(COMPILE) $< -.c.lo: - $(LIBTOOL) --mode=compile $(COMPILE) $< - -.y.c: - $(YACC) $(YFLAGS) --output $@ $< - rm -f $*.h - -.sin.sed: - sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@ - mv t-$@ $@ - -INCLUDES = -I.. -I. -I$(top_srcdir)/intl - -all: all-@USE_INCLUDED_LIBINTL@ -all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed -all-no: all-no-@BUILD_INCLUDED_LIBINTL@ -all-no-yes: libgnuintl.$la -all-no-no: - -libintl.a libgnuintl.a: $(OBJECTS) - rm -f $@ - $(AR) cru $@ $(OBJECTS) - $(RANLIB) $@ - -libintl.la libgnuintl.la: $(OBJECTS) - $(LIBTOOL) --mode=link \ - $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ - $(OBJECTS) @LIBICONV@ \ - -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ - -rpath $(libdir) \ - -no-undefined - -libintl.h: libgnuintl.h - cp $(srcdir)/libgnuintl.h libintl.h - -charset.alias: config.charset - $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ - mv t-$@ $@ - -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 GNU gettext() function in its C library or in a -# separate 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 \ - $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ - $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ - $(LIBTOOL) --mode=install \ - $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ - else \ - : ; \ - fi - if test '@USE_INCLUDED_LIBINTL@' = yes; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir); \ - temp=$(DESTDIR)$(libdir)/t-charset.alias; \ - dest=$(DESTDIR)$(libdir)/charset.alias; \ - if test -f $(DESTDIR)$(libdir)/charset.alias; then \ - orig=$(DESTDIR)$(libdir)/charset.alias; \ - sed -f ref-add.sed $$orig > $$temp; \ - $(INSTALL_DATA) $$temp $$dest; \ - rm -f $$temp; \ - else \ - if test @GLIBC21@ = no; then \ - orig=charset.alias; \ - sed -f ref-add.sed $$orig > $$temp; \ - $(INSTALL_DATA) $$temp $$dest; \ - rm -f $$temp; \ - fi; \ - fi; \ - $(mkinstalldirs) $(DESTDIR)$(localedir); \ - test -f $(DESTDIR)$(localedir)/locale.alias \ - && orig=$(DESTDIR)$(localedir)/locale.alias \ - || orig=$(srcdir)/locale.alias; \ - temp=$(DESTDIR)$(localedir)/t-locale.alias; \ - dest=$(DESTDIR)$(localedir)/locale.alias; \ - sed -f ref-add.sed $$orig > $$temp; \ - $(INSTALL_DATA) $$temp $$dest; \ - rm -f $$temp; \ - else \ - : ; \ - fi -install-data: all - if test "$(PACKAGE)" = "gettext"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ - $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ - $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ - dists="$(DISTFILES.common)"; \ - for file in $$dists; do \ - $(INSTALL_DATA) $(srcdir)/$$file \ - $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ - dists="$(DISTFILES.generated)"; \ - for file in $$dists; do \ - if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ - $(INSTALL_DATA) $$dir/$$file \ - $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - dists="$(DISTFILES.obsolete)"; \ - for file in $$dists; do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi - -# Define this as empty until I found a useful application. -installcheck: - -uninstall: - if test "$(PACKAGE)" = "gettext" \ - && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ - rm -f $(DESTDIR)$(includedir)/libintl.h; \ - $(LIBTOOL) --mode=uninstall \ - rm -f $(DESTDIR)$(libdir)/libintl.$la; \ - else \ - : ; \ - fi - if test '@USE_INCLUDED_LIBINTL@' = yes; then \ - if test -f $(DESTDIR)$(libdir)/charset.alias; then \ - temp=$(DESTDIR)$(libdir)/t-charset.alias; \ - dest=$(DESTDIR)$(libdir)/charset.alias; \ - sed -f ref-del.sed $$dest > $$temp; \ - if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ - rm -f $$dest; \ - else \ - $(INSTALL_DATA) $$temp $$dest; \ - fi; \ - rm -f $$temp; \ - fi; \ - if test -f $(DESTDIR)$(localedir)/locale.alias; then \ - temp=$(DESTDIR)$(localedir)/t-locale.alias; \ - dest=$(DESTDIR)$(localedir)/locale.alias; \ - sed -f ref-del.sed $$dest > $$temp; \ - if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ - rm -f $$dest; \ - else \ - $(INSTALL_DATA) $$temp $$dest; \ - fi; \ - rm -f $$temp; \ - fi; \ - else \ - : ; \ - fi - if test "$(PACKAGE)" = "gettext"; then \ - for file in VERSION ChangeLog $(DISTFILES.common) $(DISTFILES.generated); do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi - -info dvi: - -$(OBJECTS): ../config.h libgnuintl.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 *.la *.o *.lo core core.* - rm -f libintl.h charset.alias ref-add.sed ref-del.sed - rm -f -r .libs _libs - -clean: mostlyclean - -distclean: clean - rm -f Makefile ID TAGS - if test "$(PACKAGE)" = gettext; then \ - rm -f ChangeLog.inst $(DISTFILES.normal); \ - else \ - : ; \ - fi - -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 - if test "$(PACKAGE)" = gettext; then \ - additional="$(DISTFILES.gettext)"; \ - else \ - additional="$(DISTFILES.normal)"; \ - fi; \ - $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ - for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ - if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ - ln $$dir/$$file $(distdir) 2> /dev/null \ - || cp -p $$dir/$$file $(distdir); \ - done - -Makefile: Makefile.in ../config.status - cd .. \ - && CONFIG_FILES=$(subdir)/$@ 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/intl/VERSION b/intl/VERSION deleted file mode 100644 index 268da64a5..000000000 --- a/intl/VERSION +++ /dev/null @@ -1 +0,0 @@ -GNU gettext library from gettext-0.10.38 diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c deleted file mode 100644 index 7e5a74a43..000000000 --- a/intl/bindtextdom.c +++ /dev/null @@ -1,368 +0,0 @@ -/* Implementation of the bindtextdomain(3) function - Copyright (C) 1995-1998, 2000, 2001 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 <stddef.h> -#include <stdlib.h> -#include <string.h> - -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.h" -#endif -#include "gettextP.h" - -#ifdef _LIBC -/* We have to handle multi-threaded applications. */ -# include <bits/libc-lock.h> -#else -/* Provide dummy implementation if this is outside glibc. */ -# define __libc_rwlock_define(CLASS, NAME) -# define __libc_rwlock_wrlock(NAME) -# define __libc_rwlock_unlock(NAME) -#endif - -/* The internal variables in the standalone libintl.a must have different - names than the internal variables in GNU libc, otherwise programs - using libintl.a cannot be linked statically. */ -#if !defined _LIBC -# define _nl_default_dirname _nl_default_dirname__ -# define _nl_domain_bindings _nl_domain_bindings__ -#endif - -/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */ -#ifndef offsetof -# define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) -#endif - -/* @@ 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; - -/* Lock variable to protect the global data in the gettext implementation. */ -__libc_rwlock_define (extern, _nl_state_lock) - - -/* 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 -# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset -# ifndef strdup -# define strdup(str) __strdup (str) -# endif -#else -# define BINDTEXTDOMAIN bindtextdomain__ -# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__ -#endif - -/* Prototypes for local functions. */ -static void set_binding_values PARAMS ((const char *domainname, - const char **dirnamep, - const char **codesetp)); - -/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP - to be used for the DOMAINNAME message catalog. - If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not - modified, only the current value is returned. - If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither - modified nor returned. */ -static void -set_binding_values (domainname, dirnamep, codesetp) - const char *domainname; - const char **dirnamep; - const char **codesetp; -{ - struct binding *binding; - int modified; - - /* Some sanity checks. */ - if (domainname == NULL || domainname[0] == '\0') - { - if (dirnamep) - *dirnamep = NULL; - if (codesetp) - *codesetp = NULL; - return; - } - - __libc_rwlock_wrlock (_nl_state_lock); - - modified = 0; - - 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) - { - if (dirnamep) - { - const char *dirname = *dirnamep; - - if (dirname == NULL) - /* The current binding has be to returned. */ - *dirnamep = binding->dirname; - else - { - /* The domain is already bound. If the new value and the old - one are equal we simply do nothing. Otherwise replace the - old binding. */ - char *result = binding->dirname; - if (strcmp (dirname, result) != 0) - { - if (strcmp (dirname, _nl_default_dirname) == 0) - result = (char *) _nl_default_dirname; - else - { -#if defined _LIBC || defined HAVE_STRDUP - result = strdup (dirname); -#else - size_t len = strlen (dirname) + 1; - result = (char *) malloc (len); - if (__builtin_expect (result != NULL, 1)) - memcpy (result, dirname, len); -#endif - } - - if (__builtin_expect (result != NULL, 1)) - { - if (binding->dirname != _nl_default_dirname) - free (binding->dirname); - - binding->dirname = result; - modified = 1; - } - } - *dirnamep = result; - } - } - - if (codesetp) - { - const char *codeset = *codesetp; - - if (codeset == NULL) - /* The current binding has be to returned. */ - *codesetp = binding->codeset; - else - { - /* The domain is already bound. If the new value and the old - one are equal we simply do nothing. Otherwise replace the - old binding. */ - char *result = binding->codeset; - if (result == NULL || strcmp (codeset, result) != 0) - { -#if defined _LIBC || defined HAVE_STRDUP - result = strdup (codeset); -#else - size_t len = strlen (codeset) + 1; - result = (char *) malloc (len); - if (__builtin_expect (result != NULL, 1)) - memcpy (result, codeset, len); -#endif - - if (__builtin_expect (result != NULL, 1)) - { - if (binding->codeset != NULL) - free (binding->codeset); - - binding->codeset = result; - binding->codeset_cntr++; - modified = 1; - } - } - *codesetp = result; - } - } - } - else if ((dirnamep == NULL || *dirnamep == NULL) - && (codesetp == NULL || *codesetp == NULL)) - { - /* Simply return the default values. */ - if (dirnamep) - *dirnamep = _nl_default_dirname; - if (codesetp) - *codesetp = NULL; - } - else - { - /* We have to create a new binding. */ - size_t len = strlen (domainname) + 1; - struct binding *new_binding = - (struct binding *) malloc (offsetof (struct binding, domainname) + len); - - if (__builtin_expect (new_binding == NULL, 0)) - goto failed; - - memcpy (new_binding->domainname, domainname, len); - - if (dirnamep) - { - const char *dirname = *dirnamep; - - if (dirname == NULL) - /* The default value. */ - dirname = _nl_default_dirname; - else - { - if (strcmp (dirname, _nl_default_dirname) == 0) - dirname = _nl_default_dirname; - else - { - char *result; -#if defined _LIBC || defined HAVE_STRDUP - result = strdup (dirname); - if (__builtin_expect (result == NULL, 0)) - goto failed_dirname; -#else - size_t len = strlen (dirname) + 1; - result = (char *) malloc (len); - if (__builtin_expect (result == NULL, 0)) - goto failed_dirname; - memcpy (result, dirname, len); -#endif - dirname = result; - } - } - *dirnamep = dirname; - new_binding->dirname = (char *) dirname; - } - else - /* The default value. */ - new_binding->dirname = (char *) _nl_default_dirname; - - new_binding->codeset_cntr = 0; - - if (codesetp) - { - const char *codeset = *codesetp; - - if (codeset != NULL) - { - char *result; - -#if defined _LIBC || defined HAVE_STRDUP - result = strdup (codeset); - if (__builtin_expect (result == NULL, 0)) - goto failed_codeset; -#else - size_t len = strlen (codeset) + 1; - result = (char *) malloc (len); - if (__builtin_expect (result == NULL, 0)) - goto failed_codeset; - memcpy (result, codeset, len); -#endif - codeset = result; - new_binding->codeset_cntr++; - } - *codesetp = codeset; - new_binding->codeset = (char *) codeset; - } - else - new_binding->codeset = NULL; - - /* 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; - } - - modified = 1; - - /* Here we deal with memory allocation failures. */ - if (0) - { - failed_codeset: - if (new_binding->dirname != _nl_default_dirname) - free (new_binding->dirname); - failed_dirname: - free (new_binding); - failed: - if (dirnamep) - *dirnamep = NULL; - if (codesetp) - *codesetp = NULL; - } - } - - /* If we modified any binding, we flush the caches. */ - if (modified) - ++_nl_msg_cat_cntr; - - __libc_rwlock_unlock (_nl_state_lock); -} - -/* 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; -{ - set_binding_values (domainname, &dirname, NULL); - return (char *) dirname; -} - -/* Specify the character encoding in which the messages from the - DOMAINNAME message catalog will be returned. */ -char * -BIND_TEXTDOMAIN_CODESET (domainname, codeset) - const char *domainname; - const char *codeset; -{ - set_binding_values (domainname, NULL, &codeset); - return (char *) codeset; -} - -#ifdef _LIBC -/* Aliases for function names in GNU C Library. */ -weak_alias (__bindtextdomain, bindtextdomain); -weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset); -#endif diff --git a/intl/config.charset b/intl/config.charset deleted file mode 100644 index d6f369558..000000000 --- a/intl/config.charset +++ /dev/null @@ -1,438 +0,0 @@ -#! /bin/sh -# Output a system dependent table of character encoding aliases. -# -# Copyright (C) 2000-2001 Free Software Foundation, Inc. -# -# This program 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, 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 -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library 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 table consists of lines of the form -# ALIAS CANONICAL -# -# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". -# ALIAS is compared in a case sensitive way. -# -# CANONICAL is the GNU canonical name for this character encoding. -# It must be an encoding supported by libiconv. Support by GNU libc is -# also desirable. CANONICAL is case insensitive. Usually an upper case -# MIME charset name is preferred. -# The current list of GNU canonical charset names is as follows. -# -# name used by which systems a MIME name? -# ASCII, ANSI_X3.4-1968 glibc solaris freebsd -# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes -# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes -# ISO-8859-3 glibc yes -# ISO-8859-4 osf solaris freebsd yes -# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes -# ISO-8859-6 glibc aix hpux solaris yes -# ISO-8859-7 glibc aix hpux irix osf solaris yes -# ISO-8859-8 glibc aix hpux osf solaris yes -# ISO-8859-9 glibc aix hpux irix osf solaris yes -# ISO-8859-13 glibc -# ISO-8859-15 glibc aix osf solaris freebsd -# KOI8-R glibc solaris freebsd yes -# KOI8-U glibc freebsd yes -# CP437 dos -# CP775 dos -# CP850 aix osf dos -# CP852 dos -# CP855 dos -# CP856 aix -# CP857 dos -# CP861 dos -# CP862 dos -# CP864 dos -# CP865 dos -# CP866 freebsd dos -# CP869 dos -# CP874 win32 dos -# CP922 aix -# CP932 aix win32 dos -# CP943 aix -# CP949 osf win32 dos -# CP950 win32 dos -# CP1046 aix -# CP1124 aix -# CP1129 aix -# CP1250 win32 -# CP1251 glibc win32 -# CP1252 aix win32 -# CP1253 win32 -# CP1254 win32 -# CP1255 win32 -# CP1256 win32 -# CP1257 win32 -# GB2312 glibc aix hpux irix solaris freebsd yes -# EUC-JP glibc aix hpux irix osf solaris freebsd yes -# EUC-KR glibc aix hpux irix osf solaris freebsd yes -# EUC-TW glibc aix hpux irix osf solaris -# BIG5 glibc aix hpux osf solaris freebsd yes -# BIG5HKSCS glibc -# GBK aix osf win32 dos -# GB18030 glibc -# SJIS hpux osf solaris freebsd -# JOHAB glibc win32 -# TIS-620 glibc aix hpux osf solaris -# VISCII glibc yes -# HP-ROMAN8 hpux -# HP-ARABIC8 hpux -# HP-GREEK8 hpux -# HP-HEBREW8 hpux -# HP-TURKISH8 hpux -# HP-KANA8 hpux -# DEC-KANJI osf -# DEC-HANYU osf -# UTF-8 glibc aix hpux osf solaris yes -# -# Note: Names which are not marked as being a MIME name should not be used in -# Internet protocols for information interchange (mail, news, etc.). -# -# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications -# must understand both names and treat them as equivalent. -# -# The first argument passed to this file is the canonical host specification, -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM - -host="$1" -os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` -echo "# This file contains a table of character encoding aliases," -echo "# suitable for operating system '${os}'." -echo "# It was automatically generated from config.charset." -# List of references, updated during installation: -echo "# Packages using this file: " -case "$os" in - linux* | *-gnu*) - # With glibc-2.1 or newer, we don't need any canonicalization, - # because glibc has iconv and both glibc and libiconv support all - # GNU canonical names directly. Therefore, the Makefile does not - # need to install the alias file at all. - # The following applies only to glibc-2.0.x and older libcs. - echo "ISO_646.IRV:1983 ASCII" - ;; - aix*) - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-6 ISO-8859-6" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-8 ISO-8859-8" - echo "ISO8859-9 ISO-8859-9" - echo "ISO8859-15 ISO-8859-15" - echo "IBM-850 CP850" - echo "IBM-856 CP856" - echo "IBM-921 ISO-8859-13" - echo "IBM-922 CP922" - echo "IBM-932 CP932" - echo "IBM-943 CP943" - echo "IBM-1046 CP1046" - echo "IBM-1124 CP1124" - echo "IBM-1129 CP1129" - echo "IBM-1252 CP1252" - echo "IBM-eucCN GB2312" - echo "IBM-eucJP EUC-JP" - echo "IBM-eucKR EUC-KR" - echo "IBM-eucTW EUC-TW" - echo "big5 BIG5" - echo "GBK GBK" - echo "TIS-620 TIS-620" - echo "UTF-8 UTF-8" - ;; - hpux*) - echo "iso88591 ISO-8859-1" - echo "iso88592 ISO-8859-2" - echo "iso88595 ISO-8859-5" - echo "iso88596 ISO-8859-6" - echo "iso88597 ISO-8859-7" - echo "iso88598 ISO-8859-8" - echo "iso88599 ISO-8859-9" - echo "iso885915 ISO-8859-15" - echo "roman8 HP-ROMAN8" - echo "arabic8 HP-ARABIC8" - echo "greek8 HP-GREEK8" - echo "hebrew8 HP-HEBREW8" - echo "turkish8 HP-TURKISH8" - echo "kana8 HP-KANA8" - echo "tis620 TIS-620" - echo "big5 BIG5" - echo "eucJP EUC-JP" - echo "eucKR EUC-KR" - echo "eucTW EUC-TW" - echo "hp15CN GB2312" - #echo "ccdc ?" # what is this? - echo "SJIS SJIS" - echo "utf8 UTF-8" - ;; - irix*) - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-9 ISO-8859-9" - echo "eucCN GB2312" - echo "eucJP EUC-JP" - echo "eucKR EUC-KR" - echo "eucTW EUC-TW" - ;; - osf*) - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-4 ISO-8859-4" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-8 ISO-8859-8" - echo "ISO8859-9 ISO-8859-9" - echo "ISO8859-15 ISO-8859-15" - echo "cp850 CP850" - echo "big5 BIG5" - echo "dechanyu DEC-HANYU" - echo "dechanzi GB2312" - echo "deckanji DEC-KANJI" - echo "deckorean EUC-KR" - echo "eucJP EUC-JP" - echo "eucKR EUC-KR" - echo "eucTW EUC-TW" - echo "GBK GBK" - echo "KSC5601 CP949" - echo "sdeckanji EUC-JP" - echo "SJIS SJIS" - echo "TACTIS TIS-620" - echo "UTF-8 UTF-8" - ;; - solaris*) - echo "646 ASCII" - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-4 ISO-8859-4" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-6 ISO-8859-6" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-8 ISO-8859-8" - echo "ISO8859-9 ISO-8859-9" - echo "ISO8859-15 ISO-8859-15" - echo "koi8-r KOI8-R" - echo "BIG5 BIG5" - echo "gb2312 GB2312" - echo "cns11643 EUC-TW" - echo "5601 EUC-KR" - echo "eucJP EUC-JP" - echo "PCK SJIS" - echo "TIS620.2533 TIS-620" - #echo "sun_eu_greek ?" # what is this? - echo "UTF-8 UTF-8" - ;; - freebsd*) - # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore - # localcharset.c falls back to using the full locale name - # from the environment variables. - echo "C ASCII" - echo "US-ASCII ASCII" - for l in la_LN lt_LN; do - echo "$l.ASCII ASCII" - done - for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ - fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ - lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do - echo "$l.ISO_8859-1 ISO-8859-1" - echo "$l.DIS_8859-15 ISO-8859-15" - done - for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do - echo "$l.ISO_8859-2 ISO-8859-2" - done - for l in la_LN lt_LT; do - echo "$l.ISO_8859-4 ISO-8859-4" - done - for l in ru_RU ru_SU; do - echo "$l.KOI8-R KOI8-R" - echo "$l.ISO_8859-5 ISO-8859-5" - echo "$l.CP866 CP866" - done - echo "uk_UA.KOI8-U KOI8-U" - echo "zh_TW.BIG5 BIG5" - echo "zh_TW.Big5 BIG5" - echo "zh_CN.EUC GB2312" - echo "ja_JP.EUC EUC-JP" - echo "ja_JP.SJIS SJIS" - echo "ja_JP.Shift_JIS SJIS" - echo "ko_KR.EUC EUC-KR" - ;; - beos*) - # BeOS has a single locale, and it has UTF-8 encoding. - echo "* UTF-8" - ;; - msdosdjgpp*) - # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore - # localcharset.c falls back to using the full locale name - # from the environment variables. - echo "#" - echo "# The encodings given here may not all be correct." - echo "# If you find that the encoding given for your language and" - echo "# country is not the one your DOS machine actually uses, just" - echo "# correct it in this file, and send a mail to" - echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>" - echo "# and Bruno Haible <haible@clisp.cons.org>." - echo "#" - echo "C ASCII" - # ISO-8859-1 languages - echo "ca CP850" - echo "ca_ES CP850" - echo "da CP865" # not CP850 ?? - echo "da_DK CP865" # not CP850 ?? - echo "de CP850" - echo "de_AT CP850" - echo "de_CH CP850" - echo "de_DE CP850" - echo "en CP850" - echo "en_AU CP850" # not CP437 ?? - echo "en_CA CP850" - echo "en_GB CP850" - echo "en_NZ CP437" - echo "en_US CP437" - echo "en_ZA CP850" # not CP437 ?? - echo "es CP850" - echo "es_AR CP850" - echo "es_BO CP850" - echo "es_CL CP850" - echo "es_CO CP850" - echo "es_CR CP850" - echo "es_CU CP850" - echo "es_DO CP850" - echo "es_EC CP850" - echo "es_ES CP850" - echo "es_GT CP850" - echo "es_HN CP850" - echo "es_MX CP850" - echo "es_NI CP850" - echo "es_PA CP850" - echo "es_PY CP850" - echo "es_PE CP850" - echo "es_SV CP850" - echo "es_UY CP850" - echo "es_VE CP850" - echo "et CP850" - echo "et_EE CP850" - echo "eu CP850" - echo "eu_ES CP850" - echo "fi CP850" - echo "fi_FI CP850" - echo "fr CP850" - echo "fr_BE CP850" - echo "fr_CA CP850" - echo "fr_CH CP850" - echo "fr_FR CP850" - echo "ga CP850" - echo "ga_IE CP850" - echo "gd CP850" - echo "gd_GB CP850" - echo "gl CP850" - echo "gl_ES CP850" - echo "id CP850" # not CP437 ?? - echo "id_ID CP850" # not CP437 ?? - echo "is CP861" # not CP850 ?? - echo "is_IS CP861" # not CP850 ?? - echo "it CP850" - echo "it_CH CP850" - echo "it_IT CP850" - echo "lt CP775" - echo "lt_LT CP775" - echo "lv CP775" - echo "lv_LV CP775" - echo "nb CP865" # not CP850 ?? - echo "nb_NO CP865" # not CP850 ?? - echo "nl CP850" - echo "nl_BE CP850" - echo "nl_NL CP850" - echo "nn CP865" # not CP850 ?? - echo "nn_NO CP865" # not CP850 ?? - echo "no CP865" # not CP850 ?? - echo "no_NO CP865" # not CP850 ?? - echo "pt CP850" - echo "pt_BR CP850" - echo "pt_PT CP850" - echo "sv CP850" - echo "sv_SE CP850" - # ISO-8859-2 languages - echo "cs CP852" - echo "cs_CZ CP852" - echo "hr CP852" - echo "hr_HR CP852" - echo "hu CP852" - echo "hu_HU CP852" - echo "pl CP852" - echo "pl_PL CP852" - echo "ro CP852" - echo "ro_RO CP852" - echo "sk CP852" - echo "sk_SK CP852" - echo "sl CP852" - echo "sl_SI CP852" - echo "sq CP852" - echo "sq_AL CP852" - echo "sr CP852" # CP852 or CP866 or CP855 ?? - echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? - # ISO-8859-3 languages - echo "mt CP850" - echo "mt_MT CP850" - # ISO-8859-5 languages - echo "be CP866" - echo "be_BE CP866" - echo "bg CP866" # not CP855 ?? - echo "bg_BG CP866" # not CP855 ?? - echo "mk CP866" # not CP855 ?? - echo "mk_MK CP866" # not CP855 ?? - echo "ru KOI8-R" # not CP866 ?? - echo "ru_RU KOI8-R" # not CP866 ?? - # ISO-8859-6 languages - echo "ar CP864" - echo "ar_AE CP864" - echo "ar_DZ CP864" - echo "ar_EG CP864" - echo "ar_IQ CP864" - echo "ar_IR CP864" - echo "ar_JO CP864" - echo "ar_KW CP864" - echo "ar_MA CP864" - echo "ar_OM CP864" - echo "ar_QA CP864" - echo "ar_SA CP864" - echo "ar_SY CP864" - # ISO-8859-7 languages - echo "el CP869" - echo "el_GR CP869" - # ISO-8859-8 languages - echo "he CP862" - echo "he_IL CP862" - # ISO-8859-9 languages - echo "tr CP857" - echo "tr_TR CP857" - # Japanese - echo "ja CP932" - echo "ja_JP CP932" - # Chinese - echo "zh_CN GBK" - echo "zh_TW CP950" # not CP938 ?? - # Korean - echo "kr CP949" # not CP934 ?? - echo "kr_KR CP949" # not CP934 ?? - # Thai - echo "th CP874" - echo "th_TH CP874" - # Other - echo "eo CP850" - echo "eo_EO CP850" - ;; -esac diff --git a/intl/dcgettext.c b/intl/dcgettext.c deleted file mode 100644 index 469e78de7..000000000 --- a/intl/dcgettext.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Implementation of the dcgettext(3) function. - Copyright (C) 1995-1999, 2000, 2001 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 "gettextP.h" -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.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 DCGETTEXT __dcgettext -# define DCIGETTEXT __dcigettext -#else -# define DCGETTEXT dcgettext__ -# define DCIGETTEXT dcigettext__ -#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; -{ - return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); -} - -#ifdef _LIBC -/* Alias for function name in GNU C Library. */ -weak_alias (__dcgettext, dcgettext); -#endif diff --git a/intl/dcigettext.c b/intl/dcigettext.c deleted file mode 100644 index 8456550d0..000000000 --- a/intl/dcigettext.c +++ /dev/null @@ -1,1257 +0,0 @@ -/* Implementation of the internal dcigettext function. - Copyright (C) 1995-1999, 2000, 2001 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. */ - -/* Tell glibc's <string.h> to provide a prototype for mempcpy(). - This must come before <config.h> because <config.h> may include - <features.h>, and once <features.h> has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#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 - -#include <errno.h> -#ifndef errno -extern int errno; -#endif -#ifndef __set_errno -# define __set_errno(val) errno = (val) -#endif - -#include <stddef.h> -#include <stdlib.h> - -#include <string.h> -#if !HAVE_STRCHR && !defined _LIBC -# ifndef strchr -# define strchr index -# endif -#endif - -#if defined HAVE_UNISTD_H || defined _LIBC -# include <unistd.h> -#endif - -#include <locale.h> - -#if defined HAVE_SYS_PARAM_H || defined _LIBC -# include <sys/param.h> -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.h" -#endif -#include "hash-string.h" - -/* Thread safetyness. */ -#ifdef _LIBC -# include <bits/libc-lock.h> -#else -/* Provide dummy implementation if this is outside glibc. */ -# define __libc_lock_define_initialized(CLASS, NAME) -# define __libc_lock_lock(NAME) -# define __libc_lock_unlock(NAME) -# define __libc_rwlock_define_initialized(CLASS, NAME) -# define __libc_rwlock_rdlock(NAME) -# define __libc_rwlock_unlock(NAME) -#endif - -/* Alignment of types. */ -#if defined __GNUC__ && __GNUC__ >= 2 -# define alignof(TYPE) __alignof__ (TYPE) -#else -# define alignof(TYPE) \ - ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) -#endif - -/* The internal variables in the standalone libintl.a must have different - names than the internal variables in GNU libc, otherwise programs - using libintl.a cannot be linked statically. */ -#if !defined _LIBC -# define _nl_default_default_domain _nl_default_default_domain__ -# define _nl_current_default_domain _nl_current_default_domain__ -# define _nl_default_dirname _nl_default_dirname__ -# define _nl_domain_bindings _nl_domain_bindings__ -#endif - -/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */ -#ifndef offsetof -# define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) -#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. */ -# define getcwd __getcwd -# ifndef stpcpy -# define stpcpy __stpcpy -# endif -# define tfind __tfind -#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 -# ifndef HAVE_MEMPCPY -static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); -# 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 - -/* Pathname support. - ISSLASH(C) tests whether C is a directory separator character. - IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, - it may be concatenated to a directory pathname. - IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. - */ -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ - /* Win32, OS/2, DOS */ -# define ISSLASH(C) ((C) == '/' || (C) == '\\') -# define HAS_DEVICE(P) \ - ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ - && (P)[1] == ':') -# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) -# define IS_PATH_WITH_DIR(P) \ - (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) -#else - /* Unix */ -# define ISSLASH(C) ((C) == '/') -# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) -# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) -#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. Neither do SUSV2 and - ISO C 99. So we can use this feature only on selected systems (e.g. - those using GNU C Library). */ -#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2) -# define HAVE_LOCALE_NULL -#endif - -/* This is the type used for the search tree where known translations - are stored. */ -struct known_translation_t -{ - /* Domain in which to search. */ - char *domainname; - - /* The category. */ - int category; - - /* State of the catalog counter at the point the string was found. */ - int counter; - - /* Catalog where the string was found. */ - struct loaded_l10nfile *domain; - - /* And finally the translation. */ - const char *translation; - size_t translation_length; - - /* Pointer to the string in question. */ - char msgid[ZERO]; -}; - -/* Root of the search tree with known translations. We can use this - only if the system provides the `tsearch' function family. */ -#if defined HAVE_TSEARCH || defined _LIBC -# include <search.h> - -static void *root; - -# ifdef _LIBC -# define tsearch __tsearch -# endif - -/* Function to compare two entries in the table of known translations. */ -static int transcmp PARAMS ((const void *p1, const void *p2)); -static int -transcmp (p1, p2) - const void *p1; - const void *p2; -{ - const struct known_translation_t *s1; - const struct known_translation_t *s2; - int result; - - s1 = (const struct known_translation_t *) p1; - s2 = (const struct known_translation_t *) p2; - - result = strcmp (s1->msgid, s2->msgid); - if (result == 0) - { - result = strcmp (s1->domainname, s2->domainname); - if (result == 0) - /* We compare the category last (though this is the cheapest - operation) since it is hopefully always the same (namely - LC_MESSAGES). */ - result = s1->category - s2->category; - } - - return result; -} -#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[] = LOCALEDIR; - -/* List with bindings of specific domains created by bindtextdomain() - calls. */ -struct binding *_nl_domain_bindings; - -/* Prototypes for local functions. */ -static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain, - unsigned long int n, - const char *translation, - size_t translation_len)) - internal_function; -static unsigned long int plural_eval PARAMS ((struct expression *pexp, - unsigned long int n)) - 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 */ - - -#ifdef _LIBC -/* List of blocks allocated for translations. */ -typedef struct transmem_list -{ - struct transmem_list *next; - char data[ZERO]; -} transmem_block_t; -static struct transmem_list *transmem_list; -#else -typedef unsigned char transmem_block_t; -#endif - - -/* 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 DCIGETTEXT __dcigettext -#else -# define DCIGETTEXT dcigettext__ -#endif - -/* Lock variable to protect the global data in the gettext implementation. */ -#ifdef _LIBC -__libc_rwlock_define_initialized (, _nl_state_lock) -#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 -# ifndef HAVE_GETUID -# define getuid() 0 -# endif -# ifndef HAVE_GETGID -# define getgid() 0 -# endif -# ifndef HAVE_GETEUID -# define geteuid() getuid() -# endif -# ifndef HAVE_GETEGID -# define getegid() getgid() -# endif -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 and, if PLURAL is nonzero, search over string - depending on the plural form determined by N. */ -char * -DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) - const char *domainname; - const char *msgid1; - const char *msgid2; - int plural; - unsigned long int n; - 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; - size_t retlen; - int saved_errno; -#if defined HAVE_TSEARCH || defined _LIBC - struct known_translation_t *search; - struct known_translation_t **foundp = NULL; - size_t msgid_len; -#endif - size_t domainname_len; - - /* If no real MSGID is given return NULL. */ - if (msgid1 == NULL) - return NULL; - - __libc_rwlock_rdlock (_nl_state_lock); - - /* 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; - -#if defined HAVE_TSEARCH || defined _LIBC - msgid_len = strlen (msgid1) + 1; - - /* Try to find the translation among those which we found at - some time. */ - search = (struct known_translation_t *) - alloca (offsetof (struct known_translation_t, msgid) + msgid_len); - memcpy (search->msgid, msgid1, msgid_len); - search->domainname = (char *) domainname; - search->category = category; - - foundp = (struct known_translation_t **) tfind (search, &root, transcmp); - if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) - { - /* Now deal with plural. */ - if (plural) - retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation, - (*foundp)->translation_length); - else - retval = (char *) (*foundp)->translation; - - __libc_rwlock_unlock (_nl_state_lock); - return retval; - } -#endif - - /* Preserve the `errno' value. */ - saved_errno = errno; - - /* See whether this is a SUID binary or not. */ - DETERMINE_SECURE; - - /* 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 (IS_ABSOLUTE_PATH (binding->dirname)) - 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. */ - - for (;;) - { - dirname = (char *) alloca (path_max + dirname_len); - ADD_BLOCK (block_list, dirname); - - __set_errno (0); - ret = getcwd (dirname, path_max); - if (ret != NULL || errno != ERANGE) - break; - - path_max += path_max / 2; - path_max += PATH_INCR; - } - - 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 (plural == 0 - ? (char *) msgid1 - /* Use the Germanic plural rule. */ - : n == 1 ? (char *) msgid1 : (char *) msgid2); - } - - 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); - - domainname_len = strlen (domainname); - xdomainname = (char *) alloca (strlen (categoryname) - + domainname_len + 5); - ADD_BLOCK (block_list, xdomainname); - - stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), - domainname, domainname_len), - ".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 && IS_PATH_WITH_DIR (single_locale)) - /* 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); - __libc_rwlock_unlock (_nl_state_lock); - __set_errno (saved_errno); - return (plural == 0 - ? (char *) msgid1 - /* Use the Germanic plural rule. */ - : n == 1 ? (char *) msgid1 : (char *) msgid2); - } - - - /* Find structure describing the message catalog matching the - DOMAINNAME and CATEGORY. */ - domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); - - if (domain != NULL) - { - retval = _nl_find_msg (domain, binding, msgid1, &retlen); - - if (retval == NULL) - { - int cnt; - - for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) - { - retval = _nl_find_msg (domain->successor[cnt], binding, - msgid1, &retlen); - - if (retval != NULL) - { - domain = domain->successor[cnt]; - break; - } - } - } - - if (retval != NULL) - { - /* Found the translation of MSGID1 in domain DOMAIN: - starting at RETVAL, RETLEN bytes. */ - FREE_BLOCKS (block_list); - __set_errno (saved_errno); -#if defined HAVE_TSEARCH || defined _LIBC - if (foundp == NULL) - { - /* Create a new entry and add it to the search tree. */ - struct known_translation_t *newp; - - newp = (struct known_translation_t *) - malloc (offsetof (struct known_translation_t, msgid) - + msgid_len + domainname_len + 1); - if (newp != NULL) - { - newp->domainname = - mempcpy (newp->msgid, msgid1, msgid_len); - memcpy (newp->domainname, domainname, domainname_len + 1); - newp->category = category; - newp->counter = _nl_msg_cat_cntr; - newp->domain = domain; - newp->translation = retval; - newp->translation_length = retlen; - - /* Insert the entry in the search tree. */ - foundp = (struct known_translation_t **) - tsearch (newp, &root, transcmp); - if (foundp == NULL - || __builtin_expect (*foundp != newp, 0)) - /* The insert failed. */ - free (newp); - } - } - else - { - /* We can update the existing entry. */ - (*foundp)->counter = _nl_msg_cat_cntr; - (*foundp)->domain = domain; - (*foundp)->translation = retval; - (*foundp)->translation_length = retlen; - } -#endif - /* Now deal with plural. */ - if (plural) - retval = plural_lookup (domain, n, retval, retlen); - - __libc_rwlock_unlock (_nl_state_lock); - return retval; - } - } - } - /* NOTREACHED */ -} - - -char * -internal_function -_nl_find_msg (domain_file, domainbinding, msgid, lengthp) - struct loaded_l10nfile *domain_file; - struct binding *domainbinding; - const char *msgid; - size_t *lengthp; -{ - struct loaded_domain *domain; - size_t act; - char *result; - size_t resultlen; - - if (domain_file->decided == 0) - _nl_load_domain (domain_file, domainbinding); - - 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)); - - while (1) - { - nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); - - if (nstr == 0) - /* Hash table entry is empty. */ - return NULL; - - /* Compare msgid with the original string at index nstr-1. - We compare the lengths with >=, not ==, because plural entries - are represented by strings with an embedded NUL. */ - 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)) - { - act = nstr - 1; - goto found; - } - - if (idx >= domain->hash_size - incr) - idx -= domain->hash_size - incr; - else - idx += incr; - } - /* NOTREACHED */ - } - else - { - /* Try the default method: binary search in the sorted array of - messages. */ - size_t top, bottom; - - 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 - goto found; - } - /* No translation was found. */ - return NULL; - } - - found: - /* The translation was found at index ACT. If we have to convert the - string to use a different character set, this is the time. */ - result = ((char *) domain->data - + W (domain->must_swap, domain->trans_tab[act].offset)); - resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; - -#if defined _LIBC || HAVE_ICONV - if (domain->codeset_cntr - != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) - { - /* The domain's codeset has changed through bind_textdomain_codeset() - since the message catalog was initialized or last accessed. We - have to reinitialize the converter. */ - _nl_free_domain_conv (domain); - _nl_init_domain_conv (domain_file, domain, domainbinding); - } - - if ( -# ifdef _LIBC - domain->conv != (__gconv_t) -1 -# else -# if HAVE_ICONV - domain->conv != (iconv_t) -1 -# endif -# endif - ) - { - /* We are supposed to do a conversion. First allocate an - appropriate table with the same structure as the table - of translations in the file, where we can put the pointers - to the converted strings in. - There is a slight complication with plural entries. They - are represented by consecutive NUL terminated strings. We - handle this case by converting RESULTLEN bytes, including - NULs. */ - - if (domain->conv_tab == NULL - && ((domain->conv_tab = (char **) calloc (domain->nstrings, - sizeof (char *))) - == NULL)) - /* Mark that we didn't succeed allocating a table. */ - domain->conv_tab = (char **) -1; - - if (__builtin_expect (domain->conv_tab == (char **) -1, 0)) - /* Nothing we can do, no more memory. */ - goto converted; - - if (domain->conv_tab[act] == NULL) - { - /* We haven't used this string so far, so it is not - translated yet. Do this now. */ - /* We use a bit more efficient memory handling. - We allocate always larger blocks which get used over - time. This is faster than many small allocations. */ - __libc_lock_define_initialized (static, lock) -# define INITIAL_BLOCK_SIZE 4080 - static unsigned char *freemem; - static size_t freemem_size; - - const unsigned char *inbuf; - unsigned char *outbuf; - int malloc_count; -# ifndef _LIBC - transmem_block_t *transmem_list = NULL; -# endif - - __libc_lock_lock (lock); - - inbuf = (const unsigned char *) result; - outbuf = freemem + sizeof (size_t); - - malloc_count = 0; - while (1) - { - transmem_block_t *newmem; -# ifdef _LIBC - size_t non_reversible; - int res; - - if (freemem_size < sizeof (size_t)) - goto resize_freemem; - - res = __gconv (domain->conv, - &inbuf, inbuf + resultlen, - &outbuf, - outbuf + freemem_size - sizeof (size_t), - &non_reversible); - - if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) - break; - - if (res != __GCONV_FULL_OUTPUT) - { - __libc_lock_unlock (lock); - goto converted; - } - - inbuf = result; -# else -# if HAVE_ICONV - const char *inptr = (const char *) inbuf; - size_t inleft = resultlen; - char *outptr = (char *) outbuf; - size_t outleft; - - if (freemem_size < sizeof (size_t)) - goto resize_freemem; - - outleft = freemem_size - sizeof (size_t); - if (iconv (domain->conv, - (ICONV_CONST char **) &inptr, &inleft, - &outptr, &outleft) - != (size_t) (-1)) - { - outbuf = (unsigned char *) outptr; - break; - } - if (errno != E2BIG) - { - __libc_lock_unlock (lock); - goto converted; - } -# endif -# endif - - resize_freemem: - /* We must allocate a new buffer or resize the old one. */ - if (malloc_count > 0) - { - ++malloc_count; - freemem_size = malloc_count * INITIAL_BLOCK_SIZE; - newmem = (transmem_block_t *) realloc (transmem_list, - freemem_size); -# ifdef _LIBC - if (newmem != NULL) - transmem_list = transmem_list->next; - else - { - struct transmem_list *old = transmem_list; - - transmem_list = transmem_list->next; - free (old); - } -# endif - } - else - { - malloc_count = 1; - freemem_size = INITIAL_BLOCK_SIZE; - newmem = (transmem_block_t *) malloc (freemem_size); - } - if (__builtin_expect (newmem == NULL, 0)) - { - freemem = NULL; - freemem_size = 0; - __libc_lock_unlock (lock); - goto converted; - } - -# ifdef _LIBC - /* Add the block to the list of blocks we have to free - at some point. */ - newmem->next = transmem_list; - transmem_list = newmem; - - freemem = newmem->data; - freemem_size -= offsetof (struct transmem_list, data); -# else - transmem_list = newmem; - freemem = newmem; -# endif - - outbuf = freemem + sizeof (size_t); - } - - /* We have now in our buffer a converted string. Put this - into the table of conversions. */ - *(size_t *) freemem = outbuf - freemem - sizeof (size_t); - domain->conv_tab[act] = (char *) freemem; - /* Shrink freemem, but keep it aligned. */ - freemem_size -= outbuf - freemem; - freemem = outbuf; - freemem += freemem_size & (alignof (size_t) - 1); - freemem_size = freemem_size & ~ (alignof (size_t) - 1); - - __libc_lock_unlock (lock); - } - - /* Now domain->conv_tab[act] contains the translation of all - the plural variants. */ - result = domain->conv_tab[act] + sizeof (size_t); - resultlen = *(size_t *) domain->conv_tab[act]; - } - - converted: - /* The result string is converted. */ - -#endif /* _LIBC || HAVE_ICONV */ - - *lengthp = resultlen; - return result; -} - - -/* Look up a plural variant. */ -static char * -internal_function -plural_lookup (domain, n, translation, translation_len) - struct loaded_l10nfile *domain; - unsigned long int n; - const char *translation; - size_t translation_len; -{ - struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; - unsigned long int index; - const char *p; - - index = plural_eval (domaindata->plural, n); - if (index >= domaindata->nplurals) - /* This should never happen. It means the plural expression and the - given maximum value do not match. */ - index = 0; - - /* Skip INDEX strings at TRANSLATION. */ - p = translation; - while (index-- > 0) - { -#ifdef _LIBC - p = __rawmemchr (p, '\0'); -#else - p = strchr (p, '\0'); -#endif - /* And skip over the NUL byte. */ - p++; - - if (p >= translation + translation_len) - /* This should never happen. It means the plural expression - evaluated to a value larger than the number of variants - available for MSGID1. */ - return (char *) translation; - } - return (char *) p; -} - - -/* Function to evaluate the plural expression and return an index value. */ -static unsigned long int -internal_function -plural_eval (pexp, n) - struct expression *pexp; - unsigned long int n; -{ - switch (pexp->nargs) - { - case 0: - switch (pexp->operation) - { - case var: - return n; - case num: - return pexp->val.num; - default: - break; - } - /* NOTREACHED */ - break; - case 1: - { - /* pexp->operation must be lnot. */ - unsigned long int arg = plural_eval (pexp->val.args[0], n); - return ! arg; - } - case 2: - { - unsigned long int leftarg = plural_eval (pexp->val.args[0], n); - if (pexp->operation == lor) - return leftarg || plural_eval (pexp->val.args[1], n); - else if (pexp->operation == land) - return leftarg && plural_eval (pexp->val.args[1], n); - else - { - unsigned long int rightarg = plural_eval (pexp->val.args[1], n); - - switch (pexp->operation) - { - case mult: - return leftarg * rightarg; - case divide: - return leftarg / rightarg; - case module: - return leftarg % rightarg; - case plus: - return leftarg + rightarg; - case minus: - return leftarg - rightarg; - case less_than: - return leftarg < rightarg; - case greater_than: - return leftarg > rightarg; - case less_or_equal: - return leftarg <= rightarg; - case greater_or_equal: - return leftarg >= rightarg; - case equal: - return leftarg == rightarg; - case not_equal: - return leftarg != rightarg; - default: - break; - } - } - /* NOTREACHED */ - break; - } - case 3: - { - /* pexp->operation must be qmop. */ - unsigned long int boolarg = plural_eval (pexp->val.args[0], n); - return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); - } - } - /* NOTREACHED */ - return 0; -} - - -/* 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 *language; - const char *retval; - - /* The highest priority value is the `LANGUAGE' environment - variable. But we don't use the value if the currently selected - locale is the C locale. This is a GNU extension. */ - language = getenv ("LANGUAGE"); - if (language != NULL && language[0] == '\0') - language = NULL; - - /* 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 _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL) - retval = setlocale (category, NULL); -#else - /* Setting of LC_ALL overwrites all other. */ - retval = getenv ("LC_ALL"); - if (retval == NULL || retval[0] == '\0') - { - /* Next comes the name of the desired category. */ - retval = getenv (categoryname); - if (retval == NULL || retval[0] == '\0') - { - /* Last possibility is the LANG environment variable. */ - retval = getenv ("LANG"); - if (retval == NULL || retval[0] == '\0') - /* We use C as the default domain. POSIX says this is - implementation defined. */ - return "C"; - } - } -#endif - - return language != NULL && strcmp (retval, "C") != 0 ? language : 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 - -#if !_LIBC && !HAVE_MEMPCPY -static void * -mempcpy (dest, src, n) - void *dest; - const void *src; - size_t n; -{ - return (void *) ((char *) memcpy (dest, src, n) + n); -} -#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) -{ - void *old; - - while (_nl_domain_bindings != NULL) - { - struct binding *oldp = _nl_domain_bindings; - _nl_domain_bindings = _nl_domain_bindings->next; - if (oldp->dirname != _nl_default_dirname) - /* Yes, this is a pointer comparison. */ - free (oldp->dirname); - free (oldp->codeset); - free (oldp); - } - - if (_nl_current_default_domain != _nl_default_default_domain) - /* Yes, again a pointer comparison. */ - free ((char *) _nl_current_default_domain); - - /* Remove the search tree with the known translations. */ - __tdestroy (root, free); - root = NULL; - - while (transmem_list != NULL) - { - old = transmem_list; - transmem_list = transmem_list->next; - free (old); - } -} - -text_set_element (__libc_subfreeres, free_mem); -#endif diff --git a/intl/dcngettext.c b/intl/dcngettext.c deleted file mode 100644 index e5da25775..000000000 --- a/intl/dcngettext.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Implementation of the dcngettext(3) function. - Copyright (C) 1995-1999, 2000, 2001 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 "gettextP.h" -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.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 DCNGETTEXT __dcngettext -# define DCIGETTEXT __dcigettext -#else -# define DCNGETTEXT dcngettext__ -# define DCIGETTEXT dcigettext__ -#endif - -/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY - locale. */ -char * -DCNGETTEXT (domainname, msgid1, msgid2, n, category) - const char *domainname; - const char *msgid1; - const char *msgid2; - unsigned long int n; - int category; -{ - return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); -} - -#ifdef _LIBC -/* Alias for function name in GNU C Library. */ -weak_alias (__dcngettext, dcngettext); -#endif diff --git a/intl/dgettext.c b/intl/dgettext.c deleted file mode 100644 index c5130411d..000000000 --- a/intl/dgettext.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Implementation of the dgettext(3) function. - Copyright (C) 1995-1997, 2000, 2001 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 <locale.h> - -#include "gettextP.h" -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.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/dngettext.c b/intl/dngettext.c deleted file mode 100644 index 79aaa9ae6..000000000 --- a/intl/dngettext.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Implementation of the dngettext(3) function. - Copyright (C) 1995-1997, 2000, 2001 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 <locale.h> - -#include "gettextP.h" -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.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 DNGETTEXT __dngettext -# define DCNGETTEXT __dcngettext -#else -# define DNGETTEXT dngettext__ -# define DCNGETTEXT dcngettext__ -#endif - -/* Look up MSGID in the DOMAINNAME message catalog of the current - LC_MESSAGES locale and skip message according to the plural form. */ -char * -DNGETTEXT (domainname, msgid1, msgid2, n) - const char *domainname; - const char *msgid1; - const char *msgid2; - unsigned long int n; -{ - return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); -} - -#ifdef _LIBC -/* Alias for function name in GNU C Library. */ -weak_alias (__dngettext, dngettext); -#endif diff --git a/intl/explodename.c b/intl/explodename.c deleted file mode 100644 index c4ddcc41a..000000000 --- a/intl/explodename.c +++ /dev/null @@ -1,191 +0,0 @@ -/* Copyright (C) 1995-1998, 2000, 2001 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 - -#include <stdlib.h> -#include <string.h> -#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 deleted file mode 100644 index 4882554fc..000000000 --- a/intl/finddomain.c +++ /dev/null @@ -1,197 +0,0 @@ -/* Handle list of needed message catalogs - Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. - Written by Ulrich Drepper <drepper@gnu.org>, 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 <stdio.h> -#include <sys/types.h> -#include <stdlib.h> -#include <string.h> - -#if defined HAVE_UNISTD_H || defined _LIBC -# include <unistd.h> -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.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, domainbinding) - const char *dirname; - char *locale; - const char *domainname; - struct binding *domainbinding; -{ - 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, domainbinding); - - 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], domainbinding); - - 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, domainbinding); - 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], domainbinding); - if (retval->successor[cnt]->data != NULL) - break; - } - } - - /* The room for an alias was dynamically allocated. Free it now. */ - if (alias_value != NULL) - free (locale); - - /* The space for normalized_codeset is dynamically allocated. Free it. */ - if (mask & XPG_NORM_CODESET) - free ((void *) normalized_codeset); - - 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 ((char *) here->filename); - free (here); - } -} - -text_set_element (__libc_subfreeres, free_mem); -#endif diff --git a/intl/gettext.c b/intl/gettext.c deleted file mode 100644 index a64020553..000000000 --- a/intl/gettext.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Implementation of gettext(3) function. - Copyright (C) 1995, 1997, 2000, 2001 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 -# include <stdlib.h> /* Just for NULL. */ -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.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 DCGETTEXT __dcgettext -#else -# define GETTEXT gettext__ -# define DCGETTEXT dcgettext__ -#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 DCGETTEXT (NULL, msgid, LC_MESSAGES); -} - -#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 deleted file mode 100644 index eb5889074..000000000 --- a/intl/gettext.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Description of GNU message catalog format: general file layout. - Copyright (C) 1995, 1997, 2000, 2001 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. */ - -#ifndef _GETTEXT_H -#define _GETTEXT_H 1 - -#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 - as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work - when cross-compiling. */ - -#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 deleted file mode 100644 index ee8ca48e9..000000000 --- a/intl/gettextP.h +++ /dev/null @@ -1,251 +0,0 @@ -/* Header describing internals of libintl library. - Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. - Written by Ulrich Drepper <drepper@cygnus.com>, 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 <stddef.h> /* Get size_t. */ - -#ifdef _LIBC -# include "../iconv/gconv_int.h" -#else -# if HAVE_ICONV -# include <iconv.h> -# endif -#endif - -#include "loadinfo.h" - -#include "gettext.h" /* Get nls_uint32. */ - -/* @@ end of prolog @@ */ - -#ifndef PARAMS -# if __STDC__ -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif -#endif - -#ifndef internal_function -# define internal_function -#endif - -/* Tell the compiler when a conditional or integer expression is - almost always true or almost always false. */ -#ifndef HAVE_BUILTIN_EXPECT -# define __builtin_expect(expr, val) (expr) -#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 inline nls_uint32 -SWAP (i) - nls_uint32 i; -{ - return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); -} -#endif - - -/* This is the representation of the expressions to determine the - plural form. */ -struct expression -{ - int nargs; /* Number of arguments. */ - enum operator - { - /* Without arguments: */ - var, /* The variable "n". */ - num, /* Decimal number. */ - /* Unary operators: */ - lnot, /* Logical NOT. */ - /* Binary operators: */ - mult, /* Multiplication. */ - divide, /* Division. */ - module, /* Module operation. */ - plus, /* Addition. */ - minus, /* Subtraction. */ - less_than, /* Comparison. */ - greater_than, /* Comparison. */ - less_or_equal, /* Comparison. */ - greater_or_equal, /* Comparison. */ - equal, /* Comparision for equality. */ - not_equal, /* Comparision for inequality. */ - land, /* Logical AND. */ - lor, /* Logical OR. */ - /* Ternary operators: */ - qmop /* Question mark operator. */ - } operation; - union - { - unsigned long int num; /* Number value for `num'. */ - struct expression *args[3]; /* Up to three arguments. */ - } val; -}; - -/* This is the data structure to pass information to the parser and get - the result in a thread-safe way. */ -struct parse_args -{ - const char *cp; - struct expression *res; -}; - - -/* The representation of an opened message catalog. */ -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; - int codeset_cntr; -#ifdef _LIBC - __gconv_t conv; -#else -# if HAVE_ICONV - iconv_t conv; -# endif -#endif - char **conv_tab; - - struct expression *plural; - unsigned long int nplurals; -}; - -/* We want to allocate a string at the end of the struct. But ISO C - doesn't allow zero sized arrays. */ -#ifdef __GNUC__ -# define ZERO 0 -#else -# define ZERO 1 -#endif - -/* A set of settings bound to a message domain. Used to store settings - from bindtextdomain() and bind_textdomain_codeset(). */ -struct binding -{ - struct binding *next; - char *dirname; - int codeset_cntr; /* Incremented each time codeset changes. */ - char *codeset; - char domainname[ZERO]; -}; - -/* A counter which is incremented each time some previous translations - become invalid. - This variable is part of the external ABI of the GNU libintl. */ -extern int _nl_msg_cat_cntr; - -struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, - char *__locale, - const char *__domainname, - struct binding *__domainbinding)) - internal_function; -void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain, - struct binding *__domainbinding)) - internal_function; -void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) - internal_function; -const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file, - struct loaded_domain *__domain, - struct binding *__domainbinding)) - internal_function; -void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain)) - internal_function; - -char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, - struct binding *domainbinding, - const char *msgid, size_t *lengthp)) - internal_function; - -#ifdef _LIBC -extern char *__gettext PARAMS ((const char *__msgid)); -extern char *__dgettext PARAMS ((const char *__domainname, - const char *__msgid)); -extern char *__dcgettext PARAMS ((const char *__domainname, - const char *__msgid, int __category)); -extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, - unsigned long int __n)); -extern char *__dngettext PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - unsigned long int n)); -extern char *__dcngettext PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - unsigned long int __n, int __category)); -extern char *__dcigettext PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - int __plural, unsigned long int __n, - int __category)); -extern char *__textdomain PARAMS ((const char *__domainname)); -extern char *__bindtextdomain PARAMS ((const char *__domainname, - const char *__dirname)); -extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, - const char *__codeset)); -#else -extern char *gettext__ PARAMS ((const char *__msgid)); -extern char *dgettext__ PARAMS ((const char *__domainname, - const char *__msgid)); -extern char *dcgettext__ PARAMS ((const char *__domainname, - const char *__msgid, int __category)); -extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2, - unsigned long int __n)); -extern char *dngettext__ PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - unsigned long int __n)); -extern char *dcngettext__ PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - unsigned long int __n, int __category)); -extern char *dcigettext__ PARAMS ((const char *__domainname, - const char *__msgid1, const char *__msgid2, - int __plural, unsigned long int __n, - int __category)); -extern char *textdomain__ PARAMS ((const char *__domainname)); -extern char *bindtextdomain__ PARAMS ((const char *__domainname, - const char *__dirname)); -extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname, - const char *__codeset)); -#endif - -#ifdef _LIBC -extern void __gettext_free_exp PARAMS ((struct expression *exp)) - internal_function; -extern int __gettextparse PARAMS ((void *arg)); -#else -extern void gettext_free_exp__ PARAMS ((struct expression *exp)) - internal_function; -extern int gettextparse__ PARAMS ((void *arg)); -#endif - -/* @@ begin of epilog @@ */ - -#endif /* gettextP.h */ diff --git a/intl/hash-string.h b/intl/hash-string.h deleted file mode 100644 index 37d4ce1a2..000000000 --- a/intl/hash-string.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Description of GNU message catalog format: string hashing function. - Copyright (C) 1995, 1997, 1998, 2000, 2001 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. */ - -/* @@ 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 deleted file mode 100644 index b8edaa17a..000000000 --- a/intl/intl-compat.c +++ /dev/null @@ -1,165 +0,0 @@ -/* intl-compat.c - Stub functions to call gettext functions from GNU gettext - Library. - Copyright (C) 1995, 2000, 2001 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 "libgnuintl.h" -#include "gettextP.h" - -/* @@ end of prolog @@ */ - -/* This file redirects the gettext functions (without prefix or suffix) to - those defined in the included GNU gettext library (with "__" suffix). - It is compiled into libintl when the included GNU gettext library is - configured --with-included-gettext. - - This redirection works also in the case that the system C library or - the system libintl library contain gettext/textdomain/... functions. - If it didn't, we would need to add preprocessor level redirections to - libgnuintl.h of the following form: - -# define gettext gettext__ -# define dgettext dgettext__ -# define dcgettext dcgettext__ -# define ngettext ngettext__ -# define dngettext dngettext__ -# define dcngettext dcngettext__ -# define textdomain textdomain__ -# define bindtextdomain bindtextdomain__ -# define bind_textdomain_codeset bind_textdomain_codeset__ - - How does this redirection work? There are two cases. - A. When libintl.a is linked into an executable, it works because - functions defined in the executable always override functions in - the shared libraries. - B. When libintl.so is used, it works because - 1. those systems defining gettext/textdomain/... in the C library - (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are - ELF systems and define these symbols as weak, thus explicitly - letting other shared libraries override it. - 2. those systems defining gettext/textdomain/... in a standalone - libintl.so library (namely, Solaris 2.3 and newer) have this - shared library in /usr/lib, and the linker will search /usr/lib - *after* the directory where the GNU gettext library is installed. - - A third case, namely when libintl.a is linked into a shared library - whose name is not libintl.so, is not supported. In this case, on - Solaris, when -lintl precedes the linker option for the shared library - containing GNU gettext, the system's gettext would indeed override - the GNU gettext. Anyone doing this kind of stuff must be clever enough - to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker - command line. */ - - -#undef gettext -#undef dgettext -#undef dcgettext -#undef ngettext -#undef dngettext -#undef dcngettext -#undef textdomain -#undef bindtextdomain -#undef bind_textdomain_codeset - - -char * -gettext (msgid) - const char *msgid; -{ - return gettext__ (msgid); -} - - -char * -dgettext (domainname, msgid) - const char *domainname; - const char *msgid; -{ - return dgettext__ (domainname, msgid); -} - - -char * -dcgettext (domainname, msgid, category) - const char *domainname; - const char *msgid; - int category; -{ - return dcgettext__ (domainname, msgid, category); -} - - -char * -ngettext (msgid1, msgid2, n) - const char *msgid1; - const char *msgid2; - unsigned long int n; -{ - return ngettext__ (msgid1, msgid2, n); -} - - -char * -dngettext (domainname, msgid1, msgid2, n) - const char *domainname; - const char *msgid1; - const char *msgid2; - unsigned long int n; -{ - return dngettext__ (domainname, msgid1, msgid2, n); -} - - -char * -dcngettext (domainname, msgid1, msgid2, n, category) - const char *domainname; - const char *msgid1; - const char *msgid2; - unsigned long int n; - int category; -{ - return dcngettext__ (domainname, msgid1, msgid2, n, category); -} - - -char * -textdomain (domainname) - const char *domainname; -{ - return textdomain__ (domainname); -} - - -char * -bindtextdomain (domainname, dirname) - const char *domainname; - const char *dirname; -{ - return bindtextdomain__ (domainname, dirname); -} - - -char * -bind_textdomain_codeset (domainname, codeset) - const char *domainname; - const char *codeset; -{ - return bind_textdomain_codeset__ (domainname, codeset); -} diff --git a/intl/l10nflist.c b/intl/l10nflist.c deleted file mode 100644 index 557253eb9..000000000 --- a/intl/l10nflist.c +++ /dev/null @@ -1,404 +0,0 @@ -/* Copyright (C) 1995-1999, 2000, 2001 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. */ - -/* Tell glibc's <string.h> to provide a prototype for stpcpy(). - This must come before <config.h> because <config.h> may include - <features.h>, and once <features.h> has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <string.h> -#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> -#include <stdlib.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 @@ */ - -#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, PATH_SEPARATOR); - 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. The return value is dynamically allocated and has to be - freed by the caller. */ -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 deleted file mode 100644 index 553382ca0..000000000 --- a/intl/libgettext.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Convenience header for conditional use of GNU <libintl.h>. - Copyright (C) 1995-1998, 2000, 2001 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. */ - -#ifndef _LIBGETTEXT_H -#define _LIBGETTEXT_H 1 - -/* NLS can be disabled through the configure --disable-nls option. */ -#if ENABLE_NLS - -/* Get declarations of GNU message catalog functions. */ -# include <libintl.h> - -#else - -# define gettext(Msgid) (Msgid) -# define dgettext(Domainname, Msgid) (Msgid) -# define dcgettext(Domainname, Msgid, Category) (Msgid) -# define ngettext(Msgid1, Msgid2, N) \ - ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) -# define dngettext(Domainname, Msgid1, Msgid2, N) \ - ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) -# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ - ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) -# define textdomain(Domainname) ((char *) (Domainname)) -# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname)) -# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset)) - -#endif - -/* For automatical extraction of messages sometimes no real - translation is needed. Instead the string itself is the result. */ -#define gettext_noop(Str) (Str) - -#endif /* _LIBGETTEXT_H */ diff --git a/intl/libgnuintl.h b/intl/libgnuintl.h deleted file mode 100644 index 577001a45..000000000 --- a/intl/libgnuintl.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Message catalogs for internationalization. - Copyright (C) 1995-1997, 2000, 2001 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. */ - -#ifndef _LIBINTL_H -#define _LIBINTL_H 1 - -#include <locale.h> - -/* The LC_MESSAGES locale category is the category used by the functions - gettext() and dgettext(). It is specified in POSIX, but not in ANSI C. - On systems that don't define it, use an arbitrary value instead. - On Solaris, <locale.h> defines __LOCALE_H then includes <libintl.h> (i.e. - this file!) and then only defines LC_MESSAGES. To avoid a redefinition - warning, don't define LC_MESSAGES in this case. */ -#if !defined LC_MESSAGES && !defined __LOCALE_H -# define LC_MESSAGES 1729 -#endif - -/* We define an additional symbol to signal that we use the GNU - implementation of gettext. */ -#define __USE_GNU_GETTEXT 1 - -/* Resolve a platform specific conflict on DJGPP. GNU gettext takes - precedence over _conio_gettext. */ -#ifdef __DJGPP__ -# undef gettext -# define gettext gettext -#endif - -#ifndef PARAMS -# if __STDC__ || defined __cplusplus -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif -#endif - -#ifdef __cplusplus -extern "C" { -#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). */ -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)); - -/* 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)); - - -/* Similar to `gettext' but select the plural form corresponding to the - number N. */ -extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2, - unsigned long int __n)); - -/* Similar to `dgettext' but select the plural form corresponding to the - number N. */ -extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1, - const char *__msgid2, unsigned long int __n)); - -/* Similar to `dcgettext' but select the plural form corresponding to the - number N. */ -extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1, - const char *__msgid2, unsigned long int __n, - 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)); - -/* 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)); - -/* Specify the character encoding in which the messages from the - DOMAINNAME message catalog will be returned. */ -extern char *bind_textdomain_codeset PARAMS ((const char *__domainname, - const char *__codeset)); - - -/* Optimized version of the functions above. */ -#if defined __OPTIMIZED -/* These are macros, but could also be inline functions. */ - -# define gettext(msgid) \ - dgettext (NULL, msgid) - -# define dgettext(domainname, msgid) \ - dcgettext (domainname, msgid, LC_MESSAGES) - -# define ngettext(msgid1, msgid2, n) \ - dngettext (NULL, msgid1, msgid2, n) - -# define dngettext(domainname, msgid1, msgid2, n) \ - dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES) - -#endif /* Optimizing. */ - - -#ifdef __cplusplus -} -#endif - -#endif /* libintl.h */ diff --git a/intl/loadinfo.h b/intl/loadinfo.h deleted file mode 100644 index 5171a8f63..000000000 --- a/intl/loadinfo.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright (C) 1996-1999, 2000, 2001 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 _LOADINFO_H -#define _LOADINFO_H 1 - -#ifndef PARAMS -# if __STDC__ -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif -#endif - -#ifndef internal_function -# define internal_function -#endif - -/* Tell the compiler when a conditional or integer expression is - almost always true or almost always false. */ -#ifndef HAVE_BUILTIN_EXPECT -# define __builtin_expect(expr, val) (expr) -#endif - -/* Separator in PATH like lists of pathnames. */ -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ - /* Win32, OS/2, DOS */ -# define PATH_SEPARATOR ';' -#else - /* Unix */ -# define PATH_SEPARATOR ':' -#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]; -}; - - -/* Normalize codeset name. There is no standard for the codeset - names. Normalization allows the user to use any of the common - names. The return value is dynamically allocated and has to be - freed by the caller. */ -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)); - -/* normalized_codeset is dynamically allocated and has to be freed by - the caller. */ -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)); - -#endif /* loadinfo.h */ diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c deleted file mode 100644 index d589243b2..000000000 --- a/intl/loadmsgcat.c +++ /dev/null @@ -1,566 +0,0 @@ -/* Load needed message catalogs. - Copyright (C) 1995-1999, 2000, 2001 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. */ - -/* Tell glibc's <string.h> to provide a prototype for mempcpy(). - This must come before <config.h> because <config.h> may include - <features.h>, and once <features.h> has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#include <sys/types.h> -#include <sys/stat.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 - -#include <stdlib.h> -#include <string.h> - -#if defined HAVE_UNISTD_H || defined _LIBC -# include <unistd.h> -#endif - -#ifdef _LIBC -# include <langinfo.h> -# include <locale.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" - -#ifdef _LIBC -# include "../locale/localeinfo.h" -#endif - -/* @@ 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 - -/* 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 PLURAL_PARSE __gettextparse -#else -# define PLURAL_PARSE gettextparse__ -#endif - -/* For those losing systems which don't have `alloca' we have to add - some additional code emulating it. */ -#ifdef HAVE_ALLOCA -# define freea(p) /* nothing */ -#else -# define alloca(n) malloc (n) -# define freea(p) free (p) -#endif - -/* For systems that distinguish between text and binary I/O. - O_BINARY is usually declared in <fcntl.h>. */ -#if !defined O_BINARY && defined _O_BINARY - /* For MSC-compatible compilers. */ -# define O_BINARY _O_BINARY -# define O_TEXT _O_TEXT -#endif -#ifdef __BEOS__ - /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */ -# undef O_BINARY -# undef O_TEXT -#endif -/* On reasonable systems, binary I/O is the default. */ -#ifndef O_BINARY -# define O_BINARY 0 -#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; - -#if (defined __GNUC__ && !defined __APPLE_CC__) \ - || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) - -/* These structs are the constant expression for the germanic plural - form determination. It represents the expression "n != 1". */ -static const struct expression plvar = -{ - .nargs = 0, - .operation = var, -}; -static const struct expression plone = -{ - .nargs = 0, - .operation = num, - .val = - { - .num = 1 - } -}; -static struct expression germanic_plural = -{ - .nargs = 2, - .operation = not_equal, - .val = - { - .args = - { - [0] = (struct expression *) &plvar, - [1] = (struct expression *) &plone - } - } -}; - -# define INIT_GERMANIC_PLURAL() - -#else - -/* For compilers without support for ISO C 99 struct/union initializers: - Initialization at run-time. */ - -static struct expression plvar; -static struct expression plone; -static struct expression germanic_plural; - -static void -init_germanic_plural () -{ - if (plone.val.num == 0) - { - plvar.nargs = 0; - plvar.operation = var; - - plone.nargs = 0; - plone.operation = num; - plone.val.num = 1; - - germanic_plural.nargs = 2; - germanic_plural.operation = not_equal; - germanic_plural.val.args[0] = &plvar; - germanic_plural.val.args[1] = &plone; - } -} - -# define INIT_GERMANIC_PLURAL() init_germanic_plural () - -#endif - - -/* Initialize the codeset dependent parts of an opened message catalog. - Return the header entry. */ -const char * -internal_function -_nl_init_domain_conv (domain_file, domain, domainbinding) - struct loaded_l10nfile *domain_file; - struct loaded_domain *domain; - struct binding *domainbinding; -{ - /* Find out about the character set the file is encoded with. - This can be found (in textual form) in the entry "". If this - entry does not exist or if this does not contain the `charset=' - information, we will assume the charset matches the one the - current locale and we don't have to perform any conversion. */ - char *nullentry; - size_t nullentrylen; - - /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ - domain->codeset_cntr = - (domainbinding != NULL ? domainbinding->codeset_cntr : 0); -#ifdef _LIBC - domain->conv = (__gconv_t) -1; -#else -# if HAVE_ICONV - domain->conv = (iconv_t) -1; -# endif -#endif - domain->conv_tab = NULL; - - /* Get the header entry. */ - nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); - - if (nullentry != NULL) - { -#if defined _LIBC || HAVE_ICONV - const char *charsetstr; - - charsetstr = strstr (nullentry, "charset="); - if (charsetstr != NULL) - { - size_t len; - char *charset; - const char *outcharset; - - charsetstr += strlen ("charset="); - len = strcspn (charsetstr, " \t\n"); - - charset = (char *) alloca (len + 1); -# if defined _LIBC || HAVE_MEMPCPY - *((char *) mempcpy (charset, charsetstr, len)) = '\0'; -# else - memcpy (charset, charsetstr, len); - charset[len] = '\0'; -# endif - - /* The output charset should normally be determined by the - locale. But sometimes the locale is not used or not correctly - set up, so we provide a possibility for the user to override - this. Moreover, the value specified through - bind_textdomain_codeset overrides both. */ - if (domainbinding != NULL && domainbinding->codeset != NULL) - outcharset = domainbinding->codeset; - else - { - outcharset = getenv ("OUTPUT_CHARSET"); - if (outcharset == NULL || outcharset[0] == '\0') - { -# ifdef _LIBC - outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; -# else -# if HAVE_ICONV - extern const char *locale_charset (void); - outcharset = locale_charset (); -# endif -# endif - } - } - -# ifdef _LIBC - /* We always want to use transliteration. */ - outcharset = norm_add_slashes (outcharset, "TRANSLIT"); - charset = norm_add_slashes (charset, NULL); - if (__gconv_open (outcharset, charset, &domain->conv, - GCONV_AVOID_NOCONV) - != __GCONV_OK) - domain->conv = (__gconv_t) -1; -# else -# if HAVE_ICONV - /* When using GNU libiconv, we want to use transliteration. */ -# if _LIBICONV_VERSION >= 0x0105 - len = strlen (outcharset); - { - char *tmp = (char *) alloca (len + 10 + 1); - memcpy (tmp, outcharset, len); - memcpy (tmp + len, "//TRANSLIT", 10 + 1); - outcharset = tmp; - } -# endif - domain->conv = iconv_open (outcharset, charset); -# if _LIBICONV_VERSION >= 0x0105 - freea (outcharset); -# endif -# endif -# endif - - freea (charset); - } -#endif /* _LIBC || HAVE_ICONV */ - } - - return nullentry; -} - -/* Frees the codeset dependent parts of an opened message catalog. */ -void -internal_function -_nl_free_domain_conv (domain) - struct loaded_domain *domain; -{ - if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) - free (domain->conv_tab); - -#ifdef _LIBC - if (domain->conv != (__gconv_t) -1) - __gconv_close (domain->conv); -#else -# if HAVE_ICONV - if (domain->conv != (iconv_t) -1) - iconv_close (domain->conv); -# endif -#endif -} - -/* Load the message catalogs specified by FILENAME. If it is no valid - message catalog do nothing. */ -void -internal_function -_nl_load_domain (domain_file, domainbinding) - struct loaded_l10nfile *domain_file; - struct binding *domainbinding; -{ - int fd; - size_t size; -#ifdef _LIBC - struct stat64 st; -#else - struct stat st; -#endif - struct mo_file_header *data = (struct mo_file_header *) -1; - int use_mmap = 0; - struct loaded_domain *domain; - const char *nullentry; - - domain_file->decided = 1; - domain_file->data = NULL; - - /* Note that it would be useless to store domainbinding in domain_file - because domainbinding might be == NULL now but != NULL later (after - a call to bind_textdomain_codeset). */ - - /* 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 | O_BINARY); - if (fd == -1) - return; - - /* We must know about the size of the file. */ - if ( -#ifdef _LIBC - __builtin_expect (fstat64 (fd, &st) != 0, 0) -#else - __builtin_expect (fstat (fd, &st) != 0, 0) -#endif - || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) - || __builtin_expect (size < sizeof (struct mo_file_header), 0)) - { - /* 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 (__builtin_expect (data != (struct mo_file_header *) -1, 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 <= 0) - { -#ifdef EINTR - if (nb == -1 && errno == EINTR) - continue; -#endif - 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 (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED, - 0)) - { - /* 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 = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); - if (domain == NULL) - return; - domain_file->data = domain; - - 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; - } - - /* Now initialize the character set converter from the character set - the file is encoded with (found in the header entry) to the domain's - specified character set or the locale's character set. */ - nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); - - /* Also look for a plural specification. */ - if (nullentry != NULL) - { - const char *plural; - const char *nplurals; - - plural = strstr (nullentry, "plural="); - nplurals = strstr (nullentry, "nplurals="); - if (plural == NULL || nplurals == NULL) - goto no_plural; - else - { - /* First get the number. */ - char *endp; - unsigned long int n; - struct parse_args args; - - nplurals += 9; - while (*nplurals != '\0' && isspace (*nplurals)) - ++nplurals; -#if defined HAVE_STRTOUL || defined _LIBC - n = strtoul (nplurals, &endp, 10); -#else - for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) - n = n * 10 + (*endp - '0'); -#endif - domain->nplurals = n; - if (nplurals == endp) - goto no_plural; - - /* Due to the restrictions bison imposes onto the interface of the - scanner function we have to put the input string and the result - passed up from the parser into the same structure which address - is passed down to the parser. */ - plural += 7; - args.cp = plural; - if (PLURAL_PARSE (&args) != 0) - goto no_plural; - domain->plural = args.res; - } - } - else - { - /* By default we are using the Germanic form: singular form only - for `one', the plural form otherwise. Yes, this is also what - English is using since English is a Germanic language. */ - no_plural: - INIT_GERMANIC_PLURAL (); - domain->plural = &germanic_plural; - domain->nplurals = 2; - } -} - - -#ifdef _LIBC -void -internal_function -_nl_unload_domain (domain) - struct loaded_domain *domain; -{ - if (domain->plural != &germanic_plural) - __gettext_free_exp (domain->plural); - - _nl_free_domain_conv (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/localcharset.c b/intl/localcharset.c deleted file mode 100644 index 22e09e410..000000000 --- a/intl/localcharset.c +++ /dev/null @@ -1,271 +0,0 @@ -/* Determine a canonical name for the current locale's character encoding. - - Copyright (C) 2000-2001 Free Software Foundation, Inc. - - This program 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, 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library 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. */ - -/* Written by Bruno Haible <haible@clisp.cons.org>. */ - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#if HAVE_STDDEF_H -# include <stddef.h> -#endif - -#include <stdio.h> -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#endif - -#if defined _WIN32 || defined __WIN32__ -# undef WIN32 /* avoid warning on mingw32 */ -# define WIN32 -#endif - -#ifndef WIN32 -# if HAVE_LANGINFO_CODESET -# include <langinfo.h> -# else -# if HAVE_SETLOCALE -# include <locale.h> -# endif -# endif -#else /* WIN32 */ -# define WIN32_LEAN_AND_MEAN -# include <windows.h> -#endif - -#ifndef DIRECTORY_SEPARATOR -# define DIRECTORY_SEPARATOR '/' -#endif - -#ifndef ISSLASH -# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) -#endif - -/* The following static variable is declared 'volatile' to avoid a - possible multithread problem in the function get_charset_aliases. If we - are running in a threaded environment, and if two threads initialize - 'charset_aliases' simultaneously, both will produce the same value, - and everything will be ok if the two assignments to 'charset_aliases' - are atomic. But I don't know what will happen if the two assignments mix. */ -#if __STDC__ != 1 -# define volatile /* empty */ -#endif -/* Pointer to the contents of the charset.alias file, if it has already been - read, else NULL. Its format is: - ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ -static char * volatile charset_aliases; - -/* Return a pointer to the contents of the charset.alias file. */ -static const char * -get_charset_aliases () -{ - char *cp; - - cp = charset_aliases; - if (cp == NULL) - { -#ifndef WIN32 - FILE *fp; - const char *dir = LIBDIR; - const char *base = "charset.alias"; - char *file_name; - - /* Concatenate dir and base into freshly allocated file_name. */ - { - size_t dir_len = strlen (dir); - size_t base_len = strlen (base); - int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); - file_name = (char *) malloc (dir_len + add_slash + base_len + 1); - if (file_name != NULL) - { - memcpy (file_name, dir, dir_len); - if (add_slash) - file_name[dir_len] = DIRECTORY_SEPARATOR; - memcpy (file_name + dir_len + add_slash, base, base_len + 1); - } - } - - if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) - /* Out of memory or file not found, treat it as empty. */ - cp = ""; - else - { - /* Parse the file's contents. */ - int c; - char buf1[50+1]; - char buf2[50+1]; - char *res_ptr = NULL; - size_t res_size = 0; - size_t l1, l2; - - for (;;) - { - c = getc (fp); - if (c == EOF) - break; - if (c == '\n' || c == ' ' || c == '\t') - continue; - if (c == '#') - { - /* Skip comment, to end of line. */ - do - c = getc (fp); - while (!(c == EOF || c == '\n')); - if (c == EOF) - break; - continue; - } - ungetc (c, fp); - if (fscanf(fp, "%50s %50s", buf1, buf2) < 2) - break; - l1 = strlen (buf1); - l2 = strlen (buf2); - if (res_size == 0) - { - res_size = l1 + 1 + l2 + 1; - res_ptr = malloc (res_size + 1); - } - else - { - res_size += l1 + 1 + l2 + 1; - res_ptr = realloc (res_ptr, res_size + 1); - } - if (res_ptr == NULL) - { - /* Out of memory. */ - res_size = 0; - break; - } - strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); - strcpy (res_ptr + res_size - (l2 + 1), buf2); - } - fclose (fp); - if (res_size == 0) - cp = ""; - else - { - *(res_ptr + res_size) = '\0'; - cp = res_ptr; - } - } - - if (file_name != NULL) - free (file_name); - -#else /* WIN32 */ - - /* To avoid the troubles of installing a separate file in the same - directory as the DLL and of retrieving the DLL's directory at - runtime, simply inline the aliases here. */ - - cp = "CP936" "\0" "GBK" "\0" - "CP1361" "\0" "JOHAB" "\0"; -#endif - - charset_aliases = cp; - } - - return cp; -} - -/* Determine the current locale's character encoding, and canonicalize it - into one of the canonical names listed in config.charset. - The result must not be freed; it is statically allocated. - If the canonical name cannot be determined, the result is a non-canonical - name. */ - -#ifdef STATIC -STATIC -#endif -const char * -locale_charset () -{ - const char *codeset; - const char *aliases; - -#ifndef WIN32 - -# if HAVE_LANGINFO_CODESET - - /* Most systems support nl_langinfo (CODESET) nowadays. */ - codeset = nl_langinfo (CODESET); - -# else - - /* On old systems which lack it, use setlocale or getenv. */ - const char *locale = NULL; - - /* But most old systems don't have a complete set of locales. Some - (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't - use setlocale here; it would return "C" when it doesn't support the - locale name the user has set. */ -# if HAVE_SETLOCALE && 0 - locale = setlocale (LC_CTYPE, NULL); -# endif - if (locale == NULL || locale[0] == '\0') - { - locale = getenv ("LC_ALL"); - if (locale == NULL || locale[0] == '\0') - { - locale = getenv ("LC_CTYPE"); - if (locale == NULL || locale[0] == '\0') - locale = getenv ("LANG"); - } - } - - /* On some old systems, one used to set locale = "iso8859_1". On others, - you set it to "language_COUNTRY.charset". In any case, we resolve it - through the charset.alias file. */ - codeset = locale; - -# endif - -#else /* WIN32 */ - - static char buf[2 + 10 + 1]; - - /* Win32 has a function returning the locale's codepage as a number. */ - sprintf (buf, "CP%u", GetACP ()); - codeset = buf; - -#endif - - if (codeset == NULL) - /* The canonical name cannot be determined. */ - codeset = ""; - - /* Resolve alias. */ - for (aliases = get_charset_aliases (); - *aliases != '\0'; - aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) - if (strcmp (codeset, aliases) == 0 - || (aliases[0] == '*' && aliases[1] == '\0')) - { - codeset = aliases + strlen (aliases) + 1; - break; - } - - return codeset; -} diff --git a/intl/locale.alias b/intl/locale.alias deleted file mode 100644 index 48940f745..000000000 --- a/intl/locale.alias +++ /dev/null @@ -1,77 +0,0 @@ -# Locale name alias data base. -# Copyright (C) 1996,1997,1998,1999,2000,2001 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. - -# The format of this file is the same as for the corresponding file of -# the X Window System, which normally can be found in -# /usr/lib/X11/locale/locale.alias -# A single line contains two fields: an alias and a substitution value. -# All entries are case independent. - -# Note: This file is far from being complete. If you have a value for -# your own site which you think might be useful for others too, share -# it with the rest of us. Send it using the `glibcbug' script to -# bugs@gnu.org. - -# Packages using this file: - -bokmal no_NO.ISO-8859-1 -bokmål no_NO.ISO-8859-1 -catalan ca_ES.ISO-8859-1 -croatian hr_HR.ISO-8859-2 -czech cs_CZ.ISO-8859-2 -danish da_DK.ISO-8859-1 -dansk da_DK.ISO-8859-1 -deutsch de_DE.ISO-8859-1 -dutch nl_NL.ISO-8859-1 -eesti et_EE.ISO-8859-1 -estonian et_EE.ISO-8859-1 -finnish fi_FI.ISO-8859-1 -français fr_FR.ISO-8859-1 -french fr_FR.ISO-8859-1 -galego gl_ES.ISO-8859-1 -galician gl_ES.ISO-8859-1 -german de_DE.ISO-8859-1 -greek el_GR.ISO-8859-7 -hebrew iw_IL.ISO-8859-8 -hrvatski hr_HR.ISO-8859-2 -hungarian hu_HU.ISO-8859-2 -icelandic is_IS.ISO-8859-1 -italian it_IT.ISO-8859-1 -japanese ja_JP.eucJP -japanese.euc ja_JP.eucJP -ja_JP ja_JP.eucJP -ja_JP.ujis ja_JP.eucJP -japanese.sjis ja_JP.SJIS -korean ko_KR.eucKR -korean.euc ko_KR.eucKR -ko_KR ko_KR.eucKR -lithuanian lt_LT.ISO-8859-13 -nb_NO no_NO.ISO-8859-1 -nb_NO.ISO-8859-1 no_NO.ISO-8859-1 -norwegian no_NO.ISO-8859-1 -nynorsk nn_NO.ISO-8859-1 -polish pl_PL.ISO-8859-2 -portuguese pt_PT.ISO-8859-1 -romanian ro_RO.ISO-8859-2 -russian ru_RU.ISO-8859-5 -slovak sk_SK.ISO-8859-2 -slovene sl_SI.ISO-8859-2 -slovenian sl_SI.ISO-8859-2 -spanish es_ES.ISO-8859-1 -swedish sv_SE.ISO-8859-1 -thai th_TH.TIS-620 -turkish tr_TR.ISO-8859-9 diff --git a/intl/localealias.c b/intl/localealias.c deleted file mode 100644 index 76f19a9aa..000000000 --- a/intl/localealias.c +++ /dev/null @@ -1,403 +0,0 @@ -/* Handle aliases for locale names. - Copyright (C) 1995-1999, 2000, 2001 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. */ - -/* Tell glibc's <string.h> to provide a prototype for mempcpy(). - This must come before <config.h> because <config.h> may include - <features.h>, and once <features.h> has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#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 - -#include <stdlib.h> - -#include <string.h> -#if !HAVE_STRCHR && !defined _LIBC -# ifndef strchr -# define strchr index -# endif -#endif - -#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 losing systems which don't have `alloca' we have to add - some additional code emulating it. */ -#ifdef HAVE_ALLOCA -# define freea(p) /* nothing */ -#else -# define alloca(n) malloc (n) -# define freea(p) free (p) -#endif - -#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; -static size_t string_space_act; -static size_t string_space_max; -static struct alias_map *map; -static size_t nmap; -static size_t maxmap; - - -/* Prototypes for local functions. */ -static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) - internal_function; -static int 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] == PATH_SEPARATOR) - ++locale_alias_path; - start = locale_alias_path; - - while (locale_alias_path[0] != '\0' - && locale_alias_path[0] != PATH_SEPARATOR) - ++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; -{ - FILE *fp; - char *full_fname; - size_t added; - static const char aliasfile[] = "/locale.alias"; - - full_fname = (char *) alloca (fname_len + sizeof aliasfile); -#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"); - freea (full_fname); - if (fp == NULL) - 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) - if (__builtin_expect (extend_alias_table (), 0)) - return added; - - 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) - return added; - - if (__builtin_expect (string_space != new_pool, 0)) - { - size_t i; - - for (i = 0; i < nmap; i++) - { - map[i].alias += new_pool - string_space; - map[i].value += new_pool - string_space; - } - } - - 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); - - return added; -} - - -static int -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 -1; - - map = new_map; - maxmap = new_size; - return 0; -} - - -#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/ngettext.c b/intl/ngettext.c deleted file mode 100644 index 8b1fa02f8..000000000 --- a/intl/ngettext.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Implementation of ngettext(3) function. - Copyright (C) 1995, 1997, 2000, 2001 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 -# include <stdlib.h> /* Just for NULL. */ -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.h" -#endif - -#include <locale.h> - -/* @@ 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 NGETTEXT __ngettext -# define DCNGETTEXT __dcngettext -#else -# define NGETTEXT ngettext__ -# define DCNGETTEXT dcngettext__ -#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 * -NGETTEXT (msgid1, msgid2, n) - const char *msgid1; - const char *msgid2; - unsigned long int n; -{ - return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); -} - -#ifdef _LIBC -/* Alias for function name in GNU C Library. */ -weak_alias (__ngettext, ngettext); -#endif diff --git a/intl/plural.c b/intl/plural.c deleted file mode 100644 index 81913356c..000000000 --- a/intl/plural.c +++ /dev/null @@ -1,1325 +0,0 @@ - -/* A Bison parser, made from plural.y - by GNU Bison version 1.28 */ - -#define YYBISON 1 /* Identify Bison output. */ - -#define yyparse __gettextparse -#define yylex __gettextlex -#define yyerror __gettexterror -#define yylval __gettextlval -#define yychar __gettextchar -#define yydebug __gettextdebug -#define yynerrs __gettextnerrs -#define EQUOP2 257 -#define CMPOP2 258 -#define ADDOP2 259 -#define MULOP2 260 -#define NUMBER 261 - -#line 1 "plural.y" - -/* Expression parsing for plural form selection. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. - Written by Ulrich Drepper <drepper@cygnus.com>, 2000. - - 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 bison generated parser uses alloca. AIX 3 forces us to put this - declaration at the beginning of the file. The declaration in bison's - skeleton file comes too late. This must come before <config.h> - because <config.h> may include arbitrary system headers. */ -#if defined _AIX && !defined __GNUC__ - #pragma alloca -#endif - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <stdlib.h> -#include "gettextP.h" - -/* 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 FREE_EXPRESSION __gettext_free_exp -#else -# define FREE_EXPRESSION gettext_free_exp__ -# define __gettextparse gettextparse__ -#endif - -#define YYLEX_PARAM &((struct parse_args *) arg)->cp -#define YYPARSE_PARAM arg - -#line 52 "plural.y" -typedef union { - unsigned long int num; - enum operator op; - struct expression *exp; -} YYSTYPE; -#line 58 "plural.y" - -/* Prototypes for local functions. */ -static struct expression *new_exp PARAMS ((int nargs, enum operator op, - struct expression * const *args)); -static inline struct expression *new_exp_0 PARAMS ((enum operator op)); -static inline struct expression *new_exp_1 PARAMS ((enum operator op, - struct expression *right)); -static struct expression *new_exp_2 PARAMS ((enum operator op, - struct expression *left, - struct expression *right)); -static inline struct expression *new_exp_3 PARAMS ((enum operator op, - struct expression *bexp, - struct expression *tbranch, - struct expression *fbranch)); -static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); -static void yyerror PARAMS ((const char *str)); - -/* Allocation of expressions. */ - -static struct expression * -new_exp (nargs, op, args) - int nargs; - enum operator op; - struct expression * const *args; -{ - int i; - struct expression *newp; - - /* If any of the argument could not be malloc'ed, just return NULL. */ - for (i = nargs - 1; i >= 0; i--) - if (args[i] == NULL) - goto fail; - - /* Allocate a new expression. */ - newp = (struct expression *) malloc (sizeof (*newp)); - if (newp != NULL) - { - newp->nargs = nargs; - newp->operation = op; - for (i = nargs - 1; i >= 0; i--) - newp->val.args[i] = args[i]; - return newp; - } - - fail: - for (i = nargs - 1; i >= 0; i--) - FREE_EXPRESSION (args[i]); - - return NULL; -} - -static inline struct expression * -new_exp_0 (op) - enum operator op; -{ - return new_exp (0, op, NULL); -} - -static inline struct expression * -new_exp_1 (op, right) - enum operator op; - struct expression *right; -{ - struct expression *args[1]; - - args[0] = right; - return new_exp (1, op, args); -} - -static struct expression * -new_exp_2 (op, left, right) - enum operator op; - struct expression *left; - struct expression *right; -{ - struct expression *args[2]; - - args[0] = left; - args[1] = right; - return new_exp (2, op, args); -} - -static inline struct expression * -new_exp_3 (op, bexp, tbranch, fbranch) - enum operator op; - struct expression *bexp; - struct expression *tbranch; - struct expression *fbranch; -{ - struct expression *args[3]; - - args[0] = bexp; - args[1] = tbranch; - args[2] = fbranch; - return new_exp (3, op, args); -} - -#include <stdio.h> - -#ifndef __cplusplus -#ifndef __STDC__ -#define const -#endif -#endif - - - -#define YYFINAL 27 -#define YYFLAG -32768 -#define YYNTBASE 16 - -#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) - -static const char yytranslate[] = { 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, - 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, - 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 6, 7, 8, 9, - 11 -}; - -#if YYDEBUG != 0 -static const short yyprhs[] = { 0, - 0, 2, 8, 12, 16, 20, 24, 28, 32, 35, - 37, 39 -}; - -static const short yyrhs[] = { 17, - 0, 17, 3, 17, 12, 17, 0, 17, 4, 17, - 0, 17, 5, 17, 0, 17, 6, 17, 0, 17, - 7, 17, 0, 17, 8, 17, 0, 17, 9, 17, - 0, 10, 17, 0, 13, 0, 11, 0, 14, 17, - 15, 0 -}; - -#endif - -#if YYDEBUG != 0 -static const short yyrline[] = { 0, - 177, 185, 189, 193, 197, 201, 205, 209, 213, 217, - 221, 226 -}; -#endif - - -#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) - -static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'", -"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'", -"start","exp", NULL -}; -#endif - -static const short yyr1[] = { 0, - 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17 -}; - -static const short yyr2[] = { 0, - 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, - 1, 3 -}; - -static const short yydefact[] = { 0, - 0, 11, 10, 0, 1, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 12, 0, 3, 4, 5, 6, - 7, 8, 0, 2, 0, 0, 0 -}; - -static const short yydefgoto[] = { 25, - 5 -}; - -static const short yypact[] = { -9, - -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9, - -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26, - -3,-32768, -9, 34, 21, 53,-32768 -}; - -static const short yypgoto[] = {-32768, - -1 -}; - - -#define YYLAST 53 - - -static const short yytable[] = { 6, - 1, 2, 7, 3, 4, 14, 16, 17, 18, 19, - 20, 21, 22, 8, 9, 10, 11, 12, 13, 14, - 26, 24, 12, 13, 14, 15, 8, 9, 10, 11, - 12, 13, 14, 13, 14, 23, 8, 9, 10, 11, - 12, 13, 14, 10, 11, 12, 13, 14, 11, 12, - 13, 14, 27 -}; - -static const short yycheck[] = { 1, - 10, 11, 4, 13, 14, 9, 8, 9, 10, 11, - 12, 13, 14, 3, 4, 5, 6, 7, 8, 9, - 0, 23, 7, 8, 9, 15, 3, 4, 5, 6, - 7, 8, 9, 8, 9, 12, 3, 4, 5, 6, - 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, - 8, 9, 0 -}; -#define YYPURE 1 - -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" -/* This file comes from bison-1.28. */ - -/* Skeleton output parser for bison, - Copyright (C) 1984, 1989, 1990 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* This is the parser code that is written into each bison parser - when the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -#ifndef YYSTACK_USE_ALLOCA -#ifdef alloca -#define YYSTACK_USE_ALLOCA -#else /* alloca not defined */ -#ifdef __GNUC__ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#else /* not GNU C. */ -#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) -#define YYSTACK_USE_ALLOCA -#include <alloca.h> -#else /* not sparc */ -/* We think this test detects Watcom and Microsoft C. */ -/* This used to test MSDOS, but that is a bad idea - since that symbol is in the user namespace. */ -#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) -#if 0 /* No need for malloc.h, which pollutes the namespace; - instead, just don't use alloca. */ -#include <malloc.h> -#endif -#else /* not MSDOS, or __TURBOC__ */ -#if defined(_AIX) -/* I don't know what this was needed for, but it pollutes the namespace. - So I turned it off. rms, 2 May 1997. */ -/* #include <malloc.h> */ - #pragma alloca -#define YYSTACK_USE_ALLOCA -#else /* not MSDOS, or __TURBOC__, or _AIX */ -#if 0 -#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, - and on HPUX 10. Eventually we can turn this on. */ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#endif /* __hpux */ -#endif -#endif /* not _AIX */ -#endif /* not MSDOS, or __TURBOC__ */ -#endif /* not sparc */ -#endif /* not GNU C */ -#endif /* alloca not defined */ -#endif /* YYSTACK_USE_ALLOCA not defined */ - -#ifdef YYSTACK_USE_ALLOCA -#define YYSTACK_ALLOC alloca -#else -#define YYSTACK_ALLOC malloc -#endif - -/* Note: there must be only one dollar sign in this file. - It is replaced by the list of actions, each action - as one case of the switch. */ - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. - This remains here temporarily to ease the - transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ -#define YYFAIL goto yyerrlab -#define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(token, value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { yychar = (token), yylval = (value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { yyerror ("syntax error: cannot back up"); YYERROR; } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - -#ifndef YYPURE -#define YYLEX yylex() -#endif - -#ifdef YYPURE -#ifdef YYLSP_NEEDED -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval, &yylloc) -#endif -#else /* not YYLSP_NEEDED */ -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval) -#endif -#endif /* not YYLSP_NEEDED */ -#endif - -/* If nonreentrant, generate the variables here */ - -#ifndef YYPURE - -int yychar; /* the lookahead symbol */ -YYSTYPE yylval; /* the semantic value of the */ - /* lookahead symbol */ - -#ifdef YYLSP_NEEDED -YYLTYPE yylloc; /* location data for the lookahead */ - /* symbol */ -#endif - -int yynerrs; /* number of parse errors so far */ -#endif /* not YYPURE */ - -#if YYDEBUG != 0 -int yydebug; /* nonzero means print parse trace */ -/* Since this is uninitialized, it does not stop multiple parsers - from coexisting. */ -#endif - -/* YYINITDEPTH indicates the initial size of the parser's stacks */ - -#ifndef YYINITDEPTH -#define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH is the maximum size the stacks can grow to - (effective only if the built-in stack extension method is used). */ - -#if YYMAXDEPTH == 0 -#undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -#define YYMAXDEPTH 10000 -#endif - -/* Define __yy_memcpy. Note that the size argument - should be passed with type unsigned int, because that is what the non-GCC - definitions require. With GCC, __builtin_memcpy takes an arg - of type size_t, but it can handle unsigned int. */ - -#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ -#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) -#else /* not GNU C or C++ */ -#ifndef __cplusplus - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (to, from, count) - char *to; - char *from; - unsigned int count; -{ - register char *f = from; - register char *t = to; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#else /* __cplusplus */ - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (char *to, char *from, unsigned int count) -{ - register char *t = to; - register char *f = from; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#endif -#endif - -#line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" - -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ - -#ifdef YYPARSE_PARAM -#ifdef __cplusplus -#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -#define YYPARSE_PARAM_DECL -#else /* not __cplusplus */ -#define YYPARSE_PARAM_ARG YYPARSE_PARAM -#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -#endif /* not __cplusplus */ -#else /* not YYPARSE_PARAM */ -#define YYPARSE_PARAM_ARG -#define YYPARSE_PARAM_DECL -#endif /* not YYPARSE_PARAM */ - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -#ifdef YYPARSE_PARAM -int yyparse (void *); -#else -int yyparse (void); -#endif -#endif - -int -yyparse(YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL -{ - register int yystate; - register int yyn; - register short *yyssp; - register YYSTYPE *yyvsp; - int yyerrstatus; /* number of tokens to shift before error messages enabled */ - int yychar1 = 0; /* lookahead token as an internal (translated) token number */ - - short yyssa[YYINITDEPTH]; /* the state stack */ - YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ - - short *yyss = yyssa; /* refer to the stacks thru separate pointers */ - YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ - -#ifdef YYLSP_NEEDED - YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; - -#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -#define YYPOPSTACK (yyvsp--, yyssp--) -#endif - - int yystacksize = YYINITDEPTH; - int yyfree_stacks = 0; - -#ifdef YYPURE - int yychar; - YYSTYPE yylval; - int yynerrs; -#ifdef YYLSP_NEEDED - YYLTYPE yylloc; -#endif -#endif - - YYSTYPE yyval; /* the variable used to return */ - /* semantic values from the action */ - /* routines */ - - int yylen; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Starting parse\n"); -#endif - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss - 1; - yyvsp = yyvs; -#ifdef YYLSP_NEEDED - yylsp = yyls; -#endif - -/* Push a new state, which is found in yystate . */ -/* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. */ -yynewstate: - - *++yyssp = yystate; - - if (yyssp >= yyss + yystacksize - 1) - { - /* Give user a chance to reallocate the stack */ - /* Use copies of these so that the &'s don't force the real ones into memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; -#ifdef YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; -#endif - - /* Get the current used size of the three stacks, in elements. */ - int size = yyssp - yyss + 1; - -#ifdef yyoverflow - /* Each stack pointer address is followed by the size of - the data in use in that stack, in bytes. */ -#ifdef YYLSP_NEEDED - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yyls1, size * sizeof (*yylsp), - &yystacksize); -#else - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yystacksize); -#endif - - yyss = yyss1; yyvs = yyvs1; -#ifdef YYLSP_NEEDED - yyls = yyls1; -#endif -#else /* no yyoverflow */ - /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - { - yyerror("parser stack overflow"); - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 2; - } - yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) - yystacksize = YYMAXDEPTH; -#ifndef YYSTACK_USE_ALLOCA - yyfree_stacks = 1; -#endif - yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); - __yy_memcpy ((char *)yyss, (char *)yyss1, - size * (unsigned int) sizeof (*yyssp)); - yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); - __yy_memcpy ((char *)yyvs, (char *)yyvs1, - size * (unsigned int) sizeof (*yyvsp)); -#ifdef YYLSP_NEEDED - yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); - __yy_memcpy ((char *)yyls, (char *)yyls1, - size * (unsigned int) sizeof (*yylsp)); -#endif -#endif /* no yyoverflow */ - - yyssp = yyss + size - 1; - yyvsp = yyvs + size - 1; -#ifdef YYLSP_NEEDED - yylsp = yyls + size - 1; -#endif - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Stack size increased to %d\n", yystacksize); -#endif - - if (yyssp >= yyss + yystacksize - 1) - YYABORT; - } - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Entering state %d\n", yystate); -#endif - - goto yybackup; - yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - - if (yychar == YYEMPTY) - { -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Reading a token: "); -#endif - yychar = YYLEX; - } - - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ - { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Now at end of input.\n"); -#endif - } - else - { - yychar1 = YYTRANSLATE(yychar); - -#if YYDEBUG != 0 - if (yydebug) - { - fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise meaning - of a token, for further debugging info. */ -#ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -#endif - fprintf (stderr, ")\n"); - } -#endif - } - - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) - goto yydefault; - - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrlab; - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); -#endif - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - /* count tokens shifted since error; after three, turn off error status. */ - if (yyerrstatus) yyerrstatus--; - - yystate = yyn; - goto yynewstate; - -/* Do the default action for the current state. */ -yydefault: - - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - -/* Do a reduction. yyn is the number of a rule to reduce with. */ -yyreduce: - yylen = yyr2[yyn]; - if (yylen > 0) - yyval = yyvsp[1-yylen]; /* implement default value of the action */ - -#if YYDEBUG != 0 - if (yydebug) - { - int i; - - fprintf (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) - fprintf (stderr, "%s ", yytname[yyrhs[i]]); - fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - - switch (yyn) { - -case 1: -#line 178 "plural.y" -{ - if (yyvsp[0].exp == NULL) - YYABORT; - ((struct parse_args *) arg)->res = yyvsp[0].exp; - ; - break;} -case 2: -#line 186 "plural.y" -{ - yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); - ; - break;} -case 3: -#line 190 "plural.y" -{ - yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); - ; - break;} -case 4: -#line 194 "plural.y" -{ - yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); - ; - break;} -case 5: -#line 198 "plural.y" -{ - yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); - ; - break;} -case 6: -#line 202 "plural.y" -{ - yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); - ; - break;} -case 7: -#line 206 "plural.y" -{ - yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); - ; - break;} -case 8: -#line 210 "plural.y" -{ - yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); - ; - break;} -case 9: -#line 214 "plural.y" -{ - yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); - ; - break;} -case 10: -#line 218 "plural.y" -{ - yyval.exp = new_exp_0 (var); - ; - break;} -case 11: -#line 222 "plural.y" -{ - if ((yyval.exp = new_exp_0 (num)) != NULL) - yyval.exp->val.num = yyvsp[0].num; - ; - break;} -case 12: -#line 227 "plural.y" -{ - yyval.exp = yyvsp[-1].exp; - ; - break;} -} - /* the action file gets copied in in place of this dollarsign */ -#line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" - - yyvsp -= yylen; - yyssp -= yylen; -#ifdef YYLSP_NEEDED - yylsp -= yylen; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - - *++yyvsp = yyval; - -#ifdef YYLSP_NEEDED - yylsp++; - if (yylen == 0) - { - yylsp->first_line = yylloc.first_line; - yylsp->first_column = yylloc.first_column; - yylsp->last_line = (yylsp-1)->last_line; - yylsp->last_column = (yylsp-1)->last_column; - yylsp->text = 0; - } - else - { - yylsp->last_line = (yylsp+yylen-1)->last_line; - yylsp->last_column = (yylsp+yylen-1)->last_column; - } -#endif - - /* Now "shift" the result of the reduction. - Determine what state that goes to, - based on the state we popped back to - and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTBASE]; - - goto yynewstate; - -yyerrlab: /* here on detecting error */ - - if (! yyerrstatus) - /* If not already recovering from an error, report this error. */ - { - ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - int size = 0; - char *msg; - int x, count; - - count = 0; - /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - size += strlen(yytname[x]) + 15, count++; - msg = (char *) malloc(size + 15); - if (msg != 0) - { - strcpy(msg, "parse error"); - - if (count < 5) - { - count = 0; - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - { - strcat(msg, count == 0 ? ", expecting `" : " or `"); - strcat(msg, yytname[x]); - strcat(msg, "'"); - count++; - } - } - yyerror(msg); - free(msg); - } - else - yyerror ("parse error; also virtual memory exceeded"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror("parse error"); - } - - goto yyerrlab1; -yyerrlab1: /* here on error raised explicitly by an action */ - - if (yyerrstatus == 3) - { - /* if just tried and failed to reuse lookahead token after an error, discard it. */ - - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); -#endif - - yychar = YYEMPTY; - } - - /* Else will try to reuse lookahead token - after shifting the error token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; - -yyerrdefault: /* current state does not do anything special for the error token. */ - -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ - yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ - if (yyn) goto yydefault; -#endif - -yyerrpop: /* pop the current state because it cannot handle the error token */ - - if (yyssp == yyss) YYABORT; - yyvsp--; - yystate = *--yyssp; -#ifdef YYLSP_NEEDED - yylsp--; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "Error: state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - -yyerrhandle: - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; - - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrpop; - - if (yyn == YYFINAL) - YYACCEPT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting error token, "); -#endif - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - yystate = yyn; - goto yynewstate; - - yyacceptlab: - /* YYACCEPT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 0; - - yyabortlab: - /* YYABORT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 1; -} -#line 232 "plural.y" - - -void -internal_function -FREE_EXPRESSION (exp) - struct expression *exp; -{ - if (exp == NULL) - return; - - /* Handle the recursive case. */ - switch (exp->nargs) - { - case 3: - FREE_EXPRESSION (exp->val.args[2]); - /* FALLTHROUGH */ - case 2: - FREE_EXPRESSION (exp->val.args[1]); - /* FALLTHROUGH */ - case 1: - FREE_EXPRESSION (exp->val.args[0]); - /* FALLTHROUGH */ - default: - break; - } - - free (exp); -} - - -static int -yylex (lval, pexp) - YYSTYPE *lval; - const char **pexp; -{ - const char *exp = *pexp; - int result; - - while (1) - { - if (exp[0] == '\0') - { - *pexp = exp; - return YYEOF; - } - - if (exp[0] != ' ' && exp[0] != '\t') - break; - - ++exp; - } - - result = *exp++; - switch (result) - { - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - { - unsigned long int n = result - '0'; - while (exp[0] >= '0' && exp[0] <= '9') - { - n *= 10; - n += exp[0] - '0'; - ++exp; - } - lval->num = n; - result = NUMBER; - } - break; - - case '=': - if (exp[0] == '=') - { - ++exp; - lval->op = equal; - result = EQUOP2; - } - else - result = YYERRCODE; - break; - - case '!': - if (exp[0] == '=') - { - ++exp; - lval->op = not_equal; - result = EQUOP2; - } - break; - - case '&': - case '|': - if (exp[0] == result) - ++exp; - else - result = YYERRCODE; - break; - - case '<': - if (exp[0] == '=') - { - ++exp; - lval->op = less_or_equal; - } - else - lval->op = less_than; - result = CMPOP2; - break; - - case '>': - if (exp[0] == '=') - { - ++exp; - lval->op = greater_or_equal; - } - else - lval->op = greater_than; - result = CMPOP2; - break; - - case '*': - lval->op = mult; - result = MULOP2; - break; - - case '/': - lval->op = divide; - result = MULOP2; - break; - - case '%': - lval->op = module; - result = MULOP2; - break; - - case '+': - lval->op = plus; - result = ADDOP2; - break; - - case '-': - lval->op = minus; - result = ADDOP2; - break; - - case 'n': - case '?': - case ':': - case '(': - case ')': - /* Nothing, just return the character. */ - break; - - case ';': - case '\n': - case '\0': - /* Be safe and let the user call this function again. */ - --exp; - result = YYEOF; - break; - - default: - result = YYERRCODE; -#if YYDEBUG != 0 - --exp; -#endif - break; - } - - *pexp = exp; - - return result; -} - - -static void -yyerror (str) - const char *str; -{ - /* Do nothing. We don't print error messages here. */ -} diff --git a/intl/plural.y b/intl/plural.y deleted file mode 100644 index 42ffa0eb2..000000000 --- a/intl/plural.y +++ /dev/null @@ -1,412 +0,0 @@ -%{ -/* Expression parsing for plural form selection. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. - Written by Ulrich Drepper <drepper@cygnus.com>, 2000. - - 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 bison generated parser uses alloca. AIX 3 forces us to put this - declaration at the beginning of the file. The declaration in bison's - skeleton file comes too late. This must come before <config.h> - because <config.h> may include arbitrary system headers. */ -#if defined _AIX && !defined __GNUC__ - #pragma alloca -#endif - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <stdlib.h> -#include "gettextP.h" - -/* 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 FREE_EXPRESSION __gettext_free_exp -#else -# define FREE_EXPRESSION gettext_free_exp__ -# define __gettextparse gettextparse__ -#endif - -#define YYLEX_PARAM &((struct parse_args *) arg)->cp -#define YYPARSE_PARAM arg -%} -%pure_parser -%expect 10 - -%union { - unsigned long int num; - enum operator op; - struct expression *exp; -} - -%{ -/* Prototypes for local functions. */ -static struct expression *new_exp PARAMS ((int nargs, enum operator op, - struct expression * const *args)); -static inline struct expression *new_exp_0 PARAMS ((enum operator op)); -static inline struct expression *new_exp_1 PARAMS ((enum operator op, - struct expression *right)); -static struct expression *new_exp_2 PARAMS ((enum operator op, - struct expression *left, - struct expression *right)); -static inline struct expression *new_exp_3 PARAMS ((enum operator op, - struct expression *bexp, - struct expression *tbranch, - struct expression *fbranch)); -static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); -static void yyerror PARAMS ((const char *str)); - -/* Allocation of expressions. */ - -static struct expression * -new_exp (nargs, op, args) - int nargs; - enum operator op; - struct expression * const *args; -{ - int i; - struct expression *newp; - - /* If any of the argument could not be malloc'ed, just return NULL. */ - for (i = nargs - 1; i >= 0; i--) - if (args[i] == NULL) - goto fail; - - /* Allocate a new expression. */ - newp = (struct expression *) malloc (sizeof (*newp)); - if (newp != NULL) - { - newp->nargs = nargs; - newp->operation = op; - for (i = nargs - 1; i >= 0; i--) - newp->val.args[i] = args[i]; - return newp; - } - - fail: - for (i = nargs - 1; i >= 0; i--) - FREE_EXPRESSION (args[i]); - - return NULL; -} - -static inline struct expression * -new_exp_0 (op) - enum operator op; -{ - return new_exp (0, op, NULL); -} - -static inline struct expression * -new_exp_1 (op, right) - enum operator op; - struct expression *right; -{ - struct expression *args[1]; - - args[0] = right; - return new_exp (1, op, args); -} - -static struct expression * -new_exp_2 (op, left, right) - enum operator op; - struct expression *left; - struct expression *right; -{ - struct expression *args[2]; - - args[0] = left; - args[1] = right; - return new_exp (2, op, args); -} - -static inline struct expression * -new_exp_3 (op, bexp, tbranch, fbranch) - enum operator op; - struct expression *bexp; - struct expression *tbranch; - struct expression *fbranch; -{ - struct expression *args[3]; - - args[0] = bexp; - args[1] = tbranch; - args[2] = fbranch; - return new_exp (3, op, args); -} - -%} - -/* This declares that all operators have the same associativity and the - precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. - There is no unary minus and no bitwise operators. - Operators with the same syntactic behaviour have been merged into a single - token, to save space in the array generated by bison. */ -%right '?' /* ? */ -%left '|' /* || */ -%left '&' /* && */ -%left EQUOP2 /* == != */ -%left CMPOP2 /* < > <= >= */ -%left ADDOP2 /* + - */ -%left MULOP2 /* * / % */ -%right '!' /* ! */ - -%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2 -%token <num> NUMBER -%type <exp> exp - -%% - -start: exp - { - if ($1 == NULL) - YYABORT; - ((struct parse_args *) arg)->res = $1; - } - ; - -exp: exp '?' exp ':' exp - { - $$ = new_exp_3 (qmop, $1, $3, $5); - } - | exp '|' exp - { - $$ = new_exp_2 (lor, $1, $3); - } - | exp '&' exp - { - $$ = new_exp_2 (land, $1, $3); - } - | exp EQUOP2 exp - { - $$ = new_exp_2 ($2, $1, $3); - } - | exp CMPOP2 exp - { - $$ = new_exp_2 ($2, $1, $3); - } - | exp ADDOP2 exp - { - $$ = new_exp_2 ($2, $1, $3); - } - | exp MULOP2 exp - { - $$ = new_exp_2 ($2, $1, $3); - } - | '!' exp - { - $$ = new_exp_1 (lnot, $2); - } - | 'n' - { - $$ = new_exp_0 (var); - } - | NUMBER - { - if (($$ = new_exp_0 (num)) != NULL) - $$->val.num = $1; - } - | '(' exp ')' - { - $$ = $2; - } - ; - -%% - -void -internal_function -FREE_EXPRESSION (exp) - struct expression *exp; -{ - if (exp == NULL) - return; - - /* Handle the recursive case. */ - switch (exp->nargs) - { - case 3: - FREE_EXPRESSION (exp->val.args[2]); - /* FALLTHROUGH */ - case 2: - FREE_EXPRESSION (exp->val.args[1]); - /* FALLTHROUGH */ - case 1: - FREE_EXPRESSION (exp->val.args[0]); - /* FALLTHROUGH */ - default: - break; - } - - free (exp); -} - - -static int -yylex (lval, pexp) - YYSTYPE *lval; - const char **pexp; -{ - const char *exp = *pexp; - int result; - - while (1) - { - if (exp[0] == '\0') - { - *pexp = exp; - return YYEOF; - } - - if (exp[0] != ' ' && exp[0] != '\t') - break; - - ++exp; - } - - result = *exp++; - switch (result) - { - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - { - unsigned long int n = result - '0'; - while (exp[0] >= '0' && exp[0] <= '9') - { - n *= 10; - n += exp[0] - '0'; - ++exp; - } - lval->num = n; - result = NUMBER; - } - break; - - case '=': - if (exp[0] == '=') - { - ++exp; - lval->op = equal; - result = EQUOP2; - } - else - result = YYERRCODE; - break; - - case '!': - if (exp[0] == '=') - { - ++exp; - lval->op = not_equal; - result = EQUOP2; - } - break; - - case '&': - case '|': - if (exp[0] == result) - ++exp; - else - result = YYERRCODE; - break; - - case '<': - if (exp[0] == '=') - { - ++exp; - lval->op = less_or_equal; - } - else - lval->op = less_than; - result = CMPOP2; - break; - - case '>': - if (exp[0] == '=') - { - ++exp; - lval->op = greater_or_equal; - } - else - lval->op = greater_than; - result = CMPOP2; - break; - - case '*': - lval->op = mult; - result = MULOP2; - break; - - case '/': - lval->op = divide; - result = MULOP2; - break; - - case '%': - lval->op = module; - result = MULOP2; - break; - - case '+': - lval->op = plus; - result = ADDOP2; - break; - - case '-': - lval->op = minus; - result = ADDOP2; - break; - - case 'n': - case '?': - case ':': - case '(': - case ')': - /* Nothing, just return the character. */ - break; - - case ';': - case '\n': - case '\0': - /* Be safe and let the user call this function again. */ - --exp; - result = YYEOF; - break; - - default: - result = YYERRCODE; -#if YYDEBUG != 0 - --exp; -#endif - break; - } - - *pexp = exp; - - return result; -} - - -static void -yyerror (str) - const char *str; -{ - /* Do nothing. We don't print error messages here. */ -} diff --git a/intl/ref-add.sin b/intl/ref-add.sin deleted file mode 100644 index 167374e3c..000000000 --- a/intl/ref-add.sin +++ /dev/null @@ -1,31 +0,0 @@ -# Add this package to a list of references stored in a text file. -# -# Copyright (C) 2000 Free Software Foundation, Inc. -# -# This program 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, 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 -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library 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. -# -# Written by Bruno Haible <haible@clisp.cons.org>. -# -/^# Packages using this file: / { - s/# Packages using this file:// - ta - :a - s/ @PACKAGE@ / @PACKAGE@ / - tb - s/ $/ @PACKAGE@ / - :b - s/^/# Packages using this file:/ -} diff --git a/intl/ref-del.sin b/intl/ref-del.sin deleted file mode 100644 index 613cf37f3..000000000 --- a/intl/ref-del.sin +++ /dev/null @@ -1,26 +0,0 @@ -# Remove this package from a list of references stored in a text file. -# -# Copyright (C) 2000 Free Software Foundation, Inc. -# -# This program 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, 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 -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library 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. -# -# Written by Bruno Haible <haible@clisp.cons.org>. -# -/^# Packages using this file: / { - s/# Packages using this file:// - s/ @PACKAGE@ / / - s/^/# Packages using this file:/ -} diff --git a/intl/textdomain.c b/intl/textdomain.c deleted file mode 100644 index 05c2fd76b..000000000 --- a/intl/textdomain.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Implementation of the textdomain(3) function. - Copyright (C) 1995-1998, 2000, 2001 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 <stdlib.h> -#include <string.h> - -#ifdef _LIBC -# include <libintl.h> -#else -# include "libgnuintl.h" -#endif -#include "gettextP.h" - -#ifdef _LIBC -/* We have to handle multi-threaded applications. */ -# include <bits/libc-lock.h> -#else -/* Provide dummy implementation if this is outside glibc. */ -# define __libc_rwlock_define(CLASS, NAME) -# define __libc_rwlock_wrlock(NAME) -# define __libc_rwlock_unlock(NAME) -#endif - -/* The internal variables in the standalone libintl.a must have different - names than the internal variables in GNU libc, otherwise programs - using libintl.a cannot be linked statically. */ -#if !defined _LIBC -# define _nl_default_default_domain _nl_default_default_domain__ -# define _nl_current_default_domain _nl_current_default_domain__ -#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 - -/* Lock variable to protect the global data in the gettext implementation. */ -__libc_rwlock_define (extern, _nl_state_lock) - -/* 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 *new_domain; - char *old_domain; - - /* A NULL pointer requests the current setting. */ - if (domainname == NULL) - return (char *) _nl_current_default_domain; - - __libc_rwlock_wrlock (_nl_state_lock); - - old_domain = (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; - new_domain = (char *) _nl_current_default_domain; - } - else if (strcmp (domainname, old_domain) == 0) - /* This can happen and people will use it to signal that some - environment variable changed. */ - new_domain = old_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 - new_domain = strdup (domainname); -#else - size_t len = strlen (domainname) + 1; - new_domain = (char *) malloc (len); - if (new_domain != NULL) - memcpy (new_domain, domainname, len); -#endif - - if (new_domain != NULL) - _nl_current_default_domain = new_domain; - } - - /* We use this possibility to signal a change of the loaded catalogs - since this is most likely the case and there is no other easy we - to do it. Do it only when the call was successful. */ - if (new_domain != NULL) - { - ++_nl_msg_cat_cntr; - - if (old_domain != new_domain && old_domain != _nl_default_default_domain) - free (old_domain); - } - - __libc_rwlock_unlock (_nl_state_lock); - - return new_domain; -} - -#ifdef _LIBC -/* Alias for function name in GNU C Library. */ -weak_alias (__textdomain, textdomain); -#endif diff --git a/libkcc/.cvsignore b/libkcc/.cvsignore deleted file mode 100644 index 994516890..000000000 --- a/libkcc/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -Makefile -.deps -Makefile.in diff --git a/libkcc/Makefile.am b/libkcc/Makefile.am deleted file mode 100644 index a60b56e3c..000000000 --- a/libkcc/Makefile.am +++ /dev/null @@ -1,54 +0,0 @@ -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.std b/libkcc/Makefile.std deleted file mode 100644 index 2eb9cdf74..000000000 --- a/libkcc/Makefile.std +++ /dev/null @@ -1,54 +0,0 @@ -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 deleted file mode 100644 index 04429e8eb..000000000 --- a/libkcc/README +++ /dev/null @@ -1,461 +0,0 @@ -************************************************ -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 deleted file mode 100644 index 7e6cc0873..000000000 --- a/libkcc/ROUTINE +++ /dev/null @@ -1,24 +0,0 @@ - -* ´Á»ú¥³¡¼¥ÉȽÄê 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 deleted file mode 100644 index cb846ed27..000000000 --- a/libkcc/buffer.c +++ /dev/null @@ -1,71 +0,0 @@ -#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 deleted file mode 100644 index 529dc86bf..000000000 --- a/libkcc/check.c +++ /dev/null @@ -1,36 +0,0 @@ -#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 deleted file mode 100644 index 788805f51..000000000 --- a/libkcc/compare.c +++ /dev/null @@ -1,14 +0,0 @@ -#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 deleted file mode 100644 index 84f04c5f5..000000000 --- a/libkcc/dec.c +++ /dev/null @@ -1,132 +0,0 @@ -#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 deleted file mode 100644 index f8f74ff35..000000000 --- a/libkcc/euc.c +++ /dev/null @@ -1,47 +0,0 @@ -#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 deleted file mode 100644 index 6992cd775..000000000 --- a/libkcc/filter.c +++ /dev/null @@ -1,145 +0,0 @@ -#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 deleted file mode 100644 index ac10fc6ce..000000000 --- a/libkcc/getstr.c +++ /dev/null @@ -1,22 +0,0 @@ -#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 deleted file mode 100644 index d6de8862f..000000000 --- a/libkcc/guess.c +++ /dev/null @@ -1,194 +0,0 @@ -#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 deleted file mode 100644 index 187dfeb4b..000000000 --- a/libkcc/jis.c +++ /dev/null @@ -1,130 +0,0 @@ -#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 deleted file mode 100644 index 84edfc9e0..000000000 --- a/libkcc/kcc.h +++ /dev/null @@ -1,22 +0,0 @@ -#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 deleted file mode 100644 index 829f7cd67..000000000 --- a/libkcc/libkcc.h +++ /dev/null @@ -1,94 +0,0 @@ -#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 deleted file mode 100644 index 86e3dcb78..000000000 --- a/libkcc/out.c +++ /dev/null @@ -1,188 +0,0 @@ -#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 deleted file mode 100644 index 2d6a9c9b6..000000000 --- a/libkcc/outchar.c +++ /dev/null @@ -1,10 +0,0 @@ -/*--------------------------------------------------------------------- - 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 deleted file mode 100644 index 38b318d9b..000000000 --- a/libkcc/outsjis.c +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index 45b9be51d..000000000 --- a/libkcc/setfunc.c +++ /dev/null @@ -1,63 +0,0 @@ -#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 deleted file mode 100644 index bb09f9005..000000000 --- a/libkcc/showcode.c +++ /dev/null @@ -1,71 +0,0 @@ -#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 deleted file mode 100644 index 026a3cd92..000000000 --- a/libkcc/sjis.c +++ /dev/null @@ -1,50 +0,0 @@ -#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 deleted file mode 100644 index 4fbb81a98..000000000 --- a/libkcc/test.c +++ /dev/null @@ -1,44 +0,0 @@ -#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 deleted file mode 100644 index fe7cc1126..000000000 --- a/libkcc/test_check.c +++ /dev/null @@ -1,18 +0,0 @@ -#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 deleted file mode 100644 index 9e27f8ff2..000000000 --- a/libkcc/test_file +++ /dev/null @@ -1,8 +0,0 @@ -²ñ¼Ò¾ðÊó -<A HREF="">¤¢</A>¤¢¤¢¤¢¤¢¤¢<BR> - -<?php -$a=0; -while($a<10) { - $a++; -?>¤¤<?php } ?> diff --git a/libkcc/test_file.sjis b/libkcc/test_file.sjis deleted file mode 100644 index e628428cb..000000000 --- a/libkcc/test_file.sjis +++ /dev/null @@ -1,8 +0,0 @@ -‰ïŽÐ�î•ñ -<A HREF="">‚ </A>‚ ‚ ‚ ‚ ‚ <BR> - -<?php -$a=0; -while($a<10) { - $a++; -?>‚¢<?php } ?> diff --git a/libkcc/test_filter.c b/libkcc/test_filter.c deleted file mode 100644 index 3485ae54c..000000000 --- a/libkcc/test_filter.c +++ /dev/null @@ -1,25 +0,0 @@ -#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 deleted file mode 100644 index 13e261c2f..000000000 --- a/libkcc/testfile +++ /dev/null @@ -1,2 +0,0 @@ -$B$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"(B - diff --git a/ltconfig b/ltconfig deleted file mode 100644 index 65ec6f65d..000000000 --- a/ltconfig +++ /dev/null @@ -1,3017 +0,0 @@ -#! /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 deleted file mode 100644 index 5959c479b..000000000 --- a/ltmain.sh +++ /dev/null @@ -1,4946 +0,0 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun configure. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 -# 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.4 -TIMESTAMP=" (1.920 2001/04/24 23:26:18)" - -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 "$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) - execute_dlfiles="$execute_dlfiles $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= - prev= - lastarg= - srcfile="$nonopt" - suppress_output= - - user_target=no - for arg - do - case $prev in - "") ;; - xcompiler) - # Aesthetically quote the previous argument. - prev= - lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - - case $arg in - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - - # Add the previous argument to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - continue - ;; - esac - - # 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 - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` - lastarg= - IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - lastarg="$lastarg $arg" - done - IFS="$save_ifs" - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - 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 - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2*) - pic_mode=default - ;; - esac - if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # 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 $run 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 - - if test "$pic_mode" != no; then - # All platforms use -DPIC, to notify preprocessed assembler code. - command="$base_compile $srcfile $pic_flag -DPIC" - else - # Don't build PIC code - command="$base_compile $srcfile" - fi - 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 "$pic_mode" != default) && - 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 - - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` - libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` - # Now arrange that obj and lo_libobj become the same file - $show "(cd $xdir && $LN_S $baseobj $libobj)" - if $run eval '(cd $xdir && $LN_S $baseobj $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 - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $srcfile" - else - # All platforms use -DPIC, to notify preprocessed assembler code. - command="$base_compile $srcfile $pic_flag -DPIC" - fi - 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 - $run $rm "$lockfile" - fi - - exit 0 - ;; - - # libtool link mode - link | relink) - modename="$modename: link" - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-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 - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args="$nonopt" - compile_command="$nonopt" - finalize_command="$nonopt" - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=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 - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test - ;; - *) qarg=$arg ;; - esac - libtool_args="$libtool_args $qarg" - - # 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= - continue - ;; - 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 - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - compile_command="$compile_command $wl$qarg" - finalize_command="$finalize_command $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n $prev - - 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: more than one -exported-symbols argument is not allowed" - exit 1 - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; - esac - 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: cannot determine absolute directory name of \`$dir'" 1>&2 - exit 1 - fi - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - case :$dllsearchpath: in - *":$dir:"*) ;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-pw32* | *-*-beos*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-mingw* | *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - # The PATH hackery in wrapper scripts is required on Windows - # in order for the loader to find any dlls it needs. - $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 - $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 - fast_install=no - ;; - *) no_install=yes ;; - esac - 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) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` - arg= - IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Wl,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` - arg= - IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $wl$flag" - linker_flags="$linker_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - 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 - ;; - - *.lo | *.$objext) - # A library or standard object. - if test "$prev" = dlfiles; then - # This file was specified with -dlopen. - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $arg" - 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= - else - case $arg in - *.lo) libobjs="$libobjs $arg" ;; - *) objs="$objs $arg" ;; - esac - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - 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 # arg - - # 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 # argument parsing loop - - 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 - - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - 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 object directory. - 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 - - # Determine the type of output - case $output in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - libs="$libs $deplib" - done - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - case $linkmode in - lib) - passes="conv link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 - exit 1 - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - for pass in $passes; do - if test $linkmode = prog; then - # Determine which files to process - case $pass in - dlopen) - libs="$dlfiles" - save_deplibs="$deplibs" # Collect dlpreopened libraries - deplibs= - ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -l*) - if test $linkmode = oldlib && test $linkmode = obj; then - $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 - continue - fi - if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi - name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` - for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do - # Search the libtool library - lib="$searchdir/lib${name}.la" - if test -f "$lib"; then - found=yes - break - fi - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - ;; # -l - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test $pass = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) - if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test $pass = scan; then - deplibs="$deplib $deplibs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - ;; - *) - $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test $pass = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - if test "$deplibs_check_method" != pass_all; then - echo - echo "*** Warning: This library needs some functionality provided by $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." - else - echo - echo "*** Warning: Linking the shared library $output against the" - echo "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - continue - ;; - prog) - if test $pass != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - if test $found = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib'" 1>&2 - exit 1 - fi - - # Check to see that this really is a libtool archive. - if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - # If the library was installed with an old release of libtool, - # it will not redefine variable installed. - installed=yes - - # Read the .la file - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test $linkmode = oldlib && test $linkmode = obj; }; then - # Add dl[pre]opened files of deplib - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test $pass = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit 1 - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - elif test $linkmode != prog && test $linkmode != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit 1 - fi - continue - fi # $pass = conv - - # 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 \`$lib'" 1>&2 - exit 1 - fi - - # This library was specified with -dlopen. - if test $pass = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit 1 - fi - if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. - dlprefiles="$dlprefiles $lib" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - abs_ladir="$ladir" - fi - ;; - esac - laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - $echo "$modename: warning: library \`$lib' was moved." 1>&2 - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi # $installed = yes - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. - if test $pass = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit 1 - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test $linkmode = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" - fi - continue - fi - - if test $linkmode = prog && test $pass != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? - if test $linkalldeplibs = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - link_static=no # Whether the deplib will be linked statically - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - # Link against this shared library - - if test "$linkmode,$pass" = "prog,link" || - { test $linkmode = lib && test $hardcode_into_libs = yes; }; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - 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 - if test $linkmode = prog; then - # We need to hardcode the library path - if test -n "$shlibpath_var"; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *" $absdir "*) ;; - *) temp_rpath="$temp_rpath $dir" ;; - esac - fi - fi - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - realname="$2" - shift; shift - libname=`eval \\$echo \"$libname_spec\"` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin*) - major=`expr $current - $age` - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - soname=`echo $soroot | sed -e 's/^.*\///'` - newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - $show "extracting exported symbol list from \`$soname'" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - eval cmds=\"$extract_expsyms_cmds\" - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - $show "generating import library for \`$soname'" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - eval cmds=\"$old_archive_from_expsyms_cmds\" - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n $old_archive_from_expsyms_cmds - - if test $linkmode = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-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 - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test $linkmode = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && \ - test "$hardcode_minus_L" != yes && \ - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test $linkmode = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - add="-l$name" - fi - - if test $linkmode = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test $linkmode = prog; then - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - - # Try to link the static library - # 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_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - echo "*** Warning: This library needs some functionality provided by $lib." - 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." - if test "$module" = yes; then - echo "*** Therefore, libtool will create a static module, that should work " - echo "*** as long as the dlopening 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 - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - convenience="$convenience $dir/$old_library" - old_convenience="$old_convenience $dir/$old_library" - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test $linkmode = lib; then - if test -n "$dependency_libs" && - { test $hardcode_into_libs != yes || test $build_old_libs = yes || - test $link_static = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - - if test $link_all_deplibs != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in - -L*) path="$deplib" ;; - *.la) - dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$deplib" && dir="." - # 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 - absdir="$dir" - fi - ;; - esac - if grep "^installed=no" $deplib > /dev/null; then - path="-L$absdir/$objdir" - else - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 - fi - if test "$absdir" != "$libdir"; then - $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 - fi - path="-L$absdir" - fi - ;; - *) continue ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$deplibs $path" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test $pass = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test $pass != dlopen; then - test $pass != scan && dependency_libs="$newdependency_libs" - if test $pass != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - *) - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - if test "$pass" = "conv" && - { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then - libs="$deplibs" # reset libs - deplibs= - fi - done # for pass - if test $linkmode = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - 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" - objs="$objs$old_deplibs" - ;; - - lib) - # 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 - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 - exit 1 - else - echo - echo "*** Warning: Linking the shared library $output against the non-libtool" - echo "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - if test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen self' 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 - - 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] | [1-9][0-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] | [1-9][0-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] | [1-9][0-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) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - major=.`expr $current - $age` - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - minor_current=`expr $current + 1` - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current"; - ;; - - irix) - major=`expr $current - $age + 1` - 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 - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - 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" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - major=`expr $current - $age` - versuffix="-$major" - ;; - - *) - $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 - fi - - if test "$mode" != relink; then - # Remove our outputs. - $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}.* - 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 - - # Eliminate all temporary directories. - for path in $notinst_path; do - lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'` - deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'` - dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'` - done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test $hardcode_into_libs != yes || test $build_old_libs = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs -framework System" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test $build_libtool_need_lc = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # 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 - $CC -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 -n "$name" && test "$name" != "0"; 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 -n "$name" && test "$name" != "0"; then - $rm conftest - $CC -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 -n "$name" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_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. - ;; - match_pattern*) - set dummy $deplibs_check_method - match_pattern_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 -n "$name" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - if eval echo \"$potent_lib\" 2>/dev/null \ - | sed 10q \ - | egrep "$match_pattern_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 - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` - ;; - esac - - 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." - - if test $allow_undefined = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - 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 - fi - 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 - if test $hardcode_into_libs = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $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\" - dep_rpath="$dep_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 dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # 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 - test -z "$dlname" && dlname=$soname - - 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) in case we are running --disable-static - for obj in $libobjs; do - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` - if test ! -f $xdir/$oldobj; then - $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" - $run eval '(cd $xdir && ${LN_S} $baseobj $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\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? - 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" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? - exit 0 - fi - - # 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 - ;; - - obj) - 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$old_deplibs"; 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$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - 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" || test "$pic_mode" != default; 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 - xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$libobj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` - $show "(cd $xdir && $LN_S $oldobj $baseobj)" - $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? - fi - - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit 0 - ;; - - prog) - case $host in - *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;; - esac - 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_support" = 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 - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` - finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` - ;; - esac - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - 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 "$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 - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - case :$dllsearchpath: in - *":$libdir:"*) ;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - ;; - esac - 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" - - 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$old_deplibs" | $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*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DPIC";; - esac - esac - - # Now compile the dynamic symbol file. - $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" - $run eval '(cd $output_objdir && $CC -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 $need_relink = no || 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 "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $run $rm $output - # Link the executable and exit - $show "$link_command" - $run eval "$link_command" || exit $? - exit 0 - 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 - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done - relink_command="cd `pwd`; $relink_command" - 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 - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) exeext=.exe ;; - *) exeext= ;; - 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: - notinst_deplibs='$notinst_deplibs' -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'$exeext - 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 (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' - 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 - # win32 systems need to use the prog path for dll - # lookup to work - *-*-cygwin* | *-*-pw32*) - $echo >> $output "\ - exec \$progdir/\$program \${1+\"\$@\"} -" - ;; - - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2*) - $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$old_deplibs "`$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 in case 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 - xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$oldobj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` - obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` - $show "(cd $xdir && ${LN_S} $obj $baseobj)" - $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || 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" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - - # 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 - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdlfiles="$newdlfiles $libdir/$name" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdlprefiles="$newdlprefiles $libdir/$name" - done - dlprefiles="$newdlprefiles" - fi - $rm $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $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='$tdlname' - -# 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 - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test $need_relink = yes; then - $echo >> $output "\ -relink_command=\"$relink_command\"" - fi - 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 || - # Allow the use of GNU shtool's install command. - $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; 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 - *.$libext) - # 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= - relink_command= - # 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" - - if test -n "$relink_command"; then - $echo "$modename: warning: relinking \`$file'" 1>&2 - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - continue - fi - fi - - # See the names of the shared library. - set dummy $library_names - if test -n "$2"; then - realname="$2" - shift - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - $show "$install_prog $dir/$srcname $destdir/$realname" - $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? - if test -n "$stripme" && test -n "$striplib"; then - $show "$striplib $destdir/$realname" - $run eval "$striplib $destdir/$realname" || exit $? - fi - - 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"` - ;; - *.$objext) - 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 - notinst_deplibs= - 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 "$notinst_deplibs"; then - $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 - exit 1 - fi - - finalize=yes - for lib in $notinst_deplibs; 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'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 - finalize=no - fi - done - - relink_command= - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - 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 - file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - 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 - - # remove .exe since cygwin /usr/bin/install will append another - # one anyways - case $install_prog,$host in - /usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - destfile=`echo $destfile | sed -e 's,.exe$,,'` - ;; - esac - ;; - esac - $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 $? - - if test -n "$stripme" && test -n "$striplib"; then - $show "$old_striplib $oldlib" - $run eval "$old_striplib $oldlib" || exit $? - fi - - # 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 the \`-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 - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # 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. - if test -n "$shlibpath_var"; then - eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" - $echo "export $shlibpath_var" - fi - $echo "$cmd$args" - exit 0 - fi - ;; - - # libtool clean and uninstall mode - clean | uninstall) - modename="$modename: $mode" - rm="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) rm="$rm $arg"; rmforce=yes ;; - -*) 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 - - rmdirs= - - for file in $files; do - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$file"; then - dir=. - objdir="$objdir" - else - objdir="$dir/$objdir" - fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - test $mode = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test $mode = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if (test -L "$file") >/dev/null 2>&1 \ - || (test -h "$file") >/dev/null 2>&1 \ - || test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - 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 $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - - if test $mode = uninstall; then - 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" - if test $? != 0 && test "$rmforce" != yes; then - exit_status=1 - fi - 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" - if test $? != 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done - IFS="$save_ifs" - fi - # FIXME: should reinstall the best remaining shared library. - fi - fi - ;; - - *.lo) - if test "$build_old_libs" = yes; then - oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` - rmfiles="$rmfiles $dir/$oldobj" - fi - ;; - - *) - # Do a test to see if this is a libtool program. - if test $mode = clean && - (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$file - - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - fi - ;; - esac - $show "$rm $rmfiles" - $run $rm $rmfiles || exit_status=1 - done - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - $show "rmdir $dir" - $run rmdir $dir >/dev/null 2>&1 - fi - done - - exit $exit_status - ;; - - "") - $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: - - clean remove files from the build directory - 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 - ;; - -clean) - $echo \ -"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build 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, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - -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 - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -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-fast-install disable the fast-install mode - -no-install link a not-installable executable - -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 deleted file mode 100644 index 7789652e8..000000000 --- a/missing +++ /dev/null @@ -1,190 +0,0 @@ -#! /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 deleted file mode 100644 index 6b3b5fc5d..000000000 --- a/mkinstalldirs +++ /dev/null @@ -1,40 +0,0 @@ -#! /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/.cvsignore b/po/.cvsignore deleted file mode 100644 index ca5ebc2cf..000000000 --- a/po/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -POTFILES -Makefile.in -Makefile -sylpheed.pot -cat-id-tbl.c -*.gmo diff --git a/po/ChangeLog b/po/ChangeLog deleted file mode 100644 index 50a952885..000000000 --- a/po/ChangeLog +++ /dev/null @@ -1,117 +0,0 @@ -2001-07-02 - - * modified zh_TW.Big5.po (removed backslash escaping) so that the - newer gettext can process it. - -2001-07-02 gettextize <bug-gnu-utils@gnu.org> - - * Makefile.in.in: Upgrade to gettext-0.10.38. - -2001-07-01 - - * updated nl.po. - -2001-06-25 - - * updated es.po, it.po and nl.po. - -2001-06-21 - - * updated it.po and el.po. - -2001-06-20 - - * updated nl.po and zh_TW.Big5.po. - -2001-06-16 - - * updated de.po, el.po, nl.po, ru.po. - -2001-05-01 - - * updated ru.po, it.po, de.po. - -2001-04-20 - - * updated fr.po (thanks to P'tit Lu). - -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 - Franklin). - -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 deleted file mode 100644 index 32b737655..000000000 --- a/po/Makefile.in.in +++ /dev/null @@ -1,196 +0,0 @@ -# Makefile for program source directory in GNU NLS utilities package. -# Copyright (C) 1995-1997, 2000, 2001 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@ - -# These two variables depend on the location of this directory. -subdir = po -top_builddir = .. - -SHELL = /bin/sh -@SET_MAKE@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -datadir = @datadir@ -localedir = $(datadir)/locale -gettextsrcdir = $(datadir)/gettext/po - -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = @MKINSTALLDIRS@ -mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` - -CC = @CC@ -GMSGFMT = @GMSGFMT@ -MSGFMT = @MSGFMT@ -XGETTEXT = @XGETTEXT@ -MSGMERGE = msgmerge - -DEFS = @DEFS@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ - -INCLUDES = -I.. -I$(top_srcdir)/intl - -COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) - -POFILES = @POFILES@ -GMOFILES = @GMOFILES@ -DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ -$(POFILES) $(GMOFILES) - -POTFILES = \ - -CATALOGS = @CATALOGS@ - -.SUFFIXES: -.SUFFIXES: .c .o .po .pox .gmo .mo - -.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) --statistics -o $$file $< - - -all: all-@USE_NLS@ - -all-yes: $(CATALOGS) -all-no: - -# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot', -# otherwise packages like GCC can not be built if only parts of the source -# have been downloaded. - -$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in - $(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 ) - - -install: install-exec install-data -install-exec: -install-data: install-data-@USE_NLS@ - if test "$(PACKAGE)" = "gettext"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ - $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ - $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ - else \ - : ; \ - fi -install-data-no: all -install-data-yes: all - $(mkinstalldirs) $(DESTDIR)$(datadir) - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\.gmo$$//'`; \ - dir=$(localedir)/$$lang/LC_MESSAGES; \ - $(mkinstalldirs) $(DESTDIR)$$dir; \ - if test -r $$cat; then \ - $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ - echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \ - else \ - $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ - echo "installing $(srcdir)/$$cat as" \ - "$(DESTDIR)$$dir/$(PACKAGE).mo"; \ - fi; \ - done - -# 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/\.gmo$$//'`; \ - rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ - done - if test "$(PACKAGE)" = "gettext"; then \ - rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ - else \ - : ; \ - fi - -check: all - -dvi info tags TAGS ID: - -mostlyclean: - rm -f core core.* *.pox $(PACKAGE).po *.new.po - rm -fr *.o - -clean: mostlyclean - -distclean: clean - rm -f Makefile Makefile.in POTFILES *.mo - -maintainer-clean: distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - rm -f $(GMOFILES) - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: - $(MAKE) update-po - @$(MAKE) dist2 -# This is a separate target because 'update-po' must be executed before. -dist2: $(DISTFILES) - dists="$(DISTFILES)"; \ - for file in $$dists; do \ - if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ - cp -p $$dir/$$file $(distdir); \ - done - -update-po: Makefile - $(MAKE) $(PACKAGE).pot - if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \ - cd $(srcdir); \ - catalogs='$(GMOFILES)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\.gmo$$//'`; \ - echo "$$lang:"; \ - if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \ - mv -f $$lang.new.po $$lang.po; \ - else \ - echo "msgmerge for $$cat failed!"; \ - rm -f $$lang.new.po; \ - fi; \ - done - $(MAKE) update-gmo - -update-gmo: Makefile $(GMOFILES) - @: - -Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in - cd $(top_builddir) \ - && 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 deleted file mode 100644 index 3f30857f2..000000000 --- a/po/POTFILES.in +++ /dev/null @@ -1,78 +0,0 @@ -src/about.c -src/account.c -src/addressbook.c -src/addr_compl.c -src/alertpanel.c -src/automaton.c -src/base64.c -src/codeconv.c -src/compose.c -src/editjpilot.c -src/editldap.c -src/editldap_basedn.c -src/editvcard.c -src/export.c -src/filesel.c -src/filter.c -src/folder.c -src/foldersel.c -src/folderview.c -src/grouplistdialog.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/labelcolors.c -src/logwindow.c -src/main.c -src/mainwindow.c -src/manage_window.c -src/matcher.c -src/mbox.c -src/mbox_folder.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_customheader.c -src/prefs_display_header.c -src/prefs_filter.c -src/prefs_filtering.c -src/prefs_matcher.c -src/prefs_scoring.c -src/procheader.c -src/procmime.c -src/procmsg.c -src/progressdialog.c -src/recv.c -src/rfc822.c -src/rfc2015.c -src/scoring.c -src/select-keys.c -src/send.c -src/session.c -src/setup.c -src/sigstatus.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 -src/ssl.c diff --git a/po/cs.po b/po/cs.po deleted file mode 100644 index b12e712ac..000000000 --- a/po/cs.po +++ /dev/null @@ -1,4271 +0,0 @@ -# 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-06-20 17:53+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:90 -msgid "About" -msgstr "O aplikaci" - -#: src/about.c:199 -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:205 -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:210 -msgid "" -"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" -"\n" -msgstr "" - -#: src/about.c:214 -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:220 -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:226 -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:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1476 src/compose.c:3132 src/export.c:185 src/foldersel.c:176 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:334 src/main.c:342 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "OK" -msgstr "OK" - -#: src/account.c:101 -msgid "Reading all config for each account...\n" -msgstr "Naèítám nastavení pro v¹echny konta...\n" - -#: src/account.c:116 -#, c-format -msgid "Found label: %s\n" -msgstr "Nalezen popisek: %s\n" - -#: src/account.c:208 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" - -#: src/account.c:214 -msgid "Opening account edit window...\n" -msgstr "Otevírám okno pro úpravu konta...\n" - -#: src/account.c:361 -msgid "Creating account edit window...\n" -msgstr "Vytváøím okno pro úpravu konta...\n" - -#: src/account.c:366 -msgid "Edit accounts" -msgstr "Úprava konta" - -#: src/account.c:394 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2244 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "Jméno" - -#: src/account.c:395 src/prefs_account.c:632 -msgid "Protocol" -msgstr "Protokol" - -#: src/account.c:396 -msgid "Server" -msgstr "Server" - -#: src/account.c:415 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "Pøidat" - -#: src/account.c:421 -msgid "Edit" -msgstr "Úpravy" - -#: src/account.c:427 src/prefs_customheader.c:247 -msgid " Delete " -msgstr "Smazat" - -#: src/account.c:433 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "Dolù" - -#: src/account.c:439 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "Nahoru" - -#: src/account.c:453 -msgid " Set as usually used account " -msgstr " Nastavit jako bì¾nì u¾ívané konto " - -#: src/account.c:459 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "Zavøít" - -#: src/account.c:513 -msgid "Delete account" -msgstr "Smazat konto" - -#: src/account.c:514 -msgid "Do you really want to delete this account?" -msgstr "Opravdu chcete toto konto smazat?" - -#: src/account.c:515 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3306 src/folderview.c:1448 src/folderview.c:1491 -#: src/folderview.c:1590 src/folderview.c:1631 src/folderview.c:1730 -#: src/folderview.c:1763 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "Ano" - -#: src/account.c:515 src/compose.c:3306 src/folderview.c:1448 -#: src/folderview.c:1491 src/folderview.c:1590 src/folderview.c:1631 -#: src/folderview.c:1730 src/folderview.c:1763 -msgid "+No" -msgstr "+Ne" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -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:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -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:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/_Soubor/_Zavøít" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/_Nápovìda" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -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:369 -#: src/folderview.c:206 src/folderview.c:208 src/folderview.c:217 -#: src/folderview.c:219 src/folderview.c:228 src/folderview.c:230 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/_Úpravy" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/_Smazat" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "Po¹tovní adresa" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "Poznámky" - -#: src/addressbook.c:325 src/compose.c:2804 -msgid "Address book" -msgstr "Adresáø" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "Jméno:" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -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:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "Ne" - -#: src/addressbook.c:1000 src/folderview.c:1321 src/folderview.c:1522 -msgid "New folder" -msgstr "Nová slo¾ka" - -#: src/addressbook.c:1001 src/folderview.c:1322 -msgid "Input the name of new folder:" -msgstr "Zadejte jméno slo¾ky:" - -#: src/addressbook.c:1002 src/folderview.c:1323 src/folderview.c:1526 -msgid "NewFolder" -msgstr "Nová slo¾ka" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "Jméno u¾ existuje." - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "Nová skupina" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "Zadejte jméno skupiny:" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "Nová Skupina" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "Upravit skupinu" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "Zadejte jméno skupiny:" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "Upravit slo¾ku" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "Zadejte jméno slo¾ky:" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Opravdu smazat '%s' ?" - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "Upravit adresu" - -#: src/addressbook.c:1290 src/compose.c:2803 src/select-keys.c:302 -msgid "Address" -msgstr "Adresa" - -#: src/addressbook.c:1294 src/compose.c:1476 src/compose.c:3133 -#: src/compose.c:3703 src/export.c:186 src/foldersel.c:177 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:334 src/main.c:342 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "Cancel" -msgstr "Zru¹it" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "Naèítám adresáø..." - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s neexistuje.\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:869 src/imap.c:888 -#: src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 src/mh.c:816 -#: src/news.c:648 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:1003 -#: src/summaryview.c:1209 src/summaryview.c:1291 src/summaryview.c:1352 -#: src/summaryview.c:1809 src/summaryview.c:2287 src/summaryview.c:2310 -#: src/summaryview.c:2331 src/summaryview.c:2424 -msgid "done.\n" -msgstr "hotovo.\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "Exportuji adresáø do souboru..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "Neúspì¹ný zápis dat adresáøe.\n" - -#: src/alertpanel.c:119 src/compose.c:3306 src/main.c:332 -msgid "Notice" -msgstr "Poznámka" - -#: src/alertpanel.c:132 src/main.c:218 -msgid "Warning" -msgstr "Varování" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "Chyba" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "Vytváøím dialog pro varování...\n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "nemohu alokovat pamì»\n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/_Pøidat..." - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/_Odstranit" - -#: src/compose.c:370 src/folderview.c:209 src/folderview.c:220 -#: src/folderview.c:231 -msgid "/_Property..." -msgstr "/_Vlastosti..." - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/_Soubor/_Pøipojit soubor" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/_Soubor/_Vlo¾it soubor" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/_Soubor/Vlo¾it p_odpis" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/_Úpravy/_Zpìt" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/_Úpravy/Z_nova" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/_Úpravy/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/_Úpravy/_Vyjmout" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/_Úpravy/_Kopírovat" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/_Úpravy/V_lo¾it" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/_Úpravy/V_ybrat v¹e" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/_Úpravy/Upravit pomocí e_xterního editoru" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/_Zpráva" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/_Zpráva/_Poslat" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/_Zpráva/Poslat p_ozdìji" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/_Zpráva/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/_Zpráva/_Slepá kopie" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/_Zpráva/_Odpovìdìt na" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/_Zpráva/_Pøipojit" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/_Nástroje" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/_Nástroje/_Adresáø" - -#: src/compose.c:494 src/compose.c:564 src/compose.c:624 src/procmsg.c:687 -msgid "Can't get text part\n" -msgstr "" - -#: src/compose.c:556 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: soubor neexistuje\n" - -#: src/compose.c:568 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"Zaèátek pøeposílané zprávy:\n" -"\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "Soubor %s neexistuje\n" - -#: src/compose.c:1244 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "Nemohu zjistit délku souboru %s\n" - -#: src/compose.c:1248 -#, c-format -msgid "File %s is empty\n" -msgstr "Soubor %s je prázdný\n" - -#: src/compose.c:1269 -#, c-format -msgid "Message: %s" -msgstr "Zpráva: %s" - -#: src/compose.c:1375 -msgid " [Edited]" -msgstr "" - -#: src/compose.c:1377 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - psaní zprávy%s" - -#: src/compose.c:1380 -#, c-format -msgid "Compose message%s" -msgstr "Psaní zprávy%s" - -#: src/compose.c:1402 src/compose.c:3596 -msgid "Recipient is not specified." -msgstr "Není uveden pøíjemce." - -#: src/compose.c:1420 -msgid "can't get recipient list." -msgstr "" - -#: src/compose.c:1438 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" - -#: src/compose.c:1459 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "" - -#: src/compose.c:1473 -msgid "Queueing" -msgstr "Zaøazuji" - -#: src/compose.c:1474 -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:1480 src/compose.c:3608 -msgid "Can't queue the message." -msgstr "Zprávu nelze zaøadit." - -#: src/compose.c:1483 -msgid "Error occurred while sending the message." -msgstr "Pøi posílání zprávy nastala chyba." - -#: src/compose.c:1490 src/compose.c:3615 -msgid "Can't save the message to outbox." -msgstr "Zprávu nelze ulo¾it do výstupní schránky" - -#: src/compose.c:1516 src/compose.c:1637 src/compose.c:1723 src/utils.c:1540 -msgid "can't change file mode\n" -msgstr "nelze zmìnit mód souboru\n" - -#: src/compose.c:1542 -msgid "Can't convert the codeset of the message." -msgstr "Nelze zmìnit znakovou sadu nastavené zprávy" - -#: src/compose.c:1551 -msgid "can't write headers\n" -msgstr "nelze zapsat hlavièky\n" - -#: src/compose.c:1669 -msgid "saving sent message...\n" -msgstr "ukládám odeslanou zprávu...\n" - -#: src/compose.c:1674 -msgid "can't save message\n" -msgstr "zprávu nelze ulo¾it\n" - -#: src/compose.c:1680 src/compose.c:1787 -msgid "can't open mark file\n" -msgstr "nelze otevøít oznaèený soubor\n" - -#: src/compose.c:1703 -msgid "queueing message...\n" -msgstr "zaøazuji zprávu...\n" - -#: src/compose.c:1778 -msgid "can't queue the message\n" -msgstr "Zprávu nelze zaøadit\n" - -#: src/compose.c:1816 -#, c-format -msgid "Can't open file %s\n" -msgstr "Nelze otevøít soubor %s\n" - -#: src/compose.c:2170 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "vytváøím èíslo zprávy: %s\n" - -#: src/compose.c:2244 src/compose.c:3104 -msgid "MIME type" -msgstr "MIME typ" - -#: src/compose.c:2244 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "Délka" - -#: src/compose.c:2261 -msgid "Creating compose window...\n" -msgstr "Vytváøím okno pro psaní...\n" - -#: src/compose.c:2307 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "Od:" - -#: src/compose.c:2730 src/mainwindow.c:1359 src/prefs_account.c:501 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "Odeslat" - -#: src/compose.c:2731 -msgid "Send message" -msgstr "Poslat zprávu" - -#: src/compose.c:2738 -msgid "Send later" -msgstr "Poslat pozdìji" - -#: src/compose.c:2739 -msgid "Put into queue folder and send later" -msgstr "Zaøadit do výstupní fronty a odeslat pozdìji" - -#: src/compose.c:2746 src/folderview.c:738 -msgid "Draft" -msgstr "Koncept" - -#: src/compose.c:2747 -msgid "Save to draft folder" -msgstr "" - -#: src/compose.c:2756 -msgid "Insert" -msgstr "Vlo¾it" - -#: src/compose.c:2757 -msgid "Insert file" -msgstr "Vlo¾it soubor" - -#: src/compose.c:2764 -msgid "Attach" -msgstr "Pøíloha" - -#: src/compose.c:2765 -msgid "Attach file" -msgstr "Pøipojit soubor" - -#: src/compose.c:2774 src/prefs_common.c:1035 -msgid "Signature" -msgstr "Podpis" - -#: src/compose.c:2775 -msgid "Insert signature" -msgstr "Vlo¾it podpis" - -#: src/compose.c:2783 -msgid "Editor" -msgstr "Editor" - -#: src/compose.c:2784 -msgid "Edit with external editor" -msgstr "Úprava externím editorem" - -#: src/compose.c:2792 -msgid "Linewrap" -msgstr "" - -#: src/compose.c:2793 -msgid "Wrap long lines" -msgstr "" - -#: src/compose.c:3000 -msgid "Invalid MIME type." -msgstr "Neplatný MIME typ." - -#: src/compose.c:3018 -msgid "File doesn't exist or is empty." -msgstr "Soubor neexistuje nebo je prázdný." - -#: src/compose.c:3086 -msgid "Property" -msgstr "Vlastnosti" - -#: src/compose.c:3106 -msgid "Encoding" -msgstr "Kódování" - -#: src/compose.c:3129 -msgid "Path" -msgstr "Cesta k souboru" - -#: src/compose.c:3130 -msgid "File name" -msgstr "Jméno souboru" - -#: src/compose.c:3277 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "©patný pøíkaz v externím editoru: '%s'\n" - -#: src/compose.c:3303 -#, 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:3316 -#, c-format -msgid "Terminated process group id: %d" -msgstr "Pøeru¹en proces èíslo: %d" - -#: src/compose.c:3317 -#, c-format -msgid "Temporary file: %s" -msgstr "Doèasný soubor: %s" - -#: src/compose.c:3341 -msgid "Compose: input from monitoring process\n" -msgstr "Psaní: vstup z externího procesu\n" - -#. failed -#: src/compose.c:3374 -msgid "Couldn't exec external editor\n" -msgstr "Nelze spustit externí editor\n" - -#: src/compose.c:3378 -msgid "Couldn't write to file\n" -msgstr "Nelze zapisovat do souboru\n" - -#: src/compose.c:3380 -msgid "Pipe read failed\n" -msgstr "Nelze èíst\n" - -#: src/compose.c:3637 -msgid "can't remove the old draft message\n" -msgstr "" - -#: src/compose.c:3665 src/compose.c:3677 -msgid "Select file" -msgstr "Vybrat soubor" - -#: src/compose.c:3701 -msgid "Discard message" -msgstr "Zru¹it zprávu" - -#: src/compose.c:3702 -msgid "This message has been modified. discard it?" -msgstr "Obsah zprávy se zmìnil. Opravdu zru¹it?" - -#: src/compose.c:3703 -msgid "Discard" -msgstr "Zru¹it" - -#: src/compose.c:3703 -msgid "to Draft" -msgstr "udìlat koncept" - -#: src/export.c:122 -msgid "Export" -msgstr "" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "" - -#: src/export.c:154 -msgid "Source dir:" -msgstr "" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr " Vybrat... " - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "" - -#: src/foldersel.c:131 -msgid "Select folder" -msgstr "Vybrat slo¾ku" - -#: src/folderview.c:203 src/folderview.c:214 -msgid "/Create _new folder..." -msgstr "" - -#: src/folderview.c:204 src/folderview.c:215 -msgid "/_Rename folder..." -msgstr "" - -#: src/folderview.c:205 src/folderview.c:216 -msgid "/_Delete folder" -msgstr "/_Smazat slo¾ku" - -#: src/folderview.c:207 -msgid "/Remove _mailbox" -msgstr "" - -#: src/folderview.c:218 -msgid "/Remove _IMAP4 server" -msgstr "" - -#: src/folderview.c:225 -msgid "/_Subscribe to newsgroup..." -msgstr "" - -#: src/folderview.c:227 -msgid "/_Remove newsgroup" -msgstr "/Smazat d_iskusní skupinu" - -#: src/folderview.c:229 -msgid "/Remove _news server" -msgstr "/_Odebrat server novinek" - -#: src/folderview.c:240 -msgid "Folder" -msgstr "Slo¾ka" - -#: src/folderview.c:240 -msgid "New" -msgstr "Nová" - -#: src/folderview.c:241 src/prefs_common.c:2173 -msgid "Unread" -msgstr "Nepøeètené" - -#: src/folderview.c:241 -msgid "#" -msgstr "#" - -#: src/folderview.c:251 -msgid "Creating folder view...\n" -msgstr "Vytváøím náhled pro slo¾ku...\n" - -#: src/folderview.c:395 -msgid "Setting folder info...\n" -msgstr "Nastavuji informace o slo¾ce...\n" - -#: src/folderview.c:396 -msgid "Setting folder info..." -msgstr "Nastavuji informace o slo¾ce..." - -#: src/folderview.c:539 src/mainwindow.c:2092 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "Prohledávám slo¾ku %s%c%s ..." - -#: src/folderview.c:544 src/mainwindow.c:2097 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "Prohledávám slo¾ku %s ..." - -#: src/folderview.c:581 -msgid "Updating all folders..." -msgstr "" - -#: src/folderview.c:716 src/prefs_account.c:655 -msgid "Inbox" -msgstr "Doruèená po¹ta" - -#: src/folderview.c:721 -msgid "Outbox" -msgstr "Odeslaná po¹ta" - -#: src/folderview.c:726 -msgid "Queue" -msgstr "Fronta" - -#: src/folderview.c:731 -msgid "Trash" -msgstr "Odpadkový ko¹" - -#: src/folderview.c:1213 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Slo¾ka %s je vybrána\n" - -#: src/folderview.c:1327 src/folderview.c:1390 src/folderview.c:1531 -#, 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:1335 src/folderview.c:1399 src/folderview.c:1539 -#, c-format -msgid "The folder `%s' already exists." -msgstr "Slo¾ka '%s' u¾ existuje." - -#: src/folderview.c:1343 src/folderview.c:1547 -#, fuzzy, c-format -msgid "Can't create the folder `%s'." -msgstr "Nemohu odstranit slo¾ku '%s'\n" - -#: src/folderview.c:1382 -#, c-format -msgid "Input new name for `%s':" -msgstr "Zadejte nové jméno pro '%s' :" - -#: src/folderview.c:1384 -msgid "Rename folder" -msgstr "Pøejmenovat slo¾ku" - -#: src/folderview.c:1444 -#, 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:1447 src/folderview.c:1589 -msgid "Delete folder" -msgstr "Smazat slo¾ku " - -#: src/folderview.c:1453 src/folderview.c:1595 -#, fuzzy, c-format -msgid "Can't remove the folder `%s'." -msgstr "Nemohu odstranit slo¾ku '%s'\n" - -#: src/folderview.c:1487 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" - -#: src/folderview.c:1490 -msgid "Remove folder" -msgstr "" - -#: src/folderview.c:1523 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" - -#: src/folderview.c:1587 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "" - -#: src/folderview.c:1628 -#, c-format -msgid "Really delete IMAP4 server `%s'?" -msgstr "" - -#: src/folderview.c:1630 -msgid "Delete IMAP4 server" -msgstr "" - -#: src/folderview.c:1671 -msgid "Subscribe newsgroup" -msgstr "Podepsat diskusní skupinu" - -#: src/folderview.c:1672 -msgid "Input subscribing newsgroup:" -msgstr "" - -#: src/folderview.c:1681 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "Diskusní skupina '%s' u¾ existuje." - -#: src/folderview.c:1727 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Opravdu chcete smazat diskusní skupinu '%s' ?" - -#: src/folderview.c:1729 -msgid "Delete newsgroup" -msgstr "Smazat diskusní skupinu" - -#: src/folderview.c:1760 -#, c-format -msgid "Really delete news server `%s'?" -msgstr "Opravdu chcete smazat server zpráv '%s' ?" - -#: src/folderview.c:1762 -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:174 src/summaryview.c:1392 -msgid "(No From)" -msgstr "(není znám odesílatel)" - -#: src/headerview.c:189 src/summaryview.c:1408 -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:204 -#, 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:230 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "vytváøím spojení IMAP4 s %s:%d ...\n" - -#: src/imap.c:385 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "Zpráva %d u¾ byla v mezipamìti.\n" - -#: src/imap.c:395 -#, c-format -msgid "getting message %d...\n" -msgstr "Získávám zprávu %d...\n" - -#: src/imap.c:401 src/procmsg.c:587 -#, c-format -msgid "can't fetch message %d\n" -msgstr "" - -#: src/imap.c:430 -#, fuzzy, c-format -msgid "can't append message %s\n" -msgstr "zprávu nelze ulo¾it\n" - -#: src/imap.c:459 src/imap.c:516 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "zdrojová slo¾ka je stejná jako cílová.\n" - -#: src/imap.c:469 src/imap.c:521 src/mh.c:201 src/mh.c:267 -#, 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:473 src/imap.c:525 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "" - -#: src/imap.c:593 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "" - -#: src/imap.c:600 src/imap.c:639 -msgid "can't expunge\n" -msgstr "" - -#: src/imap.c:632 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "" - -#: src/imap.c:744 -msgid "can't create mailbox\n" -msgstr "" - -#: src/imap.c:781 -msgid "can't delete mailbox\n" -msgstr "" - -#: src/imap.c:807 -msgid "can't get envelope\n" -msgstr "Nemohu najít obálku\n" - -#: src/imap.c:813 -msgid "error occurred while getting envelope.\n" -msgstr "Vyskytla se chyba bìhem nacházení obálky.\n" - -#: src/imap.c:821 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "Nemohu analyzovat obálku: %s\n" - -#: src/imap.c:849 -#, fuzzy, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "\tVymazávám v¹echny zprávy z mezipamìti... " - -#: src/imap.c:882 -#, fuzzy -msgid "Deleting all cached messages... " -msgstr "\tVymazávám v¹echny zprávy z mezipamìti... " - -#: src/imap.c:896 -#, 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:929 -#, fuzzy -msgid "can't get namespace\n" -msgstr "Nemohu najít obálku\n" - -#: src/imap.c:1346 -#, c-format -msgid "can't select folder: %s\n" -msgstr "" - -#: src/imap.c:1401 -#, fuzzy, c-format -msgid "can't get the next uid of folder: %s\n" -msgstr "Zadejte jméno slo¾ky:" - -#: src/imap.c:1423 -msgid "IMAP4 login failed.\n" -msgstr "Neúspì¹né pøihlá¹ení k IMAP4.\n" - -#: src/imap.c:1636 -#, fuzzy, c-format -msgid "can't append %s to %s\n" -msgstr "Nemohu zkopírovat zprávu %s do %s\n" - -#: src/imap.c:1656 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "" - -#: src/imap.c:1681 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "" - -#: src/imap.c:1695 -msgid "error while imap command: EXPUNGE\n" -msgstr "" - -#: src/import.c:126 -msgid "Import" -msgstr "Import" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "" - -#: src/import.c:158 -msgid "Importing file:" -msgstr "Importuji soubor :" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Cílový adresáø:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Vybrat importovaný soubor " - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "Nahrazuji novými zprávami" - -#: src/inc.c:384 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "" - -#: src/inc.c:388 src/news.c:131 -msgid "Input password" -msgstr "Zadejte heslo" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "" - -#: src/inc.c:412 -msgid "Done" -msgstr "" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "" - -#: src/inc.c:487 -#, 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:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s : Kontroluji stav po¹ty" - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "Pøipojuji se na POP3 server: %s ..." - -#: src/inc.c:527 src/inc.c:660 -#, 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:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "Nemohu se spojit s POP3 serverem: %s:%d" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "Obnovuji zprávu (%d / %d) (%d / %d bytes)" - -#: src/inc.c:719 -#, fuzzy -msgid "Authorizing..." -msgstr "Ovìøuji" - -#: src/inc.c:724 -#, fuzzy -msgid "Getting the number of new messages (STAT)..." -msgstr "Zji¹»uji poèet nových zpráv " - -#: src/inc.c:729 -#, fuzzy -msgid "Getting the number of new messages (LAST)..." -msgstr "Zji¹»uji poèet nových zpráv " - -#: src/inc.c:734 -#, fuzzy -msgid "Getting the number of new messages (UIDL)..." -msgstr "Zji¹»uji poèet nových zpráv " - -#: src/inc.c:739 -#, fuzzy -msgid "Getting the size of messages (LIST)..." -msgstr "Zji¹»uji poèet nových zpráv " - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "Vymazávám zprávu" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "Zaøazuji" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "zpráva nebyla pøijata\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "Vyskytla se chyba bìhem zpracovávání po¹ty." - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "Nezbylo ¾ádné místo na disku." - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "®ádné zprávy v místí po¹tovní schránce.\n" - -#: src/inc.c:881 -#, 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:108 -#, 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:149 -msgid "g_thread is not supported by glib.\n" -msgstr "" - -#: src/main.c:219 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" - -#: src/main.c:300 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "" - -#: src/main.c:303 -msgid " --compose [address] open composition window" -msgstr "" - -#: src/main.c:304 -msgid " --receive receive new messages" -msgstr "" - -#: src/main.c:305 -msgid " --receive-all receive new messages of all accounts" -msgstr "" - -#: src/main.c:306 -msgid " --debug debug mode" -msgstr "" - -#: src/main.c:307 -msgid " --help display this help and exit" -msgstr "" - -#: src/main.c:308 -msgid " --version output version information and exit" -msgstr "" - -#: src/main.c:333 -msgid "Composing message exists. Really quit?" -msgstr "Vytváøená zpráva existuje. Opravdu chcete skonèit ?" - -#: src/main.c:340 -msgid "Queued messages" -msgstr "" - -#: src/main.c:341 -msgid "Some unsent messages are queued. Exit now?" -msgstr "" - -#. remote command mode -#: src/main.c:412 -msgid "another Sylpheed is already running.\n" -msgstr "" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "" - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/_Soubor/Znovu naèíst slo¾ky" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "" - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "" - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/_Soubor/_Importovat soubor mbox..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "" - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/_Soubor/Ulo¾it jako..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/_Soubor/_Tisk..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/_Soubor/_Konec" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/_Upravit/_Hledat" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/Z_obrazit" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/Z_obrazit/_Strom slo¾ek " - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/Z_obrazit/_Zobrazit zprávu" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/Z_obrazit/_Panel nástrojù " - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/Z_obrazit/_Panel nástrojù/Ikony _a text" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/Z_obrazit/_Panel nástrojù/_Ikony" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/Z_obrazit/_Panel nástrojù/_Text" - -#: src/mainwindow.c:364 -#, fuzzy -msgid "/_View/_Toolbar/_None" -msgstr "/Z_obrazit/_Panel nástrojù/_Ikony" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/Z_obrazit/_Informaèní panel " - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/Z_obrazit/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/Z_obrazit/Samostatný s_trom slo¾ek " - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/Z_obrazit/Samostané pro_hlédnutí zprávy" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/Z_obrazit/_Znaková sada/_Autodetekce " - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/Z_obrazit/_Znaková sada/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/Z_obrazit/_Znaková sada/7bitová ascii (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/Z_obrazit/_Znaková sada/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/Z_obrazit/_Znaková sada/Západní (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/Z_obrazit/_Znaková sada/Støedoevropská (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/Z_obrazit/_Znaková sada/Baltská (ISO-8859-13)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/Z_obrazit/_Znaková sada/Baltská (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/Z_obrazit/_Znaková sada/Øecká (ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/Z_obrazit/_Znaková sada/Turecká (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/Z_obrazit/_Znaková sada/Azbuka (ISO-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/Z_obrazit/_Znaková sada/Azbuka (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/Z_obrazit/_Znaková sada/Azbuka (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/Z_obrazit/_Znaková sada/Japonská (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/Z_obrazit/_Znaková sada/Japonská (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/Z_obrazit/_Znaková sada/Japonská (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/Z_obrazit/_Znaková sada/Japonská (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/Z_obrazit/_Znaková sada/Zjednodu¹ená èínská (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/Z_obrazit/_Znaková sada/Tradièní èínská (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/Z_obrazit/_Znaková sada/Tradièní èínská (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/Z_obrazit/_Znaková sada/Èínská (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/Z_obrazit/_Znaková sada/Korejská (EUC-_KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/Z_obrazit/_Znaková sada/Korejská (ISO-2022-KR)" - -#: src/mainwindow.c:445 -#, fuzzy -msgid "/_Message/Get new ma_il" -msgstr "/_Zpráva/_Pøíjem nové po¹ty " - -#: src/mainwindow.c:446 -#, fuzzy -msgid "/_Message/Get from _all accounts" -msgstr "/_Zpráva/Pøijmout _ze v¹ech kont" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/_Zpráva/Odeslat pozdr¾ené zprávy" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/_Zpráva/_Napsat novou zprávu " - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/_Zpráva/_Odpovìdìt" - -#: src/mainwindow.c:454 -#, fuzzy -msgid "/_Message/Repl_y to sender" -msgstr "/_Zpráva/_Odpovìdìt na" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/_Zpráva/Odpovìdìt _v¹em" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/_Zpráva/Pøedat dá_l" - -#: src/mainwindow.c:457 -#, fuzzy -msgid "/_Message/Forward as a_ttachment" -msgstr "/_Zpráva/Pøepo¹li jako pøílohu" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/_Zpráva/_Pøesunout..." - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "" - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/_Zpráva/S_mazat" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/_Zpráva/_Oznaèit" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/_Zpráva/_Oznaèit/_Oznaèit" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/_Zpráva/_Oznaèit/_Zru¹it oznaèení" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/_Zpráva/_Oznaèit/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/_Zpráva/_Oznaèit/Oznaèit jako nepø_eètené" - -#: src/mainwindow.c:468 -#, fuzzy -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/_Zpráva/_Oznaèit/Oznaèit jako nepø_eètené" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/_Zpráva/Otevøít v novém _oknì" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/_Zpráva/Zobrazit v¹echny _hlavièky" - -#: src/mainwindow.c:474 -#, fuzzy -msgid "/_Message/Re-_edit" -msgstr "/_Zpráva/_Poslat" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/_Pøehled" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/_Pøehled/_Smazat duplikované zprávy" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/_Pøehled/_Filtr zpráv " - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/_Pøehled/S_pustit" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/_Pøehled/_Aktualizovat" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/_Pøehled/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/_Pøehled/Pø_edchozí zpráva" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/_Pøehled/_Dal¹í zpráva" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/_Pøehled/Dal¹í nepøeè_tená zpráva" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/_Pøehled/_Jít do jiné slo¾eky" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/_Pøehled/Setøíd_it" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/_Pøehled/Setøíd_it/Setøídit podle _èísla" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/_Pøehled/Setøíd_it/Setøídit podle _velikosti " - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/_Pøehled/Setøíd_it/Setøídit podle _data " - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/_Pøehled/Setøíd_it/Setøídit podle _od koho" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/_Pøehled/Setøíd_it/Setøídit podle pø_edmìtu" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/_Pøehled/Setøíd_it/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/_Pøehled/Setøíd_it/_Získat z pøedmìtu" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/_Pøehled/Podle tématu" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/_Pøehled/Ne podle tématu" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/_Pøehled/Nastavit polo¾ku z_obrazení" - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/_Nástroje/Okno záznamù " - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/_Nastavení" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/_Nastavení/_Hlavní nastavení..." - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "" - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/_Nastavení/_Nastavení úètu..." - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/_Nastavení/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/_Nastavení/Vytvoøit _nové konto..." - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/_Nastavení/_Úprava kont..." - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/_Nastavení/_Zmìna aktuálního konta" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/Nápo_vìda/_Manuál" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/Nápo_vìda/_Manuál/_Anglicky" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/Nápo_vìda/_Manuál/_Japonsky" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/Nápo_vìda/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "Vytváøím hlavní okno...\n" - -#: src/mainwindow.c:673 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "Hlavní okno: barevné rozvr¾ení %d bylo neúspì¹né\n" - -#: src/mainwindow.c:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "Neoznaèený" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "¾ádný" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "Souèasné konto: %s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "pozice okna: x = %d, y = %d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "" - -#: src/mainwindow.c:978 -msgid "" -"Input the location of mailbox.\n" -"If the existing mailbox is specified, it will be\n" -"scanned automatically." -msgstr "" - -#: src/mainwindow.c:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "" - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "" - -#: src/mainwindow.c:995 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:1141 -msgid "Setting widgets..." -msgstr "" - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "Stahnout" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "Pøeèíst nové zprávy" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "Stahnout" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "Pøeèíst novou po¹tu ze v¹ech úètù" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "Poslat pozdr¾ené zprávy" - -#: src/mainwindow.c:1370 src/prefs_account.c:503 src/prefs_common.c:638 -msgid "Compose" -msgstr "Napsat" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "Napsat novou zprávu" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "Odpovìdìt" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "Odpovìdìt na zprávu" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "Odpov. v¹em" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "Odpov. v¹em" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "Pøeposlat" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "Pøedat zprávu dál" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "Smazat zprávu" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "Provést" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "Provést oznaèený proces " - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "Dal¹í nepøeètenou zprávu" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "Nastavení" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "Hlavní nastavení" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "Konto" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "Nastavení konta" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit" -msgstr "Ukonèení programu" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit this program?" -msgstr "Chcete ukonèit tento program?" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "Neúspì¹né poslání zprávy z fronty." - -#: src/mainwindow.c:1924 -#, c-format -msgid "forced charset: %s\n" -msgstr "Vnucená znaková sada: %s\n" - -#: src/mbox.c:68 -#, 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:78 -msgid "can't read mbox file.\n" -msgstr "Nemohu pøeèíst soubor s po¹tovní schránkou.\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "Neplatný formát po¹tovní schránky: %s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "Selhání po¹tovní schránky: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "Nemohu otevøít doèasný soubor\n" - -#: 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 "Nemohu zapisovat do doèasného souboru\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "%d zpráv nalezeno.\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "Nemohu vytvoøit uzamèený soubor %s\n" - -#: 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 "Nemohu vytvoøit %s\n" - -#: src/mbox.c:262 -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:291 -#, c-format -msgid "can't lock %s\n" -msgstr "Nemohu uzamknout %s\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "Neplatný typ zámku\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "Nemohu uzamknout %s\n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "nemù¾u smazat mailbox.\n" - -#: 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 "Vyvolávám zobrazení zprávy...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "Nemohu zkopírovat zprávu %s do %s\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "Nemohu otevøít oznaèený soubor.\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "" - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Poslední poèet v adresáøi %s = %d\n" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "\tHledám zprávy mimo mezipamìt... " - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "%d zprávy(z) mimo mezipamì» byly nalezeny.\n" - -#: src/mh.c:813 -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:113 -msgid "/_Open" -msgstr "/_Otevøít" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "" - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/_Zobrazit jako text" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "/_Ulo¾it jako..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "MIME Typ" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "Vyvolávám zobrazení MIME...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "Nemohu získat èást z mnohaèás»ové zprávy." - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "Nemohu ulo¾it èást z mnohaèás»ové zprávy." - -#: src/mimeview.c:708 src/summaryview.c:2018 -msgid "Save as" -msgstr "Ulo¾it jako" - -#: src/mimeview.c:714 src/summaryview.c:2023 -msgid "Overwrite" -msgstr "Pøepsat" - -#: src/mimeview.c:715 src/summaryview.c:2024 -msgid "Overwrite existing file?" -msgstr "Pøepsat existující soubor?" - -#: src/mimeview.c:769 -#, fuzzy -msgid "Open with" -msgstr "Pøi ukonèení" - -#: src/mimeview.c:770 -#, fuzzy, c-format -msgid "" -"Enter the command line to open file:\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/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "Neplatná pøíkazová øádka prohlí¾eèe MIME: '%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "Vytváøím NNTP spojení s %s:%d ...\n" - -#: src/news.c:176 -#, 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:245 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "èlánek %d u¾ byl v mezipamìti.\n" - -#: src/news.c:257 -#, fuzzy, c-format -msgid "can't select group %s\n" -msgstr "Nemohu nastavit skupinu: %s\n" - -#: src/news.c:262 -#, c-format -msgid "getting article %d...\n" -msgstr "Získávám èlánek %d...\n" - -#: src/news.c:267 -#, c-format -msgid "can't read article %d\n" -msgstr "Nemohu èíst èlánek %d\n" - -#: src/news.c:299 -msgid "can't post article.\n" -msgstr "" - -#: src/news.c:323 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "Nemohu obnovit èlánek %d\n" - -#: src/news.c:393 -#, c-format -msgid "can't set group: %s\n" -msgstr "Nemohu nastavit skupinu: %s\n" - -#: src/news.c:400 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "neplatný rozstah èlánku: %d - %d\n" - -#: src/news.c:409 -msgid "no new articles.\n" -msgstr "®ádný nový èlánek.\n" - -#: src/news.c:422 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "" - -#: src/news.c:425 -msgid "can't get xover\n" -msgstr "" - -#: src/news.c:431 -msgid "error occurred while getting xover.\n" -msgstr "Vyskytla se chyba bìhem získávání xover.\n" - -#: src/news.c:439 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "Neplatná xover øádka: %s\n" - -#: src/news.c:456 src/news.c:481 -#, fuzzy -msgid "can't get xhdr\n" -msgstr "nelze zapsat hlavièky\n" - -#: src/news.c:464 src/news.c:489 -#, fuzzy -msgid "error occurred while getting xhdr.\n" -msgstr "Vyskytla se chyba bìhem získávání xover.\n" - -#: src/news.c:613 -#, fuzzy, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "\tVymazávám v¹echny èlánky z mezipamìti... " - -#: src/news.c:642 -msgid "\tDeleting all cached articles... " -msgstr "\tVymazávám v¹echny èlánky z mezipamìti... " - -#: src/nntp.c:52 -#, 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:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "Chyba protokolu: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "Chyba protokolu\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "" - -#: src/passphrase.c:244 -#, c-format -msgid "" -"%sPlease enter the passphrase for:\n" -"\n" -" %.*s \n" -"(%.*s)\n" -msgstr "" - -#: src/passphrase.c:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "Vyskytla se chyba v autorizaci\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "" - -#: src/pop.c:171 src/pop.c:212 -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:364 -#: src/prefs_account.c:378 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -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:409 -msgid "Opening account preferences window...\n" -msgstr "Otevøení okna s nastavením konta...\n" - -#: src/prefs_account.c:436 -#, c-format -msgid "Account%d" -msgstr "Konto%d" - -#: src/prefs_account.c:449 -msgid "Preferences for new account" -msgstr "Nastavení pro nové konto" - -#: src/prefs_account.c:454 -msgid "Preferences for each account" -msgstr "Nastavení pro ka¾dé konto" - -#: src/prefs_account.c:477 -msgid "Creating account preferences window...\n" -msgstr "Vyvolání okna pro nastavení konta...\n" - -#: src/prefs_account.c:497 -msgid "Basic" -msgstr "Základní" - -#: src/prefs_account.c:499 src/prefs_common.c:634 -msgid "Receive" -msgstr "Pøijmout" - -#: src/prefs_account.c:506 src/prefs_common.c:645 -msgid "Privacy" -msgstr "" - -#: src/prefs_account.c:509 -msgid "Advanced" -msgstr "Roz¹íøený" - -#: src/prefs_account.c:563 -msgid "Name of this account" -msgstr "Jméno tohoto konta" - -#: src/prefs_account.c:572 -msgid "Usually used" -msgstr "Obvykle pou¾itý" - -#: src/prefs_account.c:576 -msgid "Personal information" -msgstr "Osobní informace" - -#: src/prefs_account.c:585 -msgid "Full name" -msgstr "Celé jméno" - -#: src/prefs_account.c:591 -msgid "Mail address" -msgstr "Po¹tovní adresa" - -#: src/prefs_account.c:597 -msgid "Organization" -msgstr "Organizace" - -#: src/prefs_account.c:621 -msgid "Server information" -msgstr "Informace o serveru" - -#: src/prefs_account.c:642 -msgid "POP3 (normal)" -msgstr "POP3 (normální)" - -#: src/prefs_account.c:644 -msgid "POP3 (APOP auth)" -msgstr "" - -#: src/prefs_account.c:646 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:648 -msgid "News (NNTP)" -msgstr "" - -#: src/prefs_account.c:650 -msgid "None (local)" -msgstr "®ádný (místní)" - -#: src/prefs_account.c:672 -msgid "This server requires authentication" -msgstr "" - -#: src/prefs_account.c:711 -msgid "News server" -msgstr "" - -#: src/prefs_account.c:717 -msgid "Server for receiving" -msgstr "Server pro pøíjem" - -#: src/prefs_account.c:723 -msgid "SMTP server (send)" -msgstr "SMTP server (k odesílání)" - -#: src/prefs_account.c:730 -msgid "User ID" -msgstr "U¾ivatelské èíslo" - -#: src/prefs_account.c:736 -msgid "Password" -msgstr "Heslo" - -#: src/prefs_account.c:786 -msgid "POP3" -msgstr "" - -#: src/prefs_account.c:794 -msgid "Remove messages on server when received" -msgstr "Smazat zprávy na serveru po jejich pøijmutí" - -#: src/prefs_account.c:796 -#, fuzzy -msgid "Download all messages on server" -msgstr "Pøijmout v¹echny zprávy ze serveru" - -#: src/prefs_account.c:799 -msgid "`Get all' checks for new mail on this account" -msgstr "" - -#: src/prefs_account.c:801 -msgid "Filter messages on receiving" -msgstr "Filtr zpráv k pøijímání" - -#: src/prefs_account.c:838 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "Hlavièka" - -#: src/prefs_account.c:845 -msgid "Add Date header field" -msgstr "Pøidat pole s datovou hlavièkou" - -#: src/prefs_account.c:846 -msgid "Generate Message-ID" -msgstr "Vytvoøit èíslo zprávy" - -#: src/prefs_account.c:853 -msgid "Add user-defined header" -msgstr "Pøidat u¾ivatelsky definovanou hlavièku" - -#: src/prefs_account.c:855 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr "Upravuji..." - -#: src/prefs_account.c:865 -msgid "Automatically set following addresses" -msgstr "Automaticky nastavit následující adresy" - -#: src/prefs_account.c:874 -msgid "Cc" -msgstr "Kopie" - -#: src/prefs_account.c:887 -msgid "Bcc" -msgstr "Slepá kopie" - -#: src/prefs_account.c:900 -msgid "Reply-To" -msgstr "Odpovìdìt na" - -#: src/prefs_account.c:913 -msgid "Authentication" -msgstr "" - -#: src/prefs_account.c:921 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "" - -#: src/prefs_account.c:923 -msgid "Authenticate with POP3 before sending" -msgstr "" - -#: src/prefs_account.c:957 -msgid "Signature file" -msgstr "Podepsaný soubor" - -#: src/prefs_account.c:986 -msgid "Sign key" -msgstr "" - -#: src/prefs_account.c:994 -msgid "Use default GnuPG key" -msgstr "" - -#: src/prefs_account.c:1003 -msgid "Select key by your email address" -msgstr "" - -#: src/prefs_account.c:1012 -msgid "Specify key manually" -msgstr "" - -#: src/prefs_account.c:1028 -msgid "User or key ID:" -msgstr "" - -#: src/prefs_account.c:1073 -msgid "Specify SMTP port" -msgstr "Urèete SMTP port" - -#: src/prefs_account.c:1085 -msgid "Specify POP3 port" -msgstr "Urèete POP3 port" - -#: src/prefs_account.c:1097 -msgid "Specify domain name" -msgstr "Urèete jméno domény" - -#: src/prefs_account.c:1144 -msgid "Mail address is not entered." -msgstr "Po¹tovní adresa nebyla zadána." - -#: src/prefs_account.c:1149 -msgid "SMTP server is not entered." -msgstr "SMTP server nebyl zadáno." - -#: src/prefs_account.c:1154 -msgid "User ID is not entered." -msgstr "U¾ivatelsé èíslo nabylo zadáno." - -#: src/prefs_account.c:1159 -msgid "POP3 server is not entered." -msgstr "POP3 server nebyl zadáno." - -#: src/prefs_account.c:1164 -msgid "IMAP4 server is not entered." -msgstr "IMAP4 server nebyl zadáno." - -#: src/prefs_account.c:1169 -msgid "NNTP server is not entered." -msgstr "NNTP server nebyl zadáno." - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "Vytváøím okno hlavního nastavení...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "Hlavní nastavení" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "Zobrazit" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "Zpráva" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "Rozhraní" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "Ostatní" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "Externí program" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "Pou¾ít externí program k zaèlenìní" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "Cesta k programu" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "Místní Spool" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "Filtr na zaèlenìní" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "Spool adresáø" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "Automatická kontrola nové po¹ty" - -#: src/prefs_common.c:759 -msgid "each" -msgstr "ka¾dý" - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "minuta(y)" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "Kontrola nové po¹ta pøi spu¹tìní" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "Nová" - -#: src/prefs_common.c:790 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" - -#: src/prefs_common.c:858 -msgid "Use external program for sending" -msgstr "Pou¾ít externí program pro posílání" - -#: src/prefs_common.c:882 -#, fuzzy -msgid "Save sent messages to outbox" -msgstr "Ulo¾it poslanou zprávu do Odeslaná po¹ta" - -#: src/prefs_common.c:884 -#, fuzzy -msgid "Queue messages that fail to send" -msgstr "Fronta zpráv, která byla po¹kozena pøi posílání" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "Výstupní znaková sada" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "Automaticky" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "7bitový ascii (US-ASCII)" - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "Západní (ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "Støedoevropská (ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "Baltická (ISO-8859-13)" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "Baltická (ISO-8859-4)" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "Øecká (ISO-8859-7)" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "Turecká (ISO-8859-9)" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "Azbuka (ISO-8859-5)" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "Azbuka (KOI8-R)" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "Azbuka (Windows-1251)" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "Azbuka (KOI8-U)" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "Japonská (ISO-2022-JP)" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "Japonská (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "Japonská (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "Zjednodu¹ená èínská (GB2312)" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "Tradièní èínská (Big5)" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "Tradièní èínská (EUC-TW)" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "Èínská (ISO-2022-CN)" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "Korejská (EUC-KR)" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "Zaøazování" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "Zaøadit zprávu, kdy¾ odpovídá" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "Zaøazovací znaèka" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "Formát zaøazení:" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr " Popis symbolù " - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "Automaticky vlo¾it podpis" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "Oddìlovaè podpisu" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "Písmo" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "" - -#: src/prefs_common.c:1160 -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:1163 -msgid "Display unread number next to folder name" -msgstr "" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "" - -#: src/prefs_common.c:1176 -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:1178 -msgid "Enable horizontal scroll bar" -msgstr "" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr " Nastavení zobrazení souhrného odstavce... " - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "Povolit zabarvení zpráv" - -#: src/prefs_common.c:1297 -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:1299 -msgid "Display header pane above message view" -msgstr "" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "Zobrazit krátkou hlavièku pøi zobrazení zprávy" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "Prázdná øádka" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "pixel(y)" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "Vynechat prázdné místo v hlavièce " - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "" - -#: src/prefs_common.c:1554 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "Emulovat chování my¹i z Emacsu" - -#: src/prefs_common.c:1561 -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:1565 -msgid "Go to inbox after receiving new mail" -msgstr "" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "" - -#: src/prefs_common.c:1580 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" - -#: src/prefs_common.c:1587 -msgid "Add address to destination when double-clicked" -msgstr "" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "Pøi ukonèení" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "Potvrdit ukonèení" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "" - -#: src/prefs_common.c:1648 -#, 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:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "Pøíkaz" - -#: src/prefs_common.c:1673 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "" - -#: src/prefs_common.c:1689 -#, 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:1752 -msgid "Set message colors" -msgstr "" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "Popis symbolù" - -#: src/prefs_common.c:2052 -#, 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:2155 -msgid "Set display item" -msgstr "Nastavit zobrazení odstavce" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "Oznaèit" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "Èíslo" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "Datum" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "Od" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "Pøedmìt" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "Výbìr písma" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "" - -#: src/prefs_customheader.c:150 -#, fuzzy -msgid "Creating custom header setting window...\n" -msgstr "Vytváøím hlavièku okna...\n" - -#: src/prefs_customheader.c:168 -#, fuzzy -msgid "Custom header setting" -msgstr "/_Zobrazit jako text" - -#: src/prefs_customheader.c:212 -msgid "Value" -msgstr "" - -#: src/prefs_customheader.c:320 -#, fuzzy -msgid "Reading custom header configuration...\n" -msgstr "Naèítání nastavení filtru...\n" - -#: src/prefs_customheader.c:365 -#, fuzzy -msgid "Writing custom header configuration...\n" -msgstr "Zapisování nastavení filtru...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "Jméno hlavièky naní nastavené." - -#: src/prefs_customheader.c:541 -#, fuzzy -msgid "Delete header" -msgstr "Smazat slo¾ku " - -#: src/prefs_customheader.c:542 -#, fuzzy -msgid "Do you really want to delete this header?" -msgstr "Opravdu chcete smazat toto pravítko?" - -#: src/prefs_display_header.c:187 -#, fuzzy -msgid "Creating display header setting window...\n" -msgstr "Vytváøím hlavièku okna...\n" - -#: src/prefs_display_header.c:210 -#, fuzzy -msgid "Display header setting" -msgstr "/_Zobrazit jako text" - -#: src/prefs_display_header.c:237 -#, fuzzy -msgid "Header name" -msgstr "Hlavièka" - -#: src/prefs_display_header.c:269 -#, fuzzy -msgid "Displayed Headers" -msgstr "Zobrazuji hlavièku %s ...\n" - -#: src/prefs_display_header.c:327 -#, fuzzy -msgid "Hidden headers" -msgstr "Hlavièka" - -#: src/prefs_display_header.c:357 -#, fuzzy -msgid "Show all unspecified headers" -msgstr "/Zobrazit v¹echny _hlavièky" - -#: src/prefs_display_header.c:382 -#, fuzzy -msgid "Reading configuration for displaying headers...\n" -msgstr "Naèítám konfiguraci...\n" - -#: src/prefs_display_header.c:420 -#, fuzzy -msgid "Writing configuration for displaying headers...\n" -msgstr "Zapisování nastavení filtru...\n" - -#: src/prefs_display_header.c:552 -#, fuzzy -msgid "This header is already in the list." -msgstr "Slo¾ka '%s' u¾ existuje." - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "Doporuèené pravítka" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "Obsluha" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(¾ádný)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "Klíèové slovo" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "Tvrzení" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "obsahuje" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "neobsahuje" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "Místo urèení" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "Pou¾ít regulární výraz " - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "Nepøijímat" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "Registrovat" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr " Nahradit " - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "Naèítání nastavení filtru...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "Zapisování nastavení filtru...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "(Nový)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "Místo urèení není nastavené." - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "Smazat pravidlo" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -msgstr "Opravdu chcete smazat toto pravítko?" - -#: 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:457 -msgid "Mark file not found.\n" -msgstr "Oznaèený soubor nebyl nalezen.\n" - -#: src/procmsg.c:459 -#, 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:475 -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:480 -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:663 -msgid "Sending queued message failed.\n" -msgstr "Neúspì¹né poslání zprávy z fronty.\n" - -#: src/procmsg.c:720 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "Neplatný pøíkazoví øádek tisku: '%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "Vytváøím dialog procesu...\n" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "Vyskytla se chyba bìhem obnovy dat.\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "Nemohu zapisovat do souboru.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "" - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr "" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "Fronta hlavièek zpráv je po¹kozená.\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "" - -#: src/send.c:250 -#, fuzzy, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "Pøipojuji se na SMTP serverem: %s ...\n" - -#: src/send.c:254 -msgid "Connecting" -msgstr "" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "" - -#: src/send.c:262 -#, fuzzy -msgid "Sending" -msgstr "Odeslat" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "" - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "" - -#: src/send.c:292 -#, fuzzy, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "Obnovuji zprávu (%d / %d) (%d / %d bytes)" - -#: src/send.c:309 -#, fuzzy -msgid "Quitting..." -msgstr "Zaøazuji" - -#: src/send.c:330 -#, 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:341 -msgid "Error occurred while sending HELO\n" -msgstr "Vyskytla se chyba bìhem posílání HELO\n" - -#: src/send.c:357 -#, fuzzy -msgid "Sending message" -msgstr "Poslat zprávu" - -#: 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:289 -msgid "/M_ove..." -msgstr "/_Pøesunout..." - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/_Kopírovat..." - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/S_pustit" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/_Oznaèit" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/_Oznaèit/_Oznaèit" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/_Oznaèit/_Zru¹it oznaèení" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/_Oznaèit/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "/_Oznaèit/Oznaèit jak_o nepøeètené" - -#: src/summaryview.c:298 -#, fuzzy -msgid "/_Mark/Mark as rea_d" -msgstr "/_Oznaèit/Oznaèit jak_o nepøeètené" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/_Odpovìdìt" - -#: src/summaryview.c:302 -#, fuzzy -msgid "/Repl_y to sender" -msgstr "/Odpovìdìt _v¹em" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/Odpovìdìt _v¹em" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/Pø_edat dál" - -#: src/summaryview.c:305 -#, fuzzy -msgid "/Forward as a_ttachment" -msgstr "/Pøeposlat jako pøílohu" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/Otevøít v novém _oknì" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/Zobrazit v¹echny _hlavièky" - -#: src/summaryview.c:311 -#, fuzzy -msgid "/Re-_edit" -msgstr "/_Úpravy" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/_Tisknout..." - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "/Vybrat _v¹e" - -#: src/summaryview.c:322 -msgid "M" -msgstr "M" - -#: src/summaryview.c:322 -msgid "U" -msgstr "U" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "Vytváøím celkový pohled...\n" - -#: src/summaryview.c:352 -msgid "No." -msgstr "Èís." - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "Zpracovat oznaèené" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "Zbyly nìjaké oznaèené, zpracovat je ?" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"prázná slo¾ka\n" -"\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Prohledávám slo¾ku (%s)..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "Hotovo." - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "®ádná nepøeètená zpráva" - -#: src/summaryview.c:816 -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:957 src/summaryview.c:959 -msgid "Attracting messages by subject..." -msgstr "Získávám zprávy od osoby..." - -#: src/summaryview.c:1102 -#, c-format -msgid "%d deleted" -msgstr "%d zmazané" - -#: src/summaryview.c:1106 -#, c-format -msgid "%s%d moved" -msgstr "%s%d pøemístìné" - -#: src/summaryview.c:1107 src/summaryview.c:1114 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1112 -#, c-format -msgid "%s%d copied" -msgstr "" - -#: src/summaryview.c:1129 -msgid " item(s) selected" -msgstr " polo¾ka(y) vybrána(y)" - -#: src/summaryview.c:1140 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d nová(é), %d nepøeètená(é), celkem %d (%s)" - -#: src/summaryview.c:1146 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d nových, %d nepøeètených, %d celkem" - -#: src/summaryview.c:1187 src/summaryview.c:1188 -msgid "Sorting summary..." -msgstr "Celkové setøídìní..." - -#: src/summaryview.c:1226 -msgid "\tSetting summary from message data..." -msgstr "\tNastavuji pøehled z dat zpráv..." - -#: src/summaryview.c:1228 -msgid "Setting summary from message data..." -msgstr "Nastavuji pøehled z dat zpráv..." - -#: src/summaryview.c:1337 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "Zapisuji celkovou mezipamìt (%s)..." - -#: src/summaryview.c:1389 -msgid "(No Date)" -msgstr "(®ádné datum)" - -#: src/summaryview.c:1654 -#, c-format -msgid "Message %d is marked\n" -msgstr "Zpráva %d je oznaèena\n" - -#: src/summaryview.c:1683 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "Zpráva %d je oznaèena jako ètená\n" - -#: src/summaryview.c:1718 -#, 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:1760 -#, 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:1774 -msgid "Current folder is Trash." -msgstr "Vybraná slo¾ka je odpadkový ko¹." - -#: src/summaryview.c:1796 src/summaryview.c:1798 -msgid "Deleting duplicated messages..." -msgstr "Vymazávám duplikované zprávy..." - -#: src/summaryview.c:1848 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Zpráva %s/%d je odznaèená\n" - -#: src/summaryview.c:1885 -#, 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:1897 -msgid "Destination is same as current folder." -msgstr "Cílová polo¾ka je stejná jako aktuální slo¾ka." - -#: src/summaryview.c:1946 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "" - -#: src/summaryview.c:1959 -msgid "Destination to copy is same as current folder." -msgstr "" - -#: src/summaryview.c:1991 -msgid "Selecting all messages..." -msgstr "" - -#: src/summaryview.c:2045 -msgid "Print" -msgstr "Tisk" - -#: src/summaryview.c:2046 -#, 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:2052 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"Pøíkazová øádka pro tisk je neplatná:\n" -"`%s'" - -#: src/summaryview.c:2274 src/summaryview.c:2275 -msgid "Building threads..." -msgstr "Sestavuji témata..." - -#: src/summaryview.c:2297 src/summaryview.c:2298 -msgid "Unthreading..." -msgstr "Ma¾u témata" - -#: src/summaryview.c:2320 -msgid "Unthreading for execution..." -msgstr "" - -#: src/summaryview.c:2407 -msgid "filtering..." -msgstr "filtruji..." - -#: src/summaryview.c:2408 -msgid "Filtering..." -msgstr "Filtruji..." - -#: src/summaryview.c:2514 -#, c-format -msgid "Go to %s\n" -msgstr "Pøejít na %s\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "Vytváøím zobrazení textu...\n" - -#: src/textview.c:366 -#, fuzzy -msgid "To save this part, pop up the context menu with " -msgstr "Pro ulo¾ení této èásti vyvolejte menu pomocí\n" - -#: src/textview.c:367 -#, fuzzy -msgid "right click and select `Save as...', " -msgstr "" -"pravého tlaèítka my¹i a zvolte `Ulo¾it jako...'.\n" -"\n" - -#: src/textview.c:368 -#, fuzzy -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"'Zobrazit jako text', nebo stisknout 't'.\n" -"\n" - -#: src/textview.c:370 -#, fuzzy -msgid "To display this part as a text message, select " -msgstr "K zobrazení této èásti jako textové zprávy, vyberte \n" - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"'Zobrazit jako text', nebo stisknout 't'.\n" -"\n" - -#: src/textview.c:373 -#, fuzzy -msgid "To open this part with external program, select " -msgstr "" -"K otevøení této èásti s pomocí externího programem, vyberte 'Otevøít',\n" - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "" - -#: src/textview.c:375 -#, fuzzy -msgid "or double-click, or click the center button, " -msgstr "" -"kliknìte dvakrát nebo kliknìte na støední tlaèítko nebo stisknìte 'l'." - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "" - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "" - -#: src/utils.c:1547 -#, c-format -msgid "writing to %s failed.\n" -msgstr "Neúspì¹ný zápis do %s.\n" - -#: src/utils.c:1588 -#, fuzzy, c-format -msgid "move_file(): file %s already exists." -msgstr "Slo¾ka '%s' u¾ existuje." - -#: src/utils.c:1729 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "Neplatný otevøený URI pøíkazový øádek: '%s'" - -#~ msgid "deleting message %d...\n" -#~ msgstr "Vymazávám zprávu %d...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/Z_obrazit/_Panel nástrojù/_Bez zobrazení" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/_Zpráva/_Oznaèit/Oznaèit je _jako ètené" - -#~ msgid "deleting article %d...\n" -#~ msgstr "Vymazávám èlánek %d...\n" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/_Oznaèit/Oznaèit jako è_tené" - -#, fuzzy -#~ msgid "Show other headers" -#~ msgstr "/Zobrazit v¹echny _hlavièky" - -#~ 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" - -#~ msgid "SunMonTueWedThuFriSat" -#~ msgstr "Ne Po Út St Èt Pá So" - -#~ 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 "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 "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 "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.po b/po/de.po deleted file mode 100644 index e6fde601d..000000000 --- a/po/de.po +++ /dev/null @@ -1,5173 +0,0 @@ -# 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-08-13 13:58+0200\n" -"PO-Revision-Date: 2001-05-11 21:16+0200\n" -"Last-Translator: Jens Oberender <j.obi@troja.net>\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:90 -msgid "About" -msgstr "Über" - -#: src/about.c:205 -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:211 -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:216 -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:220 -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:226 -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:232 -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." - -#. Button panel -#: src/about.c:239 src/addressbook.c:1815 src/alertpanel.c:238 -#: src/compose.c:2008 src/compose.c:3751 src/editjpilot.c:340 -#: src/editldap.c:241 src/editldap_basedn.c:212 src/editvcard.c:236 -#: src/export.c:185 src/foldersel.c:179 src/grouplistdialog.c:204 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:360 src/main.c:368 -#: src/mainwindow.c:1994 src/messageview.c:348 src/mimeview.c:724 -#: src/passphrase.c:119 src/prefs.c:475 src/prefs_common.c:2356 -#: src/prefs_common.c:2512 src/prefs_common.c:2791 src/prefs_common.c:2910 -#: src/prefs_customheader.c:162 src/prefs_display_header.c:206 -#: src/prefs_filter.c:203 src/prefs_filtering.c:323 src/prefs_matcher.c:301 -#: src/prefs_matcher.c:1462 src/prefs_scoring.c:199 src/sigstatus.c:134 -#: src/summaryview.c:2839 src/summaryview.c:3404 -msgid "OK" -msgstr "OK" - -#: src/account.c:109 -msgid "Reading all config for each account...\n" -msgstr "Lese Konfiguration für jeden Account...\n" - -#: src/account.c:124 -#, c-format -msgid "Found label: %s\n" -msgstr "Gefundene Zeichen: %s\n" - -#: src/account.c:238 -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:244 -msgid "Opening account edit window...\n" -msgstr "Öffne Accountbearbeitungsfenster...\n" - -#: src/account.c:414 -msgid "Creating account edit window...\n" -msgstr "Erstelle Accountbearbeitungsfenster...\n" - -#: src/account.c:419 -msgid "Edit accounts" -msgstr "Bearbeite Accounts" - -#: src/account.c:447 src/addressbook.c:443 src/addressbook.c:1811 -#: src/compose.c:2801 src/editjpilot.c:291 src/editldap.c:296 -#: src/editvcard.c:207 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "Name" - -#: src/account.c:448 src/prefs_account.c:751 -msgid "Protocol" -msgstr "Protokoll" - -#: src/account.c:449 -msgid "Server" -msgstr "Server" - -#: src/account.c:450 src/mainwindow.c:1490 -msgid "Get all" -msgstr "Hole alle" - -#: src/account.c:473 src/addressbook.c:578 src/prefs_customheader.c:242 -#: src/prefs_display_header.c:290 src/prefs_display_header.c:345 -msgid "Add" -msgstr "Hinzufügen" - -#: src/account.c:479 -msgid "Edit" -msgstr "Bearbeiten" - -#: src/account.c:485 src/prefs_customheader.c:249 -msgid " Delete " -msgstr " Löschen " - -#: src/account.c:491 src/prefs_customheader.c:296 -#: src/prefs_display_header.c:309 src/prefs_filter.c:453 -#: src/prefs_filtering.c:569 src/prefs_matcher.c:572 src/prefs_scoring.c:330 -msgid "Down" -msgstr "Ab" - -#: src/account.c:497 src/prefs_customheader.c:290 -#: src/prefs_display_header.c:303 src/prefs_filter.c:447 -#: src/prefs_filtering.c:563 src/prefs_matcher.c:566 src/prefs_scoring.c:324 -msgid "Up" -msgstr "Auf" - -#: src/account.c:511 -msgid " Set as default account " -msgstr " Als Standardaccount setzen " - -#: src/account.c:517 -msgid " Enable/Disable 'Receive at Get all' " -msgstr " De-/Aktivieren 'Holen bei alle Empfangen' " - -#: src/account.c:523 src/prefs_common.c:3246 src/summary_search.c:192 -msgid "Close" -msgstr "Schließen" - -#: src/account.c:577 -msgid "Delete account" -msgstr "Account löschen" - -#: src/account.c:578 -msgid "Do you really want to delete this account?" -msgstr "Wollen Sie diesen Account wirklich löschen?" - -#: src/account.c:579 src/account.c:724 src/addressbook.c:785 -#: src/addressbook.c:1746 src/compose.c:3925 src/folderview.c:1720 -#: src/folderview.c:1763 src/folderview.c:1862 src/folderview.c:1907 -#: src/folderview.c:2005 src/folderview.c:2038 src/mainwindow.c:1019 -#: src/messageview.c:417 src/prefs_customheader.c:548 src/prefs_filter.c:736 -#: src/prefs_filtering.c:836 src/prefs_scoring.c:646 src/summary_search.c:297 -#: src/summaryview.c:880 src/summaryview.c:1216 src/summaryview.c:1242 -#: src/summaryview.c:1272 -msgid "Yes" -msgstr "Ja" - -#: src/account.c:579 src/compose.c:3925 src/folderview.c:1720 -#: src/folderview.c:1763 src/folderview.c:1862 src/folderview.c:1907 -#: src/folderview.c:2005 src/folderview.c:2038 -msgid "+No" -msgstr "+No" - -#: src/account.c:720 src/account.c:721 src/account.c:725 src/addressbook.c:785 -#: src/addressbook.c:1746 src/mainwindow.c:1019 src/messageview.c:417 -#: src/prefs_customheader.c:548 src/prefs_filter.c:736 -#: src/prefs_filtering.c:836 src/prefs_scoring.c:646 src/summary_search.c:297 -#: src/summaryview.c:880 src/summaryview.c:1216 src/summaryview.c:1242 -#: src/summaryview.c:1272 -msgid "No" -msgstr "Nein" - -#: src/addressbook.c:336 src/compose.c:405 src/mainwindow.c:372 -msgid "/_File" -msgstr "/_Datei" - -#: src/addressbook.c:337 -msgid "/_File/New _Address" -msgstr "/_Datei/Neue _Adresse" - -#: src/addressbook.c:338 -msgid "/_File/New _Group" -msgstr "/_Datei/Neue _Gruppe" - -#: src/addressbook.c:339 -msgid "/_File/New _Folder" -msgstr "/_Datei/Neue Ab_lage" - -#: src/addressbook.c:340 -msgid "/_File/New _V-Card" -msgstr "/_Datei/Neue _V-Card" - -#: src/addressbook.c:342 -msgid "/_File/New _J-Pilot" -msgstr "/_Datei/Neue _J-Pilot" - -#: src/addressbook.c:345 -msgid "/_File/New _Server" -msgstr "/_Datei/Neuer _Server" - -#: src/addressbook.c:347 src/addressbook.c:350 src/compose.c:409 -#: src/mainwindow.c:384 src/mainwindow.c:387 -msgid "/_File/---" -msgstr "/_Datei/---" - -#: src/addressbook.c:348 -msgid "/_File/_Edit" -msgstr "/_Datei/_Bearbeiten" - -#: src/addressbook.c:349 -msgid "/_File/_Delete" -msgstr "/_Datei/_Löschen" - -#: src/addressbook.c:351 src/compose.c:410 src/mainwindow.c:388 -msgid "/_File/_Close" -msgstr "/_Datei/S_chließen" - -#: src/addressbook.c:352 src/compose.c:451 src/mainwindow.c:571 -msgid "/_Help" -msgstr "/_Hilfe" - -#: src/addressbook.c:353 src/compose.c:452 src/mainwindow.c:576 -msgid "/_Help/_About" -msgstr "/_Hilfe/_Über" - -#: src/addressbook.c:358 src/addressbook.c:375 -msgid "/New _Address" -msgstr "/Neue _Adresse" - -#: src/addressbook.c:359 src/addressbook.c:376 -msgid "/New _Group" -msgstr "/Neue _Gruppe" - -#: src/addressbook.c:360 src/addressbook.c:377 -msgid "/New _Folder" -msgstr "/Neue Ab_lage" - -#: src/addressbook.c:361 -msgid "/New _V-Card" -msgstr "/Neue _V-Card" - -#: src/addressbook.c:363 -msgid "/New _J-Pilot" -msgstr "/Neuer _J-Pilot" - -#: src/addressbook.c:366 -msgid "/New _Server" -msgstr "/New _Server" - -#: src/addressbook.c:368 src/addressbook.c:378 src/compose.c:399 -#: src/folderview.c:220 src/folderview.c:222 src/folderview.c:232 -#: src/folderview.c:235 src/folderview.c:245 src/folderview.c:248 -#: src/folderview.c:258 src/folderview.c:260 src/summaryview.c:341 -#: src/summaryview.c:349 src/summaryview.c:354 src/summaryview.c:357 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:369 src/addressbook.c:379 src/compose.c:412 -#: src/mainwindow.c:391 -msgid "/_Edit" -msgstr "/_Bearbeiten" - -#: src/addressbook.c:370 src/addressbook.c:380 src/summaryview.c:327 -msgid "/_Delete" -msgstr "/_Löschen" - -#: src/addressbook.c:443 -msgid "E-Mail address" -msgstr "E-Mail Adresse" - -#: src/addressbook.c:443 src/addressbook.c:1813 -msgid "Remarks" -msgstr "Kommentar" - -#: src/addressbook.c:454 src/compose.c:3397 -msgid "Address book" -msgstr "Adreßbuch" - -#: src/addressbook.c:543 -msgid "Name:" -msgstr "Name:" - -#: src/addressbook.c:575 src/addressbook.c:1746 src/mainwindow.c:1638 -#: src/prefs_display_header.c:296 src/prefs_display_header.c:352 -#: src/prefs_filter.c:413 src/prefs_filtering.c:218 src/prefs_filtering.c:529 -#: src/prefs_matcher.c:503 src/prefs_scoring.c:290 -msgid "Delete" -msgstr "Löschen" - -#: src/addressbook.c:581 -msgid "Lookup" -msgstr "Vorschau" - -#: src/addressbook.c:593 src/headerview.c:55 src/summary_search.c:152 -msgid "To:" -msgstr "An:" - -#: src/addressbook.c:597 -msgid "Cc:" -msgstr "Cc:" - -#: src/addressbook.c:601 -msgid "Bcc:" -msgstr "Bcc:" - -#: src/addressbook.c:628 -msgid "Common address" -msgstr "Allgemeine Adresse" - -#: src/addressbook.c:635 -msgid "Personal address" -msgstr "Persönliche Adresse" - -#: src/addressbook.c:643 -msgid "V-Card" -msgstr "V-Card" - -#: src/addressbook.c:652 -msgid "J-Pllot" -msgstr "J-Pilot" - -#: src/addressbook.c:669 -msgid "Directory" -msgstr "Verzeichnis" - -#: src/addressbook.c:783 -msgid "Delete address(es)" -msgstr "Adresse(n) löschen" - -#: src/addressbook.c:784 -msgid "Really delete the address(es)?" -msgstr "Adresse(n) wirklich löschen?" - -#: src/addressbook.c:1469 src/folderview.c:1493 src/folderview.c:1550 -#: src/folderview.c:1794 -msgid "New folder" -msgstr "Neue Ablage" - -#: src/addressbook.c:1470 src/folderview.c:1494 src/folderview.c:1551 -msgid "Input the name of new folder:" -msgstr "Geben Sie den Namen der neuen Ablage ein:" - -#: src/addressbook.c:1471 src/folderview.c:1495 src/folderview.c:1552 -#: src/folderview.c:1798 -msgid "NewFolder" -msgstr "NeueAblage" - -#: src/addressbook.c:1482 src/addressbook.c:1527 src/addressbook.c:1604 -#: src/addressbook.c:1695 -msgid "The name already exists." -msgstr "Der Name existiert bereits." - -#: src/addressbook.c:1514 -msgid "New group" -msgstr "Neue Gruppe" - -#: src/addressbook.c:1515 -msgid "Input the name of new group:" -msgstr "Geben Sie den Namen der neuen Gruppe ein:" - -#: src/addressbook.c:1516 -msgid "NewGroup" -msgstr "NeueGruppe" - -#: src/addressbook.c:1591 -msgid "Edit group" -msgstr "Bearbeiten Gruppe" - -#: src/addressbook.c:1592 -msgid "Input the new name of group:" -msgstr "Geben Sie den neuen Namen der Gruppe ein:" - -#: src/addressbook.c:1681 -msgid "Edit folder" -msgstr "Ablage bearbeiten" - -#: src/addressbook.c:1682 -msgid "Input the new name of folder:" -msgstr "Geben Sie den neuen Namen der Ablage ein:" - -#: src/addressbook.c:1745 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Wirklich `%s' löschen ?" - -#: src/addressbook.c:1793 -msgid "Edit address" -msgstr "Adresse bearbeiten" - -#: src/addressbook.c:1812 src/compose.c:3396 src/select-keys.c:302 -msgid "Address" -msgstr "Adresse" - -#: src/addressbook.c:1816 src/compose.c:2008 src/compose.c:3752 -#: src/compose.c:4415 src/editjpilot.c:341 src/editldap.c:242 -#: src/editldap_basedn.c:213 src/editvcard.c:237 src/export.c:186 -#: src/foldersel.c:180 src/grouplistdialog.c:205 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:360 src/main.c:368 src/mainwindow.c:1994 -#: src/messageview.c:348 src/mimeview.c:724 src/passphrase.c:123 -#: src/prefs.c:476 src/prefs_common.c:2357 src/prefs_common.c:2911 -#: src/prefs_customheader.c:163 src/prefs_display_header.c:207 -#: src/prefs_filter.c:204 src/prefs_filtering.c:324 src/prefs_matcher.c:302 -#: src/prefs_scoring.c:200 src/progressdialog.c:77 src/select-keys.c:326 -#: src/summaryview.c:880 src/summaryview.c:2839 src/summaryview.c:3404 -msgid "Cancel" -msgstr "Abbrechen" - -#: src/addressbook.c:2161 -msgid "Reading addressbook file..." -msgstr "Lese Adressbuchdatei..." - -#: src/addressbook.c:2165 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s existiert nicht.\n" - -#: src/addressbook.c:2201 src/addressbook.c:2593 src/imap.c:1260 -#: src/imap.c:1279 src/mainwindow.c:726 src/mainwindow.c:1417 src/mh.c:930 -#: src/mh.c:937 src/news.c:748 src/procmsg.c:261 src/procmsg.c:325 -#: src/summaryview.c:1504 src/summaryview.c:1724 src/summaryview.c:1923 -#: src/summaryview.c:2023 src/summaryview.c:2565 src/summaryview.c:3115 -#: src/summaryview.c:3138 src/summaryview.c:3159 src/summaryview.c:3280 -msgid "done.\n" -msgstr "Fertig.\n" - -#: src/addressbook.c:2571 -msgid "Exporting addressbook to file..." -msgstr "Exportiere Adressbuch in Datei..." - -#: src/addressbook.c:2589 -msgid "failed to write addressbook data.\n" -msgstr "konnte Adressbuchdaten nicht schreiben.\n" - -#: src/addressbook.c:3464 -msgid "Personal addresses" -msgstr "Persönliche Adressen" - -#: src/addressbook.c:3469 -msgid "Common addresses" -msgstr "Allgemeine Adressen" - -#: src/addr_compl.c:219 -#, c-format -msgid "%s%d entering read_address_book\n" -msgstr "%s%d erfasse read_address_book\n" - -#: src/addr_compl.c:224 -#, c-format -msgid "%s(%d) no addressbook\n" -msgstr "%s(%d) kein Adressbuch\n" - -#: src/addr_compl.c:242 -#, c-format -msgid "%s(%d) leaving read_address_book - OK\n" -msgstr "%s(%d) verlasse read_address_book - OK\n" - -#: src/alertpanel.c:119 src/compose.c:3925 src/main.c:358 -msgid "Notice" -msgstr "Notiz" - -#: src/alertpanel.c:132 src/main.c:230 -msgid "Warning" -msgstr "Warnung" - -#: src/alertpanel.c:145 src/inc.c:453 -msgid "Error" -msgstr "Fehler" - -#: src/alertpanel.c:187 -msgid "Creating alert panel dialog...\n" -msgstr "Erstelle Alarmpanel-Dialog...\n" - -#: src/alertpanel.c:275 -msgid "Show this message next time" -msgstr "Zeige diese Nachricht das nächste mal an" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "konnte keinen Speicher alloziieren\n" - -#: src/compose.c:397 -msgid "/_Add..." -msgstr "/_Hinzufügen..." - -#: src/compose.c:398 -msgid "/_Remove" -msgstr "/_Entfernen" - -#: src/compose.c:400 src/folderview.c:223 src/folderview.c:236 -#: src/folderview.c:249 src/folderview.c:261 -msgid "/_Property..." -msgstr "/_Eigenschaften" - -#: src/compose.c:406 -msgid "/_File/_Attach file" -msgstr "/_Datei/Datei _anhängen" - -#: src/compose.c:407 -msgid "/_File/_Insert file" -msgstr "/_Datei/Datei _einfügen" - -#: src/compose.c:408 -msgid "/_File/Insert si_gnature" -msgstr "/_Datei/_Unterschrift einfügen" - -#: src/compose.c:413 -msgid "/_Edit/_Undo" -msgstr "/_Bearbeiten/_Zurück" - -#: src/compose.c:414 -msgid "/_Edit/_Redo" -msgstr "/_Bearbeiten/_Wiederholen" - -#: src/compose.c:415 src/compose.c:420 src/mainwindow.c:394 -msgid "/_Edit/---" -msgstr "/_Bearbeiten/---" - -#: src/compose.c:416 -msgid "/_Edit/Cu_t" -msgstr "/_Bearbeiten/_Ausschneiden" - -#: src/compose.c:417 src/mainwindow.c:392 -msgid "/_Edit/_Copy" -msgstr "/_Bearbeiten/_Kopieren" - -#: src/compose.c:418 -msgid "/_Edit/_Paste" -msgstr "/_Bearbeiten/_Einfügen" - -#: src/compose.c:419 src/mainwindow.c:393 -msgid "/_Edit/Select _all" -msgstr "/_Bearbeiten/A_lle auswählen" - -#: src/compose.c:421 -msgid "/_Edit/Wrap long _lines" -msgstr "/_Bearbeiten/_Umbrechen langer Zeilen" - -#: src/compose.c:422 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/_Bearbeiten/Bearbeiten mit e_xternem Editor" - -#: src/compose.c:425 src/mainwindow.c:484 -msgid "/_Message" -msgstr "/_Nachricht" - -#: src/compose.c:426 -msgid "/_Message/_Send" -msgstr "/_Nachricht/_Senden" - -#: src/compose.c:428 -msgid "/_Message/Send _later" -msgstr "/_Nachricht/S_päter senden" - -#: src/compose.c:430 -msgid "/_Message/Save to _draft folder" -msgstr "/_Nachricht/Speichern in Ent_wurfablage" - -#: src/compose.c:432 src/compose.c:437 src/compose.c:439 src/compose.c:442 -#: src/compose.c:446 src/mainwindow.c:488 src/mainwindow.c:491 -#: src/mainwindow.c:501 src/mainwindow.c:512 -msgid "/_Message/---" -msgstr "/_Nachricht/---" - -#: src/compose.c:433 -msgid "/_Message/_To" -msgstr "/_Nachricht/_An" - -#: src/compose.c:434 -msgid "/_Message/_Cc" -msgstr "/_Nachricht/_Cc" - -#: src/compose.c:435 -msgid "/_Message/_Bcc" -msgstr "/_Nachricht/_Bcc" - -#: src/compose.c:436 -msgid "/_Message/_Reply to" -msgstr "/_Nachricht/_Antwort an" - -#: src/compose.c:438 -msgid "/_Message/_Followup to" -msgstr "/_Nachricht/_Followup to" - -#: src/compose.c:440 -msgid "/_Message/_Attach" -msgstr "/_Nachricht/An_hängen" - -#: src/compose.c:443 -msgid "/_Message/Si_gn" -msgstr "/_Nachricht/Digital _unterschreiben" - -#: src/compose.c:444 -msgid "/_Message/_Encrypt" -msgstr "/_Nachricht/_Verschlüsseln" - -#: src/compose.c:447 -msgid "/_Message/_Request Return Receipt" -msgstr "/_Nachricht/_Empfangsbestätigung fordern" - -#: src/compose.c:448 src/mainwindow.c:548 -msgid "/_Tool" -msgstr "/_Werkzeuge" - -#: src/compose.c:449 -msgid "/_Tool/Show _ruler" -msgstr "/_Werkzeuge/_Lineal anzeigen" - -#: src/compose.c:450 src/mainwindow.c:549 -msgid "/_Tool/_Address book" -msgstr "/_Werkzeuge/_Adressbuch" - -#: src/compose.c:626 src/compose.c:938 src/compose.c:1058 src/procmsg.c:693 -msgid "Can't get text part\n" -msgstr "Kann Textabschnitt nicht lesen\n" - -#: src/compose.c:708 src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "Kann einen Teil einer mehrteiligen Nachricht nicht bekommen." - -#: src/compose.c:927 src/compose.c:1011 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: Datei existiert nicht\n" - -#: src/compose.c:1701 src/compose.c:1751 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "Datei %s existiert nicht\n" - -#: src/compose.c:1705 src/compose.c:1755 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "Kann Dateigröße von %s nicht ermitteln\n" - -#: src/compose.c:1709 src/compose.c:1759 -#, c-format -msgid "File %s is empty\n" -msgstr "Datei %s ist leer\n" - -#: src/compose.c:1729 src/compose.c:1780 -#, c-format -msgid "Message: %s" -msgstr "Nachricht: %s" - -#: src/compose.c:1878 -msgid " [Edited]" -msgstr " [Bearbeited]" - -#: src/compose.c:1880 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - Verfasse Nachricht%s" - -#: src/compose.c:1883 -#, c-format -msgid "Compose message%s" -msgstr "Verfasse Nachricht%s" - -#: src/compose.c:1907 -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:1932 src/compose.c:4292 -msgid "Recipient is not specified." -msgstr "Empfänger nicht angegeben" - -#: src/compose.c:1950 -msgid "can't get recipient list." -msgstr "Kann die Empfängerliste nicht holen." - -#: src/compose.c:1991 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "Fehler beim Senden der Nachricht an %s ." - -#: src/compose.c:2005 src/messageview.c:345 -msgid "Queueing" -msgstr "Einreihen" - -#: src/compose.c:2006 -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:2012 src/compose.c:4304 -msgid "Can't queue the message." -msgstr "Nachricht kann nicht eingereiht werden." - -#: src/compose.c:2015 -msgid "Error occurred while sending the message." -msgstr "Fehler aufgetreten beim Senden der Nachricht." - -#: src/compose.c:2022 src/compose.c:4311 -msgid "Can't save the message to outbox." -msgstr "Kann die Nachricht nicht in der Outboxablage speichern." - -#: src/compose.c:2048 src/compose.c:2169 src/compose.c:2260 -#: src/mbox_folder.c:1267 src/mbox_folder.c:1369 src/mbox_folder.c:1940 -#: src/mbox_folder.c:1971 src/mbox_folder.c:2034 src/mbox_folder.c:2067 -#: src/messageview.c:199 src/messageview.c:303 src/utils.c:1641 -msgid "can't change file mode\n" -msgstr "kann Dateimodus nicht ändern\n" - -#: src/compose.c:2074 -msgid "Can't convert the codeset of the message." -msgstr "Kann den Zeichensatz der Nachricht nicht konvertieren." - -#: src/compose.c:2083 -msgid "can't write headers\n" -msgstr "kann Kopfzeilen nicht schreiben\n" - -#: src/compose.c:2201 -msgid "saving sent message...\n" -msgstr "gesendete Nachricht speichern...\n" - -#: src/compose.c:2211 -msgid "can't save message\n" -msgstr "kann Nachricht nicht speichern\n" - -#: src/compose.c:2216 src/compose.c:2327 src/messageview.c:261 -msgid "can't open mark file\n" -msgstr "kann markierte Datei nicht öffnen\n" - -#: src/compose.c:2240 src/messageview.c:180 -msgid "queueing message...\n" -msgstr "Nachricht einreihen...\n" - -#: src/compose.c:2318 src/messageview.c:252 -msgid "can't queue the message\n" -msgstr "Nachricht kann nicht eingereiht werden\n" - -#: src/compose.c:2357 -#, c-format -msgid "Can't open file %s\n" -msgstr "Kann Datei %s nicht öffnen\n" - -#: src/compose.c:2727 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "erzeugte Nachrichten-ID: %s\n" - -#: src/compose.c:2801 src/compose.c:3698 -msgid "MIME type" -msgstr "MIME-Typ" - -#: src/compose.c:2801 src/mimeview.c:139 src/prefs_common.c:2905 -#: src/select-keys.c:299 src/summaryview.c:583 -msgid "Size" -msgstr "Größe" - -#: src/compose.c:2818 -msgid "Creating compose window...\n" -msgstr "Erstelle Verfassenfenster...\n" - -#: src/compose.c:2864 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "Von:" - -#. Send Options -#: src/compose.c:3323 src/mainwindow.c:1501 src/prefs_account.c:589 -#: src/prefs_account.c:1266 src/prefs_common.c:760 -msgid "Send" -msgstr "Senden" - -#: src/compose.c:3324 -msgid "Send message" -msgstr "Sende Nachricht" - -#: src/compose.c:3331 -msgid "Send later" -msgstr "Später senden" - -#: src/compose.c:3332 -msgid "Put into queue folder and send later" -msgstr "In Queue-Ablage und später senden" - -#: src/compose.c:3339 src/folderview.c:818 -msgid "Draft" -msgstr "Draft" - -#: src/compose.c:3340 -msgid "Save to draft folder" -msgstr "Speichern in Entwurfablage" - -#: src/compose.c:3349 -msgid "Insert" -msgstr "Einfügen" - -#: src/compose.c:3350 -msgid "Insert file" -msgstr "Datei einfügen" - -#: src/compose.c:3357 -msgid "Attach" -msgstr "Anhängen" - -#: src/compose.c:3358 -msgid "Attach file" -msgstr "Datei anhängen" - -#: src/compose.c:3367 src/prefs_common.c:1295 -msgid "Signature" -msgstr "Unterschrift" - -#: src/compose.c:3368 -msgid "Insert signature" -msgstr "Unterschrift einfügen" - -#: src/compose.c:3376 -msgid "Editor" -msgstr "Editor" - -#: src/compose.c:3377 -msgid "Edit with external editor" -msgstr "Bearbeiten mit externem Editor" - -#: src/compose.c:3385 -msgid "Linewrap" -msgstr "Zeilenumbruch" - -#: src/compose.c:3386 -msgid "Wrap long lines" -msgstr "Umbrechen langer Zeilen" - -#: src/compose.c:3593 -msgid "Invalid MIME type." -msgstr "Ungültiger MIME Typ" - -#: src/compose.c:3611 -msgid "File doesn't exist or is empty." -msgstr "Datei existiert nicht oder ist leer." - -#: src/compose.c:3680 -msgid "Property" -msgstr "Eigenschaften" - -#: src/compose.c:3725 -msgid "Encoding" -msgstr "Zeichensatzkodierung" - -#: src/compose.c:3748 -msgid "Path" -msgstr "Pfad" - -#: src/compose.c:3749 -msgid "File name" -msgstr "Dateiname" - -#: src/compose.c:3896 -#, 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:3922 -#, 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:3935 -#, c-format -msgid "Terminated process group id: %d" -msgstr "Gruppen ID: %d des terminierten Prozesses" - -#: src/compose.c:3936 -#, c-format -msgid "Temporary file: %s" -msgstr "Temporäre Datei: %s" - -#: src/compose.c:3960 -msgid "Compose: input from monitoring process\n" -msgstr "Verfassen: Eingabe vom Überwachungsprozess\n" - -#. failed -#: src/compose.c:3993 -msgid "Couldn't exec external editor\n" -msgstr "Kann externen Editor nicht ausführen\n" - -#: src/compose.c:3997 -msgid "Couldn't write to file\n" -msgstr "Kann nicht in Datei schreiben\n" - -#: src/compose.c:3999 -msgid "Pipe read failed\n" -msgstr "Lesen von Pipe fehlgeschlagen\n" - -#: src/compose.c:4333 -msgid "can't remove the old draft message\n" -msgstr "Kann die alte Nachricht, in der Entwurfablage, nicht entfernen\n" - -#: src/compose.c:4361 src/compose.c:4381 -msgid "Select file" -msgstr "Wähle Datei" - -#: src/compose.c:4413 -msgid "Discard message" -msgstr "Nachricht verwerfen" - -#: src/compose.c:4414 -msgid "This message has been modified. discard it?" -msgstr "Diese Nachricht wurde geändert. Verwerfen?" - -#: src/compose.c:4415 -msgid "Discard" -msgstr "Verwerfen" - -#: src/compose.c:4415 -msgid "to Draft" -msgstr "zum Entwurf" - -#: src/compose.c:4821 -msgid "Quote mark format error." -msgstr "Zitatzeichen Formatfehler." - -#: src/compose.c:4835 -msgid "Message reply/forward format error." -msgstr "Nachrichten Antwort-/Weiterleitungs-Formatfehler." - -#: src/editjpilot.c:185 -msgid "File does not appear to be JPilot format." -msgstr "Datei scheint nicht im JPilot format zu sein." - -#: src/editjpilot.c:188 src/editvcard.c:96 -msgid "Could not read file." -msgstr "Kann Datei nicht lesen." - -#: src/editjpilot.c:221 -msgid "Select JPilot File" -msgstr "Wähle JPilot Datei" - -#: src/editjpilot.c:269 src/editjpilot.c:394 -msgid "Edit JPilot Entry" -msgstr "Bearbeite JPilot Eintrag" - -#: src/editjpilot.c:298 src/editvcard.c:214 -msgid " Check File " -msgstr " Überprüfe Datei " - -#: src/editjpilot.c:303 src/editvcard.c:219 -msgid "File" -msgstr "Datei" - -#: src/editjpilot.c:310 src/editldap.c:338 src/editvcard.c:226 -msgid " ... " -msgstr " ... " - -#: src/editjpilot.c:315 -msgid "Additional e-Mail address item(s)" -msgstr "Zusätzliche e-Mail Adresselemente" - -#: src/editjpilot.c:401 -msgid "Add New JPilot Entry" -msgstr "Neuen J-Pilot Eintrag hinzufügen" - -#: src/editldap.c:162 -msgid "Connected successfully to server" -msgstr "Erfolgreich zum Server verbunden" - -#: src/editldap.c:165 src/editldap_basedn.c:291 -msgid "Could not connect to server" -msgstr "Konnte nicht zum Server verbinden" - -#: src/editldap.c:213 src/editldap.c:528 -msgid "Edit LDAP Server" -msgstr "Bearbeite LDAP Server" - -#: src/editldap.c:305 src/editldap_basedn.c:161 -msgid "Hostname" -msgstr "Hostname" - -#: src/editldap.c:314 src/editldap_basedn.c:171 -msgid "Port" -msgstr "Port" - -#: src/editldap.c:326 -msgid " Check Server " -msgstr " Überprüfe Server " - -#: src/editldap.c:331 src/editldap_basedn.c:181 -msgid "Search Base" -msgstr "Suchbasis" - -#: src/editldap.c:388 -msgid "Search Criteria" -msgstr "Suchkriterium" - -#: src/editldap.c:395 -msgid " Reset " -msgstr " Reset " - -#: src/editldap.c:400 -msgid "Bind DN" -msgstr "Bind DN" - -#: src/editldap.c:409 -msgid "Bind Password" -msgstr "Bind Kennwort" - -#: src/editldap.c:418 -msgid "Timeout (secs)" -msgstr "Timeout (secs)" - -#: src/editldap.c:432 -msgid "Maximum Entries" -msgstr "Maximale Einträge" - -#: src/editldap.c:459 src/prefs_account.c:585 -msgid "Basic" -msgstr "Grundeinstellungen" - -#: src/editldap.c:460 -msgid "Extended" -msgstr "Erweitert" - -#: src/editldap.c:540 -msgid "Add New LDAP Server" -msgstr "Füge neuen LDAP Server hinzu" - -#: src/editldap_basedn.c:141 -msgid "Edit LDAP - Select Search Base" -msgstr "Bearbeite LDAP - Wähle Suchbasis" - -#: src/editldap_basedn.c:202 -msgid "Available Search Base(s)" -msgstr "Verfügbare Suchbasen" - -#: src/editldap_basedn.c:287 -msgid "Could not read Search Base(s) from server - please set manually" -msgstr "Konnte Suchbasen nicht vom Server lesen - bitte manuel setzen" - -#: src/editvcard.c:93 -msgid "File does not appear to be VCard format." -msgstr "Datei scheint nicht im VCard format zu sein." - -#: src/editvcard.c:129 -msgid "Select VCard File" -msgstr "Wähle VCard Datei" - -#: src/editvcard.c:185 src/editvcard.c:286 -msgid "Edit VCard Entry" -msgstr "Bearbeite VCard Eintrag" - -#: src/editvcard.c:291 -msgid "Add New VCard Entry" -msgstr "Neuen VCard Eintrag hinzufügen" - -#: src/export.c:122 -msgid "Export" -msgstr "Exportieren" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "Gib Zielverzeichnis und Mbox-Datei an." - -#: src/export.c:154 -msgid "Source dir:" -msgstr "Quellverzeichnis" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "Exportiere Datei:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:364 -msgid " Select... " -msgstr " Auswählen... " - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "Wähle exportierte Datei" - -#: src/foldersel.c:132 -msgid "Select folder" -msgstr "Wähle Ablage" - -#: src/folderview.c:217 src/folderview.c:229 src/folderview.c:242 -msgid "/Create _new folder..." -msgstr "/_Neue Ablage erstellen..." - -#: src/folderview.c:218 src/folderview.c:230 src/folderview.c:243 -msgid "/_Rename folder..." -msgstr "/Ablage _umbenennen..." - -#: src/folderview.c:219 src/folderview.c:231 src/folderview.c:244 -msgid "/_Delete folder" -msgstr "/Ablage _löschen" - -#: src/folderview.c:221 src/folderview.c:234 -msgid "/Remove _mailbox" -msgstr "/Entferne _Mailbox" - -#: src/folderview.c:224 src/folderview.c:237 src/folderview.c:250 -#: src/folderview.c:262 -msgid "/_Scoring..." -msgstr "/_Benotung..." - -#: src/folderview.c:233 src/folderview.c:246 -msgid "/_Update folder tree" -msgstr "/_Ablagebaum erneuern" - -#: src/folderview.c:247 -msgid "/Remove _IMAP4 account" -msgstr "/Entferne _IMAP4-Account" - -#: src/folderview.c:255 -msgid "/_Subscribe to newsgroup..." -msgstr "/Newsgroup _abonnieren..." - -#: src/folderview.c:257 -msgid "/_Remove newsgroup" -msgstr "/Newsgroup _entfernen" - -#: src/folderview.c:259 -msgid "/Remove _news account" -msgstr "/Newsaccount _entfernen" - -#: src/folderview.c:271 -msgid "Folder" -msgstr "Ablage" - -#: src/folderview.c:271 -msgid "New" -msgstr "Neu" - -#: src/folderview.c:272 src/prefs_common.c:2901 -msgid "Unread" -msgstr "Ungelesen" - -#: src/folderview.c:272 -msgid "#" -msgstr "#" - -#: src/folderview.c:284 -msgid "Creating folder view...\n" -msgstr "Erstelle Ablageansicht...\n" - -#: src/folderview.c:439 -msgid "Setting folder info...\n" -msgstr "Setze Ablageinformation...\n" - -#: src/folderview.c:440 -msgid "Setting folder info..." -msgstr "Setze Ablageinformation..." - -#: src/folderview.c:605 src/mainwindow.c:2567 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "Durchsuche Ablage %s%c%s ..." - -#: src/folderview.c:609 src/mainwindow.c:2572 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "Durchsuche Ablage %s ..." - -#: src/folderview.c:649 -msgid "Updating folder tree..." -msgstr "Erneuere Ablagenbaum..." - -#: src/folderview.c:666 -msgid "Updating all folders..." -msgstr "Erneuere alle Ablagen..." - -#: src/folderview.c:796 src/prefs_account.c:774 -msgid "Inbox" -msgstr "Inbox" - -#: src/folderview.c:801 -msgid "Outbox" -msgstr "Outbox" - -#: src/folderview.c:806 -msgid "Queue" -msgstr "Queue" - -#: src/folderview.c:811 -msgid "Trash" -msgstr "Trash" - -#: src/folderview.c:1357 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Ablage %s ist gewählt\n" - -#: src/folderview.c:1499 src/folderview.c:1607 src/folderview.c:1803 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "`%c' kann nicht in den Ablagenamen integriert werden." - -#: src/folderview.c:1507 src/folderview.c:1557 src/folderview.c:1616 -#: src/folderview.c:1671 src/folderview.c:1811 -#, c-format -msgid "The folder `%s' already exists." -msgstr "Die Ablage `%s' existiert bereits." - -#: src/folderview.c:1599 src/folderview.c:1661 -#, c-format -msgid "Input new name for `%s':" -msgstr "Neuer Name für `%s':" - -#: src/folderview.c:1601 src/folderview.c:1663 -msgid "Rename folder" -msgstr "Ablage umbenennen" - -#: src/folderview.c:1716 -#, 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:1719 src/folderview.c:1861 -msgid "Delete folder" -msgstr "Ablage löschen" - -#: src/folderview.c:1725 src/folderview.c:1867 -#, c-format -msgid "Can't remove the folder `%s'." -msgstr "Kann Ablage nicht entfernen `%s'." - -#: src/folderview.c:1759 -#, 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:1762 -msgid "Remove folder" -msgstr "Ablage entfernen" - -#: src/folderview.c:1795 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"Namen der neuen Ablage eingeben:\n" -"(um eine neue Ablage für Unterablagen zu erstellen\n" -" `/' an Ende des Namens anhängen)" - -#: src/folderview.c:1819 -#, c-format -msgid "Can't create the folder `%s'." -msgstr "Kann Ablage nicht erstellen `%s'." - -#: src/folderview.c:1859 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Ablage `%s' wirklich löschen?" - -#: src/folderview.c:1904 -#, c-format -msgid "Really delete IMAP4 account `%s'?" -msgstr "IMAP4-Account `%s' wirklich löschen?" - -#: src/folderview.c:1906 -msgid "Delete IMAP4 account" -msgstr "IMAP4-Account löschen" - -#: src/folderview.c:1956 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "Die Newsgroup `%s' existiert bereits." - -#: src/folderview.c:2002 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Newsgroup `%s' wirklich löschen?" - -#: src/folderview.c:2004 -msgid "Delete newsgroup" -msgstr "Newsgroup löschen" - -#: src/folderview.c:2035 -#, c-format -msgid "Really delete news account `%s'?" -msgstr "Newsaccount `%s' wirklich löschen?" - -#: src/folderview.c:2037 -msgid "Delete news account" -msgstr "Newsaccount löschen" - -#: src/grouplistdialog.c:155 -msgid "Subscribe to newsgroup" -msgstr "Newsgroup abonnieren" - -#: src/grouplistdialog.c:174 -msgid "Input subscribing newsgroup:" -msgstr "Zu abonnierende Newsgroup eingeben:" - -#: src/grouplistdialog.c:206 -msgid "Refresh" -msgstr "Auffrischen" - -#: src/grouplistdialog.c:233 -msgid "Can't retrieve newsgroup list." -msgstr "Kann die Gruppenliste nicht empfangen." - -#: src/grouplistdialog.c:249 src/summaryview.c:1043 -msgid "Done." -msgstr "Fertig." - -#: src/grouplistdialog.c:260 -#, c-format -msgid "%d newsgroups received (%s read)" -msgstr "%d Newsgruppen empfangen (%s gelesen)" - -#: 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:174 src/summaryview.c:2071 -msgid "(No From)" -msgstr "(Kein Von)" - -#: src/headerview.c:189 src/summaryview.c:2107 -msgid "(No Subject)" -msgstr "(Kein Betreff)" - -#: src/headerwindow.c:56 -msgid "Creating header window...\n" -msgstr "Erstelle Kopfzeilenfenster...\n" - -#: src/headerwindow.c:60 -msgid "All header" -msgstr "Alle Kopfzeilen" - -#: src/headerwindow.c:116 -#, c-format -msgid "Displaying the header of %s ...\n" -msgstr "Anzeige der Kopfzeilen von %s...\n" - -#: src/headerwindow.c:118 -#, 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:261 -#, 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:290 src/inc.c:419 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "Kennwort für %s auf %s angeben:" - -#: src/imap.c:292 src/inc.c:423 src/news.c:131 -msgid "Input password" -msgstr "Kennwort eingeben" - -#: src/imap.c:323 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "erstelle IMAP4-Verbindung zu %s:%d ...\n" - -#: src/imap.c:487 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "Nachricht %d wurde schon zwischengespeichert.\n" - -#: src/imap.c:497 -#, c-format -msgid "getting message %d...\n" -msgstr "empfange Nachricht %d...\n" - -#: src/imap.c:503 src/procmsg.c:593 -#, c-format -msgid "can't fetch message %d\n" -msgstr "kann Nachricht %d nicht holen\n" - -#: src/imap.c:527 -#, c-format -msgid "can't append message %s\n" -msgstr "kann Nachricht %s nicht anhängen\n" - -#: src/imap.c:555 src/imap.c:607 src/mh.c:193 src/mh.c:297 src/mh.c:354 -#: src/mh.c:516 -msgid "the src folder is identical to the dest.\n" -msgstr "Die Quellablage ist identisch mit dem Ziel.\n" - -#: src/imap.c:562 src/imap.c:612 src/mh.c:208 src/mh.c:300 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "Verschiebe Nachricht %s%c%d nach %s ...\n" - -#: src/imap.c:566 src/imap.c:616 src/mh.c:372 src/mh.c:519 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "Kopiere Nachricht %s%c%d nach %s ...\n" - -#: src/imap.c:686 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "kann gelöschte Flags nicht setzen: %d\n" - -#: src/imap.c:693 src/imap.c:733 -msgid "can't expunge\n" -msgstr "kann nicht löschen\n" - -#: src/imap.c:726 -#, 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:890 -msgid "error occured while getting LIST.\n" -msgstr "Fehler beim Empfang von LIST.\n" - -#: src/imap.c:1091 -msgid "can't create mailbox: LIST failed\n" -msgstr "kann Mailbox nicht erstellen: LIST fehlgeschlagen\n" - -#: src/imap.c:1111 -msgid "can't create mailbox\n" -msgstr "kann Mailbox nicht erstellen\n" - -#: src/imap.c:1158 -msgid "can't delete mailbox\n" -msgstr "kann Mailbox nicht löschen\n" - -#: src/imap.c:1187 -msgid "can't get envelope\n" -msgstr "kann die Nachrichteneigenschaften nicht empfangen\n" - -#: src/imap.c:1195 -msgid "error occurred while getting envelope.\n" -msgstr "Fehler beim Empfang der Nachrichteneigenschaften.\n" - -#: src/imap.c:1210 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "kann die Nachrichteneigenschaften nicht bearbeiten: %s\n" - -#: src/imap.c:1240 -#, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "Lösche zwischengespeicherte Nachrichten %d - %d ... " - -#: src/imap.c:1273 -msgid "Deleting all cached messages... " -msgstr "Lösche alle zwischengespeicherten Nachrichten... " - -#: src/imap.c:1291 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "Keine Verbindung mit IMAP4-Server: %s:%d\n" - -#: src/imap.c:1331 -msgid "can't get namespace\n" -msgstr "kann Namensbereich nicht empfangen\n" - -#: src/imap.c:1772 -#, c-format -msgid "can't select folder: %s\n" -msgstr "kann Ablage %s nicht auswählen\n" - -#: src/imap.c:1889 -msgid "IMAP4 login failed.\n" -msgstr "IMAP4-Login fehlgeschlagen.\n" - -#: src/imap.c:2117 -#, c-format -msgid "can't append %s to %s\n" -msgstr "kann %s nicht an %s anhängen\n" - -#: src/imap.c:2137 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "kann %d nicht nach %s kopieren\n" - -#: src/imap.c:2162 -#, 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:2176 -msgid "error while imap command: EXPUNGE\n" -msgstr "Fehler beim IMAP-Befehl: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "Importieren" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "Mbox-Zieldatei und Zielverzeichnis angeben." - -#: src/import.c:158 -msgid "Importing file:" -msgstr "Importiere Datei:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Zielverzeichnis:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Wähle importierte Datei" - -#: src/inc.c:210 src/inc.c:259 src/send.c:350 -msgid "Standby" -msgstr "Warten" - -#: src/inc.c:278 -msgid "Retrieving new messages" -msgstr "Empfange neue Nachricht" - -#: src/inc.c:443 -msgid "Retrieving" -msgstr "Empfange" - -#: src/inc.c:450 -msgid "Done" -msgstr "Fertig" - -#: src/inc.c:463 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "Autorisierung mit %s auf %s fehlgeschlagen" - -#: src/inc.c:503 -msgid "Some errors occured while getting mail." -msgstr "Fehler sind beim Empfang der Mail aufgetreten." - -#: src/inc.c:541 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "erhalte neue Nachrichten vom Account %s...\n" - -#: src/inc.c:549 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: Empfange neue Nachrichten" - -#: src/inc.c:575 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "Verbinde mit POP3-Server: %s ..." - -#: src/inc.c:586 src/inc.c:743 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "Keine Verbindung mit POP3-Server: %s:%d\n" - -#: src/inc.c:593 src/inc.c:750 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "Keine Verbindung mit POP3-Server: %s:%d" - -#: src/inc.c:785 src/inc.c:837 -#, c-format -msgid "Retrieving message (%d / %d) (%s / %s)" -msgstr "Empfange Nachricht (%d / %d) (%s / %s)" - -#: src/inc.c:811 -msgid "Authorizing..." -msgstr "Autorisieren..." - -#: src/inc.c:816 -msgid "Getting the number of new messages (STAT)..." -msgstr "Bekomme Anzahl der neuen Nachrichten (STAT)..." - -#: src/inc.c:821 -msgid "Getting the number of new messages (LAST)..." -msgstr "Bekomme Anzahl der neuen Nachrichten (LAST)..." - -#: src/inc.c:826 -msgid "Getting the number of new messages (UIDL)..." -msgstr "Bekomme Anzahl der neuen Nachrichten (UIDL)..." - -#: src/inc.c:831 -msgid "Getting the size of messages (LIST)..." -msgstr "Bekomme Anzahl der neuen Nachrichten (LIST)..." - -#: src/inc.c:849 -msgid "Deleting message" -msgstr "Lösche Nachricht" - -#: src/inc.c:853 -msgid "Quitting" -msgstr "Beenden" - -#: src/inc.c:885 -msgid "a message won't be received\n" -msgstr "eine Nachricht wurde nicht empfangen\n" - -#: src/inc.c:921 -msgid "Error occurred while processing mail." -msgstr "Fehler beim Verarbeiten der E-Mail." - -#: src/inc.c:925 -msgid "No disk space left." -msgstr "Kein Festplattenplatz mehr frei." - -#: src/inc.c:1009 -msgid "no messages in local mailbox.\n" -msgstr "Keine Nachrichten im lokalen Mailbox.\n" - -#: src/inc.c:1023 -#, c-format -msgid "Getting new messages from %s into %s...\n" -msgstr "Erhalte neue Nachrichten von %s in %s...\n" - -#: src/labelcolors.c:46 -msgid "Orange" -msgstr "Orange" - -#: src/labelcolors.c:47 -msgid "Red" -msgstr "Rot" - -#: src/labelcolors.c:48 -msgid "Pink" -msgstr "Pink" - -#: src/labelcolors.c:49 -msgid "Sky blue" -msgstr "Himmelblau" - -#: src/labelcolors.c:50 -msgid "Blue" -msgstr "Blau" - -#: src/labelcolors.c:51 -msgid "Green" -msgstr "Grün" - -#: src/labelcolors.c:52 -msgid "Brown" -msgstr "Braun" - -#. create sub items. for the menu item activation callback we pass the -#. * index of label_colors[] as data parameter. for the None color we pass -#. * an invalid (high) value. also we attach a data pointer so we can -#. * always get back the SummaryView pointer. -#: src/labelcolors.c:281 src/summaryview.c:512 -msgid "None" -msgstr "Keine" - -#: 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:113 src/main.c:122 src/mbox_folder.c:2089 src/mh.c:698 -#, 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:154 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread wird nicht unterstützt von Glib.\n" - -#: src/main.c:231 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"Gnup is nicht richtig installiert\n" -"OpenPGP-Unterstützung ausgeschaltet" - -#: src/main.c:326 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "Aufruf: %s [OPTION]...\n" - -#: src/main.c:329 -msgid " --compose [address] open composition window" -msgstr " --compose [Adresse] öffnet Verfassenfenster" - -#: src/main.c:330 -msgid " --receive receive new messages" -msgstr " --receive empfängt neue Nachrichten" - -#: src/main.c:331 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all empfängt neue Nachrichten von allen Accounts" - -#: src/main.c:332 -msgid " --debug debug mode" -msgstr " --debug Fehlersuche" - -#: src/main.c:333 -msgid " --help display this help and exit" -msgstr " --help diese Hilfe" - -#: src/main.c:334 -msgid " --version output version information and exit" -msgstr " --version gibt Version aus und beendet" - -#: src/main.c:359 -msgid "Composing message exists. Really quit?" -msgstr "Verfasste Nachricht existiert. Wirklich beenden?" - -#: src/main.c:366 -msgid "Queued messages" -msgstr "Wartende Nachrichten" - -#: src/main.c:367 -msgid "Some unsent messages are queued. Exit now?" -msgstr "Einige ungesendete Nachrichten vorhanden. Jetzt beenden?" - -#. remote command mode -#: src/main.c:440 -msgid "another Sylpheed is already running.\n" -msgstr "Ein anderes Sylpheed läuft schon.\n" - -#: src/mainwindow.c:373 -msgid "/_File/_Add mailbox..." -msgstr "/_Datei/_Mailbox hinzufügen..." - -#: src/mainwindow.c:374 -msgid "/_File/_Add mbox mailbox..." -msgstr "/_Datei/mbox _Mailbox hinzufügen..." - -#: src/mainwindow.c:375 -msgid "/_File/_Update folder tree" -msgstr "/_Datei/_Ablagebaum erneuern" - -#: src/mainwindow.c:376 -msgid "/_File/_Folder" -msgstr "/_Datei/Ab_lage" - -#: src/mainwindow.c:377 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/_Datei/Ab_lage/_Neue Ablage erstellen..." - -#: src/mainwindow.c:379 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/_Datei/Ab_lage/Ablage _umbenennen..." - -#: src/mainwindow.c:380 -msgid "/_File/_Folder/_Delete folder" -msgstr "/_Datei/Ab_lage/Ablage _löschen" - -#: src/mainwindow.c:381 -msgid "/_File/_Import mbox file..." -msgstr "/_Datei/_Importiere Mbox-Datei..." - -#: src/mainwindow.c:382 -msgid "/_File/_Export to mbox file..." -msgstr "/_Datei/_Exportiere in Mbox-Datei..." - -#: src/mainwindow.c:383 -msgid "/_File/Empty _trash" -msgstr "/_Datei/Papierkorb _leeren" - -#: src/mainwindow.c:385 -msgid "/_File/_Save as..." -msgstr "/_Datei/Speichern _als..." - -#: src/mainwindow.c:386 -msgid "/_File/_Print..." -msgstr "/_Datei/_Drucken..." - -#: src/mainwindow.c:389 -msgid "/_File/E_xit" -msgstr "/_Datei/_Beenden" - -#: src/mainwindow.c:395 -msgid "/_Edit/_Search" -msgstr "/_Bearbeiten/_Suchen" - -#: src/mainwindow.c:397 -msgid "/_View" -msgstr "/_Ansicht" - -#: src/mainwindow.c:398 -msgid "/_View/_Folder tree" -msgstr "/_Ansicht/Ablagebaum" - -#: src/mainwindow.c:399 -msgid "/_View/_Message view" -msgstr "/_Ansicht/_Nachrichtenansicht" - -#: src/mainwindow.c:400 -msgid "/_View/_Toolbar" -msgstr "/_Ansicht/_Werkzeugleiste" - -#: src/mainwindow.c:401 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/_Ansicht/_Werkzeugleiste/Bilder _und Text" - -#: src/mainwindow.c:402 -msgid "/_View/_Toolbar/_Icon" -msgstr "/_Ansicht/_Werkzeugleiste/_Bilder" - -#: src/mainwindow.c:403 -msgid "/_View/_Toolbar/_Text" -msgstr "/_Ansicht/_Werkzeugleiste/_Text" - -#: src/mainwindow.c:404 -msgid "/_View/_Toolbar/_None" -msgstr "/_Ansicht/_Werkzeugleiste/_Keine" - -#: src/mainwindow.c:405 -msgid "/_View/_Status bar" -msgstr "/_Ansicht/_Statuszeile" - -#: src/mainwindow.c:406 src/mainwindow.c:409 -msgid "/_View/---" -msgstr "/_Ansicht/---" - -#: src/mainwindow.c:407 -msgid "/_View/Separate f_older tree" -msgstr "/_Ansicht/_Einzelner Ablagebaum" - -#: src/mainwindow.c:408 -msgid "/_View/Separate m_essage view" -msgstr "/_Ansicht/_Getrennte Nachrichtenansicht" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set" -msgstr "/_Ansicht/_Zeichensatz" - -#: src/mainwindow.c:411 -msgid "/_View/_Code set/_Auto detect" -msgstr "/_Ansicht/_Zeichensatz/_Automatikerkennung" - -#: src/mainwindow.c:415 src/mainwindow.c:419 -msgid "/_View/_Code set/---" -msgstr "/_Ansicht/_Zeichensatz/---" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/_Ansicht/_Zeichensatz/7bit ascii (US-ASC_II)" - -#: src/mainwindow.c:424 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/_Ansicht/_Zeichensatz/Unicode (_UTF-8)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/_Ansicht/_Zeichensatz/Western European (ISO-8859-_1)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/_Ansicht/_Zeichensatz/Central European (ISO-8859-_2)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/_Ansicht/_Zeichensatz/_Baltic (ISO-8859-13)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/_Ansicht/_Zeichensatz/Baltic (ISO-8859-_4)" - -#: src/mainwindow.c:440 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/_Ansicht/_Zeichensatz/Greek (ISO-8859-_7)" - -#: src/mainwindow.c:443 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/_Ansicht/_Zeichensatz/Turkish (ISO-8859-_9)" - -#: src/mainwindow.c:446 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/_Ansicht/_Zeichensatz/Cyrillic (ISO-8859-_5)" - -#: src/mainwindow.c:448 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/_Ansicht/_Zeichensatz/Cyrillic (KOI8-_R)" - -#: src/mainwindow.c:450 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/_Ansicht/_Zeichensatz/Cyrillic (Windows-1251)" - -#: src/mainwindow.c:454 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/_Ansicht/_Zeichensatz/Japanese (ISO-2022-_JP)" - -#: src/mainwindow.c:457 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/_Ansicht/_Zeichensatz/Japanese (ISO-2022-JP-2)" - -#: src/mainwindow.c:460 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/_Ansicht/_Zeichensatz/Japanese (_EUC-JP)" - -#: src/mainwindow.c:462 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/_Ansicht/_Zeichensatz/Japanese (_Shift_JIS)" - -#: src/mainwindow.c:466 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/_Ansicht/_Zeichensatz/Simplified Chinese (_GB2312)" - -#: src/mainwindow.c:468 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/_Ansicht/_Zeichensatz/Traditional Chinese (_Big5)" - -#: src/mainwindow.c:470 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/_Ansicht/_Zeichensatz/Traditional Chinese (EUC-_TW)" - -#: src/mainwindow.c:472 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/_Ansicht/_Zeichensatz/Chinese (ISO-2022-_CN)" - -#: src/mainwindow.c:475 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/_Ansicht/_Zeichensatz/Korean (EUC-_KR)" - -#: src/mainwindow.c:477 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/_Ansicht/_Zeichensatz/Korean (ISO-2022-KR)" - -#: src/mainwindow.c:485 -msgid "/_Message/Get new ma_il" -msgstr "/_Nachricht/Empfange _neue E-Mail" - -#: src/mainwindow.c:486 -msgid "/_Message/Get from _all accounts" -msgstr "/_Nachricht/Empfange von _allen Accounts" - -#: src/mainwindow.c:489 -msgid "/_Message/Send queued messa_ges" -msgstr "/_Nachricht/Sende _wartende Nachrichten" - -#: src/mainwindow.c:492 -msgid "/_Message/Compose a_n email message" -msgstr "/_Nachricht/Verfasse n_eue Nachricht" - -#: src/mainwindow.c:493 -msgid "/_Message/Compose a news message" -msgstr "/_Nachricht/Verfasse n_eue News" - -#: src/mainwindow.c:494 -msgid "/_Message/_Reply" -msgstr "/_Nachricht/An_twort" - -#: src/mainwindow.c:495 -msgid "/_Message/Repl_y to sender" -msgstr "/_Nachricht/_Antwort an Absender" - -#: src/mainwindow.c:496 -msgid "/_Message/Follow-up and reply to" -msgstr "/_Nachricht/Folge nach und antworte an" - -#: src/mainwindow.c:497 -msgid "/_Message/Reply to a_ll" -msgstr "/_Nachricht/Antwort an a_lle" - -#: src/mainwindow.c:498 -msgid "/_Message/_Forward" -msgstr "/_Nachricht/We_iterleiten" - -#: src/mainwindow.c:499 -msgid "/_Message/Forward as a_ttachment" -msgstr "/_Nachricht/Weiterleiten als An_hang" - -#: src/mainwindow.c:502 -msgid "/_Message/M_ove..." -msgstr "/_Nachricht/_Verschieben..." - -#: src/mainwindow.c:503 -msgid "/_Message/_Copy..." -msgstr "/_Nachricht/_Kopieren..." - -#: src/mainwindow.c:504 -msgid "/_Message/_Delete" -msgstr "/_Nachricht/_Löschen" - -#: src/mainwindow.c:505 -msgid "/_Message/_Mark" -msgstr "/_Nachricht/_Markieren" - -#: src/mainwindow.c:506 -msgid "/_Message/_Mark/_Mark" -msgstr "/_Nachricht/_Markieren/_Markieren" - -#: src/mainwindow.c:507 -msgid "/_Message/_Mark/_Unmark" -msgstr "/_Nachricht/_Markieren/Markierung _entfernen" - -#: src/mainwindow.c:508 -msgid "/_Message/_Mark/---" -msgstr "/_Nachricht/_Markieren/---" - -#: src/mainwindow.c:509 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/_Nachricht/_Markieren/Markieren als _ungelesen" - -#: src/mainwindow.c:510 -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/_Nachricht/_Markieren/Markieren als _gelesen" - -#: src/mainwindow.c:513 -msgid "/_Message/Open in new _window" -msgstr "/_Nachricht/Öffne in neuen _Fenster" - -#: src/mainwindow.c:514 -msgid "/_Message/View _source" -msgstr "/_Nachricht/Zeige _Quellen" - -#: src/mainwindow.c:515 -msgid "/_Message/Show all _header" -msgstr "/_Nachricht/Zeige alle _Kopfzeilen" - -#: src/mainwindow.c:516 -msgid "/_Message/Re-_edit" -msgstr "/_Nachricht/Wieder_bearbeiten" - -#: src/mainwindow.c:518 -msgid "/_Summary" -msgstr "/E_xtras" - -#: src/mainwindow.c:519 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/E_xtras/_Lösche mehrfach vorhandene Nachrichten" - -#: src/mainwindow.c:521 -msgid "/_Summary/_Filter messages" -msgstr "/E_xtras/Nachrichten _filtern" - -#: src/mainwindow.c:522 -msgid "/_Summary/E_xecute" -msgstr "/E_xtras/_Ausführen" - -#: src/mainwindow.c:523 -msgid "/_Summary/_Update" -msgstr "/E_xtras/_Erneuern" - -#: src/mainwindow.c:524 src/mainwindow.c:530 src/mainwindow.c:532 -msgid "/_Summary/---" -msgstr "/E_xtras/---" - -#: src/mainwindow.c:525 -msgid "/_Summary/_Prev message" -msgstr "/E_xtras/_Vorherige Nachricht" - -#: src/mainwindow.c:526 -msgid "/_Summary/_Next message" -msgstr "/E_xtras/_Nächste Nachricht" - -#: src/mainwindow.c:527 -msgid "/_Summary/N_ext unread message" -msgstr "/E_xtras/Nächste _ungelesene Nachricht" - -#: src/mainwindow.c:528 -msgid "/_Summary/Prev marked message" -msgstr "/E_xtras/Vorherige markierte Nachricht" - -#: src/mainwindow.c:529 -msgid "/_Summary/Next marked message" -msgstr "/E_xtras/Nächste markierte Nachricht" - -#: src/mainwindow.c:531 -msgid "/_Summary/_Go to other folder" -msgstr "/E_xtras/_Gehe zu anderer Ablage" - -#: src/mainwindow.c:533 -msgid "/_Summary/_Sort" -msgstr "/E_xtras/_Sortieren" - -#: src/mainwindow.c:534 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/E_xtras/_Sortieren/Sortieren nach _Nummer" - -#: src/mainwindow.c:535 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/E_xtras/_Sortieren/Sortieren nach _Größe" - -#: src/mainwindow.c:536 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/E_xtras/_Sortieren/Sortieren nach _Datum" - -#: src/mainwindow.c:537 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/E_xtras/_Sortieren/Sortieren nach _Absender" - -#: src/mainwindow.c:538 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/E_xtras/_Sortieren/Sortieren nach _Betreff" - -#: src/mainwindow.c:539 -msgid "/_Summary/_Sort/Sort by sco_re" -msgstr "/E_xtras/_Sortieren/Sortieren nach _Note" - -#: src/mainwindow.c:540 -msgid "/_Summary/_Sort/Sort by _label" -msgstr "/E_xtras/_Sortieren/Sortieren nach _Etikett" - -#: src/mainwindow.c:541 -msgid "/_Summary/_Sort/---" -msgstr "/E_xtras/_Sortieren/---" - -#: src/mainwindow.c:542 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/E_xtras/_Sortieren/_Attract by subject" - -#: src/mainwindow.c:544 -msgid "/_Summary/_Thread view" -msgstr "/E_xtras/_Threads einschalten" - -#: src/mainwindow.c:545 -msgid "/_Summary/Unt_hread view" -msgstr "/E_xtras/T_hreads ausschalten" - -#: src/mainwindow.c:546 -msgid "/_Summary/Set display _item..." -msgstr "/E_xtras/Setze Anzeige _Informationen..." - -#: src/mainwindow.c:550 -msgid "/_Tool/_Log window" -msgstr "/Werkzeug/_Logbuch-Fenster" - -#: src/mainwindow.c:552 -msgid "/_Configuration" -msgstr "/_Einstellungen" - -#: src/mainwindow.c:553 -msgid "/_Configuration/_Common preferences..." -msgstr "/_Einstellungen/Allgemeine _Einstellungen..." - -#: src/mainwindow.c:555 -msgid "/_Configuration/_Filter setting..." -msgstr "/_Einstellungen/_Filtereinstellungen..." - -#: src/mainwindow.c:557 -msgid "/_Configuration/_Scoring ..." -msgstr "/_Einstellungen/_Benotung ..." - -#: src/mainwindow.c:559 -msgid "/_Configuration/_Filtering ..." -msgstr "/_Einstellungen/_Filterung ..." - -#: src/mainwindow.c:561 -msgid "/_Configuration/_Preferences per account..." -msgstr "/_Einstellungen/_Accounteinstellungen..." - -#: src/mainwindow.c:563 -msgid "/_Configuration/---" -msgstr "/_Einstellungen/---" - -#: src/mainwindow.c:564 -msgid "/_Configuration/Create _new account..." -msgstr "/_Einstellungen/_Neuen Account erstellen..." - -#: src/mainwindow.c:566 -msgid "/_Configuration/_Edit accounts..." -msgstr "/_Einstellungen/Accounts _bearbeiten..." - -#: src/mainwindow.c:568 -msgid "/_Configuration/C_hange current account" -msgstr "/_Einstellungen/Aktuellen Account _wechseln..." - -#: src/mainwindow.c:572 -msgid "/_Help/_Manual" -msgstr "/_Hilfe/_Anleitung" - -#: src/mainwindow.c:573 -msgid "/_Help/_Manual/_English" -msgstr "/_Hilfe/Anleitung/_Englisch" - -#: src/mainwindow.c:574 -msgid "/_Help/_Manual/_Japanese" -msgstr "/_Hilfe/Anleitung/_Japanisch" - -#: src/mainwindow.c:575 -msgid "/_Help/---" -msgstr "/_Hilfe/---" - -#: src/mainwindow.c:604 -msgid "Creating main window...\n" -msgstr "Erstelle Hauptfenster...\n" - -#: src/mainwindow.c:723 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "Haupt-Fenster: Bereitstellung von Farbe %d fehlgeschlagen\n" - -#: src/mainwindow.c:891 src/mainwindow.c:908 -msgid "Untitled" -msgstr "Unbenannt" - -#: src/mainwindow.c:909 -msgid "none" -msgstr "nicht" - -#: src/mainwindow.c:918 -#, c-format -msgid "Current account: %s" -msgstr "Aktueller Account: %s" - -#: src/mainwindow.c:1009 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "Fensterposition: x = %d, y = %d\n" - -#: src/mainwindow.c:1017 -msgid "Empty trash" -msgstr "Leere Papierkorb" - -#: src/mainwindow.c:1018 -msgid "Empty all messages in trash?" -msgstr "Lösche alle Nachrichten im Papierkorb?" - -#: src/mainwindow.c:1046 -msgid "Add mailbox" -msgstr "Neue Mailbox" - -#: src/mainwindow.c:1047 -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:1053 src/mainwindow.c:1093 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "Die Mailbox `%s' existiert bereits." - -#: src/mainwindow.c:1059 src/setup.c:57 -msgid "Mailbox" -msgstr "Mailbox" - -#: src/mainwindow.c:1066 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:1086 -msgid "Add mbox mailbox" -msgstr "Neue mbox Mailbox" - -#: src/mainwindow.c:1087 -msgid "Input the location of mailbox." -msgstr "Ort der Mailbox eingeben." - -#: src/mainwindow.c:1108 -msgid "Creation of the mailbox failed." -msgstr "Erstellung der Mailbox schlug fehl." - -#: src/mainwindow.c:1270 -msgid "Setting widgets..." -msgstr "Setze Widgets..." - -#: src/mainwindow.c:1484 -msgid "Get" -msgstr "Holen" - -#: src/mainwindow.c:1485 -msgid "Get new mail from current account" -msgstr "Empfange Nachrichten für diesen Account" - -#: src/mainwindow.c:1491 -msgid "Get new mail from all accounts" -msgstr "Neue E-Mail aller Accounts holen" - -#: src/mainwindow.c:1502 -msgid "Send queued message(s)" -msgstr "Senden wartender Nachrichten" - -#: src/mainwindow.c:1519 -msgid "Compose email message" -msgstr "Neue Nachricht verfassen" - -#: src/mainwindow.c:1520 -msgid "email" -msgstr "Email" - -#: src/mainwindow.c:1528 src/mainwindow.c:1565 -msgid "Email" -msgstr "Email" - -#: src/mainwindow.c:1543 -msgid "Compose news article" -msgstr "Neue News verfassen" - -#: src/mainwindow.c:1544 -msgid "news" -msgstr "News" - -#: src/mainwindow.c:1552 src/mainwindow.c:1576 src/prefs_common.c:912 -msgid "News" -msgstr "News" - -#: src/mainwindow.c:1566 -msgid "Compose an email message" -msgstr "Verfasse Email" - -#: src/mainwindow.c:1577 -msgid "Compose a news message" -msgstr "Verfasse News" - -#: src/mainwindow.c:1603 -msgid "Reply" -msgstr "Antwort" - -#: src/mainwindow.c:1604 -msgid "Reply to the message" -msgstr "Nachricht beantworten" - -#: src/mainwindow.c:1611 -msgid "All" -msgstr "Alle" - -#: src/mainwindow.c:1612 -msgid "Reply to all" -msgstr "Antwort an alle" - -#: src/mainwindow.c:1619 -msgid "Sender" -msgstr "Absender" - -#: src/mainwindow.c:1620 -msgid "Reply to sender" -msgstr "Antwort an Absender" - -#: src/mainwindow.c:1627 src/prefs_filtering.c:223 -msgid "Forward" -msgstr "Weiterleiten" - -#: src/mainwindow.c:1628 -msgid "Forward the message" -msgstr "Nachricht weiterleiten" - -#: src/mainwindow.c:1639 -msgid "Delete the message" -msgstr "Nachricht löschen" - -#: src/mainwindow.c:1647 src/prefs_filtering.c:225 src/prefs_filtering.c:461 -#: src/prefs_matcher.c:149 -msgid "Execute" -msgstr "Ausführen" - -#: src/mainwindow.c:1648 -msgid "Execute marked process" -msgstr "Markierten Prozess ausführen" - -#: src/mainwindow.c:1656 -msgid "Next" -msgstr "Nächste" - -#: src/mainwindow.c:1657 -msgid "Next unread message" -msgstr "Nächste ungelesene Nachricht" - -#: src/mainwindow.c:1739 -msgid "Email message" -msgstr "Emailnachricht" - -#: src/mainwindow.c:1747 -msgid "News article" -msgstr "News Artikel" - -#: src/mainwindow.c:1993 src/summaryview.c:3403 -msgid "Exit" -msgstr "Beenden" - -#: src/mainwindow.c:1993 src/summaryview.c:3403 -msgid "Exit this program?" -msgstr "Beenden des Programms?" - -#: src/mainwindow.c:2133 -msgid "Sending queued message failed." -msgstr "Senden wartender Nachrichten fehlgeschlagen." - -#: src/mainwindow.c:2334 -#, c-format -msgid "forced charset: %s\n" -msgstr "erzwungener Zeichensatz: %s\n" - -#: src/matcher.c:1359 -#, c-format -msgid "%s(%d) - filename is not set" -msgstr "%s(%d) - Dateiname ist nicht gesetzt" - -#: src/mbox.c:51 src/mbox.c:198 -msgid "can't write to temporary file\n" -msgstr "kann nicht in temporäre Datei schreiben\n" - -#: src/mbox.c:69 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "Erhaltene Nachrichten von %s in %s...\n" - -#: src/mbox.c:79 -msgid "can't read mbox file.\n" -msgstr "Kann Mbox-Datei nicht lesen.\n" - -#: src/mbox.c:86 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "Ungültiges Mbox-Format: %s\n" - -#: src/mbox.c:93 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "zerstörte Mbox: %s\n" - -#: src/mbox.c:111 -msgid "can't open temporary file\n" -msgstr "kann temporäre Datei nicht öffnen\n" - -#: src/mbox.c:163 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"uncodiertes Von gefunden:\n" -"%s" - -#: src/mbox.c:243 -#, c-format -msgid "%d messages found.\n" -msgstr "%d Nachrichten gefunden.\n" - -#: src/mbox.c:260 src/mbox_folder.c:122 -#, c-format -msgid "can't create lock file %s\n" -msgstr "kann Sperrdatei %s nicht erstellen\n" - -#: src/mbox.c:261 src/mbox_folder.c:123 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "Benutze, wenn möglich, 'flock' anstatt 'file'.\n" - -#: src/mbox.c:273 src/mbox_folder.c:135 -#, c-format -msgid "can't create %s\n" -msgstr "Kann %s nicht erstellen\n" - -#: src/mbox.c:279 src/mbox_folder.c:141 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "Mailbox gehört einem anderen Prozess, warten...\n" - -#: src/mbox.c:308 -#, c-format -msgid "can't lock %s\n" -msgstr "kann %s nicht sperren\n" - -#: src/mbox.c:315 src/mbox.c:362 -msgid "invalid lock type\n" -msgstr "ungültiger Sperrtyp\n" - -#: src/mbox.c:348 -#, c-format -msgid "can't unlock %s\n" -msgstr "kann %s nicht entperren\n" - -#: src/mbox.c:379 -msgid "can't truncate mailbox to zero.\n" -msgstr "Kann Mailbox nicht auf null setzen.\n" - -#: src/mbox.c:400 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "Exportiere Nachrichten von %s in %s...\n" - -#: src/mbox_folder.c:219 -#, c-format -msgid "could not lock read file %s\n" -msgstr "kann Lesedatei %s nicht sperren\n" - -#: src/mbox_folder.c:238 -#, c-format -msgid "could not lock write file %s\n" -msgstr "kann Schreibdatei %s nicht sperren\n" - -#: src/mbox_folder.c:797 -#, c-format -msgid "read mbox - %s\n" -msgstr "lese Mbox - %s\n" - -#: src/mbox_folder.c:828 -#, c-format -msgid "read mbox from file - %s\n" -msgstr "Lese Mbox aus Datei - %s\n" - -#: src/mbox_folder.c:1378 src/mbox_folder.c:1390 -#, c-format -msgid "unvalid file - %s.\n" -msgstr "ungültige Datei - %s.\n" - -#: src/mbox_folder.c:1408 src/mbox_folder.c:1783 src/utils.c:1571 -#: src/utils.c:1648 -#, c-format -msgid "writing to %s failed.\n" -msgstr "Schreiben in %s fehlgeschlagen.\n" - -#: src/mbox_folder.c:1731 src/mh.c:668 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Letzte Nummer im Verzeichnis %s = %d\n" - -#: src/mbox_folder.c:1924 -#, c-format -msgid "no modification - %s\n" -msgstr "keine Veränderungen - %s\n" - -#: src/mbox_folder.c:1928 -#, c-format -msgid "save modification - %s\n" -msgstr "speicher Änderungen - %s\n" - -#: src/mbox_folder.c:1961 src/mbox_folder.c:2057 -#, c-format -msgid "can't rename %s to %s\n" -msgstr "kann %s nicht in %s umbenennen\n" - -#: src/mbox_folder.c:1982 src/mbox_folder.c:2078 -#, c-format -msgid "%i messages written - %s\n" -msgstr "%i Nachrichten geschrieben - %s\n" - -#: src/mbox_folder.c:2018 -#, c-format -msgid "no deleted messages - %s\n" -msgstr "keine gelöschten Nachrichten - %s\n" - -#: src/mbox_folder.c:2022 -#, c-format -msgid "purge deleted messages - %s\n" -msgstr "bereinige gelöschte Nachrichten - %s\n" - -#: src/mbox_folder.c:2200 -msgid "Cannot rename folder item" -msgstr "Kann Ablagenelement nicht umbenennen" - -#: src/messageview.c:70 -msgid "Creating message view...\n" -msgstr "Erstelle Nachrichtenansicht...\n" - -#: src/messageview.c:346 -msgid "" -"Error occurred while sending the notification.\n" -"Put this notification into queue folder?" -msgstr "" -"Fehler aufgetreten beim Senden der Benachrichtigung.\n" -"Soll die Benachrichtigung in die Queue-Ablage?" - -#: src/messageview.c:352 -msgid "Can't queue the notification." -msgstr "Benachrichtigung kann nicht eingereiht werden." - -#: src/messageview.c:355 -msgid "Error occurred while sending the notification." -msgstr "Fehler aufgetreten beim Senden der Benachrichtigung." - -#: src/messageview.c:416 -msgid "Return Receipt" -msgstr "Empfangsbestätigung" - -#: src/messageview.c:416 -msgid "Send return receipt ?" -msgstr "Empfangsbestätigung senden?" - -#: src/messageview.c:420 -msgid "Error occurred while sending notification." -msgstr "Fehler aufgetreten beim Senden der Benachrichtigung." - -#: src/mh.c:158 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "kann Nachricht %s nicht nach %s kopieren\n" - -#: src/mh.c:206 src/mh.c:291 src/mh.c:370 src/mh.c:510 -msgid "Can't open mark file.\n" -msgstr "Kann markierte Datei nicht öffnen.\n" - -#: src/mh.c:383 src/mh.c:528 -#, c-format -msgid "%s already exists." -msgstr "%s existiert bereits." - -#: src/mh.c:873 -msgid "\tSearching uncached messages... " -msgstr "\tSuche nicht zwischengespeicherte Nachrichten..." - -#: src/mh.c:928 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "%d nicht zwischengespeicherte Nachricht(en) gefunden.\n" - -#: src/mh.c:934 -msgid "\tSorting uncached messages in numerical order... " -msgstr "" -"\tSortiere, nicht zwischengespeicherte, Nachrichten in numerischer " -"Reihenfolge... " - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/_Öffnen" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/Öffne _mit..." - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/_Darstellung als Text" - -#: src/mimeview.c:116 src/summaryview.c:355 -msgid "/_Save as..." -msgstr "/Speichern _als..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/_Digitale Unterschrift überprüfen" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "MIME Typ" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "Erstelle MIME-Ansicht...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "Wähle \"Digitale Unterschrift überprüfen\" zum überprüfen" - -#: src/mimeview.c:682 src/mimeview.c:730 src/mimeview.c:749 src/mimeview.c:772 -msgid "Can't save the part of multipart message." -msgstr "Kann einen Teil einer mehrteiligen Nachricht nicht speichern." - -#: src/mimeview.c:716 src/summaryview.c:2832 -msgid "Save as" -msgstr "Speichern als" - -#: src/mimeview.c:722 src/summaryview.c:2837 -msgid "Overwrite" -msgstr "Überschreiben" - -#: src/mimeview.c:723 src/summaryview.c:2838 -msgid "Overwrite existing file?" -msgstr "Überschreibe existierende Datei?" - -#: src/mimeview.c:777 -msgid "Open with" -msgstr "Öffnen mit" - -#: src/mimeview.c:778 -#, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Geben Sie die Befehlszeile zum Öffnen der Datei an:\n" -"(`%s' wird durch den Dateinamen ersetzt)" - -#: src/mimeview.c:830 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "MIME Betrachterbefehl ist ungültig: `%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "erstelle NNTP-Verbindung zu %s:%d ...\n" - -#: src/news.c:182 -#, 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:257 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "Artikel %d wurde schon zwischengespeichert.\n" - -#: src/news.c:270 -#, c-format -msgid "can't select group %s\n" -msgstr "kann die Gruppe: %s nicht wählen\n" - -#: src/news.c:275 -#, c-format -msgid "getting article %d...\n" -msgstr "empfange Artikel %d...\n" - -#: src/news.c:280 -#, c-format -msgid "can't read article %d\n" -msgstr "kann Artikel %d nicht lesen\n" - -#: src/news.c:325 -msgid "can't retrieve newsgroup list\n" -msgstr "kann die Gruppenliste nicht empfangen\n" - -#: src/news.c:397 -msgid "can't post article.\n" -msgstr "kann Artikel nicht senden.\n" - -#: src/news.c:421 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "kann Artikel %d nicht empfangen\n" - -#: src/news.c:491 -#, c-format -msgid "can't set group: %s\n" -msgstr "kann die Gruppe: %s nicht setzen\n" - -#: src/news.c:498 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "ungültiger Artikelbereich: %d - %d\n" - -#: src/news.c:507 -msgid "no new articles.\n" -msgstr "Keine neuen Artikel.\n" - -#: src/news.c:520 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "bekomme Newsübersicht %d - %d in %s...\n" - -#: src/news.c:523 -msgid "can't get xover\n" -msgstr "kann Newsübersicht nicht bekommen\n" - -#: src/news.c:529 -msgid "error occurred while getting xover.\n" -msgstr "Fehler beim Empfang der Newsübersicht.\n" - -#: src/news.c:537 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "ungültige Newsübersichtszeile: %s\n" - -#: src/news.c:555 src/news.c:580 -msgid "can't get xhdr\n" -msgstr "kann XHDR nicht bekommen\n" - -#: src/news.c:563 src/news.c:588 -msgid "error occurred while getting xhdr.\n" -msgstr "Fehler beim Empfang von XHDR.\n" - -#: src/news.c:713 -#, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "Lösche zwischengespeicherte Artikel 1 - %d ... " - -#: src/news.c:742 -msgid "\tDeleting all cached articles... " -msgstr "\tLösche alle zwischengespeicherten Artikel... " - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "keine Verbindung mit NNTP-Server: %s:%d\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "Protokollfehler: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "Protokollfehler\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "Fehler beim Senden\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "Mantra" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[keine Benutzer-ID]" - -#: src/passphrase.c:244 -#, 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:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"Falsches Mantra! Nochmal...\n" -"\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authentication\n" -msgstr "Fehler bei der Autorisierung\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "Erforderlichen APOP-Zeitstempel in der Begrüßung nicht gefunden\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "Zeitstempel Syntax-Fehler in Begrüßung\n" - -#: src/pop.c:171 src/pop.c:212 -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:184 -#, 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:141 src/prefs.c:169 src/prefs.c:214 src/prefs_account.c:444 -#: src/prefs_account.c:458 src/prefs_customheader.c:393 -#: src/prefs_customheader.c:439 src/prefs_display_header.c:429 -#: src/prefs_display_header.c:454 src/prefs_filter.c:533 -#: src/prefs_filter.c:557 src/scoring.c:428 src/scoring.c:439 -msgid "failed to write configuration to file\n" -msgstr "konnte nicht in die Konfigurationsdatei schreiben\n" - -#: src/prefs.c:217 -msgid "Configuration is saved.\n" -msgstr "Konfiguration wurde gespeichert.\n" - -#: src/prefs.c:272 -#, c-format -msgid "no permission - %s\n" -msgstr "keine Berechtigung - %s\n" - -#: src/prefs.c:477 -msgid "Apply" -msgstr "Übernehmen" - -#: src/prefs_account.c:492 -msgid "Opening account preferences window...\n" -msgstr "Öffne Accounteinstellungenfenster...\n" - -#: src/prefs_account.c:519 -#, c-format -msgid "Account%d" -msgstr "Account%d" - -#: src/prefs_account.c:532 -msgid "Preferences for new account" -msgstr "Einstellungen eines neuen Accounts" - -#: src/prefs_account.c:537 -msgid "Preferences for each account" -msgstr "Einstellungen für jeden Account" - -#: src/prefs_account.c:565 -msgid "Creating account preferences window...\n" -msgstr "Erstelle Accounteinstellungenfenster...\n" - -#. Receive Options -#: src/prefs_account.c:587 src/prefs_account.c:1255 src/prefs_common.c:758 -msgid "Receive" -msgstr "Empfangen" - -#: src/prefs_account.c:591 src/prefs_common.c:762 -msgid "Compose" -msgstr "Verfassen" - -#: src/prefs_account.c:594 src/prefs_common.c:769 -msgid "Privacy" -msgstr "Privat" - -#: src/prefs_account.c:598 -msgid "SSL" -msgstr "SSL" - -#: src/prefs_account.c:601 -msgid "Advanced" -msgstr "Speziell" - -#: src/prefs_account.c:682 -msgid "Name of this account" -msgstr "Name dieses Accounts" - -#: src/prefs_account.c:691 -msgid "Usually used" -msgstr "Standard" - -#: src/prefs_account.c:695 -msgid "Personal information" -msgstr "Persönliche Informationen" - -#: src/prefs_account.c:704 -msgid "Full name" -msgstr "Vollständiger Name" - -#: src/prefs_account.c:710 -msgid "Mail address" -msgstr "E-Mail-Adresse" - -#: src/prefs_account.c:716 -msgid "Organization" -msgstr "Organisation" - -#: src/prefs_account.c:740 -msgid "Server information" -msgstr "Serverdaten" - -#: src/prefs_account.c:761 -msgid "POP3 (normal)" -msgstr "POP3 (normal)" - -#: src/prefs_account.c:763 -msgid "POP3 (APOP auth)" -msgstr "POP3 (APOP auth)" - -#: src/prefs_account.c:765 src/prefs_account.c:967 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:767 -msgid "News (NNTP)" -msgstr "News (NNTP)" - -#: src/prefs_account.c:769 -msgid "None (local)" -msgstr "Keiner (lokal)" - -#: src/prefs_account.c:798 -msgid "This server requires authentication" -msgstr "Dieser Server benötigt Beglaubigung" - -#: src/prefs_account.c:842 -msgid "News server" -msgstr "Newsserver" - -#: src/prefs_account.c:848 -msgid "Server for receiving" -msgstr "Server zum Empfangen" - -#: src/prefs_account.c:854 -msgid "Local mailbox file" -msgstr "Lokale Mailboxdatei" - -#. gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); -#: src/prefs_account.c:861 -msgid "SMTP server (send)" -msgstr "SMTP-Server (senden)" - -#: src/prefs_account.c:869 -msgid "Use mail command rather than SMTP server" -msgstr "Verwende Mailkommand anstelle von SMTP-Server" - -#: src/prefs_account.c:878 -msgid "command to send mails" -msgstr "Kommando zum Versenden" - -#. gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); -#: src/prefs_account.c:885 -msgid "User ID" -msgstr "Benutzer-ID" - -#: src/prefs_account.c:891 -msgid "Password" -msgstr "Kennwort" - -#: src/prefs_account.c:950 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:958 -msgid "Remove messages on server when received" -msgstr "Nachrichten vom Server nach Empfang löschen" - -#: src/prefs_account.c:960 -msgid "Download all messages on server" -msgstr "Empfange alle Nachrichten vom Server" - -#: src/prefs_account.c:963 -msgid "`Get all' checks for new mail on this account" -msgstr "" -"`Empfange alle' überprüft ob neue E-Mails für diesen Account vorhanden sind" - -#: src/prefs_account.c:965 -msgid "Filter messages on receiving" -msgstr "Nachrichten beim Empfang filtern" - -#: src/prefs_account.c:978 -msgid "IMAP server directory" -msgstr "IMAP Serververzeichnis" - -#: src/prefs_account.c:1024 src/prefs_customheader.c:196 -#: src/prefs_filter.c:259 src/prefs_matcher.c:143 -msgid "Header" -msgstr "Kopfzeilen" - -#: src/prefs_account.c:1031 -msgid "Add Date header field" -msgstr "Füge Datum in Kopfzeile ein" - -#: src/prefs_account.c:1032 -msgid "Generate Message-ID" -msgstr "Erzeuge Nachrichten-ID" - -#: src/prefs_account.c:1039 -msgid "Add user-defined header" -msgstr "Füge benutzerdefinierte Kopfzeile ein" - -#: src/prefs_account.c:1041 src/prefs_common.c:1667 src/prefs_common.c:1692 -msgid " Edit... " -msgstr " Bearbeiten... " - -#: src/prefs_account.c:1051 -msgid "Automatically set following addresses" -msgstr "Setze automatisch folgende Adressen" - -#: src/prefs_account.c:1060 src/prefs_matcher.c:140 -msgid "Cc" -msgstr "Cc" - -#: src/prefs_account.c:1073 -msgid "Bcc" -msgstr "Bcc" - -#: src/prefs_account.c:1086 -msgid "Reply-To" -msgstr "Antwort an" - -#: src/prefs_account.c:1099 -msgid "Authentication" -msgstr "Beglaubigung" - -#: src/prefs_account.c:1107 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "SMTP-Beglaubigung (SMTP AUTH)" - -#: src/prefs_account.c:1109 -msgid "Authenticate with POP3 before sending" -msgstr "Beglaubige mit POP3 vor dem Senden" - -#: src/prefs_account.c:1143 -msgid "Signature file" -msgstr "Datei mit Unterschrift" - -#: src/prefs_account.c:1172 -msgid "Sign key" -msgstr "Schlüssel für digitale Unterschrift" - -#: src/prefs_account.c:1180 -msgid "Use default GnuPG key" -msgstr "Benutze voreingestellten GnuPg Schlüssel" - -#: src/prefs_account.c:1189 -msgid "Select key by your email address" -msgstr "Wähle Schlüssel nach E-Mail Adresse" - -#: src/prefs_account.c:1198 -msgid "Specify key manually" -msgstr "Schlüssel manuell angeben" - -#: src/prefs_account.c:1214 -msgid "User or key ID:" -msgstr "Benutzer- oder Schlüssel-ID" - -#: src/prefs_account.c:1262 -msgid "Use SSL tunnel to connect to POP server" -msgstr "Verwende SSL-Tunnel um zum POP3-Server zu verbinden" - -#: src/prefs_account.c:1263 -msgid "Use SSL tunnel to connect to IMAP server" -msgstr "Verwende SSL-Tunnel um zum IMAP-Server zu verbinden" - -#: src/prefs_account.c:1274 -msgid "No SSL for SMTP" -msgstr "Kein SSL für SMTP" - -#: src/prefs_account.c:1283 -msgid "Use SSL tunnel to connect to SMTP server" -msgstr "Verwende SSL-Tunnel um zum SMTP-Server zu verbinden" - -#: src/prefs_account.c:1292 -msgid "Use STARTTLS command to start SMTP SSL session" -msgstr "Verwende STARTTLS Kommando zum starten einer SMTP SSL Sitzung" - -#: src/prefs_account.c:1351 -msgid "Specify SMTP port" -msgstr "SMTP-Port angeben" - -#: src/prefs_account.c:1357 -msgid "Specify POP3 port" -msgstr "POP3-Port angeben" - -#: src/prefs_account.c:1363 -msgid "Specify IMAP4 port" -msgstr "IMAP-Port angeben" - -#: src/prefs_account.c:1369 -msgid "Specify NNTP port" -msgstr "NNTP-Port angeben" - -#: src/prefs_account.c:1374 -msgid "Specify domain name" -msgstr "Domäne angeben" - -#: src/prefs_account.c:1431 -msgid "Mail address is not entered." -msgstr "Keine E-Mail-Adresse angegeben." - -#: src/prefs_account.c:1436 -msgid "SMTP server is not entered." -msgstr "Keinen SMTP-Server angegeben." - -#: src/prefs_account.c:1441 -msgid "User ID is not entered." -msgstr "Keine Benutzer-ID angegeben." - -#: src/prefs_account.c:1446 -msgid "POP3 server is not entered." -msgstr "Keinen POP3-Server angegeben." - -#: src/prefs_account.c:1451 -msgid "IMAP4 server is not entered." -msgstr "Keinen IMAP4-Server angegeben." - -#: src/prefs_account.c:1456 -msgid "NNTP server is not entered." -msgstr "Keinen NNTP-Server angegeben." - -#: src/prefs_account.c:1462 -msgid "local mailbox filename is not entered." -msgstr "Keine Dateinamen für die lokale Mailbox angegeben." - -#: src/prefs_account.c:1468 -msgid "mail command is not entered." -msgstr "Keine Mailkommando angegeben." - -#: src/prefs_common.c:735 -msgid "Creating common preferences window...\n" -msgstr "Erstelle Allgemeine-Einstellungenfenster...\n" - -#: src/prefs_common.c:739 -msgid "Common Preferences" -msgstr "Allgemeine Einstellungen" - -#: src/prefs_common.c:764 -msgid "Display" -msgstr "Anzeige" - -#: src/prefs_common.c:766 -msgid "Message" -msgstr "Nachricht" - -#: src/prefs_common.c:772 -msgid "Interface" -msgstr "Benutzerschnittstelle" - -#: src/prefs_common.c:774 src/select-keys.c:324 -msgid "Other" -msgstr "Weiteres" - -#: src/prefs_common.c:817 src/prefs_common.c:980 -msgid "External program" -msgstr "Externes Programm" - -#: src/prefs_common.c:826 -msgid "Use external program for incorporation" -msgstr "Benutze externes Programm, um E-Mails zu empfangen" - -#: src/prefs_common.c:833 src/prefs_common.c:997 -msgid "Program path" -msgstr "Programmpfad" - -#: src/prefs_common.c:845 -msgid "Local spool" -msgstr "Lokale Mailboxdatei" - -#: src/prefs_common.c:856 -msgid "Incorporate from spool" -msgstr "Empfange aus lokaler Mailboxdatei" - -#: src/prefs_common.c:858 -msgid "Filter on incorporation" -msgstr "Filtern beim Empfangen" - -#: src/prefs_common.c:866 -msgid "Spool directory" -msgstr "lokales Mailboxverzeichnis" - -#: src/prefs_common.c:884 -msgid "Auto-check new mail" -msgstr "Automatische Aktualisierung" - -#: src/prefs_common.c:886 -msgid "each" -msgstr "alle" - -#: src/prefs_common.c:898 -msgid "minute(s)" -msgstr "Minute(n)" - -#: src/prefs_common.c:907 -msgid "Check new mail on startup" -msgstr "Hole neue E-Mail beim Programmstart" - -#: src/prefs_common.c:910 -msgid "No error popup on receive error" -msgstr "Kein Popup-Fenster bei Empfangsfehlern" - -#: src/prefs_common.c:920 -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:990 -msgid "Use external program for sending" -msgstr "Benutze externes Programm zum Senden" - -#: src/prefs_common.c:1014 -msgid "Save sent messages to outbox" -msgstr "Gesendete Nachrichten in Outbox speichern" - -#: src/prefs_common.c:1016 -msgid "Queue messages that fail to send" -msgstr "Nachrichten die nicht gesendet werden konnten, in Queue-Ablage" - -#: src/prefs_common.c:1018 -msgid "Send return receipt on request" -msgstr "Empfangsbestätigung bei Anforderung senden" - -#: src/prefs_common.c:1024 -msgid "Outgoing codeset" -msgstr "Ausgehender Zeichensatz" - -#: src/prefs_common.c:1039 -msgid "Automatic (Recommended)" -msgstr "Automatisch (Empfohlen)" - -#: src/prefs_common.c:1040 -msgid "7bit ascii (US-ASCII)" -msgstr "7bit ascii (US-ASCII)" - -#: src/prefs_common.c:1042 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:1044 -msgid "Western European (ISO-8859-1)" -msgstr "Westeuropäisch (ISO-8859-1)" - -#: src/prefs_common.c:1045 -msgid "Central European (ISO-8859-2)" -msgstr "Mitteleuropäisch (ISO-8859-2)" - -#: src/prefs_common.c:1046 -msgid "Baltic (ISO-8859-13)" -msgstr "Baltisch (ISO-8859-13)" - -#: src/prefs_common.c:1047 -msgid "Baltic (ISO-8859-4)" -msgstr "Baltisch (ISO-8859-4)" - -#: src/prefs_common.c:1048 -msgid "Greek (ISO-8859-7)" -msgstr "Griechisch (ISO-8859-7)" - -#: src/prefs_common.c:1049 -msgid "Turkish (ISO-8859-9)" -msgstr "Türkisch (ISO-8859-9)" - -#: src/prefs_common.c:1051 -msgid "Cyrillic (ISO-8859-5)" -msgstr "Kyrillisch (ISO-8859-5)" - -#: src/prefs_common.c:1053 -msgid "Cyrillic (KOI8-R)" -msgstr "Kyrillisch (KOI8-R)" - -#: src/prefs_common.c:1055 -msgid "Cyrillic (Windows-1251)" -msgstr "Kyrillisch (Windows-1251)" - -#: src/prefs_common.c:1056 -msgid "Cyrillic (KOI8-U)" -msgstr "Kyrillisch (KOI8-U)" - -#: src/prefs_common.c:1058 -msgid "Japanese (ISO-2022-JP)" -msgstr "Japanisch (ISO-2022-JP)" - -#: src/prefs_common.c:1060 -msgid "Japanese (EUC-JP)" -msgstr "Japanisch (EUC-JP)" - -#: src/prefs_common.c:1061 -msgid "Japanese (Shift_JIS)" -msgstr "Japanisch (Shift_JIS)" - -#: src/prefs_common.c:1063 -msgid "Simplified Chinese (GB2312)" -msgstr "Vereinfachtes Chinesisch (GB2312)" - -#: src/prefs_common.c:1064 -msgid "Traditional Chinese (Big5)" -msgstr "Traditioneles Chinesisch (Big5)" - -#: src/prefs_common.c:1066 -msgid "Traditional Chinese (EUC-TW)" -msgstr "Traditioneles Chinesisch (EUC-TW)" - -#: src/prefs_common.c:1067 -msgid "Chinese (ISO-2022-CN)" -msgstr "Chinesisch (ISO-2022-CN)" - -#: src/prefs_common.c:1069 -msgid "Korean (EUC-KR)" -msgstr "Koreanisch (EUC-KR)" - -#: src/prefs_common.c:1150 -msgid "Select spelling checker location" -msgstr "Wähle Ort des Rechtschreibprüfungsprogramms" - -#: src/prefs_common.c:1289 -msgid " Quote format " -msgstr " Zitatformat " - -#: src/prefs_common.c:1303 -msgid "Insert signature automatically" -msgstr "Füge Unterschrift automatisch hinzu" - -#: src/prefs_common.c:1309 -msgid "Signature separator" -msgstr "Unterschriftentrenner" - -#: src/prefs_common.c:1327 -msgid "Wrap messages at" -msgstr "Zeilenumbruch nach" - -#: src/prefs_common.c:1339 -msgid "characters" -msgstr "Zeichen" - -#: src/prefs_common.c:1347 -msgid "Wrap quotation" -msgstr "Zitat umbrechen" - -#: src/prefs_common.c:1349 -msgid "Wrap before sending" -msgstr "Zeilenumbruch vor dem Senden" - -#: src/prefs_common.c:1352 src/prefs_filtering.c:224 -msgid "Forward as attachment" -msgstr "Weiterleiten als Anhang" - -#: src/prefs_common.c:1355 -msgid "Automatically select account for mail replies" -msgstr "Setze automatisch Account für Nachrichtantworten" - -#: src/prefs_common.c:1358 -msgid "Smart wrapping (EXPERIMENTAL)" -msgstr "Intelligenter Zeilenumbruch (EXPERIMENTEL)" - -#. spell checker defaults -#: src/prefs_common.c:1361 -msgid "Global spelling checker settings" -msgstr "Allgemeine Rechtschreibprüfungeinstellungen" - -#: src/prefs_common.c:1368 -msgid "Enable spell checker" -msgstr "Aktiviere Rechtschreibprüfung" - -#: src/prefs_common.c:1378 -msgid "Ispelll path" -msgstr "Ispell Pfad" - -#: src/prefs_common.c:1388 -msgid "..." -msgstr "..." - -#: src/prefs_common.c:1401 -msgid "Dictionaries" -msgstr "Wörterbuch" - -#: src/prefs_common.c:1466 -msgid "Font" -msgstr "Schriftart" - -#: src/prefs_common.c:1475 -msgid "Text" -msgstr "Text" - -#: src/prefs_common.c:1493 -msgid "Small" -msgstr "Klein" - -#: src/prefs_common.c:1512 -msgid "Normal" -msgstr "Normal" - -#: src/prefs_common.c:1531 -msgid "Bold" -msgstr "Fett" - -#: src/prefs_common.c:1556 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "Übersetze Kopfzeilennamen (wie `Von:', `Betreff:')" - -#: src/prefs_common.c:1559 -msgid "Display unread number next to folder name" -msgstr "Zeige Anzahl der ungelesenen E-Mails nach Ablagenname" - -#. ---- Summary ---- -#: src/prefs_common.c:1563 -msgid "Summary View" -msgstr "Gesamtansicht" - -#: src/prefs_common.c:1572 -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:1575 -msgid "Display sender using address book" -msgstr "Stelle Absender mittels Adressbuch dar" - -#: src/prefs_common.c:1577 -msgid "Enable horizontal scroll bar" -msgstr "Benutze horizontalen Scrollbar" - -#: src/prefs_common.c:1583 src/prefs_common.c:2287 src/prefs_common.c:2325 -msgid "Date format" -msgstr "Datumsformat" - -#: src/prefs_common.c:1591 -msgid "... " -msgstr "... " - -#: src/prefs_common.c:1607 -msgid " Set display item of summary... " -msgstr " Setze Einträge der Ablageninhaltsansicht... " - -#: src/prefs_common.c:1662 -msgid "Enable coloration of message" -msgstr "Benutze Farben für Nachrichten" - -#: src/prefs_common.c:1681 -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:1683 -msgid "Display header pane above message view" -msgstr "Zeige Kopfzeilenleiste über Nachrichtenansicht" - -#: src/prefs_common.c:1690 -msgid "Display short headers on message view" -msgstr "Zeige kurze Kopfzeilen in der Nachrichtenansicht" - -#: src/prefs_common.c:1710 -msgid "Line space" -msgstr "Zeilenabstand" - -#: src/prefs_common.c:1724 src/prefs_common.c:1764 -msgid "pixel(s)" -msgstr "Pixel" - -#: src/prefs_common.c:1729 -msgid "Leave space on head" -msgstr "Halte Abstand vom Anfang" - -#: src/prefs_common.c:1731 -msgid "Scroll" -msgstr "Scroll" - -#: src/prefs_common.c:1738 -msgid "Half page" -msgstr "Halbe Seite" - -#: src/prefs_common.c:1744 -msgid "Smooth scroll" -msgstr "Fließendes Scrollen" - -#: src/prefs_common.c:1750 -msgid "Step" -msgstr "Schritt" - -#: src/prefs_common.c:1811 -msgid "Encrypt message by default" -msgstr "Nachrichten immer verschlüsseln" - -#: src/prefs_common.c:1814 -msgid "Sign message by default" -msgstr "Nachrichten immer digital unterschreiben" - -#: src/prefs_common.c:1817 -msgid "Automatically check signatures" -msgstr "Überprüfe digitale Unterschriften automatisch" - -#: src/prefs_common.c:1820 -msgid "Show signature check result in a popup window" -msgstr "" -"Zeige das Ergebnis der Überprüfung der digitalen Unterschrift in einem POPUP-" -"Fenster an" - -#: src/prefs_common.c:1824 -msgid "Grab input while entering a passphrase" -msgstr "Eingabe sperren, bei der Eingabe eines Mantra" - -#: src/prefs_common.c:1829 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "Zeige Warnung beim Start, wenn GnuPG nicht funktioniert" - -#. create default signkey box -#: src/prefs_common.c:1836 -msgid "Default Sign Key" -msgstr "Standard Schlüssel zum Unterschreiben" - -#: src/prefs_common.c:1942 -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:1949 -msgid "Open first unread message when entering a folder" -msgstr "Erste Nachricht anzeigen beim Öffnen einer Ablage" - -#: src/prefs_common.c:1953 -msgid "Go to inbox after receiving new mail" -msgstr "Wechsle zu Inbox nach dem Empfang neuer E-Mail" - -#: src/prefs_common.c:1961 -msgid "Execute immediately when moving or deleting messages" -msgstr "Sofort Ausführen beim Bewegen oder Löschen von Nachrichten" - -#: src/prefs_common.c:1968 -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:1975 -msgid "Add address to destination when double-clicked" -msgstr "Adresse ins Ziel einfügen bei Doppel-Click" - -#: src/prefs_common.c:1982 -msgid "Show receive Dialog" -msgstr "Zeige Empfangsdialog" - -#: src/prefs_common.c:1992 -msgid "Always" -msgstr "Immer" - -#: src/prefs_common.c:1993 -msgid "Only if a sylpheed window is active" -msgstr "Nur wenn ein Sylpheedfenster aktiv ist" - -#: src/prefs_common.c:1994 -msgid "Never" -msgstr "Niemals" - -#. On Exit -#: src/prefs_common.c:1999 -msgid "On exit" -msgstr "Beim Beenden" - -#: src/prefs_common.c:2007 -msgid "Confirm on exit" -msgstr "Nachfragen beim Beenden" - -#: src/prefs_common.c:2014 -msgid "Empty trash on exit" -msgstr "Leere Papierkorb beim Beenden" - -#: src/prefs_common.c:2016 -msgid "Ask before emptying" -msgstr "Fragen vor dem Leeren" - -#: src/prefs_common.c:2020 -msgid "Warn if there are queued messages" -msgstr "Warnen, wenn wartende Nachrichten vorhanden" - -#: src/prefs_common.c:2059 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "Externer Webbrowser (%s wird ersetzt durch URI)" - -#: src/prefs_common.c:2066 src/prefs_common.c:2091 src/prefs_common.c:2107 -msgid "Command" -msgstr "Befehl" - -#: src/prefs_common.c:2084 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "Drucken (%s wird durch Dateinamen ersetzt)" - -#: src/prefs_common.c:2100 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "Externer Editor (%s wird durch Dateinamen ersetzt)" - -#: src/prefs_common.c:2257 -msgid "the full abbreviated weekday name" -msgstr "den abgekürzten Namen des Wochentags" - -#: src/prefs_common.c:2258 -msgid "the full weekday name" -msgstr "den vollständigen Namen des Wochentags" - -#: src/prefs_common.c:2259 -msgid "the abbreviated month name" -msgstr "den abgekürzten Namen des Monats" - -#: src/prefs_common.c:2260 -msgid "the full month name" -msgstr "den vollständigen Namen des Monats" - -#: src/prefs_common.c:2261 -msgid "the preferred date and time for the current locale" -msgstr "das bevorzugte lokale Zeit-/Datumsformat" - -#: src/prefs_common.c:2262 -msgid "the century number (year/100)" -msgstr "das Jahrhundert (Jahr/100)" - -#: src/prefs_common.c:2263 -msgid "the day of the month as a decimal number" -msgstr "der Tag des Monats als Dezimalzahl" - -#: src/prefs_common.c:2264 -msgid "the hour as a decimal number using a 24-hour clock" -msgstr "die Stunde als Dezimalzahl einer 24-Std. Uhr" - -#: src/prefs_common.c:2265 -msgid "the hour as a decimal number using a 12-hour clock" -msgstr "die Stunde als Dezimalzahl einer 12-Std. Uhr" - -#: src/prefs_common.c:2266 -msgid "the day of the year as a decimal number" -msgstr "der Tag des Jahres als Dezimalzahl" - -#: src/prefs_common.c:2267 -msgid "the month as a decimal number" -msgstr "der Monat als Dezimalzahl" - -#: src/prefs_common.c:2268 -msgid "the minute as a decimal number" -msgstr "die Minute als Dezimalzahl" - -#: src/prefs_common.c:2269 -msgid "either AM or PM" -msgstr "entweder AM oder PM" - -#: src/prefs_common.c:2270 -msgid "the second as a decimal number" -msgstr "die Sekunden als Dezimalzahl" - -#: src/prefs_common.c:2271 -msgid "the day of the week as a decimal number" -msgstr "der Wochentag als Dezimalzahl" - -#: src/prefs_common.c:2272 -msgid "the preferred date for the current locale" -msgstr "das bevorzugte lokale Datumsformat" - -#: src/prefs_common.c:2273 -msgid "the last two digits of a year" -msgstr "die letzten beiden Stellen des Jahres" - -#: src/prefs_common.c:2274 -msgid "the year as a decimal number" -msgstr "das Jahr als Dezimalzahl" - -#: src/prefs_common.c:2275 -msgid "the time zone or name or abbreviation" -msgstr "die Zeitzone oder Abkürzung" - -#: src/prefs_common.c:2302 -msgid "Specifier" -msgstr "Spezifikationssymbol" - -#: src/prefs_common.c:2303 -msgid "Description" -msgstr "Beschreibung" - -#: src/prefs_common.c:2342 -msgid "Example" -msgstr "Beispiel" - -#: src/prefs_common.c:2431 -msgid "Set message colors" -msgstr "Setze Nachrichtenfarbe" - -#: src/prefs_common.c:2439 -msgid "Colors" -msgstr "Farben" - -#: src/prefs_common.c:2479 -msgid "Quoted Text - First Level" -msgstr "Zitierter Text - Erste Ebene" - -#: src/prefs_common.c:2485 -msgid "Quoted Text - Second Level" -msgstr "Zitierter Text - Zweite Ebene" - -#: src/prefs_common.c:2491 -msgid "Quoted Text - Third Level" -msgstr "Zitierter Text - Dritte Ebene" - -#: src/prefs_common.c:2497 -msgid "URI link" -msgstr "URI-Link" - -#: src/prefs_common.c:2503 -msgid "Target folder" -msgstr "Zielablage" - -#: src/prefs_common.c:2510 -msgid "Recycle quote colors" -msgstr "Stelle Zitatfarben wiederher" - -#: src/prefs_common.c:2576 -msgid "Pick color for quotation level 1" -msgstr "Wähle Farbe für Zitatebene 1" - -#: src/prefs_common.c:2579 -msgid "Pick color for quotation level 2" -msgstr "Wähle Farbe für Zitatebene 2" - -#: src/prefs_common.c:2582 -msgid "Pick color for quotation level 3" -msgstr "Wähle Farbe für Zitatebene 3" - -#: src/prefs_common.c:2585 -msgid "Pick color for URI" -msgstr "Wähle Farbe für URI" - -#: src/prefs_common.c:2588 -msgid "Pick color for target folder" -msgstr "Wähle Farbe für Zielablage" - -#: src/prefs_common.c:2727 src/prefs_matcher.c:1412 -msgid "Description of symbols" -msgstr "Beschreibung der Symbole" - -#: src/prefs_common.c:2766 -#, c-format -msgid "" -"DESCRIPTION\n" -"\n" -"Date\n" -"From\n" -"Full Name of Sender\n" -"First Name of Sender\n" -"Initial of Sender\n" -"Subject\n" -"To\n" -"Cc\n" -"Newsgroups\n" -"Message-ID\n" -"References\n" -"\n" -"Display the information\n" -"If the information x is set, displays expr\n" -"\n" -"Message body\n" -"Quoted message body\n" -"Message body without signature\n" -"Quoted message body without signature\n" -"%" -msgstr "" -"Beschreibung\n" -"\n" -"Datum\n" -"Von\n" -"Voller Name des Absender\n" -"Vorname des Absender\n" -"Initialien des Abender\n" -"Betreff\n" -"An\n" -"Cc\n" -"Newsgroupen\n" -"Nachrichten-ID\n" -"Referenzen\n" -"\n" -"Stelle die Informationen dar\n" -"Wenn die Information x gesetzt ist, stelle expr dar\n" -"\n" -"Körper der Nachticht\n" -"Zitierten Körper der Nachticht\n" -"Körper der Nachricht ohne Signatur\n" -"Zitierten Körper der Nachticht ohne Signatur\n" -"%" - -#: src/prefs_common.c:2883 -msgid "Set display item" -msgstr "Setze Anzeige Information" - -#: src/prefs_common.c:2900 src/prefs_filtering.c:219 -msgid "Mark" -msgstr "Markiert" - -#: src/prefs_common.c:2902 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2903 -msgid "Number" -msgstr "Nummer" - -#: src/prefs_common.c:2904 src/prefs_scoring.c:252 src/summaryview.c:584 -msgid "Score" -msgstr "Note" - -#: src/prefs_common.c:2906 src/summaryview.c:574 -msgid "Date" -msgstr "Datum" - -#: src/prefs_common.c:2907 src/prefs_matcher.c:140 src/summaryview.c:575 -msgid "From" -msgstr "Von" - -#: src/prefs_common.c:2908 src/prefs_matcher.c:139 src/summaryview.c:576 -msgid "Subject" -msgstr "Betreff" - -#: src/prefs_common.c:2965 -msgid "Font selection" -msgstr "Schriftauswahl" - -#: src/prefs_common.c:3147 -msgid "Compose Preferences" -msgstr "Einstellungen für Nachrichtenverfassen" - -#: src/prefs_common.c:3162 -msgid "Quote message when replying" -msgstr "Zitiere Nachricht in der Antwort" - -#: src/prefs_common.c:3168 -msgid "Quotation mark" -msgstr "Zitatzeichen" - -#: src/prefs_common.c:3181 -msgid "Quotation format:" -msgstr "Zitatformat:" - -#: src/prefs_common.c:3202 -msgid "Forward quotation mark" -msgstr "Zitatzeichen weiterleiten" - -#: src/prefs_common.c:3215 -msgid "Forward format:" -msgstr "Weiterleitungsformat:" - -#: src/prefs_common.c:3237 -msgid " Description of symbols " -msgstr " Beschreibung der Symbole " - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "Benutzerdefinierte Kopfzeilen" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "Erstelle Benutzerdefinierte-Kopfzeilen-Fenster...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "Benutzerdefinierte Kopfzeileneinstellungen" - -#. value -#: src/prefs_customheader.c:213 src/prefs_matcher.c:390 -msgid "Value" -msgstr "Wert" - -#: src/prefs_customheader.c:322 -msgid "Reading custom header configuration...\n" -msgstr "Lese Benutzerdefinierte Kopfzeileneinstellungen...\n" - -#: src/prefs_customheader.c:367 -msgid "Writing custom header configuration...\n" -msgstr "Schreibe Benutzerdefinierte Kopfzeileneinstellungen...\n" - -#: src/prefs_customheader.c:492 src/prefs_display_header.c:545 -#: src/prefs_filter.c:628 src/prefs_matcher.c:1008 -msgid "Header name is not set." -msgstr "Kopfzeilenname ist nicht gesetzt." - -#: src/prefs_customheader.c:546 -msgid "Delete header" -msgstr "Kopfzeilen löschen" - -#: src/prefs_customheader.c:547 -msgid "Do you really want to delete this header?" -msgstr "Wollen Sie wirklich diese Kopfzeile löschen?" - -#: src/prefs_display_header.c:190 -msgid "Creating display header setting window...\n" -msgstr "Erstelle Kopfzeilen-Einstellungen-Fenster...\n" - -#: src/prefs_display_header.c:213 -msgid "Display header setting" -msgstr "Kopfzeilen-Einstellungen" - -#. header name -#: src/prefs_display_header.c:240 src/prefs_matcher.c:369 -msgid "Header name" -msgstr "Kopfzeilenname" - -#: src/prefs_display_header.c:272 -msgid "Displayed Headers" -msgstr "Angezeigte Kopfzeilen" - -#: src/prefs_display_header.c:330 -msgid "Hidden headers" -msgstr "Versteckte Kopfzeilen" - -#: src/prefs_display_header.c:360 -msgid "Show all unspecified headers" -msgstr "Zeige alle unspezifizierten Kopfzeilen" - -#: src/prefs_display_header.c:385 -msgid "Reading configuration for displaying headers...\n" -msgstr "Lese Konfiguration zum Anzeigen der Kopfzeilen...\n" - -#: src/prefs_display_header.c:423 -msgid "Writing configuration for displaying headers...\n" -msgstr "Schreibe Konfiguration zum Anzeigen der Kopfzeilen...\n" - -#: src/prefs_display_header.c:555 -msgid "This header is already in the list." -msgstr "Diese Kopfzeile ist bereits in der Liste enthalten." - -#: src/prefs_filter.c:189 src/prefs_filtering.c:309 src/prefs_matcher.c:287 -#: src/prefs_scoring.c:185 -msgid "Registered rules" -msgstr "Registrierte Regeln" - -#: src/prefs_filter.c:191 -msgid "Creating filter setting window...\n" -msgstr "Erstelle Filtereinstellungen-Fenster...\n" - -#: src/prefs_filter.c:218 -msgid "Filter setting" -msgstr "Filtereinstellungen" - -#: src/prefs_filter.c:243 -msgid "Operator" -msgstr "Operationszeichen" - -#: src/prefs_filter.c:281 src/prefs_filter.c:641 src/prefs_filter.c:786 -#: src/prefs_filter.c:798 -msgid "(none)" -msgstr "(nichts)" - -#: src/prefs_filter.c:287 -msgid "Keyword" -msgstr "Stichwort" - -#: src/prefs_filter.c:308 src/prefs_matcher.c:420 -msgid "Predicate" -msgstr "Aussage" - -#: src/prefs_filter.c:320 src/prefs_filter.c:331 src/prefs_filter.c:650 -#: src/prefs_filter.c:653 src/prefs_filter.c:803 src/prefs_filter.c:806 -#: src/prefs_matcher.c:126 -msgid "contains" -msgstr "enthalten" - -#: src/prefs_filter.c:320 src/prefs_filter.c:331 src/prefs_filter.c:803 -#: src/prefs_filter.c:806 -msgid "not contain" -msgstr "nicht enthalten" - -#: src/prefs_filter.c:347 src/prefs_filtering.c:456 -msgid "Destination" -msgstr "Ziel" - -#: src/prefs_filter.c:371 -msgid "Use regex" -msgstr "Benutze reguläre Ausdrücke" - -#: src/prefs_filter.c:375 -msgid "Don't receive" -msgstr "Nicht empfangen" - -#: src/prefs_filter.c:400 src/prefs_filtering.c:516 src/prefs_matcher.c:490 -#: src/prefs_scoring.c:277 -msgid "Register" -msgstr "Registrieren" - -#: src/prefs_filter.c:406 src/prefs_filtering.c:522 src/prefs_matcher.c:496 -#: src/prefs_scoring.c:283 -msgid " Substitute " -msgstr " Ersetzen " - -#: src/prefs_filter.c:493 -msgid "Reading filter configuration...\n" -msgstr "Lese Filtereinstellungen...\n" - -#: src/prefs_filter.c:529 -msgid "Writing filter configuration...\n" -msgstr "Schreibe Filtereinstellungen...\n" - -#: src/prefs_filter.c:572 src/prefs_filtering.c:649 src/prefs_filtering.c:667 -#: src/prefs_matcher.c:610 src/prefs_matcher.c:684 src/prefs_scoring.c:459 -#: src/prefs_scoring.c:491 -msgid "(New)" -msgstr "(Neue)" - -#: src/prefs_filter.c:623 src/prefs_filtering.c:760 -msgid "Destination is not set." -msgstr "Ziel ist nicht gesetzt." - -#: src/prefs_filter.c:734 src/prefs_filtering.c:834 src/prefs_scoring.c:644 -msgid "Delete rule" -msgstr "Lösche Regel" - -#: src/prefs_filter.c:735 src/prefs_filtering.c:835 src/prefs_scoring.c:645 -msgid "Do you really want to delete this rule?" -msgstr "Wollen Sie wirklich diese Regel löschen?" - -#: src/prefs_filtering.c:216 -msgid "Move" -msgstr "Verschieben" - -#: src/prefs_filtering.c:217 -msgid "Copy" -msgstr "Kopieren" - -#: src/prefs_filtering.c:220 -msgid "Unmark" -msgstr "entmarkieren" - -#: src/prefs_filtering.c:221 -msgid "Mark as read" -msgstr "Markiere als gelesen" - -#: src/prefs_filtering.c:222 -msgid "Mark as unread" -msgstr "Markiere als ungelesen" - -#: src/prefs_filtering.c:226 src/prefs_filtering.c:466 -msgid "Color" -msgstr "Farbe" - -#: src/prefs_filtering.c:311 -msgid "Creating filtering setting window...\n" -msgstr "Erstelle Filtereinstellungen-Fenster...\n" - -#: src/prefs_filtering.c:330 -msgid "Filtering setting" -msgstr "Filtereinstellungen" - -#: src/prefs_filtering.c:349 src/prefs_scoring.c:225 -msgid "Condition" -msgstr "Bedingung" - -#: src/prefs_filtering.c:364 src/prefs_scoring.c:240 -msgid "Define ..." -msgstr "Definiere ..." - -#: src/prefs_filtering.c:376 -msgid "Action" -msgstr "Aktion" - -#: src/prefs_filtering.c:416 src/progressdialog.c:52 -msgid "Account" -msgstr "Account" - -#: src/prefs_filtering.c:482 -msgid "Select ..." -msgstr "Auswählen ..." - -#: src/prefs_filtering.c:489 src/prefs_matcher.c:402 -msgid "Info ..." -msgstr "Information ..." - -#: src/prefs_filtering.c:714 src/prefs_filtering.c:780 src/prefs_scoring.c:538 -#: src/prefs_scoring.c:576 src/prefs_scoring.c:622 -msgid "Match string is not valid." -msgstr "Gesuchte Zeichenkette ist nicht zulässig." - -#: src/prefs_filtering.c:743 src/prefs_scoring.c:561 src/prefs_scoring.c:607 -msgid "Score is not set." -msgstr "Note ist nicht gesetzt." - -#: src/prefs_matcher.c:117 -msgid "or" -msgstr "oder" - -#: src/prefs_matcher.c:117 -msgid "and" -msgstr "und" - -#: src/prefs_matcher.c:126 -msgid "does not contain" -msgstr "nicht enthalten" - -#: src/prefs_matcher.c:135 -msgid "yes" -msgstr "ja" - -#: src/prefs_matcher.c:135 -msgid "no" -msgstr "nein" - -#: src/prefs_matcher.c:139 -msgid "All messages" -msgstr "Alle Nachrichten" - -#: src/prefs_matcher.c:140 -msgid "To" -msgstr "An:" - -#: src/prefs_matcher.c:140 -msgid "To or Cc" -msgstr "To oder Cc" - -#: src/prefs_matcher.c:141 -msgid "Newsgroups" -msgstr "Newsgruppen" - -#: src/prefs_matcher.c:141 -msgid "In reply to" -msgstr "In Antwort auf" - -#: src/prefs_matcher.c:141 -msgid "References" -msgstr "Referenzrn" - -#: src/prefs_matcher.c:142 -msgid "Age greater than" -msgstr "Alter größer als" - -#: src/prefs_matcher.c:142 -msgid "Age lower than" -msgstr "Alter kleiner als" - -#: src/prefs_matcher.c:143 -msgid "Headers part" -msgstr "Kopfbereich" - -#: src/prefs_matcher.c:144 -msgid "Body part" -msgstr "Körperbereich" - -#: src/prefs_matcher.c:144 -msgid "Whole message" -msgstr "Ganze Nachricht" - -#: src/prefs_matcher.c:145 -msgid "Unread flag" -msgstr "Ungelesenzeichen" - -#: src/prefs_matcher.c:145 -msgid "New flag" -msgstr "Neuezeichen" - -#: src/prefs_matcher.c:146 -msgid "Marked flag" -msgstr "Markierungszeichen" - -#: src/prefs_matcher.c:146 -msgid "Deleted flag" -msgstr "Löschzeichen" - -#: src/prefs_matcher.c:147 -msgid "Replied flag" -msgstr "Antwortzeichen" - -#: src/prefs_matcher.c:147 -msgid "Forwarded flag" -msgstr "Weiterleitungszeichen" - -#: src/prefs_matcher.c:148 -msgid "Score greater than" -msgstr "Note größer als" - -#: src/prefs_matcher.c:148 -msgid "Score lower than" -msgstr "Note kleiner als" - -#: src/prefs_matcher.c:289 -msgid "Creating matcher setting window...\n" -msgstr "Erstelle Übereinstimmungseinstellungs-Fenster...\n" - -#: src/prefs_matcher.c:308 -msgid "Condition setting" -msgstr "Bedingungseinstellungen" - -#. criteria combo box -#: src/prefs_matcher.c:336 -msgid "Match type" -msgstr "Übereinstimmungs Typ" - -#: src/prefs_matcher.c:472 src/summary_search.c:172 -msgid "Case sensitive" -msgstr "Groß-/Kleinschreibung" - -#: src/prefs_matcher.c:473 -msgid "Use regexp" -msgstr "Verwende regexp" - -#. boolean operation -#: src/prefs_matcher.c:511 -msgid "Boolean Op" -msgstr "Boolesches Oder" - -#: src/prefs_matcher.c:994 -msgid "Value is not set." -msgstr "Wert ist nicht gesetzt." - -#: src/prefs_matcher.c:1444 -msgid "" -"%\n" -"Subject\n" -"From\n" -"To\n" -"Cc\n" -"Date\n" -"Message-ID\n" -"Newsgroups\n" -"References\n" -"Filename - should not be modified\n" -"new line\n" -"escape character for quotes\n" -"quote character\n" -"%" -msgstr "" -"%\n" -"Betreff\n" -"Von\n" -"An\n" -"Cc\n" -"Datum\n" -"Nachrichten-ID\n" -"Newsgruppen\n" -"Referenzen\n" -"Dateiname - sollte nicht verändert werden\n" -"neue Zeile\n" -"Escape Zeichen für Zitate\n" -"Zitatzeichen\n" -"%" - -#: src/prefs_scoring.c:187 -msgid "Creating scoring setting window...\n" -msgstr "Erstelle Benotungseinstellungs-Fenster...\n" - -#: src/prefs_scoring.c:206 -msgid "Scoring setting" -msgstr "Benotungseinstellungen" - -#: src/prefs_scoring.c:340 -msgid "Kill score" -msgstr "Löschnote" - -#: src/prefs_scoring.c:352 -msgid "Important score" -msgstr "Wichtige Note" - -#: src/prefs_scoring.c:567 src/prefs_scoring.c:613 -msgid "Match string is not set." -msgstr "Übereinstimmung ist nicht gesetzt." - -#: src/procmime.c:685 -msgid "Code conversion failed.\n" -msgstr "Zeichensatzumsetzung fehlgeschlagen.\n" - -#: src/procmsg.c:138 src/procmsg.c:154 -msgid "Cache data is corrupted\n" -msgstr "Daten im Zwischenspeicher sind falsch\n" - -#: src/procmsg.c:203 -msgid "\tNo cache file\n" -msgstr "\tKeine Zwischenspeicherdatei\n" - -#: src/procmsg.c:210 -msgid "\tReading summary cache..." -msgstr "\tLese Ablageninhaltsansichtszwischenspeicher..." - -#: src/procmsg.c:215 -msgid "Cache version is different. Discarding it.\n" -msgstr "Zwischenspeicherversion ist unterschiedlich. Verwerfen.\n" - -#: src/procmsg.c:283 -msgid "\tMarking the messages..." -msgstr "\tMarkiere die Nachrichten..." - -#: src/procmsg.c:327 -#, c-format -msgid "\t%d new message(s)\n" -msgstr "\t%d neue Nachricht(en)\n" - -#: src/procmsg.c:463 -msgid "Mark file not found.\n" -msgstr "Markierte Datei nicht gefunden.\n" - -#: src/procmsg.c:465 -#, 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:481 -msgid "Can't open mark file with append mode.\n" -msgstr "Kann markierte Datei, zum Anhängen, nicht öffnen.\n" - -#: src/procmsg.c:486 -msgid "Can't open mark file with write mode.\n" -msgstr "Kann markierte Datei, zum Schreiben, nicht öffnen.\n" - -#: src/procmsg.c:669 -msgid "Sending queued message failed.\n" -msgstr "Senden wartender Nachrichten fehlgeschlagen.\n" - -#: src/procmsg.c:727 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "Druck-Befehlszeile ist ungültig: `%s'\n" - -#: src/progressdialog.c:53 -msgid "Status" -msgstr "Status" - -#: src/progressdialog.c:55 -msgid "Creating progress dialog...\n" -msgstr "Erstelle Fortschrittsdialog...\n" - -#: src/recv.c:112 -msgid "error occurred while retrieving data.\n" -msgstr "Fehler beim Empfang von Daten.\n" - -#: src/recv.c:152 src/recv.c:191 src/recv.c:207 -msgid "Can't write to file.\n" -msgstr "Kann nicht in Datei schreiben.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 src/sigstatus.c:219 -msgid "Oops: Signature not verified" -msgstr "Oops: digitale Unterschrift nicht verifiziert" - -#: src/rfc2015.c:140 src/rfc2015.c:175 src/sigstatus.c:222 -msgid "No signature found" -msgstr "Keine digitale Unterschrift gefunden" - -#: src/rfc2015.c:143 src/sigstatus.c:225 -msgid "Good signature" -msgstr "Gute digitale Unterschrift" - -#: src/rfc2015.c:146 src/sigstatus.c:228 -msgid "BAD signature" -msgstr "SCHLECHTE digitale Unterschrift" - -#: src/rfc2015.c:149 src/rfc2015.c:184 src/sigstatus.c:231 -msgid "No public key to verify the signature" -msgstr "" -"Kein öffentlicher Schlüssel zum verifizieren der digitalen Unterschrift" - -#: src/rfc2015.c:152 src/rfc2015.c:187 src/sigstatus.c:234 -msgid "Error verifying the signature" -msgstr "Fehler beim Verifizieren der digitalen Unterschrift" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "Unterschiedliche Ergebnisse für Unterschriften" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "Fehler: unbekannter Status" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "Gute digitale Unterschrift von \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "SCHLECHTE digitale Unterschrift von \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "Finde keine User-ID für diesen Schlüssel." - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr " aka \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "Digitale Unterschrift von %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "Schlüssel Fingerprint: %s\n" - -#: src/scoring.c:295 -msgid "Reading headers configuration...\n" -msgstr "Lese Benutzerdefinierte Kopfzeileneinstellungen...\n" - -#. debug -#: src/scoring.c:347 -#, c-format -msgid "syntax error : %s\n" -msgstr "Syntaxfehler : %s\n" - -#: src/scoring.c:423 -msgid "Writing scoring configuration...\n" -msgstr "Schreibe Benotungseinstellungen...\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "Wähle Schlüssel für '%s' " - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "Sammle Informationen für '%s' ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "Wähle Schlüssel" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "Schlüssel-ID" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "Val" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "Wählen" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "Schlüüsel hinzufügen" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "Eine andere Benutzer- oder Schlüssel-ID angeben\n" - -#: src/send.c:166 -#, c-format -msgid "Using command to send mail: %s ...\n" -msgstr "Verwende Kommando um Mail zu verschicken: %s ...\n" - -#: src/send.c:183 -msgid "Mail sent successfully ...\n" -msgstr "Nachricht erfolgreich gesendet...\n" - -#: src/send.c:228 -msgid "Queued message header is broken.\n" -msgstr "Kopfzeilen wartender Nachricht ist defekt.\n" - -#: src/send.c:237 -msgid "Account not found. Using current account...\n" -msgstr "Account nicht gefunden. Benutze aktuellen Account...\n" - -#: src/send.c:258 -msgid "Account not found.\n" -msgstr "Account nicht gefunden.\n" - -#: src/send.c:354 -#, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "Verbindung mit SMTP-Server: %s ..." - -#: src/send.c:358 -msgid "Connecting" -msgstr "Verbinde" - -#: src/send.c:371 -msgid "Sending MAIL FROM..." -msgstr "Sende MAIL FROM..." - -#: src/send.c:372 -msgid "Sending" -msgstr "Sende" - -#: src/send.c:379 -msgid "Sending RCPT TO..." -msgstr "Sende RCPT TO..." - -#: src/send.c:386 -msgid "Sending DATA..." -msgstr "Sende DATA..." - -#: src/send.c:402 -#, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "Empfange Nachricht (%d / %d bytes)" - -#: src/send.c:419 -msgid "Quitting..." -msgstr "Beende..." - -#: src/send.c:449 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "Keine Verbindung mit SMTP-Server: %s:%d\n" - -#: src/send.c:456 -msgid "SSL connection failed" -msgstr "SSL-Verbindung fehlgeschlagen" - -#: src/send.c:466 -msgid "Error occurred while sending HELO\n" -msgstr "Fehler beim Senden von HELO\n" - -#: src/send.c:477 -msgid "Error occurred while sending STARTTLS\n" -msgstr "Fehler ist aufgetreten beim Senden von STARTTLS\n" - -#: src/send.c:497 -msgid "Sending message" -msgstr "Sende Nachricht" - -#: 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/sigstatus.c:129 -msgid "Checking signature" -msgstr "Überprüfe Digitale Unterschrift" - -#: 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: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:325 -msgid "/M_ove..." -msgstr "/_Verschieben..." - -#: src/summaryview.c:326 -msgid "/_Copy..." -msgstr "/_Kopieren..." - -#: src/summaryview.c:328 -msgid "/E_xecute" -msgstr "/_Ausführen" - -#: src/summaryview.c:329 -msgid "/_Mark" -msgstr "/_Markieren" - -#: src/summaryview.c:330 -msgid "/_Mark/_Mark" -msgstr "/_Markieren/_Markieren" - -#: src/summaryview.c:331 -msgid "/_Mark/_Unmark" -msgstr "/_Markieren/Markierung _entfernen" - -#: src/summaryview.c:332 -msgid "/_Mark/---" -msgstr "/_Markieren/---" - -#: src/summaryview.c:333 -msgid "/_Mark/Mark as unr_ead" -msgstr "/_Markieren/Markiere als _ungelesen" - -#: src/summaryview.c:334 -msgid "/_Mark/Mark as rea_d" -msgstr "/_Markieren/Markiere als gelesen" - -#: src/summaryview.c:336 -msgid "/_Mark/Mark all read" -msgstr "/_Markieren/Markiere alle als gelesen" - -#: src/summaryview.c:338 -msgid "/_Mark/Ignore thread" -msgstr "/_Markieren/Ignoriere Thread" - -#: src/summaryview.c:339 -msgid "/_Mark/Unignore thread" -msgstr "/_Markieren/Unignoriere Thread" - -#: src/summaryview.c:342 -msgid "/_Reply" -msgstr "/An_twort" - -#: src/summaryview.c:343 -msgid "/Repl_y to sender" -msgstr "/_Antwort an Absender" - -#: src/summaryview.c:344 -msgid "/Follow-up and reply to" -msgstr "/Folge-nach und antworte an" - -#: src/summaryview.c:345 -msgid "/Reply to a_ll" -msgstr "/Antwort an a_lle" - -#: src/summaryview.c:346 -msgid "/_Forward" -msgstr "/_Weiterleiten" - -#: src/summaryview.c:347 -msgid "/Forward as a_ttachment" -msgstr "/Weiterleiten als An_hang" - -#: src/summaryview.c:350 -msgid "/Open in new _window" -msgstr "/Öffnen in _neuem Fenster" - -#: src/summaryview.c:351 -msgid "/View so_urce" -msgstr "/Zeige _Quellen" - -#: src/summaryview.c:352 -msgid "/Show all _header" -msgstr "/_Zeige alle Kopfzeilen" - -#: src/summaryview.c:353 -msgid "/Re-_edit" -msgstr "/Wi_ederbearbeiten" - -#: src/summaryview.c:356 -msgid "/_Print..." -msgstr "/_Drucken..." - -#: src/summaryview.c:358 -msgid "/Select _all" -msgstr "/A_lle auswählen" - -#: src/summaryview.c:497 -msgid "Label" -msgstr "Etikett" - -#: src/summaryview.c:543 -msgid "M" -msgstr "M" - -#: src/summaryview.c:543 -msgid "U" -msgstr "U" - -#: src/summaryview.c:558 -msgid "Creating summary view...\n" -msgstr "Erstelle Ablageninhaltsansicht...\n" - -#: src/summaryview.c:573 -msgid "No." -msgstr "Nr." - -#: src/summaryview.c:878 -msgid "Process mark" -msgstr "Markierte verarbeiten" - -#: src/summaryview.c:879 -msgid "Some marks are left. Process it?" -msgstr "Einige Markierungen sind übrig. Verarbeiten?" - -#: src/summaryview.c:908 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"leere Ablage\n" -"\n" - -#: src/summaryview.c:920 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Durchsuche Ablage (%s)..." - -#: src/summaryview.c:1214 -msgid "No unread message" -msgstr "Keine ungelesene Nachricht" - -#: src/summaryview.c:1215 -msgid "No unread message found. Go to next folder?" -msgstr "Keine ungelesene Nachricht gefunden. Gehe zu nächster Ablage?" - -#: src/summaryview.c:1239 src/summaryview.c:1269 -msgid "No more marked messages" -msgstr "Keine weiteren markierten Nachrichten" - -#: src/summaryview.c:1240 -msgid "No marked message found. Search from the beginning?" -msgstr "Keine markierte Nachricht gefunden. Vom Anfang suchen?" - -#: src/summaryview.c:1248 src/summaryview.c:1278 -msgid "No marked messages." -msgstr "Keine markierten Nachrichten" - -#: src/summaryview.c:1270 -msgid "No marked message found. Search from the end?" -msgstr "Keine markierte Nachricht gefunden. Vom Ende suchen?" - -#: src/summaryview.c:1458 src/summaryview.c:1460 -msgid "Attracting messages by subject..." -msgstr "Ziehe Nachrichten nach Betreff an..." - -#: src/summaryview.c:1603 -#, c-format -msgid "%d deleted" -msgstr "%d gelöscht" - -#: src/summaryview.c:1607 -#, c-format -msgid "%s%d moved" -msgstr "%s%d verschoben" - -#: src/summaryview.c:1608 src/summaryview.c:1615 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1613 -#, c-format -msgid "%s%d copied" -msgstr "%s%d kopiert" - -#: src/summaryview.c:1630 -msgid " item(s) selected" -msgstr " Einträge gewählt" - -#: src/summaryview.c:1641 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d Neue, %d Ungelesene, %d Gesamt (%s)" - -#: src/summaryview.c:1647 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d Neue, %d Ungelesene, %d Gesamt" - -#: src/summaryview.c:1697 src/summaryview.c:1698 -msgid "Sorting summary..." -msgstr "Sortiere Ablagenansicht..." - -#: src/summaryview.c:1764 -msgid "\tSetting summary from message data..." -msgstr "\tSetze Ablagenansicht aus Nachrichtendaten..." - -#: src/summaryview.c:1766 -msgid "Setting summary from message data..." -msgstr "Setze Ablagenansicht aus Nachrichtendaten..." - -#: src/summaryview.c:2000 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "Schreibe Ablagenansichtszwischenspeicher (%s)..." - -#: src/summaryview.c:2068 -msgid "(No Date)" -msgstr "(Kein Datum)" - -#: src/summaryview.c:2387 -#, c-format -msgid "Message %d is marked\n" -msgstr "Nachricht %d ist markiert.\n" - -#: src/summaryview.c:2418 -#, c-format -msgid "Message %d is marked as read\n" -msgstr "Nachricht %d ist markiert als gelesen\n" - -#: src/summaryview.c:2462 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Nachricht %d ist markiert als ungelesen\n" - -#: src/summaryview.c:2516 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Nachricht %s/%d ist zum Löschen markiert\n" - -#: src/summaryview.c:2530 -msgid "Current folder is Trash." -msgstr "Aktuelle Ablage ist Papierkorb." - -#: src/summaryview.c:2552 src/summaryview.c:2554 -msgid "Deleting duplicated messages..." -msgstr "Lösche mehrfach vorhandene Nachrichten..." - -#: src/summaryview.c:2612 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Nachricht %s/%d ist nicht markiert.\n" - -#: src/summaryview.c:2671 -#, 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:2683 -msgid "Destination is same as current folder." -msgstr "Ziel ist gleich der aktuellen Ablage." - -#: src/summaryview.c:2757 -#, 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:2770 -msgid "Destination to copy is same as current folder." -msgstr "Kopierziel ist gleich der aktuellen Ablage." - -#: src/summaryview.c:2805 -msgid "Selecting all messages..." -msgstr "Wähle alle Nachrichten..." - -#: src/summaryview.c:2859 -msgid "Print" -msgstr "Drucken" - -#: src/summaryview.c:2860 -#, 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 durch den Dateinamen ersetzt)" - -#: src/summaryview.c:2866 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"Druck-Befehlszeile ist ungültig:\n" -"`%s'" - -#: src/summaryview.c:3102 src/summaryview.c:3103 -msgid "Building threads..." -msgstr "Erstelle Threads" - -#: src/summaryview.c:3125 src/summaryview.c:3126 -msgid "Unthreading..." -msgstr "Hebe Threads auf" - -#: src/summaryview.c:3148 -msgid "Unthreading for execution..." -msgstr "Hebe Threads zur Ausführung auf" - -#: src/summaryview.c:3244 -msgid "filtering..." -msgstr "filtere..." - -#: src/summaryview.c:3245 -msgid "Filtering..." -msgstr "Filtere..." - -#: src/summaryview.c:3377 -#, c-format -msgid "Go to %s\n" -msgstr "Gehe zu %s\n" - -#: src/summaryview.c:3733 -msgid "Add sender to address book" -msgstr "Absender dem Adressbuch hinzufügen" - -#: src/summaryview.c:3979 -#, c-format -msgid "Message %d is marked as ignore thread\n" -msgstr "Nachricht %d ist markiert als ignoriere Thread\n" - -#: src/summaryview.c:4010 -#, c-format -msgid "Message %d is marked as unignore thread\n" -msgstr "Nachricht %d ist markiert als unignoriere Thread\n" - -#: src/textview.c:139 -msgid "Creating text view...\n" -msgstr "Erstelle Textansicht...\n" - -#: src/textview.c:371 -msgid "To save this part, pop up the context menu with " -msgstr "Zum Speichern dieses Teiles, öffnen Sie das Kontextmenü mit der " - -#: src/textview.c:372 -msgid "right click and select `Save as...', " -msgstr "rechten Maustaste und wählen `Speichern als...', " - -#: src/textview.c:373 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"oder drücken die `y'-Taste.\n" -"\n" - -#: src/textview.c:375 -msgid "To display this part as a text message, select " -msgstr "Zum Anzeigen dieses Teiles der Nachricht als Text, wählen Sie " - -#: src/textview.c:376 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"`Darstellung als Text', oder drücken die `t'-Taste.\n" -"\n" - -#: src/textview.c:378 -msgid "To open this part with external program, select " -msgstr "Zum Öffnen dieses Teiles mit einem externen Programm, wählen Sie " - -#: src/textview.c:379 -msgid "`Open' or `Open with...', " -msgstr "`Öffnen' oder `Öffnen mit...', " - -#: src/textview.c:380 -msgid "or double-click, or click the center button, " -msgstr "oder Doppelclick, oder drücken Sie die mittlere Maustaste, " - -#: src/textview.c:381 -msgid "or press `l' key." -msgstr "oder die `l'-Taste." - -#: src/textview.c:400 -msgid "This signature has not been checked yet.\n" -msgstr "Diese digitale Unterschrift wurde noch nicht geprüft.\n" - -#: src/textview.c:401 -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:402 -msgid "right click and select `Check signature'.\n" -msgstr "" -"rechten Maustaste und wählen `Digitale Unterschrift überprüfen'.\n" -"\n" - -#: src/utils.c:1591 -#, c-format -msgid "File copy from %s to %s failed.\n" -msgstr "Datei kopieren von %s nach %s fehlgeschlagen.\n" - -#: src/utils.c:1689 -#, c-format -msgid "move_file(): file %s already exists." -msgstr "move_file(): Datei %s' existiert bereits." - -#: src/utils.c:1830 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "Öffne-URI-Befehlszeile ist ungültig: `%s'" - -#: src/ssl.c:41 -msgid "SSLv23 not available\n" -msgstr "SSLv23 nicht verfügbar\n" - -#: src/ssl.c:43 -msgid "SSLv23 available\n" -msgstr "SSLv23 nicht verfügbar\n" - -#: src/ssl.c:48 -msgid "TLSv1 not available\n" -msgstr "TLSv1 nicht verfügbar\n" - -#: src/ssl.c:50 -msgid "TLSv1 available\n" -msgstr "TLSv1 verfügbar\n" - -#: src/ssl.c:75 src/ssl.c:82 -msgid "SSL method not available\n" -msgstr "SSL Methode nicht verfügbar\n" - -#: src/ssl.c:88 -msgid "Unknown SSL method *PROGRAM BUG*\n" -msgstr "Unbekannte SSL Methode *PROGRAMM FEHLER*\n" - -#: src/ssl.c:94 -msgid "Error creating ssl context\n" -msgstr "Fehler beim erzeugen des SSL Kontext\n" - -#: src/ssl.c:101 -#, c-format -msgid "SSL connect failed (%s)\n" -msgstr "SSL-Verbindung fehlgeschlagen (%s)\n" - -#. Get the cipher -#: src/ssl.c:108 -#, c-format -msgid "SSL connection using %s\n" -msgstr "SSL Verbindung verwendet %s\n" - -#: src/ssl.c:115 -msgid "Server certificate:\n" -msgstr "Server Zertifikat:\n" - -#: src/ssl.c:118 -#, c-format -msgid " Subject: %s\n" -msgstr " Betreff: %s\n" - -#: src/ssl.c:123 -#, c-format -msgid " Issuer: %s\n" -msgstr " Herausgeber: %s\n" - -#~ msgid "SSL disabled\n" -#~ msgstr "SSL deaktiviert\n" - -#~ msgid "SSL loaded\n" -#~ msgstr "SSL geladen\n" diff --git a/po/el.po b/po/el.po deleted file mode 100644 index 4cc122efd..000000000 --- a/po/el.po +++ /dev/null @@ -1,4126 +0,0 @@ -# Hellenic translation of Sylpheed -# Copyright (C) 2001 Free Software Foundation, Inc. -# Michalis Kabrianis <Michalis@bigfoot.com>, 2001. -# -msgid "" -msgstr "" -"Project-Id-Version: sylpheed 0.4.52\n" -"POT-Creation-Date: 2001-06-20 17:53+0900\n" -"PO-Revision-Date: 2001-06-20 12:33+0200\n" -"Last-Translator: Michalis Kabrianis <Michalis@bigfoot.com>\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:90 -msgid "About" -msgstr "Ó÷åôéêÜ" - -#: src/about.c:199 -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:205 -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 ôïõ Yasuhiro Tonooka <tonooka@msi.co.jp>, êáé ôï libkcc" -" åßíáé copyright ôïõ takeshi@SoftAgency.co.jp.\n" -"\n" - -#: src/about.c:210 -msgid "" -"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" -"\n" -msgstr "" -"Ôï GPGME åßíáé copyright 2001 ôïõ Werner Koch <dd9jn@gnu.org>\n" -"\n" - -#: src/about.c:214 -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:220 -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:226 -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:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1476 src/compose.c:3132 src/export.c:185 src/foldersel.c:176 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:334 src/main.c:342 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "OK" -msgstr "OK" - -#: src/account.c:101 -msgid "Reading all config for each account...\n" -msgstr "ÄéáâÜæù ôéò ñõèìßóåéò ãéá êÜèå ëïãáñéáóìü...\n" - -#: src/account.c:116 -#, c-format -msgid "Found label: %s\n" -msgstr "ÂñÝèçêå ôáìðÝëá: %s\n" - -#: src/account.c:208 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" -"ÌåñéêÜ ðáñÜèõñá óýíèåóçò ìçíýìáôïò åßíáé áíïé÷ôÜ.\n" -"Ðáñáêáëþ êëåßóôå üëá ôá ðáñÜèõñá óýíèåóçò ìçíýìáôïò ðñéí åðåîåñãáóôåßôå ôïõò " -"ëïãáñéáóìïýò." - -#: src/account.c:214 -msgid "Opening account edit window...\n" -msgstr "Áíïßãù ôï ðáñÜèõñï åðåîåñãáóßáò ëïãáñéáóìïý...\n" - -#: src/account.c:361 -msgid "Creating account edit window...\n" -msgstr "Äçìéïõñãþ ôï ðáñÜèõñï åðåîåñãáóßáò ëïãáñéáóìïý...\n" - -#: src/account.c:366 -msgid "Edit accounts" -msgstr "Åðåîåñãáóßá ëïãáñéáóìþí" - -#: src/account.c:394 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2244 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "¼íïìá" - -#: src/account.c:395 src/prefs_account.c:632 -msgid "Protocol" -msgstr "Ðñùôüêïëëï" - -#: src/account.c:396 -msgid "Server" -msgstr "ÅîõðçñÝôçò" - -#: src/account.c:415 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "ÐñïóèÞêç" - -#: src/account.c:421 -msgid "Edit" -msgstr "Åðåîåñãáóßá" - -#: src/account.c:427 src/prefs_customheader.c:247 -msgid " Delete " -msgstr " ÄéáãñáöÞ" - -#: src/account.c:433 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "ÊÜôù" - -#: src/account.c:439 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "ÐÜíù" - -#: src/account.c:453 -msgid " Set as usually used account " -msgstr " ÈÝóå ùò óýíçèç ëïãáñéáóìü " - -#: src/account.c:459 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "Êëåßóéìï" - -#: src/account.c:513 -msgid "Delete account" -msgstr "ÄéáãñáöÞ ëïãáñéáóìïý" - -#: src/account.c:514 -msgid "Do you really want to delete this account?" -msgstr "ÈÝëåôå ðñÜãìáôé íá äéáãñÜøåôå áõôü ôï ëïãáñéáóìü;" - -#: src/account.c:515 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3306 src/folderview.c:1448 src/folderview.c:1491 -#: src/folderview.c:1590 src/folderview.c:1631 src/folderview.c:1730 -#: src/folderview.c:1763 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "Íáé" - -#: src/account.c:515 src/compose.c:3306 src/folderview.c:1448 -#: src/folderview.c:1491 src/folderview.c:1590 src/folderview.c:1631 -#: src/folderview.c:1730 src/folderview.c:1763 -msgid "+No" -msgstr "+¼÷é" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -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:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -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:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/Áñ÷åßï/Êëåßóéìï" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/ÂïÞèåéá" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -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:369 -#: src/folderview.c:206 src/folderview.c:208 src/folderview.c:217 -#: src/folderview.c:219 src/folderview.c:228 src/folderview.c:230 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/Åðåîåñãáóßá" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/ÄéáãñáöÞ" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "Äéåýèõíóç e-mail" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "Ó÷üëéá" - -#: src/addressbook.c:325 src/compose.c:2804 -msgid "Address book" -msgstr "ÊáôÜëïãïò äéåõèýíóåùí" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "¼íïìá:" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -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:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "¼÷é" - -#: src/addressbook.c:1000 src/folderview.c:1321 src/folderview.c:1522 -msgid "New folder" -msgstr "ÍÝïò êáôÜëïãïò" - -#: src/addressbook.c:1001 src/folderview.c:1322 -msgid "Input the name of new folder:" -msgstr "ÅéóÜãåôå ôï üíïìá ôïõ íÝïõ êáôáëüãïõ:" - -#: src/addressbook.c:1002 src/folderview.c:1323 src/folderview.c:1526 -msgid "NewFolder" -msgstr "NewFolder" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "Ôï üíïìá õðÜñ÷åé Þäç." - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "ÍÝá ïìÜäá" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "ÅéóÜãåôå ôï üíïìá ôçò íÝáò ïìÜäáò:" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "ÍÝáÏìÜäá" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "Åðåîåñãáóßá ïìÜäáò" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "ÅéóÜãåôå ôï íÝï üíïìá ôçò ïìÜäáò:" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "Åðåîåñãáóßá êáôáëüãïõ" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "ÅéóÜãåôå ôï íÝï üíïìá ôïõ êáôáëüãïõ:" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Óßãïõñá íá äéáãñáöåß ôï `%s' ;" - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "Åðåîåñãáóßá äéåýèõíóçò" - -#: src/addressbook.c:1290 src/compose.c:2803 src/select-keys.c:302 -msgid "Address" -msgstr "Äéåýèõíóç" - -#: src/addressbook.c:1294 src/compose.c:1476 src/compose.c:3133 -#: src/compose.c:3703 src/export.c:186 src/foldersel.c:177 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:334 src/main.c:342 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "Cancel" -msgstr "Áêýñùóç" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "ÄéáâÜæù ôï áñ÷åßï êáôáëüãïõ äéåõèýíóåùí..." - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s äåí õðÜñ÷åé.\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:856 src/imap.c:888 -#: src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 src/mh.c:816 -#: src/news.c:648 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:1003 -#: src/summaryview.c:1209 src/summaryview.c:1291 src/summaryview.c:1352 -#: src/summaryview.c:1809 src/summaryview.c:2287 src/summaryview.c:2310 -#: src/summaryview.c:2331 src/summaryview.c:2424 -msgid "done.\n" -msgstr "Ýãéíå.\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "ÅîÜãù ôïí êáôÜëïãï äéåõèýíóåùí óå áñ÷åßï..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "áðÝôõ÷á íá ãñÜøù ôá äåäïìÝíá ôïõ êáôáëüãïõ äéåõèýíóåùí.\n" - -#: src/alertpanel.c:119 src/compose.c:3306 src/main.c:332 -msgid "Notice" -msgstr "Óçìåßùóç" - -#: src/alertpanel.c:132 src/main.c:218 -msgid "Warning" -msgstr "Ðñïåéäïðïßçóç" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "ÓöÜëìá" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "Äçìéïõñãþ ôï äéÜëïãï alert panel...\n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "Íá åìöáíéóôåß áõôü ôï ìÞíõìá ôçí åðüìåíç öïñÜ" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "äåí ìðïñþ íá êáôáíåßìù ìíÞìç\n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/ÐñïóèÞêç..." - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/ÄéáãñáöÞ" - -#: src/compose.c:370 src/folderview.c:209 src/folderview.c:220 -#: src/folderview.c:231 -msgid "/_Property..." -msgstr "/Éäéüôçôåò..." - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/Áñ÷åßï/ÐñïóÜñôçóç áñ÷åßïõ" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/Áñ÷åßï/ÅéóáãùãÞ áñ÷åßïõ" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/Áñ÷åßï/ÅéóáãùãÞ õðïãñáöÞò" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/Åðåîåñãáóßá/Áíáßñåóç" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/Åðåîåñãáóßá/ÅðáíÜëçøç" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/Åðåîåñãáóßá/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/Åðåîåñãáóßá/ÊïðÞ" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/Åðåîåñãáóßá/ÁíôéãñáöÞ" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/Åðåîåñãáóßá/Åðéêüëëçóç" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/Åðåîåñãáóßá/ÅðéëïãÞ üëùí" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/Åðåîåñãáóßá/Áíáäßðëùóç ìáêñéþí ãñáììþí" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/Åðåîåñãáóßá/Åðåîåñãáóßá ìå åîùôåñéêü ðñüãñáììá" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/ÌÞíõìá" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/ÌÞíõìá/ÁðïóôïëÞ" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/ÌÞíõìá/ÁðïóôïëÞ áñãüôåñá" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "/ÌÞíõìá/ÁðïèÞêåõóç óôïí êáôÜëïãï ðñï÷åßñùí" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/ÌÞíõìá/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "/ÌÞíõìá/Ðñïò" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "/ÌÞíõìá/Êïéíïðïßçóç" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/ÌÞíõìá/Bcc" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/ÌÞíõìá/ÁðÜíôçóç óå" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "/ÌÞíõìá/ÓõíÝ÷åéá óå" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/ÌÞíõìá/ÐñïóÜñôçóç" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "/ÌÞíõìá/ÕðïãñáöÞ" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "/ÌÞíõìá/ÊñõðôïãñÜöçóç" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/Åñãáëåßá" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/Åñãáëåßá/ÅìöÜíéóç ÷Üñáêá" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/Åñãáëåßá/ÊáôÜëïãïò äéåõèýíóåùí" - -#: src/compose.c:494 src/compose.c:564 src/compose.c:624 src/procmsg.c:687 -msgid "Can't get text part\n" -msgstr "Äåí ìðïñþ íá ëÜâù ôï ôìÞìá êåéìÝíïõ\n" - -#: src/compose.c:556 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: ôï áñ÷åßï äåí õðÜñ÷åé\n" - -#: src/compose.c:568 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"Áñ÷Þ ðñïùèçìÝíïõ ìçíýìáôïò:\n" -"\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "Ôï áñ÷åßï %s äåí õðÜñ÷åé\n" - -#: src/compose.c:1244 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "Äåí ìðïñþ íá âñù ôï ìÝãåèïò ôïõ áñ÷åßïõ %s\n" - -#: src/compose.c:1248 -#, c-format -msgid "File %s is empty\n" -msgstr "Ôï áñ÷åßï %s åßíáé Üäåéï\n" - -#: src/compose.c:1269 -#, c-format -msgid "Message: %s" -msgstr "ÌÞíõìá: %s" - -#: src/compose.c:1375 -msgid " [Edited]" -msgstr " [ÔñïðïðïéçìÝíï]" - -#: src/compose.c:1377 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - Óýíèåóç ìçíýìáôïò" - -#: src/compose.c:1380 -#, c-format -msgid "Compose message%s" -msgstr "Óýíèåóç ìçíýìáôïò" - -#: src/compose.c:1402 src/compose.c:3596 -msgid "Recipient is not specified." -msgstr "Ï ðáñáëÞðôçò äåí Ý÷åé ïñéóôåß." - -#: src/compose.c:1420 -msgid "can't get recipient list." -msgstr "äåí ìðïñþ íá ðÜñù ôçí ëßóôá ðáñáëçðôþí" - -#: src/compose.c:1438 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" -"Ï ëïãáñéáóìüò ãéá áðïóôïëÞ ìçíýìáôïò äåí Ý÷åé ïñéóôåß.\n" -"Ðáñáêáëþ åðéëÝîôå Ýíá ëïãáñéáóìü ðñéí óôåßëåôå." - -#: src/compose.c:1459 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "ÓõíÝâç óöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò óå %s ." - -#: src/compose.c:1473 -msgid "Queueing" -msgstr "ÂÜæù óôçí ïõñÜ" - -#: src/compose.c:1474 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"ÓõíÝâç óöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò.\n" -"Íá âÜëù ôï ìÞíõìá óôïí êáôÜëïãï ïõñÜò;" - -#: src/compose.c:1480 src/compose.c:3608 -msgid "Can't queue the message." -msgstr "Äåí ìðïñþ íá âÜëù óôçí ïõñÜ ôï ìÞíõìá." - -#: src/compose.c:1483 -msgid "Error occurred while sending the message." -msgstr "ÓõíÝâç óöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò." - -#: src/compose.c:1490 src/compose.c:3615 -msgid "Can't save the message to outbox." -msgstr "Äåí ìðïñþ íá áðïèçêåýóù ôï ìÞíõìá óôá åîåñ÷üìåíá." - -#: src/compose.c:1516 src/compose.c:1637 src/compose.c:1723 src/utils.c:1540 -msgid "can't change file mode\n" -msgstr "äåí ìðïñþ íá áëëÜîù ôï mode ôïõ áñ÷åßïõ\n" - -#: src/compose.c:1542 -msgid "Can't convert the codeset of the message." -msgstr "Äåí ìðïñþ íá áëëÜîù ôï êùäéêïóýíïëï ôïõ ìçíýìáôïò." - -#: src/compose.c:1551 -msgid "can't write headers\n" -msgstr "äåí ìðïñþ íá ãñÜøù ôçí êåöáëßäá\n" - -#: src/compose.c:1669 -msgid "saving sent message...\n" -msgstr "áðïèÞêåõóç óôáëìÝíïõ ìçíýìáôïò...\n" - -#: src/compose.c:1674 -msgid "can't save message\n" -msgstr "äåí ìðïñþ íá áðïèçêåýóù ôï ìÞíõìá\n" - -#: src/compose.c:1680 src/compose.c:1787 -msgid "can't open mark file\n" -msgstr "äåí ìðïñþ íá áíïßîù ôï áñ÷åßï mark\n" - -#: src/compose.c:1703 -msgid "queueing message...\n" -msgstr "âÜæù ôï ìÞíõìá óôçí ïõñÜ...\n" - -#: src/compose.c:1778 -msgid "can't queue the message\n" -msgstr "äåí ìðïñþ íá âÜëù ôï ìÞíõìá óôçí ïõñÜ\n" - -#: src/compose.c:1816 -#, c-format -msgid "Can't open file %s\n" -msgstr "Äåí ìðïñþ íá áíïßîù ôï áñ÷åßï %s\n" - -#: src/compose.c:2170 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "generated Message-ID: %s\n" - -#: src/compose.c:2244 src/compose.c:3104 -msgid "MIME type" -msgstr "ôýðïò MIME" - -#: src/compose.c:2244 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "ÌÝãåèïò" - -#: src/compose.c:2261 -msgid "Creating compose window...\n" -msgstr "Äçìéïõñãþ ôï ðáñÜèõñï óýíèåóçò...\n" - -#: src/compose.c:2307 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "Áðü:" - -#: src/compose.c:2730 src/mainwindow.c:1359 src/prefs_account.c:501 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "ÁðïóôïëÞ" - -#: src/compose.c:2731 -msgid "Send message" -msgstr "ÁðïóôïëÞ ìçíýìáôïò" - -#: src/compose.c:2738 -msgid "Send later" -msgstr "" -"ÁðïóôïëÞ\n" -"áñãüôåñá" - -#: src/compose.c:2739 -msgid "Put into queue folder and send later" -msgstr "ÔïðïèÝôçóç óôïí êáôÜëïãï ïõñÜò êáé áðïóôïëÞ áñãüôåñá" - -#: src/compose.c:2746 src/folderview.c:738 -msgid "Draft" -msgstr "Ðñü÷åéñá" - -#: src/compose.c:2747 -msgid "Save to draft folder" -msgstr "ÁðïèÞêåõóç óôïí êáôÜëïãï ðñï÷åßñùí" - -#: src/compose.c:2756 -msgid "Insert" -msgstr "ÅéóáãùãÞ" - -#: src/compose.c:2757 -msgid "Insert file" -msgstr "ÅéóáãùãÞ áñ÷åßïõ" - -#: src/compose.c:2764 -msgid "Attach" -msgstr "ÐñïóÜñôçóç" - -#: src/compose.c:2765 -msgid "Attach file" -msgstr "ÐñïóÜñôçóç áñ÷åßïõ" - -#: src/compose.c:2774 src/prefs_common.c:1035 -msgid "Signature" -msgstr "YðïãñáöÞ" - -#: src/compose.c:2775 -msgid "Insert signature" -msgstr "ÅéóáãùãÞ õðïãñáöÞò" - -#: src/compose.c:2783 -msgid "Editor" -msgstr "ÓõíèÝôçò" - -#: src/compose.c:2784 -msgid "Edit with external editor" -msgstr "Åðåîåñãáóßá ìå åîùôåñéêü ðñüãñáììá" - -#: src/compose.c:2792 -msgid "Linewrap" -msgstr "" -"Ôýëéîç\n" -"ãñáììÞò" - -#: src/compose.c:2793 -msgid "Wrap long lines" -msgstr "Áíáäßðëùóç ãñáììþí" - -#: src/compose.c:3000 -msgid "Invalid MIME type." -msgstr "Ìç Ýãêõñïò ôýðïò MIME" - -#: src/compose.c:3018 -msgid "File doesn't exist or is empty." -msgstr "Ôï áñ÷åßï äåí õðÜñ÷åé, Þ åßíáé Üäåéï." - -#: src/compose.c:3086 -msgid "Property" -msgstr "Éäéüôçôåò" - -#: src/compose.c:3106 -msgid "Encoding" -msgstr "Êùäéêïðïßçóç" - -#: src/compose.c:3129 -msgid "Path" -msgstr "ÄéÜäñïìïò" - -#: src/compose.c:3130 -msgid "File name" -msgstr "¼íïìá áñ÷åßïõ" - -#: src/compose.c:3277 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "Ç åíôïëÞ ãéá ôï åîùôåñéêü ðñüãñáììá äåí åßíáé Ýãêõñç: `%s'\n" - -#: src/compose.c:3303 -#, c-format -msgid "" -"The external editor is still working.\n" -"Force terminating the process?\n" -"process group id: %d" -msgstr "" -"To åîùôåñéêü ðñüãñáììá åðåîåñãáóßáò ëåéôïõñãåß áêüìá.\n" -"Íá åðéâÜëëù ôåñìáôéóìü ôçò äéåñãáóßáò;\n" -"process group id: %d" - -#: src/compose.c:3316 -#, c-format -msgid "Terminated process group id: %d" -msgstr "Ôåñìáôßóôçêå process group id: %d" - -#: src/compose.c:3317 -#, c-format -msgid "Temporary file: %s" -msgstr "Ðñïóùñéíü áñ÷åßï: %s" - -#: src/compose.c:3341 -msgid "Compose: input from monitoring process\n" -msgstr "Óýíèåóç: åéóáãùãÞ áðü ðáñáêïëïõèïýìåíç äéåñãáóßá\n" - -#. failed -#: src/compose.c:3374 -msgid "Couldn't exec external editor\n" -msgstr "Äåí ìðüñåóá íá êáëÝóù ôï åîùôåñéêü ðñüãñáììá åðåîåñãáóßáò\n" - -#: src/compose.c:3378 -msgid "Couldn't write to file\n" -msgstr "Äåí ìðüñåóá íá ãñÜøù óôï áñ÷åßï\n" - -#: src/compose.c:3380 -msgid "Pipe read failed\n" -msgstr "Áðïôõ÷ßá áíÜãíùóçò áðü ôï pipe\n" - -#: src/compose.c:3637 -msgid "can't remove the old draft message\n" -msgstr "äåí ìðïñþ íá áöáéñÝóù ôï ðáëéü ðñü÷åéñï\n" - -#: src/compose.c:3665 src/compose.c:3677 -msgid "Select file" -msgstr "ÅðéëïãÞ áñ÷åßïõ" - -#: src/compose.c:3701 -msgid "Discard message" -msgstr "Áðüññéøç ìçíýìáôïò" - -#: src/compose.c:3702 -msgid "This message has been modified. discard it?" -msgstr "Áõôü ôï ìÞíõìá Ý÷åé ôñïðïðïéçèåß, íá áðïññéöèåß;" - -#: src/compose.c:3703 -msgid "Discard" -msgstr "Áðüññéøç" - -#: src/compose.c:3703 -msgid "to Draft" -msgstr "óôá ðñü÷åéñá" - -#: src/export.c:122 -msgid "Export" -msgstr "ÅîáãùãÞ" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "Ïñßóåôå êáôÜëïãï ðñïïñéóìïý êáé áñ÷åßï mbox." - -#: src/export.c:154 -msgid "Source dir:" -msgstr "Ðçãáßïò êáôÜëïãïò:" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "ÅîáãùãÞ áñ÷åßïõ:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr "ÅðéëïãÞ... " - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "ÅðéëïãÞ áñ÷åßïõ åîáãùãÞò" - -#: src/foldersel.c:131 -msgid "Select folder" -msgstr "ÅðéëïãÞ êáôáëüãïõ" - -#: src/folderview.c:203 src/folderview.c:214 -msgid "/Create _new folder..." -msgstr "/Äçìéïõñãßá íÝïõ êáôáëüãïõ..." - -#: src/folderview.c:204 src/folderview.c:215 -msgid "/_Rename folder..." -msgstr "/Ìåôïíïìáóßá êáôáëüãïõ..." - -#: src/folderview.c:205 src/folderview.c:216 -msgid "/_Delete folder" -msgstr "/ÄéáãñáöÞ êáôáëüãïõ" - -#: src/folderview.c:207 -msgid "/Remove _mailbox" -msgstr "/ÄéáãñáöÞ mailbox" - -#: src/folderview.c:218 -msgid "/Remove _IMAP4 server" -msgstr "/ÄéáãñáöÞ IMAP4 server" - -#: src/folderview.c:225 -msgid "/_Subscribe to newsgroup..." -msgstr "/ÓõíäñïìÞ óå newsgroup..." - -#: src/folderview.c:227 -msgid "/_Remove newsgroup" -msgstr "/ÄéáãñáöÞ newsgroup" - -#: src/folderview.c:229 -msgid "/Remove _news server" -msgstr "/ÄéáãñáöÞ news server" - -#: src/folderview.c:240 -msgid "Folder" -msgstr "ÊáôÜëïãïò" - -#: src/folderview.c:240 -msgid "New" -msgstr "ÍÝá" - -#: src/folderview.c:241 src/prefs_common.c:2173 -msgid "Unread" -msgstr "ÁäéÜâáóôá" - -#: src/folderview.c:241 -msgid "#" -msgstr "áñ." - -#: src/folderview.c:251 -msgid "Creating folder view...\n" -msgstr "Äçìéïõñãþ ôçí áðåéêüíéóç êáôáëüãùí...\n" - -#: src/folderview.c:395 -msgid "Setting folder info...\n" -msgstr "ÈÝôù ôéò ðëçñïöïñßåò êáôáëüãùí...\n" - -#: src/folderview.c:396 -msgid "Setting folder info..." -msgstr "ÈÝôù ôéò ðëçñïöïñßåò êáôáëüãùí..." - -#: src/folderview.c:539 src/mainwindow.c:2092 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "ÓÜñùóç êáôáëüãùí %s%c%s ..." - -#: src/folderview.c:544 src/mainwindow.c:2097 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "ÓÜñùóç êáôáëüãïõ %s ..." - -#: src/folderview.c:581 -msgid "Updating all folders..." -msgstr "ÅíçìÝñùóç üëùí ôùí êáôáëüãùí..." - -#: src/folderview.c:716 src/prefs_account.c:655 -msgid "Inbox" -msgstr "Åéóåñ÷üìåíá" - -#: src/folderview.c:721 -msgid "Outbox" -msgstr "Åîåñ÷üìåíá" - -#: src/folderview.c:726 -msgid "Queue" -msgstr "ÏõñÜ" - -#: src/folderview.c:731 -msgid "Trash" -msgstr "ÄéáãñáììÝíá" - -#: src/folderview.c:1213 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Ï êáôÜëïãïò %s åßíáé åðéëåãìÝíïò\n" - -#: src/folderview.c:1327 src/folderview.c:1390 src/folderview.c:1531 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "ôï `%c' äåí ìðïñåß íá óõìðåñéëáìâÜíåôáé óå üíïìá êáôáëüãïõ." - -#: src/folderview.c:1335 src/folderview.c:1399 src/folderview.c:1539 -#, c-format -msgid "The folder `%s' already exists." -msgstr "Ï êáôÜëïãïò `%s' õðÜñ÷åé Þäç." - -#: src/folderview.c:1343 src/folderview.c:1547 -msgid "Can't create the folder `%s'." -msgstr "äåí ìðïñþ íá äçìéïõñãÞóù ôïí êáôÜëïãï `%s'." - -#: src/folderview.c:1382 -#, c-format -msgid "Input new name for `%s':" -msgstr "Äþóôå íÝï üíïìá ãéá `%s':" - -#: src/folderview.c:1384 -msgid "Rename folder" -msgstr "Ìåôïíïìáóßá êáôáëüãïõ" - -#: src/folderview.c:1444 -#, 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:1447 src/folderview.c:1589 -msgid "Delete folder" -msgstr "ÄéáãñáöÞ êáôáëüãïõ" - -#: src/folderview.c:1453 src/folderview.c:1595 -msgid "Can't remove the folder `%s'." -msgstr "Äåí ìðïñþ íá äéáãñÜøù ôïí êáôÜëïãï `%s'." - -#: src/folderview.c:1487 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" -"Óßãïõñá íá äéáãñáöåß ôï mailbox `%s' ;\n" -"(Ôá ìçíýìáôá ÄÅÍ óâÞíïíôáé áðü ôïí äßóêï)" - -#: src/folderview.c:1490 -msgid "Remove folder" -msgstr "Áöáßñåóç êáôáëüãïõ" - -#: src/folderview.c:1523 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"Äþóôå ôï üíïìá ôïõ íÝïõ êáôáëüãïõ:\n" -"(áí èÝëåôå íá äçìéïõñãÞóåôå Ýíá êáôÜëïãï ãéá íá âÜëåôå õðïêáôáëüãïõò\n" -" ðñïóèÝóôå ôï `/' óôï ôÝëïò ôïõ ïíüìáôïò)" - -#: src/folderview.c:1587 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Óßãïõñá íá äéáãñáöåß ï êáôÜëïãïò `%s';" - -#: src/folderview.c:1628 -#, c-format -msgid "Really delete IMAP4 server `%s'?" -msgstr "Óßãïõñá íá äéáãñáöåß ï IMAP4 server `%s';" - -#: src/folderview.c:1630 -msgid "Delete IMAP4 server" -msgstr "ÄéáãñáöÞ IMAP4 server" - -#: src/folderview.c:1671 -msgid "Subscribe newsgroup" -msgstr "ÓõíäñïìÞ óôï newsgroup" - -#: src/folderview.c:1672 -msgid "Input subscribing newsgroup:" -msgstr "ÅéóÜãåôå ôï newsgroup óôï ïðïßï åããñÜöåóôå:" - -#: src/folderview.c:1681 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "Ôï newsgroup `%s' õðÜñ÷åé Þäç." - -#: src/folderview.c:1727 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Óßãïõñá íá äéáãñáöåß ôï newsgroup `%s';" - -#: src/folderview.c:1729 -msgid "Delete newsgroup" -msgstr "ÄéáãñáöÞ newsgroup" - -#: src/folderview.c:1760 -#, c-format -msgid "Really delete news server `%s'?" -msgstr "Óßãïõñá íá äéáãñáöåß ï news server `%s';" - -#: src/folderview.c:1762 -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:174 src/summaryview.c:1392 -msgid "(No From)" -msgstr "(×ùñßò áðïóôïëÝá)" - -#: src/headerview.c:189 src/summaryview.c:1408 -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:204 -#, c-format -msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "Ç IMAP4 óýíäåóç óôï %s:%d äéáêüðçêå. Åðáíáóýíäåóç...\n" - -#: src/imap.c:230 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "äçìéïõñãßá IMAP4 óýíäåóçò óôï %s:%d ...\n" - -#: src/imap.c:385 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "ôï ìÞíõìá %d åßíáé Þäç óôç ìíÞìç.\n" - -#: src/imap.c:395 -#, c-format -msgid "getting message %d...\n" -msgstr "ëáìâÜíù ôï ìÞíõìá %d...\n" - -#: src/imap.c:401 src/procmsg.c:587 -#, c-format -msgid "can't fetch message %d\n" -msgstr "äåí ìðïñþ íá ëÜâù ôï ìÞíõìá %d\n" - -#: src/imap.c:430 -msgid "can't append message %s\n" -msgstr "äåí ìðïñþ íá ðñïóèÝóù ôï ìÞíõìá %s\n" - -#: src/imap.c:459 src/imap.c:516 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "ï ðçãáßïò êáôÜëïãïò åßíáé ßäéïò ìå ôïí êáôÜëïãï ðñïïñéóìïý.\n" - -#: src/imap.c:469 src/imap.c:521 src/mh.c:201 src/mh.c:267 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "Ìåôáêéíþ ôï ìÞíõìá %s%c%d óôï %s ...\n" - -#: src/imap.c:473 src/imap.c:525 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "ÁíôéãñÜöù ôï ìÞíõìá %s%c%d óôï %s ...\n" - -#: src/imap.c:593 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "äåí ìðïñþ íá ôá óçìåéþóù ùò äéåãñáììÝíá: %d\n" - -#: src/imap.c:600 src/imap.c:639 -msgid "can't expunge\n" -msgstr "äåí ìðïñþ íá ôá áðáëåßøù\n" - -#: src/imap.c:632 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "äåí ìðïñþ íá ôá óçìåéþóù ùò äéåãñáììÝíá: 1:%d\n" - -#: src/imap.c:744 -msgid "can't create mailbox\n" -msgstr "äåí ìðïñþ íá äçìéïõñãÞóù ôï mailbox\n" - -#: src/imap.c:781 -msgid "can't delete mailbox\n" -msgstr "äåí ìðïñþ íá äéáãñÜøù ôï mailbox\n" - -#: src/imap.c:807 -msgid "can't get envelope\n" -msgstr "äåí ìðïñþ íá ëÜâù ôïí öÜêåëï\n" - -#: src/imap.c:813 -msgid "error occurred while getting envelope.\n" -msgstr "óõíÝâç óöÜëìá êáèþò ëÜìâáíá ôïí öÜêåëï.\n" - -#: src/imap.c:821 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "äåí ìðïñþ íá äéáâÜóù ôïí öÜêåëï: %s\n" - -#: src/imap.c:849 -#, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "ÄéáãñÜöù ôá ðñïóðåëáóìÝíá ìçíýìáôá %d - %d ... " - -#: src/imap.c:882 -msgid "Deleting all cached messages... " -msgstr "ÄéáãñÜöù üëá ôá ìçíýìáôá áðü ôç ìíÞìç... " - -#: src/imap.c:896 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí IMAP4 server: %s:%d\n" - -#: src/imap.c:929 -msgid "can't get namespace\n" -msgstr "" - -#: src/imap.c:1346 -#, c-format -msgid "can't select folder: %s\n" -msgstr "äåí ìðïñþ íá åðéëÝîù ôïí êáôÜëïãï: %s\n" - -#: src/imap.c:1401 -msgid "can't get the next uid of folder: %s\n" -msgstr "äåí ìðïñþ íá äéáâÜóù ôïí åðüìåíï êþäéêá ôïõ êáôáëüãïõ: %s\n" - -#: src/imap.c:1423 -msgid "IMAP4 login failed.\n" -msgstr "Ç åßóïäïò óôï IMAP4 áðÝôõ÷å.\n" - -#: src/imap.c:1636 -msgid "can't append %s to %s\n" -msgstr "äåí ìðïñþ íá ðñïóèÝóù ôï %s óôï %s\n" - -#: src/imap.c:1656 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "äåí ìðïñþ íá áíôéãñÜøù ôï %d óôï %s\n" - -#: src/imap.c:1681 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "óöÜëìá êáôÜ ôçí åíôïëÞ imap: STORE %d:%d %s\n" - -#: src/imap.c:1695 -msgid "error while imap command: EXPUNGE\n" -msgstr "óöÜëìá êáôÜ ôçí åíôïëÞ imap: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "ÅéóáãùãÞ" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "Ïñßóåôå mbox ðñïïñéóìïý êáé êáôÜëïãï ðñïïñéóìïý" - -#: src/import.c:158 -msgid "Importing file:" -msgstr "ÅéóÜãù áñ÷åßï:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "ÊáôÜëïãïò ðñïïñéóìïý:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "ÅðÝëåîå áñ÷åßï åéóáãùãÞò" - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "ÐåñéìÝíù" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "ËáìâÜíù ôá íÝá ìçíýìáôá" - -#: src/inc.c:384 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "ÅéóÜãåôå êùäéêü ãéá %s óå %s:" - -#: src/inc.c:388 src/news.c:131 -msgid "Input password" -msgstr "Äþóôå ôïí êùäéêü" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "ËáìâÜíù" - -#: src/inc.c:412 -msgid "Done" -msgstr "ÔÝëïò" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "Ç åîáêñßâùóç ãéá %s óôï %s áðÝôõ÷å" - -#: src/inc.c:487 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "ëáìâÜíù íÝá ìçíýìáôá ôïõ ëïãáñéáóìïý %s...\n" - -#: src/inc.c:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: ËáìâÜíù ôá íÝá ìçíýìáôá" - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "ÓõíäÝïìáé óôïí POP3 server: %s ..." - -#: src/inc.c:527 src/inc.c:660 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí POP3 server: %s:%d\n" - -#: src/inc.c:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí POP3 server: %s:%d" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "ËáìâÜíù ôï ìÞíõìá (%d / %d) (%d / %d bytes)" - -#: src/inc.c:719 -msgid "Authorizing..." -msgstr "Åîáêñßâùóç..." - -#: src/inc.c:724 -msgid "Getting the number of new messages (STAT)..." -msgstr "ËáìâÜíù ôïí áñéèìü ôùí íÝùí ìçíõìÜôùí (STAT)..." - -#: src/inc.c:729 -msgid "Getting the number of new messages (LAST)..." -msgstr "ËáìâÜíù ôïí áñéèìü ôùí íÝùí ìçíõìÜôùí (LAST)..." - -#: src/inc.c:734 -msgid "Getting the number of new messages (UIDL)..." -msgstr "ËáìâÜíù ôïí áñéèìü ôùí íÝùí ìçíõìÜôùí (UIDL)..." - -#: src/inc.c:739 -msgid "Getting the size of messages (LIST)..." -msgstr "ËáìâÜíù ôï ìÝãåèïò ôùí ìçíõìÜôùí (LIST)..." - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "ÄéáãñÜöù ôï ìÞíõìá" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "Êëåßíù ôç óýíäåóç" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "Ýíá ìÞíõìá äåí èá ðáñáëçöèåß\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "¸íá óöÜëìá óõíÝâç êáèþò åðåîåñãÜæïìáé ôï mail." - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "Äåí õðÜñ÷åé Üëëïò ÷þñïò óôï äßóêï." - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "äåí õðÜñ÷ïõí ìçíýìáôá óôï ôïðéêü mailbox.\n" - -#: src/inc.c:881 -#, 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:108 -#, c-format -msgid "" -"File `%s' already exists.\n" -"Can't create folder." -msgstr "" -"Ôï áñ÷åßï `%s' õðÜñ÷åé Þäç.\n" -"Äåí ìðïñþ íá äçìéïõñãÞóù ôïí êáôÜëïãï." - -#: src/main.c:149 -msgid "g_thread is not supported by glib.\n" -msgstr "ôï g_thread äåí õðïóôçñßæåôáé áðü ôçí glib.\n" - -#: src/main.c:219 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"Ôï GnuPG äåí Ý÷åé åãêáôáóôáèåß óùóôÜ.\n" -"Áðåíåñãïðïéåßôáé ç õðïóôÞñéîç OpenPGP." - -#: src/main.c:300 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "×ñÞóç: %s [ÅÐÉËÏÃÇ]...\n" - -#: src/main.c:303 -msgid " --compose [address] open composition window" -msgstr " --compose [äéåýèõíóç] Üíïéãìá ðáñáèýñïõ óýíèåóçò" - -#: src/main.c:304 -msgid " --receive receive new messages" -msgstr " --receive ëÞøç íÝùí ìçíõìÜôùí" - -#: src/main.c:305 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all ëÞøç íÝùí ìçíõìÜôùí üëùí ôùí ëïãáñéáóìþí" - -#: src/main.c:306 -msgid " --debug debug mode" -msgstr " --debug debug mode" - -#: src/main.c:307 -msgid " --help display this help and exit" -msgstr " --help åìöÜíéóç áõôïý ôïõ êåéìÝíïõ êáé Ýîïäïò" - -#: src/main.c:308 -msgid " --version output version information and exit" -msgstr " --version åìöÜíéóç ôçò Ýêäïóçò êáé Ýîïäïò" - -#: src/main.c:333 -msgid "Composing message exists. Really quit?" -msgstr "ÕðÜñ÷åé ðáñÜèõñï óýíèåóçò ìçíýìáôïò. Íá êëåßóù;" - -#: src/main.c:340 -msgid "Queued messages" -msgstr "Ìçíýìáôá óôçí ïõñÜ" - -#: src/main.c:341 -msgid "Some unsent messages are queued. Exit now?" -msgstr "ÌåñéêÜ ìçíýìáôá äåí Ý÷ïõí óôáëåß êáé åßíáé óôçí ïõñÜ. Íá êëåßóù;" - -#. remote command mode -#: src/main.c:412 -msgid "another Sylpheed is already running.\n" -msgstr "Ýíá Üëëï Sylpheed ôñÝ÷åé Þäç.\n" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "/Áñ÷åßï/ÐñïóèÞêç mailbox..." - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/Áñ÷åßï/ÅíçìÝñùóç äïìÞò êáôáëüãùí" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "/Áñ÷åßï/ÊáôÜëïãïò" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/Áñ÷åßï/ÊáôÜëïãïò/Äçìéïõñãßá íÝïõ êáôáëüãïõ..." - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/Áñ÷åßï/ÊáôÜëïãïò/Ìåôïíïìáóßá êáôáëüãïõ..." - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "/Áñ÷åßï/ÊáôÜëïãïò/ÄéáãñáöÞ êáôáëüãïõ" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/Áñ÷åßï/ÅéóáãùãÞ áñ÷åßïõ mbox..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "/Áñ÷åßï/ÅîáãùãÞ óå áñ÷åßï mbox..." - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "/Áñ÷åßï/¶äåéáóìá äéáãñáììÝíùí" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/Áñ÷åßï/ÁðïèÞêåõóç ùò..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/Áñ÷åßï/Åêôýðùóç..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/Áñ÷åßï/¸îïäïò" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/Åðåîåñãáóßá/ÁíáæÞôçóç" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/Áðåéêüíéóç" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/Áðåéêüíéóç/ÄïìÞ êáôáëüãùí" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/Áðåéêüíéóç/Áðåéêüíéóç ìçíõíÜôùí" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/Áðåéêüíéóç/ÑÜâäïò åñãáëåßùí" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/Áðåéêüíéóç/ÑÜâäïò åñãáëåßùí/Åéêüíåò êáé êåßìåíï" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/Áðåéêüíéóç/ÑÜâäïò åñãáëåßùí/Åéêüíåò" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/Áðåéêüíéóç/ÑÜâäïò åñãáëåßùí/Êåßìåíï" - -#: src/mainwindow.c:364 -msgid "/_View/_Toolbar/_None" -msgstr "/Áðåéêüíéóç/ÑÜâäïò åñãáëåßùí/Êáìßá" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/Áðåéêüíéóç/ÑÜâäïò êáôÜóôáóçò" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/Áðåéêüíéóç/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/Áðåéêüíéóç/Îå÷ùñéóôü ðáñÜèõñï äïìÞò êáôáëüãùí" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/Áðåéêüíéóç/Îå÷ùñéóôÞ áðåéêüíéóç ìçíõìÜôùí" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Áõôüìáôç áíáãíþñéóç" - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/7bit ascii (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÄõôéêÞò Åõñþðçò (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÊåíôñéêÞò Åõñþðçò (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÂáëôéêÞò (ISO-8859-13)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÂáëôéêÞò (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Åëëçíéêü (ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Ôïõñêéêü (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Êõñéëëéêü (ISO-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Êõñéëëéêü (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Êõñéëëéêü (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÉáðùíÝæéêï (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÉáðùíÝæéêï (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÉáðùíÝæéêï (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÉáðùíÝæéêï (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÁðëïðïéçìÝíï Êéíåæéêü (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Ðáñáäïóéáêü Êéíåæéêü (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Ðáñáäïóéáêü Êéíåæéêü (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Êéíåæéêü (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÊïñåÜôéêï (EUC-_KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÊïñåÜôéêï (ISO-2022-KR)" - -#: src/mainwindow.c:445 -msgid "/_Message/Get new ma_il" -msgstr "/ÌÞíõìá/ËÞøç íÝùí ìçíõìÜôùí" - -#: src/mainwindow.c:446 -msgid "/_Message/Get from _all accounts" -msgstr "/ÌÞíõìá/ËÞøç áðü üëïõò ôïõò ëïãáñéáóìïýò" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/ÌÞíõìá/ÁðïóôïëÞ ìçíõìÜôùí áðü ôçí ïõñÜ" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/ÌÞíõìá/Óýíèåóç íÝïõ ìçíýìáôïò" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/ÌÞíõìá/ÁðÜíôçóç" - -#: src/mainwindow.c:454 -msgid "/_Message/Repl_y to sender" -msgstr "/ÌÞíõìá/ÁðÜíôçóç óôïí áðïóôïëÝá" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/ÌÞíõìá/ÁðÜíôçóç óå üëïõò" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/ÌÞíõìá/Ðñïþèçóç" - -#: src/mainwindow.c:457 -msgid "/_Message/Forward as a_ttachment" -msgstr "/ÌÞíõìá/Ðñïþèçóç óáí ðñïóÜñôçóç" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/ÌÞíõìá/Ìåôáêßíçóç..." - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "/ÌÞíõìá/ÁíôéãñáöÞ..." - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/ÌÞíõìá/ÄéáãñáöÞ" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/ÌÞíõìá/ÓÞìáíóç" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/MÞíõìá/ÓÞìáíóç/ÓÞìáíóç" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/MÞíõìá/ÓÞìáíóç/Áíáßñåóç óÞìáíóçò" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/MÞíõìá/ÓÞìáíóç/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/MÞíõìá/ÓÞìáíóç/ÓÞìáíóç ùò áäéÜâáóôï" - -#: src/mainwindow.c:468 -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/MÞíõìá/ÓÞìáíóç/ÓÞìáíóç ùò äéáâáóìÝíï" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/ÌÞíõìá/¶íïéãìá óå íÝï ðáñÜèõñï" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "/ÌÞíõìá/ÅìöÜíéóç ôïõ ðçãáßïõ" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/ÌÞíõìá/ÅìöÜíéóç üëçò ôçò êåöáëßäáò" - -#: src/mainwindow.c:474 -msgid "/_Message/Re-_edit" -msgstr "/ÌÞíõìá/Åðáí-åðåîåñãáóßá" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/Ðåñßëçøç" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/Ðåñßëçøç/ÄéáãñáöÞ äéðëþí ìçíõìÜôùí" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/Ðåñßëçøç/ÖéëôñÜñéóìá ìçíõìÜôùí" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/Ðåñßëçøç/ÅêôÝëåóç åñãáóéþí" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/Ðåñßëçøç/ÅíçìÝñùóç" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/Ðåñßëçøç/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/Ðåñßëçøç/Ðñïçãïýìåíï ìÞíõìá" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/Ðåñßëçøç/Åðüìåíï ìÞíõìá" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/Ðåñßëçøç/Åðüìåíï áäéÜâáóôï ìÞíõìá" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/Ðåñßëçøç/Ìåôáêßíçóç óå Üëëï êáôÜëïãï" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/Ðåñßëçøç/Ôáîéíüìçóç" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ áñéèìü" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ ìÝãåèïò" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ çìåñïìçíßá" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ áðïóôïëÝá" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ èÝìá" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/_Attract by subject" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/Ðåñßëçøç/ÍçìáôéêÞ áðåéêüíéóç" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/Ðåñßëçøç/Unt_hread view" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/Ðåñßëçøç/Ïñéóìüò åìöáíéæüìåíùí óôïé÷åßùí..." - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/Åñãáëåßá/ÐáñÜèõñï êáôáãñáöÞò" - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/Ñõèìßóåéò" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/Ñõèìßóåéò/ÊïéíÝò åðéëïãÝò..." - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "/Ñõèìßóåéò/ÅðéëïãÝò ößëôñùí..." - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/Ñõèìßóåéò/ÅðéëïãÝò áíÜ ëïãáñéáóìü..." - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/Ñõèìßóåéò/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/Ñõèìßóåéò/Äçìéïõñãßá íÝïõ ëïãáñéáóìïý..." - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/Ñõèìßóåéò/Åðåîåñãáóßá ëïãáñéáóìþí..." - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/Ñõèìßóåéò/ÁëëáãÞ ôñÝ÷ïíôïò ëïãáñéáóìïý" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/ÂïÞèåéá/_Manual" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/ÂïÞèåéá/_Manual/Áããëéêü" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/ÂïÞèåéá/_Manual/ÉáðùíÝæéêï" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/ÂïÞèåéá/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "Äçìéïõñãþ ôï êõñßùò ðáñÜèõñï...\n" - -#: src/mainwindow.c:673 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "MainWindow: ç êáôáíïìÞ ÷ñùìÜôùí %d áðÝôõ÷å\n" - -#: src/mainwindow.c:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "×ùñßò ôßôëï" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "êáíÝíá" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "ÔñÝ÷ïí ëïãáñéáóìüò: %s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "ÈÝóç ðáñáèýñïõ: x = %d, y = %d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "¶äåéáóìá äéáãñáììÝíùí" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "Íá áäåéÜóù üëá ôá äéáãñáììÝíá ìçíýìáôá" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "ÐñïóèÞêç mailbox" - -#: src/mainwindow.c:978 -msgid "" -"Input the location of mailbox.\n" -"If the existing mailbox is specified, it will be\n" -"scanned automatically." -msgstr "" -"ÅéóÜãåôå ôçí ôïðïèåóßá ôïõ mailbox.\n" -"Áí ïñéóôåß ôï õðÜñ÷ïí mailbox, èá\n" -"óáñùèåß áõôüìáôá." - -#: src/mainwindow.c:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "Ôï mailbox `%s' õðÜñ÷åé Þäç" - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "Mailbox" - -#: src/mainwindow.c:995 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:1141 -msgid "Setting widgets..." -msgstr "Ñõèìßóåéò widgets..." - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "ËÞøç" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "ËÞøç íÝïõ mail" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "ËÞøç\nüëùí" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "ËÞøç íÝïõ mail áðü üëïõò ôïõò ëïãáñéáóìïýò" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "ÁðïóôïëÞ üëùí ôùí ìçíõìÜôùí áðü ôçí ïõñÜ" - -#: src/mainwindow.c:1370 src/prefs_account.c:503 src/prefs_common.c:638 -msgid "Compose" -msgstr "Óýíèåóç" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "Óýíèåóç íÝïõ ìçíýìáôïò" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "ÁðÜíôçóç" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "ÁðÜíôçóç óôï ìÞíõìá" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "ÁðÜíôçóç\nüëùí" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "ÁðÜíôçóç óå üëïõò" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "Ðñïþèçóç" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "Ðñïþèçóç ìçíýìáôïò" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "ÄéáãñáöÞ ìçíýìáôïò" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "ÅêôÝëåóç" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "ÅêôÝëåóç óçìåéùìÝíçò åñãáóßáò" - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "Åðüìåíï" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "Åðüìåíï áäéÜâáóôï ìÞíõìá" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "ÅðéëïãÝò" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "ÊïéíÝò ÅðéëïãÝò" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "Ëïã/óìüò" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "Ñõèìßóåéò ëïãáñéáóìïý" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit" -msgstr "¸îïäïò" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit this program?" -msgstr "¸îïäïò áðü áõôü ôï ðñüãñáììá;" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "Ç áðïóôïëÞ ìçíõìÜôùí ïõñÜò áðÝôõ÷å." - -#: src/mainwindow.c:1924 -#, c-format -msgid "forced charset: %s\n" -msgstr "åðéâëçèåßóá êùäéêïóåëßäá: %s\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "ËáìâÜíù ôá ìçíýìáôá áðü ôï %s óôï %s...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "äåí ìðïñþ íá äéáâÜóù ôï áñ÷åßï mbox.\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "ìç Ýãêõñç ìïñöïðïßçóç mbox: %s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "êáêþò ìïñöïðïéçìÝíï mbox: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "äåí ìðïñþ íá áíïßîù ôï ðñïóùñéíü áñ÷åßï\n" - -#: 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 "äåí ìðïñþ íá ãñÜøù óôï ðñïóùñéíü áñ÷åßï\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "ÂñÝèçêáí %d ìçíýìáôá.\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "äåí ìðïñþ íá äçìéïõñãÞóù ôï áñ÷åßï lock %s\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "÷ñçóéìïðïéÞóôå ôçí 'flock' áíôß ãéá ôçí 'file' áí åßíáé äõíáôüí.\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "äåí ìðïñþ íá äçìéïõñãÞóù %s\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "ôï mailbox ÷ñçóéìïðïéåßôáé áðü Üëëç äéåñãáóßá, ðåñéìÝíù...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "äåí ìðïñþ íá êëåéäþóù ôï %s\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "áðáñÜäåêôïò ôýðïò êëåéäþìáôïò\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "äåí ìðïñþ íá îåêëåéäþóù ôï %s\n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "äåí ìðïñþ íá ìçäåíßóù ôï mailbox.\n" - -#: src/mbox.c:383 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "ÅîáãùãÞ ìçíõìÜôùí áðü %s ðñïò %s...\n" - -#: src/messageview.c:67 -msgid "Creating message view...\n" -msgstr "Äçìéïõñãþ áðåéêüíéóç ìçíýìáôïò...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "äåí ìðïñþ íá áíôéãñÜøù ôï ìÞíõìá %s óôï %s\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "Äåí ìðïñþ íá áíïßîù óçìåéùìÝíï áñ÷åßï.\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "ôï %s õðÜñ÷åé Þäç" - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Ôåëåõôáßïò áñéèìüò óôïí êáôÜëïãï %s = %d\n" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "\tÁíáæÞôçóç óôá áðñïóðÝëáóôá ìçíýìáôá... " - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "%d áðñïóðÝëáóôï(á) ìÞíõìá(ôá) âñÝèçêå(áí)\n" - -#: src/mh.c:813 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tÔáîéíïìþ áñéèìçôéêÜ ôá áðñïóðÝëáóôá ìçíýìáôá... " - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/¶íïéãìá" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/¶íïéãìá ìå..." - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/ÅìöÜíéóç óáí êåßìåíï" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "/ÁðïèÞêåõóç ùò..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/¸ëåã÷ïò õðïãñáöÞò" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "Ôýðïò MIME" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "Äçìéïõñãßá áðåéêüíéóçò MIME...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "ÅðéëÝîôå \"¸ëåã÷ïò õðïãñáöÞò\" ãéá Ýëåã÷ï" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "Äåí ìðïñþ íá ëÜâù ôï ôìÞìá ôïõ ðïëõôìçìáôéêïý ìçíýìáôïò" - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "Äåí ìðïñþ íá áðïèçêåýóù ôï ôìÞìá ôïõ ðïëõôìçìáôéêïý ìçíýìáôïò" - -#: src/mimeview.c:708 src/summaryview.c:2018 -msgid "Save as" -msgstr "ÁðïèÞêåõóç ùò" - -#: src/mimeview.c:714 src/summaryview.c:2023 -msgid "Overwrite" -msgstr "ÅããñáöÞ áðü ðÜíù" - -#: src/mimeview.c:715 src/summaryview.c:2024 -msgid "Overwrite existing file?" -msgstr "ÅããñáöÞ ðÜíù áðü ôï õðÜñ÷ïí áñ÷åßï;" - -#: src/mimeview.c:769 -msgid "Open with" -msgstr "¶íïéãìá ìå" - -#: src/mimeview.c:770 -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"ÅéóÜãåôå ôçí ãñáììÞ åíôïëÞò ãéá ôï Üíïéãìá ôïõ áñ÷åßïõ:\n" -"(Ôï `%s' èá áíôéêáôáóôáèåß ìå ôï üíïìá áñ÷åßïõ)" - -#: src/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "Ç ãñáììÞ åíôïëÞò ãéá áðåéêüíéóç MIME åßíáé ìç Ýãêõñç: `%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "äçìéïõñãþ NNTP óýíäåóç óôï %s:%d ...\n" - -#: src/news.c:176 -#, c-format -msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "Ç NNTP óýíäåóç óôï %s:%d äéáêüðçêå. Åðáíáóýíäåóç...\n" - -#: src/news.c:245 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "ôï Üñèñï %d Ý÷åé ðñïóðåëáóôåß Þäç.\n" - -#: src/news.c:257 -msgid "can't select group %s\n" -msgstr "äåí ìðïñþ íá åðéëÝîù ôçí ïìÜäá %s\n" - -#: src/news.c:262 -#, c-format -msgid "getting article %d...\n" -msgstr "ëáìâÜíù ôï Üñèñï %d...\n" - -#: src/news.c:267 -#, c-format -msgid "can't read article %d\n" -msgstr "äåí ìðïñþ íá äéáâÜóù ôï Üñèñï %d\n" - -#: src/news.c:299 -msgid "can't post article.\n" -msgstr "äåí ìðïñþ íá óôåßëù ôï Üñèñï.\n" - -#: src/news.c:323 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "äåí ìðïñþ íá ëÜâù ôï Üñèñï %d\n" - -#: src/news.c:393 -#, c-format -msgid "can't set group: %s\n" -msgstr "äåí ìðïñþ íá ïñßóù ôçí ïìÜäá: %s\n" - -#: src/news.c:400 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "ìç Ýãêõñç áêïëïõèßá Üñèñùí: %d - %d\n" - -#: src/news.c:409 -msgid "no new articles.\n" -msgstr "äåí õðÜñ÷ïõí íÝá Üñèñá.\n" - -#: src/news.c:422 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "ëáìâÜíù xover %d - %d óôï %s...\n" - -#: src/news.c:425 -msgid "can't get xover\n" -msgstr "äåí ìðïñþ íá ëÜâù xover\n" - -#: src/news.c:431 -msgid "error occurred while getting xover.\n" -msgstr "óõíÝâç óöÜëìá êáèþò ëÜìâáíá xover.\n" - -#: src/news.c:439 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "ìç Ýãêõñç ãñáììÞ xover: %s\n" - -#: src/news.c:456 src/news.c:481 -msgid "can't get xhdr\n" -msgstr "äåí ìðïñþ íá ëÜâù xhdr\n" - -#: src/news.c:464 src/news.c:489 -msgid "error occurred while getting xhdr.\n" -msgstr "óõíÝâç óöÜëìá êáèþò ëÜìâáíá xhdr.\n" - -#: src/news.c:613 -#, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "ÄéáãñÜöù ôá ðñïóðåëáóìÝíá Üñèñá 1 - %d... " - -#: src/news.c:642 -msgid "\tDeleting all cached articles... " -msgstr "\tÄéáãñÜöù üëá ôá ðñïóðåëáóìÝíá Üñèñá... " - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí NNTP server: %s:%d\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "óöÜëìá ðñùôïêüëëïõ: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "óöÜëìá ðñùôïêüëëïõ\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "ÐñïÝêõøå óöÜëìá êáôÜ ôçí áðïóôïëÞ\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "ÊùäéêÞ öñÜóç" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[÷ùñßò user id]" - -#: src/passphrase.c:244 -#, 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:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"ËÜèïò êùäéêÞ öñÜóç! ÎáíáðñïóðáèÞóôå...\n" -"\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "ÐñïÝêõøå óöÜëìá óôçí åîáêñßâùóç\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "Ðñïáðáéôïýìåíç timestamp APOP äåí âñÝèçêå óôï ÷áéñåôéóìü\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "Óõíôáêôéêü óöÜëìá timestamp óôï ÷áéñåôéóìü\n" - -#: src/pop.c:171 src/pop.c:212 -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:364 -#: src/prefs_account.c:378 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -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:409 -msgid "Opening account preferences window...\n" -msgstr "Áíïßãù ôï ðáñÜèõñï åðéëïãþí ôùí ëïãáñéáóìþí...\n" - -#: src/prefs_account.c:436 -#, c-format -msgid "Account%d" -msgstr "Ëïãáñéáóìüò%d" - -#: src/prefs_account.c:449 -msgid "Preferences for new account" -msgstr "ÅðéëïãÝò ãéá ôï íÝï ëïãáñéáóìü" - -#: src/prefs_account.c:454 -msgid "Preferences for each account" -msgstr "ÅðéëïãÝò ãéá êÜèå ëïãáñéáóìü" - -#: src/prefs_account.c:477 -msgid "Creating account preferences window...\n" -msgstr "Äçìéïõñãþ ôï ðáñÜèõñï åðéëïãþí ôïõ ëïãáñéáóìïý...\n" - -#: src/prefs_account.c:497 -msgid "Basic" -msgstr "ÂáóéêÜ" - -#: src/prefs_account.c:499 src/prefs_common.c:634 -msgid "Receive" -msgstr "ËÞøç" - -#: src/prefs_account.c:506 src/prefs_common.c:645 -msgid "Privacy" -msgstr "Ìõóôéêüôçôá" - -#: src/prefs_account.c:509 -msgid "Advanced" -msgstr "Ðñï÷ùñçìÝíá" - -#: src/prefs_account.c:563 -msgid "Name of this account" -msgstr "¼íïìá ôïõ ëïãáñéáóìïý" - -#: src/prefs_account.c:572 -msgid "Usually used" -msgstr "ÓõíÞèùò ÷ñçóéìïðïéïýìåíïò" - -#: src/prefs_account.c:576 -msgid "Personal information" -msgstr "ÐñïóùðéêÝò ðëçñïöïñßåò" - -#: src/prefs_account.c:585 -msgid "Full name" -msgstr "ÐëÞñåò üíïìá" - -#: src/prefs_account.c:591 -msgid "Mail address" -msgstr "Äéåýèõíóç mail" - -#: src/prefs_account.c:597 -msgid "Organization" -msgstr "Ïñãáíéóìüò" - -#: src/prefs_account.c:621 -msgid "Server information" -msgstr "Ðëçñïöïñßåò åîõðçñÝôç" - -#: src/prefs_account.c:642 -msgid "POP3 (normal)" -msgstr "POP3 (óýíçèåò)" - -#: src/prefs_account.c:644 -msgid "POP3 (APOP auth)" -msgstr "POP3 (ðéóôïðïßçóç APOP)" - -#: src/prefs_account.c:646 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:648 -msgid "News (NNTP)" -msgstr "ÍÝá (NNTP)" - -#: src/prefs_account.c:650 -msgid "None (local)" -msgstr "Ôßðïôá (ôïðéêü)" - -#: src/prefs_account.c:672 -msgid "This server requires authentication" -msgstr "Áõôüò ï åîõðçñÝôçò áðáéôåß ðéóôïðïßçóç" - -#: src/prefs_account.c:711 -msgid "News server" -msgstr "ÅîõðçñÝôçò íÝùí" - -#: src/prefs_account.c:717 -msgid "Server for receiving" -msgstr "ÅîõðçñÝôçò ãéá ëÞøç" - -#: src/prefs_account.c:723 -msgid "SMTP server (send)" -msgstr "ÅîõðçñÝôçò SMTP (áðïóôïëÞ)" - -#: src/prefs_account.c:730 -msgid "User ID" -msgstr "¼íïìá ÷ñÞóôç" - -#: src/prefs_account.c:736 -msgid "Password" -msgstr "Êùäéêüò" - -#: src/prefs_account.c:786 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:794 -msgid "Remove messages on server when received" -msgstr "ÄéáãñáöÞ ìçíõìÜôùí áðü ôïí åîõðçñÝôç üôáí ðáñáëçöèïýí" - -#: src/prefs_account.c:796 -msgid "Download all messages on server" -msgstr "ËÞøç üëùí ôùí ìçíõìÜôùí áðü ôïí åîõðçñÝôç" - -#: src/prefs_account.c:799 -msgid "`Get all' checks for new mail on this account" -msgstr "`ËÞøç üëùí' åëÝã÷åé ãéá íÝá ìçíýìáôá óå áõôü ôï ëïãáñéáóìü" - -#: src/prefs_account.c:801 -msgid "Filter messages on receiving" -msgstr "ÖéëôñÜñéóìá ìçíõìÜôùí êáôÜ ôçí ëÞøç" - -#: src/prefs_account.c:838 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "Åðéêåöáëßäá" - -#: src/prefs_account.c:845 -msgid "Add Date header field" -msgstr "ÐñïóèÞêç ðåäßïõ çìåñïìçíßáò óôçí êåöáëßäá" - -#: src/prefs_account.c:846 -msgid "Generate Message-ID" -msgstr "Äçìéïõñãßá Message-ID" - -#: src/prefs_account.c:853 -msgid "Add user-defined header" -msgstr "ÐñïóèÞêç êåöáëßäáò ïñéóìÝíçò áðü ôïí ÷ñÞóôç" - -#: src/prefs_account.c:855 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr "Åðåîåñãáóßá..." - -#: src/prefs_account.c:865 -msgid "Automatically set following addresses" -msgstr "Áõôüìáôïò ïñéóìüò áõôþí ôùí äéåõèýíóåùí" - -#: src/prefs_account.c:874 -msgid "Cc" -msgstr "Êïéíïðïßçóç" - -#: src/prefs_account.c:887 -msgid "Bcc" -msgstr "Bcc" - -#: src/prefs_account.c:900 -msgid "Reply-To" -msgstr "ÁðÜíôçóç óå" - -#: src/prefs_account.c:913 -msgid "Authentication" -msgstr "Ðéóôïðïßçóç" - -#: src/prefs_account.c:921 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "Ðéóôïðïßçóç SMTP (SMTP AUTH)" - -#: src/prefs_account.c:923 -msgid "Authenticate with POP3 before sending" -msgstr "Ðéóôïðïßçóç ìå POP3 ðñéí ôçí áðïóôïëÞ" - -#: src/prefs_account.c:957 -msgid "Signature file" -msgstr "Áñ÷åßï õðïãñáöÞò" - -#: src/prefs_account.c:986 -msgid "Sign key" -msgstr "Êëåéäß õðïãñáöÞò" - -#: src/prefs_account.c:994 -msgid "Use default GnuPG key" -msgstr "×Þóç ðñïêáèïñéóìÝíïõ êëåéäéïý GnuPG" - -#: src/prefs_account.c:1003 -msgid "Select key by your email address" -msgstr "ÅðéëïãÞ êëåéäéïý ìå âÜóç ôçí email äéåýèõíóç" - -#: src/prefs_account.c:1012 -msgid "Specify key manually" -msgstr "Ïñßóôå ìå ôï ÷Ýñé ôï êëåéäß" - -#: src/prefs_account.c:1028 -msgid "User or key ID:" -msgstr "×ñÞóôçò Þ key ID:" - -#: src/prefs_account.c:1073 -msgid "Specify SMTP port" -msgstr "Ðñïóäéïñéóìüò èýñáò SMTP" - -#: src/prefs_account.c:1085 -msgid "Specify POP3 port" -msgstr "Ðñïóäéïñéóìüò èýñáò POP3" - -#: src/prefs_account.c:1097 -msgid "Specify domain name" -msgstr "Ïñéóìüò ôïõ ïíüìáôïò ôïõ domain" - -#: src/prefs_account.c:1144 -msgid "Mail address is not entered." -msgstr "Ç äéåýèõíóç mail äåí Ý÷åé ïñéóôåß." - -#: src/prefs_account.c:1149 -msgid "SMTP server is not entered." -msgstr "Ï åîõðçñÝôçò SMTP äåí Ý÷åé ïñéóôåß." - -#: src/prefs_account.c:1154 -msgid "User ID is not entered." -msgstr "Ôï üíïìá ÷ñÞóôç äåí Ý÷åé ïñéóôåß." - -#: src/prefs_account.c:1159 -msgid "POP3 server is not entered." -msgstr "Ï åîõðçñÝôçò POP3 äåí Ý÷åé ïñéóôåß." - -#: src/prefs_account.c:1164 -msgid "IMAP4 server is not entered." -msgstr "Ï åîõðçñÝôçò IMAP4 äåí Ý÷åé ïñéóôåß." - -#: src/prefs_account.c:1169 -msgid "NNTP server is not entered." -msgstr "Ï åîõðçñÝôçò NNTP äåí Ý÷åé ïñéóôåß." - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "Äçìéïõñãßá ðáñáèýñïõ êïéíþí åðéëïãþí...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "ÊïéíÝò åðéëïãÝò" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "ÅìöÜíéóç" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "ÌÞíõìá" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "ÄéåðáöÞ" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "¶ëëá" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "Åîùôåñéêü ðñüãñáììá" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "×ñÞóç åîùôåñéêïý ðñïãñÜììáôïò ãéá ëÞøç ìçíõìÜôùí" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "ÄéáäñïìÞ ðñïãñÜììáôïò" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "ÖéëôñÜñéóìá êáôÜ ôç ëÞøç" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "Áõôüìáôïò Ýëåã÷ïò ãéá íÝá mail" - -#: src/prefs_common.c:759 -msgid "each" -msgstr "êÜèå" - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "ëåðôÜ" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "¸ëåã÷ïò ãéá íÝï mail óôçí áñ÷Þ" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "ÍÝá" - -#: src/prefs_common.c:790 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"ÌÝãéóôïò áñéèìüò Üñèñùí ðïõ èá ëçöèïýí\n" -"(÷ùñßò üñéï áí èÝóåôå 0)" - -#: src/prefs_common.c:858 -msgid "Use external program for sending" -msgstr "×ñÞóç åîùôåñéêïý ðñïãñÜììáôïò ãéá áðïóôïëÞ" - -#: src/prefs_common.c:882 -msgid "Save sent messages to outbox" -msgstr "ÁðïèÞêåõóç óôáëìÝíùí ìçíõìÜôùí óôï outbox" - -#: src/prefs_common.c:884 -msgid "Queue messages that failed to send" -msgstr "ÔïðïèÝôçóç óôçí ïõñÜ ôùí ìçíõìÜôùí ðïõ áðÝôõ÷å ç áðïóôïëÞ ôïõò" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "Êùäéêïóåëßäá åîåñ÷ïìÝíùí" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "Áõôüìáôç" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "7bit ascii (US-ASCII)" - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "ÄõôéêÞò Åõñþðçò (ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "ÊåíôñéêÞs Åõñþðçò (ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "ÂáëôéêÞò (ISO-8859-13)" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "ÂáëôéêÞò (ISO-8859-4)" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "ÅëëçíéêÞ (ISO-8859-7)" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "ÔïõñêéêÞ (ISO-8859-9)" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "ÊõñéëëéêÞ (ISO-8859-5)" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "ÊõñéëëéêÞ (KOI8-R)" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "ÊõñéëëéêÞ (Windows-1251)" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "ÊõñéëëéêÞ (KOI8-U)" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "ÉáðùíÝæéêç (ISO-2022-JP)" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "ÉáðùíÝæéêç (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "ÉáðùíÝæéêç (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "ÁðëïðïéçìÝíç ÊéíåæéêÞ (GB2312)" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "ÐáñáäïóéáêÞ ÊéíåæéêÞ (Big5)" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "ÐáñáäïóéáêÞ ÊéíåæéêÞ (EUC-TW)" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "ÊéíåæéêÞ (ISO-2022-CN)" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "ÊïñåáôéêÞ (EUC-KR)" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "ÐáñÜèåóç" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "ÐáñÜèåóç ôïõ ìçíýìáôïò üôáí áðáíôÜôå" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "ÓÞìá ðáñÜèåóçò" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "Ìïñöïðïßçóç ðáñÜèåóçò:" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr " ÐåñéãñáöÞ óõìâüëùí" - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "Áõôüìáôç åéóáãùãÞ õðïãñáöÞò" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "Äéá÷ùñéóìüò õðïãñáöÞò" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "Ôýëéîç ìçíõìÜôùí óôïõò" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "÷áñáêôÞñåò" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "Ôýëéîç ðáñÜèåóçò" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "Ôýëéîç ðñéí ôçí áðïóôïëÞ" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "ÃñáììáôïóåéñÜ" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "Êåßìåíï" - -#: src/prefs_common.c:1160 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "" -"ÌåôÝöñáóå ôá ïíüìáôá ôùí ðåäßùí ôçò åðéêåöáëßäáò (üðùò ôï `From:' óå `Áðü')" - -#: src/prefs_common.c:1163 -msgid "Display unread number next to folder name" -msgstr "ÅìöÜíéóç áñéèìïý áäéÜâáóôùí äßðëá óôï üíïìá ôïõ êáôáëüãïõ" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "Áðåéêüíéóç Ðåñßëçøçò" - -#: src/prefs_common.c:1176 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "" -"ÅìöÜíéóç ôïõ ðáñáëÞðôç óôç óôÞëç `ÁðïóôïëÝá' áí ï áðïóôïëÝáò åßóôå åóåßò" - -#: src/prefs_common.c:1178 -msgid "Enable horizontal scroll bar" -msgstr "Åíåñãïðïßçóç ïñéæüíôéáò ãñáììÞò êýëéóçò" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "Ìïñöïðïßçóç çìåñïìçíßáò" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" -"Ïé ÷áñáêôÞñåò ðïõ ôïðïèåôïýíôáé óôï êåßìåíï ìïñöïðïéÞóçò áíôéãñÜöïíôáé " -"÷ùñßò ìåôáôñïðÞ. Ãéá íá ìåôáôñáðåß Ýíáò ÷áñáêôÞñáò ðñÝðåé íá ðñïçãåßôáé ôï " -"óýìâïëï % , êáé ïé ìåôáôñïðÝò ãßíïíôáé ùò åîÞò:\n" -"%a: óõíôïìïãñáößá ôçò ìÝñáò ôçò åâäïìÜäáò\n" -"%A: ðëÞñçò ìÝñá ôçò åâäïìÜäáò\n" -"%b: óõíôïìïãñáößá ôïõ ïíüìáôïò ôïõ ìÞíá\n" -"%B: ðëÞñåò üíïìá ôïõ ìÞíá\n" -"%c: ç ðñïôéìþìåíç çìåñïìçíßá êáé þñá ãéá ôï ïñéóìÝíï locale\n" -"%C: ï áñéèìüò áéþíá (Ýôïò/100)\n" -"%d: ç çìÝñá ôïõ ìÞíá ùò äåêáäéêüò áñéèìüò\n" -"%H: ç þñá ùò äåêáäéêüò áñéèìüò ÷ñçóéìïðïéþíôáò ñïëüé 24 ùñþí\n" -"%I: ç þñá ùò äåêáäéêüò áñéèìüò ÷ñçóéìïðïéþíôáò ñïëüé 12 ùñþí\n" -"%j: ç ìÝñá ôïõ Ýôïõò ùò äåêáäéêüò áñéèìüò\n" -"%m: ï ìÞíáò ùò äåêáäéêüò áñéèìüò\n" -"%M: ôï ëåðôü ùò äåêáäéêüò áñéèìüò\n" -"%p: åßôå ÐÌ Þ ÌÌ\n" -"%S: ôá äåõôåñüëåðôá ùò äåêáäéêüò áñéèìüò\n" -"%w: ç ìÝñá ôçò åâäïìÜäáò ùò äåêáäéêüò áñéèìüò\n" -"%x: ç ðñïôéìþìåíç çìåñïìçíßá ãéá ôï ïñéóìÝíï locale\n" -"%y: ôá ôåëåõôáßá äýï øçößá ôïõ Ýôïõò\n" -"%Y: ôï Ýôïò ùò äåêáäéêüò áñéèìüò\n" -"%Z: ç æþíç þñáò, Þ üíïìá, Þ óõíôïìïãñáößá" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr " Ïñéóìüò åìöáíéæüìåíùí óôïé÷åßùí ðåñßëçøçò... " - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "Åíåñãïðïßçóç ÷ñùìáôéóìïý ôùí ìçíõìÜôùí" - -#: src/prefs_common.c:1297 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "Display 2-byte alphabet and numeric with 1-byte character" - -#: src/prefs_common.c:1299 -msgid "Display header pane above message view" -msgstr "ÅìöÜíéóç ôìÞìáôïò ìå ôçí êåöáëßäá ðÜíù áðü ôçí ðñïâïëÞ ìçíýìáôïò" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "ÅìöÜíéóç âñá÷åßáò êåöáëßäáò óôçí áðåéêüíéóç ìçíýìáôïò" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "ÄéÜóôçìá ãñáììþí" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "pixel(s)" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "Íá ìÝíåé äéÜóôçìá óôçí êåöáëßäá" - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "Êýëéóç" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "ÌéóÞ óåëßäá" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "ÏìáëÞ êýëéóç" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "ÊáôÜ âÞìáôá" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "ÊñõðôïãñÜöçóç ìçíõìÜôùí åî ïñéóìïý" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "ÕðïãñáöÞ ìçíõìÜôùí åî ïñéóìïý" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "Áõôüìáôïò Ýëåã÷ïò õðïãñáöþí" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "ÅìöÜíéóç ôïõ áðïôåëÝóìáôïò ôïõ åëÝã÷ïõ óå îå÷ùñéóôü ðáñÜèõñï" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "Grab input while entering a passphrase" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "ÅìöÜíéóç åéäïðïßçóçò êáôÜ ôçí åêêßíçóç áí ôï GnuPG äåí ëåéôïõñãåß" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "ÐñïêáèïñéóìÝíï êëåéäß õðïãñáöÞò" - -#: src/prefs_common.c:1554 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "" -"Ðñïóùìïßùóç ôçò óõìðåñéöïñÜò ôùí êéíÞóåùí ôïõ ðïíôéêéïý\n" -"ôïõ Emacs-based ðñïãñÜììáôïò mail" - -#: src/prefs_common.c:1561 -msgid "Open first unread message when entering a folder" -msgstr "¶íïéãìá ôïõ ðñþôïõ áäéÜâáóôïõ ìçíýìáôïò êáôÜ ôç ìåôáêßíçóç óå Ýíá êáôÜëïãï" - -#: src/prefs_common.c:1565 -msgid "Go to inbox after receiving new mail" -msgstr "Ìåôáêßíçóç óôïí êáôÜëïãï åéóåñ÷ïìÝíùí ìåôÜ ôç ëÞøç íÝùí ìçíõìÜôùí" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "Áõôüìáôç åêôÝëåóç ãéá ôç ìåôáöïñÜ êáé äéáãñáöÞ ìçíõìÜôùí" - -#: src/prefs_common.c:1580 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" -"(Ôá ìçíýìáôá áðëÜ èá óçìáíèïýí ìÝ÷ñé ôçí åêôÝëåóç\n" -"áí áõôü åßíáé áðåðéëåãìÝíï)" - -#: src/prefs_common.c:1587 -msgid "Add address to destination when double-clicked" -msgstr "ÐñïóèÞêç äéåýèõíóçò óôïí ðñïïñéóìü óå äéðëü êëéê" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "ÊáôÜ ôçí Ýîïäï" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "Åðéâåâáßùóç åîüäïõ" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "¶äåéáóìá ôùí äéáãñáììÝíùí óôçí Ýîïäï" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "Åðéâåâáßùóç ðñéí ôï Üäåéáóìá" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "Ðñïåéäïðïßçóç áí õðÜñ÷ïõí ìçíýìáôá óôçí ïõñÜ" - -#: src/prefs_common.c:1648 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "Åîùôåñéêüò Web browser (ôï %s èá áíôéêáôáóôáèåß ìå ôï URI)" - -#: src/prefs_common.c:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "ÅíôïëÞ" - -#: src/prefs_common.c:1673 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "Åêôýðùóç (ôï %s èá áíôéêáôáóôáèåß ìå ôï üíïìá áñ÷åßïõ)" - -#: src/prefs_common.c:1689 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "" -"Åîùôåñéêü ðñüãñáììá óýíèåóçò (ôï %s èá áíôéêáôáóôáèåß ìå ôï üíïìá áñ÷åßïõ)" - -#: src/prefs_common.c:1752 -msgid "Set message colors" -msgstr "¼ñéóìïò ÷ñùìÜôùí ìçíýìáôïò" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "×ñþìáôá" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "ÐáñáôéèÝìåíï êåßìåíï - Ðñþôï åðßðåäï" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "ÐáñáôéèÝìåíï êåßìåíï - Äåýôåñï åðßðåäï" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "ÐáñáôéèÝìåíï êåßìåíï - Ôñßôï åðßðåäï" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "Óýíäåóìïò URI" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "Áíáêýêëùóç ÷ñùìÜôùí ðáñÜèåóçò" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "ÅðéëïãÞ ÷ñþìáôïò ðñþôïõ åðéðÝäïõ ðáñÜèåóçò" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "ÅðéëïãÞ ÷ñþìáôïò äåýôåñïõ åðéðÝäïõ ðáñÜèåóçò" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "ÅðéëïãÞ ÷ñþìáôïò ôñßôïõ åðéðÝäïõ ðáñÜèåóçò" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "ÅðéëïãÞ ÷ñþìáôïò ãéá URI" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "ÐåñéãñáöÞ ôùí óõìâüëùí" - -#: src/prefs_common.c:2052 -#, 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:2155 -msgid "Set display item" -msgstr "Ïñéóìüò åìöáíéæüìåíùí óôïé÷åßùí" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "ÓÞìáíóç" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "Áñéèìüò" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "Çìåñïìçíßá" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "Áðü" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "ÈÝìá" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "ÅðéëïãÞ ãñáììáôïóåéñÜò" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "ÅéäéêÞ êåöáëßäá" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "Äçìéïõñãþ ôï ðáñÜèõñï ñõèìßóåùí åéäéêÞò êåöáëßäáò...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "Ñõèìßóåéò åéäéêÞò êåöáëßäáò" - -#: src/prefs_customheader.c:212 -msgid "Value" -msgstr "ÔéìÞ" - -#: src/prefs_customheader.c:320 -msgid "Reading custom header configuration...\n" -msgstr "ÄéáâÜæù ôéò ñõèìßóåéò ôçò åéäéêÞò êåöáëßäáò...\n" - -#: src/prefs_customheader.c:365 -msgid "Writing custom header configuration...\n" -msgstr "ÃñÜöù ôéò ñõèìßóåéò ôçò åéäéêÞò êåöáëßäáò...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "Ôï üíïìá ôçò êåöáëßäáò äåí Ý÷åé ïñéóôåß." - -#: src/prefs_customheader.c:541 -msgid "Delete header" -msgstr "ÄéáãñáöÞ êåöáëßäáò" - -#: src/prefs_customheader.c:542 -msgid "Do you really want to delete this header?" -msgstr "ÈÝëåôå ðñÜãìáôé íá äéáãñáöåß áõôÞ ç êåöáëßäá;" - -#: src/prefs_display_header.c:187 -msgid "Creating display header setting window...\n" -msgstr "Äçìéïõñãþ ôï ðáñÜèõñï åìöÜíéóçò ñõèìßóåùí åðéêåöáëßäáò...\n" - -#: src/prefs_display_header.c:210 -msgid "Display header setting" -msgstr "Ïñéóìüò åìöÜíéóçò êåöáëßäáò" - -#: src/prefs_display_header.c:237 -msgid "Header name" -msgstr "¼íïìá êåöáëßäáò" - -#: src/prefs_display_header.c:269 -msgid "Displayed Headers" -msgstr "Åìöáíéóèåßóåò êåöáëßäåò" - -#: src/prefs_display_header.c:327 -msgid "Hidden headers" -msgstr "ÊñõììÝíåò êåöáëßäåò" - -#: src/prefs_display_header.c:357 -msgid "Show all unspecified headers" -msgstr "ÅìöÜíéóç üëùí ôùí ìç ïñéóìÝíùí êåöáëßäùí" - -#: src/prefs_display_header.c:382 -msgid "Reading configuration for displaying headers...\n" -msgstr "ÄéáâÜæù ôéò ñõèìßóåéò ãéá åìöÜíéóç êåöáëßäùí...\n" - -#: src/prefs_display_header.c:420 -msgid "Writing configuration for displaying headers...\n" -msgstr "ÃñÜöù ôéò ñõèìßóåéò ãéá åìöÜíéóç êåöáëßäùí...\n" - -#: src/prefs_display_header.c:552 -msgid "This header is already in the list." -msgstr "ÁõôÞ ç êåöáëßäá åßíáé Þäç óôç ëßóôá." - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "ÏñéóìÝíïé êáíüíåò" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "Äçìéïõñãþ ôï ðáñÜèõñï ñõèìßóåùí ößëôñùí..\n" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "Ñõèìßóåéò ößëôñùí" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "ÔåëåóôÞò" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(êáíÝíá)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "ËÝîç-êëåéäß" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "ÊñéôÞñéï" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "ðåñéÝ÷åé" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "äåí ðåñéÝ÷åé" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "Ðñïïñéóìüò" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "×ñÞóç regex" - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "Ìçí ðáñáëÜâåéò" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "Êáôá÷þñçóç" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr " ÁíôéêáôÜóôáóç" - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "ÄéáâÜæù ôéò ñõèìßóåéò ôùí ößëôñùí...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "ÃñÜöù ôéò ñõèìßóåéò ôùí ößëôñùí...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "(ÍÝï)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "Ï ðñïïñéóìüò äåí Ý÷åé ïñéóôåß." - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "ÄéáãñáöÞ êáíüíá" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -msgstr "ÈÝëåôå ðñÜãìáôé íá äéáãñáöåß áõôüò ï êáíüíáò;" - -#: src/procmime.c:686 -msgid "Code conversion failed.\n" -msgstr "Ç ìåôáôñïðÞ ôïõ êþäéêá áðÝôõ÷å.\n" - -#: src/procmsg.c:138 -msgid "Cache data is corrupted\n" -msgstr "Cache data is corrupted\n" - -#: src/procmsg.c:202 -msgid "\tNo cache file\n" -msgstr "\tNo cache file\n" - -#: src/procmsg.c:209 -msgid "\tReading summary cache..." -msgstr "\tReading summary cache..." - -#: src/procmsg.c:214 -msgid "Cache version is different. Discarding it.\n" -msgstr "Cache version is different. Discarding it.\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:457 -msgid "Mark file not found.\n" -msgstr "Ôï áñ÷åßï óçìÜíóåùí äåí âñÝèçêå.\n" - -#: src/procmsg.c:459 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "Mark version is different (%d != %d). Discarding it.\n" - -#: src/procmsg.c:475 -msgid "Can't open mark file with append mode.\n" -msgstr "Äåí ìðïñþ íá áíïßîù ôï áñ÷åßï óçìÜíóåùí ãéá ðñüóèåóç óôï ôÝëïò.\n" - -#: src/procmsg.c:480 -msgid "Can't open mark file with write mode.\n" -msgstr "Äåí ìðïñþ íá áíïßîù ôï áñ÷åßï óçìÜíóåùí ãéá åããñáöÞ.\n" - -#: src/procmsg.c:663 -msgid "Sending queued message failed.\n" -msgstr "Ç áðïóôïëÞ ìçíõìÜôùí ïõñÜò áðÝôõ÷å.\n" - -#: src/procmsg.c:720 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "Ç åíôïëÞ åêôýðùóçò åßíáé Üêõñç: `%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "ÊáôÜóôáóç" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "Äçìéïõñãþ äéÜëïãï ðñïüäïõ...\n" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "ðñïÝêõøå óöÜëìá êáôÜ ôçí ëÞøç äåäïìÝíùí.\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "Äåí ìðïñþ íá ãñÜøù óå áñ÷åßï.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "Ïõðò. Ç õðïãñáöÞ äåí åîáêñéâþèçêå" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "Äåí âñÝèçêå õðïãñáöÞ" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "ÁðïäåêôÞ õðïãñáöÞ" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "ËÜèïò õðïãñáöÞ" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "Äåí õðÜñ÷åé äçìüóéï êëåéäß ãéá íá åîáêñéâþóù áõôÞ ôçí õðïãñáöÞ" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "ÓöÜëìá êáôÜ ôçí åîáêñßâùóç ôçò õðïãñáöÞò" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "ÄéáöïñåôéêÜ áðïôåëÝóìáôá ãéá ôéò õðïãñáöÝò" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "ÓöÜëìá: ¶ãíùóôç êáôÜóôáóç" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "ÁðïäåêôÞ õðïãñáöÞ áðü \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "ËÜèïò õðïãñáöÞ áðü \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "Äåí ìðïñþ íá âñù user ID ãéá áõôü ôï êëåéäß" - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr "åðßóçò ãíùóôüò ùò \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "ÕðïãñáöÞ äçìéïõñãÞèçêå %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "Áðïôýðùìá êëåéäéïý: %s\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "Ðáñáêáëþ åðéëÝîôå êëåéäß ãéá `%s'" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "ÓõëëÝãù ðëçñïöïñßåò ãéá `%s' ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "ÅðÝëåîå êëåéäéÜ" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "Key ID" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "ÔéìÞ" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "ÅðéëïãÞ" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "ÐñïóèÞêç êëåéäéïý" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "ÅéóáãùãÞ Üëëïõ ÷ñÞóôç Þ key ID\n" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "Ç êåöáëßäá ôïõ åí áíáìïíÞ ìçíýìáôïò äåí åßíáé ðëÝïí Ýãêõñç.\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "Ï ëïãáñéáóìüò äåí âñÝèçêå. ×ñçóéìïðïéþ ôïí ôñÝ÷ïí ëïãáñéáóìï...\n" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "Ï ëïãáñéáóìüò äåí âñÝèçêå.\n" - -#: src/send.c:250 -msgid "Connecting to SMTP server: %s ..." -msgstr "Óýíäåóç óôçí åîõðçñÝôç SMTP: %s ..." - -#: src/send.c:254 -msgid "Connecting" -msgstr "ÓõíäÝïìáé" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "ÓôÝëíù MAIL FROM..." - -#: src/send.c:262 -msgid "Sending" -msgstr "ÓôÝëíù" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "ÓôÝëíù RCPT TO..." - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "ÓôÝëíù DATA..." - -#: src/send.c:292 -msgid "Sending message (%d / %d bytes)" -msgstr "ÓôÝëíù ôï ìÞíõìá (%d / %d bytes)" - -#: src/send.c:309 -msgid "Quitting..." -msgstr "Åãêáôáëåßðù..." - -#: src/send.c:330 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí åîõðçñÝôç SMTP: %s:%d\n" - -#: src/send.c:341 -msgid "Error occurred while sending HELO\n" -msgstr "ÐñïÝêõøå óöÜëìá êáôÜ ôçí áðïóôïëÞ HELO\n" - -#: src/send.c:357 -msgid "Sending message" -msgstr "ÁðïóôïëÞ ìçíýìáôïò" - -#: src/setup.c:43 -msgid "Mailbox setting" -msgstr "Ñõèìßóåéò 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 "" -"Áñ÷éêÜ, ðñÝðåé íá åðéëÝîåôå ôç èÝóç ôïõ mailbox.\n" -"Ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå Ýíá õðÜñ÷ïí mailbox óå ìïñöÞ 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:289 -msgid "/M_ove..." -msgstr "/Ìåôáêßíçóç..." - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/ÁíôéãñáöÞ..." - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/ÅêôÝëåóç" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/ÓÞìáíóç" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/ÓÞìáíóç/ÓÞìáíóç" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/ÓÞìáíóç/Áíáßñåóç óÞìáíóçò" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/ÓÞìáíóç/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "/ÓÞìáíóç/ÓÞìáíóç ùò áäéÜâáóôï" - -#: src/summaryview.c:298 -msgid "/_Mark/Mark as rea_d" -msgstr "/ÓÞìáíóç/ÓÞìáíóç ùò äéáâáóìÝíï" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/ÁðÜíôçóç" - -#: src/summaryview.c:302 -msgid "/Repl_y to sender" -msgstr "/ÁðÜíôçóç óôïí áðïóôïëÝá" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/ÁðÜíôçóç óå üëïõò" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/Ðñïþèçóç" - -#: src/summaryview.c:305 -msgid "/Forward as a_ttachment" -msgstr "/Ðñïþèçóç ùò ðñïóÜñôçóç" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/¶íïéãìá óå íÝï ðáñÜèõñï" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "/ÅìöÜíéóç ðçãáßïõ" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/ÅìöÜíéóç ôçò ðëÞñïõò êåöáëßäáò" - -#: src/summaryview.c:311 -msgid "/Re-_edit" -msgstr "/Åðáí-åðåîåñãáóßá" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/Åêôýðùóç..." - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "/ÅðéëïãÞ üëùí" - -#: src/summaryview.c:322 -msgid "M" -msgstr "M" - -#: src/summaryview.c:322 -msgid "U" -msgstr "U" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "Äçìéïõñãßá áðåéêüíéóçò ðåñßëçøçò...\n" - -#: src/summaryview.c:352 -msgid "No." -msgstr "Áñ." - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "ÌåñéêÝò óçìÜíóåéò Ý÷ïõí áðïìåßíåé. Íá åðåîåñãáóôïýí;" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"Üäåéïò êáôÜëïãïò\n" -"\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "ÓÜñùóç êáôáëüãïõ (%s)..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "ÔÝëïò." - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "Äåí õðÜñ÷ïõí áäéÜâáóôá ìçíýìáôá" - -#: src/summaryview.c:816 -msgid "No unread message found. Go to next folder?" -msgstr "Äåí âñÝèçêáí áäéÜâáóôá ìçíýìáôá. Íá ðÜù óôïí åðüìåíï êáôÜëïãï;" - -#: src/summaryview.c:957 src/summaryview.c:959 -msgid "Attracting messages by subject..." -msgstr "" - -#: src/summaryview.c:1102 -#, c-format -msgid "%d deleted" -msgstr "%d äéáãñÜöçêáí" - -#: src/summaryview.c:1106 -#, c-format -msgid "%s%d moved" -msgstr "%s%d ìåôáêéíÞèçêáí" - -#: src/summaryview.c:1107 src/summaryview.c:1114 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1112 -#, c-format -msgid "%s%d copied" -msgstr "%s%d áíôéãñÜöçêáí" - -#: src/summaryview.c:1129 -msgid " item(s) selected" -msgstr " ìÞíõìá(ôá) åðéëÝ÷èçêå(áí)" - -#: src/summaryview.c:1140 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d íÝá, %d áäéÜâáóôá, %d óõíïëéêÜ (%s)" - -#: src/summaryview.c:1146 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d íÝá, %d áäéÜâáóôá, %d óõíïëéêÜ" - -#: src/summaryview.c:1187 src/summaryview.c:1188 -msgid "Sorting summary..." -msgstr "Ðåñßëçøç ôáîéíüìçóçò..." - -#: src/summaryview.c:1226 -msgid "\tSetting summary from message data..." -msgstr "\tÏñéóìüò ðåñßëçøçò áðü ôá äåäïìÝíá ôïõ ìçíýìáôïò..." - -#: src/summaryview.c:1228 -msgid "Setting summary from message data..." -msgstr "Ïñéóìüò ðåñßëçøçò áðü ôá äåäïìÝíá ôïõ ìçíýìáôïò..." - -#: src/summaryview.c:1337 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "" - -#: src/summaryview.c:1389 -msgid "(No Date)" -msgstr "(×ùñßò çìåñïìçíßá)" - -#: src/summaryview.c:1654 -#, c-format -msgid "Message %d is marked\n" -msgstr "Ôï ìÞíõìá %d óçìåéþèçêå\n" - -#: src/summaryview.c:1683 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "Ôï ìÞíõìá %d óçìåéþèçêå ùò äéáâáóìÝíï\n" - -#: src/summaryview.c:1718 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Ôï ìÞíõìá %d óçìåéþèçêå ùò áäéÜâáóôï\n" - -#: src/summaryview.c:1760 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Ôï ìÞíõìá %s/%d Ý÷åé ïñéóôåß ãéá äéáãñáöÞ\n" - -#: src/summaryview.c:1774 -msgid "Current folder is Trash." -msgstr "Ï ôñÝ÷ïí êáôÜëïãïò åßíáé ôá ÄéáãñáììÝíá" - -#: src/summaryview.c:1796 src/summaryview.c:1798 -msgid "Deleting duplicated messages..." -msgstr "ÄéáãñÜöù ôá äéðëÜ ìçíýìáôá..." - -#: src/summaryview.c:1848 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Ôï ìÞíõìá %s/%d äåí Ý÷åé óçìåéùèåß\n" - -#: src/summaryview.c:1885 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "Ôï ìÞíõìá %s/%d Ý÷åé ïñéóôåß ãéá ìåôáêßíçóç óôï %s\n" - -#: src/summaryview.c:1897 -msgid "Destination is same as current folder." -msgstr "Ï ðñïïñéóìüò åßíáé ßäéïò ìå ôïí ôñÝ÷ïíôá êáôÜëïãï." - -#: src/summaryview.c:1946 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "Ôï ìÞíõìá %d Ý÷åé ïñéóôåß íá áíôéãñáöåß óôï %s\n" - -#: src/summaryview.c:1959 -msgid "Destination to copy is same as current folder." -msgstr "Ï ðñïïñéóìüò áíôéãñáöÞò åßíáé ßäéïò ìå ôïí ôñÝ÷ïíôá êáôÜëïãï." - -#: src/summaryview.c:1991 -msgid "Selecting all messages..." -msgstr "ÅðéëÝãù üëá ôá ìçíýìáôá..." - -#: src/summaryview.c:2045 -msgid "Print" -msgstr "Åêôýðùóç" - -#: src/summaryview.c:2046 -#, c-format -msgid "" -"Enter the print command line:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"ÅéóÜãåôå ôçí ãñáììÞ åíôïëÞò åêôýðùóçò:\n" -"(Ôï `%s' èá áíôéêáôáóôáèåß ìå ôï üíïìá áñ÷åßïõ)" - -#: src/summaryview.c:2052 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"Ç ãñáììÞ åíôïëÞò åêôýðùóçò åßíáé Üêõñç:\n" -"`%s'" - -#: src/summaryview.c:2270 src/summaryview.c:2275 -msgid "Building threads..." -msgstr "Äçìéïõñãþ ôá íÞìáôá..." - -#: src/summaryview.c:2297 src/summaryview.c:2298 -msgid "Unthreading..." -msgstr "" - -#: src/summaryview.c:2320 -msgid "Unthreading for execution..." -msgstr "" - -#: src/summaryview.c:2407 -msgid "filtering..." -msgstr "öéëôñÜñù..." - -#: src/summaryview.c:2408 -msgid "Filtering..." -msgstr "ÖéëôñÜñù..." - -#: src/summaryview.c:2514 -#, c-format -msgid "Go to %s\n" -msgstr "Ìåôáêßíçóç óôï %s\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "Äçìéïõñãþ áðåéêüíéóç êåéìÝíïõ...\n" - -#: src/textview.c:366 -msgid "To save this part, pop up the context menu with " -msgstr "Ãéá íá áðïèçêåýóåôå áõôü ôï ôìÞìá, åðéëÝîôå ôï ìåíïý ìå " - -#: src/textview.c:367 -msgid "right click and select `Save as...', " -msgstr "äåîß êïõìðß êáé åðéëÝîôå `ÁðïèÞêåõóç ùò...', " - -#: src/textview.c:368 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"Þ ðáôÞóôå ôï ðëÞêôñï `y'.\n" -"\n" - -#: src/textview.c:370 -msgid "To display this part as a text message, select " -msgstr "Ãéá íá åìöáíßóåôå áõôü ôï ôìÞìá ùò ìÞíõìá êåéìÝíïõ, åðéëÝîôå" - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"`ÅìöÜíéóç óáí êåßìåíï', Þ ðáôÞóôå ôï ðëÞêôñï `t'.\n" -"\n" - -#: src/textview.c:373 -msgid "To open this part with external program, select " -msgstr "Ãéá íá áíïßîåôå áõôü ôï ôìÞìá ìå åîùôåñéêü ðñüãñáììá, åðéëÝîôå " - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "`¶íïéãìá', Þ `¶íïéãìá ìå...', " - -#: src/textview.c:375 -msgid "or double-click, or click the center button, " -msgstr "Þ êÜíôå äéðëü êëéê, Þ ðáôÞóôå ôï ìåóáßï êïõìðß, " - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "Þ ðéÝóôå ôï ðëÞêôñï `l'." - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "ÁõôÞ ç õðïãñáöÞ äåí Ý÷åé Ýëåã÷èåß áêüìá.\n" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "Ãéá íá ôçí åëÝãîåôå, åðéëÝîôå ôï ìåíïý ìå\n" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "äåîß êïõìðß êáé åðéëÝîôå `¸ëåã÷ïò õðïãñáöÞò'.\n" - -#: src/utils.c:1547 -#, c-format -msgid "writing to %s failed.\n" -msgstr "áðÝôõ÷å ôï ãñÜøéìï óôï %s.\n" - -#: src/utils.c:1588 -msgid "move_file(): file %s already exists." -msgstr "move_file(): ôï áñ÷åßï `%s' õðÜñ÷åé Þäç." - -#: src/utils.c:1729 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "Ç åíôïëÞ áðåéêüíéóçò URI åßíáé Üêõñç: `%s'" - -#~ msgid "deleting message %d...\n" -#~ msgstr "äéáãñÜöù ôï ìÞíõìá %d...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/Áðåéêüíéóç/ÌðÜñá åñãáëåßùí/Íá ìçí åìöáíßæåôáé" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/MÞíõìá/ÓÞìáíóç/ÓÞìáíóç ùò äéáâáóìÝíï" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/ÓÞìáíóç/ÓÞìáíóç ùò äéáâáóìÝíï" - -#~ msgid "Show other headers" -#~ msgstr "ÅìöÜíéóç Üëëùí êåöáëßäùí" - -#~ msgid "File copy from %s to %s failed.\n" -#~ msgstr "Ç áíôéãñáöÞ áñ÷åßïõ áðü ôï %s óôï %s áðÝôõ÷å.\n" - -#~ 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" - -#~ msgid "SunMonTueWedThuFriSat" -#~ msgstr "Êõ Äå Ôñ Ôå Ðå Ðá Óá " - -#~ 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.po b/po/es.po deleted file mode 100644 index 838de72c1..000000000 --- a/po/es.po +++ /dev/null @@ -1,5436 +0,0 @@ -# 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-08-12 21:13+0100\n" -"PO-Revision-Date: 2001-08-13 18:23+0100\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:90 -msgid "About" -msgstr "Acerca de" - -#: src/about.c:205 -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:211 -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:216 -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:220 -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:226 -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:232 -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." - -#. Button panel -#: src/about.c:239 src/addressbook.c:1815 src/alertpanel.c:238 -#: src/compose.c:2008 src/compose.c:3751 src/editjpilot.c:340 -#: src/editldap.c:241 src/editldap_basedn.c:212 src/editvcard.c:236 -#: src/export.c:185 src/foldersel.c:179 src/grouplistdialog.c:204 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:360 src/main.c:368 -#: src/mainwindow.c:1994 src/messageview.c:348 src/mimeview.c:724 -#: src/passphrase.c:119 src/prefs.c:475 src/prefs_common.c:2356 -#: src/prefs_common.c:2512 src/prefs_common.c:2791 src/prefs_common.c:2910 -#: src/prefs_customheader.c:162 src/prefs_display_header.c:206 -#: src/prefs_filter.c:203 src/prefs_filtering.c:323 src/prefs_matcher.c:301 -#: src/prefs_matcher.c:1462 src/prefs_scoring.c:199 src/sigstatus.c:134 -#: src/summaryview.c:2839 src/summaryview.c:3404 -msgid "OK" -msgstr "Aceptar" - -#: src/account.c:109 -msgid "Reading all config for each account...\n" -msgstr "Leyendo configuración de cada cuenta...\n" - -#: src/account.c:124 -#, c-format -msgid "Found label: %s\n" -msgstr "Encontrada etiqueta: %s\n" - -#: src/account.c:238 -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:244 -msgid "Opening account edit window...\n" -msgstr "Abriendo ventana de edición de cuenta...\n" - -#: src/account.c:414 -msgid "Creating account edit window...\n" -msgstr "Creando ventana de edición de cuenta...\n" - -#: src/account.c:419 -msgid "Edit accounts" -msgstr "Editar cuentas" - -#: src/account.c:447 src/addressbook.c:443 src/addressbook.c:1811 -#: src/compose.c:2801 src/editjpilot.c:291 src/editldap.c:296 -#: src/editvcard.c:207 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "Nombre" - -#: src/account.c:448 src/prefs_account.c:751 -msgid "Protocol" -msgstr "Protocolo" - -#: src/account.c:449 -msgid "Server" -msgstr "Servidor" - -#: src/account.c:450 src/mainwindow.c:1490 -msgid "Get all" -msgstr "Traer todo" - -#: src/account.c:473 src/addressbook.c:578 src/prefs_customheader.c:242 -#: src/prefs_display_header.c:290 src/prefs_display_header.c:345 -msgid "Add" -msgstr "Añadir" - -#: src/account.c:479 -msgid "Edit" -msgstr "Editar" - -#: src/account.c:485 src/prefs_customheader.c:249 -msgid " Delete " -msgstr " Borrar " - -#: src/account.c:491 src/prefs_customheader.c:296 -#: src/prefs_display_header.c:309 src/prefs_filter.c:453 -#: src/prefs_filtering.c:569 src/prefs_matcher.c:572 src/prefs_scoring.c:330 -msgid "Down" -msgstr "Abajo" - -#: src/account.c:497 src/prefs_customheader.c:290 -#: src/prefs_display_header.c:303 src/prefs_filter.c:447 -#: src/prefs_filtering.c:563 src/prefs_matcher.c:566 src/prefs_scoring.c:324 -msgid "Up" -msgstr "Arriba" - -#: src/account.c:511 -msgid " Set as default account " -msgstr " Cuenta por defecto " - -#: src/account.c:517 -msgid " Enable/Disable 'Receive at Get all' " -msgstr " Activar/desactivar 'Recibir al traer todo' " - -#: src/account.c:523 src/prefs_common.c:3246 src/summary_search.c:192 -msgid "Close" -msgstr "Cerrar" - -#: src/account.c:577 -msgid "Delete account" -msgstr "Borrar cuenta" - -#: src/account.c:578 -msgid "Do you really want to delete this account?" -msgstr "¿Realmente quiere borrar esta cuenta?" - -#: src/account.c:579 src/account.c:724 src/addressbook.c:785 -#: src/addressbook.c:1746 src/compose.c:3925 src/folderview.c:1720 -#: src/folderview.c:1763 src/folderview.c:1862 src/folderview.c:1907 -#: src/folderview.c:2005 src/folderview.c:2038 src/mainwindow.c:1019 -#: src/messageview.c:417 src/prefs_customheader.c:548 src/prefs_filter.c:736 -#: src/prefs_filtering.c:836 src/prefs_scoring.c:646 src/summary_search.c:297 -#: src/summaryview.c:880 src/summaryview.c:1216 src/summaryview.c:1242 -#: src/summaryview.c:1272 -msgid "Yes" -msgstr "Si" - -#: src/account.c:579 src/compose.c:3925 src/folderview.c:1720 -#: src/folderview.c:1763 src/folderview.c:1862 src/folderview.c:1907 -#: src/folderview.c:2005 src/folderview.c:2038 -msgid "+No" -msgstr "+No" - -#: src/account.c:720 src/account.c:721 src/account.c:725 src/addressbook.c:785 -#: src/addressbook.c:1746 src/mainwindow.c:1019 src/messageview.c:417 -#: src/prefs_customheader.c:548 src/prefs_filter.c:736 -#: src/prefs_filtering.c:836 src/prefs_scoring.c:646 src/summary_search.c:297 -#: src/summaryview.c:880 src/summaryview.c:1216 src/summaryview.c:1242 -#: src/summaryview.c:1272 -msgid "No" -msgstr "No" - -#: src/addressbook.c:336 src/compose.c:405 src/mainwindow.c:372 -msgid "/_File" -msgstr "/_Fichero" - -#: src/addressbook.c:337 -msgid "/_File/New _Address" -msgstr "/_Fichero/Nueva _dirección" - -#: src/addressbook.c:338 -msgid "/_File/New _Group" -msgstr "/_Fichero/Nuevo _grupo" - -#: src/addressbook.c:339 -msgid "/_File/New _Folder" -msgstr "/_Fichero/Nueva _carpeta" - -#: src/addressbook.c:340 -msgid "/_File/New _V-Card" -msgstr "/_Fichero/Nueva _V-Card" - -#: src/addressbook.c:342 -msgid "/_File/New _J-Pilot" -msgstr "/_Fichero/Nuevo _J-Pilot" - -#: src/addressbook.c:345 -msgid "/_File/New _Server" -msgstr "/_Fichero/Nuevo _servidor" - -#: src/addressbook.c:347 src/addressbook.c:350 src/compose.c:409 -#: src/mainwindow.c:384 src/mainwindow.c:387 -msgid "/_File/---" -msgstr "/_Fichero/---" - -#: src/addressbook.c:348 -msgid "/_File/_Edit" -msgstr "/_Fichero/_Editar" - -#: src/addressbook.c:349 -msgid "/_File/_Delete" -msgstr "/_Fichero/_Borrar" - -#: src/addressbook.c:351 src/compose.c:410 src/mainwindow.c:388 -msgid "/_File/_Close" -msgstr "/_Fichero/_Cerrar" - -#: src/addressbook.c:352 src/compose.c:451 src/mainwindow.c:571 -msgid "/_Help" -msgstr "/_Ayuda" - -#: src/addressbook.c:353 src/compose.c:452 src/mainwindow.c:576 -msgid "/_Help/_About" -msgstr "/_Ayuda/_Acerca de" - -#: src/addressbook.c:358 src/addressbook.c:375 -msgid "/New _Address" -msgstr "/Nueva _dirección" - -#: src/addressbook.c:359 src/addressbook.c:376 -msgid "/New _Group" -msgstr "/Nuevo _grupo" - -#: src/addressbook.c:360 src/addressbook.c:377 -msgid "/New _Folder" -msgstr "/Nueva _carpeta" - -#: src/addressbook.c:361 -msgid "/New _V-Card" -msgstr "/Nueva _V-Card" - -#: src/addressbook.c:363 -msgid "/New _J-Pilot" -msgstr "/Nuevo _J-Pilot" - -#: src/addressbook.c:366 -msgid "/New _Server" -msgstr "/Nuevo _servidor" - -#: src/addressbook.c:368 src/addressbook.c:378 src/compose.c:399 -#: src/folderview.c:220 src/folderview.c:222 src/folderview.c:232 -#: src/folderview.c:235 src/folderview.c:245 src/folderview.c:248 -#: src/folderview.c:258 src/folderview.c:260 src/summaryview.c:341 -#: src/summaryview.c:349 src/summaryview.c:354 src/summaryview.c:357 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:369 src/addressbook.c:379 src/compose.c:412 -#: src/mainwindow.c:391 -msgid "/_Edit" -msgstr "/_Editar" - -#: src/addressbook.c:370 src/addressbook.c:380 src/summaryview.c:327 -msgid "/_Delete" -msgstr "/_Borrar" - -#: src/addressbook.c:443 -msgid "E-Mail address" -msgstr "Dirección e-mail" - -#: src/addressbook.c:443 src/addressbook.c:1813 -msgid "Remarks" -msgstr "Notas" - -#: src/addressbook.c:454 src/compose.c:3397 -msgid "Address book" -msgstr "Libro de direcciones" - -#: src/addressbook.c:543 -msgid "Name:" -msgstr "Nombre:" - -#: src/addressbook.c:575 src/addressbook.c:1746 src/mainwindow.c:1638 -#: src/prefs_display_header.c:296 src/prefs_display_header.c:352 -#: src/prefs_filter.c:413 src/prefs_filtering.c:218 src/prefs_filtering.c:529 -#: src/prefs_matcher.c:503 src/prefs_scoring.c:290 -msgid "Delete" -msgstr "Borrar" - -#: src/addressbook.c:581 -msgid "Lookup" -msgstr "Buscar" - -#: src/addressbook.c:593 src/headerview.c:55 src/summary_search.c:152 -msgid "To:" -msgstr "Para:" - -#: src/addressbook.c:597 -msgid "Cc:" -msgstr "Cc:" - -#: src/addressbook.c:601 -msgid "Bcc:" -msgstr "Bcc:" - -#: src/addressbook.c:628 -msgid "Common address" -msgstr "Dirección común" - -#: src/addressbook.c:635 -msgid "Personal address" -msgstr "Dirección personal" - -#: src/addressbook.c:643 -msgid "V-Card" -msgstr "V-Card" - -#: src/addressbook.c:652 -msgid "J-Pllot" -msgstr "J-Pilot" - -#: src/addressbook.c:669 -msgid "Directory" -msgstr "Directorio" - -#: src/addressbook.c:783 -msgid "Delete address(es)" -msgstr "Borrar dirección(es)" - -#: src/addressbook.c:784 -msgid "Really delete the address(es)?" -msgstr "¿Borrar realmente la(s) dirección(es)?" - -#: src/addressbook.c:1469 src/folderview.c:1493 src/folderview.c:1550 -#: src/folderview.c:1794 -msgid "New folder" -msgstr "Nueva carpeta" - -#: src/addressbook.c:1470 src/folderview.c:1494 src/folderview.c:1551 -msgid "Input the name of new folder:" -msgstr "Nombre de la nueva carpeta:" - -#: src/addressbook.c:1471 src/folderview.c:1495 src/folderview.c:1552 -#: src/folderview.c:1798 -msgid "NewFolder" -msgstr "NuevaCarpeta" - -#: src/addressbook.c:1482 src/addressbook.c:1527 src/addressbook.c:1604 -#: src/addressbook.c:1695 -msgid "The name already exists." -msgstr "Ese nombre ya existe." - -#: src/addressbook.c:1514 -msgid "New group" -msgstr "Nuevo grupo" - -#: src/addressbook.c:1515 -msgid "Input the name of new group:" -msgstr "Nombre del nuevo grupo:" - -#: src/addressbook.c:1516 -msgid "NewGroup" -msgstr "NuevoGrupo" - -#: src/addressbook.c:1591 -msgid "Edit group" -msgstr "Editar grupo" - -#: src/addressbook.c:1592 -msgid "Input the new name of group:" -msgstr "Nombre del nuevo grupo:" - -#: src/addressbook.c:1681 -msgid "Edit folder" -msgstr "Editar carpeta" - -#: src/addressbook.c:1682 -msgid "Input the new name of folder:" -msgstr "Nombre de la nueva carpeta:" - -#: src/addressbook.c:1745 -#, c-format -msgid "Really delete `%s' ?" -msgstr "¿Borrar realmente `%s' ?" - -#: src/addressbook.c:1793 -msgid "Edit address" -msgstr "Editar dirección" - -#: src/addressbook.c:1812 src/compose.c:3396 src/select-keys.c:302 -msgid "Address" -msgstr "Dirección" - -#: src/addressbook.c:1816 src/compose.c:2008 src/compose.c:3752 -#: src/compose.c:4415 src/editjpilot.c:341 src/editldap.c:242 -#: src/editldap_basedn.c:213 src/editvcard.c:237 src/export.c:186 -#: src/foldersel.c:180 src/grouplistdialog.c:205 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:360 src/main.c:368 src/mainwindow.c:1994 -#: src/messageview.c:348 src/mimeview.c:724 src/passphrase.c:123 -#: src/prefs.c:476 src/prefs_common.c:2357 src/prefs_common.c:2911 -#: src/prefs_customheader.c:163 src/prefs_display_header.c:207 -#: src/prefs_filter.c:204 src/prefs_filtering.c:324 src/prefs_matcher.c:302 -#: src/prefs_scoring.c:200 src/progressdialog.c:77 src/select-keys.c:326 -#: src/summaryview.c:880 src/summaryview.c:2839 src/summaryview.c:3404 -msgid "Cancel" -msgstr "Cancelar" - -#: src/addressbook.c:2161 -msgid "Reading addressbook file..." -msgstr "Leyendo libro de direcciones..." - -#: src/addressbook.c:2165 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s no existe.\n" - -#: src/addressbook.c:2201 src/addressbook.c:2593 src/imap.c:1260 -#: src/imap.c:1279 src/mainwindow.c:726 src/mainwindow.c:1417 src/mh.c:930 -#: src/mh.c:937 src/news.c:748 src/procmsg.c:261 src/procmsg.c:325 -#: src/summaryview.c:1504 src/summaryview.c:1724 src/summaryview.c:1923 -#: src/summaryview.c:2023 src/summaryview.c:2565 src/summaryview.c:3115 -#: src/summaryview.c:3138 src/summaryview.c:3159 src/summaryview.c:3280 -msgid "done.\n" -msgstr "hecho.\n" - -#: src/addressbook.c:2571 -msgid "Exporting addressbook to file..." -msgstr "Exportando libro de direcciones..." - -#: src/addressbook.c:2589 -msgid "failed to write addressbook data.\n" -msgstr "fallo al escribir el libro de direcciones.\n" - -#: src/addressbook.c:3464 -msgid "Personal addresses" -msgstr "Direcciones personales" - -#: src/addressbook.c:3469 -msgid "Common addresses" -msgstr "Direcciones comunes" - -#: src/addr_compl.c:219 -#, c-format -msgid "%s%d entering read_address_book\n" -msgstr "%s%d entrando read_address_book\n" - -#: src/addr_compl.c:224 -#, c-format -msgid "%s(%d) no addressbook\n" -msgstr "%s(%d) no hay agenda\n" - -#: src/addr_compl.c:242 -#, c-format -msgid "%s(%d) leaving read_address_book - OK\n" -msgstr "%s(%d) abandonando read_address_book - OK\n" - -#: src/alertpanel.c:119 src/compose.c:3925 src/main.c:358 -msgid "Notice" -msgstr "Notificación" - -#: src/alertpanel.c:132 src/main.c:230 -msgid "Warning" -msgstr "Aviso" - -#: src/alertpanel.c:145 src/inc.c:453 -msgid "Error" -msgstr "Error" - -#: src/alertpanel.c:187 -msgid "Creating alert panel dialog...\n" -msgstr "Creando el diálogo de alerta...\n" - -#: src/alertpanel.c:275 -msgid "Show this message next time" -msgstr "Mostrar este mensaje de nuevo" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "no se pudo reservar memoria\n" - -#: src/compose.c:397 -msgid "/_Add..." -msgstr "/_Añadir" - -#: src/compose.c:398 -msgid "/_Remove" -msgstr "/_Quitar" - -#: src/compose.c:400 src/folderview.c:223 src/folderview.c:236 -#: src/folderview.c:249 src/folderview.c:261 -msgid "/_Property..." -msgstr "/_Propiedad..." - -#: src/compose.c:406 -msgid "/_File/_Attach file" -msgstr "/_Fichero/_Adjuntar fichero" - -#: src/compose.c:407 -msgid "/_File/_Insert file" -msgstr "/_Fichero/_Insertar fichero" - -#: src/compose.c:408 -msgid "/_File/Insert si_gnature" -msgstr "/_Fichero/Insertar _firma" - -#: src/compose.c:413 -msgid "/_Edit/_Undo" -msgstr "/_Editar/_Deshacer" - -#: src/compose.c:414 -msgid "/_Edit/_Redo" -msgstr "/_Editar/_Rehacer" - -#: src/compose.c:415 src/compose.c:420 src/mainwindow.c:394 -msgid "/_Edit/---" -msgstr "/_Editar/---" - -#: src/compose.c:416 -msgid "/_Edit/Cu_t" -msgstr "/_Editar/_Cortar" - -#: src/compose.c:417 src/mainwindow.c:392 -msgid "/_Edit/_Copy" -msgstr "/_Editar/C_opiar" - -#: src/compose.c:418 -msgid "/_Edit/_Paste" -msgstr "/_Editar/_Pegar" - -#: src/compose.c:419 src/mainwindow.c:393 -msgid "/_Edit/Select _all" -msgstr "/_Editar/_Seleccionar todo" - -#: src/compose.c:421 -msgid "/_Edit/Wrap long _lines" -msgstr "/_Editar/_Cortar líneas largas" - -#: src/compose.c:422 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/_Editar/Editar con editor e_xterno" - -#: src/compose.c:425 src/mainwindow.c:484 -msgid "/_Message" -msgstr "/_Mensaje" - -#: src/compose.c:426 -msgid "/_Message/_Send" -msgstr "/_Mensaje/_Enviar" - -#: src/compose.c:428 -msgid "/_Message/Send _later" -msgstr "/_Mensaje/Enviar _después" - -#: src/compose.c:430 -msgid "/_Message/Save to _draft folder" -msgstr "/_Mensaje/_Guardar como borrador" - -#: src/compose.c:432 src/compose.c:437 src/compose.c:439 src/compose.c:442 -#: src/compose.c:446 src/mainwindow.c:488 src/mainwindow.c:491 -#: src/mainwindow.c:501 src/mainwindow.c:512 -msgid "/_Message/---" -msgstr "/_Mensaje/---" - -#: src/compose.c:433 -msgid "/_Message/_To" -msgstr "/_Mensaje/_Para" - -#: src/compose.c:434 -msgid "/_Message/_Cc" -msgstr "/_Mensaje/_Cc" - -#: src/compose.c:435 -msgid "/_Message/_Bcc" -msgstr "/_Mensaje/_Bcc" - -#: src/compose.c:436 -msgid "/_Message/_Reply to" -msgstr "/_Mensaje/_Responder" - -#: src/compose.c:438 -msgid "/_Message/_Followup to" -msgstr "/_Mensaje/_Reenviar a" - -#: src/compose.c:440 -msgid "/_Message/_Attach" -msgstr "/_Mensaje/_Adjuntar" - -#: src/compose.c:443 -msgid "/_Message/Si_gn" -msgstr "/_Mensaje/_Firmar" - -#: src/compose.c:444 -msgid "/_Message/_Encrypt" -msgstr "/_Mensaje/_Encriptar" - -#: src/compose.c:447 -msgid "/_Message/_Request Return Receipt" -msgstr "/_Mensaje/_Solicitar acuse de recibo" - -#: src/compose.c:448 src/mainwindow.c:548 -msgid "/_Tool" -msgstr "/_Herramientas" - -#: src/compose.c:449 -msgid "/_Tool/Show _ruler" -msgstr "/_Herramientas/_Mostrar regleta" - -#: src/compose.c:450 src/mainwindow.c:549 -msgid "/_Tool/_Address book" -msgstr "/_Herramientas/_Libro de direcciones" - -#: src/compose.c:626 src/compose.c:938 src/compose.c:1058 src/procmsg.c:693 -msgid "Can't get text part\n" -msgstr "No se puede obtener el texto\n" - -#: src/compose.c:708 src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "No se puede obtener la parte del mensaje multipartes." - -#: src/compose.c:927 src/compose.c:1011 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: el fichero no existe\n" - -#: src/compose.c:1701 src/compose.c:1751 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "El fichero %s no existe\n" - -#: src/compose.c:1705 src/compose.c:1755 -#, 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:1709 src/compose.c:1759 -#, c-format -msgid "File %s is empty\n" -msgstr "El fichero %s esta vacío\n" - -#: src/compose.c:1729 src/compose.c:1780 -#, c-format -msgid "Message: %s" -msgstr "Mensaje: %s" - -#: src/compose.c:1878 -msgid " [Edited]" -msgstr "[Editar]" - -#: src/compose.c:1880 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - Componer mensaje%s" - -#: src/compose.c:1883 -#, c-format -msgid "Compose message%s" -msgstr "Componer mensaje%s" - -#: src/compose.c:1907 -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:1932 src/compose.c:4292 -msgid "Recipient is not specified." -msgstr "No se especificó el destinatario." - -#: src/compose.c:1950 -msgid "can't get recipient list." -msgstr "no se puede obtener la lista de destinatarios." - -#: src/compose.c:1991 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "Ocurrió un error enviando el mensaje a %s ." - -#: src/compose.c:2005 src/messageview.c:345 -msgid "Queueing" -msgstr "Poniendo en la cola" - -#: src/compose.c:2006 -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:2012 src/compose.c:4304 -msgid "Can't queue the message." -msgstr "El mensaje no se puede poner en la cola." - -#: src/compose.c:2015 -msgid "Error occurred while sending the message." -msgstr "Ocurrió un error enviando los mensajes." - -#: src/compose.c:2022 src/compose.c:4311 -msgid "Can't save the message to outbox." -msgstr "No se puede guardar el mensaje en Salida." - -#: src/compose.c:2048 src/compose.c:2169 src/compose.c:2260 -#: src/mbox_folder.c:1267 src/mbox_folder.c:1369 src/mbox_folder.c:1940 -#: src/mbox_folder.c:1971 src/mbox_folder.c:2034 src/mbox_folder.c:2067 -#: src/messageview.c:199 src/messageview.c:303 src/utils.c:1641 -msgid "can't change file mode\n" -msgstr "no se puede cambiar los permisos de archivo\n" - -#: src/compose.c:2074 -msgid "Can't convert the codeset of the message." -msgstr "No se puede convertir el conjunto de códigos del mensaje." - -#: src/compose.c:2083 -msgid "can't write headers\n" -msgstr "no se pueden escribir las cabeceras\n" - -#: src/compose.c:2201 -msgid "saving sent message...\n" -msgstr "guardando mensaje enviado...\n" - -#: src/compose.c:2211 -msgid "can't save message\n" -msgstr "no se puede salvar el mensaje\n" - -#: src/compose.c:2216 src/compose.c:2327 src/messageview.c:261 -msgid "can't open mark file\n" -msgstr "no se puede abrir el fichero de marcas\n" - -#: src/compose.c:2240 src/messageview.c:180 -msgid "queueing message...\n" -msgstr "poniendo en la cola...\n" - -#: src/compose.c:2318 src/messageview.c:252 -msgid "can't queue the message\n" -msgstr "El mensaje no se puede poner en la cola\n" - -#: src/compose.c:2357 -#, c-format -msgid "Can't open file %s\n" -msgstr "No puedo abrir %s\n" - -#: src/compose.c:2727 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "Message-ID generado: %s\n" - -#: src/compose.c:2801 src/compose.c:3698 -msgid "MIME type" -msgstr "Tipo MIME" - -#: src/compose.c:2801 src/mimeview.c:139 src/prefs_common.c:2905 -#: src/select-keys.c:299 src/summaryview.c:583 -msgid "Size" -msgstr "Tamaño" - -#: src/compose.c:2818 -msgid "Creating compose window...\n" -msgstr "Creando ventana de composicion...\n" - -#: src/compose.c:2864 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "Desde:" - -#. Send Options -#: src/compose.c:3323 src/mainwindow.c:1501 src/prefs_account.c:589 -#: src/prefs_account.c:1266 src/prefs_common.c:760 -msgid "Send" -msgstr "Enviar" - -#: src/compose.c:3324 -msgid "Send message" -msgstr "Enviar mensaje" - -#: src/compose.c:3331 -msgid "Send later" -msgstr "Enviar después" - -#: src/compose.c:3332 -msgid "Put into queue folder and send later" -msgstr "Poner en la cola y enviar después" - -#: src/compose.c:3339 src/folderview.c:818 -msgid "Draft" -msgstr "Borrador" - -#: src/compose.c:3340 -msgid "Save to draft folder" -msgstr "Guardar como borrador" - -#: src/compose.c:3349 -msgid "Insert" -msgstr "Insertar" - -#: src/compose.c:3350 -msgid "Insert file" -msgstr "Insertar fichero" - -#: src/compose.c:3357 -msgid "Attach" -msgstr "Adjuntar" - -#: src/compose.c:3358 -msgid "Attach file" -msgstr "Adjuntar fichero" - -#: src/compose.c:3367 src/prefs_common.c:1295 -msgid "Signature" -msgstr "Firma" - -#: src/compose.c:3368 -msgid "Insert signature" -msgstr "Insertar firma" - -#: src/compose.c:3376 -msgid "Editor" -msgstr "Editor" - -#: src/compose.c:3377 -msgid "Edit with external editor" -msgstr "Editar con un editor externo" - -#: src/compose.c:3385 -msgid "Linewrap" -msgstr "Recortar" - -#: src/compose.c:3386 -msgid "Wrap long lines" -msgstr "Recortar las líneas largas" - -#: src/compose.c:3593 -msgid "Invalid MIME type." -msgstr "Tipo MIME inválido." - -#: src/compose.c:3611 -msgid "File doesn't exist or is empty." -msgstr "El fichero no existe o está vacío." - -#: src/compose.c:3680 -msgid "Property" -msgstr "Propiedad" - -#: src/compose.c:3725 -msgid "Encoding" -msgstr "Codificación" - -#: src/compose.c:3748 -msgid "Path" -msgstr "Ruta" - -#: src/compose.c:3749 -msgid "File name" -msgstr "Nombre de fichero" - -#: src/compose.c:3896 -#, 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:3922 -#, 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:3935 -#, c-format -msgid "Terminated process group id: %d" -msgstr "Terminado proceso id.: %d" - -#: src/compose.c:3936 -#, c-format -msgid "Temporary file: %s" -msgstr "Fichero temporal: %s" - -#: src/compose.c:3960 -msgid "Compose: input from monitoring process\n" -msgstr "Componer: entrada desde proceso monitor\n" - -#. failed -#: src/compose.c:3993 -msgid "Couldn't exec external editor\n" -msgstr "No se pudo ejecutar el editor externo\n" - -#: src/compose.c:3997 -msgid "Couldn't write to file\n" -msgstr "No se pudo escribir en el fichero\n" - -#: src/compose.c:3999 -msgid "Pipe read failed\n" -msgstr "Fallo leyendo tubería\n" - -#: src/compose.c:4333 -msgid "can't remove the old draft message\n" -msgstr "no se puede eliminar el borrador antiguo\n" - -#: src/compose.c:4361 src/compose.c:4381 -msgid "Select file" -msgstr "Seleccionar fichero" - -#: src/compose.c:4413 -msgid "Discard message" -msgstr "Descartar mensaje" - -#: src/compose.c:4414 -msgid "This message has been modified. discard it?" -msgstr "Este mensaje se ha modificado. ¿Desea descartarlo?" - -#: src/compose.c:4415 -msgid "Discard" -msgstr "Descartar" - -#: src/compose.c:4415 -msgid "to Draft" -msgstr "a Borrador" - -#: src/compose.c:4821 -msgid "Quote mark format error." -msgstr "Marca de cita para error." - -#: src/compose.c:4835 -msgid "Message reply/forward format error." -msgstr "Responder/redirijir para error" - -#: src/editjpilot.c:185 -msgid "File does not appear to be JPilot format." -msgstr "No parece que ese fichero esté en formato JPilot." - -#: src/editjpilot.c:188 src/editvcard.c:96 -msgid "Could not read file." -msgstr "No se pudo leer del fichero." - -#: src/editjpilot.c:221 -msgid "Select JPilot File" -msgstr "Seleccionar fichero JPilot" - -#: src/editjpilot.c:269 src/editjpilot.c:394 -msgid "Edit JPilot Entry" -msgstr "Editar entrada JPilot" - -#: src/editjpilot.c:298 src/editvcard.c:214 -msgid " Check File " -msgstr " Comprobar fichero " - -#: src/editjpilot.c:303 src/editvcard.c:219 -msgid "File" -msgstr "Fichero" - -#: src/editjpilot.c:310 src/editldap.c:338 src/editvcard.c:226 -msgid " ... " -msgstr " ... " - -#: src/editjpilot.c:315 -msgid "Additional e-Mail address item(s)" -msgstr "Elemento(s) adicional(es) de la dirección" - -#: src/editjpilot.c:401 -msgid "Add New JPilot Entry" -msgstr "Añadir nueva entrada JPilot" - -#: src/editldap.c:162 -msgid "Connected successfully to server" -msgstr "Conectado con éxito al servidor" - -#: src/editldap.c:165 src/editldap_basedn.c:291 -msgid "Could not connect to server" -msgstr "No se pudo conectar al servidor" - -#: src/editldap.c:213 src/editldap.c:528 -msgid "Edit LDAP Server" -msgstr "Editar servidor LDAP" - -#: src/editldap.c:305 src/editldap_basedn.c:161 -msgid "Hostname" -msgstr "Nombre máquina" - -#: src/editldap.c:314 src/editldap_basedn.c:171 -msgid "Port" -msgstr "Puerto" - -#: src/editldap.c:326 -msgid " Check Server " -msgstr " Comprobar servidor " - -#: src/editldap.c:331 src/editldap_basedn.c:181 -msgid "Search Base" -msgstr "Base de búsqueda" - -#: src/editldap.c:388 -msgid "Search Criteria" -msgstr "Criterio de búsqueda" - -#: src/editldap.c:395 -msgid " Reset " -msgstr " Limpiar " - -#: src/editldap.c:400 -msgid "Bind DN" -msgstr "Asociar DN" - -#: src/editldap.c:409 -msgid "Bind Password" -msgstr "Asociar contraseña" - -#: src/editldap.c:418 -msgid "Timeout (secs)" -msgstr "Tiempo límite (seg.)" - -#: src/editldap.c:432 -msgid "Maximum Entries" -msgstr "Nº entradas máximas" - -#: src/editldap.c:459 src/prefs_account.c:585 -msgid "Basic" -msgstr "Basico" - -#: src/editldap.c:460 -msgid "Extended" -msgstr "Extendido" - -#: src/editldap.c:540 -msgid "Add New LDAP Server" -msgstr "Añadir nuevo servidor LDAP" - -#: src/editldap_basedn.c:141 -msgid "Edit LDAP - Select Search Base" -msgstr "Editar LDAP - Seleccionar base de búsqueda" - -#: src/editldap_basedn.c:202 -msgid "Available Search Base(s)" -msgstr "Base(s) de búsqueda disponible(s)" - -#: src/editldap_basedn.c:287 -msgid "Could not read Search Base(s) from server - please set manually" -msgstr "" -"No se pudo leer la base de búsqueda del servidor - configúrela manualmente" - -#: src/editvcard.c:93 -msgid "File does not appear to be VCard format." -msgstr "No parece que ese fichero esté en formato VCard." - -#: src/editvcard.c:129 -msgid "Select VCard File" -msgstr "Seleccionar fichero VCard" - -#: src/editvcard.c:185 src/editvcard.c:286 -msgid "Edit VCard Entry" -msgstr "Editar entrada VCard" - -#: src/editvcard.c:291 -msgid "Add New VCard Entry" -msgstr "Añadir nueva entrada VCard" - -#: src/export.c:122 -msgid "Export" -msgstr "Exportar" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "Especificar directorio destino y fichero mbox." - -#: src/export.c:154 -msgid "Source dir:" -msgstr "Directorio origen:" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "Fichero de exportación:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:364 -msgid " Select... " -msgstr "Seleccionar..." - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "Seleccione fichero de exportación" - -#: src/foldersel.c:132 -msgid "Select folder" -msgstr "Seleccionar carpeta" - -#: src/folderview.c:217 src/folderview.c:229 src/folderview.c:242 -msgid "/Create _new folder..." -msgstr "/Crear _nueva carpeta..." - -#: src/folderview.c:218 src/folderview.c:230 src/folderview.c:243 -msgid "/_Rename folder..." -msgstr "/_Renombrar carpeta..." - -#: src/folderview.c:219 src/folderview.c:231 src/folderview.c:244 -msgid "/_Delete folder" -msgstr "/_Borrar carpeta" - -#: src/folderview.c:221 src/folderview.c:234 -msgid "/Remove _mailbox" -msgstr "/Eliminar _mailbox" - -#: src/folderview.c:224 src/folderview.c:237 src/folderview.c:250 -#: src/folderview.c:262 -msgid "/_Scoring..." -msgstr "/_Sistema de puntos..." - -#: src/folderview.c:233 src/folderview.c:246 -msgid "/_Update folder tree" -msgstr "/_Actualizar árbol" - -#: src/folderview.c:247 -msgid "/Remove _IMAP4 account" -msgstr "/Eliminar cuenta _IMAP4" - -#: src/folderview.c:255 -msgid "/_Subscribe to newsgroup..." -msgstr "/_Suscribirse a un grupo..." - -#: src/folderview.c:257 -msgid "/_Remove newsgroup" -msgstr "/_Eliminar grupo" - -#: src/folderview.c:259 -msgid "/Remove _news account" -msgstr "/_Eliminar cuenta de noticias" - -#: src/folderview.c:271 -msgid "Folder" -msgstr "Carpeta" - -#: src/folderview.c:271 -msgid "New" -msgstr "Nuevos" - -#: src/folderview.c:272 src/prefs_common.c:2901 -msgid "Unread" -msgstr "No leídos" - -#: src/folderview.c:272 -msgid "#" -msgstr "Total" - -#: src/folderview.c:284 -msgid "Creating folder view...\n" -msgstr "Creando vista de carpeta...\n" - -#: src/folderview.c:439 -msgid "Setting folder info...\n" -msgstr "Estableciendo información de carpeta...\n" - -#: src/folderview.c:440 -msgid "Setting folder info..." -msgstr "Estableciendo información de carpeta..." - -#: src/folderview.c:605 src/mainwindow.c:2567 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "Revisando carpeta %s%c%s ..." - -#: src/folderview.c:609 src/mainwindow.c:2572 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "Revisando carpeta %s ..." - -#: src/folderview.c:649 -msgid "Updating folder tree..." -msgstr "Actualizando árbol de carpetas..." - -#: src/folderview.c:666 -msgid "Updating all folders..." -msgstr "Actualizando todas las carpetas..." - -#: src/folderview.c:796 src/prefs_account.c:774 -msgid "Inbox" -msgstr "Entrada" - -#: src/folderview.c:801 -msgid "Outbox" -msgstr "Salida" - -#: src/folderview.c:806 -msgid "Queue" -msgstr "Cola" - -#: src/folderview.c:811 -msgid "Trash" -msgstr "Papelera" - -#: src/folderview.c:1357 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Carpeta %s seleccionada\n" - -#: src/folderview.c:1499 src/folderview.c:1607 src/folderview.c:1803 -#, 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:1507 src/folderview.c:1557 src/folderview.c:1616 -#: src/folderview.c:1671 src/folderview.c:1811 -#, c-format -msgid "The folder `%s' already exists." -msgstr "La carpeta `%s' ya existe." - -#: src/folderview.c:1599 src/folderview.c:1661 -#, c-format -msgid "Input new name for `%s':" -msgstr "Nuevo nombre para `%s':" - -#: src/folderview.c:1601 src/folderview.c:1663 -msgid "Rename folder" -msgstr "Renombrar carpeta" - -#: src/folderview.c:1716 -#, 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:1719 src/folderview.c:1861 -msgid "Delete folder" -msgstr "Borrar carpeta" - -#: src/folderview.c:1725 src/folderview.c:1867 -#, c-format -msgid "Can't remove the folder `%s'." -msgstr "No se puede eliminar la carpeta `%s'." - -#: src/folderview.c:1759 -#, 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:1762 -msgid "Remove folder" -msgstr "Eliminar carpeta" - -#: src/folderview.c:1795 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"Teclee el nombre de la nueva carpeta:\n" -"(si quiere crear una carpeta para almacenar subcarpetas,\n" -" añada `/' al final del nombre)" - -#: src/folderview.c:1819 -#, c-format -msgid "Can't create the folder `%s'." -msgstr "No se puede crear la carpeta `%s'." - -#: src/folderview.c:1859 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Eliminar realmente la carpeta `%s'?" - -#: src/folderview.c:1904 -#, c-format -msgid "Really delete IMAP4 account `%s'?" -msgstr "¿Eliminar realmente la cuenta IMAP4 `%s'?" - -#: src/folderview.c:1906 -msgid "Delete IMAP4 account" -msgstr "Borrar cuenta IMAP4" - -#: src/folderview.c:1956 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "El grupo de noticias `%s' ya existe." - -#: src/folderview.c:2002 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "¿Borrar el grupo de noticias `%s'?" - -#: src/folderview.c:2004 -msgid "Delete newsgroup" -msgstr "Borrar grupo de noticias" - -#: src/folderview.c:2035 -#, c-format -msgid "Really delete news account `%s'?" -msgstr "¿Borrar la cuenta de noticias `%s'?" - -#: src/folderview.c:2037 -msgid "Delete news account" -msgstr "Borrar cuenta de noticias" - -#: src/grouplistdialog.c:155 -msgid "Subscribe to newsgroup" -msgstr "Suscribir grupo de noticias" - -#: src/grouplistdialog.c:174 -msgid "Input subscribing newsgroup:" -msgstr "Nombre del grupo de noticias:" - -#: src/grouplistdialog.c:206 -msgid "Refresh" -msgstr "Refrescar" - -#: src/grouplistdialog.c:233 -msgid "Can't retrieve newsgroup list." -msgstr "No se puede obtener la lista de grupos." - -#: src/grouplistdialog.c:249 src/summaryview.c:1043 -msgid "Done." -msgstr "Hecho." - -#: src/grouplistdialog.c:260 -#, c-format -msgid "%d newsgroups received (%s read)" -msgstr "%d grupos de noticias recibidos (%s leídos)" - -#: 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:174 src/summaryview.c:2071 -msgid "(No From)" -msgstr "(Sin remite)" - -#: src/headerview.c:189 src/summaryview.c:2107 -msgid "(No Subject)" -msgstr "(Sin asunto)" - -#: src/headerwindow.c:56 -msgid "Creating header window...\n" -msgstr "Creando ventana de cabeceras...\n" - -#: src/headerwindow.c:60 -msgid "All header" -msgstr "Todas las cabeceras" - -#: src/headerwindow.c:116 -#, c-format -msgid "Displaying the header of %s ...\n" -msgstr "Viendo cabeceras de %s ...\n" - -#: src/headerwindow.c:118 -#, 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:261 -#, 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:290 src/inc.c:419 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "Contraseña para %s en %s:" - -#: src/imap.c:292 src/inc.c:423 src/news.c:131 -msgid "Input password" -msgstr "Contraseña" - -#: src/imap.c:323 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "creando conexión IMAP4 con %s:%d ...\n" - -#: src/imap.c:487 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "el mensaje %d ya esta en caché.\n" - -#: src/imap.c:497 -#, c-format -msgid "getting message %d...\n" -msgstr "obteniendo mensaje %d...\n" - -#: src/imap.c:503 src/procmsg.c:593 -#, c-format -msgid "can't fetch message %d\n" -msgstr "no se puede obtener el mensaje %d\n" - -#: src/imap.c:527 -#, c-format -msgid "can't append message %s\n" -msgstr "no se puede añadir el mensaje %s\n" - -#: src/imap.c:555 src/imap.c:607 src/mh.c:193 src/mh.c:297 src/mh.c:354 -#: src/mh.c:516 -msgid "the src folder is identical to the dest.\n" -msgstr "carpetas de origen y destino idénticas.\n" - -#: src/imap.c:562 src/imap.c:612 src/mh.c:208 src/mh.c:300 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "Moviendo mensaje %s%c%d a %s ...\n" - -#: src/imap.c:566 src/imap.c:616 src/mh.c:372 src/mh.c:519 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "Copiando mensaje %s%c%d a %s ...\n" - -#: src/imap.c:686 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "no puedo establecer los flags borrados: %d\n" - -#: src/imap.c:693 src/imap.c:733 -msgid "can't expunge\n" -msgstr "no puedo vaciar\n" - -#: src/imap.c:726 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "o puedo establecer los flags borrados: 1:%d\n" - -#: src/imap.c:890 -msgid "error occured while getting LIST.\n" -msgstr "ocurrió un error obteniendo LIST.\n" - -#: src/imap.c:1091 -msgid "can't create mailbox: LIST failed\n" -msgstr "no puedo crear el buzón: LIST falló\n" - -#: src/imap.c:1111 -msgid "can't create mailbox\n" -msgstr "no puedo crear el buzón\n" - -#: src/imap.c:1158 -msgid "can't delete mailbox\n" -msgstr "no puedo borrar el buzón\n" - -#: src/imap.c:1187 -msgid "can't get envelope\n" -msgstr "no se puede obtener la estructura del mensaje\n" - -#: src/imap.c:1195 -msgid "error occurred while getting envelope.\n" -msgstr "Error obteniendo la estructura del mensaje.\n" - -#: src/imap.c:1210 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "No se puede interpretar la estructura del mensaje: %s\n" - -#: src/imap.c:1240 -#, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "Borrando mensajes en caché %d - %d ... " - -#: src/imap.c:1273 -msgid "Deleting all cached messages... " -msgstr "Borrando todos los mensajes en caché... " - -#: src/imap.c:1291 -#, 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:1331 -msgid "can't get namespace\n" -msgstr "no se puede obtener el espacio de nombres\n" - -#: src/imap.c:1772 -#, c-format -msgid "can't select folder: %s\n" -msgstr "no se puede seleccionar la carpeta: %s\n" - -#: src/imap.c:1889 -msgid "IMAP4 login failed.\n" -msgstr "Autentificación IMAP4 fallida.\n" - -#: src/imap.c:2117 -#, c-format -msgid "can't append %s to %s\n" -msgstr "no puedo añadir %s a %s\n" - -#: src/imap.c:2137 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "no puedo copiar %d a %s\n" - -#: src/imap.c:2162 -#, 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:2176 -msgid "error while imap command: EXPUNGE\n" -msgstr "error en el comando imap: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "Importar" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "Especifique fichero mbox y carpeta de destino." - -#: src/import.c:158 -msgid "Importing file:" -msgstr "Importando fichero:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Directorio destino:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Seleccionar fichero a importar" - -#: src/inc.c:210 src/inc.c:259 src/send.c:350 -msgid "Standby" -msgstr "En espera" - -#: src/inc.c:278 -msgid "Retrieving new messages" -msgstr "Obteniendo nuevos mensajes" - -#: src/inc.c:443 -msgid "Retrieving" -msgstr "Recuperando" - -#: src/inc.c:450 -msgid "Done" -msgstr "Hecho" - -#: src/inc.c:463 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "La autorización para %s en %s falló" - -#: src/inc.c:503 -msgid "Some errors occured while getting mail." -msgstr "Ocurrió algún error obteniendo el correo." - -#: src/inc.c:541 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "obteniendo nuevos mensajes de la cuenta %s...\n" - -#: src/inc.c:549 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: Recuperando nuevos mensajes" - -#: src/inc.c:575 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "Conectando al servidor POP3: %s ..." - -#: src/inc.c:586 src/inc.c:743 -#, 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:593 src/inc.c:750 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "No se puede conectar al servirdor POP3: %s:%d" - -#: src/inc.c:785 src/inc.c:837 -#, c-format -msgid "Retrieving message (%d / %d) (%s / %s)" -msgstr "Recuperando mensaje (%d / %d) (%s / %s)" - -#: src/inc.c:811 -msgid "Authorizing..." -msgstr "Autorizando..." - -#: src/inc.c:816 -msgid "Getting the number of new messages (STAT)..." -msgstr "Obteniendo el número de nuevos mensajes (STAT)..." - -#: src/inc.c:821 -msgid "Getting the number of new messages (LAST)..." -msgstr "Obteniendo el número de nuevos mensajes (LAST)..." - -#: src/inc.c:826 -msgid "Getting the number of new messages (UIDL)..." -msgstr "Obteniendo el número de nuevos mensajes (UIDL)..." - -#: src/inc.c:831 -msgid "Getting the size of messages (LIST)..." -msgstr "Obteniendo el tamaño de nuevos mensajes (LIST)..." - -#: src/inc.c:849 -msgid "Deleting message" -msgstr "Borrando mensaje" - -#: src/inc.c:853 -msgid "Quitting" -msgstr "Saliendo" - -#: src/inc.c:885 -msgid "a message won't be received\n" -msgstr "un mensaje no es recibido\n" - -#: src/inc.c:921 -msgid "Error occurred while processing mail." -msgstr "Ocurrió un error mientras se procesaba el correo." - -#: src/inc.c:925 -msgid "No disk space left." -msgstr "No hay espacio libre en disco." - -#: src/inc.c:1009 -msgid "no messages in local mailbox.\n" -msgstr "no hay mensajes en el correo local.\n" - -#: src/inc.c:1023 -#, c-format -msgid "Getting new messages from %s into %s...\n" -msgstr "Obteniendo nuevos mensajes desde %s en %s...\n" - -#: src/labelcolors.c:46 -msgid "Orange" -msgstr "Naranja" - -#: src/labelcolors.c:47 -msgid "Red" -msgstr "Rojo" - -#: src/labelcolors.c:48 -msgid "Pink" -msgstr "Rosa" - -#: src/labelcolors.c:49 -msgid "Sky blue" -msgstr "Azul cielo" - -#: src/labelcolors.c:50 -msgid "Blue" -msgstr "Azul" - -#: src/labelcolors.c:51 -msgid "Green" -msgstr "Verde" - -#: src/labelcolors.c:52 -msgid "Brown" -msgstr "Marrón" - -#. create sub items. for the menu item activation callback we pass the -#. * index of label_colors[] as data parameter. for the None color we pass -#. * an invalid (high) value. also we attach a data pointer so we can -#. * always get back the SummaryView pointer. -#: src/labelcolors.c:281 src/summaryview.c:512 -msgid "None" -msgstr "Ninguno" - -#: 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:113 src/main.c:122 src/mbox_folder.c:2089 src/mh.c:698 -#, 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:154 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread no está soportado por glib.\n" - -#: src/main.c:231 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"GnuPG no esta convenientemente instalado.\n" -"Soporte para OpenPGP deshabilitado." - -#: src/main.c:326 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "Uso: %s [OPCIÓN]...\n" - -#: src/main.c:329 -msgid " --compose [address] open composition window" -msgstr " --compose [dirección] abre la ventana de edición" - -#: src/main.c:330 -msgid " --receive receive new messages" -msgstr " --receive recive los mensajes nuevos" - -#: src/main.c:331 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all recibe nuevos para todas las cuentas" - -#: src/main.c:332 -msgid " --debug debug mode" -msgstr " --debug modo de depuración" - -#: src/main.c:333 -msgid " --help display this help and exit" -msgstr " --help presenta esta ayuda y finaliza" - -#: src/main.c:334 -msgid " --version output version information and exit" -msgstr " --version da la información de la versión y finaliza" - -#: src/main.c:359 -msgid "Composing message exists. Really quit?" -msgstr "Está componiendo un mensaje. ¿Quiere salir?" - -#: src/main.c:366 -msgid "Queued messages" -msgstr "Mensajes en cola" - -#: src/main.c:367 -msgid "Some unsent messages are queued. Exit now?" -msgstr "Hay mensajes sin enviar en la cola. ¿Salir ahora?" - -#. remote command mode -#: src/main.c:440 -msgid "another Sylpheed is already running.\n" -msgstr "ya hay otro Sylpheed ejecutándose.\n" - -#: src/mainwindow.c:373 -msgid "/_File/_Add mailbox..." -msgstr "/_Fichero/_Añadir buzón" - -#: src/mainwindow.c:374 -msgid "/_File/_Add mbox mailbox..." -msgstr "/_Fichero/_Añadir buzón mbox..." - -#: src/mainwindow.c:375 -msgid "/_File/_Update folder tree" -msgstr "/_Fichero/_Actualizar árbol" - -#: src/mainwindow.c:376 -msgid "/_File/_Folder" -msgstr "/_Fichero/_Carpeta" - -#: src/mainwindow.c:377 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/_Fichero/_Carpeta_/Crear _nueva carpeta..." - -#: src/mainwindow.c:379 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/_Fichero/_Carpeta_/_Renombrar carpeta..." - -#: src/mainwindow.c:380 -msgid "/_File/_Folder/_Delete folder" -msgstr "/_Fichero/_Carpeta_/_Borrar carpeta" - -#: src/mainwindow.c:381 -msgid "/_File/_Import mbox file..." -msgstr "/_Fichero/I_mportar fichero mbox..." - -#: src/mainwindow.c:382 -msgid "/_File/_Export to mbox file..." -msgstr "/_Fichero/_Exportar a fichero mbox..." - -#: src/mainwindow.c:383 -msgid "/_File/Empty _trash" -msgstr "/_Fichero/_Vaciar papelera" - -#: src/mainwindow.c:385 -msgid "/_File/_Save as..." -msgstr "/_Fichero/_Salvar como..." - -#: src/mainwindow.c:386 -msgid "/_File/_Print..." -msgstr "/_Fichero/_Imprimir" - -#: src/mainwindow.c:389 -msgid "/_File/E_xit" -msgstr "/_Fichero/Sali_r" - -#: src/mainwindow.c:395 -msgid "/_Edit/_Search" -msgstr "/_Edición/_Buscar" - -#: src/mainwindow.c:397 -msgid "/_View" -msgstr "/_Ver" - -#: src/mainwindow.c:398 -msgid "/_View/_Folder tree" -msgstr "/_Ver/_Árbol de carpetas" - -#: src/mainwindow.c:399 -msgid "/_View/_Message view" -msgstr "/_Ver/_Mensajes" - -#: src/mainwindow.c:400 -msgid "/_View/_Toolbar" -msgstr "/_Ver/_Herramientas" - -#: src/mainwindow.c:401 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/_Ver/_Herramientas/Iconos _y texto" - -#: src/mainwindow.c:402 -msgid "/_View/_Toolbar/_Icon" -msgstr "/_Ver/_Herramientas/_Iconos" - -#: src/mainwindow.c:403 -msgid "/_View/_Toolbar/_Text" -msgstr "/_Ver/_Herramientas/_Texto" - -#: src/mainwindow.c:404 -msgid "/_View/_Toolbar/_None" -msgstr "/_Ver/_Herramientas/_Ocultar" - -#: src/mainwindow.c:405 -msgid "/_View/_Status bar" -msgstr "/_Ver/_Barra de estado" - -#: src/mainwindow.c:406 src/mainwindow.c:409 -msgid "/_View/---" -msgstr "/_Ver/---" - -#: src/mainwindow.c:407 -msgid "/_View/Separate f_older tree" -msgstr "/_Ver/Á_rbol de carpetas flotante" - -#: src/mainwindow.c:408 -msgid "/_View/Separate m_essage view" -msgstr "/_Ver/M_ensaje flotante" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set" -msgstr "/_Ver/_Conjunto de códigos" - -#: src/mainwindow.c:411 -msgid "/_View/_Code set/_Auto detect" -msgstr "/_Ver/_Conjunto de códigos/_Autodetectar" - -#: src/mainwindow.c:415 src/mainwindow.c:419 -msgid "/_View/_Code set/---" -msgstr "/_Ver/_Conjunto de códigos/---" - -#: src/mainwindow.c:420 -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:424 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/_Ver/_Conjunto de códigos/Unicode (_UTF-8)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/_Ver/_Conjunto de códigos/Europeo Occidental (ISO-8859-_1)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/_Ver/_Conjunto de códigos/Centroeuropeo (ISO-8859-_2)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/_Ver/_Conjunto de códigos/Báltico (ISO-8859-13)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/_Ver/_Conjunto de códigos/Báltico (ISO-8859-_4)" - -#: src/mainwindow.c:440 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/_Ver/_Conjunto de códigos/Griego (ISO-8859-_7)" - -#: src/mainwindow.c:443 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/_Ver/_Conjunto de códigos/Turco (ISO-8859-_9)" - -#: src/mainwindow.c:446 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/_Ver/_Conjunto de códigos/Cirílico (ISO-8859-_5)" - -#: src/mainwindow.c:448 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/_Ver/_Conjunto de códigos/Cirílico (KOI8-_R)" - -#: src/mainwindow.c:450 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/_Ver/_Conjunto de códigos/Cirílico (Windows-1251)" - -#: src/mainwindow.c:454 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/_Ver/_Conjunto de códigos/Japonés (ISO-2022-_JP)" - -#: src/mainwindow.c:457 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/_Ver/_Conjunto de códigos/Japonés (ISO-2022-JP-2)" - -#: src/mainwindow.c:460 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/_Ver/_Conjunto de códigos/Japonés (_EUC-JP)" - -#: src/mainwindow.c:462 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/_Ver/_Conjunto de códigos/Japonés (_Shift__JIS)" - -#: src/mainwindow.c:466 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/_Ver/_Conjunto de códigos/Chino simplificado (_GB2312)" - -#: src/mainwindow.c:468 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/_Ver/_Conjunto de códigos/Chino tradicional (_Big5)" - -#: src/mainwindow.c:470 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/_Ver/_Conjunto de códigos/Chino tradicional (EUC-_TW)" - -#: src/mainwindow.c:472 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/_Ver/_Conjunto de códigos/Chino (ISO-2022-_CN)" - -#: src/mainwindow.c:475 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/_Ver/_Conjunto de códigos/Coreano (EUC-_KR)" - -#: src/mainwindow.c:477 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/_Ver/_Conjunto de códigos/Coreano (ISO-2022-KR)" - -#: src/mainwindow.c:485 -msgid "/_Message/Get new ma_il" -msgstr "/_Mensaje/Rec_ibir correo nuevo" - -#: src/mainwindow.c:486 -msgid "/_Message/Get from _all accounts" -msgstr "/_Mensaje/Recibir de tod_as las cuentas" - -#: src/mainwindow.c:489 -msgid "/_Message/Send queued messa_ges" -msgstr "/_Mensaje/Enviar mensa_jes en cola" - -#: src/mainwindow.c:492 -msgid "/_Message/Compose a_n email message" -msgstr "/_Mensaje/Componer _nuevo mensaje" - -#: src/mainwindow.c:493 -msgid "/_Message/Compose a news message" -msgstr "/_Mensaje/Componer _nuevo artículo" - -#: src/mainwindow.c:494 -msgid "/_Message/_Reply" -msgstr "/_Mensaje/_Responder" - -#: src/mainwindow.c:495 -msgid "/_Message/Repl_y to sender" -msgstr "/_Mensaje/_Responder al remitente" - -#: src/mainwindow.c:496 -msgid "/_Message/Follow-up and reply to" -msgstr "/_Mensaje/_Reenviar y responder a" - -#: src/mainwindow.c:497 -msgid "/_Message/Reply to a_ll" -msgstr "/_Mensaje/Responder a _todos" - -#: src/mainwindow.c:498 -msgid "/_Message/_Forward" -msgstr "/_Mensaje/Re_dirigir" - -#: src/mainwindow.c:499 -msgid "/_Message/Forward as a_ttachment" -msgstr "/_Mensaje/Reenviar como fichero ad_junto" - -#: src/mainwindow.c:502 -msgid "/_Message/M_ove..." -msgstr "/_Mensaje/M_over..." - -#: src/mainwindow.c:503 -msgid "/_Message/_Copy..." -msgstr "/_Mensaje/_Copiar..." - -#: src/mainwindow.c:504 -msgid "/_Message/_Delete" -msgstr "/_Mensaje/_Borrar" - -#: src/mainwindow.c:505 -msgid "/_Message/_Mark" -msgstr "/_Mensaje/_Marcar" - -#: src/mainwindow.c:506 -msgid "/_Message/_Mark/_Mark" -msgstr "/_Mensaje/_Marcar/_Marcar" - -#: src/mainwindow.c:507 -msgid "/_Message/_Mark/_Unmark" -msgstr "/_Mensaje/_Marcar/_Desmarcar" - -#: src/mainwindow.c:508 -msgid "/_Message/_Mark/---" -msgstr "/_Mensaje/_Marcar/---" - -#: src/mainwindow.c:509 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/_Mensaje/_Marcar/Marcar como no leído" - -#: src/mainwindow.c:510 -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/_Mensaje/_Marcar/Marcar como leído" - -#: src/mainwindow.c:513 -msgid "/_Message/Open in new _window" -msgstr "/_Mensaje/Abrir en _ventana nueva" - -#: src/mainwindow.c:514 -msgid "/_Message/View _source" -msgstr "/_Message/Ver _fuente" - -#: src/mainwindow.c:515 -msgid "/_Message/Show all _header" -msgstr "/_Mensaje/_Mostrar todas las cabeceras" - -#: src/mainwindow.c:516 -msgid "/_Message/Re-_edit" -msgstr "/_Mensaje/Re_editar" - -#: src/mainwindow.c:518 -msgid "/_Summary" -msgstr "/_Resumen" - -#: src/mainwindow.c:519 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/_Resumen/_Borrar mensajes duplicados" - -#: src/mainwindow.c:521 -msgid "/_Summary/_Filter messages" -msgstr "/_Resumen/_Filtrar mensajes" - -#: src/mainwindow.c:522 -msgid "/_Summary/E_xecute" -msgstr "/_Resumen/_Ejecutar" - -#: src/mainwindow.c:523 -msgid "/_Summary/_Update" -msgstr "/_Resumen/_Actualizar" - -#: src/mainwindow.c:524 src/mainwindow.c:530 src/mainwindow.c:532 -msgid "/_Summary/---" -msgstr "/_Resumen/---" - -#: src/mainwindow.c:525 -msgid "/_Summary/_Prev message" -msgstr "/_Resumen/Mensaje a_nterior" - -#: src/mainwindow.c:526 -msgid "/_Summary/_Next message" -msgstr "/_Resumen/Mensaje s_iguiente" - -#: src/mainwindow.c:527 -msgid "/_Summary/N_ext unread message" -msgstr "/_Resumen/Siguiente no _leído" - -#: src/mainwindow.c:528 -msgid "/_Summary/Prev marked message" -msgstr "/_Resumen/Mensaje marcado a_nterior" - -#: src/mainwindow.c:529 -msgid "/_Summary/Next marked message" -msgstr "/_Resumen/Siguiente mensaje marcado" - -#: src/mainwindow.c:531 -msgid "/_Summary/_Go to other folder" -msgstr "/_Resumen/_Ir a otra carpeta" - -#: src/mainwindow.c:533 -msgid "/_Summary/_Sort" -msgstr "/_Resumen/_Ordenar" - -#: src/mainwindow.c:534 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/_Resumen/_Ordenar/Ordenar por _número" - -#: src/mainwindow.c:535 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/_Resumen/_Ordenar/Ordenar por _tamaño" - -#: src/mainwindow.c:536 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/_Resumen/_Ordenar/Ordenar por _fecha" - -#: src/mainwindow.c:537 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/_Resumen/_Ordenar/Ordenar por _remitente" - -#: src/mainwindow.c:538 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/_Resumen/_Ordenar/Ordenar por as_unto" - -#: src/mainwindow.c:539 -msgid "/_Summary/_Sort/Sort by sco_re" -msgstr "/_Resumen/_Ordenar/Ordenar por _puntuación" - -#: src/mainwindow.c:540 -msgid "/_Summary/_Sort/Sort by _label" -msgstr "/_Resumen/_Ordenar/Ordenar por _etiqueta" - -#: src/mainwindow.c:541 -msgid "/_Summary/_Sort/---" -msgstr "/_Resumen/_Ordenar/---" - -#: src/mainwindow.c:542 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/_Resumen/_Ordenar/Atraer _por asunto" - -#: src/mainwindow.c:544 -msgid "/_Summary/_Thread view" -msgstr "/_Resumen/_Vista jerárquica" - -#: src/mainwindow.c:545 -msgid "/_Summary/Unt_hread view" -msgstr "/_Resumen/Vista plana" - -#: src/mainwindow.c:546 -msgid "/_Summary/Set display _item..." -msgstr "/_Resumen/Elementos visibles..." - -#: src/mainwindow.c:550 -msgid "/_Tool/_Log window" -msgstr "/_Utilidades/_Ventana de traza" - -#: src/mainwindow.c:552 -msgid "/_Configuration" -msgstr "/_Configuración" - -#: src/mainwindow.c:553 -msgid "/_Configuration/_Common preferences..." -msgstr "/_Configuración/Preferencias _comunes..." - -#: src/mainwindow.c:555 -msgid "/_Configuration/_Filter setting..." -msgstr "/_Configuración/Preferencias de _filtrado..." - -#: src/mainwindow.c:557 -msgid "/_Configuration/_Scoring ..." -msgstr "/_Configuración/_Sistema de puntos..." - -#: src/mainwindow.c:559 -msgid "/_Configuration/_Filtering ..." -msgstr "/_Configuración/_Filtrado ..." - -#: src/mainwindow.c:561 -msgid "/_Configuration/_Preferences per account..." -msgstr "/_Configuración/_Preferencias para cada cuenta..." - -#: src/mainwindow.c:563 -msgid "/_Configuration/---" -msgstr "/_Configuración/---" - -#: src/mainwindow.c:564 -msgid "/_Configuration/Create _new account..." -msgstr "/_Configuración/Crear _nueva cuenta..." - -#: src/mainwindow.c:566 -msgid "/_Configuration/_Edit accounts..." -msgstr "/_Configuración/_Editar cuentas..." - -#: src/mainwindow.c:568 -msgid "/_Configuration/C_hange current account" -msgstr "/_Configuración/_Cambiar cuenta actual" - -#: src/mainwindow.c:572 -msgid "/_Help/_Manual" -msgstr "/_Ayuda/_Manual" - -#: src/mainwindow.c:573 -msgid "/_Help/_Manual/_English" -msgstr "/_Ayuda/_Manual/_Inglés" - -#: src/mainwindow.c:574 -msgid "/_Help/_Manual/_Japanese" -msgstr "/_Ayuda/_Manual/_Japonés" - -#: src/mainwindow.c:575 -msgid "/_Help/---" -msgstr "/_Ayuda/---" - -#: src/mainwindow.c:604 -msgid "Creating main window...\n" -msgstr "Creando ventana principal...\n" - -#: src/mainwindow.c:723 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "MainWindow: fallo solicitando color %d\n" - -#: src/mainwindow.c:891 src/mainwindow.c:908 -msgid "Untitled" -msgstr "Sin título" - -#: src/mainwindow.c:909 -msgid "none" -msgstr "ninguna" - -#: src/mainwindow.c:918 -#, c-format -msgid "Current account: %s" -msgstr "Cuenta actual: %s" - -#: src/mainwindow.c:1009 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "posición de la ventana: x = %d, y = %d\n" - -#: src/mainwindow.c:1017 -msgid "Empty trash" -msgstr "Vaciar papelera" - -#: src/mainwindow.c:1018 -msgid "Empty all messages in trash?" -msgstr "¿Vaciar todos los mensajes de la papelera?" - -#: src/mainwindow.c:1046 -msgid "Add mailbox" -msgstr "Añadir buzón" - -#: src/mainwindow.c:1047 -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:1053 src/mainwindow.c:1093 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "El buzón `%s' ya existe." - -#: src/mainwindow.c:1059 src/setup.c:57 -msgid "Mailbox" -msgstr "Correo" - -#: src/mainwindow.c:1066 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:1086 -msgid "Add mbox mailbox" -msgstr "Añadir buzón mbox" - -#: src/mainwindow.c:1087 -msgid "Input the location of mailbox." -msgstr "Introduzca la localización del buzón." - -#: src/mainwindow.c:1108 -msgid "Creation of the mailbox failed." -msgstr "Fallo en la creación del buzón." - -#: src/mainwindow.c:1270 -msgid "Setting widgets..." -msgstr "Estableciendo controles..." - -#: src/mainwindow.c:1484 -msgid "Get" -msgstr "Traer" - -#: src/mainwindow.c:1485 -msgid "Get new mail from current account" -msgstr "Incorporar correo nuevo de la cuenta actual" - -#: src/mainwindow.c:1491 -msgid "Get new mail from all accounts" -msgstr "Incorporar correo nuevo de todas las cuentas" - -#: src/mainwindow.c:1502 -msgid "Send queued message(s)" -msgstr "Enviar mensaje(s) en la cola" - -#: src/mainwindow.c:1519 -msgid "Compose email message" -msgstr "Componer mensaje nuevo" - -#: src/mainwindow.c:1520 -msgid "email" -msgstr "correo" - -#: src/mainwindow.c:1528 src/mainwindow.c:1565 -msgid "Email" -msgstr "Correo" - -#: src/mainwindow.c:1543 -msgid "Compose news article" -msgstr "Componer artículo nuevo" - -#: src/mainwindow.c:1544 -msgid "news" -msgstr "noticias" - -#: src/mainwindow.c:1552 src/mainwindow.c:1576 src/prefs_common.c:912 -msgid "News" -msgstr "Noticias" - -#: src/mainwindow.c:1566 -msgid "Compose an email message" -msgstr "Componer mensaje nuevo" - -#: src/mainwindow.c:1577 -msgid "Compose a news message" -msgstr "Componer artículo de noticias" - -#: src/mainwindow.c:1603 -msgid "Reply" -msgstr "Responder" - -#: src/mainwindow.c:1604 -msgid "Reply to the message" -msgstr "Responder al mensaje" - -#: src/mainwindow.c:1611 -msgid "All" -msgstr "A todos" - -#: src/mainwindow.c:1612 -msgid "Reply to all" -msgstr "Responder a todos" - -#: src/mainwindow.c:1619 -msgid "Sender" -msgstr "Remitente" - -#: src/mainwindow.c:1620 -msgid "Reply to sender" -msgstr "Responder al remitiente" - -#: src/mainwindow.c:1627 src/prefs_filtering.c:223 -msgid "Forward" -msgstr "Reenviar" - -#: src/mainwindow.c:1628 -msgid "Forward the message" -msgstr "Reenviar el mensaje" - -#: src/mainwindow.c:1639 -msgid "Delete the message" -msgstr "Borrar el mensaje" - -#: src/mainwindow.c:1647 src/prefs_filtering.c:225 src/prefs_filtering.c:461 -#: src/prefs_matcher.c:149 -msgid "Execute" -msgstr "Ejecutar" - -#: src/mainwindow.c:1648 -msgid "Execute marked process" -msgstr "Ejecutar el proceso marcado" - -#: src/mainwindow.c:1656 -msgid "Next" -msgstr "Siguiente" - -#: src/mainwindow.c:1657 -msgid "Next unread message" -msgstr "Siguiente no leído" - -#: src/mainwindow.c:1739 -msgid "Email message" -msgstr "Mensaje de correo" - -#: src/mainwindow.c:1747 -msgid "News article" -msgstr "Artículo de noticias" - -#: src/mainwindow.c:1993 src/summaryview.c:3403 -msgid "Exit" -msgstr "Salir" - -#: src/mainwindow.c:1993 src/summaryview.c:3403 -msgid "Exit this program?" -msgstr "¿Salir del programa?" - -#: src/mainwindow.c:2133 -msgid "Sending queued message failed." -msgstr "Fallo enviando mensaje encolado." - -#: src/mainwindow.c:2334 -#, c-format -msgid "forced charset: %s\n" -msgstr "conjunto de caracteres forzado: %s\n" - -#: src/matcher.c:1359 -#, c-format -msgid "%s(%d) - filename is not set" -msgstr "%s(%d) - no se estableció el nombre de fichero" - -#: src/mbox.c:51 src/mbox.c:198 -msgid "can't write to temporary file\n" -msgstr "no se puede escribir el fichero temporal\n" - -#: src/mbox.c:69 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "Obteniendo mensajes desde %s en %s...\n" - -#: src/mbox.c:79 -msgid "can't read mbox file.\n" -msgstr "no puedo leer el fichero mbox.\n" - -#: src/mbox.c:86 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "formato de mbox inválido: %s\n" - -#: src/mbox.c:93 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "mbox malformada: %s\n" - -#: src/mbox.c:111 -msgid "can't open temporary file\n" -msgstr "no se puede abrir el fichero temporal\n" - -#: src/mbox.c:163 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"Encontrado Desde sin codificar:\n" -"%s" - -#: src/mbox.c:243 -#, c-format -msgid "%d messages found.\n" -msgstr "%d mensajes encontrados.\n" - -#: src/mbox.c:260 src/mbox_folder.c:122 -#, c-format -msgid "can't create lock file %s\n" -msgstr "no se puede crear el fichero de bloqueo %s\n" - -#: src/mbox.c:261 src/mbox_folder.c:123 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "usar 'flock' en vez de 'file' si es posible.\n" - -#: src/mbox.c:273 src/mbox_folder.c:135 -#, c-format -msgid "can't create %s\n" -msgstr "no puedo crear %s\n" - -#: src/mbox.c:279 src/mbox_folder.c:141 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "el buzón esta siendo usado por otro proceso, esperando...\n" - -#: src/mbox.c:308 -#, c-format -msgid "can't lock %s\n" -msgstr "no se puede bloquear %s\n" - -#: src/mbox.c:315 src/mbox.c:362 -msgid "invalid lock type\n" -msgstr "tipo de bloqueo no válido\n" - -#: src/mbox.c:348 -#, c-format -msgid "can't unlock %s\n" -msgstr "no se puede desbloquear %s\n" - -#: src/mbox.c:379 -msgid "can't truncate mailbox to zero.\n" -msgstr "no se puede truncar a cero el buzón.\n" - -#: src/mbox.c:400 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "Exportando mensajes de %s a %s...\n" - -#: src/mbox_folder.c:219 -#, c-format -msgid "could not lock read file %s\n" -msgstr "no se pudo bloquear para lectura el fichero %s\n" - -#: src/mbox_folder.c:238 -#, c-format -msgid "could not lock write file %s\n" -msgstr "no se pudo bloquear para escritura el fichero %s\n" - -#: src/mbox_folder.c:797 -#, c-format -msgid "read mbox - %s\n" -msgstr "leer mbox - %s\n" - -#: src/mbox_folder.c:828 -#, c-format -msgid "read mbox from file - %s\n" -msgstr "leer mbox del fichero - %s\n" - -#: src/mbox_folder.c:1378 src/mbox_folder.c:1390 -#, c-format -msgid "unvalid file - %s.\n" -msgstr "fichero no válido - %s.\n" - -#: src/mbox_folder.c:1408 src/mbox_folder.c:1783 src/utils.c:1571 -#: src/utils.c:1648 -#, c-format -msgid "writing to %s failed.\n" -msgstr "fallo escribiendo en %s.\n" - -#: src/mbox_folder.c:1731 src/mh.c:668 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Último número en directorio %s = %d\n" - -#: src/mbox_folder.c:1924 -#, c-format -msgid "no modification - %s\n" -msgstr "sin modificar - %s\n" - -#: src/mbox_folder.c:1928 -#, c-format -msgid "save modification - %s\n" -msgstr "guardar modificaciones - %s\n" - -#: src/mbox_folder.c:1961 src/mbox_folder.c:2057 -#, c-format -msgid "can't rename %s to %s\n" -msgstr "no puedo renombrar %s a %s\n" - -#: src/mbox_folder.c:1982 src/mbox_folder.c:2078 -#, c-format -msgid "%i messages written - %s\n" -msgstr "%i mensajes escritos - %s\n" - -#: src/mbox_folder.c:2018 -#, c-format -msgid "no deleted messages - %s\n" -msgstr "no hay mensajes borrados - %s\n" - -#: src/mbox_folder.c:2022 -#, c-format -msgid "purge deleted messages - %s\n" -msgstr "purgar mensajes borrados - %s\n" - -#: src/mbox_folder.c:2200 -msgid "Cannot rename folder item" -msgstr "No puedo renombrar carpeta" - -#: src/messageview.c:70 -msgid "Creating message view...\n" -msgstr "Creando visor de mensaje...\n" - -#: src/messageview.c:346 -msgid "" -"Error occurred while sending the notification.\n" -"Put this notification into queue folder?" -msgstr "" -"Ocurrió un error enviando la notificación.\n" -"¿Desea poner esta notificación en la cola?" - -#: src/messageview.c:352 -msgid "Can't queue the notification." -msgstr "La notificación no se puede poner en la cola." - -#: src/messageview.c:355 -msgid "Error occurred while sending the notification." -msgstr "Ocurrió un error enviando la notificación." - -#: src/messageview.c:416 -msgid "Return Receipt" -msgstr "Acuse de recibo" - -#: src/messageview.c:416 -msgid "Send return receipt ?" -msgstr "¿Enviar acuse de recibo?" - -#: src/messageview.c:420 -msgid "Error occurred while sending notification." -msgstr "Ocurrió un error enviando la notificación." - -#: src/mh.c:158 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "no se puede copiar mensaje %s a %s\n" - -#: src/mh.c:206 src/mh.c:291 src/mh.c:370 src/mh.c:510 -msgid "Can't open mark file.\n" -msgstr "No se puede abrir el fichero de marcas.\n" - -#: src/mh.c:383 src/mh.c:528 -#, c-format -msgid "%s already exists." -msgstr "%s ya existe." - -#: src/mh.c:873 -msgid "\tSearching uncached messages... " -msgstr "\tBuscando mensajes no cacheados..." - -#: src/mh.c:928 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "Encontrado(s) %d mensaje(s) no cacheado(s).\n" - -#: src/mh.c:934 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tOrdenando mensajes no cacheados numéricamente..." - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/_Abrir" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/Abrir _con..." - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/_Ver como texto" - -#: src/mimeview.c:116 src/summaryview.c:355 -msgid "/_Save as..." -msgstr "/_Salvar como..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/_Verificar firma" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "Tipo MIME" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "Creando visor de MIME...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "Seleccione \"Verificar firma\" para verificar" - -#: src/mimeview.c:682 src/mimeview.c:730 src/mimeview.c:749 src/mimeview.c:772 -msgid "Can't save the part of multipart message." -msgstr "No se puede guardar la parte del mensaje multipartes." - -#: src/mimeview.c:716 src/summaryview.c:2832 -msgid "Save as" -msgstr "Guardar como" - -#: src/mimeview.c:722 src/summaryview.c:2837 -msgid "Overwrite" -msgstr "Sobreescribir" - -#: src/mimeview.c:723 src/summaryview.c:2838 -msgid "Overwrite existing file?" -msgstr "¿Sobreescribir el fichero existente?" - -#: src/mimeview.c:777 -msgid "Open with" -msgstr "Abrir con" - -#: src/mimeview.c:778 -#, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Teclee el comando para abrir el fichero:\n" -"(`%s' será sustituido por el fichero)" - -#: src/mimeview.c:830 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "El comando del visor MIME no es válido: `%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "creando conexión NNTP con %s:%d ...\n" - -#: src/news.c:182 -#, 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:257 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "el artículo %d ya esta en caché.\n" - -#: src/news.c:270 -#, c-format -msgid "can't select group %s\n" -msgstr "no puedo seleccionar grupo %s\n" - -#: src/news.c:275 -#, c-format -msgid "getting article %d...\n" -msgstr "obteniendo artículo %d...\n" - -#: src/news.c:280 -#, c-format -msgid "can't read article %d\n" -msgstr "no puedo leer el artículo %d\n" - -#: src/news.c:325 -msgid "can't retrieve newsgroup list\n" -msgstr "no puedo obtener la lista de grupos\n" - -#: src/news.c:397 -msgid "can't post article.\n" -msgstr "no se puede enviar el artículo.\n" - -#: src/news.c:421 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "no puedo obtener el artículo %d\n" - -#: src/news.c:491 -#, c-format -msgid "can't set group: %s\n" -msgstr "no puedo establecer grupo: %s\n" - -#: src/news.c:498 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "rango de artículos no válido: %d - %d\n" - -#: src/news.c:507 -msgid "no new articles.\n" -msgstr "no hay artículos nuevos.\n" - -#: src/news.c:520 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "obteniendo xover %d - %d en %s...\n" - -#: src/news.c:523 -msgid "can't get xover\n" -msgstr "no se puede obtener xover\n" - -#: src/news.c:529 -msgid "error occurred while getting xover.\n" -msgstr "ocurrió un error obteniendo xover.\n" - -#: src/news.c:537 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "linea xover no válida: %s\n" - -#: src/news.c:555 src/news.c:580 -msgid "can't get xhdr\n" -msgstr "no se puede obtener xhdr\n" - -#: src/news.c:563 src/news.c:588 -msgid "error occurred while getting xhdr.\n" -msgstr "ocurrió un error obteniendo xhdr.\n" - -#: src/news.c:713 -#, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "Borrando artículos en caché 1 - %d ... " - -#: src/news.c:742 -msgid "\tDeleting all cached articles... " -msgstr "\tBorrando artículos en caché... " - -#: src/nntp.c:52 -#, 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:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "error del protocolo: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "error del protocolo\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "Ocurrió un error mientras se enviaba\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "Frase contraseña" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[sin id usuario]" - -#: src/passphrase.c:244 -#, 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:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"¡Contraseña errónea! Intentelo de nuevo...\n" -"\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authentication\n" -msgstr "ocurrió algún error en la autentificación\n" - -#: src/pop.c:117 -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:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "La marca temporal del saludo tiene un error de sintaxis\n" - -#: src/pop.c:171 src/pop.c:212 -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:184 -#, 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:141 src/prefs.c:169 src/prefs.c:214 src/prefs_account.c:444 -#: src/prefs_account.c:458 src/prefs_customheader.c:393 -#: src/prefs_customheader.c:439 src/prefs_display_header.c:429 -#: src/prefs_display_header.c:454 src/prefs_filter.c:533 -#: src/prefs_filter.c:557 src/scoring.c:428 src/scoring.c:439 -msgid "failed to write configuration to file\n" -msgstr "fallo escribiendo la configuración a fichero\n" - -#: src/prefs.c:217 -msgid "Configuration is saved.\n" -msgstr "Configuración guardada.\n" - -#: src/prefs.c:272 -#, c-format -msgid "no permission - %s\n" -msgstr "no tiene permisos - %s\n" - -#: src/prefs.c:477 -msgid "Apply" -msgstr "Aplicar" - -#: src/prefs_account.c:492 -msgid "Opening account preferences window...\n" -msgstr "Abriendo ventana de preferencias de cuenta...\n" - -#: src/prefs_account.c:519 -#, c-format -msgid "Account%d" -msgstr "Cuenta%d" - -#: src/prefs_account.c:532 -msgid "Preferences for new account" -msgstr "Preferencias para la nueva cuenta" - -#: src/prefs_account.c:537 -msgid "Preferences for each account" -msgstr "Preferencias para cada cuenta" - -#: src/prefs_account.c:565 -msgid "Creating account preferences window...\n" -msgstr "Creando ventana de preferencias de cuenta...\n" - -#. Receive Options -#: src/prefs_account.c:587 src/prefs_account.c:1255 src/prefs_common.c:758 -msgid "Receive" -msgstr "Recibir" - -#: src/prefs_account.c:591 src/prefs_common.c:762 -msgid "Compose" -msgstr "Componer" - -#: src/prefs_account.c:594 src/prefs_common.c:769 -msgid "Privacy" -msgstr "Privacidad" - -#: src/prefs_account.c:598 -msgid "SSL" -msgstr "SSL" - -#: src/prefs_account.c:601 -msgid "Advanced" -msgstr "Avanzadas" - -#: src/prefs_account.c:682 -msgid "Name of this account" -msgstr "Nombre de esta cuenta" - -#: src/prefs_account.c:691 -msgid "Usually used" -msgstr "Uso habitual" - -#: src/prefs_account.c:695 -msgid "Personal information" -msgstr "Información personal" - -#: src/prefs_account.c:704 -msgid "Full name" -msgstr "Nombre completo" - -#: src/prefs_account.c:710 -msgid "Mail address" -msgstr "Dirección de correo" - -#: src/prefs_account.c:716 -msgid "Organization" -msgstr "Organización" - -#: src/prefs_account.c:740 -msgid "Server information" -msgstr "Información del servidor" - -#: src/prefs_account.c:761 -msgid "POP3 (normal)" -msgstr "POP3 (normal)" - -#: src/prefs_account.c:763 -msgid "POP3 (APOP auth)" -msgstr "POP3 (autorz. APOP)" - -#: src/prefs_account.c:765 src/prefs_account.c:967 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:767 -msgid "News (NNTP)" -msgstr "News (NNTP)" - -#: src/prefs_account.c:769 -msgid "None (local)" -msgstr "Ninguna (local)" - -#: src/prefs_account.c:798 -msgid "This server requires authentication" -msgstr "Este servidor requiere autentificación" - -#: src/prefs_account.c:842 -msgid "News server" -msgstr "Servidor de news" - -#: src/prefs_account.c:848 -msgid "Server for receiving" -msgstr "Servidor de recepción" - -#: src/prefs_account.c:854 -msgid "Local mailbox file" -msgstr "Fichero mbox local" - -#. gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); -#: src/prefs_account.c:861 -msgid "SMTP server (send)" -msgstr "Servidor SMTP (enviar)" - -#: src/prefs_account.c:869 -msgid "Use mail command rather than SMTP server" -msgstr "Usar comando de correo en vez de servidor SMTP" - -#: src/prefs_account.c:878 -msgid "command to send mails" -msgstr "comando para enviar correos" - -#. gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); -#: src/prefs_account.c:885 -msgid "User ID" -msgstr "Usuario" - -#: src/prefs_account.c:891 -msgid "Password" -msgstr "Contraseña" - -#: src/prefs_account.c:950 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:958 -msgid "Remove messages on server when received" -msgstr "Eliminar mensajes del servidor al recibir" - -#: src/prefs_account.c:960 -msgid "Download all messages on server" -msgstr "Descargar todos los mensajes del servidor" - -#: src/prefs_account.c:963 -msgid "`Get all' checks for new mail on this account" -msgstr "`Traer todo' comprueba el correo nuevo en esta cuenta" - -#: src/prefs_account.c:965 -msgid "Filter messages on receiving" -msgstr "Filtrar mensajes al recibir" - -#: src/prefs_account.c:978 -msgid "IMAP server directory" -msgstr "Directorio del servidor IMAP4" - -#: src/prefs_account.c:1024 src/prefs_customheader.c:196 -#: src/prefs_filter.c:259 src/prefs_matcher.c:143 -msgid "Header" -msgstr "Cabecera" - -#: src/prefs_account.c:1031 -msgid "Add Date header field" -msgstr "Añadir campo Fecha" - -#: src/prefs_account.c:1032 -msgid "Generate Message-ID" -msgstr "Generar ID-Mensaje" - -#: src/prefs_account.c:1039 -msgid "Add user-defined header" -msgstr "Añadir cabecera de usuario" - -#: src/prefs_account.c:1041 src/prefs_common.c:1667 src/prefs_common.c:1692 -msgid " Edit... " -msgstr " Editar... " - -#: src/prefs_account.c:1051 -msgid "Automatically set following addresses" -msgstr "Establecer las siguientes direcciones" - -#: src/prefs_account.c:1060 src/prefs_matcher.c:140 -msgid "Cc" -msgstr "Cc" - -#: src/prefs_account.c:1073 -msgid "Bcc" -msgstr "Bcc" - -#: src/prefs_account.c:1086 -msgid "Reply-To" -msgstr "Responder" - -#: src/prefs_account.c:1099 -msgid "Authentication" -msgstr "Autentificación" - -#: src/prefs_account.c:1107 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "Autentificación SMTP (SMTP AUTH)" - -#: src/prefs_account.c:1109 -msgid "Authenticate with POP3 before sending" -msgstr "Autentificación con POP3 antes de enviar" - -#: src/prefs_account.c:1143 -msgid "Signature file" -msgstr "Fichero de firma" - -#: src/prefs_account.c:1172 -msgid "Sign key" -msgstr "Firmar clave" - -#: src/prefs_account.c:1180 -msgid "Use default GnuPG key" -msgstr "Usar clave GnuPG por defecto" - -#: src/prefs_account.c:1189 -msgid "Select key by your email address" -msgstr "Seleccionar clave por dirección de correo" - -#: src/prefs_account.c:1198 -msgid "Specify key manually" -msgstr "Especificar clave manualmente" - -#: src/prefs_account.c:1214 -msgid "User or key ID:" -msgstr "Usuario o ID clave:" - -#: src/prefs_account.c:1262 -msgid "Use SSL tunnel to connect to POP server" -msgstr "Usar túnel SSL para conectar al servidor POP3" - -#: src/prefs_account.c:1263 -msgid "Use SSL tunnel to connect to IMAP server" -msgstr "Usar túnel SSL para conectar al servidor IMAP" - -#: src/prefs_account.c:1274 -msgid "No SSL for SMTP" -msgstr "No hay SSL para SMTP" - -#: src/prefs_account.c:1283 -msgid "Use SSL tunnel to connect to SMTP server" -msgstr "Usar túnel SSL para conectar al servidor SMTP" - -#: src/prefs_account.c:1292 -msgid "Use STARTTLS command to start SMTP SSL session" -msgstr "Usar el comando STARTTLS para abrir la sesión SSL con SMTP" - -#: src/prefs_account.c:1351 -msgid "Specify SMTP port" -msgstr "Puerto SMTP" - -#: src/prefs_account.c:1357 -msgid "Specify POP3 port" -msgstr "Puerto POP3" - -#: src/prefs_account.c:1363 -msgid "Specify IMAP4 port" -msgstr "Puerto IMAP4" - -#: src/prefs_account.c:1369 -msgid "Specify NNTP port" -msgstr "Puerto NNTP" - -#: src/prefs_account.c:1374 -msgid "Specify domain name" -msgstr "Nombre del dominio" - -#: src/prefs_account.c:1431 -msgid "Mail address is not entered." -msgstr "No se especificó la dirección de correo." - -#: src/prefs_account.c:1436 -msgid "SMTP server is not entered." -msgstr "No se especificó el servidor SMTP." - -#: src/prefs_account.c:1441 -msgid "User ID is not entered." -msgstr "No se especificó el usuario." - -#: src/prefs_account.c:1446 -msgid "POP3 server is not entered." -msgstr "No se especificó el servidor POP3." - -#: src/prefs_account.c:1451 -msgid "IMAP4 server is not entered." -msgstr "No se especificó el servidor IMAP4." - -#: src/prefs_account.c:1456 -msgid "NNTP server is not entered." -msgstr "No se especificó el servidor NNTP." - -#: src/prefs_account.c:1462 -msgid "local mailbox filename is not entered." -msgstr "no se especificó el nombre de fichero del buzón local." - -#: src/prefs_account.c:1468 -msgid "mail command is not entered." -msgstr "no se especificó el comando de correo." - -#: src/prefs_common.c:735 -msgid "Creating common preferences window...\n" -msgstr "Creando ventana de preferencias comunes...\n" - -#: src/prefs_common.c:739 -msgid "Common Preferences" -msgstr "Preferencias comunes" - -#: src/prefs_common.c:764 -msgid "Display" -msgstr "Ver" - -#: src/prefs_common.c:766 -msgid "Message" -msgstr "Mensaje" - -#: src/prefs_common.c:772 -msgid "Interface" -msgstr "Interfaz" - -#: src/prefs_common.c:774 src/select-keys.c:324 -msgid "Other" -msgstr "Otras" - -#: src/prefs_common.c:817 src/prefs_common.c:980 -msgid "External program" -msgstr "Programa externo" - -#: src/prefs_common.c:826 -msgid "Use external program for incorporation" -msgstr "Usar un programa externo para incorporar" - -#: src/prefs_common.c:833 src/prefs_common.c:997 -msgid "Program path" -msgstr "Ruta al programa" - -#: src/prefs_common.c:845 -msgid "Local spool" -msgstr "Almacenamiento local" - -#: src/prefs_common.c:856 -msgid "Incorporate from spool" -msgstr "Incorporar del almacén" - -#: src/prefs_common.c:858 -msgid "Filter on incorporation" -msgstr "Filtrar al incorporar" - -#: src/prefs_common.c:866 -msgid "Spool directory" -msgstr "Directorio de almacén" - -#: src/prefs_common.c:884 -msgid "Auto-check new mail" -msgstr "Comprobar correo nuevo" - -#: src/prefs_common.c:886 -msgid "each" -msgstr "cada" - -#: src/prefs_common.c:898 -msgid "minute(s)" -msgstr "minuto(s)" - -#: src/prefs_common.c:907 -msgid "Check new mail on startup" -msgstr "Comprueba correo nuevo al inicio" - -#: src/prefs_common.c:910 -msgid "No error popup on receive error" -msgstr "No mostrar diálogo de error de recepción" - -#: src/prefs_common.c:920 -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:990 -msgid "Use external program for sending" -msgstr "Usar programa externo para enviar" - -#: src/prefs_common.c:1014 -msgid "Save sent messages to outbox" -msgstr "Salvar mensajes enviados en Salida" - -#: src/prefs_common.c:1016 -msgid "Queue messages that fail to send" -msgstr "Poner en cola los envios fallidos" - -#: src/prefs_common.c:1018 -msgid "Send return receipt on request" -msgstr "Enviar acuse de recibo si se solicita" - -#: src/prefs_common.c:1024 -msgid "Outgoing codeset" -msgstr "Conjunto de códigos para enviar" - -#: src/prefs_common.c:1039 -msgid "Automatic (Recommended)" -msgstr "Automático (Recomendado)" - -#: src/prefs_common.c:1040 -msgid "7bit ascii (US-ASCII)" -msgstr "ASCII de 7 bits (US-ASC_II)" - -#: src/prefs_common.c:1042 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:1044 -msgid "Western European (ISO-8859-1)" -msgstr "Europeo Occidental (ISO-8859-1)" - -#: src/prefs_common.c:1045 -msgid "Central European (ISO-8859-2)" -msgstr "Centroeuropeo (ISO-8859-2)" - -#: src/prefs_common.c:1046 -msgid "Baltic (ISO-8859-13)" -msgstr "Báltico (ISO-8859-13)" - -#: src/prefs_common.c:1047 -msgid "Baltic (ISO-8859-4)" -msgstr "Báltico (ISO-8859-4)" - -#: src/prefs_common.c:1048 -msgid "Greek (ISO-8859-7)" -msgstr "Griego (ISO-8859-7)" - -#: src/prefs_common.c:1049 -msgid "Turkish (ISO-8859-9)" -msgstr "Turco (ISO-8859-9)" - -#: src/prefs_common.c:1051 -msgid "Cyrillic (ISO-8859-5)" -msgstr "Cirílico (ISO-8859-5)" - -#: src/prefs_common.c:1053 -msgid "Cyrillic (KOI8-R)" -msgstr "Cirílico (KOI8-R)" - -#: src/prefs_common.c:1055 -msgid "Cyrillic (Windows-1251)" -msgstr "Cirílico (Windows-1251)" - -#: src/prefs_common.c:1056 -msgid "Cyrillic (KOI8-U)" -msgstr "Cirílico (KOI8-U)" - -#: src/prefs_common.c:1058 -msgid "Japanese (ISO-2022-JP)" -msgstr "Japonés (ISO-2022-JP)" - -#: src/prefs_common.c:1060 -msgid "Japanese (EUC-JP)" -msgstr "Japonés (EUC-JP)" - -#: src/prefs_common.c:1061 -msgid "Japanese (Shift_JIS)" -msgstr "Japonés (Shift_JIS)" - -#: src/prefs_common.c:1063 -msgid "Simplified Chinese (GB2312)" -msgstr "Chino simplificado (GB2312)" - -#: src/prefs_common.c:1064 -msgid "Traditional Chinese (Big5)" -msgstr "Chino tradicional (Big5)" - -#: src/prefs_common.c:1066 -msgid "Traditional Chinese (EUC-TW)" -msgstr "Chino tradicional (EUC-TW)" - -#: src/prefs_common.c:1067 -msgid "Chinese (ISO-2022-CN)" -msgstr "Chino (ISO-2022-CN)" - -#: src/prefs_common.c:1069 -msgid "Korean (EUC-KR)" -msgstr "Coreano (EUC-KR)" - -#: src/prefs_common.c:1150 -msgid "Select spelling checker location" -msgstr "Localización del corrector ortográfico" - -#: src/prefs_common.c:1289 -msgid " Quote format " -msgstr " Formato de citación " - -#: src/prefs_common.c:1303 -msgid "Insert signature automatically" -msgstr "Insertar firma automáticamente" - -#: src/prefs_common.c:1309 -msgid "Signature separator" -msgstr "Separador de firma" - -#: src/prefs_common.c:1327 -msgid "Wrap messages at" -msgstr "Recortar mensajes a los" - -#: src/prefs_common.c:1339 -msgid "characters" -msgstr "caracteres" - -#: src/prefs_common.c:1347 -msgid "Wrap quotation" -msgstr "Recortar citación" - -#: src/prefs_common.c:1349 -msgid "Wrap before sending" -msgstr "Recortar antes de enviar" - -#: src/prefs_common.c:1352 src/prefs_filtering.c:224 -msgid "Forward as attachment" -msgstr "Reenviar como adjunto" - -#: src/prefs_common.c:1355 -msgid "Automatically select account for mail replies" -msgstr "Selección automática de cuenta para las respuestas" - -#: src/prefs_common.c:1358 -msgid "Smart wrapping (EXPERIMENTAL)" -msgstr "Recorte inteligente (EXPERIMENTAL)" - -#. spell checker defaults -#: src/prefs_common.c:1361 -msgid "Global spelling checker settings" -msgstr "Configuración global del corrector ortográfico" - -#: src/prefs_common.c:1368 -msgid "Enable spell checker" -msgstr "Activar corrector ortográfico" - -#: src/prefs_common.c:1378 -msgid "Ispelll path" -msgstr "Ruta para ispell" - -#: src/prefs_common.c:1388 -msgid "..." -msgstr " ..." - -#: src/prefs_common.c:1401 -msgid "Dictionaries" -msgstr "Diccionarios" - -#: src/prefs_common.c:1466 -msgid "Font" -msgstr "Fuente" - -#: src/prefs_common.c:1475 -msgid "Text" -msgstr "Texto" - -#: src/prefs_common.c:1493 -msgid "Small" -msgstr "Pequeña" - -#: src/prefs_common.c:1512 -msgid "Normal" -msgstr "Normal" - -#: src/prefs_common.c:1531 -msgid "Bold" -msgstr "Negrita" - -#: src/prefs_common.c:1556 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "Traducir cabeceras (como `Desde:', `Asunto:')" - -#: src/prefs_common.c:1559 -msgid "Display unread number next to folder name" -msgstr "Ver el número de no leídos junto al nombre de la carpeta" - -#. ---- Summary ---- -#: src/prefs_common.c:1563 -msgid "Summary View" -msgstr "Vista resumen" - -#: src/prefs_common.c:1572 -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:1575 -msgid "Display sender using address book" -msgstr "Mostrar remitente usando la agenda" - -#: src/prefs_common.c:1577 -msgid "Enable horizontal scroll bar" -msgstr "Habilitar la barra de desplazamiento horizontal" - -#: src/prefs_common.c:1583 src/prefs_common.c:2287 src/prefs_common.c:2325 -msgid "Date format" -msgstr "Formato de fecha" - -#: src/prefs_common.c:1591 -msgid "... " -msgstr " ... " - -#: src/prefs_common.c:1607 -msgid " Set display item of summary... " -msgstr " Elementos visibles en cabecera... " - -#: src/prefs_common.c:1662 -msgid "Enable coloration of message" -msgstr "Permitir colores en el mensaje" - -#: src/prefs_common.c:1681 -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:1683 -msgid "Display header pane above message view" -msgstr "Mostrar vista resumen sobre los mensajes" - -#: src/prefs_common.c:1690 -msgid "Display short headers on message view" -msgstr "Cabeceras breves en la vista del mensaje" - -#: src/prefs_common.c:1710 -msgid "Line space" -msgstr "Interlineado" - -#: src/prefs_common.c:1724 src/prefs_common.c:1764 -msgid "pixel(s)" -msgstr "pixel(s)" - -#: src/prefs_common.c:1729 -msgid "Leave space on head" -msgstr "Dejar espacio de cabecera" - -#: src/prefs_common.c:1731 -msgid "Scroll" -msgstr "Desplazamiento" - -#: src/prefs_common.c:1738 -msgid "Half page" -msgstr "Media página" - -#: src/prefs_common.c:1744 -msgid "Smooth scroll" -msgstr "Desplazamiento suave" - -#: src/prefs_common.c:1750 -msgid "Step" -msgstr "Paso" - -#: src/prefs_common.c:1811 -msgid "Encrypt message by default" -msgstr "Encriptar el mensaje por defecto" - -#: src/prefs_common.c:1814 -msgid "Sign message by default" -msgstr "Firmar el mensaje por defecto" - -#: src/prefs_common.c:1817 -msgid "Automatically check signatures" -msgstr "Comprobar las firmas automáticamente" - -#: src/prefs_common.c:1820 -msgid "Show signature check result in a popup window" -msgstr "Mostrar diálogo de comprobación de firma" - -#: src/prefs_common.c:1824 -msgid "Grab input while entering a passphrase" -msgstr "Capturar la entrada mientras se introducen contraseñas" - -#: src/prefs_common.c:1829 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "Mostrar aviso al arrancar si no funciona GnuPG" - -#. create default signkey box -#: src/prefs_common.c:1836 -msgid "Default Sign Key" -msgstr "Clave de firma por defecto" - -#: src/prefs_common.c:1942 -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:1949 -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:1953 -msgid "Go to inbox after receiving new mail" -msgstr "Abrir entrada despues de recibir correo nuevo" - -#: src/prefs_common.c:1961 -msgid "Execute immediately when moving or deleting messages" -msgstr "Ejecutar inmediatamente movimientos o borrados de mensajes" - -#: src/prefs_common.c:1968 -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:1975 -msgid "Add address to destination when double-clicked" -msgstr "Añadir dirección al destino con doble click" - -#: src/prefs_common.c:1982 -msgid "Show receive Dialog" -msgstr "Mostrar diálogo de recepción" - -#: src/prefs_common.c:1992 -msgid "Always" -msgstr "Siempre" - -#: src/prefs_common.c:1993 -msgid "Only if a sylpheed window is active" -msgstr "Solo si esta activa la ventana de Sylpheed" - -#: src/prefs_common.c:1994 -msgid "Never" -msgstr "Nunca" - -#. On Exit -#: src/prefs_common.c:1999 -msgid "On exit" -msgstr "Al salir" - -#: src/prefs_common.c:2007 -msgid "Confirm on exit" -msgstr "Confirmar al salir" - -#: src/prefs_common.c:2014 -msgid "Empty trash on exit" -msgstr "Vaciar papelera al salir" - -#: src/prefs_common.c:2016 -msgid "Ask before emptying" -msgstr "Preguntar antes de vaciar" - -#: src/prefs_common.c:2020 -msgid "Warn if there are queued messages" -msgstr "Avisar si existen mensajes en cola" - -#: src/prefs_common.c:2059 -#, 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:2066 src/prefs_common.c:2091 src/prefs_common.c:2107 -msgid "Command" -msgstr "Comando" - -#: src/prefs_common.c:2084 -#, 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:2100 -#, 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:2257 -msgid "the full abbreviated weekday name" -msgstr "el dia de la semana abreviado" - -#: src/prefs_common.c:2258 -msgid "the full weekday name" -msgstr "el dia de la semana completo" - -#: src/prefs_common.c:2259 -msgid "the abbreviated month name" -msgstr "el nombre del mes abreviado" - -#: src/prefs_common.c:2260 -msgid "the full month name" -msgstr "el nombre del mes completo" - -#: src/prefs_common.c:2261 -msgid "the preferred date and time for the current locale" -msgstr "la fecha y hora preferida para la localización actual" - -#: src/prefs_common.c:2262 -msgid "the century number (year/100)" -msgstr "el número de siglo (año/100)" - -#: src/prefs_common.c:2263 -msgid "the day of the month as a decimal number" -msgstr "el dia del mes como número decimal" - -#: src/prefs_common.c:2264 -msgid "the hour as a decimal number using a 24-hour clock" -msgstr "la hora como número usando el reloj de 24 horas" - -#: src/prefs_common.c:2265 -msgid "the hour as a decimal number using a 12-hour clock" -msgstr "la hora como número usando el reloj de 12 horas" - -#: src/prefs_common.c:2266 -msgid "the day of the year as a decimal number" -msgstr "el dia del año como número decimal" - -#: src/prefs_common.c:2267 -msgid "the month as a decimal number" -msgstr "el mes como número decimal" - -#: src/prefs_common.c:2268 -msgid "the minute as a decimal number" -msgstr "el minuto como número decimal" - -#: src/prefs_common.c:2269 -msgid "either AM or PM" -msgstr "AM o PM" - -#: src/prefs_common.c:2270 -msgid "the second as a decimal number" -msgstr "el segundo como número decimal" - -#: src/prefs_common.c:2271 -msgid "the day of the week as a decimal number" -msgstr "el dia de la semana como número decimal" - -#: src/prefs_common.c:2272 -msgid "the preferred date for the current locale" -msgstr "la fecha preferida para la localización actual" - -#: src/prefs_common.c:2273 -msgid "the last two digits of a year" -msgstr "los dos últimos dígitos del año" - -#: src/prefs_common.c:2274 -msgid "the year as a decimal number" -msgstr "el año como número decimal" - -#: src/prefs_common.c:2275 -msgid "the time zone or name or abbreviation" -msgstr "zona horaria o nombre o abreviatura" - -#: src/prefs_common.c:2302 -msgid "Specifier" -msgstr "Especificador" - -#: src/prefs_common.c:2303 -msgid "Description" -msgstr "Descripción" - -#: src/prefs_common.c:2342 -msgid "Example" -msgstr "Ejemplo" - -#: src/prefs_common.c:2431 -msgid "Set message colors" -msgstr "Colores del mensaje" - -#: src/prefs_common.c:2439 -msgid "Colors" -msgstr "Colores" - -#: src/prefs_common.c:2479 -msgid "Quoted Text - First Level" -msgstr "Texto citado - Primer nivel" - -#: src/prefs_common.c:2485 -msgid "Quoted Text - Second Level" -msgstr "Texto citado - Segundo nivel" - -#: src/prefs_common.c:2491 -msgid "Quoted Text - Third Level" -msgstr "Texto citado - Tercer nivel" - -#: src/prefs_common.c:2497 -msgid "URI link" -msgstr "Enlace URI" - -#: src/prefs_common.c:2503 -msgid "Target folder" -msgstr "Carpeta destino" - -#: src/prefs_common.c:2510 -msgid "Recycle quote colors" -msgstr "Reutilizar colores de citación" - -#: src/prefs_common.c:2576 -msgid "Pick color for quotation level 1" -msgstr "Elejir color para el nivel de citado 1" - -#: src/prefs_common.c:2579 -msgid "Pick color for quotation level 2" -msgstr "Elejir color para el nivel de citado 2" - -#: src/prefs_common.c:2582 -msgid "Pick color for quotation level 3" -msgstr "Elejir color para el nivel de citado 3" - -#: src/prefs_common.c:2585 -msgid "Pick color for URI" -msgstr "Elejir color para URIs" - -#: src/prefs_common.c:2588 -msgid "Pick color for target folder" -msgstr "Elejir color para la carpeta destino" - -#: src/prefs_common.c:2727 src/prefs_matcher.c:1412 -msgid "Description of symbols" -msgstr "Descripción de símbolos" - -#: src/prefs_common.c:2766 -#, c-format -msgid "" -"DESCRIPTION\n" -"\n" -"Date\n" -"From\n" -"Full Name of Sender\n" -"First Name of Sender\n" -"Initial of Sender\n" -"Subject\n" -"To\n" -"Cc\n" -"Newsgroups\n" -"Message-ID\n" -"References\n" -"\n" -"Display the information\n" -"If the information x is set, displays expr\n" -"\n" -"Message body\n" -"Quoted message body\n" -"Message body without signature\n" -"Quoted message body without signature\n" -"%" -msgstr "" -"DESCRIPCIÓN\n" -"\n" -"Fecha\n" -"Desde\n" -"Nombre completo del remitente\n" -"Primer nombre del remitente\n" -"Inicial del remitente\n" -"Asunto\n" -"Para\n" -"Cc\n" -"Newsgroups\n" -"ID-mensaje\n" -"Referencias\n" -"\n" -"Muestra la información\n" -"Si la información x está, muestra expr\n" -"\n" -"Cuerpo del mensaje\n" -"Cuerpo del mensaje citado\n" -"Cuerpo del mensaje sin firma\n" -"Cuerpo del mensaje citado sin firma\n" -"%" - -#: src/prefs_common.c:2883 -msgid "Set display item" -msgstr "Indicar elemento visual" - -#: src/prefs_common.c:2900 src/prefs_filtering.c:219 -msgid "Mark" -msgstr "Marca" - -#: src/prefs_common.c:2902 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2903 -msgid "Number" -msgstr "Número" - -#: src/prefs_common.c:2904 src/prefs_scoring.c:252 src/summaryview.c:584 -msgid "Score" -msgstr "Puntos" - -#: src/prefs_common.c:2906 src/summaryview.c:574 -msgid "Date" -msgstr "Fecha" - -#: src/prefs_common.c:2907 src/prefs_matcher.c:140 src/summaryview.c:575 -msgid "From" -msgstr "Desde" - -#: src/prefs_common.c:2908 src/prefs_matcher.c:139 src/summaryview.c:576 -msgid "Subject" -msgstr "Asunto" - -#: src/prefs_common.c:2965 -msgid "Font selection" -msgstr "Selección de fuente" - -#: src/prefs_common.c:3147 -msgid "Compose Preferences" -msgstr "Preferencias de composición" - -#: src/prefs_common.c:3162 -msgid "Quote message when replying" -msgstr "Citar mensaje al responder" - -#: src/prefs_common.c:3168 -msgid "Quotation mark" -msgstr "Marca de citación" - -#: src/prefs_common.c:3181 -msgid "Quotation format:" -msgstr "Formato de citación:" - -#: src/prefs_common.c:3202 -msgid "Forward quotation mark" -msgstr "Marca de citación al redirijir" - -#: src/prefs_common.c:3215 -msgid "Forward format:" -msgstr "Formato al reenviar:" - -#: src/prefs_common.c:3237 -msgid " Description of symbols " -msgstr " Descripción de símbolos " - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "Cabeceras de usuario" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "Creando ventana de cabeceras de usuario...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "Configuración de cabeceras de usuario" - -#. value -#: src/prefs_customheader.c:213 src/prefs_matcher.c:390 -msgid "Value" -msgstr "Valor" - -#: src/prefs_customheader.c:322 -msgid "Reading custom header configuration...\n" -msgstr "Leyendo configuración de cabeceras de usuario...\n" - -#: src/prefs_customheader.c:367 -msgid "Writing custom header configuration...\n" -msgstr "Escribiendo configuración de cabeceras de usuario...\n" - -#: src/prefs_customheader.c:492 src/prefs_display_header.c:545 -#: src/prefs_filter.c:628 src/prefs_matcher.c:1008 -msgid "Header name is not set." -msgstr "No se estableció el nombre de cabecera" - -#: src/prefs_customheader.c:546 -msgid "Delete header" -msgstr "Borrar cabecera" - -#: src/prefs_customheader.c:547 -msgid "Do you really want to delete this header?" -msgstr "¿Quiere borrar realmente esta cabecera?" - -#: src/prefs_display_header.c:190 -msgid "Creating display header setting window...\n" -msgstr "Creando ventana de visualización de propiedades de cabeceras...\n" - -#: src/prefs_display_header.c:213 -msgid "Display header setting" -msgstr "Ver propiedades de cabeceras" - -#. header name -#: src/prefs_display_header.c:240 src/prefs_matcher.c:369 -msgid "Header name" -msgstr "Cabecera" - -#: src/prefs_display_header.c:272 -msgid "Displayed Headers" -msgstr "Cabeceras mostradas" - -#: src/prefs_display_header.c:330 -msgid "Hidden headers" -msgstr "Cabeceras ocultas" - -#: src/prefs_display_header.c:360 -msgid "Show all unspecified headers" -msgstr "Mostrar todas las cabeceras" - -#: src/prefs_display_header.c:385 -msgid "Reading configuration for displaying headers...\n" -msgstr "Leyendo configuración para mostrar cabeceras...\n" - -#: src/prefs_display_header.c:423 -msgid "Writing configuration for displaying headers...\n" -msgstr "Escribiendo configuración para mostrar cabeceras...\n" - -#: src/prefs_display_header.c:555 -msgid "This header is already in the list." -msgstr "Esa cabecera ya existe en la lista." - -#: src/prefs_filter.c:189 src/prefs_filtering.c:309 src/prefs_matcher.c:287 -#: src/prefs_scoring.c:185 -msgid "Registered rules" -msgstr "Reglas registradas" - -#: src/prefs_filter.c:191 -msgid "Creating filter setting window...\n" -msgstr "Creando ventana de configuración de filtrado...\n" - -#: src/prefs_filter.c:218 -msgid "Filter setting" -msgstr "Preferencias de filtrado" - -#: src/prefs_filter.c:243 -msgid "Operator" -msgstr "Operador" - -#: src/prefs_filter.c:281 src/prefs_filter.c:641 src/prefs_filter.c:786 -#: src/prefs_filter.c:798 -msgid "(none)" -msgstr "(ninguna)" - -#: src/prefs_filter.c:287 -msgid "Keyword" -msgstr "Palabra" - -#: src/prefs_filter.c:308 src/prefs_matcher.c:420 -msgid "Predicate" -msgstr "Predicado" - -#: src/prefs_filter.c:320 src/prefs_filter.c:331 src/prefs_filter.c:650 -#: src/prefs_filter.c:653 src/prefs_filter.c:803 src/prefs_filter.c:806 -#: src/prefs_matcher.c:126 -msgid "contains" -msgstr "contiene" - -#: src/prefs_filter.c:320 src/prefs_filter.c:331 src/prefs_filter.c:803 -#: src/prefs_filter.c:806 -msgid "not contain" -msgstr "no contiene" - -#: src/prefs_filter.c:347 src/prefs_filtering.c:456 -msgid "Destination" -msgstr "Destino" - -#: src/prefs_filter.c:371 -msgid "Use regex" -msgstr "Usar exp.reg." - -#: src/prefs_filter.c:375 -msgid "Don't receive" -msgstr "No recibir" - -#: src/prefs_filter.c:400 src/prefs_filtering.c:516 src/prefs_matcher.c:490 -#: src/prefs_scoring.c:277 -msgid "Register" -msgstr "Registrar" - -#: src/prefs_filter.c:406 src/prefs_filtering.c:522 src/prefs_matcher.c:496 -#: src/prefs_scoring.c:283 -msgid " Substitute " -msgstr " Sustituir " - -#: src/prefs_filter.c:493 -msgid "Reading filter configuration...\n" -msgstr "Leyendo configuración de filtrado...\n" - -#: src/prefs_filter.c:529 -msgid "Writing filter configuration...\n" -msgstr "Escribiendo configuración de filtrado...\n" - -#: src/prefs_filter.c:572 src/prefs_filtering.c:649 src/prefs_filtering.c:667 -#: src/prefs_matcher.c:610 src/prefs_matcher.c:684 src/prefs_scoring.c:459 -#: src/prefs_scoring.c:491 -msgid "(New)" -msgstr "(Nueva)" - -#: src/prefs_filter.c:623 src/prefs_filtering.c:760 -msgid "Destination is not set." -msgstr "No se especifico destinatario." - -#: src/prefs_filter.c:734 src/prefs_filtering.c:834 src/prefs_scoring.c:644 -msgid "Delete rule" -msgstr "Borrar regla" - -#: src/prefs_filter.c:735 src/prefs_filtering.c:835 src/prefs_scoring.c:645 -msgid "Do you really want to delete this rule?" -msgstr "¿Quiere borrar realmente esta regla?" - -#: src/prefs_filtering.c:216 -msgid "Move" -msgstr "Mover" - -#: src/prefs_filtering.c:217 -msgid "Copy" -msgstr "Copiar" - -#: src/prefs_filtering.c:220 -msgid "Unmark" -msgstr "Desmarcar" - -#: src/prefs_filtering.c:221 -msgid "Mark as read" -msgstr "Marcar como leído" - -#: src/prefs_filtering.c:222 -msgid "Mark as unread" -msgstr "Marcar como no leído" - -#: src/prefs_filtering.c:226 src/prefs_filtering.c:466 -msgid "Color" -msgstr "Color" - -#: src/prefs_filtering.c:311 -msgid "Creating filtering setting window...\n" -msgstr "Creando ventana de de configuración de filtrado...\n" - -#: src/prefs_filtering.c:330 -msgid "Filtering setting" -msgstr "Configurar filtros" - -#: src/prefs_filtering.c:349 src/prefs_scoring.c:225 -msgid "Condition" -msgstr "Condición" - -#: src/prefs_filtering.c:364 src/prefs_scoring.c:240 -msgid "Define ..." -msgstr "Definir ..." - -#: src/prefs_filtering.c:376 -msgid "Action" -msgstr "Acción" - -#: src/prefs_filtering.c:416 src/progressdialog.c:52 -msgid "Account" -msgstr "Cuenta" - -#: src/prefs_filtering.c:482 -msgid "Select ..." -msgstr "Seleccionar ..." - -#: src/prefs_filtering.c:489 src/prefs_matcher.c:402 -msgid "Info ..." -msgstr "Información ..." - -#: src/prefs_filtering.c:714 src/prefs_filtering.c:780 src/prefs_scoring.c:538 -#: src/prefs_scoring.c:576 src/prefs_scoring.c:622 -msgid "Match string is not valid." -msgstr "El patrón no es válido." - -#: src/prefs_filtering.c:743 src/prefs_scoring.c:561 src/prefs_scoring.c:607 -msgid "Score is not set." -msgstr "Puntuación no establecida." - -#: src/prefs_matcher.c:117 -msgid "or" -msgstr "o" - -#: src/prefs_matcher.c:117 -msgid "and" -msgstr "y" - -#: src/prefs_matcher.c:126 -msgid "does not contain" -msgstr "no contiene" - -#: src/prefs_matcher.c:135 -msgid "yes" -msgstr "si" - -#: src/prefs_matcher.c:135 -msgid "no" -msgstr "no" - -#: src/prefs_matcher.c:139 -msgid "All messages" -msgstr "Todos los mensajes" - -#: src/prefs_matcher.c:140 -msgid "To" -msgstr "Para" - -#: src/prefs_matcher.c:140 -msgid "To or Cc" -msgstr "Para o Cc" - -#: src/prefs_matcher.c:141 -msgid "Newsgroups" -msgstr "Grupos de noticias" - -#: src/prefs_matcher.c:141 -msgid "In reply to" -msgstr "En respuesta a" - -#: src/prefs_matcher.c:141 -msgid "References" -msgstr "Referencias" - -#: src/prefs_matcher.c:142 -msgid "Age greater than" -msgstr "Más antiguo que" - -#: src/prefs_matcher.c:142 -msgid "Age lower than" -msgstr "Más nuevo que" - -#: src/prefs_matcher.c:143 -msgid "Headers part" -msgstr "Sección cabeceras" - -#: src/prefs_matcher.c:144 -msgid "Body part" -msgstr "Sección cuerpo" - -#: src/prefs_matcher.c:144 -msgid "Whole message" -msgstr "Mensaje completo" - -#: src/prefs_matcher.c:145 -msgid "Unread flag" -msgstr "Marca `No leído`" - -#: src/prefs_matcher.c:145 -msgid "New flag" -msgstr "Marca `Nuevo`" - -#: src/prefs_matcher.c:146 -msgid "Marked flag" -msgstr "Marca `Marcado`" - -#: src/prefs_matcher.c:146 -msgid "Deleted flag" -msgstr "Marca `Borrado`" - -#: src/prefs_matcher.c:147 -msgid "Replied flag" -msgstr "Marca `Respondido`" - -#: src/prefs_matcher.c:147 -msgid "Forwarded flag" -msgstr "Marca `Reenviado`" - -#: src/prefs_matcher.c:148 -msgid "Score greater than" -msgstr "Puntuación mayor que" - -#: src/prefs_matcher.c:148 -msgid "Score lower than" -msgstr "Puntuación menor que" - -#: src/prefs_matcher.c:289 -msgid "Creating matcher setting window...\n" -msgstr "Creando ventana configuración de patrones...\n" - -#: src/prefs_matcher.c:308 -msgid "Condition setting" -msgstr "Establecer condición" - -#. criteria combo box -#: src/prefs_matcher.c:336 -msgid "Match type" -msgstr "Tipo de coincidencia" - -#: src/prefs_matcher.c:472 src/summary_search.c:172 -msgid "Case sensitive" -msgstr "Mayús./minús." - -#: src/prefs_matcher.c:473 -msgid "Use regexp" -msgstr "Usar exp.reg." - -#. boolean operation -#: src/prefs_matcher.c:511 -msgid "Boolean Op" -msgstr "Op. lógico" - -#: src/prefs_matcher.c:994 -msgid "Value is not set." -msgstr "Valor no establecido." - -#: src/prefs_matcher.c:1444 -msgid "" -"%\n" -"Subject\n" -"From\n" -"To\n" -"Cc\n" -"Date\n" -"Message-ID\n" -"Newsgroups\n" -"References\n" -"Filename - should not be modified\n" -"new line\n" -"escape character for quotes\n" -"quote character\n" -"%" -msgstr "" -"%\n" -"Asunto\n" -"Desde\n" -"Para\n" -"Cc\n" -"Fecha\n" -"ID-mensaje\n" -"Grupos\n" -"Referencias\n" -"Fichero - no debe modificarse\n" -"línea nueva\n" -"caracter de escape para citas\n" -"caracter de cita\n" -"%" - -#: src/prefs_scoring.c:187 -msgid "Creating scoring setting window...\n" -msgstr "Creando ventana de preferencias de puntuación...\n" - -#: src/prefs_scoring.c:206 -msgid "Scoring setting" -msgstr "Establecer puntuación" - -#: src/prefs_scoring.c:340 -msgid "Kill score" -msgstr "Muerte por puntos" - -#: src/prefs_scoring.c:352 -msgid "Important score" -msgstr "Relevante por puntos" - -#: src/prefs_scoring.c:567 src/prefs_scoring.c:613 -msgid "Match string is not set." -msgstr "Patrón no establecido." - -#: src/procmime.c:685 -msgid "Code conversion failed.\n" -msgstr "Conversión de códigos fallida.\n" - -#: src/procmsg.c:138 src/procmsg.c:154 -msgid "Cache data is corrupted\n" -msgstr "La caché de datos esta corrupta\n" - -#: src/procmsg.c:203 -msgid "\tNo cache file\n" -msgstr "\tNo hay fichero caché\n" - -#: src/procmsg.c:210 -msgid "\tReading summary cache..." -msgstr "\tLeyendo caché de cabeceras..." - -#: src/procmsg.c:215 -msgid "Cache version is different. Discarding it.\n" -msgstr "La versión en caché es distinta. Descartándola.\n" - -#: src/procmsg.c:283 -msgid "\tMarking the messages..." -msgstr "\tMarcando los mensajes..." - -#: src/procmsg.c:327 -#, c-format -msgid "\t%d new message(s)\n" -msgstr "\t%d nuevo(s) mensaje(s)\n" - -#: src/procmsg.c:463 -msgid "Mark file not found.\n" -msgstr "Fichero de marcas no encontrado.\n" - -#: src/procmsg.c:465 -#, 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:481 -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:486 -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:669 -msgid "Sending queued message failed.\n" -msgstr "Fallo enviando mensaje en cola.\n" - -#: src/procmsg.c:727 -#, 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:53 -msgid "Status" -msgstr "Estado" - -#: src/progressdialog.c:55 -msgid "Creating progress dialog...\n" -msgstr "Creando diálogo de progreso...\n" - -#: src/recv.c:112 -msgid "error occurred while retrieving data.\n" -msgstr "ocurrió un error mientras se obtenian datos.\n" - -#: src/recv.c:152 src/recv.c:191 src/recv.c:207 -msgid "Can't write to file.\n" -msgstr "No se puede escribir al fichero.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 src/sigstatus.c:219 -msgid "Oops: Signature not verified" -msgstr "Oops: firma no verificada" - -#: src/rfc2015.c:140 src/rfc2015.c:175 src/sigstatus.c:222 -msgid "No signature found" -msgstr "No se encontró firma" - -#: src/rfc2015.c:143 src/sigstatus.c:225 -msgid "Good signature" -msgstr "Firma válida" - -#: src/rfc2015.c:146 src/sigstatus.c:228 -msgid "BAD signature" -msgstr "Firma INVÁLIDA" - -#: src/rfc2015.c:149 src/rfc2015.c:184 src/sigstatus.c:231 -msgid "No public key to verify the signature" -msgstr "No hay clave pública para verificar la firma" - -#: src/rfc2015.c:152 src/rfc2015.c:187 src/sigstatus.c:234 -msgid "Error verifying the signature" -msgstr "Error al verificar la firma" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "Resultados diferentes para las firmas" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "Error: Estado desconocido" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "Firma válida de \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "Firma INVÁLIDA de \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "No encuentro ID de usuario para esta clave." - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr " aka \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "Firma hecha %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "Huella de clave: %s\n" - -#: src/scoring.c:295 -msgid "Reading headers configuration...\n" -msgstr "Leyendo configuración de cabeceras...\n" - -#. debug -#: src/scoring.c:347 -#, c-format -msgid "syntax error : %s\n" -msgstr "error de sintaxis : %s\n" - -#: src/scoring.c:423 -msgid "Writing scoring configuration...\n" -msgstr "Escribiendo configuración de puntuación...\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "Seleccione clave para `%s'" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "Recogiendo info para `%s' ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "Seleccione teclas" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "ID tecla" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "Val" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "Seleccionar" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "Añadir clave" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "Teclee otro usuario o ID-clave\n" - -#: src/send.c:166 -#, c-format -msgid "Using command to send mail: %s ...\n" -msgstr "Usando comando para enviar: %s ...\n" - -#: src/send.c:183 -msgid "Mail sent successfully ...\n" -msgstr "Mensaje enviado con éxito...\n" - -#: src/send.c:228 -msgid "Queued message header is broken.\n" -msgstr "Cabecera corrupta en el mensaje en cola.\n" - -#: src/send.c:237 -msgid "Account not found. Using current account...\n" -msgstr "Cuenta no encontrada. Usando la cuenta actual...\n" - -#: src/send.c:258 -msgid "Account not found.\n" -msgstr "Cuenta no encontrada.\n" - -#: src/send.c:354 -#, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "Conectando con el servidor SMTP: %s ..." - -#: src/send.c:358 -msgid "Connecting" -msgstr "Conectando" - -#: src/send.c:371 -msgid "Sending MAIL FROM..." -msgstr "Enviando MAIL FROM..." - -#: src/send.c:372 -msgid "Sending" -msgstr "Enviando" - -#: src/send.c:379 -msgid "Sending RCPT TO..." -msgstr "Enviando RCPT TO..." - -#: src/send.c:386 -msgid "Sending DATA..." -msgstr "Enviando DATA..." - -#: src/send.c:402 -#, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "Enviando mensaje (%d / %d bytes)" - -#: src/send.c:419 -msgid "Quitting..." -msgstr "Terminando..." - -#: src/send.c:449 -#, 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:456 -msgid "SSL connection failed" -msgstr "Conexión SSL fallida" - -#: src/send.c:466 -msgid "Error occurred while sending HELO\n" -msgstr "Ocurrió algún error enviando HELO\n" - -#: src/send.c:477 -msgid "Error occurred while sending STARTTLS\n" -msgstr "Ocurrió algún error enviando STARTTLS\n" - -#: src/send.c:497 -msgid "Sending message" -msgstr "Enviando mensaje" - -#: 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/sigstatus.c:129 -msgid "Checking signature" -msgstr "Verificando firma" - -#: 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: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:325 -msgid "/M_ove..." -msgstr "/_Mover..." - -#: src/summaryview.c:326 -msgid "/_Copy..." -msgstr "/_Copiar..." - -#: src/summaryview.c:328 -msgid "/E_xecute" -msgstr "/E_jecutar" - -#: src/summaryview.c:329 -msgid "/_Mark" -msgstr "/_Marcar" - -#: src/summaryview.c:330 -msgid "/_Mark/_Mark" -msgstr "/_Marcar/_Marcar" - -#: src/summaryview.c:331 -msgid "/_Mark/_Unmark" -msgstr "/_Marcar/_Desmarcar" - -#: src/summaryview.c:332 -msgid "/_Mark/---" -msgstr "/_Marcar/---" - -#: src/summaryview.c:333 -msgid "/_Mark/Mark as unr_ead" -msgstr "/_Marcar/Marcar como _no leído" - -#: src/summaryview.c:334 -msgid "/_Mark/Mark as rea_d" -msgstr "/_Marcar/Marcar como _leído" - -#: src/summaryview.c:336 -msgid "/_Mark/Mark all read" -msgstr "/_Marcar/Marcar todos leídos" - -#: src/summaryview.c:338 -msgid "/_Mark/Ignore thread" -msgstr "/_Marcar/_Ignorar hilo" - -#: src/summaryview.c:339 -msgid "/_Mark/Unignore thread" -msgstr "/_Marcar/_No ignorar hilo" - -#: src/summaryview.c:342 -msgid "/_Reply" -msgstr "/_Responder" - -#: src/summaryview.c:343 -msgid "/Repl_y to sender" -msgstr "/Responder al _remitente" - -#: src/summaryview.c:344 -msgid "/Follow-up and reply to" -msgstr "/Redirijir y responder a" - -#: src/summaryview.c:345 -msgid "/Reply to a_ll" -msgstr "/Responder a _todos" - -#: src/summaryview.c:346 -msgid "/_Forward" -msgstr "/Rediri_gir" - -#: src/summaryview.c:347 -msgid "/Forward as a_ttachment" -msgstr "/Reenviar como ad_junto" - -#: src/summaryview.c:350 -msgid "/Open in new _window" -msgstr "/Abrir en ventana _nueva" - -#: src/summaryview.c:351 -msgid "/View so_urce" -msgstr "/Ver _fuente" - -#: src/summaryview.c:352 -msgid "/Show all _header" -msgstr "/Mostrar todas las cabeceras" - -#: src/summaryview.c:353 -msgid "/Re-_edit" -msgstr "/Re_editar" - -#: src/summaryview.c:356 -msgid "/_Print..." -msgstr "/_Imprimir..." - -#: src/summaryview.c:358 -msgid "/Select _all" -msgstr "/_Seleccionar todo" - -#: src/summaryview.c:497 -msgid "Label" -msgstr "Etiqueta" - -#: src/summaryview.c:543 -msgid "M" -msgstr "x" - -#: src/summaryview.c:543 -msgid "U" -msgstr "N" - -#: src/summaryview.c:558 -msgid "Creating summary view...\n" -msgstr "Creando vista de cabeceras...\n" - -#: src/summaryview.c:573 -msgid "No." -msgstr "No." - -#: src/summaryview.c:878 -msgid "Process mark" -msgstr "Procesar marcas" - -#: src/summaryview.c:879 -msgid "Some marks are left. Process it?" -msgstr "Queda alguna marca. ¿Procesarla?" - -#: src/summaryview.c:908 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"carpeta vacía\n" -"\n" - -#: src/summaryview.c:920 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Revisando carpeta (%s)..." - -#: src/summaryview.c:1214 -msgid "No unread message" -msgstr "No hay mensajes sin leer" - -#: src/summaryview.c:1215 -msgid "No unread message found. Go to next folder?" -msgstr "No hay mensajes sin leer. ¿Ir a la carpeta siguiente?" - -#: src/summaryview.c:1239 src/summaryview.c:1269 -msgid "No more marked messages" -msgstr "No hay más mensajes marcados" - -#: src/summaryview.c:1240 -msgid "No marked message found. Search from the beginning?" -msgstr "No hay mensajes marcados. ¿Buscar desde el principio?" - -#: src/summaryview.c:1248 src/summaryview.c:1278 -msgid "No marked messages." -msgstr "No hay mensajes marcados." - -#: src/summaryview.c:1270 -msgid "No marked message found. Search from the end?" -msgstr "No hay mensajes marcados. ¿Buscar desde el final?" - -#: src/summaryview.c:1458 src/summaryview.c:1460 -msgid "Attracting messages by subject..." -msgstr "Agrupando mensajes por asunto..." - -#: src/summaryview.c:1603 -#, c-format -msgid "%d deleted" -msgstr "%d borrados" - -#: src/summaryview.c:1607 -#, c-format -msgid "%s%d moved" -msgstr "%s%d movidos" - -#: src/summaryview.c:1608 src/summaryview.c:1615 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1613 -#, c-format -msgid "%s%d copied" -msgstr "%s%d copiado" - -#: src/summaryview.c:1630 -msgid " item(s) selected" -msgstr " elemento(s) seleccionado(s)" - -#: src/summaryview.c:1641 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d nuevos, %d no leídos, %d totales (%s)" - -#: src/summaryview.c:1647 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d nuevos, %d no leídos, %d totales" - -#: src/summaryview.c:1697 src/summaryview.c:1698 -msgid "Sorting summary..." -msgstr "Ordenando cabeceras..." - -#: src/summaryview.c:1764 -msgid "\tSetting summary from message data..." -msgstr "\tExtrayendo cabeceras de los mensajes..." - -#: src/summaryview.c:1766 -msgid "Setting summary from message data..." -msgstr "Resumiendo los mensajes..." - -#: src/summaryview.c:2000 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "Escribiendo caché resumen (%s)..." - -#: src/summaryview.c:2068 -msgid "(No Date)" -msgstr "(Sin fecha)" - -#: src/summaryview.c:2387 -#, c-format -msgid "Message %d is marked\n" -msgstr "Mensaje %d marcado\n" - -#: src/summaryview.c:2418 -#, c-format -msgid "Message %d is marked as read\n" -msgstr "Mensaje %d marcado como leído\n" - -#: src/summaryview.c:2462 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Mensaje %d marcado como no leído\n" - -#: src/summaryview.c:2516 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Mensaje %s/%d marcado para borrar\n" - -#: src/summaryview.c:2530 -msgid "Current folder is Trash." -msgstr "La carpeta actual es Papelera." - -#: src/summaryview.c:2552 src/summaryview.c:2554 -msgid "Deleting duplicated messages..." -msgstr "Borrando mensajes duplicados..." - -#: src/summaryview.c:2612 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Mensaje %s/%d desmarcado\n" - -#: src/summaryview.c:2671 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "Mensaje %d marcado para mover a %s\n" - -#: src/summaryview.c:2683 -msgid "Destination is same as current folder." -msgstr "El destino es el mismo que la carpeta actual." - -#: src/summaryview.c:2757 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "Mensaje %d marcado para copiar a %s\n" - -#: src/summaryview.c:2770 -msgid "Destination to copy is same as current folder." -msgstr "El destino de copia es la carpeta actual." - -#: src/summaryview.c:2805 -msgid "Selecting all messages..." -msgstr "Seleccionando todos los mensajes..." - -#: src/summaryview.c:2859 -msgid "Print" -msgstr "Imprimir" - -#: src/summaryview.c:2860 -#, 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:2866 -#, 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:3102 src/summaryview.c:3103 -msgid "Building threads..." -msgstr "Construyendo jerarquía..." - -#: src/summaryview.c:3125 src/summaryview.c:3126 -msgid "Unthreading..." -msgstr "Deshaciendo jerarquía..." - -#: src/summaryview.c:3148 -msgid "Unthreading for execution..." -msgstr "Deshaciendo jerarquía para ejecución..." - -#: src/summaryview.c:3244 -msgid "filtering..." -msgstr "filtrando..." - -#: src/summaryview.c:3245 -msgid "Filtering..." -msgstr "Filtrando..." - -#: src/summaryview.c:3377 -#, c-format -msgid "Go to %s\n" -msgstr "Ir a %s\n" - -#: src/summaryview.c:3733 -msgid "Add sender to address book" -msgstr "Añadir remitente a la agenda" - -#: src/summaryview.c:3979 -#, c-format -msgid "Message %d is marked as ignore thread\n" -msgstr "Mensaje %d está marcado para ignorar hilo\n" - -#: src/summaryview.c:4010 -#, c-format -msgid "Message %d is marked as unignore thread\n" -msgstr "Mensaje %d esta marcado para no ignorar hilo\n" - -#: src/textview.c:139 -msgid "Creating text view...\n" -msgstr "Creando vista de texto...\n" - -#: src/textview.c:371 -msgid "To save this part, pop up the context menu with " -msgstr "Para salvar esta parte, abra el menu contextual con el " - -#: src/textview.c:372 -msgid "right click and select `Save as...', " -msgstr "botón derecho y seleccione `Salvar como...', " - -#: src/textview.c:373 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"o pulse la tecla `y'.\n" -"\n" - -#: src/textview.c:375 -msgid "To display this part as a text message, select " -msgstr "Para ver esta parte como un mensaje de texto, seleccione " - -#: src/textview.c:376 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"`Ver como texto', o pulse la tecla `t'.\n" -"\n" - -#: src/textview.c:378 -msgid "To open this part with external program, select " -msgstr "Para abrir esta parte con un programa externo seleccione " - -#: src/textview.c:379 -msgid "`Open' or `Open with...', " -msgstr "`Abrir' o `Abrir con...', " - -#: src/textview.c:380 -msgid "or double-click, or click the center button, " -msgstr "o doble-click, o pulse el botón central, " - -#: src/textview.c:381 -msgid "or press `l' key." -msgstr "o pulse la tecla `l'." - -#: src/textview.c:400 -msgid "This signature has not been checked yet.\n" -msgstr "Esta firma aún no ha sido verificada.\n" - -#: src/textview.c:401 -msgid "To check it, pop up the context menu with\n" -msgstr "Para verificarla, abra el menu contextual con\n" - -#: src/textview.c:402 -msgid "right click and select `Check signature'.\n" -msgstr "el botón derecho y seleccione `Verificar firma'.\n" - -#: src/utils.c:1591 -#, c-format -msgid "File copy from %s to %s failed.\n" -msgstr "La copia de %s a %s ha fallado.\n" - -#: src/utils.c:1689 -#, c-format -msgid "move_file(): file %s already exists." -msgstr "move_file(): el fichero %s ya existe." - -#: src/utils.c:1830 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "La orden de apertura de un URI es inválida: `%s'" - -#: src/ssl.c:41 -msgid "SSLv23 not available\n" -msgstr "SSLv23 no está disponible\n" - -#: src/ssl.c:43 -msgid "SSLv23 available\n" -msgstr "SSLv23 disponible\n" - -#: src/ssl.c:48 -msgid "TLSv1 not available\n" -msgstr "TLSv1 no está disponible\n" - -#: src/ssl.c:50 -msgid "TLSv1 available\n" -msgstr "TLSv1 disponible\n" - -#: src/ssl.c:75 src/ssl.c:82 -msgid "SSL method not available\n" -msgstr "Método SSL no disponible\n" - -#: src/ssl.c:88 -msgid "Unknown SSL method *PROGRAM BUG*\n" -msgstr "Método SSL desconocido *ERROR EN EL PROGRAMA*\n" - -#: src/ssl.c:94 -msgid "Error creating ssl context\n" -msgstr "Error creando el contexto SSL\n" - -#: src/ssl.c:101 -#, c-format -msgid "SSL connect failed (%s)\n" -msgstr "Conexión SSL fallida (%s)\n" - -#. Get the cipher -#: src/ssl.c:108 -#, c-format -msgid "SSL connection using %s\n" -msgstr "Conexión SSL usando %s\n" - -#: src/ssl.c:115 -msgid "Server certificate:\n" -msgstr "Certificado del servidor:\n" - -#: src/ssl.c:118 -#, c-format -msgid " Subject: %s\n" -msgstr " Asunto: %s\n" - -#: src/ssl.c:123 -#, c-format -msgid " Issuer: %s\n" -msgstr " Generador: %s\n" - -#~ msgid "SSL disabled\n" -#~ msgstr "SSL deshabilitado\n" - -#~ msgid "SSL loaded: \n" -#~ msgstr "SSL cargado: \n" - -#~ msgid "Date Format" -#~ msgstr "Formato de fecha" - -#~ msgid "Date Format Description" -#~ msgstr "Descripción del formato de fecha" - -#~ msgid "Customize" -#~ msgstr "Configurar" - -#~ msgid "done." -#~ msgstr "hecho." - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ "Begin forwarded message:\n" -#~ "\n" -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ "Inicio mensaje redirijido:\n" -#~ "\n" - -#~ msgid "/Remove _news server" -#~ msgstr "/_Eliminar servidor de noticias" - -#~ msgid "Delete IMAP4 server" -#~ msgstr "Borrar servidor IMAP4" - -#~ msgid "Really delete news server `%s'?" -#~ msgstr "¿Eliminar el servidor de noticias `%s'?" - -#~ msgid "Delete news server" -#~ msgstr "Eliminar servidor de noticias" - -#~ msgid "can't get the next uid of folder: %s\n" -#~ msgstr "no se puede obtener el siguiente uid de la carpeta: %s\n" - -#~ msgid "Incorporate new mail" -#~ msgstr "Incorporar correo nuevo" - -#~ msgid "Reply all" -#~ msgstr "Traer" - -#~ msgid "Prefs" -#~ msgstr "Preferencias" - -#~ msgid "Common preference" -#~ msgstr "Preferencias comunes" - -#~ msgid "Automatic" -#~ msgstr "Automático" - -#~ msgid "Quotation" -#~ msgstr "Citación" - -#~ 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" -#~ "%" - -#~ msgid "deleting message %d...\n" -#~ msgstr "borrando mensaje %d...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/_Ver/_Herramientas/_Ocultar" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/_Mensaje/_Marcar/Marcar como leído" - -#~ msgid "deleting article %d...\n" -#~ msgstr "borrando artículo %d...\n" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/_Marcar/Marcar como _leído" - -#~ msgid "Show other headers" -#~ msgstr "Mostrar otras cabeceras" - -#~ msgid "Receive at getting from all accounts" -#~ msgstr "Recibir al obtener de todas las cuentas" - -#~ 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" - -#~ msgid "Enable smooth scrolling on the message view" -#~ msgstr "Habilitar desplazamiento suave en el visor de mensajes" - -#~ msgid "SunMonTueWedThuFriSat" -#~ msgstr "DomLunMarMieJueVieSab" - -#~ 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 "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 "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 "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 "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/_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.po b/po/fr.po deleted file mode 100644 index b2e1ec1e0..000000000 --- a/po/fr.po +++ /dev/null @@ -1,4296 +0,0 @@ -# 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> -# Updated by : P'tit Lu <ptitlu@ptitlu.org> -# -msgid "" -msgstr "" -"Project-Id-Version: sylpheed\n" -"POT-Creation-Date: 2001-06-20 17:53+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:90 -msgid "About" -msgstr "A propos" - -#: src/about.c:199 -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:205 -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:210 -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:214 -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:220 -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:226 -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:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1476 src/compose.c:3132 src/export.c:185 src/foldersel.c:176 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:334 src/main.c:342 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "OK" -msgstr "OK" - -#: src/account.c:101 -msgid "Reading all config for each account...\n" -msgstr "Lecture de la configuration des comptes...\n" - -#: src/account.c:116 -#, c-format -msgid "Found label: %s\n" -msgstr "Label trouvé : %s\n" - -#: src/account.c:208 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" -"Des fenêtres de message sont ouvertes.\n" -"Veuillez fermer toutes les fenêtres d'écriture avant d'éditer les comptes." - -#: src/account.c:214 -msgid "Opening account edit window...\n" -msgstr "Ouverture de la fenêtre d'édition de compte...\n" - -#: src/account.c:361 -msgid "Creating account edit window...\n" -msgstr "Création de la fenêtre d'édition de compte...\n" - -#: src/account.c:366 -msgid "Edit accounts" -msgstr "Edition des comptes" - -#: src/account.c:394 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2244 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "Nom" - -#: src/account.c:395 src/prefs_account.c:632 -msgid "Protocol" -msgstr "Protocole" - -#: src/account.c:396 -msgid "Server" -msgstr "Serveur" - -#: src/account.c:415 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "Ajout" - -#: src/account.c:421 -msgid "Edit" -msgstr "Edition" - -#: src/account.c:427 src/prefs_customheader.c:247 -msgid " Delete " -msgstr " Suppression" - -#: src/account.c:433 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "Bas" - -#: src/account.c:439 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "Haut" - -#: src/account.c:453 -msgid " Set as usually used account " -msgstr " Défini comme compte courant " - -#: src/account.c:459 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "Fermer" - -#: src/account.c:513 -msgid "Delete account" -msgstr "Suppression du compte" - -#: src/account.c:514 -msgid "Do you really want to delete this account?" -msgstr "Voulez-vous vraiment supprimer ce compte ?" - -#: src/account.c:515 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3306 src/folderview.c:1448 src/folderview.c:1491 -#: src/folderview.c:1590 src/folderview.c:1631 src/folderview.c:1730 -#: src/folderview.c:1763 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "Oui" - -#: src/account.c:515 src/compose.c:3306 src/folderview.c:1448 -#: src/folderview.c:1491 src/folderview.c:1590 src/folderview.c:1631 -#: src/folderview.c:1730 src/folderview.c:1763 -msgid "+No" -msgstr "+Non" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -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:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -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:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/_Fichier/_Fermeture" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/_Aide" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -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:369 -#: src/folderview.c:206 src/folderview.c:208 src/folderview.c:217 -#: src/folderview.c:219 src/folderview.c:228 src/folderview.c:230 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/_Edition" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/_Suppression" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "Adresse E-Mail" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "Remarques" - -#: src/addressbook.c:325 src/compose.c:2804 -msgid "Address book" -msgstr "Carnet d'adresses" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "Nom:" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -msgid "Delete" -msgstr "Supprimer" - -#: 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 "Cci:" - -#: 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 "Supprimer l'adresse(s)" - -#: src/addressbook.c:578 -msgid "Really delete the address(es)?" -msgstr "Confirmer la suppression de l'adresse(s) ?" - -#: src/addressbook.c:579 src/addressbook.c:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "Non" - -#: src/addressbook.c:1000 src/folderview.c:1321 src/folderview.c:1522 -msgid "New folder" -msgstr "Nouveau dossier" - -#: src/addressbook.c:1001 src/folderview.c:1322 -msgid "Input the name of new folder:" -msgstr "Saisissez le nom du nouveau dossier :" - -#: src/addressbook.c:1002 src/folderview.c:1323 src/folderview.c:1526 -msgid "NewFolder" -msgstr "NouveauDossier" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "Le nom existe déjà." - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "Nouveau groupe" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "Saisissez le nom du nouveau groupe :" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "NouveauGroupe" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "Edition du groupe" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "Saisissez le nouveau nom du groupe :" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "Edition du dossier" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "Saisissez le nouveau nom du dossier :" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Voulez-vous vraiment détruire '%s' ?" - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "Edition d'adresse(s)" - -#: src/addressbook.c:1290 src/compose.c:2803 src/select-keys.c:302 -msgid "Address" -msgstr "Adresse" - -#: src/addressbook.c:1294 src/compose.c:1476 src/compose.c:3133 -#: src/compose.c:3703 src/export.c:186 src/foldersel.c:177 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:334 src/main.c:342 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "Cancel" -msgstr "Annulation" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "Lecture du fichier du carnet d'adresses" - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s n'existe pas.\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:869 src/imap.c:888 -#: src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 src/mh.c:816 -#: src/news.c:648 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:1003 -#: src/summaryview.c:1209 src/summaryview.c:1291 src/summaryview.c:1352 -#: src/summaryview.c:1809 src/summaryview.c:2287 src/summaryview.c:2310 -#: src/summaryview.c:2331 src/summaryview.c:2424 -msgid "done.\n" -msgstr "Fait.\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "Export du carnet d'adresses vers un fichier..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "Echec lors de l'écriture des données du carnet d'adresses.\n" - -#: src/alertpanel.c:119 src/compose.c:3306 src/main.c:332 -msgid "Notice" -msgstr "Information" - -#: src/alertpanel.c:132 src/main.c:218 -msgid "Warning" -msgstr "Alerte" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "Erreur" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "Creation du dialogue d'alerte...\n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "Erreur d'allocation mémoire\n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/_Ajout..." - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/_Retrait" - -#: src/compose.c:370 src/folderview.c:209 src/folderview.c:220 -#: src/folderview.c:231 -msgid "/_Property..." -msgstr "/_Propriété..." - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/_Fichier/_Attacher un fichier" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/_Fichier/_Insérer un fichier" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/_Fichier/Insertion si_gnature" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/_Edition/_Annule" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/_Edition/_Refaire" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/_Edition/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/_Edition/Couper" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/_Edition/_Copier" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/_Edition/Coller" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/_Edition/Tout sélectionner" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/_Edition/Couper les longues lignes" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/_Edition/Editer avec un éditeur externe" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/_Message" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/_Message/Envoi" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/_Message/Envoi différé" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/_Message/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "/_Message/_A" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "/_Message/_Cc" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/_Message/_Cci" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/_Message/_Répondre" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/_Message/_Attachement" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "/_Message/_Signer" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "/_Message/_Crypter" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/Outils" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/Outils/Afficher _règle" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/Outils/Carnet d'adresses" - -#: src/compose.c:494 src/compose.c:564 src/compose.c:624 src/procmsg.c:687 -msgid "Can't get text part\n" -msgstr "Impossible d'obtenir le texte\n" - -#: src/compose.c:556 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: le fichier n'existe pas\n" - -#: src/compose.c:568 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"Début du message transféré :\n" -"\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "Le fichier %s n'existe pas\n" - -#: src/compose.c:1244 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "Impossible d'obtenir la taille de %s\n" - -#: src/compose.c:1248 -#, c-format -msgid "File %s is empty\n" -msgstr "Le fichier %s est vide\n" - -#: src/compose.c:1269 -#, c-format -msgid "Message: %s" -msgstr "Message: %s" - -#: src/compose.c:1375 -msgid " [Edited]" -msgstr " [Edition]" - -#: src/compose.c:1377 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - Ecriture de message%s" - -#: src/compose.c:1380 -#, c-format -msgid "Compose message%s" -msgstr "Ecriture de message%s" - -#: src/compose.c:1402 src/compose.c:3596 -msgid "Recipient is not specified." -msgstr "Destinataire non spécifié." - -#: src/compose.c:1420 -msgid "can't get recipient list." -msgstr "" - -#: src/compose.c:1438 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" -"Aucun compte d'envoi n'est spécifié.\n" -"Veuillez sélectionner un compte avant d'envoyer du courrier." - -#: src/compose.c:1459 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "Une erreur est survenue lors de l'envoi du message à %s ." - -#: src/compose.c:1473 -msgid "Queueing" -msgstr "Mise en file d'attente" - -#: src/compose.c:1474 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"Une erreur est survenue pendant l'envoi de message.\n" -"Mise en file d'attente de ce message ?" - -#: src/compose.c:1480 src/compose.c:3608 -msgid "Can't queue the message." -msgstr "Impossible de mettre ce message en attente." - -#: src/compose.c:1483 -msgid "Error occurred while sending the message." -msgstr "Une erreur est survenue pendant l'envoi de message." - -#: src/compose.c:1490 src/compose.c:3615 -msgid "Can't save the message to outbox." -msgstr "Impossible d'enregistrer de message dans la boîte de messages envoyés" - -#: src/compose.c:1516 src/compose.c:1637 src/compose.c:1723 src/utils.c:1540 -msgid "can't change file mode\n" -msgstr "impossible de changer les droits du fichier\n" - -#: src/compose.c:1542 -msgid "Can't convert the codeset of the message." -msgstr "Impossible de converir le codeset du message" - -#: src/compose.c:1551 -msgid "can't write headers\n" -msgstr "impossible d'écrire les en-têtes\n" - -#: src/compose.c:1669 -msgid "saving sent message...\n" -msgstr "Enregistrement du message envoyé...\n" - -#: src/compose.c:1674 -msgid "can't save message\n" -msgstr "Impossible d'enregistrer le message\n" - -#: src/compose.c:1680 src/compose.c:1787 -msgid "can't open mark file\n" -msgstr "Impossible d'ouvrir le fichier des marques\n" - -#: src/compose.c:1703 -msgid "queueing message...\n" -msgstr "Mise en file d'attente des messages...\n" - -#: src/compose.c:1778 -msgid "can't queue the message\n" -msgstr "Impossible de mettre ce message en attente\n" - -#: src/compose.c:1816 -#, c-format -msgid "Can't open file %s\n" -msgstr "Impossible d'ouvrir le fichier %s\n" - -#: src/compose.c:2170 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "Message-ID créée : %s\n" - -#: src/compose.c:2244 src/compose.c:3104 -msgid "MIME type" -msgstr "type MIME" - -#: src/compose.c:2244 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "Taille" - -#: src/compose.c:2261 -msgid "Creating compose window...\n" -msgstr "Création de la fenêtre d'écriture...\n" - -#: src/compose.c:2307 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "De:" - -#: src/compose.c:2730 src/mainwindow.c:1359 src/prefs_account.c:501 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "Envoyer" - -#: src/compose.c:2731 -msgid "Send message" -msgstr "Envoyer le message" - -#: src/compose.c:2738 -msgid "Send later" -msgstr "Envoyer plus tard" - -#: src/compose.c:2739 -msgid "Put into queue folder and send later" -msgstr "Mise en file d'attente et envoi différé" - -#: src/compose.c:2746 src/folderview.c:738 -msgid "Draft" -msgstr "Brouillon" - -#: src/compose.c:2747 -msgid "Save to draft folder" -msgstr "" - -#: src/compose.c:2756 -msgid "Insert" -msgstr "Insertion" - -#: src/compose.c:2757 -msgid "Insert file" -msgstr "Isertion de fichier" - -#: src/compose.c:2764 -msgid "Attach" -msgstr "Attachement" - -#: src/compose.c:2765 -msgid "Attach file" -msgstr "Attacher de fichier" - -#: src/compose.c:2774 src/prefs_common.c:1035 -msgid "Signature" -msgstr "Signature" - -#: src/compose.c:2775 -msgid "Insert signature" -msgstr "Insérer la signature" - -#: src/compose.c:2783 -msgid "Editor" -msgstr "Editeur" - -#: src/compose.c:2784 -msgid "Edit with external editor" -msgstr "Editer avec un éditeur externe" - -#: src/compose.c:2792 -msgid "Linewrap" -msgstr "Retour à la ligne" - -#: src/compose.c:2793 -msgid "Wrap long lines" -msgstr "Couper les longues lignes" - -#: src/compose.c:3000 -msgid "Invalid MIME type." -msgstr "Type MIME invalide." - -#: src/compose.c:3018 -msgid "File doesn't exist or is empty." -msgstr "Le fichier n'existe pas ou est vide." - -#: src/compose.c:3086 -msgid "Property" -msgstr "Propriété" - -#: src/compose.c:3106 -msgid "Encoding" -msgstr "Encodage" - -#: src/compose.c:3129 -msgid "Path" -msgstr "Chemin d'accés" - -#: src/compose.c:3130 -msgid "File name" -msgstr "Nom du fichier" - -#: src/compose.c:3277 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "La ligne de commande d'éditeur externe est invalide : '%s'\n" - -#: src/compose.c:3303 -#, c-format -msgid "" -"The external editor is still working.\n" -"Force terminating the process?\n" -"process group id: %d" -msgstr "" -"L'éditeur externe est encore ouvert.\n" -"Forcer sa fermeture ?\n" -"process group id: %d" - -#: src/compose.c:3316 -#, c-format -msgid "Terminated process group id: %d" -msgstr "" - -#: src/compose.c:3317 -#, c-format -msgid "Temporary file: %s" -msgstr "Fichier temporaire: %s" - -#: src/compose.c:3341 -msgid "Compose: input from monitoring process\n" -msgstr "" - -#. failed -#: src/compose.c:3374 -msgid "Couldn't exec external editor\n" -msgstr "Impossible de lancer l'éditeur externe\n" - -#: src/compose.c:3378 -msgid "Couldn't write to file\n" -msgstr "Impossible d'écrire dans le fichier\n" - -#: src/compose.c:3380 -msgid "Pipe read failed\n" -msgstr "" - -#: src/compose.c:3637 -msgid "can't remove the old draft message\n" -msgstr "" - -#: src/compose.c:3665 src/compose.c:3677 -msgid "Select file" -msgstr "Choisissez un fichier" - -#: src/compose.c:3701 -msgid "Discard message" -msgstr "Annuler le message" - -#: src/compose.c:3702 -msgid "This message has been modified. discard it?" -msgstr "Ce message a été modifié. Voulez-vous l'annuler ?" - -#: src/compose.c:3703 -msgid "Discard" -msgstr "Annuler" - -#: src/compose.c:3703 -msgid "to Draft" -msgstr "vers Brouillon" - -#: src/export.c:122 -msgid "Export" -msgstr "" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "" - -#: src/export.c:154 -msgid "Source dir:" -msgstr "" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr " Choisir... " - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "" - -#: src/foldersel.c:131 -msgid "Select folder" -msgstr "Choisissez un dossier" - -#: src/folderview.c:203 src/folderview.c:214 -msgid "/Create _new folder..." -msgstr "/Créer d'un _nouveau dossier..." - -#: src/folderview.c:204 src/folderview.c:215 -msgid "/_Rename folder..." -msgstr "/_Renommer le dossier..." - -#: src/folderview.c:205 src/folderview.c:216 -msgid "/_Delete folder" -msgstr "/_Détruire le dossier" - -#: src/folderview.c:207 -msgid "/Remove _mailbox" -msgstr "Effacer la _boîte de réception" - -#: src/folderview.c:218 -msgid "/Remove _IMAP4 server" -msgstr "Effacer le serveur _IMAP4" - -#: src/folderview.c:225 -msgid "/_Subscribe to newsgroup..." -msgstr "/In_scription au newsgroup..." - -#: src/folderview.c:227 -msgid "/_Remove newsgroup" -msgstr "/Supp_rimer du newsgroup" - -#: src/folderview.c:229 -msgid "/Remove _news server" -msgstr "/Supprimer du serveur de _news" - -#: src/folderview.c:240 -msgid "Folder" -msgstr "Dossier" - -#: src/folderview.c:240 -msgid "New" -msgstr "Nouveau" - -#: src/folderview.c:241 src/prefs_common.c:2173 -msgid "Unread" -msgstr "Non lu" - -#: src/folderview.c:241 -msgid "#" -msgstr "#" - -#: src/folderview.c:251 -msgid "Creating folder view...\n" -msgstr "Création de la vue des dossiers...\n" - -#: src/folderview.c:395 -msgid "Setting folder info...\n" -msgstr "Enregistrement des infos du dossier...\n" - -#: src/folderview.c:396 -msgid "Setting folder info..." -msgstr "Enregistrement des infos du dossier..." - -#: src/folderview.c:539 src/mainwindow.c:2092 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "Analyse du dossier %s%c%s ..." - -#: src/folderview.c:544 src/mainwindow.c:2097 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "Analyse du dossier %s ..." - -#: src/folderview.c:581 -msgid "Updating all folders..." -msgstr "Mise à jour de tous les dossiers" - -#: src/folderview.c:716 src/prefs_account.c:655 -msgid "Inbox" -msgstr "Réception" - -#: src/folderview.c:721 -msgid "Outbox" -msgstr "Envoyés" - -#: src/folderview.c:726 -msgid "Queue" -msgstr "File d'attente" - -#: src/folderview.c:731 -msgid "Trash" -msgstr "Poubelle" - -#: src/folderview.c:1213 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Dossier %s sélectionné\n" - -#: src/folderview.c:1327 src/folderview.c:1390 src/folderview.c:1531 -#, 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:1335 src/folderview.c:1399 src/folderview.c:1539 -#, c-format -msgid "The folder `%s' already exists." -msgstr "Le dossier '%s' existe déjà." - -#: src/folderview.c:1343 src/folderview.c:1547 -#, fuzzy, c-format -msgid "Can't create the folder `%s'." -msgstr "Impossible de supprimer le dossier '%s'\n" - -#: src/folderview.c:1382 -#, c-format -msgid "Input new name for `%s':" -msgstr "Saisissez le nouveau nom pour '%s' :" - -#: src/folderview.c:1384 -msgid "Rename folder" -msgstr "Changement de nom du dossier" - -#: src/folderview.c:1444 -#, 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:1447 src/folderview.c:1589 -msgid "Delete folder" -msgstr "Suppression du dossier" - -#: src/folderview.c:1453 src/folderview.c:1595 -#, fuzzy, c-format -msgid "Can't remove the folder `%s'." -msgstr "Impossible de supprimer le dossier '%s'\n" - -#: src/folderview.c:1487 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" -"Voulez-vous supprimer la boîte `%s' ?\n" -"(Les messages ne seront PAS effacés du disque)" - -#: src/folderview.c:1490 -msgid "Remove folder" -msgstr "Effacer le dossier" - -#: src/folderview.c:1523 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" - -#: src/folderview.c:1587 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Confirmer l'effacement du dossier `%s' ?" - -#: src/folderview.c:1628 -#, c-format -msgid "Really delete IMAP4 server `%s'?" -msgstr "Confirmer l'effacement du serveur IMAP4 `%s' ?" - -#: src/folderview.c:1630 -msgid "Delete IMAP4 server" -msgstr "Effacer le serveur IMAP4" - -#: src/folderview.c:1671 -msgid "Subscribe newsgroup" -msgstr "S'bonner aux news" - -#: src/folderview.c:1672 -msgid "Input subscribing newsgroup:" -msgstr "Saisissez le nom du newsgroup :" - -#: src/folderview.c:1681 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "Le newsgroup '%s' existe déjà." - -#: src/folderview.c:1727 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Confirmer la suppression du newsgroup '%s' ?" - -#: src/folderview.c:1729 -msgid "Delete newsgroup" -msgstr "Suppression du newsgroup" - -#: src/folderview.c:1760 -#, c-format -msgid "Really delete news server `%s'?" -msgstr "Confirmer la suppression du serveur de news '%s' ?" - -#: src/folderview.c:1762 -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 en-têtes...\n" - -#: src/headerview.c:174 src/summaryview.c:1392 -msgid "(No From)" -msgstr "(Pas d'expéditeur)" - -#: src/headerview.c:189 src/summaryview.c:1408 -msgid "(No Subject)" -msgstr "(Pas de sujet)" - -#: src/headerwindow.c:55 -msgid "Creating header window...\n" -msgstr "Création de la fenêtre des en-têtes...\n" - -#: src/headerwindow.c:59 -msgid "All header" -msgstr "Tous les en-têtes" - -#: src/headerwindow.c:113 -#, c-format -msgid "Displaying the header of %s ...\n" -msgstr "Affichage des en-têtes de %s ...\n" - -#: src/headerwindow.c:115 -#, c-format -msgid "%s - All header" -msgstr "%s - tous les en-tê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:204 -#, 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:230 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "création de la connexion IMAP4 vers %s:%d ...\n" - -#: src/imap.c:385 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "Le message %d a déjà été caché.\n" - -#: src/imap.c:395 -#, c-format -msgid "getting message %d...\n" -msgstr "Récupération du message %d...\n" - -#: src/imap.c:401 src/procmsg.c:587 -#, c-format -msgid "can't fetch message %d\n" -msgstr "" - -#: src/imap.c:430 -#, fuzzy, c-format -msgid "can't append message %s\n" -msgstr "Impossible d'enregistrer le message\n" - -#: src/imap.c:459 src/imap.c:516 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "dossier source identique à la destination.\n" - -#: src/imap.c:469 src/imap.c:521 src/mh.c:201 src/mh.c:267 -#, 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:473 src/imap.c:525 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "Copie du message %s%c%d vers %s ...\n" - -#: src/imap.c:593 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "" - -#: src/imap.c:600 src/imap.c:639 -msgid "can't expunge\n" -msgstr "" - -#: src/imap.c:632 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "" - -#: src/imap.c:744 -msgid "can't create mailbox\n" -msgstr "" - -#: src/imap.c:781 -msgid "can't delete mailbox\n" -msgstr "" - -#: src/imap.c:807 -msgid "can't get envelope\n" -msgstr "Impossible de faire une enveloppe\n" - -#: src/imap.c:813 -msgid "error occurred while getting envelope.\n" -msgstr "Une erreur est survenue pendant la lecture de l'enveloppe.\n" - -#: src/imap.c:821 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "" - -#: src/imap.c:849 -#, fuzzy, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "\tSuppresion de tous des messages en cache... " - -#: src/imap.c:882 -#, fuzzy -msgid "Deleting all cached messages... " -msgstr "\tSuppresion de tous des messages en cache... " - -#: src/imap.c:896 -#, 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:929 -#, fuzzy -msgid "can't get namespace\n" -msgstr "Impossible de faire une enveloppe\n" - -#: src/imap.c:1346 -#, c-format -msgid "can't select folder: %s\n" -msgstr "Impossible de sélectionner le dossier: %s\n" - -#: src/imap.c:1401 -#, fuzzy, c-format -msgid "can't get the next uid of folder: %s\n" -msgstr "Impossible de sélectionner le dossier: %s\n" - -#: src/imap.c:1423 -msgid "IMAP4 login failed.\n" -msgstr "Echec au login IMAP4.\n" - -#: src/imap.c:1636 -#, fuzzy, c-format -msgid "can't append %s to %s\n" -msgstr "Impossible de copier le message de %s à %s\n" - -#: src/imap.c:1656 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "" - -#: src/imap.c:1681 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "erreur lors de la commande IMAP suivante: STORE %d:%d %s\n" - -#: src/imap.c:1695 -msgid "error while imap command: EXPUNGE\n" -msgstr "erreur lors de la commande IMAP suivante: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "Importer" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "" - -#: src/import.c:158 -msgid "Importing file:" -msgstr "Import du fichier :" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Répertoire de destination :" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Choisir le fichier d'import" - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "Récupération des nouveaux messages" - -#: src/inc.c:384 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "Saisisser le mot de passe de %s pour %s" - -#: src/inc.c:388 src/news.c:131 -msgid "Input password" -msgstr "Saisissez le mot de passe" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "" - -#: src/inc.c:412 -msgid "Done" -msgstr "" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "Echec de l'autorisation de %s pour %s" - -#: src/inc.c:487 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "Récupération des nouveaux messages du compte %s ...\n" - -#: src/inc.c:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s : Récupération des nouveaux messages" - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "Connexion au serveur POP3 : %s ..." - -#: src/inc.c:527 src/inc.c:660 -#, 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:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "Impossible de se connecter au serveur POP3 : %s:%d" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "Récupération du message (%d / %d) (%d / %d bytes)" - -#: src/inc.c:719 -#, fuzzy -msgid "Authorizing..." -msgstr "Autorisation acceptée" - -#: src/inc.c:724 -#, fuzzy -msgid "Getting the number of new messages (STAT)..." -msgstr "Récupération du nombre de nouveaux messages" - -#: src/inc.c:729 -#, fuzzy -msgid "Getting the number of new messages (LAST)..." -msgstr "Récupération du nombre de nouveaux messages" - -#: src/inc.c:734 -#, fuzzy -msgid "Getting the number of new messages (UIDL)..." -msgstr "Récupération du nombre de nouveaux messages" - -#: src/inc.c:739 -#, fuzzy -msgid "Getting the size of messages (LIST)..." -msgstr "Récupération du nombre de nouveaux messages" - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "Suppression du message" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "Fermeture" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "Un message n'a pas été reçu\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "Une erreur est survenue pendant le traitement du mail." - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "Plus de place sur le disque." - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "Pas de message dans la boîte locale.\n" - -#: src/inc.c:881 -#, 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 Protocole" - -#. for gettext -#: src/main.c:108 -#, 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:149 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread non supporté par glib.\n" - -#: src/main.c:219 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" - -#: src/main.c:300 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "Utilisation: %s [OPTION]...\n" - -#: src/main.c:303 -msgid " --compose [address] open composition window" -msgstr "" - -#: src/main.c:304 -msgid " --receive receive new messages" -msgstr "" - -#: src/main.c:305 -msgid " --receive-all receive new messages of all accounts" -msgstr "" - -#: src/main.c:306 -msgid " --debug debug mode" -msgstr "" - -#: src/main.c:307 -msgid " --help display this help and exit" -msgstr "" - -#: src/main.c:308 -msgid " --version output version information and exit" -msgstr "" - -#: src/main.c:333 -msgid "Composing message exists. Really quit?" -msgstr "" -"La fenêtre de composition de message existe.\n" -"Voulez-vous vraiment quitter ?" - -#: src/main.c:340 -msgid "Queued messages" -msgstr "" - -#: src/main.c:341 -msgid "Some unsent messages are queued. Exit now?" -msgstr "" - -#. remote command mode -#: src/main.c:412 -msgid "another Sylpheed is already running.\n" -msgstr "une autre session de Sylpheed existe.\n" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "/_Fichier/_Ajouter une boîte mail" - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/_Fichier/_Mise à jour de l'arbre des dossiers" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "/_Fichier/_Dossier" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/_Fichier/_Dossier/Créer un _nouveau dossier..." - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/_Fichier/_Dossier/_Renommer le dossier..." - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "/_Fichier/_Dossier/_Effacer le dossier" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/_Fichier/_Importer un fichier mbox..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "" - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "/_Fichier/_Vider la _poubelle" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/_Fichier/Enregistrer _sous..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/_Fichier/Im_prime..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/_Fichier/Quitter" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/_Edition/Chercher" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/_Vue" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/_Vue/Arbre des dossiers" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/_Vue/Vue par _message" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/_Vue/Barre d'ou_tils" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/_Vue/Barre d'ou_tils/Icones et texte" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/_Vue/Barre d'ou_tils/_Icones seules" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/_Vue/Barre d'ou_tils/_Texte seul" - -#: src/mainwindow.c:364 -#, fuzzy -msgid "/_View/_Toolbar/_None" -msgstr "/_Vue/Barre d'ou_tils/_Icones seules" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/_Vue/Barre d'état" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/_Vue/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/_Vue/Séparation de l'arbre des d_ossiers" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/_Vue/Séparation de la fenêtre des messages" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/_Vue/Jeux de _caractères" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/_Vue/Jeux de _caractères/Détection _automatique" - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/_Vue/Jeux de _caractères/___" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/_Vue/Jeux de _caractères/7bit ascii (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/_Vue/Jeux de _caractères/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/_Vue/Jeux de _caractères/Europe de l'Ouest (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/_Vue/Jeux de _caractères/Europe Centrale (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/_Vue/Jeux de _caractères/Europe de l'Ouest (ISO-8859-_1)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/_Vue/Jeux de _caractères/Europe Centrale (ISO-8859-_2)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/_Vue/Jeux de _caractères/Europe de l'Ouest (ISO-8859-_1)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/_Vue/Jeux de _caractères/Europe de l'Ouest (ISO-8859-_1)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/_Vue/Jeux de _caractères/Europe Centrale (ISO-8859-_2)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/_Vue/Jeux de _caractères/Japanese (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/_Vue/Jeux de _caractères/Japanese (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/_Vue/Jeux de _caractères/Japanese (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/_Vue/Jeux de _caractères/Japanese (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "" - -#: src/mainwindow.c:445 -#, fuzzy -msgid "/_Message/Get new ma_il" -msgstr "/_Message/Recupèrer nouveau courr_ier" - -#: src/mainwindow.c:446 -#, fuzzy -msgid "/_Message/Get from _all accounts" -msgstr "/_Message/Récupèrer de tous les comptes" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/_Message/Envoyer les messa_ges en file d'attente" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/_Message/Créer un _nouveau message" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/_Message/_Répondre" - -#: src/mainwindow.c:454 -#, fuzzy -msgid "/_Message/Repl_y to sender" -msgstr "/_Message/_Répondre" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/_Message/Répondre à_ tous" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/_Message/Trans_férer" - -#: src/mainwindow.c:457 -#, fuzzy -msgid "/_Message/Forward as a_ttachment" -msgstr "/_Message/Transférer en tant qu'a_ttachement" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/_Message/Déplacer" - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "/_Message/_Copier..." - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/_Message/Supprimer" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/_Message/_Marque" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/_Message/_Marque/_Marquer" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/_Message/_Marque/Démarq_uer" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/_Message/_Marque/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/_Message/_Marque/Marquer comm_e non lu" - -#: src/mainwindow.c:468 -#, fuzzy -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/_Message/_Marque/Marquer comm_e non lu" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/_Message/Ouvrir dans une nouvelle fenêtre" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "/_Message/Voir le _source du message" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/_Message/Affic_her tous les en-têtes" - -#: src/mainwindow.c:474 -#, fuzzy -msgid "/_Message/Re-_edit" -msgstr "/_Message/Ré_edition" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/Ré_sumé" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/Ré_sumé/Suppression des messages en _double" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/Ré_sumé/Tri des mess_ages" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/Ré_sumé/E_xécution" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/Ré_sumé/Mettre à jo_ur" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/Ré_sumé/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/Ré_sumé/_Précédent" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/Ré_sumé/Suiva_nt" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/Ré_sumé/Suivant non lu" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/Ré_sumé/Autre dossier" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/Ré_sumé/Tri" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/Ré_sumé/Tri/Trier par _numéro" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/Ré_sumé/Tri/Trier par ta_ille" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/Ré_sumé/Tri/Trier par _date" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/Ré_sumé/Tri/Trier par expéditeur" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/Ré_sumé/Tri/Trier par _sujet" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/Ré_sumé/Tri/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/Ré_sumé/Tri/_Attraction par sujet" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/Ré_sumé/Vue par _thread" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/Ré_sumé/Vue non t_hreadée" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/Ré_sumé/Cho_ix des éléments affichés" - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/Ou_tils/Fenêtre de log" - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/_Configuration" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/_Configuration/Préférences _communes..." - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "" - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/_Configuration/_Préférences par compte..." - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/_Configuration/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/_Configuration/Création d'un _nouveau compte..." - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/_Configuration/_Edition des comptes..." - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/_Configuration/C_hangement du compte courant" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/Aide/_Manuel/Anglais" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/Aide/_Manuel/_Japonais" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/Aide/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "Création de la fenêtre principale...\n" - -#: src/mainwindow.c:673 -#, 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:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "Sans titre" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "rien" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "Compte courant : %s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "position de la fenêtre : x = %d, y = %d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "Vider la poubelle" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "Vider tous le smessages de la poubelle ?" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "Ajouter une boîte aux lettres" - -#: src/mainwindow.c:978 -msgid "" -"Input the location of mailbox.\n" -"If the existing mailbox is specified, it will be\n" -"scanned automatically." -msgstr "" - -#: src/mainwindow.c:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "La boîte `%s' existe déjà" - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "Boite aux lettres" - -#: src/mainwindow.c:995 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 "" -"Echec de la création de boîte.\n" -"Il se peut que les fichiers existent déjà, ou que vous n'ayez pas les droits " -"en écriture." - -#: src/mainwindow.c:1141 -msgid "Setting widgets..." -msgstr "Définition des widgets..." - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "Récupèrer" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "Incorporer du courrier nouveau" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "Tout récupèrer" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "Tout récupèrer pour tous les comptes" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "Envoyer les messages en attente" - -#: src/mainwindow.c:1370 src/prefs_account.c:503 src/prefs_common.c:638 -msgid "Compose" -msgstr "Créer" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "Créer un nouveau message" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "Répondre" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "Répondre au message" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "Répondre à tous" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "Transfèrer" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "Transfèrer le message" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "Détruire le message" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "Exécuter" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "Exécuter les commandes marquées" - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "Suivant" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "Message non lu suivant" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "Préférences" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "Préférences communes" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "Compte" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "Paramètres du compte" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit" -msgstr "Quitter" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit this program?" -msgstr "Quitter le programme ?" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "L'envoi des messages en attente a échoué." - -#: src/mainwindow.c:1924 -#, c-format -msgid "forced charset: %s\n" -msgstr "Jeu de caractères forcé : %s\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "Récupération des messages de %s dans %s...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "Impossible de lire le fichier mbox.\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "Format mbox invalide : %s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "mbox mal formée : %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "Impossible d'ouvrir un fichier temporaire\n" - -#: src/mbox.c:159 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"From 'unescaped' trouvé:\n" -"%s" - -#: src/mbox.c:194 -msgid "can't write to temporary file\n" -msgstr "Impossible d'écrire dans le fichier temporaire\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "%s messages trouvés.\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "Impossible de créer le fichier verrou %s\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "Utilisation de 'flock' à la place de 'file' si possible\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "Impossible de créer %s\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "mailbox utilisée par un autre process, attente...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "Impossible de verrouiller %s\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "Type de verrou invalide\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "Impossible de déverrouiller %s\n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "Impossible de vider la boite aux lettres.\n" - -#: 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 "Création de la vue Message...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "Impossible de copier le message de %s à %s\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "Impossible d'ouvrir le fichier des marques.\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "%s existe déjà" - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Dernier numéro dans le répertoire %s = %d\n" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "\tRecherche des messages non cachés... " - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "%d message(s) non caché(s) trouvé.\n" - -#: src/mh.c:813 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tTri des messages non cachés par ordre numérique... " - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/_Ouvrir" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "" - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/Afficher comme du texte" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "/Enregistrer _sous..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "MIME Type" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "Création de la vue MIME...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "Impossible de lire une pièce d'un message multipart" - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "Impossible d'enregistrer une pièce d'un message multipart" - -#: src/mimeview.c:708 src/summaryview.c:2018 -msgid "Save as" -msgstr "Enregistrer sous" - -#: src/mimeview.c:714 src/summaryview.c:2023 -msgid "Overwrite" -msgstr "Ecraser" - -#: src/mimeview.c:715 src/summaryview.c:2024 -msgid "Overwrite existing file?" -msgstr "Ecraser le ficheir existant ?" - -#: src/mimeview.c:769 -#, fuzzy -msgid "Open with" -msgstr "En quittant" - -#: src/mimeview.c:770 -#, fuzzy, c-format -msgid "" -"Enter the command line to open file:\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/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "La ligne de commande du viewer MIME est invalide: '%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "Création de la connexion NNTP vers %s:%d ...\n" - -#: src/news.c:176 -#, 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:245 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "L'article %d a déjà été caché.\n" - -#: src/news.c:257 -#, fuzzy, c-format -msgid "can't select group %s\n" -msgstr "Impossible de définir le groupe : %s\n" - -#: src/news.c:262 -#, c-format -msgid "getting article %d...\n" -msgstr "Récupération de l'article %d...\n" - -#: src/news.c:267 -#, c-format -msgid "can't read article %d\n" -msgstr "Impossible de lire l'article %d\n" - -#: src/news.c:299 -msgid "can't post article.\n" -msgstr "Impossible de poster l'article.\n" - -#: src/news.c:323 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "Impossible de récupérer l'article %d\n" - -#: src/news.c:393 -#, c-format -msgid "can't set group: %s\n" -msgstr "Impossible de définir le groupe : %s\n" - -#: src/news.c:400 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "Intervalle d'article invalide : %d - %d\n" - -#: src/news.c:409 -msgid "no new articles.\n" -msgstr "Pas d'article.\n" - -#: src/news.c:422 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "Exécution de xover %d - %d sur %s...\n" - -#: src/news.c:425 -msgid "can't get xover\n" -msgstr "Impossible de faire un xover\n" - -#: src/news.c:431 -msgid "error occurred while getting xover.\n" -msgstr "Une erreur a eu lieue pendant la lecture du xover.\n" - -#: src/news.c:439 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "Ligne xover invalide : %s\n" - -#: src/news.c:456 src/news.c:481 -#, fuzzy -msgid "can't get xhdr\n" -msgstr "Impossible de faire un xover\n" - -#: src/news.c:464 src/news.c:489 -#, fuzzy -msgid "error occurred while getting xhdr.\n" -msgstr "Une erreur a eu lieue pendant la lecture du xover.\n" - -#: src/news.c:613 -#, fuzzy, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "\tSuppresion de tous les articles en cache... " - -#: src/news.c:642 -msgid "\tDeleting all cached articles... " -msgstr "\tSuppresion de tous les articles en cache... " - -#: src/nntp.c:52 -#, 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:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "Error de protocole : %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "Erreur de protocole\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "Une erreur est survenue lors de l'envoi.\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "" - -#: src/passphrase.c:244 -#, c-format -msgid "" -"%sPlease enter the passphrase for:\n" -"\n" -" %.*s \n" -"(%.*s)\n" -msgstr "" - -#: src/passphrase.c:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "Erreur lors de la demande d'autorisation\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "Le 'timestamp' APOP n'a pas été reçu\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "Erreur de syntaxe du 'timestamp' dans la bannière\n" - -#: src/pop.c:171 src/pop.c:212 -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:364 -#: src/prefs_account.c:378 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -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:409 -msgid "Opening account preferences window...\n" -msgstr "Ouverture de la fenêtre de préférences du compte...\n" - -#: src/prefs_account.c:436 -#, c-format -msgid "Account%d" -msgstr "Compte%d" - -#: src/prefs_account.c:449 -msgid "Preferences for new account" -msgstr "Préférences du nouveau compte" - -#: src/prefs_account.c:454 -msgid "Preferences for each account" -msgstr "Préférences pour chaque compte" - -#: src/prefs_account.c:477 -msgid "Creating account preferences window...\n" -msgstr "Création de la fenêtre de préférences du compte...\n" - -#: src/prefs_account.c:497 -msgid "Basic" -msgstr "Basic" - -#: src/prefs_account.c:499 src/prefs_common.c:634 -msgid "Receive" -msgstr "Réception" - -#: src/prefs_account.c:506 src/prefs_common.c:645 -msgid "Privacy" -msgstr "Vie privée" - -#: src/prefs_account.c:509 -msgid "Advanced" -msgstr "Avancées" - -#: src/prefs_account.c:563 -msgid "Name of this account" -msgstr "Nom de ce compte" - -#: src/prefs_account.c:572 -msgid "Usually used" -msgstr "Compte courant" - -#: src/prefs_account.c:576 -msgid "Personal information" -msgstr "Informations personnelles" - -#: src/prefs_account.c:585 -msgid "Full name" -msgstr "Nom complet" - -#: src/prefs_account.c:591 -msgid "Mail address" -msgstr "Adresse de mail" - -#: src/prefs_account.c:597 -msgid "Organization" -msgstr "Organisation" - -#: src/prefs_account.c:621 -msgid "Server information" -msgstr "Information serveurs" - -#: src/prefs_account.c:642 -msgid "POP3 (normal)" -msgstr "POP3 (normal)" - -#: src/prefs_account.c:644 -msgid "POP3 (APOP auth)" -msgstr "POP3 (APOP auth)" - -#: src/prefs_account.c:646 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:648 -msgid "News (NNTP)" -msgstr "News (NNTP)" - -#: src/prefs_account.c:650 -msgid "None (local)" -msgstr "Aucun (local)" - -#: src/prefs_account.c:672 -msgid "This server requires authentication" -msgstr "" - -#: src/prefs_account.c:711 -msgid "News server" -msgstr "Serveur de groupes de discussion" - -#: src/prefs_account.c:717 -msgid "Server for receiving" -msgstr "Serveur de réception" - -#: src/prefs_account.c:723 -msgid "SMTP server (send)" -msgstr "Serveur SMTP (envoi)" - -#: src/prefs_account.c:730 -msgid "User ID" -msgstr "Nom de l'utilisateur" - -#: src/prefs_account.c:736 -msgid "Password" -msgstr "Mot de passe" - -#: src/prefs_account.c:786 -msgid "POP3" -msgstr "" - -#: src/prefs_account.c:794 -msgid "Remove messages on server when received" -msgstr "Suppresion des messages du serveur une fois reçus" - -#: src/prefs_account.c:796 -#, fuzzy -msgid "Download all messages on server" -msgstr "Réception de tous les messages du serveur" - -#: src/prefs_account.c:799 -msgid "`Get all' checks for new mail on this account" -msgstr "" - -#: src/prefs_account.c:801 -msgid "Filter messages on receiving" -msgstr "Filtrage des messages à la réception" - -#: src/prefs_account.c:838 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "En-tête" - -#: src/prefs_account.c:845 -msgid "Add Date header field" -msgstr "Ajout du champ Date à l'en-tête" - -#: src/prefs_account.c:846 -msgid "Generate Message-ID" -msgstr "Génération de Message-ID" - -#: src/prefs_account.c:853 -msgid "Add user-defined header" -msgstr "Ajout de champs définis" - -#: src/prefs_account.c:855 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr "Edition..." - -#: src/prefs_account.c:865 -msgid "Automatically set following addresses" -msgstr "Définition automatique des adresses suivantes" - -#: src/prefs_account.c:874 -msgid "Cc" -msgstr "Cc" - -#: src/prefs_account.c:887 -msgid "Bcc" -msgstr "Cci" - -#: src/prefs_account.c:900 -msgid "Reply-To" -msgstr "Répondre à" - -#: src/prefs_account.c:913 -msgid "Authentication" -msgstr "Authentification" - -#: src/prefs_account.c:921 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "Authentification SMTP (SMTP AUTH)" - -#: src/prefs_account.c:923 -msgid "Authenticate with POP3 before sending" -msgstr "S'authentifier sur le POP3 avant l'envoi" - -#: src/prefs_account.c:957 -msgid "Signature file" -msgstr "Fichier de signature" - -#: src/prefs_account.c:986 -msgid "Sign key" -msgstr "" - -#: src/prefs_account.c:994 -msgid "Use default GnuPG key" -msgstr "" - -#: src/prefs_account.c:1003 -msgid "Select key by your email address" -msgstr "" - -#: src/prefs_account.c:1012 -msgid "Specify key manually" -msgstr "" - -#: src/prefs_account.c:1028 -msgid "User or key ID:" -msgstr "" - -#: src/prefs_account.c:1073 -msgid "Specify SMTP port" -msgstr "Indiquer le port SMTP" - -#: src/prefs_account.c:1085 -msgid "Specify POP3 port" -msgstr "Indiquer le port POP3" - -#: src/prefs_account.c:1097 -msgid "Specify domain name" -msgstr "Indiquer le nom de domaine" - -#: src/prefs_account.c:1144 -msgid "Mail address is not entered." -msgstr "Adresse de mail non saisie." - -#: src/prefs_account.c:1149 -msgid "SMTP server is not entered." -msgstr "Serveur SMTP non indiqué." - -#: src/prefs_account.c:1154 -msgid "User ID is not entered." -msgstr "User ID manquant." - -#: src/prefs_account.c:1159 -msgid "POP3 server is not entered." -msgstr "Serveur POP3 non indiqué." - -#: src/prefs_account.c:1164 -msgid "IMAP4 server is not entered." -msgstr "Serveur IMAP4 non indiqué." - -#: src/prefs_account.c:1169 -msgid "NNTP server is not entered." -msgstr "Serveur NNTP non indiqué." - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "Création de la fenêtre des préférences communes...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "Préférences communes" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "Affichage" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "Message" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "Interface" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "Divers" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "Programme externe" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "Utilisation d'un programme externe pour l'incorporation" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "Chemin d'accès au programme" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "Spool local" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "Incorporation à partir du spool" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "Filtrage à l'incorporation" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "Répertoire de spool" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "Contrôle automatique de nouveau courrier" - -#: src/prefs_common.c:759 -msgid "each" -msgstr "toutes les" - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "minutes" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "Recherche de nouveau courrier au démarrage" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "Groupes de discussions" - -#: src/prefs_common.c:790 -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:858 -msgid "Use external program for sending" -msgstr "Utilisation d'un programme externe pour l'envoi" - -#: src/prefs_common.c:882 -#, fuzzy -msgid "Save sent messages to outbox" -msgstr "Sauvegarde des messages envoyés dans la boîte d'envoi" - -#: src/prefs_common.c:884 -#, fuzzy -msgid "Queue messages that fail to send" -msgstr "Mise en file d'attente des messages non envoyés" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "Jeu de caractères en sortie" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "Automatique" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "7bit ascii (US-ASCII)" - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "Europe de l'Ouest (ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "Europe Centrale (ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "Japonais (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "Japonais (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "Citation" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "Citer le message en répondant" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "Caractère de citation" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "Format de citation :" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr " Description des symboles " - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "Insertion automatique de la signature" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "Séparateur de signature" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "Couper les messages à" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "caractères" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "Couper la citation" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "Couper les lignes avant d'envoyer" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "Police" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "" - -#: src/prefs_common.c:1160 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "Traduction des en-têtes (comme 'De:', 'Sujet:')" - -#: src/prefs_common.c:1163 -msgid "Display unread number next to folder name" -msgstr "Affiche le nombre de messages non lus près du nom de dossier" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "" - -#: src/prefs_common.c:1176 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "Affiche destinataire dans la colonne 'De' si vous êtes l'expéditeur" - -#: src/prefs_common.c:1178 -msgid "Enable horizontal scroll bar" -msgstr "Activer la barre de défilement horizontale" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr " Eléments affichés dans le résumé... " - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "Coloration des messages" - -#: src/prefs_common.c:1297 -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:1299 -msgid "Display header pane above message view" -msgstr "" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "Affiche des en-têtes courts dans la fenêtre des messages" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "Espacement des lignes" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "pixel(s)" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "Espace laissé en tête" - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "Crypter le message par défaut" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "Signer le message par défaut" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "Vérifier automatiquement les signatures" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "Clef de signature par défaut" - -#: src/prefs_common.c:1554 -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:1561 -msgid "Open first unread message when entering a folder" -msgstr "Ouvrir le premier message non lu en ouvrant un dossier" - -#: src/prefs_common.c:1565 -msgid "Go to inbox after receiving new mail" -msgstr "Aller dans la boîte de réception lors de l'arrivée de nouveau courrier" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "Exécuter immédiatement l'effacement ou le déplacement de messages" - -#: src/prefs_common.c:1580 -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:1587 -msgid "Add address to destination when double-clicked" -msgstr "" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "En quittant" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "Confirmer en quittant" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "Vider la poubelle en quittant" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "Demander avant de vider la poubelle" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "" - -#: src/prefs_common.c:1648 -#, 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:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "Commande" - -#: src/prefs_common.c:1673 -#, 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:1689 -#, 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:1752 -msgid "Set message colors" -msgstr "Paramétrer les couleurs de message" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "Couleurs" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "Texte cité - 1er niveau" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "Texte cité - 2ème niveau" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "Texte cité - 3ème niveau" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "Lien URI" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "Description des symboles" - -#: src/prefs_common.c:2052 -#, 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 "" -"Date\n" -"De\n" -"Nom complet de l'expéditeur\n" -"Prénom de l'expéditeur\n" -"Initiales de l'expéditeur\n" -"Sujet\n" -"A\n" -"Message-ID\n" -"%" - -#: src/prefs_common.c:2155 -msgid "Set display item" -msgstr "Choix des éléments à afficher" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "Marque" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "Numéro" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "Date" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "De" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "Sujet" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "Sélection de la police" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "" - -#: src/prefs_customheader.c:150 -#, fuzzy -msgid "Creating custom header setting window...\n" -msgstr "Création de la fenêtre des en-têtes...\n" - -#: src/prefs_customheader.c:168 -#, fuzzy -msgid "Custom header setting" -msgstr "/Afficher comme du texte" - -#: src/prefs_customheader.c:212 -msgid "Value" -msgstr "" - -#: src/prefs_customheader.c:320 -#, fuzzy -msgid "Reading custom header configuration...\n" -msgstr "Lecture de la configuration de filtrage...\n" - -#: src/prefs_customheader.c:365 -#, fuzzy -msgid "Writing custom header configuration...\n" -msgstr "Ecriture de la configuration de filtrage...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "Le nom de l'en-tête n'est pas défini." - -#: src/prefs_customheader.c:541 -#, fuzzy -msgid "Delete header" -msgstr "Suppression du dossier" - -#: src/prefs_customheader.c:542 -#, fuzzy -msgid "Do you really want to delete this header?" -msgstr "Voulez-vous vraiment détruire cette règle ?" - -#: src/prefs_display_header.c:187 -#, fuzzy -msgid "Creating display header setting window...\n" -msgstr "Création de la fenêtre des en-têtes...\n" - -#: src/prefs_display_header.c:210 -#, fuzzy -msgid "Display header setting" -msgstr "/Afficher comme du texte" - -#: src/prefs_display_header.c:237 -#, fuzzy -msgid "Header name" -msgstr "En-tête" - -#: src/prefs_display_header.c:269 -#, fuzzy -msgid "Displayed Headers" -msgstr "Affichage des en-têtes de %s ...\n" - -#: src/prefs_display_header.c:327 -#, fuzzy -msgid "Hidden headers" -msgstr "En-tête" - -#: src/prefs_display_header.c:357 -#, fuzzy -msgid "Show all unspecified headers" -msgstr "/Affic_h tous les en-têtes" - -#: src/prefs_display_header.c:382 -#, fuzzy -msgid "Reading configuration for displaying headers...\n" -msgstr "Lecture de la configuration...\n" - -#: src/prefs_display_header.c:420 -#, fuzzy -msgid "Writing configuration for displaying headers...\n" -msgstr "Ecriture de la configuration de filtrage...\n" - -#: src/prefs_display_header.c:552 -#, fuzzy -msgid "This header is already in the list." -msgstr "Le dossier '%s' existe déjà." - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "Règles enregistrées" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "Opération" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(aucun)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "Mot-clé" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "Prédicat" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "contient" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "ne contient pas" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "Destination" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "Utilisation d'expression régulière" - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "Ne reçoit pas" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "Enregistrer" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr " Remplacer " - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "Lecture de la configuration de filtrage...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "Ecriture de la configuration de filtrage...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "(Nouveau)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "Destination non définie" - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "Supprimer la règle" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -msgstr "Voulez-vous vraiment détruire cette règle ?" - -#: 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:457 -msgid "Mark file not found.\n" -msgstr "Fichier des marques non trouvé.\n" - -#: src/procmsg.c:459 -#, 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:475 -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:480 -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:663 -msgid "Sending queued message failed.\n" -msgstr "L'envoi des messages en file d'attente a échoué.\n" - -#: src/procmsg.c:720 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "La ligne de commande d'impression est invalide : '%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "Création du dialogue d'avancement...\n" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "Une erreur est survenue pendant la récupération des données.\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "Impossible d'écrire dans le fichier.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "Oops: signature non vérifiée" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "Pas de signature trouvée" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "Signature correcte" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "MAUVAISE signature" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "Pas de clef publique pour vérifier la signature" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "Erreur lors de la vérification de la signature" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "Signature correcte de \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "Mauvaise signature de \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "" - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr " alias \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "L'en-tête du message en attente est corrompu.\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "" - -#: src/send.c:250 -#, fuzzy, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "Connection au serveur SMTP: %s ...\n" - -#: src/send.c:254 -msgid "Connecting" -msgstr "" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "" - -#: src/send.c:262 -#, fuzzy -msgid "Sending" -msgstr "Envoyer" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "" - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "" - -#: src/send.c:292 -#, fuzzy, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "Récupération du message (%d / %d) (%d / %d bytes)" - -#: src/send.c:309 -#, fuzzy -msgid "Quitting..." -msgstr "Fermeture" - -#: src/send.c:330 -#, 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:341 -msgid "Error occurred while sending HELO\n" -msgstr "Une erreur est arrivée pendant l'envoi de HELO\n" - -#: src/send.c:357 -#, fuzzy -msgid "Sending message" -msgstr "Envoyer le message" - -#: 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 "Effacer" - -#: src/summary_search.c:286 -msgid "Search failed" -msgstr "La recherche a échoué" - -#: 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:289 -msgid "/M_ove..." -msgstr "/Déplacer..." - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/_Copier..." - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/E_xécuter" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/_Marque" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/_Marque/_Marquer" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/_Marque/Démarquer" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/_Marque/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "/_Marque/Marqu_er comme non lus" - -#: src/summaryview.c:298 -#, fuzzy -msgid "/_Mark/Mark as rea_d" -msgstr "/_Marque/Marqu_er comme non lus" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/_Répondre" - -#: src/summaryview.c:302 -#, fuzzy -msgid "/Repl_y to sender" -msgstr "/_Répondre à tous" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/_Répondre à tous" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/Trans_fèrer" - -#: src/summaryview.c:305 -#, fuzzy -msgid "/Forward as a_ttachment" -msgstr "/Trans_férer en attachement" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/Oouvrir dans une nouvelle fenêtre" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "/Voir le so_urce" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/Affic_h tous les en-têtes" - -#: src/summaryview.c:311 -#, fuzzy -msgid "/Re-_edit" -msgstr "/_Edition" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/Im_primer..." - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "/Sélectionne tout" - -#: src/summaryview.c:322 -msgid "M" -msgstr "M" - -#: src/summaryview.c:322 -msgid "U" -msgstr "U" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "Création de la vue Résumé...\n" - -#: src/summaryview.c:352 -msgid "No." -msgstr "Non." - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "Traitement des marques" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "Il reste des marques, voulez-vous les traiter ?" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"dossier vide\n" -"\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Analyse du dossier (%s)..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "Fait." - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "Pas de message non lu" - -#: src/summaryview.c:816 -msgid "No unread message found. Go to next folder?" -msgstr "Pas de message non lu. Passage au dossier suivant ?" - -#: src/summaryview.c:957 src/summaryview.c:959 -msgid "Attracting messages by subject..." -msgstr "Tri des messages par sujet..." - -#: src/summaryview.c:1102 -#, c-format -msgid "%d deleted" -msgstr "%d détruit" - -#: src/summaryview.c:1106 -#, c-format -msgid "%s%d moved" -msgstr "%s%d déplacé" - -#: src/summaryview.c:1107 src/summaryview.c:1114 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1112 -#, c-format -msgid "%s%d copied" -msgstr "" - -#: src/summaryview.c:1129 -msgid " item(s) selected" -msgstr " élément(s) sélectionné(s)" - -#: src/summaryview.c:1140 -#, 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:1146 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d nouveau(x), %d non lu(s), %d au total" - -#: src/summaryview.c:1187 src/summaryview.c:1188 -msgid "Sorting summary..." -msgstr "Tri du résumé..." - -#: src/summaryview.c:1226 -msgid "\tSetting summary from message data..." -msgstr "\tDéfinition du résumé à partir des données du message..." - -#: src/summaryview.c:1228 -msgid "Setting summary from message data..." -msgstr "Définition du résumé à partir des données du message..." - -#: src/summaryview.c:1337 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "Ecriture du cache résumé (%s)..." - -#: src/summaryview.c:1389 -msgid "(No Date)" -msgstr "(Pas de date)" - -#: src/summaryview.c:1654 -#, c-format -msgid "Message %d is marked\n" -msgstr "Le message %d est marqué\n" - -#: src/summaryview.c:1683 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "Le message %d est marqué lu\n" - -#: src/summaryview.c:1718 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Le message %d est marqué non lu\n" - -#: src/summaryview.c:1760 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Le message %s/%d sera détruit\n" - -#: src/summaryview.c:1774 -msgid "Current folder is Trash." -msgstr "Le dossier courant est la Poubelle." - -#: src/summaryview.c:1796 src/summaryview.c:1798 -msgid "Deleting duplicated messages..." -msgstr "Suppression des messages en double..." - -#: src/summaryview.c:1848 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Le message %s/%d est démarqué\n" - -#: src/summaryview.c:1885 -#, 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:1897 -msgid "Destination is same as current folder." -msgstr "La destination est identique au dossier actuel." - -#: src/summaryview.c:1946 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "" - -#: src/summaryview.c:1959 -msgid "Destination to copy is same as current folder." -msgstr "" - -#: src/summaryview.c:1991 -msgid "Selecting all messages..." -msgstr "" - -#: src/summaryview.c:2045 -msgid "Print" -msgstr "Impression" - -#: src/summaryview.c:2046 -#, 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:2052 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"La ligne de commande d'impression est invalide:\n" -"`%s'" - -#: src/summaryview.c:2274 src/summaryview.c:2275 -msgid "Building threads..." -msgstr "Construction des threads..." - -#: src/summaryview.c:2297 src/summaryview.c:2298 -msgid "Unthreading..." -msgstr "Suppression des threads..." - -#: src/summaryview.c:2320 -msgid "Unthreading for execution..." -msgstr "Suppression des threads pour exécution..." - -#: src/summaryview.c:2407 -msgid "filtering..." -msgstr "tri en cours..." - -#: src/summaryview.c:2408 -msgid "Filtering..." -msgstr "Tri en cours..." - -#: src/summaryview.c:2514 -#, c-format -msgid "Go to %s\n" -msgstr "Aller à %s\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "Création de la vue Texte...\n" - -#: src/textview.c:366 -#, fuzzy -msgid "To save this part, pop up the context menu with " -msgstr "Pour sauvegarder cette pièce, activer le menu contextuel avec\n" - -#: src/textview.c:367 -#, fuzzy -msgid "right click and select `Save as...', " -msgstr "" -"un clic droit et sélectionnez 'Enregistrer sous...' ou appuyez sur 'y'.\n" -"\n" - -#: src/textview.c:368 -#, fuzzy -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"'Afficher comme du texte' ou appuyez sur 't'.\n" -"\n" - -#: src/textview.c:370 -#, fuzzy -msgid "To display this part as a text message, select " -msgstr "Pour afficher cette pièce comme du texte, sélectionnez\n" - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"'Afficher comme du texte' ou appuyez sur 't'.\n" -"\n" - -#: src/textview.c:373 -#, fuzzy -msgid "To open this part with external program, select " -msgstr "" -"Pour ouvrir cette pièce avec un programme externe, choisissez 'Open',\n" - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "" - -#: src/textview.c:375 -#, fuzzy -msgid "or double-click, or click the center button, " -msgstr "" -"ou double-cliquez, ou cliquez avec le bouton du milieu ou appuyez sur 'l'." - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "" - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "" - -#: src/utils.c:1547 -#, c-format -msgid "writing to %s failed.\n" -msgstr "L'écriture dans %s a échouée.\n" - -#: src/utils.c:1588 -#, fuzzy, c-format -msgid "move_file(): file %s already exists." -msgstr "Le dossier '%s' existe déjà." - -#: src/utils.c:1729 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "La ligne de commande Open URI est invalide : '%s'" - -#~ msgid "deleting message %d...\n" -#~ msgstr "Suppression du message %d...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/_Vue/Barre d'ou_tils/_Non affichée" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/_Message/_Marque/Marquer comme lu" - -#~ msgid "deleting article %d...\n" -#~ msgstr "Suppression de l'article %d...\n" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/_Marque/Marquer comme lus" - -#, fuzzy -#~ msgid "Show other headers" -#~ msgstr "/Affic_h tous les en-têtes" - -#~ msgid "Receive at getting from all accounts" -#~ msgstr "Réception sur tous les comptes" - -#~ 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'en-tête du module md5.c pour les termes de la licenses.\n" -#~ "\n" - -#~ msgid "Enable smooth scrolling on the message view" -#~ msgstr "Activer le défilement doux" - -#~ msgid "SunMonTueWedThuFriSat" -#~ msgstr "DimLunMarMerJeuVenSam" - -#~ 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 "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 "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.po b/po/it.po deleted file mode 100644 index ec3de0709..000000000 --- a/po/it.po +++ /dev/null @@ -1,4076 +0,0 @@ -# Italian translation of Sylpheed -# Copyright (C) 2001 Danilo Bodei -# Danilo Bodei <dbodei@lombardiacom.it>, 2001. -# -msgid "" -msgstr "" -"Project-Id-Version: sylpheed-0.4.99\n" -"POT-Creation-Date: 2001-06-16 13:11+0900\n" -"PO-Revision-Date: 2001-06-18\n" -"Last-Translator: Danilo Bodei <dbodei@lombardiacom.it>\n" -"Language-Team: italian <it@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: src/about.c:90 -msgid "About" -msgstr "Informazioni su..." - -#: src/about.c:199 -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. Parti " -"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:205 -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:210 -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:214 -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 è software libero; si può ridistribuire e modificare nei termini " -"della GNU General Public License versione 2 come pubblicata dalla Free " -"Software Foundation, o (a vostra scelta) una versione successiva.\n" -"\n" - -#: src/about.c:220 -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 sia utile, ma NON C'È " -"GARANZIA; neppure di COMMERCIABILITA' o IDONEITA' AD UN PARTICOLARE SCOPO. " -"Vedi la licenza GNU General Public License per ulteriori dettagli.\n" -"\n" - -#: src/about.c:226 -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 "" -"Dovreste aver ricevuto una copia della licenza GNU General Public License " -"insieme a questo programma; in caso contrario, scrivete alla Free Software " -"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." - -#: src/about.c:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1468 src/compose.c:3124 src/export.c:185 src/foldersel.c:176 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:334 src/main.c:342 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2020 -#: src/summaryview.c:2531 -msgid "OK" -msgstr "Ok" - -#: src/account.c:101 -msgid "Reading all config for each account...\n" -msgstr "Lettura della configurazione per ogni account...\n" - -#: src/account.c:116 -#, c-format -msgid "Found label: %s\n" -msgstr "Trovata etichetta: %s\n" - -#: src/account.c:208 -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 chiudete tutte le finestre di composizione prima di modificare " -"gli account." - -#: src/account.c:214 -msgid "Opening account edit window...\n" -msgstr "Apro la finestra di modifica dell'account...\n" - -#: src/account.c:361 -msgid "Creating account edit window...\n" -msgstr "Creo la finestra di modifica dell'account...\n" - -#: src/account.c:366 -msgid "Edit accounts" -msgstr "Modifica account" - -#: src/account.c:394 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2236 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "Nome" - -#: src/account.c:395 src/prefs_account.c:632 -msgid "Protocol" -msgstr "Protocollo" - -#: src/account.c:396 -msgid "Server" -msgstr "Server" - -#: src/account.c:415 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "Aggiungi" - -#: src/account.c:421 -msgid "Edit" -msgstr "Modifica" - -#: src/account.c:427 src/prefs_customheader.c:247 -msgid " Delete " -msgstr "Elimina" - -#: src/account.c:433 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "Giù" - -#: src/account.c:439 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "Su" - -#: src/account.c:453 -msgid " Set as usually used account " -msgstr " Imposta come account usato abitualmente " - -#: src/account.c:459 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "Chiudi" - -#: src/account.c:513 -msgid "Delete account" -msgstr "Elimina account" - -#: src/account.c:514 -msgid "Do you really want to delete this account?" -msgstr "Volete veramente eliminare questo account?" - -#: src/account.c:515 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3298 src/folderview.c:1447 src/folderview.c:1490 -#: src/folderview.c:1589 src/folderview.c:1630 src/folderview.c:1729 -#: src/folderview.c:1762 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "Sì" - -#: src/account.c:515 src/compose.c:3298 src/folderview.c:1447 -#: src/folderview.c:1490 src/folderview.c:1589 src/folderview.c:1630 -#: src/folderview.c:1729 src/folderview.c:1762 -msgid "+No" -msgstr "+No" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -msgid "/_File" -msgstr "/_File" - -#: src/addressbook.c:230 -msgid "/_File/New _address" -msgstr "/_File/Nuovo _indirizzo" - -#: src/addressbook.c:231 -msgid "/_File/New _group" -msgstr "/_File/Nuovo _gruppo" - -#: src/addressbook.c:232 -msgid "/_File/New _folder" -msgstr "/_File/Nuova _cartella" - -#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -msgid "/_File/---" -msgstr "/_File/---" - -#: src/addressbook.c:234 -msgid "/_File/_Edit" -msgstr "/_File/_Modifica" - -#: src/addressbook.c:235 -msgid "/_File/_Delete" -msgstr "/_File/_Elimina" - -#: src/addressbook.c:237 src/compose.c:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/_File/_Chiudi" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/_Aiuto" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -msgid "/_Help/_About" -msgstr "/_Aiuto/_Informazioni su..." - -#: src/addressbook.c:244 src/addressbook.c:254 -msgid "/New _address" -msgstr "/Nuovo _indirizzo" - -#: src/addressbook.c:245 src/addressbook.c:255 -msgid "/New _group" -msgstr "/Nuovo _gruppo" - -#: 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:369 -#: src/folderview.c:206 src/folderview.c:208 src/folderview.c:217 -#: src/folderview.c:219 src/folderview.c:228 src/folderview.c:230 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/_Modifica" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/_Elimina" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "Indirizzo e-mail" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "Note" - -#: src/addressbook.c:325 src/compose.c:2796 -msgid "Address book" -msgstr "Rubrica" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "Nome:" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -msgid "Delete" -msgstr "Elimina" - -#: src/addressbook.c:442 -msgid "Lookup" -msgstr "Cerca" - -#: 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 "Indirizzi comuni" - -#: src/addressbook.c:486 -msgid "Personal address" -msgstr "Indirizzi personali" - -#: src/addressbook.c:577 -msgid "Delete address(es)" -msgstr "Elimina indirizzo/i" - -#: src/addressbook.c:578 -msgid "Really delete the address(es)?" -msgstr "Si vogliono veramente eliminare gli indirizzi?" - -#: src/addressbook.c:579 src/addressbook.c:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "No" - -#: src/addressbook.c:1000 src/folderview.c:1320 src/folderview.c:1521 -msgid "New folder" -msgstr "Nuova cartella" - -#: src/addressbook.c:1001 src/folderview.c:1321 -msgid "Input the name of new folder:" -msgstr "Inserire il nome della nuova cartella:" - -#: src/addressbook.c:1002 src/folderview.c:1322 src/folderview.c:1525 -msgid "NewFolder" -msgstr "NuovaCartella" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "Il nome esiste già." - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "Nuovo gruppo" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "Inserire il nome del nuovo gruppo:" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "NuovoGruppo" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "Modifica il gruppo" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "Inserire il nuovo nome del gruppo:" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "Modifica la cartella" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "Inserire il nuovo nome della cartella:" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Volete veramente eliminare `%s' ?" - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "Modifica l'indirizzo" - -#: src/addressbook.c:1290 src/compose.c:2795 src/select-keys.c:302 -msgid "Address" -msgstr "Indirizzo" - -#: src/addressbook.c:1294 src/compose.c:1468 src/compose.c:3125 -#: src/compose.c:3695 src/export.c:186 src/foldersel.c:177 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:334 src/main.c:342 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2020 -#: src/summaryview.c:2531 -msgid "Cancel" -msgstr "Annulla" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "Leggo il file della rubrica..." - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s non esiste.\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:856 -#: src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 src/mh.c:816 -#: src/news.c:661 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:998 -#: src/summaryview.c:1204 src/summaryview.c:1286 src/summaryview.c:1347 -#: src/summaryview.c:1804 src/summaryview.c:2282 src/summaryview.c:2305 -#: src/summaryview.c:2326 src/summaryview.c:2419 -msgid "done.\n" -msgstr "fatto.\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "Esporto la rubrica nel file..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "fallita la scrittura dei dati della rubrica.\n" - -#: src/alertpanel.c:119 src/compose.c:3298 src/main.c:332 -msgid "Notice" -msgstr "Avviso" - -#: src/alertpanel.c:132 src/main.c:218 -msgid "Warning" -msgstr "Avvertimento" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "Errore" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "Creo la finestra di dialogo di allarme...\n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "Mostra questo messaggio la prossima volta" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "Impossibile allocare memoria\n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/_Aggiungi..." - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/_Rimuovi" - -#: src/compose.c:370 src/folderview.c:209 src/folderview.c:220 -#: src/folderview.c:231 -msgid "/_Property..." -msgstr "/_Proprietà..." - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/_File/_Allega file" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/_File/_Inserisci file" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/_File/Inserisci fi_rma" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/_Modifica/_Annulla" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/_Modifica/_Ripristina" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/_Modifica/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/_Modifica/_Taglia" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/_Modifica/_Copia" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/_Modifica/_Incolla" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/_Modifica/_Seleziona tutto" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/_Modifica/A capo righe _lunghe" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/_Modifica/Modifica con l'_editor esterno" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/M_essaggio" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/M_essaggio/In_via" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/M_essaggio/Invia più _tardi" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "/M_essaggio/Salva in bo_zze" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/M_essaggio/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "/M_essaggio/_A" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "/M_essaggio/_Cc" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/M_essaggio/_Bcc" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/M_essaggio/_Rispondi a" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "/M_essaggio/_Seguito di" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/M_essaggio/A_llega" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "/M_essaggio/Fir_ma" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "/M_esssaggio/C_ifra" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/St_rumenti" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/St_rumenti/Mostra r_ighello" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/St_rumenti/_Rubrica" - -#: src/compose.c:489 src/compose.c:559 src/compose.c:619 src/procmsg.c:686 -msgid "Can't get text part\n" -msgstr "Impossibile ricevere la parte di testo\n" - -#: src/compose.c:551 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: il file non esiste\n" - -#: src/compose.c:563 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"Inizio messaggio inoltrato:\n" -"\n" - -#: src/compose.c:1232 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "Il file %s non esiste\n" - -#: src/compose.c:1236 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "Impossibile ottenere la dimensione di %s\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s is empty\n" -msgstr "Il file %s è vuoto\n" - -#: src/compose.c:1261 -#, c-format -msgid "Message: %s" -msgstr "Messaggio: %s" - -#: src/compose.c:1367 -msgid " [Edited]" -msgstr " [Modificato]" - -#: src/compose.c:1369 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - Composizione messaggio%s" - -#: src/compose.c:1372 -#, c-format -msgid "Compose message%s" -msgstr "Composizione messaggio%s" - -#: src/compose.c:1394 src/compose.c:3588 -msgid "Recipient is not specified." -msgstr "Non avete specificato nessun destinatario." - -#: src/compose.c:1412 -msgid "can't get recipient list." -msgstr "impossibile leggere la lista dei destinatari." - -#: src/compose.c:1430 -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" -"E` necessario scegliere un account di posta per poterla spedire." - -#: src/compose.c:1451 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "Errore durante l'invio del messaggio a %s." - -#: src/compose.c:1465 -msgid "Queueing" -msgstr "Accodo" - -#: src/compose.c:1466 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"Errore durante l'invio del messaggio.\n" -"Lo metto in coda per la spedizione?" - -#: src/compose.c:1472 src/compose.c:3600 -msgid "Can't queue the message." -msgstr "Impossibile accodare il messaggio" - -#: src/compose.c:1475 -msgid "Error occurred while sending the message." -msgstr "Errore durante l'invio del messaggio." - -#: src/compose.c:1482 src/compose.c:3607 -msgid "Can't save the message to outbox." -msgstr "Impossibile salvare il messaggio nella posta in uscita." - -#: src/compose.c:1508 src/compose.c:1629 src/compose.c:1715 src/utils.c:1533 -msgid "can't change file mode\n" -msgstr "Impossibile cambiare i permessi del file\n" - -#: src/compose.c:1534 -msgid "Can't convert the codeset of the message." -msgstr "Impossibile convertire la codifica del messaggio." - -#: src/compose.c:1543 -msgid "can't write headers\n" -msgstr "Impossibile scrivere le intestazioni\n" - -#: src/compose.c:1661 -msgid "saving sent message...\n" -msgstr "salvo il messaggio inviato...\n" - -#: src/compose.c:1666 -msgid "can't save message\n" -msgstr "Impossibile salvare il messaggio\n" - -#: src/compose.c:1672 src/compose.c:1779 -msgid "can't open mark file\n" -msgstr "Impossibile aprire il file delle segnature\n" - -#: src/compose.c:1695 -msgid "queueing message...\n" -msgstr "accodo il messaggio...\n" - -#: src/compose.c:1770 -msgid "can't queue the message\n" -msgstr "impossibile accodare il messaggio\n" - -#: src/compose.c:1808 -#, c-format -msgid "Can't open file %s\n" -msgstr "Impossibile aprire il file %s\n" - -#: src/compose.c:2162 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "ID-messaggio generato: %s\n" - -#: src/compose.c:2236 src/compose.c:3096 -msgid "MIME type" -msgstr "Tipo MIME" - -#: src/compose.c:2236 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "Dimensione" - -#: src/compose.c:2253 -msgid "Creating compose window...\n" -msgstr "Creo la finestra di composizione...\n" - -#: src/compose.c:2299 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "Da:" - -#: src/compose.c:2722 src/mainwindow.c:1359 src/prefs_account.c:501 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "Invia" - -#: src/compose.c:2723 -msgid "Send message" -msgstr "Invia il messaggio" - -#: src/compose.c:2730 -msgid "Send later" -msgstr "Invia più tardi" - -#: src/compose.c:2731 -msgid "Put into queue folder and send later" -msgstr "Metti in coda e invia più tardi" - -#: src/compose.c:2738 src/folderview.c:738 -msgid "Draft" -msgstr "Bozze" - -#: src/compose.c:2739 -msgid "Save to draft folder" -msgstr "Salva nella cartella delle bozze" - -#: src/compose.c:2748 -msgid "Insert" -msgstr "Inserisci" - -#: src/compose.c:2749 -msgid "Insert file" -msgstr "Inserisci file" - -#: src/compose.c:2756 -msgid "Attach" -msgstr "Allega" - -#: src/compose.c:2757 -msgid "Attach file" -msgstr "Allega file" - -#: src/compose.c:2766 src/prefs_common.c:1035 -msgid "Signature" -msgstr "Firma" - -#: src/compose.c:2767 -msgid "Insert signature" -msgstr "Inserisci firma" - -#: src/compose.c:2775 -msgid "Editor" -msgstr "Editor" - -#: src/compose.c:2776 -msgid "Edit with external editor" -msgstr "Modifica con un editor esterno" - -#: src/compose.c:2784 -msgid "Linewrap" -msgstr "A capo" - -#: src/compose.c:2785 -msgid "Wrap long lines" -msgstr "A capo linee lunghe" - -#: src/compose.c:2992 -msgid "Invalid MIME type." -msgstr "Tipo MIME non valido." - -#: src/compose.c:3010 -msgid "File doesn't exist or is empty." -msgstr "Il file non esiste o è vuoto." - -#: src/compose.c:3078 -msgid "Property" -msgstr "Proprietà" - -#: src/compose.c:3098 -msgid "Encoding" -msgstr "Codifica" - -#: src/compose.c:3121 -msgid "Path" -msgstr "Percorso" - -#: src/compose.c:3122 -msgid "File name" -msgstr "Nome file" - -#: src/compose.c:3269 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "La riga di comando per l'editor esterno non è valida: `%s'\n" - -#: src/compose.c:3295 -#, c-format -msgid "" -"The external editor is still working.\n" -"Force terminating the process?\n" -"process group id: %d" -msgstr "" -"L'editor esterno è ancora attivo.\n" -"Forzo la conclusione del processo?\n" -"group id del processo: %d" - -#: src/compose.c:3308 -#, c-format -msgid "Terminated process group id: %d" -msgstr "group id del processo terminato: %d" - -#: src/compose.c:3309 -#, c-format -msgid "Temporary file: %s" -msgstr "File temporaneo: %s" - -#: src/compose.c:3333 -msgid "Compose: input from monitoring process\n" -msgstr "Composizione: input da un processo di controllo\n" - -#. failed -#: src/compose.c:3366 -msgid "Couldn't exec external editor\n" -msgstr "Impossibile eseguire l'editor esterno\n" - -#: src/compose.c:3370 -msgid "Couldn't write to file\n" -msgstr "Impossibile scrivere sul file\n" - -#: src/compose.c:3372 -msgid "Pipe read failed\n" -msgstr "Lettura dalla pipe fallita\n" - -#: src/compose.c:3629 -msgid "can't remove the old draft message\n" -msgstr "Impossibile rimuovere la vecchia bozza del messaggio\n" - -#: src/compose.c:3657 src/compose.c:3669 -msgid "Select file" -msgstr "Seleziona il file" - -#: src/compose.c:3693 -msgid "Discard message" -msgstr "Scarta messaggio" - -#: src/compose.c:3694 -msgid "This message has been modified. discard it?" -msgstr "Questo messaggio è stato modificato. Lo scarto?" - -#: src/compose.c:3695 -msgid "Discard" -msgstr "Scarta" - -#: src/compose.c:3695 -msgid "to Draft" -msgstr "nelle Bozze" - -#: src/export.c:122 -msgid "Export" -msgstr "Esporta" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "Specifica la cartella di origine e il file mbox." - -#: src/export.c:154 -msgid "Source dir:" -msgstr "Dir origine:" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "File da esportare:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr " Seleziona... " - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "Seleziona il file da esportare" - -#: src/foldersel.c:131 -msgid "Select folder" -msgstr "Seleziona la cartella" - -#: src/folderview.c:203 src/folderview.c:214 -msgid "/Create _new folder..." -msgstr "/Crea _nuova cartella..." - -#: src/folderview.c:204 src/folderview.c:215 -msgid "/_Rename folder..." -msgstr "/_Rinomina cartella..." - -#: src/folderview.c:205 src/folderview.c:216 -msgid "/_Delete folder" -msgstr "/_Elimina cartella" - -#: src/folderview.c:207 -msgid "/Remove _mailbox" -msgstr "/Rimuovi la _mailbox" - -#: src/folderview.c:218 -msgid "/Remove _IMAP4 server" -msgstr "/Rimuovi il server _IMAP4" - -#: src/folderview.c:225 -msgid "/_Subscribe to newsgroup..." -msgstr "/_Iscrizione al newsgroup..." - -#: src/folderview.c:227 -msgid "/_Remove newsgroup" -msgstr "/_Rimuovi newsgroup" - -#: src/folderview.c:229 -msgid "/Remove _news server" -msgstr "/Rimuovi il server delle _news" - -#: src/folderview.c:240 -msgid "Folder" -msgstr "Cartella" - -#: src/folderview.c:240 -msgid "New" -msgstr "Nuovi" - -#: src/folderview.c:241 src/prefs_common.c:2173 -msgid "Unread" -msgstr "Non letti" - -#: src/folderview.c:241 -msgid "#" -msgstr "N." - -#: src/folderview.c:251 -msgid "Creating folder view...\n" -msgstr "Creo la vista della cartella...\n" - -#: src/folderview.c:395 -msgid "Setting folder info...\n" -msgstr "Impostazione informazioni della cartella...\n" - -#: src/folderview.c:396 -msgid "Setting folder info..." -msgstr "Impostazione informazioni della cartella..." - -#: src/folderview.c:539 src/mainwindow.c:2084 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "Analisi cartella %s%c%s..." - -#: src/folderview.c:544 src/mainwindow.c:2089 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "Analisi cartella %s..." - -#: src/folderview.c:581 -msgid "Updating all folders..." -msgstr "Aggiorno tutte le cartelle..." - -#: src/folderview.c:716 src/prefs_account.c:655 -msgid "Inbox" -msgstr "In entrata" - -#: src/folderview.c:721 -msgid "Outbox" -msgstr "In uscita" - -#: src/folderview.c:726 -msgid "Queue" -msgstr "Coda" - -#: src/folderview.c:731 -msgid "Trash" -msgstr "Cestino" - -#: src/folderview.c:1213 -#, c-format -msgid "Folder %s is selected\n" -msgstr "La cartella %s è selezionata\n" - -#: src/folderview.c:1326 src/folderview.c:1389 src/folderview.c:1530 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "`%c' non può essere incluso nel nome della cartella." - -#: src/folderview.c:1334 src/folderview.c:1398 src/folderview.c:1538 -#, c-format -msgid "The folder `%s' already exists." -msgstr "La cartella `%s' esiste già." - -#: src/folderview.c:1342 src/folderview.c:1546 -#, c-format -msgid "Can't create the folder `%s'." -msgstr "Impossibile creare la cartella `%s'." - -#: src/folderview.c:1381 -#, c-format -msgid "Input new name for `%s':" -msgstr "Inserite il nuovo nome per `%s':" - -#: src/folderview.c:1383 -msgid "Rename folder" -msgstr "Rinomina cartella" - -#: src/folderview.c:1443 -#, 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 all'interno di `%s' saranno eliminati.\n" -"Volete veramente eliminarla?" - -#: src/folderview.c:1446 src/folderview.c:1588 -msgid "Delete folder" -msgstr "Eliminazione cartella" - -#: src/folderview.c:1452 src/folderview.c:1594 -#, c-format -msgid "Can't remove the folder `%s'." -msgstr "Impossibile rimuovere la cartella `%s'." - -#: src/folderview.c:1486 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" -"Volete veramente eliminare la mailbox `%s'?\n" -"(I messaggi NON saranno eliminati dal disco)" - -#: src/folderview.c:1489 -msgid "Remove folder" -msgstr "Elimina cartella" - -#: src/folderview.c:1522 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"Immettete il nome della nuova cartella:\n" -"(se volete creare una cartella che contiene delle sottocartelle,\n" -" aggiungete `/' alla fine del nome)" - -#: src/folderview.c:1586 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Volete veramente eliminare la cartella `%s'?" - -#: src/folderview.c:1627 -#, c-format -msgid "Really delete IMAP4 server `%s'?" -msgstr "Volete veramente eliminare il server IMAP4 `%s'?" - -#: src/folderview.c:1629 -msgid "Delete IMAP4 server" -msgstr "Elimino il server IMAP4" - -#: src/folderview.c:1670 -msgid "Subscribe newsgroup" -msgstr "Iscrizione al newsgroup" - -#: src/folderview.c:1671 -msgid "Input subscribing newsgroup:" -msgstr "Inserire il newsgroup:" - -#: src/folderview.c:1680 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "Il newsgroup `%s' esiste già." - -#: src/folderview.c:1726 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Volete veramente eliminare il newsgroup `%s'?" - -#: src/folderview.c:1728 -msgid "Delete newsgroup" -msgstr "Elimino il newsgroup" - -#: src/folderview.c:1759 -#, c-format -msgid "Really delete news server `%s'?" -msgstr "Volete veramente eliminare il server delle news `%s'?" - -#: src/folderview.c:1761 -msgid "Delete news server" -msgstr "Elimino il server delle news" - -#: src/gtkutils.c:50 src/gtkutils.c:66 -msgid "Abcdef" -msgstr "Abcdef" - -#: src/headerview.c:56 -msgid "Newsgroups:" -msgstr "Newsgroup:" - -#: src/headerview.c:57 src/summary_search.c:159 -msgid "Subject:" -msgstr "Oggetto:" - -#: src/headerview.c:87 -msgid "Creating header view...\n" -msgstr "Creo la vista delle intestazioni...\n" - -#: src/headerview.c:174 src/summaryview.c:1387 -msgid "(No From)" -msgstr "(Nessun mittente)" - -#: src/headerview.c:189 src/summaryview.c:1403 -msgid "(No Subject)" -msgstr "(Nessun Oggetto)" - -#: src/headerwindow.c:55 -msgid "Creating header window...\n" -msgstr "Creo la finestra delle intestazioni...\n" - -#: src/headerwindow.c:59 -msgid "All header" -msgstr "Intestazioni" - -#: src/headerwindow.c:113 -#, c-format -msgid "Displaying the header of %s ...\n" -msgstr "Visualizzo l'intestazione di %s...\n" - -#: src/headerwindow.c:115 -#, c-format -msgid "%s - All header" -msgstr "%s - Intestazioni" - -#: src/imageview.c:48 -msgid "Creating image view...\n" -msgstr "Creo la vista dell'immagine...\n" - -#: src/imageview.c:80 src/imageview.c:117 -msgid "Can't load the image." -msgstr "Impossibile caricare l'immagine." - -#: src/imap.c:193 -#, c-format -msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "La connessione IMAP4 a %s:%d è stata interrotta. Mi riconnetto...\n" - -#: src/imap.c:219 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "Creo la connessione IMAP4 a %s:%d ...\n" - -#: src/imap.c:360 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "il messaggio %d è già stato messo nella cache.\n" - -#: src/imap.c:369 -#, c-format -msgid "getting message %d...\n" -msgstr "Ricevo il messaggio %d...\n" - -#: src/imap.c:375 src/procmsg.c:586 -#, c-format -msgid "can't fetch message %d\n" -msgstr "Impossibile prelevare il messaggio %d\n" - -#: src/imap.c:404 -#, c-format -msgid "can't append message %s\n" -msgstr "Impossibile aggiungere il messaggio %s\n" - -#: src/imap.c:433 src/imap.c:490 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "le cartella sorgente e destinazione sono identiche.\n" - -#: src/imap.c:443 src/imap.c:495 src/mh.c:201 src/mh.c:267 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "Sposto il messaggio %s%c%d in %s ...\n" - -#: src/imap.c:447 src/imap.c:499 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "Copio in %s il messaggio %s%c%d ...\n" - -#: src/imap.c:567 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "Impossibile impostare i flag eliminati: %d\n" - -#: src/imap.c:574 src/imap.c:613 -msgid "can't expunge\n" -msgstr "Impossibile cancellare\n" - -#: src/imap.c:606 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "Impossibile impostare i flag di eliminazione: 1:%d\n" - -#: src/imap.c:718 -msgid "can't create mailbox\n" -msgstr "Impossibile creare la mailbox\n" - -#: src/imap.c:755 -msgid "can't delete mailbox\n" -msgstr "Impossibile eliminare la mailbox\n" - -#: src/imap.c:781 -msgid "can't get envelope\n" -msgstr "Impossibile ricevere la busta\n" - -#: src/imap.c:787 -msgid "error occurred while getting envelope.\n" -msgstr "errore ricevendo la busta.\n" - -#: src/imap.c:795 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "Impossibile analizzare la busta: %s\n" - -#: src/imap.c:825 -#, c-format -msgid "deleting message %d...\n" -msgstr "elimino il messaggio %d...\n" - -#: src/imap.c:850 -msgid "\tDeleting all cached messages... " -msgstr "\tCancello tutti i messaggi nella cache... " - -#: src/imap.c:864 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "Impossibile connettersi al server IMAP4: %s:%d\n" - -#: src/imap.c:897 -msgid "can't get namespace\n" -msgstr "Impossibile ricevere il namespace\n" - -#: src/imap.c:1304 -#, c-format -msgid "can't select folder: %s\n" -msgstr "Impossibile selezionare la cartella: %s\n" - -#: src/imap.c:1320 -msgid "IMAP4 login failed.\n" -msgstr "Login IMAP4 fallito.\n" - -#: src/imap.c:1490 -#, c-format -msgid "can't append %s to %s\n" -msgstr "Impossibile aggiungere %s a %s\n" - -#: src/imap.c:1506 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "Impossibile copiare %d in %s\n" - -#: src/imap.c:1530 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "errore nell'esecuzione del comando IMAP: STORE %d:%d %s\n" - -#: src/imap.c:1544 -msgid "error while imap command: EXPUNGE\n" -msgstr "errore nell'esecuzione del comando IMAP: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "Importa" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "Specifica il file nella mbox e la cartella di destinazione." - -#: src/import.c:158 -msgid "Importing file:" -msgstr "File da importare:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Cartella di destinazione:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Seleziona i file da importare" - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "Attesa" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "Prelevo i nuovi messaggi" - -#: src/inc.c:384 src/news.c:128 -#, c-format -msgid "Input password for %s on %s:" -msgstr "Inserire la password di %s su %s:" - -#: src/inc.c:388 src/news.c:130 -msgid "Input password" -msgstr "Inserire la password" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "Prelevo" - -#: src/inc.c:412 -msgid "Done" -msgstr "Fatto" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "Autorizzazione non concessa per %s su %s" - -#: src/inc.c:487 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "Ricevo i nuovi messaggi dall'account %s...\n" - -#: src/inc.c:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: Prelevo i nuovi messaggi" - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "Mi connetto al server POP3: %s..." - -#: src/inc.c:527 src/inc.c:660 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "Impossibile connettersi al server POP3: %s:%d\n" - -#: src/inc.c:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "Impossibile connettersi al server POP3: %s:%d" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "Prelevo il messaggio (%d di %d) (%d di %d bytes)" - -#: src/inc.c:719 -msgid "Authorizing..." -msgstr "Autorizzazione..." - -#: src/inc.c:724 -msgid "Getting the number of new messages (STAT)..." -msgstr "Ricevo il numero di messaggi nuovi (STAT)..." - -#: src/inc.c:729 -msgid "Getting the number of new messages (LAST)..." -msgstr "Ricevo il numero di messaggi nuovi (LAST)..." - -#: src/inc.c:734 -msgid "Getting the number of new messages (UIDL)..." -msgstr "Ricevo il numero di messaggi nuovi (UIDL)..." - -#: src/inc.c:739 -msgid "Getting the size of messages (LIST)..." -msgstr "Ricevo la dimensione dei messaggi (LIST)..." - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "Elimino il messaggio" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "Esco" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "un messaggio non sarà ricevuto\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "Errore nell'elaborazione della posta." - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "Spazio su disco esaurito." - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "nessun messaggio nella mailbox locale.\n" - -#: src/inc.c:881 -#, c-format -msgid "Getting new messages from %s into %s...\n" -msgstr "Ricevo in %s i nuovi messaggi da %s...\n" - -#: src/logwindow.c:50 -msgid "Creating log window...\n" -msgstr "Creo la finestra di log...\n" - -#: src/logwindow.c:54 -msgid "Protocol log" -msgstr "Log del protocollo" - -#. for gettext -#: src/main.c:108 -#, c-format -msgid "" -"File `%s' already exists.\n" -"Can't create folder." -msgstr "" -"Il file `%s' esiste già.\n" -"Impossibile creare la cartella." - -#: src/main.c:149 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread non è supportato da glib.\n" - -#: src/main.c:219 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"GnuPG non è installato correttamente.\n" -"Il supporto per OpenPGP è disabilitato." - -#: src/main.c:300 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "Uso: %s [OPZIONE]...\n" - -#: src/main.c:303 -msgid " --compose [address] open composition window" -msgstr " --compose [indirizzo] apre una finestra di composizione" - -#: src/main.c:304 -msgid " --receive receive new messages" -msgstr " --receive riceve nuovi messaggi" - -#: src/main.c:305 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all riceve nuovi messaggi da tutti gli account" - -#: src/main.c:306 -msgid " --debug debug mode" -msgstr " --debug modalità di debug" - -#: src/main.c:307 -msgid " --help display this help and exit" -msgstr " --help mostra questo aiuto ed esce" - -#: src/main.c:308 -msgid " --version output version information and exit" -msgstr " --version mostra informazioni sulla versione ed esce" - -#: src/main.c:333 -msgid "Composing message exists. Really quit?" -msgstr "C'è un messaggio in composizione. Volete veramente uscire?" - -#: src/main.c:340 -msgid "Queued messages" -msgstr "Messaggi accodati" - -#: src/main.c:341 -msgid "Some unsent messages are queued. Exit now?" -msgstr "Ci sono messaggi non inviati in coda. Esco ugualmente?" - -#. remote command mode -#: src/main.c:412 -msgid "another Sylpheed is already running.\n" -msgstr "un altro Sylpheed e già in esecuzione.\n" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "/_File/_Aggiungi mailbox..." - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/_File/A_ggiorna l'albero delle cartelle" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "/_File/Ca_rtella" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/_File/Ca_rtella/Crea _nuova cartella" - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/_File/Ca_rtella/_Rinomina cartella" - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "/_File/Ca_rtella/_Elimina cartella" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/_File/_Importa mbox da file..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "/_File/Es_porta mbox nel file..." - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "/_File/S_vuota cestino" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/_File/_Salva come..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/_File/S_tampa..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/_File/_Esci" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/_Modifica/C_erca" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/_Vista" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/_Vista/_Albero delle cartelle" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/_Vista/_Messaggio" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/_Vista/_Barra degli strumenti" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/_Vista/_Barra strumenti/Icone _e testo" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/_Vista/_Barra strumenti/_Icone" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/_Vista/_Barra strumenti/_Testo" - -#: src/mainwindow.c:364 -msgid "/_View/_Toolbar/_Non-display" -msgstr "/_Vista/_Barra strumenti/_Nascondi" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/_Vista/Barra di _stato" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/_Vista/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/_Vista/Albero _cartelle separato" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/_Vista/Vista m_essaggio separata" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/_Vista/Co_difica" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/_Vista/Co_difica/_Automatica" - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/_Vista/Co_difica/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/_Vista/Co_difica/ASCII a 7 bit (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/_Vista/Co_difica/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/_Vista/Co_difica/Europa Occidentale (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/_Vista/Co_difica/Europa Centrale (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/_Vista/Co_difica/_Baltico (ISO-8859-13)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/_Vista/Co_difica/Baltico (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/_Vista/Co_difica/Greco (ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/_Vista/Co_difica/Turco (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/_Vista/Co_difica/Cirillico (ISO-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/_Vista/Co_difica/Cirillico (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/_Vista/Co_difica/Cirillico (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/_Vista/Co_difica/Giapponese (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/_Vista/Co_difica/Giapponese (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/_Vista/Co_difica/Giapponese (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/_Vista/Co_difica/Giapponese (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/_Vista/Co_difica/Cinese semplificato (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/_Vista/Co_difica/Cinese tradizionale (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/_Vista/Co_difica/Cinese tradizionale (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/_Vista/Co_difica/Cinese (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/_Vista/Co_difica/Coreano (EUC-_KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/_Vista/Co_difica/Coreano (ISO-2022-KR)" - -#: src/mainwindow.c:445 -msgid "/_Message/Rece_ive new mail" -msgstr "/M_essaggio/Ricevi nuova _posta" - -#: src/mainwindow.c:446 -msgid "/_Message/Receive from _all accounts" -msgstr "/M_essaggio/Ricevi da _tutti gli account" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/M_essaggio/Invia i messa_ggi accodati" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/M_essaggio/Componi _nuovo messaggio" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/M_essaggio/_Rispondi" - -#: src/mainwindow.c:454 -msgid "/_Message/Repl_y to sender" -msgstr "/M_essaggio/Rispondi al _mittente" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/M_essaggio/Rispondi a t_utti" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/M_essaggio/_Inoltra" - -#: src/mainwindow.c:457 -msgid "/_Message/Forward as an a_ttachment" -msgstr "/M_essaggio/Inoltra come a_llegato" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/M_essaggio/_Sposta" - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "M_essaggio/_Copia..." - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/M_essaggio/_Elimina" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/M_essaggio/Contrassegn_a" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/M_essaggio/Contrassegn_a/Contrassegn_a" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/M_essaggio/Contrassegn_a/To_gli contrassegno" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/M_essaggio/Contrassegn_a/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/M_essaggio/Contrassegn_a/Contrassegna co_me non letto" - -#: src/mainwindow.c:468 -msgid "/_Message/_Mark/Mark it as _being read" -msgstr "/M_essaggio/Contrassegn_a/Contrassegna come _letto" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "_/Messaggio/Apri in una nuova _finestra" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "/M_essaggio/_Vedi sorgente" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/M_essaggio/Mostra intesta_zioni" - -#: src/mainwindow.c:474 -msgid "/_Message/Re_edit" -msgstr "/M_essaggio/Rimo_difica" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/_Sommario" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/_Sommario/Elimina messaggi _duplicati" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/_Sommario/_Filtra messaggi" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/_Sommario/_Esegui" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/_Sommario/_Aggiorna" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/_Sommario/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/_Sommario/Messaggio _precedente" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/_Sommario/Messaggio _successivo" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/_Sommario/Messaggio successivo non _letto" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/_Sommario/_Cambia cartella" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/_Sommario/_Ordina" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/_Sommario/_Ordina/Ordina per _numero" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/_Sommario/_Ordina/Ordina per dimen_sione" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/_Sommario/_Ordina/Ordina per _data" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/_Sommario/_Ordina/Ordina per _mittente" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/_Sommario/_Ordina/Ordina per _oggetto" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/_Sommario/_Ordina/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/_Sommario/_Ordina/_Raggruppa per oggetto" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/_Sommario/Ra_ggruppa discussioni" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/_Sommario/No_n raggruppare discussioni" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/_Sommario/I_mposta voci visualizzate..." - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/St_rumento/Finestra di _log..." - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/_Configurazione" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/_Configurazione/Opzioni _globali..." - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "/_Configurazione/_Impostazione dei filtri..." - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/_Configurazione/_Opzioni account..." - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/_Configurazione/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/_Configurazione/Crea _nuovo account..." - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/_Configurazione/_Modifica gli account... " - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/_Configurazione/Cambia _account attivo" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/_Aiuto/_Manuale" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/_Aiuto/_Manuale/_Inglese" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/_Aiuto/_Manuale/_Giapponese" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/_Aiuto/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "Creo la finestra principale...\n" - -#: src/mainwindow.c:673 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "FinestraPrincipale: allocazione colore %d fallita.\n" - -#: src/mainwindow.c:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "Senza titolo" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "niente" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "Account attivo: %s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "posizione finestra: x = %d, y =%d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "Svuota cestino" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "Cancello tutti i messaggi nel cestino?" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "Aggiungi mailbox" - -#: src/mainwindow.c:978 -msgid "" -"Input the location of mailbox.\n" -"If the existing mailbox is specified, it will be\n" -"scanned automatically." -msgstr "" -"Inserite la posizione della mailbox.\n" -"Se è specificata una mailbox esistente, sarà\n" -"analizzata automaticamente." - -#: src/mainwindow.c:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "La mailbox `%s' esiste già." - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "Mailbox" - -#: src/mainwindow.c:995 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 "" -"Creazione della mailbox fallita.\n" -"Può darsi che esistano già alcuni file, oppure non si ha il permesso di " -"scrittura." - -#: src/mainwindow.c:1141 -msgid "Setting widgets..." -msgstr "Imposto i widget..." - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "Ricevi" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "Includi nuova posta" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "Ricevi tutti" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "Includi la nuova posta di tutti gli account" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "Invia i messaggi accodati" - -#: src/mainwindow.c:1370 src/prefs_account.c:503 src/prefs_common.c:638 -msgid "Compose" -msgstr "Componi" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "Componi un nuovo messaggio" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "Rispondi" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "Rispondi al messaggio" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "Rispondi tutti" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "Rispondi a tutti" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "Inoltra" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "Inoltra il messaggio" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "Elimina il messaggio" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "Esegui" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "Esegui le operazioni segnate" - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "Successivo" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "Successivo messaggio non letto" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "Opzioni" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "Opzioni globali" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "Account" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "Configurazione account" - -#: src/mainwindow.c:1659 src/summaryview.c:2530 -msgid "Exit" -msgstr "Esci" - -#: src/mainwindow.c:1659 src/summaryview.c:2530 -msgid "Exit this program?" -msgstr "Esco da questo programma?" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "Fallito invio del messaggio accodato." - -#: src/mainwindow.c:1916 -#, c-format -msgid "forced charset: %s\n" -msgstr "charset forzato: %s\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "Ricevo in %s i messaggi da %s...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "impossibile leggere il file mbox.\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "formato mbox non valido: %s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "mbox non valida: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "impossibile aprire il file temporaneo\n" - -#: src/mbox.c:159 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"trovato Da senza escape:\n" -"%s" - -#: src/mbox.c:194 -msgid "can't write to temporary file\n" -msgstr "impossibile scrivere sul file temporaneo\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "trovati %d messaggi.\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "impossibile creare il file di lock %s\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "se possibile, usare 'flock' invece di 'file'.\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "impossibile creare %s\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "la mailbox è occupata da un altro processo, attendo...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "impossibile effettuare il lock %s\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "tipo di lock non valido\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "impossibile liberare il lock su %s\n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "impossibile troncare la mailbox a zero.\n" - -#: src/mbox.c:383 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "Esporto in %s i messaggi da %s...\n" - -#: src/messageview.c:67 -msgid "Creating message view...\n" -msgstr "Creo la vista del messaggio...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "impossibile copiare il messaggio %s in %s\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "Impossibile aprire il file delle segnature.\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "%s esiste già." - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Ultimo numero nella cartella %s = %d\n" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "\tCerco i messaggi non in cache..." - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "trovati %d messaggi non in cache.\n" - -#: src/mh.c:813 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tOrdino per numero i messaggi non in cache... " - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/_Apri" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/Apri _con..." - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/_Mostra come testo" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "/_Salva come..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/_Controlla firma" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "Tipo MIME" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "Creo la vista MIME...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "Selezionate \"Controlla firma\" per controllare" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "Impossibile avere parte del messaggio composto." - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "Impossibile salvare parte del messaggio composto." - -#: src/mimeview.c:708 src/summaryview.c:2013 -msgid "Save as" -msgstr "Salva come..." - -#: src/mimeview.c:714 src/summaryview.c:2018 -msgid "Overwrite" -msgstr "Sovrascrivo" - -#: src/mimeview.c:715 src/summaryview.c:2019 -msgid "Overwrite existing file?" -msgstr "Sovrascrivo il file esistente?" - -#: src/mimeview.c:769 -msgid "Open with" -msgstr "Apri con" - -#: src/mimeview.c:770 -#, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Inserite la riga di comando per aprire il file:\n" -"(`%s' verrà sostituito col nome del file)" - -#: src/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "La riga di comando del visualizzatore MIME non è valida: `%s'" - -#: src/news.c:92 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "Stabilisco la connessione NNTP con %s:%d ...\n" - -#: src/news.c:175 -#, c-format -msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "La connessione NNTP a %s:%d è stata interrotta. Riprovo...\n" - -#: src/news.c:244 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "l'articolo %d è già nella cache.\n" - -#: src/news.c:256 -#, c-format -msgid "can't select group %s\n" -msgstr "impossibile selezionare il gruppo: %s\n" - -#: src/news.c:261 -#, c-format -msgid "getting article %d...\n" -msgstr "ricevo l'articolo %d...\n" - -#: src/news.c:266 -#, c-format -msgid "can't read article %d\n" -msgstr "impossibile leggere l'articolo %d\n" - -#: src/news.c:298 -msgid "can't post article.\n" -msgstr "impossibile inviare l'articolo.\n" - -#: src/news.c:322 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "impossibile prelevare l'articolo %d\n" - -#: src/news.c:392 -#, c-format -msgid "can't set group: %s\n" -msgstr "impossibile impostare il gruppo: %s\n" - -#: src/news.c:399 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "intervallo di articoli non valido: %d - %d\n" - -#: src/news.c:408 -msgid "no new articles.\n" -msgstr "nessun nuovo articolo.\n" - -#: src/news.c:421 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "ricevo xover %d - %d in %s...\n" - -#: src/news.c:424 -msgid "can't get xover\n" -msgstr "impossibile ricevere xover\n" - -#: src/news.c:430 -msgid "error occurred while getting xover.\n" -msgstr "errore ricevendo xover.\n" - -#: src/news.c:438 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "linea xover non valida: %s\n" - -#: src/news.c:455 src/news.c:480 -msgid "can't get xhdr\n" -msgstr "impossibile ricevere xhdr\n" - -#: src/news.c:463 src/news.c:488 -msgid "error occurred while getting xhdr.\n" -msgstr "errore ricevendo xhdr.\n" - -#: src/news.c:612 -#, c-format -msgid "deleting article %d...\n" -msgstr "cancello l'articolo %d...\n" - -#: src/news.c:643 -msgid "\tDeleting all cached articles... " -msgstr "\tCancello tutti gli articoli nella cache... " - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "Impossibile connettersi al server NNTP: %s:%d\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "errore di protocollo: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "errore di protocollo\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "Errore inviando\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "Passphrase" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[nessun user id]" - -#: src/passphrase.c:244 -#, c-format -msgid "" -"%sPlease enter the passphrase for:\n" -"\n" -" %.*s \n" -"(%.*s)\n" -msgstr "" -"%sInserire la passphrase per:\n" -"\n" -" %.*s \n" -"(%.*s)\n" - -#: src/passphrase.c:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"Passphrase sbagliata! Prova ancora...\n" -"\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "errore nell'autorizzazione\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "Nel saluto non è stata trovata la necessaria data/ora APOP\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "Errore di sintassi nella data/ora del saluto\n" - -#: src/pop.c:171 src/pop.c:212 -msgid "POP3 protocol error\n" -msgstr "Errore nel protocollo POP3\n" - -#: src/prefs.c:56 -msgid "Reading configuration...\n" -msgstr "Leggo la configurazione...\n" - -#: src/prefs.c:76 src/prefs.c:183 -#, c-format -msgid "Found %s\n" -msgstr "Trovato %s\n" - -#: src/prefs.c:90 -msgid "Finished reading configuration.\n" -msgstr "Fine lettura configurazione.\n" - -#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:364 -#: src/prefs_account.c:378 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -msgid "failed to write configuration to file\n" -msgstr "fallita la scrittura della configurazione sul file\n" - -#: src/prefs.c:216 -msgid "Configuration is saved.\n" -msgstr "Configurazione salvata.\n" - -#: src/prefs.c:469 -msgid "Apply" -msgstr "Applica" - -#: src/prefs_account.c:409 -msgid "Opening account preferences window...\n" -msgstr "Apro la finestra di configurazione degli account...\n" - -#: src/prefs_account.c:436 -#, c-format -msgid "Account%d" -msgstr "Account%d" - -#: src/prefs_account.c:449 -msgid "Preferences for new account" -msgstr "Opzioni per il nuovo account" - -#: src/prefs_account.c:454 -msgid "Preferences for each account" -msgstr "Opzioni per gli account" - -#: src/prefs_account.c:477 -msgid "Creating account preferences window...\n" -msgstr "Creo la finestra delle opzioni degli account...\n" - -#: src/prefs_account.c:497 -msgid "Basic" -msgstr "Generale" - -#: src/prefs_account.c:499 src/prefs_common.c:634 -msgid "Receive" -msgstr "Ricevi" - -#: src/prefs_account.c:506 src/prefs_common.c:645 -msgid "Privacy" -msgstr "Privacy" - -#: src/prefs_account.c:509 -msgid "Advanced" -msgstr "Avanzato" - -#: src/prefs_account.c:563 -msgid "Name of this account" -msgstr "Nome dell'account" - -#: src/prefs_account.c:572 -msgid "Usually used" -msgstr "Usato abitualmente" - -#: src/prefs_account.c:576 -msgid "Personal information" -msgstr "Informazioni personali" - -#: src/prefs_account.c:585 -msgid "Full name" -msgstr "Nome completo" - -#: src/prefs_account.c:591 -msgid "Mail address" -msgstr "Indirizzo" - -#: src/prefs_account.c:597 -msgid "Organization" -msgstr "Organizzazione" - -#: src/prefs_account.c:621 -msgid "Server information" -msgstr "Informazioni server" - -#: src/prefs_account.c:642 -msgid "POP3 (normal)" -msgstr "POP3 (normale)" - -#: src/prefs_account.c:644 -msgid "POP3 (APOP auth)" -msgstr "POP3 (APOP aut)" - -#: src/prefs_account.c:646 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:648 -msgid "News (NNTP)" -msgstr "News (NNTP)" - -# src/prefs_account.c:634 -#: src/prefs_account.c:650 -msgid "None (local)" -msgstr "Nessuno (locale)" - -#: src/prefs_account.c:672 -msgid "This server requires authentication" -msgstr "Questo server richiede l'autenticazione" - -#: src/prefs_account.c:711 -msgid "News server" -msgstr "Server delle news" - -#: src/prefs_account.c:717 -msgid "Server for receiving" -msgstr "Server per la ricezione" - -#: src/prefs_account.c:723 -msgid "SMTP server (send)" -msgstr "Server SMTP (invio)" - -#: src/prefs_account.c:730 -msgid "User ID" -msgstr "User ID" - -#: src/prefs_account.c:736 -msgid "Password" -msgstr "Password" - -#: src/prefs_account.c:786 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:794 -msgid "Remove messages on server when received" -msgstr "Cancella i messaggi sul server dopo averli ricevuti" - -#: src/prefs_account.c:796 -msgid "Receive all messages on server" -msgstr "Ricevi tutti i messaggi sul server" - -#: src/prefs_account.c:799 -msgid "`Receive all' checks for new mail on this account" -msgstr "Ricevi la nuova posta di tutti gli account su questo account" - -#: src/prefs_account.c:801 -msgid "Filter messages on receiving" -msgstr "Filtra messaggi in ricezione" - -#: src/prefs_account.c:838 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "Intestazioni" - -#: src/prefs_account.c:845 -msgid "Add Date header field" -msgstr "Aggiungi il campo Data nell'intestazione" - -#: src/prefs_account.c:846 -msgid "Generate Message-ID" -msgstr "Genera ID messaggio" - -#: src/prefs_account.c:853 -msgid "Add user-defined header" -msgstr "Aggiungi intestazione definita dall'utente" - -#: src/prefs_account.c:855 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr "Modifica..." - -#: src/prefs_account.c:865 -msgid "Automatically set following addresses" -msgstr "Imposta automaticamente gli indirizzi seguenti" - -#: src/prefs_account.c:874 -msgid "Cc" -msgstr "Cc" - -#: src/prefs_account.c:887 -msgid "Bcc" -msgstr "Bcc" - -#: src/prefs_account.c:900 -msgid "Reply-To" -msgstr "Rispondi a" - -#: src/prefs_account.c:913 -msgid "Authentication" -msgstr "Autenticazione" - -#: src/prefs_account.c:921 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "Autenticazione SMTP (SMTP AUT)" - -#: src/prefs_account.c:923 -msgid "Authenticate with POP3 before sending" -msgstr "Autentica con POP3 prima dell'invio" - -#: src/prefs_account.c:957 -msgid "Signature file" -msgstr "File della firma" - -#: src/prefs_account.c:986 -msgid "Sign key" -msgstr "Firma la chiave" - -#: src/prefs_account.c:994 -msgid "Use default GnuPG key" -msgstr "Usa la chiave di default di GnuPG" - -#: src/prefs_account.c:1003 -msgid "Select key by your email address" -msgstr "Scegliete la chiave per il vostro indirizzo email" - -#: src/prefs_account.c:1012 -msgid "Specify key manually" -msgstr "Specificate la chiave manualmente" - -#: src/prefs_account.c:1028 -msgid "User or key ID:" -msgstr "User o ID chiave:" - -#: src/prefs_account.c:1073 -msgid "Specify SMTP port" -msgstr "Specifica la porta SMTP" - -#: src/prefs_account.c:1085 -msgid "Specify POP3 port" -msgstr "Specifica la porta POP3" - -#: src/prefs_account.c:1097 -msgid "Specify domain name" -msgstr "Specifica il nome di dominio" - -#: src/prefs_account.c:1144 -msgid "Mail address is not entered." -msgstr "L'indirizzo di posta non è impostato." - -#: src/prefs_account.c:1149 -msgid "SMTP server is not entered." -msgstr "Il server SMTP non è impostato." - -#: src/prefs_account.c:1154 -msgid "User ID is not entered." -msgstr "Lo user ID non è impostato." - -#: src/prefs_account.c:1159 -msgid "POP3 server is not entered." -msgstr "Il server POP3 non è impostato." - -#: src/prefs_account.c:1164 -msgid "IMAP4 server is not entered." -msgstr "Il server IMAP4 non è impostato." - -#: src/prefs_account.c:1169 -msgid "NNTP server is not entered." -msgstr "Il server NNTP non è impostato." - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "Creo la finestra delle opzioni globali...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "Opzioni globali" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "Visualizzazione" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "Messaggio" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "Interfaccia" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "Altro" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "Programma esterno" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "Usa un programma esterno per incorporare la posta" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "Percorso del programma" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "Spool locale" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "Incorpora da spool" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "Filtra quando incorpori" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "Directory di spool" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "Controllo automatico nuova posta" - -#: src/prefs_common.c:759 -msgid "each" -msgstr "ogni" - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "minuti" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "Controlla se c'è nuova posta all'avvio" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "News" - -#: src/prefs_common.c:790 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"Massimo numero di articoli da scaricare\n" -"(0 significa illimitato)" - -#: src/prefs_common.c:858 -msgid "Use external program for sending" -msgstr "Usa programma esterno per l'invio" - -#: src/prefs_common.c:882 -msgid "Save sent message to outbox" -msgstr "Salva i messaggi inviati nella cartella `In uscita'" - -#: src/prefs_common.c:884 -msgid "Queue message that failed to send" -msgstr "Accoda i messaggi che non riesci a spedire" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "Codifica usata in uscita" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "Automatica" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "ASCII a 7 bit (US-ASCII)" - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "Europa Occidentale (ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "Europa Centrale (ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "Baltico (ISO-8859-13)" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "Baltico (ISO-8859-4)" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "Greco (ISO-8859-7)" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "Turco (ISO-8859-9)" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "Cirillico (ISO-8859-5)" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "Cirillico (KOI8-R)" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "Cirillico (Windows-1251)" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "Cirillico (KOI8-U)" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "Giapponese (ISO-2022-JP)" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "Giapponese (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "Giapponese (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "Cinese semplificato (GB2312)" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "Cinese tradizionale (Big5)" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "Cinese tradizionale (EUC-TW)" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "Cinese (ISO-2022-CN)" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "Coreano (EUC-KR)" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "Citazione" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "Cita il messaggio quando rispondi" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "Simbolo di citazione" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "Formato citazione:" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr "Descrizione dei simboli" - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "Inserisci automaticamente la firma" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "Separatore firma" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "Nei messaggi, vai a capo dopo" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "caratteri" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "A capo nella citazione" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "A capo prima di inviare" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "Carattere" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "Testo" - -#: src/prefs_common.c:1160 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "Traduci le intestazioni (come `Da:', `Oggetto:')" - -#: src/prefs_common.c:1163 -msgid "Display unread number next to folder name" -msgstr "Mostra il numero dei messaggi non letti vicino al nome della cartella" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "Vista Sommario" - -#: src/prefs_common.c:1176 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "Mostra destinatario nella colonna `Da' se il mittente sei tu stesso" - -#: src/prefs_common.c:1178 -msgid "Enable horizontal scroll bar" -msgstr "Abilita la barra di scorrimento orizzontale" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "Formato della Data" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" -"I normali caratteri messi nella stringa sono copiati senza conversione. I " -"simboli di conversione sono preceduti dal carattere %, e sono rimpiazzati " -"come segue:\n" -"%a: il nome abbreviato del giorno\n" -"%A: il nome completo del giorno\n" -"%b: il nome abbreviato del mese\n" -"%B: il nome completo del mese\n" -"%c: la data e l'ora per la località attuale\n" -"%C: il numero del secolo (anno/100)\n" -"%d: il numero del giorno del mese\n" -"%H: l'ora usando un orologio di 24 ore\n" -"%I: l'ora usando un orologio di 12 ore\n" -"%j: il numero del giorno dell'anno\n" -"%m: il numero del mese\n" -"%M: il numero del minuto\n" -"%p: AM o PM\n" -"%S: il numero dei secondi\n" -"%w: il numero del giorno della settimana\n" -"%x: la data per la località attuale\n" -"%y: le ultime due cifre dell'anno\n" -"%Y: il numero dell'anno\n" -"%Z: il fuso orario o il nome o l'abbreviazione" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr "Imposta le voci visibili nel sommario..." - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "Abilita la colorazione del messaggio" - -#: src/prefs_common.c:1297 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "Mostra alfabeto e numeri a 2 byte con caratteri ad 1 byte" - -#: src/prefs_common.c:1299 -msgid "Display header pane above message view" -msgstr "Mostra il riquadro intestazione sopra la vista messaggi" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "Mostra intestazione abbreviata nella vista messaggio" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "Spazio tra le linee" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "pixel" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "Lascia spazio all'inizio" - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "Scorrimento" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "Mezza pagina" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "Scorrimento uniforme" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "Passo" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "Cifra messaggio per default" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "Firma messaggio per default" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "Controlla automaticamente le firme" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "Mostra il risultato del controllo della firma in una finestra di popup" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "Nascondi l'input mentre inserisco la passphrase" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "Mostra un avvertimento alla partenza se GnuPG non è attivo" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "Chiave di firma predefinita" - -#: src/prefs_common.c:1554 -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:1561 -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:1565 -msgid "Go to inbox after receiving new mail" -msgstr "Vai a `In entrata' dopo la ricezione di nuova posta" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "Esegui immediatamente quando sposti o elimini dei messaggi" - -#: src/prefs_common.c:1580 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" -"(I messaggi verranno solo segnati fino all'esecuzione\n" -" delle operazioni se questa è inattiva)" - -#: src/prefs_common.c:1587 -msgid "Add address to destination when double-clicked" -msgstr "Aggiungi l'indirizzo di destinazione con un doppio click" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "In uscita" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "Chiedi conferma in uscita" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "Svuota cestino all'uscita" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "Chiedi prima di svuotare" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "Avverti se ci sono messaggi accodati" - -#: src/prefs_common.c:1648 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "Browser web esterno (%s verrà sostituito con l'URI)" - -#: src/prefs_common.c:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "Comando" - -#: src/prefs_common.c:1673 -#, 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 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "Editor esterno (%s verrà sostituito con il nome del file)" - -#: src/prefs_common.c:1752 -msgid "Set message colors" -msgstr "Imposta i colori dei messaggi" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "Colori" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "Testo Citato - Primo Livello" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "Testo Citato - Secondo Livello" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "Testo Citato - Terzo Livello" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "Link URI" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "Ricicla i colori di citazione" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "Selezione colore per il 1° livello citazione" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "Selezione colore per il 2° livello citazione" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "Selezione colore per il 3° livello citazione" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "Selezione colore per URI" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "Descrizione dei simboli" - -#: src/prefs_common.c:2052 -#, 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" -"Nome del mittente\n" -"Iniziali del mittente\n" -"Oggetto\n" -"A\n" -"ID Messaggio\n" -"%" - -#: src/prefs_common.c:2155 -msgid "Set display item" -msgstr "Visualizza voci" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "Contrassegna" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "Numero" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "Data" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "Da" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "Oggetto" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "Selezione carattere" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "Intestazioni personalizzate" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "Creo la finestra di impostazione dell'intestazione personalizzata...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "Impostazione dell'intestazione personalizzata" - -#: src/prefs_customheader.c:212 -msgid "Value" -msgstr "Valore" - -#: src/prefs_customheader.c:320 -msgid "Reading custom header configuration...\n" -msgstr "Leggo la configurazione dell'intestazione personalizzata...\n" - -#: src/prefs_customheader.c:365 -msgid "Writing custom header configuration...\n" -msgstr "Scrivo la configurazione dell'intestazione personalizzata...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "Il nome intestazione non è impostato." - -#: src/prefs_customheader.c:541 -msgid "Delete header" -msgstr "Elimina l'intestazione" - -#: src/prefs_customheader.c:542 -msgid "Do you really want to delete this header?" -msgstr "Volete veramente eliminare questa intestazione?" - -#: src/prefs_display_header.c:187 -msgid "Creating display header setting window...\n" -msgstr "Creo la finestra di impostazione dell'intestazione...\n" - -#: src/prefs_display_header.c:210 -msgid "Display header setting" -msgstr "Mostra le impostazioni dell'intestazione" - -#: src/prefs_display_header.c:237 -msgid "Header name" -msgstr "Nome intestazione" - -#: src/prefs_display_header.c:269 -msgid "Displayed Headers" -msgstr "Intestazioni visibili" - -#: src/prefs_display_header.c:327 -msgid "Hidden headers" -msgstr "Intestazioni nascoste" - -#: src/prefs_display_header.c:357 -msgid "Show all unspecified headers" -msgstr "Mostra tutte le intestazioni non specificate" - -#: src/prefs_display_header.c:382 -msgid "Reading configuration for displaying headers...\n" -msgstr "Leggo la configurazione delle intestazioni visualizzate...\n" - -#: src/prefs_display_header.c:420 -msgid "Writing configuration for displaying headers...\n" -msgstr "Scrivo la configurazione delle intestazioni visualizzate...\n" - -#: src/prefs_display_header.c:552 -msgid "This header is already in the list." -msgstr "Questa intestazione è già nella lista." - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "Regole registrate" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "Creo la finestra impostazione filtri...\n" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "Impostazione dei filtri" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "Operatore" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(nessuno)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "Parola chiave" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "Predicato" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "contiene" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "non contiene" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "Destinazione" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "Usa esp.reg." - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "Non ricevere" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "Registra" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr "Sostituisci" - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "Leggo la configurazione dei filtri...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "Scrivo la configurazione dei filtri...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "(Nuovo)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "Destinatario non impostato." - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "Elimina regola" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -msgstr "Volete veramente eliminare questa regola?" - -#: src/procmime.c:686 -msgid "Code conversion failed.\n" -msgstr "Conversione codice fallita.\n" - -#: src/procmsg.c:138 -msgid "Cache data is corrupted\n" -msgstr "I dati nella cache sono rovinati\n" - -#: src/procmsg.c:202 -msgid "\tNo cache file\n" -msgstr "\tIl file della cache non esiste\n" - -#: src/procmsg.c:209 -msgid "\tReading summary cache..." -msgstr "\tLeggo il sommario della cache..." - -#: src/procmsg.c:214 -msgid "Cache version is different. Discarding it.\n" -msgstr "La versione nella cache è diversa. La scarto.\n" - -#: src/procmsg.c:279 -msgid "\tMarking the messages..." -msgstr "\tContrassegno i messaggi..." - -#: src/procmsg.c:323 -#, c-format -msgid "\t%d new message(s)\n" -msgstr "\t%d nuovo(i) messaggio(i)\n" - -#: src/procmsg.c:456 -msgid "Mark file not found.\n" -msgstr "Non trovo il file delle segnature.\n" - -#: src/procmsg.c:458 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "La versione contrassegnata è differente (%d != %d). La scarto.\n" - -#: src/procmsg.c:474 -msgid "Can't open mark file with append mode.\n" -msgstr "Impossibile aprire il file delle segnature in aggiunta.\n" - -#: src/procmsg.c:479 -msgid "Can't open mark file with write mode.\n" -msgstr "Impossibile aprire il file delle segnature in scrittura.\n" - -#: src/procmsg.c:662 -msgid "Sending queued message failed.\n" -msgstr "Fallito invio del messaggio accodato.\n" - -#: src/procmsg.c:719 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "La riga di comando di stampa non è valida: `%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "Stato" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "Creo la finestra di avanzamento...\n" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "errore durante il prelievo dei dati.\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "Impossibile scrivere sul file.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "Oops: Firma non verificata" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "Firma non trovata" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "Firma corretta" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "Firma DIFETTOSA" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "Nessuna chiave pubblica per verificare la firma" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "Errore verificando la firma" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "Risultati differenti per le firme" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "Errore: Stato sconosciuto" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "Firma corretta da \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "Firma DIFETTOSA da \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "Non trovo il nome utente per questa chiave." - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr " o \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "Firma fatta %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "Impronta digitale della chiave: %s\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "Selezionate la chiave per `%s'" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "Raccolgo informazioni per `%s' ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "Seleziona chiavi" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "ID chiave" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "Val" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "Seleziona" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "Aggiungi chiave" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "Immettete un altro user o chiave ID\n" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "L'intestazione del messaggio accodato è rovinata.\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "Account non trovato. Uso l'account attivo...\n" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "Account non trovato.\n" - -#: src/send.c:250 -#, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "Mi connetto al server SMTP: %s..." - -#: src/send.c:254 -msgid "Connecting" -msgstr "Mi connetto" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "Invio MAIL FROM..." - -#: src/send.c:262 -msgid "Sending" -msgstr "Invia" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "Invio RCPT TO..." - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "Invio DATA..." - -#: src/send.c:292 -#, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "Invio il messaggio (%d di %d bytes)" - -#: src/send.c:309 -msgid "Quitting..." -msgstr "Esco..." - -#: src/send.c:330 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "Impossibile connettersi al server SMTP: %s:%d\n" - -#: src/send.c:341 -msgid "Error occurred while sending HELO\n" -msgstr "Errore inviando HELO\n" - -#: src/send.c:357 -msgid "Sending message" -msgstr "Invia il messaggio" - -#: src/setup.c:43 -msgid "Mailbox setting" -msgstr "Configurazione 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 "" -"Prima occorre selezionare la posizione della mailbox.\n" -"Può essere usata una maibox esistente nel formato MH.\n" -"Se non si è sicuri, selezionare semplicemente OK." - -#: src/sourcewindow.c:76 -msgid "Creating source window...\n" -msgstr "Creo la finestra sorgente...\n" - -#: src/sourcewindow.c:80 -msgid "Source of the message" -msgstr "Sorgente del messaggio" - -#: src/sourcewindow.c:140 -#, c-format -msgid "Displaying the source of %s ...\n" -msgstr "Visualizzo il sorgente di %s ...\n" - -#: src/sourcewindow.c:142 -#, c-format -msgid "%s - Source" -msgstr "%s - Sorgente" - -#: src/summary_search.c:99 src/summary_search.c:190 -msgid "Search" -msgstr "Cerca" - -#: src/summary_search.c:172 -msgid "Case sensitive" -msgstr "Maiuscole/minuscole" - -#: src/summary_search.c:178 -msgid "Backward search" -msgstr "Cerca all'indietro" - -#: src/summary_search.c:184 -msgid "Select all matched" -msgstr "Seleziona corrispondenze" - -#: src/summary_search.c:191 -msgid "Clear" -msgstr "Pulisci" - -#: src/summary_search.c:286 -msgid "Search failed" -msgstr "Ricerca fallita" - -#: src/summary_search.c:287 -msgid "Search string not found." -msgstr "Sringa cercata non trovata." - -#: 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 -msgid "End of list reached; continue from beginning?" -msgstr "Ho raggiunto la fine della lista; continuo dall'inizio?" - -#: src/summary_search.c:296 -msgid "Search finished" -msgstr "Ricerca terminata" - -#: src/summaryview.c:289 -msgid "/M_ove..." -msgstr "/_Sposta" - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/_Copia..." - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/Ese_gui" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/Contrasseg_na" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/Contrasseg_na/Contrasseg_na" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/Contrasseg_na/Togli con_trassegno" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/Contrasseg_na/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "/Contrasseg_na/Contrassegna come n_on letto" - -#: src/summaryview.c:298 -msgid "/_Mark/Make it as _being read" -msgstr "/Contrasseg_na/Contrassegna come già _letto" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/_Rispondi" - -#: src/summaryview.c:302 -msgid "/Repl_y to sender" -msgstr "/Rispondi al _mittente" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/Rispondi a _tutti" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/_Inoltra" - -#: src/summaryview.c:305 -msgid "/Forward as an a_ttachment" -msgstr "/Inoltra come a_llegato" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/Apri in una nuova _finestra" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "/Vista so_rgente" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/Mostra intesta_zioni" - -#: src/summaryview.c:311 -msgid "/Re_edit" -msgstr "/_Modifica" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/Stam_pa" - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "/Selezion_a tutto" - -#: src/summaryview.c:322 -msgid "M" -msgstr "S" - -#: src/summaryview.c:322 -msgid "U" -msgstr "N" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "Creo la vista del sommario...\n" - -#: src/summaryview.c:352 -msgid "No." -msgstr "No." - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "Segno del processo" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "Sono rimaste alcune operazioni segnate. Le elaboro?" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"cartella vuota\n" -"\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Esamino la cartella (%s)..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "fatto." - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "Nessun messaggio non letto" - -#: src/summaryview.c:816 -msgid "No unread message found. Go to next folder?" -msgstr "Non è stato trovato nessun messaggio non letto. Passo alla cartella seguente?" - -#: src/summaryview.c:952 src/summaryview.c:954 -msgid "Attracting messages by subject..." -msgstr "Raggruppa messaggi per oggetto..." - -#: src/summaryview.c:1097 -#, c-format -msgid "%d deleted" -msgstr "%d eliminato" - -#: src/summaryview.c:1101 -#, c-format -msgid "%s%d moved" -msgstr "%s%d spostato" - -#: src/summaryview.c:1102 src/summaryview.c:1109 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1107 -#, c-format -msgid "%s%d copied" -msgstr "%s%d copiato" - -#: src/summaryview.c:1124 -msgid " item(s) selected" -msgstr " voci selezionate" - -#: src/summaryview.c:1135 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d nuovi, %d non letti, %d totali (%s)" - -#: src/summaryview.c:1141 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d nuovi, %d non letti, %d totali" - -#: src/summaryview.c:1182 src/summaryview.c:1183 -msgid "Sorting summary..." -msgstr "Ordino il sommario..." - -#: src/summaryview.c:1221 -msgid "\tSetting summary from message data..." -msgstr "\tImposto il sommario dai dati dei messaggi..." - -#: src/summaryview.c:1223 -msgid "Setting summary from message data..." -msgstr "Imposto il sommario dai dati dei messaggi..." - -#: src/summaryview.c:1332 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "Scrivo la cache del sommario (%s)..." - -#: src/summaryview.c:1384 -msgid "(No Date)" -msgstr "(Nessuna Data)" - -#: src/summaryview.c:1649 -#, c-format -msgid "Message %d is marked\n" -msgstr "Il messaggio %d è contrassegnato\n" - -#: src/summaryview.c:1678 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "Il messaggio %d è contrassegnato come già letto\n" - -#: src/summaryview.c:1713 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Il messaggio %d è contrassegnato come non letto\n" - -#: src/summaryview.c:1755 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Il messaggio %s/%d è impostato per l'eliminazione\n" - -#: src/summaryview.c:1769 -msgid "Current folder is Trash." -msgstr "La cartella attuale è il Cestino." - -#: src/summaryview.c:1791 src/summaryview.c:1793 -msgid "Deleting duplicated messages..." -msgstr "Elimino i messaggi duplicati..." - -#: src/summaryview.c:1843 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Il messaggio %s/%d non è contrassegnato\n" - -#: src/summaryview.c:1880 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "Il messaggio %d è impostato per lo spostamento in %s\n" - -#: src/summaryview.c:1892 -msgid "Destination is same as current folder." -msgstr "La destinazione coincide con la cartella attuale." - -#: src/summaryview.c:1941 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "Il messaggio %d è impostato per la copia in %s\n" - -#: src/summaryview.c:1954 -msgid "Destination to copy is same as current folder." -msgstr "La destinazione della copia coincide con la cartella attuale." - -#: src/summaryview.c:1986 -msgid "Selecting all messages..." -msgstr "Seleziono tutti i messaggi..." - -#: src/summaryview.c:2040 -msgid "Print" -msgstr "Stampa" - -#: src/summaryview.c:2041 -#, c-format -msgid "" -"Enter the print command line:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Inserite la riga di comando per la stampa:\n" -"(`%s' verrà sostituito col nome del file)" - -#: src/summaryview.c:2047 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"La riga di comando per la stampa non è valida:\n" -"`%s'" - -#: src/summaryview.c:2269 src/summaryview.c:2270 -msgid "Building threads..." -msgstr "Costruisco le discussioni..." - -#: src/summaryview.c:2292 src/summaryview.c:2293 -msgid "Unthreading..." -msgstr "Cancello le discussioni..." - -#: src/summaryview.c:2315 -msgid "Unthreading for execution..." -msgstr "" - -#: src/summaryview.c:2402 -msgid "filtering..." -msgstr "filtro..." - -#: src/summaryview.c:2403 -msgid "Filtering..." -msgstr "Filtro..." - -#: src/summaryview.c:2507 -#, c-format -msgid "Go to %s\n" -msgstr "Vado in %s\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "Creo la vista del testo...\n" - -#: src/textview.c:366 -msgid "To save this part, pop up the context menu with " -msgstr "Per salvare questa parte, apri il menù contestuale" - -#: src/textview.c:367 -msgid "right click and select `Save as...', " -msgstr "cliccando con il tasto destro e seleziona `Salva come...', " - -#: src/textview.c:368 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"o premi il tasto `y'.\n" -"\n" - -#: src/textview.c:370 -msgid "To display this part as a text message, select " -msgstr "Per mostrare questa parte come testo seleziona " - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"`Mostra come testo', o premi il tasto `t'.\n" -"\n" - -#: src/textview.c:373 -msgid "To open this part with external program, select " -msgstr "Per aprire questa parte con un programma esterno, seleziona " - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "`Apri' o `Apri con...', " - -#: src/textview.c:375 -msgid "or double-click, or click the center button, " -msgstr "o fai doppio click, o clicca col pulsante centrale, " - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "o premi il tasto `l'." - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "Questa firma non è stata ancora controllata.\n" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "Per controllarla, apri il menù contestuale cliccando con\n" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "il tasto destro e seleziona `Controlla firma'.\n" - -#: src/utils.c:1540 -#, c-format -msgid "writing to %s failed.\n" -msgstr "fallita la scrittura su %s.\n" - -#: src/utils.c:1581 -#, c-format -msgid "move_file(): file %s already exists." -msgstr "move_file(): il file `%s' esiste già." - -#: src/utils.c:1722 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "La riga di comando per l'apertura dell'URI non è valida: `%s'" \ No newline at end of file diff --git a/po/ja.po b/po/ja.po deleted file mode 100644 index 703da4dc8..000000000 --- a/po/ja.po +++ /dev/null @@ -1,4082 +0,0 @@ -# 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-06-20 17:53+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:90 -msgid "About" -msgstr "¤³¤Î¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ" - -#: src/about.c:199 -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:205 -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:210 -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:214 -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:220 -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:226 -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:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1476 src/compose.c:3132 src/export.c:185 src/foldersel.c:176 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:334 src/main.c:342 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "OK" -msgstr "OK" - -#: src/account.c:101 -msgid "Reading all config for each account...\n" -msgstr "Á´¤Æ¤Î¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê¤òÆɤ߹þ¤ßÃæ...\n" - -#: src/account.c:116 -#, c-format -msgid "Found label: %s\n" -msgstr "¥é¥Ù¥ëȯ¸«: %s\n" - -#: src/account.c:208 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" -"¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤¬³«¤¤¤Æ¤¤¤Þ¤¹¡£\n" -"¥¢¥«¥¦¥ó¥È¤òÊÔ½¸¤¹¤ëÁ°¤ËÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤Æ¤¯¤À¤µ¤¤¡£" - -#: src/account.c:214 -msgid "Opening account edit window...\n" -msgstr "¥¢¥«¥¦¥ó¥ÈÊÔ½¸¥¦¥£¥ó¥É¥¦¤ò³«¤¤¤Æ¤¤¤Þ¤¹...\n" - -#: src/account.c:361 -msgid "Creating account edit window...\n" -msgstr "¥¢¥«¥¦¥ó¥ÈÊÔ½¸¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" - -#: src/account.c:366 -msgid "Edit accounts" -msgstr "¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸" - -#: src/account.c:394 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2244 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "̾Á°" - -#: src/account.c:395 src/prefs_account.c:632 -msgid "Protocol" -msgstr "¥×¥í¥È¥³¥ë" - -#: src/account.c:396 -msgid "Server" -msgstr "¥µ¡¼¥Ð" - -#: src/account.c:415 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "ÄɲÃ" - -#: src/account.c:421 -msgid "Edit" -msgstr "ÊÔ½¸" - -#: src/account.c:427 src/prefs_customheader.c:247 -msgid " Delete " -msgstr " ºï½ü " - -#: src/account.c:433 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr " ¢­ " - -#: src/account.c:439 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr " ¢¬ " - -#: src/account.c:453 -msgid " Set as usually used account " -msgstr " Ä̾ï»ÈÍѤ¹¤ë¥¢¥«¥¦¥ó¥È¤Ë»ØÄê " - -#: src/account.c:459 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "ÊĤ¸¤ë" - -#: src/account.c:513 -msgid "Delete account" -msgstr "¥¢¥«¥¦¥ó¥È¤Îºï½ü" - -#: src/account.c:514 -msgid "Do you really want to delete this account?" -msgstr "ËÜÅö¤Ë¤³¤Î¥¢¥«¥¦¥ó¥È¤òºï½ü¤·¤Æ¤â¤¤¤¤¤Ç¤¹¤«?" - -#: src/account.c:515 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3306 src/folderview.c:1448 src/folderview.c:1491 -#: src/folderview.c:1590 src/folderview.c:1631 src/folderview.c:1730 -#: src/folderview.c:1763 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "¤Ï¤¤" - -#: src/account.c:515 src/compose.c:3306 src/folderview.c:1448 -#: src/folderview.c:1491 src/folderview.c:1590 src/folderview.c:1631 -#: src/folderview.c:1730 src/folderview.c:1763 -msgid "+No" -msgstr "+¤¤¤¤¤¨" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -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:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -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:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/ÊĤ¸¤ë(_C)" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/¥Ø¥ë¥×(_H)" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -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:369 -#: src/folderview.c:206 src/folderview.c:208 src/folderview.c:217 -#: src/folderview.c:219 src/folderview.c:228 src/folderview.c:230 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/ÊÔ½¸(_E)" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/ºï½ü(_D)" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "ÅŻҥ᡼¥ë ¥¢¥É¥ì¥¹" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "È÷¹Í" - -#: src/addressbook.c:325 src/compose.c:2804 -msgid "Address book" -msgstr "¥¢¥É¥ì¥¹Ä¢" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "̾Á°:" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -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:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "¤¤¤¤¤¨" - -#: src/addressbook.c:1000 src/folderview.c:1321 src/folderview.c:1522 -msgid "New folder" -msgstr "¿·µ¬¥Õ¥©¥ë¥À" - -#: src/addressbook.c:1001 src/folderview.c:1322 -msgid "Input the name of new folder:" -msgstr "¿·µ¬¥Õ¥©¥ë¥À¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" - -#: src/addressbook.c:1002 src/folderview.c:1323 src/folderview.c:1526 -msgid "NewFolder" -msgstr "NewFolder" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "¤½¤Î̾Á°¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "¿·µ¬¥°¥ë¡¼¥×" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "¿·µ¬¥°¥ë¡¼¥×¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "NewGroup" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "¥°¥ë¡¼¥×¤ÎÊÔ½¸" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "¥°¥ë¡¼¥×¤Î¿·¤·¤¤Ì¾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "¥Õ¥©¥ë¥À¤ÎÊÔ½¸" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "¥Õ¥©¥ë¥À¤Î¿·¤·¤¤Ì¾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "ËÜÅö¤Ë `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "¥¢¥É¥ì¥¹¤ÎÊÔ½¸" - -#: src/addressbook.c:1290 src/compose.c:2803 src/select-keys.c:302 -msgid "Address" -msgstr "¥¢¥É¥ì¥¹" - -#: src/addressbook.c:1294 src/compose.c:1476 src/compose.c:3133 -#: src/compose.c:3703 src/export.c:186 src/foldersel.c:177 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:334 src/main.c:342 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "Cancel" -msgstr "¥­¥ã¥ó¥»¥ë" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "¥¢¥É¥ì¥¹Ä¢¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ßÃæ..." - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s ¤Ï¸ºß¤·¤Þ¤»¤ó¡£\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:869 src/imap.c:888 -#: src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 src/mh.c:816 -#: src/news.c:648 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:1003 -#: src/summaryview.c:1209 src/summaryview.c:1291 src/summaryview.c:1352 -#: src/summaryview.c:1809 src/summaryview.c:2287 src/summaryview.c:2310 -#: src/summaryview.c:2331 src/summaryview.c:2424 -msgid "done.\n" -msgstr "´°Î»¡£\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "¥¢¥É¥ì¥¹Ä¢¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤­½Ð¤·¤Æ¤¤¤Þ¤¹..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "¥¢¥É¥ì¥¹Ä¢¤Î¥Ç¡¼¥¿¤Î½ñ¤­¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" - -#: src/alertpanel.c:119 src/compose.c:3306 src/main.c:332 -msgid "Notice" -msgstr "Ãí°Õ" - -#: src/alertpanel.c:132 src/main.c:218 -msgid "Warning" -msgstr "·Ù¹ð" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "¥¨¥é¡¼" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "·Ù¹ð¥Ñ¥Í¥ë¥À¥¤¥¢¥í¥°¤òºîÀ®Ãæ...\n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "¼¡²ó¤â¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "¥á¥â¥ê¤ò³ÎÊݤǤ­¤Þ¤»¤ó\n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/ÄɲÃ(_A)..." - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/ºï½ü(_R)" - -#: src/compose.c:370 src/folderview.c:209 src/folderview.c:220 -#: src/folderview.c:231 -msgid "/_Property..." -msgstr "/¥×¥í¥Ñ¥Æ¥£(_P)..." - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥¡¥¤¥ë¤òźÉÕ(_A)" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥¡¥¤¥ë¤òÁÞÆþ(_I)" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/½ð̾¤òÁÞÆþ(_G)" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/ÊÔ½¸(_E)/¸µ¤ËÌ᤹(_U)" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/ÊÔ½¸(_E)/¤ä¤êľ¤·(_R)" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/ÊÔ½¸(_E)/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/ÊÔ½¸(_E)/¥«¥Ã¥È(_T)" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/ÊÔ½¸(_E)/¥³¥Ô¡¼(_C)" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/ÊÔ½¸(_E)/¥Ú¡¼¥¹¥È(_E)" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/ÊÔ½¸(_E)/Á´¤ÆÁªÂò(_A)" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/ÊÔ½¸(_E)/Ť¤¹Ô¤òÀÞ¤êÊÖ¤¹(_L)" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/ÊÔ½¸(_E)/³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸(_X)" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á÷¿®(_S)" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¸å¤ÇÁ÷¿®(_L)" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Áð¹Æ¥Õ¥©¥ë¥À¤ËÊݸ(_D)" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/°¸Àè(_T)" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/_Cc" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/_Bcc" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/ÊÖ¿®Àè¤ò»ØÄê(_R)" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Õ¥©¥í¡¼Àè¤ò»ØÄê(_F)" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/źÉÕ(_A)" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/½ð̾(_G)" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/°Å¹æ²½(_E)" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/¥Ä¡¼¥ë(_T)" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/¥Ä¡¼¥ë(_T)/¥ë¡¼¥é¤òɽ¼¨(_R)" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/¥Ä¡¼¥ë(_T)/¥¢¥É¥ì¥¹Ä¢(_A)" - -#: src/compose.c:494 src/compose.c:564 src/compose.c:624 src/procmsg.c:687 -msgid "Can't get text part\n" -msgstr "¥Æ¥­¥¹¥È¥Ñ¡¼¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/compose.c:556 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: ¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó\n" - -#: src/compose.c:568 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "¥Õ¥¡¥¤¥ë %s ¤Ï¸ºß¤·¤Þ¤»¤ó\n" - -#: src/compose.c:1244 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "¥Õ¥¡¥¤¥ë %s ¤Î¥µ¥¤¥º¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/compose.c:1248 -#, c-format -msgid "File %s is empty\n" -msgstr "¥Õ¥¡¥¤¥ë %s ¤Ï¶õ¤Ç¤¹\n" - -#: src/compose.c:1269 -#, c-format -msgid "Message: %s" -msgstr "¥á¥Ã¥»¡¼¥¸: %s" - -#: src/compose.c:1375 -msgid " [Edited]" -msgstr " [¹¹¿·]" - -#: src/compose.c:1377 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - ¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®%s" - -#: src/compose.c:1380 -#, c-format -msgid "Compose message%s" -msgstr "¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®%s" - -#: src/compose.c:1402 src/compose.c:3596 -msgid "Recipient is not specified." -msgstr "°¸À褬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/compose.c:1420 -msgid "can't get recipient list." -msgstr "Á÷¿®Àè¤Î¥ê¥¹¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/compose.c:1438 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" -"¥á¡¼¥ë¤òÁ÷¿®¤¹¤ë¤¿¤á¤Î¥¢¥«¥¦¥ó¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" -"Á÷¿®¤¹¤ëÁ°¤Ë¥á¡¼¥ë¥¢¥«¥¦¥ó¥È¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£" - -#: src/compose.c:1459 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "¥á¥Ã¥»¡¼¥¸¤ò %s ¤Ë¥Ý¥¹¥È¤¹¤ëÅÓÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£" - -#: src/compose.c:1473 -msgid "Queueing" -msgstr "Á÷¿®ÂÔµ¡" - -#: src/compose.c:1474 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" -"¤³¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤ËÆþ¤ì¤Þ¤¹¤«?" - -#: src/compose.c:1480 src/compose.c:3608 -msgid "Can't queue the message." -msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔµ¡¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/compose.c:1483 -msgid "Error occurred while sending the message." -msgstr "¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£" - -#: src/compose.c:1490 src/compose.c:3615 -msgid "Can't save the message to outbox." -msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤ËÊݸ¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/compose.c:1516 src/compose.c:1637 src/compose.c:1723 src/utils.c:1540 -msgid "can't change file mode\n" -msgstr "¥Õ¥¡¥¤¥ë¥â¡¼¥É¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó\n" - -#: src/compose.c:1542 -msgid "Can't convert the codeset of the message." -msgstr "¥á¥Ã¥»¡¼¥¸¤Îʸ»ú¥³¡¼¥É¥»¥Ã¥È¤òÊÑ´¹¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/compose.c:1551 -msgid "can't write headers\n" -msgstr "¥Ø¥Ã¥À¤ò½ñ¤­¹þ¤á¤Þ¤»¤ó¡£\n" - -#: src/compose.c:1669 -msgid "saving sent message...\n" -msgstr "Á÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÊݸ¤·¤Æ¤¤¤Þ¤¹...\n" - -#: src/compose.c:1674 -msgid "can't save message\n" -msgstr "¥á¥Ã¥»¡¼¥¸¤òÊݸ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/compose.c:1680 src/compose.c:1787 -msgid "can't open mark file\n" -msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n" - -#: src/compose.c:1703 -msgid "queueing message...\n" -msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤Æ¤¤¤Þ¤¹...\n" - -#: src/compose.c:1778 -msgid "can't queue the message\n" -msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔµ¡¤Ç¤­¤Þ¤»¤ó\n" - -#: src/compose.c:1816 -#, c-format -msgid "Can't open file %s\n" -msgstr "¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó\n" - -#: src/compose.c:2170 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "À¸À®¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸ID: %s\n" - -#: src/compose.c:2244 src/compose.c:3104 -msgid "MIME type" -msgstr "MIME ¥¿¥¤¥×" - -#: src/compose.c:2244 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "¥µ¥¤¥º" - -#: src/compose.c:2261 -msgid "Creating compose window...\n" -msgstr "¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" - -#: src/compose.c:2307 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "º¹½Ð¿Í:" - -#: src/compose.c:2730 src/mainwindow.c:1359 src/prefs_account.c:501 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "Á÷¿®" - -#: src/compose.c:2731 -msgid "Send message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®" - -#: src/compose.c:2738 -msgid "Send later" -msgstr "¸å¤ÇÁ÷¿®" - -#: src/compose.c:2739 -msgid "Put into queue folder and send later" -msgstr "Á÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤ËÆþ¤ì¤Æ¸å¤ÇÁ÷¿®" - -#: src/compose.c:2746 src/folderview.c:738 -msgid "Draft" -msgstr "Áð¹Æ" - -#: src/compose.c:2747 -msgid "Save to draft folder" -msgstr "Áð¹Æ¥Õ¥©¥ë¥À¤ËÊݸ" - -#: src/compose.c:2756 -msgid "Insert" -msgstr "ÁÞÆþ" - -#: src/compose.c:2757 -msgid "Insert file" -msgstr "¥Õ¥¡¥¤¥ë¤òÁÞÆþ" - -#: src/compose.c:2764 -msgid "Attach" -msgstr "źÉÕ" - -#: src/compose.c:2765 -msgid "Attach file" -msgstr "¥Õ¥¡¥¤¥ë¤òźÉÕ" - -#: src/compose.c:2774 src/prefs_common.c:1035 -msgid "Signature" -msgstr "½ð̾" - -#: src/compose.c:2775 -msgid "Insert signature" -msgstr "½ð̾¤òÁÞÆþ" - -#: src/compose.c:2783 -msgid "Editor" -msgstr "¥¨¥Ç¥£¥¿" - -#: src/compose.c:2784 -msgid "Edit with external editor" -msgstr "³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸" - -#: src/compose.c:2792 -msgid "Linewrap" -msgstr "¼«Æ°²þ¹Ô" - -#: src/compose.c:2793 -msgid "Wrap long lines" -msgstr "Ť¤¹Ô¤òÀÞ¤êÊÖ¤¹" - -#: src/compose.c:3000 -msgid "Invalid MIME type." -msgstr "̵¸ú¤Ê MIME ¥¿¥¤¥×¤Ç¤¹¡£" - -#: src/compose.c:3018 -msgid "File doesn't exist or is empty." -msgstr "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¤«¤Þ¤¿¤Ï¶õ¤Ç¤¹¡£" - -#: src/compose.c:3086 -msgid "Property" -msgstr "¥×¥í¥Ñ¥Æ¥£" - -#: src/compose.c:3106 -msgid "Encoding" -msgstr "¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°" - -#: src/compose.c:3129 -msgid "Path" -msgstr "¥Ñ¥¹" - -#: src/compose.c:3130 -msgid "File name" -msgstr "¥Õ¥¡¥¤¥ë̾" - -#: src/compose.c:3277 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "³°Éô¥¨¥Ç¥£¥¿¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹: `%s'\n" - -#: src/compose.c:3303 -#, 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:3316 -#, c-format -msgid "Terminated process group id: %d" -msgstr "½ªÎ»¤·¤¿¥×¥í¥»¥¹¥°¥ë¡¼¥×ID: %d" - -#: src/compose.c:3317 -#, c-format -msgid "Temporary file: %s" -msgstr "°ì»þ¥Õ¥¡¥¤¥ë: %s" - -#: src/compose.c:3341 -msgid "Compose: input from monitoring process\n" -msgstr "Compose: ´Æ»ë¥×¥í¥»¥¹¤«¤é¤ÎÆþÎÏ\n" - -#. failed -#: src/compose.c:3374 -msgid "Couldn't exec external editor\n" -msgstr "³°Éô¥¨¥Ç¥£¥¿¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó\n" - -#: src/compose.c:3378 -msgid "Couldn't write to file\n" -msgstr "¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Þ¤»¤ó\n" - -#: src/compose.c:3380 -msgid "Pipe read failed\n" -msgstr "¥Ñ¥¤¥×¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ\n" - -#: src/compose.c:3637 -msgid "can't remove the old draft message\n" -msgstr "¸Å¤¤Áð¹Æ¥á¥Ã¥»¡¼¥¸¤òºï½ü¤Ç¤­¤Þ¤»¤ó\n" - -#: src/compose.c:3665 src/compose.c:3677 -msgid "Select file" -msgstr "¥Õ¥¡¥¤¥ë¤ÎÁªÂò" - -#: src/compose.c:3701 -msgid "Discard message" -msgstr "¥á¥Ã¥»¡¼¥¸¤ÎÇË´þ" - -#: src/compose.c:3702 -msgid "This message has been modified. discard it?" -msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤ÏÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ÇË´þ¤·¤Þ¤¹¤«?" - -#: src/compose.c:3703 -msgid "Discard" -msgstr "ÇË´þ" - -#: src/compose.c:3703 -msgid "to Draft" -msgstr "Áð¹Æ¤Ø" - -#: src/export.c:122 -msgid "Export" -msgstr "¥¨¥¯¥¹¥Ý¡¼¥È" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "ÂоݤȤʤë¥Õ¥©¥ë¥À¤Èmbox¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£" - -#: src/export.c:154 -msgid "Source dir:" -msgstr "¥¨¥¯¥¹¥Ý¡¼¥È¸µ" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "¥¨¥¯¥¹¥Ý¡¼¥È¥Õ¥¡¥¤¥ë:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr " ÁªÂò... " - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "¥¨¥¯¥¹¥Ý¡¼¥È¤¹¤ë¥Õ¥¡¥¤¥ë¤òÁªÂò" - -#: src/foldersel.c:131 -msgid "Select folder" -msgstr "¥Õ¥©¥ë¥À¤ÎÁªÂò" - -#: src/folderview.c:203 src/folderview.c:214 -msgid "/Create _new folder..." -msgstr "/¿·µ¬¥Õ¥©¥ë¥À¤òºîÀ®(_N)..." - -#: src/folderview.c:204 src/folderview.c:215 -msgid "/_Rename folder..." -msgstr "/¥Õ¥©¥ë¥À̾¤òÊѹ¹(_R)..." - -#: src/folderview.c:205 src/folderview.c:216 -msgid "/_Delete folder" -msgstr "/¥Õ¥©¥ë¥À¤òºï½ü(_D)" - -#: src/folderview.c:207 -msgid "/Remove _mailbox" -msgstr "/¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºï½ü(_M)" - -#: src/folderview.c:218 -msgid "/Remove _IMAP4 server" -msgstr "/IMAP4¥µ¡¼¥Ð¤òºï½ü(_I)" - -#: src/folderview.c:225 -msgid "/_Subscribe to newsgroup..." -msgstr "/¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤ò¹ØÆÉ(_S)..." - -#: src/folderview.c:227 -msgid "/_Remove newsgroup" -msgstr "/¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤òºï½ü(_R)" - -#: src/folderview.c:229 -msgid "/Remove _news server" -msgstr "/¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤òºï½ü(_N)" - -#: src/folderview.c:240 -msgid "Folder" -msgstr "¥Õ¥©¥ë¥À" - -#: src/folderview.c:240 -msgid "New" -msgstr "¿·Ãå" - -#: src/folderview.c:241 src/prefs_common.c:2173 -msgid "Unread" -msgstr "̤ÆÉ" - -#: src/folderview.c:241 -msgid "#" -msgstr "Áí¿ô" - -#: src/folderview.c:251 -msgid "Creating folder view...\n" -msgstr "¥Õ¥©¥ë¥À¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" - -#: src/folderview.c:395 -msgid "Setting folder info...\n" -msgstr "¥Õ¥©¥ë¥À¾ðÊó¤òÀßÄêÃæ...\n" - -#: src/folderview.c:396 -msgid "Setting folder info..." -msgstr "¥Õ¥©¥ë¥À¾ðÊó¤òÀßÄêÃæ..." - -#: src/folderview.c:539 src/mainwindow.c:2092 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "¥Õ¥©¥ë¥À¤ò¥¹¥­¥ã¥óÃæ (%s%c%s) ..." - -#: src/folderview.c:544 src/mainwindow.c:2097 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "¥Õ¥©¥ë¥À¤ò¥¹¥­¥ã¥óÃæ (%s)..." - -#: src/folderview.c:581 -msgid "Updating all folders..." -msgstr "Á´¥Õ¥©¥ë¥À¤ò¹¹¿·Ãæ..." - -#: src/folderview.c:716 src/prefs_account.c:655 -msgid "Inbox" -msgstr "¼õ¿®È¢" - -#: src/folderview.c:721 -msgid "Outbox" -msgstr "Á÷¿®¹µ" - -#: src/folderview.c:726 -msgid "Queue" -msgstr "Á÷¿®ÂÔ¤Á" - -#: src/folderview.c:731 -msgid "Trash" -msgstr "¤´¤ßÈ¢" - -#: src/folderview.c:1213 -#, c-format -msgid "Folder %s is selected\n" -msgstr "¥Õ¥©¥ë¥À %s ¤¬ÁªÂò¤µ¤ì¤Þ¤·¤¿\n" - -#: src/folderview.c:1327 src/folderview.c:1390 src/folderview.c:1531 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "¥Õ¥©¥ë¥À̾¤Ë `%c' ¤ò´Þ¤à¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/folderview.c:1335 src/folderview.c:1399 src/folderview.c:1539 -#, c-format -msgid "The folder `%s' already exists." -msgstr "¥Õ¥©¥ë¥À `%s' ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" - -#: src/folderview.c:1343 src/folderview.c:1547 -#, c-format -msgid "Can't create the folder `%s'." -msgstr "¥Õ¥©¥ë¥À `%s' ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/folderview.c:1382 -#, c-format -msgid "Input new name for `%s':" -msgstr "`%s' ¤Î¿·¤·¤¤Ì¾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" - -#: src/folderview.c:1384 -msgid "Rename folder" -msgstr "¥Õ¥©¥ë¥À̾¤ÎÊѹ¹" - -#: src/folderview.c:1444 -#, 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:1447 src/folderview.c:1589 -msgid "Delete folder" -msgstr "¥Õ¥©¥ë¥À¤Îºï½ü" - -#: src/folderview.c:1453 src/folderview.c:1595 -#, c-format -msgid "Can't remove the folder `%s'." -msgstr "¥Õ¥©¥ë¥À `%s' ¤òºï½ü¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/folderview.c:1487 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" -"ËÜÅö¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ `%s' ¤òºï½ü¤·¤Þ¤¹¤«?\n" -"(¥á¥Ã¥»¡¼¥¸¤Ï¥Ç¥£¥¹¥¯¤«¤é¤Ïºï½ü¤µ¤ì¤Þ¤»¤ó)" - -#: src/folderview.c:1490 -msgid "Remove folder" -msgstr "¥Õ¥©¥ë¥À¤Îºï½ü" - -#: src/folderview.c:1523 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"¿·µ¬¥Õ¥©¥ë¥À¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:\n" -"(¥µ¥Ö¥Õ¥©¥ë¥À¤ò³ÊǼ¤¹¤ë¥Õ¥©¥ë¥À¤òºîÀ®¤·¤¿¤¤¾ì¹ç¤Ï¡¢\n" -" ̾Á°¤ÎºÇ¸å¤Ë `/' ¤òÄɲ䷤Ƥ¯¤À¤µ¤¤)" - -#: src/folderview.c:1587 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "ËÜÅö¤Ë¥Õ¥©¥ë¥À `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" - -#: src/folderview.c:1628 -#, c-format -msgid "Really delete IMAP4 server `%s'?" -msgstr "ËÜÅö¤ËIMAP4¥µ¡¼¥Ð `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" - -#: src/folderview.c:1630 -msgid "Delete IMAP4 server" -msgstr "IMAP4¥µ¡¼¥Ð¤Îºï½ü" - -#: src/folderview.c:1671 -msgid "Subscribe newsgroup" -msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆÉ" - -#: src/folderview.c:1672 -msgid "Input subscribing newsgroup:" -msgstr "¹ØÆɤ¹¤ë¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" - -#: src/folderview.c:1681 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥× `%s' ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" - -#: src/folderview.c:1727 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "ËÜÅö¤Ë¥Ë¥å¡¼¥¹¥°¥ë¡¼¥× `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" - -#: src/folderview.c:1729 -msgid "Delete newsgroup" -msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Îºï½ü" - -#: src/folderview.c:1760 -#, c-format -msgid "Really delete news server `%s'?" -msgstr "ËÜÅö¤Ë¥Ë¥å¡¼¥¹¥µ¡¼¥Ð `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" - -#: src/folderview.c:1762 -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:174 src/summaryview.c:1392 -msgid "(No From)" -msgstr "(º¹½Ð¿ÍÉÔÌÀ)" - -#: src/headerview.c:189 src/summaryview.c:1408 -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:204 -#, c-format -msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "%s:%d ¤Ø¤ÎIMAP4¤ÎÀܳ¤¬ÀÚ¤ì¤Æ¤¤¤Þ¤¹¡£ºÆÀܳ¤·¤Þ¤¹...\n" - -#: src/imap.c:230 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "%s:%d ¤Ø¤ÎIMAP4¤ÎÀܳ¤ò³ÎΩÃæ...\n" - -#: src/imap.c:385 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "%d È֤Υá¥Ã¥»¡¼¥¸¤Ï¤¹¤Ç¤Ë¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n" - -#: src/imap.c:395 -#, c-format -msgid "getting message %d...\n" -msgstr "%d È֤Υá¥Ã¥»¡¼¥¸¤ò¼èÆÀ¤·¤Æ¤¤¤Þ¤¹...\n" - -#: src/imap.c:401 src/procmsg.c:587 -#, c-format -msgid "can't fetch message %d\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò¼è¤ê¹þ¤á¤Þ¤»¤ó\n" - -#: src/imap.c:430 -#, c-format -msgid "can't append message %s\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %s ¤òÄɲäǤ­¤Þ¤»¤ó\n" - -#: src/imap.c:459 src/imap.c:516 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "°ÜÆ°¸µ¥Õ¥©¥ë¥À¤¬°ÜÆ°Àè¤ÈƱ°ì¤Ç¤¹¡£\n" - -#: src/imap.c:469 src/imap.c:521 src/mh.c:201 src/mh.c:267 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %s%c%d ¤ò %s ¤Ë°ÜÆ°¤·¤Æ¤¤¤Þ¤¹...\n" - -#: src/imap.c:473 src/imap.c:525 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %s%c%d ¤ò %s ¤Ë¥³¥Ô¡¼¤·¤Æ¤¤¤Þ¤¹...\n" - -#: src/imap.c:593 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "deleted ¥Õ¥é¥°¤ò¥»¥Ã¥È¤Ç¤­¤Þ¤»¤ó: %d\n" - -#: src/imap.c:600 src/imap.c:639 -msgid "can't expunge\n" -msgstr "expunge ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:632 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "deleted ¥Õ¥é¥°¤ò¥»¥Ã¥È¤Ç¤­¤Þ¤»¤ó: 1:%d\n" - -#: src/imap.c:744 -msgid "can't create mailbox\n" -msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºîÀ®¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:781 -msgid "can't delete mailbox\n" -msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºï½ü¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:807 -msgid "can't get envelope\n" -msgstr "¥¨¥ó¥Ù¥í¡¼¥×¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:813 -msgid "error occurred while getting envelope.\n" -msgstr "¥¨¥ó¥Ù¥í¡¼¥×¤ò¼èÆÀÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" - -#: src/imap.c:821 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "¥¨¥ó¥Ù¥í¡¼¥×¤ò²òÀϤǤ­¤Þ¤»¤ó: %s\n" - -#: src/imap.c:849 -#, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸ %d - %d ¤òºï½ü¤·¤Æ¤¤¤Þ¤¹... " - -#: src/imap.c:882 -msgid "Deleting all cached messages... " -msgstr "Á´¤Æ¤Î¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Æ¤¤¤Þ¤¹... " - -#: src/imap.c:896 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "IMAP4¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:929 -msgid "can't get namespace\n" -msgstr "namespace ¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:1346 -#, c-format -msgid "can't select folder: %s\n" -msgstr "¥Õ¥©¥ë¥À %s ¤òÁªÂò¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:1401 -#, c-format -msgid "can't get the next uid of folder: %s\n" -msgstr "¥Õ¥©¥ë¥À %s ¤Î ¼¡¤Î UID ¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:1423 -msgid "IMAP4 login failed.\n" -msgstr "IMAP4¤Î¥í¥°¥¤¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" - -#: src/imap.c:1636 -#, c-format -msgid "can't append %s to %s\n" -msgstr "%s ¤ò %s ¤ËÄɲäǤ­¤Þ¤»¤ó\n" - -#: src/imap.c:1656 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò %s ¤Ë¥³¥Ô¡¼¤Ç¤­¤Þ¤»¤ó\n" - -#: src/imap.c:1681 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "imap ¥³¥Þ¥ó¥ÉÃæ¤Î¥¨¥é¡¼: STORE %d:%d %s\n" - -#: src/imap.c:1695 -msgid "error while imap command: EXPUNGE\n" -msgstr "imap ¥³¥Þ¥ó¥ÉÃæ¤Î¥¨¥é¡¼: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "¥¤¥ó¥Ý¡¼¥È" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "ÂоݤȤʤëmbox¥Õ¥¡¥¤¥ë¤È¥¤¥ó¥Ý¡¼¥ÈÀè¤Î¥Õ¥©¥ë¥À¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£" - -#: src/import.c:158 -msgid "Importing file:" -msgstr "¥¤¥ó¥Ý¡¼¥È¥Õ¥¡¥¤¥ë:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "¥¤¥ó¥Ý¡¼¥ÈÀè:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "¥¤¥ó¥Ý¡¼¥È¤¹¤ë¥Õ¥¡¥¤¥ë¤òÁªÂò" - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "ÂÔµ¡Ãæ" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®Ãæ" - -#: src/inc.c:384 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "%s (%s) ¤Î¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" - -#: src/inc.c:388 src/news.c:131 -msgid "Input password" -msgstr "¥Ñ¥¹¥ï¡¼¥É¤ÎÆþÎÏ" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "¼õ¿®Ãæ" - -#: src/inc.c:412 -msgid "Done" -msgstr "´°Î»" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "%s (%s) ¤Îǧ¾Ú¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" - -#: src/inc.c:487 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "¥¢¥«¥¦¥ó¥È %s ¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê¹þ¤ó¤Ç¤¤¤Þ¤¹...\n" - -#: src/inc.c:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: ¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®Ãæ" - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "POP3¥µ¡¼¥Ð: %s ¤ËÀܳÃæ..." - -#: src/inc.c:527 src/inc.c:660 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "POP3¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/inc.c:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "POP3¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®Ãæ (%d / %d) (%d / %d bytes)" - -#: src/inc.c:719 -msgid "Authorizing..." -msgstr "ǧ¾ÚÃæ..." - -#: src/inc.c:724 -msgid "Getting the number of new messages (STAT)..." -msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¤Î¿ô¤ò¼èÆÀÃæ (STAT)..." - -#: src/inc.c:729 -msgid "Getting the number of new messages (LAST)..." -msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¤Î¿ô¤ò¼èÆÀÃæ (LAST)..." - -#: src/inc.c:734 -msgid "Getting the number of new messages (UIDL)..." -msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¤Î¿ô¤ò¼èÆÀÃæ (UIDL)..." - -#: src/inc.c:739 -msgid "Getting the size of messages (LIST)..." -msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥µ¥¤¥º¤ò¼èÆÀÃæ (LIST)..." - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òºï½üÃæ" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "ÀÚÃÇÃæ" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "¥á¥Ã¥»¡¼¥¸¤Ï¼õ¿®¤µ¤ì¤Þ¤»¤ó\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "¥á¡¼¥ë¤Î½èÍýÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£" - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "¥Ç¥£¥¹¥¯¤Î¶õ¤­ÍÆÎ̤¬¤¢¤ê¤Þ¤»¤ó¡£" - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "¥í¡¼¥«¥ë¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ê¤Þ¤»¤ó¡£\n" - -#: src/inc.c:881 -#, 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:108 -#, c-format -msgid "" -"File `%s' already exists.\n" -"Can't create folder." -msgstr "" -"¥Õ¥¡¥¤¥ë `%s' ¤¬¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£\n" -"¥Õ¥©¥ë¥À¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/main.c:149 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread ¤Ï glib ¤Ë¤è¤Ã¤Æ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" - -#: src/main.c:219 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"GnuPG ¤¬Àµ¤·¤¯¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" -"OpenPGP ¥µ¥Ý¡¼¥È¤Ï̵¸ú¤Ç¤¹¡£" - -#: src/main.c:300 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "»ÈÍÑË¡: %s [¥ª¥×¥·¥ç¥ó]...\n" - -#: src/main.c:303 -msgid " --compose [address] open composition window" -msgstr " --compose [address] ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤ò³«¤¯" - -#: src/main.c:304 -msgid " --receive receive new messages" -msgstr " --receive ¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë" - -#: src/main.c:305 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all Á´¥¢¥«¥¦¥ó¥È¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë" - -#: src/main.c:306 -msgid " --debug debug mode" -msgstr " --debug ¥Ç¥Ð¥Ã¥°¥â¡¼¥É" - -#: src/main.c:307 -msgid " --help display this help and exit" -msgstr " --help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë" - -#: src/main.c:308 -msgid " --version output version information and exit" -msgstr " --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤ò½ÐÎϤ·¤Æ½ªÎ»¤¹¤ë" - -#: src/main.c:333 -msgid "Composing message exists. Really quit?" -msgstr "ºîÀ®Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤·¤Þ¤¹¡£ËÜÅö¤Ë½ªÎ»¤·¤Þ¤¹¤«?" - -#: src/main.c:340 -msgid "Queued messages" -msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸" - -#: src/main.c:341 -msgid "Some unsent messages are queued. Exit now?" -msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î̤Á÷¿®¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ê¤Þ¤¹¡£½ªÎ»¤·¤Þ¤¹¤«?" - -#. remote command mode -#: src/main.c:412 -msgid "another Sylpheed is already running.\n" -msgstr "Ê̤ΠSylpheed ¤¬¤¹¤Ç¤Ëµ¯Æ°¤·¤Æ¤¤¤Þ¤¹¡£\n" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÄɲÃ(_A)..." - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ò¹¹¿·(_U)" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À(_F)" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À(_F)/¿·µ¬¥Õ¥©¥ë¥À¤òºîÀ®(_N)..." - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À(_F)/¥Õ¥©¥ë¥À̾¤òÊѹ¹(_R)..." - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À(_F)/¥Õ¥©¥ë¥À¤òºï½ü(_D)" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/¥Õ¥¡¥¤¥ë(_F)/mbox¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È(_I)..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "/¥Õ¥¡¥¤¥ë(_F)/mbox¥Õ¥¡¥¤¥ë¤Ë¥¨¥¯¥¹¥Ý¡¼¥È(_E)..." - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë(_T)" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/¥Õ¥¡¥¤¥ë(_F)/̾Á°¤òÉÕ¤±¤ÆÊݸ(_S)..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/¥Õ¥¡¥¤¥ë(_F)/°õºþ(_P)..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/¥Õ¥¡¥¤¥ë(_F)/½ªÎ»(_X)" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/ÊÔ½¸(_E)/¸¡º÷(_S)" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/ɽ¼¨(_V)" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/ɽ¼¨(_V)/¥Õ¥©¥ë¥À¥Ä¥ê¡¼(_F)" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/ɽ¼¨(_V)/¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼(_M)" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)/¥¢¥¤¥³¥ó¤Èʸ»ú(_A)" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)/¥¢¥¤¥³¥ó(_I)" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)/ʸ»ú(_T)" - -#: src/mainwindow.c:364 -msgid "/_View/_Toolbar/_None" -msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)/Èóɽ¼¨(_N)" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/ɽ¼¨(_V)/¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼(_S)" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/ɽ¼¨(_V)/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/ɽ¼¨(_V)/¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤òʬΥ(_O)" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/ɽ¼¨(_V)/¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤òʬΥ(_E)" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¼«Æ°¸¡½Ð(_A)" - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/7bit ascii (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/²¤ÊÆ (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/Ã沤 (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥Ð¥ë¥È½ô¹ñ (ISO-8859-13)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥Ð¥ë¥È½ô¹ñ (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥®¥ê¥·¥ã¸ì (ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥È¥ë¥³¸ì (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥­¥ê¥ëʸ»ú (ISO-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥­¥ê¥ëʸ»ú (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥­¥ê¥ëʸ»ú (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÆüËܸì (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÆüËܸì (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÆüËܸì (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÆüËܸì (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/´ÊÂλúÃæ¹ñ¸ì (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÈËÂλúÃæ¹ñ¸ì (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÈËÂλúÃæ¹ñ¸ì (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/Ãæ¹ñ¸ì (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/´Ú¹ñ¸ì (EUC-_KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/´Ú¹ñ¸ì (ISO-2022-KR)" - -#: src/mainwindow.c:445 -msgid "/_Message/Get new ma_il" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¿·Ãå¥á¡¼¥ë¤Î¼õ¿®(_I)" - -#: src/mainwindow.c:446 -msgid "/_Message/Get from _all accounts" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®(_A)" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®(_G)" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¿·µ¬¥á¥Ã¥»¡¼¥¸¤òºîÀ®(_N)" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/ÊÖ¿®(_R)" - -#: src/mainwindow.c:454 -msgid "/_Message/Repl_y to sender" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/º¹½Ð¿Í¤ËÊÖ¿®(_Y)" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á´°÷¤ËÊÖ¿®(_L)" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/žÁ÷(_F)" - -#: src/mainwindow.c:457 -msgid "/_Message/Forward as a_ttachment" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/źÉդȤ·¤ÆžÁ÷(_T)" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/°ÜÆ°(_O)..." - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥³¥Ô¡¼(_C)..." - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/ºï½ü(_D)" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/¥Þ¡¼¥¯(_M)" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/¥Þ¡¼¥¯²ò½ü(_U)" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/̤ÆɤȤ·¤Æ¥Þ¡¼¥¯(_E)" - -#: src/mainwindow.c:468 -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/Æɤó¤À¤³¤È¤Ë¤¹¤ë(_D)" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Ç³«¤¯(_W)" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥½¡¼¥¹¤òɽ¼¨(_S)" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á´¤Æ¤Î¥Ø¥Ã¥À¤òɽ¼¨(_H)" - -#: src/mainwindow.c:474 -msgid "/_Message/Re-_edit" -msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/ºÆÊÔ½¸(_E)" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/¥µ¥Þ¥ê(_S)" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/¥µ¥Þ¥ê(_S)/½ÅÊ£¥á¥Ã¥»¡¼¥¸¤òºï½ü(_D)" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/¥µ¥Þ¥ê(_S)/¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë(_F)" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/¥µ¥Þ¥ê(_S)/¼Â¹Ô(_X)" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/¥µ¥Þ¥ê(_S)/ºÇ¿·¤Î¾õÂ֤˹¹¿·(_U)" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/¥µ¥Þ¥ê(_S)/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/¥µ¥Þ¥ê(_S)/Á°¤Î¥á¥Ã¥»¡¼¥¸(_P)" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/¥µ¥Þ¥ê(_S)/¼¡¤Î¥á¥Ã¥»¡¼¥¸(_N)" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/¥µ¥Þ¥ê(_S)/¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸(_E)" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/¥µ¥Þ¥ê(_S)/Ê̤Υե©¥ë¥À¤Ë°ÜÆ°(_G)" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/ÈÖ¹æ¤Ç¥½¡¼¥È(_N)" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/¥µ¥¤¥º¤Ç¥½¡¼¥È(_I)" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/ÆüÉդǥ½¡¼¥È(_D)" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/º¹½Ð¿Í¤Ç¥½¡¼¥È(_F)" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/·ï̾¤Ç¥½¡¼¥È(_S)" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/·ï̾¤Ç´ó¤»¤ë(_A)" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/¥µ¥Þ¥ê(_S)/¥¹¥ì¥Ã¥Éɽ¼¨(_T)" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/¥µ¥Þ¥ê(_S)/¥¹¥ì¥Ã¥É²ò½ü(_H)" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/¥µ¥Þ¥ê(_S)/ɽ¼¨¹àÌܤÎÀßÄê(_I)..." - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/¥Ä¡¼¥ë(_T)/¥í¥°¥¦¥£¥ó¥É¥¦(_L)" - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/ÀßÄê(_C)" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/ÀßÄê(_C)/Á´È̤ÎÀßÄê(_C)..." - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "/ÀßÄê(_C)/¿¶¤êʬ¤±¤ÎÀßÄê(_F)..." - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/ÀßÄê(_C)/¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê(_P)..." - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/ÀßÄê(_C)/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/ÀßÄê(_C)/¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ®(_N)..." - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/ÀßÄê(_C)/¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸(_E)..." - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/ÀßÄê(_C)/¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤òÊѹ¹(_H)" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/¥Ø¥ë¥×(_H)/¥Þ¥Ë¥å¥¢¥ë(_M)" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/¥Ø¥ë¥×(_H)/¥Þ¥Ë¥å¥¢¥ë(_M)/±Ñ¸ì(_E)" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/¥Ø¥ë¥×(_H)/¥Þ¥Ë¥å¥¢¥ë(_M)/ÆüËܸì(_J)" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/¥Ø¥ë¥×(_H)/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" - -#: src/mainwindow.c:673 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "MainWindow: ¿§¤Î³ä¤êÅö¤Æ %d ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n" - -#: src/mainwindow.c:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "̾¾Î̤ÀßÄê" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "¤Ê¤·" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "¸½ºß¤Î¥¢¥«¥¦¥ó¥È: %s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "¥¦¥£¥ó¥É¥¦¤Î°ÌÃÖ: x = %d, y = %d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "¤´¤ßÈ¢¤ÎÃæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ´¤Æºï½ü¤·¤Þ¤¹¤«?" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÄɲÃ" - -#: src/mainwindow.c:978 -msgid "" -"Input the location of mailbox.\n" -"If the existing mailbox is specified, it will be\n" -"scanned automatically." -msgstr "" -"¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î°ÌÃÖ¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n" -"¸ºß¤¹¤ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò»ØÄꤹ¤ë¤È¼«Æ°Åª¤Ë¥¹¥­¥ã¥ó¤·¤Þ¤¹¡£" - -#: src/mainwindow.c:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ `%s' ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "¥á¡¼¥ëÈ¢" - -#: src/mainwindow.c:995 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:1141 -msgid "Setting widgets..." -msgstr "¥¦¥£¥¸¥§¥Ã¥È¤ò¥»¥Ã¥È¤·¤Æ¤¤¤Þ¤¹..." - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "¼õ¿®" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "¿·Ãå¥á¡¼¥ë¤Î¼è¹þ" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "Á´¼õ¿®" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "Á´¥¢¥«¥¦¥ó¥È¤Î¿·Ãå¥á¡¼¥ë¤Î¼è¹þ" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë" - -#: src/mainwindow.c:1370 src/prefs_account.c:503 src/prefs_common.c:638 -msgid "Compose" -msgstr "ºîÀ®" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "¿·µ¬¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "ÊÖ¿®" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "¥á¥Ã¥»¡¼¥¸¤ËÊÖ¿®¤¹¤ë" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "Á´°÷¤ËÊÖ¿®" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "Á´°÷¤ËÊÖ¿®" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "žÁ÷" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òžÁ÷¤¹¤ë" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "¼Â¹Ô" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "¥Þ¡¼¥¯¤µ¤ì¤¿½èÍý¤ò¼Â¹Ô" - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "¼¡" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "ÀßÄê" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "Á´È̤ÎÀßÄê" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "¥¢¥«¥¦¥ó¥È" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "¥¢¥«¥¦¥ó¥È¤ÎÀßÄê" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit" -msgstr "½ªÎ»" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit this program?" -msgstr "¤³¤Î¥×¥í¥°¥é¥à¤ò½ªÎ»¤·¤Þ¤¹¤«?" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£" - -#: src/mainwindow.c:1924 -#, c-format -msgid "forced charset: %s\n" -msgstr "¶¯À©»ØÄꥭ¥ã¥é¥¯¥¿¥»¥Ã¥È: %s\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "¥á¥Ã¥»¡¼¥¸¤ò %s ¤«¤é %s ¤Ë¼è¤ê¹þ¤ó¤Ç¤¤¤Þ¤¹...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤á¤Þ¤»¤ó¡£\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "̵¸ú¤Ê¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î·Á¼°: %s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬°Û¾ï¤Ç¤¹: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n" - -#: src/mbox.c:159 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"¥¨¥¹¥±¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤¤ From ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿:\n" -"%s" - -#: src/mbox.c:194 -msgid "can't write to temporary file\n" -msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Þ¤»¤ó\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "%d Ä̤Υá¥Ã¥»¡¼¥¸¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¡£\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "¥í¥Ã¥¯¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "²Äǽ¤Ç¤¢¤ì¤Ð 'file' ¤ÎÂå¤ï¤ê¤Ë 'flock' ¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "%s ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡£\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÏÊÌ¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ½êÍ­¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ÂÔµ¡Ãæ...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "%s ¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "̵¸ú¤Ê¥í¥Ã¥¯¥¿¥¤¥×¤Ç¤¹\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "%s ¤ò¥í¥Ã¥¯²ò½ü¤Ç¤­¤Þ¤»¤ó\n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¥¼¥í¤ËÀÚ¤êµÍ¤á¤é¤ì¤Þ¤»¤ó¡£\n" - -#: src/mbox.c:383 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "¥á¥Ã¥»¡¼¥¸¤ò %s ¤«¤é %s ¤Ë½ñ¤­½Ð¤·¤Æ¤¤¤Þ¤¹...\n" - -#: src/messageview.c:67 -msgid "Creating message view...\n" -msgstr "¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %s ¤ò %s ¤Ë¥³¥Ô¡¼¤Ç¤­¤Þ¤»¤ó\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó¡£\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "%s ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "¥Ç¥£¥ì¥¯¥È¥ê %s Æâ¤ÎºÇ¸å¤ÎÈÖ¹æ = %d\n" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "\t¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Ê¤¤¥á¥Ã¥»¡¼¥¸¤ò¸¡º÷Ãæ... " - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "%d Ä̤Υ­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Ê¤¤¥á¥Ã¥»¡¼¥¸¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¡£\n" - -#: src/mh.c:813 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\t¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Ê¤¤¥á¥Ã¥»¡¼¥¸¤òÈÖ¹æ½ç¤Ë¥½¡¼¥È¤·¤Æ¤¤¤Þ¤¹... " - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/³«¤¯(_O)" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤«¤é³«¤¯(_W)..." - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨(_D)" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "/̾Á°¤òÉÕ¤±¤ÆÊݸ(_S)..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/½ð̾¤ò¸¡¾Ú(_C)" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "MIME ¥¿¥¤¥×" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "MIME ¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "¸¡¾Ú¤¹¤ë¤Ë¤Ï¡¢ \"½ð̾¤ò¸¡¾Ú\" ¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤Î¥Ñ¡¼¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤Î¥Ñ¡¼¥È¤òÊݸ¤Ç¤­¤Þ¤»¤ó¡£" - -#: src/mimeview.c:708 src/summaryview.c:2018 -msgid "Save as" -msgstr "̾Á°¤òÉÕ¤±¤ÆÊݸ" - -#: src/mimeview.c:714 src/summaryview.c:2023 -msgid "Overwrite" -msgstr "¾å½ñ¤­" - -#: src/mimeview.c:715 src/summaryview.c:2024 -msgid "Overwrite existing file?" -msgstr "´û¸¤Î¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤·¤Þ¤¹¤«?" - -#: src/mimeview.c:769 -msgid "Open with" -msgstr "¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤«¤é³«¤¯" - -#: src/mimeview.c:770 -#, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"¥Õ¥¡¥¤¥ë¤ò³«¤¯¥³¥Þ¥ó¥É¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:\n" -"(`%s' ¤Ï¥Õ¥¡¥¤¥ë̾¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" - -#: src/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "MIME ¥Ó¥å¡¼¥¢¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹: `%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "%s:%d ¤Ø¤Î NNTP ¤ÎÀܳ¤ò³ÎΩÃæ...\n" - -#: src/news.c:176 -#, c-format -msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "%s:%d ¤Ø¤Î NNTP ¤ÎÀܳ¤¬ÀÚ¤ì¤Æ¤¤¤Þ¤¹¡£ºÆÀܳ¤·¤Þ¤¹...\n" - -#: src/news.c:245 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "%d È֤ε­»ö¤Ï¤¹¤Ç¤Ë¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n" - -#: src/news.c:257 -#, c-format -msgid "can't select group %s\n" -msgstr "¥°¥ë¡¼¥× %s ÁªÂò¤Ç¤­¤Þ¤»¤ó\n" - -#: src/news.c:262 -#, c-format -msgid "getting article %d...\n" -msgstr "%d È֤ε­»ö¤ò¼èÆÀ¤·¤Æ¤¤¤Þ¤¹...\n" - -#: src/news.c:267 -#, c-format -msgid "can't read article %d\n" -msgstr "%d È֤ε­»ö¤òÆɤá¤Þ¤»¤ó\n" - -#: src/news.c:299 -msgid "can't post article.\n" -msgstr "µ­»ö¤ò¥Ý¥¹¥È¤Ç¤­¤Þ¤»¤ó¡£\n" - -#: src/news.c:323 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "%d È֤ε­»ö¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/news.c:393 -#, c-format -msgid "can't set group: %s\n" -msgstr "¥°¥ë¡¼¥×¤ò %s ¤Ë¥»¥Ã¥È¤Ç¤­¤Þ¤»¤ó\n" - -#: src/news.c:400 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "̵¸ú¤Êµ­»ö¤ÎÈϰϤǤ¹: %d - %d\n" - -#: src/news.c:409 -msgid "no new articles.\n" -msgstr "¿·Ãåµ­»ö¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" - -#: src/news.c:422 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "xover %d - %d ¤ò¼èÆÀÃæ (%s)...\n" - -#: src/news.c:425 -msgid "can't get xover\n" -msgstr "xover ¾ðÊó¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/news.c:431 -msgid "error occurred while getting xover.\n" -msgstr "xover ¾ðÊó¤ò¼èÆÀÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" - -#: src/news.c:439 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "̵¸ú¤Ê xover ¹Ô¤Ç¤¹: %s\n" - -#: src/news.c:456 src/news.c:481 -msgid "can't get xhdr\n" -msgstr "xhdr ¾ðÊó¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/news.c:464 src/news.c:489 -msgid "error occurred while getting xhdr.\n" -msgstr "xhdr ¾ðÊó¤ò¼èÆÀÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" - -#: src/news.c:613 -#, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿µ­»ö 1 - %d ¤òºï½ü¤·¤Æ¤¤¤Þ¤¹... " - -#: src/news.c:642 -msgid "\tDeleting all cached articles... " -msgstr "\tÁ´¤Æ¤Î¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿µ­»ö¤òºï½ü¤·¤Æ¤¤¤Þ¤¹... " - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "NNTP¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "¥×¥í¥È¥³¥ë¥¨¥é¡¼: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "¥×¥í¥È¥³¥ë¥¨¥é¡¼\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "¥Ý¥¹¥ÈÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[¥æ¡¼¥¶ID¤Ê¤·]" - -#: src/passphrase.c:244 -#, 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:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"ÉÔÀµ¤Ê¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ç¤¹! ºÆÆþÎϤ·¤Æ²¼¤µ¤¤...\n" -"\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "ǧ¾ÚÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "ɬÍפÊAPOP¥¿¥¤¥à¥¹¥¿¥ó¥×¤¬±þÅú¥á¥Ã¥»¡¼¥¸¤Ë¤¢¤ê¤Þ¤»¤ó\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "±þÅú¥á¥Ã¥»¡¼¥¸¤Î¥¿¥¤¥à¥¹¥¿¥ó¥×¤Îʸˡ¥¨¥é¡¼\n" - -#: src/pop.c:171 src/pop.c:212 -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:364 -#: src/prefs_account.c:378 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -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:409 -msgid "Opening account preferences window...\n" -msgstr "¥¢¥«¥¦¥ó¥È¥×¥ê¥Õ¥¡¥ì¥ó¥¹¥¦¥£¥ó¥É¥¦¤ò³«¤¤¤Æ¤¤¤Þ¤¹...\n" - -#: src/prefs_account.c:436 -#, c-format -msgid "Account%d" -msgstr "Account%d" - -#: src/prefs_account.c:449 -msgid "Preferences for new account" -msgstr "¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎÀßÄê" - -#: src/prefs_account.c:454 -msgid "Preferences for each account" -msgstr "¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê" - -#: src/prefs_account.c:477 -msgid "Creating account preferences window...\n" -msgstr "¥¢¥«¥¦¥ó¥È¥×¥ê¥Õ¥¡¥ì¥ó¥¹¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" - -#: src/prefs_account.c:497 -msgid "Basic" -msgstr "´ðËÜ" - -#: src/prefs_account.c:499 src/prefs_common.c:634 -msgid "Receive" -msgstr "¼õ¿®" - -#: src/prefs_account.c:506 src/prefs_common.c:645 -msgid "Privacy" -msgstr "µ¡Ì©" - -#: src/prefs_account.c:509 -msgid "Advanced" -msgstr "¹âÅÙ¤ÊÀßÄê" - -#: src/prefs_account.c:563 -msgid "Name of this account" -msgstr "¤³¤Î¥¢¥«¥¦¥ó¥È¤Î̾¾Î" - -#: src/prefs_account.c:572 -msgid "Usually used" -msgstr "Ä̾ï»ÈÍÑ" - -#: src/prefs_account.c:576 -msgid "Personal information" -msgstr "¸Ä¿Í¾ðÊó" - -#: src/prefs_account.c:585 -msgid "Full name" -msgstr "̾Á°" - -#: src/prefs_account.c:591 -msgid "Mail address" -msgstr "¥á¡¼¥ë¥¢¥É¥ì¥¹" - -#: src/prefs_account.c:597 -msgid "Organization" -msgstr "ÁÈ¿¥" - -#: src/prefs_account.c:621 -msgid "Server information" -msgstr "¥µ¡¼¥Ð¾ðÊó" - -#: src/prefs_account.c:642 -msgid "POP3 (normal)" -msgstr "POP3 (ɸ½à)" - -#: src/prefs_account.c:644 -msgid "POP3 (APOP auth)" -msgstr "POP3 (APOPǧ¾Ú)" - -#: src/prefs_account.c:646 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:648 -msgid "News (NNTP)" -msgstr "¥Ë¥å¡¼¥¹ (NNTP)" - -#: src/prefs_account.c:650 -msgid "None (local)" -msgstr "¤Ê¤· (¥í¡¼¥«¥ë)" - -#: src/prefs_account.c:672 -msgid "This server requires authentication" -msgstr "¤³¤Î¥µ¡¼¥Ð¤Ïǧ¾Ú¤¬É¬Í×" - -#: src/prefs_account.c:711 -msgid "News server" -msgstr "¥Ë¥å¡¼¥¹¥µ¡¼¥Ð" - -#: src/prefs_account.c:717 -msgid "Server for receiving" -msgstr "¼õ¿®ÍÑ¥µ¡¼¥Ð" - -#: src/prefs_account.c:723 -msgid "SMTP server (send)" -msgstr "SMTP¥µ¡¼¥Ð (Á÷¿®)" - -#: src/prefs_account.c:730 -msgid "User ID" -msgstr "¥æ¡¼¥¶ID" - -#: src/prefs_account.c:736 -msgid "Password" -msgstr "¥Ñ¥¹¥ï¡¼¥É" - -#: src/prefs_account.c:786 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:794 -msgid "Remove messages on server when received" -msgstr "¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë" - -#: src/prefs_account.c:796 -msgid "Download all messages on server" -msgstr "¥µ¡¼¥Ð¾å¤ÎÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë" - -#: src/prefs_account.c:799 -msgid "`Get all' checks for new mail on this account" -msgstr "¡ÖÁ´¼õ¿®¡×¤Ç¤³¤Î¥¢¥«¥¦¥ó¥È¤Î¿·Ãå¥á¡¼¥ë¤ò¥Á¥§¥Ã¥¯¤¹¤ë" - -#: src/prefs_account.c:801 -msgid "Filter messages on receiving" -msgstr "¼õ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë" - -#: src/prefs_account.c:838 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "¥Ø¥Ã¥À" - -#: src/prefs_account.c:845 -msgid "Add Date header field" -msgstr "Date¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òÉÕ¤±¤ë" - -#: src/prefs_account.c:846 -msgid "Generate Message-ID" -msgstr "¥á¥Ã¥»¡¼¥¸ID¤òÀ¸À®¤¹¤ë" - -#: src/prefs_account.c:853 -msgid "Add user-defined header" -msgstr "¥æ¡¼¥¶ÄêµÁ¤Î¥Ø¥Ã¥À¤òÄɲ乤ë" - -#: src/prefs_account.c:855 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr " ÊÔ½¸... " - -#: src/prefs_account.c:865 -msgid "Automatically set following addresses" -msgstr "°Ê²¼¤Î¥¢¥É¥ì¥¹¤ò¼«Æ°»ØÄê" - -#: src/prefs_account.c:874 -msgid "Cc" -msgstr "Cc" - -#: src/prefs_account.c:887 -msgid "Bcc" -msgstr "Bcc" - -#: src/prefs_account.c:900 -msgid "Reply-To" -msgstr "Reply-To" - -#: src/prefs_account.c:913 -msgid "Authentication" -msgstr "ǧ¾Ú" - -#: src/prefs_account.c:921 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "SMTPǧ¾Ú (SMTP AUTH)" - -#: src/prefs_account.c:923 -msgid "Authenticate with POP3 before sending" -msgstr "Á÷¿®Á°¤ËPOP3ǧ¾Ú¤ò¹Ô¤¦" - -#: src/prefs_account.c:957 -msgid "Signature file" -msgstr "½ð̾¥Õ¥¡¥¤¥ë" - -#: src/prefs_account.c:986 -msgid "Sign key" -msgstr "½ð̾¸°" - -#: src/prefs_account.c:994 -msgid "Use default GnuPG key" -msgstr "ɸ½à¤ÎGnuPG¸°¤ò»ÈÍѤ¹¤ë" - -#: src/prefs_account.c:1003 -msgid "Select key by your email address" -msgstr "¼«Ê¬¤ÎÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤Ç¸°¤òÁªÂò¤¹¤ë" - -#: src/prefs_account.c:1012 -msgid "Specify key manually" -msgstr "¸°¤ò¼êÆ°¤Ç»ØÄꤹ¤ë" - -#: src/prefs_account.c:1028 -msgid "User or key ID:" -msgstr "¥æ¡¼¥¶¤Þ¤¿¤Ï¸°ID:" - -#: src/prefs_account.c:1073 -msgid "Specify SMTP port" -msgstr "SMTP¥Ý¡¼¥È¤ò»ØÄê" - -#: src/prefs_account.c:1085 -msgid "Specify POP3 port" -msgstr "POP3¥Ý¡¼¥È¤ò»ØÄê" - -#: src/prefs_account.c:1097 -msgid "Specify domain name" -msgstr "¥É¥á¥¤¥ó̾¤ò»ØÄê" - -#: src/prefs_account.c:1144 -msgid "Mail address is not entered." -msgstr "¥á¡¼¥ë¥¢¥É¥ì¥¹¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/prefs_account.c:1149 -msgid "SMTP server is not entered." -msgstr "SMTP¥µ¡¼¥Ð¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/prefs_account.c:1154 -msgid "User ID is not entered." -msgstr "¥æ¡¼¥¶ID¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/prefs_account.c:1159 -msgid "POP3 server is not entered." -msgstr "POP3¥µ¡¼¥Ð¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/prefs_account.c:1164 -msgid "IMAP4 server is not entered." -msgstr "IMAP4¥µ¡¼¥Ð¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/prefs_account.c:1169 -msgid "NNTP server is not entered." -msgstr "NNTP¥µ¡¼¥Ð¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "Á´ÈÌ¥×¥ê¥Õ¥¡¥ì¥ó¥¹¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "Á´È̤ÎÀßÄê" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "ɽ¼¨" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "¥á¥Ã¥»¡¼¥¸" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "¥¤¥ó¥¿¥Õ¥§¡¼¥¹" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "¤½¤Î¾" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "³°Éô¥×¥í¥°¥é¥à" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "¥á¡¼¥ë¤Î¼õ¿®¤Ë³°Éô¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "¥×¥í¥°¥é¥à¤Î¥Ñ¥¹" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "¥í¡¼¥«¥ë¥¹¥×¡¼¥ë" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "¥¹¥×¡¼¥ë¤«¤é¼è¤ê¹þ¤à" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "¼è¹þ»þ¤Ë¿¶¤êʬ¤±¤ë" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "¥¹¥×¡¼¥ë¥Ç¥£¥ì¥¯¥È¥ê" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "¿·Ãå¥á¡¼¥ë¤ò¼«Æ°¥Á¥§¥Ã¥¯¤¹¤ë" - -#: src/prefs_common.c:759 -msgid "each" -msgstr " " - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "ʬ¤´¤È" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "µ¯Æ°»þ¤Ë¿·Ãå¥á¡¼¥ë¤ò¥Á¥§¥Ã¥¯¤¹¤ë" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "¥Ë¥å¡¼¥¹" - -#: src/prefs_common.c:790 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"¥À¥¦¥ó¥í¡¼¥É¤¹¤ëµ­»ö¿ô¤Î¾å¸Â\n" -"(0¤Ç̵À©¸Â)" - -#: src/prefs_common.c:858 -msgid "Use external program for sending" -msgstr "¥á¡¼¥ë¤ÎÁ÷¿®¤Ë³°Éô¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë" - -#: src/prefs_common.c:882 -msgid "Save sent messages to outbox" -msgstr "Á÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤ËÊݸ¤¹¤ë" - -#: src/prefs_common.c:884 -msgid "Queue messages that fail to send" -msgstr "Á÷¿®¤Ë¼ºÇÔ¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤ë" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "Á÷¿®¥³¡¼¥É¥»¥Ã¥È" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "¼«Æ°ÀßÄê" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "7bit ascii (US-ASCII)" - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "²¤ÊÆ (ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "Ã沤 (ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "¥Ð¥ë¥È½ô¹ñ (ISO-8859-13)" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "¥Ð¥ë¥È½ô¹ñ (ISO-8859-4)" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "¥®¥ê¥·¥ã¸ì (ISO-8859-7)" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "¥È¥ë¥³¸ì (ISO-8859-9)" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "¥­¥ê¥ëʸ»ú (ISO-8859-5)" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "¥­¥ê¥ëʸ»ú (KOI8-R)" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "¥­¥ê¥ëʸ»ú (Windows-1251)" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "¥­¥ê¥ëʸ»ú (KOI8-U)" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "ÆüËܸì (ISO-2022-JP)" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "ÆüËܸì (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "ÆüËܸì (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "´ÊÂλúÃæ¹ñ¸ì (GB2312)" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "ÈËÂλúÃæ¹ñ¸ì (Big5)" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "ÈËÂλúÃæ¹ñ¸ì (EUC-TW)" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "Ãæ¹ñ¸ì (ISO-2022-CN)" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "´Ú¹ñ¸ì (EUC-KR)" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "°úÍÑ" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "ÊÖ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò°úÍѤ¹¤ë" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "°úÍÑÉä" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "°úÍѤηÁ¼°:" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr " µ­¹æ¤ÎÀâÌÀ " - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "¼«Æ°Åª¤Ë½ð̾¤òÁÞÆþ¤¹¤ë" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "½ð̾¤Î¶èÀÚ¤ê" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "¥á¥Ã¥»¡¼¥¸¤òȾ³Ñ" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "ʸ»ú¤Ç²þ¹Ô" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "°úÍÑÉô¤ò¼«Æ°²þ¹Ô¤¹¤ë" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "Á÷¿®»þ¤Ë¼«Æ°²þ¹Ô¤¹¤ë" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "¥Õ¥©¥ó¥È" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "¥Æ¥­¥¹¥È" - -#: src/prefs_common.c:1160 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "¥Ø¥Ã¥À¤Î¹àÌܤòËÝÌõ¤¹¤ë (Î㤨¤Ð `From:', `Subject:' Åù)" - -#: src/prefs_common.c:1163 -msgid "Display unread number next to folder name" -msgstr "¥Õ¥©¥ë¥À̾¤Î²£¤Ë̤ÆÉ¿ô¤òɽ¼¨¤¹¤ë" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "¥µ¥Þ¥ê¥Ó¥å¡¼" - -#: src/prefs_common.c:1176 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "º¹½Ð¿Í¤¬¼«Ê¬¤Î¾ì¹ç¤Ï `º¹½Ð¿Í' ¥«¥é¥à¤Ë°¸Àè¤òɽ¼¨¤¹¤ë" - -#: src/prefs_common.c:1178 -msgid "Enable horizontal scroll bar" -msgstr "¿åÊ¿¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤òÍ­¸ú¤Ë¤¹¤ë" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "ÆüÉդνñ¼°" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" -"½ñ¼°Ãæ¤ÎÄ̾ï¤Îʸ»ú¤ÏÊÑ´¹¤µ¤ì¤º¤Ë¥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡£ÊÑ´¹½ñ¼°»ØÄê¤Ï % " -"ʸ»ú¤Ç¼¨¤µ¤ì¡¢°Ê²¼¤Î¤è¤¦¤ËÃÖ´¹¤µ¤ì¤Þ¤¹:\n" -"%a: ÍËÆü¤Î¾Êά̾\n" -"%A: ÍËÆü¤Î´°Á´¤Ê̾Á°\n" -"%b: ·î¤Î¾Êά̾\n" -"%B: ·î¤Î´°Á´¤Ê̾Á°\n" -"%c: ¸½ºß¤Î¥í¥«¡¼¥ë¤Ë¤ª¤±¤ë°ìÈÌŪ¤ÊÆüÉդȻþ¹ï¤Îɽµ­\n" -"%C: À¤µª(À¾Îñǯ¤Î¾å2·å)\n" -"%d: Æü(10¿Ê¿ôɽµ­)\n" -"%H: 24»þ´Ö»þ·×¤Ç¤Î»þ\n" -"%I: 12»þ´Ö»þ·×¤Ç¤Î»þ\n" -"%j: ǯ¤Î½é¤á¤«¤éÄÌ»»¤ÎÆü¿ô (10¿Ê¿ôɽµ­)\n" -"%m: ·î(10¿Ê¿ôɽµ­)\n" -"%M: ·î(10¿Ê¿ôɽµ­)\n" -"%p: ¸áÁ°¤Þ¤¿¤Ï¸á¸å\n" -"%S: ÉÃ(10¿Ê¿ôɽµ­)\n" -"%w: ½µ¤Î²¿ÈÖÌܤÎÆü(10¿Ê¿ôɽµ­)¤«\n" -"%x: ¸½ºß¤Î¥í¥«¡¼¥ë¤Ç°ìÈÌŪ¤ÊÆüÉÕɽµ­\n" -"%y: À¾Îñ¤Î²¼2·å(À¤µªÉôʬ¤ò´Þ¤Þ¤Ê¤¤Ç¯)\n" -"%Y: (4·å¤Î)À¾Îñǯ\n" -"%Z: ¥¿¥¤¥à¥¾¡¼¥ó¤Þ¤¿¤Ï¥¾¡¼¥ó̾¤Þ¤¿¤Ï¾Êά̾" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr " ¥µ¥Þ¥ê¤Îɽ¼¨¹àÌܤòÀßÄê... " - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "¥á¥Ã¥»¡¼¥¸¤Î¿§¤òÍ­¸ú¤Ë¤¹¤ë" - -#: src/prefs_common.c:1297 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "2¥Ð¥¤¥È±Ñ¿ô»ú¤ò1¥Ð¥¤¥Èʸ»ú¤Çɽ¼¨¤¹¤ë" - -#: src/prefs_common.c:1299 -msgid "Display header pane above message view" -msgstr "¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Î¾åÉô¤Ë¥Ø¥Ã¥À¥Ú¥¤¥ó¤òɽ¼¨¤¹¤ë" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ë´Êά¥Ø¥Ã¥À¤òɽ¼¨¤¹¤ë" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "¹Ô´Ö¤ò¶õ¤±¤ë" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "¥Ô¥¯¥»¥ë" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "¹ÔƬ¤ò¶õ¤±¤ë" - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "¥¹¥¯¥í¡¼¥ë" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "Ⱦ¥Ú¡¼¥¸Ã±°Ì" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "¥¹¥à¡¼¥º¥¹¥¯¥í¡¼¥ë" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "´Ö³Ö" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "ɸ½à¤Ç¥á¥Ã¥»¡¼¥¸¤ò°Å¹æ²½¤¹¤ë" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "ɸ½à¤Ç¥á¥Ã¥»¡¼¥¸¤Ë½ð̾¤¹¤ë" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "½ð̾¤ò¼«Æ°Åª¤Ë¸¡¾Ú¤¹¤ë" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "½ð̾¤Î¸¡¾Ú·ë²Ì¤ò¥Ý¥Ã¥×¥¢¥Ã¥×¥¦¥£¥ó¥É¥¦¤Çɽ¼¨¤¹¤ë" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ÎÆþÎÏ»þ¤ËÆþÎϤòÊ᪤¹¤ë" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "GnuPG¤¬Æ°ºî¤·¤Ê¤¤¾ì¹çµ¯Æ°»þ¤Ë·Ù¹ð¤òɽ¼¨¤¹¤ë" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "ɸ½à¤Î½ð̾¸°" - -#: src/prefs_common.c:1554 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "" -"Emacs¾å¤Î¥á¡¼¥é¤Î¥Þ¥¦¥¹Áàºî»þ¤ÎµóÆ°¤ò\n" -"¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë" - -#: src/prefs_common.c:1561 -msgid "Open first unread message when entering a folder" -msgstr "¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤ËºÇ½é¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò³«¤¯" - -#: src/prefs_common.c:1565 -msgid "Go to inbox after receiving new mail" -msgstr "¿·Ãå¥á¡¼¥ë¤ò¼õ¿®¤·¤¿¸å¼õ¿®È¢¤Ë°ÜÆ°¤¹¤ë" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤Þ¤¿¤Ïºï½ü¤·¤¿¤é¨ºÂ¤Ë¼Â¹Ô¤¹¤ë" - -#: src/prefs_common.c:1580 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" -"(¤³¤ì¤ò̵¸ú¤Ë¤¹¤ë¤È¡¢¥á¥Ã¥»¡¼¥¸¤Ï¼Â¹Ô¤µ¤ì¤ë¤Þ¤Ç\n" -" ¥Þ¡¼¥¯¤µ¤ì¤¿¾õÂ֤ˤʤê¤Þ¤¹)" - -#: src/prefs_common.c:1587 -msgid "Add address to destination when double-clicked" -msgstr "¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤¿¤È¤­¤Ë¥¢¥É¥ì¥¹¤ò°¸Àè¤ËÄɲ乤ë" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "½ªÎ»»þ" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "½ªÎ»»þ¤Ë³Îǧ¤¹¤ë" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "½ªÎ»»þ¤Ë¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "¶õ¤Ë¤¹¤ëÁ°¤Ë¿Ò¤Í¤ë" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ì¤Ð·Ù¹ð¤¹¤ë" - -#: src/prefs_common.c:1648 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "³°ÉôWeb¥Ö¥é¥¦¥¶ (%s ¤ÏURI¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" - -#: src/prefs_common.c:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "¥³¥Þ¥ó¥É" - -#: src/prefs_common.c:1673 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "°õºþ (%s ¤Ï¥Õ¥¡¥¤¥ë̾¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" - -#: src/prefs_common.c:1689 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "³°Éô¥¨¥Ç¥£¥¿ (%s ¤Ï¥Õ¥¡¥¤¥ë̾¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" - -#: src/prefs_common.c:1752 -msgid "Set message colors" -msgstr "¥á¥Ã¥»¡¼¥¸¤Î¿§¤ò»ØÄê" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "¿§" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "°úÍÑʸ - 1Ãʳ¬" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "°úÍÑʸ - 2Ãʳ¬" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "°úÍÑʸ - 3Ãʳ¬" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "URI ¥ê¥ó¥¯" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "°úÍÑ¿§¤ò½Û´Ä" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "°úÍÑ¥ì¥Ù¥ë1¤Î¿§¤òÁªÂò" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "°úÍÑ¥ì¥Ù¥ë2¤Î¿§¤òÁªÂò" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "°úÍÑ¥ì¥Ù¥ë3¤Î¿§¤òÁªÂò" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "URI ¤Î¿§¤òÁªÂò" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "µ­¹æ¤ÎÀâÌÀ" - -#: src/prefs_common.c:2052 -#, 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:2155 -msgid "Set display item" -msgstr "ɽ¼¨¹àÌܤÎÀßÄê" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "¥Þ¡¼¥¯" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "ÈÖ¹æ" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "ÆüÉÕ" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "º¹½Ð¿Í" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "·ï̾" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "¥Õ¥©¥ó¥È¤ÎÁªÂò" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "¥«¥¹¥¿¥à¥Ø¥Ã¥À" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "¥«¥¹¥¿¥à¥Ø¥Ã¥ÀÀßÄꥦ¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "¥«¥¹¥¿¥à¥Ø¥Ã¥À¤ÎÀßÄê" - -#: src/prefs_customheader.c:212 -msgid "Value" -msgstr "ÆâÍÆ" - -#: src/prefs_customheader.c:320 -msgid "Reading custom header configuration...\n" -msgstr "¥«¥¹¥¿¥à¥Ø¥Ã¥À¤ÎÀßÄê¤òÆɤ߹þ¤ßÃæ...\n" - -#: src/prefs_customheader.c:365 -msgid "Writing custom header configuration...\n" -msgstr "¥«¥¹¥¿¥à¥Ø¥Ã¥À¤ÎÀßÄê¤ò½ñ¤­½Ð¤·Ãæ...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "¥Ø¥Ã¥À̾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/prefs_customheader.c:541 -msgid "Delete header" -msgstr "¥Ø¥Ã¥À¤Îºï½ü" - -#: src/prefs_customheader.c:542 -msgid "Do you really want to delete this header?" -msgstr "ËÜÅö¤Ë¤³¤Î¥Ø¥Ã¥À¤òºï½ü¤·¤Æ¤â¤¤¤¤¤Ç¤¹¤«?" - -#: src/prefs_display_header.c:187 -msgid "Creating display header setting window...\n" -msgstr "ɽ¼¨¥Ø¥Ã¥ÀÀßÄꥦ¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" - -#: src/prefs_display_header.c:210 -msgid "Display header setting" -msgstr "ɽ¼¨¥Ø¥Ã¥À¤ÎÀßÄê" - -#: src/prefs_display_header.c:237 -msgid "Header name" -msgstr "¥Ø¥Ã¥À̾" - -#: src/prefs_display_header.c:269 -msgid "Displayed Headers" -msgstr "ɽ¼¨¤¹¤ë¥Ø¥Ã¥À" - -#: src/prefs_display_header.c:327 -msgid "Hidden headers" -msgstr "ɽ¼¨¤·¤Ê¤¤¥Ø¥Ã¥À" - -#: src/prefs_display_header.c:357 -msgid "Show all unspecified headers" -msgstr "»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¥Ø¥Ã¥À¤òÁ´¤Æɽ¼¨" - -#: src/prefs_display_header.c:382 -msgid "Reading configuration for displaying headers...\n" -msgstr "ɽ¼¨¥Ø¥Ã¥À¤ÎÀßÄê¤òÆɤ߹þ¤ßÃæ...\n" - -#: src/prefs_display_header.c:420 -msgid "Writing configuration for displaying headers...\n" -msgstr "ɽ¼¨¥Ø¥Ã¥À¤ÎÀßÄê¤ò½ñ¤­½Ð¤·Ãæ...\n" - -#: src/prefs_display_header.c:552 -msgid "This header is already in the list." -msgstr "¤³¤Î¥Ø¥Ã¥À¤Ï¤¹¤Ç¤Ë¥ê¥¹¥ÈÃæ¤Ë¸ºß¤·¤Þ¤¹¡£" - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "ÅÐÏ¿ºÑ¤ß¥ë¡¼¥ë" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "¿¶¤êʬ¤±ÀßÄꥦ¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "¿¶¤êʬ¤±¤ÎÀßÄê" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "±é»»»Ò" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(¤Ê¤·)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "¥­¡¼¥ï¡¼¥É" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "½Ò¸ì" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "´Þ¤à" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "´Þ¤Þ¤Ê¤¤" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "¿¶¤êʬ¤±Àè" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "Àµµ¬É½¸½¤ò»ÈÍÑ" - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "¼õ¿®¤·¤Ê¤¤" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "ÅÐÏ¿" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr " ÃÖ´¹ " - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "¿¶¤êʬ¤±¤ÎÀßÄê¤òÆɤ߹þ¤ßÃæ...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "¿¶¤êʬ¤±¤ÎÀßÄê¤ò½ñ¤­½Ð¤·Ãæ...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "(¿·µ¬)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "¿¶¤êʬ¤±À褬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "¥ë¡¼¥ë¤Îºï½ü" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -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:457 -msgid "Mark file not found.\n" -msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£\n" - -#: src/procmsg.c:459 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤Î¥Ð¡¼¥¸¥ç¥ó¤¬°Û¤Ê¤ê¤Þ¤¹ (%d != %d)¡£ÇË´þ¤·¤Þ¤¹¡£\n" - -#: src/procmsg.c:475 -msgid "Can't open mark file with append mode.\n" -msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤òÄɲå⡼¥É¤Ç³«¤±¤Þ¤»¤ó¡£\n" - -#: src/procmsg.c:480 -msgid "Can't open mark file with write mode.\n" -msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ò½ñ¤­¹þ¤ß¥â¡¼¥É¤Ç³«¤±¤Þ¤»¤ó¡£\n" - -#: src/procmsg.c:663 -msgid "Sending queued message failed.\n" -msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" - -#: src/procmsg.c:720 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "°õºþ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹: `%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "¾õÂÖ" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "¿Ê¹Ô¾õ¶·¥À¥¤¥¢¥í¥°¤òºîÀ®Ãæ...\n" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "¥Ç¡¼¥¿¤Î¼èÆÀÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Þ¤»¤ó¡£\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "Oops: ½ð̾¤Ï¸¡¾Ú¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "½ð̾¤¬¤¢¤ê¤Þ¤»¤ó" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "ÀµÅö¤Ê½ð̾" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "ÉÔÀµ¤Ê½ð̾" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "½ð̾¤ò¸¡¾Ú¤¹¤ë¤¿¤á¤Î¸ø³«¸°¤¬¤¢¤ê¤Þ¤»¤ó" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "½ð̾¸¡¾Ú¥¨¥é¡¼" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "½ð̾¤ËÂФ·¤ÆÊ£¿ô¤Î°Û¤Ê¤Ã¤¿·ë²Ì" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "¥¨¥é¡¼: ÉÔÌÀ¤Ê¾õÂÖ" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "\"%s\" ¤«¤é¤ÎÀµÅö¤Ê½ð̾" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "\"%s\" ¤«¤é¤ÎÉÔÀµ¤Ê½ð̾" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "¤³¤Î¸°¤Î¤¿¤á¤Î¥æ¡¼¥¶ID¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£" - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr " ¤Þ¤¿¤Ï \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "Signature made %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "Key fingerprint: %s\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "`%s' ¤Î¸°¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "`%s' ¤Î¾ðÊó¤ò¼ý½¸¤·¤Æ¤¤¤Þ¤¹ ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "¸°¤ÎÁªÂò" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "¸°ID" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "ÀµÅöÀ­" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "ÁªÂò" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "¸°¤ÎÄɲÃ" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "Ê̤Υ桼¥¶¤Þ¤¿¤Ï¸°ID¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤\n" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤Î¥Ø¥Ã¥À¤¬²õ¤ì¤Æ¤¤¤Þ¤¹¡£\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "¥¢¥«¥¦¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤ò»ÈÍѤ·¤Þ¤¹...\n" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "¥¢¥«¥¦¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£\n" - -#: src/send.c:250 -#, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "SMTP¥µ¡¼¥Ð: %s ¤ËÀܳÃæ..." - -#: src/send.c:254 -msgid "Connecting" -msgstr "ÀܳÃæ" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "MAIL FROM ¤òÁ÷¿®Ãæ..." - -#: src/send.c:262 -msgid "Sending" -msgstr "Á÷¿®Ãæ" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "RCPT TO ¤òÁ÷¿®Ãæ..." - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "DATA ¤òÁ÷¿®Ãæ..." - -#: src/send.c:292 -#, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®Ãæ (%d / %d bytes)" - -#: src/send.c:309 -msgid "Quitting..." -msgstr "ÀÚÃÇÃæ..." - -#: src/send.c:330 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "SMTP¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" - -#: src/send.c:341 -msgid "Error occurred while sending HELO\n" -msgstr "HELO ¤òÁ÷¿®Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿\n" - -#: src/send.c:357 -msgid "Sending message" -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 "" -"ºÇ½é¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î°ÌÃÖ¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£\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:289 -msgid "/M_ove..." -msgstr "/°ÜÆ°(_O)..." - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/¥³¥Ô¡¼(_C)..." - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/¼Â¹Ô(_X)" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/¥Þ¡¼¥¯(_M)" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/¥Þ¡¼¥¯(_M)/¥Þ¡¼¥¯(_M)" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/¥Þ¡¼¥¯(_M)/¥Þ¡¼¥¯²ò½ü(_U)" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/¥Þ¡¼¥¯(_M)/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "/¥Þ¡¼¥¯(_M)/̤ÆɤȤ·¤Æ¥Þ¡¼¥¯(_E)" - -#: src/summaryview.c:298 -msgid "/_Mark/Mark as rea_d" -msgstr "/¥Þ¡¼¥¯(_M)/Æɤó¤À¤³¤È¤Ë¤¹¤ë(_D)" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/ÊÖ¿®(_R)" - -#: src/summaryview.c:302 -msgid "/Repl_y to sender" -msgstr "/º¹½Ð¿Í¤ËÊÖ¿®(_Y)" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/Á´°÷¤ËÊÖ¿®(_L)" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/žÁ÷(_F)" - -#: src/summaryview.c:305 -msgid "/Forward as a_ttachment" -msgstr "/źÉդȤ·¤ÆžÁ÷(_T)" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Ç³«¤¯(_W)" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "/¥½¡¼¥¹¤òɽ¼¨(_U)" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/Á´¤Æ¤Î¥Ø¥Ã¥À¤òɽ¼¨(_H)" - -#: src/summaryview.c:311 -msgid "/Re-_edit" -msgstr "/ºÆÊÔ½¸(_E)" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/°õºþ(_P)..." - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "/Á´¤ÆÁªÂò(_A)" - -#: src/summaryview.c:322 -msgid "M" -msgstr "M" - -#: src/summaryview.c:322 -msgid "U" -msgstr "U" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "¥µ¥Þ¥ê¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" - -#: src/summaryview.c:352 -msgid "No." -msgstr "ÈÖ¹æ" - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "¥Þ¡¼¥¯¤Î½èÍý" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "¥Þ¡¼¥¯¤¬»Ä¤Ã¤Æ¤¤¤Þ¤¹¡£½èÍý¤·¤Þ¤¹¤«?" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"¶õ¥Õ¥©¥ë¥À\n" -"\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "¥Õ¥©¥ë¥À¤ò¥¹¥­¥ã¥óÃæ (%s)..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "´°Î»." - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ê¤·" - -#: src/summaryview.c:816 -msgid "No unread message found. Go to next folder?" -msgstr "̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ê¤Þ¤»¤ó¡£¼¡¤Î¥Õ¥©¥ë¥À¤Ë°ÜÆ°¤·¤Þ¤¹¤«?" - -#: src/summaryview.c:957 src/summaryview.c:959 -msgid "Attracting messages by subject..." -msgstr "¥á¥Ã¥»¡¼¥¸¤ò·ï̾¤Ç´ó¤»¤Æ¤¤¤Þ¤¹..." - -#: src/summaryview.c:1102 -#, c-format -msgid "%d deleted" -msgstr "%d Ä̺ï½ü" - -#: src/summaryview.c:1106 -#, c-format -msgid "%s%d moved" -msgstr "%s%d ÄÌ°ÜÆ°" - -#: src/summaryview.c:1107 src/summaryview.c:1114 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1112 -#, c-format -msgid "%s%d copied" -msgstr "%s%d ÄÌ¥³¥Ô¡¼" - -#: src/summaryview.c:1129 -msgid " item(s) selected" -msgstr " Ä̤Υá¥Ã¥»¡¼¥¸¤òÁªÂò" - -#: src/summaryview.c:1140 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "¿·Ãå %d ÄÌ, ̤ÆÉ %d ÄÌ, Áí¿ô %d ÄÌ (%s)" - -#: src/summaryview.c:1146 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "¿·Ãå %d ÄÌ, ̤ÆÉ %d ÄÌ, Áí¿ô %d ÄÌ" - -#: src/summaryview.c:1187 src/summaryview.c:1188 -msgid "Sorting summary..." -msgstr "¥µ¥Þ¥ê¤ò¥½¡¼¥ÈÃæ..." - -#: src/summaryview.c:1226 -msgid "\tSetting summary from message data..." -msgstr "\t¥á¥Ã¥»¡¼¥¸¥Ç¡¼¥¿¤«¤é¥µ¥Þ¥ê¤òÀßÄêÃæ..." - -#: src/summaryview.c:1228 -msgid "Setting summary from message data..." -msgstr "¥á¥Ã¥»¡¼¥¸¥Ç¡¼¥¿¤«¤é¥µ¥Þ¥ê¤òÀßÄêÃæ..." - -#: src/summaryview.c:1337 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "¥µ¥Þ¥ê¥­¥ã¥Ã¥·¥å¤ò½ñ¤­¹þ¤ßÃæ (%s)..." - -#: src/summaryview.c:1389 -msgid "(No Date)" -msgstr "(ÆüÉդʤ·)" - -#: src/summaryview.c:1654 -#, c-format -msgid "Message %d is marked\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò¥Þ¡¼¥¯¤·¤Þ¤·¤¿\n" - -#: src/summaryview.c:1683 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò´ûÆɤȤ·¤Æ¥Þ¡¼¥¯¤·¤Þ¤·¤¿\n" - -#: src/summaryview.c:1718 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò̤ÆɤȤ·¤Æ¥Þ¡¼¥¯¤·¤Þ¤·¤¿\n" - -#: src/summaryview.c:1760 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %s/%d ¤òºï½ü¤¹¤ë¤è¤¦¤Ë¥»¥Ã¥È¤·¤Þ¤·¤¿\n" - -#: src/summaryview.c:1774 -msgid "Current folder is Trash." -msgstr "¸½ºß¤Î¥Õ¥©¥ë¥À¤Ï¤´¤ßÈ¢¤Ç¤¹¡£" - -#: src/summaryview.c:1796 src/summaryview.c:1798 -msgid "Deleting duplicated messages..." -msgstr "½ÅÊ£¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Æ¤¤¤Þ¤¹..." - -#: src/summaryview.c:1848 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %s/%d ¤ò¥Þ¡¼¥¯²ò½ü¤·¤Þ¤·¤¿\n" - -#: src/summaryview.c:1885 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò %s ¤Ë°ÜÆ°¤¹¤ë¤è¤¦¤Ë¥»¥Ã¥È¤·¤Þ¤·¤¿\n" - -#: src/summaryview.c:1897 -msgid "Destination is same as current folder." -msgstr "°ÜÆ°À褬¸½ºß¤Î¥Õ¥©¥ë¥À¤ÈƱ¤¸¤Ç¤¹¡£" - -#: src/summaryview.c:1946 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò %s ¤Ë¥³¥Ô¡¼¤¹¤ë¤è¤¦¤Ë¥»¥Ã¥È¤·¤Þ¤·¤¿\n" - -#: src/summaryview.c:1959 -msgid "Destination to copy is same as current folder." -msgstr "¥³¥Ô¡¼À褬¸½ºß¤Î¥Õ¥©¥ë¥À¤ÈƱ¤¸¤Ç¤¹¡£" - -#: src/summaryview.c:1991 -msgid "Selecting all messages..." -msgstr "Á´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤òÁªÂòÃæ..." - -#: src/summaryview.c:2045 -msgid "Print" -msgstr "°õºþ" - -#: src/summaryview.c:2046 -#, c-format -msgid "" -"Enter the print command line:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"°õºþ¥³¥Þ¥ó¥É¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:\n" -"(`%s' ¤Ï¥Õ¥¡¥¤¥ë̾¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" - -#: src/summaryview.c:2052 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"°õºþ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹:\n" -"`%s'" - -#: src/summaryview.c:2274 src/summaryview.c:2275 -msgid "Building threads..." -msgstr "¥¹¥ì¥Ã¥É¤ò¹½ÃÛÃæ..." - -#: src/summaryview.c:2297 src/summaryview.c:2298 -msgid "Unthreading..." -msgstr "¥¹¥ì¥Ã¥É¤ò²ò½üÃæ..." - -#: src/summaryview.c:2320 -msgid "Unthreading for execution..." -msgstr "¼Â¹Ô¤Î¤¿¤á¤Ë¥¹¥ì¥Ã¥É¤ò²ò½üÃæ..." - -#: src/summaryview.c:2407 -msgid "filtering..." -msgstr "¿¶¤êʬ¤±Ãæ..." - -#: src/summaryview.c:2408 -msgid "Filtering..." -msgstr "¿¶¤êʬ¤±Ãæ..." - -#: src/summaryview.c:2514 -#, c-format -msgid "Go to %s\n" -msgstr "%s ¤Ë°ÜÆ°\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "¥Æ¥­¥¹¥È¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" - -#: src/textview.c:366 -msgid "To save this part, pop up the context menu with " -msgstr "¤³¤Î¥Ñ¡¼¥È¤òÊݸ¤¹¤ë¤Ë¤Ï¡¢±¦¥¯¥ê¥Ã¥¯¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò" - -#: src/textview.c:367 -msgid "right click and select `Save as...', " -msgstr "ɽ¼¨¤·¡¢¡Ö̾Á°¤òÉÕ¤±¤ÆÊݸ...¡×¤òÁªÂò¤¹¤ë¤«¡¢" - -#: src/textview.c:368 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"`y' ¥­¡¼¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -"\n" - -#: src/textview.c:370 -msgid "To display this part as a text message, select " -msgstr "¤³¤Î¥Ñ¡¼¥È¤ò¥Æ¥­¥¹¥È¥á¥Ã¥»¡¼¥¸¤È¤·¤Æɽ¼¨¤¹¤ë¤Ë¤Ï¡¢" - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"¡Ö¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨¡×¤òÁªÂò¤¹¤ë¤«¡¢`t' ¥­¡¼¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -"\n" - -#: src/textview.c:373 -msgid "To open this part with external program, select " -msgstr "¤³¤Î¥Ñ¡¼¥È¤ò³°Éô¥×¥í¥°¥é¥à¤Ç³«¤¯¤Ë¤Ï¡¢¡Ö³«¤¯¡×¤Þ¤¿¤Ï" - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "¡Ö¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤«¤é³«¤¯¡×¤òÁªÂò¤¹¤ë¤«¡¢" - -#: src/textview.c:375 -msgid "or double-click, or click the center button, " -msgstr "¤¢¤ë¤¤¤Ï¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢Ãæ±û¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢" - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "`l' ¥­¡¼¤ò²¡¤·¤Æ²¼¤µ¤¤¡£" - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "¤³¤Î½ð̾¤Ï¤Þ¤À¸¡¾Ú¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "¸¡¾Ú¤¹¤ë¤Ë¤Ï¡¢±¦¥¯¥ê¥Ã¥¯¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤òɽ¼¨¤·¡¢\n" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "" -"¡Ö½ð̾¤ò¸¡¾Ú¡×¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n" -"\n" - -#: src/utils.c:1547 -#, c-format -msgid "writing to %s failed.\n" -msgstr "%s ¤Ø¤Î½ñ¤­¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" - -#: src/utils.c:1588 -#, c-format -msgid "move_file(): file %s already exists." -msgstr "move_file(): ¥Õ¥¡¥¤¥ë %s ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" - -#: src/utils.c:1729 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "URI ¤ò³«¤¯¤¿¤á¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹: `%s'" diff --git a/po/ko.po b/po/ko.po deleted file mode 100644 index cf2cc9f4c..000000000 --- a/po/ko.po +++ /dev/null @@ -1,4108 +0,0 @@ -# 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-06-20 17:53+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:90 -msgid "About" -msgstr "sylpheed¶õ" - -#: src/about.c:199 -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:205 -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:210 -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:214 -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:220 -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:226 -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:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1476 src/compose.c:3132 src/export.c:185 src/foldersel.c:176 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:334 src/main.c:342 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "OK" -msgstr "È®ÀÎ" - -#: src/account.c:101 -msgid "Reading all config for each account...\n" -msgstr "°¢ °èÁ¤¿¡´ëÇÑ ¸ðµç ¼³Á¤À» ÀнÀ´Ï´Ù...\n" - -#: src/account.c:116 -#, c-format -msgid "Found label: %s\n" -msgstr "¶óº§ %s¸¦ ¹ß°ßÇß½À´Ï´Ù\n" - -#: src/account.c:208 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" -"´Ù¸¥ ÆíÁý âÀÌ ¿­·ÁÀÖ½À´Ï´Ù.\n" -"°èÁ¤À» ÆíÁýÇϱâÀü¿¡ ¸ðµç ÆíÁýâµéÀ» ´Ý¾ÆÁÖ¼¼¿ä." - -#: src/account.c:214 -msgid "Opening account edit window...\n" -msgstr "°èÁ¤ ÆíÁýâÀ» ¿±´Ï´Ù...\n" - -#: src/account.c:361 -msgid "Creating account edit window...\n" -msgstr "°èÁ¤ ÆíÁýâÀ» »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/account.c:366 -msgid "Edit accounts" -msgstr "°èÁ¤ ÆíÁý" - -#: src/account.c:394 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2244 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "À̸§" - -#: src/account.c:395 src/prefs_account.c:632 -msgid "Protocol" -msgstr "ÇÁ·ÎÅäÄÝ" - -#: src/account.c:396 -msgid "Server" -msgstr "¼­¹ö" - -#: src/account.c:415 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "Ãß°¡" - -#: src/account.c:421 -msgid "Edit" -msgstr "ÆíÁý" - -#: src/account.c:427 src/prefs_customheader.c:247 -msgid " Delete " -msgstr "»èÁ¦" - -#: src/account.c:433 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "¾Æ·¡·Î" - -#: src/account.c:439 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "À§·Î" - -#: src/account.c:453 -msgid " Set as usually used account " -msgstr "±âº» °èÁ¤À¸·Î ¼³Á¤" - -#: src/account.c:459 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "´Ý±â" - -#: src/account.c:513 -msgid "Delete account" -msgstr "°èÁ¤ »èÁ¦" - -#: src/account.c:514 -msgid "Do you really want to delete this account?" -msgstr "Á¤¸»·Î ÀÌ °èÁ¤À» »èÁ¦ÇϽðڽÀ´Ï±î?" - -#: src/account.c:515 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3306 src/folderview.c:1448 src/folderview.c:1491 -#: src/folderview.c:1590 src/folderview.c:1631 src/folderview.c:1730 -#: src/folderview.c:1763 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "È®ÀÎ" - -#: src/account.c:515 src/compose.c:3306 src/folderview.c:1448 -#: src/folderview.c:1491 src/folderview.c:1590 src/folderview.c:1631 -#: src/folderview.c:1730 src/folderview.c:1763 -msgid "+No" -msgstr "¾Æ´Ï¿ä" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -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:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -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:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/ÆÄÀÏ(_F)/´Ý±â(_C)" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/µµ¿ò¸»(_H)" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -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:369 -#: src/folderview.c:206 src/folderview.c:208 src/folderview.c:217 -#: src/folderview.c:219 src/folderview.c:228 src/folderview.c:230 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/ÆíÁý(_E)" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/»èÁ¦(_D)" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "À̸ÞÀÏ ÁÖ¼Ò" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "¸Þ¸ð" - -#: src/addressbook.c:325 src/compose.c:2804 -msgid "Address book" -msgstr "ÁÖ¼Ò·Ï" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "À̸§:" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -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:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "¾Æ´Ï¿À" - -#: src/addressbook.c:1000 src/folderview.c:1321 src/folderview.c:1522 -msgid "New folder" -msgstr "»õ Æú´õ" - -#: src/addressbook.c:1001 src/folderview.c:1322 -msgid "Input the name of new folder:" -msgstr "»õ Æú´õÀÇ À̸§À» ³ÖÀ¸¼¼¿ä:" - -#: src/addressbook.c:1002 src/folderview.c:1323 src/folderview.c:1526 -msgid "NewFolder" -msgstr "»õ Æú´õ" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "ÀÌ¹Ì ±× À̸§ÀÌ ÀÖ½À´Ï´Ù." - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "»õ ±×·ì" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "»õ ±×·ìÀÇ À̸§À» ³ÖÀ¸¼¼¿ä:" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "»õ ±×·ì" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "±×·ì ÆíÁý" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "±×·ìÀÇ »õ À̸§À» ³ÖÀ¸¼¼¿ä:" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "Æú´õ ÆíÁý" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "»õ Æú´õÀÇ À̸§À» ³ÖÀ¸¼¼¿ä:" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Á¤¸»·Î `%s'¸¦ Áö¿ì½Ã°Ú½À´Ï±î?" - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "ÁÖ¼Ò ÆíÁý" - -#: src/addressbook.c:1290 src/compose.c:2803 src/select-keys.c:302 -msgid "Address" -msgstr "ÁÖ¼Ò" - -#: src/addressbook.c:1294 src/compose.c:1476 src/compose.c:3133 -#: src/compose.c:3703 src/export.c:186 src/foldersel.c:177 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:334 src/main.c:342 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "Cancel" -msgstr "Ãë¼Ò" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "ÁÖ¼Ò·Ï ÆÄÀÏÀ» ÀнÀ´Ï´Ù..." - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s°¡ ¾ø½À´Ï´Ù.\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:869 src/imap.c:888 -#: src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 src/mh.c:816 -#: src/news.c:648 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:1003 -#: src/summaryview.c:1209 src/summaryview.c:1291 src/summaryview.c:1352 -#: src/summaryview.c:1809 src/summaryview.c:2287 src/summaryview.c:2310 -#: src/summaryview.c:2331 src/summaryview.c:2424 -msgid "done.\n" -msgstr "¸¶Ä§.\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "ÁÖ¼Ò·ÏÀ» ÆÄÀÏ·Î ¾¹´Ï´Ù..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "ÁÖ¼Ò·Ï µ¥ÀÌŸ ¾²±â¸¦ ½ÇÆÐÇß½À´Ï´Ù.\n" - -#: src/alertpanel.c:119 src/compose.c:3306 src/main.c:332 -msgid "Notice" -msgstr "¾Ë¸²" - -#: src/alertpanel.c:132 src/main.c:218 -msgid "Warning" -msgstr "°æ°í" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "¿¡·¯" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "°æ°í ÆгΠ´ÙÀ̾ó·Î±×¸¦ »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/Ãß°¡(_A)..." - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/»èÁ¦(_R)" - -#: src/compose.c:370 src/folderview.c:209 src/folderview.c:220 -#: src/folderview.c:231 -msgid "/_Property..." -msgstr "/Ư¼º(_P)..." - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/ÆÄÀÏ(_F)/÷ºÎ ÆÄÀÏ(_A)" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/ÆÄÀÏ(_F)/ÆÄÀÏ »ðÀÔ(_I)" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/ÆÄÀÏ(_F)/¼­¸í »ðÀÔ(_g)" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/ÆíÁý(_E)/½ÇÇàÃë¼Ò(_U)" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/ÆíÁý(_E)/´Ù½Ã ½ÇÇà(_R)" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/ÆíÁý(_E)/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/ÆíÁý(_E)/À߶󳻱â(_t)" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/ÆíÁý(_E)/º¹»ç(_C)" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/ÆíÁý(_E)/ºÙ¿©³Ö±â(_P)" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/ÆíÁý(_E)/¸ðµÎ ¼±ÅÃ(_a)" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/ÆíÁý(_E)/ÀÚµ¿ ÁٹٲÞ(_l)" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/ÆíÁý(_E)/¿ÜºÎ ÆíÁý±â·Î ÆíÁý(_x)" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/¸Þ½ÃÁö(_M)" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/¸Þ½ÃÁö(_M)/º¸³»±â(_S)" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/¸Þ½ÃÁö(_M)/³ªÁß¿¡ º¸³»±â(_l)" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "/¸Þ½ÃÁö(_M)/Àӽà º¸°üÇÔÀ¸·Î º¸³»±â(_d)" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/¸Þ½ÃÁö(_M)/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "/¸Þ½ÃÁö(_M)/¹Þ´Â »ç¶÷(_T)" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "/¸Þ½ÃÁö(_M)/ÂüÁ¶(_C)" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/¸Þ½ÃÁö(_M)/¼ûÀº ÂüÁ¶(_B)" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/¸Þ½ÃÁö(_M)/ȸ½Å(_R)" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "/¸Þ½ÃÁö(_M)/_Followup to" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/¸Þ½ÃÁö(_M)/÷ºÎ(_A)" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "/¸Þ½ÃÁö(_M)/¾Ïȣȭ(_E)" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/µµ±¸(_T)" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/µµ±¸(_T)/´«±ÝÀÚ º¸À̱â(_r)" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/µµ±¸(_T)/ÁÖ¼Ò·Ï(_A)" - -#: src/compose.c:494 src/compose.c:564 src/compose.c:624 src/procmsg.c:687 -msgid "Can't get text part\n" -msgstr "ÅؽºÆ® ºÎºÐÀ» ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:556 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: ÆÄÀÏÀÌ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:568 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"Àü´Þ ¸Þ½ÃÁöÀÇ ½ÃÀÛ:\n" -"\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "%sÆÄÀÏÀÌ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:1244 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "%sÀÇ ÆÄÀÏ Å©±â¸¦ ¾Ë¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:1248 -#, c-format -msgid "File %s is empty\n" -msgstr "%s ÆÄÀÏÀÌ ºó ÆÄÀÏÀÔ´Ï´Ù\n" - -#: src/compose.c:1269 -#, c-format -msgid "Message: %s" -msgstr "¸Þ½ÃÁö: %s" - -#: src/compose.c:1375 -msgid " [Edited]" -msgstr " [¼öÁ¤µÊ]" - -#: src/compose.c:1377 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - ¸Þ½ÃÁö ÆíÁý%s " - -#: src/compose.c:1380 -#, c-format -msgid "Compose message%s" -msgstr "¸Þ½ÃÁö%s ÆíÁý" - -#: src/compose.c:1402 src/compose.c:3596 -msgid "Recipient is not specified." -msgstr "¹Þ´Â »ç¶÷ÀÌ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù" - -#: src/compose.c:1420 -msgid "can't get recipient list." -msgstr "¹Þ´Â »ç¶÷ ¸ñ·ÏÀ» ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù" - -#: src/compose.c:1438 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" -"¸ÞÀÏÀ» º¸³»±âÀ§ÇÑ °èÁ¤ÀÌ ÁöÁ¤µÇ¾îÀÖÁö¾Ê½À´Ï´Ù.\n" -"º¸³»±â Àü¿¡ ¸ÞÀÏ °èÁ¤À» ¼±ÅÃÇϼ¼¿ä." - -#: src/compose.c:1459 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "%s·Î ¸Þ½ÃÁö¸¦ º¸³»´Â Áß ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù." - -#: src/compose.c:1473 -msgid "Queueing" -msgstr "Àӽú¸°ü" - -#: src/compose.c:1474 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"¸Þ½ÃÁö¸¦ º¸³»´Â Áß ¿¡·¯ ¹ß»ý.\n" -"ÀÌ ¸Þ½ÃÁö¸¦ Àӽà º¸°üÇÔ¿¡ ³ÖÀ»±î¿ä?" - -#: src/compose.c:1480 src/compose.c:3608 -msgid "Can't queue the message." -msgstr "¸Þ½ÃÁö¸¦ Àӽà º¸°üÇÔ¿¡ ³ÖÀ»¼ö°¡ ¾ø½À´Ï´Ù." - -#: src/compose.c:1483 -msgid "Error occurred while sending the message." -msgstr "¸Þ½ÃÁö¸¦ º¸³»´Âµ¥ ¿¡·¯ ¹ß»ý" - -#: src/compose.c:1490 src/compose.c:3615 -msgid "Can't save the message to outbox." -msgstr "¸Þ½ÃÁö¸¦ º¸³½ ÆíÁöÇÔ¿¡ ÀúÀåÇÒ ¼ö°¡ ¾ø½À´Ï´Ù" - -#: src/compose.c:1516 src/compose.c:1637 src/compose.c:1723 src/utils.c:1540 -msgid "can't change file mode\n" -msgstr "ÆÄÀÏ ¸ðµå¸¦ ¹Ù²Ü¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:1542 -msgid "Can't convert the codeset of the message." -msgstr "¸Þ½ÃÁöÀÇ ¹®ÀÚ¼ÂÀ» º¯°æÇÒ ¼ö°¡ ¾ø½À´Ï´Ù." - -#: src/compose.c:1551 -msgid "can't write headers\n" -msgstr "Çì´õ¸¦ ¾µ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:1669 -msgid "saving sent message...\n" -msgstr "º¸³½ ¸ÞÀÏÀ» ÀúÁ¤ÇÕ´Ï´Ù...\n" - -#: src/compose.c:1674 -msgid "can't save message\n" -msgstr "¸Þ½ÃÁö¸¦ ÀúÀåÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:1680 src/compose.c:1787 -msgid "can't open mark file\n" -msgstr "Ç¥½Ã ÆÄÀÏÀ» ¿­¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:1703 -msgid "queueing message...\n" -msgstr "¸Þ½ÃÁö¸¦ Àӽà º¸°üÇÕ´Ï´Ù...\n" - -#: src/compose.c:1778 -msgid "can't queue the message\n" -msgstr "¸Þ½ÃÁö¸¦ Àӽà º¸°üÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:1816 -#, c-format -msgid "Can't open file %s\n" -msgstr "%s ÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:2170 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "»ý¼ºµÈ Message-ID: %s\n" - -#: src/compose.c:2244 src/compose.c:3104 -msgid "MIME type" -msgstr "¸¶ÀÓ Å¸ÀÔ" - -#: src/compose.c:2244 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "Å©±â" - -#: src/compose.c:2261 -msgid "Creating compose window...\n" -msgstr "ÆíÁýâÀ» »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/compose.c:2307 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "º¸³½ »ç¶÷:" - -#: src/compose.c:2730 src/mainwindow.c:1359 src/prefs_account.c:501 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "¸ÞÀÏ ¹ß¼Û" - -#: src/compose.c:2731 -msgid "Send message" -msgstr "¸Þ½ÃÁö º¸³»±â" - -#: src/compose.c:2738 -msgid "Send later" -msgstr "³ªÁß¿¡ º¸³»±â" - -#: src/compose.c:2739 -msgid "Put into queue folder and send later" -msgstr "º¸³¾ ÆíÁöÇÔ¿¡ ³Ö¾î¼­ ³ªÁß¿¡ º¸³»±â" - -#: src/compose.c:2746 src/folderview.c:738 -msgid "Draft" -msgstr "Àӽà º¸°üÇÔ" - -#: src/compose.c:2747 -msgid "Save to draft folder" -msgstr "Àӽà º¸°üÇÔ¿¡ ³Ö±â" - -#: src/compose.c:2756 -msgid "Insert" -msgstr "»ðÀÔ" - -#: src/compose.c:2757 -msgid "Insert file" -msgstr "ÆÄÀÏÀ» »ðÀÔÇÕ´Ï´Ù" - -#: src/compose.c:2764 -msgid "Attach" -msgstr "÷ºÎ" - -#: src/compose.c:2765 -msgid "Attach file" -msgstr "ÆÄÀÏ Ã·ºÎ" - -#: src/compose.c:2774 src/prefs_common.c:1035 -msgid "Signature" -msgstr "¼­¸í" - -#: src/compose.c:2775 -msgid "Insert signature" -msgstr "¼­¸í ÆÄÀÏÀ» ³¢¿ö³Ö½À´Ï´Ù" - -#: src/compose.c:2783 -msgid "Editor" -msgstr "ÆíÁý±â" - -#: src/compose.c:2784 -msgid "Edit with external editor" -msgstr "¿ÜºÎ ÆíÁý±â·Î ÆíÁý" - -#: src/compose.c:2792 -msgid "Linewrap" -msgstr "ÁٹٲÞ" - -#: src/compose.c:2793 -msgid "Wrap long lines" -msgstr "±ä ÁÙ¿¡´ëÇØ ÀÚµ¿ ÁٹٲÞÀ» ÇÕ´Ï´Ù" - -#: src/compose.c:3000 -msgid "Invalid MIME type." -msgstr "¿Ã¹Ù¸£Áö¾ÊÀº ¸¶ÀÓ Å¸ÀÔ." - -#: src/compose.c:3018 -msgid "File doesn't exist or is empty." -msgstr "ÆÄÀÏÀÌ ¾ø°Å³ª ºñ¿©ÀÖ½À´Ï´Ù." - -#: src/compose.c:3086 -msgid "Property" -msgstr "Ư¼º" - -#: src/compose.c:3106 -msgid "Encoding" -msgstr "ÀÎÄÚµù" - -#: src/compose.c:3129 -msgid "Path" -msgstr "°æ·Î" - -#: src/compose.c:3130 -msgid "File name" -msgstr "ÆÄÀÏ À̸§" - -#: src/compose.c:3277 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "¿ÜºÎ ÆíÁý±â ¸í·É¾î°¡ ¿Ã¹Ù¸£Áö¾Ê½À´Ï´Ù: `%s'\n" - -#: src/compose.c:3303 -#, 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:3316 -#, c-format -msgid "Terminated process group id: %d" -msgstr "ÇÁ·Î¼¼½º ±×·ì id: %d¸¦ Á¾·á½ÃÅ´" - -#: src/compose.c:3317 -#, c-format -msgid "Temporary file: %s" -msgstr "Àӽà ÆÄÀÏ: %s" - -#: src/compose.c:3341 -msgid "Compose: input from monitoring process\n" -msgstr "ÆíÁý: ¸ð´ÏÅ͸µÇÏ´Â ÇÁ·Î¼¼½º·ÎºÎÅÍ ÀÔ·ÂÀÌ ÀÖ¾ú½À´Ï´Ù\n" - -#. failed -#: src/compose.c:3374 -msgid "Couldn't exec external editor\n" -msgstr "¿ÜºÎ ÆíÁý±â¸¦ ½ÇÇàÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:3378 -msgid "Couldn't write to file\n" -msgstr "ÆÄÀÏ·Î ¾µ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:3380 -msgid "Pipe read failed\n" -msgstr "ÆÄÀÌÇÁ Àб⠽ÇÆÐ\n" - -#: src/compose.c:3637 -msgid "can't remove the old draft message\n" -msgstr "¿À·¡µÈ Àӽà º¸°ü ¸Þ½ÃÁö¸¦ Á¦°ÅÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/compose.c:3665 src/compose.c:3677 -msgid "Select file" -msgstr "ÆÄÀÏ ¼±ÅÃ" - -#: src/compose.c:3701 -msgid "Discard message" -msgstr "¸Þ½ÃÁö ¹ö¸®±â" - -#: src/compose.c:3702 -msgid "This message has been modified. discard it?" -msgstr "ÀÌ ¸Þ½ÃÁö´Â ¼öÁ¤µÇ¾ú½À´Ï´Ù. º¯°æ»çÇ×À» ¹ö¸±±î¿ä?" - -#: src/compose.c:3703 -msgid "Discard" -msgstr "¹ö¸®±â" - -#: src/compose.c:3703 -msgid "to Draft" -msgstr "Àӽà º¸°üÇÔÀ¸·Î" - -#: src/export.c:122 -msgid "Export" -msgstr "" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "" - -#: src/export.c:154 -msgid "Source dir:" -msgstr "" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr "°í¸£±â..." - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "" - -#: src/foldersel.c:131 -msgid "Select folder" -msgstr "Æú´õ ¼±ÅÃ" - -#: src/folderview.c:203 src/folderview.c:214 -msgid "/Create _new folder..." -msgstr "/»õ Æú´õ ¸¸µé±â(_n)..." - -#: src/folderview.c:204 src/folderview.c:215 -msgid "/_Rename folder..." -msgstr "/Æú´õ À̸§ ¹Ù²Ù±â(_R)..." - -#: src/folderview.c:205 src/folderview.c:216 -msgid "/_Delete folder" -msgstr "/Æú´õ Áö¿ì±â(_D)" - -#: src/folderview.c:207 -msgid "/Remove _mailbox" -msgstr "/¸ÞÀϹڽº¸¦ Áö¿ì±â(_m)" - -#: src/folderview.c:218 -msgid "/Remove _IMAP4 server" -msgstr "/IMAP4 ¼­¹ö Áö¿ì±â(_I)" - -#: src/folderview.c:225 -msgid "/_Subscribe to newsgroup..." -msgstr "/´º½º±×·ì ±¸µ¶(_S)..." - -#: src/folderview.c:227 -msgid "/_Remove newsgroup" -msgstr "/´º½º±×·ì »èÁ¦(_R)" - -#: src/folderview.c:229 -msgid "/Remove _news server" -msgstr "/´º½º ¼­¹ö »èÁ¦(_n)" - -#: src/folderview.c:240 -msgid "Folder" -msgstr "Æú´õ" - -#: src/folderview.c:240 -msgid "New" -msgstr "»õ°Í" - -#: src/folderview.c:241 src/prefs_common.c:2173 -msgid "Unread" -msgstr "¾ÈÀÐÀ½" - -#: src/folderview.c:241 -msgid "#" -msgstr "Àüü" - -#: src/folderview.c:251 -msgid "Creating folder view...\n" -msgstr "Æú´õ ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/folderview.c:395 -msgid "Setting folder info...\n" -msgstr "Æú´õ Á¤º¸¸¦ ¼³Á¤ÇÕ´Ï´Ù...\n" - -#: src/folderview.c:396 -msgid "Setting folder info..." -msgstr "Æú´õ Á¤º¸¸¦ ¼³Á¤ÇÕ´Ï´Ù..." - -#: src/folderview.c:539 src/mainwindow.c:2092 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "%s%c%s¸¦ ½ºÄµÇÕ´Ï´Ù..." - -#: src/folderview.c:544 src/mainwindow.c:2097 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "%s Æú´õ¸¦ ½ºÄµÇÕ´Ï´Ù..." - -#: src/folderview.c:581 -msgid "Updating all folders..." -msgstr "¸ðµç Æú´õ¸¦ °»½ÅÇÕ´Ï´Ù..." - -#: src/folderview.c:716 src/prefs_account.c:655 -msgid "Inbox" -msgstr "¹ÞÀº ÆíÁöÇÔ" - -#: src/folderview.c:721 -msgid "Outbox" -msgstr "º¸³½ ÆíÁöÇÔ" - -#: src/folderview.c:726 -msgid "Queue" -msgstr "º¸³¾ ÆíÁöÇÔ" - -#: src/folderview.c:731 -msgid "Trash" -msgstr "Áö¿î ÆíÁöÇÔ" - -#: src/folderview.c:1213 -#, c-format -msgid "Folder %s is selected\n" -msgstr "%s Æú´õ°¡ ¼±ÅõǾú½À´Ï´Ù\n" - -#: src/folderview.c:1327 src/folderview.c:1390 src/folderview.c:1531 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "`%c'´Â Æú´õ À̸§¿¡ Æ÷Ç﵃ ¼ö ¾ø½À´Ï´Ù." - -#: src/folderview.c:1335 src/folderview.c:1399 src/folderview.c:1539 -#, c-format -msgid "The folder `%s' already exists." -msgstr "`%s' Æú´õ°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù." - -#: src/folderview.c:1343 src/folderview.c:1547 -#, fuzzy, c-format -msgid "Can't create the folder `%s'." -msgstr "`%s'Æú´õ¸¦ Á¦°ÅÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/folderview.c:1382 -#, c-format -msgid "Input new name for `%s':" -msgstr "`%s'¿¡´ëÇÑ »õ À̸§À» ³ÖÀ¸¼¼¿ä:" - -#: src/folderview.c:1384 -msgid "Rename folder" -msgstr "Æú´õ À̸§ º¯°æ" - -#: src/folderview.c:1444 -#, 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:1447 src/folderview.c:1589 -msgid "Delete folder" -msgstr "Æú´õ »èÁ¦" - -#: src/folderview.c:1453 src/folderview.c:1595 -#, fuzzy, c-format -msgid "Can't remove the folder `%s'." -msgstr "`%s'Æú´õ¸¦ Á¦°ÅÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/folderview.c:1487 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" -"¸ÞÀϹڽº `%s'¸¦ Á¤¸»·Î »èÁ¦ÇϽðڽÀ´Ï±î?\n" -"(¸Þ½ÃÁö°¡ µð½ºÅ©·ÎºÎÅÍ »èÁ¦µÇ´Â°ÍÀº ¾Æ´Õ´Ï´Ù)" - -#: src/folderview.c:1490 -msgid "Remove folder" -msgstr "Æú´õ¸¦ »èÁ¦ÇÕ´Ï´Ù" - -#: src/folderview.c:1523 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" - -#: src/folderview.c:1587 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Á¤¸»·Î `%s' Æú´õ¸¦ »èÁ¦ÇϽðڽÀ´Ï±î?" - -#: src/folderview.c:1628 -#, c-format -msgid "Really delete IMAP4 server `%s'?" -msgstr "Á¤¸»·Î `%s' IMAP4 ¼­¹ö¸¦ »èÁ¦ÇϽðڽÀ´Ï±î?" - -#: src/folderview.c:1630 -msgid "Delete IMAP4 server" -msgstr "IMAP4 ¼­¹ö »èÁ¦" - -#: src/folderview.c:1671 -msgid "Subscribe newsgroup" -msgstr "´º½º±×·ì ±¸µ¶" - -#: src/folderview.c:1672 -msgid "Input subscribing newsgroup:" -msgstr "±¸µ¶ÇÒ ´º½º±×·ìÀ» ÀÔ·Â:" - -#: src/folderview.c:1681 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "`%s' ´º½º±×·ìÀÌ ÀÌ¹Ì ÀÖ½À´Ï´Ù." - -#: src/folderview.c:1727 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Á¤¸»·Î `%s' ´º½º±×·ìÀ» »èÁ¦ÇϽðڽÀ´Ï±î?" - -#: src/folderview.c:1729 -msgid "Delete newsgroup" -msgstr "´º½º±×·ì »èÁ¦" - -#: src/folderview.c:1760 -#, c-format -msgid "Really delete news server `%s'?" -msgstr "Á¤¸»·Î `%s' ´º½º ¼­¹ö¸¦ »èÁ¦ÇϽðڽÀ´Ï±î?" - -#: src/folderview.c:1762 -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:174 src/summaryview.c:1392 -msgid "(No From)" -msgstr "(???)" - -#: src/headerview.c:189 src/summaryview.c:1408 -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:204 -#, c-format -msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "%s:%d¿¡´ëÇÑ IMAP4 Á¢¼ÓÀÌ ²÷¾îÁ³½À´Ï´Ù. ´Ù½Ã Á¢¼Ó...\n" - -#: src/imap.c:230 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "%s:%d¿¡´ëÇÑ IMAP4 Á¢¼ÓÀ» ¸¸µì´Ï´Ù ...\n" - -#: src/imap.c:385 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "¸Þ½ÃÁö %d´Â ÀÌ¹Ì Ä³½¬µÇ¾ú½À´Ï´Ù.\n" - -#: src/imap.c:395 -#, c-format -msgid "getting message %d...\n" -msgstr "¸Þ½ÃÁö %d¸¦ °¡Á®¿É´Ï´Ù...\n" - -#: src/imap.c:401 src/procmsg.c:587 -#, c-format -msgid "can't fetch message %d\n" -msgstr "¸Þ½ÃÁö %d¸¦ °¡Á®¿Ã ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/imap.c:430 -#, fuzzy, c-format -msgid "can't append message %s\n" -msgstr "¸Þ½ÃÁö¸¦ ÀúÀåÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/imap.c:459 src/imap.c:516 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "¿Å±æ Æú´õ¿Í ¿Å°ÜÁú Æú´õ°¡ °°½À´Ï´Ù.\n" - -#: src/imap.c:469 src/imap.c:521 src/mh.c:201 src/mh.c:267 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "¸Þ½ÃÁö %s%c%d¸¦ %s·Î À̵¿ÇÕ´Ï´Ù...\n" - -#: src/imap.c:473 src/imap.c:525 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "" - -#: src/imap.c:593 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "»èÁ¦ Ç÷¡±×¸¦ ¼³Á¤ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: %d\n" - -#: src/imap.c:600 src/imap.c:639 -msgid "can't expunge\n" -msgstr "Áö¿ï ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/imap.c:632 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "»èÁ¦ Ç÷¡±×¸¦ ¼³Á¤ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: 1:%d\n" - -#: src/imap.c:744 -msgid "can't create mailbox\n" -msgstr "" - -#: src/imap.c:781 -msgid "can't delete mailbox\n" -msgstr "" - -#: src/imap.c:807 -msgid "can't get envelope\n" -msgstr "envelope¸¦ ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/imap.c:813 -msgid "error occurred while getting envelope.\n" -msgstr "envelope¸¦ ¾ò´Â Áß ¿¡·¯ ¹ß»ý.\n" - -#: src/imap.c:821 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "envelope¸¦ ÆĽÌÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: %s\n" - -#: src/imap.c:849 -#, fuzzy, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "\tij½¬µÈ ¸ðµç ¸Þ½ÃÁö¸¦ Áö¿ò´Ï´Ù... " - -#: src/imap.c:882 -#, fuzzy -msgid "Deleting all cached messages... " -msgstr "\tij½¬µÈ ¸ðµç ¸Þ½ÃÁö¸¦ Áö¿ò´Ï´Ù... " - -#: src/imap.c:896 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "%s:%d IMAP4 ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/imap.c:929 -#, fuzzy -msgid "can't get namespace\n" -msgstr "envelope¸¦ ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/imap.c:1346 -#, c-format -msgid "can't select folder: %s\n" -msgstr "Æú´õ¸¦ ¼±ÅÃÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: %s\n" - -#: src/imap.c:1401 -#, fuzzy, c-format -msgid "can't get the next uid of folder: %s\n" -msgstr "Æú´õ¸¦ ¼±ÅÃÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: %s\n" - -#: src/imap.c:1423 -msgid "IMAP4 login failed.\n" -msgstr "IMAP4 ·Î±×ÀÎÀ» ½ÇÆÐÇß½À´Ï´Ù.\n" - -#: src/imap.c:1636 -#, fuzzy, c-format -msgid "can't append %s to %s\n" -msgstr "%d¸¦ %s·Î º¹»çÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/imap.c:1656 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "%d¸¦ %s·Î º¹»çÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/imap.c:1681 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "imap ¸í·É¾î ½ÇÇàÁß ¿¡·¯: STORE %d:%d %s\n" - -#: src/imap.c:1695 -msgid "error while imap command: EXPUNGE\n" -msgstr "imap ¸í·É¾î ½ÇÇàÁß ¿¡·¯: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "°¡Á®¿À±â" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "" - -#: src/import.c:158 -msgid "Importing file:" -msgstr "°¡Á®¿Ã ÆÄÀÏ:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "ÀúÀåÇÒ Æú´õ:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "ºÒ·¯¿Ã ÆÄÀÏÀ» ¼±ÅÃ" - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "»õ ¸Þ½ÃÁö¸¦ °¡Á®¿È" - -#: src/inc.c:384 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "" - -#: src/inc.c:388 src/news.c:131 -msgid "Input password" -msgstr "¾ÏÈ£ ÀÔ·Â" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "" - -#: src/inc.c:412 -msgid "Done" -msgstr "" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "" - -#: src/inc.c:487 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "%s °èÁ¤À¸·ÎºÎÅÍ »õ ¸Þ½ÃÁö¸¦ ¾ò½À´Ï´Ù...\n" - -#: src/inc.c:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: »õ ¸Þ½ÃÁö¸¦ °¡Á®¿È" - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "POP3 ¼­¹ö %s¿¡ ¿¬°áÇÕ´Ï´Ù..." - -#: src/inc.c:527 src/inc.c:660 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "%s:%d POP3 ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/inc.c:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "%s:%d POP3 ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "¸Þ½ÃÁö (%d / %d) ¸¦ °¡Á®¿À´Â Áß (%d / %d bytes)" - -#: src/inc.c:719 -#, fuzzy -msgid "Authorizing..." -msgstr "ÀÎÁõÇÏ´Â Áß" - -#: src/inc.c:724 -#, fuzzy -msgid "Getting the number of new messages (STAT)..." -msgstr "»õ ¸Þ½ÃÁöÀÇ °¹¼ö¸¦ °¡Á®¿À´Â Áß" - -#: src/inc.c:729 -#, fuzzy -msgid "Getting the number of new messages (LAST)..." -msgstr "»õ ¸Þ½ÃÁöÀÇ °¹¼ö¸¦ °¡Á®¿À´Â Áß" - -#: src/inc.c:734 -#, fuzzy -msgid "Getting the number of new messages (UIDL)..." -msgstr "»õ ¸Þ½ÃÁöÀÇ °¹¼ö¸¦ °¡Á®¿À´Â Áß" - -#: src/inc.c:739 -#, fuzzy -msgid "Getting the size of messages (LIST)..." -msgstr "»õ ¸Þ½ÃÁöÀÇ °¹¼ö¸¦ °¡Á®¿À´Â Áß" - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "¸Þ½ÃÁö¸¦ »èÁ¦ÇÏ´Â Áß" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "³¡¸¶Ä¡´Â Áß" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "ÀÌ ¸Þ½ÃÁö¸¦ ¹ÞÁö¾ÊÀ» °ÍÀÔ´Ï´Ù\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "¸ÞÀÏÀ» ó¸®ÇÏ´Â µµÁß ¿¡·¯" - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "µð½ºÅ©¿¡ ³²Àº °ø°£ÀÌ ¾ø½¿." - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "·ÎÄ® ¸ÞÀϹڽº¿¡ ¸Þ½Ã°¡ ¾øÀ½.\n" - -#: src/inc.c:881 -#, 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:108 -#, c-format -msgid "" -"File `%s' already exists.\n" -"Can't create folder." -msgstr "" -"ÆÄÀÏ `%s'°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù.\n" -"Æú´õ¸¦ »ý¼ºÇÒ ¼ö°¡ ¾ø½À´Ï´Ù." - -#: src/main.c:149 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread°¡ glib¿¡ÀÇÇØ Áö¿øµÇÁö¾Ê½À´Ï´Ù.\n" - -#: src/main.c:219 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" - -#: src/main.c:300 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "»ç¿ë¹ý: %s [¿É¼Ç]...\n" - -#: src/main.c:303 -msgid " --compose [address] open composition window" -msgstr " --compose [ÁÖ¼Ò] ÆíÁý âÀ» ¿±´Ï´Ù" - -#: src/main.c:304 -msgid " --receive receive new messages" -msgstr " --receive »õ ¸Þ½ÃÁö¸¦ ¹Þ½À´Ï´Ù" - -#: src/main.c:305 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all ¸ðµç °èÁ¤¿¡¼­ »õ ¸Þ½ÃÁö¸¦ ¹Þ½À´Ï´Ù" - -#: src/main.c:306 -msgid " --debug debug mode" -msgstr " --debug µð¹ö±ë ¸ðµå" - -#: src/main.c:307 -msgid " --help display this help and exit" -msgstr " --help ÀÌ µµ¿ò¸»À» Ç¥½ÃÇÏ°í ³¡¸¶Ä§´Ï´Ù" - -#: src/main.c:308 -msgid " --version output version information and exit" -msgstr "" - -#: src/main.c:333 -msgid "Composing message exists. Really quit?" -msgstr "¸Þ½ÃÁö¸¦ ÆíÁýÇϴ âÀÌ ÀÖ½À´Ï´Ù. Á¤¸» ³¡³»½Ã°Ú½À´Ï±î?" - -#: src/main.c:340 -msgid "Queued messages" -msgstr "" - -#: src/main.c:341 -msgid "Some unsent messages are queued. Exit now?" -msgstr "" - -#. remote command mode -#: src/main.c:412 -msgid "another Sylpheed is already running.\n" -msgstr "´Ù¸¥ Sylpheed°¡ ÀÌ¹Ì ½ÇÇàµÇ°í ÀÖ½À´Ï´Ù.\n" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "/ÆÄÀÏ(_F)/¸ÞÀÏ ¹Ú½º Ãß°¡(_A)..." - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/ÆÄÀÏ(_F)/Æú´õ Æ®¸® °»½Å(_U)" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "/ÆÄÀÏ(_F)/Æú´õ(_F)" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/ÆÄÀÏ(_F)/Æú´õ(_F)/»õ Æú´õ(_n)" - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/ÆÄÀÏ(_F)/Æú´õ(_F)/Æú´õ À̸§ º¯°æ(_R)..." - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "/ÆÄÀÏ(_F)/Æú´õ(_F)/Æú´õ »èÁ¦(_D)" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/ÆÄÀÏ(_F)/mbox ÆÄÀÏ °¡Á®¿À±â(_I)..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "" - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "/ÆÄÀÏ(_F)/Áö¿î ÆíÁöÇÔ ºñ¿ì±â(_t)" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/ÆÄÀÏ(_F)/»õ À̸§À¸·Î(_S)..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/ÆÄÀÏ(_F)/Àμâ(_P)..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/ÆÄÀÏ(_F)/³¡³»±â(_x)" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/ÆíÁý(_E)/ã±â(_S)" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/º¸±â(_V)" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/º¸±â(_V)/Æú´õ Æ®¸®(_F)" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/º¸±â(_V)/¸Þ½ÃÁö ºä(_M)" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/º¸±â(_V)/Åø¹Ù(_T)" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/º¸±â(_V)/Åø¹Ù(_T)/¾ÆÀÌÄÜ°ú ÅؽºÆ®(_a)" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/º¸±â(_V)/Åø¹Ù(_T)/¾ÆÀÌÄÜ(_I)" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/º¸±â(_V)/Åø¹Ù(_T)/ÅؽºÆ®(_T)" - -#: src/mainwindow.c:364 -#, fuzzy -msgid "/_View/_Toolbar/_None" -msgstr "/º¸±â(_V)/Åø¹Ù(_T)/¾ÆÀÌÄÜ(_I)" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/º¸±â(_V)/»óŹÙ(_S)" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/º¸±â(_V)/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/º¸±â(_V)/º°µµÀÇ Æú´õ Æ®¸® â(_o)" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/º¸±â(_V)/º°µµÀÇ ¸Þ½ÃÁö â(_e)" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀÚµ¿(_A)" - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/7bit ¾Æ½ºÅ° (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/À¯´ÏÄÚµå(_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/¼­ºÎ À¯·´(ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Áß¾Ó À¯·´(ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/_Baltic (ISO-8859-13)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Baltic (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/±×¸®½º(ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Åͱâ (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Cyrillic (ISo-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Cyrillic (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Cyrillic (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀϺ» (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀϺ» (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀϺ» (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀϺ» (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Simplified Chinese (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Traditional Chinese (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Traditional Chinese (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Chinese (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Çѱ¹ (EUC-KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Çѱ¹ (ISO-2022-KR)" - -#: src/mainwindow.c:445 -#, fuzzy -msgid "/_Message/Get new ma_il" -msgstr "/¸Þ½ÃÁö(_M)/»õ ¸ÞÀÏ ¹Þ±â(_i)" - -#: src/mainwindow.c:446 -#, fuzzy -msgid "/_Message/Get from _all accounts" -msgstr "/¸Þ½ÃÁö(_M)/¸ðµç °èÁ¤¿¡¼­ ¹Þ±â(_a)" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/¸Þ½ÃÁö(_M)/Àӽà º¸°üµÈ ¸Þ½ÃÁö ¹ß¼Û(_g)" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/¸Þ½ÃÁö(_M)/»õ·Î ¸¸µé±â(_n)" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/¸Þ½ÃÁö(_M)/ȸ½Å(_R)" - -#: src/mainwindow.c:454 -#, fuzzy -msgid "/_Message/Repl_y to sender" -msgstr "/¸Þ½ÃÁö(_M)/ȸ½Å(_R)" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/¸Þ½ÃÁö(_M)/Àüü ȸ½Å(_l)" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/¸Þ½ÃÁö(_M)/Àü´Þ(_F)" - -#: src/mainwindow.c:457 -#, fuzzy -msgid "/_Message/Forward as a_ttachment" -msgstr "/¸Þ½ÃÁö(_M)/÷ºÎÆÄÀÏ·Î Àü´Þ(_t)" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/¸Þ½ÃÁö(_M)/À̵¿(_o)..." - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "" - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/¸Þ½ÃÁö(_M)/»èÁ¦(_D)" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/Ç¥½Ã(_M)" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/Ç¥½Ã Áö¿ò(_U)" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/ÀÐÁö¾ÊÀº °ÍÀ¸·Î Ç¥½Ã(_e)" - -#: src/mainwindow.c:468 -#, fuzzy -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/ÀÐÁö¾ÊÀº °ÍÀ¸·Î Ç¥½Ã(_e)" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/¸Þ½ÃÁö(_M)/»õ â¿¡¼­ ¿­±â" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "/¸Þ½ÃÁö(_M)/¼Ò½º º¸±â(_s)" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/¸Þ½ÃÁö(_M)/¸ðµç Çì´õ º¸±â(_h)" - -#: src/mainwindow.c:474 -#, fuzzy -msgid "/_Message/Re-_edit" -msgstr "/¸Þ½ÃÁö(_M)/´Ù½Ã ÆíÁý(_e)" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/¸í·É(_S)" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/¸í·É(_S)/Áߺ¹µÈ ¸Þ½ÃÁö Áö¿ì±â(_D)" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/¸í·É(_S)/¸Þ½ÃÁö ÇÊÅÍ(_F)" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/¸í·É(_S)/½ÇÇà(_x)" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/¸í·É(_S)/°»½Å(_U)" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/¸í·É(_S)/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/¸í·É(_S)/ÀÌÀü ¸Þ½ÃÁö(_P)" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/¸í·É(_S)/´ÙÀ½ ¸Þ½ÃÁö(_N)" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/¸í·É(_S)/¾ÈÀÐÀº ´ÙÀ½ ¸Þ½ÃÁö(_e)" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/¸í·É(_S)/´Ù¸¥ Æú´õ·Î À̵¿(_G)" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/¸í·É(_S)/Á¤·Ä(_S)" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/¸í·É(_S)/Á¤·Ä(_S)/¹øÈ£(_n)" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/¸í·É(_S)/Á¤·Ä(_S)/Å©±â(_i)" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/¸í·É(_S)/Á¤·Ä(_S)/³¯Â¥(_d)" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/¸í·É(_S)/Á¤·Ä(_S)/º¸³½ »ç¶÷(_f)" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/¸í·É(_S)/Á¤·Ä(_S)/Á¦¸ñ(_s)" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/¸í·É(_S)/Á¤·Ä(_S)/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/¸í·É(_S)/Á¤·Ä(_S)/_Attract by subject" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/¸í·É(_S)/¾²·¹µå º¸±â(_T)" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/¸í·É(_S)/¾²·¹µå ¾ø¾Ö±â(_h)" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/¸í·É(_S)/Ç¥½Ã Ç׸ñ ¼³Á¤(_i)..." - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/µµ±¸(_T)/·Î±× â(_L)" - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/¼³Á¤(_C)" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/¼³Á¤(_C)/±âº»ÀûÀÎ ¼³Á¤(_C)..." - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "" - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/¼³Á¤(_C)/°èÁ¤¿¡µû¸¥ ¼³Á¤(_P)..." - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/¼³Á¤(_C)/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/¼³Á¤(_C)/»õ °èÁ¤ ¸¸µé±â(_n)..." - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/¼³Á¤(_C)/°èÁ¤ ÆíÁý(_E)..." - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/¼³Á¤(_C)/ÇöÀç °èÁ¤À» º¯°æ(_h)" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/µµ¿ò¸»(_H)/¼³¸í¼­(_M)" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/µµ¿ò¸»(_H)/¼³¸í¼­(_M)/¿µ¾î(_E)" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/µµ¿ò¸»(_H)/¼³¸í¼­(_M)/ÀϺ»¾î(_J)" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/µµ¿ò¸»(_H)/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "»õ âÀ» ¸¸µì´Ï´Ù...\n" - -#: src/mainwindow.c:673 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "¸ÞÀΠâ: »ö ÇÒ´ç %d ½ÇÆÐ\n" - -#: src/mainwindow.c:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "Á¦¸ñ ¾ø½¿" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "¾øÀ½" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "ÇöÀç °èÁ¤: %s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "â À§Ä¡: x = %d, y = %d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "Áö¿î ÆíÁöÇÔ ºñ¿ì±â" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "Áö¿î ÆíÁöÇÔ¿¡ÀÖ´Â ¸ðµç ¸Þ½ÃÁö¸¦ ºñ¿ï±î¿ä?" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "¸ÞÀϹڽº Ãß°¡" - -#: src/mainwindow.c:978 -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:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "¸ÞÀÏ ¹Ú½º `%s'°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù." - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "¸ÞÀϹڽº" - -#: src/mainwindow.c:995 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:1141 -msgid "Setting widgets..." -msgstr "À§Á¬µéÀ» ¼³Á¤ÇÕ´Ï´Ù..." - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "¹Þ±â" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "»õ ¸ÞÀÏÀ» °¡Á®¿É´Ï´Ù" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "ÀüºÎ ¹Þ±â" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "¸ðµç °èÁ¤¿¡¼­ »õ ¸ÞÀÏÀ» °¡Á®¿É´Ï´Ù" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "Àӽà º¸°üµÈ ¸Þ½ÃÁö¸¦ º¸³À´Ï´Ù" - -#: src/mainwindow.c:1370 src/prefs_account.c:503 src/prefs_common.c:638 -msgid "Compose" -msgstr "ÀÛ¼º" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "»õ ¸Þ½ÃÁö¸¦ ÀÛ¼ºÇÕ´Ï´Ù" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "ȸ½Å" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "¸Þ½ÃÁö¿¡ ȸ½ÅÀ» º¸³À´Ï´Ù" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "Àüü ȸ½Å" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "ÀüºÎ¿¡°Ô ȸ½ÅÀ» º¸³À´Ï´Ù" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "Àü´Þ" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "¸Þ½ÃÁö¸¦ ´Ù¸¥ »ç¶÷¿¡°Ô Àü´ÞÇÕ´Ï´Ù" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "¸Þ½ÃÁö¸¦ Áö¿ó´Ï´Ù" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "½ÇÇà" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "Ç¥½ÃµÈ ÇÁ·Î¼¼½ºµéÀ» ½ÇÇàÇÕ´Ï´Ù" - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "´ÙÀ½" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "´ÙÀ½ ¾È ÀÐÀº ¸Þ½ÃÁö¸¦ º¸¿©ÁÝ´Ï´Ù" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "¼³Á¤" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "±âº»ÀûÀΠȯ°æ ¼³Á¤À» ÇÕ´Ï´Ù" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "°èÁ¤" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "°èÁ¤À» ¼³Á¤ÇÕ´Ï´Ù" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit" -msgstr "³¡³»±â" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit this program?" -msgstr "ÀÌ ÇÁ·Î±×·¥À» ³¡³»½Ã°Ú½À´Ï±î?" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "º¸°üµÇ¾ú´ø ¸Þ½ÃÁö º¸³»±â°¡ ½ÇÆÐÇß½À´Ï´Ù." - -#: src/mainwindow.c:1924 -#, c-format -msgid "forced charset: %s\n" -msgstr "¼³Á¤µÈ ¹®ÀÚ¼Â: %s\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "%s·ÎºÎÅÍ %s·Î ¸Þ½ÃÁö¸¦ °¡Á®¿É´Ï´Ù...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "mbox ÆÄÀÏÀ» ÀÐÀ» ¼ö°¡ ¾ø½À´Ï´Ù.\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "¿Ã¹Ù¸£Áö¾ÊÀº mbox Æ÷¸ä: %s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "Á¦´ë·ÎµÇ¾îÀÖÁö¾ÊÀº mbox: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "ÀÓ½ÃÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/mbox.c:159 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"¸Þ½ÃÁö º»¹®Áß FromÀ¸·Î ½ÃÀÛÇÏ´Â ÁÙÀÌ ÀÖ½À´Ï´Ù:\n" -"%s" - -#: src/mbox.c:194 -msgid "can't write to temporary file\n" -msgstr "Àӽà ÆÄÀÏ¿¡ ¾µ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "%d°³ÀÇ ¸Þ½ÃÁö°¡ ¹ß°ßµÇ¾ú½À´Ï´Ù.\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "Àá±Ý ÆÄÀÏ %sÀ» ¸¸µé¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "°¡´ÉÇϸé 'file'´ë½Å¿¡ 'flock'¸¦ »ç¿ëÇϼ¼¿ä.\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "%s¸¦ »ý¼ºÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "¸ÞÀϹڽº¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÀаíÀÖ½À´Ï´Ù. Àá½Ã ±â´Ù¸®¼¼¿ä...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "%s¿¡ lock¸¦ °É¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "¿Ã¹Ù¸£Áö¾ÊÀº Àá±Ý ŸÀÔ\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "%s¿¡ lock¸¦ Ç® ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "¸ÞÀϹڽºÀÇ Å©±â¸¦ 0À¸·Î ¸¸µé¼ö°¡ ¾ø½À´Ï´Ù.\n" - -#: 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 "¸Þ½ÃÁö ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "¸Þ½ÃÁö %sÀ» %s·Î º¹»çÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "Ç¥½Ã ÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù.\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "%sÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù." - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "µð·ºÅ丮 %s¿¡¼­ ¸¶Áö¸· ¼ýÀÚ = %d\n" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "\tij½¬µÇÁö¾ÊÀº ¸Þ½ÃÁö¸¦ ã½À´Ï´Ù... " - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "%d°³ÀÇ Ä³½¬µÇÁö¾ÊÀº ¸Þ½ÃÁö°¡ ¹ß°ßµÇ¾ú½À´Ï´Ù.\n" - -#: src/mh.c:813 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tij½¬µÇÁö¾ÊÀº ¸Þ½ÃÁö¸¦ Á¤·ÄÇÕ´Ï´Ù..." - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/¿­±â(_O)" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "" - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/ÅؽºÆ®·Î º¸±â(_D)" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "/»õ À̸§À¸·Î(_S)..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "¸¶ÀÓ Å¸ÀÔ" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "¸¶ÀÓ ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "multipart ¸Þ½ÃÁöÀÇ ºÎºÐÀ» ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù." - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "multipart ¸Þ½ÃÁöÀÇ ºÎºÐÀ» ÀúÀåÇÒ ¼ö°¡ ¾ø½À´Ï´Ù." - -#: src/mimeview.c:708 src/summaryview.c:2018 -msgid "Save as" -msgstr "»õ À̸§À¸·Î" - -#: src/mimeview.c:714 src/summaryview.c:2023 -msgid "Overwrite" -msgstr "µ¤¾î¾²±â" - -#: src/mimeview.c:715 src/summaryview.c:2024 -msgid "Overwrite existing file?" -msgstr "±âÁ¸ ÆÄÀÏÀ» µ¤¾î¾²½Ã°Ú½À´Ï±î?" - -#: src/mimeview.c:769 -#, fuzzy -msgid "Open with" -msgstr "³¡³¾¶§" - -#: src/mimeview.c:770 -#, fuzzy, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Àμ⠸í·É¾î¼­ ÀÔ·ÂÇϼ¼¿ä:\n" -"(`%s'´Â ÆÄÀÏÀ̸§À¸·Î ´ëüµÉ °ÍÀÔ´Ï´Ù)" - -#: src/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "¸¶ÀÓ ºä¾îÀÇ ¸í·ÉÇàÀÌ ºÎÀûÀýÇÕ´Ï´Ù: `%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "%s:%d·Î NNTP Á¢¼ÓÀ» »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/news.c:176 -#, c-format -msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "%s:%d·ÎÀÇ NNTP ¿¬°áÀÌ ²÷¾îÁ³½À´Ï´Ù. ´Ù½Ã ¿¬°áÇÕ´Ï´Ù...\n" - -#: src/news.c:245 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "±â»ç %d´Â ÀÌ¹Ì Ä³½¬µÇ¾ú½À´Ï´Ù.\n" - -#: src/news.c:257 -#, fuzzy, c-format -msgid "can't select group %s\n" -msgstr "%s ±×·ìÀ» Á¤ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/news.c:262 -#, c-format -msgid "getting article %d...\n" -msgstr "±â»ç %d¸¦ ¾ò½À´Ï´Ù...\n" - -#: src/news.c:267 -#, c-format -msgid "can't read article %d\n" -msgstr "±â»ç %d¸¦ ÀÐÀ» ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/news.c:299 -msgid "can't post article.\n" -msgstr "±â»ç¸¦ ¿Ã¸± ¼ö°¡ ¾ø½À´Ï´Ù.\n" - -#: src/news.c:323 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "±â»ç %d¸¦ °¡Á®¿Ã ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/news.c:393 -#, c-format -msgid "can't set group: %s\n" -msgstr "%s ±×·ìÀ» Á¤ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/news.c:400 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "¿Ã¹Ù¸£Áö¾ÊÀº ±â»ç ¹üÀ§: %d - %d\n" - -#: src/news.c:409 -msgid "no new articles.\n" -msgstr "»õ ±â»ç°¡ ¾ø½À´Ï´Ù.\n" - -#: src/news.c:422 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "%3$s¿¡¼­ %1$d - %2$d xover¸¦ °¡Á®¿È...\n" - -#: src/news.c:425 -msgid "can't get xover\n" -msgstr "xover¸¦ °¡Á®¿Ã ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/news.c:431 -msgid "error occurred while getting xover.\n" -msgstr "xover¸¦ ¾ò´Â µµÁß ¿¡·¯°¡ ¹ß»ý.\n" - -#: src/news.c:439 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "¿Ã¹Ù¸£Áö¾ÊÀº xover line: %s\n" - -#: src/news.c:456 src/news.c:481 -#, fuzzy -msgid "can't get xhdr\n" -msgstr "xover¸¦ °¡Á®¿Ã ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/news.c:464 src/news.c:489 -#, fuzzy -msgid "error occurred while getting xhdr.\n" -msgstr "xover¸¦ ¾ò´Â µµÁß ¿¡·¯°¡ ¹ß»ý.\n" - -#: src/news.c:613 -#, fuzzy, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "\tij½¬µÈ ¸ðµç ±â»ç¸¦ Áö¿ò´Ï´Ù... " - -#: src/news.c:642 -msgid "\tDeleting all cached articles... " -msgstr "\tij½¬µÈ ¸ðµç ±â»ç¸¦ Áö¿ò´Ï´Ù... " - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "%s:%d NNTP ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "ÇÁ·ÎÅäÄÝ ¿¡·¯: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "ÇÁ·ÎÅäÄÝ ¿¡·¯\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "±ÛÀ» ¿Ã¸®´Â µµÁß ¿¡·¯ ¹ß»ý\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "Passphrase" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[»ç¿ëÀÚ ¾ÆÀ̵ð ¾øÀ½]" - -#: src/passphrase.c:244 -#, 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:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"Bad passphrase! ´Ù½Ã ½ÃµµÇϼ¼¿ä...\n" -"\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "ÀÎÁõ µµÁß ¿¡·¯ ¹ß»ý\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "greeting¿¡¼­ ¹ß°ßµÇÁö¾ÊÀº APOP ŸÀÓ ½ºÅÆÇÁ°¡ ¿ä±¸µÊ\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "greeting¿¡¼­ ŸÀÓ ½ºÅÆÇÁ¿¡ ¹®¹ý ¿À·ù\n" - -#: src/pop.c:171 src/pop.c:212 -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:364 -#: src/prefs_account.c:378 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -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:409 -msgid "Opening account preferences window...\n" -msgstr "°èÁ¤ ¼³Á¤ âÀ» ¿±´Ï´Ù...\n" - -#: src/prefs_account.c:436 -#, c-format -msgid "Account%d" -msgstr "°èÁ¤%d" - -#: src/prefs_account.c:449 -msgid "Preferences for new account" -msgstr "»õ °èÁ¤¿¡´ëÇÑ ¼³Á¤" - -#: src/prefs_account.c:454 -msgid "Preferences for each account" -msgstr "°¢ °èÁ¤¿¡´ëÇÑ ¼³Á¤" - -#: src/prefs_account.c:477 -msgid "Creating account preferences window...\n" -msgstr "°èÁ¤ ¼³Á¤ âÀ» »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/prefs_account.c:497 -msgid "Basic" -msgstr "±âº»" - -#: src/prefs_account.c:499 src/prefs_common.c:634 -msgid "Receive" -msgstr "¹Þ±â" - -#: src/prefs_account.c:506 src/prefs_common.c:645 -msgid "Privacy" -msgstr "ÇÁ¶óÀ̹ö½Ã" - -#: src/prefs_account.c:509 -msgid "Advanced" -msgstr "°í±Þ" - -#: src/prefs_account.c:563 -msgid "Name of this account" -msgstr "ÀÌ °èÁ¤ÀÇ À̸§" - -#: src/prefs_account.c:572 -msgid "Usually used" -msgstr "±âº» °èÁ¤" - -#: src/prefs_account.c:576 -msgid "Personal information" -msgstr "½Å»ó Á¤º¸" - -#: src/prefs_account.c:585 -msgid "Full name" -msgstr "Á¤½Ä À̸§" - -#: src/prefs_account.c:591 -msgid "Mail address" -msgstr "¸ÞÀÏ ÁÖ¼Ò" - -#: src/prefs_account.c:597 -msgid "Organization" -msgstr "±â°ü" - -#: src/prefs_account.c:621 -msgid "Server information" -msgstr "¼­¹ö Á¤º¸" - -#: src/prefs_account.c:642 -msgid "POP3 (normal)" -msgstr "POP3 (º¸Åë)" - -#: src/prefs_account.c:644 -msgid "POP3 (APOP auth)" -msgstr "POP3 (APOP ÀÎÁõ)" - -#: src/prefs_account.c:646 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:648 -msgid "News (NNTP)" -msgstr "´º½º(NNTP)" - -#: src/prefs_account.c:650 -msgid "None (local)" -msgstr "·ÎÄÃ" - -#: src/prefs_account.c:672 -msgid "This server requires authentication" -msgstr "" - -#: src/prefs_account.c:711 -msgid "News server" -msgstr "´º½º ¼­¹ö" - -#: src/prefs_account.c:717 -msgid "Server for receiving" -msgstr "¹Þ´Â ¼­¹ö" - -#: src/prefs_account.c:723 -msgid "SMTP server (send)" -msgstr "SMTP ¼­¹ö(¹ß¼Û¿ë)" - -#: src/prefs_account.c:730 -msgid "User ID" -msgstr "»ç¿ëÀÚ °èÁ¤" - -#: src/prefs_account.c:736 -msgid "Password" -msgstr "¾ÏÈ£" - -#: src/prefs_account.c:786 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:794 -msgid "Remove messages on server when received" -msgstr "¹ÞÀº ÈÄ ¼­¹ö¿¡¼­ ¸Þ½ÃÁö¸¦ Áö¿ò" - -#: src/prefs_account.c:796 -#, fuzzy -msgid "Download all messages on server" -msgstr "¼­¹ö¿¡¼­ ¸ðµç ¸Þ½ÃÁö¸¦ ¹ÞÀ½" - -#: src/prefs_account.c:799 -msgid "`Get all' checks for new mail on this account" -msgstr "" - -#: src/prefs_account.c:801 -msgid "Filter messages on receiving" -msgstr "¹ÞÀ»¶§ ¸Þ½ÃÁö¸¦ ÇÊÅ͸µ" - -#: src/prefs_account.c:838 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "Çì´õ" - -#: src/prefs_account.c:845 -msgid "Add Date header field" -msgstr "Date Çì´õ Ç׸ñÀ» Ãß°¡" - -#: src/prefs_account.c:846 -msgid "Generate Message-ID" -msgstr "Message-ID »ý¼º" - -#: src/prefs_account.c:853 -msgid "Add user-defined header" -msgstr "»ç¿ëÀÚ Á¤ÀÇµÈ Çì´õ Ãß°¡" - -#: src/prefs_account.c:855 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr " ÆíÁý..." - -#: src/prefs_account.c:865 -msgid "Automatically set following addresses" -msgstr "´ÙÀ½ ÁÖ¼Ò¸¦ ÀÚµ¿ÀûÀ¸·Î Á¤ÇÔ" - -#: src/prefs_account.c:874 -msgid "Cc" -msgstr "ÂüÁ¶" - -#: src/prefs_account.c:887 -msgid "Bcc" -msgstr "¼ûÀº ÂüÁ¶" - -#: src/prefs_account.c:900 -msgid "Reply-To" -msgstr "ȸ½ÅÁÖ¼Ò" - -#: src/prefs_account.c:913 -msgid "Authentication" -msgstr "ÀÎÁõ" - -#: src/prefs_account.c:921 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "SMTP ÀÎÁõ(SMTP AUTH)" - -#: src/prefs_account.c:923 -msgid "Authenticate with POP3 before sending" -msgstr "º¸³»±âÀü POP3¿Í ÀÎÁõ" - -#: src/prefs_account.c:957 -msgid "Signature file" -msgstr "¼­¸í ÆÄÀÏ" - -#: src/prefs_account.c:986 -msgid "Sign key" -msgstr "" - -#: src/prefs_account.c:994 -msgid "Use default GnuPG key" -msgstr "" - -#: src/prefs_account.c:1003 -msgid "Select key by your email address" -msgstr "" - -#: src/prefs_account.c:1012 -msgid "Specify key manually" -msgstr "" - -#: src/prefs_account.c:1028 -msgid "User or key ID:" -msgstr "" - -#: src/prefs_account.c:1073 -msgid "Specify SMTP port" -msgstr "SMTP Æ÷Æ® ¹øÈ£" - -#: src/prefs_account.c:1085 -msgid "Specify POP3 port" -msgstr "POP3 Æ÷Æ® ¹øÈ£" - -#: src/prefs_account.c:1097 -msgid "Specify domain name" -msgstr "µµ¸ÞÀÎ À̸§ ÁöÁ¤" - -#: src/prefs_account.c:1144 -msgid "Mail address is not entered." -msgstr "¸ÞÀÏ ÁÖ¼Ò°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." - -#: src/prefs_account.c:1149 -msgid "SMTP server is not entered." -msgstr "SMTP ¼­¹ö°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." - -#: src/prefs_account.c:1154 -msgid "User ID is not entered." -msgstr "»ç¿ëÀÚ ¾ÆÀ̵𰡠ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." - -#: src/prefs_account.c:1159 -msgid "POP3 server is not entered." -msgstr "POP3 ¼­¹ö°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." - -#: src/prefs_account.c:1164 -msgid "IMAP4 server is not entered." -msgstr "IMAP4 ¼­¹ö°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." - -#: src/prefs_account.c:1169 -msgid "NNTP server is not entered." -msgstr "NNTP ¼­¹ö°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "ÀÏ¹Ý ¼³Á¤ âÀ» »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "ÀÏ¹Ý ¼³Á¤" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "º¸±â" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "º»¹®" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "ÀÎÅÍÆäÀ̽º" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "±âŸ" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "¿ÜºÎ ÇÁ·Î±×·¥" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "ÇÕüÀ» À§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥À» »ç¿ë" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "ÇÁ·Î±×·¥ °æ·Î" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "Local spool" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "spool·ÎºÎÅÍ ÇÕü" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "ÇÕü½Ã ÇÊÅ͸µ" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "½ºÇ® µð·ºÅ丮" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "»õ ÆíÁö¸¦ ÀÚµ¿ °Ë»ç" - -#: src/prefs_common.c:759 -msgid "each" -msgstr "°¢°¢" - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "ºÐ" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "½ÃÀÛÇÒ ¶§ »õ ÆíÁö¸¦ °Ë»ç" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "´º½º" - -#: src/prefs_common.c:790 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"³»·Á¹ÞÀ» ÃÖ´ë ±â»ç ¼ö\n" -"(0ÀÎ °æ¿ì Á¦ÇÑ ¾øÀ½)" - -#: src/prefs_common.c:858 -msgid "Use external program for sending" -msgstr "¹ß¼ÛÀ» À§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥À» »ç¿ë" - -#: src/prefs_common.c:882 -#, fuzzy -msgid "Save sent messages to outbox" -msgstr "º¸³½ ¸Þ½ÃÁö¸¦ 'º¸³½ ÆíÁöÇÔ'¿¡ ÀúÀå" - -#: src/prefs_common.c:884 -#, fuzzy -msgid "Queue messages that fail to send" -msgstr "º¸³»±â¸¦ ½ÇÆÐÇßÀ»¶§ ¸Þ½ÃÁö¸¦ º¸³¾ ÆíÁöÇÔÀ¸·Î º¸³¿" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "º¸³»´Â ¸ÞÀÏÀÇ ¹®ÀÚ¼Â" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "ÀÚµ¿" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "7bit ¾Æ½ºÅ° (US-ASCII)" - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "À¯´ÏÄÚµå (UTF-8)" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "¼­ºÎ À¯·´(ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "ÁߺΠÀ¯·´(ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "Baltic (ISO-8859-13)" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "Baltic (ISO-8859-4)" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "±×¸®½º (ISO-8859-7)" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "ÅÍÅ° (ISO-8859-9)" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "Cyrillic (ISO-8859-5)" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "Cyrillic (KOI8-R)" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "Cyrillic (Windows-1251)" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "Cyrillic (KOI8-U)" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "ÀϺ» (ISO-2022-JP)" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "ÀϺ» (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "ÀϺ» (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "Simplified Chinese (GB2312)" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "Traditional Chinese (Big5)" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "Traditional Chinese (EUC-TW)" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "Áß±¹(ISO-2022-CN)" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "Çѱ¹(EUC-KR)" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "Àοë" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "ȸ½ÅÇÒ ¶§ ¸Þ½ÃÁö¸¦ Àοë" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "ÀÎ¿ë ºÎÈ£" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "Àοë Çü½Ä:" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr "ºÎÈ£ ¼³¸í" - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "¼­¸íÀ» Áöµ¿À¸·Î »ðÀÔ" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "¼­¸í ºÐ¸®ÀÚ" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "ÁÙ ¹Ù²Þ at" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "±ÛÀÚ" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "Àο뵵 ÁÙ ¹Ù²Þ" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "º¸³»±â Àü¿¡ ÁÙ ¹Ù²Þ" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "±Û²Ã" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "" - -#: src/prefs_common.c:1160 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "Çì´õ À̸§À» ¹ø¿ª(`From:', `Subject:' µîµî)" - -#: src/prefs_common.c:1163 -msgid "Display unread number next to folder name" -msgstr "Æú´õÀ̸§¿·¿¡ ÀÐÁö¾ÊÀ» ¸Þ½ÃÁö ¼ö¸¦ Ç¥½Ã" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "" - -#: src/prefs_common.c:1176 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "º¸³½ »ç¶÷ÀÌ º»ÀÎÀÎ °æ¿ì º¸³½ »ç¶÷ Ä­¿¡ ¹Þ´Â »ç¶÷À» Ç¥½Ã" - -#: src/prefs_common.c:1178 -msgid "Enable horizontal scroll bar" -msgstr "°¡·Î ½ºÅ©·Ñ¹Ù¸¦ ¸¸µë" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr "¿ä¾à¿¡ Ç¥½ÃµÉ Ç׸ñ ¼³Á¤... " - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "¸Þ½ÃÁö¿¡ »öÀ» ÀÌ¿ëÇÏ¿© º¸¿©ÁÖ±â" - -#: src/prefs_common.c:1297 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "Àü°¢ ¹®ÀÚ¸¦ ¹Ý°¢À¸·Î Ç¥½Ã" - -#: src/prefs_common.c:1299 -msgid "Display header pane above message view" -msgstr "" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "¸Þ½ÃÁö¸¦ º¼¶§ °£´ÜÇÑ Çì´õ¸¸ Ç¥½Ã" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "ÁÙ °£°Ý" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "Çȼ¿" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "¸Ó¸®ºÎºÐ¿¡ °ø°£À» ³²±â±â" - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "±âº»À¸·Î ¸Þ½ÃÁö¸¦ ¾Ïȣȭ" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "±âº»À¸·Î ¸Þ½ÃÁö¿¡ »çÀÎÀ» ÇÔ" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "passphrase¸¦ ÀÔ·ÂÇÒ¶§ Grab input" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "" - -#: src/prefs_common.c:1554 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "" -"Emacs¿¡ ±â¹ÝÇÑ ¸ÞÀÏ·¯µéÀÇ ¸¶¿ì½º µ¿ÀÛÀ»\n" -"Èä³»³»±â" - -#: src/prefs_common.c:1561 -msgid "Open first unread message when entering a folder" -msgstr "Æú´õ¿¡ µé¾î°¡¸é ù¹ø° ¾ÈÀÐÀº ¸Þ½ÃÁö ¿­±â" - -#: src/prefs_common.c:1565 -msgid "Go to inbox after receiving new mail" -msgstr "" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "¸Þ½ÃÁö¸¦ À̵¿Çϰųª Áö¿ï¶§ Áï½Ã ½ÇÇà" - -#: src/prefs_common.c:1580 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" -"ÀÌ°ÍÀÌ ²¨Á®ÀÖ´Â °æ¿ì ¸Þ½ÃÁö´Â ½ÇÇට±îÁö\n" -"´ÜÁö Ç¥½Ã¸¸ µÉ °ÍÀÔ´Ï´Ù" - -#: src/prefs_common.c:1587 -msgid "Add address to destination when double-clicked" -msgstr "" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "³¡³¾¶§" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "³¡³Â¶§ È®ÀÎ" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "³¡³¾¶§ Áö¿î ÆíÁöÇÔ ºñ¿ì±â" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "Áö¿î ÆíÁöÇÔ ºñ¿ï¶§ È®ÀÎÇϱâ" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "" - -#: src/prefs_common.c:1648 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "¿ÜºÎ À¥ ºê¶ó¿ìÁ®(%s´Â URI·Î ´ëüµË´Ï´Ù)" - -#: src/prefs_common.c:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "¸í·É¾î" - -#: src/prefs_common.c:1673 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "Àμâ(%s´Â ÆÄÀÏ À̸§À¸·Î ´ëüµË´Ï´Ù)" - -#: src/prefs_common.c:1689 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "¿ÜºÎ ÆíÁý±â(%s´Â ÆÄÀÏ À̸§À¸·Î ´ëüµË´Ï´Ù)" - -#: src/prefs_common.c:1752 -msgid "Set message colors" -msgstr "" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "ºÎÈ£ ¼³¸í" - -#: src/prefs_common.c:2052 -#, 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:2155 -msgid "Set display item" -msgstr "Ç¥½ÃÇÒ Ç׸ñ ¼³Á¤" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "Ç¥½Ã" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "¸¶ÀÓ" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "¼ýÀÚ" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "³¯Â¥" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "º¸³½ »ç¶÷" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "Á¦¸ñ" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "±Û²Ã ¼±ÅÃ" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "" - -#: src/prefs_customheader.c:150 -#, fuzzy -msgid "Creating custom header setting window...\n" -msgstr "Çì´õ âÀ» »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/prefs_customheader.c:168 -#, fuzzy -msgid "Custom header setting" -msgstr "/ÅؽºÆ®·Î º¸±â(_D)" - -#: src/prefs_customheader.c:212 -#, fuzzy -msgid "Value" -msgstr "°ª" - -#: src/prefs_customheader.c:320 -#, fuzzy -msgid "Reading custom header configuration...\n" -msgstr "ÇÊÅÍ ¼³Á¤À» ÀоîµéÀÔ´Ï´Ù...\n" - -#: src/prefs_customheader.c:365 -#, fuzzy -msgid "Writing custom header configuration...\n" -msgstr "ÇÊÅÍ ¼³Á¤À» ¾¹´Ï´Ù...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "Çì´õ À̸§ÀÌ ÁöÁ¤µÇÁö¾ÊÀ½" - -#: src/prefs_customheader.c:541 -#, fuzzy -msgid "Delete header" -msgstr "Æú´õ »èÁ¦" - -#: src/prefs_customheader.c:542 -#, fuzzy -msgid "Do you really want to delete this header?" -msgstr "Á¤¸»·Î ÀÌ ±ÔÄ¢À» »èÁ¦ÇϽðڽÀ´Ï±î?" - -#: src/prefs_display_header.c:187 -#, fuzzy -msgid "Creating display header setting window...\n" -msgstr "Çì´õ âÀ» »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/prefs_display_header.c:210 -#, fuzzy -msgid "Display header setting" -msgstr "/ÅؽºÆ®·Î º¸±â(_D)" - -#: src/prefs_display_header.c:237 -#, fuzzy -msgid "Header name" -msgstr "Çì´õ" - -#: src/prefs_display_header.c:269 -#, fuzzy -msgid "Displayed Headers" -msgstr "%sÀÇ Çì´õ¸¦ º¸¿©ÁÝ´Ï´Ù...\n" - -#: src/prefs_display_header.c:327 -#, fuzzy -msgid "Hidden headers" -msgstr "Çì´õ" - -#: src/prefs_display_header.c:357 -#, fuzzy -msgid "Show all unspecified headers" -msgstr "/¸ðµç Çì´õº¸±â(_h)" - -#: src/prefs_display_header.c:382 -#, fuzzy -msgid "Reading configuration for displaying headers...\n" -msgstr "¼³Á¤À» ÀнÀ´Ï´Ù...\n" - -#: src/prefs_display_header.c:420 -#, fuzzy -msgid "Writing configuration for displaying headers...\n" -msgstr "ÇÊÅÍ ¼³Á¤À» ¾¹´Ï´Ù...\n" - -#: src/prefs_display_header.c:552 -#, fuzzy -msgid "This header is already in the list." -msgstr "`%s' Æú´õ°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù." - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "µî·ÏµÈ ±ÔÄ¢" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr " " - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(¼³Á¤¾ÈµÊ)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "Å°¿öµå" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "Á¶°Ç" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "Æ÷ÇÔ" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "Æ÷ÇÔ ¾ÈµÊ" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "ÀúÀå Æú´õ" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "Á¤±Ô½Ä »ç¿ë" - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "¹ÞÁö ¾ÊÀ½" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "µî·Ï" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr " ġȯ" - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "ÇÊÅÍ ¼³Á¤À» ÀоîµéÀÔ´Ï´Ù...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "ÇÊÅÍ ¼³Á¤À» ¾¹´Ï´Ù...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "(»õ ±ÔÄ¢)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "ÀúÀå Æú´õ°¡ ¼³Á¤ÀÌ µÇ¾îÀÖÁö¾Ê½À´Ï´Ù" - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "±ÔÄ¢ »èÁ¦" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -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:457 -msgid "Mark file not found.\n" -msgstr "Ç¥½Ã ÆÄÀÏÀÌ ¹ß°ßµÇÁö¾ÊÀ½.\n" - -#: src/procmsg.c:459 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "Ç¥½Ã ¹öÀüÀÌ ´Ù¸¨´Ï´Ù(%d != %d). ±×°ÍÀ» ¹«½ÃÇÕ´Ï´Ù.\n" - -#: src/procmsg.c:475 -msgid "Can't open mark file with append mode.\n" -msgstr "Ãß°¡ ¸ðµå·Î Ç¥½Ã ÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù.\n" - -#: src/procmsg.c:480 -msgid "Can't open mark file with write mode.\n" -msgstr "¾²±â ¸ðµå·Î Ç¥½Ã ÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù.\n" - -#: src/procmsg.c:663 -msgid "Sending queued message failed.\n" -msgstr "º¸°üµÈ ¸Þ½ÃÁö¸¦ º¸³»±â°¡ ½ÇÆÐÇß½À´Ï´Ù.\n" - -#: src/procmsg.c:720 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "Àμ⠸í·É¾î°¡ ¿Ã¹Ù¸£Áö¾Ê½À´Ï´Ù: `%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "ÁøÇà ´ÙÀ̾ó·Î±×¸¦ »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "µ¥ÀÌŸ¸¦ °¡Á®¿À´Â Áß ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù.\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "ÆÄÀÏ¿¡ ¾µ ¼ö°¡ ¾ø½À´Ï´Ù.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "À×?: ¼­¸íÀÌ ÀÎÁõµÇÁö¾Ê¾Ò½À´Ï´Ù" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "¼­¸íÀÌ ¹ß°ßµÇÁö¾ÊÀ½" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "Good signature" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "BAD signature" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "¼­¸íÀ» °ËÁõÇÒ °ø°³Å°°¡ ¾ø½À´Ï´Ù" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "¼­¸íÀ» °ËÁõÇÏ´Â µµÁß ¿¡·¯" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "" - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr "" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "Å° ¼±ÅÃ" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "Ű ID" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "°ª" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "¼±ÅÃ" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "º¸³¾ ¸Þ½ÃÁöÀÇ Çì´õ°¡ ±úÁ³½À´Ï´Ù.\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "°èÁ¤ÀÌ ¹ß°ßµÇÁö¾ÊÀ½. ÇöÀç °èÁ¤À» »ç¿ë...\n" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "°èÁ¤ÀÌ ¹ß°ßµÇÁö¾Ê¾Ò½À´Ï´Ù.\n" - -#: src/send.c:250 -#, fuzzy, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "SMTP ¼­¹ö¿¡ ¿¬°áÇÏ°í ÀÖ½À´Ï´Ù: %s ...\n" - -#: src/send.c:254 -msgid "Connecting" -msgstr "" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "" - -#: src/send.c:262 -#, fuzzy -msgid "Sending" -msgstr "¸ÞÀÏ ¹ß¼Û" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "" - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "" - -#: src/send.c:292 -#, fuzzy, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "¸Þ½ÃÁö (%d / %d) ¸¦ °¡Á®¿À´Â Áß (%d / %d bytes)" - -#: src/send.c:309 -#, fuzzy -msgid "Quitting..." -msgstr "³¡¸¶Ä¡´Â Áß" - -#: src/send.c:330 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "%s:%d SMPT ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" - -#: src/send.c:341 -msgid "Error occurred while sending HELO\n" -msgstr "HELO¸¦ º¸³»´Â Áß ¿¡·¯ ¹ß»ý\n" - -#: src/send.c:357 -#, fuzzy -msgid "Sending message" -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 "" -"¸ÕÀú ¸ÞÀϹڽºÀÇ À§Ä¡¸¦ ÁöÁ¤ÇؾßÇÕ´Ï´Ù.\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:289 -msgid "/M_ove..." -msgstr "À̵¿(_o)..." - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/º¹»ç(_C)..." - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/½ÇÇà(_x)" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/Ç¥½Ã(_M)" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/Ç¥½Ã(_M)/Ç¥½Ã(_U)" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/Ç¥½Ã(_M)/Ç¥½Ã ¾ø¾Ú(_U)" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/Ç¥½Ã(_M)/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "Ç¥½Ã(_M)/ÀÐÁö¾ÊÀº °ÍÀ¸·Î Ç¥½Ã(_e)" - -#: src/summaryview.c:298 -#, fuzzy -msgid "/_Mark/Mark as rea_d" -msgstr "Ç¥½Ã(_M)/ÀÐÁö¾ÊÀº °ÍÀ¸·Î Ç¥½Ã(_e)" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/ȸ½Å(_R)" - -#: src/summaryview.c:302 -#, fuzzy -msgid "/Repl_y to sender" -msgstr "/Àüü ȸ½Å(_l)" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/Àüü ȸ½Å(_l)" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/Àü´Þ(_F)" - -#: src/summaryview.c:305 -#, fuzzy -msgid "/Forward as a_ttachment" -msgstr "/÷ºÎ·Î Àü´Þ(_t)" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/»õ âÀ¸·Î ¿­±â(_w)" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "/¼Ò½º º¸±â(_u)" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/¸ðµç Çì´õº¸±â(_h)" - -#: src/summaryview.c:311 -#, fuzzy -msgid "/Re-_edit" -msgstr "/´Ù½Ã ÆíÁý(_e)" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/Àμâ(_)..." - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "/ÀüºÎ ¼±ÅÃ(_a)" - -#: src/summaryview.c:322 -msgid "M" -msgstr "M" - -#: src/summaryview.c:322 -msgid "U" -msgstr "U" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "¿ä¾à âÀ» »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/summaryview.c:352 -msgid "No." -msgstr "¹øÈ£" - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "Ç¥½Ã ó¸®" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "Ç¥½Ã°¡ ¿©ÀüÈ÷ ³²¾ÆÀÖ½À´Ï´Ù. ±×°ÍµéÀ» ó¸®ÇÒ±î¿ä?" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"ºó Æú´õ\n" -"\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Æú´õ(%s)¸¦ ½ºÄµ..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "¿Ï·á." - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "¾È ÀÐÀº ¸Þ½ÃÁö°¡ ¾ø½¿ " - -#: src/summaryview.c:816 -msgid "No unread message found. Go to next folder?" -msgstr "¾È ÀÐÀº ¸Þ½ÃÁö°¡ ¾ø½À´Ï´Ù. ´ÙÀ½ Æú´õ·Î °¥±î¿ä?" - -#: src/summaryview.c:957 src/summaryview.c:959 -msgid "Attracting messages by subject..." -msgstr "Attracting messages by subject..." - -#: src/summaryview.c:1102 -#, c-format -msgid "%d deleted" -msgstr "%d°³ »èÁ¦µÊ" - -#: src/summaryview.c:1106 -#, c-format -msgid "%s%d moved" -msgstr "%s%d°³ À̵¿" - -#: src/summaryview.c:1107 src/summaryview.c:1114 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1112 -#, c-format -msgid "%s%d copied" -msgstr "" - -#: src/summaryview.c:1129 -msgid " item(s) selected" -msgstr " ¾ÆÀÌÅÛ ¼±ÅÃ" - -#: src/summaryview.c:1140 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d »õ ¸Þ½ÃÁö, %d ¾È ÀÐÀ½, %d°³ ¸Þ½ÃÁö(%s)" - -#: src/summaryview.c:1146 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d »õ ¸Þ½ÃÁö, %d ¾È ÀÐÀ½, %d°³ ¸Þ½ÃÁö" - -#: src/summaryview.c:1187 src/summaryview.c:1188 -msgid "Sorting summary..." -msgstr "¿ä¾àÀ» Á¤·ÄÇÕ´Ï´Ù..." - -#: src/summaryview.c:1226 -msgid "\tSetting summary from message data..." -msgstr "\t¸Þ½ÃÁö µ¥ÀÌŸ·ÎºÎÅÍ ¿ä¾àÀ» ¸¸µì´Ï´Ù..." - -#: src/summaryview.c:1228 -msgid "Setting summary from message data..." -msgstr "¸Þ½ÃÁö µ¥ÀÌŸ·ÎºÎÅÍ ¿ä¾àÀ» ¸¸µì´Ï´Ù..." - -#: src/summaryview.c:1337 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "¿ä¾à ij½¬ (%s)¸¦ ¾¹´Ï´Ù..." - -#: src/summaryview.c:1389 -msgid "(No Date)" -msgstr "(³¯Â¥ ¾ø½¿)" - -#: src/summaryview.c:1654 -#, c-format -msgid "Message %d is marked\n" -msgstr "¸Þ½ÃÁö %d°¡ Ç¥½ÃµÇ¾ú½À´Ï´Ù\n" - -#: src/summaryview.c:1683 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "¸Þ½ÃÁö %d°¡ ÀÐÀº °ÍÀ¸·Î Ç¥½ÃµÇ¾ú½À´Ï´Ù\n" - -#: src/summaryview.c:1718 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "¸Þ½ÃÁö %d°¡ ÀÐÁö¾ÊÀº °ÍÀ¸·Î Ç¥½ÃµÇ¾ú½À´Ï´Ù\n" - -#: src/summaryview.c:1760 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "¸Þ½ÃÁö %s/%d°¡ Áö¿ï°ÍÀ¸·Î Ç¥½ÃµÇ¾ú½À´Ï´Ù\n" - -#: src/summaryview.c:1774 -msgid "Current folder is Trash." -msgstr "ÇöÀç Æú´õ´Â Áö¿î ÆíÁöÇÔÀÔ´Ï´Ù." - -#: src/summaryview.c:1796 src/summaryview.c:1798 -msgid "Deleting duplicated messages..." -msgstr "Áߺ¹µÈ ¸Þ½ÃÁö¸¦ Áö¿ó´Ï´Ù..." - -#: src/summaryview.c:1848 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "¸Þ½ÃÁö %s/%dÀÇ Ç¥½Ã¸¦ Áö¿ü½À´Ï´Ù\n" - -#: src/summaryview.c:1885 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "¸Þ½ÃÁö %d°¡ %s·Î À̵¿Çϵµ·Ï Çß½À´Ï´Ù\n" - -#: src/summaryview.c:1897 -msgid "Destination is same as current folder." -msgstr "µµÂøÁö°¡ ÇöÀç Æú´õ¿Í °°½À´Ï´Ù" - -#: src/summaryview.c:1946 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "" - -#: src/summaryview.c:1959 -msgid "Destination to copy is same as current folder." -msgstr "" - -#: src/summaryview.c:1991 -msgid "Selecting all messages..." -msgstr "¸ðµç ¸Þ½ÃÁö¸¦ ¼±ÅÃ..." - -#: src/summaryview.c:2045 -msgid "Print" -msgstr "Àμâ" - -#: src/summaryview.c:2046 -#, c-format -msgid "" -"Enter the print command line:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Àμ⠸í·É¾î¼­ ÀÔ·ÂÇϼ¼¿ä:\n" -"(`%s'´Â ÆÄÀÏÀ̸§À¸·Î ´ëüµÉ °ÍÀÔ´Ï´Ù)" - -#: src/summaryview.c:2052 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"Àμ⠸í·É¾î°¡ ¿Ã¹Ù¸£Áö¾Ê½À´Ï´Ù:\n" -"`%s'" - -#: src/summaryview.c:2274 src/summaryview.c:2275 -msgid "Building threads..." -msgstr "¾²·¹µå¸¦ ¸¸µì´Ï´Ù..." - -#: src/summaryview.c:2297 src/summaryview.c:2298 -msgid "Unthreading..." -msgstr "¾²·¹µå¸¦ ¾ø¾Û´Ï´Ù..." - -#: src/summaryview.c:2320 -msgid "Unthreading for execution..." -msgstr "½ÇÇàÀ» À§ÇØ ¾²·¹µå¸¦ ¾ø¾Û´Ï´Ù..." - -#: src/summaryview.c:2407 -msgid "filtering..." -msgstr "ÇÊÅ͸µ..." - -#: src/summaryview.c:2408 -msgid "Filtering..." -msgstr "ÇÊÅ͸µ..." - -#: src/summaryview.c:2514 -#, c-format -msgid "Go to %s\n" -msgstr "%s·Î °¡±â\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "ÅؽºÆ® ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" - -#: src/textview.c:366 -#, fuzzy -msgid "To save this part, pop up the context menu with " -msgstr "ÀÌ ºÎºÐÀ» ÀúÀåÇÏ±æ ¿øÇÏ¸é ¿À¸¥ÂÊ ¹öÆ°À¸·Î\n" - -#: src/textview.c:367 -#, fuzzy -msgid "right click and select `Save as...', " -msgstr "¸Þ´º¸¦ Æ˾÷ÇϵçÁö '»õ À̸§À¸·Î...'¸¦ ¼±ÅÃÇϰųª `y'¸¦ ´©¸£¼¼¿ä\n" - -#: src/textview.c:368 -#, fuzzy -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"`ÅؽºÆ®·Î º¸±â'¸¦ ¼±ÅÃÇϰųª `t'¸¦ ´©¸£¼¼¿ä.\n" -"\n" - -#: src/textview.c:370 -#, fuzzy -msgid "To display this part as a text message, select " -msgstr "ÅؽºÆ® ¸Þ½ÃÁö·Î ÀÌ ºÎºÐÀ» º¼·Á¸é\n" - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"`ÅؽºÆ®·Î º¸±â'¸¦ ¼±ÅÃÇϰųª `t'¸¦ ´©¸£¼¼¿ä.\n" -"\n" - -#: src/textview.c:373 -#, fuzzy -msgid "To open this part with external program, select " -msgstr "¿ÜºÎ ÇÁ·Î±×·¥À¸·Î ÀÌ ºÎºÐÀ» ¿­·Á¸é `¿­±â'¸¦ ÅÃÇϼ¼¿ä.\n" - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "" - -#: src/textview.c:375 -#, fuzzy -msgid "or double-click, or click the center button, " -msgstr "¶Ç´Â ´õºí Ŭ¸¯À» ÇϽðųª °¡¿îµ¥ ¹öÆ° Ŭ¸¯ ¶Ç´Â 'l'¸¦ ´©¸£¼¼¿ä." - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "" - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "" - -#: src/utils.c:1547 -#, c-format -msgid "writing to %s failed.\n" -msgstr "%s·Î ¾²±â°¡ ½ÇÆÐÇß½À´Ï´Ù.\n" - -#: src/utils.c:1588 -#, fuzzy, c-format -msgid "move_file(): file %s already exists." -msgstr "`%s' Æú´õ°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù." - -#: src/utils.c:1729 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "URI¿­±â ¸í·É¾î°¡ ¿Ã¹Ù¸£Áö¾Ê½À´Ï´Ù: `%s'" - -#~ msgid "deleting message %d...\n" -#~ msgstr "¸Þ½ÃÁö %d¸¦ »èÁ¦ÇÕ´Ï´Ù...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/º¸±â(_V)/Åø¹Ù(_T)/°¨Ãß±â(_N)" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/ÀÐÀº °ÍÀ¸·Î Ç¥½Ã(_b)" - -#~ msgid "deleting article %d...\n" -#~ msgstr "±â»ç %d¸¦ Áö¿ó´Ï´Ù...\n" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/Ç¥½Ã(_M)/ÀÐÀº °ÍÀ¸·Î Ç¥½Ã(_b)" - -#, fuzzy -#~ msgid "Show other headers" -#~ msgstr "/¸ðµç Çì´õº¸±â(_h)" - -#~ msgid "Receive at getting from all accounts" -#~ msgstr "¸ðµç °èÁ¤À¸·ÎºÎÅÍ ¸ÞÀÏÀ» °¡Á®¿Ã¶§ ¹ÞÀ½" - -#~ msgid "SunMonTueWedThuFriSat" -#~ msgstr "ÀÏ¿ùÈ­¼ö¸ñ±ÝÅä" diff --git a/po/nl.po b/po/nl.po deleted file mode 100644 index fc240e6c1..000000000 --- a/po/nl.po +++ /dev/null @@ -1,5157 +0,0 @@ -# Sylpheed. -# Copyright (C) 2001 Free Software Foundation, Inc. -# Vincent van Adrighem <V.vanAdrighem@ITS.TUDelft.nl>, 2001. -# Claws merge by Alfons Hoogervorst <alfons@proteus.demon.nl> -# -msgid "" -msgstr "" -"Project-Id-Version: Sylpheed 0.5.0claws2\n" -"POT-Creation-Date: 2001-08-12 21:13+0100\n" -"PO-Revision-Date: 2001-08-13 20:36CET\n" -"Last-Translator: Alfons Hoogervorst <alfons@users.sourceforge.net>\n" -"Language-Team: Nederlands <nl@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-15\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 0.7.1\n" - -#: src/about.c:90 -msgid "About" -msgstr "Info" - -#: src/about.c:205 -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:211 -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:216 -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:220 -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:226 -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:232 -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." - -#. Button panel -#: src/about.c:239 src/addressbook.c:1815 src/alertpanel.c:238 -#: src/compose.c:2008 src/compose.c:3751 src/editjpilot.c:340 -#: src/editldap.c:241 src/editldap_basedn.c:212 src/editvcard.c:236 -#: src/export.c:185 src/foldersel.c:179 src/grouplistdialog.c:204 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:360 src/main.c:368 -#: src/mainwindow.c:1994 src/messageview.c:348 src/mimeview.c:724 -#: src/passphrase.c:119 src/prefs.c:475 src/prefs_common.c:2356 -#: src/prefs_common.c:2512 src/prefs_common.c:2791 src/prefs_common.c:2910 -#: src/prefs_customheader.c:162 src/prefs_display_header.c:206 -#: src/prefs_filter.c:203 src/prefs_filtering.c:323 src/prefs_matcher.c:301 -#: src/prefs_matcher.c:1462 src/prefs_scoring.c:199 src/sigstatus.c:134 -#: src/summaryview.c:2839 src/summaryview.c:3404 -msgid "OK" -msgstr "OK" - -#: src/account.c:109 -msgid "Reading all config for each account...\n" -msgstr "Postvak eigenschappen worden ingelezen...\n" - -#: src/account.c:124 -#, c-format -msgid "Found label: %s\n" -msgstr "Label gevonden: %s\n" - -#: src/account.c:238 -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:244 -msgid "Opening account edit window...\n" -msgstr "Postvak eigenschappen worden geopend...\n" - -#: src/account.c:414 -msgid "Creating account edit window...\n" -msgstr "Postvak eigenschappen venster word gemaakt...\n" - -#: src/account.c:419 -msgid "Edit accounts" -msgstr "Accountbeheer" - -#: src/account.c:447 src/addressbook.c:443 src/addressbook.c:1811 -#: src/compose.c:2801 src/editjpilot.c:291 src/editldap.c:296 -#: src/editvcard.c:207 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "Naam" - -#: src/account.c:448 src/prefs_account.c:751 -msgid "Protocol" -msgstr "Protocol" - -#: src/account.c:449 -msgid "Server" -msgstr "Server" - -#: src/account.c:450 src/mainwindow.c:1490 -msgid "Get all" -msgstr "Alles oph." - -#: src/account.c:473 src/addressbook.c:578 src/prefs_customheader.c:242 -#: src/prefs_display_header.c:290 src/prefs_display_header.c:345 -msgid "Add" -msgstr "Toevoegen" - -#: src/account.c:479 -msgid "Edit" -msgstr "Bewerken" - -#: src/account.c:485 src/prefs_customheader.c:249 -msgid " Delete " -msgstr "Verwijderen" - -#: src/account.c:491 src/prefs_customheader.c:296 -#: src/prefs_display_header.c:309 src/prefs_filter.c:453 -#: src/prefs_filtering.c:569 src/prefs_matcher.c:572 src/prefs_scoring.c:330 -msgid "Down" -msgstr "Omlaag" - -#: src/account.c:497 src/prefs_customheader.c:290 -#: src/prefs_display_header.c:303 src/prefs_filter.c:447 -#: src/prefs_filtering.c:563 src/prefs_matcher.c:566 src/prefs_scoring.c:324 -msgid "Up" -msgstr "Omhoog" - -#: src/account.c:511 -msgid " Set as default account " -msgstr " Instellen als hoofdaccount " - -#: src/account.c:517 -msgid " Enable/Disable 'Receive at Get all' " -msgstr " Eerst ontvangen bij Alles ophalen " - -#: src/account.c:523 src/prefs_common.c:3246 src/summary_search.c:192 -msgid "Close" -msgstr "Sluiten" - -#: src/account.c:577 -msgid "Delete account" -msgstr "Verwijder Postvak" - -#: src/account.c:578 -msgid "Do you really want to delete this account?" -msgstr "Wilt u werkelijk dit postvak verwijderen?" - -#: src/account.c:579 src/account.c:724 src/addressbook.c:785 -#: src/addressbook.c:1746 src/compose.c:3925 src/folderview.c:1720 -#: src/folderview.c:1763 src/folderview.c:1862 src/folderview.c:1907 -#: src/folderview.c:2005 src/folderview.c:2038 src/mainwindow.c:1019 -#: src/messageview.c:417 src/prefs_customheader.c:548 src/prefs_filter.c:736 -#: src/prefs_filtering.c:836 src/prefs_scoring.c:646 src/summary_search.c:297 -#: src/summaryview.c:880 src/summaryview.c:1216 src/summaryview.c:1242 -#: src/summaryview.c:1272 -msgid "Yes" -msgstr "Ja" - -#: src/account.c:579 src/compose.c:3925 src/folderview.c:1720 -#: src/folderview.c:1763 src/folderview.c:1862 src/folderview.c:1907 -#: src/folderview.c:2005 src/folderview.c:2038 -msgid "+No" -msgstr "+Nee" - -#: src/account.c:720 src/account.c:721 src/account.c:725 src/addressbook.c:785 -#: src/addressbook.c:1746 src/mainwindow.c:1019 src/messageview.c:417 -#: src/prefs_customheader.c:548 src/prefs_filter.c:736 -#: src/prefs_filtering.c:836 src/prefs_scoring.c:646 src/summary_search.c:297 -#: src/summaryview.c:880 src/summaryview.c:1216 src/summaryview.c:1242 -#: src/summaryview.c:1272 -msgid "No" -msgstr "Nee" - -#: src/addressbook.c:336 src/compose.c:405 src/mainwindow.c:372 -msgid "/_File" -msgstr "/_Bestand" - -#: src/addressbook.c:337 -msgid "/_File/New _Address" -msgstr "/_Bestand/Nieuw adres" - -#: src/addressbook.c:338 -msgid "/_File/New _Group" -msgstr "/_Bestand/Nieuwe groep" - -#: src/addressbook.c:339 -msgid "/_File/New _Folder" -msgstr "/_Bestand/Nieuwe map" - -#: src/addressbook.c:340 -msgid "/_File/New _V-Card" -msgstr "/_Bestand/Nieuwe V-Card" - -#: src/addressbook.c:342 -msgid "/_File/New _J-Pilot" -msgstr "/_Bestand/Nieuwe J-Pilot" - -#: src/addressbook.c:345 -msgid "/_File/New _Server" -msgstr "/_Bestand/Nieuwe Server" - -#: src/addressbook.c:347 src/addressbook.c:350 src/compose.c:409 -#: src/mainwindow.c:384 src/mainwindow.c:387 -msgid "/_File/---" -msgstr "/_Bestand/---" - -#: src/addressbook.c:348 -msgid "/_File/_Edit" -msgstr "/_Bestand/Aanpassen" - -#: src/addressbook.c:349 -msgid "/_File/_Delete" -msgstr "/_Bestand/_Verwijderen" - -#: src/addressbook.c:351 src/compose.c:410 src/mainwindow.c:388 -msgid "/_File/_Close" -msgstr "/_Bestand/_Sluiten" - -#: src/addressbook.c:352 src/compose.c:451 src/mainwindow.c:571 -msgid "/_Help" -msgstr "/_Help" - -#: src/addressbook.c:353 src/compose.c:452 src/mainwindow.c:576 -msgid "/_Help/_About" -msgstr "/_Help/_Info" - -#: src/addressbook.c:358 src/addressbook.c:375 -msgid "/New _Address" -msgstr "/Nieuw adres" - -#: src/addressbook.c:359 src/addressbook.c:376 -msgid "/New _Group" -msgstr "/Nieuwe groep" - -#: src/addressbook.c:360 src/addressbook.c:377 -msgid "/New _Folder" -msgstr "/Nieuwe map" - -#: src/addressbook.c:361 -msgid "/New _V-Card" -msgstr "/Nieuw V-Card" - -#: src/addressbook.c:363 -msgid "/New _J-Pilot" -msgstr "/New J-Pilot" - -#: src/addressbook.c:366 -msgid "/New _Server" -msgstr "Nieuwe Server" - -#: src/addressbook.c:368 src/addressbook.c:378 src/compose.c:399 -#: src/folderview.c:220 src/folderview.c:222 src/folderview.c:232 -#: src/folderview.c:235 src/folderview.c:245 src/folderview.c:248 -#: src/folderview.c:258 src/folderview.c:260 src/summaryview.c:341 -#: src/summaryview.c:349 src/summaryview.c:354 src/summaryview.c:357 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:369 src/addressbook.c:379 src/compose.c:412 -#: src/mainwindow.c:391 -msgid "/_Edit" -msgstr "/Be_werken" - -#: src/addressbook.c:370 src/addressbook.c:380 src/summaryview.c:327 -msgid "/_Delete" -msgstr "/Ver_wijderen" - -#: src/addressbook.c:443 -msgid "E-Mail address" -msgstr "E-Mail adres" - -#: src/addressbook.c:443 src/addressbook.c:1813 -msgid "Remarks" -msgstr "Opmerkingen" - -#: src/addressbook.c:454 src/compose.c:3397 -msgid "Address book" -msgstr "Adresboek" - -#: src/addressbook.c:543 -msgid "Name:" -msgstr "Naam:" - -#: src/addressbook.c:575 src/addressbook.c:1746 src/mainwindow.c:1638 -#: src/prefs_display_header.c:296 src/prefs_display_header.c:352 -#: src/prefs_filter.c:413 src/prefs_filtering.c:218 src/prefs_filtering.c:529 -#: src/prefs_matcher.c:503 src/prefs_scoring.c:290 -msgid "Delete" -msgstr "Verwijder" - -#: src/addressbook.c:581 -msgid "Lookup" -msgstr "Zoeken" - -#: src/addressbook.c:593 src/headerview.c:55 src/summary_search.c:152 -msgid "To:" -msgstr "Aan:" - -#: src/addressbook.c:597 -msgid "Cc:" -msgstr "Cc:" - -#: src/addressbook.c:601 -msgid "Bcc:" -msgstr "Bcc:" - -#: src/addressbook.c:628 -msgid "Common address" -msgstr "Algemene adressen" - -#: src/addressbook.c:635 -msgid "Personal address" -msgstr "Persoonlijke adressen" - -#: src/addressbook.c:643 -msgid "V-Card" -msgstr "V-Card" - -#: src/addressbook.c:652 -msgid "J-Pllot" -msgstr "J-Pilot" - -#: src/addressbook.c:669 -msgid "Directory" -msgstr "Map" - -#: src/addressbook.c:783 -msgid "Delete address(es)" -msgstr "Verwijder adres(sen)" - -#: src/addressbook.c:784 -msgid "Really delete the address(es)?" -msgstr "Wilt u de adressen echt verwijderen?" - -#: src/addressbook.c:1469 src/folderview.c:1493 src/folderview.c:1550 -#: src/folderview.c:1794 -msgid "New folder" -msgstr "Nieuwe map" - -#: src/addressbook.c:1470 src/folderview.c:1494 src/folderview.c:1551 -msgid "Input the name of new folder:" -msgstr "Geef de naam van de nieuwe map:" - -#: src/addressbook.c:1471 src/folderview.c:1495 src/folderview.c:1552 -#: src/folderview.c:1798 -msgid "NewFolder" -msgstr "NieuweMap" - -#: src/addressbook.c:1482 src/addressbook.c:1527 src/addressbook.c:1604 -#: src/addressbook.c:1695 -msgid "The name already exists." -msgstr "Deze naam bestaat al." - -#: src/addressbook.c:1514 -msgid "New group" -msgstr "Nieuwe groep" - -#: src/addressbook.c:1515 -msgid "Input the name of new group:" -msgstr "Geef de naam van de nieuwe groep:" - -#: src/addressbook.c:1516 -msgid "NewGroup" -msgstr "NieuweGroep" - -#: src/addressbook.c:1591 -msgid "Edit group" -msgstr "Groep hernoemen" - -#: src/addressbook.c:1592 -msgid "Input the new name of group:" -msgstr "Geef de nieuwe naam van de groep:" - -#: src/addressbook.c:1681 -msgid "Edit folder" -msgstr "Map hernoemen" - -#: src/addressbook.c:1682 -msgid "Input the new name of folder:" -msgstr "Geef de nieuwe naam van de map:" - -#: src/addressbook.c:1745 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Wilt u '%s' echt verwijderen?" - -#: src/addressbook.c:1793 -msgid "Edit address" -msgstr "Adres aanpassen" - -#: src/addressbook.c:1812 src/compose.c:3396 src/select-keys.c:302 -msgid "Address" -msgstr "Adres" - -#: src/addressbook.c:1816 src/compose.c:2008 src/compose.c:3752 -#: src/compose.c:4415 src/editjpilot.c:341 src/editldap.c:242 -#: src/editldap_basedn.c:213 src/editvcard.c:237 src/export.c:186 -#: src/foldersel.c:180 src/grouplistdialog.c:205 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:360 src/main.c:368 src/mainwindow.c:1994 -#: src/messageview.c:348 src/mimeview.c:724 src/passphrase.c:123 -#: src/prefs.c:476 src/prefs_common.c:2357 src/prefs_common.c:2911 -#: src/prefs_customheader.c:163 src/prefs_display_header.c:207 -#: src/prefs_filter.c:204 src/prefs_filtering.c:324 src/prefs_matcher.c:302 -#: src/prefs_scoring.c:200 src/progressdialog.c:77 src/select-keys.c:326 -#: src/summaryview.c:880 src/summaryview.c:2839 src/summaryview.c:3404 -msgid "Cancel" -msgstr "Annuleren" - -#: src/addressbook.c:2161 -msgid "Reading addressbook file..." -msgstr "Adresboek wordt ingelezen..." - -#: src/addressbook.c:2165 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s bestaat niet.\n" - -#: src/addressbook.c:2201 src/addressbook.c:2593 src/imap.c:1260 -#: src/imap.c:1279 src/mainwindow.c:726 src/mainwindow.c:1417 src/mh.c:930 -#: src/mh.c:937 src/news.c:748 src/procmsg.c:261 src/procmsg.c:325 -#: src/summaryview.c:1504 src/summaryview.c:1724 src/summaryview.c:1923 -#: src/summaryview.c:2023 src/summaryview.c:2565 src/summaryview.c:3115 -#: src/summaryview.c:3138 src/summaryview.c:3159 src/summaryview.c:3280 -msgid "done.\n" -msgstr "klaar.\n" - -#: src/addressbook.c:2571 -msgid "Exporting addressbook to file..." -msgstr "Adresboek wordt geëxporteerd naar bestand..." - -#: src/addressbook.c:2589 -msgid "failed to write addressbook data.\n" -msgstr "Adresboek kon niet weggeschreven worden.\n" - -#: src/addressbook.c:3464 -msgid "Personal addresses" -msgstr "Persoonlijke adressen" - -#: src/addressbook.c:3469 -msgid "Common addresses" -msgstr "Algemene adressen" - -#: src/addr_compl.c:219 -#, c-format -msgid "%s%d entering read_address_book\n" -msgstr "%s%d adress boek wordt gelezen\n" - -#: src/addr_compl.c:224 -#, c-format -msgid "%s(%d) no addressbook\n" -msgstr "%s(%d) geen adresboek\n" - -#: src/addr_compl.c:242 -#, c-format -msgid "%s(%d) leaving read_address_book - OK\n" -msgstr "%s(%d)·leaving·read_address_book·-·OK\n" - -#: src/alertpanel.c:119 src/compose.c:3925 src/main.c:358 -msgid "Notice" -msgstr "Bericht" - -#: src/alertpanel.c:132 src/main.c:230 -msgid "Warning" -msgstr "Waarschuwing" - -#: src/alertpanel.c:145 src/inc.c:453 -msgid "Error" -msgstr "Fout" - -#: src/alertpanel.c:187 -msgid "Creating alert panel dialog...\n" -msgstr "Waarschuwingsdialoog wordt gemaakt...\n" - -#: src/alertpanel.c:275 -msgid "Show this message next time" -msgstr "Deze waarschuwing volgende keer herhalen" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "kan geen geheugen toewijzen\n" - -#: src/compose.c:397 -msgid "/_Add..." -msgstr "/_Toevoegen..." - -#: src/compose.c:398 -msgid "/_Remove" -msgstr "/_Verwijderen" - -#: src/compose.c:400 src/folderview.c:223 src/folderview.c:236 -#: src/folderview.c:249 src/folderview.c:261 -msgid "/_Property..." -msgstr "/_Eigenschap..." - -#: src/compose.c:406 -msgid "/_File/_Attach file" -msgstr "/_Bestand/_Bijlage toevoegen" - -#: src/compose.c:407 -msgid "/_File/_Insert file" -msgstr "/_Bestand/Bijlage _invoegen" - -#: src/compose.c:408 -msgid "/_File/Insert si_gnature" -msgstr "/_Bestand/_Handtekening Invoegen" - -#: src/compose.c:413 -msgid "/_Edit/_Undo" -msgstr "/B_ewerken/_Ongedaan maken" - -#: src/compose.c:414 -msgid "/_Edit/_Redo" -msgstr "/B_ewerken/O_pnieuw toepassen" - -#: src/compose.c:415 src/compose.c:420 src/mainwindow.c:394 -msgid "/_Edit/---" -msgstr "/B_ewerken/---" - -#: src/compose.c:416 -msgid "/_Edit/Cu_t" -msgstr "/B_ewerken/Knippen" - -#: src/compose.c:417 src/mainwindow.c:392 -msgid "/_Edit/_Copy" -msgstr "/B_ewerken/_Kopiëren" - -#: src/compose.c:418 -msgid "/_Edit/_Paste" -msgstr "/B_ewerken/_Plakken" - -#: src/compose.c:419 src/mainwindow.c:393 -msgid "/_Edit/Select _all" -msgstr "/B_ewerken/_Alles selecteren" - -#: src/compose.c:421 -msgid "/_Edit/Wrap long _lines" -msgstr "/B_ewerken/Regelterugloop" - -#: src/compose.c:422 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/B_ewerken/Be_werken met externe editor" - -#: src/compose.c:425 src/mainwindow.c:484 -msgid "/_Message" -msgstr "/Be_richt" - -#: src/compose.c:426 -msgid "/_Message/_Send" -msgstr "/Be_richt/_Verzenden" - -#: src/compose.c:428 -msgid "/_Message/Send _later" -msgstr "/Be_richt/_Later verzenden" - -#: src/compose.c:430 -msgid "/_Message/Save to _draft folder" -msgstr "/Be_richt/Klad opslaan" - -#: src/compose.c:432 src/compose.c:437 src/compose.c:439 src/compose.c:442 -#: src/compose.c:446 src/mainwindow.c:488 src/mainwindow.c:491 -#: src/mainwindow.c:501 src/mainwindow.c:512 -msgid "/_Message/---" -msgstr "/Be_richt/---" - -#: src/compose.c:433 -msgid "/_Message/_To" -msgstr "/Be_richt/Aan" - -#: src/compose.c:434 -msgid "/_Message/_Cc" -msgstr "/Be_richt/Cc" - -#: src/compose.c:435 -msgid "/_Message/_Bcc" -msgstr "/Be_richt/Bcc" - -#: src/compose.c:436 -msgid "/_Message/_Reply to" -msgstr "/Be_richt/Reply to" - -#: src/compose.c:438 -msgid "/_Message/_Followup to" -msgstr "/Be_richt/Vervolg op" - -#: src/compose.c:440 -msgid "/_Message/_Attach" -msgstr "/Be_richt/Bijlagen" - -#: src/compose.c:443 -msgid "/_Message/Si_gn" -msgstr "/Be_richt/Si_gneer" - -#: src/compose.c:444 -msgid "/_Message/_Encrypt" -msgstr "/Be_richt/Codeer" - -#: src/compose.c:447 -msgid "/_Message/_Request Return Receipt" -msgstr "/Be_richt/Verstuur bevestigingsverzoek" - -#: src/compose.c:448 src/mainwindow.c:548 -msgid "/_Tool" -msgstr "/_Gereedschap" - -#: src/compose.c:449 -msgid "/_Tool/Show _ruler" -msgstr "/_Gereedschap/Lineaal weergeven" - -#: src/compose.c:450 src/mainwindow.c:549 -msgid "/_Tool/_Address book" -msgstr "/_Gereedschap/Adresboek" - -#: src/compose.c:626 src/compose.c:938 src/compose.c:1058 src/procmsg.c:693 -msgid "Can't get text part\n" -msgstr "Kan tekstgedeelte niet ophalen\n" - -#: src/compose.c:708 src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "Kan deel van een bericht niet ophalen" - -#: src/compose.c:927 src/compose.c:1011 -#, c-format -msgid "%s: file not exist\n" -msgstr "Bestand %s bestaat niet\n" - -#: src/compose.c:1701 src/compose.c:1751 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "Bestand %s bestaat niet\n" - -#: src/compose.c:1705 src/compose.c:1755 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "Kan de bestandsgrootte niet bepalen van %s\n" - -#: src/compose.c:1709 src/compose.c:1759 -#, c-format -msgid "File %s is empty\n" -msgstr "Bestand %s is leeg\n" - -#: src/compose.c:1729 src/compose.c:1780 -#, c-format -msgid "Message: %s" -msgstr "Bericht: %s" - -#: src/compose.c:1878 -msgid " [Edited]" -msgstr " [Aangepast]" - -#: src/compose.c:1880 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - bericht opstellen%s" - -#: src/compose.c:1883 -#, c-format -msgid "Compose message%s" -msgstr "Bericht opstellen" - -#: src/compose.c:1907 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" -"Geen postvak opgegeven voor het verzenden van berichten.\n" -"Selecteer eerst een postvak." - -#: src/compose.c:1932 src/compose.c:4292 -msgid "Recipient is not specified." -msgstr "Ontvanger is niet gespecificeerd." - -#: src/compose.c:1950 -msgid "can't get recipient list." -msgstr "fout in lijst met geadresseerden." - -#: src/compose.c:1991 -#, 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:2005 src/messageview.c:345 -msgid "Queueing" -msgstr "Wordt in de wachtrij geplaatst" - -#: src/compose.c:2006 -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:2012 src/compose.c:4304 -msgid "Can't queue the message." -msgstr "Kan bericht niet in de wachtrij plaatsen." - -#: src/compose.c:2015 -msgid "Error occurred while sending the message." -msgstr "Er is een fout opgetreden bij het verzenden." - -#: src/compose.c:2022 src/compose.c:4311 -msgid "Can't save the message to outbox." -msgstr "Het bericht kan niet opgeslagen worden in de outbox." - -#: src/compose.c:2048 src/compose.c:2169 src/compose.c:2260 -#: src/mbox_folder.c:1267 src/mbox_folder.c:1369 src/mbox_folder.c:1940 -#: src/mbox_folder.c:1971 src/mbox_folder.c:2034 src/mbox_folder.c:2067 -#: src/messageview.c:199 src/messageview.c:303 src/utils.c:1641 -msgid "can't change file mode\n" -msgstr "kan de bestandmodus niet veranderen\n" - -#: src/compose.c:2074 -msgid "Can't convert the codeset of the message." -msgstr "Kan de karakterset niet converteren." - -#: src/compose.c:2083 -msgid "can't write headers\n" -msgstr "kan geen headers schrijven\n" - -#: src/compose.c:2201 -msgid "saving sent message...\n" -msgstr "verzonden bericht wordt opgeslagen...\n" - -#: src/compose.c:2211 -msgid "can't save message\n" -msgstr "kan bericht niet opslaan\n" - -#: src/compose.c:2216 src/compose.c:2327 src/messageview.c:261 -msgid "can't open mark file\n" -msgstr "kan het bestand met markeringen niet openen\n" - -#: src/compose.c:2240 src/messageview.c:180 -msgid "queueing message...\n" -msgstr "bericht wordt in de wachtrij geplaatst...\n" - -#: src/compose.c:2318 src/messageview.c:252 -msgid "can't queue the message\n" -msgstr "kan het bericht niet in de wachtrij plaatsen\n" - -#: src/compose.c:2357 -#, c-format -msgid "Can't open file %s\n" -msgstr "Kan bestand niet openen %s\n" - -#: src/compose.c:2727 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "gegenereerd bericht-ID: %s\n" - -#: src/compose.c:2801 src/compose.c:3698 -msgid "MIME type" -msgstr "MIME type" - -#: src/compose.c:2801 src/mimeview.c:139 src/prefs_common.c:2905 -#: src/select-keys.c:299 src/summaryview.c:583 -msgid "Size" -msgstr "Grootte" - -#: src/compose.c:2818 -msgid "Creating compose window...\n" -msgstr "Venster \"Bericht opstellen\" wordt aangemaakt...\n" - -#: src/compose.c:2864 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "Afzender:" - -#. Send Options -#: src/compose.c:3323 src/mainwindow.c:1501 src/prefs_account.c:589 -#: src/prefs_account.c:1266 src/prefs_common.c:760 -msgid "Send" -msgstr "Verzenden" - -#: src/compose.c:3324 -msgid "Send message" -msgstr "Verzend bericht" - -#: src/compose.c:3331 -msgid "Send later" -msgstr "Wachtrij" - -#: src/compose.c:3332 -msgid "Put into queue folder and send later" -msgstr "In de wachtrij plaatsen en later verzenden" - -#: src/compose.c:3339 src/folderview.c:818 -msgid "Draft" -msgstr "Klad" - -#: src/compose.c:3340 -msgid "Save to draft folder" -msgstr "Opslaan als klad" - -#: src/compose.c:3349 -msgid "Insert" -msgstr "Invoegen" - -#: src/compose.c:3350 -msgid "Insert file" -msgstr "Bestand invoegen" - -#: src/compose.c:3357 -msgid "Attach" -msgstr "Bijvoegen" - -#: src/compose.c:3358 -msgid "Attach file" -msgstr "Bestand bijvoegen" - -#: src/compose.c:3367 src/prefs_common.c:1295 -msgid "Signature" -msgstr "Tekenen" - -#: src/compose.c:3368 -msgid "Insert signature" -msgstr "Handtekening (signature) invoegen" - -#: src/compose.c:3376 -msgid "Editor" -msgstr "Editor" - -#: src/compose.c:3377 -msgid "Edit with external editor" -msgstr "Aanpassen met externe editor" - -#: src/compose.c:3385 -msgid "Linewrap" -msgstr "Terugloop" - -#: src/compose.c:3386 -msgid "Wrap long lines" -msgstr "Lange regels op meerdere regels zetten" - -#: src/compose.c:3593 -msgid "Invalid MIME type." -msgstr "Ongeldig MIME type." - -#: src/compose.c:3611 -msgid "File doesn't exist or is empty." -msgstr "Bestand bestaat niet of is leeg." - -#: src/compose.c:3680 -msgid "Property" -msgstr "Eigenschap" - -#: src/compose.c:3725 -msgid "Encoding" -msgstr "Codering" - -#: src/compose.c:3748 -msgid "Path" -msgstr "Pad" - -#: src/compose.c:3749 -msgid "File name" -msgstr "Bestandsnaam" - -#: src/compose.c:3896 -#, 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:3922 -#, 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:3935 -#, c-format -msgid "Terminated process group id: %d" -msgstr "Programma (id: %d) afgebroken." - -#: src/compose.c:3936 -#, c-format -msgid "Temporary file: %s" -msgstr "Tijdelijk bestand: %s" - -#: src/compose.c:3960 -msgid "Compose: input from monitoring process\n" -msgstr "Opstellen: invoer van \"monitoring process\"\n" - -#. failed -#: src/compose.c:3993 -msgid "Couldn't exec external editor\n" -msgstr "Kon de externe editor niet aanroepen\n" - -#: src/compose.c:3997 -msgid "Couldn't write to file\n" -msgstr "Kon niet naar bestand schrijven\n" - -#: src/compose.c:3999 -msgid "Pipe read failed\n" -msgstr "Leesfout pipe\n" - -#: src/compose.c:4333 -msgid "can't remove the old draft message\n" -msgstr "kan het oude kladbericht niet verwijderen\n" - -#: src/compose.c:4361 src/compose.c:4381 -msgid "Select file" -msgstr "Selecteer bestand" - -#: src/compose.c:4413 -msgid "Discard message" -msgstr "Gooi bericht weg" - -#: src/compose.c:4414 -msgid "This message has been modified. discard it?" -msgstr "Bericht is gewijzigd, weggooien?" - -#: src/compose.c:4415 -msgid "Discard" -msgstr "Gooi weg" - -#: src/compose.c:4415 -msgid "to Draft" -msgstr "opslaan als klad" - -#: src/compose.c:4821 -msgid "Quote mark format error." -msgstr "Fout in citaatformaat." - -#: src/compose.c:4835 -msgid "Message reply/forward format error." -msgstr "Fout in formaat beantwoorden/doorsturen." - -#: src/editjpilot.c:185 -msgid "File does not appear to be JPilot format." -msgstr "Bestand heeft geen JPilot formaat" - -#: src/editjpilot.c:188 src/editvcard.c:96 -msgid "Could not read file." -msgstr "Kon bestand niet lezen." - -#: src/editjpilot.c:221 -msgid "Select JPilot File" -msgstr "Selecteer JPilot-bestand" - -#: src/editjpilot.c:269 src/editjpilot.c:394 -msgid "Edit JPilot Entry" -msgstr "Wijzig JPilot" - -#: src/editjpilot.c:298 src/editvcard.c:214 -msgid " Check File " -msgstr " Controleer bestand" - -#: src/editjpilot.c:303 src/editvcard.c:219 -msgid "File" -msgstr "Bestand" - -#: src/editjpilot.c:310 src/editldap.c:338 src/editvcard.c:226 -msgid " ... " -msgstr " ... " - -#: src/editjpilot.c:315 -msgid "Additional e-Mail address item(s)" -msgstr "Andere email-adres(sen)" - -#: src/editjpilot.c:401 -msgid "Add New JPilot Entry" -msgstr "Nieuwe JPilot invoer" - -#: src/editldap.c:162 -msgid "Connected successfully to server" -msgstr "Verbonden met server" - -#: src/editldap.c:165 src/editldap_basedn.c:291 -msgid "Could not connect to server" -msgstr "Geen verbinding met server" - -#: src/editldap.c:213 src/editldap.c:528 -msgid "Edit LDAP Server" -msgstr "Wijzig LDAP server" - -#: src/editldap.c:305 src/editldap_basedn.c:161 -msgid "Hostname" -msgstr "Hostnaam" - -#: src/editldap.c:314 src/editldap_basedn.c:171 -msgid "Port" -msgstr "Poort" - -#: src/editldap.c:326 -msgid " Check Server " -msgstr " Controleer server " - -#: src/editldap.c:331 src/editldap_basedn.c:181 -msgid "Search Base" -msgstr "Zoek base" - -#: src/editldap.c:388 -msgid "Search Criteria" -msgstr "Zoekcriteria" - -#: src/editldap.c:395 -msgid " Reset " -msgstr " Opnieuw " - -#: src/editldap.c:400 -msgid "Bind DN" -msgstr "Bind DN" - -#: src/editldap.c:409 -msgid "Bind Password" -msgstr "Wachtwoord" - -#: src/editldap.c:418 -msgid "Timeout (secs)" -msgstr "Wachttijd (sec)" - -#: src/editldap.c:432 -msgid "Maximum Entries" -msgstr "Maximum" - -#: src/editldap.c:459 src/prefs_account.c:585 -msgid "Basic" -msgstr "Algemeen" - -#: src/editldap.c:460 -msgid "Extended" -msgstr "Uitgebreid" - -#: src/editldap.c:540 -msgid "Add New LDAP Server" -msgstr "Nieuwe LDAP server" - -#: src/editldap_basedn.c:141 -msgid "Edit LDAP - Select Search Base" -msgstr "Wijzig LDAP - Selecteer zoekbasis" - -#: src/editldap_basedn.c:202 -msgid "Available Search Base(s)" -msgstr "Beschikbare zoekbase" - -#: src/editldap_basedn.c:287 -msgid "Could not read Search Base(s) from server - please set manually" -msgstr "Zoekbases niet gevonden - zet handmatig" - -#: src/editvcard.c:93 -msgid "File does not appear to be VCard format." -msgstr "Bestand heeft geen VCard-formaat." - -#: src/editvcard.c:129 -msgid "Select VCard File" -msgstr "Selecteer VCard-bestand" - -#: src/editvcard.c:185 src/editvcard.c:286 -msgid "Edit VCard Entry" -msgstr "Wijzig VCard" - -#: src/editvcard.c:291 -msgid "Add New VCard Entry" -msgstr "Toevoegen nieuwe VCard" - -#: src/export.c:122 -msgid "Export" -msgstr "Exporteren" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "Geef doelmap en mbox bestand" - -#: src/export.c:154 -msgid "Source dir:" -msgstr "Bronmap:" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "Doelbestand:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:364 -msgid " Select... " -msgstr "Selecteer..." - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "Selecteer doelbestand" - -#: src/foldersel.c:132 -msgid "Select folder" -msgstr "Selecteer map" - -#: src/folderview.c:217 src/folderview.c:229 src/folderview.c:242 -msgid "/Create _new folder..." -msgstr "/Maak nieuwe map" - -#: src/folderview.c:218 src/folderview.c:230 src/folderview.c:243 -msgid "/_Rename folder..." -msgstr "/Hernoem map" - -#: src/folderview.c:219 src/folderview.c:231 src/folderview.c:244 -msgid "/_Delete folder" -msgstr "/Verwijder map" - -#: src/folderview.c:221 src/folderview.c:234 -msgid "/Remove _mailbox" -msgstr "/Verwijder mailbox" - -#: src/folderview.c:224 src/folderview.c:237 src/folderview.c:250 -#: src/folderview.c:262 -msgid "/_Scoring..." -msgstr "/_Scoring..." - -#: src/folderview.c:233 src/folderview.c:246 -msgid "/_Update folder tree" -msgstr "/Ververs mapvenster" - -#: src/folderview.c:247 -msgid "/Remove _IMAP4 account" -msgstr "/Verwijder IMAP4 server" - -#: src/folderview.c:255 -msgid "/_Subscribe to newsgroup..." -msgstr "/Abonneren op een nieuwsgroep" - -#: src/folderview.c:257 -msgid "/_Remove newsgroup" -msgstr "/Verwijder nieuwsgroep" - -#: src/folderview.c:259 -msgid "/Remove _news account" -msgstr "/Verwijder nieuwsgroep" - -#: src/folderview.c:271 -msgid "Folder" -msgstr "Map" - -#: src/folderview.c:271 -msgid "New" -msgstr "Nieuw" - -#: src/folderview.c:272 src/prefs_common.c:2901 -msgid "Unread" -msgstr "Ongelezen" - -#: src/folderview.c:272 -msgid "#" -msgstr "#" - -#: src/folderview.c:284 -msgid "Creating folder view...\n" -msgstr "Mapzicht wordt gemaakt...\n" - -#: src/folderview.c:439 -msgid "Setting folder info...\n" -msgstr "Mapinfo wordt ingesteld...\n" - -#: src/folderview.c:440 -msgid "Setting folder info..." -msgstr "Mapinfo wordt ingesteld..." - -#: src/folderview.c:605 src/mainwindow.c:2567 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "Map wordt ingelezen %s%c%s ..." - -#: src/folderview.c:609 src/mainwindow.c:2572 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "Map wordt ingelezen %s ..." - -#: src/folderview.c:649 -msgid "Updating folder tree..." -msgstr "Mappen worden ververst..." - -#: src/folderview.c:666 -msgid "Updating all folders..." -msgstr "Mappen worden ververst..." - -#: src/folderview.c:796 src/prefs_account.c:774 -msgid "Inbox" -msgstr "Inbox" - -#: src/folderview.c:801 -msgid "Outbox" -msgstr "Outbox" - -#: src/folderview.c:806 -msgid "Queue" -msgstr "Wachtrij" - -#: src/folderview.c:811 -msgid "Trash" -msgstr "Prullenbak" - -#: src/folderview.c:1357 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Map %s is geselecteerd\n" - -#: src/folderview.c:1499 src/folderview.c:1607 src/folderview.c:1803 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "'%c' mag niet in de naam van een map." - -#: src/folderview.c:1507 src/folderview.c:1557 src/folderview.c:1616 -#: src/folderview.c:1671 src/folderview.c:1811 -#, c-format -msgid "The folder `%s' already exists." -msgstr "De map '%s' bestaat al." - -#: src/folderview.c:1599 src/folderview.c:1661 -#, c-format -msgid "Input new name for `%s':" -msgstr "Geef een nieuwe naam voor '%s':" - -#: src/folderview.c:1601 src/folderview.c:1663 -msgid "Rename folder" -msgstr "Hernoem map" - -#: src/folderview.c:1716 -#, 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:1719 src/folderview.c:1861 -msgid "Delete folder" -msgstr "Verwijder map" - -#: src/folderview.c:1725 src/folderview.c:1867 -#, c-format -msgid "Can't remove the folder `%s'." -msgstr "Kan map '%s' niet verwijderen." - -#: src/folderview.c:1759 -#, 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:1762 -msgid "Remove folder" -msgstr "Verwijder map" - -#: src/folderview.c:1795 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"Geef naam voor nieuwe map:\n" -"(wanneer deze meerdere mappen moet bevatten,\n" -" voeg een `/' toe aan het eind van de naam)" - -#: src/folderview.c:1819 -#, c-format -msgid "Can't create the folder `%s'." -msgstr "Kan map '%s' niet verwijderen." - -#: src/folderview.c:1859 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Map '%s' werkelijk verwijderen?" - -#: src/folderview.c:1904 -#, c-format -msgid "Really delete IMAP4 account `%s'?" -msgstr "IMAP4 server '%s' werkelijk verwijderen?" - -#: src/folderview.c:1906 -msgid "Delete IMAP4 account" -msgstr "Verwijder IMAP4 Postvak" - -#: src/folderview.c:1956 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "De nieuwsgroep '%s' betsaat al." - -#: src/folderview.c:2002 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Nieuwsgroep '%s' werkelijk verwijderen?" - -#: src/folderview.c:2004 -msgid "Delete newsgroup" -msgstr "Verwijder nieuwsgroep" - -#: src/folderview.c:2035 -#, c-format -msgid "Really delete news account `%s'?" -msgstr "Nieuwsgroep '%s' werkelijk verwijderen?" - -#: src/folderview.c:2037 -msgid "Delete news account" -msgstr "Verwijder Nieuws Postvak" - -#: src/grouplistdialog.c:155 -msgid "Subscribe to newsgroup" -msgstr "Abonneren op een nieuwsgroep" - -#: src/grouplistdialog.c:174 -msgid "Input subscribing newsgroup:" -msgstr "Nieuwsgroep:" - -#: src/grouplistdialog.c:206 -msgid "Refresh" -msgstr "Verversen" - -#: src/grouplistdialog.c:233 -msgid "Can't retrieve newsgroup list." -msgstr "Kan groeplijst niet ophalen." - -#: src/grouplistdialog.c:249 src/summaryview.c:1043 -msgid "Done." -msgstr "Klaar." - -#: src/grouplistdialog.c:260 -#, c-format -msgid "%d newsgroups received (%s read)" -msgstr "%d nieuwsgroepen (%s gelezen)" - -#: 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:174 src/summaryview.c:2071 -msgid "(No From)" -msgstr "(Geen afzender)" - -#: src/headerview.c:189 src/summaryview.c:2107 -msgid "(No Subject)" -msgstr "(Geen onderwerp)" - -#: src/headerwindow.c:56 -msgid "Creating header window...\n" -msgstr "Header venster wordt aangemaakt...\n" - -#: src/headerwindow.c:60 -msgid "All header" -msgstr "Alle headers" - -#: src/headerwindow.c:116 -#, c-format -msgid "Displaying the header of %s ...\n" -msgstr "De header van %s wordt weergegeven...\n" - -#: src/headerwindow.c:118 -#, 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:261 -#, 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:290 src/inc.c:419 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "Geef wachtwoord voor %s op %s:" - -#: src/imap.c:292 src/inc.c:423 src/news.c:131 -msgid "Input password" -msgstr "Geef wachtwoord" - -#: src/imap.c:323 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "IMAP4 verbinden %s:%d ...\n" - -#: src/imap.c:487 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "bericht %d is reeds gebufferd.\n" - -#: src/imap.c:497 -#, c-format -msgid "getting message %d...\n" -msgstr "bericht %d wordt opgehaald...\n" - -#: src/imap.c:503 src/procmsg.c:593 -#, c-format -msgid "can't fetch message %d\n" -msgstr "kan bericht %d niet ophalen\n" - -#: src/imap.c:527 -#, c-format -msgid "can't append message %s\n" -msgstr "kan bericht niet opslaan\n" - -#: src/imap.c:555 src/imap.c:607 src/mh.c:193 src/mh.c:297 src/mh.c:354 -#: src/mh.c:516 -msgid "the src folder is identical to the dest.\n" -msgstr "de bronmap is hetzelfde als de doelmap.\n" - -#: src/imap.c:562 src/imap.c:612 src/mh.c:208 src/mh.c:300 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "Bericht %s%c%d wordt verplaatst naar %s ...\n" - -#: src/imap.c:566 src/imap.c:616 src/mh.c:372 src/mh.c:519 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "Bericht %s%c%d wordt gekopieerd naar %s...\n" - -#: src/imap.c:686 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "kan verwijderde vlaggen: %d niet instellen\n" - -#: src/imap.c:693 src/imap.c:733 -msgid "can't expunge\n" -msgstr "kan niet wissen\n" - -#: src/imap.c:726 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "kan de vlaggen \"verwijderd\" : 1.%d niet instellen\n" - -#: src/imap.c:890 -msgid "error occured while getting LIST.\n" -msgstr "er is een fout opgetreden bij ophalen LIST\n" - -#: src/imap.c:1091 -msgid "can't create mailbox: LIST failed\n" -msgstr "LIST mistlukt; kan mailbox niet maken\n" - -#: src/imap.c:1111 -msgid "can't create mailbox\n" -msgstr "Ik kan geen mailbox maken\n" - -#: src/imap.c:1158 -msgid "can't delete mailbox\n" -msgstr "Ik kan de mailbox niet verwijderen\n" - -#: src/imap.c:1187 -msgid "can't get envelope\n" -msgstr "Ik kan de envelope niet verkrijgen\n" - -#: src/imap.c:1195 -msgid "error occurred while getting envelope.\n" -msgstr "Er is een fout opgetreden bij het verkrijgen van de envelope.\n" - -#: src/imap.c:1210 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "Ik kan de envelope niet verwerken: %s\n" - -#: src/imap.c:1240 -#, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "Verwijderen cache berichten %d - %d ... " - -#: src/imap.c:1273 -msgid "Deleting all cached messages... " -msgstr "Verwijderen van alle cache berichten..." - -#: src/imap.c:1291 -#, 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:1331 -msgid "can't get namespace\n" -msgstr "Ik kan de envelope niet verkrijgen\n" - -#: src/imap.c:1772 -#, c-format -msgid "can't select folder: %s\n" -msgstr "kan map niet selecteren: %s\n" - -#: src/imap.c:1889 -msgid "IMAP4 login failed.\n" -msgstr "IMAP4 login mislukt.\n" - -#: src/imap.c:2117 -#, c-format -msgid "can't append %s to %s\n" -msgstr "kan %d niet naar %s kopiëren\n" - -#: src/imap.c:2137 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "kan %d niet naar %s kopiëren\n" - -#: src/imap.c:2162 -#, 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:2176 -msgid "error while imap command: EXPUNGE\n" -msgstr "Fout tijdens IMAP opdracht: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "Importeer" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "Specificeer mbox bestand (bron) en de doelmap." - -#: src/import.c:158 -msgid "Importing file:" -msgstr "Te importeren bestand:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Doelmap:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Selecteer het te importeren bestand" - -#: src/inc.c:210 src/inc.c:259 src/send.c:350 -msgid "Standby" -msgstr "Een ogenblik geduld alstublieft" - -#: src/inc.c:278 -msgid "Retrieving new messages" -msgstr "Nieuwe berichten worden opgehaald" - -#: src/inc.c:443 -msgid "Retrieving" -msgstr "Bezig met ophalen" - -#: src/inc.c:450 -msgid "Done" -msgstr "Klaar" - -#: src/inc.c:463 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "Identificatie voor %s op %s is mislukt" - -#: src/inc.c:503 -msgid "Some errors occured while getting mail." -msgstr "Fout bij ophalen berichten" - -#: src/inc.c:541 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "nieuwe berichten voor account %s worden opgehaald...\n" - -#: src/inc.c:549 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: Nieuwe berichten worden opgehaald" - -#: src/inc.c:575 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "Verbinden met POP3 server: %s ..." - -#: src/inc.c:586 src/inc.c:743 -#, 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:593 src/inc.c:750 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "Kan geen verbinding maken met POP3 server: %s:%d" - -#: src/inc.c:785 src/inc.c:837 -#, c-format -msgid "Retrieving message (%d / %d) (%s / %s)" -msgstr "Bericht wordt opgehaald (%d / %d) (%s / %s)" - -#: src/inc.c:811 -msgid "Authorizing..." -msgstr "Bezig met identificatie..." - -#: src/inc.c:816 -msgid "Getting the number of new messages (STAT)..." -msgstr "Opvragen van het aantal nieuwe berichten (STAT)..." - -#: src/inc.c:821 -msgid "Getting the number of new messages (LAST)..." -msgstr "Opvragen van het aantal nieuwe berichten (LAST)..." - -#: src/inc.c:826 -msgid "Getting the number of new messages (UIDL)..." -msgstr "Opvragen van het aantal nieuwe berichten (UIDL)..." - -#: src/inc.c:831 -msgid "Getting the size of messages (LIST)..." -msgstr "Opvragen van de grootte van de nieuwe berichten (LIST)..." - -#: src/inc.c:849 -msgid "Deleting message" -msgstr "Bericht wordt verwijderd" - -#: src/inc.c:853 -msgid "Quitting" -msgstr "Bezig met afsluiten" - -#: src/inc.c:885 -msgid "a message won't be received\n" -msgstr "een bericht wordt niet ontvangen\n" - -#: src/inc.c:921 -msgid "Error occurred while processing mail." -msgstr "Fout bij het verwerken van de e-mail" - -#: src/inc.c:925 -msgid "No disk space left." -msgstr "De ruimte op de schijf is op." - -#: src/inc.c:1009 -msgid "no messages in local mailbox.\n" -msgstr "geen berichten in de lokale mailbox\n" - -#: src/inc.c:1023 -#, c-format -msgid "Getting new messages from %s into %s...\n" -msgstr "Nieuwe berichten worden opgehaald van %s naar %s ...\n" - -#: src/labelcolors.c:46 -msgid "Orange" -msgstr "Oranje" - -#: src/labelcolors.c:47 -msgid "Red" -msgstr "Rood" - -#: src/labelcolors.c:48 -msgid "Pink" -msgstr "Roze" - -#: src/labelcolors.c:49 -msgid "Sky blue" -msgstr "Hemelsblauw" - -#: src/labelcolors.c:50 -msgid "Blue" -msgstr "Blauw" - -#: src/labelcolors.c:51 -msgid "Green" -msgstr "Groen" - -#: src/labelcolors.c:52 -msgid "Brown" -msgstr "Bruin" - -#. create sub items. for the menu item activation callback we pass the -#. * index of label_colors[] as data parameter. for the None color we pass -#. * an invalid (high) value. also we attach a data pointer so we can -#. * always get back the SummaryView pointer. -#: src/labelcolors.c:281 src/summaryview.c:512 -msgid "None" -msgstr "Geen" - -#: 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:113 src/main.c:122 src/mbox_folder.c:2089 src/mh.c:698 -#, 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:154 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread niet ondersteund door glib.\n" - -#: src/main.c:231 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"GnuPG is niet goed geïnstalleerd.\n" -"OpenPGP ondersteuning wordt uitgeschakeld." - -#: src/main.c:326 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "Gebruik: %s [OPTIES]...\n" - -#: src/main.c:329 -msgid " --compose [address] open composition window" -msgstr " --compose [adres] open venster \"Bericht opstellen\"" - -#: src/main.c:330 -msgid " --receive receive new messages" -msgstr " --receive haal nieuwe berichten op" - -#: src/main.c:331 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all Berichten ophalen van alle accounts" - -#: src/main.c:332 -msgid " --debug debug mode" -msgstr " --debug debug modus" - -#: src/main.c:333 -msgid " --help display this help and exit" -msgstr " --help geef deze hulp weer" - -#: src/main.c:334 -msgid " --version output version information and exit" -msgstr " --version\t\tgeef versie informatie en sluit af" - -#: src/main.c:359 -msgid "Composing message exists. Really quit?" -msgstr "" -"U bent een bericht aan het opstellen.\n" -"Wilt u werkelijk het programma afsluiten?" - -#: src/main.c:366 -msgid "Queued messages" -msgstr "Berichten zijn in de wachtrij gezet" - -#: src/main.c:367 -msgid "Some unsent messages are queued. Exit now?" -msgstr "Er staan nog berichten in de wachtrij. Toch afsluiten?" - -#. remote command mode -#: src/main.c:440 -msgid "another Sylpheed is already running.\n" -msgstr "er draait al een Sylpheed.\n" - -#: src/mainwindow.c:373 -msgid "/_File/_Add mailbox..." -msgstr "/_Bestand/Nieuw mailbox..." - -#: src/mainwindow.c:374 -msgid "/_File/_Add mbox mailbox..." -msgstr "/_Bestand/Toevoegen mbox mailbox..." - -#: src/mainwindow.c:375 -msgid "/_File/_Update folder tree" -msgstr "/_Bestand/Ververs mapvenster" - -#: src/mainwindow.c:376 -msgid "/_File/_Folder" -msgstr "/_Bestand/_Map" - -#: src/mainwindow.c:377 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/_Bestand/_Map/Maak nieuwe map aan..." - -#: src/mainwindow.c:379 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/_Bestand/_Map/Hernoem map..." - -#: src/mainwindow.c:380 -msgid "/_File/_Folder/_Delete folder" -msgstr "/_Bestand/_Map/Verwijder map" - -#: src/mainwindow.c:381 -msgid "/_File/_Import mbox file..." -msgstr "/_Bestand/_Importeer mbox bestand..." - -#: src/mainwindow.c:382 -msgid "/_File/_Export to mbox file..." -msgstr "/_Bestand/_Exporteer naar mbox bestand..." - -#: src/mainwindow.c:383 -msgid "/_File/Empty _trash" -msgstr "/_Bestand/_Leeg prullenbak" - -#: src/mainwindow.c:385 -msgid "/_File/_Save as..." -msgstr "/_Bestand/Opslaan _als..." - -#: src/mainwindow.c:386 -msgid "/_File/_Print..." -msgstr "/_Bestand/Af_drukken..." - -#: src/mainwindow.c:389 -msgid "/_File/E_xit" -msgstr "/_Bestand/A_fsluiten" - -#: src/mainwindow.c:395 -msgid "/_Edit/_Search" -msgstr "/Be_werken/_Zoek" - -#: src/mainwindow.c:397 -msgid "/_View" -msgstr "/B_eeld" - -#: src/mainwindow.c:398 -msgid "/_View/_Folder tree" -msgstr "/B_eeld/Mappenboom" - -#: src/mainwindow.c:399 -msgid "/_View/_Message view" -msgstr "/B_eeld/Bericht" - -#: src/mainwindow.c:400 -msgid "/_View/_Toolbar" -msgstr "/B_eeld/Werkbalk" - -#: src/mainwindow.c:401 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/B_eeld/Werkbalk/Afbeelding en tekst" - -#: src/mainwindow.c:402 -msgid "/_View/_Toolbar/_Icon" -msgstr "/B_eeld/Werkbalk/Afbeelding" - -#: src/mainwindow.c:403 -msgid "/_View/_Toolbar/_Text" -msgstr "/B_eeld/Werkbalk/Tekst" - -#: src/mainwindow.c:404 -msgid "/_View/_Toolbar/_None" -msgstr "/B_eeld/Werkbalk/Niet weergeven" - -#: src/mainwindow.c:405 -msgid "/_View/_Status bar" -msgstr "/B_eeld/Statusbalk" - -#: src/mainwindow.c:406 src/mainwindow.c:409 -msgid "/_View/---" -msgstr "/B_eeld/---" - -#: src/mainwindow.c:407 -msgid "/_View/Separate f_older tree" -msgstr "/B_eeld/Mappenboom los" - -#: src/mainwindow.c:408 -msgid "/_View/Separate m_essage view" -msgstr "/B_eeld/Bericht los" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set" -msgstr "/B_eeld/Codering" - -#: src/mainwindow.c:411 -msgid "/_View/_Code set/_Auto detect" -msgstr "/B_eeld/Codering/Automatisch" - -#: src/mainwindow.c:415 src/mainwindow.c:419 -msgid "/_View/_Code set/---" -msgstr "/B_eeld/Codering/---" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/B_eeld/Codering/7bit ascii (US-ASC_II)" - -#: src/mainwindow.c:424 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/B_eeld/Codering/Unicode (_UTF-8)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/B_eeld/Codering/Westeuropees (ISO-8859-_1)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/B_eeld/Codering/Centraaleuropees (ISO-8859-_2)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/B_eeld/Codering/Baltisch (ISO-8859-13)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/B_eeld/Codering/Baltisch (ISO-8859-_4)" - -#: src/mainwindow.c:440 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/B_eeld/Codering/Grieks (ISO-8859-_7)" - -#: src/mainwindow.c:443 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/B_eeld/Codering/Turks (ISO-8859-_9)" - -#: src/mainwindow.c:446 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/B_eeld/Codering/Cyrillisch (ISO-8859-_5)" - -#: src/mainwindow.c:448 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/B_eeld/Codering/Cyrillisch (KOI8-_R)" - -#: src/mainwindow.c:450 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/B_eeld/Codering/Cyrillisch (Windows-1251)" - -#: src/mainwindow.c:454 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/B_eeld/Codering/Japans (ISO-2022-_JP)" - -#: src/mainwindow.c:457 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/B_eeld/Codering/Japans (ISO-2022-JP-2)" - -#: src/mainwindow.c:460 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/B_eeld/Codering/Japans (_EUC-JP)" - -#: src/mainwindow.c:462 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/B_eeld/Codering/Japans (_Shift__JIS)" - -#: src/mainwindow.c:466 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/B_eeld/Codering/Simpel Chinees (_GB2312)" - -#: src/mainwindow.c:468 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/B_eeld/Codering/Traditioneel Chinees (_Big5)" - -#: src/mainwindow.c:470 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/B_eeld/Codering/Traditioneel Chinees (EUC-_TW)" - -#: src/mainwindow.c:472 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/B_eeld/Codering/Chinees (ISO-2022-_CN)" - -#: src/mainwindow.c:475 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/B_eeld/Codering/Koreaans (EUC-_KR)" - -#: src/mainwindow.c:477 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/B_eeld/Codering/Koreaans (ISO-2022-KR)" - -#: src/mainwindow.c:485 -msgid "/_Message/Get new ma_il" -msgstr "/Be_richt/Haal e-mail op" - -#: src/mainwindow.c:486 -msgid "/_Message/Get from _all accounts" -msgstr "/Be_richt/Haal alle e-mail op" - -#: src/mainwindow.c:489 -msgid "/_Message/Send queued messa_ges" -msgstr "/Be_richt/Verzend berichten uit de wachtrij" - -#: src/mainwindow.c:492 -msgid "/_Message/Compose a_n email message" -msgstr "/Be_richt/Nieuw bericht" - -#: src/mainwindow.c:493 -msgid "/_Message/Compose a news message" -msgstr "/_Bericht/Nieuw nieuwsartikel" - -#: src/mainwindow.c:494 -msgid "/_Message/_Reply" -msgstr "/Be_richt/Antwoord" - -#: src/mainwindow.c:495 -msgid "/_Message/Repl_y to sender" -msgstr "/Be_richt/Beantwoorden afzender" - -#: src/mainwindow.c:496 -msgid "/_Message/Follow-up and reply to" -msgstr "/_Bericht/Doorsturen en beantwoorden" - -#: src/mainwindow.c:497 -msgid "/_Message/Reply to a_ll" -msgstr "/Be_richt/Antwoord iedereen" - -#: src/mainwindow.c:498 -msgid "/_Message/_Forward" -msgstr "/Be_richt/Doorsturen" - -#: src/mainwindow.c:499 -msgid "/_Message/Forward as a_ttachment" -msgstr "/Be_richt/Doorsturen als bijvoeging" - -#: src/mainwindow.c:502 -msgid "/_Message/M_ove..." -msgstr "/Be_richt/Verplaats..." - -#: src/mainwindow.c:503 -msgid "/_Message/_Copy..." -msgstr "/Be_richt/_Kopieer..." - -#: src/mainwindow.c:504 -msgid "/_Message/_Delete" -msgstr "/Be_richt/Verwijder" - -#: src/mainwindow.c:505 -msgid "/_Message/_Mark" -msgstr "/Be_richt/Markeer" - -#: src/mainwindow.c:506 -msgid "/_Message/_Mark/_Mark" -msgstr "/Be_richt/Markeer/Markeer" - -#: src/mainwindow.c:507 -msgid "/_Message/_Mark/_Unmark" -msgstr "/Be_richt/Markeer/Demarkeer" - -#: src/mainwindow.c:508 -msgid "/_Message/_Mark/---" -msgstr "/Be_richt/Markeer/---" - -#: src/mainwindow.c:509 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/Be_richt/Markeer/Markeer als ongelezen" - -#: src/mainwindow.c:510 -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/Be_richt/Markeer/Markeer als gelezen" - -#: src/mainwindow.c:513 -msgid "/_Message/Open in new _window" -msgstr "/Be_richt/Open in nieuw venster" - -#: src/mainwindow.c:514 -msgid "/_Message/View _source" -msgstr "/Be_richt/Bekijk broncode" - -#: src/mainwindow.c:515 -msgid "/_Message/Show all _header" -msgstr "/Be_richt/Laat complete header zien" - -#: src/mainwindow.c:516 -msgid "/_Message/Re-_edit" -msgstr "/Be_richt/Bewerken" - -#: src/mainwindow.c:518 -msgid "/_Summary" -msgstr "/Berichten_lijst" - -#: src/mainwindow.c:519 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/Berichten_lijst/Verwijder dubbele berichten" - -#: src/mainwindow.c:521 -msgid "/_Summary/_Filter messages" -msgstr "/Berichten_lijst/Filter berichten" - -#: src/mainwindow.c:522 -msgid "/_Summary/E_xecute" -msgstr "/Berichten_lijst/Uitvoeren" - -#: src/mainwindow.c:523 -msgid "/_Summary/_Update" -msgstr "/Berichten_lijst/Ververs" - -#: src/mainwindow.c:524 src/mainwindow.c:530 src/mainwindow.c:532 -msgid "/_Summary/---" -msgstr "/Berichten_lijst/---" - -#: src/mainwindow.c:525 -msgid "/_Summary/_Prev message" -msgstr "/Berichten_lijst/Vorige bericht" - -#: src/mainwindow.c:526 -msgid "/_Summary/_Next message" -msgstr "/Berichten_lijst/Volgende bericht" - -#: src/mainwindow.c:527 -msgid "/_Summary/N_ext unread message" -msgstr "/Berichten_lijst/Volgende ongelezen bericht" - -#: src/mainwindow.c:528 -msgid "/_Summary/Prev marked message" -msgstr "/_Summary/Vorige gemarkeerde bericht" - -#: src/mainwindow.c:529 -msgid "/_Summary/Next marked message" -msgstr "/_Summary/Volgende gemarkeerde bericht" - -#: src/mainwindow.c:531 -msgid "/_Summary/_Go to other folder" -msgstr "/Berichten_lijst/Ga naar andere map" - -#: src/mainwindow.c:533 -msgid "/_Summary/_Sort" -msgstr "/Berichten_lijst/Sorteer" - -#: src/mainwindow.c:534 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/Berichten_lijst/Sorteer/Op nummer" - -#: src/mainwindow.c:535 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/Berichten_lijst/Sorteer/Op grootte" - -#: src/mainwindow.c:536 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/Berichten_lijst/Sorteer/Op datum" - -#: src/mainwindow.c:537 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/Berichten_lijst/Sorteer/Op afzender" - -#: src/mainwindow.c:538 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/Berichten_lijst/Sorteer/Op onderwerp" - -#: src/mainwindow.c:539 -msgid "/_Summary/_Sort/Sort by sco_re" -msgstr "/Berichten_lijst/Sorteer/Op sco_re" - -#: src/mainwindow.c:540 -msgid "/_Summary/_Sort/Sort by _label" -msgstr "/Berichten_lijst/Sorteer/Op label" - -#: src/mainwindow.c:541 -msgid "/_Summary/_Sort/---" -msgstr "/Berichten_lijst/Sorteer/---" - -#: src/mainwindow.c:542 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/Berichten_lijst/Sorteer/Attract by subject" - -#: src/mainwindow.c:544 -msgid "/_Summary/_Thread view" -msgstr "/Berichten_lijst/Sorteer genest" - -#: src/mainwindow.c:545 -msgid "/_Summary/Unt_hread view" -msgstr "/Berichten_lijst/Sorteer ongenest" - -#: src/mainwindow.c:546 -msgid "/_Summary/Set display _item..." -msgstr "/Berichten_lijst/Selecteer kolommen..." - -#: src/mainwindow.c:550 -msgid "/_Tool/_Log window" -msgstr "/Gereedschap/Logvenster" - -#: src/mainwindow.c:552 -msgid "/_Configuration" -msgstr "/_Instellingen" - -#: src/mainwindow.c:553 -msgid "/_Configuration/_Common preferences..." -msgstr "/_Instellingen/Algemene voorkeuren..." - -#: src/mainwindow.c:555 -msgid "/_Configuration/_Filter setting..." -msgstr "/_Instellingen/_Filterinstellingen..." - -#: src/mainwindow.c:557 -msgid "/_Configuration/_Scoring ..." -msgstr "/_Instellingen/_Scoring ..." - -#: src/mainwindow.c:559 -msgid "/_Configuration/_Filtering ..." -msgstr "/_Instellingen/Geavanceerd filteren" - -#: src/mainwindow.c:561 -msgid "/_Configuration/_Preferences per account..." -msgstr "/_Instellingen/Voorkeuren hoofdaccount..." - -#: src/mainwindow.c:563 -msgid "/_Configuration/---" -msgstr "/_Instellingen/---" - -#: src/mainwindow.c:564 -msgid "/_Configuration/Create _new account..." -msgstr "/_Instellingen/Nieuw account aanmaken..." - -#: src/mainwindow.c:566 -msgid "/_Configuration/_Edit accounts..." -msgstr "/_Instellingen/Accountbeheer..." - -#: src/mainwindow.c:568 -msgid "/_Configuration/C_hange current account" -msgstr "/_Instellingen/Huidig account veranderen" - -#: src/mainwindow.c:572 -msgid "/_Help/_Manual" -msgstr "/_Help/_Handboek" - -#: src/mainwindow.c:573 -msgid "/_Help/_Manual/_English" -msgstr "/_Help/_Handboek/_Engels" - -#: src/mainwindow.c:574 -msgid "/_Help/_Manual/_Japanese" -msgstr "/_Help/_Handboek/_Japans" - -#: src/mainwindow.c:575 -msgid "/_Help/---" -msgstr "/_Help/---" - -#: src/mainwindow.c:604 -msgid "Creating main window...\n" -msgstr "Hoofdvenster wordt aangemaakt...\n" - -#: src/mainwindow.c:723 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "HoofdVenster: kleur %d kon niet gealloceerd worden\n" - -#: src/mainwindow.c:891 src/mainwindow.c:908 -msgid "Untitled" -msgstr "Geen titel" - -#: src/mainwindow.c:909 -msgid "none" -msgstr "niets" - -#: src/mainwindow.c:918 -#, c-format -msgid "Current account: %s" -msgstr "Huidig account: %s" - -#: src/mainwindow.c:1009 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "Vensterpositie: x = %d, y = %d\n" - -#: src/mainwindow.c:1017 -msgid "Empty trash" -msgstr "Leeg prullenbak" - -#: src/mainwindow.c:1018 -msgid "Empty all messages in trash?" -msgstr "Alle berichten uit de prullenbak weggooien?" - -#: src/mainwindow.c:1046 -msgid "Add mailbox" -msgstr "Mailbox toevoegen" - -#: src/mainwindow.c:1047 -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:1053 src/mainwindow.c:1093 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "De mailbox '%s' bestaat al." - -#: src/mainwindow.c:1059 src/setup.c:57 -msgid "Mailbox" -msgstr "Mailbox" - -#: src/mainwindow.c:1066 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:1086 -msgid "Add mbox mailbox" -msgstr "Toevoegen mbox mailbox" - -#: src/mainwindow.c:1087 -msgid "Input the location of mailbox." -msgstr "Geef de lokatie van de mailbox" - -#: src/mainwindow.c:1108 -msgid "Creation of the mailbox failed." -msgstr "Mailbox kon niet worden gemaakt" - -#: src/mainwindow.c:1270 -msgid "Setting widgets..." -msgstr "Widgets worden aangemaakt..." - -#: src/mainwindow.c:1484 -msgid "Get" -msgstr "Ophalen" - -#: src/mainwindow.c:1485 -msgid "Get new mail from current account" -msgstr "E-mail ophalen en in de lijst zetten." - -#: src/mainwindow.c:1491 -msgid "Get new mail from all accounts" -msgstr "E-mail van alle accounts ophalen en in de lijsten zetten" - -#: src/mainwindow.c:1502 -msgid "Send queued message(s)" -msgstr "Verzend berichten uit de wachtrij" - -#: src/mainwindow.c:1519 -msgid "Compose email message" -msgstr "Opstellen email bericht" - -#: src/mainwindow.c:1520 -msgid "email" -msgstr "email" - -#: src/mainwindow.c:1528 src/mainwindow.c:1565 -msgid "Email" -msgstr "Email" - -#: src/mainwindow.c:1543 -msgid "Compose news article" -msgstr "Opstellen nieuwsartikel" - -#: src/mainwindow.c:1544 -msgid "news" -msgstr "nieuws" - -#: src/mainwindow.c:1552 src/mainwindow.c:1576 src/prefs_common.c:912 -msgid "News" -msgstr "Nieuws" - -#: src/mainwindow.c:1566 -msgid "Compose an email message" -msgstr "Opstellen" - -#: src/mainwindow.c:1577 -msgid "Compose a news message" -msgstr "Nieuw bericht opstellen" - -#: src/mainwindow.c:1603 -msgid "Reply" -msgstr "Antwoord" - -#: src/mainwindow.c:1604 -msgid "Reply to the message" -msgstr "Stuur een bericht terug naar de afzender" - -#: src/mainwindow.c:1611 -msgid "All" -msgstr "Iedereen" - -#: src/mainwindow.c:1612 -msgid "Reply to all" -msgstr "Bericht naar iedereen terugsturen." - -#: src/mainwindow.c:1619 -msgid "Sender" -msgstr "Afzender" - -#: src/mainwindow.c:1620 -msgid "Reply to sender" -msgstr "Afzender beantwoorden" - -#: src/mainwindow.c:1627 src/prefs_filtering.c:223 -msgid "Forward" -msgstr "Doorsturen" - -#: src/mainwindow.c:1628 -msgid "Forward the message" -msgstr "Stuur dit bericht door" - -#: src/mainwindow.c:1639 -msgid "Delete the message" -msgstr "Verwijder dit bericht" - -#: src/mainwindow.c:1647 src/prefs_filtering.c:225 src/prefs_filtering.c:461 -#: src/prefs_matcher.c:149 -msgid "Execute" -msgstr "Doen!" - -#: src/mainwindow.c:1648 -msgid "Execute marked process" -msgstr "Voer de gemarkeerde acties uit" - -#: src/mainwindow.c:1656 -msgid "Next" -msgstr "Volgende" - -#: src/mainwindow.c:1657 -msgid "Next unread message" -msgstr "Volgende ongelezen" - -#: src/mainwindow.c:1739 -msgid "Email message" -msgstr "Email bericht" - -#: src/mainwindow.c:1747 -msgid "News article" -msgstr "Nieuwsartikel" - -#: src/mainwindow.c:1993 src/summaryview.c:3403 -msgid "Exit" -msgstr "Afsluiten" - -#: src/mainwindow.c:1993 src/summaryview.c:3403 -msgid "Exit this program?" -msgstr "Sylpheed afsluiten?" - -#: src/mainwindow.c:2133 -msgid "Sending queued message failed." -msgstr "Het verzenden van de berichten uit de wachtrij is mislukt." - -#: src/mainwindow.c:2334 -#, c-format -msgid "forced charset: %s\n" -msgstr "geforceerde karakterset: %s\n" - -#: src/matcher.c:1359 -#, c-format -msgid "%s(%d) - filename is not set" -msgstr "%s(%d) - geen bestandsnaam" - -#: src/mbox.c:51 src/mbox.c:198 -msgid "can't write to temporary file\n" -msgstr "kan niet naar tijdelijk bestand schrijven\n" - -#: src/mbox.c:69 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "Berichten worden van %s naar %s opgehaald...\n" - -#: src/mbox.c:79 -msgid "can't read mbox file.\n" -msgstr "kan mbox bestand niet inlezen.\n" - -#: src/mbox.c:86 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "mbox formaat is onjuist: %s\n" - -#: src/mbox.c:93 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "onjuist formaat in mbox: %s\n" - -#: src/mbox.c:111 -msgid "can't open temporary file\n" -msgstr "kan tijdelijk bestand niet openen\n" - -#: src/mbox.c:163 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"Afzender zonder escapecodes gevonden:\n" -"%s" - -#: src/mbox.c:243 -#, c-format -msgid "%d messages found.\n" -msgstr "%d berichten gevonden\n" - -#: src/mbox.c:260 src/mbox_folder.c:122 -#, c-format -msgid "can't create lock file %s\n" -msgstr "kan lock-bestand niet aanmaken: %s\n" - -#: src/mbox.c:261 src/mbox_folder.c:123 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "gebruik 'flock' in plaats van 'file' waar mogelijk\n" - -#: src/mbox.c:273 src/mbox_folder.c:135 -#, c-format -msgid "can't create %s\n" -msgstr "kan %s niet aanmaken\n" - -#: src/mbox.c:279 src/mbox_folder.c:141 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "mailbox wordt vastgehouden door een ander proces. we wachten even...\n" - -#: src/mbox.c:308 -#, c-format -msgid "can't lock %s\n" -msgstr "kan %s niet locken\n" - -#: src/mbox.c:315 src/mbox.c:362 -msgid "invalid lock type\n" -msgstr "ongeldig locktype\n" - -#: src/mbox.c:348 -#, c-format -msgid "can't unlock %s\n" -msgstr "kan de lock niet verwijderen van %s\n" - -#: src/mbox.c:379 -msgid "can't truncate mailbox to zero.\n" -msgstr "kan de mailbox niet inkorten tot 0.\n" - -#: src/mbox.c:400 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "Berichten worden geëxporteerd van %s naar %s...\n" - -#: src/mbox_folder.c:219 -#, c-format -msgid "could not lock read file %s\n" -msgstr "kan lock-bestand niet aanmaken: %s\n" - -#: src/mbox_folder.c:238 -#, c-format -msgid "could not lock write file %s\n" -msgstr "kan niet schrijven naar bestand %s\n" - -#: src/mbox_folder.c:797 -#, c-format -msgid "read mbox - %s\n" -msgstr "mbox wordt gelezen - %s\n" - -#: src/mbox_folder.c:828 -#, c-format -msgid "read mbox from file - %s\n" -msgstr "mbox wordt gelezen uit - %s\n" - -#: src/mbox_folder.c:1378 src/mbox_folder.c:1390 -#, c-format -msgid "unvalid file - %s.\n" -msgstr "ongeldig bestand - %s.\n" - -#: src/mbox_folder.c:1408 src/mbox_folder.c:1783 src/utils.c:1571 -#: src/utils.c:1648 -#, c-format -msgid "writing to %s failed.\n" -msgstr "schrijven naar %s is mislukt.\n" - -#: src/mbox_folder.c:1731 src/mh.c:668 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Laatste nummer in map %s = %d\n" - -#: src/mbox_folder.c:1924 -#, c-format -msgid "no modification - %s\n" -msgstr "geen permissie - %s\n" - -#: src/mbox_folder.c:1928 -#, c-format -msgid "save modification - %s\n" -msgstr "wijzig aanpassing - %s\n" - -#: src/mbox_folder.c:1961 src/mbox_folder.c:2057 -#, c-format -msgid "can't rename %s to %s\n" -msgstr "kan %d niet naar %s kopiëren\n" - -#: src/mbox_folder.c:1982 src/mbox_folder.c:2078 -#, c-format -msgid "%i messages written - %s\n" -msgstr "%i berichten geschreven - %s\n" - -#: src/mbox_folder.c:2018 -#, c-format -msgid "no deleted messages - %s\n" -msgstr "geen verwijderde berichten - %s\n" - -#: src/mbox_folder.c:2022 -#, c-format -msgid "purge deleted messages - %s\n" -msgstr "verwijderde bestanden worden gewist - %s\n" - -#: src/mbox_folder.c:2200 -msgid "Cannot rename folder item" -msgstr "Kan map niet hernoemen" - -#: src/messageview.c:70 -msgid "Creating message view...\n" -msgstr "Berichtview wordt gemaakt...\n" - -#: src/messageview.c:346 -msgid "" -"Error occurred while sending the notification.\n" -"Put this notification into queue folder?" -msgstr "" -"Fout bij het verzenden van ontvangstbevestiging.\n" -"Ontvangstbevestiging in de wachtrij zetten?" - -#: src/messageview.c:352 -msgid "Can't queue the notification." -msgstr "Ontvangstbevestiging kon niet in wachtrij worden gezet." - -#: src/messageview.c:355 -msgid "Error occurred while sending the notification." -msgstr "Fout bij het versturen van ontvangstbevestiging." - -#: src/messageview.c:416 -msgid "Return Receipt" -msgstr "Ontvangstbevestiging" - -#: src/messageview.c:416 -msgid "Send return receipt ?" -msgstr "Ontvangstbevestiging versturen?" - -#: src/messageview.c:420 -msgid "Error occurred while sending notification." -msgstr "Fout bij het versturen van bevestiging." - -#: src/mh.c:158 -#, 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:206 src/mh.c:291 src/mh.c:370 src/mh.c:510 -msgid "Can't open mark file.\n" -msgstr "kan het bestand met markeringen niet openen\n" - -#: src/mh.c:383 src/mh.c:528 -#, c-format -msgid "%s already exists." -msgstr "%s bestaat al." - -#: src/mh.c:873 -msgid "\tSearching uncached messages... " -msgstr "\tOngebufferde berichten worden doorzocht..." - -#: src/mh.c:928 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "%d ongebufferde bericht(en) gevonden.\n" - -#: src/mh.c:934 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tOngebufferde berichten worden op nummer gesorteerd..." - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/Openen" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/Open met..." - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/Als tekst weergeven" - -#: src/mimeview.c:116 src/summaryview.c:355 -msgid "/_Save as..." -msgstr "/Opslaan als..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/_Verifieer handtekening" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "MIME type" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "MIME view wordt aangemaakt...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "Selecteer \"Verifieer handtekening\" om te controleren" - -#: src/mimeview.c:682 src/mimeview.c:730 src/mimeview.c:749 src/mimeview.c:772 -msgid "Can't save the part of multipart message." -msgstr "Kan het deel van een meerdelig bericht niet opslaan." - -#: src/mimeview.c:716 src/summaryview.c:2832 -msgid "Save as" -msgstr "Opslaan als" - -#: src/mimeview.c:722 src/summaryview.c:2837 -msgid "Overwrite" -msgstr "Overschrijven" - -#: src/mimeview.c:723 src/summaryview.c:2838 -msgid "Overwrite existing file?" -msgstr "Bestaand bestand overschrijven?" - -#: src/mimeview.c:777 -msgid "Open with" -msgstr "Open met" - -#: src/mimeview.c:778 -#, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Geef de opdracht om het bestand mee te openen:\n" -"('%s' zal vervangen worden door de bestandsnaam)" - -#: src/mimeview.c:830 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "MIMEviewer commandoregel is ongeldig: '%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "verbinding met nieuwsserver (NNTP) %s%d wordt opgezet...\n" - -#: src/news.c:182 -#, 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:257 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "artikel %d is al gebufferd.\n" - -#: src/news.c:270 -#, c-format -msgid "can't select group %s\n" -msgstr "kan groep niet instellen: %s\n" - -#: src/news.c:275 -#, c-format -msgid "getting article %d...\n" -msgstr "artikel %d wordt opgehaald...\n" - -#: src/news.c:280 -#, c-format -msgid "can't read article %d\n" -msgstr "kan artikel %d niet lezen\n" - -#: src/news.c:325 -msgid "can't retrieve newsgroup list\n" -msgstr "Kan groeplijst niet ophalen\n" - -#: src/news.c:397 -msgid "can't post article.\n" -msgstr "kan het ertikel niet versturen.\n" - -#: src/news.c:421 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "kan het artikel %d niet ophalen\n" - -#: src/news.c:491 -#, c-format -msgid "can't set group: %s\n" -msgstr "kan groep niet instellen: %s\n" - -#: src/news.c:498 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "ongeldig artikelbereik: %d - %d\n" - -#: src/news.c:507 -msgid "no new articles.\n" -msgstr "geen nieuwe artikelen.\n" - -#: src/news.c:520 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "xover %d - %d uit %s wordt opgehaald...\n" - -#: src/news.c:523 -msgid "can't get xover\n" -msgstr "Kan xover niet ophalen\n" - -#: src/news.c:529 -msgid "error occurred while getting xover.\n" -msgstr "er is een fout opgetreden tijdens het ophalen van de xover.\n" - -#: src/news.c:537 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "Ongeldige xover regel: %s\n" - -#: src/news.c:555 src/news.c:580 -msgid "can't get xhdr\n" -msgstr "Kan xover niet ophalen\n" - -#: src/news.c:563 src/news.c:588 -msgid "error occurred while getting xhdr.\n" -msgstr "er is een fout opgetreden tijdens het ophalen van de xover.\n" - -#: src/news.c:713 -#, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "Verwijderen cache berichten 1 - %d ... " - -#: src/news.c:742 -msgid "\tDeleting all cached articles... " -msgstr "\tAlle gebufferde artikelen worden verwijderd..." - -#: src/nntp.c:52 -#, 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:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "protocolfout: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "protocolfout\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "Er is een fout opgetreden bij het versturen\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "Wachtwoord" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[geen gebruikersnaam]" - -#: src/passphrase.c:244 -#, 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:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "Slecht wachtwoord! Probeer opnieuw...\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authentication\n" -msgstr "er is een fout opgetreden tijdens de identificatie\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "Er is geen APOP timestamp gevonden in de begroeting\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "APOP Timestamp in de begroeting is ongeldig\n" - -#: src/pop.c:171 src/pop.c:212 -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:184 -#, 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:141 src/prefs.c:169 src/prefs.c:214 src/prefs_account.c:444 -#: src/prefs_account.c:458 src/prefs_customheader.c:393 -#: src/prefs_customheader.c:439 src/prefs_display_header.c:429 -#: src/prefs_display_header.c:454 src/prefs_filter.c:533 -#: src/prefs_filter.c:557 src/scoring.c:428 src/scoring.c:439 -msgid "failed to write configuration to file\n" -msgstr "opslaan van de configuratie is mislukt\n" - -#: src/prefs.c:217 -msgid "Configuration is saved.\n" -msgstr "Configuratie is opgeslagen.\n" - -#: src/prefs.c:272 -#, c-format -msgid "no permission - %s\n" -msgstr "geen permissie - %s\n" - -#: src/prefs.c:477 -msgid "Apply" -msgstr "Toepassen" - -#: src/prefs_account.c:492 -msgid "Opening account preferences window...\n" -msgstr "Venster accountvoorkeuren wordt geopend...\n" - -#: src/prefs_account.c:519 -#, c-format -msgid "Account%d" -msgstr "Account%d" - -#: src/prefs_account.c:532 -msgid "Preferences for new account" -msgstr "Voorkeuren voor nieuw account" - -#: src/prefs_account.c:537 -msgid "Preferences for each account" -msgstr "Accountvoorkeuren" - -#: src/prefs_account.c:565 -msgid "Creating account preferences window...\n" -msgstr "Venster accountvoorkeuren wordt geopend...\n" - -#. Receive Options -#: src/prefs_account.c:587 src/prefs_account.c:1255 src/prefs_common.c:758 -msgid "Receive" -msgstr "Ontvangen" - -#: src/prefs_account.c:591 src/prefs_common.c:762 -msgid "Compose" -msgstr "Opstellen" - -#: src/prefs_account.c:594 src/prefs_common.c:769 -msgid "Privacy" -msgstr "Privacy" - -#: src/prefs_account.c:598 -msgid "SSL" -msgstr "SSL" - -#: src/prefs_account.c:601 -msgid "Advanced" -msgstr "Geavanceerd" - -#: src/prefs_account.c:682 -msgid "Name of this account" -msgstr "Naam van dit account" - -#: src/prefs_account.c:691 -msgid "Usually used" -msgstr "Hoofdaccount" - -#: src/prefs_account.c:695 -msgid "Personal information" -msgstr "Persoonlijke informatie" - -#: src/prefs_account.c:704 -msgid "Full name" -msgstr "Volledige naam" - -#: src/prefs_account.c:710 -msgid "Mail address" -msgstr "E-mail adres" - -#: src/prefs_account.c:716 -msgid "Organization" -msgstr "Organisatie" - -#: src/prefs_account.c:740 -msgid "Server information" -msgstr "Serverinformatie" - -#: src/prefs_account.c:761 -msgid "POP3 (normal)" -msgstr "POP3 (normaal)" - -#: src/prefs_account.c:763 -msgid "POP3 (APOP auth)" -msgstr "POP3 (APOP identificatie)" - -#: src/prefs_account.c:765 src/prefs_account.c:967 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:767 -msgid "News (NNTP)" -msgstr "Nieuws (NNTP)" - -#: src/prefs_account.c:769 -msgid "None (local)" -msgstr "Niets (lokaal)" - -#: src/prefs_account.c:798 -msgid "This server requires authentication" -msgstr "Deze server vereist identificatie" - -#: src/prefs_account.c:842 -msgid "News server" -msgstr "Nieuwsserver" - -#: src/prefs_account.c:848 -msgid "Server for receiving" -msgstr "Server om van te ontvangen" - -#: src/prefs_account.c:854 -msgid "Local mailbox file" -msgstr "Lokale mailbox" - -#. gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); -#: src/prefs_account.c:861 -msgid "SMTP server (send)" -msgstr "SMTP server (zenden)" - -#: src/prefs_account.c:869 -msgid "Use mail command rather than SMTP server" -msgstr "Gebruik mail opdracht ipv SMTP" - -#: src/prefs_account.c:878 -msgid "command to send mails" -msgstr "opdracht voor versturen berichten" - -#. gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); -#: src/prefs_account.c:885 -msgid "User ID" -msgstr "Gebruikersnaam" - -#: src/prefs_account.c:891 -msgid "Password" -msgstr "Wachtwoord" - -#: src/prefs_account.c:950 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:958 -msgid "Remove messages on server when received" -msgstr "Verwijder berichten op de server wanneer ze worden opgehaald" - -#: src/prefs_account.c:960 -msgid "Download all messages on server" -msgstr "Haal alle berichten op" - -#: src/prefs_account.c:963 -msgid "`Get all' checks for new mail on this account" -msgstr "'Alles ophalen' haalt de e-mail voor dit account op" - -#: src/prefs_account.c:965 -msgid "Filter messages on receiving" -msgstr "Filter de berichten bij het ophalen" - -#: src/prefs_account.c:978 -msgid "IMAP server directory" -msgstr "IMAP server directory" - -#: src/prefs_account.c:1024 src/prefs_customheader.c:196 -#: src/prefs_filter.c:259 src/prefs_matcher.c:143 -msgid "Header" -msgstr "Header" - -#: src/prefs_account.c:1031 -msgid "Add Date header field" -msgstr "Datum veld toevoegen aan header" - -#: src/prefs_account.c:1032 -msgid "Generate Message-ID" -msgstr "Bericht-ID aanmaken" - -#: src/prefs_account.c:1039 -msgid "Add user-defined header" -msgstr "Voeg een door de gebruiker gespecificeerde header toe" - -#: src/prefs_account.c:1041 src/prefs_common.c:1667 src/prefs_common.c:1692 -msgid " Edit... " -msgstr "Bewerken" - -#: src/prefs_account.c:1051 -msgid "Automatically set following addresses" -msgstr "Velden om automatisch in te vullen" - -#: src/prefs_account.c:1060 src/prefs_matcher.c:140 -msgid "Cc" -msgstr "Cc" - -#: src/prefs_account.c:1073 -msgid "Bcc" -msgstr "Bcc" - -#: src/prefs_account.c:1086 -msgid "Reply-To" -msgstr "Antwoorden naar" - -#: src/prefs_account.c:1099 -msgid "Authentication" -msgstr "Identificatie" - -#: src/prefs_account.c:1107 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "SMTP identificatie (SMTP AUTH)" - -#: src/prefs_account.c:1109 -msgid "Authenticate with POP3 before sending" -msgstr "Identificatie met POP3 voor het verzenden" - -#: src/prefs_account.c:1143 -msgid "Signature file" -msgstr "Bestand met handtekening" - -#: src/prefs_account.c:1172 -msgid "Sign key" -msgstr "Signeersleutel" - -#: src/prefs_account.c:1180 -msgid "Use default GnuPG key" -msgstr "Gebruik standaard GnuPG sleutel" - -#: src/prefs_account.c:1189 -msgid "Select key by your email address" -msgstr "Selecteer sleutel naar e-mail adres" - -#: src/prefs_account.c:1198 -msgid "Specify key manually" -msgstr "Specificeer sleutel zelf" - -#: src/prefs_account.c:1214 -msgid "User or key ID:" -msgstr "Gebruikers- of sleutel-ID:" - -#: src/prefs_account.c:1262 -msgid "Use SSL tunnel to connect to POP server" -msgstr "Gebruik SSL tunnel voor POP3 verbinding" - -#: src/prefs_account.c:1263 -msgid "Use SSL tunnel to connect to IMAP server" -msgstr "Gebruik SSL-tunnel voor IMAP verbinding" - -#: src/prefs_account.c:1274 -msgid "No SSL for SMTP" -msgstr "Geen SMTP over SSL" - -#: src/prefs_account.c:1283 -msgid "Use SSL tunnel to connect to SMTP server" -msgstr "Gebruik SSL tunnel voor SMTP verbinding" - -#: src/prefs_account.c:1292 -msgid "Use STARTTLS command to start SMTP SSL session" -msgstr "Gebruik STARTTLS voor starten SMTP-SSL sessie" - -#: src/prefs_account.c:1351 -msgid "Specify SMTP port" -msgstr "Eigen SMTP poort" - -#: src/prefs_account.c:1357 -msgid "Specify POP3 port" -msgstr "Eigen POP3 poort" - -#: src/prefs_account.c:1363 -msgid "Specify IMAP4 port" -msgstr "Geef IMAP4 poort" - -#: src/prefs_account.c:1369 -msgid "Specify NNTP port" -msgstr "Geef NNTP poort" - -#: src/prefs_account.c:1374 -msgid "Specify domain name" -msgstr "Geef domeinnaam" - -#: src/prefs_account.c:1431 -msgid "Mail address is not entered." -msgstr "E-mail adres is niet ingevoerd." - -#: src/prefs_account.c:1436 -msgid "SMTP server is not entered." -msgstr "SMTP server is niet ingevoerd." - -#: src/prefs_account.c:1441 -msgid "User ID is not entered." -msgstr "Gebruikersnaam is niet ingevoerd." - -#: src/prefs_account.c:1446 -msgid "POP3 server is not entered." -msgstr "POP3 server is niet ingevoerd." - -#: src/prefs_account.c:1451 -msgid "IMAP4 server is not entered." -msgstr "IMAP4 server is niet ingevoerd." - -#: src/prefs_account.c:1456 -msgid "NNTP server is not entered." -msgstr "NNTP server is niet ingevoerd." - -#: src/prefs_account.c:1462 -msgid "local mailbox filename is not entered." -msgstr "naam lokale mailbox niet ingevoerd." - -#: src/prefs_account.c:1468 -msgid "mail command is not entered." -msgstr "geen mail opdracht ingevoerd" - -#: src/prefs_common.c:735 -msgid "Creating common preferences window...\n" -msgstr "Venster algemene voorkeuren wordt aangemaakt...\n" - -#: src/prefs_common.c:739 -msgid "Common Preferences" -msgstr "Algemene voorkeuren" - -#: src/prefs_common.c:764 -msgid "Display" -msgstr "Beeld" - -#: src/prefs_common.c:766 -msgid "Message" -msgstr "Bericht" - -#: src/prefs_common.c:772 -msgid "Interface" -msgstr "Interface" - -#: src/prefs_common.c:774 src/select-keys.c:324 -msgid "Other" -msgstr "Diversen" - -#: src/prefs_common.c:817 src/prefs_common.c:980 -msgid "External program" -msgstr "Extern programma" - -#: src/prefs_common.c:826 -msgid "Use external program for incorporation" -msgstr "Gebruik extern programma voor verwerking van de e-mail" - -#: src/prefs_common.c:833 src/prefs_common.c:997 -msgid "Program path" -msgstr "Programmapad" - -#: src/prefs_common.c:845 -msgid "Local spool" -msgstr "Lokale e-mail spool" - -#: src/prefs_common.c:856 -msgid "Incorporate from spool" -msgstr "Beheer lokale mail" - -#: src/prefs_common.c:858 -msgid "Filter on incorporation" -msgstr "Filter bij het ophalen" - -#: src/prefs_common.c:866 -msgid "Spool directory" -msgstr "Map voor de lokale mail" - -#: src/prefs_common.c:884 -msgid "Auto-check new mail" -msgstr "Kijk " - -#: src/prefs_common.c:886 -msgid "each" -msgstr "iedere" - -#: src/prefs_common.c:898 -msgid "minute(s)" -msgstr "minuten of er nieuwe e-mail is." - -#: src/prefs_common.c:907 -msgid "Check new mail on startup" -msgstr "Kijk bij opstarten of er nieuwe e-mail is" - -#: src/prefs_common.c:910 -msgid "No error popup on receive error" -msgstr "Geen waarschuwing bij ontvangstfouten" - -#: src/prefs_common.c:920 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"Maximum aantal artikelen wat gedownload zal worden\n" -"(0 = alles)" - -#: src/prefs_common.c:990 -msgid "Use external program for sending" -msgstr "Gebruik extern programma voor het verzenden" - -#: src/prefs_common.c:1014 -msgid "Save sent messages to outbox" -msgstr "Bewaar verzonden berichten in Outbox" - -#: src/prefs_common.c:1016 -msgid "Queue messages that fail to send" -msgstr "Verzonden berichten opslaan in de outbox" - -#: src/prefs_common.c:1018 -msgid "Send return receipt on request" -msgstr "Zet berichten die niet verzonden konden worden in de wachtrij" - -#: src/prefs_common.c:1024 -msgid "Outgoing codeset" -msgstr "Codering voor uitgaande berichten" - -#: src/prefs_common.c:1039 -msgid "Automatic (Recommended)" -msgstr "Automatisch (aanbevolen)" - -#: src/prefs_common.c:1040 -msgid "7bit ascii (US-ASCII)" -msgstr "7bit ascii (US-ASCII)" - -#: src/prefs_common.c:1042 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:1044 -msgid "Western European (ISO-8859-1)" -msgstr "Westeuropees (ISO-8859-1)" - -#: src/prefs_common.c:1045 -msgid "Central European (ISO-8859-2)" -msgstr "Centraaleuropees (ISO-8859-2)" - -#: src/prefs_common.c:1046 -msgid "Baltic (ISO-8859-13)" -msgstr "Baltisch (ISO-8859-13)" - -#: src/prefs_common.c:1047 -msgid "Baltic (ISO-8859-4)" -msgstr "Baltisch (ISO-8859-4)" - -#: src/prefs_common.c:1048 -msgid "Greek (ISO-8859-7)" -msgstr "Grieks (ISO-8859-7)" - -#: src/prefs_common.c:1049 -msgid "Turkish (ISO-8859-9)" -msgstr "Turks (ISO-8859-9)" - -#: src/prefs_common.c:1051 -msgid "Cyrillic (ISO-8859-5)" -msgstr "Cyrillisch (ISO-8859-5)" - -#: src/prefs_common.c:1053 -msgid "Cyrillic (KOI8-R)" -msgstr "Cyrillisch (KOI8-R)" - -#: src/prefs_common.c:1055 -msgid "Cyrillic (Windows-1251)" -msgstr "Cyrillisch (Windows-1251)" - -#: src/prefs_common.c:1056 -msgid "Cyrillic (KOI8-U)" -msgstr "Cyrillisch (KOI8-U)" - -#: src/prefs_common.c:1058 -msgid "Japanese (ISO-2022-JP)" -msgstr "Japans (ISO-2022-JP)" - -#: src/prefs_common.c:1060 -msgid "Japanese (EUC-JP)" -msgstr "Japans (EUC-JP)" - -#: src/prefs_common.c:1061 -msgid "Japanese (Shift_JIS)" -msgstr "Japans (Shift_JIS)" - -#: src/prefs_common.c:1063 -msgid "Simplified Chinese (GB2312)" -msgstr "Vereenvoudigd Chinees (GB2312)" - -#: src/prefs_common.c:1064 -msgid "Traditional Chinese (Big5)" -msgstr "Traditioneel Chinees (Big5)" - -#: src/prefs_common.c:1066 -msgid "Traditional Chinese (EUC-TW)" -msgstr "Traditioneel Chinees (EUC-TW)" - -#: src/prefs_common.c:1067 -msgid "Chinese (ISO-2022-CN)" -msgstr "Chinees (ISO-2022-CN)" - -#: src/prefs_common.c:1069 -msgid "Korean (EUC-KR)" -msgstr "Koreaans (EUC-KR)" - -#: src/prefs_common.c:1150 -msgid "Select spelling checker location" -msgstr "Locatie spelling checker" - -#: src/prefs_common.c:1289 -msgid " Quote format " -msgstr "Citeren" - -#: src/prefs_common.c:1303 -msgid "Insert signature automatically" -msgstr "Handtekening automatich invoegen" - -#: src/prefs_common.c:1309 -msgid "Signature separator" -msgstr "Handtekening scheidingsteken" - -#: src/prefs_common.c:1327 -msgid "Wrap messages at" -msgstr "Regelterugloop na:" - -#: src/prefs_common.c:1339 -msgid "characters" -msgstr "tekens" - -#: src/prefs_common.c:1347 -msgid "Wrap quotation" -msgstr "Regels met citaten afbreken" - -#: src/prefs_common.c:1349 -msgid "Wrap before sending" -msgstr "Regels afbreken voor verzenden" - -#: src/prefs_common.c:1352 src/prefs_filtering.c:224 -msgid "Forward as attachment" -msgstr "Doorsturen als bijvoegsel" - -#: src/prefs_common.c:1355 -msgid "Automatically select account for mail replies" -msgstr "Selecteer account automatisch bij beantwoorden" - -#: src/prefs_common.c:1358 -msgid "Smart wrapping (EXPERIMENTAL)" -msgstr "Slim woordafbreken (EXPERIMENTEEL)" - -#. spell checker defaults -#: src/prefs_common.c:1361 -msgid "Global spelling checker settings" -msgstr "Globale speling checker opties" - -#: src/prefs_common.c:1368 -msgid "Enable spell checker" -msgstr "Inschakelen spelling checker" - -#: src/prefs_common.c:1378 -msgid "Ispelll path" -msgstr "Pad voor ISPELL" - -#: src/prefs_common.c:1388 -msgid "..." -msgstr "..." - -#: src/prefs_common.c:1401 -msgid "Dictionaries" -msgstr "Woordenlijsten" - -#: src/prefs_common.c:1466 -msgid "Font" -msgstr "Lettertype" - -#: src/prefs_common.c:1475 -msgid "Text" -msgstr "Tekst" - -#: src/prefs_common.c:1493 -msgid "Small" -msgstr "Klein" - -#: src/prefs_common.c:1512 -msgid "Normal" -msgstr "Normaal" - -#: src/prefs_common.c:1531 -msgid "Bold" -msgstr "Vet" - -#: src/prefs_common.c:1556 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "Vertaal Headervelden (zoals 'From:', 'Subject:')" - -#: src/prefs_common.c:1559 -msgid "Display unread number next to folder name" -msgstr "Geef aantal ongelezen berichten weer naast mapnaam" - -#. ---- Summary ---- -#: src/prefs_common.c:1563 -msgid "Summary View" -msgstr "Berichtenlijst" - -#: src/prefs_common.c:1572 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "Geef ontvanger weer in 'Afzender' kolom wanneer je zelf de afzender bent" - -#: src/prefs_common.c:1575 -msgid "Display sender using address book" -msgstr "Toon afzender mbv. adresboek" - -#: src/prefs_common.c:1577 -msgid "Enable horizontal scroll bar" -msgstr "Horizontale schuifbalk weergeven" - -#: src/prefs_common.c:1583 src/prefs_common.c:2287 src/prefs_common.c:2325 -msgid "Date format" -msgstr "Datumformaat" - -#: src/prefs_common.c:1591 -msgid "... " -msgstr "... " - -#: src/prefs_common.c:1607 -msgid " Set display item of summary... " -msgstr "Kies kolommen voor berichtenlijst..." - -#: src/prefs_common.c:1662 -msgid "Enable coloration of message" -msgstr "Kleurmarkering in berichten aanzetten" - -#: src/prefs_common.c:1681 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "Geef 2-byte grote cijfers en letters weer met 1-byte grote karakters" - -#: src/prefs_common.c:1683 -msgid "Display header pane above message view" -msgstr "Geef headerinformatie weer boven bericht" - -#: src/prefs_common.c:1690 -msgid "Display short headers on message view" -msgstr "Geef korte headerinformatie weer boven bericht" - -#: src/prefs_common.c:1710 -msgid "Line space" -msgstr "Regelafstand" - -#: src/prefs_common.c:1724 src/prefs_common.c:1764 -msgid "pixel(s)" -msgstr "pixel(s)" - -#: src/prefs_common.c:1729 -msgid "Leave space on head" -msgstr "Laat ruimte aan de bovenkant" - -#: src/prefs_common.c:1731 -msgid "Scroll" -msgstr "Schuiven" - -#: src/prefs_common.c:1738 -msgid "Half page" -msgstr "Halve pagina" - -#: src/prefs_common.c:1744 -msgid "Smooth scroll" -msgstr "Vloeiend schuiven" - -#: src/prefs_common.c:1750 -msgid "Step" -msgstr "Stap" - -#: src/prefs_common.c:1811 -msgid "Encrypt message by default" -msgstr "Normaal gesproken het bericht coderen" - -#: src/prefs_common.c:1814 -msgid "Sign message by default" -msgstr "Voeg handtekening automatisch toe" - -#: src/prefs_common.c:1817 -msgid "Automatically check signatures" -msgstr "Controleer handtekeningen automatisch" - -#: src/prefs_common.c:1820 -msgid "Show signature check result in a popup window" -msgstr "Toon resultaat handtekeningcontrole in venster" - -#: src/prefs_common.c:1824 -msgid "Grab input while entering a passphrase" -msgstr "Houd het toetsenbord vast tijdens het intikken van het wachtwoord" - -#: src/prefs_common.c:1829 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "Waarschuwing bij het opstarten als GnuPG niet werkt." - -#. create default signkey box -#: src/prefs_common.c:1836 -msgid "Default Sign Key" -msgstr "Standaard key" - -#: src/prefs_common.c:1942 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "Emuleer het muisgebruik van Emacs" - -#: src/prefs_common.c:1949 -msgid "Open first unread message when entering a folder" -msgstr "Open het eerste ongelezen e-mailtje wanneer een map geopend wordt" - -#: src/prefs_common.c:1953 -msgid "Go to inbox after receiving new mail" -msgstr "Ga naar de inbox na het ophalen van nieuwe e-mail" - -#: src/prefs_common.c:1961 -msgid "Execute immediately when moving or deleting messages" -msgstr "Meteen uitvoeren wanneer een bericht verplaatst of verwijderd wordt" - -#: src/prefs_common.c:1968 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" -"(Berichten worden gemarkeerd voor deze acties\n" -"wanneer dit uitgeschakeld is)" - -#: src/prefs_common.c:1975 -msgid "Add address to destination when double-clicked" -msgstr "Voeg adres toe aan 'Geadresseerden' na dubbelklikken" - -#: src/prefs_common.c:1982 -msgid "Show receive Dialog" -msgstr "Ontvangstvenster weergeven" - -#: src/prefs_common.c:1992 -msgid "Always" -msgstr "Altijd" - -#: src/prefs_common.c:1993 -msgid "Only if a sylpheed window is active" -msgstr "Alleen wanneer een venster actief is" - -#: src/prefs_common.c:1994 -msgid "Never" -msgstr "Nooit" - -#. On Exit -#: src/prefs_common.c:1999 -msgid "On exit" -msgstr "Afsluiten" - -#: src/prefs_common.c:2007 -msgid "Confirm on exit" -msgstr "Bevestigen bij het afsluiten" - -#: src/prefs_common.c:2014 -msgid "Empty trash on exit" -msgstr "Prullenbak legen bij het afsluiten" - -#: src/prefs_common.c:2016 -msgid "Ask before emptying" -msgstr "Bevestigen bij het legen" - -#: src/prefs_common.c:2020 -msgid "Warn if there are queued messages" -msgstr "Waarschuw wanneer er berichten in de wachtrij staan" - -#: src/prefs_common.c:2059 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "Externe Webbrowser (%s is de URI)" - -#: src/prefs_common.c:2066 src/prefs_common.c:2091 src/prefs_common.c:2107 -msgid "Command" -msgstr "Opdracht" - -#: src/prefs_common.c:2084 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "Afdrukken (%s is het bestand)" - -#: src/prefs_common.c:2100 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "Externe editor (%s is het bestand)" - -#: src/prefs_common.c:2257 -msgid "the full abbreviated weekday name" -msgstr "Afkorting naam van de dag" - -#: src/prefs_common.c:2258 -msgid "the full weekday name" -msgstr "Volledige naam van dag" - -#: src/prefs_common.c:2259 -msgid "the abbreviated month name" -msgstr "Afkorting naam van de dag" - -#: src/prefs_common.c:2260 -msgid "the full month name" -msgstr "Volledige naam van maand" - -#: src/prefs_common.c:2261 -msgid "the preferred date and time for the current locale" -msgstr "Voorkeursdatum en -tijd voor huidige locale" - -#: src/prefs_common.c:2262 -msgid "the century number (year/100)" -msgstr "Eeuw (jaar/100)" - -#: src/prefs_common.c:2263 -msgid "the day of the month as a decimal number" -msgstr "Dag van de maand" - -#: src/prefs_common.c:2264 -msgid "the hour as a decimal number using a 24-hour clock" -msgstr "Uur (24-uurs klok)" - -#: src/prefs_common.c:2265 -msgid "the hour as a decimal number using a 12-hour clock" -msgstr "Uur (12-uurs klok)" - -#: src/prefs_common.c:2266 -msgid "the day of the year as a decimal number" -msgstr "Dagnummer van het jaar" - -#: src/prefs_common.c:2267 -msgid "the month as a decimal number" -msgstr "Maandnummer" - -#: src/prefs_common.c:2268 -msgid "the minute as a decimal number" -msgstr "Minuut" - -#: src/prefs_common.c:2269 -msgid "either AM or PM" -msgstr "AM / PM" - -#: src/prefs_common.c:2270 -msgid "the second as a decimal number" -msgstr "Seconden" - -#: src/prefs_common.c:2271 -msgid "the day of the week as a decimal number" -msgstr "Dag van de week" - -#: src/prefs_common.c:2272 -msgid "the preferred date for the current locale" -msgstr "Voorkeursdatum voor huidige locale" - -#: src/prefs_common.c:2273 -msgid "the last two digits of a year" -msgstr "Laatste twee decimalen van een jaar" - -#: src/prefs_common.c:2274 -msgid "the year as a decimal number" -msgstr "Jaar" - -#: src/prefs_common.c:2275 -msgid "the time zone or name or abbreviation" -msgstr "Tijdzone of naam of afkorting" - -#: src/prefs_common.c:2302 -msgid "Specifier" -msgstr "Specificieer" - -#: src/prefs_common.c:2303 -msgid "Description" -msgstr "Beschrijving" - -#: src/prefs_common.c:2342 -msgid "Example" -msgstr "Voorbeeld" - -#: src/prefs_common.c:2431 -msgid "Set message colors" -msgstr "Berichtkleuren instellen" - -#: src/prefs_common.c:2439 -msgid "Colors" -msgstr "Kleuren" - -#: src/prefs_common.c:2479 -msgid "Quoted Text - First Level" -msgstr "Geciteerde tekst - eerste niveau" - -#: src/prefs_common.c:2485 -msgid "Quoted Text - Second Level" -msgstr "Geciteerde tekst - tweede niveau" - -#: src/prefs_common.c:2491 -msgid "Quoted Text - Third Level" -msgstr "Geciteerde tekst - derde niveau" - -#: src/prefs_common.c:2497 -msgid "URI link" -msgstr "URI link" - -#: src/prefs_common.c:2503 -msgid "Target folder" -msgstr "Doel folder" - -#: src/prefs_common.c:2510 -msgid "Recycle quote colors" -msgstr "Gebruikte kleuren opnieuw gebruiken" - -#: src/prefs_common.c:2576 -msgid "Pick color for quotation level 1" -msgstr "Selecteer kleur voor niveau 1" - -#: src/prefs_common.c:2579 -msgid "Pick color for quotation level 2" -msgstr "Selecteer kleur voor niveau 2" - -#: src/prefs_common.c:2582 -msgid "Pick color for quotation level 3" -msgstr "Selecteer kleur voor niveau 3" - -#: src/prefs_common.c:2585 -msgid "Pick color for URI" -msgstr "Selecteer kleur voor URI" - -#: src/prefs_common.c:2588 -msgid "Pick color for target folder" -msgstr "Selecteer kleur voor doelmap" - -#: src/prefs_common.c:2727 src/prefs_matcher.c:1412 -msgid "Description of symbols" -msgstr "Beschrijving der symbolen" - -#: src/prefs_common.c:2766 -#, c-format -msgid "" -"DESCRIPTION\n" -"\n" -"Date\n" -"From\n" -"Full Name of Sender\n" -"First Name of Sender\n" -"Initial of Sender\n" -"Subject\n" -"To\n" -"Cc\n" -"Newsgroups\n" -"Message-ID\n" -"References\n" -"\n" -"Display the information\n" -"If the information x is set, displays expr\n" -"\n" -"Message body\n" -"Quoted message body\n" -"Message body without signature\n" -"Quoted message body without signature\n" -"%" -msgstr "" -"BESCHRIJVING\n" -"\n" -"Datum\n" -"Afzender\n" -"Volledige naam van afzender\n" -"Voornaam afzender\n" -"Initialen afzender\n" -"Onderwerp\n" -"To\n" -"Cc\n" -"Nieuwsgroepen\n" -"Message-ID\n" -"References\n" -"\n" -"Weergeven van de informatie\n" -"Als x is ingesteld, wordt expr weergegeven\n" -"\n" -"Volledige berichttekst\n" -"Geciteerde berichttekst\n" -"Berichttekst zonder handtekening\n" -"Geciteerde berichttekst zonder handtekening\n" -"%" - -#: src/prefs_common.c:2883 -msgid "Set display item" -msgstr "Kies kolommen" - -#: src/prefs_common.c:2900 src/prefs_filtering.c:219 -msgid "Mark" -msgstr "Markeer" - -#: src/prefs_common.c:2902 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2903 -msgid "Number" -msgstr "Nummer" - -#: src/prefs_common.c:2904 src/prefs_scoring.c:252 src/summaryview.c:584 -msgid "Score" -msgstr "Score" - -#: src/prefs_common.c:2906 src/summaryview.c:574 -msgid "Date" -msgstr "Datum" - -#: src/prefs_common.c:2907 src/prefs_matcher.c:140 src/summaryview.c:575 -msgid "From" -msgstr "Afzender" - -#: src/prefs_common.c:2908 src/prefs_matcher.c:139 src/summaryview.c:576 -msgid "Subject" -msgstr "Onderwerp" - -#: src/prefs_common.c:2965 -msgid "Font selection" -msgstr "Lettertype" - -#: src/prefs_common.c:3147 -msgid "Compose Preferences" -msgstr "Voorkeuren bericht opstellen" - -#: src/prefs_common.c:3162 -msgid "Quote message when replying" -msgstr "Citeer bericht bij antwoorden" - -#: src/prefs_common.c:3168 -msgid "Quotation mark" -msgstr "Citeerformaat" - -#: src/prefs_common.c:3181 -msgid "Quotation format:" -msgstr "Citeerformaat:" - -#: src/prefs_common.c:3202 -msgid "Forward quotation mark" -msgstr "Doorstuurformaat" - -#: src/prefs_common.c:3215 -msgid "Forward format:" -msgstr "Doorstuurformaat:" - -#: src/prefs_common.c:3237 -msgid " Description of symbols " -msgstr "Beschrijving van speciale tekens " - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "Aangepaste headers" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "Aangepaste header instellingenvenster wordt aangemaakt...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "Aangepaste header instellingen" - -#. value -#: src/prefs_customheader.c:213 src/prefs_matcher.c:390 -msgid "Value" -msgstr "Waarde" - -#: src/prefs_customheader.c:322 -msgid "Reading custom header configuration...\n" -msgstr "Inlezen aangepaste header configuratie...\n" - -#: src/prefs_customheader.c:367 -msgid "Writing custom header configuration...\n" -msgstr "Aangepaste header configuratie wordt opgeslagen...\n" - -#: src/prefs_customheader.c:492 src/prefs_display_header.c:545 -#: src/prefs_filter.c:628 src/prefs_matcher.c:1008 -msgid "Header name is not set." -msgstr "Header-naam niet ingevoerd." - -#: src/prefs_customheader.c:546 -msgid "Delete header" -msgstr "Verwijder header" - -#: src/prefs_customheader.c:547 -msgid "Do you really want to delete this header?" -msgstr "Wil je deze header werkelijk verwijderen?" - -#: src/prefs_display_header.c:190 -msgid "Creating display header setting window...\n" -msgstr "Header Weergeven instellingenvenster wordt aangemaakt...\n" - -#: src/prefs_display_header.c:213 -msgid "Display header setting" -msgstr "Header Weergeven instellingen" - -#. header name -#: src/prefs_display_header.c:240 src/prefs_matcher.c:369 -msgid "Header name" -msgstr "Header-naam" - -#: src/prefs_display_header.c:272 -msgid "Displayed Headers" -msgstr "Weergegeven headers" - -#: src/prefs_display_header.c:330 -msgid "Hidden headers" -msgstr "Verborgen headers" - -#: src/prefs_display_header.c:360 -msgid "Show all unspecified headers" -msgstr "Alle headers weergeven" - -#: src/prefs_display_header.c:385 -msgid "Reading configuration for displaying headers...\n" -msgstr "Configuratie voor het weergeven van de headers wordt ingelezen...\n" - -#: src/prefs_display_header.c:423 -msgid "Writing configuration for displaying headers...\n" -msgstr "Configuratie voor headerweergave wordt opgeslagen...\n" - -#: src/prefs_display_header.c:555 -msgid "This header is already in the list." -msgstr "Deze header staat al in de lijst." - -#: src/prefs_filter.c:189 src/prefs_filtering.c:309 src/prefs_matcher.c:287 -#: src/prefs_scoring.c:185 -msgid "Registered rules" -msgstr "Gebruikte filters" - -#: src/prefs_filter.c:191 -msgid "Creating filter setting window...\n" -msgstr "Venster Filterinstellingen wordt aangemaakt...\n" - -#: src/prefs_filter.c:218 -msgid "Filter setting" -msgstr "Filterinstellingen" - -#: src/prefs_filter.c:243 -msgid "Operator" -msgstr "Operator" - -#: src/prefs_filter.c:281 src/prefs_filter.c:641 src/prefs_filter.c:786 -#: src/prefs_filter.c:798 -msgid "(none)" -msgstr "(niets)" - -#: src/prefs_filter.c:287 -msgid "Keyword" -msgstr "Sleutelwoord" - -#: src/prefs_filter.c:308 src/prefs_matcher.c:420 -msgid "Predicate" -msgstr "Operator" - -#: src/prefs_filter.c:320 src/prefs_filter.c:331 src/prefs_filter.c:650 -#: src/prefs_filter.c:653 src/prefs_filter.c:803 src/prefs_filter.c:806 -#: src/prefs_matcher.c:126 -msgid "contains" -msgstr "bevat" - -#: src/prefs_filter.c:320 src/prefs_filter.c:331 src/prefs_filter.c:803 -#: src/prefs_filter.c:806 -msgid "not contain" -msgstr "bevat niet" - -#: src/prefs_filter.c:347 src/prefs_filtering.c:456 -msgid "Destination" -msgstr "Doel" - -#: src/prefs_filter.c:371 -msgid "Use regex" -msgstr "Gebruik regex" - -#: src/prefs_filter.c:375 -msgid "Don't receive" -msgstr "Ontvangst weigeren" - -#: src/prefs_filter.c:400 src/prefs_filtering.c:516 src/prefs_matcher.c:490 -#: src/prefs_scoring.c:277 -msgid "Register" -msgstr "Toevoegen" - -#: src/prefs_filter.c:406 src/prefs_filtering.c:522 src/prefs_matcher.c:496 -#: src/prefs_scoring.c:283 -msgid " Substitute " -msgstr "Vervangen" - -#: src/prefs_filter.c:493 -msgid "Reading filter configuration...\n" -msgstr "Filterconfiguratie wordt ingelezen...\n" - -#: src/prefs_filter.c:529 -msgid "Writing filter configuration...\n" -msgstr "Filterconfiguratie wordt opgeslagen...\n" - -#: src/prefs_filter.c:572 src/prefs_filtering.c:649 src/prefs_filtering.c:667 -#: src/prefs_matcher.c:610 src/prefs_matcher.c:684 src/prefs_scoring.c:459 -#: src/prefs_scoring.c:491 -msgid "(New)" -msgstr "(nieuw)" - -#: src/prefs_filter.c:623 src/prefs_filtering.c:760 -msgid "Destination is not set." -msgstr "Er is geen map gekozen om het heen te verplaatsen." - -#: src/prefs_filter.c:734 src/prefs_filtering.c:834 src/prefs_scoring.c:644 -msgid "Delete rule" -msgstr "Verwijder deze regel" - -#: src/prefs_filter.c:735 src/prefs_filtering.c:835 src/prefs_scoring.c:645 -msgid "Do you really want to delete this rule?" -msgstr "Wil je deze regel werkelijk verwijderen?" - -#: src/prefs_filtering.c:216 -msgid "Move" -msgstr "Verplaats" - -#: src/prefs_filtering.c:217 -msgid "Copy" -msgstr "Kopieer" - -#: src/prefs_filtering.c:220 -msgid "Unmark" -msgstr "Markeer" - -#: src/prefs_filtering.c:221 -msgid "Mark as read" -msgstr "Markeer gelezen" - -#: src/prefs_filtering.c:222 -msgid "Mark as unread" -msgstr "Markeer ongelezen" - -#: src/prefs_filtering.c:226 src/prefs_filtering.c:466 -msgid "Color" -msgstr "Kleur" - -#: src/prefs_filtering.c:311 -msgid "Creating filtering setting window...\n" -msgstr "Venster Geavanceerd Filteren instellingen wordt aangemaakt...\n" - -#: src/prefs_filtering.c:330 -msgid "Filtering setting" -msgstr "Geavanceerd-filtereninstellingen" - -#: src/prefs_filtering.c:349 src/prefs_scoring.c:225 -msgid "Condition" -msgstr "Conditie" - -#: src/prefs_filtering.c:364 src/prefs_scoring.c:240 -msgid "Define ..." -msgstr "Instellen ..." - -#: src/prefs_filtering.c:376 -msgid "Action" -msgstr "Actie" - -#: src/prefs_filtering.c:416 src/progressdialog.c:52 -msgid "Account" -msgstr "Postvak" - -#: src/prefs_filtering.c:482 -msgid "Select ..." -msgstr "Selecteer..." - -#: src/prefs_filtering.c:489 src/prefs_matcher.c:402 -msgid "Info ..." -msgstr "Info ..." - -#: src/prefs_filtering.c:714 src/prefs_filtering.c:780 src/prefs_scoring.c:538 -#: src/prefs_scoring.c:576 src/prefs_scoring.c:622 -msgid "Match string is not valid." -msgstr "Opgegeven tekst niet gevonden" - -#: src/prefs_filtering.c:743 src/prefs_scoring.c:561 src/prefs_scoring.c:607 -msgid "Score is not set." -msgstr "Score niet ingesteld." - -#: src/prefs_matcher.c:117 -msgid "or" -msgstr "of" - -#: src/prefs_matcher.c:117 -msgid "and" -msgstr "en" - -#: src/prefs_matcher.c:126 -msgid "does not contain" -msgstr "bevat niet" - -#: src/prefs_matcher.c:135 -msgid "yes" -msgstr "ja" - -#: src/prefs_matcher.c:135 -msgid "no" -msgstr "nee" - -#: src/prefs_matcher.c:139 -msgid "All messages" -msgstr "Alle berichten" - -#: src/prefs_matcher.c:140 -msgid "To" -msgstr "Aan" - -#: src/prefs_matcher.c:140 -msgid "To or Cc" -msgstr "Geadresseerde of afzender" - -#: src/prefs_matcher.c:141 -msgid "Newsgroups" -msgstr "Nieuwsgroepen" - -#: src/prefs_matcher.c:141 -msgid "In reply to" -msgstr "In antwoord op" - -#: src/prefs_matcher.c:141 -msgid "References" -msgstr "Verwijzingen" - -#: src/prefs_matcher.c:142 -msgid "Age greater than" -msgstr "Ouder dan" - -#: src/prefs_matcher.c:142 -msgid "Age lower than" -msgstr "Jonger dan" - -#: src/prefs_matcher.c:143 -msgid "Headers part" -msgstr "Header-deel" - -#: src/prefs_matcher.c:144 -msgid "Body part" -msgstr "Berichtinhoud" - -#: src/prefs_matcher.c:144 -msgid "Whole message" -msgstr "Hele bericht" - -#: src/prefs_matcher.c:145 -msgid "Unread flag" -msgstr "Ongelezen-vlag" - -#: src/prefs_matcher.c:145 -msgid "New flag" -msgstr "Nieuw-vlag" - -#: src/prefs_matcher.c:146 -msgid "Marked flag" -msgstr "Markeer-vlag" - -#: src/prefs_matcher.c:146 -msgid "Deleted flag" -msgstr "Verwijderd-vlag" - -#: src/prefs_matcher.c:147 -msgid "Replied flag" -msgstr "Beantwoord-vlag" - -#: src/prefs_matcher.c:147 -msgid "Forwarded flag" -msgstr "Doorgestuurd-vlag" - -#: src/prefs_matcher.c:148 -msgid "Score greater than" -msgstr "Score hoger dan" - -#: src/prefs_matcher.c:148 -msgid "Score lower than" -msgstr "Score lager dan" - -#: src/prefs_matcher.c:289 -msgid "Creating matcher setting window...\n" -msgstr "Venster Condities wordt aangemaakt...\n" - -#: src/prefs_matcher.c:308 -msgid "Condition setting" -msgstr "Conditie-instelling" - -#. criteria combo box -#: src/prefs_matcher.c:336 -msgid "Match type" -msgstr "Type" - -#: src/prefs_matcher.c:472 src/summary_search.c:172 -msgid "Case sensitive" -msgstr "Hoofd / kleine letters onderscheiden" - -#: src/prefs_matcher.c:473 -msgid "Use regexp" -msgstr "Gebruik regex" - -#. boolean operation -#: src/prefs_matcher.c:511 -msgid "Boolean Op" -msgstr "Logische op" - -#: src/prefs_matcher.c:994 -msgid "Value is not set." -msgstr "Geen waarde ingevoerd." - -#: src/prefs_matcher.c:1444 -msgid "" -"%\n" -"Subject\n" -"From\n" -"To\n" -"Cc\n" -"Date\n" -"Message-ID\n" -"Newsgroups\n" -"References\n" -"Filename - should not be modified\n" -"new line\n" -"escape character for quotes\n" -"quote character\n" -"%" -msgstr "" -"%\n" -"Onderwerp\n" -"Afzender\n" -"Geadresseerde\n" -"Cc\n" -"Datum\n" -"Bericht-ID\n" -"Nieuwsgroepen\n" -"Berichtverwijzingen\n" -"Bestandsnaam·-·bestand niet wijzigen!\n" -"nieuwe-regel\n" -"escape-teken·voor·aanhalingstekens\n" -"aanhalingsteken\n" -"%" - -#: src/prefs_scoring.c:187 -msgid "Creating scoring setting window...\n" -msgstr "Venster Score-instellingen wordt aangemaakt...\n" - -#: src/prefs_scoring.c:206 -msgid "Scoring setting" -msgstr "Score-instellingen" - -#: src/prefs_scoring.c:340 -msgid "Kill score" -msgstr "Score: Verwijderen" - -#: src/prefs_scoring.c:352 -msgid "Important score" -msgstr "Score: belangrijk" - -#: src/prefs_scoring.c:567 src/prefs_scoring.c:613 -msgid "Match string is not set." -msgstr "Type niet ingesteld." - -#: src/procmime.c:685 -msgid "Code conversion failed.\n" -msgstr "Codeconversie is mislukt\n" - -#: src/procmsg.c:138 src/procmsg.c:154 -msgid "Cache data is corrupted\n" -msgstr "Buffergegevens zijn corrupt\n" - -#: src/procmsg.c:203 -msgid "\tNo cache file\n" -msgstr "\tGeen bufferbestand\n" - -#: src/procmsg.c:210 -msgid "\tReading summary cache..." -msgstr "\tLijstbuffer wordt gelezen..." - -#: src/procmsg.c:215 -msgid "Cache version is different. Discarding it.\n" -msgstr "Bufferversie komt niet overeen. De buffer wordt genegeerd.\n" - -#: src/procmsg.c:283 -msgid "\tMarking the messages..." -msgstr "\tBerichten worden gemarkeerd..." - -#: src/procmsg.c:327 -#, c-format -msgid "\t%d new message(s)\n" -msgstr "\t%d nieuwe berichten\n" - -#: src/procmsg.c:463 -msgid "Mark file not found.\n" -msgstr "Markeerbestand is niet gevonden\n" - -#: src/procmsg.c:465 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "Markeerversie is ander (%d != %d). Het markeerbestand wordt genegeerd.\n" - -#: src/procmsg.c:481 -msgid "Can't open mark file with append mode.\n" -msgstr "Kan markeerbestand niet openen in de 'append-mode'\n" - -#: src/procmsg.c:486 -msgid "Can't open mark file with write mode.\n" -msgstr "Kan het markeerbestand niet openen om te schrijven\n" - -#: src/procmsg.c:669 -msgid "Sending queued message failed.\n" -msgstr "Verzenden van berichten uit de wachtrij is mislukt.\n" - -#: src/procmsg.c:727 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "Opdracht voor het afdrukken in onjuist: '%s'\n" - -#: src/progressdialog.c:53 -msgid "Status" -msgstr "Status" - -#: src/progressdialog.c:55 -msgid "Creating progress dialog...\n" -msgstr "Voortgangdialoog wordt gemaakt...\n" - -#: src/recv.c:112 -msgid "error occurred while retrieving data.\n" -msgstr "er is een fout opgetreden bij het ontvangen van de gegevens.\n" - -#: src/recv.c:152 src/recv.c:191 src/recv.c:207 -msgid "Can't write to file.\n" -msgstr "Het bestand is niet beschrijfbaar.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 src/sigstatus.c:219 -msgid "Oops: Signature not verified" -msgstr "Oeps: Handtekening is niet geverifieerd" - -#: src/rfc2015.c:140 src/rfc2015.c:175 src/sigstatus.c:222 -msgid "No signature found" -msgstr "Geen handtekening gevonden" - -#: src/rfc2015.c:143 src/sigstatus.c:225 -msgid "Good signature" -msgstr "Correcte handtekening" - -#: src/rfc2015.c:146 src/sigstatus.c:228 -msgid "BAD signature" -msgstr "SLECHTE handtekening" - -#: src/rfc2015.c:149 src/rfc2015.c:184 src/sigstatus.c:231 -msgid "No public key to verify the signature" -msgstr "Geen publieke key om de handtekening te verifiëren" - -#: src/rfc2015.c:152 src/rfc2015.c:187 src/sigstatus.c:234 -msgid "Error verifying the signature" -msgstr "Er is een fout opgetreden bij het controleren van de handtekening" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "Verschillende resultaten voor handtekeningen" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "Fout: Onbekende status" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "Goedgekeurde handtekening van \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "FOUTIEVE handtekening van \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "Kan gebruikers-ID niet vinden voor deze sleutel." - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr "\t\talias \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "Handtekening gemaakt %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "Sleutel vingerafdruk: %s\n" - -#: src/scoring.c:295 -msgid "Reading headers configuration...\n" -msgstr "Header configuratie wordt ingelezen...\n" - -#. debug -#: src/scoring.c:347 -#, c-format -msgid "syntax error : %s\n" -msgstr "Syntaxisfout: %s\n" - -#: src/scoring.c:423 -msgid "Writing scoring configuration...\n" -msgstr "Scoreconfiguratie wordt opgeslagen...\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "Selecteer sleutel voor '%s'" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "Info wordt verzameld voor '%s' ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "Selecteer keys" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "Sleutel ID" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "Waarde" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "Selecteer" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "Sleutel toevoegen" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "Kies een ander gebruikers- of sleutel-ID\n" - -#: src/send.c:166 -#, c-format -msgid "Using command to send mail: %s ...\n" -msgstr "Opdracht %s voor het verzenden van berichten: %s...\n" - -#: src/send.c:183 -msgid "Mail sent successfully ...\n" -msgstr "Berichten verzonden!\n" - -#: src/send.c:228 -msgid "Queued message header is broken.\n" -msgstr "De header van het bericht in de wachtrij is kapot.\n" - -#: src/send.c:237 -msgid "Account not found. Using current account...\n" -msgstr "Account is niet gevonden. Huidig account wordt gebruikt...\n" - -#: src/send.c:258 -msgid "Account not found.\n" -msgstr "Account is niet gevonden.\n" - -#: src/send.c:354 -#, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "Verbinding met SMTP server wordt gemaakt: %s ..." - -#: src/send.c:358 -msgid "Connecting" -msgstr "Verbinding wordt gemaakt" - -#: src/send.c:371 -msgid "Sending MAIL FROM..." -msgstr "Email wordt verzonden van..." - -#: src/send.c:372 -msgid "Sending" -msgstr "Bezig met verzenden" - -#: src/send.c:379 -msgid "Sending RCPT TO..." -msgstr "RCPT wordt verzonden naar..." - -#: src/send.c:386 -msgid "Sending DATA..." -msgstr "DATA wordt verzonden..." - -#: src/send.c:402 -#, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "Bericht wordt verzonden (%d / %d bytes)" - -#: src/send.c:419 -msgid "Quitting..." -msgstr "Bezig met afsluiten..." - -#: src/send.c:449 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "Kan geen verbindingmaken met de SMTP server: %s:%d\n" - -#: src/send.c:456 -msgid "SSL connection failed" -msgstr "SSL-verbinding mislukt" - -#: src/send.c:466 -msgid "Error occurred while sending HELO\n" -msgstr "Er is een fout opgetreden bij het verzenden van de HELO\n" - -#: src/send.c:477 -msgid "Error occurred while sending STARTTLS\n" -msgstr "Fout bij zenden STARTTLS\n" - -#: src/send.c:497 -msgid "Sending message" -msgstr "Bericht wordt verzonden" - -#: src/setup.c:43 -msgid "Mailbox setting" -msgstr "Postvakinstelling" - -#: 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 "" -"U zult eerst de lokatie van de mailbox moeten geven.\n" -"U kunt een bestaande mailbox in MH formaat gebruiken.\n" -"Als u twijfelt, dan kunt u het beste gewoon op OK klikken." - -#: src/sigstatus.c:129 -msgid "Checking signature" -msgstr "Handtekening wordt geverifieerd" - -#: src/sourcewindow.c:76 -msgid "Creating source window...\n" -msgstr "Bronvenster wordt aangemaakt...\n" - -#: src/sourcewindow.c:80 -msgid "Source of the message" -msgstr "Broncode van het bericht" - -#: src/sourcewindow.c:140 -#, c-format -msgid "Displaying the source of %s ...\n" -msgstr "Bron wordt weergegeven voor %s ...\n" - -#: src/sourcewindow.c:142 -#, c-format -msgid "%s - Source" -msgstr "%s - Broncode" - -#: src/summary_search.c:99 src/summary_search.c:190 -msgid "Search" -msgstr "Zoek" - -#: src/summary_search.c:178 -msgid "Backward search" -msgstr "Zoek achteruit" - -#: src/summary_search.c:184 -msgid "Select all matched" -msgstr "Selecteer alle gevonden resultaten" - -#: src/summary_search.c:191 -msgid "Clear" -msgstr "Legen" - -#: src/summary_search.c:286 -msgid "Search failed" -msgstr "Zoeken mislukt" - -#: src/summary_search.c:287 -msgid "Search string not found." -msgstr "Opgegeven tekst niet gevonden" - -#: src/summary_search.c:292 -msgid "Beginning of list reached; continue from end?" -msgstr "Begin van de lijst bereikt; verdergaan vanaf het einde?" - -#: src/summary_search.c:294 -msgid "End of list reached; continue from beginning?" -msgstr "Einde van de lijst bereikt; verdergaan vanaf het begin?" - -#: src/summary_search.c:296 -msgid "Search finished" -msgstr "Zoeken voltooid" - -#: src/summaryview.c:325 -msgid "/M_ove..." -msgstr "/_Verplaats..." - -#: src/summaryview.c:326 -msgid "/_Copy..." -msgstr "/_Kopieer..." - -#: src/summaryview.c:328 -msgid "/E_xecute" -msgstr "/_Doen!" - -#: src/summaryview.c:329 -msgid "/_Mark" -msgstr "/_Markeer" - -#: src/summaryview.c:330 -msgid "/_Mark/_Mark" -msgstr "/_Markeer/_Markeer" - -#: src/summaryview.c:331 -msgid "/_Mark/_Unmark" -msgstr "/_Markeer/D_emarkeer" - -#: src/summaryview.c:332 -msgid "/_Mark/---" -msgstr "/_Markeer/---" - -#: src/summaryview.c:333 -msgid "/_Mark/Mark as unr_ead" -msgstr "/_Markeer/Markeer als _ongelezen" - -#: src/summaryview.c:334 -msgid "/_Mark/Mark as rea_d" -msgstr "/_Markeer/Markeer als 'wordt gelezen'" - -#: src/summaryview.c:336 -msgid "/_Mark/Mark all read" -msgstr "/_Markeer/Markeer alles gelezen" - -#: src/summaryview.c:338 -msgid "/_Mark/Ignore thread" -msgstr "/_Markeer/Markeer als 'Negeren'" - -#: src/summaryview.c:339 -msgid "/_Mark/Unignore thread" -msgstr "/_Markeer/Markeer als 'Niet negeren'" - -#: src/summaryview.c:342 -msgid "/_Reply" -msgstr "/_Antwoord" - -#: src/summaryview.c:343 -msgid "/Repl_y to sender" -msgstr "/Antwoord _iedereen" - -#: src/summaryview.c:344 -msgid "/Follow-up and reply to" -msgstr "/Doorsturen en beantwoorden" - -#: src/summaryview.c:345 -msgid "/Reply to a_ll" -msgstr "/Antwoord _iedereen" - -#: src/summaryview.c:346 -msgid "/_Forward" -msgstr "/D_oorsturen" - -#: src/summaryview.c:347 -msgid "/Forward as a_ttachment" -msgstr "/Doorsturen als _bijvoeging" - -#: src/summaryview.c:350 -msgid "/Open in new _window" -msgstr "/Open in _nieuw venster" - -#: src/summaryview.c:351 -msgid "/View so_urce" -msgstr "/B_ron weergeven" - -#: src/summaryview.c:352 -msgid "/Show all _header" -msgstr "/Vo_lledig header" - -#: src/summaryview.c:353 -msgid "/Re-_edit" -msgstr "/Bewerken" - -#: src/summaryview.c:356 -msgid "/_Print..." -msgstr "/Afdrukken..." - -#: src/summaryview.c:358 -msgid "/Select _all" -msgstr "/Selecteer alles" - -#: src/summaryview.c:497 -msgid "Label" -msgstr "Label" - -#: src/summaryview.c:543 -msgid "M" -msgstr "M" - -#: src/summaryview.c:543 -msgid "U" -msgstr "O" - -#: src/summaryview.c:558 -msgid "Creating summary view...\n" -msgstr "Venster Berichtenlijst wordt aangemaakt...\n" - -#: src/summaryview.c:573 -msgid "No." -msgstr "Nee." - -#: src/summaryview.c:878 -msgid "Process mark" -msgstr "Verwerk markering" - -#: src/summaryview.c:879 -msgid "Some marks are left. Process it?" -msgstr "Sommige markeringen zijn nog aanwezig. Verwerken?" - -#: src/summaryview.c:908 -msgid "" -"empty folder\n" -"\n" -msgstr "lege map\n" - -#: src/summaryview.c:920 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Map wordt ingelezen (%s)..." - -#: src/summaryview.c:1214 -msgid "No unread message" -msgstr "Geen ongelezen berichten" - -#: src/summaryview.c:1215 -msgid "No unread message found. Go to next folder?" -msgstr "Geen ongelezen berichten gevonden. Doorgaan naar de volgende map?" - -#: src/summaryview.c:1239 src/summaryview.c:1269 -msgid "No more marked messages" -msgstr "Laatste gemarkeerde bericht" - -#: src/summaryview.c:1240 -msgid "No marked message found. Search from the beginning?" -msgstr "Geen gemarkeerde berichten gevonden. Opnieuw beginnen?" - -#: src/summaryview.c:1248 src/summaryview.c:1278 -msgid "No marked messages." -msgstr "Geen gemarkeerde berichten." - -#: src/summaryview.c:1270 -msgid "No marked message found. Search from the end?" -msgstr "Geen gemarkeerde berichten gevonden. Opnieuw?" - -#: src/summaryview.c:1458 src/summaryview.c:1460 -msgid "Attracting messages by subject..." -msgstr "Berichten worden aangetrokken op onderwerp..." - -#: src/summaryview.c:1603 -#, c-format -msgid "%d deleted" -msgstr "%d verwijderd" - -#: src/summaryview.c:1607 -#, c-format -msgid "%s%d moved" -msgstr "%s%d verplaatst" - -#: src/summaryview.c:1608 src/summaryview.c:1615 -msgid ", " -msgstr "," - -#: src/summaryview.c:1613 -#, c-format -msgid "%s%d copied" -msgstr "%s%d gekopieerd" - -#: src/summaryview.c:1630 -msgid " item(s) selected" -msgstr "item(s) geselecteerd" - -#: src/summaryview.c:1641 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "nieuw: %d, ongelezen:%d, totaal: %d (%s)" - -#: src/summaryview.c:1647 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "nieuw: %d, ongelezen:%d, totaal: %d" - -#: src/summaryview.c:1697 src/summaryview.c:1698 -msgid "Sorting summary..." -msgstr "Lijst wordt gesorteerd..." - -#: src/summaryview.c:1764 -msgid "\tSetting summary from message data..." -msgstr "\t" - -#: src/summaryview.c:1766 -msgid "Setting summary from message data..." -msgstr "Samenvatting wordt ingesteld van berichtinformatie..." - -#: src/summaryview.c:2000 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "Samenvattingbuffer wordt weggeschreven (%s)..." - -#: src/summaryview.c:2068 -msgid "(No Date)" -msgstr "(Geen datum)" - -#: src/summaryview.c:2387 -#, c-format -msgid "Message %d is marked\n" -msgstr "Bericht %d is gemarkeerd\n" - -#: src/summaryview.c:2418 -#, c-format -msgid "Message %d is marked as read\n" -msgstr "Bericht %d is gemarkeerd als gelezen.\n" - -#: src/summaryview.c:2462 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Bericht %d is gemarkeerd als ongelezen\n" - -#: src/summaryview.c:2516 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Bericht %s/%d staat klaar verwijderd te worden\n" - -#: src/summaryview.c:2530 -msgid "Current folder is Trash." -msgstr "Huidige map is de Prullenbak" - -#: src/summaryview.c:2552 src/summaryview.c:2554 -msgid "Deleting duplicated messages..." -msgstr "Dubbele berichten worden verwijderd..." - -#: src/summaryview.c:2612 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Bericht %s/%d is gedemarkeerd\n" - -#: src/summaryview.c:2671 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "Bericht %d staat klaar verplaatst te worden naar %s\n" - -#: src/summaryview.c:2683 -msgid "Destination is same as current folder." -msgstr "Doel is gelijk aan de huidige map." - -#: src/summaryview.c:2757 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "Bericht %d staat klaar gekopieerd te worden naar %s\n" - -#: src/summaryview.c:2770 -msgid "Destination to copy is same as current folder." -msgstr "Doel is gelijk aan de huidige map." - -#: src/summaryview.c:2805 -msgid "Selecting all messages..." -msgstr "Alle berichten worden geselecteerd..." - -#: src/summaryview.c:2859 -msgid "Print" -msgstr "Afdrukken" - -#: src/summaryview.c:2860 -#, c-format -msgid "" -"Enter the print command line:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Geef de afdrukopdracht:\n" -"('%s' zal vervangen worden door de bestandsnaam)" - -#: src/summaryview.c:2866 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"Afdrukopdracht is ongeldig:\n" -"'%s'" - -#: src/summaryview.c:3102 src/summaryview.c:3103 -msgid "Building threads..." -msgstr "Discussies worden bij elkaar gevoegd..." - -#: src/summaryview.c:3125 src/summaryview.c:3126 -msgid "Unthreading..." -msgstr "Discussies worden uit elkaar gehaald..." - -#: src/summaryview.c:3148 -msgid "Unthreading for execution..." -msgstr "Discussies worden uit elkaar gehaald voor de uitvoering..." - -#: src/summaryview.c:3244 -msgid "filtering..." -msgstr "Bezig met filteren..." - -#: src/summaryview.c:3245 -msgid "Filtering..." -msgstr "Bezig met filteren..." - -#: src/summaryview.c:3377 -#, c-format -msgid "Go to %s\n" -msgstr "Ga naar %s\n" - -#: src/summaryview.c:3733 -msgid "Add sender to address book" -msgstr "Afzender toevoegen aan adresboek" - -#: src/summaryview.c:3979 -#, c-format -msgid "Message %d is marked as ignore thread\n" -msgstr "Bericht %d is gemarkeerd als negeren\n" - -#: src/summaryview.c:4010 -#, c-format -msgid "Message %d is marked as unignore thread\n" -msgstr "Bericht %d is gemarkeerd als niet negeren\n" - -#: src/textview.c:139 -msgid "Creating text view...\n" -msgstr "Tekstvenster wordt aangemaakt...\n" - -#: src/textview.c:371 -msgid "To save this part, pop up the context menu with " -msgstr "" -"Om dit deel te bewaren, kunt u met de rechter muisknop het contextmenu " -"oproepen" - -#: src/textview.c:372 -msgid "right click and select `Save as...', " -msgstr "en de optie 'Opslaan als...' selecteren," - -#: src/textview.c:373 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "of druk op de 'y'-toets.\n" - -#: src/textview.c:375 -msgid "To display this part as a text message, select " -msgstr "Om dit gedeelte weer te geven als een tekstbericht" - -#: src/textview.c:376 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "selecteert u de optie 'Als tekst weergeven', of druk op de 't'-toets.\n" - -#: src/textview.c:378 -msgid "To open this part with external program, select " -msgstr "Om dit deel te openen met een extern programma selecteert u" - -#: src/textview.c:379 -msgid "`Open' or `Open with...', " -msgstr "de optie 'Openen' of 'Openen met...'," - -#: src/textview.c:380 -msgid "or double-click, or click the center button, " -msgstr "of dubbelklik, of klik met de middelste muisknop," - -#: src/textview.c:381 -msgid "or press `l' key." -msgstr "of druk op de 'l'-toets." - -#: src/textview.c:400 -msgid "This signature has not been checked yet.\n" -msgstr "Deze handtekening is nog niet gecontroleerd.\n" - -#: src/textview.c:401 -msgid "To check it, pop up the context menu with\n" -msgstr "Om te controleren kunt u met de rechter muisknop het contextmenu oproepen\n" - -#: src/textview.c:402 -msgid "right click and select `Check signature'.\n" -msgstr "en de optie'Controleer handtekening' selecteren.\n" - -#: src/utils.c:1591 -#, c-format -msgid "File copy from %s to %s failed.\n" -msgstr "Fout bij kopieren van %s naar %s.\n" - -#: src/utils.c:1689 -#, c-format -msgid "move_file(): file %s already exists." -msgstr "De map '%s' bestaat al." - -#: src/utils.c:1830 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "Open URI opdrachtregel is onjuist: '%s'" - -#: src/ssl.c:41 -msgid "SSLv23 not available\n" -msgstr "Geen SSLv23 aanwezig\n" - -#: src/ssl.c:43 -msgid "SSLv23 available\n" -msgstr "SSLv23 beschikbaar\n" - -#: src/ssl.c:48 -msgid "TLSv1 not available\n" -msgstr "TLSv1 niet beschikbaar\n" - -#: src/ssl.c:50 -msgid "TLSv1 available\n" -msgstr "TLSv1 beschikbaar\n" - -#: src/ssl.c:75 src/ssl.c:82 -msgid "SSL method not available\n" -msgstr "SSL-opdracht niet beschikbaar\n" - -#: src/ssl.c:88 -msgid "Unknown SSL method *PROGRAM BUG*\n" -msgstr "Onbekende SSL-opdracht *PROGRAMMA FOUT*\n" - -#: src/ssl.c:94 -msgid "Error creating ssl context\n" -msgstr "Geen SSL-context\n" - -#: src/ssl.c:101 -#, c-format -msgid "SSL connect failed (%s)\n" -msgstr "SSL verbinding mislukt (%s)\n" - -#. Get the cipher -#: src/ssl.c:108 -#, c-format -msgid "SSL connection using %s\n" -msgstr "SSL-verbinding %s\n" - -#: src/ssl.c:115 -msgid "Server certificate:\n" -msgstr "Server certificaat:\n" - -#: src/ssl.c:118 -#, c-format -msgid " Subject: %s\n" -msgstr " Onderwerp: %s\n" - -#: src/ssl.c:123 -#, c-format -msgid " Issuer: %s\n" -msgstr "..Uitgever: %s\n" - diff --git a/po/pl.po b/po/pl.po deleted file mode 100644 index 65e7cfb45..000000000 --- a/po/pl.po +++ /dev/null @@ -1,4491 +0,0 @@ -# Polish translation of Sylpheed -# Copyright (C) 2000 Free Software Foundation, Inc. -# Przemyslaw Sulek <psulek@plo.pl> <przemek@obrpr.plock.pl> <pc2000@poczta.onet.pl> -# Jan Mura <jan_mura@altavista.com>, 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: sylpheed\n" -"POT-Creation-Date: 2001-08-14 21:10+0900\n" -"PO-Revision-Date: 2000-11-01 15:39+0100\n" -"Last-Translator: Przemyslaw Sulek <psulek@plo.pl>\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:90 -msgid "About" -msgstr "O programie" - -#: src/about.c:199 -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 "" -"Czê¶ci kodu programu wziête z fetchmail (c) 1997 by Eric S. Raymond. S± one " -"równie¿ zastrze¿one przez Carla Harrisa, 1993 i 1995. Zatrzega siê prawa w " -"celu ochrony wolnej dystrybucji\n" -"kodu.\n" -"\n" - -#: src/about.c:205 -msgid "" -"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " -"copyright by takeshi@SoftAgency.co.jp.\n" -"\n" -msgstr "" -"Kcc jest zastrze¿ony przez Yasuhiro Tonooka <tonooka@msi.co.jp>, a libkcc je " -"chroniony prawami takeshi@SoftAgency.co.jp.\n" -"\n" - -#: src/about.c:210 -msgid "" -"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" -"\n" -msgstr "" -"GPGME jest zastrze¿one przez Wernera Kocha <dd9jn@gnu.org> w 2001r\n" -"\n" - -#: src/about.c:214 -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 "" -"Niniejszy program jest wolnym oprogramowaniem; mo¿esz go \n" -"rozprowadzaæ dalej i/lub modyfikowaæ na warunkach Powszechnej\n" -"Licencji Publicznej GNU, wydanej przez Fundacjê Wolnego\n" -"Oprogramowania - wed³ug wersji 2-giej tej Licencji lub której¶\n" -"z pó¼niejszych wersji. \n" -"\n" - -#: src/about.c:220 -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 "" -"Niniejszy program rozpowszechniany jest z nadziej±, i¿ bêdzie on \n" -"u¿yteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domy¶lnej \n" -"gwarancji PRZYDATNO¦CI HANDLOWEJ albo PRZYDATNO¦CI DO OKRE¦LONYCH \n" -"ZASTOSOWAÑ. W celu uzyskania bli¿szych informacji - Powszechna \n" -"Licencja Publiczna GNU. \n" -"\n" - -#: src/about.c:226 -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 "" -"Z pewno¶ci± wraz z niniejszym programem otrzyma³e¶ te¿ egzemplarz " -"Powszechnej Licencji Publicznej GNU (GNU General Public License);je¶li nie - " -"napisz do Free Software Foundation, Inc., 675 Mass Ave,Cambridge, MA 02139, " -"USA." - -#: src/about.c:233 src/addressbook.c:1307 src/alertpanel.c:234 -#: src/compose.c:1486 src/compose.c:3147 src/export.c:185 src/foldersel.c:177 -#: src/grouplistdialog.c:204 src/import.c:189 src/inputdialog.c:160 -#: src/main.c:345 src/main.c:353 src/mainwindow.c:1652 src/mimeview.c:723 -#: src/passphrase.c:119 src/prefs.c:467 src/prefs_common.c:1996 -#: src/prefs_common.c:2138 src/prefs_common.c:2384 src/prefs_common.c:2500 -#: src/prefs_customheader.c:162 src/prefs_display_header.c:203 -#: src/summaryview.c:2144 src/summaryview.c:2692 -msgid "OK" -msgstr "OK" - -#: src/account.c:112 -msgid "Reading all config for each account...\n" -msgstr "Czytanie ustawieñ wszystkich kont...\n" - -#: src/account.c:127 -#, c-format -msgid "Found label: %s\n" -msgstr "Znaleziono etykietê: %s\n" - -#: src/account.c:241 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" -"Niektóre okna edycji s± otwarte.\n" -"Zamknij wszystkie okna edycji przed zmianami konta." - -#: src/account.c:247 -msgid "Opening account edit window...\n" -msgstr "Otwieranie okna edycji konta...\n" - -#: src/account.c:394 -msgid "Creating account edit window...\n" -msgstr "Tworzenie okna edycji konta...\n" - -#: src/account.c:399 -msgid "Edit accounts" -msgstr "Edycja kont" - -#: src/account.c:429 src/addressbook.c:303 src/addressbook.c:1303 -#: src/compose.c:2259 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "Nazwa" - -#: src/account.c:430 src/prefs_account.c:661 -msgid "Protocol" -msgstr "Protokó³" - -#: src/account.c:431 -msgid "Server" -msgstr "Serwer" - -#: src/account.c:454 src/addressbook.c:423 src/prefs_customheader.c:242 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "Dodaj" - -#: src/account.c:460 -msgid "Edit" -msgstr "Edycja" - -#: src/account.c:466 src/prefs_customheader.c:249 -msgid " Delete " -msgstr " Usuñ " - -#: src/account.c:472 src/prefs_customheader.c:296 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "W dó³" - -#: src/account.c:478 src/prefs_customheader.c:290 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "W górê" - -#: src/account.c:492 -#, fuzzy -msgid " Set as default account " -msgstr " Ustaw jako podstawowe konto " - -#: src/account.c:498 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "Zamknij" - -#: src/account.c:554 -msgid "Delete account" -msgstr "Usuñ konto" - -#: src/account.c:555 -msgid "Do you really want to delete this account?" -msgstr "Czy naprawdê usun±æ to konto?" - -#: src/account.c:556 src/addressbook.c:625 src/addressbook.c:1238 -#: src/compose.c:3321 src/folderview.c:1553 src/folderview.c:1596 -#: src/folderview.c:1695 src/folderview.c:1740 src/folderview.c:1838 -#: src/folderview.c:1871 src/mainwindow.c:941 src/prefs_customheader.c:548 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:617 -#: src/summaryview.c:873 -msgid "Yes" -msgstr "Tak" - -#: src/account.c:556 src/compose.c:3321 src/folderview.c:1553 -#: src/folderview.c:1596 src/folderview.c:1695 src/folderview.c:1740 -#: src/folderview.c:1838 src/folderview.c:1871 -msgid "+No" -msgstr "+Nie" - -#: src/address.c:209 -msgid "Reading addressbook file..." -msgstr "Czytanie pliku ksi±¿ki adresowej..." - -#: src/address.c:222 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s nie wystêpuje.\n" - -#. gtkut_ctree_set_focus_row(ctree, summaryview->selected); -#: src/address.c:244 src/address.c:515 src/imap.c:1217 src/imap.c:1236 -#: src/mainwindow.c:668 src/mainwindow.c:1280 src/mh.c:811 src/mh.c:818 -#: src/news.c:747 src/procmsg.c:258 src/procmsg.c:319 src/summaryview.c:1055 -#: src/summaryview.c:1261 src/summaryview.c:1345 src/summaryview.c:1406 -#: src/summaryview.c:1929 src/summaryview.c:2460 src/summaryview.c:2497 -#: src/summaryview.c:2518 src/summaryview.c:2574 -msgid "done.\n" -msgstr "zrobiono.\n" - -#: src/address.c:496 -msgid "Exporting addressbook to file..." -msgstr "Eksportowanie ksi±¿ki adresowej do pliku..." - -#: src/address.c:511 -msgid "failed to write addressbook data.\n" -msgstr "b³±d przy zapisie danych ksi±¿ki adresowej.\n" - -#: src/addressbook.c:201 src/compose.c:375 src/mainwindow.c:333 -msgid "/_File" -msgstr "/_Plik" - -#: src/addressbook.c:202 -msgid "/_File/New _address" -msgstr "/_Plik/Nowy _adres" - -#: src/addressbook.c:203 -msgid "/_File/New _group" -msgstr "/_Plik/Nowa _grupa" - -#: src/addressbook.c:204 -msgid "/_File/New _folder" -msgstr "/_Plik/Nowy _folder" - -#: src/addressbook.c:205 src/addressbook.c:208 src/compose.c:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -msgid "/_File/---" -msgstr "/_Plik/---" - -#: src/addressbook.c:206 -msgid "/_File/_Edit" -msgstr "/_Plik/_Edycja" - -#: src/addressbook.c:207 -msgid "/_File/_Delete" -msgstr "/_Plik/_Usuñ" - -#: src/addressbook.c:209 src/compose.c:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/_Plik/_Zamknij" - -#: src/addressbook.c:210 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/Pomo_c" - -#: src/addressbook.c:211 src/compose.c:420 src/mainwindow.c:526 -msgid "/_Help/_About" -msgstr "/Pomo_c/_O programie" - -#: src/addressbook.c:216 src/addressbook.c:226 -msgid "/New _address" -msgstr "/Nowy _adres" - -#: src/addressbook.c:217 src/addressbook.c:227 -msgid "/New _group" -msgstr "/Nowa _grupa" - -#: src/addressbook.c:218 src/addressbook.c:228 -msgid "/New _folder" -msgstr "/Nowy _folder" - -#: src/addressbook.c:219 src/addressbook.c:229 src/compose.c:369 -#: src/folderview.c:214 src/folderview.c:217 src/folderview.c:226 -#: src/folderview.c:229 src/folderview.c:238 src/folderview.c:240 -#: src/summaryview.c:308 src/summaryview.c:315 src/summaryview.c:318 -#: src/summaryview.c:323 src/summaryview.c:326 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:220 src/addressbook.c:230 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/_Edycja" - -#: src/addressbook.c:221 src/addressbook.c:231 src/summaryview.c:299 -msgid "/_Delete" -msgstr "/_Usuñ" - -#: src/addressbook.c:303 -msgid "E-Mail address" -msgstr "Adres e-mail" - -#: src/addressbook.c:303 src/addressbook.c:1305 -msgid "Remarks" -msgstr "Uwagi" - -#: src/addressbook.c:309 src/compose.c:2819 src/prefs_common.c:1630 -msgid "Address book" -msgstr "Ksi±¿ka adresowa" - -#: src/addressbook.c:397 -msgid "Name:" -msgstr "Nazwa:" - -#: src/addressbook.c:420 src/addressbook.c:1238 src/mainwindow.c:1397 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -msgid "Delete" -msgstr "Usuñ" - -#: src/addressbook.c:426 -msgid "Lookup" -msgstr "Wyszukaj" - -#: src/addressbook.c:436 src/headerview.c:55 src/summary_search.c:152 -msgid "To:" -msgstr "Do:" - -#: src/addressbook.c:440 -msgid "Cc:" -msgstr "Kopia:" - -#: src/addressbook.c:444 -msgid "Bcc:" -msgstr "Ukryta kopia:" - -#: src/addressbook.c:545 src/addressbook.c:1624 -msgid "Common address" -msgstr "Wspólny adres:" - -#: src/addressbook.c:547 src/addressbook.c:1626 -msgid "Personal address" -msgstr "Osobisty adres:" - -#: src/addressbook.c:623 -msgid "Delete address(es)" -msgstr "Usuñ adres(y)" - -#: src/addressbook.c:624 -msgid "Really delete the address(es)?" -msgstr "Czy naprawdê chcesz usun±æ ten adres(y)?" - -#: src/addressbook.c:625 src/addressbook.c:1238 src/mainwindow.c:941 -#: src/prefs_customheader.c:548 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:617 src/summaryview.c:873 -msgid "No" -msgstr "Nie" - -#: src/addressbook.c:1004 src/folderview.c:1426 src/folderview.c:1627 -msgid "New folder" -msgstr "Nowy katalog" - -#: src/addressbook.c:1005 src/folderview.c:1427 -msgid "Input the name of new folder:" -msgstr "Podaj nazwê nowego katalogu:" - -#: src/addressbook.c:1006 src/folderview.c:1428 src/folderview.c:1631 -msgid "NewFolder" -msgstr "Nowy katalog" - -#: src/addressbook.c:1017 src/addressbook.c:1068 src/addressbook.c:1149 -#: src/addressbook.c:1201 -msgid "The name already exists." -msgstr "Taka nazwa ju¿ istnieje." - -#: src/addressbook.c:1055 -msgid "New group" -msgstr "Nowa grupa" - -#: src/addressbook.c:1056 -msgid "Input the name of new group:" -msgstr "Podaj nazwê nowej grupy:" - -#: src/addressbook.c:1057 -msgid "NewGroup" -msgstr "Nowa grupa" - -#: src/addressbook.c:1136 -msgid "Edit group" -msgstr "Edytuj grupê" - -#: src/addressbook.c:1137 -msgid "Input the new name of group:" -msgstr "Podaj nazwê nowej grupy:" - -#: src/addressbook.c:1187 -msgid "Edit folder" -msgstr "Edytuj folder" - -#: src/addressbook.c:1188 -msgid "Input the new name of folder:" -msgstr "Podaj nazwê nowego foldera:" - -#: src/addressbook.c:1237 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Naprawdê usun±æ '%s' ?" - -#: src/addressbook.c:1285 -msgid "Edit address" -msgstr "Edytuj adres" - -#: src/addressbook.c:1304 src/compose.c:2818 src/select-keys.c:302 -msgid "Address" -msgstr "Adres" - -#: src/addressbook.c:1308 src/compose.c:1486 src/compose.c:3148 -#: src/compose.c:3718 src/export.c:186 src/foldersel.c:178 -#: src/grouplistdialog.c:205 src/import.c:190 src/inputdialog.c:161 -#: src/main.c:345 src/main.c:353 src/mainwindow.c:1652 src/mimeview.c:723 -#: src/passphrase.c:123 src/prefs.c:468 src/prefs_common.c:1997 -#: src/prefs_common.c:2501 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:77 -#: src/select-keys.c:326 src/summaryview.c:617 src/summaryview.c:2144 -#: src/summaryview.c:2692 -msgid "Cancel" -msgstr "Anuluj" - -#: src/addressbook.c:1591 -#, fuzzy, c-format -msgid "The address <%s> has already been registered." -msgstr "Katalog '%s' ju¿ istnieje." - -#: src/alertpanel.c:119 src/compose.c:3321 src/main.c:343 -msgid "Notice" -msgstr "Notatka" - -#: src/alertpanel.c:132 src/main.c:225 -msgid "Warning" -msgstr "Ostrze¿enie" - -#: src/alertpanel.c:145 src/inc.c:432 -msgid "Error" -msgstr "B³±d" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "Tworzenie panelu z ostrze¿eniami...\n" - -#: src/alertpanel.c:271 -msgid "Show this message next time" -msgstr "Poka¿ tê wiadomo¶æ nastêpnym razem" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "nie mogê zaalokowaæ pamiêci\n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/Dod_aj..." - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/_Usuñ" - -#: src/compose.c:370 src/folderview.c:218 src/folderview.c:230 -#: src/folderview.c:241 -msgid "/_Property..." -msgstr "/_W³a¶ciwo¶ci..." - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/_Plik/_Do³±cz plik" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/_Plik/Wstaw pl_ik" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/_Plik/Wstaw p_odpis" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/_Edycja/_Cofnij" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/_Edycja/Po_nów" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/_Edycja/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/_Edycja/Wy_tnij" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/_Edycja/_Kopiuj" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/_Edycja/_Wstaw" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/_Edycja/W_ybierz wszystko" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/_Edycja/Zawijaj _linie" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/_Edycja/Edytuj za pomoc± z_ewnêtrznego edytora" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/_Wiadomo¶æ" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/_Wiadomo¶æ/Wy¶_lij" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/_Wiadomo¶æ/Wy¶lij _pó¼niej" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "/_Wiadomo¶æ/Zapisz w folderze _draft" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/_Wiadomo¶æ/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "/_Wiadomo¶æ/_Do" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "/_Wiadomo¶æ/_Kopia do" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/_Wiadomo¶æ/Ukry_ta kopia" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/_Wiadomo¶æ/_Odpowiedz do" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "/_Wiadomo¶æ/_Przeka¿ do" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/_Wiadomo¶æ/_Do³±cz" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "_Wiadomo¶æ/P_odpisz" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "/_Wiadomo¶æ/_Szyfruj" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/_Narzêdzia" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/_Narzêdzia/Poka¿ li_nijkê" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/_Narzêdzia/_Ksi±¿ka adresowa" - -#: src/compose.c:500 src/compose.c:570 src/compose.c:630 src/procmsg.c:685 -msgid "Can't get text part\n" -msgstr "Nie mogê pobraæ czê¶ci tekstu\n" - -#: src/compose.c:562 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: brak pliku\n" - -#: src/compose.c:574 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"Pocz±tek przekazywanej wiadomo¶ci:\n" -"\n" - -#: src/compose.c:1250 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "Plik %s nie wystêpuje\n" - -#: src/compose.c:1254 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "Nie mo¿na odczytaæ wielko¶ci pliku %s\n" - -#: src/compose.c:1258 -#, c-format -msgid "File %s is empty\n" -msgstr "Plik %s jest pusty\n" - -#: src/compose.c:1279 -#, c-format -msgid "Message: %s" -msgstr "Wiadomo¶æ: %s" - -#: src/compose.c:1385 -msgid " [Edited]" -msgstr " [Edytowany]" - -#: src/compose.c:1387 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - Twórz wiadomo¶æ%s" - -#: src/compose.c:1390 -#, c-format -msgid "Compose message%s" -msgstr "Twórz wiadomo¶æ%s" - -#: src/compose.c:1412 src/compose.c:3611 -msgid "Recipient is not specified." -msgstr "Nie podano odbiorcy." - -#: src/compose.c:1430 -msgid "can't get recipient list." -msgstr "nie mo¿na otworzyæ listy odbiorców." - -#: src/compose.c:1448 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" -"Nie podano konta, z którego wysy³asz pocztê.\n" -"Wybierz konto przed wys³aniem." - -#: src/compose.c:1469 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "B³±d podczas wysy³ania wiadomo¶ci do %s" - -#: src/compose.c:1483 -msgid "Queueing" -msgstr "Kolejkowanie" - -#: src/compose.c:1484 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"B³±d podczas wysy³ania wiadomo¶ci.\n" -"Wstawiæ tê wiadomo¶æ do kolejki?" - -#: src/compose.c:1490 src/compose.c:3623 -msgid "Can't queue the message." -msgstr "Nie mo¿na wstawiæ wiadomo¶ci do kolejki." - -#: src/compose.c:1493 -msgid "Error occurred while sending the message." -msgstr "B³±d podczas wysy³ania wiadomo¶ci." - -#: src/compose.c:1500 src/compose.c:3630 -msgid "Can't save the message to outbox." -msgstr "Nie mo¿na zapisaæ wiadomo¶ci do outbox." - -#: src/compose.c:1526 src/compose.c:1649 src/compose.c:1736 src/utils.c:1551 -msgid "can't change file mode\n" -msgstr "nie mo¿na zmieniæ praw pliku\n" - -#: src/compose.c:1552 -msgid "Can't convert the codeset of the message." -msgstr "Nie mo¿na skonwertowaæ strony kodowej wiadomo¶ci" - -#: src/compose.c:1561 -msgid "can't write headers\n" -msgstr "nie mo¿na zapisaæ nag³ówków\n" - -#: src/compose.c:1681 -msgid "saving sent message...\n" -msgstr "zapisywanie wys³anej wiadomo¶ci...\n" - -#: src/compose.c:1686 -msgid "can't save message\n" -msgstr "nie mo¿na zapisaæ wiadomo¶ci\n" - -#: src/compose.c:1692 src/compose.c:1800 -msgid "can't open mark file\n" -msgstr "nie mo¿na otworzyæ pliku zaznaczeñ\n" - -#: src/compose.c:1716 -msgid "queueing message...\n" -msgstr "kolejkowanie wiadomo¶ci...\n" - -#: src/compose.c:1791 -msgid "can't queue the message\n" -msgstr "nie mo¿na zapisaæ wiadomo¶ci do kolejki\n" - -#: src/compose.c:1830 -#, c-format -msgid "Can't open file %s\n" -msgstr "Nie mo¿na otworzyæ pliku %s\n" - -#: src/compose.c:2185 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "wygenerowany Message-ID: %s\n" - -#: src/compose.c:2259 src/compose.c:3119 -msgid "MIME type" -msgstr "typ MIME" - -#: src/compose.c:2259 src/mimeview.c:139 src/prefs_common.c:2495 -#: src/select-keys.c:299 src/summaryview.c:373 -msgid "Size" -msgstr "Wielko¶æ" - -#: src/compose.c:2276 -msgid "Creating compose window...\n" -msgstr "Tworzenie okna edycji...\n" - -#: src/compose.c:2322 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "Od:" - -#: src/compose.c:2746 src/mainwindow.c:1351 src/prefs_account.c:530 -#: src/prefs_common.c:679 -msgid "Send" -msgstr "Wy¶lij" - -#: src/compose.c:2747 -msgid "Send message" -msgstr "Wy¶lij wiadomo¶æ" - -#: src/compose.c:2753 -msgid "Send later" -msgstr "Wy¶lij pó¼niej" - -#: src/compose.c:2754 -msgid "Put into queue folder and send later" -msgstr "Umie¶æ w katalogu kolejki i wy¶lij pó¼niej" - -#: src/compose.c:2761 src/folderview.c:814 -msgid "Draft" -msgstr "Szablon" - -#: src/compose.c:2762 -msgid "Save to draft folder" -msgstr "Zapisz w katalogu szablonów" - -#: src/compose.c:2771 -msgid "Insert" -msgstr "Wstaw" - -#: src/compose.c:2772 -msgid "Insert file" -msgstr "Wstaw plik" - -#: src/compose.c:2779 -msgid "Attach" -msgstr "Do³±cz" - -#: src/compose.c:2780 -msgid "Attach file" -msgstr "Do³±cz plik" - -#. signature -#: src/compose.c:2789 src/prefs_common.c:1085 -msgid "Signature" -msgstr "Podpis" - -#: src/compose.c:2790 -msgid "Insert signature" -msgstr "Wstaw podpis" - -#: src/compose.c:2798 -msgid "Editor" -msgstr "Edytor" - -#: src/compose.c:2799 -msgid "Edit with external editor" -msgstr "Edytuj w zewnêtrznym edytorze" - -#: src/compose.c:2807 -msgid "Linewrap" -msgstr "Zawijanie linii" - -#: src/compose.c:2808 -msgid "Wrap long lines" -msgstr "Zawijaj linie" - -#: src/compose.c:3015 -msgid "Invalid MIME type." -msgstr "Niepoprawny typ MIME." - -#: src/compose.c:3033 -msgid "File doesn't exist or is empty." -msgstr "Brak pliku lub pusty plik." - -#: src/compose.c:3101 -msgid "Property" -msgstr "W³a¶ciwo¶ci" - -#: src/compose.c:3121 -msgid "Encoding" -msgstr "Kodowanie" - -#: src/compose.c:3144 -msgid "Path" -msgstr "¦cie¿ka" - -#: src/compose.c:3145 -msgid "File name" -msgstr "Nazwa pliku" - -#: src/compose.c:3292 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "Niepoprawna linia wywo³ania zewnêtrznego edytora: '%s'\n" - -#: src/compose.c:3318 -#, c-format -msgid "" -"The external editor is still working.\n" -"Force terminating the process?\n" -"process group id: %d" -msgstr "" -"Zewnêtrzny edytor wci±¿ pracuje.\n" -"Zakoñczyæ proces si³owo?\n" -"identyfikator grupy procesów: %d" - -#: src/compose.c:3331 -#, c-format -msgid "Terminated process group id: %d" -msgstr "Identyfikator zakoñczonej grupy procesów: %d" - -#: src/compose.c:3332 -#, c-format -msgid "Temporary file: %s" -msgstr "Plik tymczasowy: %s" - -#: src/compose.c:3356 -msgid "Compose: input from monitoring process\n" -msgstr "Edycja: wej¶cie z procesu monitoruj±cego\n" - -#. failed -#: src/compose.c:3389 -msgid "Couldn't exec external editor\n" -msgstr "Nie mo¿na uruchomiæ zewnêtrznego edytora\n" - -#: src/compose.c:3393 -msgid "Couldn't write to file\n" -msgstr "Nie mo¿na zapisaæ do pliku\n" - -#: src/compose.c:3395 -msgid "Pipe read failed\n" -msgstr "B³êdny odczyt z potoku\n" - -#: src/compose.c:3652 -msgid "can't remove the old draft message\n" -msgstr "nie mo¿na wyrzuciæ starego szablonu wiadomo¶ci\n" - -#: src/compose.c:3680 src/compose.c:3692 -msgid "Select file" -msgstr "Wybierz plik" - -#: src/compose.c:3716 -msgid "Discard message" -msgstr "Porzuæ wiadomo¶æ" - -#: src/compose.c:3717 -msgid "This message has been modified. discard it?" -msgstr "Wiadomo¶æ zosta³a zmieniona, porzuciæ?" - -#: src/compose.c:3718 -msgid "Discard" -msgstr "Porzuæ" - -#: src/compose.c:3718 -msgid "to Draft" -msgstr "do Szablonów" - -#: src/export.c:122 -msgid "Export" -msgstr "Eksport" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "Wybierz folder docelowy i plik w formacie mbox" - -#: src/export.c:154 -msgid "Source dir:" -msgstr "Katalog ¼ród³owy:" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "Eksportowanie pliku:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr " Wybierz... " - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "Wybierz plik eksportu" - -#: src/foldersel.c:132 -msgid "Select folder" -msgstr "Wybierz katalog" - -#: src/folderview.c:211 src/folderview.c:223 -msgid "/Create _new folder..." -msgstr "/Twórz _nowy katalog..." - -#: src/folderview.c:212 src/folderview.c:224 -msgid "/_Rename folder..." -msgstr "/_Zmieñ nazwê katalogu..." - -#: src/folderview.c:213 src/folderview.c:225 -msgid "/_Delete folder" -msgstr "/_Usuñ katalog" - -#: src/folderview.c:215 src/folderview.c:227 -msgid "/_Update folder tree" -msgstr "/_Od¶wierz drzewo katalogów" - -#: src/folderview.c:216 -msgid "/Remove _mailbox" -msgstr "/Usuñ _skrzynkê" - -#: src/folderview.c:228 -msgid "/Remove _IMAP4 account" -msgstr "/Usuñ konto _IMAP4" - -#: src/folderview.c:235 -msgid "/_Subscribe to newsgroup..." -msgstr "/_Subskrybuj grupê news..." - -#: src/folderview.c:237 -msgid "/_Remove newsgroup" -msgstr "/Usuñ g_rupê news" - -#: src/folderview.c:239 -msgid "/Remove _news account" -msgstr "/Usuñ konto _news" - -#: src/folderview.c:250 -msgid "Folder" -msgstr "Katalog" - -#: src/folderview.c:250 -msgid "New" -msgstr "Nowy" - -#: src/folderview.c:251 src/prefs_common.c:2492 -msgid "Unread" -msgstr "Nieprzeczytane" - -#: src/folderview.c:251 -msgid "#" -msgstr "#" - -#: src/folderview.c:261 -msgid "Creating folder view...\n" -msgstr "Tworzenie widoku katalogów...\n" - -#: src/folderview.c:412 -msgid "Setting folder info...\n" -msgstr "Ustawianie informacji o katalogu...\n" - -#: src/folderview.c:413 -msgid "Setting folder info..." -msgstr "Ustawianie informacji o katalogu..." - -#: src/folderview.c:571 src/mainwindow.c:2084 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "Przeszukiwanie katalogu %s%c%s ..." - -#: src/folderview.c:575 src/mainwindow.c:2089 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "Przeszukiwanie katalogu %s ..." - -#: src/folderview.c:615 -msgid "Updating folder tree..." -msgstr "Od¶wie¿anie widoku katalogu..." - -#: src/folderview.c:632 src/folderview.c:658 -msgid "Updating all folders..." -msgstr "Od¶wie¿anie wszystkich katalogów..." - -#: src/folderview.c:792 src/prefs_account.c:684 -msgid "Inbox" -msgstr "Poczta przychodz±ca" - -#: src/folderview.c:797 -msgid "Outbox" -msgstr "Poczta wys³ana" - -#: src/folderview.c:802 -msgid "Queue" -msgstr "Kolejka" - -#: src/folderview.c:807 -msgid "Trash" -msgstr "¦mietnik" - -#: src/folderview.c:1291 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Wybrano katalog %s\n" - -#: src/folderview.c:1432 src/folderview.c:1495 src/folderview.c:1636 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "'%c' nie mo¿e wyst±piæ w nazwie katalogu." - -#: src/folderview.c:1440 src/folderview.c:1504 src/folderview.c:1644 -#, c-format -msgid "The folder `%s' already exists." -msgstr "Katalog '%s' ju¿ istnieje." - -#: src/folderview.c:1448 src/folderview.c:1652 -#, c-format -msgid "Can't create the folder `%s'." -msgstr "Nie mo¿na utworzyæ katalog '%s'." - -#: src/folderview.c:1487 -#, c-format -msgid "Input new name for `%s':" -msgstr "Wprowad¼ now± nazwê dla '%s' :" - -#: src/folderview.c:1489 -msgid "Rename folder" -msgstr "Zmieñ nazwê folderu" - -#: src/folderview.c:1549 -#, c-format -msgid "" -"All folder(s) and message(s) under `%s' will be deleted.\n" -"Do you really want to delete?" -msgstr "" -"Wszystkie katalogi i wiadomo¶ci w '%s' zostan± usuniête.\n" -"Naprawdê chcesz skasowaæ ?" - -#: src/folderview.c:1552 src/folderview.c:1694 -msgid "Delete folder" -msgstr "Usuñ katalog" - -#: src/folderview.c:1558 src/folderview.c:1700 -#, c-format -msgid "Can't remove the folder `%s'." -msgstr "Nie mo¿na usun±æ katalogu '%s'." - -#: src/folderview.c:1592 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" -"Naprawdê usun±æ skrzynkê `%s' ?\n" -"(Wiadomo¶ci NIE bêd± skasowane z dysku)" - -#: src/folderview.c:1595 -msgid "Remove folder" -msgstr "Usuñ katalog" - -#: src/folderview.c:1628 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"Wprowad¼ nazwê nowego katalogu:\n" -"(je¶li chcesz utworzyæ katalog by przechowywaæ w nim\n" -"inne, do³±cz `/' na koñcu nazwy)" - -#: src/folderview.c:1692 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Naprawdê usun±æ katalog `%s'?" - -#: src/folderview.c:1737 -#, c-format -msgid "Really delete IMAP4 account `%s'?" -msgstr "Naprawdê usun±æ konto IMAP4 '%s' ?" - -#: src/folderview.c:1739 -msgid "Delete IMAP4 account" -msgstr "Usuñ konto IMAP4" - -#: src/folderview.c:1789 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "Grupa news '%s' ju¿ istnieje." - -#: src/folderview.c:1835 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Naprawdê chcesz skasowaæ grupê news '%s' ?" - -#: src/folderview.c:1837 -msgid "Delete newsgroup" -msgstr "Usuñ grupê news" - -#: src/folderview.c:1868 -#, c-format -msgid "Really delete news account `%s'?" -msgstr "Naprawdê usun±æ konto grup news '%s' ?" - -#: src/folderview.c:1870 -msgid "Delete news account" -msgstr "Usuñ konto news" - -#: src/grouplistdialog.c:155 -#, fuzzy -msgid "Subscribe to newsgroup" -msgstr "Subskrybuj grupê news" - -#: src/grouplistdialog.c:174 -msgid "Input subscribing newsgroup:" -msgstr "Wprowad¼ subskrybowan± grupê:" - -#: src/grouplistdialog.c:206 -msgid "Refresh" -msgstr "" - -#: src/grouplistdialog.c:233 -#, fuzzy -msgid "Can't retrieve newsgroup list." -msgstr "nie mo¿na otworzyæ listy odbiorców." - -#: src/grouplistdialog.c:249 src/summaryview.c:710 -#, fuzzy -msgid "Done." -msgstr "Zrobiono" - -#: src/grouplistdialog.c:260 -#, c-format -msgid "%d newsgroups received (%s read)" -msgstr "" - -#: src/gtkutils.c:50 src/gtkutils.c:66 -msgid "Abcdef" -msgstr "Abcdef" - -#: src/headerview.c:56 -msgid "Newsgroups:" -msgstr "Grupy news:" - -#: src/headerview.c:57 src/summary_search.c:159 -msgid "Subject:" -msgstr "Temat:" - -#: src/headerview.c:87 -msgid "Creating header view...\n" -msgstr "Tworzenie widoku nag³ówków...\n" - -#: src/headerview.c:174 src/summaryview.c:1446 -msgid "(No From)" -msgstr "(Bez Od)" - -#: src/headerview.c:189 src/summaryview.c:1462 -msgid "(No Subject)" -msgstr "(Bez tematu)" - -#: src/headerwindow.c:56 -msgid "Creating header window...\n" -msgstr "Tworzenie widoku nag³ówków...\n" - -#: src/headerwindow.c:60 -msgid "All header" -msgstr "Ca³y nag³ówek" - -#: src/headerwindow.c:114 -#, c-format -msgid "Displaying the header of %s ...\n" -msgstr "Wy¶wietlanie nag³ówka %s ...\n" - -#: src/headerwindow.c:116 -#, c-format -msgid "%s - All header" -msgstr "%s - Ca³y nag³ówek" - -#: src/imageview.c:48 -msgid "Creating image view...\n" -msgstr "Tworzenie widoku obrazu...\n" - -#: src/imageview.c:80 src/imageview.c:117 -msgid "Can't load the image." -msgstr "Nie mogê za³adowaæ obrazu." - -#: src/imap.c:238 -#, c-format -msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "Po³±czenie IMAP4 do %s:%d zosta³o przerwane. Ponowne pod³±czanie...\n" - -#: src/imap.c:260 src/inc.c:391 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "Wprowad¼ has³o dla %s na %s:" - -#: src/imap.c:262 src/inc.c:395 src/news.c:131 -msgid "Input password" -msgstr "Wprowad¼ has³o" - -#: src/imap.c:287 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "tworzenie po³±czenia IMAP4 do %s:%d ...\n" - -#: src/imap.c:444 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "wiadomo¶æ %d zosta³a ju¿ zapamiêtana.\n" - -#: src/imap.c:454 -#, c-format -msgid "getting message %d...\n" -msgstr "pobieranie wiadomo¶ci %d...\n" - -#: src/imap.c:460 src/procmsg.c:585 -#, c-format -msgid "can't fetch message %d\n" -msgstr "nie mo¿na pobraæ wiadomo¶ci %d\n" - -#: src/imap.c:484 -#, c-format -msgid "can't append message %s\n" -msgstr "nie mo¿na do³±czyæ wiadomo¶ci %s\n" - -#: src/imap.c:512 src/imap.c:564 src/mh.c:188 src/mh.c:264 src/mh.c:319 -#: src/mh.c:403 -msgid "the src folder is identical to the dest.\n" -msgstr "katalog ¼ród³owy jest taki sam jak docelowy.\n" - -#: src/imap.c:519 src/imap.c:569 src/mh.c:201 src/mh.c:267 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "Przenoszenie wiadomo¶ci %s%c%d do %s ...\n" - -#: src/imap.c:523 src/imap.c:573 src/mh.c:332 src/mh.c:406 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "Kopiowanie wiadomo¶ci %s%c%d do %s ...\n" - -#: src/imap.c:643 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "nie mo¿na ustawiæ flagi skasowany: %d\n" - -#: src/imap.c:650 src/imap.c:690 -msgid "can't expunge\n" -msgstr "nie mo¿na zlikwidowaæ\n" - -#: src/imap.c:683 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "nie mo¿na ustawiæ flagi skasowany: 1:%d\n" - -#: src/imap.c:847 -msgid "error occured while getting LIST.\n" -msgstr "wyst±pi³ b³±d podczas przy poleceniu LIST.\n" - -#: src/imap.c:1048 -msgid "can't create mailbox: LIST failed\n" -msgstr "nie mo¿na utworzyæ skrzynki: b³±d LIST.\n" - -#: src/imap.c:1068 -msgid "can't create mailbox\n" -msgstr "nie mo¿na utworzyæ skrzynki\n" - -#: src/imap.c:1115 -msgid "can't delete mailbox\n" -msgstr "nie mo¿na skasowaæ skrzynki\n" - -#: src/imap.c:1144 -msgid "can't get envelope\n" -msgstr "nie mo¿na pobraæ koperty\n" - -#: src/imap.c:1152 -msgid "error occurred while getting envelope.\n" -msgstr "wyst±pi³ b³±d podczas pobierania koperty.\n" - -#: src/imap.c:1167 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "nie mo¿na parsowaæ koperty: %s\n" - -#: src/imap.c:1197 -#, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "Usuwanie zapamiêtanych wiadomo¶ci %d - %d ... " - -#: src/imap.c:1230 -msgid "Deleting all cached messages... " -msgstr "Usuwanie wszystkich zapamiêtanych wiadomo¶ci... " - -#: src/imap.c:1244 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "Nie mo¿na po³±czyæ sie z serwerem IMAP4: %s:%d\n" - -#: src/imap.c:1277 -msgid "can't get namespace\n" -msgstr "nie mo¿na osi±gn±æ przestrzeni nazw\n" - -#: src/imap.c:1718 -#, c-format -msgid "can't select folder: %s\n" -msgstr "nie mo¿na wybraæ katalogu: %s\n" - -#: src/imap.c:1835 -msgid "IMAP4 login failed.\n" -msgstr "Nie mo¿na zalogowaæ siê do serwera IMAP4.\n" - -#: src/imap.c:2063 -#, c-format -msgid "can't append %s to %s\n" -msgstr "nie mo¿na do³±czyæ %s do %s\n" - -#: src/imap.c:2083 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "nie mo¿na skopiowaæ %d do %s\n" - -#: src/imap.c:2108 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "wyst±pi³ b³±d w protokole IMAP: STORE %d:%d %s\n" - -#: src/imap.c:2122 -msgid "error while imap command: EXPUNGE\n" -msgstr "wyst±pi³ b³±d w protokole IMAP: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "Import" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "Okre¶l docelowy plik ze skrzynk± oraz docelowy katalog." - -#: src/import.c:158 -msgid "Importing file:" -msgstr "Importowanie pliku:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Katalog docelowy:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Wybierz importowany plik" - -#: src/inc.c:191 src/inc.c:242 src/send.c:246 -msgid "Standby" -msgstr "Oczekiwanie" - -#: src/inc.c:261 -msgid "Retrieving new messages" -msgstr "Pobieranie nowych wiadomo¶ci" - -#: src/inc.c:412 -msgid "Retrieving" -msgstr "Pobieranie" - -#: src/inc.c:419 -msgid "Done" -msgstr "Zrobiono" - -#: src/inc.c:422 -#, fuzzy -msgid "Cancelled" -msgstr "Anuluj" - -#: src/inc.c:427 -#, fuzzy -msgid "Connection failed" -msgstr "B³±d konwersji kodu.\n" - -#: src/inc.c:430 -#, fuzzy -msgid "Auth failed" -msgstr "Do³±cz plik" - -#: src/inc.c:469 -#, fuzzy -msgid "Some errors occured while getting mail." -msgstr "wyst±pi³ b³±d podczas przy poleceniu LIST.\n" - -#: src/inc.c:508 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "pobieranie nowych wiadomo¶ci z konta %s ...\n" - -#: src/inc.c:516 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s : Pobieranie nowych wiadomo¶ci" - -#: src/inc.c:537 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "Pod³±czanie do serwera POP3: %s ..." - -#: src/inc.c:548 src/inc.c:677 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "Nie mo¿na po³±czyæ siê z serwerem POP3: %s:%d\n" - -#: src/inc.c:710 src/inc.c:762 -#, fuzzy, c-format -msgid "Retrieving message (%d / %d) (%s / %s)" -msgstr "Pobieranie wiadomo¶ci (%d / %d) (%d / %d bajtów)" - -#: src/inc.c:736 -#, fuzzy -msgid "Authenticating..." -msgstr "Autentykacja" - -#: src/inc.c:741 -msgid "Getting the number of new messages (STAT)..." -msgstr "Pobieranie liczby wiadomo¶ci (STAT)..." - -#: src/inc.c:746 -msgid "Getting the number of new messages (LAST)..." -msgstr "Pobieranie liczby wiadomo¶ci (LAST)..." - -#: src/inc.c:751 -msgid "Getting the number of new messages (UIDL)..." -msgstr "Pobieranie liczby wiadomo¶ci (UIDL)" - -#: src/inc.c:756 -msgid "Getting the size of messages (LIST)..." -msgstr "Pobieranie wielko¶ci wiadomo¶ci (LIST)..." - -#: src/inc.c:774 -msgid "Deleting message" -msgstr "Usuwanie wiadomo¶ci" - -#: src/inc.c:778 -msgid "Quitting" -msgstr "Wychodzenie" - -#: src/inc.c:806 -msgid "a message won't be received\n" -msgstr "wiadomo¶æ nie mo¿e byæ odebrana\n" - -#: src/inc.c:832 -msgid "Error occurred while processing mail." -msgstr "B³±d podczas przetwarzania wiadomo¶ci." - -#: src/inc.c:835 -msgid "No disk space left." -msgstr "Brak miejsca na dysku." - -#: src/inc.c:886 -msgid "no messages in local mailbox.\n" -msgstr "brak wiadomo¶ci w lokalnej skrzynce.\n" - -#: src/inc.c:900 -#, c-format -msgid "Getting new messages from %s into %s...\n" -msgstr "Pobieranie wiadomo¶ci z %s do %s...\n" - -#: src/logwindow.c:50 -msgid "Creating log window...\n" -msgstr "Tworzenie okna dziennika...\n" - -#: src/logwindow.c:54 -msgid "Protocol log" -msgstr "Dziennik protoko³u" - -#. for gettext -#: src/main.c:108 src/main.c:117 src/mh.c:585 -#, c-format -msgid "" -"File `%s' already exists.\n" -"Can't create folder." -msgstr "" -"Plik `%s' ju¿ istnieje.\n" -"Nie mo¿na utworzyæ katalogu." - -#: src/main.c:149 -msgid "g_thread is not supported by glib.\n" -msgstr "glib nie obs³uguje g_thread.\n" - -#: src/main.c:226 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"GnuPG nie jest poprawnie zainstalowany.\n" -"Obs³uga OpenPGP wy³±czone." - -#: src/main.c:311 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "U¿ycie: %s [OPCJE]...\n" - -#: src/main.c:314 -msgid " --compose [address] open composition window" -msgstr " --compose [adres] otwiera okno tworzenia wiadomo¶ci" - -#: src/main.c:315 -msgid " --receive receive new messages" -msgstr " --receive odbiera nowe wiadomo¶ci" - -#: src/main.c:316 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all odbiera nowe wiadomo¶ci dla wszystkich kont" - -#: src/main.c:317 -msgid " --debug debug mode" -msgstr " --debug tryb debug" - -#: src/main.c:318 -msgid " --help display this help and exit" -msgstr " --help wy¶wietla tê pomoc i wychodzi" - -#: src/main.c:319 -msgid " --version output version information and exit" -msgstr " --version wy¶wietla informacjê o wersji i wychodzi" - -#: src/main.c:344 -msgid "Composing message exists. Really quit?" -msgstr "Tworzenie nowej wiadomo¶ci. Wyj¶æ?" - -#: src/main.c:351 -msgid "Queued messages" -msgstr "Skolejkowane wiadomo¶ci" - -#: src/main.c:352 -msgid "Some unsent messages are queued. Exit now?" -msgstr "Niektóre niewys³ane wiadomo¶ci zosta³y skolejkowane. Wyj¶æ?" - -#. remote command mode -#: src/main.c:425 -msgid "another Sylpheed is already running.\n" -msgstr "Jest ju¿ uruchomiona kopia programu Sylpheed.\n" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "/_Plik/Dod_aj skrzynkê..." - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/_Plik/_Od¶wie¿ drzewo katalogów" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "/_Plik/_Katalog" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/_Plik/_Katalog/Stwórz _nowy katalog..." - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/_Plik/_Katalog/_Zmieñ nazwê katalo_gu..." - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "/_Plik/_Katalog/_Usuñ kata_log" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/_Plik/_Importuj plik mbox..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "/_Plik/_Eksportuj do pliku mbox..." - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "/_Plik/Opró¿nij ¶mie_tnik" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/_Plik/Zapi_sz jako..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/_Plik/_Drukuj..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/_Plik/_Koniec" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/_Edycja/_Szukaj" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/_Widok" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/_Widok/_Drzewo katalogów" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/_Widok/Widok wiado_mo¶ci" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/_Widok/_Pasek narzêdzi" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/_Widok/_Pasek narzêdzi/I_kony i tekst" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/_Widok/_Pasek narzêdzi/_Ikony" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/_Widok/_Pasek narzêdzi/_Tekst" - -#: src/mainwindow.c:364 -msgid "/_View/_Toolbar/_None" -msgstr "/_Widok/_Pasek narzêdzi/¯ade_n" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/_Widok/Pa_sek statusu" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/_Widok/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/_Widok/_Oddzielne drzewo katalogów" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/_Widok/Oddzielny widok wiado_mo¶ci" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/_Widok/_Strona kodowa" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/_Widok/_Strona kodowa/_Automatycznie" - -#: src/mainwindow.c:375 src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/_Widok/_Strona kodowa/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/_Widok/_Strona kodowa/7 bitów ascii (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/_Widok/_Strona kodowa/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/_Widok/_Strona kodowa/Europa Zachodnia (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/_Widok/_Strona kodowa/Europa ¦rodkowa (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/_Widok/_Strona kodowa/Kraje _Ba³tyckie (ISO-8859-13)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/_Widok/_Strona kodowa/Kraje Ba³tyckie (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/_Widok/_Strona kodowa/Grecja (ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/_Widok/_Strona kodowa/Turcja (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/_Widok/_Strona kodowa/Cyrylica (ISO-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/_Widok/_Strona kodowa/Cyrylica (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/_Widok/_Strona kodowa/Cyrylica (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/_Widok/_Strona kodowa/Japonia (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/_Widok/_Strona kodowa/Japonia (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/_Widok/_Strona kodowa/Japonia (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/_Widok/_Strona kodowa/Japonia (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/_Widok/_Strona kodowa/Uproszczony Chiny (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/_Widok/_Strona kodowa/Tradycyjny Chiny (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/_Widok/_Strona kodowa/Tradycyjny Chiny (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/_Widok/_Strona kodowa/Chiny (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/_Widok/_Strona kodowa/Korea(EUC-_KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/_Widok/_Strona kodowa/Korea (ISO-2022-KR)" - -#: src/mainwindow.c:445 -msgid "/_Message/Get new ma_il" -msgstr "/Wiado_mo¶æ/Pob_ierz now± pocztê " - -#: src/mainwindow.c:446 -msgid "/_Message/Get from _all accounts" -msgstr "/Wiado_mo¶æ/Pobierz z _wszystkich kont" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/Wiado_mo¶æ/Wy¶lij wia_domo¶ci z kolejki" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/Wiado_mo¶æ/Twórz _now± wiadomo¶æ" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/Wiado_mo¶æ/_Odpowiedz" - -#: src/mainwindow.c:454 -msgid "/_Message/Repl_y to sender" -msgstr "/Wiado_mo¶æ/Odpowiedz nadawc_y" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/Wiado_mo¶æ/Odpowiedz w_szystkim" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/Wiado_mo¶æ/Przeka¿ da_lej" - -#: src/mainwindow.c:457 -msgid "/_Message/Forward as a_ttachment" -msgstr "/Wiado_mo¶æ/Przeka¿ j_ako za³±cznik" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/Wiado_mo¶æ/_Przesuñ..." - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "/Wiado_mo¶æ/_Kopiuj" - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/Wiado_mo¶æ/_Usuñ" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/Wiado_mo¶æ/_Zaznacz" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/Wiado_mo¶æ/_Zaznacz/_Zaznacz" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/Wiado_mo¶æ/_Zaznacz/_Odznacz" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/Wiado_mo¶æ/_Zaznacz/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/Wiado_mo¶æ/_Zaznacz/Zaznacz jako ni_eprzeczytane" - -#: src/mainwindow.c:468 -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/Wiado_mo¶æ/_Zaznacz/Zaznacz jako przecz_ytane" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/Wiado_mo¶æ/Ot_wórz w nowym oknie" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "/Wiado_mo¶æ/P_oka¿ ¼ród³o" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/Wiado_mo¶æ/Po_ka¿ wszystkie nag³ówki" - -#: src/mainwindow.c:474 -msgid "/_Message/Re-_edit" -msgstr "/Wiado_mo¶æ/Prz_eedytuj" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/Pod_sumowanie" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/Pod_sumowanie/Usuñ _duplikaty wiadomo¶ci" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/Pod_sumowanie/_Filtruj wiadomo¶ci" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/Pod_sumowanie/W_ykonaj" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/Pod_sumowanie/Akt_ualizuj" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/Pod_sumowanie/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/Pod_sumowanie/_Poprzednia wiadomo¶æ" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/Pod_sumowanie/_Nastêpna wiadomo¶æ" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/Pod_sumowanie/Nastêpna ni_eprzeczytana wiadomo¶æ" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/Pod_sumowanie/Id¼ do inne_go katalogu" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/Pod_sumowanie/_Sortuj" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/Pod_sumowanie/_Sortuj/Sortuj wg _numeru" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/Pod_sumowanie/_Sortuj/Sortuj wg w_ielko¶ci" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/Pod_sumowanie/_Sortuj/Sortuj wg _daty" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/Pod_sumowanie/_Sortuj wg pola _od" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/Pod_sumowanie/Sortuj wg _tematu" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/Pod_sumowanie/_Sortuj/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/Pod_sumowanie/_Sortuj/_Attract wg tematu" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/Pod_sumowanie/Widok w±_tków" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/Pod_sumowanie/Widok be_z w±tków" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/Pod_sumowanie/Ustaw wy¶wietlane _elementy..." - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/_Narzêdzia/Okno _logów" - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/Konfigura_cja" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/Konfigura_cja/Preferen_cje..." - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "/Konfigura_cja/Ustawienia _filtrowania" - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/Konfigura_cja/_Preferencje konta..." - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/Konfigura_cja/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/Konfigura_cja/Utwórz _nowe konto..." - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/Konfigura_cja/_Edytuj konta..." - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/Konfigura_cja/Zmieñ bie¿±_ce konto" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/_Pomoc/_Manual" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/_Pomoc/_Manual/Angi_elski" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/_Pomoc/_Manual/_Japoñski" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/_Pomoc/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "Tworzenie g³ównego okna...\n" - -#: src/mainwindow.c:665 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "Okno g³ówne: b³±d alokacji kolorów %d\n" - -#: src/mainwindow.c:813 src/mainwindow.c:830 -msgid "Untitled" -msgstr "Bez tytu³u" - -#: src/mainwindow.c:831 -msgid "none" -msgstr "¿aden" - -#: src/mainwindow.c:840 -#, c-format -msgid "Current account: %s" -msgstr "Bie¿±ce konto: %s" - -#: src/mainwindow.c:931 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "pozycja okna: x = %d, y = %d\n" - -#: src/mainwindow.c:939 -msgid "Empty trash" -msgstr "Opró¿nij ¶mietnik" - -#: src/mainwindow.c:940 -msgid "Empty all messages in trash?" -msgstr "Usun±æ wszystkie wiadomo¶ci ze ¶mietnika?" - -#: src/mainwindow.c:968 -msgid "Add mailbox" -msgstr "Dodaj skrzynkê" - -#: src/mainwindow.c:969 -msgid "" -"Input the location of mailbox.\n" -"If the existing mailbox is specified, it will be\n" -"scanned automatically." -msgstr "" -"Wprowad¼ miejsce skrzynki.\n" -"Je¶li podasz istniej±c± skrzynkê, bêdzie ona \n" -"automatycznie przeskanowana." - -#: src/mainwindow.c:975 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "Skrzynka `%s' ju¿ istnieje" - -#: src/mainwindow.c:980 src/setup.c:57 -msgid "Mailbox" -msgstr "Skrzynka" - -#: src/mainwindow.c:986 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 "" -"B³±d tworzenia skrzynki.\n" -"Byæ mo¿e pliki ju¿ istniej± lub nie masz praw do zapisu w tym miejscu" - -#: src/mainwindow.c:1133 -msgid "Setting widgets..." -msgstr "Ustawienia wid¿etów" - -#: src/mainwindow.c:1334 -msgid "Get" -msgstr "Odbierz" - -#: src/mainwindow.c:1335 -msgid "Incorporate new mail" -msgstr "" - -#: src/mainwindow.c:1340 -msgid "Get all" -msgstr "Odbierz wsz." - -#: src/mainwindow.c:1341 -msgid "Incorporate new mail of all accounts" -msgstr "" - -#: src/mainwindow.c:1352 -msgid "Send queued message(s)" -msgstr "Wy¶lij wiadomo¶ci z kolejki" - -#: src/mainwindow.c:1362 src/prefs_account.c:532 src/prefs_common.c:681 -msgid "Compose" -msgstr "Utwórz" - -#: src/mainwindow.c:1363 -msgid "Compose new message" -msgstr "Utwórz now± wiadomo¶æ" - -#: src/mainwindow.c:1370 -msgid "Reply" -msgstr "Odpowiedz" - -#: src/mainwindow.c:1371 -msgid "Reply to the message" -msgstr "Odpowiedz na wiadomo¶æ" - -#: src/mainwindow.c:1378 -msgid "Reply all" -msgstr "Odp. na wsz." - -#: src/mainwindow.c:1379 -msgid "Reply to all" -msgstr "Odpowiedz na wszystkie" - -#: src/mainwindow.c:1386 -msgid "Forward" -msgstr "Przeka¿" - -#: src/mainwindow.c:1387 -msgid "Forward the message" -msgstr "Przeka¿ wiadomo¶æ dalej" - -#: src/mainwindow.c:1398 -msgid "Delete the message" -msgstr "Usuñ wiadomo¶æ" - -#: src/mainwindow.c:1406 -msgid "Execute" -msgstr "Wykonaj" - -#: src/mainwindow.c:1407 -msgid "Execute marked process" -msgstr "Wykonaj zaznaczony proces" - -#: src/mainwindow.c:1415 -msgid "Next" -msgstr "Nastêpna" - -#: src/mainwindow.c:1416 -msgid "Next unread message" -msgstr "Nastêpna nieprzeczytana wiadomo¶æ" - -#: src/mainwindow.c:1426 -msgid "Prefs" -msgstr "Preferencje" - -#: src/mainwindow.c:1427 -msgid "Common preference" -msgstr "Wspólne preferencje " - -#: src/mainwindow.c:1434 src/progressdialog.c:52 -msgid "Account" -msgstr "Konto" - -#: src/mainwindow.c:1435 -msgid "Account setting" -msgstr "Ustawienia konta" - -#: src/mainwindow.c:1651 src/summaryview.c:2691 -msgid "Exit" -msgstr "Koniec programu" - -#: src/mainwindow.c:1651 src/summaryview.c:2691 -msgid "Exit this program?" -msgstr "Wyj¶æ z programu?" - -#: src/mainwindow.c:1785 -msgid "Sending queued message failed." -msgstr "Wys³anie wiadomo¶ci z kolejki nie powiod³o siê." - -#: src/mainwindow.c:1916 -#, c-format -msgid "forced charset: %s\n" -msgstr "wymuszona strona kodowa: %s\n" - -#: src/mbox.c:50 src/mbox.c:194 -msgid "can't write to temporary file\n" -msgstr "nie mo¿na zapisaæ do pliku tymczasowego\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "Pobieranie wiadomo¶ci z %s do %s...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "nie mo¿na odczytaæ pliku mbox.\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "niepoprawny format mbox: %s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "uszkodzona skrzynka: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "nie mo¿na otworzyæ pliku tymczasowego\n" - -#: src/mbox.c:159 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "%d wiadomo¶ci znaleziono.\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "nie mo¿na utworzyæ pliku lock %s\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "je¶li to mo¿liwe, u¿yj 'flock' zamiast 'file'.\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "nie mo¿na utworzyæ %s\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "skrzynka w posiadaniu innego procesu, oczekiwanie...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "nie mo¿na zablokowaæ %s\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "nieprawid³owy typ blokady\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "nie mo¿na odblokowaæ %s\n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "nie mo¿na skróciæ do zera.\n" - -#: src/mbox.c:383 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "Eksportowanie wiadomo¶ci z %s do %s...\n" - -#: src/messageview.c:67 -msgid "Creating message view...\n" -msgstr "Tworzenie widoku wiadomo¶ci...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "nie mo¿na skopiowaæ wiadomo¶ci %s do %s\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:330 src/mh.c:397 -msgid "Can't open mark file.\n" -msgstr "Nie mo¿na otworzyæ pliku zaznaczeñ.\n" - -#: src/mh.c:341 src/mh.c:415 -#, c-format -msgid "%s already exists." -msgstr "%s ju¿ istnieje" - -#: src/mh.c:555 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Ostatni numer w katalogu %s = %d\n" - -#: src/mh.c:754 -msgid "\tSearching uncached messages... " -msgstr "\tWyszukiwanie niezapamiêtanych wiadomo¶ci... " - -#: src/mh.c:809 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "Znaleziono %d niezapamiêtanych wiadomo¶ci.\n" - -#: src/mh.c:815 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tSortowanie niezapamiêtanych wiadomo¶ci w kolejno¶ci numerycznej... " - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/_Otwórz" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/Otwórz _z..." - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/_Wy¶wietl jako tekst" - -#: src/mimeview.c:116 src/summaryview.c:324 -msgid "/_Save as..." -msgstr "/Zapi_sz jako..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/Spr_awd¼ podpis" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "Typ MIME " - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "Tworzenie widoku MIME...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "Wybierz \"Sprawd¼ podpis\" by sprawdziæ" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "Nie mo¿na pobraæ czê¶ci wiadomo¶ci wieloczê¶ciowej." - -#: src/mimeview.c:681 src/mimeview.c:729 src/mimeview.c:748 src/mimeview.c:771 -msgid "Can't save the part of multipart message." -msgstr "Nie mo¿na zapisaæ czê¶ci wiadomo¶ci wieloczê¶ciowej." - -#: src/mimeview.c:715 src/summaryview.c:2137 -msgid "Save as" -msgstr "Zapisz jako" - -#: src/mimeview.c:721 src/summaryview.c:2142 -msgid "Overwrite" -msgstr "Nadpisz" - -#: src/mimeview.c:722 src/summaryview.c:2143 -msgid "Overwrite existing file?" -msgstr "Nadpisaæ istniej±cy plik?" - -#: src/mimeview.c:776 -msgid "Open with" -msgstr "Otwórz z" - -#: src/mimeview.c:777 -#, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Wprowad¼ polecenie dla otwarcia pliku:\n" -"('%s' zostanie zast±pione nazw± pliku)" - -#: src/mimeview.c:829 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "Niepoprawne polecenie podgl±du MIME: '%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "tworzenie po³±czenia NNTP z %s:%d ...\n" - -#: src/news.c:182 -#, c-format -msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "Po³±czenie NNTP %s:%d zosta³o zerwane. Ponowne pod³±czanie...\n" - -#: src/news.c:257 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "artyku³ %d zosta³ ju¿ zapamiêtany.\n" - -#: src/news.c:270 -#, c-format -msgid "can't select group %s\n" -msgstr "nie mo¿na wybraæ grupy: %s\n" - -#: src/news.c:275 -#, c-format -msgid "getting article %d...\n" -msgstr "pobieranie artyku³u %d...\n" - -#: src/news.c:280 -#, c-format -msgid "can't read article %d\n" -msgstr "nie mo¿na odczytaæ artyku³u %d\n" - -#: src/news.c:325 -#, fuzzy -msgid "can't retrieve newsgroup list\n" -msgstr "nie mo¿na ustawiæ grupy: %s\n" - -#: src/news.c:397 -msgid "can't post article.\n" -msgstr "nie mo¿na wys³aæ artyku³u.\n" - -#: src/news.c:421 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "nie mo¿na odebraæ artyku³u %d\n" - -#: src/news.c:491 -#, c-format -msgid "can't set group: %s\n" -msgstr "nie mo¿na ustawiæ grupy: %s\n" - -#: src/news.c:498 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "niepoprawny zakres artyku³u: %d - %d\n" - -#: src/news.c:507 -msgid "no new articles.\n" -msgstr "brak nowych artyku³ów.\n" - -#: src/news.c:520 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "pobieranie xover %d - %d w %s...\n" - -#: src/news.c:523 -msgid "can't get xover\n" -msgstr "nie mo¿na pobraæ xover\n" - -#: src/news.c:529 -msgid "error occurred while getting xover.\n" -msgstr "b³±d podczas pobierania xover.\n" - -#: src/news.c:537 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "niepoprawna linia xover: %s\n" - -#: src/news.c:555 src/news.c:580 -msgid "can't get xhdr\n" -msgstr "nie mo¿na pobraæ xhdr\n" - -#: src/news.c:563 src/news.c:588 -msgid "error occurred while getting xhdr.\n" -msgstr "b³±d podczas pobierania xhdr.\n" - -#: src/news.c:712 -#, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "\tUsuwanie zapamiêtanych artyku³ów 1 - %d ... " - -#: src/news.c:741 -msgid "\tDeleting all cached articles... " -msgstr "\tUsuwanie wszystkich zapamiêtanych artyku³ów... " - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "Nie mo¿na po³±czyæ siê z serwerem NNTP: %s:%d\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "b³±d protoko³u: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "b³±d protoko³u\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "B³±d podczas publikowania\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "Has³o" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[ brak identyfikatora ]" - -#: src/passphrase.c:244 -#, c-format -msgid "" -"%sPlease enter the passphrase for:\n" -"\n" -" %.*s \n" -"(%.*s)\n" -msgstr "" -"%s Wprowad¼ has³o dla:\n" -"\n" -" %.*s \n" -"(%.*s)\n" - -#: src/passphrase.c:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"Niew³a¶ciwe has³o! Spróbuj ponownie...\n" -"\n" - -#: src/pop.c:98 src/pop.c:146 -#, fuzzy -msgid "error occurred on authentication\n" -msgstr "wyst±pi³ b³±d podczas autoryzacji\n" - -#: src/pop.c:118 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "Przy powitaniu zabrak³o wymaganego znaczika czasowego APOP\n" - -#: src/pop.c:124 -msgid "Timestamp syntax error in greeting\n" -msgstr "B³±d sk³adni przy znaczniku czasowym powitania\n" - -#: src/pop.c:173 src/pop.c:214 -msgid "POP3 protocol error\n" -msgstr "B³±d protoko³u POP3\n" - -#: src/prefs.c:56 -msgid "Reading configuration...\n" -msgstr "Odczytywanie konfiguracji...\n" - -#: src/prefs.c:76 src/prefs.c:183 -#, c-format -msgid "Found %s\n" -msgstr "Znaleziono: %s\n" - -#: src/prefs.c:90 -msgid "Finished reading configuration.\n" -msgstr "Ukoñczono czytanie konfiguracji.\n" - -#: src/prefs.c:140 src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:393 -#: src/prefs_account.c:407 src/prefs_customheader.c:393 -#: src/prefs_customheader.c:439 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -msgid "failed to write configuration to file\n" -msgstr "b³±d podczas zapisu konfiguracji do pliku\n" - -#: src/prefs.c:216 -msgid "Configuration is saved.\n" -msgstr "Konfiguracja zapisana.\n" - -#: src/prefs.c:469 -msgid "Apply" -msgstr "Zastosuj" - -#: src/prefs_account.c:438 -msgid "Opening account preferences window...\n" -msgstr "Otwieranie okna preferencji konta...\n" - -#: src/prefs_account.c:465 -#, c-format -msgid "Account%d" -msgstr "Konto%d" - -#: src/prefs_account.c:478 -msgid "Preferences for new account" -msgstr "Preferencje nowego konta" - -#: src/prefs_account.c:483 -msgid "Preferences for each account" -msgstr "Preferencje dla ka¿dego konta" - -#: src/prefs_account.c:506 -msgid "Creating account preferences window...\n" -msgstr "Tworzenie okna preferencji okna...\n" - -#: src/prefs_account.c:526 -msgid "Basic" -msgstr "Podstawowe" - -#: src/prefs_account.c:528 src/prefs_common.c:677 -msgid "Receive" -msgstr "Odbieranie" - -#: src/prefs_account.c:535 src/prefs_common.c:688 -msgid "Privacy" -msgstr "Prywatno¶æ" - -#: src/prefs_account.c:538 -msgid "Advanced" -msgstr "Zaawansowane" - -#: src/prefs_account.c:592 -msgid "Name of this account" -msgstr "Nazwa tego konta" - -#: src/prefs_account.c:601 -msgid "Usually used" -msgstr "Najczê¶ciej u¿ywane" - -#: src/prefs_account.c:605 -msgid "Personal information" -msgstr "Informacje osobiste" - -#: src/prefs_account.c:614 -msgid "Full name" -msgstr "Pe³na nazwa" - -#: src/prefs_account.c:620 -msgid "Mail address" -msgstr "Adres e-mail" - -#: src/prefs_account.c:626 -msgid "Organization" -msgstr "Organizacja" - -#: src/prefs_account.c:650 -msgid "Server information" -msgstr "Informacje o serwerze" - -#: src/prefs_account.c:671 -msgid "POP3 (normal)" -msgstr "POP3 (normalny)" - -#: src/prefs_account.c:673 -msgid "POP3 (APOP auth)" -msgstr "POP3 (autoryzacja APOP)" - -#: src/prefs_account.c:675 src/prefs_account.c:836 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:677 -msgid "News (NNTP)" -msgstr "News (NNTP)" - -#: src/prefs_account.c:679 -msgid "None (local)" -msgstr "¯aden (lokalnie)" - -#: src/prefs_account.c:701 -msgid "This server requires authentication" -msgstr "Ten serwer wymaga autoryzacji" - -#: src/prefs_account.c:740 -msgid "News server" -msgstr "Serwer news" - -#: src/prefs_account.c:746 -msgid "Server for receiving" -msgstr "Serwer dla odbioru" - -#: src/prefs_account.c:752 -msgid "SMTP server (send)" -msgstr "Serwer SMTP (dla wysy³ania)" - -#: src/prefs_account.c:759 -msgid "User ID" -msgstr "Identyfikator u¿ytkownika" - -#: src/prefs_account.c:765 -msgid "Password" -msgstr "Has³o" - -#: src/prefs_account.c:819 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:827 -msgid "Remove messages on server when received" -msgstr "Po odebraniu skasuj wiadomo¶ci z serwera" - -#: src/prefs_account.c:829 -msgid "Download all messages on server" -msgstr "Pobierz wszystkie wiadomo¶ci z serwera" - -#: src/prefs_account.c:832 -msgid "`Get all' checks for new mail on this account" -msgstr "`Odbierz wszystkie' sprawdza pocztê dla tego konta" - -#: src/prefs_account.c:834 -msgid "Filter messages on receiving" -msgstr "Filtruj wiadomo¶ci podczas odbierania" - -#: src/prefs_account.c:847 -msgid "IMAP server directory" -msgstr "Katalog serwera IMAP4." - -#: src/prefs_account.c:893 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "Nag³ówek" - -#: src/prefs_account.c:900 -msgid "Add Date header field" -msgstr "Dodaj pole Data do nag³ówka" - -#: src/prefs_account.c:901 -msgid "Generate Message-ID" -msgstr "Generuj Message-ID" - -#: src/prefs_account.c:908 -msgid "Add user-defined header" -msgstr "Dodaj nag³ówek zdefiniowany przez u¿ytkownika" - -#: src/prefs_account.c:910 src/prefs_common.c:1332 src/prefs_common.c:1357 -msgid " Edit... " -msgstr "Edycja..." - -#: src/prefs_account.c:920 -msgid "Automatically set following addresses" -msgstr "Automatycznie ustaw nastêpuj±ce adresy" - -#: src/prefs_account.c:929 -msgid "Cc" -msgstr "Kopia" - -#: src/prefs_account.c:942 -msgid "Bcc" -msgstr "Ukryta kopia" - -#: src/prefs_account.c:955 -msgid "Reply-To" -msgstr "Adres zwrotny" - -#: src/prefs_account.c:968 -msgid "Authentication" -msgstr "Autentykacja" - -#: src/prefs_account.c:976 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "Autentykacja SMTP (SMTP AUTH)" - -#: src/prefs_account.c:978 -msgid "Authenticate with POP3 before sending" -msgstr "Przed wys³aniem autentykacja POP3" - -#: src/prefs_account.c:1012 -msgid "Signature file" -msgstr "Plik podpisu" - -#: src/prefs_account.c:1041 -msgid "Sign key" -msgstr "Klucz" - -#: src/prefs_account.c:1049 -msgid "Use default GnuPG key" -msgstr "U¿yj standardowego klucza GnuPG" - -#: src/prefs_account.c:1058 -msgid "Select key by your email address" -msgstr "Wybierz klucz poprzez twój adres e-mail" - -#: src/prefs_account.c:1067 -msgid "Specify key manually" -msgstr "Okre¶l klucz rêcznie" - -#: src/prefs_account.c:1083 -msgid "User or key ID:" -msgstr "U¿ytkownik lub klucz ID:" - -#: src/prefs_account.c:1145 -msgid "Specify SMTP port" -msgstr "Okre¶l port SMTP" - -#: src/prefs_account.c:1151 -msgid "Specify POP3 port" -msgstr "Okre¶l port POP3" - -#: src/prefs_account.c:1157 -msgid "Specify IMAP4 port" -msgstr "Okre¶l port IMAP4" - -#: src/prefs_account.c:1163 -msgid "Specify NNTP port" -msgstr "Okre¶l port NNTP" - -#: src/prefs_account.c:1168 -msgid "Specify domain name" -msgstr "Okre¶l nazwê domeny" - -#: src/prefs_account.c:1225 -msgid "Mail address is not entered." -msgstr "Nie okre¶lono adresu e-mail." - -#: src/prefs_account.c:1230 -msgid "SMTP server is not entered." -msgstr "Nie okre¶lono serwera SMTP." - -#: src/prefs_account.c:1235 -msgid "User ID is not entered." -msgstr "Nie okre¶lono ID u¿ytkownika." - -#: src/prefs_account.c:1240 -msgid "POP3 server is not entered." -msgstr "Nie okre¶lono serwera POP3." - -#: src/prefs_account.c:1245 -msgid "IMAP4 server is not entered." -msgstr "Nie okre¶lono serwera IMAP4." - -#: src/prefs_account.c:1250 -msgid "NNTP server is not entered." -msgstr "Nie okre¶lono serwera NNTP." - -#: src/prefs_common.c:655 -msgid "Creating common preferences window...\n" -msgstr "Tworzenie okna preferencji...\n" - -#: src/prefs_common.c:659 -msgid "Common Preferences" -msgstr "Preferencje" - -#: src/prefs_common.c:683 -msgid "Display" -msgstr "Wy¶wietlanie" - -#: src/prefs_common.c:685 -msgid "Message" -msgstr "Wiadomo¶æ" - -#: src/prefs_common.c:691 -msgid "Interface" -msgstr "Interfejs" - -#: src/prefs_common.c:693 src/select-keys.c:324 -msgid "Other" -msgstr "Inne" - -#: src/prefs_common.c:734 src/prefs_common.c:895 -msgid "External program" -msgstr "Program zewnêtrzny" - -#: src/prefs_common.c:743 -msgid "Use external program for incorporation" -msgstr "" - -#: src/prefs_common.c:750 src/prefs_common.c:912 -msgid "Program path" -msgstr "¦cie¿ka do programu" - -#: src/prefs_common.c:762 -msgid "Local spool" -msgstr "Lokalny Spool" - -#: src/prefs_common.c:773 -msgid "Incorporate from spool" -msgstr "" - -#: src/prefs_common.c:775 -msgid "Filter on incorporation" -msgstr "" - -#: src/prefs_common.c:783 -msgid "Spool directory" -msgstr "Katalog Spool" - -#: src/prefs_common.c:801 -msgid "Auto-check new mail" -msgstr "Automatycznie sprawdzaj pocztê" - -#: src/prefs_common.c:803 -msgid "each" -msgstr "ka¿da(e)" - -#: src/prefs_common.c:815 -msgid "minute(s)" -msgstr "minuta(y)" - -#: src/prefs_common.c:824 -msgid "Check new mail on startup" -msgstr "Sprawd¼ pocztê przy starcie" - -#: src/prefs_common.c:826 -msgid "Update all local folders after incorporation" -msgstr "" - -#: src/prefs_common.c:828 -msgid "News" -msgstr "News" - -#: src/prefs_common.c:836 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"Maksymalna liczba artyku³ów do odebrania\n" -"(bez ograniczeñ - 0)" - -#: src/prefs_common.c:905 -msgid "Use external program for sending" -msgstr "U¿yj zewnêtrznego programu do wysy³ania" - -#: src/prefs_common.c:929 -msgid "Save sent messages to outbox" -msgstr "Zapisz wys³ane wiadomo¶ci do Poczta wys³ana" - -#: src/prefs_common.c:931 -msgid "Queue messages that fail to send" -msgstr "Kolejkuj wiadomo¶ci których nie da³o siê wys³aæ" - -#: src/prefs_common.c:937 -msgid "Outgoing codeset" -msgstr "Strona kodowa dla wychodz±cych" - -#: src/prefs_common.c:952 -msgid "Automatic (Recommended)" -msgstr "Automatycznie (Zalecane)" - -#: src/prefs_common.c:953 -msgid "7bit ascii (US-ASCII)" -msgstr "7 bitów ascii (US-ASCII)" - -#: src/prefs_common.c:955 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:957 -msgid "Western European (ISO-8859-1)" -msgstr "Europa Zachodnia (ISO-8859-1)" - -#: src/prefs_common.c:958 -msgid "Central European (ISO-8859-2)" -msgstr "Europa ¦odkowa (ISO-8859-2)" - -#: src/prefs_common.c:959 -msgid "Baltic (ISO-8859-13)" -msgstr "Kraje Ba³tyckie (ISO-8859-13)" - -#: src/prefs_common.c:960 -msgid "Baltic (ISO-8859-4)" -msgstr "Kraje Ba³tyckie (ISO-8859-4)" - -#: src/prefs_common.c:961 -msgid "Greek (ISO-8859-7)" -msgstr "Grecja (ISO-8859-7)" - -#: src/prefs_common.c:962 -msgid "Turkish (ISO-8859-9)" -msgstr "Turcja (ISO-8859-9)" - -#: src/prefs_common.c:964 -msgid "Cyrillic (ISO-8859-5)" -msgstr "Cyrylica (ISO-8859-5)" - -#: src/prefs_common.c:966 -msgid "Cyrillic (KOI8-R)" -msgstr "Cyrylica (KOI8-R)" - -#: src/prefs_common.c:968 -msgid "Cyrillic (Windows-1251)" -msgstr "Cyrylica (Windows-1251)" - -#: src/prefs_common.c:969 -msgid "Cyrillic (KOI8-U)" -msgstr "Cyrylica (KOI8-U)" - -#: src/prefs_common.c:971 -msgid "Japanese (ISO-2022-JP)" -msgstr "Japonia (ISO-2022-JP)" - -#: src/prefs_common.c:973 -msgid "Japanese (EUC-JP)" -msgstr "Japonia (EUC-JP)" - -#: src/prefs_common.c:974 -msgid "Japanese (Shift_JIS)" -msgstr "Japonia (Shift_JIS)" - -#: src/prefs_common.c:976 -msgid "Simplified Chinese (GB2312)" -msgstr "Uproszczony Chiny (GB2312)" - -#: src/prefs_common.c:977 -msgid "Traditional Chinese (Big5)" -msgstr "Tradycyjny Chiny (Big5)" - -#: src/prefs_common.c:979 -msgid "Traditional Chinese (EUC-TW)" -msgstr "Tradycyjny Chiny (EUC-TW)" - -#: src/prefs_common.c:980 -msgid "Chinese (ISO-2022-CN)" -msgstr "Chiny (ISO-2022-CN)" - -#: src/prefs_common.c:982 -msgid "Korean (EUC-KR)" -msgstr "Korea (EUC-KR)" - -#: src/prefs_common.c:1032 -msgid "Quotation" -msgstr "Cytowanie" - -#: src/prefs_common.c:1040 -msgid "Quote message when replying" -msgstr "Cytuj wiadomo¶æ przy odpowiedzi" - -#: src/prefs_common.c:1046 -msgid "Quotation mark" -msgstr "Znak cytowania" - -#: src/prefs_common.c:1059 -msgid "Quotation format:" -msgstr "Format cytatu:" - -#: src/prefs_common.c:1064 -msgid " Description of symbols " -msgstr " Opis symboli " - -#: src/prefs_common.c:1096 -msgid "Signature separator" -msgstr "Oddzielenie podpisu" - -#: src/prefs_common.c:1105 -#, fuzzy -msgid "Insert automatically" -msgstr "Automatycznie wstaw podpis" - -#: src/prefs_common.c:1112 -#, fuzzy -msgid "Automatically select account for replies" -msgstr "Automatycznie ustaw nastêpuj±ce adresy" - -#: src/prefs_common.c:1120 -msgid "Wrap messages at" -msgstr "Dziel wiadomo¶æ przy" - -#: src/prefs_common.c:1132 -msgid "characters" -msgstr "znakach" - -#: src/prefs_common.c:1140 -msgid "Wrap quotation" -msgstr "Dziel cytat" - -#: src/prefs_common.c:1142 -msgid "Wrap before sending" -msgstr "Dziel przed wys³aniem" - -#: src/prefs_common.c:1186 -msgid "Font" -msgstr "Font" - -#: src/prefs_common.c:1195 -msgid "Text" -msgstr "Tekst" - -#: src/prefs_common.c:1218 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "T³umacz nazwê nag³ówka (jak np. 'Od:', 'Temat:')" - -#: src/prefs_common.c:1221 -msgid "Display unread number next to folder name" -msgstr "" - -#. ---- Summary ---- -#: src/prefs_common.c:1225 -msgid "Summary View" -msgstr "Widok ³±czny :)" - -#: src/prefs_common.c:1234 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "Wy¶wietl odbiorcê w kolumnie `Od` je¶li jeste¶ nadawc±" - -#: src/prefs_common.c:1236 -msgid "Enable horizontal scroll bar" -msgstr "Za³±cz poziomy pasek przewijania" - -#: src/prefs_common.c:1238 -msgid "Expand threads" -msgstr "" - -#: src/prefs_common.c:1241 -msgid "Display unread messages with bold font" -msgstr "" - -#: src/prefs_common.c:1247 src/prefs_common.c:1927 src/prefs_common.c:1965 -msgid "Date format" -msgstr "Format daty" - -#: src/prefs_common.c:1271 -msgid " Set display item of summary... " -msgstr " Ustaw element wy¶wietlania podsumowania... " - -#: src/prefs_common.c:1327 -msgid "Enable coloration of message" -msgstr "W³±cz kolorowanie wiadomo¶ci" - -#: src/prefs_common.c:1346 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "Wy¶wietlaj 2-bajtowo alfabet i 1-bajtowo znaki numeryczne" - -#: src/prefs_common.c:1348 -msgid "Display header pane above message view" -msgstr "Wy¶wietl panel nag³ówków powy¿ej okna wiadomo¶ci" - -#: src/prefs_common.c:1355 -msgid "Display short headers on message view" -msgstr "Pokazuj krótkie nag³ówki w widoku wiadomo¶ci" - -#: src/prefs_common.c:1375 -msgid "Line space" -msgstr "Interlinia" - -#: src/prefs_common.c:1389 src/prefs_common.c:1429 -msgid "pixel(s)" -msgstr "piksel(e)" - -#: src/prefs_common.c:1394 -msgid "Leave space on head" -msgstr "Zostaw miejsce w nag³ówku " - -#: src/prefs_common.c:1396 -msgid "Scroll" -msgstr "Przewijanie" - -#: src/prefs_common.c:1403 -msgid "Half page" -msgstr "Pó³ strony" - -#: src/prefs_common.c:1409 -msgid "Smooth scroll" -msgstr "Wyg³adzone przewijanie" - -#: src/prefs_common.c:1415 -msgid "Step" -msgstr "Krok" - -#: src/prefs_common.c:1476 -msgid "Encrypt message by default" -msgstr "Standardowo szyfruj wiadomo¶æ" - -#: src/prefs_common.c:1479 -msgid "Sign message by default" -msgstr "Standardowo podpisz wiadomo¶æ" - -#: src/prefs_common.c:1482 -msgid "Automatically check signatures" -msgstr "Automatycznie sprawd¼ podpisy" - -#: src/prefs_common.c:1485 -msgid "Show signature check result in a popup window" -msgstr "Poka¿ wynik sprawdzania podpisu w wyskakuj±cym oknie" - -#: src/prefs_common.c:1489 -msgid "Grab input while entering a passphrase" -msgstr "Przechwyæ wej¶cie podczas wprowadzania has³a" - -#: src/prefs_common.c:1494 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "Je¶li GnuPG nie dzia³a wy¶wietl ostrze¿enie przy starcie" - -#. create default signkey box -#: src/prefs_common.c:1501 -msgid "Default Sign Key" -msgstr "Standardowy Sign Key" - -#: src/prefs_common.c:1606 -msgid "Open first unread message when entering a folder" -msgstr "" -"Podczas wchodzenia do katalogu otwórz pierwsz± nieprzeczytan± wiadomo¶æ" - -#: src/prefs_common.c:1610 -msgid "Go to inbox after receiving new mail" -msgstr "Id¼ do Poczty przychodz±cej po odbiorze poczty" - -#: src/prefs_common.c:1618 -msgid "Execute immediately when moving or deleting messages" -msgstr "Wykonaj natychmiastowo podczas przenoszenia lub kasowania wiadomo¶ci" - -#: src/prefs_common.c:1625 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" -"(Wiadomo¶ci pozostan± zaznaczone do wykonania\n" -" gdy jest wy³±czone)" - -#: src/prefs_common.c:1639 -msgid "Add address to destination when double-clicked" -msgstr "Dodaj adres do docelowego po dwukrotnym klikniêciu" - -#: src/prefs_common.c:1641 -msgid "On exit" -msgstr "Podczas wyj¶cia" - -#: src/prefs_common.c:1649 -msgid "Confirm on exit" -msgstr "Potwierd¼ wyj¶cie" - -#: src/prefs_common.c:1656 -msgid "Empty trash on exit" -msgstr "Opró¿nij ¶mietnik przy wyj¶ciu" - -#: src/prefs_common.c:1658 -msgid "Ask before emptying" -msgstr "Zapytaj przed opró¿nieniem" - -#: src/prefs_common.c:1662 -msgid "Warn if there are queued messages" -msgstr "Ostrzegaj je¶li s± wiadomo¶ci w kolejce" - -#: src/prefs_common.c:1699 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "Zewnêtrzna przegl±darka WWW (%s bêdzie zast±pione URI)" - -#: src/prefs_common.c:1706 src/prefs_common.c:1731 src/prefs_common.c:1747 -msgid "Command" -msgstr "Polecenie" - -#: src/prefs_common.c:1724 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "Drukowanie (%s zostanie zast±pione nazw± pliku)" - -#: src/prefs_common.c:1740 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "Zewnêtrzny edytor (%s zostanie zast±pione nazw± pliku)" - -#: src/prefs_common.c:1897 -msgid "the full abbreviated weekday name" -msgstr "" - -#: src/prefs_common.c:1898 -msgid "the full weekday name" -msgstr "" - -#: src/prefs_common.c:1899 -msgid "the abbreviated month name" -msgstr "" - -#: src/prefs_common.c:1900 -msgid "the full month name" -msgstr "" - -#: src/prefs_common.c:1901 -msgid "the preferred date and time for the current locale" -msgstr "" - -#: src/prefs_common.c:1902 -msgid "the century number (year/100)" -msgstr "" - -#: src/prefs_common.c:1903 -msgid "the day of the month as a decimal number" -msgstr "" - -#: src/prefs_common.c:1904 -msgid "the hour as a decimal number using a 24-hour clock" -msgstr "" - -#: src/prefs_common.c:1905 -msgid "the hour as a decimal number using a 12-hour clock" -msgstr "" - -#: src/prefs_common.c:1906 -msgid "the day of the year as a decimal number" -msgstr "" - -#: src/prefs_common.c:1907 -msgid "the month as a decimal number" -msgstr "" - -#: src/prefs_common.c:1908 -msgid "the minute as a decimal number" -msgstr "" - -#: src/prefs_common.c:1909 -msgid "either AM or PM" -msgstr "" - -#: src/prefs_common.c:1910 -msgid "the second as a decimal number" -msgstr "" - -#: src/prefs_common.c:1911 -msgid "the day of the week as a decimal number" -msgstr "" - -#: src/prefs_common.c:1912 -msgid "the preferred date for the current locale" -msgstr "" - -#: src/prefs_common.c:1913 -msgid "the last two digits of a year" -msgstr "" - -#: src/prefs_common.c:1914 -msgid "the year as a decimal number" -msgstr "" - -#: src/prefs_common.c:1915 -msgid "the time zone or name or abbreviation" -msgstr "" - -#: src/prefs_common.c:1942 -#, fuzzy -msgid "Specifier" -msgstr "Wybierz plik" - -#: src/prefs_common.c:1943 -#, fuzzy -msgid "Description" -msgstr "Przeznaczenie" - -#: src/prefs_common.c:1982 -msgid "Example" -msgstr "" - -#: src/prefs_common.c:2069 -msgid "Set message colors" -msgstr "Ustaw kolor wiadomo¶ci" - -#: src/prefs_common.c:2077 -msgid "Colors" -msgstr "Kolory" - -#: src/prefs_common.c:2111 -msgid "Quoted Text - First Level" -msgstr "Cytowany tekst - poziom pierwszy" - -#: src/prefs_common.c:2117 -msgid "Quoted Text - Second Level" -msgstr "Cytowany tekst - poziom drugi" - -#: src/prefs_common.c:2123 -msgid "Quoted Text - Third Level" -msgstr "Cytowany tekst - poziom trzeci" - -#: src/prefs_common.c:2129 -msgid "URI link" -msgstr "£±cze URI" - -#: src/prefs_common.c:2136 -msgid "Recycle quote colors" -msgstr "Powtarzaj kolory cytowania" - -#: src/prefs_common.c:2198 -msgid "Pick color for quotation level 1" -msgstr "Wybierz kolor dla pierwszego poziomu cytowania" - -#: src/prefs_common.c:2201 -msgid "Pick color for quotation level 2" -msgstr "Wybierz kolor dla drugiego poziomu cytowania" - -#: src/prefs_common.c:2204 -msgid "Pick color for quotation level 3" -msgstr "Wybierz kolor dla trzeciego poziomu cytowania" - -#: src/prefs_common.c:2207 -msgid "Pick color for URI" -msgstr "Wybierz kolor dla URI" - -#: src/prefs_common.c:2342 -msgid "Description of symbols" -msgstr "Opis symboli" - -#: src/prefs_common.c:2370 -#, fuzzy, 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" -"Cc\n" -"Message-ID\n" -"%" -msgstr "" -"Data\n" -"Od\n" -"Pe³na nazwa nadawcy\n" -"Nazwisko nadawcy\n" -"Inicja³ nadawcy\n" -"Temat\n" -"Do\n" -"Message-ID\n" -"%" - -#: src/prefs_common.c:2474 -msgid "Set display item" -msgstr "Ustaw element wy¶wietlania" - -#: src/prefs_common.c:2491 -msgid "Mark" -msgstr "Zaznacz" - -#: src/prefs_common.c:2493 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2494 -msgid "Number" -msgstr "Numer" - -#: src/prefs_common.c:2496 src/summaryview.c:364 -msgid "Date" -msgstr "Data" - -#: src/prefs_common.c:2497 src/summaryview.c:365 -msgid "From" -msgstr "Od" - -#: src/prefs_common.c:2498 src/summaryview.c:366 -msgid "Subject" -msgstr "Temat" - -#: src/prefs_common.c:2551 -msgid "Font selection" -msgstr "Wybór fontu" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "Nag³ówki u¿ytkownika" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "Tworzenie okna ustawieñ nag³ówka u¿ytkownika...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "Ustawienia nag³ówka u¿ytkownika" - -#: src/prefs_customheader.c:213 -msgid "Value" -msgstr "Warto¶æ" - -#: src/prefs_customheader.c:322 -msgid "Reading custom header configuration...\n" -msgstr "Odczytywanie konfiguracji nag³ówka u¿ytkownika...\n" - -#: src/prefs_customheader.c:367 -msgid "Writing custom header configuration...\n" -msgstr "Zapisywanie konfiguracji nag³ówka u¿ytkownika...\n" - -#: src/prefs_customheader.c:492 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "Brak nazwy nag³ówka." - -#: src/prefs_customheader.c:546 -msgid "Delete header" -msgstr "Usuñ nag³ówek" - -#: src/prefs_customheader.c:547 -msgid "Do you really want to delete this header?" -msgstr "Czy naprawdê chcesz usun±æ ten nag³ówek?" - -#: src/prefs_display_header.c:187 -msgid "Creating display header setting window...\n" -msgstr "Tworzenie okna ustawieñ wy¶wietlania nag³ówka\n" - -#: src/prefs_display_header.c:210 -msgid "Display header setting" -msgstr "Ustawienia wy¶wietlania nag³ówka" - -#: src/prefs_display_header.c:237 -msgid "Header name" -msgstr "Nazwa nag³ówka" - -#: src/prefs_display_header.c:269 -msgid "Displayed Headers" -msgstr "Wy¶wietlone nag³ówki " - -#: src/prefs_display_header.c:327 -msgid "Hidden headers" -msgstr "Ukryte nag³ówki" - -#: src/prefs_display_header.c:357 -msgid "Show all unspecified headers" -msgstr "Poka¿ wszystkie nieokre¶lone nag³ówki" - -#: src/prefs_display_header.c:382 -msgid "Reading configuration for displaying headers...\n" -msgstr "Odczytywanie konfiguracji wy¶wietlania nag³ówków...\n" - -#: src/prefs_display_header.c:420 -msgid "Writing configuration for displaying headers...\n" -msgstr "Zapisywanie konfiguracji wy¶wietlania nag³ówków...\n" - -#: src/prefs_display_header.c:552 -msgid "This header is already in the list." -msgstr "Taki nag³ówek ju¿ wystêpuje." - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "Zarejestrowane regu³y" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "Tworzenie okna ustawieñ fitra...\n" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "UStawienia filtra" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "Operator" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(¿aden)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "S³owo kluczowe" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "Orzecznik" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "zawiera" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "nie zawiera" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "Przeznaczenie" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "U¿yj wyra¿enia regularnego" - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "Nie odbieraj" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "Rejestruj" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr " Zast±p " - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "Odczytywanie ustawieñ filtra...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "Zapisywanie ustawieñ filtra...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "(Nowy)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "Nie okre¶lone Przeznaczenie." - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "Usuñ regu³ê" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -msgstr "Naprawdê chcesz usun±æ tê regu³ê?" - -#: src/procmime.c:687 -msgid "Code conversion failed.\n" -msgstr "B³±d konwersji kodu.\n" - -#: src/procmsg.c:137 src/procmsg.c:153 -msgid "Cache data is corrupted\n" -msgstr "Zapamiêtane dane s± uszkodzone\n" - -#: src/procmsg.c:202 -msgid "\tNo cache file\n" -msgstr "\tBrak pliku cache\n" - -#: src/procmsg.c:209 -msgid "\tReading summary cache..." -msgstr "\tOdczytywanie podsumowania cache..." - -#: src/procmsg.c:214 -msgid "Cache version is different. Discarding it.\n" -msgstr "Rózne wersje cache, odrzucenie.\n" - -#: src/procmsg.c:280 -msgid "\tMarking the messages..." -msgstr "\tZaznaczanie wiadomo¶ci..." - -#: src/procmsg.c:321 -#, c-format -msgid "\t%d new message(s)\n" -msgstr "\t%d nowe wiadomo¶ci\n" - -#: src/procmsg.c:455 -msgid "Mark file not found.\n" -msgstr "Nie znaleziono pliku zaznaczeñ.\n" - -#: src/procmsg.c:457 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "Ró¿na wersja zaznaczeñ (%d != %d). Odrzucam.\n" - -#: src/procmsg.c:473 -msgid "Can't open mark file with append mode.\n" -msgstr "Nie mogê otworzyæ pliku zaznaczeñ dla do³±czania.\n" - -#: src/procmsg.c:478 -msgid "Can't open mark file with write mode.\n" -msgstr "Nie moge otworzyæ pliku zaznaczeñ dla zapisu.\n" - -#: src/procmsg.c:661 -msgid "Sending queued message failed.\n" -msgstr "B³±d wysy³ania wiadomo¶ci z kolejki.\n" - -#: src/procmsg.c:718 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "B³êdna linia polecenia wydruku: '%s'\n" - -#: src/progressdialog.c:53 -msgid "Status" -msgstr "Stan" - -#: src/progressdialog.c:55 -msgid "Creating progress dialog...\n" -msgstr "Tworzenie dialogu postêpu...\n" - -#: src/recv.c:112 -msgid "error occurred while retrieving data.\n" -msgstr "b³±d podczas odbierania danych.\n" - -#: src/recv.c:152 src/recv.c:191 src/recv.c:207 -msgid "Can't write to file.\n" -msgstr "Nie mo¿na zapisaæ do pliku.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "Oops: Podpis nie zweryfikowany" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "Nie znaleziono podpisu" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "Poprawny podpis" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "Z£Y podpis" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "Brak klucza publicznego dla sprawdzenia podpisu" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "B³±d podczas sprawdzania podpisu" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "Ró¿ne wyniki dla podpisów" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "B³±d: Nieznany stan" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "Poprawny podpis od \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "Z£Y podpis od \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "Nie mo¿na znale¼æ ID u¿ykownika dla tego klucza" - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr " jako \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "Podpis wykona³ %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "Odcisk klucza: %s\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "Wybierz klucz dla `%s'" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "Zbieranie informacji dla `%s' ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "Wybierz klucze" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "ID klucza" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "Wybierz" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "Dodaj klucz" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "Wprowad¼ innego u¿ytkownika lub ID klucza\n" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "Uszkodzony nag³ówek wiadomo¶ci w kolejce.\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "Konto nie znalezione. U¿ywam bie¿±cego konta...\n" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "Konto nie znalezione.\n" - -#: src/send.c:250 -#, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "£±czenie z serwerem SMTP: %s ..." - -#: src/send.c:254 -msgid "Connecting" -msgstr "Pod³±czanie" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "Wysy³anie MAIL FROM..." - -#: src/send.c:262 -msgid "Sending" -msgstr "Wysy³anie" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "Wysy³anie RCPT TO..." - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "Wysy³anie DATA" - -#: src/send.c:292 -#, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "Wysy³anie wiadomo¶ci (%d / %d) (%d / %d bajtów)" - -#: src/send.c:309 -msgid "Quitting..." -msgstr "Wychodzenie..." - -#: src/send.c:330 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "Nie mogê po³±czyæ siê z serwerem SMTP: %s:%d\n" - -#: src/send.c:341 -msgid "Error occurred while sending HELO\n" -msgstr "B³±d podczas wysy³ania HELO\n" - -#: src/send.c:357 -msgid "Sending message" -msgstr "Wysy³anie wiadomo¶ci" - -#: src/setup.c:43 -msgid "Mailbox setting" -msgstr "Ustawienia skrzynki" - -#: 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 "" -"Najpierw wybierz miejsce skrzynki.\n" -"Je¶li posiadasz, to mo¿esz u¿yæ istniej±cej\n" -"skrzynki w formacie MH.\n" -"Je¶li nie jeste¶ pewien, wybierz OK." - -#: src/sourcewindow.c:76 -msgid "Creating source window...\n" -msgstr "Tworzenie okna ¼ród³a...\n" - -#: src/sourcewindow.c:80 -msgid "Source of the message" -msgstr "¬ród³o wiadomo¶ci" - -#: src/sourcewindow.c:140 -#, c-format -msgid "Displaying the source of %s ...\n" -msgstr "Wy¶wietlanie ¼ród³a %s ...\n" - -#: src/sourcewindow.c:142 -#, c-format -msgid "%s - Source" -msgstr "%s - ¬ród³o" - -#: src/summary_search.c:99 src/summary_search.c:190 -msgid "Search" -msgstr "Szukaj" - -#: src/summary_search.c:172 -msgid "Case sensitive" -msgstr "Rozró¿nianie wielko¶ci liter" - -#: src/summary_search.c:178 -msgid "Backward search" -msgstr "Wyszukiwanie w ty³" - -#: src/summary_search.c:184 -msgid "Select all matched" -msgstr "Wybierz wszystkie pasuj±ce" - -#: src/summary_search.c:191 -msgid "Clear" -msgstr "Wyczy¶æ" - -#: src/summary_search.c:286 -msgid "Search failed" -msgstr "B³±d wyszukiwania" - -#: src/summary_search.c:287 -msgid "Search string not found." -msgstr "Nie znaleziono szukanego ci±gu." - -#: src/summary_search.c:292 -msgid "Beginning of list reached; continue from end?" -msgstr "Osi±gniêto pocz±tek listy; zacz±æ od koñca?" - -#: src/summary_search.c:294 -msgid "End of list reached; continue from beginning?" -msgstr "Osi±gniêto koniec listy; zacz±æ od pocz±tku?" - -#: src/summary_search.c:296 -msgid "Search finished" -msgstr "Przeszukiwanie zakoñczone" - -#: src/summaryview.c:297 -msgid "/M_ove..." -msgstr "/_Przenie¶..." - -#: src/summaryview.c:298 -msgid "/_Copy..." -msgstr "/_Kopiuj..." - -#: src/summaryview.c:300 -msgid "/E_xecute" -msgstr "/_Wykonaj" - -#: src/summaryview.c:301 -msgid "/_Mark" -msgstr "/_Zaznacz" - -#: src/summaryview.c:302 -msgid "/_Mark/_Mark" -msgstr "/_Zaznacz/_Zaznacz" - -#: src/summaryview.c:303 -msgid "/_Mark/_Unmark" -msgstr "/_Zaznacz/_Odznacz" - -#: src/summaryview.c:304 -msgid "/_Mark/---" -msgstr "/_Zaznacz/---" - -#: src/summaryview.c:305 -msgid "/_Mark/Mark as unr_ead" -msgstr "/_Zaznacz/Zaznacz jako niep_rzeczytane" - -#: src/summaryview.c:306 -msgid "/_Mark/Mark as rea_d" -msgstr "/_Zaznacz/Zaznacz jako prz_eczytane" - -#: src/summaryview.c:309 -msgid "/_Reply" -msgstr "/_Odpowiedz" - -#: src/summaryview.c:310 -msgid "/Repl_y to sender" -msgstr "/Odpowiedz nadawc_y" - -#: src/summaryview.c:311 -msgid "/Reply to a_ll" -msgstr "/Odpowiedz wszystki_m" - -#: src/summaryview.c:312 -msgid "/_Forward" -msgstr "/Prze_ka¿" - -#: src/summaryview.c:313 -msgid "/Forward as a_ttachment" -msgstr "/Przeka¿ jako za³±cznik" - -#: src/summaryview.c:316 -#, fuzzy -msgid "/Add sender to address _book" -msgstr "Ksi±¿ka adresowa" - -#: src/summaryview.c:319 -msgid "/Open in new _window" -msgstr "/Ot_wórz w nowym oknie" - -#: src/summaryview.c:320 -msgid "/View so_urce" -msgstr "Poka¿ ¼ród³_o" - -#: src/summaryview.c:321 -msgid "/Show all _header" -msgstr "/Poka¿ wszystkie na_g³ówki" - -#: src/summaryview.c:322 -msgid "/Re-_edit" -msgstr "/Prz_eedytuj" - -#: src/summaryview.c:325 -msgid "/_Print..." -msgstr "/_Drukuj..." - -#: src/summaryview.c:327 -msgid "/Select _all" -msgstr "/_Wybierz wszystkie" - -#: src/summaryview.c:333 -msgid "M" -msgstr "M" - -#: src/summaryview.c:333 -msgid "U" -msgstr "U" - -#: src/summaryview.c:348 -msgid "Creating summary view...\n" -msgstr "Tworzenie widoku podsumowania...\n" - -#: src/summaryview.c:363 -msgid "No." -msgstr "Nr" - -#: src/summaryview.c:615 -msgid "Process mark" -msgstr "Znacznik procesu" - -#: src/summaryview.c:616 -msgid "Some marks are left. Process it?" -msgstr "brak niektórych znaczników, wykonaæ ?" - -#: src/summaryview.c:642 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"pusty folder\n" -"\n" - -#: src/summaryview.c:656 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Skanowanie katalogu (%s)..." - -#: src/summaryview.c:871 -msgid "No unread message" -msgstr "Brak nieprzeczytanych wiadomo¶ci" - -#: src/summaryview.c:872 -msgid "No unread message found. Go to next folder?" -msgstr "" -"Nie znaleziono nieprzeczytanych wiadomo¶ci.\n" -"I¶æ do nastêpnego folderu?" - -#: src/summaryview.c:1009 src/summaryview.c:1011 -msgid "Attracting messages by subject..." -msgstr "£±czenie wiadomo¶ci wg tematu..." - -#: src/summaryview.c:1154 -#, c-format -msgid "%d deleted" -msgstr "%d usuniêto" - -#: src/summaryview.c:1158 -#, c-format -msgid "%s%d moved" -msgstr "%s%d przeniesiono" - -#: src/summaryview.c:1159 src/summaryview.c:1166 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1164 -#, c-format -msgid "%s%d copied" -msgstr "%s%d skopiowano" - -#: src/summaryview.c:1181 -msgid " item(s) selected" -msgstr " element(ów) wybrany(o)" - -#: src/summaryview.c:1192 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d nowych, %d nieprzeczytanych, razem %d (%s)" - -#: src/summaryview.c:1198 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d nowych, %d nieprzeczytanych, %d razem" - -#: src/summaryview.c:1239 src/summaryview.c:1240 -msgid "Sorting summary..." -msgstr "Sortowanie podsumowania..." - -#: src/summaryview.c:1278 -msgid "\tSetting summary from message data..." -msgstr "\tUstawianie podsumowania z danych wiadomo¶ci..." - -#: src/summaryview.c:1280 -msgid "Setting summary from message data..." -msgstr "Ustawianie podsumowania z danych wiadomo¶ci..." - -#: src/summaryview.c:1391 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "Zapisywanie summary cache (%s)..." - -#: src/summaryview.c:1443 -msgid "(No Date)" -msgstr "(Bez daty)" - -#: src/summaryview.c:1776 -#, c-format -msgid "Message %d is marked\n" -msgstr "Wiadomo¶æ %d zaznaczona\n" - -#: src/summaryview.c:1805 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "Wiadomo¶æ %d zaznaczona jako przeczytana\n" - -#: src/summaryview.c:1840 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Wiadomo¶æ %d zaznaczona jako nieprzeczytana\n" - -#: src/summaryview.c:1880 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Wiadomo¶æ %s/%d ustawiona do skasowania\n" - -#: src/summaryview.c:1894 -msgid "Current folder is Trash." -msgstr "Bie¿±cy folder to ¦mietnik." - -#: src/summaryview.c:1916 src/summaryview.c:1918 -msgid "Deleting duplicated messages..." -msgstr "Kasowanie powielonych wiadomo¶ci..." - -#: src/summaryview.c:1965 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Wiadomo¶æ %s/%d niezaznaczona\n" - -#: src/summaryview.c:2002 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "Wiadomo¶æ %d ustawiona do przesuniêcia do %s\n" - -#: src/summaryview.c:2014 -msgid "Destination is same as current folder." -msgstr "Folder docelowy taki sam jak bie¿±cy." - -#: src/summaryview.c:2064 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "Wiadomo¶æ %d ustawiona do kopiowania do %s\n" - -#: src/summaryview.c:2077 -msgid "Destination to copy is same as current folder." -msgstr "Folder docelowy taki sam jak bie¿±cy." - -#: src/summaryview.c:2110 -msgid "Selecting all messages..." -msgstr "Wybieranie wszystkich wiadomo¶ci" - -#: src/summaryview.c:2164 -msgid "Print" -msgstr "Drukuj" - -#: src/summaryview.c:2165 -#, c-format -msgid "" -"Enter the print command line:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Podaj polecenie wydruku:\n" -"('%s' zostanie zast±pione nazw± pliku)" - -#: src/summaryview.c:2171 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"B³êdne polecenie wydruku:\n" -"`%s'" - -#: src/summaryview.c:2399 src/summaryview.c:2400 -msgid "Building threads..." -msgstr "Tworzenie w±tków..." - -#: src/summaryview.c:2473 src/summaryview.c:2474 -msgid "Unthreading..." -msgstr "Odw±tkowanie ..:-)" - -#: src/summaryview.c:2507 -msgid "Unthreading for execution..." -msgstr "Odw±tkowanie w celu wykonania" - -#: src/summaryview.c:2557 -msgid "filtering..." -msgstr "filtrowanie..." - -#: src/summaryview.c:2558 -msgid "Filtering..." -msgstr "Filtowanie..." - -#: src/summaryview.c:2665 -#, c-format -msgid "Go to %s\n" -msgstr "Id¼ do %s\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "Tworzenie widoku tekstowego...\n" - -#: src/textview.c:370 -#, fuzzy -msgid "To save this part, pop up the context menu with " -msgstr "By zapisaæ tê czê¶æ, rozwiñ menu kontekstowe \n" - -#: src/textview.c:371 -msgid "right click and select `Save as...', " -msgstr "prawym przyciskiem i wybierz `Zapisz jako...'," - -#: src/textview.c:372 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"lub naci¶nij 'y'.\n" -"\n" - -#: src/textview.c:374 -msgid "To display this part as a text message, select " -msgstr "By wy¶wietliæ czê¶æ jako wiadomo¶æ tekstow± wybierz" - -#: src/textview.c:375 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"'Wy¶wietl jako tekst' lub naci¶nij klawisz 't'.\n" -"\n" - -#: src/textview.c:377 -msgid "To open this part with external program, select " -msgstr "By otworzyæ tê czê¶æ w zewnêtrznym programie wybierz" - -#: src/textview.c:378 -msgid "`Open' or `Open with...', " -msgstr "`Otówrz' lub `Otwórz z...'," - -#: src/textview.c:379 -msgid "or double-click, or click the center button, " -msgstr "lub kliknij podwójnie, lub w ¶rodek przycisku," - -#: src/textview.c:380 -msgid "or press `l' key." -msgstr "lub naci¶nij klawisz `l'." - -#: src/textview.c:399 -msgid "This signature has not been checked yet.\n" -msgstr "Ten podpis nie zosta³ jeszcze sprawdzony.\n" - -#: src/textview.c:400 -msgid "To check it, pop up the context menu with\n" -msgstr "By to sprawdziæ, rozwiñ menu kontekstowe prawym \n" - -#: src/textview.c:401 -msgid "right click and select `Check signature'.\n" -msgstr "przyciskiem myszy i wybierz `Sprawd¼ podpis'.\n" - -#: src/utils.c:1558 -#, c-format -msgid "writing to %s failed.\n" -msgstr "b³±d zapisu do %s.\n" - -#: src/utils.c:1599 -#, c-format -msgid "move_file(): file %s already exists." -msgstr "move_file(): plik '%s' ju¿ istnieje." - -#: src/utils.c:1740 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "B³êdne polecenie otwarcia URI : '%s'" - -#~ msgid "Authorization for %s on %s failed" -#~ msgstr "Autoryzacja dla %s na %s nie powiod³a siê" - -#~ msgid "Can't connect to POP3 server: %s:%d" -#~ msgstr "Nie mo¿na po³±czyæ siê z serwerem POP3: %s:%d" - -#~ msgid "Authorizing..." -#~ msgstr "Autoryzowanie..." - -#~ msgid "" -#~ "Ordinary characters placed in the format string are copied without " -#~ "conversion. Conversion specifiers are introduced by a % character, and " -#~ "are replaced as follows:\n" -#~ "%a: the abbreviated weekday name\n" -#~ "%A: the full weekday name\n" -#~ "%b: the abbreviated month name\n" -#~ "%B: the full month name\n" -#~ "%c: the preferred date and time for the current locale\n" -#~ "%C: the century number (year/100)\n" -#~ "%d: the day of the month as a decimal number\n" -#~ "%H: the hour as a decimal number using a 24-hour clock\n" -#~ "%I: the hour as a decimal number using a 12-hour clock\n" -#~ "%j: the day of the year as a decimal number\n" -#~ "%m: the month as a decimal number\n" -#~ "%M: the minute as a decimal number\n" -#~ "%p: either AM or PM\n" -#~ "%S: the second as a decimal number\n" -#~ "%w: the day of the week as a decimal number\n" -#~ "%x: the preferred date for the current locale\n" -#~ "%y: the last two digits of a year\n" -#~ "%Y: the year as a decimal number\n" -#~ "%Z: the time zone or name or abbreviation" -#~ msgstr "" -#~ "Zwyk³e znaki umieszczone w ci±gu znaków formatuj±cych s± kopiowane " -#~ "bezkonwersji. Znaczniki konwersji poprzedzone s± znakiem % character, i " -#~ "s± zamienione w nastêpuj±cy sposób:\n" -#~ "%a: skrócona nazwa dnia tygodnia\n" -#~ "%A: pe³na nazwa dnia tygodnia\n" -#~ "%b: skrócona nazwa miesi±ca\n" -#~ "%B: pe³na nazwa miesi±ca\n" -#~ "%c: preferowana data i czas z bie¿±cych ustawieñ jêzykowych\n" -#~ "%C: numer roku (rok/100)\n" -#~ "%d: dzieñ miesi±ca jako liczba\n" -#~ "%H: godzina jako liczba (zegar 24-godzinny)\n" -#~ "%I: godzina jako liczba (zegar 12-godzinny)\n" -#~ "%j: dzieñ roku jako liczba\n" -#~ "%m: miesi±c jako liczba\n" -#~ "%M: minuta jako liczba\n" -#~ "%p: AM lub PM\n" -#~ "%S: sekundy jako liczba\n" -#~ "%w: dzieñ tygodnia jako liczba\n" -#~ "%x: preferowana data z bie¿±cych ustawieñ jêzykowych\n" -#~ "%y: ostatnie dwie cyfry roku\n" -#~ "%Y: rok jako liczba\n" -#~ "%Z: strefa czasowa lub nazwa lub skrót" - -#~ msgid "" -#~ "Emulate the behavior of mouse operation of\n" -#~ "Emacs-based mailer" -#~ msgstr "" -#~ "Emuluj zachowanie myszy z \n" -#~ "programów pocztowych Emacs'a" - -#~ msgid "done." -#~ msgstr "zrobiono." - -#~ msgid "can't get the next uid of folder: %s\n" -#~ msgstr "nie mogê dostaæ nastêpnego uid foldera: %s\n" - -#~ msgid "Automatic" -#~ msgstr "Automatycznie" - -#~ msgid "/Remove _news server" -#~ msgstr "/Usuñ serwer _news" - -#~ msgid "Really delete news server `%s'?" -#~ msgstr "Naprawdê skasowaæ serwer news `%s' ?" - -#~ msgid "Delete news server" -#~ msgstr "Usuñ serwer news" - -#~ msgid "deleting message %d...\n" -#~ msgstr "usuwanie wiadomo¶ci %d...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/_Widok/_Pasek narzêdzi/_Niewy¶wietlane" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/_Wiadomo¶æ/_Zaznaczenie/Zaznacz jako _przeczytane" - -#~ msgid "deleting article %d...\n" -#~ msgstr "usuwam artyku³ %d...\n" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/_Zaznacz/Zaznacz jako _przeczytane" - -#~ msgid "Show other headers" -#~ msgstr "Poka¿ inne nag³ówki" - -#~ 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 "" -#~ "Obs³uga MD5 jest zastrze¿ona przez RSA Data Security, Inc. Pro Spójrz w " -#~ "komentarz w module md5.c by przeczytaæ licencjê.\n" -#~ "\n" - -#~ msgid "SunMonTueWedThuFriSat" -#~ msgstr "NiePonWtoSroCzwPiaSob" - -#~ msgid "/_Summary/Select a_ll" -#~ msgstr "/_Podsumowanie/_Wybierz wszystko" - -#~ msgid "Clean trash" -#~ msgstr "Opró¿nij ¶mietnik" - -#~ msgid "/_Mark/Mark as _important" -#~ msgstr "/_Zaznacz/Zaznacz jako wa¿_ne" - -#~ msgid "D" -#~ msgstr "D" - -#~ msgid "o" -#~ msgstr "o" - -#~ msgid "TextView: color allocation failed\n" -#~ msgstr "TextView: b³±d alokacji koloru\n" - -#~ msgid "*** Warning: code conversion failed ***\n" -#~ msgstr "*** Uwaga: b³±d kodu konwersji ***\n" - -#~ msgid "Invalid MIME type\n" -#~ msgstr "B³êdny typ MIME\n" - -#~ msgid "Reply-To:" -#~ msgstr "Adres zwrotny:" - -#~ msgid "%s - Compose message [Edited]" -#~ msgstr "%s - Twórz wiadomo¶æ [Edited]" - -#~ msgid "/_Add news server" -#~ msgstr "/Dod_aj serwer news" - -#~ msgid "deleting folder %s ...\n" -#~ msgstr "usuwanie folder %s ...\n" - -#~ msgid "deleting newsgroup %s ...\n" -#~ msgstr "usuwanie grupê news %s ...\n" - -#~ msgid "The news server `%s' already exists." -#~ msgstr "Serwer news `%s' ju¿ istnieje." - -#~ msgid "deleting cache folder of %s ...\n" -#~ msgstr "usuwanie folderu cache z %s ...\n" - -#~ msgid "IMAP login command is invalid.\n" -#~ msgstr "Niepoprawna komenda logowania IMAP.\n" - -#~ msgid "Next unread" -#~ msgstr "Nastêpna nieprzeczytana" - -#~ msgid "New directory" -#~ msgstr "Nowy katalog" - -#~ msgid "The directory not found. Create it?" -#~ msgstr "Nie znaleziono katalogu. Utworzyæ?" - -#~ msgid "Can't create directory." -#~ msgstr "Nie mogê utworzyæ katalogu." - -#~ msgid "Selected name isn't a directory." -#~ msgstr "Wybrana nazwa nie jest katalogiem." - -#~ msgid "Writing mail folder list..." -#~ msgstr "Zapisywanie listy folderów poczty..." - -#~ msgid "Writing imap folder list..." -#~ msgstr "Zapisywanie listy folderów imap..." - -#~ msgid "Writing news folder list..." -#~ msgstr "Zapisywanie listy folderów news..." - -#~ msgid "Reading folder %s ..." -#~ msgstr "Czytanie folderu %s ..." - -#~ msgid "Mail Server (IMAP4)" -#~ msgstr "Serwer pocztowy (IMAP4)" - -#~ msgid "reading folder list %s ..." -#~ msgstr "czytam listê folderów %s ..." - -#~ msgid "Broken folder list cache.\n" -#~ msgstr "Uszkodzona lista zapamiêtanych folderów.\n" - -#~ msgid "Select destination directory" -#~ msgstr "Wybierz katalog docelowy" - -#~ msgid "can't drop message into %s\n" -#~ msgstr "nie mogê wrzuciæ wiadomo¶ci do %s\n" - -#~ msgid "%s exists\n" -#~ msgstr "%s istnieje\n" - -#~ msgid "can't move tmpmsg to %s\n" -#~ msgstr "nie mogê przenie¶æ tmpmsg do %s\n" - -#~ msgid "IMAP session is not established\n" -#~ msgstr "Nie ustanowiona sesja IMAP\n" - -#~ msgid "news session is not established\n" -#~ msgstr "nie ustanowiona sesja news\n" - -#~ msgid "Unlinking message %s in trash...\n" -#~ msgstr "Od³±czanie wiadomo¶ci w ¶mietniku...\n" - -#~ msgid "Not yet implemented." -#~ msgstr "Jescze nie zaimplementowano." - -#~ msgid "/_Summary/Unsele_ct all" -#~ msgstr "/_Podsumowanie/Odzna_cz wszystko" - -#~ msgid "Korean (ISO-2022-KR)" -#~ msgstr "Korea (ISO-2022-KR)" - -#~ msgid "Enable thread view on summary" -#~ msgstr "W³±cz widok w±tków w podsumowaniu" - -#~ msgid "Printing" -#~ msgstr "Drukowanie" - -#~ msgid "" -#~ "Date\n" -#~ "from\n" -#~ "Subject\n" -#~ "To\n" -#~ "Message-ID\n" -#~ "%" -#~ msgstr "" -#~ "Data\n" -#~ "Od\n" -#~ "Temat\n" -#~ "Do\n" -#~ "Message-ID\n" -#~ "%" - -#~ msgid "Invalid month\n" -#~ msgstr "Niepoprawny miesi±c\n" - -#~ msgid "/_Mark/Mark _all" -#~ msgstr "/_Zaznacz/Z_aznacz wszystko" - -#~ msgid "/_Mark/U_nmark all" -#~ msgstr "/_Zaznacz/_Odznacz wszystko" - -#~ msgid "/_Mark/M_ove marked" -#~ msgstr "/_Zaznacz/Przenie¶ zaznacz_one" - -#~ msgid "/_Mark/_Delete marked" -#~ msgstr "/_Zaznacz/_Usuñ zaznaczone" - -#~ msgid "/U_nselect all" -#~ msgstr "/Odz_nacz wszystko" - -#~ msgid "/_Message/Reply with _quotation" -#~ msgstr "/Wiado_mo¶æ/Odpowiedz z _cytatem" - -#~ msgid "/Reply with _quotation" -#~ msgstr "/Odpowiedz z _cytatem" - -#~ msgid "queueing message that failed to send...\n" -#~ msgstr "kolejkowanie wiadomo¶ci, których nie uda³o siê wys³aæ...\n" - -#~ msgid "allocated mainview size: width = %d, height = %d\n" -#~ msgstr "" -#~ "zaalokowano wielko¶æ g³ównego widoku: szeroko¶æ = %d, wysoko¶æ = %d\n" - -#~ msgid "allocated mainwin size: width = %d, height = %d\n" -#~ msgstr "zaalokowano wielko¶æ g³ównego okna: szeroko¶æ = %d, wysoko¶æ = %d\n" diff --git a/po/pt_BR.po b/po/pt_BR.po deleted file mode 100644 index 83a85480e..000000000 --- a/po/pt_BR.po +++ /dev/null @@ -1,5207 +0,0 @@ -# Portuguese translation of Sylpheed-claws. -# Copyright (C) 2000 Free Software Foundation, Inc. -# André Casteliano <digitalcoder@users.sourceforge.net>, 2000. -# Fabio Junior Beneditto <kamikazenh@linuxbr.com.br>, 2001 -msgid "" -msgstr "" -"Project-Id-Version: sylpheed-0.5.2claws1\n" -"POT-Creation-Date: 2001-08-10 12:43-0300\n" -"PO-Revision-Date: 2001-08-12\n" -"Last-Translator: Fabio Junior Beneditto <kamikazenh@linuxbr.com.br>\n" -"Language-Team: André Casteliano <digitalcoder@users.sourceforge.net> Isaías " -"V. Prestes <isix@uol.com.br> Fabio Junior Beneditto <kamikazenh@linuxbr.com." -"br>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-1\n" -"Content-Transfer-Encoding: 8Bit\n" -"X-Generator: ViM 5.6\n" - -#: src/about.c:90 -msgid "About" -msgstr "Sobre" - -#: src/about.c:205 -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:211 -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:216 -msgid "" -"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" -"\n" -msgstr "" -"GPGME está sob copyright de Werner Koch <dd9jn@gnu.org>, 2001\n" -"\n" - -#: src/about.c:220 -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 Versão 2, ou (opcionalmente) qualquer Versão " -"posterior.\n" -"\n" - -#: src/about.c:226 -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:232 -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 Licença Pública GNU juntamente com este " -"programa. Caso não, escreva para Free Software Foundation, Inc., 59 Temple " -"Place - Suite 330, Boston, MA 02111-1307, USA." - -#. Button panel -#: src/about.c:239 src/addressbook.c:1815 src/alertpanel.c:238 -#: src/compose.c:2008 src/compose.c:3751 src/editjpilot.c:340 -#: src/editldap.c:241 src/editldap_basedn.c:212 src/editvcard.c:236 -#: src/export.c:185 src/foldersel.c:179 src/grouplistdialog.c:204 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:360 src/main.c:368 -#: src/mainwindow.c:1994 src/messageview.c:348 src/mimeview.c:724 -#: src/passphrase.c:119 src/prefs.c:475 src/prefs_common.c:2356 -#: src/prefs_common.c:2512 src/prefs_common.c:2791 src/prefs_common.c:2910 -#: src/prefs_customheader.c:162 src/prefs_display_header.c:206 -#: src/prefs_filter.c:203 src/prefs_filtering.c:323 src/prefs_matcher.c:301 -#: src/prefs_matcher.c:1462 src/prefs_scoring.c:199 src/sigstatus.c:134 -#: src/summaryview.c:2839 src/summaryview.c:3404 -msgid "OK" -msgstr "Ok" - -#: src/account.c:109 -msgid "Reading all config for each account...\n" -msgstr "Lendo as configurações de cada conta...\n" - -#: src/account.c:124 -#, c-format -msgid "Found label: %s\n" -msgstr "Texto encontrado: %s\n" - -#: src/account.c:238 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" -"Há janelas de composição de mensagens abertas.\n" -"Por favor, feche-as antes de modificar as opções de suas contas de email." - -#: src/account.c:244 -msgid "Opening account edit window...\n" -msgstr "Abrindo as configurações de contas...\n" - -#: src/account.c:414 -msgid "Creating account edit window...\n" -msgstr "Criando janela de configurações de contas...\n" - -#: src/account.c:419 -msgid "Edit accounts" -msgstr "Configurar contas" - -#: src/account.c:447 src/addressbook.c:443 src/addressbook.c:1811 -#: src/compose.c:2801 src/editjpilot.c:291 src/editldap.c:296 -#: src/editvcard.c:207 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "Nome" - -#: src/account.c:448 src/prefs_account.c:751 -msgid "Protocol" -msgstr "Protocolo" - -#: src/account.c:449 -msgid "Server" -msgstr "Servidor" - -#: src/account.c:450 src/mainwindow.c:1490 -msgid "Get all" -msgstr "Receber toads" - -#: src/account.c:473 src/addressbook.c:578 src/prefs_customheader.c:242 -#: src/prefs_display_header.c:290 src/prefs_display_header.c:345 -msgid "Add" -msgstr "Adicionar" - -#: src/account.c:479 -msgid "Edit" -msgstr "Editar" - -#: src/account.c:485 src/prefs_customheader.c:249 -msgid " Delete " -msgstr " Apagar " - -#: src/account.c:491 src/prefs_customheader.c:296 -#: src/prefs_display_header.c:309 src/prefs_filter.c:453 -#: src/prefs_filtering.c:569 src/prefs_matcher.c:572 src/prefs_scoring.c:330 -msgid "Down" -msgstr "Abaixo" - -#: src/account.c:497 src/prefs_customheader.c:290 -#: src/prefs_display_header.c:303 src/prefs_filter.c:447 -#: src/prefs_filtering.c:563 src/prefs_matcher.c:566 src/prefs_scoring.c:324 -msgid "Up" -msgstr "Acima" - -#: src/account.c:511 -msgid " Set as default account " -msgstr " Definir como conta padrão " - -#: src/account.c:517 -msgid " Enable/Disable 'Receive at Get all' " -msgstr "" - -#: src/account.c:523 src/prefs_common.c:3246 src/summary_search.c:192 -msgid "Close" -msgstr "Fechar" - -#: src/account.c:577 -msgid "Delete account" -msgstr "Apagar conta" - -#: src/account.c:578 -msgid "Do you really want to delete this account?" -msgstr "Você realmente deseja apagar esta conta?" - -#: src/account.c:579 src/account.c:724 src/addressbook.c:785 -#: src/addressbook.c:1746 src/compose.c:3925 src/folderview.c:1720 -#: src/folderview.c:1763 src/folderview.c:1862 src/folderview.c:1907 -#: src/folderview.c:2005 src/folderview.c:2038 src/mainwindow.c:1019 -#: src/messageview.c:417 src/prefs_customheader.c:548 src/prefs_filter.c:736 -#: src/prefs_filtering.c:836 src/prefs_scoring.c:646 src/summary_search.c:297 -#: src/summaryview.c:880 src/summaryview.c:1216 src/summaryview.c:1242 -#: src/summaryview.c:1272 -msgid "Yes" -msgstr "Sim" - -#: src/account.c:579 src/compose.c:3925 src/folderview.c:1720 -#: src/folderview.c:1763 src/folderview.c:1862 src/folderview.c:1907 -#: src/folderview.c:2005 src/folderview.c:2038 -msgid "+No" -msgstr "+Não" - -#: src/account.c:720 src/account.c:721 src/account.c:725 src/addressbook.c:785 -#: src/addressbook.c:1746 src/mainwindow.c:1019 src/messageview.c:417 -#: src/prefs_customheader.c:548 src/prefs_filter.c:736 -#: src/prefs_filtering.c:836 src/prefs_scoring.c:646 src/summary_search.c:297 -#: src/summaryview.c:880 src/summaryview.c:1216 src/summaryview.c:1242 -#: src/summaryview.c:1272 -msgid "No" -msgstr "Não" - -#: src/addressbook.c:336 src/compose.c:405 src/mainwindow.c:372 -msgid "/_File" -msgstr "/_Arquivo" - -#: src/addressbook.c:337 -msgid "/_File/New _Address" -msgstr "/_Arquivo/Novo _endereço" - -#: src/addressbook.c:338 -msgid "/_File/New _Group" -msgstr "/_Arquivo/Novo _grupo" - -#: src/addressbook.c:339 -msgid "/_File/New _Folder" -msgstr "/_Arquivo/Nova _pasta" - -#: src/addressbook.c:340 -msgid "/_File/New _V-Card" -msgstr "/_Arquivo/Novo _V-Card" - -#: src/addressbook.c:342 -msgid "/_File/New _J-Pilot" -msgstr "/_Arquivo/Novo _J-Pilot" - -#: src/addressbook.c:345 -msgid "/_File/New _Server" -msgstr "/_Arquivo/Novo _Servidor" - -#: src/addressbook.c:347 src/addressbook.c:350 src/compose.c:409 -#: src/mainwindow.c:384 src/mainwindow.c:387 -msgid "/_File/---" -msgstr "/_Arquivo/---" - -#: src/addressbook.c:348 -msgid "/_File/_Edit" -msgstr "/_Arquivo/_Editar" - -#: src/addressbook.c:349 -msgid "/_File/_Delete" -msgstr "/_Arquivo/_Apagar" - -#: src/addressbook.c:351 src/compose.c:410 src/mainwindow.c:388 -msgid "/_File/_Close" -msgstr "/_Arquivo/_Fechar" - -#: src/addressbook.c:352 src/compose.c:451 src/mainwindow.c:571 -msgid "/_Help" -msgstr "/_Ajuda" - -#: src/addressbook.c:353 src/compose.c:452 src/mainwindow.c:576 -msgid "/_Help/_About" -msgstr "/_Ajuda/_Sobre" - -#: src/addressbook.c:358 src/addressbook.c:375 -msgid "/New _Address" -msgstr "/Novo _endereço" - -#: src/addressbook.c:359 src/addressbook.c:376 -msgid "/New _Group" -msgstr "/Novo _grupo" - -#: src/addressbook.c:360 src/addressbook.c:377 -msgid "/New _Folder" -msgstr "/Nova _pasta" - -#: src/addressbook.c:361 -msgid "/New _V-Card" -msgstr "/Novo _V-Card" - -#: src/addressbook.c:363 -msgid "/New _J-Pilot" -msgstr "/Novo _J-Pilot" - -#: src/addressbook.c:366 -msgid "/New _Server" -msgstr "/Novo _Servidor" - -#: src/addressbook.c:368 src/addressbook.c:378 src/compose.c:399 -#: src/folderview.c:220 src/folderview.c:222 src/folderview.c:232 -#: src/folderview.c:235 src/folderview.c:245 src/folderview.c:248 -#: src/folderview.c:258 src/folderview.c:260 src/summaryview.c:341 -#: src/summaryview.c:349 src/summaryview.c:354 src/summaryview.c:357 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:369 src/addressbook.c:379 src/compose.c:412 -#: src/mainwindow.c:391 -msgid "/_Edit" -msgstr "/_Editar" - -#: src/addressbook.c:370 src/addressbook.c:380 src/summaryview.c:327 -msgid "/_Delete" -msgstr "/_Apagar" - -#: src/addressbook.c:443 -msgid "E-Mail address" -msgstr "Endereço de e-mail" - -#: src/addressbook.c:443 src/addressbook.c:1813 -msgid "Remarks" -msgstr "Notas" - -#: src/addressbook.c:454 src/compose.c:3397 -msgid "Address book" -msgstr "Livro de endereços" - -#: src/addressbook.c:543 -msgid "Name:" -msgstr "Nome:" - -#: src/addressbook.c:575 src/addressbook.c:1746 src/mainwindow.c:1638 -#: src/prefs_display_header.c:296 src/prefs_display_header.c:352 -#: src/prefs_filter.c:413 src/prefs_filtering.c:218 src/prefs_filtering.c:529 -#: src/prefs_matcher.c:503 src/prefs_scoring.c:290 -msgid "Delete" -msgstr "Apagar" - -#: src/addressbook.c:581 -msgid "Lookup" -msgstr "Procurar" - -#: src/addressbook.c:593 src/headerview.c:55 src/summary_search.c:152 -msgid "To:" -msgstr "Para:" - -#: src/addressbook.c:597 -msgid "Cc:" -msgstr "Cc:" - -#: src/addressbook.c:601 -msgid "Bcc:" -msgstr "Bcc:" - -#: src/addressbook.c:628 -msgid "Common address" -msgstr "Endereços comuns" - -#: src/addressbook.c:635 -msgid "Personal address" -msgstr "Endereços pessoais" - -#: src/addressbook.c:643 -msgid "V-Card" -msgstr "V-Card" - -#: src/addressbook.c:652 -msgid "J-Pllot" -msgstr "J-Pllot" - -#: src/addressbook.c:669 -msgid "Directory" -msgstr "Diretório" - -#: src/addressbook.c:783 -msgid "Delete address(es)" -msgstr "Apagar endereço(s)" - -#: src/addressbook.c:784 -msgid "Really delete the address(es)?" -msgstr "Apagar realmente o(s) endereço(s)?" - -#: src/addressbook.c:1469 src/folderview.c:1493 src/folderview.c:1550 -#: src/folderview.c:1794 -msgid "New folder" -msgstr "Nova pasta" - -#: src/addressbook.c:1470 src/folderview.c:1494 src/folderview.c:1551 -msgid "Input the name of new folder:" -msgstr "Digite o nome da nova pasta:" - -#: src/addressbook.c:1471 src/folderview.c:1495 src/folderview.c:1552 -#: src/folderview.c:1798 -msgid "NewFolder" -msgstr "NovaPasta" - -#: src/addressbook.c:1482 src/addressbook.c:1527 src/addressbook.c:1604 -#: src/addressbook.c:1695 -msgid "The name already exists." -msgstr "Este nome já existe." - -#: src/addressbook.c:1514 -msgid "New group" -msgstr "Novo grupo" - -#: src/addressbook.c:1515 -msgid "Input the name of new group:" -msgstr "Nome do novo grupo:" - -#: src/addressbook.c:1516 -msgid "NewGroup" -msgstr "NovoGrupo" - -#: src/addressbook.c:1591 -msgid "Edit group" -msgstr "Editar grupo" - -#: src/addressbook.c:1592 -msgid "Input the new name of group:" -msgstr "Nome do novo grupo:" - -#: src/addressbook.c:1681 -msgid "Edit folder" -msgstr "Editar pasta" - -#: src/addressbook.c:1682 -msgid "Input the new name of folder:" -msgstr "Nome da nova pasta:" - -#: src/addressbook.c:1745 -#, c-format -msgid "Really delete `%s' ?" -msgstr "Apagar realmente `%s' ?" - -#: src/addressbook.c:1793 -msgid "Edit address" -msgstr "Editar endereço" - -#: src/addressbook.c:1812 src/compose.c:3396 src/select-keys.c:302 -msgid "Address" -msgstr "Endereço" - -#: src/addressbook.c:1816 src/compose.c:2008 src/compose.c:3752 -#: src/compose.c:4415 src/editjpilot.c:341 src/editldap.c:242 -#: src/editldap_basedn.c:213 src/editvcard.c:237 src/export.c:186 -#: src/foldersel.c:180 src/grouplistdialog.c:205 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:360 src/main.c:368 src/mainwindow.c:1994 -#: src/messageview.c:348 src/mimeview.c:724 src/passphrase.c:123 -#: src/prefs.c:476 src/prefs_common.c:2357 src/prefs_common.c:2911 -#: src/prefs_customheader.c:163 src/prefs_display_header.c:207 -#: src/prefs_filter.c:204 src/prefs_filtering.c:324 src/prefs_matcher.c:302 -#: src/prefs_scoring.c:200 src/progressdialog.c:77 src/select-keys.c:326 -#: src/summaryview.c:880 src/summaryview.c:2839 src/summaryview.c:3404 -msgid "Cancel" -msgstr "Cancelar" - -#: src/addressbook.c:2161 -msgid "Reading addressbook file..." -msgstr "Lendo livro de endereços..." - -#: src/addressbook.c:2165 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s não existe.\n" - -#: src/addressbook.c:2201 src/addressbook.c:2593 src/imap.c:1260 -#: src/imap.c:1279 src/mainwindow.c:726 src/mainwindow.c:1417 src/mh.c:930 -#: src/mh.c:937 src/news.c:748 src/procmsg.c:261 src/procmsg.c:325 -#: src/summaryview.c:1504 src/summaryview.c:1724 src/summaryview.c:1923 -#: src/summaryview.c:2023 src/summaryview.c:2565 src/summaryview.c:3115 -#: src/summaryview.c:3138 src/summaryview.c:3159 src/summaryview.c:3280 -msgid "done.\n" -msgstr "pronto.\n" - -#: src/addressbook.c:2571 -msgid "Exporting addressbook to file..." -msgstr "Exportando livro de endereços..." - -#: src/addressbook.c:2589 -msgid "failed to write addressbook data.\n" -msgstr "falha ao registrar dados no livro de endereços.\n" - -#: src/addressbook.c:3464 -msgid "Personal addresses" -msgstr "Endereços pessoais" - -#: src/addressbook.c:3469 -msgid "Common addresses" -msgstr "Endereços comuns" - -#: src/addr_compl.c:219 -#, c-format -msgid "%s%d entering read_address_book\n" -msgstr "%s%d entrando em read_address_book\n" - -#: src/addr_compl.c:224 -#, c-format -msgid "%s(%d) no addressbook\n" -msgstr "%s(%d) não há Livro de endereços\n" - -#: src/addr_compl.c:242 -#, c-format -msgid "%s(%d) leaving read_address_book - OK\n" -msgstr "%s(%d) saindo de read_address_book - OK\n" - -#: src/alertpanel.c:119 src/compose.c:3925 src/main.c:358 -msgid "Notice" -msgstr "Notificação" - -#: src/alertpanel.c:132 src/main.c:230 -msgid "Warning" -msgstr "Aviso" - -#: src/alertpanel.c:145 src/inc.c:453 -msgid "Error" -msgstr "Erro" - -#: src/alertpanel.c:187 -msgid "Creating alert panel dialog...\n" -msgstr "Criando a tela de alerta...\n" - -#: src/alertpanel.c:275 -msgid "Show this message next time" -msgstr "Exibir este alerta da próxima vez" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "Falha ao alocar memória\n" - -#: src/compose.c:397 -msgid "/_Add..." -msgstr "/_Adicionar" - -#: src/compose.c:398 -msgid "/_Remove" -msgstr "/_Remover" - -#: src/compose.c:400 src/folderview.c:223 src/folderview.c:236 -#: src/folderview.c:249 src/folderview.c:261 -msgid "/_Property..." -msgstr "/_Propriedades..." - -#: src/compose.c:406 -msgid "/_File/_Attach file" -msgstr "/_Arquivo/_Anexar arquivo" - -#: src/compose.c:407 -msgid "/_File/_Insert file" -msgstr "/_Arquivo/_Inserir arquivo" - -#: src/compose.c:408 -msgid "/_File/Insert si_gnature" -msgstr "/_Arquivo/Inserir as_sinatura" - -#: src/compose.c:413 -msgid "/_Edit/_Undo" -msgstr "/_Editar/_Desfazer" - -#: src/compose.c:414 -msgid "/_Edit/_Redo" -msgstr "/_Editar/_Refazer" - -#: src/compose.c:415 src/compose.c:420 src/mainwindow.c:394 -msgid "/_Edit/---" -msgstr "/_Editar/---" - -#: src/compose.c:416 -msgid "/_Edit/Cu_t" -msgstr "/_Editar/Recor_tar" - -#: src/compose.c:417 src/mainwindow.c:392 -msgid "/_Edit/_Copy" -msgstr "/_Editar/_Copiar" - -#: src/compose.c:418 -msgid "/_Edit/_Paste" -msgstr "/_Editar/Co_lar" - -#: src/compose.c:419 src/mainwindow.c:393 -msgid "/_Edit/Select _all" -msgstr "/_Editar/_Selecionar tudo" - -#: src/compose.c:421 -msgid "/_Edit/Wrap long _lines" -msgstr "/_Editar/Quebrar linhas grandes" - -#: src/compose.c:422 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/_Editar/Editar com editor e_xterno" - -#: src/compose.c:425 src/mainwindow.c:484 -msgid "/_Message" -msgstr "/_Mensagem" - -#: src/compose.c:426 -msgid "/_Message/_Send" -msgstr "/_Mensagem/_Enviar" - -#: src/compose.c:428 -msgid "/_Message/Send _later" -msgstr "/_Mensagem/Enviar _depois" - -#: src/compose.c:430 -msgid "/_Message/Save to _draft folder" -msgstr "/_Mensagem/Salvar na pasta rascunho" - -#: src/compose.c:432 src/compose.c:437 src/compose.c:439 src/compose.c:442 -#: src/compose.c:446 src/mainwindow.c:488 src/mainwindow.c:491 -#: src/mainwindow.c:501 src/mainwindow.c:512 -msgid "/_Message/---" -msgstr "/_Mensagem/---" - -#: src/compose.c:433 -msgid "/_Message/_To" -msgstr "/_Mensagem/_Para" - -#: src/compose.c:434 -msgid "/_Message/_Cc" -msgstr "/_Mensagem/_Cc" - -#: src/compose.c:435 -msgid "/_Message/_Bcc" -msgstr "/_Mensagem/_Bcc" - -#: src/compose.c:436 -msgid "/_Message/_Reply to" -msgstr "/_Mensagem/_Responder" - -#: src/compose.c:438 -msgid "/_Message/_Followup to" -msgstr "/_Mensagem/_Encaminhar..." - -#: src/compose.c:440 -msgid "/_Message/_Attach" -msgstr "/_Mensagem/_Anexar" - -#: src/compose.c:443 -msgid "/_Message/Si_gn" -msgstr "/_Mensagem/Assinar c. _GnuPG" - -#: src/compose.c:444 -msgid "/_Message/_Encrypt" -msgstr "/_Mensagem/Cri_ptografar c. GnuPG" - -#: src/compose.c:447 -msgid "/_Message/_Request Return Receipt" -msgstr "/_Mensagem/Confirmação de _Recebimento" - -#: src/compose.c:448 src/mainwindow.c:548 -msgid "/_Tool" -msgstr "/_Ferramentas" - -#: src/compose.c:449 -msgid "/_Tool/Show _ruler" -msgstr "/_Ferramentas/Exibir _régua" - -#: src/compose.c:450 src/mainwindow.c:549 -msgid "/_Tool/_Address book" -msgstr "/_Ferramentas/_Livro de endereços" - -#: src/compose.c:626 src/compose.c:938 src/compose.c:1058 src/procmsg.c:693 -msgid "Can't get text part\n" -msgstr "Não pude obter o texto\n" - -#: src/compose.c:708 src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "Não pude obter partes da mensagem múltipla" - -#: src/compose.c:927 src/compose.c:1011 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: arquivo inexistente\n" - -#: src/compose.c:1701 src/compose.c:1751 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "O arquivo %s não existe\n" - -#: src/compose.c:1705 src/compose.c:1755 -#, 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:1709 src/compose.c:1759 -#, c-format -msgid "File %s is empty\n" -msgstr "O arquivo %s está vazio\n" - -#: src/compose.c:1729 src/compose.c:1780 -#, c-format -msgid "Message: %s" -msgstr "Mensagem: %s" - -#: src/compose.c:1878 -msgid " [Edited]" -msgstr "[Editando]" - -#: src/compose.c:1880 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - Compondo mensagem%s" - -#: src/compose.c:1883 -#, c-format -msgid "Compose message%s" -msgstr "Compondo Mensagem%s" - -#: src/compose.c:1907 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" -"Não foi especificada uma conta para o envio da\n" -"mensagem. Por favor, informe uma." - -#: src/compose.c:1932 src/compose.c:4292 -msgid "Recipient is not specified." -msgstr "Destinatário não especificado." - -#: src/compose.c:1950 -msgid "can't get recipient list." -msgstr "não foi possível obter lista de destinatários." - -#: src/compose.c:1991 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "Ocorreu um erro ao publicar a mensagem para %s ." - -#: src/compose.c:2005 src/messageview.c:345 -msgid "Queueing" -msgstr "Armazenando" - -#: src/compose.c:2006 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"Ocorreu um erro ao enviar as mensagens.\n" -"Deseja pôr esta mensagem na 'Fila de Saída'?" - -#: src/compose.c:2012 src/compose.c:4304 -msgid "Can't queue the message." -msgstr "Não foi possível por a mensagem na fila." - -#: src/compose.c:2015 -msgid "Error occurred while sending the message." -msgstr "Ocorreu um erro ao enviar suas mensagens." - -#: src/compose.c:2022 src/compose.c:4311 -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:2048 src/compose.c:2169 src/compose.c:2260 -#: src/mbox_folder.c:1267 src/mbox_folder.c:1369 src/mbox_folder.c:1940 -#: src/mbox_folder.c:1971 src/mbox_folder.c:2034 src/mbox_folder.c:2067 -#: src/messageview.c:199 src/messageview.c:303 src/utils.c:1641 -msgid "can't change file mode\n" -msgstr "Não foi possível modificar as permissões do arquivo\n" - -#: src/compose.c:2074 -msgid "Can't convert the codeset of the message." -msgstr "Não foi possível converter o código de caracteres da mensagem." - -#: src/compose.c:2083 -msgid "can't write headers\n" -msgstr "não foi possível escrever o cabeçalho\n" - -#: src/compose.c:2201 -msgid "saving sent message...\n" -msgstr "guardando mensagem enviada...\n" - -#: src/compose.c:2211 -msgid "can't save message\n" -msgstr "não foi possível salvar a mensagem\n" - -#: src/compose.c:2216 src/compose.c:2327 src/messageview.c:261 -msgid "can't open mark file\n" -msgstr "não foi possível abrir o arquivo de marcas\n" - -#: src/compose.c:2240 src/messageview.c:180 -msgid "queueing message...\n" -msgstr "armazenando na fila de saída...\n" - -#: src/compose.c:2318 src/messageview.c:252 -msgid "can't queue the message\n" -msgstr "não foi possível por a mensagem na fila\n" - -#: src/compose.c:2357 -#, c-format -msgid "Can't open file %s\n" -msgstr "Não foi possível abrir %s\n" - -#: src/compose.c:2727 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "Message-ID gerado: %s\n" - -#: src/compose.c:2801 src/compose.c:3698 -msgid "MIME type" -msgstr "Tipo MIME" - -#: src/compose.c:2801 src/mimeview.c:139 src/prefs_common.c:2905 -#: src/select-keys.c:299 src/summaryview.c:583 -msgid "Size" -msgstr "Tamanho" - -#: src/compose.c:2818 -msgid "Creating compose window...\n" -msgstr "Criando janela de composição...\n" - -#: src/compose.c:2864 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "De:" - -#. Send Options -#: src/compose.c:3323 src/mainwindow.c:1501 src/prefs_account.c:589 -#: src/prefs_account.c:1266 src/prefs_common.c:760 -msgid "Send" -msgstr "Enviar" - -#: src/compose.c:3324 -msgid "Send message" -msgstr "Enviar mensagem" - -#: src/compose.c:3331 -msgid "Send later" -msgstr "Enviar depois" - -#: src/compose.c:3332 -msgid "Put into queue folder and send later" -msgstr "Por na 'Fila de saída' e enviar depois" - -#: src/compose.c:3339 src/folderview.c:818 -msgid "Draft" -msgstr "Rascunho" - -#: src/compose.c:3340 -msgid "Save to draft folder" -msgstr "Salvar na pasta Rascunho" - -#: src/compose.c:3349 -msgid "Insert" -msgstr "Inserir" - -#: src/compose.c:3350 -msgid "Insert file" -msgstr "Inserir arquivo" - -#: src/compose.c:3357 -msgid "Attach" -msgstr "Anexar" - -#: src/compose.c:3358 -msgid "Attach file" -msgstr "Anexar arquivo" - -#: src/compose.c:3367 src/prefs_common.c:1295 -msgid "Signature" -msgstr "Assinatura" - -#: src/compose.c:3368 -msgid "Insert signature" -msgstr "Inserir assinatura" - -#: src/compose.c:3376 -msgid "Editor" -msgstr "Editor" - -#: src/compose.c:3377 -msgid "Edit with external editor" -msgstr "Editar com um editor externo" - -#: src/compose.c:3385 -msgid "Linewrap" -msgstr "Quebra de linha" - -#: src/compose.c:3386 -msgid "Wrap long lines" -msgstr "Quebrar linhas grandes" - -#: src/compose.c:3593 -msgid "Invalid MIME type." -msgstr "Tipo MIME inválido." - -#: src/compose.c:3611 -msgid "File doesn't exist or is empty." -msgstr "O arquivo não existe ou está vazio." - -#: src/compose.c:3680 -msgid "Property" -msgstr "Propriedades" - -#: src/compose.c:3725 -msgid "Encoding" -msgstr "Codificação" - -#: src/compose.c:3748 -msgid "Path" -msgstr "Caminho" - -#: src/compose.c:3749 -msgid "File name" -msgstr "Nome do arquivo" - -#: src/compose.c:3896 -#, 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:3922 -#, 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:3935 -#, c-format -msgid "Terminated process group id: %d" -msgstr "Terminado processo id.: %d" - -#: src/compose.c:3936 -#, c-format -msgid "Temporary file: %s" -msgstr "Arquivo temporário: %s" - -#: src/compose.c:3960 -msgid "Compose: input from monitoring process\n" -msgstr "Compositor: entrada para monitorar processo\n" - -#. failed -#: src/compose.c:3993 -msgid "Couldn't exec external editor\n" -msgstr "Não foi possível executar o editor externo\n" - -#: src/compose.c:3997 -msgid "Couldn't write to file\n" -msgstr "Não foi possível gravar o arquivo\n" - -#: src/compose.c:3999 -msgid "Pipe read failed\n" -msgstr "Fallhou ao ler o pipe\n" - -#: src/compose.c:4333 -msgid "can't remove the old draft message\n" -msgstr "não foi possível apagar o rascunho anterior\n" - -#: src/compose.c:4361 src/compose.c:4381 -msgid "Select file" -msgstr "Selecionar arquivo" - -#: src/compose.c:4413 -msgid "Discard message" -msgstr "Descartar mensagem" - -#: src/compose.c:4414 -msgid "This message has been modified. discard it?" -msgstr "Esta mensagem foi modificada. Deseja descartá-la ?" - -#: src/compose.c:4415 -msgid "Discard" -msgstr "Descartar" - -#: src/compose.c:4415 -msgid "to Draft" -msgstr "Rascunho" - -#: src/compose.c:4821 -msgid "Quote mark format error." -msgstr "Formato de citação incorreto." - -#: src/compose.c:4835 -msgid "Message reply/forward format error." -msgstr "Formato de resposta/encaminhamento incorreto." - -#: src/editjpilot.c:185 -msgid "File does not appear to be JPilot format." -msgstr "O arquivo não parece estar no formato JPilot." - -#: src/editjpilot.c:188 src/editvcard.c:96 -msgid "Could not read file." -msgstr "Não foi possível ler arquivo." - -#: src/editjpilot.c:221 -msgid "Select JPilot File" -msgstr "Selecione arquivo JPilot" - -#: src/editjpilot.c:269 src/editjpilot.c:394 -msgid "Edit JPilot Entry" -msgstr "Editar item JPilot" - -#: src/editjpilot.c:298 src/editvcard.c:214 -msgid " Check File " -msgstr " Verificar arquivo " - -#: src/editjpilot.c:303 src/editvcard.c:219 -msgid "File" -msgstr "Arquivo" - -#: src/editjpilot.c:310 src/editldap.c:338 src/editvcard.c:226 -msgid " ... " -msgstr " ... " - -#: src/editjpilot.c:315 -msgid "Additional e-Mail address item(s)" -msgstr "Email adicional para o item" - -#: src/editjpilot.c:401 -msgid "Add New JPilot Entry" -msgstr "Adicionar novo item JPilot" - -#: src/editldap.c:162 -msgid "Connected successfully to server" -msgstr "Conectado com sucesso ao servidor" - -#: src/editldap.c:165 src/editldap_basedn.c:291 -msgid "Could not connect to server" -msgstr "Não pude conectar ao servidor" - -#: src/editldap.c:213 src/editldap.c:528 -msgid "Edit LDAP Server" -msgstr "Editar servidor LDAP" - -#: src/editldap.c:305 src/editldap_basedn.c:161 -msgid "Hostname" -msgstr "Nome do Host" - -#: src/editldap.c:314 src/editldap_basedn.c:171 -msgid "Port" -msgstr "Porta" - -#: src/editldap.c:326 -msgid " Check Server " -msgstr " Verificar Servidor " - -#: src/editldap.c:331 src/editldap_basedn.c:181 -msgid "Search Base" -msgstr "Base para procura" - -#: src/editldap.c:388 -msgid "Search Criteria" -msgstr "Critérios para procura" - -#: src/editldap.c:395 -msgid " Reset " -msgstr " Apagar " - -#: src/editldap.c:400 -msgid "Bind DN" -msgstr "Bind DN" - -#: src/editldap.c:409 -msgid "Bind Password" -msgstr "Senha Bind" - -#: src/editldap.c:418 -msgid "Timeout (secs)" -msgstr "Tempo limite (seg)" - -#: src/editldap.c:432 -msgid "Maximum Entries" -msgstr "No. máximo de itens" - -#: src/editldap.c:459 src/prefs_account.c:585 -msgid "Basic" -msgstr "Básico" - -#: src/editldap.c:460 -msgid "Extended" -msgstr "Extendido" - -#: src/editldap.c:540 -msgid "Add New LDAP Server" -msgstr "Adicionar novo Servidor LDAP" - -#: src/editldap_basedn.c:141 -msgid "Edit LDAP - Select Search Base" -msgstr "Editar LDAP - Selecionar base de procura" - -#: src/editldap_basedn.c:202 -msgid "Available Search Base(s)" -msgstr "Bases de procura disponíveis" - -#: src/editldap_basedn.c:287 -msgid "Could not read Search Base(s) from server - please set manually" -msgstr "Não pude ler as 'Bases de procura' do servidor - defina manualmente" - -#: src/editvcard.c:93 -msgid "File does not appear to be VCard format." -msgstr "O arquivo não parace estar no formato VCard." - -#: src/editvcard.c:129 -msgid "Select VCard File" -msgstr "Selecionar arquivo VCard" - -#: src/editvcard.c:185 src/editvcard.c:286 -msgid "Edit VCard Entry" -msgstr "Editar item VCard" - -#: src/editvcard.c:291 -msgid "Add New VCard Entry" -msgstr "Adicionar novo item VCard" - -#: src/export.c:122 -msgid "Export" -msgstr "Exportar" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "Especificar pasta de origem e arquivo mbox." - -#: src/export.c:154 -msgid "Source dir:" -msgstr "Origem:" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "Arquivo a exportar:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:364 -msgid " Select... " -msgstr "Selecionar..." - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "Selecione arquivo a exportar" - -#: src/foldersel.c:132 -msgid "Select folder" -msgstr "Selecione uma pasta" - -#: src/folderview.c:217 src/folderview.c:229 src/folderview.c:242 -msgid "/Create _new folder..." -msgstr "/Criar _nova pasta..." - -#: src/folderview.c:218 src/folderview.c:230 src/folderview.c:243 -msgid "/_Rename folder..." -msgstr "/_Renomear pasta..." - -#: src/folderview.c:219 src/folderview.c:231 src/folderview.c:244 -msgid "/_Delete folder" -msgstr "/_Apagar pasta" - -#: src/folderview.c:221 src/folderview.c:234 -msgid "/Remove _mailbox" -msgstr "/Remover _mailbox" - -#: src/folderview.c:224 src/folderview.c:237 src/folderview.c:250 -#: src/folderview.c:262 -msgid "/_Scoring..." -msgstr "/_Pontuação..." - -#: src/folderview.c:233 src/folderview.c:246 -msgid "/_Update folder tree" -msgstr "/At_ualizar pastas" - -#: src/folderview.c:247 -msgid "/Remove _IMAP4 account" -msgstr "/Remover conta _IMAP4" - -#: src/folderview.c:255 -msgid "/_Subscribe to newsgroup..." -msgstr "/In_scrição em Newsgroup..." - -#: src/folderview.c:257 -msgid "/_Remove newsgroup" -msgstr "/_Eliminar grupo" - -#: src/folderview.c:259 -msgid "/Remove _news account" -msgstr "/Remover conta de _news" - -#: src/folderview.c:271 -msgid "Folder" -msgstr "Pasta" - -#: src/folderview.c:271 -msgid "New" -msgstr "Nova" - -#: src/folderview.c:272 src/prefs_common.c:2901 -msgid "Unread" -msgstr "Não lido" - -#: src/folderview.c:272 -msgid "#" -msgstr "#" - -#: src/folderview.c:284 -msgid "Creating folder view...\n" -msgstr "Criando visualizador de pasta...\n" - -#: src/folderview.c:439 -msgid "Setting folder info...\n" -msgstr "Configurando informações da pasta...\n" - -#: src/folderview.c:440 -msgid "Setting folder info..." -msgstr "Configurando informações da pasta..." - -#: src/folderview.c:605 src/mainwindow.c:2567 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "Revisando pasta %s%c%s ..." - -#: src/folderview.c:609 src/mainwindow.c:2572 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "Revisando pasta %s ..." - -#: src/folderview.c:649 -msgid "Updating folder tree..." -msgstr "Atualizando pastas..." - -#: src/folderview.c:666 -msgid "Updating all folders..." -msgstr "Atualizando todas as pastas..." - -#: src/folderview.c:796 src/prefs_account.c:774 -msgid "Inbox" -msgstr "Caixa de Entrada" - -#: src/folderview.c:801 -msgid "Outbox" -msgstr "Caixa de Saída" - -#: src/folderview.c:806 -msgid "Queue" -msgstr "Fila de saída" - -#: src/folderview.c:811 -msgid "Trash" -msgstr "Lixeira" - -#: src/folderview.c:1357 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Pasta %s selecionada\n" - -#: src/folderview.c:1499 src/folderview.c:1607 src/folderview.c:1803 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "`%c' não pode ser usado como nome da pasta." - -#: src/folderview.c:1507 src/folderview.c:1557 src/folderview.c:1616 -#: src/folderview.c:1671 src/folderview.c:1811 -#, c-format -msgid "The folder `%s' already exists." -msgstr "A pasta `%s' já existe." - -#: src/folderview.c:1599 src/folderview.c:1661 -#, c-format -msgid "Input new name for `%s':" -msgstr "Novo nome para `%s':" - -#: src/folderview.c:1601 src/folderview.c:1663 -msgid "Rename folder" -msgstr "Renomear pasta" - -#: src/folderview.c:1716 -#, 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 apagadas.\n" -"Confirma a exclusão?" - -#: src/folderview.c:1719 src/folderview.c:1861 -msgid "Delete folder" -msgstr "Apagar pasta" - -#: src/folderview.c:1725 src/folderview.c:1867 -#, c-format -msgid "Can't remove the folder `%s'." -msgstr "Não foi possível excluir a pasta `%s'." - -#: src/folderview.c:1759 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" -"Deseja realmente apagar a mailbox `%s'?\n" -"(As mensagens NÃO SERÃO apagadas do disco)" - -#: src/folderview.c:1762 -msgid "Remove folder" -msgstr "Apagar pasta" - -#: src/folderview.c:1795 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"Informe o nome para a nova pasta:\n" -"(se desejas criar uma pasta para armazenar suas subpastas,\n" -"adicione uma `/' ao final do nome)" - -#: src/folderview.c:1819 -#, c-format -msgid "Can't create the folder `%s'." -msgstr "Não pude criar a pasta `%s'." - -#: src/folderview.c:1859 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "Deseja apagar a pasta `%s'?" - -#: src/folderview.c:1904 -#, c-format -msgid "Really delete IMAP4 account `%s'?" -msgstr "Apagar conta IMAP4 `%s'?" - -#: src/folderview.c:1906 -msgid "Delete IMAP4 account" -msgstr "Apagar conta IMAP4" - -#: src/folderview.c:1956 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "O grupo de notícias `%s' já existe." - -#: src/folderview.c:2002 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "Deseja apagar o grupo de notícias `%s'?" - -#: src/folderview.c:2004 -msgid "Delete newsgroup" -msgstr "Apagar grupo de notícias" - -#: src/folderview.c:2035 -#, c-format -msgid "Really delete news account `%s'?" -msgstr "Deseja apagar a conta de news `%s'?" - -#: src/folderview.c:2037 -msgid "Delete news account" -msgstr "Apagar conta de news" - -#: src/grouplistdialog.c:155 -msgid "Subscribe to newsgroup" -msgstr "Inscrição em Newsgroup" - -#: src/grouplistdialog.c:174 -msgid "Input subscribing newsgroup:" -msgstr "Informe o Newsgroup desejado:" - -#: src/grouplistdialog.c:206 -msgid "Refresh" -msgstr "Atualizar" - -#: src/grouplistdialog.c:233 -msgid "Can't retrieve newsgroup list." -msgstr "Não pude obter listagem de grupos." - -#: src/grouplistdialog.c:249 src/summaryview.c:1043 -msgid "Done." -msgstr "Pronto" - -#: src/grouplistdialog.c:260 -#, c-format -msgid "%d newsgroups received (%s read)" -msgstr "%d newsgroups recebidos (%s lidos)" - -#: 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:174 src/summaryview.c:2071 -msgid "(No From)" -msgstr "(Sem remetente)" - -#: src/headerview.c:189 src/summaryview.c:2107 -msgid "(No Subject)" -msgstr "(Sem assunto)" - -#: src/headerwindow.c:56 -msgid "Creating header window...\n" -msgstr "Criando janela de cabeçalhos...\n" - -#: src/headerwindow.c:60 -msgid "All header" -msgstr "Todos os cabeçalhos" - -#: src/headerwindow.c:116 -#, c-format -msgid "Displaying the header of %s ...\n" -msgstr "Exibindo cabeçalhos de %s ...\n" - -#: src/headerwindow.c:118 -#, 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:261 -#, c-format -msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "Finalizada a conexão IMAP4 com %s:%d. Reconectando...\n" - -#: src/imap.c:290 src/inc.c:419 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "Digite a senha para %s em %s:" - -#: src/imap.c:292 src/inc.c:423 src/news.c:131 -msgid "Input password" -msgstr "Digite a senha" - -#: src/imap.c:323 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "criando conexão IMAP4 com %s:%d ...\n" - -#: src/imap.c:487 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "a mensagem %d já está no cache.\n" - -#: src/imap.c:497 -#, c-format -msgid "getting message %d...\n" -msgstr "obtendo mensagem %d...\n" - -#: src/imap.c:503 src/procmsg.c:593 -#, c-format -msgid "can't fetch message %d\n" -msgstr "não pude obter a mensagem %d\n" - -#: src/imap.c:527 -#, c-format -msgid "can't append message %s\n" -msgstr "não pude juntar a mensagem %s\n" - -#: src/imap.c:555 src/imap.c:607 src/mh.c:193 src/mh.c:297 src/mh.c:354 -#: src/mh.c:516 -msgid "the src folder is identical to the dest.\n" -msgstr "pastas de origem e destino são idênticas.\n" - -#: src/imap.c:562 src/imap.c:612 src/mh.c:208 src/mh.c:300 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "Movendo mensagem %s%c%d para %s ...\n" - -#: src/imap.c:566 src/imap.c:616 src/mh.c:372 src/mh.c:519 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "Copiando mensagem %s%c%d para %s ...\n" - -#: src/imap.c:686 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "não pude definir `A apagar': %d\n" - -#: src/imap.c:693 src/imap.c:733 -msgid "can't expunge\n" -msgstr "não pude eliminar\n" - -#: src/imap.c:726 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "não pude marcar para deleção: 1:%d\n" - -#: src/imap.c:890 -msgid "error occured while getting LIST.\n" -msgstr "erro ao obter LIST.\n" - -#: src/imap.c:1091 -msgid "can't create mailbox: LIST failed\n" -msgstr "não pude criar mailbox: falha no comando LIST\n" - -#: src/imap.c:1111 -msgid "can't create mailbox\n" -msgstr "não pude criar a mailbox\n" - -#: src/imap.c:1158 -msgid "can't delete mailbox\n" -msgstr "não pude apagar a mailbox\n" - -#: src/imap.c:1187 -msgid "can't get envelope\n" -msgstr "Não foi possível obter o 'envelope'\n" - -#: src/imap.c:1195 -msgid "error occurred while getting envelope.\n" -msgstr "Ocorreu um erro ao obter 'envelope'\n" - -#: src/imap.c:1210 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "não foi possível analizar o 'envelope': %s\n" - -#: src/imap.c:1240 -#, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "Apagando mensagens em cache %d - %d ... " - -#: src/imap.c:1273 -msgid "Deleting all cached messages... " -msgstr "Apagando todas as mensagens em cache... " - -#: src/imap.c:1291 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "Não pude conectar ao servidor IMAP4: %s:%d\n" - -#: src/imap.c:1331 -msgid "can't get namespace\n" -msgstr "não pude obter o 'namespace'\n" - -#: src/imap.c:1772 -#, c-format -msgid "can't select folder: %s\n" -msgstr "não pude selecionar a pasta: %s\n" - -#: src/imap.c:1889 -msgid "IMAP4 login failed.\n" -msgstr "Falha no login em servidor IMAP4.\n" - -#: src/imap.c:2117 -#, c-format -msgid "can't append %s to %s\n" -msgstr "não pude copiar a mensagem %s para %s\n" - -#: src/imap.c:2137 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "não pude copiar de %d para %s\n" - -#: src/imap.c:2162 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "erro ao executar comando IMAP: STORE %d:%d %s\n" - -#: src/imap.c:2176 -msgid "error while imap command: EXPUNGE\n" -msgstr "erro ao executar comando IMAP: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "Importar" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "Informe arquivo mbox a importar e a pasta de destino" - -#: src/import.c:158 -msgid "Importing file:" -msgstr "Arquivo MBOX:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Pasta de destino:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Selecione arquivo a importar" - -#: src/inc.c:210 src/inc.c:259 src/send.c:350 -msgid "Standby" -msgstr "Aguardando" - -#: src/inc.c:278 -msgid "Retrieving new messages" -msgstr "Obtendo novas mensagens" - -#: src/inc.c:443 -msgid "Retrieving" -msgstr "Buscando..." - -#: src/inc.c:450 -msgid "Done" -msgstr "Pronto" - -#: src/inc.c:463 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "Autorização para %s em %s falhou" - -#: src/inc.c:503 -msgid "Some errors occured while getting mail." -msgstr "Ocorreram erros ao receber mensagens." - -#: src/inc.c:541 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "obtendo novas mensagens da conta %s...\n" - -#: src/inc.c:549 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: Recuperando novas mensagens" - -#: src/inc.c:575 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "Conectando ao servidor POP3: %s ..." - -#: src/inc.c:586 src/inc.c:743 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "Não pude conectar ao servidor POP3: %s:%d\n" - -#: src/inc.c:593 src/inc.c:750 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "Não pude conectar ao servidor POP3: %s:%d" - -#: src/inc.c:785 src/inc.c:837 -#, c-format -msgid "Retrieving message (%d / %d) (%s / %s)" -msgstr "Recuperando mensagens (%d / %d) (%s / %s)" - -#: src/inc.c:811 -msgid "Authorizing..." -msgstr "Autorizando..." - -#: src/inc.c:816 -msgid "Getting the number of new messages (STAT)..." -msgstr "Obtendo o número de novas mensagens (STAT)" - -#: src/inc.c:821 -msgid "Getting the number of new messages (LAST)..." -msgstr "Obtendo o número de novas mensagens (LAST)" - -#: src/inc.c:826 -msgid "Getting the number of new messages (UIDL)..." -msgstr "Obtendo o número de novas mensagens (UIDL)" - -#: src/inc.c:831 -msgid "Getting the size of messages (LIST)..." -msgstr "Obtendo o tamanho das novas mensagens (LIST)" - -#: src/inc.c:849 -msgid "Deleting message" -msgstr "Apagando mensagem" - -#: src/inc.c:853 -msgid "Quitting" -msgstr "Saindo" - -#: src/inc.c:885 -msgid "a message won't be received\n" -msgstr "a mensagem não foi recibida\n" - -#: src/inc.c:921 -msgid "Error occurred while processing mail." -msgstr "Ocorreu um erro enquanto as mensagens eram processadas." - -#: src/inc.c:925 -msgid "No disk space left." -msgstr "Não há espaço disponível no disco." - -#: src/inc.c:1009 -msgid "no messages in local mailbox.\n" -msgstr "não há mensagens no correio local.\n" - -#: src/inc.c:1023 -#, c-format -msgid "Getting new messages from %s into %s...\n" -msgstr "Obtendo novas mensagens de %s até %s...\n" - -#: src/labelcolors.c:46 -msgid "Orange" -msgstr "Laranja" - -#: src/labelcolors.c:47 -msgid "Red" -msgstr "Vermelho" - -#: src/labelcolors.c:48 -msgid "Pink" -msgstr "Rosa" - -#: src/labelcolors.c:49 -msgid "Sky blue" -msgstr "Azul Celeste" - -#: src/labelcolors.c:50 -msgid "Blue" -msgstr "Azul" - -#: src/labelcolors.c:51 -msgid "Green" -msgstr "Verde" - -#: src/labelcolors.c:52 -msgid "Brown" -msgstr "Marrom" - -#. create sub items. for the menu item activation callback we pass the -#. * index of label_colors[] as data parameter. for the None color we pass -#. * an invalid (high) value. also we attach a data pointer so we can -#. * always get back the SummaryView pointer. -#: src/labelcolors.c:281 src/summaryview.c:512 -msgid "None" -msgstr "Nenhum" - -#: 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:113 src/main.c:122 src/mbox_folder.c:2089 src/mh.c:698 -#, 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:154 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread não é suportada pela glib.\n" - -#: src/main.c:231 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"O GnuPG não está instalado adequadamente.\n" -"O suporte ao OpenPGP estará desativado." - -#: src/main.c:326 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "Utilização: %s [OPÇÕES]...\n" - -#: src/main.c:329 -msgid " --compose [address] open composition window" -msgstr " --compose [endereço] abre a janela para compor mensagem" - -#: src/main.c:330 -msgid " --receive receive new messages" -msgstr " --receive receber novas mensagens" - -#: src/main.c:331 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all receber novas mensagens de todas as contas" - -#: src/main.c:332 -msgid " --debug debug mode" -msgstr " --debug modo de debug" - -#: src/main.c:333 -msgid " --help display this help and exit" -msgstr " --help exibe esta tela de ajuda e finaliza" - -#: src/main.c:334 -msgid " --version output version information and exit" -msgstr " --version exibe a versão do programa e finaliza" - -#: src/main.c:359 -msgid "Composing message exists. Really quit?" -msgstr "Ainda há mensagens sendo escritas. Deseja sair?" - -#: src/main.c:366 -msgid "Queued messages" -msgstr "Mensagens na 'Caixa de Saída'" - -#: src/main.c:367 -msgid "Some unsent messages are queued. Exit now?" -msgstr "Há mensagens que não foram enviadas. Finalizar?" - -#. remote command mode -#: src/main.c:440 -msgid "another Sylpheed is already running.\n" -msgstr "há outro Sylpheed em execução...\n" - -#: src/mainwindow.c:373 -msgid "/_File/_Add mailbox..." -msgstr "/_Arquivo/_Adicionar mailbox" - -#: src/mainwindow.c:374 -msgid "/_File/_Add mbox mailbox..." -msgstr "/_Arquivo/A_dicionar mailbox mbox" - -#: src/mainwindow.c:375 -msgid "/_File/_Update folder tree" -msgstr "/_Arquivo/_Atualizar pastas" - -#: src/mainwindow.c:376 -msgid "/_File/_Folder" -msgstr "/_Arquivo/_Pastas" - -#: src/mainwindow.c:377 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/_Arquivo/_Pastas/Criar _nova pasta" - -#: src/mainwindow.c:379 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/_Arquivo/_Pastas/_Renomear pasta" - -#: src/mainwindow.c:380 -msgid "/_File/_Folder/_Delete folder" -msgstr "/_Arquivo/_Pastas/_Apagar pasta" - -#: src/mainwindow.c:381 -msgid "/_File/_Import mbox file..." -msgstr "/_Arquivo/I_mportar de arquivo mbox..." - -#: src/mainwindow.c:382 -msgid "/_File/_Export to mbox file..." -msgstr "/_Arquivo/_Exportar para arquivo mbox" - -#: src/mainwindow.c:383 -msgid "/_File/Empty _trash" -msgstr "/_Arquivo/Esvaziar _Lixeira" - -#: src/mainwindow.c:385 -msgid "/_File/_Save as..." -msgstr "/_Arquivo/_Salvar como..." - -#: src/mainwindow.c:386 -msgid "/_File/_Print..." -msgstr "/_Arquivo/_Imprimir" - -#: src/mainwindow.c:389 -msgid "/_File/E_xit" -msgstr "/_Arquivo/Sai_r" - -#: src/mainwindow.c:395 -msgid "/_Edit/_Search" -msgstr "/_Editar/_Procurar" - -#: src/mainwindow.c:397 -msgid "/_View" -msgstr "/E_xibir" - -#: src/mainwindow.c:398 -msgid "/_View/_Folder tree" -msgstr "/E_xibir/_Árvore de pastas" - -#: src/mainwindow.c:399 -msgid "/_View/_Message view" -msgstr "/E_xibir/_Mensagens" - -#: src/mainwindow.c:400 -msgid "/_View/_Toolbar" -msgstr "/E_xibir/_Barra de Ferramentas" - -#: src/mainwindow.c:401 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/E_xibir/_Barra de Ferramentas/Ícones _e texto" - -#: src/mainwindow.c:402 -msgid "/_View/_Toolbar/_Icon" -msgstr "/E_xibir/_Barra de Ferramentas/_Ícones" - -#: src/mainwindow.c:403 -msgid "/_View/_Toolbar/_Text" -msgstr "/E_xibir/_Barra de Ferramentas/_Texto" - -#: src/mainwindow.c:404 -msgid "/_View/_Toolbar/_None" -msgstr "/E_xibir/_Barra de Ferramentas/_Nenhuma" - -#: src/mainwindow.c:405 -msgid "/_View/_Status bar" -msgstr "/E_xibir/_Barra de status" - -#: src/mainwindow.c:406 src/mainwindow.c:409 -msgid "/_View/---" -msgstr "/E_xibir/---" - -#: src/mainwindow.c:407 -msgid "/_View/Separate f_older tree" -msgstr "/E_xibir/Á_rvore de pastas separadas" - -#: src/mainwindow.c:408 -msgid "/_View/Separate m_essage view" -msgstr "/E_xibir/Separar m_ensagens" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set" -msgstr "/E_xibir/Conjunto de ca_racteres" - -#: src/mainwindow.c:411 -msgid "/_View/_Code set/_Auto detect" -msgstr "/E_xibir/Conjunto de ca_racteres/_Autodetectar" - -#: src/mainwindow.c:415 src/mainwindow.c:419 -msgid "/_View/_Code set/---" -msgstr "/E_xibir/Conjunto de ca_racteres/---" - -#: src/mainwindow.c:420 -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:424 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/E_xibir/Conjunto de ca_racteres/Unicode (_UTF-8)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/E_xibir/Conjunto de ca_racteres/Europa Ocidental (ISO-8859-_1)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/E_xibir/Conjunto de ca_racteres/Europa Central (ISO-8859-_2)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/E_xibir/Conjunto de ca_racteres/_Báltico (ISO-8859-13)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Báltico (ISO-8859-4)" - -#: src/mainwindow.c:440 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Grego (ISO-8859-_7)" - -#: src/mainwindow.c:443 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Turco (ISO-8859-_9)" - -#: src/mainwindow.c:446 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Cirílico (ISO-8859-_5)" - -#: src/mainwindow.c:448 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Cirílico (KOI8-_R)" - -#: src/mainwindow.c:450 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Cirílico (Windows-1251)" - -#: src/mainwindow.c:454 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Japonês (ISO-2022-_JP)" - -#: src/mainwindow.c:457 -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:460 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Japonês (_EUC-JP)" - -#: src/mainwindow.c:462 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Japonês (_Shift__JIS)" - -#: src/mainwindow.c:466 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Chinês simplificado (_GB2312)" - -#: src/mainwindow.c:468 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Chinês tradicional (_Big5)" - -#: src/mainwindow.c:470 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Chinês tradicional (EUC-_TW)" - -#: src/mainwindow.c:472 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Chinês (ISO-2022-_CN)" - -#: src/mainwindow.c:475 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Coreano (EUC-_KR)" - -#: src/mainwindow.c:477 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/E_xibir/_Conjunto de ca_racteres/Coreano (ISO-2022-KR)" - -#: src/mainwindow.c:485 -msgid "/_Message/Get new ma_il" -msgstr "/_Mensagem/Rec_eber novas mensagens" - -#: src/mainwindow.c:486 -msgid "/_Message/Get from _all accounts" -msgstr "/_Mensagem/Receber de _todas as contas" - -#: src/mainwindow.c:489 -msgid "/_Message/Send queued messa_ges" -msgstr "/_Mensagem/Enviar mensa_gens da Fila" - -#: src/mainwindow.c:492 -msgid "/_Message/Compose a_n email message" -msgstr "/_Mensagem/Compor me_nsagem (e-mail)" - -#: src/mainwindow.c:493 -msgid "/_Message/Compose a news message" -msgstr "/_Mensagem/Compor men_sagem (news)" - -#: src/mainwindow.c:494 -msgid "/_Message/_Reply" -msgstr "/_Mensagem/_Responder" - -#: src/mainwindow.c:495 -msgid "/_Message/Repl_y to sender" -msgstr "/_Mensagem/_Responder ao remetente" - -#: src/mainwindow.c:496 -msgid "/_Message/Follow-up and reply to" -msgstr "/_Mensagem/Redirecionar..." - -#: src/mainwindow.c:497 -msgid "/_Message/Reply to a_ll" -msgstr "/Mensagem/Responder a t_odos" - -#: src/mainwindow.c:498 -msgid "/_Message/_Forward" -msgstr "/_Mensagem/Encam_inhar" - -#: src/mainwindow.c:499 -msgid "/_Message/Forward as a_ttachment" -msgstr "/_Mensagem/Encaminhar como ane_xo" - -#: src/mainwindow.c:502 -msgid "/_Message/M_ove..." -msgstr "/_Mensagem/M_over..." - -#: src/mainwindow.c:503 -msgid "/_Message/_Copy..." -msgstr "/_Mensagem/_Copiar..." - -#: src/mainwindow.c:504 -msgid "/_Message/_Delete" -msgstr "/_Mensagem/_Apagar" - -#: src/mainwindow.c:505 -msgid "/_Message/_Mark" -msgstr "/_Mensagem/_Marcar" - -#: src/mainwindow.c:506 -msgid "/_Message/_Mark/_Mark" -msgstr "/_Mensagem/_Marcar/_Marcar" - -#: src/mainwindow.c:507 -msgid "/_Message/_Mark/_Unmark" -msgstr "/_Mensagem/_Marcar/_Desmarcar" - -#: src/mainwindow.c:508 -msgid "/_Message/_Mark/---" -msgstr "/_Mensagem/_Marcar/---" - -#: src/mainwindow.c:509 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/_Mensagem/_Marcar/Marcar como _não lida" - -#: src/mainwindow.c:510 -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/_Mensagem/_Marcar/Marcar como _lida" - -#: src/mainwindow.c:513 -msgid "/_Message/Open in new _window" -msgstr "/_Mensagem/Abrir numa nova _janela" - -#: src/mainwindow.c:514 -msgid "/_Message/View _source" -msgstr "/_Mensagem/E_xibir origem" - -#: src/mainwindow.c:515 -msgid "/_Message/Show all _header" -msgstr "/_Mensagem/Mo_strar todos os cabeçalhos" - -#: src/mainwindow.c:516 -msgid "/_Message/Re-_edit" -msgstr "/_Mensagem/Re-e_ditar" - -#: src/mainwindow.c:518 -msgid "/_Summary" -msgstr "/_Resumo" - -#: src/mainwindow.c:519 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/_Resumo/_Apagar Mensagens duplicadas" - -#: src/mainwindow.c:521 -msgid "/_Summary/_Filter messages" -msgstr "/_Resumo/_Filtrar Mensagens" - -#: src/mainwindow.c:522 -msgid "/_Summary/E_xecute" -msgstr "/_Resumo/_Executar" - -#: src/mainwindow.c:523 -msgid "/_Summary/_Update" -msgstr "/_Resumo/A_tualizar" - -#: src/mainwindow.c:524 src/mainwindow.c:530 src/mainwindow.c:532 -msgid "/_Summary/---" -msgstr "/_Resumo/---" - -#: src/mainwindow.c:525 -msgid "/_Summary/_Prev message" -msgstr "/_Resumo/Mensagem a_nterior" - -#: src/mainwindow.c:526 -msgid "/_Summary/_Next message" -msgstr "/_Resumo/_Próxima mensagem" - -#: src/mainwindow.c:527 -msgid "/_Summary/N_ext unread message" -msgstr "/_Resumo/Próxima não _lida" - -#: src/mainwindow.c:528 -msgid "/_Summary/Prev marked message" -msgstr "/_Resumo/Mensagem marcada anterior" - -#: src/mainwindow.c:529 -msgid "/_Summary/Next marked message" -msgstr "/_Resumo/Próx. mensagem marcada" - -#: src/mainwindow.c:531 -msgid "/_Summary/_Go to other folder" -msgstr "/_Resumo/_Ir para outra pasta" - -#: src/mainwindow.c:533 -msgid "/_Summary/_Sort" -msgstr "/_Resumo/_Ordenar" - -#: src/mainwindow.c:534 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/_Resumo/_Ordenar/Ordenar por _número" - -#: src/mainwindow.c:535 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/_Resumo/_Ordenar/Ordenar por _tamanho" - -#: src/mainwindow.c:536 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/_Resumo/_Ordenar/Ordenar por _data" - -#: src/mainwindow.c:537 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/_Resumo/_Ordenar/Ordenar por _remetente" - -#: src/mainwindow.c:538 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/_Resumo/_Ordenar/Ordenar por as_sunto" - -#: src/mainwindow.c:539 -msgid "/_Summary/_Sort/Sort by sco_re" -msgstr "/_Resumo/_Ordenar/Ordenar po_r pontuação" - -#: src/mainwindow.c:540 -msgid "/_Summary/_Sort/Sort by _label" -msgstr "/_Resumo/_Ordenar/Ordenar por rótu_lo" - -#: src/mainwindow.c:541 -msgid "/_Summary/_Sort/---" -msgstr "/_Resumo/_Ordenar/---" - -#: src/mainwindow.c:542 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/_Resumo/_Ordenar/Atrair _por assunto" - -#: src/mainwindow.c:544 -msgid "/_Summary/_Thread view" -msgstr "/_Resumo/_Visualização hierárquica" - -#: src/mainwindow.c:545 -msgid "/_Summary/Unt_hread view" -msgstr "/_Resumo/Visualização nor_mal" - -#: src/mainwindow.c:546 -msgid "/_Summary/Set display _item..." -msgstr "/_Resumo/Elementos _visíveis..." - -#: src/mainwindow.c:550 -msgid "/_Tool/_Log window" -msgstr "/_Ferramentas/_Janela de log" - -#: src/mainwindow.c:552 -msgid "/_Configuration" -msgstr "/_Configuração" - -#: src/mainwindow.c:553 -msgid "/_Configuration/_Common preferences..." -msgstr "/_Configuração/Preferências _comuns..." - -#: src/mainwindow.c:555 -msgid "/_Configuration/_Filter setting..." -msgstr "/_Configuração/Filtragem (anterior)" - -#: src/mainwindow.c:557 -msgid "/_Configuration/_Scoring ..." -msgstr "/_Configuração/_Pontuação..." - -#: src/mainwindow.c:559 -msgid "/_Configuration/_Filtering ..." -msgstr "/_Configuração/Regras de _Filtragem" - -#: src/mainwindow.c:561 -msgid "/_Configuration/_Preferences per account..." -msgstr "/_Configuração/_Preferências por conta..." - -#: src/mainwindow.c:563 -msgid "/_Configuration/---" -msgstr "/_Configuração/---" - -#: src/mainwindow.c:564 -msgid "/_Configuration/Create _new account..." -msgstr "/_Configuração/Criar uma _nova conta..." - -#: src/mainwindow.c:566 -msgid "/_Configuration/_Edit accounts..." -msgstr "/_Configuração/_Editar contas..." - -#: src/mainwindow.c:568 -msgid "/_Configuration/C_hange current account" -msgstr "/_Configuração/_Mudar conta atual" - -#: src/mainwindow.c:572 -msgid "/_Help/_Manual" -msgstr "/_Ajuda/_Manual" - -#: src/mainwindow.c:573 -msgid "/_Help/_Manual/_English" -msgstr "/_Ajuda/_Manual/_Inglês" - -#: src/mainwindow.c:574 -msgid "/_Help/_Manual/_Japanese" -msgstr "/_Ajuda/_Manual/_Japonês" - -#: src/mainwindow.c:575 -msgid "/_Help/---" -msgstr "/_Ajuda/---" - -#: src/mainwindow.c:604 -msgid "Creating main window...\n" -msgstr "Criando janela principal...\n" - -#: src/mainwindow.c:723 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "MainWindow: falhou ao alocar cores %d\n" - -#: src/mainwindow.c:891 src/mainwindow.c:908 -msgid "Untitled" -msgstr "Sem título" - -#: src/mainwindow.c:909 -msgid "none" -msgstr "nenhuma" - -#: src/mainwindow.c:918 -#, c-format -msgid "Current account: %s" -msgstr "Conta atual: %s" - -#: src/mainwindow.c:1009 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "posição da janela: x = %d, y = %d\n" - -#: src/mainwindow.c:1017 -msgid "Empty trash" -msgstr "Esvaziar Lixeira" - -#: src/mainwindow.c:1018 -msgid "Empty all messages in trash?" -msgstr "Apagar todas as mensagens da Lixeira?" - -#: src/mainwindow.c:1046 -msgid "Add mailbox" -msgstr "Adicionar mailbox" - -#: src/mainwindow.c:1047 -msgid "" -"Input the location of mailbox.\n" -"If the existing mailbox is specified, it will be\n" -"scanned automatically." -msgstr "" -"Informe a localização de sua Caixa Postal (mailbox).\n" -"Se for especificada uma mailbox existente, ela será\n" -"verificada automaticamente." - -#: src/mainwindow.c:1053 src/mainwindow.c:1093 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "A mailbox `%s' já existe." - -#: src/mainwindow.c:1059 src/setup.c:57 -msgid "Mailbox" -msgstr "Correio" - -#: src/mainwindow.c:1066 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ão foi possível criar a mailbox.\n" -"Talvez já existam arquivos, ou você não possui permissão para escrita nesta " -"pasta." - -#: src/mainwindow.c:1086 -msgid "Add mbox mailbox" -msgstr "Adicionar mailbox (formato mbox)" - -#: src/mainwindow.c:1087 -msgid "Input the location of mailbox." -msgstr "Informe a localização da mailbox." - -#: src/mainwindow.c:1108 -msgid "Creation of the mailbox failed." -msgstr "A criação da mailbox falhou." - -#: src/mainwindow.c:1270 -msgid "Setting widgets..." -msgstr "Configurando widgets..." - -#: src/mainwindow.c:1484 -msgid "Get" -msgstr "Receber" - -#: src/mainwindow.c:1485 -msgid "Get new mail from current account" -msgstr "Receber novas mensagens da conta atual" - -#: src/mainwindow.c:1491 -msgid "Get new mail from all accounts" -msgstr "Receber novas mensagens de todas as contas" - -#: src/mainwindow.c:1502 -msgid "Send queued message(s)" -msgstr "Enviar mensagens em espera" - -#: src/mainwindow.c:1519 -msgid "Compose email message" -msgstr "Compor mensagem de email" - -#: src/mainwindow.c:1520 -msgid "email" -msgstr "email" - -#: src/mainwindow.c:1528 src/mainwindow.c:1565 -msgid "Email" -msgstr "Email" - -#: src/mainwindow.c:1543 -msgid "Compose news article" -msgstr "Compor artigo (news)" - -#: src/mainwindow.c:1544 -msgid "news" -msgstr "news" - -#: src/mainwindow.c:1552 src/mainwindow.c:1576 src/prefs_common.c:912 -msgid "News" -msgstr "News" - -#: src/mainwindow.c:1566 -msgid "Compose an email message" -msgstr "Compor uma nova mensagem de email" - -#: src/mainwindow.c:1577 -msgid "Compose a news message" -msgstr "Compor um artigo de news" - -#: src/mainwindow.c:1603 -msgid "Reply" -msgstr "Responder" - -#: src/mainwindow.c:1604 -msgid "Reply to the message" -msgstr "Responder à Mensagem" - -#: src/mainwindow.c:1611 -msgid "All" -msgstr "Todas" - -#: src/mainwindow.c:1612 -msgid "Reply to all" -msgstr "Responder à todos" - -#: src/mainwindow.c:1619 -msgid "Sender" -msgstr "Remetente" - -#: src/mainwindow.c:1620 -msgid "Reply to sender" -msgstr "Responder ao remetente" - -#: src/mainwindow.c:1627 src/prefs_filtering.c:223 -msgid "Forward" -msgstr "Encaminhar" - -#: src/mainwindow.c:1628 -msgid "Forward the message" -msgstr "Encaminhar a mensagem" - -#: src/mainwindow.c:1639 -msgid "Delete the message" -msgstr "Apagar a mensagem" - -#: src/mainwindow.c:1647 src/prefs_filtering.c:225 src/prefs_filtering.c:461 -#: src/prefs_matcher.c:149 -msgid "Execute" -msgstr "Executar" - -#: src/mainwindow.c:1648 -msgid "Execute marked process" -msgstr "Executar os processos marcados" - -#: src/mainwindow.c:1656 -msgid "Next" -msgstr "Próxima" - -#: src/mainwindow.c:1657 -msgid "Next unread message" -msgstr "Próxima mensagem não lida" - -#: src/mainwindow.c:1739 -msgid "Email message" -msgstr "Mensagem (email)" - -#: src/mainwindow.c:1747 -msgid "News article" -msgstr "Artigo (news)" - -#: src/mainwindow.c:1993 src/summaryview.c:3403 -msgid "Exit" -msgstr "Sair" - -#: src/mainwindow.c:1993 src/summaryview.c:3403 -msgid "Exit this program?" -msgstr "Sair do programa?" - -#: src/mainwindow.c:2133 -msgid "Sending queued message failed." -msgstr "Falhou ao enviar mensagens em espera." - -#: src/mainwindow.c:2334 -#, c-format -msgid "forced charset: %s\n" -msgstr "conjunto de caracteres forçado: %s\n" - -#: src/matcher.c:1359 -#, c-format -msgid "%s(%d) - filename is not set" -msgstr "%s(%d) - nome do arquivo não foi definido." - -#: src/mbox.c:51 src/mbox.c:198 -msgid "can't write to temporary file\n" -msgstr "não é possível gravar no arquivo temporário\n" - -#: src/mbox.c:69 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "Obtendo Mensagens de %s até %s...\n" - -#: src/mbox.c:79 -msgid "can't read mbox file.\n" -msgstr "não foi possível ler o arquivo mbox.\n" - -#: src/mbox.c:86 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "formato de mbox inválido: %s\n" - -#: src/mbox.c:93 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "mbox corrompida: %s\n" - -#: src/mbox.c:111 -msgid "can't open temporary file\n" -msgstr "não foi possível abrir o arquivo temporário\n" - -#: src/mbox.c:163 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"Encontrado De sem codificar:\n" -"%s" - -#: src/mbox.c:243 -#, c-format -msgid "%d messages found.\n" -msgstr "%d mensagens encontradas.\n" - -#: src/mbox.c:260 src/mbox_folder.c:122 -#, 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:261 src/mbox_folder.c:123 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "usar 'flock' em vez de 'file' se for possível.\n" - -#: src/mbox.c:273 src/mbox_folder.c:135 -#, c-format -msgid "can't create %s\n" -msgstr "não foi possível criar %s\n" - -#: src/mbox.c:279 src/mbox_folder.c:141 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "o correio está sendo usado por outro processo, aguardando...\n" - -#: src/mbox.c:308 -#, c-format -msgid "can't lock %s\n" -msgstr "não foi possível travar %s\n" - -#: src/mbox.c:315 src/mbox.c:362 -msgid "invalid lock type\n" -msgstr "tipo de trava inválido\n" - -#: src/mbox.c:348 -#, c-format -msgid "can't unlock %s\n" -msgstr "não foi possível destravar %s\n" - -#: src/mbox.c:379 -msgid "can't truncate mailbox to zero.\n" -msgstr "não foi possível zerar o mailbox.\n" - -#: src/mbox.c:400 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "Exportando mensagens de %s para %s...\n" - -#: src/mbox_folder.c:219 -#, c-format -msgid "could not lock read file %s\n" -msgstr "não foi possível bloquear o arquivo em leitura %s\n" - -#: src/mbox_folder.c:238 -#, c-format -msgid "could not lock write file %s\n" -msgstr "não foi possível bloquer arquivo em escrita %s\n" - -#: src/mbox_folder.c:797 -#, c-format -msgid "read mbox - %s\n" -msgstr "lendo mbox - %s\n" - -#: src/mbox_folder.c:828 -#, c-format -msgid "read mbox from file - %s\n" -msgstr "lendo arquivo mbox - %s\n" - -#: src/mbox_folder.c:1378 src/mbox_folder.c:1390 -#, c-format -msgid "unvalid file - %s.\n" -msgstr "arquivo inválido - %s.\n" - -#: src/mbox_folder.c:1408 src/mbox_folder.c:1783 src/utils.c:1571 -#: src/utils.c:1648 -#, c-format -msgid "writing to %s failed.\n" -msgstr "gravação em %s falhou.\n" - -#: src/mbox_folder.c:1731 src/mh.c:668 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "Último número no diretório %s = %d\n" - -#: src/mbox_folder.c:1924 -#, c-format -msgid "no modification - %s\n" -msgstr "sem modificações - %s\n" - -#: src/mbox_folder.c:1928 -#, c-format -msgid "save modification - %s\n" -msgstr "salvar modificações - %s\n" - -#: src/mbox_folder.c:1961 src/mbox_folder.c:2057 -#, c-format -msgid "can't rename %s to %s\n" -msgstr "não pude renomear a mensagem %s para %s\n" - -#: src/mbox_folder.c:1982 src/mbox_folder.c:2078 -#, c-format -msgid "%i messages written - %s\n" -msgstr "%i mensagens gravadas - %s\n" - -#: src/mbox_folder.c:2018 -#, c-format -msgid "no deleted messages - %s\n" -msgstr "nenhuma mensagem apagada - %s\n" - -#: src/mbox_folder.c:2022 -#, c-format -msgid "purge deleted messages - %s\n" -msgstr "limpando mensagens apagadas - %s\n" - -#: src/mbox_folder.c:2200 -msgid "Cannot rename folder item" -msgstr "Não foi possível renomear item da pasta" - -#: src/messageview.c:70 -msgid "Creating message view...\n" -msgstr "Criando visualização da mensagem\n" - -#: src/messageview.c:346 -msgid "" -"Error occurred while sending the notification.\n" -"Put this notification into queue folder?" -msgstr "" -"Ocorreram erros ao enviar a notificação.\n" -"Colocar essa notificação na `Fila de saída'?" - -#: src/messageview.c:352 -msgid "Can't queue the notification." -msgstr "Não pude colocar notificação em espera." - -#: src/messageview.c:355 -msgid "Error occurred while sending the notification." -msgstr "Ocorreram erros ao enviar a notificação." - -#: src/messageview.c:416 -msgid "Return Receipt" -msgstr "Notificação de recebimento" - -#: src/messageview.c:416 -msgid "Send return receipt ?" -msgstr "Enviar a notificação de recebimento?" - -#: src/messageview.c:420 -msgid "Error occurred while sending notification." -msgstr "Ocorreram erros ao enviar a notificação." - -#: src/mh.c:158 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "não pude copiar a mensagem %s para %s\n" - -#: src/mh.c:206 src/mh.c:291 src/mh.c:370 src/mh.c:510 -msgid "Can't open mark file.\n" -msgstr "Não pude abrir o arquivo de marcas.\n" - -#: src/mh.c:383 src/mh.c:528 -#, c-format -msgid "%s already exists." -msgstr "%s já existe." - -#: src/mh.c:873 -msgid "\tSearching uncached messages... " -msgstr "\tProcurando mensagens sem cache..." - -#: src/mh.c:928 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "Encontradas %d mensagens sem cache.\n" - -#: src/mh.c:934 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tOrdenando mensagens sem cache numericamente..." - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/_Abrir" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/Abrir _com..." - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/E_xibir como texto" - -#: src/mimeview.c:116 src/summaryview.c:355 -msgid "/_Save as..." -msgstr "/_Salvar como..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/_Verificar assinatura" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "Tipo MIME" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "Criando visualizador de MIME...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "Selecione \"Verificar assinatura\" para verificar" - -#: src/mimeview.c:682 src/mimeview.c:730 src/mimeview.c:749 src/mimeview.c:772 -msgid "Can't save the part of multipart message." -msgstr "Não foi possível gravar parte(s) dessa mensagem" - -#: src/mimeview.c:716 src/summaryview.c:2832 -msgid "Save as" -msgstr "Salvar como" - -#: src/mimeview.c:722 src/summaryview.c:2837 -msgid "Overwrite" -msgstr "Sobrescrever" - -#: src/mimeview.c:723 src/summaryview.c:2838 -msgid "Overwrite existing file?" -msgstr "Sobrescrever o arquivo existente?" - -#: src/mimeview.c:777 -msgid "Open with" -msgstr "Abrir com" - -#: src/mimeview.c:778 -#, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"Digite o comando de impressão:\n" -"(`%s' será sustituído pelo arquivo)" - -#: src/mimeview.c:830 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "O comando do visualizador MIME é inválido: `%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "criando conexão NNTP com %s:%d ...\n" - -#: src/news.c:182 -#, 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:257 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "o artigo %d já está no cache.\n" - -#: src/news.c:270 -#, c-format -msgid "can't select group %s\n" -msgstr "não pude selecionar grupo: %s\n" - -#: src/news.c:275 -#, c-format -msgid "getting article %d...\n" -msgstr "obtendo artigo %d...\n" - -#: src/news.c:280 -#, c-format -msgid "can't read article %d\n" -msgstr "não foi possível ler o artigo %d\n" - -#: src/news.c:325 -msgid "can't retrieve newsgroup list\n" -msgstr "não pude obter listagem de grupos\n" - -#: src/news.c:397 -msgid "can't post article.\n" -msgstr "não pude publicar artigo\n" - -#: src/news.c:421 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "não pude obter o artigo %d\n" - -#: src/news.c:491 -#, c-format -msgid "can't set group: %s\n" -msgstr "não pude definir o grupo: %s\n" - -#: src/news.c:498 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "intervalo de artigos inválido: %d - %d\n" - -#: src/news.c:507 -msgid "no new articles.\n" -msgstr "não há novos artigos.\n" - -#: src/news.c:520 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "obtendo xover %d - %d em %s...\n" - -#: src/news.c:523 -msgid "can't get xover\n" -msgstr "não foi possível obter xover\n" - -#: src/news.c:529 -msgid "error occurred while getting xover.\n" -msgstr "ocorreu um erro ao obter xover.\n" - -#: src/news.c:537 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "linha xover inválida: %s\n" - -#: src/news.c:555 src/news.c:580 -msgid "can't get xhdr\n" -msgstr "não pude obter xhdr\n" - -#: src/news.c:563 src/news.c:588 -msgid "error occurred while getting xhdr.\n" -msgstr "ocorreu um erro ao obter xhdr.\n" - -#: src/news.c:713 -#, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "Apagando artigos em cache 1 - %d ... " - -#: src/news.c:742 -msgid "\tDeleting all cached articles... " -msgstr "\tApagando todos os artigos em cache... " - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "Não pude conectar ao servidor NNTP: %s:%d\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "erro do protocolo: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "erro do protocolo\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "Erro ao publicar artigo\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "Senha" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[sem UserId]" - -#: src/passphrase.c:244 -#, c-format -msgid "" -"%sPlease enter the passphrase for:\n" -"\n" -" %.*s \n" -"(%.*s)\n" -msgstr "" -"%sDigite a senha de acesso para:\n" -"\n" -" %.*s \n" -"(%.*s)\n" - -#: src/passphrase.c:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"Senha incorreta! Tente novamente...\n" -"\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authentication\n" -msgstr "ocorreu um erro na autenticação do usuário\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "Servidor APOP não encontrado\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "Erro de sintaxe no greeting\n" - -#: src/pop.c:171 src/pop.c:212 -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:184 -#, 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:141 src/prefs.c:169 src/prefs.c:214 src/prefs_account.c:444 -#: src/prefs_account.c:458 src/prefs_customheader.c:393 -#: src/prefs_customheader.c:439 src/prefs_display_header.c:429 -#: src/prefs_display_header.c:454 src/prefs_filter.c:533 -#: src/prefs_filter.c:557 src/scoring.c:428 src/scoring.c:439 -msgid "failed to write configuration to file\n" -msgstr "falhou ao gravar a configuração no arquivo\n" - -#: src/prefs.c:217 -msgid "Configuration is saved.\n" -msgstr "Configuração salva.\n" - -#: src/prefs.c:272 -#, c-format -msgid "no permission - %s\n" -msgstr "sem premissão - %s\n" - -#: src/prefs.c:477 -msgid "Apply" -msgstr "Aplicar" - -#: src/prefs_account.c:492 -msgid "Opening account preferences window...\n" -msgstr "Abrindo janela de preferências da conta...\n" - -#: src/prefs_account.c:519 -#, c-format -msgid "Account%d" -msgstr "Conta%d" - -#: src/prefs_account.c:532 -msgid "Preferences for new account" -msgstr "Preferências para a nova conta" - -#: src/prefs_account.c:537 -msgid "Preferences for each account" -msgstr "Preferências da conta" - -#: src/prefs_account.c:565 -msgid "Creating account preferences window...\n" -msgstr "Criando janela de preferências da conta...\n" - -#. Receive Options -#: src/prefs_account.c:587 src/prefs_account.c:1255 src/prefs_common.c:758 -msgid "Receive" -msgstr "Recebendo" - -#: src/prefs_account.c:591 src/prefs_common.c:762 -msgid "Compose" -msgstr "Compondo" - -#: src/prefs_account.c:594 src/prefs_common.c:769 -msgid "Privacy" -msgstr "Privacidade" - -#: src/prefs_account.c:598 -msgid "SSL" -msgstr "SSL" - -#: src/prefs_account.c:601 -msgid "Advanced" -msgstr "Avançadas" - -#: src/prefs_account.c:682 -msgid "Name of this account" -msgstr "Nome desta conta" - -#: src/prefs_account.c:691 -msgid "Usually used" -msgstr "Conta padrão" - -#: src/prefs_account.c:695 -msgid "Personal information" -msgstr "Informações pessoais" - -#: src/prefs_account.c:704 -msgid "Full name" -msgstr "Nome completo" - -#: src/prefs_account.c:710 -msgid "Mail address" -msgstr "Endereço de e-mail" - -#: src/prefs_account.c:716 -msgid "Organization" -msgstr "Organização" - -#: src/prefs_account.c:740 -msgid "Server information" -msgstr "Informações do servidor" - -#: src/prefs_account.c:761 -msgid "POP3 (normal)" -msgstr "POP3 (normal)" - -#: src/prefs_account.c:763 -msgid "POP3 (APOP auth)" -msgstr "POP3 (autent. APOP)" - -#: src/prefs_account.c:765 src/prefs_account.c:967 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:767 -msgid "News (NNTP)" -msgstr "News (NNTP)" - -#: src/prefs_account.c:769 -msgid "None (local)" -msgstr "Nenhuma (local)" - -#: src/prefs_account.c:798 -msgid "This server requires authentication" -msgstr "Este servidor requer autenticação" - -#: src/prefs_account.c:842 -msgid "News server" -msgstr "Servidor de News" - -#: src/prefs_account.c:848 -msgid "Server for receiving" -msgstr "Servidor para recebimento" - -#: src/prefs_account.c:854 -msgid "Local mailbox file" -msgstr "Arquivo de mailbox local" - -#. gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); -#: src/prefs_account.c:861 -msgid "SMTP server (send)" -msgstr "Servidor SMTP (para enviar)" - -#: src/prefs_account.c:869 -msgid "Use mail command rather than SMTP server" -msgstr "Utilizar comando mail ao invés do servidor SMTP" - -#: src/prefs_account.c:878 -msgid "command to send mails" -msgstr "comando para envias mensagens" - -#. gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); -#: src/prefs_account.c:885 -msgid "User ID" -msgstr "ID do Usuário" - -#: src/prefs_account.c:891 -msgid "Password" -msgstr "Senha" - -#: src/prefs_account.c:950 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:958 -msgid "Remove messages on server when received" -msgstr "Ao receber, eliminar a(s) mensagem(ns) do servidor" - -#: src/prefs_account.c:960 -msgid "Download all messages on server" -msgstr "Receber todas as mensagens" - -#: src/prefs_account.c:963 -msgid "`Get all' checks for new mail on this account" -msgstr "`Receber todas' também verifica mensagens dessa conta" - -#: src/prefs_account.c:965 -msgid "Filter messages on receiving" -msgstr "Filtrar mensagens ao receber" - -#: src/prefs_account.c:978 -msgid "IMAP server directory" -msgstr "Pasta no servidor IMAP" - -#: src/prefs_account.c:1024 src/prefs_customheader.c:196 -#: src/prefs_filter.c:259 src/prefs_matcher.c:143 -msgid "Header" -msgstr "Cabeçalho" - -#: src/prefs_account.c:1031 -msgid "Add Date header field" -msgstr "Adicionar campo de data" - -#: src/prefs_account.c:1032 -msgid "Generate Message-ID" -msgstr "Gerar Message-ID" - -#: src/prefs_account.c:1039 -msgid "Add user-defined header" -msgstr "Adicionar cabeçalho do usuário" - -#: src/prefs_account.c:1041 src/prefs_common.c:1667 src/prefs_common.c:1692 -msgid " Edit... " -msgstr " Editar... " - -#: src/prefs_account.c:1051 -msgid "Automatically set following addresses" -msgstr "Estabelecer os seguintes endereços" - -#: src/prefs_account.c:1060 src/prefs_matcher.c:140 -msgid "Cc" -msgstr "Cc" - -#: src/prefs_account.c:1073 -msgid "Bcc" -msgstr "Bcc" - -#: src/prefs_account.c:1086 -msgid "Reply-To" -msgstr "Responder" - -#: src/prefs_account.c:1099 -msgid "Authentication" -msgstr "Autenticação do usuário" - -#: src/prefs_account.c:1107 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "SMTP com autenticação (SMTP AUTH)" - -#: src/prefs_account.c:1109 -msgid "Authenticate with POP3 before sending" -msgstr "Autenticar via POP3 antes de enviar" - -#: src/prefs_account.c:1143 -msgid "Signature file" -msgstr "Arquivo de assinatura" - -#: src/prefs_account.c:1172 -msgid "Sign key" -msgstr "Chave de assinatura" - -#: src/prefs_account.c:1180 -msgid "Use default GnuPG key" -msgstr "Utilizar chave padrão do GnuPG" - -#: src/prefs_account.c:1189 -msgid "Select key by your email address" -msgstr "Selecionar chave pelo end. de email" - -#: src/prefs_account.c:1198 -msgid "Specify key manually" -msgstr "Selecionar chave manualmente" - -#: src/prefs_account.c:1214 -msgid "User or key ID:" -msgstr "Usuário ou KeyId:" - -#: src/prefs_account.c:1262 -msgid "Use SSL tunnel to connect to POP server" -msgstr "Utilizar tunel SSL para conectar ao servidor POP" - -#: src/prefs_account.c:1263 -msgid "Use SSL tunnel to connect to IMAP server" -msgstr "Utilizar tunel SSL para conectar ao servidor IMAP" - -#: src/prefs_account.c:1274 -msgid "No SSL for SMTP" -msgstr "Sem SSL para o servidor SMTP" - -#: src/prefs_account.c:1283 -msgid "Use SSL tunnel to connect to SMTP server" -msgstr "Utilizar tunel SSL para conectar ao servidor SMTP" - -#: src/prefs_account.c:1292 -msgid "Use STARTTLS command to start SMTP SSL session" -msgstr "Utilizar comando STARTTLS para iniciar sessão SMTP c/ SSL" - -#: src/prefs_account.c:1351 -msgid "Specify SMTP port" -msgstr "Porta do servidor SMTP" - -#: src/prefs_account.c:1357 -msgid "Specify POP3 port" -msgstr "Porta do servidor POP3" - -#: src/prefs_account.c:1363 -msgid "Specify IMAP4 port" -msgstr "Porta do servidor IMAP4" - -#: src/prefs_account.c:1369 -msgid "Specify NNTP port" -msgstr "Porta do servidor NNTP" - -#: src/prefs_account.c:1374 -msgid "Specify domain name" -msgstr "Nome do domínio" - -#: src/prefs_account.c:1431 -msgid "Mail address is not entered." -msgstr "Endereço de e-mail não especificado." - -#: src/prefs_account.c:1436 -msgid "SMTP server is not entered." -msgstr "Servidor SMTP não especificado." - -#: src/prefs_account.c:1441 -msgid "User ID is not entered." -msgstr "UserID não especificada." - -#: src/prefs_account.c:1446 -msgid "POP3 server is not entered." -msgstr "Servidor POP3 não especificado." - -#: src/prefs_account.c:1451 -msgid "IMAP4 server is not entered." -msgstr "Servidor IMAP4 não especificado." - -#: src/prefs_account.c:1456 -msgid "NNTP server is not entered." -msgstr "Servidor NNTP não informado" - -#: src/prefs_account.c:1462 -msgid "local mailbox filename is not entered." -msgstr "nome da mailbox local não informado." - -#: src/prefs_account.c:1468 -msgid "mail command is not entered." -msgstr "comando de mail não informado." - -#: src/prefs_common.c:735 -msgid "Creating common preferences window...\n" -msgstr "Criando janela de preferências comuns...\n" - -#: src/prefs_common.c:739 -msgid "Common Preferences" -msgstr "Preferências comuns" - -#: src/prefs_common.c:764 -msgid "Display" -msgstr "Exibir" - -#: src/prefs_common.c:766 -msgid "Message" -msgstr "Mensagem" - -#: src/prefs_common.c:772 -msgid "Interface" -msgstr "Interface" - -#: src/prefs_common.c:774 src/select-keys.c:324 -msgid "Other" -msgstr "Outros" - -#: src/prefs_common.c:817 src/prefs_common.c:980 -msgid "External program" -msgstr "Programa externo" - -#: src/prefs_common.c:826 -msgid "Use external program for incorporation" -msgstr "Usar um programa externo para obter mensagens" - -#: src/prefs_common.c:833 src/prefs_common.c:997 -msgid "Program path" -msgstr "Caminho e nome do programa" - -#: src/prefs_common.c:845 -msgid "Local spool" -msgstr "Spool local" - -#: src/prefs_common.c:856 -msgid "Incorporate from spool" -msgstr "Incorporar do spool" - -#: src/prefs_common.c:858 -msgid "Filter on incorporation" -msgstr "Filtrar ao incorporar" - -#: src/prefs_common.c:866 -msgid "Spool directory" -msgstr "Diretório de spool" - -#: src/prefs_common.c:884 -msgid "Auto-check new mail" -msgstr "Verificar automaticamente por novas mensagens" - -#: src/prefs_common.c:886 -msgid "each" -msgstr "a cada" - -#: src/prefs_common.c:898 -msgid "minute(s)" -msgstr "minuto(s)" - -#: src/prefs_common.c:907 -msgid "Check new mail on startup" -msgstr "Verificar o correio quando iniciar" - -#: src/prefs_common.c:910 -msgid "No error popup on receive error" -msgstr "Não exibir janela de erro ao receber" - -#: src/prefs_common.c:920 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"Número máximo de arquivos a receber\n" -"(não há limites se o valor for 0)" - -#: src/prefs_common.c:990 -msgid "Use external program for sending" -msgstr "Usar programa externo para enviar" - -#: src/prefs_common.c:1014 -msgid "Save sent messages to outbox" -msgstr "Salvar mensagens enviadas na Caixa de saída" - -#: src/prefs_common.c:1016 -msgid "Queue messages that fail to send" -msgstr "Colocar na `Fila de saída' ao falhar o envio" - -#: src/prefs_common.c:1018 -msgid "Send return receipt on request" -msgstr "Enviar notificação de recebimento solicitadas" - -#: src/prefs_common.c:1024 -msgid "Outgoing codeset" -msgstr "Conjunto de caracteres para enviar" - -#: src/prefs_common.c:1039 -msgid "Automatic (Recommended)" -msgstr "Automático (Recomendado)" - -#: src/prefs_common.c:1040 -msgid "7bit ascii (US-ASCII)" -msgstr "ASCII de 7 bits (US-ASC_II)" - -#: src/prefs_common.c:1042 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:1044 -msgid "Western European (ISO-8859-1)" -msgstr "Europeu Ocidental (ISO-8859-1)" - -#: src/prefs_common.c:1045 -msgid "Central European (ISO-8859-2)" -msgstr "Europeu Central (ISO-8859-2)" - -#: src/prefs_common.c:1046 -msgid "Baltic (ISO-8859-13)" -msgstr "Báltico (ISO-8859-4)" - -#: src/prefs_common.c:1047 -msgid "Baltic (ISO-8859-4)" -msgstr "Báltico (ISO-8859-4)" - -#: src/prefs_common.c:1048 -msgid "Greek (ISO-8859-7)" -msgstr "Grego (ISO-8859-7)" - -#: src/prefs_common.c:1049 -msgid "Turkish (ISO-8859-9)" -msgstr "Turco (ISO-8859-9)" - -#: src/prefs_common.c:1051 -msgid "Cyrillic (ISO-8859-5)" -msgstr "Cirílico (ISO-8859-5)" - -#: src/prefs_common.c:1053 -msgid "Cyrillic (KOI8-R)" -msgstr "Cirílico (KOI8-R)" - -#: src/prefs_common.c:1055 -msgid "Cyrillic (Windows-1251)" -msgstr "Cirílico (Windows-1251)" - -#: src/prefs_common.c:1056 -msgid "Cyrillic (KOI8-U)" -msgstr "Cirílico (KOI8-U)" - -#: src/prefs_common.c:1058 -msgid "Japanese (ISO-2022-JP)" -msgstr "Japonês (ISO-2022-JP)" - -#: src/prefs_common.c:1060 -msgid "Japanese (EUC-JP)" -msgstr "Japonês (EUC-JP)" - -#: src/prefs_common.c:1061 -msgid "Japanese (Shift_JIS)" -msgstr "Japonês (Shift_JIS)" - -#: src/prefs_common.c:1063 -msgid "Simplified Chinese (GB2312)" -msgstr "Chinês simplificado (GB2312)" - -#: src/prefs_common.c:1064 -msgid "Traditional Chinese (Big5)" -msgstr "Chinês tradicional (Big5)" - -#: src/prefs_common.c:1066 -msgid "Traditional Chinese (EUC-TW)" -msgstr "Chinês tradicional (EUC-TW)" - -#: src/prefs_common.c:1067 -msgid "Chinese (ISO-2022-CN)" -msgstr "Chinês (ISO-2022-CN)" - -#: src/prefs_common.c:1069 -msgid "Korean (EUC-KR)" -msgstr "Coreano (EUC-KR)" - -#: src/prefs_common.c:1150 -msgid "Select spelling checker location" -msgstr "Informe a localização do Verificador Ortográfico" - -#: src/prefs_common.c:1289 -msgid " Quote format " -msgstr " Formato da Citação " - -#: src/prefs_common.c:1303 -msgid "Insert signature automatically" -msgstr "Inserir assinatura automaticamente" - -#: src/prefs_common.c:1309 -msgid "Signature separator" -msgstr "Separador de assinatura" - -#: src/prefs_common.c:1327 -msgid "Wrap messages at" -msgstr "Inserir quebra de linhas em" - -#: src/prefs_common.c:1339 -msgid "characters" -msgstr "caracteres" - -#: src/prefs_common.c:1347 -msgid "Wrap quotation" -msgstr "Quebrar quote" - -#: src/prefs_common.c:1349 -msgid "Wrap before sending" -msgstr "Quebrar linhas antes de enviar" - -#: src/prefs_common.c:1352 src/prefs_filtering.c:224 -msgid "Forward as attachment" -msgstr "Encaminhar como anexo" - -#: src/prefs_common.c:1355 -msgid "Automatically select account for mail replies" -msgstr "Selecionar automaticamente a conta ao responder" - -#: src/prefs_common.c:1358 -msgid "Smart wrapping (EXPERIMENTAL)" -msgstr "Quebra de linha inteligente (EXPERIMENTAL)" - -#. spell checker defaults -#: src/prefs_common.c:1361 -msgid "Global spelling checker settings" -msgstr "Configurações do verificador ortográfico" - -#: src/prefs_common.c:1368 -msgid "Enable spell checker" -msgstr "Habilitar verificador ortográfico" - -#: src/prefs_common.c:1378 -msgid "Ispelll path" -msgstr "Caminho do Ispell" - -#: src/prefs_common.c:1388 -msgid "..." -msgstr "..." - -#: src/prefs_common.c:1401 -msgid "Dictionaries" -msgstr "Dicionários" - -#: src/prefs_common.c:1466 -msgid "Font" -msgstr "Fonte" - -#: src/prefs_common.c:1475 -msgid "Text" -msgstr "Texto" - -#: src/prefs_common.c:1493 -msgid "Small" -msgstr "Pequeno" - -#: src/prefs_common.c:1512 -msgid "Normal" -msgstr "Normal" - -#: src/prefs_common.c:1531 -msgid "Bold" -msgstr "Negrito" - -#: src/prefs_common.c:1556 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "Traduzir cabeçalhos (como `De:', `Assunto:')" - -#: src/prefs_common.c:1559 -msgid "Display unread number next to folder name" -msgstr "Exibir número de mensagens não lidas ao lado do nome da pasta" - -#. ---- Summary ---- -#: src/prefs_common.c:1563 -msgid "Summary View" -msgstr "Visualização do resumo" - -#: src/prefs_common.c:1572 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "Mostrar destinatário na coluna `De' se o remetente for você" - -#: src/prefs_common.c:1575 -msgid "Display sender using address book" -msgstr "Exibir remetente utilizando o Livro de endereços" - -#: src/prefs_common.c:1577 -msgid "Enable horizontal scroll bar" -msgstr "Ativar barra de rolagem horizontal" - -#: src/prefs_common.c:1583 src/prefs_common.c:2287 src/prefs_common.c:2325 -msgid "Date format" -msgstr "Formato de data" - -#: src/prefs_common.c:1591 -msgid "... " -msgstr "... " - -#: src/prefs_common.c:1607 -msgid " Set display item of summary... " -msgstr " Elementos visíveis no cabeçalho... " - -#: src/prefs_common.c:1662 -msgid "Enable coloration of message" -msgstr "Permitir cores na mensagem" - -#: src/prefs_common.c:1681 -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:1683 -msgid "Display header pane above message view" -msgstr "Exibir cabeçalhos antes da mensagem" - -#: src/prefs_common.c:1690 -msgid "Display short headers on message view" -msgstr "Cabeçalhos pequenos na visualização da mensagem" - -#: src/prefs_common.c:1710 -msgid "Line space" -msgstr "Linha de espaço" - -#: src/prefs_common.c:1724 src/prefs_common.c:1764 -msgid "pixel(s)" -msgstr "pixel(s)" - -#: src/prefs_common.c:1729 -msgid "Leave space on head" -msgstr "Deixar espaço do cabeçalho" - -#: src/prefs_common.c:1731 -msgid "Scroll" -msgstr "Deslocamento" - -#: src/prefs_common.c:1738 -msgid "Half page" -msgstr "Página inteira" - -#: src/prefs_common.c:1744 -msgid "Smooth scroll" -msgstr "Deslocamento suave" - -#: src/prefs_common.c:1750 -msgid "Step" -msgstr "Passos" - -#: src/prefs_common.c:1811 -msgid "Encrypt message by default" -msgstr "Criptografar mensagens como padrão" - -#: src/prefs_common.c:1814 -msgid "Sign message by default" -msgstr "Assinar mensagens como padrão" - -#: src/prefs_common.c:1817 -msgid "Automatically check signatures" -msgstr "Verificar automaticamente as assinaturas" - -#: src/prefs_common.c:1820 -msgid "Show signature check result in a popup window" -msgstr "Resultado da verificação da assinatura em nova janela" - -#: src/prefs_common.c:1824 -msgid "Grab input while entering a passphrase" -msgstr "Capturar digitação ao informar senha" - -#: src/prefs_common.c:1829 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "Exibir advertência ao iniciar se o GnuPG não estiver funcionando" - -#. create default signkey box -#: src/prefs_common.c:1836 -msgid "Default Sign Key" -msgstr "Chave padrão de assinatura" - -#: src/prefs_common.c:1942 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "" -"Emular o comportamento do mouse como em um\n" -"mailer estilo Emacs" - -#: src/prefs_common.c:1949 -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:1953 -msgid "Go to inbox after receiving new mail" -msgstr "Ir para a Caixa de entrada após receber mensagens" - -#: src/prefs_common.c:1961 -msgid "Execute immediately when moving or deleting messages" -msgstr "Executar imediatamente ao mover/apagar mensagens" - -#: src/prefs_common.c:1968 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" -"(As mensagens serão apenas marcadas para execução\n" -" se esta opção estiver desativada)" - -#: src/prefs_common.c:1975 -msgid "Add address to destination when double-clicked" -msgstr "Copiar endereço para destino ao fazer um duplo-clique" - -#: src/prefs_common.c:1982 -msgid "Show receive Dialog" -msgstr "Exibir diálogo de recebimento" - -#: src/prefs_common.c:1992 -msgid "Always" -msgstr "Sempre" - -#: src/prefs_common.c:1993 -msgid "Only if a sylpheed window is active" -msgstr "Somente se a janela do Sylpheed estiver ativa" - -#: src/prefs_common.c:1994 -msgid "Never" -msgstr "Nunca" - -#. On Exit -#: src/prefs_common.c:1999 -msgid "On exit" -msgstr "Ao sair" - -#: src/prefs_common.c:2007 -msgid "Confirm on exit" -msgstr "Confirmar ao sair" - -#: src/prefs_common.c:2014 -msgid "Empty trash on exit" -msgstr "Esvaziar Lixeira ao sair" - -#: src/prefs_common.c:2016 -msgid "Ask before emptying" -msgstr "Perguntar antes de esvaziar" - -#: src/prefs_common.c:2020 -msgid "Warn if there are queued messages" -msgstr "Alertar se há mensagens em espera" - -#: src/prefs_common.c:2059 -#, 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:2066 src/prefs_common.c:2091 src/prefs_common.c:2107 -msgid "Command" -msgstr "Comando" - -#: src/prefs_common.c:2084 -#, 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:2100 -#, 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:2257 -msgid "the full abbreviated weekday name" -msgstr "nome do dia da semana abreviado" - -#: src/prefs_common.c:2258 -msgid "the full weekday name" -msgstr "nome do dia da semana completo" - -#: src/prefs_common.c:2259 -msgid "the abbreviated month name" -msgstr "nome do mês abreviado" - -#: src/prefs_common.c:2260 -msgid "the full month name" -msgstr "nome do mês completo" - -#: src/prefs_common.c:2261 -msgid "the preferred date and time for the current locale" -msgstr "data e hora padrão (pela localização)" - -#: src/prefs_common.c:2262 -msgid "the century number (year/100)" -msgstr "século (ano/100)" - -#: src/prefs_common.c:2263 -msgid "the day of the month as a decimal number" -msgstr "dia do mês como número" - -#: src/prefs_common.c:2264 -msgid "the hour as a decimal number using a 24-hour clock" -msgstr "hora (24h)" - -#: src/prefs_common.c:2265 -msgid "the hour as a decimal number using a 12-hour clock" -msgstr "hora (12h)" - -#: src/prefs_common.c:2266 -msgid "the day of the year as a decimal number" -msgstr "dia do ano como número" - -#: src/prefs_common.c:2267 -msgid "the month as a decimal number" -msgstr "mês como número" - -#: src/prefs_common.c:2268 -msgid "the minute as a decimal number" -msgstr "minutos" - -#: src/prefs_common.c:2269 -msgid "either AM or PM" -msgstr "se AM ou PM" - -#: src/prefs_common.c:2270 -msgid "the second as a decimal number" -msgstr "segundos" - -#: src/prefs_common.c:2271 -msgid "the day of the week as a decimal number" -msgstr "dia do mês como número" - -#: src/prefs_common.c:2272 -msgid "the preferred date for the current locale" -msgstr "data (padrão da localização)" - -#: src/prefs_common.c:2273 -msgid "the last two digits of a year" -msgstr "dois últimos dígitos do ano" - -#: src/prefs_common.c:2274 -msgid "the year as a decimal number" -msgstr "ano" - -#: src/prefs_common.c:2275 -msgid "the time zone or name or abbreviation" -msgstr "abreviação da `Zona de Horário'" - -#: src/prefs_common.c:2302 -msgid "Specifier" -msgstr "Especificador" - -#: src/prefs_common.c:2303 -msgid "Description" -msgstr "Descrição" - -#: src/prefs_common.c:2342 -msgid "Example" -msgstr "Exemplo" - -#: src/prefs_common.c:2431 -msgid "Set message colors" -msgstr "Definir coloração para mensagens" - -#: src/prefs_common.c:2439 -msgid "Colors" -msgstr "Cores" - -#: src/prefs_common.c:2479 -msgid "Quoted Text - First Level" -msgstr "Texto citado - 1o. nível" - -#: src/prefs_common.c:2485 -msgid "Quoted Text - Second Level" -msgstr "Texto citado - 2o. nível" - -#: src/prefs_common.c:2491 -msgid "Quoted Text - Third Level" -msgstr "Texto citado - 3o. nível" - -#: src/prefs_common.c:2497 -msgid "URI link" -msgstr "Links (URL's)" - -#: src/prefs_common.c:2503 -msgid "Target folder" -msgstr "Pasta de destino" - -#: src/prefs_common.c:2510 -msgid "Recycle quote colors" -msgstr "Reutilizar cores em citações" - -#: src/prefs_common.c:2576 -msgid "Pick color for quotation level 1" -msgstr "Definir cor para citação de nível 1" - -#: src/prefs_common.c:2579 -msgid "Pick color for quotation level 2" -msgstr "Definir cor para citação de nível 2" - -#: src/prefs_common.c:2582 -msgid "Pick color for quotation level 3" -msgstr "Definir cor para citação de nível 3" - -#: src/prefs_common.c:2585 -msgid "Pick color for URI" -msgstr "Definir cor para Link" - -#: src/prefs_common.c:2588 -msgid "Pick color for target folder" -msgstr "Definir cor para pasta de destino" - -#: src/prefs_common.c:2727 src/prefs_matcher.c:1412 -msgid "Description of symbols" -msgstr "Descrição dos símbolos" - -#: src/prefs_common.c:2766 -#, c-format -msgid "" -"DESCRIPTION\n" -"\n" -"Date\n" -"From\n" -"Full Name of Sender\n" -"First Name of Sender\n" -"Initial of Sender\n" -"Subject\n" -"To\n" -"Cc\n" -"Newsgroups\n" -"Message-ID\n" -"References\n" -"\n" -"Display the information\n" -"If the information x is set, displays expr\n" -"\n" -"Message body\n" -"Quoted message body\n" -"Message body without signature\n" -"Quoted message body without signature\n" -"%" -msgstr "" -"DESCRIÇÃO\n" -"\n" -"Date\n" -"De\n" -"Nome completo do Remetente\n" -"Primeiro nome do Remetente\n" -"Iniciais do Remetente\n" -"Assunto\n" -"Para\n" -"Cc\n" -"Newsgroups\n" -"Message-ID\n" -"Referências\n" -"\n" -"Exibição de informações\n" -"Se a informatção x estiver definida, exibir a expr\n" -"\n" -"Corpo da mensagem\n" -"Corpo da mensagem citado\n" -"Corpo da mensagem sem a assinatura\n" -"Corpo da mensagem citado sem a assinatura\n" -"%" - -#: src/prefs_common.c:2883 -msgid "Set display item" -msgstr "Indicar elemento visual" - -#: src/prefs_common.c:2900 src/prefs_filtering.c:219 -msgid "Mark" -msgstr "Marca" - -#: src/prefs_common.c:2902 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2903 -msgid "Number" -msgstr "Número" - -#: src/prefs_common.c:2904 src/prefs_scoring.c:252 src/summaryview.c:584 -msgid "Score" -msgstr "Pontuação" - -#: src/prefs_common.c:2906 src/summaryview.c:574 -msgid "Date" -msgstr "Data" - -#: src/prefs_common.c:2907 src/prefs_matcher.c:140 src/summaryview.c:575 -msgid "From" -msgstr "De" - -#: src/prefs_common.c:2908 src/prefs_matcher.c:139 src/summaryview.c:576 -msgid "Subject" -msgstr "Assunto" - -#: src/prefs_common.c:2965 -msgid "Font selection" -msgstr "Seleção de fonte" - -#: src/prefs_common.c:3147 -msgid "Compose Preferences" -msgstr "Preferências de composição" - -#: src/prefs_common.c:3162 -msgid "Quote message when replying" -msgstr "Citar mensagem ao responder" - -#: src/prefs_common.c:3168 -msgid "Quotation mark" -msgstr "Marcador de citação" - -#: src/prefs_common.c:3181 -msgid "Quotation format:" -msgstr "Formato da citação" - -#: src/prefs_common.c:3202 -msgid "Forward quotation mark" -msgstr "Formato do marcador de reenvio" - -#: src/prefs_common.c:3215 -msgid "Forward format:" -msgstr "Formato de reenvio" - -#: src/prefs_common.c:3237 -msgid " Description of symbols " -msgstr " Descrição dos símbolos " - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "Personalizar cabeçalhos (Headers)" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "Criando janela para personalização de cabeçalhos...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "Configuração dos cabeçalhos personalizados" - -#. value -#: src/prefs_customheader.c:213 src/prefs_matcher.c:390 -msgid "Value" -msgstr "Valor" - -#: src/prefs_customheader.c:322 -msgid "Reading custom header configuration...\n" -msgstr "Lendo config. dos cabeçalhos personalizados...\n" - -#: src/prefs_customheader.c:367 -msgid "Writing custom header configuration...\n" -msgstr "Gravando config. dos cabeçalhos personalizados...\n" - -#: src/prefs_customheader.c:492 src/prefs_display_header.c:545 -#: src/prefs_filter.c:628 src/prefs_matcher.c:1008 -msgid "Header name is not set." -msgstr "Nome do cabeçalho não foi definido." - -#: src/prefs_customheader.c:546 -msgid "Delete header" -msgstr "Apagar cabeçalho" - -#: src/prefs_customheader.c:547 -msgid "Do you really want to delete this header?" -msgstr "Quer realmente apagar este cabeçalho?" - -#: src/prefs_display_header.c:190 -msgid "Creating display header setting window...\n" -msgstr "Criando janela de cabeçalhos...\n" - -#: src/prefs_display_header.c:213 -msgid "Display header setting" -msgstr "Configuração dos cabeçalhos" - -#. header name -#: src/prefs_display_header.c:240 src/prefs_matcher.c:369 -msgid "Header name" -msgstr "Nome do Cabeçalho" - -#: src/prefs_display_header.c:272 -msgid "Displayed Headers" -msgstr "Cabeçalhos exibidos" - -#: src/prefs_display_header.c:330 -msgid "Hidden headers" -msgstr "Cabeçalhos ocultos" - -#: src/prefs_display_header.c:360 -msgid "Show all unspecified headers" -msgstr "Mostrar todos os cabeçalhos" - -#: src/prefs_display_header.c:385 -msgid "Reading configuration for displaying headers...\n" -msgstr "Lendo configuração dos cabeçalhos...\n" - -#: src/prefs_display_header.c:423 -msgid "Writing configuration for displaying headers...\n" -msgstr "Gravando configuração dos cabeçalhos...\n" - -#: src/prefs_display_header.c:555 -msgid "This header is already in the list." -msgstr "Esse cabeçalho já existe na lista." - -#: src/prefs_filter.c:189 src/prefs_filtering.c:309 src/prefs_matcher.c:287 -#: src/prefs_scoring.c:185 -msgid "Registered rules" -msgstr "Regras registradas" - -#: src/prefs_filter.c:191 -msgid "Creating filter setting window...\n" -msgstr "Criando janela de regras de filtragem...\n" - -#: src/prefs_filter.c:218 -msgid "Filter setting" -msgstr "Regras de filtragem" - -#: src/prefs_filter.c:243 -msgid "Operator" -msgstr "Operador" - -#: src/prefs_filter.c:281 src/prefs_filter.c:641 src/prefs_filter.c:786 -#: src/prefs_filter.c:798 -msgid "(none)" -msgstr "(nenhuma)" - -#: src/prefs_filter.c:287 -msgid "Keyword" -msgstr "Palavra" - -#: src/prefs_filter.c:308 src/prefs_matcher.c:420 -msgid "Predicate" -msgstr "Predicado" - -#: src/prefs_filter.c:320 src/prefs_filter.c:331 src/prefs_filter.c:650 -#: src/prefs_filter.c:653 src/prefs_filter.c:803 src/prefs_filter.c:806 -#: src/prefs_matcher.c:126 -msgid "contains" -msgstr "contém" - -#: src/prefs_filter.c:320 src/prefs_filter.c:331 src/prefs_filter.c:803 -#: src/prefs_filter.c:806 -msgid "not contain" -msgstr "não contém" - -#: src/prefs_filter.c:347 src/prefs_filtering.c:456 -msgid "Destination" -msgstr "Destino" - -#: src/prefs_filter.c:371 -msgid "Use regex" -msgstr "Usar exp.reg." - -#: src/prefs_filter.c:375 -msgid "Don't receive" -msgstr "Não receber" - -#: src/prefs_filter.c:400 src/prefs_filtering.c:516 src/prefs_matcher.c:490 -#: src/prefs_scoring.c:277 -msgid "Register" -msgstr "Registrar" - -#: src/prefs_filter.c:406 src/prefs_filtering.c:522 src/prefs_matcher.c:496 -#: src/prefs_scoring.c:283 -msgid " Substitute " -msgstr " Sustituir " - -#: src/prefs_filter.c:493 -msgid "Reading filter configuration...\n" -msgstr "Lendo configuração dos filtros...\n" - -#: src/prefs_filter.c:529 -msgid "Writing filter configuration...\n" -msgstr "Gravando configuração dos filtros...\n" - -#: src/prefs_filter.c:572 src/prefs_filtering.c:649 src/prefs_filtering.c:667 -#: src/prefs_matcher.c:610 src/prefs_matcher.c:684 src/prefs_scoring.c:459 -#: src/prefs_scoring.c:491 -msgid "(New)" -msgstr "(Novo)" - -#: src/prefs_filter.c:623 src/prefs_filtering.c:760 -msgid "Destination is not set." -msgstr "Destinatário não especificado." - -#: src/prefs_filter.c:734 src/prefs_filtering.c:834 src/prefs_scoring.c:644 -msgid "Delete rule" -msgstr "Apagar regra" - -#: src/prefs_filter.c:735 src/prefs_filtering.c:835 src/prefs_scoring.c:645 -msgid "Do you really want to delete this rule?" -msgstr "Quer realmente apagar esta regra?" - -#: src/prefs_filtering.c:216 -msgid "Move" -msgstr "Mover" - -#: src/prefs_filtering.c:217 -msgid "Copy" -msgstr "Copiar" - -#: src/prefs_filtering.c:220 -msgid "Unmark" -msgstr "Desmarcar" - -#: src/prefs_filtering.c:221 -msgid "Mark as read" -msgstr "Marcar como lida" - -#: src/prefs_filtering.c:222 -msgid "Mark as unread" -msgstr "Marcar como não lida" - -#: src/prefs_filtering.c:226 src/prefs_filtering.c:466 -msgid "Color" -msgstr "Cores" - -#: src/prefs_filtering.c:311 -msgid "Creating filtering setting window...\n" -msgstr "Criando janela de regras de filtragem...\n" - -#: src/prefs_filtering.c:330 -msgid "Filtering setting" -msgstr "Regras de filtragem" - -#: src/prefs_filtering.c:349 src/prefs_scoring.c:225 -msgid "Condition" -msgstr "Condição" - -#: src/prefs_filtering.c:364 src/prefs_scoring.c:240 -msgid "Define ..." -msgstr "Definir ..." - -#: src/prefs_filtering.c:376 -msgid "Action" -msgstr "Ação" - -#: src/prefs_filtering.c:416 src/progressdialog.c:52 -msgid "Account" -msgstr "Conta" - -#: src/prefs_filtering.c:482 -msgid "Select ..." -msgstr "Selecionar..." - -#: src/prefs_filtering.c:489 src/prefs_matcher.c:402 -msgid "Info ..." -msgstr "Info ..." - -#: src/prefs_filtering.c:714 src/prefs_filtering.c:780 src/prefs_scoring.c:538 -#: src/prefs_scoring.c:576 src/prefs_scoring.c:622 -msgid "Match string is not valid." -msgstr "String de procura inválida." - -#: src/prefs_filtering.c:743 src/prefs_scoring.c:561 src/prefs_scoring.c:607 -msgid "Score is not set." -msgstr "Pontuação não foi definida." - -#: src/prefs_matcher.c:117 -msgid "or" -msgstr "ou" - -#: src/prefs_matcher.c:117 -msgid "and" -msgstr "e" - -#: src/prefs_matcher.c:126 -msgid "does not contain" -msgstr "não contém" - -#: src/prefs_matcher.c:135 -msgid "yes" -msgstr "Sim" - -#: src/prefs_matcher.c:135 -msgid "no" -msgstr "não" - -#: src/prefs_matcher.c:139 -msgid "All messages" -msgstr "Todas as mensagens" - -#: src/prefs_matcher.c:140 -msgid "To" -msgstr "Para" - -#: src/prefs_matcher.c:140 -msgid "To or Cc" -msgstr "Para ou Cc" - -#: src/prefs_matcher.c:141 -msgid "Newsgroups" -msgstr "Grupos de notícias" - -#: src/prefs_matcher.c:141 -msgid "In reply to" -msgstr "Em resposta à" - -#: src/prefs_matcher.c:141 -msgid "References" -msgstr "Referências" - -#: src/prefs_matcher.c:142 -msgid "Age greater than" -msgstr "Criação maior do que" - -#: src/prefs_matcher.c:142 -msgid "Age lower than" -msgstr "Criação menor do que" - -#: src/prefs_matcher.c:143 -msgid "Headers part" -msgstr "Trecho do cabeçalho" - -#: src/prefs_matcher.c:144 -msgid "Body part" -msgstr "Trecho do texto" - -#: src/prefs_matcher.c:144 -msgid "Whole message" -msgstr "Toda a mensagem" - -#: src/prefs_matcher.c:145 -msgid "Unread flag" -msgstr "Sinalizada como Não lida" - -#: src/prefs_matcher.c:145 -msgid "New flag" -msgstr "Novo sinalizador" - -#: src/prefs_matcher.c:146 -msgid "Marked flag" -msgstr "Sinalizada como marcado" - -#: src/prefs_matcher.c:146 -msgid "Deleted flag" -msgstr "Sinalizada como apagada" - -#: src/prefs_matcher.c:147 -msgid "Replied flag" -msgstr "Sinalizada como respondida" - -#: src/prefs_matcher.c:147 -msgid "Forwarded flag" -msgstr "Sinalizada como reenviada" - -#: src/prefs_matcher.c:148 -msgid "Score greater than" -msgstr "Pontuação maior do que" - -#: src/prefs_matcher.c:148 -msgid "Score lower than" -msgstr "Pontuação menor do que" - -#: src/prefs_matcher.c:289 -msgid "Creating matcher setting window...\n" -msgstr "Criando janela de regras de localização...\n" - -#: src/prefs_matcher.c:308 -msgid "Condition setting" -msgstr "Definições de condições" - -#. criteria combo box -#: src/prefs_matcher.c:336 -msgid "Match type" -msgstr "Considerar" - -#: src/prefs_matcher.c:472 src/summary_search.c:172 -msgid "Case sensitive" -msgstr "Maiús./minús." - -#: src/prefs_matcher.c:473 -msgid "Use regexp" -msgstr "Usar exp.reg." - -#. boolean operation -#: src/prefs_matcher.c:511 -msgid "Boolean Op" -msgstr "Oper. Booleano" - -#: src/prefs_matcher.c:994 -msgid "Value is not set." -msgstr "Valor não definido." - -#: src/prefs_matcher.c:1444 -msgid "" -"%\n" -"Subject\n" -"From\n" -"To\n" -"Cc\n" -"Date\n" -"Message-ID\n" -"Newsgroups\n" -"References\n" -"Filename - should not be modified\n" -"new line\n" -"escape character for quotes\n" -"quote character\n" -"%" -msgstr "" -"%\n" -"Assunto\n" -"De\n" -"Para\n" -"Cc\n" -"Data\n" -"Message-ID\n" -"Newsgroups\n" -"Referências\n" -"Nome do arquivo - não deve ser modificado\n" -"nova linha\n" -"caractere de escape para citação\n" -"caractere de citação\n" -"%" - -#: src/prefs_scoring.c:187 -msgid "Creating scoring setting window...\n" -msgstr "Criando janela de regras de pontuação...\n" - -#: src/prefs_scoring.c:206 -msgid "Scoring setting" -msgstr "Regras de pontuação" - -#: src/prefs_scoring.c:340 -msgid "Kill score" -msgstr "Eliminar pontuações" - -#: src/prefs_scoring.c:352 -msgid "Important score" -msgstr "Pontuação para Importante" - -#: src/prefs_scoring.c:567 src/prefs_scoring.c:613 -msgid "Match string is not set." -msgstr "String de procura não definida" - -#: src/procmime.c:685 -msgid "Code conversion failed.\n" -msgstr "Falha ao converter conjunto de caracteres\n" - -#: src/procmsg.c:138 src/procmsg.c:154 -msgid "Cache data is corrupted\n" -msgstr "Dados do cache corrompidos\n" - -#: src/procmsg.c:203 -msgid "\tNo cache file\n" -msgstr "\tNão há arquivo de cache\n" - -#: src/procmsg.c:210 -msgid "\tReading summary cache..." -msgstr "\tLendo cache dos cabeçalhos..." - -#: src/procmsg.c:215 -msgid "Cache version is different. Discarding it.\n" -msgstr "A versão em cache é diferente. Descartando-a.\n" - -#: src/procmsg.c:283 -msgid "\tMarking the messages..." -msgstr "\tMarcando as mensagens..." - -#: src/procmsg.c:327 -#, c-format -msgid "\t%d new message(s)\n" -msgstr "\t%d novas mensagens\n" - -#: src/procmsg.c:463 -msgid "Mark file not found.\n" -msgstr "Arquivo de marcas não encontrado.\n" - -#: src/procmsg.c:465 -#, 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:481 -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:486 -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:669 -msgid "Sending queued message failed.\n" -msgstr "Falhou ao enviar as mensagens da fila.\n" - -#: src/procmsg.c:727 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "Linha de comando de impressão é inválida: `%s'\n" - -#: src/progressdialog.c:53 -msgid "Status" -msgstr "Status" - -#: src/progressdialog.c:55 -msgid "Creating progress dialog...\n" -msgstr "Criando diálogo de progresso...\n" - -#: src/recv.c:112 -msgid "error occurred while retrieving data.\n" -msgstr "ocorreu um erro enquanto se obtiam os dados.\n" - -#: src/recv.c:152 src/recv.c:191 src/recv.c:207 -msgid "Can't write to file.\n" -msgstr "Não foi possível gravar no arquivo.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 src/sigstatus.c:219 -msgid "Oops: Signature not verified" -msgstr "Oops: assinatura não verificada" - -#: src/rfc2015.c:140 src/rfc2015.c:175 src/sigstatus.c:222 -msgid "No signature found" -msgstr "Assinatura não encontrada" - -#: src/rfc2015.c:143 src/sigstatus.c:225 -msgid "Good signature" -msgstr "Assinatura VÁLIDA" - -#: src/rfc2015.c:146 src/sigstatus.c:228 -msgid "BAD signature" -msgstr "Assinatura INVÁLIDA" - -#: src/rfc2015.c:149 src/rfc2015.c:184 src/sigstatus.c:231 -msgid "No public key to verify the signature" -msgstr "Não há chave pública para verificar a assinatura" - -#: src/rfc2015.c:152 src/rfc2015.c:187 src/sigstatus.c:234 -msgid "Error verifying the signature" -msgstr "Erro ao verificar a assinatura" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "Resultados diferentes para a assinatura" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "Erro: status desconhecido" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "Assinatura VÁLIDA de \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "Assinatura INVÁLIDA de \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "Não localizei a UserID dessa chave." - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr " aka \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "Assinatura criada %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "Fingeprint da chave: %s\n" - -#: src/scoring.c:295 -msgid "Reading headers configuration...\n" -msgstr "Lendo configuração dos cabeçalhos...\n" - -#. debug -#: src/scoring.c:347 -#, c-format -msgid "syntax error : %s\n" -msgstr "erro de sintaxe: %s\n" - -#: src/scoring.c:423 -msgid "Writing scoring configuration...\n" -msgstr "Gravando configuração da pontuação...\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "Selecione a chave para `%s'" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "Coletando informações para `%s' ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "Selecionar chave" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "Key ID" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "Validade" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "Selecionar" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "Adicionar chave" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "Informe outro usuário ou KeyId\n" - -#: src/send.c:166 -#, c-format -msgid "Using command to send mail: %s ...\n" -msgstr "Utilizando comando para enviar mail: %s ...\n" - -#: src/send.c:183 -msgid "Mail sent successfully ...\n" -msgstr "Mensagem enviada com sucesso ...\n" - -#: src/send.c:228 -msgid "Queued message header is broken.\n" -msgstr "Mensagem da fila com cabeçalho corrompido.\n" - -#: src/send.c:237 -msgid "Account not found. Using current account...\n" -msgstr "Conta não encontrada. Utilizando a conta padrão...\n" - -#: src/send.c:258 -msgid "Account not found.\n" -msgstr "Conta não encontrada.\n" - -#: src/send.c:354 -#, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "Conectando com o servidor SMTP: %s ..." - -#: src/send.c:358 -msgid "Connecting" -msgstr "Conectando" - -#: src/send.c:371 -msgid "Sending MAIL FROM..." -msgstr "Enviando REMETENTE..." - -#: src/send.c:372 -msgid "Sending" -msgstr "Enviando" - -#: src/send.c:379 -msgid "Sending RCPT TO..." -msgstr "Enviando DESTINATÁRIO..." - -#: src/send.c:386 -msgid "Sending DATA..." -msgstr "Enviando MENSAGEM..." - -#: src/send.c:402 -#, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "Enviando mensagem (%d / %d bytes)" - -#: src/send.c:419 -msgid "Quitting..." -msgstr "Saindo..." - -#: src/send.c:449 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "Não foi possível conectar ao servidor SMTP: %s:%d\n" - -#: src/send.c:456 -msgid "SSL connection failed" -msgstr "Falha na conexão SSL" - -#: src/send.c:466 -msgid "Error occurred while sending HELO\n" -msgstr "Ocorreu um erro enviando HELO\n" - -#: src/send.c:477 -msgid "Error occurred while sending STARTTLS\n" -msgstr "Ocorreu um erro enviando STARTTLS\n" - -#: src/send.c:497 -msgid "Sending message" -msgstr "Enviar mensagem" - -#: src/setup.c:43 -msgid "Mailbox setting" -msgstr "Configuração da caixa postal (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 "" -"Inicialmente, você precisa definir a localização da\n" -"caixa postal (mailbox), Você pode utilizar uma já\n" -"existente no formato MH, se possuir uma.\n" -"Se não tem certeza, apenas clique em OK." - -#: src/sigstatus.c:129 -msgid "Checking signature" -msgstr "Verificar assinatura" - -#: src/sourcewindow.c:76 -msgid "Creating source window...\n" -msgstr "Criando janela de código-fonte...\n" - -#: src/sourcewindow.c:80 -msgid "Source of the message" -msgstr "Código-fonte da mensagem" - -#: src/sourcewindow.c:140 -#, c-format -msgid "Displaying the source of %s ...\n" -msgstr "Exibindo código-fonte de %s ...\n" - -#: src/sourcewindow.c:142 -#, c-format -msgid "%s - Source" -msgstr "%s - Código-fonte" - -#: src/summary_search.c:99 src/summary_search.c:190 -msgid "Search" -msgstr "Procurar" - -#: src/summary_search.c:178 -msgid "Backward search" -msgstr "Procurar para trás" - -#: src/summary_search.c:184 -msgid "Select all matched" -msgstr "Selecionar todas as ocorrências" - -#: 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:325 -msgid "/M_ove..." -msgstr "/M_over..." - -#: src/summaryview.c:326 -msgid "/_Copy..." -msgstr "/_Copiar..." - -#: src/summaryview.c:328 -msgid "/E_xecute" -msgstr "/E_xecutar" - -#: src/summaryview.c:329 -msgid "/_Mark" -msgstr "/_Marcar" - -#: src/summaryview.c:330 -msgid "/_Mark/_Mark" -msgstr "/_Marcar/_Marcar" - -#: src/summaryview.c:331 -msgid "/_Mark/_Unmark" -msgstr "/_Marcar/_Desmarcar" - -#: src/summaryview.c:332 -msgid "/_Mark/---" -msgstr "/_Marcar/---" - -#: src/summaryview.c:333 -msgid "/_Mark/Mark as unr_ead" -msgstr "/_Marcar/Marcar como _não lida" - -#: src/summaryview.c:334 -msgid "/_Mark/Mark as rea_d" -msgstr "/_Marcar/Marcar como lida" - -#: src/summaryview.c:336 -msgid "/_Mark/Mark all read" -msgstr "/_Marcar/Marcar todas como lidas" - -#: src/summaryview.c:338 -msgid "/_Mark/Ignore thread" -msgstr "/_Marcar/Ignorar assunto (thread)" - -#: src/summaryview.c:339 -msgid "/_Mark/Unignore thread" -msgstr "/_Marcar/Respeitar assunto (thread)" - -#: src/summaryview.c:342 -msgid "/_Reply" -msgstr "/_Responder" - -#: src/summaryview.c:343 -msgid "/Repl_y to sender" -msgstr "/Res_ponder ao remetente" - -#: src/summaryview.c:344 -msgid "/Follow-up and reply to" -msgstr "/_Encaminhar e responder" - -#: src/summaryview.c:345 -msgid "/Reply to a_ll" -msgstr "Responder para todos" - -#: src/summaryview.c:346 -msgid "/_Forward" -msgstr "/En_caminhar" - -#: src/summaryview.c:347 -msgid "/Forward as a_ttachment" -msgstr "/Encaminhar como anexo" - -#: src/summaryview.c:350 -msgid "/Open in new _window" -msgstr "/Abrir numa n_ova janela" - -#: src/summaryview.c:351 -msgid "/View so_urce" -msgstr "/Exibir código-fonte" - -#: src/summaryview.c:352 -msgid "/Show all _header" -msgstr "/Mostrar todos os cabeçalhos" - -#: src/summaryview.c:353 -msgid "/Re-_edit" -msgstr "/Re_editar" - -#: src/summaryview.c:356 -msgid "/_Print..." -msgstr "/_Imprimir..." - -#: src/summaryview.c:358 -msgid "/Select _all" -msgstr "/_Selecionar tudo" - -#: src/summaryview.c:497 -msgid "Label" -msgstr "Rótulo" - -#: src/summaryview.c:543 -msgid "M" -msgstr "x" - -#: src/summaryview.c:543 -msgid "U" -msgstr "N" - -#: src/summaryview.c:558 -msgid "Creating summary view...\n" -msgstr "Criando visualizador de cabeçalhos...\n" - -#: src/summaryview.c:573 -msgid "No." -msgstr "No." - -#: src/summaryview.c:878 -msgid "Process mark" -msgstr "Procesar marcas" - -#: src/summaryview.c:879 -msgid "Some marks are left. Process it?" -msgstr "Algumas marcas foram definidas. Processá-las?" - -#: src/summaryview.c:908 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"pasta vazia\n" -"\n" - -#: src/summaryview.c:920 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "Revisando pasta (%s)..." - -#: src/summaryview.c:1214 -msgid "No unread message" -msgstr "Não há mensagens não lidas" - -#: src/summaryview.c:1215 -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:1239 src/summaryview.c:1269 -msgid "No more marked messages" -msgstr "Não há mais mensagens maracdas" - -#: src/summaryview.c:1240 -msgid "No marked message found. Search from the beginning?" -msgstr "Não foram encontradas mensagens marcadas. Procurar do início?" - -#: src/summaryview.c:1248 src/summaryview.c:1278 -msgid "No marked messages." -msgstr "Não há mensagens marcadas" - -#: src/summaryview.c:1270 -msgid "No marked message found. Search from the end?" -msgstr "Não foram encontradas mensagens marcadas. Procurar até o final?" - -#: src/summaryview.c:1458 src/summaryview.c:1460 -msgid "Attracting messages by subject..." -msgstr "Agrupando mensagens por assunto..." - -#: src/summaryview.c:1603 -#, c-format -msgid "%d deleted" -msgstr "%d apagadas" - -#: src/summaryview.c:1607 -#, c-format -msgid "%s%d moved" -msgstr "%s%d movidas" - -#: src/summaryview.c:1608 src/summaryview.c:1615 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1613 -#, c-format -msgid "%s%d copied" -msgstr "%s%d copiada" - -#: src/summaryview.c:1630 -msgid " item(s) selected" -msgstr " item(ns) selecionado(s)" - -#: src/summaryview.c:1641 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d novas, %d não lidas, %d no total (%s)" - -#: src/summaryview.c:1647 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d novas, %d não lidas, %d no total" - -#: src/summaryview.c:1697 src/summaryview.c:1698 -msgid "Sorting summary..." -msgstr "Ordenando cabeçalhos..." - -#: src/summaryview.c:1764 -msgid "\tSetting summary from message data..." -msgstr "\tExtraindo cabeçalhos das mensagens..." - -#: src/summaryview.c:1766 -msgid "Setting summary from message data..." -msgstr "Resumindo as mensagens..." - -#: src/summaryview.c:2000 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "Gravando cache de resumo (%s)..." - -#: src/summaryview.c:2068 -msgid "(No Date)" -msgstr "(Sem data)" - -#: src/summaryview.c:2387 -#, c-format -msgid "Message %d is marked\n" -msgstr "Mensagem %d marcada\n" - -#: src/summaryview.c:2418 -#, c-format -msgid "Message %d is marked as read\n" -msgstr "Mensagem %d marcada como lida\n" - -#: src/summaryview.c:2462 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Mensagem %d marcada como não lida\n" - -#: src/summaryview.c:2516 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Mensagem %s/%d marcada para deleção\n" - -#: src/summaryview.c:2530 -msgid "Current folder is Trash." -msgstr "A pasta atual é a Lixeira." - -#: src/summaryview.c:2552 src/summaryview.c:2554 -msgid "Deleting duplicated messages..." -msgstr "Apagando mensagens duplicadas..." - -#: src/summaryview.c:2612 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Mensagem %s/%d desmarcada\n" - -#: src/summaryview.c:2671 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "Mensagem %d marcada para mover para %s\n" - -#: src/summaryview.c:2683 -msgid "Destination is same as current folder." -msgstr "O destino é o mesmo que a pasta atual." - -#: src/summaryview.c:2757 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "Mensagem %d marcada para cópia para %s\n" - -#: src/summaryview.c:2770 -msgid "Destination to copy is same as current folder." -msgstr "A pasta de destino é a mesma da origem." - -#: src/summaryview.c:2805 -msgid "Selecting all messages..." -msgstr "Selecionando todas as mensagens" - -#: src/summaryview.c:2859 -msgid "Print" -msgstr "Imprimir" - -#: src/summaryview.c:2860 -#, 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:2866 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"O comando de impressão é inválido:\n" -"`%s'" - -#: src/summaryview.c:3102 src/summaryview.c:3103 -msgid "Building threads..." -msgstr "Construindo a hierarquia..." - -#: src/summaryview.c:3125 src/summaryview.c:3126 -msgid "Unthreading..." -msgstr "Desfazendo a hierarquia..." - -#: src/summaryview.c:3148 -msgid "Unthreading for execution..." -msgstr "Desfazendo a hierarquia para a execução..." - -#: src/summaryview.c:3244 -msgid "filtering..." -msgstr "filtrando..." - -#: src/summaryview.c:3245 -msgid "Filtering..." -msgstr "Filtrando..." - -#: src/summaryview.c:3377 -#, c-format -msgid "Go to %s\n" -msgstr "Ir para %s\n" - -#: src/summaryview.c:3733 -msgid "Add sender to address book" -msgstr "Adicionar remetente ao Livro de endereços" - -#: src/summaryview.c:3979 -#, c-format -msgid "Message %d is marked as ignore thread\n" -msgstr "Mensagem %d marcada para ignorar assunto (thread)\n" - -#: src/summaryview.c:4010 -#, c-format -msgid "Message %d is marked as unignore thread\n" -msgstr "Mensagem %d marcada para não ignorar assunto (thread)\n" - -#: src/textview.c:139 -msgid "Creating text view...\n" -msgstr "Criando visualização do texto...\n" - -#: src/textview.c:371 -msgid "To save this part, pop up the context menu with " -msgstr "Para salvar esta parte, abra o menu contextual com o " - -#: src/textview.c:372 -msgid "right click and select `Save as...', " -msgstr "botão direito e selecione `Salvar como...', " - -#: src/textview.c:373 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"ou pressione a tecla `y'.\n" -"\n" - -#: src/textview.c:375 -msgid "To display this part as a text message, select " -msgstr "Para ver esta parte como uma mensagem de texto, selecione" - -#: src/textview.c:376 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"`Exibir como texto', ou tecle `t'.\n" -"\n" - -#: src/textview.c:378 -msgid "To open this part with external program, select " -msgstr "Para abrir esta parte com um programa externo selecione " - -#: src/textview.c:379 -msgid "`Open' or `Open with...', " -msgstr "`Abrir' ou `Abrir com...' " - -#: src/textview.c:380 -msgid "or double-click, or click the center button, " -msgstr "ou duplo-click, ou clique com o botão do meio, " - -#: src/textview.c:381 -msgid "or press `l' key." -msgstr "ou tecle `l'." - -#: src/textview.c:400 -msgid "This signature has not been checked yet.\n" -msgstr "A assinatura ainda não foi verificada.\n" - -#: src/textview.c:401 -msgid "To check it, pop up the context menu with\n" -msgstr "Para veificá-la, ativa o menu de contexto com o\n" - -#: src/textview.c:402 -msgid "right click and select `Check signature'.\n" -msgstr "botão direito do mouse e selecione `Verificar Assinatura'.\n" - -#: src/utils.c:1591 -#, c-format -msgid "File copy from %s to %s failed.\n" -msgstr "Cópia de %s para %s falhou.\n" - -#: src/utils.c:1689 -#, c-format -msgid "move_file(): file %s already exists." -msgstr "move_file(): o arquivo %s já existe." - -#: src/utils.c:1830 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "Linha de comando para abrir URL inválida: `%s'" - -#: src/ssl.c:41 -msgid "SSLv23 not available\n" -msgstr "SSLv23 não disponível\n" - -#: src/ssl.c:43 -msgid "SSLv23 available\n" -msgstr "SSLv23 disponível\n" - -#: src/ssl.c:48 -msgid "TLSv1 not available\n" -msgstr "TLSv1 não disponível\n" - -#: src/ssl.c:50 -msgid "TLSv1 available\n" -msgstr "TLSv1 disponível\n" - -#: src/ssl.c:75 src/ssl.c:82 -msgid "SSL method not available\n" -msgstr "Método SSL não disponível\n" - -#: src/ssl.c:88 -msgid "Unknown SSL method *PROGRAM BUG*\n" -msgstr "Método SSL desconhecido *PROGRAM BUG*\n" - -#: src/ssl.c:94 -msgid "Error creating ssl context\n" -msgstr "Erro ao criar contexto SSL\n" - -#: src/ssl.c:101 -#, c-format -msgid "SSL connect failed (%s)\n" -msgstr "Falha na conexão SSL (%s)\n" - -#. Get the cipher -#: src/ssl.c:108 -#, c-format -msgid "SSL connection using %s\n" -msgstr "Conexão SSL utilizando %s\n" - -#: src/ssl.c:115 -msgid "Server certificate:\n" -msgstr "Certificado do servidor:\n" - -#: src/ssl.c:118 -#, c-format -msgid " Subject: %s\n" -msgstr " Assunto: %s\n" - -#: src/ssl.c:123 -#, c-format -msgid " Issuer: %s\n" -msgstr " Emissor: %s\n" - -#~ msgid "SSL disabled\n" -#~ msgstr "SSL desativado\n" - -#~ msgid "SSL loaded\n" -#~ msgstr "SSL ativado\n" - -#~ msgid "Date format description" -#~ msgstr "Descrição do formato de data" - -#~ msgid "Error %s\n" -#~ msgstr "Erro %s\n" - -#~ msgid "Date Format" -#~ msgstr "Formato de data" - -#~ msgid "Customize" -#~ msgstr "Personalizar" - -#~ msgid "Compose email" -#~ msgstr "Compor mensagem" - -#~ msgid "Compose news" -#~ msgstr "Compor artigo" - -#~ msgid "group list has been already cached.\n" -#~ msgstr "a listagem do grupo já em cache.\n" - -#~ msgid "\tDeleting cached group list... " -#~ msgstr "\tApagando listagem de grupos em cache... " - -#~ msgid "can't delete cached group list %s\n" -#~ msgstr "não pude apagar listagem de grupos %s do cache\n" - -#~ msgid "/_Label/---" -#~ msgstr "/Rótu_lo/---" - -#~ msgid "done." -#~ msgstr "concluído." - -#~ msgid "can't get the next uid of folder: %s\n" -#~ msgstr "não pude obter o próximo UID da pasta: %s\n" - -#~ msgid "Automatic" -#~ msgstr "Automático" diff --git a/po/ru.po b/po/ru.po deleted file mode 100644 index 9452d9849..000000000 --- a/po/ru.po +++ /dev/null @@ -1,4139 +0,0 @@ -# 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-06-20 17:53+0900\n" -"PO-Revision-Date: 2001-05-26 14:28+04:00\n" -"Last-Translator: Dmitry S. Sivachenko <dima@Chg.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:90 -msgid "About" -msgstr "ï ÐÒÏÇÒÁÍÍÅ" - -#: src/about.c:199 -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:205 -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:210 -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:214 -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:220 -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:226 -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:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1476 src/compose.c:3132 src/export.c:185 src/foldersel.c:176 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:334 src/main.c:342 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "OK" -msgstr "OK" - -#: src/account.c:101 -msgid "Reading all config for each account...\n" -msgstr "þÔÅÎÉÅ ÎÁÓÔÒÏÅË ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ...\n" - -#: src/account.c:116 -#, c-format -msgid "Found label: %s\n" -msgstr "îÁÊÄÅÎÁ ÍÅÔËÁ: %s\n" - -#: src/account.c:208 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" -"îÅËÏÔÏÒÙÅ ÏËÎÁ Ó ÎÅÏÔÐÒÁ×ÌÅÎÎÙÍÉ ÓÏÏÂÝÅÎÉÑÍÉ ÏÔËÒÙÔÙ.\n" -"ðÏÖÁÌÕÊÓÔÁ, ÚÁËÒÏÊÔÅ ÉÈ ÐÅÒÅÄ ÉÚÍÅÎÅÎÉÅÍ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ." - -#: src/account.c:214 -msgid "Opening account edit window...\n" -msgstr "ïÔËÒÙÔÉÅ ÏËÎÁ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ...\n" - -#: src/account.c:361 -msgid "Creating account edit window...\n" -msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ...\n" - -#: src/account.c:366 -msgid "Edit accounts" -msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" - -#: src/account.c:394 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2244 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "éÍÑ" - -#: src/account.c:395 src/prefs_account.c:632 -msgid "Protocol" -msgstr "ðÒÏÔÏËÏÌ" - -#: src/account.c:396 -msgid "Server" -msgstr "óÅÒ×ÅÒ" - -#: src/account.c:415 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "äÏÂÁ×ÉÔØ" - -#: src/account.c:421 -msgid "Edit" -msgstr "éÚÍÅÎÉÔØ" - -#: src/account.c:427 src/prefs_customheader.c:247 -msgid " Delete " -msgstr "õÄÁÌÉÔØ" - -#: src/account.c:433 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "÷ÎÉÚ" - -#: src/account.c:439 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "÷×ÅÒÈ" - -#: src/account.c:453 -msgid " Set as usually used account " -msgstr " õÓÔÁÎÏ×ÉÔØ ÕÞÅÔÎÕÀ ÚÁÐÉÓØ ÐÏ ÕÍÏÌÞÁÎÉÀ " - -#: src/account.c:459 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "úÁËÒÙÔØ" - -#: src/account.c:513 -msgid "Delete account" -msgstr "õÄÁÌÉÔØ ÕÞÅÔÎÕÀ ÚÁÐÉÓØ" - -#: src/account.c:514 -msgid "Do you really want to delete this account?" -msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÜÔÕ ÚÁÐÉÓØ?" - -#: src/account.c:515 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3306 src/folderview.c:1448 src/folderview.c:1491 -#: src/folderview.c:1590 src/folderview.c:1631 src/folderview.c:1730 -#: src/folderview.c:1763 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "äÁ" - -#: src/account.c:515 src/compose.c:3306 src/folderview.c:1448 -#: src/folderview.c:1491 src/folderview.c:1590 src/folderview.c:1631 -#: src/folderview.c:1730 src/folderview.c:1763 -msgid "+No" -msgstr "+îÅÔ" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -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:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -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:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/æÁÊÌ/úÁËÒÙÔØ" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/óÐÒÁ×ËÁ" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -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:369 -#: src/folderview.c:206 src/folderview.c:208 src/folderview.c:217 -#: src/folderview.c:219 src/folderview.c:228 src/folderview.c:230 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/ðÒÁ×ËÁ" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/õÄÁÌÉÔØ" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "üÌÅËÔÒÏÎÎÙÊ ÁÄÒÅÓ" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "ðÒÉÍÅÞÁÎÉÅ" - -#: src/addressbook.c:325 src/compose.c:2804 -msgid "Address book" -msgstr "áÄÒÅÓÎÁÑ ËÎÉÇÁ" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "éÍÑ:" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -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:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "îÅÔ" - -#: src/addressbook.c:1000 src/folderview.c:1321 src/folderview.c:1522 -msgid "New folder" -msgstr "îÏ×ÁÑ ÐÁÐËÁ" - -#: src/addressbook.c:1001 src/folderview.c:1322 -msgid "Input the name of new folder:" -msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÎÏ×ÏÊ ÐÁÐËÉ:" - -#: src/addressbook.c:1002 src/folderview.c:1323 src/folderview.c:1526 -msgid "NewFolder" -msgstr "îÏ×ÁÑðÁÐËÁ" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "üÔÏ ÉÍÑ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "îÏ×ÁÑ ÇÒÕÐÐÁ" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÎÏ×ÏÊ ÇÒÕÐÐÙ:" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "îÏ×ÁÑçÒÕÐÐÁ" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "éÚÍÅÎÉÔØ ÉÍÑ ÇÒÕÐÐÙ" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÇÒÕÐÐÙ:" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "éÚÍÅÎÉÔØ ÉÍÑ ÐÁÐËÉ" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÐÁÐËÉ:" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÕÄÁÌÉÔØ `%s' ?" - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "éÚÍÅÎÉÔØ ÁÄÒÅÓ" - -#: src/addressbook.c:1290 src/compose.c:2803 src/select-keys.c:302 -msgid "Address" -msgstr "áÄÒÅÓ" - -#: src/addressbook.c:1294 src/compose.c:1476 src/compose.c:3133 -#: src/compose.c:3703 src/export.c:186 src/foldersel.c:177 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:334 src/main.c:342 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "Cancel" -msgstr "ïÔÍÅÎÉÔØ" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "úÁÇÒÕÚËÁ ÁÄÒÅÓÎÏÊ ËÎÉÇÉ..." - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s ÎÅ ÎÁÊÄÅÎ.\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:869 src/imap.c:888 -#: src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 src/mh.c:816 -#: src/news.c:648 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:1003 -#: src/summaryview.c:1209 src/summaryview.c:1291 src/summaryview.c:1352 -#: src/summaryview.c:1809 src/summaryview.c:2287 src/summaryview.c:2310 -#: src/summaryview.c:2331 src/summaryview.c:2424 -msgid "done.\n" -msgstr "×ÙÐÏÌÎÅÎÏ.\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "úÁÐÉÓØ ÁÄÒÅÓÎÏÊ ËÎÉÇÉ × ÆÁÊÌ..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ÄÁÎÎÙÈ ÁÄÒÅÓÎÏÊ ËÎÉÇÉ.\n" - -#: src/alertpanel.c:119 src/compose.c:3306 src/main.c:332 -msgid "Notice" -msgstr "õ×ÅÄÏÍÌÅÎÉÅ" - -#: src/alertpanel.c:132 src/main.c:218 -msgid "Warning" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "ïÛÉÂËÁ" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ...\n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "ÏÛÉÂËÁ ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÐÁÍÑÔÉ\n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/äÏÂÁ×ÉÔØ..." - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/õÄÁÌÉÔØ" - -#: src/compose.c:370 src/folderview.c:209 src/folderview.c:220 -#: src/folderview.c:231 -msgid "/_Property..." -msgstr "/îÁÓÔÒÏÊËÉ..." - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/æÁÊÌ/ðÒÉÓÏÅÄÉÎÉÔØ ÆÁÊÌ" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/æÁÊÌ/÷ÓÔÁ×ÉÔØ ÆÁÊÌ" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/æÁÊÌ/äÏÂÁ×ÉÔØ ÐÏÄÐÉÓØ" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/ðÒÁ×ËÁ/ïÔËÁÔ" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/ðÒÁ×ËÁ/ïÔËÁÔ ÏÔËÁÔÁ" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/ðÒÁ×ËÁ/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/ðÒÁ×ËÁ/÷ÙÒÅÚÁÔØ" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/ðÒÁ×ËÁ/ëÏÐÉÒÏ×ÁÔØ" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/ðÒÁ×ËÁ/÷ÓÔÁ×ÉÔØ" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/ðÒÁ×ËÁ/÷ÙÄÅÌÉÔØ ×ÓÅ" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/ðÒÁ×ËÁ/ðÅÒÅÎÅÓÔÉ ÓÔÒÏËÉ" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/ðÒÁ×ËÁ/÷ÙÚ×ÁÔØ ×ÎÅÛÎÉÊ ÒÅÄÁËÔÏÒ" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/óÏÏÂÝÅÎÉÅ" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÐÒÁ×ÉÔØ" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÐÒÁ×ÉÔØ ÐÏÚÖÅ" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "/óÏÏÂÝÅÎÉÅ/óÏÈÒÁÎÉÔØ × ÐÁÐËÅ ÞÅÒÎÏ×ÉËÏ×" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/óÏÏÂÝÅÎÉÅ/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "/óÏÏÂÝÅÎÉÅ/ëÏÍÕ" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "/óÏÏÂÝÅÎÉÅ/ëÏÐÉÑ" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/óÏÏÂÝÅÎÉÅ/óËÒÙÔÎÏ" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÂÒÁÔÎÙÊ ÁÄÒÅÓ" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "/óÏÏÂÝÅÎÉÅ/çÒÕÐÐÙ ÎÏ×ÏÓÔÅÊ ÄÌÑ ÏÔ×ÅÔÁ" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/óÏÏÂÝÅÎÉÅ/ðÒÉÌÏÖÅÎÉÅ" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "/óÏÏÂÝÅÎÉÅ/ðÏÄÐÉÓÁÔØ" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "/óÏÏÂÝÅÎÉÅ/ûÉÆÒÏ×ÁÔØ" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/éÎÓÔÒÕÍÅÎÔÙ" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/éÎÓÔÒÕÍÅÎÔÙ/ðÏËÁÚÁÔØ ÌÉÎÅÊËÕ" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/éÎÓÔÒÕÍÅÎÔÙ/áÄÒÅÓÎÁÑ ËÎÉÇÁ" - -#: src/compose.c:494 src/compose.c:564 src/compose.c:624 src/procmsg.c:687 -msgid "Can't get text part\n" -msgstr "ïÛÉÂËÁ ××ÏÄÁ ÞÁÓÔÉ ÔÅËÓÔÁ\n" - -#: src/compose.c:556 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: ÆÁÊÌ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ\n" - -#: src/compose.c:568 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"îÁÞÁÌÏ ÐÅÒÅÓÙÌÁÅÍÏÇÏ ÓÏÏÂÝÅÎÉÑ:\n" -"\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "æÁÊÌ %s ÎÅ ÎÁÊÄÅÎ\n" - -#: src/compose.c:1244 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "ïÛÉÂËÁ ÏÐÒÅÄÅÌÅÎÉÑ ÒÁÚÍÅÒÁ ÆÁÊÌÁ %s\n" - -#: src/compose.c:1248 -#, c-format -msgid "File %s is empty\n" -msgstr "æÁÊÌ %s ÐÕÓÔÏÊ\n" - -#: src/compose.c:1269 -#, c-format -msgid "Message: %s" -msgstr "óÏÏÂÝÅÎÉÅ: %s" - -#: src/compose.c:1375 -msgid " [Edited]" -msgstr " [éÚÍÅÎÅÎÏ]" - -#: src/compose.c:1377 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - ðÏÄÇÏÔÏ×ËÁ ÓÏÏÂÝÅÎÉÑ%s" - -#: src/compose.c:1380 -#, c-format -msgid "Compose message%s" -msgstr "ðÏÄÇÏÔÏ×ËÁ ÓÏÏÂÝÅÎÉÑ%s" - -#: src/compose.c:1402 src/compose.c:3596 -msgid "Recipient is not specified." -msgstr "ðÏÌÕÞÁÔÅÌØ ÓÏÏÂÝÅÎÉÑ ÎÅ ÕËÁÚÁÎ." - -#: src/compose.c:1420 -msgid "can't get recipient list." -msgstr "ÏÛÉÂËÁ ÏÐÒÅÄÅÌÅÎÉÑ ÓÐÉÓËÁ ÐÏÌÕÞÁÔÅÌÅÊ." - -#: src/compose.c:1438 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" -"õÞÅÔÎÁÑ ÚÁÐÉÓØ ÄÌÑ ÏÔÐÒÁ×ËÉ ÐÏÞÔÙ ÎÅ ÏÐÒÅÄÅÌÅÎÁ.\n" -"ðÏÖÁÌÕÊÓÔÁ, ×ÙÂÅÒÉÔÅ ÅÅ ÐÅÒÅÄ ÏÔÐÒÁ×ËÏÊ." - -#: src/compose.c:1459 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÓÏÏÂÝÅÎÉÑ ÎÁ %s ." - -#: src/compose.c:1473 -msgid "Queueing" -msgstr "÷ ÏÞÅÒÅÄØ" - -#: src/compose.c:1474 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÓÏÏÂÝÅÎÉÑ.\n" -"ðÏÍÅÓÔÉÔØ ÅÇÏ × ÏÞÅÒÅÄØ?" - -#: src/compose.c:1480 src/compose.c:3608 -msgid "Can't queue the message." -msgstr "ïÛÉÂËÁ ÐÏÓÔÁÎÏ×ËÉ × ÏÞÅÒÅÄØ." - -#: src/compose.c:1483 -msgid "Error occurred while sending the message." -msgstr "ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÓÏÏÂÝÅÎÉÑ." - -#: src/compose.c:1490 src/compose.c:3615 -msgid "Can't save the message to outbox." -msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÓÏÏÂÝÅÎÉÑ × ÐÁÐËÅ ÏÔÐÒÁ×ÌÅÎÎÙÈ." - -#: src/compose.c:1516 src/compose.c:1637 src/compose.c:1723 src/utils.c:1540 -msgid "can't change file mode\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÉÚÍÅÎÉÔØ Ó×ÏÊÓÔ×Á ÆÁÊÌÁ\n" - -#: src/compose.c:1542 -msgid "Can't convert the codeset of the message." -msgstr "îÅ ÕÄÁÌÏÓØ ÐÒÅÏÂÒÁÚÏ×ÁÔØ ËÏÄÉÒÏ×ËÕ ÜÔÏÇÏ ÓÏÏÂÝÅÎÉÑ." - -#: src/compose.c:1551 -msgid "can't write headers\n" -msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ÚÁÇÏÌÏ×ËÏ×\n" - -#: src/compose.c:1669 -msgid "saving sent message...\n" -msgstr "ÓÏÈÒÁÎÅÎÉÅ ÏÔÐÒÁ×ÌÅÎÎÏÇÏ ÓÏÏÂÝÅÎÉÑ...\n" - -#: src/compose.c:1674 -msgid "can't save message\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ\n" - -#: src/compose.c:1680 src/compose.c:1787 -msgid "can't open mark file\n" -msgstr "ÏÛÉÂËÁ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ ÐÏÍÅÔÏË\n" - -#: src/compose.c:1703 -msgid "queueing message...\n" -msgstr "ÐÏÓÔÁÎÏ×ËÁ ÓÏÏÂÝÅÎÉÑ × ÏÞÅÒÅÄØ...\n" - -#: src/compose.c:1778 -msgid "can't queue the message\n" -msgstr "ÏÛÉÂËÁ ÒÁÚÍÅÝÅÎÉÑ × ÏÞÅÒÅÄÉ\n" - -#: src/compose.c:1816 -#, c-format -msgid "Can't open file %s\n" -msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ %s\n" - -#: src/compose.c:2170 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "ÓÏÚÄÁÎ Message-ID: %s\n" - -#: src/compose.c:2244 src/compose.c:3104 -msgid "MIME type" -msgstr "ôÉÐ MIME" - -#: src/compose.c:2244 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "òÁÚÍÅÒ" - -#: src/compose.c:2261 -msgid "Creating compose window...\n" -msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÐÏÄÇÏÔÏ×ËÉ ÓÏÏÂÝÅÎÉÑ...\n" - -#: src/compose.c:2307 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "ïÔ:" - -#: src/compose.c:2730 src/mainwindow.c:1359 src/prefs_account.c:501 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "ïÔÐÒÁ×ÉÔØ" - -#: src/compose.c:2731 -msgid "Send message" -msgstr "ïÔÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ" - -#: src/compose.c:2738 -msgid "Send later" -msgstr "ïÔÐÒÁ×ÉÔØ ÐÏÚÖÅ" - -#: src/compose.c:2739 -msgid "Put into queue folder and send later" -msgstr "ðÏÍÅÓÔÉÔØ × ÏÞÅÒÅÄØ É ÏÔÐÒÁ×ÉÔØ ÐÏÚÖÅ" - -#: src/compose.c:2746 src/folderview.c:738 -msgid "Draft" -msgstr "þÅÒÎÏ×ÉËÉ" - -#: src/compose.c:2747 -msgid "Save to draft folder" -msgstr "óÏÈÒÁÎÉÔØ × ÐÁÐËÅ ÞÅÒÎÏ×ÉËÏ×" - -#: src/compose.c:2756 -msgid "Insert" -msgstr "÷ÓÔÁ×ÉÔØ" - -#: src/compose.c:2757 -msgid "Insert file" -msgstr "÷ÓÔÁ×ÉÔØ ÆÁÊÌ" - -#: src/compose.c:2764 -msgid "Attach" -msgstr "ðÒÉÌÏÖÅÎÉÅ" - -#: src/compose.c:2765 -msgid "Attach file" -msgstr "ðÒÉÌÏÖÉÔØ ÆÁÊÌ" - -#: src/compose.c:2774 src/prefs_common.c:1035 -msgid "Signature" -msgstr "ðÏÄÐÉÓØ" - -#: src/compose.c:2775 -msgid "Insert signature" -msgstr "äÏÂÁ×ÉÔØ ÐÏÄÐÉÓØ" - -#: src/compose.c:2783 -msgid "Editor" -msgstr "òÅÄÁËÔÏÒ" - -#: src/compose.c:2784 -msgid "Edit with external editor" -msgstr "ðÒÁ×ÉÔØ ×ÎÅÛÎÉÍ ÒÅÄÁËÔÏÒÏÍ" - -#: src/compose.c:2792 -msgid "Linewrap" -msgstr "ðÅÒÅÎÏÓ ÓÔÒÏË" - -#: src/compose.c:2793 -msgid "Wrap long lines" -msgstr "ðÅÒÅÎÏÓ ÄÌÉÎÎÙÈ ÓÔÒÏË" - -#: src/compose.c:3000 -msgid "Invalid MIME type." -msgstr "îÅ×ÅÒÎÙÊ ÔÉÐ MIME." - -#: src/compose.c:3018 -msgid "File doesn't exist or is empty." -msgstr "æÁÊÌ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÉÌÉ ÐÕÓÔ." - -#: src/compose.c:3086 -msgid "Property" -msgstr "ó×ÏÊÓÔ×Á" - -#: src/compose.c:3106 -msgid "Encoding" -msgstr "ëÏÄÉÒÏ×ËÁ" - -#: src/compose.c:3129 -msgid "Path" -msgstr "ðÕÔØ" - -#: src/compose.c:3130 -msgid "File name" -msgstr "éÍÑ ÆÁÊÌÁ" - -#: src/compose.c:3277 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "îÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ ×ÙÚÏ×Á ×ÎÅÛÎÅÇÏ ÒÅÄÁËÔÏÒÁ: `%s'\n" - -#: src/compose.c:3303 -#, 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:3316 -#, c-format -msgid "Terminated process group id: %d" -msgstr "úÁ×ÅÒÛÅÎ ÐÒÏÃÅÓÓ ÇÒÕÐÐÙ: %d" - -#: src/compose.c:3317 -#, c-format -msgid "Temporary file: %s" -msgstr "÷ÒÅÍÅÎÎÙÊ ÆÁÊÌ: %s" - -#: src/compose.c:3341 -msgid "Compose: input from monitoring process\n" -msgstr "ðÏÄÇÏÔÏ×ËÁ ÓÏÏÂÝÅÎÉÑ: ××ÏÄ ÉÚ ÐÒÏÃÅÓÓÁ ÓÌÅÖÅÎÉÑ\n" - -#. failed -#: src/compose.c:3374 -msgid "Couldn't exec external editor\n" -msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ ×ÎÅÛÎÉÊ ÒÅÄÁËÔÏÒ\n" - -#: src/compose.c:3378 -msgid "Couldn't write to file\n" -msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ\n" - -#: src/compose.c:3380 -msgid "Pipe read failed\n" -msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÉÚ ËÁÎÁÌÁ\n" - -#: src/compose.c:3637 -msgid "can't remove the old draft message\n" -msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ÓÔÁÒÏÇÏ ÞÅÒÎÏ×ÏÇÏ ÓÏÏÂÝÅÎÉÑ\n" - -#: src/compose.c:3665 src/compose.c:3677 -msgid "Select file" -msgstr "÷ÙÂÏÒ ÆÁÊÌÁ" - -#: src/compose.c:3701 -msgid "Discard message" -msgstr "ïÔËÁÚ ÏÔ ÓÏÏÂÝÅÎÉÑ" - -#: src/compose.c:3702 -msgid "This message has been modified. discard it?" -msgstr "üÔÏ ÓÏÏÂÝÅÎÉÅ ÉÚÍÅÎÅÎÏ. ïÔËÁÚÁÔØÓÑ ÏÔ ÎÅÇÏ?" - -#: src/compose.c:3703 -msgid "Discard" -msgstr "ïÔËÁÚÁÔØÓÑ" - -#: src/compose.c:3703 -msgid "to Draft" -msgstr "÷ ÞÅÒÎÏ×ÉËÉ" - -#: src/export.c:122 -msgid "Export" -msgstr "üËÓÐÏÒÔ" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "õËÁÖÉÔÅ ÜËÓÐÏÒÔÉÒÕÅÍÕÀ ÐÁÐËÕ É ÆÁÊÌ mbox." - -#: src/export.c:154 -msgid "Source dir:" -msgstr "éÓÈÏÄÎÁÑ ÐÁÐËÁ:" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "üËÓÐÏÒÔÉÒÏ×ÁÔØ × ÆÁÊÌ:" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr " ÷ÙÂÏÒ... " - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "÷ÙÂÏÒ ÆÁÊÌÁ ÄÌÑ ÜËÓÐÏÒÔÁ" - -#: src/foldersel.c:131 -msgid "Select folder" -msgstr "÷ÙÂÏÒ ÐÁÐËÉ" - -#: src/folderview.c:203 src/folderview.c:214 -msgid "/Create _new folder..." -msgstr "/óÏÚÄÁÔØ ÎÏ×ÕÀ ÐÁÐËÕ..." - -#: src/folderview.c:204 src/folderview.c:215 -msgid "/_Rename folder..." -msgstr "/ðÅÒÅÉÍÅÎÏ×ÁÔØ ÐÁÐËÕ..." - -#: src/folderview.c:205 src/folderview.c:216 -msgid "/_Delete folder" -msgstr "/õÄÁÌÉÔØ ÐÁÐËÕ" - -#: src/folderview.c:207 -msgid "/Remove _mailbox" -msgstr "/õÄÁÌÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË" - -#: src/folderview.c:218 -msgid "/Remove _IMAP4 server" -msgstr "/õÄÁÌÉÔØ ÓÅÒ×ÅÒ IMAP4" - -#: src/folderview.c:225 -msgid "/_Subscribe to newsgroup..." -msgstr "/ðÏÄÐÉÓËÁ ÎÁ ÇÒÕÐÐÕ ÎÏ×ÏÓÔÅÊ..." - -#: src/folderview.c:227 -msgid "/_Remove newsgroup" -msgstr "/õÄÁÌÉÔØ ÇÒÕÐÐÕ ÎÏ×ÏÓÔÅÊ" - -#: src/folderview.c:229 -msgid "/Remove _news server" -msgstr "/õÄÁÌÉÔØ ÓÅÒ×ÅÒ ÎÏ×ÏÓÔÅÊ" - -#: src/folderview.c:240 -msgid "Folder" -msgstr "ðÁÐËÁ" - -#: src/folderview.c:240 -msgid "New" -msgstr "îÏ×ÙÅ" - -#: src/folderview.c:241 src/prefs_common.c:2173 -msgid "Unread" -msgstr "îÅÐÒÏÞÉÔÁÎÎÙÅ" - -#: src/folderview.c:241 -msgid "#" -msgstr "#" - -#: src/folderview.c:251 -msgid "Creating folder view...\n" -msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÐÁÐÏË...\n" - -#: src/folderview.c:395 -msgid "Setting folder info...\n" -msgstr "õÓÔÁÎÏ×ËÁ ÉÎÆÏÒÍÁÃÉÉ Ï ÐÁÐËÅ...\n" - -#: src/folderview.c:396 -msgid "Setting folder info..." -msgstr "õÓÔÁÎÏ×ËÁ ÉÎÆÏÒÍÁÃÉÉ Ï ÐÁÐËÅ..." - -#: src/folderview.c:539 src/mainwindow.c:2092 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "ðÒÏÓÍÏÔÒ ÐÁÐËÉ %s%c%s ..." - -#: src/folderview.c:544 src/mainwindow.c:2097 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "ðÒÏÓÍÏÔÒ ÐÁÐËÉ %s ..." - -#: src/folderview.c:581 -msgid "Updating all folders..." -msgstr "ïÂÎÏ×ÌÅÎÉÅ ×ÓÅÈ ÐÁÐÏË..." - -#: src/folderview.c:716 src/prefs_account.c:655 -msgid "Inbox" -msgstr "÷ÈÏÄÑÝÉÅ" - -#: src/folderview.c:721 -msgid "Outbox" -msgstr "ïÔÐÒÁ×ÌÅÎÎÙÅ" - -#: src/folderview.c:726 -msgid "Queue" -msgstr "ïÞÅÒÅÄØ" - -#: src/folderview.c:731 -msgid "Trash" -msgstr "ëÏÒÚÉÎÁ" - -#: src/folderview.c:1213 -#, c-format -msgid "Folder %s is selected\n" -msgstr "ðÁÐËÁ %s ×ÙÂÒÁÎÁ\n" - -#: src/folderview.c:1327 src/folderview.c:1390 src/folderview.c:1531 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "óÉÍ×ÏÌ `%c' ÎÅ ÍÏÖÅÔ ×ÈÏÄÉÔØ × ÉÍÑ ÐÁÐËÉ." - -#: src/folderview.c:1335 src/folderview.c:1399 src/folderview.c:1539 -#, c-format -msgid "The folder `%s' already exists." -msgstr "ðÁÐËÁ `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." - -#: src/folderview.c:1343 src/folderview.c:1547 -#, fuzzy, c-format -msgid "Can't create the folder `%s'." -msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ÐÁÐËÉ `%s'\n" - -#: src/folderview.c:1382 -#, c-format -msgid "Input new name for `%s':" -msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÄÌÑ `%s':" - -#: src/folderview.c:1384 -msgid "Rename folder" -msgstr "ðÅÒÅÉÍÅÎÏ×ÁÔØ ÐÁÐËÕ" - -#: src/folderview.c:1444 -#, 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:1447 src/folderview.c:1589 -msgid "Delete folder" -msgstr "õÄÁÌÉÔØ ÐÁÐËÕ" - -#: src/folderview.c:1453 src/folderview.c:1595 -#, fuzzy, c-format -msgid "Can't remove the folder `%s'." -msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ÐÁÐËÉ `%s'\n" - -#: src/folderview.c:1487 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" -"õÄÁÌÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË `%s' ?\n" -"(óÏÏÂÝÅÎÉÑ ÎÅ ÂÕÄÕÔ ÕÄÁÌÅÎÙ Ó ÄÉÓËÁ)" - -#: src/folderview.c:1490 -msgid "Remove folder" -msgstr "õÄÁÌÉÔØ ÐÁÐËÕ" - -#: src/folderview.c:1523 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" - -#: src/folderview.c:1587 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÕÄÁÌÉÔØ ÐÁÐËÕ `%s'?" - -#: src/folderview.c:1628 -#, c-format -msgid "Really delete IMAP4 server `%s'?" -msgstr "õÄÁÌÉÔØ ÓÅÒ×ÅÒ IMAP4 `%s'?" - -#: src/folderview.c:1630 -msgid "Delete IMAP4 server" -msgstr "õÄÁÌÉÔØ ÓÅÒ×ÅÒ IMAP4" - -#: src/folderview.c:1671 -msgid "Subscribe newsgroup" -msgstr "ðÏÄÐÉÓËÁ ÎÁ ÇÒÕÐÐÕ ÎÏ×ÏÓÔÅÊ" - -#: src/folderview.c:1672 -msgid "Input subscribing newsgroup:" -msgstr "÷ÙÂÅÒÉÔÅ ÇÒÕÐÐÕ ÄÌÑ ÐÏÄÐÉÓËÉ:" - -#: src/folderview.c:1681 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "çÒÕÐÐÁ ÎÏ×ÏÓÔÅÊ `%s' ÕÖÅ ÅÓÔØ × ÓÐÉÓËÅ." - -#: src/folderview.c:1727 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "õÄÁÌÉÔØ ÇÒÕÐÐÕ ÎÏ×ÏÓÔÅÊ `%s' " - -#: src/folderview.c:1729 -msgid "Delete newsgroup" -msgstr "õÄÁÌÅÎÉÅ ÇÒÕÐÐÙ ÎÏ×ÏÓÔÅÊ" - -#: src/folderview.c:1760 -#, c-format -msgid "Really delete news server `%s'?" -msgstr "õÄÁÌÉÔØ ÓÅÒ×ÅÒ ÎÏ×ÏÓÔÅÊ `%s'?" - -#: src/folderview.c:1762 -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:174 src/summaryview.c:1392 -msgid "(No From)" -msgstr "(âÅÚ ÏÔÐÒÁ×ÉÔÅÌÑ)" - -#: src/headerview.c:189 src/summaryview.c:1408 -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:204 -#, c-format -msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "óÏÅÄÉÎÅÎÉÅ IMAP4 Ó %s:%d ÐÒÅÒ×ÁÎÏ. ÷ÏÓÓÔÁÎÏ×ÌÅÎÉÅ ÓÏÅÄÉÎÅÎÉÑ...\n" - -#: src/imap.c:230 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "ÕÓÔÁÎÏ×ÌÅÎÉÅ ÓÏÅÄÉÎÅÎÉÑ IMAP4 Ó %s:%d ...\n" - -#: src/imap.c:385 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "ÓÏÏÂÝÅÎÉÅ %d ÕÖÅ ËÅÛÉÒÏ×ÁÎÏ.\n" - -#: src/imap.c:395 -#, c-format -msgid "getting message %d...\n" -msgstr "ÐÏÌÕÞÅÎÉÅ ÓÏÏÂÝÅÎÉÑ %d...\n" - -#: src/imap.c:401 src/procmsg.c:587 -#, c-format -msgid "can't fetch message %d\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÓÏÏÂÝÅÎÉÅ %d\n" - -#: src/imap.c:430 -#, fuzzy, c-format -msgid "can't append message %s\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ\n" - -#: src/imap.c:459 src/imap.c:516 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "ÉÓÈÏÄÎÁÑ ÐÁÐËÁ ÓÏ×ÐÁÄÁÅÔ Ó ÐÁÐËÏÊ ÎÁÚÎÁÞÅÎÉÑ.\n" - -#: src/imap.c:469 src/imap.c:521 src/mh.c:201 src/mh.c:267 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "ðÅÒÅÍÅÝÅÎÉÅ ÓÏÏÂÝÅÎÉÑ %s%c%d × %s ...\n" - -#: src/imap.c:473 src/imap.c:525 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "ëÏÐÉÒÏ×ÁÎÉÅ ÓÏÏÂÝÅÎÉÑ %s%c%d × %s ...\n" - -#: src/imap.c:593 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÆÌÁÇ ÕÄÁÌÅÎÉÑ: %d\n" - -#: src/imap.c:600 src/imap.c:639 -msgid "can't expunge\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÞÉÓÔÉÔØ ÐÁÐËÕ ÏÔ ÕÄÁÌÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ\n" - -#: src/imap.c:632 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÆÌÁÇ ÕÄÁÌÅÎÉÑ: 1:%d\n" - -#: src/imap.c:744 -msgid "can't create mailbox\n" -msgstr "ÎÅ ÕÄÁÅÔÓÑ ÓÏÚÄÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË\n" - -#: src/imap.c:781 -msgid "can't delete mailbox\n" -msgstr "ÎÅ ÕÄÁÅÔÓÑ ÕÄÁÌÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË\n" - -#: src/imap.c:807 -msgid "can't get envelope\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÄÁÎÎÙÅ ËÏÎ×ÅÒÔÁ\n" - -#: src/imap.c:813 -msgid "error occurred while getting envelope.\n" -msgstr "ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÄÁÎÎÙÈ ËÏÎ×ÅÒÔÁ.\n" - -#: src/imap.c:821 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "ÏÛÉÂËÁ ÐÒÉ ÒÁÚÂÏÒÅ ÄÁÎÎÙÈ ËÏÎ×ÅÒÔÁ: %s\n" - -#: src/imap.c:849 -#, fuzzy, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "\tõÎÉÞÔÏÖÅÎÉÅ ×ÓÅÈ ÓÏÏÂÝÅÎÉÊ × ËÅÛÅ..." - -#: src/imap.c:882 -#, fuzzy -msgid "Deleting all cached messages... " -msgstr "\tõÎÉÞÔÏÖÅÎÉÅ ×ÓÅÈ ÓÏÏÂÝÅÎÉÊ × ËÅÛÅ..." - -#: src/imap.c:896 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÅÄÉÎÉÔØÓÑ Ó ÓÅÒ×ÅÒÏÍ IMAP4: %s:%d\n" - -#: src/imap.c:929 -#, fuzzy -msgid "can't get namespace\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÄÁÎÎÙÅ ËÏÎ×ÅÒÔÁ\n" - -#: src/imap.c:1346 -#, c-format -msgid "can't select folder: %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÂÒÁÔØ ÐÁÐËÕ: %s\n" - -#: src/imap.c:1401 -#, fuzzy, c-format -msgid "can't get the next uid of folder: %s\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÂÒÁÔØ ÐÁÐËÕ: %s\n" - -#: src/imap.c:1423 -msgid "IMAP4 login failed.\n" -msgstr "ïÛÉÂËÁ Á×ÔÏÒÉÚÁÃÉÉ IMAP4.\n" - -#: src/imap.c:1636 -#, fuzzy, c-format -msgid "can't append %s to %s\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÓËÏÐÉÒÏ×ÁÔØ %d × %s\n" - -#: src/imap.c:1656 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÓËÏÐÉÒÏ×ÁÔØ %d × %s\n" - -#: src/imap.c:1681 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "ÏÛÉÂËÁ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ ËÏÍÁÎÄÙ IMAP: STORE %d:%d %s\n" - -#: src/imap.c:1695 -msgid "error while imap command: EXPUNGE\n" -msgstr "ÏÛÉÂËÁ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ ËÏÍÁÎÄÙ IMAP: EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "éÍÐÏÒÔ" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "õËÁÖÉÔÅ ÆÁÊÌ mbox É ÐÁÐËÕ ÎÁÚÎÁÞÅÎÉÑ." - -#: src/import.c:158 -msgid "Importing file:" -msgstr "éÍÐÏÒÔ ÆÁÊÌÁ:" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "ëÁÔÁÌÏÇ ÎÁÚÎÁÞÅÎÉÑ:" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "÷ÙÂÏÒ ÉÍÐÏÒÔÉÒÕÅÍÏÇÏ ÆÁÊÌÁ" - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "ðÏÌÕÞÅÎÉÅ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ" - -#: src/inc.c:384 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "÷×ÅÄÉÔÅ ÐÁÒÏÌØ ÄÌÑ %s ÎÁ %s:" - -#: src/inc.c:388 src/news.c:131 -msgid "Input password" -msgstr "÷×ÏÄ ÐÁÒÏÌÑ" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "ðÏÌÕÞÅÎÉÅ" - -#: src/inc.c:412 -msgid "Done" -msgstr "çÏÔÏ×Ï" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "á×ÔÏÒÉÚÁÃÉÑ ÄÌÑ %s ÎÁ %s ÎÅ ÕÄÁÌÁÓØ" - -#: src/inc.c:487 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "ÐÏÌÕÞÅÎÉÅ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ ÄÌÑ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ %s...\n" - -#: src/inc.c:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s: ðÏÌÕÞÅÎÉÅ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ" - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "óÏÅÄÉÎÅÎÉÅ Ó ÓÅÒ×ÅÒÏÍ POP3: %s ..." - -#: src/inc.c:527 src/inc.c:660 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÅÄÉÎÅÎÉÅ Ó ÓÅÒ×ÅÒÏÍ POP3: %s:%d\n" - -#: src/inc.c:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÅÄÉÎÉÔØÓÑ Ó ÓÅÒ×ÅÒÏÍ POP3: %s:%d" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "ðÏÌÕÞÅÎÉÅ ÓÏÏÂÝÅÎÉÑ (%d / %d) (%d / %d bytes)" - -#: src/inc.c:719 -msgid "Authorizing..." -msgstr "á×ÔÏÒÉÚÁÃÉÑ..." - -#: src/inc.c:724 -msgid "Getting the number of new messages (STAT)..." -msgstr "ðÏÌÕÞÅÎÉÅ ËÏÌÉÞÅÓÔ×Á ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ (STAT)..." - -#: src/inc.c:729 -msgid "Getting the number of new messages (LAST)..." -msgstr "ðÏÌÕÞÅÎÉÅ ËÏÌÉÞÅÓÔ×Á ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ (LAST)..." - -#: src/inc.c:734 -msgid "Getting the number of new messages (UIDL)..." -msgstr "ðÏÌÕÞÅÎÉÅ ËÏÌÉÞÅÓÔ×Á ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ (UIDL)..." - -#: src/inc.c:739 -msgid "Getting the size of messages (LIST)..." -msgstr "ðÏÌÕÞÅÎÉÅ ÒÁÚÍÅÒÁ ÓÏÏÂÝÅÎÉÊ (LIST)..." - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "õÄÁÌÅÎÉÅ ÓÏÏÂÝÅÎÉÑ" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "÷ÙÈÏÄ" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "ÓÏÏÂÝÅÎÉÅ ÎÅ ÂÕÄÅÔ ÐÏÌÕÞÅÎÏ\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÂÒÁÂÏÔËÅ ÓÏÏÂÝÅÎÉÊ." - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "îÅ ÏÓÔÁÌÏÓØ ÍÅÓÔÁ ÎÁ ÄÉÓËÅ." - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "ÎÅÔ ÓÏÏÂÝÅÎÉÊ × ÌÏËÁÌØÎÏÍ ÑÝÉËÅ.\n" - -#: src/inc.c:881 -#, 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:108 -#, c-format -msgid "" -"File `%s' already exists.\n" -"Can't create folder." -msgstr "" -"æÁÊÌ `%s' ÓÕÝÅÓÔ×ÕÅÔ.\n" -"îÅÌØÚÑ ÓÏÚÄÁÔØ ÐÁÐËÕ." - -#: src/main.c:149 -msgid "g_thread is not supported by glib.\n" -msgstr "g_thread ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ × glib.\n" - -#: src/main.c:219 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" -"ïÔÓÕÔÓÔ×ÕÅÔ ÐÒÁ×ÉÌØÎÏ ÕÓÔÁÎÏ×ÌÅÎÎÙÊ GnuPG.\n" -"ðÏÄÄÅÒÖËÁ OpenPGP ÏÔËÌÀÞÅÎÁ." - -#: src/main.c:300 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ðáòáíåôò]...\n" - -#: src/main.c:303 -msgid " --compose [address] open composition window" -msgstr " --compose [ÁÄÒÅÓ] ÏÔËÒÙÔØ ÏËÎÏ ÐÏÄÇÏÔÏ×ËÉ ÓÏÏÂÝÅÎÉÑ" - -#: src/main.c:304 -msgid " --receive receive new messages" -msgstr " --receive ÐÏÌÕÞÉÔØ ÎÏ×ÙÅ ÓÏÏÂÝÅÎÉÑ" - -#: src/main.c:305 -msgid " --receive-all receive new messages of all accounts" -msgstr "" -" --receive-all ÐÏÌÕÞÉÔØ ÎÏ×ÙÅ ÓÏÏÂÝÅÎÉÑ ÓÏ ×ÓÅÈ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" - -#: src/main.c:306 -msgid " --debug debug mode" -msgstr " --debug ÒÅÖÉÍ ÏÔÌÁÄËÉ" - -#: src/main.c:307 -msgid " --help display this help and exit" -msgstr " --help ÏÔÏÂÒÁÚÉÔØ ÜÔÏ ÏÐÉÓÁÎÉÅ É ×ÙÊÔÉ" - -#: src/main.c:308 -msgid " --version output version information and exit" -msgstr " --version ×Ù×ÅÓÔÉ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ" - -#: src/main.c:333 -msgid "Composing message exists. Really quit?" -msgstr "åÓÔØ ÒÅÄÁËÔÉÒÕÅÍÏÅ ÓÏÏÂÝÅÎÉÅ. ÷ÙÈÏÄÉÔØ?" - -#: src/main.c:340 -msgid "Queued messages" -msgstr "óÏÏÂÝÅÎÉÑ × ÏÞÅÒÅÄÉ" - -#: src/main.c:341 -msgid "Some unsent messages are queued. Exit now?" -msgstr "÷ ÏÞÅÒÅÄÉ ÅÓÔØ ÎÅÐÏÓÌÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ. ÷ÙÈÏÄÉÔØ?" - -#. remote command mode -#: src/main.c:412 -msgid "another Sylpheed is already running.\n" -msgstr "ÄÒÕÇÁÑ ËÏÐÉÑ Sylpheed ÕÖÅ ÚÁÐÕÝÅÎÁ.\n" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "/æÁÊÌ/äÏÂÁ×ÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË..." - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/æÁÊÌ/ïÂÎÏ×ÉÔØ ÄÅÒÅ×Ï ÐÁÐÏË" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "/æÁÊÌ/ðÁÐËÁ" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/æÁÊÌ/ðÁÐËÁ/óÏÚÄÁÔØ ÎÏ×ÕÀ ÐÁÐËÕ..." - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/æÁÊÌ/ðÁÐËÁ/ðÅÒÅÉÍÅÎÏ×ÁÔØ ÐÁÐËÕ..." - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "/æÁÊÌ/ðÁÐËÁ/õÄÁÌÉÔØ ÐÁÐËÕ" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/æÁÊÌ/éÍÐÏÒÔ mbox-ÆÁÊÌÁ..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "/æÁÊÌ/üËÓÐÏÒÔ × mbox-ÆÁÊÌ..." - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "/æÁÊÌ/ïÞÉÓÔÉÔØ ËÏÒÚÉÎÕ" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/æÁÊÌ/óÏÈÒÁÎÉÔØ ËÁË..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/æÁÊÌ/ðÅÞÁÔØ..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/æÁÊÌ/÷ÙÈÏÄ" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/ðÒÁ×ËÁ/ðÏÉÓË" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/÷ÉÄ" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/÷ÉÄ/äÅÒÅ×Ï ÐÁÐÏË" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/÷ÉÄ/ïÂÌÁÓÔØ ÐÒÏÓÍÏÔÒÁ" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/ðÉËÔÏÇÒÁÍÍÙ É ÔÅËÓÔ" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/ðÉËÔÏÇÒÁÍÍÙ" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/ôÅËÓÔ" - -#: src/mainwindow.c:364 -#, fuzzy -msgid "/_View/_Toolbar/_None" -msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/ðÉËÔÏÇÒÁÍÍÙ" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/÷ÉÄ/óÔÒÏËÁ ÓÏÓÔÏÑÎÉÑ" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/÷ÉÄ/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/÷ÉÄ/ïÔÄÅÌØÎÏÅ ÄÅÒÅ×Ï ÐÁÐÏË" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/÷ÉÄ/ïÔÄÅÌØÎÁÑ ÏÂÌÁÓÔØ ÐÒÏÓÍÏÔÒÁ" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/á×ÔÏÏÐÒÅÄÅÌÅÎÉÅ" - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/7-ÂÉÔÎÙÊ ascii (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/úÁÐÁÄÎÏÅ×ÒÏÐÅÊÓËÁÑ (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ãÅÎÔÒÁÌØÎÏÅ×ÒÏÐÅÊÓËÁÑ (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/âÁÌÔÉÊÓËÁÑ (ISO-8859-13)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/âÁÌÔÉÊÓËÁÑ (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/çÒÅÞÅÓËÁÑ (ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ôÕÒÅÃËÁÑ (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÉÒÉÌÌÉÞÅÓËÁÑ (ISO-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/òÕÓÓËÁÑ (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÉÒÉÌÌÉÞÅÓËÁÑ _Win (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ñÐÏÎÓËÁÑ (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ñÐÏÎÓËÁÑ (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ñÐÏÎÓËÁÑ (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ñÐÏÎÓËÁÑ (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/õÐÒÏÝÅÎÎÁÑ ËÉÔÁÊÓËÁÑ (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ôÒÁÄÉÃÉÏÎÎÁÑ ËÉÔÁÊÓËÁÑ (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ôÒÁÄÉÃÉÏÎÎÁÑ ËÉÔÁÊÓËÁÑ (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÉÔÁÊÓËÁÑ (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÏÒÅÊÓËÁÑ (EUC-_KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÏÒÅÊÓËÁÑ (ISO-2022-KR)" - -#: src/mainwindow.c:445 -#, fuzzy -msgid "/_Message/Get new ma_il" -msgstr "/óÏÏÂÝÅÎÉÅ/ðÏÌÕÞÉÔØ ÎÏ×ÙÅ ÓÏÏÂÝÅÎÉÑ" - -#: src/mainwindow.c:446 -#, fuzzy -msgid "/_Message/Get from _all accounts" -msgstr "/óÏÏÂÝÅÎÉÅ/ðÏÌÕÞÉÔØ ÓÏ ×ÓÅÈ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ ÉÚ ÏÞÅÒÅÄÉ" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/óÏÏÂÝÅÎÉÅ/îÁÐÉÓÁÔØ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔ×ÅÔÉÔØ" - -#: src/mainwindow.c:454 -#, fuzzy -msgid "/_Message/Repl_y to sender" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÂÒÁÔÎÙÊ ÁÄÒÅÓ" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔ×ÅÔÉÔØ ×ÓÅÍ" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/óÏÏÂÝÅÎÉÅ/ðÅÒÅÓÌÁÔØ" - -#: src/mainwindow.c:457 -#, fuzzy -msgid "/_Message/Forward as a_ttachment" -msgstr "/óÏÏÂÝÅÎÉÅ/ðÅÒÅÓÌÁÔØ ËÁË ÐÒÉÌÏÖÅÎÉÅ" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/óÏÏÂÝÅÎÉÅ/ðÅÒÅÍÅÓÔÉÔØ..." - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "/óÏÏÂÝÅÎÉÅ/ëÏÐÉÒÏ×ÁÔØ..." - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/óÏÏÂÝÅÎÉÅ/õÄÁÌÉÔØ" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÍÅÔÉÔØ" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÍÅÔÉÔØ/ïÔÍÅÔÉÔØ" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÍÅÔÉÔØ/óÎÑÔØ ÏÔÍÅÔËÕ" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÍÅÔÉÔØ/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÍÅÔÉÔØ/ðÏÍÅÔÉÔØ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÏÅ" - -#: src/mainwindow.c:468 -#, fuzzy -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÍÅÔÉÔØ/ðÏÍÅÔÉÔØ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÏÅ" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/óÏÏÂÝÅÎÉÅ/ïÔËÒÙÔØ × ÎÏ×ÏÍ ÏËÎÅ" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "/óÏÏÂÝÅÎÉÅ/ðÏËÁÚÁÔØ ÉÓÈÏÄÎÙÊ ÔÅËÓÔ" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/óÏÏÂÝÅÎÉÅ/ðÏËÁÚÁÔØ ×ÓÅ ÚÁÇÏÌÏ×ËÉ" - -#: src/mainwindow.c:474 -#, fuzzy -msgid "/_Message/Re-_edit" -msgstr "/óÏÏÂÝÅÎÉÅ/éÚÍÅÎÉÔØ" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/õÄÁÌÉÔØ ÐÏ×ÔÏÒÑÀÝÉÅÓÑ ÓÏÏÂÝÅÎÉÑ" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/ïÔÆÉÌØÔÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/÷ÙÐÏÌÎÉÔØ" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/ïÂÎÏ×ÉÔØ" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/ðÒÅÄÙÄÕÝÅÅ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÌÅÄÕÀÝÅÅ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÌÅÄÕÀÝÅÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/ðÅÒÅÊÔÉ Ë ÄÒÕÇÏÊ ÐÁÐËÅ" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÎÏÍÅÒÕ" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÒÁÚÍÅÒÕ" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÄÁÔÅ" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÏÔÐÒÁ×ÉÔÅÌÀ" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÔÅÍÅ" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/çÒÕÐÐÉÒÏ×ËÁ ÐÏ ÔÅÍÅ" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/çÒÕÐÐÉÒÏ×ËÁ ÐÏ ÄÉÓËÕÓÓÉÑÍ" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/âÅÚ ÇÒÕÐÐÉÒÏ×ËÉ ÐÏ ÄÉÓËÕÓÓÉÑÍ" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/õÓÔÁÎÏ×ÉÔØ ×ÉÄÉÍÙÅ ÐÏÌÑ..." - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/éÎÓÔÒÕÍÅÎÔÙ/ïËÎÏ ÖÕÒÎÁÌÁ" - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/îÁÓÔÒÏÊËÁ" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/îÁÓÔÒÏÊËÁ/ïÂÝÉÅ ÎÁÓÔÒÏÊËÉ..." - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "/îÁÓÔÒÏÊËÁ/îÁÓÔÒÏÊËÁ ÆÉÌØÔÒÏ×..." - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/îÁÓÔÒÏÊËÁ/îÁÓÔÒÏÊËÁ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ... " - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/îÁÓÔÒÏÊËÁ/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/îÁÓÔÒÏÊËÁ/óÏÚÄÁÔØ ÎÏ×ÕÀ ÕÞÅÔÎÕÀ ÚÁÐÉÓØ..." - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/îÁÓÔÒÏÊËÁ/òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ..." - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/îÁÓÔÒÏÊËÁ/éÚÍÅÎÉÔØ ÔÅËÕÝÕÀ ÕÞÅÔÎÕÀ ÚÁÐÉÓØ" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/óÐÒÁ×ËÁ/òÕËÏ×ÏÄÓÔ×Ï" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/óÐÒÁ×ËÁ/òÕËÏ×ÏÄÓÔ×Ï/áÎÇÌÉÊÓËÏÅ" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/óÐÒÁ×ËÁ/òÕËÏ×ÏÄÓÔ×Ï/ñÐÏÎÓËÏÅ" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/óÐÒÁ×ËÁ/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "óÏÚÄÁÎÉÅ ÇÌÁ×ÎÏÇÏ ÏËÎÁ...\n" - -#: src/mainwindow.c:673 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "çÌÁ×ÎÏÅ ÏËÎÏ: ÐÒÏÂÌÅÍÁ Ó Ã×ÅÔÏÍ %d\n" - -#: src/mainwindow.c:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "âÅÚ ÎÁÚ×ÁÎÉÑ" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "ÎÅÔ" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "ôÅËÕÝÁÑ ÕÞÅÔÎÁÑ ÚÁÐÉÓØ: %s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "ÐÏÚÉÃÉÑ ÏËÎÁ: x = %d, y = %d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "ïÞÉÓÔËÁ ËÏÒÚÉÎÙ" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "õÄÁÌÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ ÉÚ ËÏÒÚÉÎÙ?" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "äÏÂÁ×ÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË" - -#: src/mainwindow.c:978 -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:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË" - -#: src/mainwindow.c:995 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:1141 -msgid "Setting widgets..." -msgstr "îÁÓÔÒÏÊËÁ ÏÆÏÒÍÌÅÎÉÑ..." - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "ðÒÉÎÑÔØ" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "ðÏÌÕÞÉÔØ ÎÏ×ÙÅ ÓÏÏÂÝÅÎÉÑ" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "ðÒÉÎÑÔØ ×ÓÅ" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "ðÏÌÕÞÉÔØ ÓÏÏÂÝÅÎÉÑ ÓÏ ×ÓÅÈ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "ðÏÓÌÁÔØ ÓÏÏÂÝÅÎÉÑ ÉÚ ÏÞÅÒÅÄÉ" - -#: src/mainwindow.c:1370 src/prefs_account.c:503 src/prefs_common.c:638 -msgid "Compose" -msgstr "îÁÐÉÓÁÔØ" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "îÁÐÉÓÁÔØ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "ïÔ×ÅÔÉÔØ" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "ïÔ×ÅÔÉÔØ ÎÁ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "ïÔ×ÅÔÉÔØ ×ÓÅÍ" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "ïÔ×ÅÔÉÔØ ×ÓÅÍ" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "ðÅÒÅÓÌÁÔØ" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "ðÅÒÅÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "õÄÁÌÉÔØ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "÷ÙÐÏÌÎÉÔØ" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "÷ÙÐÏÌÎÉÔØ ÏÔÍÅÞÅÎÎÙÊ ÐÒÏÃÅÓÓ" - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "äÁÌÅÅ" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "óÌÅÄÕÀÝÅÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "ó×ÏÊÓÔ×Á" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "ïÂÝÉÅ ÎÁÓÔÒÏÊËÉ" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "õÞÅÔÎÁÑ ÚÁÐÉÓØ" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "îÁÓÔÒÏÊËÁ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit" -msgstr "÷ÙÈÏÄ" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit this program?" -msgstr "÷ÙÊÔÉ ÉÚ ÐÒÏÇÒÁÍÍÙ?" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "ïÛÉÂËÁ ÏÔÐÒÁ×ËÉ ÓÏÏÂÝÅÎÉÊ ÉÚ ÏÞÅÒÅÄÉ." - -#: src/mainwindow.c:1924 -#, c-format -msgid "forced charset: %s\n" -msgstr "ÕÓÔÁÎÏ×ÌÅÎÁ ËÏÄÉÒÏ×ËÁ: %s\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "ðÏÌÕÞÅÎÉÅ ÓÏÏÂÝÅÎÉÊ ÉÚ %s × %s...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ mbox-ÆÁÊÌÁ.\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÑÝÉËÁ: %s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "ÉÓÐÏÒÞÅÎÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "ÏÛÉÂËÁ ÐÒÉ ÏÔËÒÙÔÉÉ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ \n" - -#: src/mbox.c:159 -#, c-format -msgid "" -"unescaped From found:\n" -"%s" -msgstr "" -"ÎÁÊÄÅÎÁ ÎÅÚÁÝÉÝÅÎÎÁÑ ÓÔÒÏËÁ From:\n" -"%s" - -#: src/mbox.c:194 -msgid "can't write to temporary file\n" -msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ×Ï ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "ÎÁÊÄÅÎÏ %d ÓÏÏÂÝÅÎÉÊ.\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ lock-ÆÁÊÌÁ %s\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "ÉÓÐÏÌØÚÕÊÔÅ 'flock' ×ÍÅÓÔÏ 'file', ÅÓÌÉ ×ÏÚÍÏÖÎÏ.\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ %s\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "ÐÏÞÔÏ×ÙÊ ÑÝÉË ÚÁÎÑÔ ÄÒÕÇÉÍ ÐÒÏÃÅÓÓÏÍ, ÏÖÉÄÁÎÉÅ...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÂÌÏËÉÒÏ×ËÕ %s\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "ÎÅ×ÅÒÎÙÊ ÔÉÐ ÂÌÏËÉÒÏ×ËÉ\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÎÑÔØ ÂÌÏËÉÒÏ×ËÕ %s\n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÂÒÅÚÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÄÏ ÎÕÌÑ.\n" - -#: src/mbox.c:383 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "üËÓÐÏÒÔ ÓÏÏÂÝÅÎÉÊ ÉÚ %s × %s...\n" - -#: src/messageview.c:67 -msgid "Creating message view...\n" -msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÓÏÏÂÝÅÎÉÑ...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÓËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ %s × %s\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÐÏÍÅÔÏË.\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "%s ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "ðÏÓÌÅÄÎÉÊ ÎÏÍÅÒ × ËÁÔÁÌÏÇÅ %s = %d\n" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "\tðÏÉÓË ÎÅËÅÛÉÒÏ×ÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ... " - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "ÎÁÊÄÅÎÏ ÎÅËÅÛÉÒÏ×ÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ: %d.\n" - -#: src/mh.c:813 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tóÏÒÔÉÒÏ×ËÁ ÎÅËÅÛÉÒÏ×ÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ ÐÏ ÎÏÍÅÒÁÍ... " - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/ïÔËÒÙÔØ" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "" - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/ðÏËÁÚÁÔØ ËÁË ÔÅËÓÔ" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "/óÏÈÒÁÎÉÔØ ËÁË..." - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/ðÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "ôÉÐ MIME" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ MIME...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "÷ÙÂÅÒÉÔÅ \"ðÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ\" ÄÌÑ ÐÒÏ×ÅÒËÉ" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "ïÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÏÄÎÏÇÏ ÉÚ ËÏÍÐÏÎÅÎÔÏ× ÓÏÏÂÝÅÎÉÑ." - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "ïÛÉÂËÁ ÐÒÉ ÓÏÈÒÁÎÅÎÉÉ ÏÄÎÏÇÏ ÉÚ ËÏÍÐÏÎÅÎÔÏ× ÓÏÏÂÝÅÎÉÑ." - -#: src/mimeview.c:708 src/summaryview.c:2018 -msgid "Save as" -msgstr "óÏÈÒÁÎÉÔØ ËÁË" - -#: src/mimeview.c:714 src/summaryview.c:2023 -msgid "Overwrite" -msgstr "ðÅÒÅÐÉÓÁÔØ" - -#: src/mimeview.c:715 src/summaryview.c:2024 -msgid "Overwrite existing file?" -msgstr "ðÅÒÅÐÉÓÁÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÆÁÊÌ?" - -#: src/mimeview.c:769 -#, fuzzy -msgid "Open with" -msgstr "ðÒÉ ×ÙÈÏÄÅ" - -#: src/mimeview.c:770 -#, fuzzy, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"÷×ÅÄÉÔÅ ËÏÍÁÎÄÕ ÐÅÞÁÔÉ:\n" -"(`%s' ÂÕÄÅÔ ÚÁÍÅÎÅÎÏ ÎÁ ÉÍÑ ÆÁÊÌÁ)" - -#: src/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "îÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ ÐÒÏÓÍÏÔÒÁ MIME: `%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "ÓÏÅÄÉÎÅÎÉÅ NNTP Ó %s:%d ...\n" - -#: src/news.c:176 -#, c-format -msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "ðÏÔÅÒÑÎÏ ÓÏÅÄÉÎÅÎÉÅ NNTP Ó %s:%d. ðÏÐÙÔËÁ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ...\n" - -#: src/news.c:245 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "ÓÔÁÔØÑ %d ÕÖÅ × ËÅÛÅ.\n" - -#: src/news.c:257 -#, fuzzy, c-format -msgid "can't select group %s\n" -msgstr "ÏÛÉÂËÁ ÕÓÔÁÎÏ×ËÉ ÇÒÕÐÐÙ: %s\n" - -#: src/news.c:262 -#, c-format -msgid "getting article %d...\n" -msgstr "ÐÏÌÕÞÅÎÉÅ ÓÔÁÔØÉ %d...\n" - -#: src/news.c:267 -#, c-format -msgid "can't read article %d\n" -msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ ÓÔÁÔØÉ %d\n" - -#: src/news.c:299 -msgid "can't post article.\n" -msgstr "ÏÛÉÂËÁ ÏÔÐÒÁ×ËÉ ÓÔÁÔØÉ.\n" - -#: src/news.c:323 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "ÏÛÉÂËÁ ÐÏÌÕÞÅÎÉÑ ÓÔÁÔØÉ %d\n" - -#: src/news.c:393 -#, c-format -msgid "can't set group: %s\n" -msgstr "ÏÛÉÂËÁ ÕÓÔÁÎÏ×ËÉ ÇÒÕÐÐÙ: %s\n" - -#: src/news.c:400 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "ÎÅ×ÅÒÎÙÊ ÄÉÁÐÁÚÏÎ ÓÔÁÔÅÊ: %d - %d\n" - -#: src/news.c:409 -msgid "no new articles.\n" -msgstr "ÎÏ×ÙÈ ÓÔÁÔÅÊ ÎÅÔ.\n" - -#: src/news.c:422 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "ÚÁÇÒÕÚËÁ xover %d - %d × %s...\n" - -#: src/news.c:425 -msgid "can't get xover\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ xover\n" - -#: src/news.c:431 -msgid "error occurred while getting xover.\n" -msgstr "ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ xover.\n" - -#: src/news.c:439 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "ÎÅ×ÅÒÎÁÑ ÓÔÒÏËÁ xover: %s\n" - -#: src/news.c:456 src/news.c:481 -#, fuzzy -msgid "can't get xhdr\n" -msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ xover\n" - -#: src/news.c:464 src/news.c:489 -#, fuzzy -msgid "error occurred while getting xhdr.\n" -msgstr "ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ xover.\n" - -#: src/news.c:613 -#, fuzzy, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "\tõÄÁÌÅÎÉÅ ×ÓÅÈ ËÅÛÉÒÏ×ÁÎÎÙÈ ÓÔÁÔÅÊ... " - -#: src/news.c:642 -msgid "\tDeleting all cached articles... " -msgstr "\tõÄÁÌÅÎÉÅ ×ÓÅÈ ËÅÛÉÒÏ×ÁÎÎÙÈ ÓÔÁÔÅÊ... " - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "ïÛÉÂËÁ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ NNTP: %s:%d\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "ÏÛÉÂËÁ ÐÒÏÔÏËÏÌÁ: %s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "ÏÛÉÂËÁ ÐÒÏÔÏËÏÌÁ\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÓÔÁÔØÉ\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "ðÁÒÏÌØÎÁÑ ÆÒÁÚÁ" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "[ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ]" - -#: src/passphrase.c:244 -#, 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:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" -"îÅ×ÅÒÎÏ! ðÏ×ÔÏÒÉÔÅ...\n" -"\n" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "ÏÛÉÂËÁ Á×ÔÏÒÉÚÁÃÉÉ\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "÷ ÓÏÏÂÝÅÎÉÉ ÓÅÒ×ÅÒÁ ÎÅ ÎÁÊÄÅÎÁ ÔÒÅÂÕÅÍÁÑ ÍÅÔËÁ ×ÒÅÍÅÎÉ APOP\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "ïÛÉÂËÁ ÓÉÎÔÁËÓÉÓÁ ÍÅÔËÉ ×ÒÅÍÅÎÉ × ÓÏÏÂÝÅÎÉÉ ÓÅÒ×ÅÒÁ\n" - -#: src/pop.c:171 src/pop.c:212 -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:364 -#: src/prefs_account.c:378 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -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:409 -msgid "Opening account preferences window...\n" -msgstr "ïÔËÒÙÔÉÅ ÏËÎÁ ÎÁÓÔÒÏÅË ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ...\n" - -#: src/prefs_account.c:436 -#, c-format -msgid "Account%d" -msgstr "õÞÅÔÎÁÑ ÚÁÐÉÓØ %d" - -#: src/prefs_account.c:449 -msgid "Preferences for new account" -msgstr "îÁÓÔÒÏÊËÉ ÎÏ×ÏÊ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" - -#: src/prefs_account.c:454 -msgid "Preferences for each account" -msgstr "îÁÓÔÒÏÊËÉ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" - -#: src/prefs_account.c:477 -msgid "Creating account preferences window...\n" -msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÎÁÓÔÒÏÅË ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ...\n" - -#: src/prefs_account.c:497 -msgid "Basic" -msgstr "ïÓÎÏ×ÎÙÅ" - -#: src/prefs_account.c:499 src/prefs_common.c:634 -msgid "Receive" -msgstr "ðÒÉÅÍ" - -#: src/prefs_account.c:506 src/prefs_common.c:645 -msgid "Privacy" -msgstr "úÁÝÉÔÁ" - -#: src/prefs_account.c:509 -msgid "Advanced" -msgstr "äÏÐÏÌÎÉÔÅÌØÎÙÅ" - -#: src/prefs_account.c:563 -msgid "Name of this account" -msgstr "éÍÑ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" - -#: src/prefs_account.c:572 -msgid "Usually used" -msgstr "ðÏ ÕÍÏÌÞÁÎÉÀ" - -#: src/prefs_account.c:576 -msgid "Personal information" -msgstr "ìÉÞÎÁÑ ÉÎÆÏÒÍÁÃÉÑ" - -#: src/prefs_account.c:585 -msgid "Full name" -msgstr "ðÏÌÎÏÅ ÉÍÑ" - -#: src/prefs_account.c:591 -msgid "Mail address" -msgstr "áÄÒÅÓ" - -#: src/prefs_account.c:597 -msgid "Organization" -msgstr "ïÒÇÁÎÉÚÁÃÉÑ" - -#: src/prefs_account.c:621 -msgid "Server information" -msgstr "ó×ÅÄÅÎÉÑ Ï ÓÅÒ×ÅÒÁÈ" - -#: src/prefs_account.c:642 -msgid "POP3 (normal)" -msgstr "POP3 (ÏÂÙÞÎÙÊ)" - -#: src/prefs_account.c:644 -msgid "POP3 (APOP auth)" -msgstr "POP3 (APOP)" - -#: src/prefs_account.c:646 -msgid "IMAP4" -msgstr "IMAP4" - -#: src/prefs_account.c:648 -msgid "News (NNTP)" -msgstr "îÏ×ÏÓÔÎÏÊ (NNTP)" - -#: src/prefs_account.c:650 -msgid "None (local)" -msgstr "îÅÔ (ÌÏËÁÌØÎÙÊ)" - -#: src/prefs_account.c:672 -msgid "This server requires authentication" -msgstr "" - -#: src/prefs_account.c:711 -msgid "News server" -msgstr "óÅÒ×ÅÒ ÎÏ×ÏÓÔÅÊ" - -#: src/prefs_account.c:717 -msgid "Server for receiving" -msgstr "óÅÒ×ÅÒ ÄÌÑ ÐÒÉÅÍÁ" - -#: src/prefs_account.c:723 -msgid "SMTP server (send)" -msgstr "óÅÒ×ÅÒ SMTP (ÏÔÐÒÁ×ËÁ)" - -#: src/prefs_account.c:730 -msgid "User ID" -msgstr "ID ÐÏÌØÚÏ×ÁÔÅÌÑ" - -#: src/prefs_account.c:736 -msgid "Password" -msgstr "ðÁÒÏÌØ" - -#: src/prefs_account.c:786 -msgid "POP3" -msgstr "POP3" - -#: src/prefs_account.c:794 -msgid "Remove messages on server when received" -msgstr "õÄÁÌÑÔØ ÓÏÏÂÝÅÎÉÑ Ó ÓÅÒ×ÅÒÁ ÐÏÓÌÅ ÐÒÉÅÍÁ" - -#: src/prefs_account.c:796 -#, fuzzy -msgid "Download all messages on server" -msgstr "ðÒÉÎÉÍÁÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ Ó ÓÅÒ×ÅÒÁ" - -#: src/prefs_account.c:799 -#, fuzzy -msgid "`Get all' checks for new mail on this account" -msgstr "`ðÏÌÕÞÉÔØ ×ÓÅ' ÐÒÏ×ÅÒÑÅÔ ÎÏ×ÕÀ ÐÏÞÔÕ ÄÌÑ ÜÔÏÊ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" - -#: src/prefs_account.c:801 -msgid "Filter messages on receiving" -msgstr "æÉÌØÔÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ ÐÒÉ ÐÒÉÅÍÅ" - -#: src/prefs_account.c:838 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "úÁÇÏÌÏ×ÏË" - -#: src/prefs_account.c:845 -msgid "Add Date header field" -msgstr "äÏÂÁ×ÉÔØ × ÚÁÇÏÌÏ×ÏË ÐÏÌÅ Date" - -#: src/prefs_account.c:846 -msgid "Generate Message-ID" -msgstr "óÏÚÄÁ×ÁÔØ Message-ID" - -#: src/prefs_account.c:853 -msgid "Add user-defined header" -msgstr "äÏÂÁ×ÉÔØ ÄÏÐÏÌÎÉÔÅÌØÎÙÅ ÚÁÇÏÌÏ×ËÉ" - -#: src/prefs_account.c:855 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr " ïÐÒÅÄÅÌÉÔØ... " - -#: src/prefs_account.c:865 -msgid "Automatically set following addresses" -msgstr "á×ÔÏÍÁÔÉÞÅÓËÉ ÕÓÔÁÎÁ×ÌÉ×ÁÔØ ÁÄÒÅÓÁ" - -#: src/prefs_account.c:874 -msgid "Cc" -msgstr "ëÏÐÉÑ" - -#: src/prefs_account.c:887 -msgid "Bcc" -msgstr "óËÒÙÔÎÏ" - -#: src/prefs_account.c:900 -msgid "Reply-To" -msgstr "ïÂÒÁÔÎÙÊ ÁÄÒÅÓ" - -#: src/prefs_account.c:913 -msgid "Authentication" -msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ" - -#: src/prefs_account.c:921 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ SMTP (SMTP AUTH)" - -#: src/prefs_account.c:923 -msgid "Authenticate with POP3 before sending" -msgstr "ðÒÏ×ÅÒËÁ ÐÁÒÏÌÑ ÞÅÒÅÚ POP3 ÐÅÒÅÄ ÏÔÐÒÁ×ËÏÊ" - -#: src/prefs_account.c:957 -msgid "Signature file" -msgstr "æÁÊÌ ÐÏÄÐÉÓÉ" - -#: src/prefs_account.c:986 -msgid "Sign key" -msgstr "ëÌÀÞ ÐÏÄÐÉÓÉ" - -#: src/prefs_account.c:994 -msgid "Use default GnuPG key" -msgstr "ëÌÀÞ GnuPG ÐÏ ÕÍÏÌÞÁÎÉÀ" - -#: src/prefs_account.c:1003 -msgid "Select key by your email address" -msgstr "ëÌÀÞ ÄÌÑ ×ÙÂÒÁÎÎÏÇÏ ÁÄÒÅÓÁ E-mail" - -#: src/prefs_account.c:1012 -msgid "Specify key manually" -msgstr "äÒÕÇÏÊ ËÌÀÞ" - -#: src/prefs_account.c:1028 -msgid "User or key ID:" -msgstr "ID ÐÏÌØÚÏ×ÁÔÅÌÑ ËÌÀÞÁ:" - -#: src/prefs_account.c:1073 -msgid "Specify SMTP port" -msgstr "ðÏÒÔ SMTP" - -#: src/prefs_account.c:1085 -msgid "Specify POP3 port" -msgstr "ðÏÒÔ POP3" - -#: src/prefs_account.c:1097 -msgid "Specify domain name" -msgstr "éÍÑ ÄÏÍÅÎÁ" - -#: src/prefs_account.c:1144 -msgid "Mail address is not entered." -msgstr "îÅ ÕËÁÚÁÎ ÁÄÒÅÓ." - -#: src/prefs_account.c:1149 -msgid "SMTP server is not entered." -msgstr "îÅ ÕËÁÚÁÎ ÓÅÒ×ÅÒ SMTP." - -#: src/prefs_account.c:1154 -msgid "User ID is not entered." -msgstr "îÅ ÕËÁÚÁÎ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ." - -#: src/prefs_account.c:1159 -msgid "POP3 server is not entered." -msgstr "îÅ ÕËÁÚÁÎ ÓÅÒ×ÅÒ POP3." - -#: src/prefs_account.c:1164 -msgid "IMAP4 server is not entered." -msgstr "îÅ ÕËÁÚÁÎ ÓÅÒ×ÅÒ IMAP4." - -#: src/prefs_account.c:1169 -msgid "NNTP server is not entered." -msgstr "îÅ ÕËÁÚÁÎ ÓÅÒ×ÅÒ NNTP." - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÏÂÝÉÈ ÎÁÓÔÒÏÅË...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "ïÂÝÉÅ ÎÁÓÔÒÏÊËÉ" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "ïÔÏÂÒÁÖÅÎÉÅ" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "óÏÏÂÝÅÎÉÅ" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "éÎÔÅÒÆÅÊÓ" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "äÒÕÇÏÅ" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "÷ÎÅÛÎÑÑ ÐÒÏÇÒÁÍÍÁ" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "éÓÐÏÌØÚÏ×ÁÔØ ×ÎÅÛÎÀÀ ÐÒÏÇÒÁÍÍÕ ÄÌÑ ÐÒÉÅÍÁ" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "ðÕÔØ Ë ÐÒÏÇÒÁÍÍÅ" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "ìÏËÁÌØÎÙÊ ÓÐÕÌ" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "ðÒÉÎÉÍÁÔØ ÉÚ ÓÐÕÌÁ" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "æÉÌØÔÒÏ×ÁÔØ ÐÒÉ ÐÒÉÅÍÅ" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "ëÁÔÁÌÏÇ ÓÐÕÌÁ" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "ðÒÏ×ÅÒÑÔØ ÐÒÉÈÏÄ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:759 -msgid "each" -msgstr "ËÁÖÄÙÅ" - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "ÍÉÎÕÔ" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "ðÒÏ×ÅÒÑÔØ ÐÒÉÈÏÄ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ ÐÒÉ ÚÁÐÕÓËÅ" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "îÏ×ÏÓÔÉ" - -#: src/prefs_common.c:790 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"îÁÉÂÏÌØÛÅÅ ÞÉÓÌÏ ÓÔÁÔÅÊ ÄÌÑ ÚÁÇÒÕÚËÉ\n" -"(ÎÅ ÏÇÒÁÎÉÞÅÎÏ, ÅÓÌÉ ÕËÁÚÁÎ 0)" - -#: src/prefs_common.c:858 -msgid "Use external program for sending" -msgstr "éÓÐÏÌØÚÏ×ÁÔØ ×ÎÅÛÎÀÀ ÐÒÏÇÒÁÍÍÕ ÄÌÑ ÏÔÐÒÁ×ËÉ" - -#: src/prefs_common.c:882 -#, fuzzy -msgid "Save sent messages to outbox" -msgstr "óÏÈÒÁÎÑÔØ ÏÔÐÒÁ×ÌÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ × ÐÁÐËÅ \"ïÔÐÒÁ×ÌÅÎÎÙÅ\"" - -#: src/prefs_common.c:884 -#, fuzzy -msgid "Queue messages that fail to send" -msgstr "÷ ÓÌÕÞÁÅ ÏÛÉÂËÉ ÐÒÉ ÏÔÐÒÁ×ËÅ ÐÏÍÅÝÁÔØ ÓÏÏÂÝÅÎÉÅ × ÏÞÅÒÅÄØ" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "ëÏÄÉÒÏ×ËÁ ÏÔÐÒÁ×ÌÑÅÍÙÈ ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "á×ÔÏÍÁÔÉÞÅÓËÉ" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "7 ÂÉÔ ascii (US-ASCII)" - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "úÁÐÁÄÎÏÅ×ÒÏÐÅÊÓËÁÑ (ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "ãÅÎÔÒÁÌØÎÏÅ×ÒÏÐÅÊÓËÁÑ (ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "âÁÌÔÉÊÓËÁÑ (ISO-8859-13)" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "âÁÌÔÉÊÓËÁÑ (ISO-8859-4)" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "çÒÅÞÅÓËÁÑ (ISO-8859-7)" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "ôÕÒÅÃËÁÑ (ISO-8859-9)" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "ëÉÒÉÌÌÉÃÁ (ISO-8859-5)" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "òÕÓÓËÁÑ (KOI8-R)" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "ëÉÒÉÌÌÉÃÁ Win (Windows-1251)" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "õËÒÁÉÎÓËÁÑ (KOI8-U)" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "ñÐÏÎÓËÁÑ (ISO-2022-JP)" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "ñÐÏÎÓËÁÑ (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "ñÐÏÎÓËÁÑ (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "õÐÒÏÝÅÎÎÁÑ ËÉÔÁÊÓËÁÑ (GB2312)" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "ôÒÁÄÉÃÉÏÎÎÁÑ ËÉÔÁÊÓËÁÑ (Big5)" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "ôÒÁÄÉÃÉÏÎÎÁÑ ËÉÔÁÊÓËÁÑ (EUC-TW)" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "ëÉÔÁÊÓËÁÑ (ISO-2022-CN)" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "ëÏÒÅÊÓËÁÑ (EUC-KR)" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "ãÉÔÉÒÏ×ÁÎÉÅ" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "ãÉÔÉÒÏ×ÁÔØ ÐÒÉ ÏÔ×ÅÔÅ" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "úÎÁË ÃÉÔÁÔÙ" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "æÏÒÍÁÔ ÃÉÔÁÔÙ:" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr " ïÐÉÓÁÎÉÅ ÓÉÍ×ÏÌÏ× " - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "á×ÔÏÍÁÔÉÞÅÓËÉ ×ÓÔÁ×ÌÑÔØ ÐÏÄÐÉÓØ" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "òÁÚÄÅÌÉÔÅÌØ ÐÏÄÐÉÓÉ" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "ðÅÒÅÎÏÓÉÔØ ÓÔÒÏËÉ Ó" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "ÓÉÍ×ÏÌÁ" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "ðÅÒÅÎÏÓÉÔØ ÃÉÔÁÔÙ" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "ðÅÒÅÎÏÓÉÔØ ÐÅÒÅÄ ÏÔÐÒÁ×ËÏÊ" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "ûÒÉÆÔ" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "ôÅËÓÔ" - -#: src/prefs_common.c:1160 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "ðÅÒÅ×ÏÄÉÔØ ÉÍÅÎÁ ÚÁÇÏÌÏ×ËÏ× (`From:', `Subject:')" - -#: src/prefs_common.c:1163 -msgid "Display unread number next to folder name" -msgstr "ðÏËÁÚÙ×ÁÔØ ÞÉÓÌÏ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ ÒÑÄÏÍ Ó ÉÍÅÎÅÍ ÐÁÐËÉ" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "óÐÉÓÏË ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:1176 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "ðÏËÁÚÙ×ÁÔØ ÐÏÌÕÞÁÔÅÌÑ × ËÏÌÏÎËÅ `ïÔ', ÅÓÌÉ ÏÔÐÒÁ×ÉÔÅÌØ - ÷Ù" - -#: src/prefs_common.c:1178 -msgid "Enable horizontal scroll bar" -msgstr "òÁÚÒÅÛÉÔØ ÇÏÒÉÚÏÎÔÁÌØÎÕÀ ÐÒÏËÒÕÔËÕ" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "æÏÒÍÁÔ ÄÁÔÙ" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" -"ïÂÙÞÎÙÅ ÓÉÍ×ÏÌÙ, ×ËÌÀÞÅÎÎÙÅ × ÓÔÒÏËÕ ÆÏÒÍÁÔÁ, ËÏÐÉÒÕÀÔÓÑ ÂÅÚ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ. " -"óÐÅÃÉÆÉËÁÃÉÉ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÎÁÞÉÎÁÀÔÓÑ Ó ÓÉÍ×ÏÌÁ %, É ÚÁÍÅÎÑÀÔÓÑ ÓÌÅÄÕÀÝÉÍ " -"ÏÂÒÁÚÏÍ:\n" -"%a: ÎÁÚ×ÁÎÉÅ ÄÎÑ ÎÅÄÅÌÉ ÓÏËÒÁÝÅÎÎÏ\n" -"%A: ÎÁÚ×ÁÎÉÅ ÄÎÑ ÎÅÄÅÌÉ ÐÏÌÎÏÓÔØÀ\n" -"%b: ÎÁÚ×ÁÎÉÅ ÍÅÓÑÃÁ ÓÏËÒÁÝÅÎÎÏ\n" -"%B: ÎÁÚ×ÁÎÉÅ ÍÅÓÑÃÁ ÐÏÌÎÏÓÔØÀ\n" -"%c: ÐÒÅÄÐÏÞÔÉÔÅÌØÎÙÊ ÆÏÒÍÁÔ ÄÁÔÙ É ×ÒÅÍÅÎÉ ÄÌÑ ×ÙÂÒÁÎÎÏÊ ÓÔÒÁÎÙ\n" -"%C: ×ÅË (ÇÏÄ/100)\n" -"%d: ÄÅÎØ ÍÅÓÑÃÁ\n" -"%H: ÞÁÓ, 24-ÞÁÓÏ×ÏÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ\n" -"%I: ÞÁÓ, 12-ÞÁÓÏ×ÏÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ\n" -"%j: ÄÅÎØ ÇÏÄÁ\n" -"%m: ÎÏÍÅÒ ÍÅÓÑÃÁ\n" -"%M: ÍÉÎÕÔÁ\n" -"%p: AM ÉÌÉ PM\n" -"%S: ÓÅËÕÎÄÁ\n" -"%w: ÎÏÍÅÒ ÄÎÑ ÎÅÄÅÌÉ\n" -"%x: ÐÒÅÄÐÏÞÔÉÔÅÌØÎÙÊ ÆÏÒÍÁÔ ÄÁÔÙ ÄÌÑ ×ÙÂÒÁÎÎÏÊ ÓÔÒÁÎÙ\n" -"%y: ÐÏÓÌÅÄÎÉÅ Ä×Å ÃÉÆÒÙ ÇÏÄÁ\n" -"%Y: ÇÏÄ ÐÏÌÎÏÓÔØÀ\n" -"%Z: ÉÍÑ ÉÌÉ ÓÏËÒÁÝÅÎÉÅ ×ÒÅÍÅÎÎÏÊ ÚÏÎÙ" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr "õÓÔÁÎÏ×ÉÔØ ÐÏËÁÚÙ×ÁÅÍÙÅ ÐÏÌÑ..." - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "òÁÚÒÅÛÉÔØ ÒÁÓËÒÁÓËÕ ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:1297 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "ïÔÏÂÒÁÖÁÔØ 2-ÂÁÊÔÎÙÊ ÁÌÆÁ×ÉÔ É ÞÉÓÌÁ 1-ÂÁÊÔÎÙÍ ÓÉÍ×ÏÌÏÍ" - -#: src/prefs_common.c:1299 -msgid "Display header pane above message view" -msgstr "ðÏËÁÚÙ×ÁÔØ ÐÁÎÅÌØ ÚÁÇÏÌÏ×ËÏ× ÎÁÄ ÏÂÌÁÓÔØÀ ÐÒÏÓÍÏÔÒÁ ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "ðÏËÁÚÙ×ÁÔØ ÓÏËÒÁÝÅÎÎÙÅ ÚÁÇÏÌÏ×ËÉ ÐÒÉ ÐÒÏÓÍÏÔÒÅ ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "òÁÓÓÔÏÑÎÉÅ ÍÅÖÄÕ ÓÔÒÏËÁÍÉ" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "ÐÉËÓÅÌÅÊ" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "ïÓÔÁ×ÌÑÔØ ÍÅÓÔÏ × ÚÁÇÏÌÏ×ËÅ" - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "ðÒÏËÒÕÔËÁ" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "ðÏÌÏ×ÉÎÁ ÓÔÒÁÎÉÃÙ" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "ðÌÁ×ÎÁÑ ÐÒÏËÒÕÔËÁ" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "ûÁÇ" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "ûÉÆÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "ðÏÄÐÉÓÙ×ÁÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "á×ÔÏÍÁÔÉÞÅÓËÉ ÐÒÏ×ÅÒÑÔØ ÐÏÄÐÉÓÉ" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "úÁÈ×ÁÔÉÔØ ××ÏÄ ÐÒÉ ÚÁÐÒÏÓÅ ÐÁÒÏÌÑ" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "ëÌÀÞ ÐÏÄÐÉÓÉ ÐÏ ÕÍÏÌÞÁÎÉÀ" - -#: src/prefs_common.c:1554 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "üÍÕÌÉÒÏ×ÁÔØ ÐÏ×ÅÄÅÎÉÅ ÍÙÛÉ × ÐÏÞÔÏ×ÏÊ ÐÒÏÇÒÁÍÍÅ Emacs" - -#: src/prefs_common.c:1561 -msgid "Open first unread message when entering a folder" -msgstr "ïÔËÒÙÔØ ÐÅÒ×ÏÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ ÐÒÉ ×ÈÏÄÅ × ÐÁÐËÕ" - -#: src/prefs_common.c:1565 -msgid "Go to inbox after receiving new mail" -msgstr "ðÅÒÅÊÔÉ × ÐÁÐËÕ \"÷ÈÏÄÑÝÉÅ\" ÐÏÓÌÅ ÐÒÉÅÍÁ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "îÅÍÅÄÌÅÎÎÏ ×ÙÐÏÌÎÑÔØ ÐÅÒÅÍÅÝÅÎÉÅ É ÕÄÁÌÅÎÉÅ ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:1580 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" -"(óÏÏÂÝÅÎÉÑ ÂÕÄÕÔ ÐÒÏÓÔÏ ÐÏÍÅÞÅÎÙ ÄÏ ×ÙÐÏÌÎÅÎÉÑ, ÅÓÌÉ\n" -" ÜÔÁ ÏÐÃÉÑ ÎÅ ×ËÌÀÞÅÎÁ)" - -#: src/prefs_common.c:1587 -msgid "Add address to destination when double-clicked" -msgstr "äÏÂÁ×ÌÑÔØ ÁÄÒÅÓ × ÓÐÉÓÏË ÁÄÒÅÓÁÔÏ× ÐÏ Ä×ÏÊÎÏÍÕ ÝÅÌÞËÕ" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "ðÒÉ ×ÙÈÏÄÅ" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "ðÏÄÔ×ÅÒÖÄÅÎÉÅ ÐÒÉ ×ÙÈÏÄÅ" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "ïÞÉÝÁÔØ ËÏÒÚÉÎÕ ÐÒÉ ×ÙÈÏÄÅ" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "óÐÒÁÛÉ×ÁÔØ ÐÅÒÅÄ ÏÞÉÓÔËÏÊ" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "ðÒÅÄÕÐÒÅÖÄÁÔØ Ï ÎÁÌÉÞÉÉ ÓÏÏÂÝÅÎÉÊ × ÏÞÅÒÅÄÉ" - -#: src/prefs_common.c:1648 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "÷ÎÅÛÎÉÊ ÂÒÏÕÚÅÒ (%s ÂÕÄÅÔ ÚÁÍÅÎÅÎ ÎÁ URI)" - -#: src/prefs_common.c:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "ëÏÍÁÎÄÁ" - -#: src/prefs_common.c:1673 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "ðÅÞÁÔØ (%s ÂÕÄÅÔ ÚÁÍÅÎÅÎ ÎÁ ÉÍÑ ÆÁÊÌÁ)" - -#: src/prefs_common.c:1689 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "÷ÎÅÛÎÉÊ ÒÅÄÁËÔÏÒ (%s ÂÕÄÅÔ ÚÁÍÅÎÅÎ ÎÁ ÉÍÑ ÆÁÊÌÁ)" - -#: src/prefs_common.c:1752 -msgid "Set message colors" -msgstr "îÁÓÔÒÏÊËÁ Ã×ÅÔÏ× ÓÏÏÂÝÅÎÉÊ" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "ã×ÅÔÁ" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "ãÉÔÁÔÁ - ðÅÒ×ÙÊ ÕÒÏ×ÅÎØ" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "ãÉÔÁÔÁ - ÷ÔÏÒÏÊ ÕÒÏ×ÅÎØ" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "ãÉÔÁÔÁ - ôÒÅÔÉÊ ÕÒÏ×ÅÎØ" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "óÓÙÌËÁ (URI)" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "ãÉËÌÉÞÅÓËÉ ÉÓÐÏÌØÚÏ×ÁÔØ Ã×ÅÔÁ ÃÉÔÁÔ" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "÷ÙÂÅÒÉÔÅ Ã×ÅÔ ÄÌÑ ÃÉÔÁÔ ÕÒÏ×ÎÑ 1" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "÷ÙÂÅÒÉÔÅ Ã×ÅÔ ÄÌÑ ÃÉÔÁÔ ÕÒÏ×ÎÑ 2" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "÷ÙÂÅÒÉÔÅ Ã×ÅÔ ÄÌÑ ÃÉÔÁÔ ÕÒÏ×ÎÑ 3" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "÷ÙÂÅÒÉÔÅ Ã×ÅÔ ÄÌÑ ÓÓÙÌÏË (URI)" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "ïÐÉÓÁÎÉÅ ÓÉÍ×ÏÌÏ×" - -#: src/prefs_common.c:2052 -#, 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:2155 -msgid "Set display item" -msgstr "õÓÔÁÎÏ×ËÁ ÏÔÏÂÒÁÖÁÅÍÙÈ ÐÏÌÅÊ" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "íÅÔËÁ" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "MIME" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "îÏÍÅÒ" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "äÁÔÁ" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "ïÔ" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "ôÅÍÁ" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "÷ÙÂÏÒ ÛÒÉÆÔÁ" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "" - -#: src/prefs_customheader.c:150 -#, fuzzy -msgid "Creating custom header setting window...\n" -msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÎÁÓÔÒÏÊËÉ ÚÁÇÏÌÏ×ËÏ×...\n" - -#: src/prefs_customheader.c:168 -#, fuzzy -msgid "Custom header setting" -msgstr "îÁÓÔÒÏÊËÁ ÏÔÏÂÒÁÖÅÎÉÑ ÚÁÇÏÌÏ×ËÏ×" - -#: src/prefs_customheader.c:212 -msgid "Value" -msgstr "" - -#: src/prefs_customheader.c:320 -#, fuzzy -msgid "Reading custom header configuration...\n" -msgstr "þÔÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÆÉÌØÔÒÏ×...\n" - -#: src/prefs_customheader.c:365 -#, fuzzy -msgid "Writing custom header configuration...\n" -msgstr "úÁÐÉÓØ ËÏÎÆÉÇÕÒÁÃÉÉ ÆÉÌØÔÒÏ×...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "éÍÑ ÚÁÇÏÌÏ×ËÁ ÎÅ ÕËÁÚÁÎÏ." - -#: src/prefs_customheader.c:541 -#, fuzzy -msgid "Delete header" -msgstr "õÄÁÌÉÔØ ÐÁÐËÕ" - -#: src/prefs_customheader.c:542 -#, fuzzy -msgid "Do you really want to delete this header?" -msgstr "÷Ù ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÐÒÁ×ÉÌÏ?" - -#: src/prefs_display_header.c:187 -msgid "Creating display header setting window...\n" -msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÎÁÓÔÒÏÊËÉ ÚÁÇÏÌÏ×ËÏ×...\n" - -#: src/prefs_display_header.c:210 -msgid "Display header setting" -msgstr "îÁÓÔÒÏÊËÁ ÏÔÏÂÒÁÖÅÎÉÑ ÚÁÇÏÌÏ×ËÏ×" - -#: src/prefs_display_header.c:237 -msgid "Header name" -msgstr "îÁÚ×ÁÎÉÅ ÚÁÇÏÌÏ×ËÁ" - -#: src/prefs_display_header.c:269 -msgid "Displayed Headers" -msgstr "÷Ù×ÅÄÅÎÎÙÅ ÚÁÇÏÌÏ×ËÉ" - -#: src/prefs_display_header.c:327 -msgid "Hidden headers" -msgstr "óËÒÙÔÙÅ ÚÁÇÏÌÏ×ËÉ" - -#: src/prefs_display_header.c:357 -#, fuzzy -msgid "Show all unspecified headers" -msgstr "/ðÏËÁÚÁÔØ ×ÓÅ ÚÁÇÏÌÏ×ËÉ" - -#: src/prefs_display_header.c:382 -msgid "Reading configuration for displaying headers...\n" -msgstr "þÔÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÏÔÏÂÒÁÖÅÎÉÑ ÚÁÇÏÌÏ×ËÏ×...\n" - -#: src/prefs_display_header.c:420 -msgid "Writing configuration for displaying headers...\n" -msgstr "úÁÐÉÓØ ËÏÎÆÉÇÕÒÁÃÉÉ ÏÔÏÂÒÁÖÅÎÉÑ ÚÁÇÏÌÏ×ËÏ×...\n" - -#: src/prefs_display_header.c:552 -msgid "This header is already in the list." -msgstr "üÔÏÔ ÚÁÇÏÌÏ×ÏË ÕÖÅ ÐÒÉÓÕÔÓÔ×ÕÅÔ × ÓÐÉÓËÅ." - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "úÁÒÅÇÉÓÔÒÉÒÏ×ÁÎÎÙÅ ÐÒÁ×ÉÌÁ" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÎÁÓÔÒÏÊËÉ ÆÉÌØÔÒÏ×...\n" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "îÁÓÔÒÏÊËÁ ÆÉÌØÔÒÏ×" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "ïÐÅÒÁÔÏÒ" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(ÎÅÔ)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "ëÌÀÞÅ×ÏÅ ÓÌÏ×Ï" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "õÓÌÏ×ÉÅ" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "ÓÏÄÅÒÖÉÔ" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "ÎÅ ÓÏÄÅÒÖÉÔ" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "ðÏÍÅÓÔÉÔØ ×" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "éÓÐÏÌØÚÏ×ÁÔØ regex" - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "îÅ ÐÒÉÎÉÍÁÔØ" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "äÏÂÁ×ÉÔØ" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr "úÁÍÅÎÉÔØ" - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "þÔÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÆÉÌØÔÒÏ×...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "úÁÐÉÓØ ËÏÎÆÉÇÕÒÁÃÉÉ ÆÉÌØÔÒÏ×...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "(îÏ×ÏÅ)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "ðÁÐËÁ ÎÁÚÎÁÞÅÎÉÑ ÎÅ ÕËÁÚÁÎÁ." - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "õÄÁÌÅÎÉÅ ÐÒÁ×ÉÌÁ" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -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:457 -msgid "Mark file not found.\n" -msgstr "æÁÊÌ ÐÏÍÅÔÏË ÎÅ ÎÁÊÄÅÎ.\n" - -#: src/procmsg.c:459 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "" -"÷ÅÒÓÉÑ ÆÁÊÌÁ ÐÏÍÅÔÏË ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ÔÒÅÂÕÅÍÏÊ (%d != %d). æÁÊÌ ÕÄÁÌÅÎ.\n" - -#: src/procmsg.c:475 -msgid "Can't open mark file with append mode.\n" -msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÐÏÍÅÔÏË × ÒÅÖÉÍÅ ÄÏÂÁ×ÌÅÎÉÑ.\n" - -#: src/procmsg.c:480 -msgid "Can't open mark file with write mode.\n" -msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÐÏÍÅÔÏË × ÒÅÖÉÍÅ ÚÁÐÉÓÉ.\n" - -#: src/procmsg.c:663 -msgid "Sending queued message failed.\n" -msgstr "ïÛÉÂËÁ ÐÒÉ ÏÔÓÙÌËÅ ÓÏÏÂÝÅÎÉÑ ÉÚ ÏÞÅÒÅÄÉ.\n" - -#: src/procmsg.c:720 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ ÐÅÞÁÔÉ: `%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "óÏÓÔÏÑÎÉÅ" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "óÏÚÄÁÎÉÅ ÄÉÁÌÏÇÏ×ÏÇÏ ÏËÎÁ ÐÒÏÇÒÅÓÓÁ...\n" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÄÁÎÎÙÈ.\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ.\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "Oops: ðÏÄÐÉÓØ ÎÅ ÐÒÏ×ÅÒÅÎÁ" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "ðÏÄÐÉÓØ ÎÅ ÎÁÊÄÅÎÁ" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "èÏÒÏÛÁÑ ÐÏÄÐÉÓØ" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "ðìïèáñ ÐÏÄÐÉÓØ" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "îÅÔ ËÌÀÞÁ ÄÌÑ ÐÒÏ×ÅÒËÉ ÐÏÄÐÉÓÉ" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "ïÛÉÂËÁ ÐÒÏ×ÅÒËÉ ÐÏÄÐÉÓÉ" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "òÁÚÎÙÅ ÒÅÚÕÌØÔÁÔÙ ÐÒÏ×ÅÒËÉ ÐÏÄÐÉÓÅÊ" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "ïÛÉÂËÁ: îÅÉÚ×ÅÓÔÎÙÊ ÓÔÁÔÕÓ" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "èÏÒÏÛÁÑ ÐÏÄÐÉÓØ ÏÔ \"%s\"" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "ðìïèáñ ÐÏÄÐÉÓØ ÏÔ \"%s\"" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "îÅ ÎÁÊÄÅÎ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÜÔÏÇÏ ËÌÀÞÁ." - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr " ÄÒÕÇÏÅ ÉÍÑ \"%s\"\n" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "ðÏÄÐÉÓØ ÓÏÚÄÁÎÁ %s\n" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "ïÔÐÅÞÁÔÏË ËÌÀÞÁ: %s\n" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "÷ÙÂÅÒÉÔÅ ËÌÀÞ ÄÌÑ `%s'" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "óÂÏÒ ÉÎÆÏÒÍÁÃÉÉ Ï `%s' ... %c" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "÷ÙÂÏÒ ËÌÀÞÁ" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "ID ËÌÀÞÁ" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "÷ÙÂÒÁÔØ" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "äÏÂÁ×ÉÔØ ËÌÀÞ" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "÷×ÅÄÉÔÅ ÄÒÕÇÏÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ ÉÌÉ ÐÏÌØÚÏ×ÁÔÅÌÑ\n" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "úÁÇÏÌÏ×ÏË ÓÏÏÂÝÅÎÉÑ × ÏÞÅÒÅÄÉ ÉÓÐÏÒÞÅÎ.\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "õÞÅÔÎÁÑ ÚÁÐÉÓØ ÎÅ ÎÁÊÄÅÎÁ. éÓÐÏÌØÚÕÀ ÔÅËÕÝÕÀ...\n" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "õÞÅÔÎÁÑ ÚÁÐÉÓØ ÎÅ ÎÁÊÄÅÎÁ.\n" - -#: src/send.c:250 -#, fuzzy, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "óÏÅÄÉÎÅÎÉÅ Ó ÓÅÒ×ÅÒÏÍ SMTP: %s ...\n" - -#: src/send.c:254 -msgid "Connecting" -msgstr "" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "" - -#: src/send.c:262 -#, fuzzy -msgid "Sending" -msgstr "ïÔÐÒÁ×ÉÔØ" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "" - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "" - -#: src/send.c:292 -#, fuzzy, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "ðÏÌÕÞÅÎÉÅ ÓÏÏÂÝÅÎÉÑ (%d / %d) (%d / %d bytes)" - -#: src/send.c:309 -#, fuzzy -msgid "Quitting..." -msgstr "÷ÙÈÏÄ" - -#: src/send.c:330 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "ïÛÉÂËÁ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ SMTP: %s:%d\n" - -#: src/send.c:341 -msgid "Error occurred while sending HELO\n" -msgstr "ïÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ HELO\n" - -#: src/send.c:357 -#, fuzzy -msgid "Sending message" -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 "" -"÷ÎÁÞÁÌÅ ÕËÁÖÉÔÅ ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ.\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:289 -msgid "/M_ove..." -msgstr "/ðÅÒÅÍÅÓÔÉÔØ" - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/ëÏÐÉÒÏ×ÁÔØ" - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/÷ÙÐÏÌÎÉÔØ" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/ïÔÍÅÔÉÔØ" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/ïÔÍÅÔÉÔØ/ïÔÍÅÔÉÔØ" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/ïÔÍÅÔÉÔØ/óÎÑÔØ ÏÔÍÅÔËÕ" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/ïÔÍÅÔÉÔØ/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "/ïÔÍÅÔÉÔØ/ðÏÍÅÔÉÔØ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÏÅ" - -#: src/summaryview.c:298 -#, fuzzy -msgid "/_Mark/Mark as rea_d" -msgstr "/ïÔÍÅÔÉÔØ/ðÏÍÅÔÉÔØ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÏÅ" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/ïÔ×ÅÔÉÔØ" - -#: src/summaryview.c:302 -#, fuzzy -msgid "/Repl_y to sender" -msgstr "/ïÔ×ÅÔÉÔØ ×ÓÅÍ" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/ïÔ×ÅÔÉÔØ ×ÓÅÍ" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/ðÅÒÅÓÌÁÔØ" - -#: src/summaryview.c:305 -#, fuzzy -msgid "/Forward as a_ttachment" -msgstr "/ðÅÒÅÓÌÁÔØ ËÁË ÐÒÉÌÏÖÅÎÉÅ" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/ïÔËÒÙÔØ × ÎÏ×ÏÍ ÏËÎÅ" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "/ðÏËÁÚÁÔØ ÉÓÈÏÄÎÙÊ ÔÅËÓÔ" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/ðÏËÁÚÁÔØ ×ÓÅ ÚÁÇÏÌÏ×ËÉ" - -#: src/summaryview.c:311 -#, fuzzy -msgid "/Re-_edit" -msgstr "/éÚÍÅÎÉÔØ" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/ðÅÞÁÔØ..." - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "/÷ÙÂÒÁÔØ ×ÓÅ" - -#: src/summaryview.c:322 -msgid "M" -msgstr "í" - -#: src/summaryview.c:322 -msgid "U" -msgstr "þ" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÓÐÉÓËÁ...\n" - -#: src/summaryview.c:352 -msgid "No." -msgstr "îÏÍÅÒ" - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "ïÂÒÁÂÏÔËÁ ÍÅÔÏË" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "îÅÓËÏÌØËÏ ÍÅÔÏË ÏÓÔÁÌÏÓØ. ïÂÒÁÂÏÔÁÔØ ÉÈ?" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"ÐÕÓÔÁÑ ÐÁÐËÁ\n" -"\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "ðÒÏÓÍÏÔÒ ÐÁÐËÉ (%s)..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "ÇÏÔÏ×Ï." - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "îÅÔ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ" - -#: src/summaryview.c:816 -msgid "No unread message found. Go to next folder?" -msgstr "îÅ ÎÁÊÄÅÎÏ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ. ðÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÊ ÐÁÐËÅ?" - -#: src/summaryview.c:957 src/summaryview.c:959 -msgid "Attracting messages by subject..." -msgstr "çÒÕÐÐÉÒÏ×ËÁ ÓÏÏÂÝÅÎÉÊ ÐÏ ÔÅÍÁÍ..." - -#: src/summaryview.c:1102 -#, c-format -msgid "%d deleted" -msgstr "%d ÕÄÁÌÅÎÏ" - -#: src/summaryview.c:1106 -#, c-format -msgid "%s%d moved" -msgstr "%s%d ÐÅÒÅÍÅÝÅÎÏ" - -#: src/summaryview.c:1107 src/summaryview.c:1114 -msgid ", " -msgstr ", " - -#: src/summaryview.c:1112 -#, c-format -msgid "%s%d copied" -msgstr "%s%d ÓËÏÐÉÒÏ×ÁÎÏ" - -#: src/summaryview.c:1129 -msgid " item(s) selected" -msgstr " ÓÏÏÂÝÅÎÉÊ ×ÙÂÒÁÎÏ" - -#: src/summaryview.c:1140 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d ÎÏ×ÙÈ, %d ÎÅÐÒÏÞÉÔÁÎÎÙÈ, %d ×ÓÅÇÏ (%s)" - -#: src/summaryview.c:1146 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d ÎÏ×ÙÈ, %d ÎÅÐÒÏÞÉÔÁÎÎÙÈ, %d ×ÓÅÇÏ" - -#: src/summaryview.c:1187 src/summaryview.c:1188 -msgid "Sorting summary..." -msgstr "óÏÒÔÉÒÏ×ËÁ..." - -#: src/summaryview.c:1226 -msgid "\tSetting summary from message data..." -msgstr "\tæÏÒÍÉÒÏ×ÁÎÉÅ ÓÐÉÓËÁ ÓÏÏÂÝÅÎÉÊ..." - -#: src/summaryview.c:1228 -msgid "Setting summary from message data..." -msgstr "æÏÒÍÉÒÏ×ÁÎÉÅ ÓÐÉÓËÁ ÓÏÏÂÝÅÎÉÊ..." - -#: src/summaryview.c:1337 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "úÁÐÉÓØ ËÅÛÁ ÓÐÉÓËÁ (%s)..." - -#: src/summaryview.c:1389 -msgid "(No Date)" -msgstr "(îÅÔ ÄÁÔÙ)" - -#: src/summaryview.c:1654 -#, c-format -msgid "Message %d is marked\n" -msgstr "óÏÏÂÝÅÎÉÅ %d ÐÏÍÅÞÅÎÏ\n" - -#: src/summaryview.c:1683 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "óÏÏÂÝÅÎÉÅ %d ÐÏÍÅÞÅÎÏ ËÁË ÐÒÏÞÉÔÁÎÎÏÅ\n" - -#: src/summaryview.c:1718 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "óÏÏÂÝÅÎÉÅ %d ÐÏÍÅÞÅÎÏ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÏÅ\n" - -#: src/summaryview.c:1760 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "óÏÏÂÝÅÎÉÅ %s/%d ÐÏÍÅÞÅÎÏ ËÁË ÕÄÁÌÅÎÎÏÅ\n" - -#: src/summaryview.c:1774 -msgid "Current folder is Trash." -msgstr "ôÅËÕÝÁÑ ÐÁÐËÁ -- ËÏÒÚÉÎÁ." - -#: src/summaryview.c:1796 src/summaryview.c:1798 -msgid "Deleting duplicated messages..." -msgstr "õÎÉÞÔÏÖÅÎÉÅ ÐÏ×ÔÏÒÑÀÝÉÈÓÑ ÓÏÏÂÝÅÎÉÊ..." - -#: src/summaryview.c:1848 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "ó ÓÏÏÂÝÅÎÉÑ %s/%d ÓÎÑÔÙ ÐÏÍÅÔËÉ\n" - -#: src/summaryview.c:1885 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "óÏÏÂÝÅÎÉÅ %d ÐÏÍÅÞÅÎÏ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ × %s\n" - -#: src/summaryview.c:1897 -msgid "Destination is same as current folder." -msgstr "íÅÓÔÏ ÎÁÚÎÁÞÅÎÉÑ ÓÏ×ÐÁÄÁÅÔ Ó ÔÅËÕÝÅÊ ÐÁÐËÏÊ." - -#: src/summaryview.c:1946 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "óÏÏÂÝÅÎÉÅ %d ÐÏÍÅÞÅÎÏ ÄÌÑ ËÏÐÉÒÏ×ÁÎÉÑ × %s\n" - -#: src/summaryview.c:1959 -msgid "Destination to copy is same as current folder." -msgstr "íÅÓÔÏ ÎÁÚÎÁÞÅÎÉÑ ÄÌÑ ËÏÐÉÒÏ×ÁÎÉÑ ÓÏ×ÐÁÄÁÅÔ Ó ÔÅËÕÝÅÊ ÐÁÐËÏÊ." - -#: src/summaryview.c:1991 -msgid "Selecting all messages..." -msgstr "÷ÙÂÉÒÁÀÔÓÑ ×ÓÅ ÓÏÏÂÝÅÎÉÑ..." - -#: src/summaryview.c:2045 -msgid "Print" -msgstr "ðÅÞÁÔØ" - -#: src/summaryview.c:2046 -#, c-format -msgid "" -"Enter the print command line:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"÷×ÅÄÉÔÅ ËÏÍÁÎÄÕ ÐÅÞÁÔÉ:\n" -"(`%s' ÂÕÄÅÔ ÚÁÍÅÎÅÎÏ ÎÁ ÉÍÑ ÆÁÊÌÁ)" - -#: src/summaryview.c:2052 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ ÐÅÞÁÔÉ:\n" -"`%s'" - -#: src/summaryview.c:2274 src/summaryview.c:2275 -msgid "Building threads..." -msgstr "ó×ÑÚÙ×ÁÎÉÅ ÏÂÓÕÖÄÅÎÉÊ..." - -#: src/summaryview.c:2297 src/summaryview.c:2298 -msgid "Unthreading..." -msgstr "ïÔÍÅÎÁ Ó×ÑÚÙ×ÁÎÉÑ ÏÂÓÕÖÄÅÎÉÊ..." - -#: src/summaryview.c:2320 -msgid "Unthreading for execution..." -msgstr "ïÔÍÅÎÁ Ó×ÑÚÙ×ÁÎÉÑ ÏÂÓÕÖÄÅÎÉÑ ÄÌÑ ÉÓÐÏÌÎÅÎÉÑ..." - -#: src/summaryview.c:2407 -msgid "filtering..." -msgstr "ÆÉÌØÔÒÁÃÉÑ..." - -#: src/summaryview.c:2408 -msgid "Filtering..." -msgstr "æÉÌØÔÒÁÃÉÑ..." - -#: src/summaryview.c:2514 -#, c-format -msgid "Go to %s\n" -msgstr "ðÅÒÅÊÔÉ Ë %s\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÔÅËÓÔÁ...\n" - -#: src/textview.c:366 -#, fuzzy -msgid "To save this part, pop up the context menu with " -msgstr "þÔÏÂÙ ÓÏÈÒÁÎÉÔØ ÜÔÕ ÞÁÓÔØ, ×ÙÚÏ×ÉÔÅ ËÏÎÔÅËÓÔÎÏÅ ÍÅÎÀ, ÝÅÌËÎÕ× ÐÒÁ×ÏÊ\n" - -#: src/textview.c:367 -#, fuzzy -msgid "right click and select `Save as...', " -msgstr "" -"ËÎÏÐËÏÊ ÍÙÛÉ, É ×ÙÂÅÒÉÔÅ `óÏÈÒÁÎÉÔØ ËÁË...', ÉÌÉ ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÕ `y'.\n" -"\n" - -#: src/textview.c:368 -#, fuzzy -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"`ðÏËÁÚÁÔØ ËÁË ÔÅËÓÔ', ÉÌÉ ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÕ `t'.\n" -"\n" - -#: src/textview.c:370 -#, fuzzy -msgid "To display this part as a text message, select " -msgstr "äÌÑ ÏÔÏÂÒÁÖÅÎÉÑ ÜÔÏÇÏ ×ÌÏÖÅÎÉÑ ËÁË ÔÅËÓÔÁ, ×ÙÂÅÒÉÔÅ\n" - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"`ðÏËÁÚÁÔØ ËÁË ÔÅËÓÔ', ÉÌÉ ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÕ `t'.\n" -"\n" - -#: src/textview.c:373 -#, fuzzy -msgid "To open this part with external program, select " -msgstr "äÌÑ ÏÔËÒÙÔÉÑ ÜÔÏÇÏ ×ÌÏÖÅÎÉÑ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÏÊ, ×ÙÂÅÒÉÔÅ `Open',\n" - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "" - -#: src/textview.c:375 -#, fuzzy -msgid "or double-click, or click the center button, " -msgstr "" -"ÉÌÉ ÝÅÌËÎÉÔÅ Ä×ÁÖÄÙ, ÉÌÉ ÎÁÖÍÉÔÅ ÎÁ ÓÒÅÄÎÀÀ ËÎÏÐËÕ, ÉÌÉ ÎÁ ËÌÁ×ÉÛÕ `l'." - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "" - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "üÔÁ ÐÏÄÐÉÓØ ÅÝÅ ÎÅ ÂÙÌÁ ÐÒÏ×ÅÒÅÎÁ.\n" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "þÔÏÂÙ ÐÒÏ×ÅÒÉÔØ ÅÅ, ×ÙÚÏ×ÉÔÅ ËÏÎÔÅËÓÔÎÏÅ ÍÅÎÀ, ÝÅÌËÎÕ× ÐÒÁ×ÏÊ\n" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "ËÎÏÐËÏÊ ÍÙÛÉ, É ×ÙÂÅÒÉÔÅ `ðÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ'.\n" - -#: src/utils.c:1547 -#, c-format -msgid "writing to %s failed.\n" -msgstr "ÚÁÐÉÓØ × %s ÎÅ ÕÄÁÌÁÓØ.\n" - -#: src/utils.c:1588 -#, fuzzy, c-format -msgid "move_file(): file %s already exists." -msgstr "ðÁÐËÁ `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." - -#: src/utils.c:1729 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "îÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ ÏÔËÒÙÔÉÑ URI: `%s'" - -#~ msgid "deleting message %d...\n" -#~ msgstr "ÕÎÉÞÔÏÖÅÎÉÅ ÓÏÏÂÝÅÎÉÑ %d...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/îÅ ÐÏËÁÚÙ×ÁÔØ" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/óÏÏÂÝÅÎÉÅ/ïÔÍÅÔÉÔØ/ðÏÍÅÔÉÔØ ËÁË ÐÒÏÞÉÔÁÎÎÏÅ" - -#~ msgid "deleting article %d...\n" -#~ msgstr "ÕÄÁÌÅÎÉÅ ÓÔÁÔØÉ %d...\n" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/ïÔÍÅÔÉÔØ/ðÏÍÅÔÉÔØ ËÁË ÐÒÏÞÉÔÁÎÎÏÅ" - -#~ msgid "Show other headers" -#~ msgstr "ðÏËÁÚÁÔØ ÄÒÕÇÉÅ ÚÁÇÏÌÏ×ËÉ" - -#~ msgid "File copy from %s to %s failed.\n" -#~ msgstr "ïÛÉÂËÁ ÐÒÉ ËÏÐÉÒÏ×ÁÎÉÉ ÆÁÊÌÁ ÉÚ %s × %s.\n" diff --git a/po/stamp-cat-id b/po/stamp-cat-id deleted file mode 100644 index 9788f7023..000000000 --- a/po/stamp-cat-id +++ /dev/null @@ -1 +0,0 @@ -timestamp diff --git a/po/zh_CN.GB2312.po b/po/zh_CN.GB2312.po deleted file mode 100644 index 04a79271d..000000000 --- a/po/zh_CN.GB2312.po +++ /dev/null @@ -1,4189 +0,0 @@ -# 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-06-20 17:53+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:90 -msgid "About" -msgstr "¹ØÓÚ" - -#: src/about.c:199 -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:205 -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:210 -msgid "" -"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" -"\n" -msgstr "" - -#: src/about.c:214 -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:220 -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:226 -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:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1476 src/compose.c:3132 src/export.c:185 src/foldersel.c:176 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:334 src/main.c:342 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "OK" -msgstr "È·¶¨" - -#: src/account.c:101 -msgid "Reading all config for each account...\n" -msgstr "ÕýÔÚΪÿ¸öÕÊ»§¶ÁÈ¡ÅäÖÃ...\n" - -#: src/account.c:116 -#, c-format -msgid "Found label: %s\n" -msgstr "ÕÒµ½±êÇ©£º%s\n" - -#: src/account.c:208 -msgid "" -"Some composing windows are open.\n" -"Please close all the composing windows before editing the accounts." -msgstr "" - -#: src/account.c:214 -msgid "Opening account edit window...\n" -msgstr "ÕýÔÚ´ò¿ªÕÊ»§±à¼­´°¿Ú...\n" - -#: src/account.c:361 -msgid "Creating account edit window...\n" -msgstr "ÕýÔÚ´´½¨ÕÊ»§±à¼­´°¿Ú...\n" - -#: src/account.c:366 -msgid "Edit accounts" -msgstr "±à¼­ÕÊ»§" - -#: src/account.c:394 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2244 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "ÐÕÃû" - -#: src/account.c:395 src/prefs_account.c:632 -msgid "Protocol" -msgstr "ЭÒé" - -#: src/account.c:396 -msgid "Server" -msgstr "·þÎñÆ÷" - -#: src/account.c:415 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "Ìí¼Ó" - -#: src/account.c:421 -msgid "Edit" -msgstr "±à¼­" - -#: src/account.c:427 src/prefs_customheader.c:247 -msgid " Delete " -msgstr "ɾ³ý" - -#: src/account.c:433 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "ÍùÏÂ" - -#: src/account.c:439 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "ÍùÉÏ" - -#: src/account.c:453 -msgid " Set as usually used account " -msgstr "É趨Ϊͨ³£Ê¹ÓõÄÕÊ»§" - -#: src/account.c:459 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "¹Ø±Õ" - -#: src/account.c:513 -msgid "Delete account" -msgstr "ɾ³ýÕÊ»§" - -#: src/account.c:514 -msgid "Do you really want to delete this account?" -msgstr "ÄãȷʵÏëҪɾ³ý¸ÃÕÊ»§Âð£¿" - -#: src/account.c:515 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3306 src/folderview.c:1448 src/folderview.c:1491 -#: src/folderview.c:1590 src/folderview.c:1631 src/folderview.c:1730 -#: src/folderview.c:1763 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "ÊÇ" - -#: src/account.c:515 src/compose.c:3306 src/folderview.c:1448 -#: src/folderview.c:1491 src/folderview.c:1590 src/folderview.c:1631 -#: src/folderview.c:1730 src/folderview.c:1763 -msgid "+No" -msgstr "+²»ÊÇ" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -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:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -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:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/Îļþ(_F)/¹Ø±Õ(_C)" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/°ïÖú(_H)" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -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:369 -#: src/folderview.c:206 src/folderview.c:208 src/folderview.c:217 -#: src/folderview.c:219 src/folderview.c:228 src/folderview.c:230 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/±à¼­(_E)" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/ɾ³ý(_D)" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "E-MailµØÖ·" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "ÖØбê¼Ç" - -#: src/addressbook.c:325 src/compose.c:2804 -msgid "Address book" -msgstr "µØÖ·²¾" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "ÐÕÃû£º" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -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:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "²»" - -#: src/addressbook.c:1000 src/folderview.c:1321 src/folderview.c:1522 -msgid "New folder" -msgstr "ÐÂÎļþ¼Ð" - -#: src/addressbook.c:1001 src/folderview.c:1322 -msgid "Input the name of new folder:" -msgstr "ÊäÈëÐÂÎļþ¼ÐµÄÃû×Ö£º" - -#: src/addressbook.c:1002 src/folderview.c:1323 src/folderview.c:1526 -msgid "NewFolder" -msgstr "ÐÂÎļþ¼Ð" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "¸ÃÃû×ÖÒÑ´æÔÚ¡£" - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "ÐÂȺ×é" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "ÊäÈëÐÂȺ×éµÄÃû×Ö" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "ÐÂȺ×é" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "±à¼­Èº×é" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "ÊäÈëȺ×éµÄÐÂÃû×Ö" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "±à¼­Îļþ¼Ð" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "ÊäÈëÎļþ¼ÐµÄÐÂÃû×Ö£º" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "ȷʵҪɾ³ý `%s' ? " - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "±à¼­µØÖ·" - -#: src/addressbook.c:1290 src/compose.c:2803 src/select-keys.c:302 -msgid "Address" -msgstr "µØÖ·" - -#: src/addressbook.c:1294 src/compose.c:1476 src/compose.c:3133 -#: src/compose.c:3703 src/export.c:186 src/foldersel.c:177 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:334 src/main.c:342 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2025 -#: src/summaryview.c:2541 -msgid "Cancel" -msgstr "È¡Ïû" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "¶ÁÈ¡µØÖ·²¾Îļþ..." - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s ²»´æÔÚ¡£\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:869 src/imap.c:888 -#: src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 src/mh.c:816 -#: src/news.c:648 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:1003 -#: src/summaryview.c:1209 src/summaryview.c:1291 src/summaryview.c:1352 -#: src/summaryview.c:1809 src/summaryview.c:2287 src/summaryview.c:2310 -#: src/summaryview.c:2331 src/summaryview.c:2424 -msgid "done.\n" -msgstr "Íê³É¡£\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "µ¼³öµØÖ·²¾µ½Îļþ..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "дµØÖ·²¾Êý¾Ýʧ°Ü¡£\n" - -#: src/alertpanel.c:119 src/compose.c:3306 src/main.c:332 -msgid "Notice" -msgstr "×¢Òâ" - -#: src/alertpanel.c:132 src/main.c:218 -msgid "Warning" -msgstr "¾¯¸æ" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "´íÎó" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "ÕýÔÚ´´½¨¾¯¸æÃæ°å¶Ô»°¿ò... \n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "²»ÄÜ»ñµÃÄÚ´æ \n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/Ìí¼Ó...(_A)" - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/ÒÆÈ¥(_R)" - -#: src/compose.c:370 src/folderview.c:209 src/folderview.c:220 -#: src/folderview.c:231 -msgid "/_Property..." -msgstr "/ÊôÐÔ...(_P)" - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/Îļþ(_F)/¸½¼ÓÎļþ(_A)" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/Îļþ(_F)/²åÈëÎļþ(_I)" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/Îļþ(_F)/²åÈëÇ©Ãû(_g)" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/±à¼­(_E)/³·Ïú(_U)" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/±à¼­(_E)/Öظ´(_R)" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/±à¼­(_E)/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/±à¼­(_E)/¼ôÇÐ(_t)" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/±à¼­(_E)/¸´ÖÆ(_C)" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/±à¼­(_E)/Õ³Ìù(_P)" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/±à¼­(_E)/È«Ñ¡(_a)" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/±à¼­(_E)/³¤ÐÐ×Ô¶¯»»ÐÐ(_l)" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/±à¼­(_E)/ÓÃÍⲿ±à¼­Æ÷±à¼­(_x)" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/Óʼþ(_M)" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/Óʼþ(_M)/·¢ËÍ(_S)" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/Óʼþ(_M)/ÒÔºó·¢ËÍ(_l)" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "/Óʼþ(_M)/±£´æµ½²Ý¸åÎļþ¼Ð(_d)" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/Óʼþ(_M)/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/Óʼþ(_M)/°µ³­ËÍ(_B)" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/Óʼþ(_M)/»Ø¸´(_R)" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/Óʼþ(_M)/¸½¼þ(_A)" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/¹¤¾ß(_T)" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/¹¤¾ß(_T)/ÏÔʾ±ê³ß(_r)" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/¹¤¾ß(_T)/µØÖ·²¾(_A)" - -#: src/compose.c:494 src/compose.c:564 src/compose.c:624 src/procmsg.c:687 -msgid "Can't get text part\n" -msgstr "%s: ²»Äܵõ½Îı¾²¿·Ö\n" - -#: src/compose.c:556 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: Îļþ²»´æÔÚ\n" - -#: src/compose.c:568 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"¿ªÊ¼×ª·¢µÄÐżþ£º\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "Îļþ %s ²»´æÔÚ \n" - -#: src/compose.c:1244 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "²»ÄÜ»ñµÃÎļþ %s µÄ´óС \n" - -#: src/compose.c:1248 -#, c-format -msgid "File %s is empty\n" -msgstr "Îļþ %s ÊÇ¿ÕµÄ \n" - -#: src/compose.c:1269 -#, c-format -msgid "Message: %s" -msgstr "Óʼþ£º%s" - -#: src/compose.c:1375 -msgid " [Edited]" -msgstr "" - -#: src/compose.c:1377 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - ׫дÓʼþ%s" - -#: src/compose.c:1380 -#, c-format -msgid "Compose message%s" -msgstr "׫дÓʼþ%s" - -#: src/compose.c:1402 src/compose.c:3596 -msgid "Recipient is not specified." -msgstr "ÊÕÐÅÈËûָ¶¨¡£" - -#: src/compose.c:1420 -msgid "can't get recipient list." -msgstr "" - -#: src/compose.c:1438 -msgid "" -"Account for sending mail is not specified.\n" -"Please select a mail account before sending." -msgstr "" - -#: src/compose.c:1459 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "" - -#: src/compose.c:1473 -msgid "Queueing" -msgstr "ÕýÔÚÅŶÓ" - -#: src/compose.c:1474 -msgid "" -"Error occurred while sending the message.\n" -"Put this message into queue folder?" -msgstr "" -"ÔÚ·¢ËÍÓʼþʱ·¢Éú´íÎó¡£\n" -"ÊÇ·ñ½«¸ÃÓʼþ·Åµ½ÅŶÓÎļþ¼ÐÖУ¿" - -#: src/compose.c:1480 src/compose.c:3608 -msgid "Can't queue the message." -msgstr "¸ÃÓʼþ²»ÄÜÅŶӡ£" - -#: src/compose.c:1483 -msgid "Error occurred while sending the message." -msgstr "ÔÚ·¢ËÍÓʼþʱ·¢Éú´íÎó¡£" - -#: src/compose.c:1490 src/compose.c:3615 -msgid "Can't save the message to outbox." -msgstr "²»Äܽ«¸ÃÓʼþ±£´æµ½·¢¼þÏä¡£" - -#: src/compose.c:1516 src/compose.c:1637 src/compose.c:1723 src/utils.c:1540 -msgid "can't change file mode\n" -msgstr "²»ÄܸıäÎļþÊôÐÔ \n" - -#: src/compose.c:1542 -msgid "Can't convert the codeset of the message." -msgstr "²»Äܸıä¸ÃÓʼþµÄ×Ö·û¼¯" - -#: src/compose.c:1551 -msgid "can't write headers\n" -msgstr "²»ÄÜд±êÌâ\n" - -#: src/compose.c:1669 -msgid "saving sent message...\n" -msgstr "±£´æÒÑ·¢Ë͵ÄÓʼþ... \n" - -#: src/compose.c:1674 -msgid "can't save message\n" -msgstr "²»Äܱ£´æÓʼþ\n" - -#: src/compose.c:1680 src/compose.c:1787 -msgid "can't open mark file\n" -msgstr "²»ÄÜ´ò¿ª±ê¼ÇÎļþ \n" - -#: src/compose.c:1703 -msgid "queueing message...\n" -msgstr "ÕýÔÚÅŶÓÓʼþ...\n" - -#: src/compose.c:1778 -msgid "can't queue the message\n" -msgstr "¸ÃÓʼþ²»ÄÜÅŶÓ\n" - -#: src/compose.c:1816 -#, c-format -msgid "Can't open file %s\n" -msgstr "²»ÄÜ´ò¿ªÎļþ%s\n" - -#: src/compose.c:2170 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "ÒÑÉú³ÉÓʼþ±êʶºÅ£º%s\n" - -#: src/compose.c:2244 src/compose.c:3104 -msgid "MIME type" -msgstr "MIME ÀàÐÍ" - -#: src/compose.c:2244 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "´óС" - -#: src/compose.c:2261 -msgid "Creating compose window...\n" -msgstr "´´½¨×«Ð´´°¿Ú...\n" - -#: src/compose.c:2307 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "·¢¼þÈË£º" - -#: src/compose.c:2730 src/mainwindow.c:1359 src/prefs_account.c:501 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "·¢ËÍ" - -#: src/compose.c:2731 -msgid "Send message" -msgstr "·¢ËÍÓʼþ" - -#: src/compose.c:2738 -msgid "Send later" -msgstr "ÒÔºó·¢ËÍ" - -#: src/compose.c:2739 -msgid "Put into queue folder and send later" -msgstr "·ÅÈëÅŶÓÎļþ¼ÐÒÔºó·¢ËÍ" - -#: src/compose.c:2746 src/folderview.c:738 -msgid "Draft" -msgstr "²Ý¸å" - -#: src/compose.c:2747 -msgid "Save to draft folder" -msgstr "±£´æµ½²Ý¸åÎļþ¼Ð" - -#: src/compose.c:2756 -msgid "Insert" -msgstr "²åÈë" - -#: src/compose.c:2757 -msgid "Insert file" -msgstr "²åÈëÎļþ" - -#: src/compose.c:2764 -msgid "Attach" -msgstr "¸½¼þ" - -#: src/compose.c:2765 -msgid "Attach file" -msgstr "¸½¼ÓÎļþ" - -#: src/compose.c:2774 src/prefs_common.c:1035 -msgid "Signature" -msgstr "Ç©Ãû" - -#: src/compose.c:2775 -msgid "Insert signature" -msgstr "²åÈëÇ©Ãû" - -#: src/compose.c:2783 -msgid "Editor" -msgstr "±à¼­Æ÷" - -#: src/compose.c:2784 -msgid "Edit with external editor" -msgstr "ÓÃÍⲿ±à¼­Æ÷±à¼­" - -#: src/compose.c:2792 -msgid "Linewrap" -msgstr "»»ÐÐ" - -#: src/compose.c:2793 -msgid "Wrap long lines" -msgstr "³¤ÐÐ×Ô¶¯»»ÐÐ" - -#: src/compose.c:3000 -msgid "Invalid MIME type." -msgstr "ÎÞЧMIMEÀàÐÍ" - -#: src/compose.c:3018 -msgid "File doesn't exist or is empty." -msgstr "Îļþ²»´æÔÚ»òΪ¿Õ¡£" - -#: src/compose.c:3086 -msgid "Property" -msgstr "ÊôÐÔ" - -#: src/compose.c:3106 -msgid "Encoding" -msgstr "±àÂë" - -#: src/compose.c:3129 -msgid "Path" -msgstr "·¾¶" - -#: src/compose.c:3130 -msgid "File name" -msgstr "ÎļþÃû" - -#: src/compose.c:3277 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "Íⲿ±à¼­Æ÷ÃüÁîÐÐÎÞЧ£º`%s'\n" - -#: src/compose.c:3303 -#, 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:3316 -#, c-format -msgid "Terminated process group id: %d" -msgstr "ÒѽáÊø³ÌÐò×é±êʶºÅ£º%d" - -#: src/compose.c:3317 -#, c-format -msgid "Temporary file: %s" -msgstr "ÁÙʱÎļþ£º%s" - -#: src/compose.c:3341 -msgid "Compose: input from monitoring process\n" -msgstr "׫д£º´Ó¼àÌý½ø³ÌÖÐÊäÈë\n" - -#. failed -#: src/compose.c:3374 -msgid "Couldn't exec external editor\n" -msgstr "²»ÄÜÖ´ÐÐÍⲿ±à¼­Æ÷\n" - -#: src/compose.c:3378 -msgid "Couldn't write to file\n" -msgstr "²»ÄÜдÈëÎļþ\n" - -#: src/compose.c:3380 -msgid "Pipe read failed\n" -msgstr "¹ÜµÀ¶Áȡʧ°Ü\n" - -#: src/compose.c:3637 -msgid "can't remove the old draft message\n" -msgstr "" - -#: src/compose.c:3665 src/compose.c:3677 -msgid "Select file" -msgstr "Ñ¡ÔñÎļþ" - -#: src/compose.c:3701 -msgid "Discard message" -msgstr "¶ªÆúÎļþ" - -#: src/compose.c:3702 -msgid "This message has been modified. discard it?" -msgstr "¸ÃÓʼþÒѸü¸Ä¡£¶ªÆúËü£¿" - -#: src/compose.c:3703 -msgid "Discard" -msgstr "¶ªÆú" - -#: src/compose.c:3703 -msgid "to Draft" -msgstr "È¥²Ý¸å" - -#: src/export.c:122 -msgid "Export" -msgstr "" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "" - -#: src/export.c:154 -msgid "Source dir:" -msgstr "" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr "Ñ¡Ôñ..." - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "" - -#: src/foldersel.c:131 -msgid "Select folder" -msgstr "Ñ¡ÔñÎļþ¼Ð" - -#: src/folderview.c:203 src/folderview.c:214 -msgid "/Create _new folder..." -msgstr "/´´½¨ÐÂÎļþ¼Ð(_N)..." - -#: src/folderview.c:204 src/folderview.c:215 -msgid "/_Rename folder..." -msgstr "/Îļþ¼ÐÖØÃüÃû(_R)..." - -#: src/folderview.c:205 src/folderview.c:216 -msgid "/_Delete folder" -msgstr "/ɾ³ýÎļþ¼Ð(_D)" - -#: src/folderview.c:207 -msgid "/Remove _mailbox" -msgstr "" - -#: src/folderview.c:218 -msgid "/Remove _IMAP4 server" -msgstr "" - -#: src/folderview.c:225 -msgid "/_Subscribe to newsgroup..." -msgstr "/¶©ÔÄÐÂÎÅ×é(_S)..." - -#: src/folderview.c:227 -msgid "/_Remove newsgroup" -msgstr "/ÐÂÎÅ×éÖØÃüÃû(_R)" - -#: src/folderview.c:229 -msgid "/Remove _news server" -msgstr "ÒÆÈ¥ÐÂÎÅ×é·þÎñÆ÷(_n)" - -#: src/folderview.c:240 -msgid "Folder" -msgstr "Îļþ¼Ð" - -#: src/folderview.c:240 -msgid "New" -msgstr "н¨" - -#: src/folderview.c:241 src/prefs_common.c:2173 -msgid "Unread" -msgstr "δ¶ÁÈ¡" - -#: src/folderview.c:241 -msgid "#" -msgstr "" - -#: src/folderview.c:251 -msgid "Creating folder view...\n" -msgstr "´´½¨Îļþ¼ÐÊÓͼ...\n" - -#: src/folderview.c:395 -msgid "Setting folder info...\n" -msgstr "ÉèÖÃÎļþ¼ÐÐÅÏ¢...\n" - -#: src/folderview.c:396 -msgid "Setting folder info..." -msgstr "ÉèÖÃÎļþ¼ÐÐÅÏ¢..." - -#: src/folderview.c:539 src/mainwindow.c:2092 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "ɨÃèÎļþ¼Ð %s%c%s ..." - -#: src/folderview.c:544 src/mainwindow.c:2097 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "ɨÃèÎļþ¼Ð %s ..." - -#: src/folderview.c:581 -msgid "Updating all folders..." -msgstr "" - -#: src/folderview.c:716 src/prefs_account.c:655 -msgid "Inbox" -msgstr "ÊÕ¼þÏä" - -#: src/folderview.c:721 -msgid "Outbox" -msgstr "·¢¼þÏä" - -#: src/folderview.c:726 -msgid "Queue" -msgstr "¶ÓÁÐ" - -#: src/folderview.c:731 -msgid "Trash" -msgstr "À¬»øÏä" - -#: src/folderview.c:1213 -#, c-format -msgid "Folder %s is selected\n" -msgstr "Îļþ¼Ð %s Ñ¡ÔñÁË\n" - -#: src/folderview.c:1327 src/folderview.c:1390 src/folderview.c:1531 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "×Ö·û`%c'²»ÄÜ°üº¬ÔÚÎļþ¼ÐÃû×ÖÖС£" - -#: src/folderview.c:1335 src/folderview.c:1399 src/folderview.c:1539 -#, c-format -msgid "The folder `%s' already exists." -msgstr "Îļþ¼Ð`%s'ÒÑ´æÔÚ¡£" - -#: src/folderview.c:1343 src/folderview.c:1547 -#, fuzzy, c-format -msgid "Can't create the folder `%s'." -msgstr "²»ÄÜÒÆÈ¥Îļþ¼Ð `%s'\n" - -#: src/folderview.c:1382 -#, c-format -msgid "Input new name for `%s':" -msgstr "Ϊ`%s'ÊäÈëÐÂÃû×Ö£º" - -#: src/folderview.c:1384 -msgid "Rename folder" -msgstr "Îļþ¼ÐÖØÃüÃû" - -#: src/folderview.c:1444 -#, 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:1447 src/folderview.c:1589 -msgid "Delete folder" -msgstr "ɾ³ýÎļþ¼Ð" - -#: src/folderview.c:1453 src/folderview.c:1595 -#, fuzzy, c-format -msgid "Can't remove the folder `%s'." -msgstr "²»ÄÜÒÆÈ¥Îļþ¼Ð `%s'\n" - -#: src/folderview.c:1487 -#, c-format -msgid "" -"Really remove the mailbox `%s' ?\n" -"(The messages are NOT deleted from disk)" -msgstr "" - -#: src/folderview.c:1490 -msgid "Remove folder" -msgstr "" - -#: src/folderview.c:1523 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" - -#: src/folderview.c:1587 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "" - -#: src/folderview.c:1628 -#, c-format -msgid "Really delete IMAP4 server `%s'?" -msgstr "" - -#: src/folderview.c:1630 -msgid "Delete IMAP4 server" -msgstr "" - -#: src/folderview.c:1671 -msgid "Subscribe newsgroup" -msgstr "¶©ÔÄÐÂÎÅ×é" - -#: src/folderview.c:1672 -msgid "Input subscribing newsgroup:" -msgstr "ÊäÈëÒª¶©ÔĵÄÐÂÎÅ×飺" - -#: src/folderview.c:1681 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "ÐÂÎÅ×é`%s'ÒÑ´æÔÚ¡£" - -#: src/folderview.c:1727 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "ȷʵҪɾ³ýÐÂÎÅ×é `%s'£¿" - -#: src/folderview.c:1729 -msgid "Delete newsgroup" -msgstr "ɾ³ýÐÂÎÅ×é" - -#: src/folderview.c:1760 -#, c-format -msgid "Really delete news server `%s'?" -msgstr "ȷʵҪɾ³ýÐÂÎÅ·þÎñÆ÷ `%s'£¿" - -#: src/folderview.c:1762 -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:174 src/summaryview.c:1392 -msgid "(No From)" -msgstr "£¨Ã»Óз¢¼þÈË£©" - -#: src/headerview.c:189 src/summaryview.c:1408 -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:204 -#, c-format -msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "µ½ %s:%d µÄ IMAP4Á¬½ÓÒѶϿª¡£ÖØÐÂÁ¬½Ó...\n" - -#: src/imap.c:230 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "ÕýÔÚ´´½¨µ½ %s:%d µÄ IMAP4Á¬½Ó...\n" - -#: src/imap.c:385 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "Óʼþ %d ÒÑ»º´æ¹ý¡£\n" - -#: src/imap.c:395 -#, c-format -msgid "getting message %d...\n" -msgstr "ÕýÔÚÈ¡µÃÓʼþ %d...\n" - -#: src/imap.c:401 src/procmsg.c:587 -#, c-format -msgid "can't fetch message %d\n" -msgstr "" - -#: src/imap.c:430 -#, fuzzy, c-format -msgid "can't append message %s\n" -msgstr "²»Äܱ£´æÓʼþ\n" - -#: src/imap.c:459 src/imap.c:516 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "Ô´Îļþ¼ÐÓëÄ¿µÄÎļþ¼ÐÊÇͬһ¸ö¡£\n" - -#: src/imap.c:469 src/imap.c:521 src/mh.c:201 src/mh.c:267 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "ÕýÔÚÒƶ¯ %s%c%d µ½ %s ...\n" - -#: src/imap.c:473 src/imap.c:525 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "" - -#: src/imap.c:593 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "" - -#: src/imap.c:600 src/imap.c:639 -msgid "can't expunge\n" -msgstr "" - -#: src/imap.c:632 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "" - -#: src/imap.c:744 -msgid "can't create mailbox\n" -msgstr "" - -#: src/imap.c:781 -msgid "can't delete mailbox\n" -msgstr "" - -#: src/imap.c:807 -msgid "can't get envelope\n" -msgstr "²»ÄÜ»ñµÃÐÅ·â\n" - -#: src/imap.c:813 -msgid "error occurred while getting envelope.\n" -msgstr "»ñÈ¡ÐÅ·âʱ·¢Éú´íÎó¡£\n" - -#: src/imap.c:821 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "²»ÄܽâÎöÐŷ⣺%s\n" - -#: src/imap.c:849 -#, fuzzy, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "\tÕýÔÚɾ³ýËùÓлº´æ´íµÄÓʼþ... " - -#: src/imap.c:882 -#, fuzzy -msgid "Deleting all cached messages... " -msgstr "\tÕýÔÚɾ³ýËùÓлº´æ´íµÄÓʼþ... " - -#: src/imap.c:896 -#, c-format -msgid "Can't connect to IMAP4 server: %s:%d\n" -msgstr "²»ÄÜÁ¬½Óµ½IMAP4·þÎñÆ÷£º%s:%d\n" - -#: src/imap.c:929 -#, fuzzy -msgid "can't get namespace\n" -msgstr "²»ÄÜ»ñµÃÐÅ·â\n" - -#: src/imap.c:1346 -#, c-format -msgid "can't select folder: %s\n" -msgstr "" - -#: src/imap.c:1401 -#, fuzzy, c-format -msgid "can't get the next uid of folder: %s\n" -msgstr "ÊäÈëÎļþ¼ÐµÄÐÂÃû×Ö£º" - -#: src/imap.c:1423 -msgid "IMAP4 login failed.\n" -msgstr "IMAP4 ×¢²áʧ°Ü¡£\n" - -#: src/imap.c:1636 -#, fuzzy, c-format -msgid "can't append %s to %s\n" -msgstr "²»ÄÜ°ÑÓʼþ %s ¸´ÖƵ½ %s\n" - -#: src/imap.c:1656 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "" - -#: src/imap.c:1681 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "" - -#: src/imap.c:1695 -msgid "error while imap command: EXPUNGE\n" -msgstr "" - -#: src/import.c:126 -msgid "Import" -msgstr "µ¼Èë" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "" - -#: src/import.c:158 -msgid "Importing file:" -msgstr "µ¼ÈëÎļþ£º" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "Ä¿±êĿ¼£º" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "Ñ¡Ôñµ¼ÈëÎļþ" - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "È¡µÃÐÂÓʼþ" - -#: src/inc.c:384 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "" - -#: src/inc.c:388 src/news.c:131 -msgid "Input password" -msgstr "ÊäÈëÃÜÂë" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "" - -#: src/inc.c:412 -msgid "Done" -msgstr "" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "" - -#: src/inc.c:487 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "ÕýÔÚ´Ó %s ÕÊ»§È¡µÃÐÂÓʼþ...\n" - -#: src/inc.c:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s£ºÕýÔÚÈ¡»ØÐÂÓʼþ" - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "ÕýÔÚÁ¬½ÓPOP3·þÎñÆ÷£º%s ..." - -#: src/inc.c:527 src/inc.c:660 -#, c-format -msgid "Can't connect to POP3 server: %s:%d\n" -msgstr "²»ÄÜÁ¬½ÓPOP3·þÎñÆ÷£º%s:%d\n" - -#: src/inc.c:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "²»ÄÜÁ¬½ÓPOP3·þÎñÆ÷£º%s:%d" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "ÕýÔÚÈ¡»ØÓʼþ (%d / %d) (%d / %d bytes)" - -#: src/inc.c:719 -#, fuzzy -msgid "Authorizing..." -msgstr "ÕýÔÚÑéÖ¤" - -#: src/inc.c:724 -#, fuzzy -msgid "Getting the number of new messages (STAT)..." -msgstr "ÕýÔÚÈ¡µÃÐÂÓʼþµÄÊýÁ¿" - -#: src/inc.c:729 -#, fuzzy -msgid "Getting the number of new messages (LAST)..." -msgstr "ÕýÔÚÈ¡µÃÐÂÓʼþµÄÊýÁ¿" - -#: src/inc.c:734 -#, fuzzy -msgid "Getting the number of new messages (UIDL)..." -msgstr "ÕýÔÚÈ¡µÃÐÂÓʼþµÄÊýÁ¿" - -#: src/inc.c:739 -#, fuzzy -msgid "Getting the size of messages (LIST)..." -msgstr "ÕýÔÚÈ¡µÃÐÂÓʼþµÄÊýÁ¿" - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "ɾ³ýÓʼþ" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "Í˳ö" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "ûÓÐÊÕµ½Óʼþ\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "ÔÚ´¦ÀíÓʼþʱ·¢Éú´íÎó¡£" - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "ûÓÐÊ£Óà´ÅÅ̿ռ䡣" - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "ûÓÐÓʼþÔÚ±¾µØÓÊÏä¡£\n" - -#: src/inc.c:881 -#, 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:108 -#, c-format -msgid "" -"File `%s' already exists.\n" -"Can't create folder." -msgstr "" -"Îļþ`%s'ÒÑ´æÔÚ¡£\n" -"²»ÄÜ´´½¨Îļþ¼Ð¡£" - -#: src/main.c:149 -msgid "g_thread is not supported by glib.\n" -msgstr "glib ²»Ö§³Ö g_thread¡£\n" - -#: src/main.c:219 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" - -#: src/main.c:300 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "" - -#: src/main.c:303 -msgid " --compose [address] open composition window" -msgstr "" - -#: src/main.c:304 -msgid " --receive receive new messages" -msgstr "" - -#: src/main.c:305 -msgid " --receive-all receive new messages of all accounts" -msgstr "" - -#: src/main.c:306 -msgid " --debug debug mode" -msgstr "" - -#: src/main.c:307 -msgid " --help display this help and exit" -msgstr "" - -#: src/main.c:308 -msgid " --version output version information and exit" -msgstr "" - -#: src/main.c:333 -msgid "Composing message exists. Really quit?" -msgstr "ÓÐÕýÔÚ׫дµÄÓʼþ¡£È·¶¨ÒªÍ˳öÂð£¿" - -#: src/main.c:340 -msgid "Queued messages" -msgstr "" - -#: src/main.c:341 -msgid "Some unsent messages are queued. Exit now?" -msgstr "" - -#. remote command mode -#: src/main.c:412 -msgid "another Sylpheed is already running.\n" -msgstr "" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "" - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/Îļþ(_F)/¸üÐÂÎļþ¼ÐÊ÷(_U)" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "" - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "" - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/Îļþ(_F)/µ¼ÈëmboxÎļþ..." - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "" - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/Îļþ(_F)/Áí´æΪ(_S)..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/Îļþ(_F)/´òÓ¡(_P)..." - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/Îļþ(_F)/Í˳ö(_X)" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/±à¼­(_E)/²éÕÒ(_S)" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/ÊÓͼ(_V)" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/ÊÓͼ(_V)/Îļþ¼ÐÊ÷(_F)" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/ÊÓͼ(_V)/ÓʼþÊÓͼ(_M)" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/ͼ±êºÍÎÄ×Ö(_A)" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/ͼ±ê(_I)" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/ÎÄ×Ö(_T)" - -#: src/mainwindow.c:364 -#, fuzzy -msgid "/_View/_Toolbar/_None" -msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/ͼ±ê(_I)" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/ÊÓͼ(_V)/״̬À¸(_S)" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/ÊÓͼ(_V)/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/ÊÓͼ(_V)/µ¥¶ÀµÄÎļþ¼ÐÊ÷(_o)" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/ÊÓͼ(_V)/µ¥¶ÀµÄÓʼþÊÓͼ(_e)" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/×Ô¶¯¼ì²â(_A)" - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/7λ ascii (US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/Î÷Å· (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/Î÷Å· (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/²¨ÂÞµÄÓï (ISO-8859-13)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/²¨ÂÞµÄÓï (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/Ï£À°Óï (ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÍÁ¶úÆäÓï (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/˹À­·òÓï (ISO-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/˹À­·òÓï (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/˹À­·òÓï (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÈÕÓï (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÈÕÓï (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÈÕÓï (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÈÕÓï (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/¼òÌåÖÐÎÄ (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/·±ÌåÖÐÎÄ (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/·±ÌåÖÐÎÄ (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÖÐÎÄ (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/³¯ÏÊÎÄ (EUC-_KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/³¯ÏÊÎÄ (ISO-2022-KR)" - -#: src/mainwindow.c:445 -#, fuzzy -msgid "/_Message/Get new ma_il" -msgstr "/Óʼþ(_M)/½ÓÊÕÐÂÓʼþ(_i)" - -#: src/mainwindow.c:446 -#, fuzzy -msgid "/_Message/Get from _all accounts" -msgstr "/Óʼþ(_M)/½ÓÊÕËùÓÐÕÊ»§µÄÐÂÓʼþ(_a)" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/Óʼþ(_M)/·¢ËͶÓÁÐÖеÄÓʼþ(_g)" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/Óʼþ(_M)/׫дÐÂÓʼþ(_n)" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/Óʼþ(_M)/»Ø¸´(_R)" - -#: src/mainwindow.c:454 -#, fuzzy -msgid "/_Message/Repl_y to sender" -msgstr "/Óʼþ(_M)/»Ø¸´(_R)" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/Óʼþ(_M)/»Ø¸´ËùÓÐÓʼþ(_l)" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/Óʼþ(_M)/ת·¢(_F)" - -#: src/mainwindow.c:457 -#, fuzzy -msgid "/_Message/Forward as a_ttachment" -msgstr "/Óʼþ(_M)/×÷Ϊ¸½¼þת·¢(_t)" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/Óʼþ(_M)/ÒƵ½...(_o)" - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "" - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/Óʼþ(_M)/ɾ³ý(_D)" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/Óʼþ(_M)/±ê¼Ç(_M)" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/±ê¼Ç(_M)" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/È¡Ïû±ê¼Ç(_U)" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/±ê¼ÇΪδ¶Á(_e)" - -#: src/mainwindow.c:468 -#, fuzzy -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/±ê¼ÇΪδ¶Á(_e)" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/Óʼþ(_M)/ÔÚд°¿Ú´ò¿ª(_w)" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/Óʼþ(_M)/ÏÔʾËùÓÐÍ·(_h)" - -#: src/mainwindow.c:474 -#, fuzzy -msgid "/_Message/Re-_edit" -msgstr "/Óʼþ(_M)/ÖØб༭(_e)" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/ժҪ(_S)" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/ÕªÒª(_S)/ɾ³ýÖظ´Óʼþ(_D)" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/ÕªÒª(_S)/Óʼþ¹ýÂËÆ÷(_F)" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/ÕªÒª(_S)/Ö´ÐÐ(_x)" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/ÕªÒª(_S)/¸üÐÂ(_U)" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/ժҪ(_S)/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/ÕªÒª(_S)/ÉÏÒ»ÌõÓʼþ(_P)" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/ÕªÒª(_S)/ÏÂÒ»ÌõÓʼþ(_N)" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/ÕªÒª(_S)/ÏÂÒ»Ìõδ¶ÁÓʼþ(_e)" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/ÕªÒª(_S)/µ½ÁíÒ»¸öÎļþ¼Ð(_G)" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´ÐòºÅÅÅÐò(_n)" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´´óСÅÅÐò(_i)" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´ÈÕÆÚÅÅÐò(_d)" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´·¢ÐÅÈËÅÅÐò(_f)" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´±êÌâÅÅÐò(_s)" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/¹ØÐĵıêÌâ(_A)" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/ÕªÒª(_S)/ÂÛÌâÊÓͼ(_T)" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/ÕªÒª(_S)/È¡ÏûÂÛÌâÊÓͼ(_h)" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/ÕªÒª(_S)/ÉèÖÃÏÔʾÏî...(_i)" - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/¹¤¾ß(_T)/ÈÕÖ¾´°¿Ú(_L)" - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/ÅäÖÃ(_C)" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/ÅäÖÃ(_C)/ͨÓÃÅäÖÃ...(_C)" - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "" - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/ÅäÖÃ(_C)/ÿ¸öÕÊ»§µÄÅäÖÃ(_P)" - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/ÅäÖÃ(_C)/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/ÅäÖÃ(_C)/´´½¨ÐÂÕÊ»§(_n)" - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/ÅäÖÃ(_C)/±à¼­ÕÊ»§...(_E)" - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/ÅäÖÃ(_C)/¸Ä±äµ±Ç°ÕÊ»§(_h)" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/°ïÖú(_H)/ÊÖ²á(_M)" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/°ïÖú(_H)/ÊÖ²á(_M)/Ó¢Óï(_E)" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/°ïÖú(_H)/ÊÖ²á(_M)/ÈÕÓï(_J)" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/°ïÖú(_H)/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "ÕýÔÚ´´½¨Ö÷´°¿Ú...\n" - -#: src/mainwindow.c:673 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "Ö÷´°¿Ú£º»ñÈ¡ %d ÑÕɫʧ°Ü\n" - -#: src/mainwindow.c:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "ÎÞ±êÌâ" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "ûÓÐ" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "µ±Ç°ÕË»§£º%s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "´°¿ÚλÖãºx = %d, y = %d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "" - -#: src/mainwindow.c:978 -msgid "" -"Input the location of mailbox.\n" -"If the existing mailbox is specified, it will be\n" -"scanned automatically." -msgstr "" - -#: src/mainwindow.c:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "" - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "" - -#: src/mainwindow.c:995 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:1141 -msgid "Setting widgets..." -msgstr "ÉèÖà widgets..." - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "»ñÈ¡" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "ÊÕÈ¡ÐÂÓʼþ" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "»ñÈ¡ËùÓеÄ" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "ÊÕÈ¡ËùÓÐÕË»§µÄÐÂÓʼþ" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "·¢ËÍÒÑÅŶӵÄÓʼþ" - -#: src/mainwindow.c:1370 src/prefs_account.c:503 src/prefs_common.c:638 -msgid "Compose" -msgstr "׫д" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "׫дÐÂÓʼþ" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "»ØÐÅ" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "»Ø¸´±¾Óʼþ" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "»Ø¸´ËùÓÐÓʼþ" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "»Ø¸´ËùÓÐÓʼþ" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "ת·¢" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "ת·¢¸ÃÓʼþ" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "ɾ³ý¸ÃÓʼþ" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "Ö´ÐÐ" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "Ö´Ðбê¼ÇµÄ½ø³Ì" - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "ÏÂÒ»¸öδ¶ÁµÄÓʼþ" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "Æ«ºÃ" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "ͨÓÃÅäÖÃ" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "ÕË»§" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "ÉèÖÃÕË»§" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit" -msgstr "Í˳ö" - -#: src/mainwindow.c:1659 src/summaryview.c:2540 -msgid "Exit this program?" -msgstr "ÒªÍ˳ö±¾³ÌÐò£¿" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "·¢ËÍÅŶÓÓʼþʧ°Ü¡£" - -#: src/mainwindow.c:1924 -#, c-format -msgid "forced charset: %s\n" -msgstr "Ç¿ÖÆ×Ö·û¼¯£º%s\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "´Ó %s »ñÈ¡Óʼþµ½ %s...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "²»ÄܶÁ mbox Îļþ¡£\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "ÎÞЧ mbox ¸ñʽ£º%s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "»ûÐ뵀 mbox: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "²»ÄÜ´ò¿ªÁÙʱÎļþ\n" - -#: 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 "²»ÄÜдÈëÁÙʱÎļþ\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "ÕÒµ½ %d ·âÓʼþ¡£\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "²»ÄÜ´´½¨ËøÎļþ %s\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "Èç¹û¿ÉÄÜÓà 'flock' ´úÌæ 'file'¡£\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "²»ÄÜ´´½¨ %s\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "ÁíÒ»¸ö½ø³ÌÓµÓиÃÓÊÏ䣬µÈ´ý...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "²»ÄÜËø %s\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "ÎÞЧËøÀàÐÍ\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "%s ²»ÄÜ¿ªËø \n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "²»ÄÜ°ÑÓÊÏäɾµ½Áã¡£\n" - -#: 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 "´´½¨ÓʼþÊÓͼ...\n" - -#: src/mh.c:155 -#, c-format -msgid "can't copy message %s to %s\n" -msgstr "²»ÄÜ°ÑÓʼþ %s ¸´ÖƵ½ %s\n" - -#: src/mh.c:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "²»ÄÜ´ò¿ª±ê¼ÇÎļþ¡£\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "" - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "±¾Ä¿Â¼µÄ×îºóÒ»¸öºÅÂë %s = %d\n" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "\tËÑË÷믧´æµÄÓʼþ... " - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "·¢ÏÖ %d ¸ö믧´æµÄÓʼþ\n" - -#: src/mh.c:813 -msgid "\tSorting uncached messages in numerical order... " -msgstr "\tÕýÔÚ¸ù¾Ý±àºÅÅÅÁÐ믧´æµÄÓʼþ... " - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/´ò¿ª(_O)" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "" - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/×÷ΪÎı¾ÎļþÏÔʾ(_D)" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "Áí´æΪ...(_S)" - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "MIME ÀàÐÍ" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "´´½¨ MIME ÊÓͼ...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "²»ÄÜ»ñµÃ¶à²¿·ÖÓʼþµÄÕâÒ»²¿·Ö¡£" - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "²»Äܱ£´æ¶à²¿·ÖÓʼþµÄÕâÒ»²¿·Ö¡£" - -#: src/mimeview.c:708 src/summaryview.c:2018 -msgid "Save as" -msgstr "Áí´æΪ" - -#: src/mimeview.c:714 src/summaryview.c:2023 -msgid "Overwrite" -msgstr "¸²¸Ç" - -#: src/mimeview.c:715 src/summaryview.c:2024 -msgid "Overwrite existing file?" -msgstr "¸²¸ÇÒÑ´æÔÚµÄÎļþ£¿" - -#: src/mimeview.c:769 -#, fuzzy -msgid "Open with" -msgstr "µ±Í˳öʱ" - -#: src/mimeview.c:770 -#, fuzzy, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"ÊäÈë´òÓ¡ÃüÁîÐÐ:\n" -"(ÓÃÎļþÃûÌæ´ú `%s')" - -#: src/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "MIME ²ì¿´Æ÷ÃüÁîÐÐÎÞЧ`%s'" - -#: src/news.c:93 -#, c-format -msgid "creating NNTP connection to %s:%d ...\n" -msgstr "´´½¨µ½ %s:%d µÄNNTPÁ¬½Ó...\n" - -#: src/news.c:176 -#, c-format -msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" -msgstr "µ½ %s:%d µÄNNTPÁ¬½ÓÒ»¶Ï¿ª¡£ÖØÐÂÁ¬½Ó...\n" - -#: src/news.c:245 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "ÎÄÕ %d ÒÑ»º´æ¹ý¡£\n" - -#: src/news.c:257 -#, fuzzy, c-format -msgid "can't select group %s\n" -msgstr "²»ÄÜÉèÖÃ×飺%s\n" - -#: src/news.c:262 -#, c-format -msgid "getting article %d...\n" -msgstr "ÕýÔÚÈ¡µÃÎÄÕ %d...\n" - -#: src/news.c:267 -#, c-format -msgid "can't read article %d\n" -msgstr "²»ÄܶÁÎÄÕ %d\n" - -#: src/news.c:299 -msgid "can't post article.\n" -msgstr "" - -#: src/news.c:323 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "²»ÄÜÕÒµ½ÎÄÕ %d\n" - -#: src/news.c:393 -#, c-format -msgid "can't set group: %s\n" -msgstr "²»ÄÜÉèÖÃ×飺%s\n" - -#: src/news.c:400 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "ÎÞЧÎÄÕ·¶Î§£º%d - %d\n" - -#: src/news.c:409 -msgid "no new articles.\n" -msgstr "ûÓÐÐÂÎÄÕ¡£\n" - -#: src/news.c:422 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "ÕýÔÚ»ñµÃ%sÀïµÄxover %d - %d ...\n" - -#: src/news.c:425 -msgid "can't get xover\n" -msgstr "²»ÄÜ»ñµÃxover\n" - -#: src/news.c:431 -msgid "error occurred while getting xover.\n" -msgstr "µ±»ñµÃxoverʱ·¢Éú´íÎó¡£\n" - -#: src/news.c:439 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "ÎÞЧxoverÐУº%s\n" - -#: src/news.c:456 src/news.c:481 -#, fuzzy -msgid "can't get xhdr\n" -msgstr "²»ÄÜ»ñµÃxover\n" - -#: src/news.c:464 src/news.c:489 -#, fuzzy -msgid "error occurred while getting xhdr.\n" -msgstr "µ±»ñµÃxoverʱ·¢Éú´íÎó¡£\n" - -#: src/news.c:613 -#, fuzzy, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "\tɾ³ýËùÓлº´æ¹ýµÄÎÄÕÂ..." - -#: src/news.c:642 -msgid "\tDeleting all cached articles... " -msgstr "\tɾ³ýËùÓлº´æ¹ýµÄÎÄÕÂ..." - -#: src/nntp.c:52 -#, c-format -msgid "Can't connect to NNTP server: %s:%d\n" -msgstr "²»ÄÜÁ¬½ÓNNTP·þÎñÆ÷£º%s:%d\n" - -#: src/nntp.c:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "ЭÒé´íÎó£º%s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "ЭÒé´íÎó\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "" - -#: src/passphrase.c:244 -#, c-format -msgid "" -"%sPlease enter the passphrase for:\n" -"\n" -" %.*s \n" -"(%.*s)\n" -msgstr "" - -#: src/passphrase.c:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "Ñé֤ʱ³ö´í\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "ÔÚÎʺòÐÅÏ¢ÖÐûÓз¢ÏÖÐèÒªµÄAPOPʱ¼ä±êÇ©¡£\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "ÔÚÎʺòÐÅÏ¢ÖÐʱ¼ä±êÇ©Óï·¨´í\n" - -#: src/pop.c:171 src/pop.c:212 -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:364 -#: src/prefs_account.c:378 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -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:409 -msgid "Opening account preferences window...\n" -msgstr "ÕýÔÚ´ò¿ªÕÊ»§ÅäÖô°¿Ú...\n" - -#: src/prefs_account.c:436 -#, c-format -msgid "Account%d" -msgstr "ÕÊ»§%d" - -#: src/prefs_account.c:449 -msgid "Preferences for new account" -msgstr "ÐÂÕÊ»§µÄÅäÖÃ" - -#: src/prefs_account.c:454 -msgid "Preferences for each account" -msgstr "Ϊÿһ¸öÕÊ»§µÄÅäÖÃ" - -#: src/prefs_account.c:477 -msgid "Creating account preferences window...\n" -msgstr "ÕýÔÚ´´½¨ÕÊ»§ÅäÖô°¿Ú...\n" - -#: src/prefs_account.c:497 -msgid "Basic" -msgstr "»ù±¾ÐÅÏ¢" - -#: src/prefs_account.c:499 src/prefs_common.c:634 -msgid "Receive" -msgstr "½ÓÊÕ" - -#: src/prefs_account.c:506 src/prefs_common.c:645 -msgid "Privacy" -msgstr "" - -#: src/prefs_account.c:509 -msgid "Advanced" -msgstr "¸ß¼¶" - -#: src/prefs_account.c:563 -msgid "Name of this account" -msgstr "ÕÊ»§Ãû³Æ" - -#: src/prefs_account.c:572 -msgid "Usually used" -msgstr "ͨ³£Ê¹ÓÃ" - -#: src/prefs_account.c:576 -msgid "Personal information" -msgstr "¸öÈË×ÊÁÏ" - -#: src/prefs_account.c:585 -msgid "Full name" -msgstr "È«Ãû" - -#: src/prefs_account.c:591 -msgid "Mail address" -msgstr "ÓʼþµØÖ·" - -#: src/prefs_account.c:597 -msgid "Organization" -msgstr "×éÖ¯" - -#: src/prefs_account.c:621 -msgid "Server information" -msgstr "·þÎñÆ÷×ÊÁÏ" - -#: src/prefs_account.c:642 -msgid "POP3 (normal)" -msgstr "POP3 £¨ÆÕͨ£©" - -#: src/prefs_account.c:644 -msgid "POP3 (APOP auth)" -msgstr "" - -#: src/prefs_account.c:646 -msgid "IMAP4" -msgstr "" - -#: src/prefs_account.c:648 -msgid "News (NNTP)" -msgstr "" - -#: src/prefs_account.c:650 -msgid "None (local)" -msgstr "ûÓÐ(±¾µØ)" - -#: src/prefs_account.c:672 -msgid "This server requires authentication" -msgstr "" - -#: src/prefs_account.c:711 -msgid "News server" -msgstr "" - -#: src/prefs_account.c:717 -msgid "Server for receiving" -msgstr "½ÓÊÕ·þÎñÆ÷" - -#: src/prefs_account.c:723 -msgid "SMTP server (send)" -msgstr "SMTP ·þÎñÆ÷ (·¢ËÍ)" - -#: src/prefs_account.c:730 -msgid "User ID" -msgstr "Óû§Ãû" - -#: src/prefs_account.c:736 -msgid "Password" -msgstr "ÃÜÂë" - -#: src/prefs_account.c:786 -msgid "POP3" -msgstr "" - -#: src/prefs_account.c:794 -msgid "Remove messages on server when received" -msgstr "Óʼþ½ÓÊÕÍêÒÔºó´Ó·þÎñÆ÷ɾ³ýÕâЩÓʼþ" - -#: src/prefs_account.c:796 -#, fuzzy -msgid "Download all messages on server" -msgstr "½ÓÊÕËùÓÐÔÚ·þÎñÆ÷ÉϵÄÓʼþ" - -#: src/prefs_account.c:799 -msgid "`Get all' checks for new mail on this account" -msgstr "" - -#: src/prefs_account.c:801 -msgid "Filter messages on receiving" -msgstr "ÔÚ½ÓÊÕÓʼþʱ¹ýÂË" - -#: src/prefs_account.c:838 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "ͷ" - -#: src/prefs_account.c:845 -msgid "Add Date header field" -msgstr "Ìí¼ÓÈÕÆÚÍ·Óò" - -#: src/prefs_account.c:846 -msgid "Generate Message-ID" -msgstr "Éú³ÉÓʼþʶ±ðºÅ" - -#: src/prefs_account.c:853 -msgid "Add user-defined header" -msgstr "Ìí¼ÓÓû§¶¨ÒåµÄÍ·" - -#: src/prefs_account.c:855 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr "±à¼­..." - -#: src/prefs_account.c:865 -msgid "Automatically set following addresses" -msgstr "×Ô¶¯ÉèÖÃÒÔϵØÖ·" - -#: src/prefs_account.c:874 -msgid "Cc" -msgstr "³­ËÍ" - -#: src/prefs_account.c:887 -msgid "Bcc" -msgstr "°µ³­ËÍ" - -#: src/prefs_account.c:900 -msgid "Reply-To" -msgstr "»Ö¸´¸ø" - -#: src/prefs_account.c:913 -msgid "Authentication" -msgstr "" - -#: src/prefs_account.c:921 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "" - -#: src/prefs_account.c:923 -msgid "Authenticate with POP3 before sending" -msgstr "" - -#: src/prefs_account.c:957 -msgid "Signature file" -msgstr "Ç©ÃûÎļþ" - -#: src/prefs_account.c:986 -msgid "Sign key" -msgstr "" - -#: src/prefs_account.c:994 -msgid "Use default GnuPG key" -msgstr "" - -#: src/prefs_account.c:1003 -msgid "Select key by your email address" -msgstr "" - -#: src/prefs_account.c:1012 -msgid "Specify key manually" -msgstr "" - -#: src/prefs_account.c:1028 -msgid "User or key ID:" -msgstr "" - -#: src/prefs_account.c:1073 -msgid "Specify SMTP port" -msgstr "ÌØÊâµÄSMTP¶Ë¿Ú" - -#: src/prefs_account.c:1085 -msgid "Specify POP3 port" -msgstr "ÌØÊâµÄPOP3¶Ë¿Ú" - -#: src/prefs_account.c:1097 -msgid "Specify domain name" -msgstr "ÌØÊâÓòÃû" - -#: src/prefs_account.c:1144 -msgid "Mail address is not entered." -msgstr "ÓʼþµØַûÊäÈë¡£" - -#: src/prefs_account.c:1149 -msgid "SMTP server is not entered." -msgstr "SMTP·þÎñÆ÷ûÊäÈë¡£" - -#: src/prefs_account.c:1154 -msgid "User ID is not entered." -msgstr "Óû§ÃûûÊäÈë¡£" - -#: src/prefs_account.c:1159 -msgid "POP3 server is not entered." -msgstr "POP3·þÎñÆ÷ûÊäÈë¡£" - -#: src/prefs_account.c:1164 -msgid "IMAP4 server is not entered." -msgstr "IMAP4·þÎñÆ÷ûÊäÈë¡£" - -#: src/prefs_account.c:1169 -msgid "NNTP server is not entered." -msgstr "NNTP·þÎñÆ÷ûÊäÈë¡£" - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "´´½¨Í¨ÓÃÅäÖô°¿Ú...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "ͨÓÃÅäÖÃ" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "ÏÔʾ" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "Óʼþ" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "½çÃæ" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "ÆäËû" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "Íⲿ³ÌÐò" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "ÓÃÍⲿ³ÌÐòºÏ²¢" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "³ÌÐò·¾¶" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "±¾µØ spool" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "´ÓspoolºÏ²¢" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "Ôںϲ¢ÉϵĹýÂËÆ÷" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "Spool Ŀ¼" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "×Ô¶¯¼ì²éÐÂÓʼþ" - -#: src/prefs_common.c:759 -msgid "each" -msgstr "ÿһ¸ö" - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "·ÖÖÓ" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "ÔÚÆô¶¯Ê±¼à²éÓʼþ" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "н¨" - -#: src/prefs_common.c:790 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" - -#: src/prefs_common.c:858 -msgid "Use external program for sending" -msgstr "ÓÃÍⲿ³ÌÐò·¢ËÍ" - -#: src/prefs_common.c:882 -#, fuzzy -msgid "Save sent messages to outbox" -msgstr "½«ÒÑ·¢³öµÄÓʼþ±£´æÔÚ·¢¼þÏä" - -#: src/prefs_common.c:884 -#, fuzzy -msgid "Queue messages that fail to send" -msgstr "½«·¢ËÍʧ°ÜµÄÓʼþÅŶÓ" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "ËͳöµÄ×Ö·û¼¯" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "×Ô¶¯" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "7λ ascii (US-ASCII) " - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "Î÷Å· (ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "ÖÐÅ· (ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "²¨ÂÞµÄÓï (ISO-8859-13)" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "²¨ÂÞµÄÓï (ISO-8859-4)" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "Ï£À°Óï (ISO-8859-7)" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "ÍÁ¶úÆäÓï (ISO-8859-9)" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "˹À­·òÓï (ISO-8859-5)" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "˹À­·òÓï (KOI8-R)" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "˹À­·òÓï (Windows-1251)" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "˹À­·òÓï (KOI8-U)" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "ÈÕÓï (ISO-2022-JP)" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "ÈÕÓï (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "ÈÕÓï (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "¼òÌåÖÐÎÄ (GB2312)" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "·±ÌåÖÐÎÄ (Big5)" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "·±ÌåÖÐÎÄ (EUC-TW)" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "ÖÐÎÄ (ISO-2022-CN)" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "³¯ÏÊÎÄ (EUC-KR)" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "¸½¼ÓÔ­ÎÄ" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "µ±»ØÐÅʱ¸½¼ÓÔ­ÎÄ" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "¸½¼ÓÔ­ÎĵıêÖ¾" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "¸½¼ÓÔ­Îĵĸñʽ:" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr "·ûºÅµÄÃèÊö" - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "×Ô¶¯²åÈëÇ©Ãû" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "Ç©Ãû·Ö¸î·û" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "°ü×°Óʼþ" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "×Ö·û" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "°ü×°Ô­ÎÄ" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "ÔÚ·¢ËÍÇ°°ü×°" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "×ÖÌå" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "" - -#: src/prefs_common.c:1160 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "·­ÒëÍ·Ãû(Èç`·¢ÐÅÈË', `±êÌâ:')" - -#: src/prefs_common.c:1163 -msgid "Display unread number next to folder name" -msgstr "" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "" - -#: src/prefs_common.c:1176 -msgid "Display recipient on `From' column if sender is yourself" -msgstr "Èç¹û·¢ÐÅÕßÊÇÄã×Ô¼º£¬ÔÚ `´Ó' ÁÐÏÔʾ½ÓÊÜÕß" - -#: src/prefs_common.c:1178 -msgid "Enable horizontal scroll bar" -msgstr "" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr "ÉèÖÃÕªÒªµÄÏÔʾÌõÄ¿... " - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "ʹÓʼþ²ÊÉ«±íʾÉúЧ" - -#: src/prefs_common.c:1297 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "ÓÃ1-×Ö½Ú×Ö·ûÏÔʾ2-×Ö½Ú×ÖĸºÍÊý×Ö" - -#: src/prefs_common.c:1299 -msgid "Display header pane above message view" -msgstr "" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "ÔÚÓʼþÊÓͼÉÏÏÔʾ¶ÌÍ·" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "Ðмä¾à" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "ÔÚÍ·ÉÏÁô³ö¿Õ¼ä" - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "" - -#: src/prefs_common.c:1554 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "Ä£·Â Emacs ÀàÓʼþÈí¼þµÄÊó±ê²Ù×÷ÐÐΪ" - -#: src/prefs_common.c:1561 -msgid "Open first unread message when entering a folder" -msgstr "ÔÚ½øÈëÎļþ¼Ðʱ´ò¿ªµÚÒ»¸öûÓжÁ¹ýµÄÓʼþ" - -#: src/prefs_common.c:1565 -msgid "Go to inbox after receiving new mail" -msgstr "" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "" - -#: src/prefs_common.c:1580 -msgid "" -"(Messages will be just marked till execution\n" -" if this is turned off)" -msgstr "" - -#: src/prefs_common.c:1587 -msgid "Add address to destination when double-clicked" -msgstr "" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "µ±Í˳öʱ" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "µ±Í˳öʱȷÈÏ" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "" - -#: src/prefs_common.c:1648 -#, c-format -msgid "External Web browser (%s will be replaced with URI)" -msgstr "Íⲿä¯ÀÀÆ÷£¨%s ½«±»URLÈ¡´ú£©" - -#: src/prefs_common.c:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "ÃüÁî" - -#: src/prefs_common.c:1673 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "´òÓ¡ £¨%s ½«±»ÎļþÃûÈ¡´ú£©" - -#: src/prefs_common.c:1689 -#, c-format -msgid "External editor (%s will be replaced with file name)" -msgstr "Íⲿ±à¼­Æ÷£¨%s ½«±»ÎļþÃûÈ¡´ú£©" - -#: src/prefs_common.c:1752 -msgid "Set message colors" -msgstr "" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "·ûºÅÃèÊö" - -#: src/prefs_common.c:2052 -#, 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:2155 -msgid "Set display item" -msgstr "É趨ÏÔʾµÄÏîÄ¿" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "±ê¼Ç" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "ÐòºÅ" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "ÈÕÆÚ" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "´Ó(From)" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "±êÌâ" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "×ÖÌåÑ¡Ôñ" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "" - -#: src/prefs_customheader.c:150 -#, fuzzy -msgid "Creating custom header setting window...\n" -msgstr "´´½¨±êÌâ´°¿Ú...\n" - -#: src/prefs_customheader.c:168 -#, fuzzy -msgid "Custom header setting" -msgstr "/×÷ΪÎı¾ÎļþÏÔʾ(_D)" - -#: src/prefs_customheader.c:212 -msgid "Value" -msgstr "" - -#: src/prefs_customheader.c:320 -#, fuzzy -msgid "Reading custom header configuration...\n" -msgstr "ÕýÔÚ¶ÁÈ¡¹ýÂËÆ÷ÅäÖÃ...\n" - -#: src/prefs_customheader.c:365 -#, fuzzy -msgid "Writing custom header configuration...\n" -msgstr "ÕýÔÚд¹ýÂËÆ÷ÅäÖÃ...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "Í·ÃûûÉ趨¡£" - -#: src/prefs_customheader.c:541 -#, fuzzy -msgid "Delete header" -msgstr "ɾ³ýÎļþ¼Ð" - -#: src/prefs_customheader.c:542 -#, fuzzy -msgid "Do you really want to delete this header?" -msgstr "ÄãȷʵÏëҪɾ³ý¸Ã¹æÔòÂð£¿" - -#: src/prefs_display_header.c:187 -#, fuzzy -msgid "Creating display header setting window...\n" -msgstr "´´½¨±êÌâ´°¿Ú...\n" - -#: src/prefs_display_header.c:210 -#, fuzzy -msgid "Display header setting" -msgstr "/×÷ΪÎı¾ÎļþÏÔʾ(_D)" - -#: src/prefs_display_header.c:237 -#, fuzzy -msgid "Header name" -msgstr "ͷ" - -#: src/prefs_display_header.c:269 -#, fuzzy -msgid "Displayed Headers" -msgstr "ÏÔʾ %s µÄ±êÌâ...\n" - -#: src/prefs_display_header.c:327 -#, fuzzy -msgid "Hidden headers" -msgstr "ͷ" - -#: src/prefs_display_header.c:357 -#, fuzzy -msgid "Show all unspecified headers" -msgstr "/ÏÔʾËùÓÐÍ·(_h)" - -#: src/prefs_display_header.c:382 -#, fuzzy -msgid "Reading configuration for displaying headers...\n" -msgstr "ÕýÔÚ¶ÁÈ¡ÅäÖÃÎļþ...\n" - -#: src/prefs_display_header.c:420 -#, fuzzy -msgid "Writing configuration for displaying headers...\n" -msgstr "ÕýÔÚд¹ýÂËÆ÷ÅäÖÃ...\n" - -#: src/prefs_display_header.c:552 -#, fuzzy -msgid "This header is already in the list." -msgstr "Îļþ¼Ð`%s'ÒÑ´æÔÚ¡£" - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "ÒÑ×¢²áµÄ¹æÔò" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "²Ù×÷·û" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(ÎÞ)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "¹Ø¼ü´Ê" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "ν´Ê" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "°üº¬" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "ûÓаüº¬" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "Ä¿µÄÎļþ" - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "ʹÓÃÕý¹æ±í´ïʽ" - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "²»ÄܽÓÊÜ" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "×¢²á" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr "Ìæ´ú" - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "ÕýÔÚ¶ÁÈ¡¹ýÂËÆ÷ÅäÖÃ...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "ÕýÔÚд¹ýÂËÆ÷ÅäÖÃ...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "( Р)" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "Ä¿µÄûÓÐÉ趨¡£" - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "ɾ³ý¹æÔò" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -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:457 -msgid "Mark file not found.\n" -msgstr "û·¢ÏÖ±ê¼ÇµÄÎļþ¡£\n" - -#: src/procmsg.c:459 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "±ê¼Ç°æ±¾²»Í¬£¨%d != %d£©¡£¶ªµôËü¡£\n" - -#: src/procmsg.c:475 -msgid "Can't open mark file with append mode.\n" -msgstr "²»ÄÜÓÃÌí¼Óģʽ´ò¿ª±ê¼ÇÎļþ¡£\n" - -#: src/procmsg.c:480 -msgid "Can't open mark file with write mode.\n" -msgstr "²»ÄÜÓÃдģʽ´ò¿ª±ê¼ÇÎļþ¡£\n" - -#: src/procmsg.c:663 -msgid "Sending queued message failed.\n" -msgstr "·¢ËÍÅŶӵÄÓʼþʧ°Ü¡£\n" - -#: src/procmsg.c:720 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "´òÓ¡ÃüÁîÐв»´æÔÚ£º`%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "ÕýÔÚ´´½¨¹ý³Ì¶Ô»°¿ò...\n" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "ÔÚÕÒ»ØÊý¾Ýʱ·¢Éú´íÎó¡£\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "²»ÄÜдÎļþ¡£\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "" - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr "" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "ÅŶӵÄÓʼþÍ·±»´ò¶Ï¡£\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "" - -#: src/send.c:250 -#, fuzzy, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "ÕýÔÚÁª½Ó SMTP ·þÎñÆ÷£º%s ...\n" - -#: src/send.c:254 -msgid "Connecting" -msgstr "" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "" - -#: src/send.c:262 -#, fuzzy -msgid "Sending" -msgstr "·¢ËÍ" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "" - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "" - -#: src/send.c:292 -#, fuzzy, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "ÕýÔÚÈ¡»ØÓʼþ (%d / %d) (%d / %d bytes)" - -#: src/send.c:309 -#, fuzzy -msgid "Quitting..." -msgstr "Í˳ö" - -#: src/send.c:330 -#, c-format -msgid "Can't connect to SMTP server: %s:%d\n" -msgstr "²»ÄÜÁª½Ó SMTP ·þÎñÆ÷£º%s:%d\n" - -#: src/send.c:341 -msgid "Error occurred while sending HELO\n" -msgstr "ÔÚ·¢ËÍHELOʱ·¢Éú´íÎó\n" - -#: src/send.c:357 -#, fuzzy -msgid "Sending message" -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:289 -msgid "/M_ove..." -msgstr "/Òƶ¯...(_o)" - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/¸´ÖÆ...(_C)" - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/Ö´ÐÐ(_x)" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/±ê¼Ç(_M)" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/±ê¼Ç(_M)/±ê¼Ç(_M)" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/±ê¼Ç(_M)/È¡Ïû±ê¼Ç(_U)" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/±ê¼Ç(_M)/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "/±ê¼Ç(_M)/±ê¼Ç³Éδ¶Á(_e)" - -#: src/summaryview.c:298 -#, fuzzy -msgid "/_Mark/Mark as rea_d" -msgstr "/±ê¼Ç(_M)/±ê¼Ç³Éδ¶Á(_e)" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/»Ø¸´(_R)" - -#: src/summaryview.c:302 -#, fuzzy -msgid "/Repl_y to sender" -msgstr "/»Ø¸´ËùÓеÄ(_l)" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/»Ø¸´ËùÓеÄ(_l)" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/ת·¢(_F)" - -#: src/summaryview.c:305 -#, fuzzy -msgid "/Forward as a_ttachment" -msgstr "×÷Ϊ¸½¼þת·¢(_t)" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/ÔÚд°¿ÚÖдò¿ª(_w)" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/ÏÔʾËùÓÐÍ·(_h)" - -#: src/summaryview.c:311 -#, fuzzy -msgid "/Re-_edit" -msgstr "/ÖØб༭(_e)" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/´òÓ¡...(_P)" - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "ȫѡ(_a)" - -#: src/summaryview.c:322 -msgid "M" -msgstr "" - -#: src/summaryview.c:322 -msgid "U" -msgstr "" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "´´½¨ÕªÒªÊÓͼ...\n" - -#: src/summaryview.c:352 -msgid "No." -msgstr "" - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "½ø³Ì±êÖ¾" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "ÓÐЩ±ê¼ÇÁôÏÂÀ´ÁË¡£Ö´ÐÐÂð£¿" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "¿ÕÎļþ¼Ð\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "ɨÃèÎļþ¼Ð(%s)..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "Íê³É¡£" - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "ûÓÐδ¶ÁµÄÓʼþ" - -#: src/summaryview.c:816 -msgid "No unread message found. Go to next folder?" -msgstr "û·¢ÏÖδ¶ÁµÄÓʼþ¡£µ½ÏÂÒ»¸öÎļþ¼Ð?" - -#: src/summaryview.c:957 src/summaryview.c:959 -msgid "Attracting messages by subject..." -msgstr "ÕýÔÚ°´±êÌâÊÕ¼¯¸ÐÐËȤµÄÓʼþ..." - -#: src/summaryview.c:1102 -#, c-format -msgid "%d deleted" -msgstr "%d ¸öɾ³ý" - -#: src/summaryview.c:1106 -#, c-format -msgid "%s%d moved" -msgstr "%s%d ¸öÒƶ¯" - -#: src/summaryview.c:1107 src/summaryview.c:1114 -msgid ", " -msgstr "£¬ " - -#: src/summaryview.c:1112 -#, c-format -msgid "%s%d copied" -msgstr "" - -#: src/summaryview.c:1129 -msgid " item(s) selected" -msgstr "ÏîÑ¡ÔñÁË" - -#: src/summaryview.c:1140 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d ¸öеÄ, %d ¸öδ¶Á, ¹² %d ¸ö(%s)" - -#: src/summaryview.c:1146 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d ¸öеÄ, %d ¸öδ¶Á, ¹² %d ¸ö" - -#: src/summaryview.c:1187 src/summaryview.c:1188 -msgid "Sorting summary..." -msgstr "ÕýÔÚÅÅÁÐÕªÒª..." - -#: src/summaryview.c:1226 -msgid "\tSetting summary from message data..." -msgstr "\tÕýÔÚ´ÓÓʼþÊý¾ÝÖÐÉèÖÃÕªÒª..." - -#: src/summaryview.c:1228 -msgid "Setting summary from message data..." -msgstr "ÕýÔÚ´ÓÓʼþÊý¾ÝÖÐÉèÖÃÕªÒª..." - -#: src/summaryview.c:1337 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "ÕýÔÚдժҪ»º´æ(%s)..." - -#: src/summaryview.c:1389 -msgid "(No Date)" -msgstr "(ûÓÐÊý¾Ý)" - -#: src/summaryview.c:1654 -#, c-format -msgid "Message %d is marked\n" -msgstr "Óʼþ %d ±»±ê¼Ç\n" - -#: src/summaryview.c:1683 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "Óʼþ %d ±»±ê¼ÇΪÒѶÁ\n" - -#: src/summaryview.c:1718 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "Óʼþ %d ±»±ê¼Ç³Éδ¶Á\n" - -#: src/summaryview.c:1760 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "Óʼþ %s/%d ÉèÖÃΪɾ³ý\n" - -#: src/summaryview.c:1774 -msgid "Current folder is Trash." -msgstr "µ±Ç°µÄÎļþ¼ÐÊÇÀ¬»øÏä." - -#: src/summaryview.c:1796 src/summaryview.c:1798 -msgid "Deleting duplicated messages..." -msgstr "ÕýÔÚɾ³ýÖظ´Îļþ..." - -#: src/summaryview.c:1848 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "Óʼþ %s/%d È¡Ïû±ê¼Ç\n" - -#: src/summaryview.c:1885 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "Óʼþ %d ÉèÖÃΪÒƵ½ %s\n" - -#: src/summaryview.c:1897 -msgid "Destination is same as current folder." -msgstr "Ä¿±êÓ뵱ǰÎļþ¼ÐÏàͬ." - -#: src/summaryview.c:1946 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "" - -#: src/summaryview.c:1959 -msgid "Destination to copy is same as current folder." -msgstr "" - -#: src/summaryview.c:1991 -msgid "Selecting all messages..." -msgstr "Ñ¡ÔñËùÓÐÓʼþ..." - -#: src/summaryview.c:2045 -msgid "Print" -msgstr "´òÓ¡" - -#: src/summaryview.c:2046 -#, c-format -msgid "" -"Enter the print command line:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"ÊäÈë´òÓ¡ÃüÁîÐÐ:\n" -"(ÓÃÎļþÃûÌæ´ú `%s')" - -#: src/summaryview.c:2052 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"´òÓ¡ÃüÁîÐÐÎÞЧ:\n" -"`%s'" - -#: src/summaryview.c:2274 src/summaryview.c:2275 -msgid "Building threads..." -msgstr "ÕýÔÚ´´½¨ÂÛÌâ..." - -#: src/summaryview.c:2297 src/summaryview.c:2298 -msgid "Unthreading..." -msgstr "ÕýÔÚÈ¡ÏûÂÛÌâ..." - -#: src/summaryview.c:2320 -msgid "Unthreading for execution..." -msgstr "ÕýÔÚΪִÐÐÈ¡ÏûÂÛÌâ..." - -#: src/summaryview.c:2407 -msgid "filtering..." -msgstr "ÕýÔÚ¹ýÂË..." - -#: src/summaryview.c:2408 -msgid "Filtering..." -msgstr "ÕýÔÚ¹ýÂË..." - -#: src/summaryview.c:2514 -#, c-format -msgid "Go to %s\n" -msgstr "µ½ %s\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "´´½¨Îı¾ÊÓͼ...\n" - -#: src/textview.c:366 -#, fuzzy -msgid "To save this part, pop up the context menu with " -msgstr "±£´æ¸Ã²¿·ÖÐèҪʹÓÃÉÏÏÂÎÄÃô¸ÐµÄµ¯³ö²Ëµ¥\n" - -#: src/textview.c:367 -#, fuzzy -msgid "right click and select `Save as...', " -msgstr "" -"ÓÒ»÷²¢Ñ¡Ôñ`Áí´æΪ...', »ò°´`y'¼ü.\n" -"\n" - -#: src/textview.c:368 -#, fuzzy -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"`ÒÔÎı¾·½Ê½ÏÔʾ', »ò°´`t'¼ü. \n" -"\n" - -#: src/textview.c:370 -#, fuzzy -msgid "To display this part as a text message, select " -msgstr "ÒÔÎı¾Óʼþ·½Ê½ÏÔʾ¸Ã²¿·Ö, Ñ¡Ôñ\n" - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"`ÒÔÎı¾·½Ê½ÏÔʾ', »ò°´`t'¼ü. \n" -"\n" - -#: src/textview.c:373 -#, fuzzy -msgid "To open this part with external program, select " -msgstr "ΪÁËÓÃÍⲿ³ÌÐò´ò¿ª¸Ã²¿·Ö, Ñ¡Ôñ`´ò¿ª',\n" - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "" - -#: src/textview.c:375 -#, fuzzy -msgid "or double-click, or click the center button, " -msgstr "»òË«»÷, »ò»÷Öмü, »ò°´`l'¼ü." - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "" - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "" - -#: src/utils.c:1547 -#, c-format -msgid "writing to %s failed.\n" -msgstr "Ïò %s дÈëʧ°Ü¡£\n" - -#: src/utils.c:1588 -#, fuzzy, c-format -msgid "move_file(): file %s already exists." -msgstr "Îļþ¼Ð`%s'ÒÑ´æÔÚ¡£" - -#: src/utils.c:1729 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "´ò¿ª URL ÃüÁîÐÐÎÞЧ£º`%s'" - -#~ msgid "deleting message %d...\n" -#~ msgstr "ÕýÔÚɾ³ýÓʼþ %d...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/²»ÏÔʾ(_N)" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/±ê¼ÇΪÒѶÁ(_b)" - -#~ msgid "deleting article %d...\n" -#~ msgstr "ÕýÔÚɾ³ýÎÄÕ %d...\n" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/±ê¼Ç(_M)/±ê¼Ç³ÉÒѶÁ(_M)" - -#, fuzzy -#~ msgid "Show other headers" -#~ msgstr "/ÏÔʾËùÓÐÍ·(_h)" - -#~ msgid "Receive at getting from all accounts" -#~ msgstr "½ÓÊÕ´ÓËùÓÐÕÊ»§ÉÏÈ¡µÃµÄÓʼþ" - -#~ msgid "SunMonTueWedThuFriSat" -#~ msgstr "ÈÕÒ»¶þÈýËÄÎåÁù" - -#~ 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 "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 "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 "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.po b/po/zh_TW.Big5.po deleted file mode 100644 index 12199b772..000000000 --- a/po/zh_TW.Big5.po +++ /dev/null @@ -1,4207 +0,0 @@ -# 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-07-01 10:22+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:90 -msgid "About" -msgstr "Ãö©ó" - -#: src/about.c:199 -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:205 -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:210 -msgid "" -"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" -"\n" -msgstr "" - -#: src/about.c:214 -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:220 -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:226 -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:233 src/addressbook.c:1293 src/alertpanel.c:232 -#: src/compose.c:1476 src/compose.c:3132 src/export.c:185 src/foldersel.c:177 -#: src/import.c:189 src/inputdialog.c:160 src/main.c:341 src/main.c:349 -#: src/mainwindow.c:1660 src/mimeview.c:716 src/passphrase.c:119 -#: src/prefs.c:467 src/prefs_common.c:1821 src/prefs_common.c:2065 -#: src/prefs_common.c:2181 src/prefs_customheader.c:162 -#: src/prefs_display_header.c:203 src/summaryview.c:2027 -#: src/summaryview.c:2543 -msgid "OK" -msgstr "½T©w" - -#: src/account.c:106 -msgid "Reading all config for each account...\n" -msgstr "Ū¨ú©Ò¦³±b¸¹ªº³]©w¤¤...\n" - -#: src/account.c:121 -#, c-format -msgid "Found label: %s\n" -msgstr "§ä¨ì¼ÐÅÒ: %s\n" - -#: src/account.c:213 -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:219 -msgid "Opening account edit window...\n" -msgstr "¶}±Ò±b¸¹½s¿èµøµ¡¤¤...\n" - -#: src/account.c:367 -msgid "Creating account edit window...\n" -msgstr "²£¥Í±b¸¹½s¿èµøµ¡¤¤...\n" - -#: src/account.c:372 -msgid "Edit accounts" -msgstr "½s¿è±b¸¹³]©w" - -#: src/account.c:400 src/addressbook.c:318 src/addressbook.c:1289 -#: src/compose.c:2244 src/mimeview.c:139 src/select-keys.c:301 -msgid "Name" -msgstr "¦WºÙ" - -#: src/account.c:401 src/prefs_account.c:638 -msgid "Protocol" -msgstr "³q°T¨ó©w" - -#: src/account.c:402 -msgid "Server" -msgstr "¦øªA¾¹" - -#: src/account.c:424 src/addressbook.c:439 src/prefs_customheader.c:240 -#: src/prefs_display_header.c:287 src/prefs_display_header.c:342 -msgid "Add" -msgstr "·s¼W" - -#: src/account.c:430 -msgid "Edit" -msgstr "½s¿è" - -#: src/account.c:436 src/prefs_customheader.c:247 -msgid " Delete " -msgstr "§R°£" - -#: src/account.c:442 src/prefs_customheader.c:294 -#: src/prefs_display_header.c:306 src/prefs_filter.c:438 -msgid "Down" -msgstr "¦V¤U" - -#: src/account.c:448 src/prefs_customheader.c:288 -#: src/prefs_display_header.c:300 src/prefs_filter.c:432 -msgid "Up" -msgstr "¦V¤W" - -#: src/account.c:462 -msgid " Set as usually used account " -msgstr "³]¬°¹w³]±b¸¹" - -#: src/account.c:468 src/prefs_filter.c:198 src/summary_search.c:192 -msgid "Close" -msgstr "Ãö³¬" - -#: src/account.c:522 -msgid "Delete account" -msgstr "§R°£±b¸¹" - -#: src/account.c:523 -msgid "Do you really want to delete this account?" -msgstr "±z½T©w­n§R°£³o­Ó±b¸¹¶Ü¡H" - -#: src/account.c:524 src/addressbook.c:579 src/addressbook.c:1224 -#: src/compose.c:3306 src/folderview.c:1507 src/folderview.c:1550 -#: src/folderview.c:1649 src/folderview.c:1690 src/folderview.c:1789 -#: src/folderview.c:1822 src/mainwindow.c:950 src/prefs_customheader.c:543 -#: src/prefs_filter.c:721 src/summary_search.c:297 src/summaryview.c:575 -#: src/summaryview.c:817 -msgid "Yes" -msgstr "¬Oªº" - -#: src/account.c:524 src/compose.c:3306 src/folderview.c:1507 -#: src/folderview.c:1550 src/folderview.c:1649 src/folderview.c:1690 -#: src/folderview.c:1789 src/folderview.c:1822 -msgid "+No" -msgstr "+¤£­n" - -#: src/addressbook.c:229 src/compose.c:375 src/mainwindow.c:333 -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:379 -#: src/mainwindow.c:344 src/mainwindow.c:347 -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:380 src/mainwindow.c:348 -msgid "/_File/_Close" -msgstr "/ÀÉ®×(_F)/Ãö³¬(_C)" - -#: src/addressbook.c:238 src/compose.c:419 src/mainwindow.c:521 -msgid "/_Help" -msgstr "/»¡©ú(_H)" - -#: src/addressbook.c:239 src/compose.c:420 src/mainwindow.c:526 -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:369 -#: src/folderview.c:210 src/folderview.c:213 src/folderview.c:222 -#: src/folderview.c:225 src/folderview.c:234 src/folderview.c:236 -#: src/summaryview.c:300 src/summaryview.c:307 src/summaryview.c:312 -#: src/summaryview.c:315 -msgid "/---" -msgstr "/---" - -#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:382 -#: src/mainwindow.c:351 -msgid "/_Edit" -msgstr "/½s¿è(_E)" - -#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:291 -msgid "/_Delete" -msgstr "/§R°£(_D)" - -#: src/addressbook.c:318 -msgid "E-Mail address" -msgstr "E-Mail¦ì§}" - -#: src/addressbook.c:318 src/addressbook.c:1291 -msgid "Remarks" -msgstr "³Æµù" - -#: src/addressbook.c:325 src/compose.c:2804 -msgid "Address book" -msgstr "¦ì§}ï" - -#: src/addressbook.c:413 -msgid "Name:" -msgstr "©m¦W¡G" - -#: src/addressbook.c:436 src/addressbook.c:1224 src/mainwindow.c:1405 -#: src/prefs_display_header.c:293 src/prefs_display_header.c:349 -#: src/prefs_filter.c:398 -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:1224 src/mainwindow.c:950 -#: src/prefs_customheader.c:543 src/prefs_filter.c:721 -#: src/summary_search.c:297 src/summaryview.c:575 src/summaryview.c:817 -msgid "No" -msgstr "¤£­n" - -#: src/addressbook.c:1000 src/folderview.c:1380 src/folderview.c:1581 -msgid "New folder" -msgstr "·s¸ê®Æ§¨" - -#: src/addressbook.c:1001 src/folderview.c:1381 -msgid "Input the name of new folder:" -msgstr "½Ð¿é¤J·s¸ê®Æ§¨ªº¦WºÙ¡G" - -#: src/addressbook.c:1002 src/folderview.c:1382 src/folderview.c:1585 -msgid "NewFolder" -msgstr "·s¸ê®Æ§¨" - -#: src/addressbook.c:1013 src/addressbook.c:1058 src/addressbook.c:1135 -#: src/addressbook.c:1187 -msgid "The name already exists." -msgstr "³o­Ó¦W¦r¤w¸g¦s¦b" - -#: src/addressbook.c:1045 -msgid "New group" -msgstr "·s¸s²Õ" - -#: src/addressbook.c:1046 -msgid "Input the name of new group:" -msgstr "½Ð¿é¤J·sªº¸s²Õ¦WºÙ¡G" - -#: src/addressbook.c:1047 -msgid "NewGroup" -msgstr "·s¸s²Õ" - -#: src/addressbook.c:1122 -msgid "Edit group" -msgstr "½s¿è¸s²Õ" - -#: src/addressbook.c:1123 -msgid "Input the new name of group:" -msgstr "½Ð¿é¤J·sªº¸s²Õ¦WºÙ¡G" - -#: src/addressbook.c:1173 -msgid "Edit folder" -msgstr "½s¿è¸ê®Æ§¨" - -#: src/addressbook.c:1174 -msgid "Input the new name of folder:" -msgstr "½Ð¿é¤J·sªº¸ê®Æ§¨¦WºÙ¡G" - -#: src/addressbook.c:1223 -#, c-format -msgid "Really delete `%s' ?" -msgstr "±z½T©w­n§R°£ `%s' ? " - -#: src/addressbook.c:1271 -msgid "Edit address" -msgstr "½s¿è¦ì§}¬ö¿ý" - -#: src/addressbook.c:1290 src/compose.c:2803 src/select-keys.c:302 -msgid "Address" -msgstr "¦ì§}" - -#: src/addressbook.c:1294 src/compose.c:1476 src/compose.c:3133 -#: src/compose.c:3703 src/export.c:186 src/foldersel.c:178 src/import.c:190 -#: src/inputdialog.c:161 src/main.c:341 src/main.c:349 src/mainwindow.c:1660 -#: src/mimeview.c:716 src/passphrase.c:123 src/prefs.c:468 -#: src/prefs_common.c:2182 src/prefs_customheader.c:163 -#: src/prefs_display_header.c:204 src/progressdialog.c:75 -#: src/select-keys.c:326 src/summaryview.c:575 src/summaryview.c:2027 -#: src/summaryview.c:2543 -msgid "Cancel" -msgstr "¨ú®ø" - -#: src/addressbook.c:1524 -msgid "Reading addressbook file..." -msgstr "Ū¨ú¦ì§}ïÀɮפ¤, ½Ðµy­Ô..." - -#: src/addressbook.c:1528 -#, c-format -msgid "%s doesn't exist.\n" -msgstr "%s ¤£¦s¦b¡C\n" - -#: src/addressbook.c:1550 src/addressbook.c:1843 src/imap.c:1167 -#: src/imap.c:1186 src/mainwindow.c:676 src/mainwindow.c:1288 src/mh.c:809 -#: src/mh.c:816 src/news.c:648 src/procmsg.c:257 src/procmsg.c:321 -#: src/summaryview.c:1003 src/summaryview.c:1209 src/summaryview.c:1291 -#: src/summaryview.c:1352 src/summaryview.c:1809 src/summaryview.c:2289 -#: src/summaryview.c:2312 src/summaryview.c:2333 src/summaryview.c:2426 -msgid "done.\n" -msgstr "§¹¦¨¡C\n" - -#: src/addressbook.c:1821 -msgid "Exporting addressbook to file..." -msgstr "±N¦ì§}ï¿é¥X¦ÜÀɮפ¤, ½Ðµy­Ô..." - -#: src/addressbook.c:1839 -msgid "failed to write addressbook data.\n" -msgstr "¦ì§}ï¸ê®Æ¼g¤J¥¢±Ñ¡C\n" - -#: src/alertpanel.c:119 src/compose.c:3306 src/main.c:339 -msgid "Notice" -msgstr "ª`·N" - -#: src/alertpanel.c:132 src/main.c:225 -msgid "Warning" -msgstr "ĵ§i" - -#: src/alertpanel.c:145 src/inc.c:415 -msgid "Error" -msgstr "¿ù»~" - -#: src/alertpanel.c:183 -msgid "Creating alert panel dialog...\n" -msgstr "²£¥Íĵ§i¹ï¸Ü®Ø¤¤... \n" - -#: src/alertpanel.c:269 -msgid "Show this message next time" -msgstr "¤U¦¸¦A´£¿ô§Ú" - -#: src/codeconv.c:76 src/codeconv.c:87 -msgid "can't allocate memory\n" -msgstr "µLªk°t¸m°O¾ÐÅé \n" - -#: src/compose.c:367 -msgid "/_Add..." -msgstr "/·s¼W...(_A)" - -#: src/compose.c:368 -msgid "/_Remove" -msgstr "/§R°£(_R)" - -#: src/compose.c:370 src/folderview.c:214 src/folderview.c:226 -#: src/folderview.c:237 -msgid "/_Property..." -msgstr "/¤º®e...(_P)" - -#: src/compose.c:376 -msgid "/_File/_Attach file" -msgstr "/ÀÉ®×(_F)/ªþ¥[ÀÉ®×(_A)" - -#: src/compose.c:377 -msgid "/_File/_Insert file" -msgstr "/ÀÉ®×(_F)/´¡¤JÀÉ®×(_I)" - -#: src/compose.c:378 -msgid "/_File/Insert si_gnature" -msgstr "/ÀÉ®×(_F)/´¡¤Jñ¦W(_g)" - -#: src/compose.c:383 -msgid "/_Edit/_Undo" -msgstr "/½s¿è(_E)/´_­ì(_U)" - -#: src/compose.c:384 -msgid "/_Edit/_Redo" -msgstr "/½s¿è(_E)/­«½Æ«e¤@­Ó°Ê§@(_R)" - -#: src/compose.c:385 src/compose.c:390 src/mainwindow.c:354 -msgid "/_Edit/---" -msgstr "/½s¿è(_E)/---" - -#: src/compose.c:386 -msgid "/_Edit/Cu_t" -msgstr "/½s¿è(_E)/°Å¤U(_t)" - -#: src/compose.c:387 src/mainwindow.c:352 -msgid "/_Edit/_Copy" -msgstr "/½s¿è(_E)/½Æ»s(_C)" - -#: src/compose.c:388 -msgid "/_Edit/_Paste" -msgstr "/½s¿è(_E)/¶K¤W(_P)" - -#: src/compose.c:389 src/mainwindow.c:353 -msgid "/_Edit/Select _all" -msgstr "/½s¿è(_E)/¥þ¿ï(_a)" - -#: src/compose.c:391 -msgid "/_Edit/Wrap long _lines" -msgstr "/½s¿è(_E)/¤Á³Î(_l)" - -#: src/compose.c:392 -msgid "/_Edit/Edit with e_xternal editor" -msgstr "/½s¿è(_E)/¨Ï¥Î¨ä¥Lªº½s¿è¾¹(_x)" - -#: src/compose.c:395 src/mainwindow.c:444 -msgid "/_Message" -msgstr "/«H¥ó(_M)" - -#: src/compose.c:396 -msgid "/_Message/_Send" -msgstr "/«H¥ó(_M)/°e¥X(_S)" - -#: src/compose.c:398 -msgid "/_Message/Send _later" -msgstr "/«H¥ó(_M)/«Ý·|°e¥X(_l)" - -#: src/compose.c:400 -msgid "/_Message/Save to _draft folder" -msgstr "/«H¥ó(_M)/Àx¦s¦Ü¯ó½Z¸ê®Æ§¨(_d)" - -#: src/compose.c:402 src/compose.c:407 src/compose.c:409 src/compose.c:412 -#: src/mainwindow.c:448 src/mainwindow.c:451 src/mainwindow.c:459 -#: src/mainwindow.c:470 -msgid "/_Message/---" -msgstr "/«H¥ó(_M)/---" - -#: src/compose.c:403 -msgid "/_Message/_To" -msgstr "/«H¥ó(_M)/¦¬¥ó¤H(_To)" - -#: src/compose.c:404 -msgid "/_Message/_Cc" -msgstr "/«H¥ó(_M)/°Æ¥»(_Cc)" - -#: src/compose.c:405 -msgid "/_Message/_Bcc" -msgstr "/«H¥ó(_M)/±K¥ó°Æ¥»(_Bcc)" - -#: src/compose.c:406 -msgid "/_Message/_Reply to" -msgstr "/«H¥ó(_M)/¦^ÂÐ(_R)" - -#: src/compose.c:408 -msgid "/_Message/_Followup to" -msgstr "/«H¥ó(_M)/¦^À³¤å³¹(_F)" - -#: src/compose.c:410 -msgid "/_Message/_Attach" -msgstr "/«H¥ó(_M)/ªþ¥[ÀÉ®×(_A)" - -#: src/compose.c:413 -msgid "/_Message/Si_gn" -msgstr "/«H¥ó(_M)/¼Æ¦ìñ³¹(_g)" - -#: src/compose.c:414 -msgid "/_Message/_Encrypt" -msgstr "/«H¥ó(_M)/¥[±K(_E)" - -#: src/compose.c:416 src/mainwindow.c:502 -msgid "/_Tool" -msgstr "/¤u¨ã(_T)" - -#: src/compose.c:417 -msgid "/_Tool/Show _ruler" -msgstr "/¤u¨ã(_T)/Åã¥Ü¤Ø³W(_r)" - -#: src/compose.c:418 src/mainwindow.c:503 -msgid "/_Tool/_Address book" -msgstr "/¤u¨ã(_T)/¦ì§}ï(_A)" - -#: src/compose.c:494 src/compose.c:564 src/compose.c:624 src/procmsg.c:687 -msgid "Can't get text part\n" -msgstr "¨S¦³¤å¦r\n" - -#: src/compose.c:556 -#, c-format -msgid "%s: file not exist\n" -msgstr "%s: Àɮפ£¦s¦b\n" - -#: src/compose.c:568 -msgid "" -"\n" -"\n" -"Begin forwarded message:\n" -"\n" -msgstr "" -"\n" -"\n" -"Âà±H¤º®e¡G\n" - -#: src/compose.c:1240 -#, c-format -msgid "File %s doesn't exist\n" -msgstr "ÀÉ®× %s ¤£¦s¦b \n" - -#: src/compose.c:1244 -#, c-format -msgid "Can't get file size of %s\n" -msgstr "µLªk¨ú±oÀÉ®× %s ªº¤j¤p \n" - -#: src/compose.c:1248 -#, c-format -msgid "File %s is empty\n" -msgstr "ÀÉ®× %s ¬OªÅªº \n" - -#: src/compose.c:1269 -#, c-format -msgid "Message: %s" -msgstr "" - -#: src/compose.c:1375 -msgid " [Edited]" -msgstr " [¤w­×§ï]" - -#: src/compose.c:1377 -#, c-format -msgid "%s - Compose message%s" -msgstr "%s - ·s¶l¥ó%s" - -#: src/compose.c:1380 -#, c-format -msgid "Compose message%s" -msgstr "·s¶l¥ó%s" - -#: src/compose.c:1402 src/compose.c:3596 -msgid "Recipient is not specified." -msgstr "¨S¦³«ü©w¦¬¥ó¤H¡C" - -#: src/compose.c:1420 -msgid "can't get recipient list." -msgstr "µLªk¨ú±o¦¬¥ó¤H©Î¦¬¥ó·s»D¸s²Õ¦W³æ¡C" - -#: src/compose.c:1438 -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:1459 -#, c-format -msgid "Error occurred while posting the message to %s ." -msgstr "¦V %s µo¥X¤å³¹®É¥X²{¿ù»~¡C" - -#: src/compose.c:1473 -msgid "Queueing" -msgstr "°e¶i¼È¦s¸ê®Æ§¨..." - -#: src/compose.c:1474 -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:1480 src/compose.c:3608 -msgid "Can't queue the message." -msgstr "µLªk©ñ¶i¼È¦s¸ê®Æ§¨¡C" - -#: src/compose.c:1483 -msgid "Error occurred while sending the message." -msgstr "°e«H®Éµo¥Í¿ù»~¡C" - -#: src/compose.c:1490 src/compose.c:3615 -msgid "Can't save the message to outbox." -msgstr "µLªk±N«H¥ó°e¦Ü±H¥ó³Æ¥÷¤¤¡C" - -#: src/compose.c:1516 src/compose.c:1637 src/compose.c:1723 src/utils.c:1540 -msgid "can't change file mode\n" -msgstr "µLªk§ïÅÜÀɮ׫¬ºA \n" - -#: src/compose.c:1542 -msgid "Can't convert the codeset of the message." -msgstr "µLªkÂà´««H¥óªº¤º½X³]©w¡C" - -#: src/compose.c:1551 -msgid "can't write headers\n" -msgstr "µLªk¼g¤J¼ÐÀY\n" - -#: src/compose.c:1669 -msgid "saving sent message...\n" -msgstr "±H¥ó³Æ¥÷¶i¦æ¤¤, ½Ðµy­Ô... \n" - -#: src/compose.c:1674 -msgid "can't save message\n" -msgstr "µLªkÀx¦s±H¥ó³Æ¥÷\n" - -#: src/compose.c:1680 src/compose.c:1787 -msgid "can't open mark file\n" -msgstr "µLªk¶}±Ò¼Ð¥ÜªºÀÉ®× \n" - -#: src/compose.c:1703 -msgid "queueing message...\n" -msgstr "°e¶i¼È¦s¸ê®Æ§¨¤¤...\n" - -#: src/compose.c:1778 -msgid "can't queue the message\n" -msgstr "µLªk©ñ¶i¼È¦s¸ê®Æ§¨¡C\n" - -#: src/compose.c:1816 -#, c-format -msgid "Can't open file %s\n" -msgstr "µLªk¶}±ÒÀÉ®× %s\n" - -#: src/compose.c:2170 -#, c-format -msgid "generated Message-ID: %s\n" -msgstr "²£¥Í«H¥óªº½s¸¹¡G%s\n" - -#: src/compose.c:2244 src/compose.c:3104 -msgid "MIME type" -msgstr "MIME «¬ºA" - -#: src/compose.c:2244 src/mimeview.c:139 src/prefs_common.c:2176 -#: src/select-keys.c:299 src/summaryview.c:362 -msgid "Size" -msgstr "¤j¤p" - -#: src/compose.c:2261 -msgid "Creating compose window...\n" -msgstr "²£¥Í·s¶l¥ó...\n" - -#: src/compose.c:2307 src/headerview.c:54 src/summary_search.c:145 -msgid "From:" -msgstr "¨Ó¦Û¡G" - -#: src/compose.c:2730 src/mainwindow.c:1359 src/prefs_account.c:507 -#: src/prefs_common.c:636 -msgid "Send" -msgstr "°e¥X" - -#: src/compose.c:2731 -msgid "Send message" -msgstr "°e¥X«H¥ó" - -#: src/compose.c:2738 -msgid "Send later" -msgstr "«Ý·|¦A°e¥X" - -#: src/compose.c:2739 -msgid "Put into queue folder and send later" -msgstr "©ñ¨ì±H¥ó§¨¤¤«Ý·|¦A°e¥X" - -#: src/compose.c:2746 src/folderview.c:776 -msgid "Draft" -msgstr "¯ó½Z" - -#: src/compose.c:2747 -msgid "Save to draft folder" -msgstr "Àx¦s¦Ü¯ó½Z¸ê®Æ§¨" - -#: src/compose.c:2756 -msgid "Insert" -msgstr "´¡¤J" - -#: src/compose.c:2757 -msgid "Insert file" -msgstr "´¡¤JÀÉ®×" - -#: src/compose.c:2764 -msgid "Attach" -msgstr "ªþ¥[" - -#: src/compose.c:2765 -msgid "Attach file" -msgstr "ªþ¥[ÀÉ®×" - -#: src/compose.c:2774 src/prefs_common.c:1035 -msgid "Signature" -msgstr "ñ¦W" - -#: src/compose.c:2775 -msgid "Insert signature" -msgstr "´¡¤Jñ¦W" - -#: src/compose.c:2783 -msgid "Editor" -msgstr "½s¿è¾¹" - -#: src/compose.c:2784 -msgid "Edit with external editor" -msgstr "¨Ï¥Î¨ä¥Lªº½s¿è¾¹" - -#: src/compose.c:2792 -msgid "Linewrap" -msgstr "¤Á³Î" - -#: src/compose.c:2793 -msgid "Wrap long lines" -msgstr "¤Á³Î¹Lªøªº¤å¦r¦æ" - -#: src/compose.c:3000 -msgid "Invalid MIME type." -msgstr "¤£¦Xªkªº MIME «¬ºA" - -#: src/compose.c:3018 -msgid "File doesn't exist or is empty." -msgstr "Àɮפ£¦s¦b, ©ÎÀɮ׬OªÅªº" - -#: src/compose.c:3086 -msgid "Property" -msgstr "¤º®e" - -#: src/compose.c:3106 -msgid "Encoding" -msgstr "½s½X" - -#: src/compose.c:3129 -msgid "Path" -msgstr "¸ô®|" - -#: src/compose.c:3130 -msgid "File name" -msgstr "ÀɦW" - -#: src/compose.c:3277 -#, c-format -msgid "External editor command line is invalid: `%s'\n" -msgstr "¥~¥Î½s¿è¾¹ªº©R¥O¬O¿ù»~ªº¡G`%s'\n" - -#: src/compose.c:3303 -#, 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:3316 -#, c-format -msgid "Terminated process group id: %d" -msgstr "µ²§ô¸s²Õ¥N½X¬° %d ªº¦æµ{" - -#: src/compose.c:3317 -#, c-format -msgid "Temporary file: %s" -msgstr "¼È¦sÀɮסG%s" - -#: src/compose.c:3341 -msgid "Compose: input from monitoring process\n" -msgstr "" - -#. failed -#: src/compose.c:3374 -msgid "Couldn't exec external editor\n" -msgstr "µLªk°õ¦æ¥~³¡½s¿è¾¹¡C\n" - -#: src/compose.c:3378 -msgid "Couldn't write to file\n" -msgstr "µLªk¼g¤JÀɮסC\n" - -#: src/compose.c:3380 -msgid "Pipe read failed\n" -msgstr "ºÞ½uŪ¨ú¥¢±Ñ¡C\n" - -#: src/compose.c:3637 -msgid "can't remove the old draft message\n" -msgstr "µLªk§R°£­ì¦³ªº¯ó½Z«H¥ó¡C\n" - -#: src/compose.c:3665 src/compose.c:3677 -msgid "Select file" -msgstr "¿ï¾ÜÀÉ®×" - -#: src/compose.c:3701 -msgid "Discard message" -msgstr "©ñ±ó«H¥ó" - -#: src/compose.c:3702 -msgid "This message has been modified. discard it?" -msgstr "«H¥ó¤w³Q­×§ï¹L¡C­n©ñ±ó¥¦¶Ü¡H" - -#: src/compose.c:3703 -msgid "Discard" -msgstr "©ñ±ó" - -#: src/compose.c:3703 -msgid "to Draft" -msgstr "©ñ¤J¯ó½Z¸ê®Æ§¨" - -#: src/export.c:122 -msgid "Export" -msgstr "¶×¥X«H¥ó" - -#: src/export.c:144 -msgid "Specify target folder and mbox file." -msgstr "½Ð«ü©w±z­n¶×¥X­þ­Ó¸ê®Æ§¨ªº«H¥ó¡A¥H¤Î¶×¥XÀɦW¡C" - -#: src/export.c:154 -msgid "Source dir:" -msgstr "¨Ó·½¸ê®Æ§¨¡G" - -#: src/export.c:159 -msgid "Exporting file:" -msgstr "¶×¥XÀɦW¡G" - -#: src/export.c:172 src/export.c:178 src/import.c:176 src/import.c:182 -#: src/prefs_filter.c:349 -msgid " Select... " -msgstr "¿ï¾Ü..." - -#: src/export.c:217 -msgid "Select exporting file" -msgstr "¿ï¾Ü¶×¥XÀɮסG" - -#: src/foldersel.c:132 -msgid "Select folder" -msgstr "¿ï¾Ü¸ê®Æ§¨" - -#: src/folderview.c:207 src/folderview.c:219 -msgid "/Create _new folder..." -msgstr "/²£¥Í·sªº¸ê®Æ§¨ (_n)" - -#: src/folderview.c:208 src/folderview.c:220 -msgid "/_Rename folder..." -msgstr "/­«·s©R¦W¸ê®Æ§¨(_R)..." - -#: src/folderview.c:209 src/folderview.c:221 -msgid "/_Delete folder" -msgstr "/§R°£¸ê®Æ§¨(_D)" - -#: src/folderview.c:211 src/folderview.c:223 -#, fuzzy -msgid "/_Update folder tree" -msgstr "/ÀÉ®×(_F)/§ó·s¸ê®Æ§¨(_U)" - -#: src/folderview.c:212 -msgid "/Remove _mailbox" -msgstr "/§R°£«H½c (_m)" - -#: src/folderview.c:224 -#, fuzzy -msgid "/Remove _IMAP4 account" -msgstr "§R°£ IMAP4 ¦øªA¾¹ (_I)" - -#: src/folderview.c:231 -msgid "/_Subscribe to newsgroup..." -msgstr "/­q¾\·s»D¸s²Õ(_S)..." - -#: src/folderview.c:233 -msgid "/_Remove newsgroup" -msgstr "/²¾°£·s»D¸s²Õ(_R)" - -#: src/folderview.c:235 -#, fuzzy -msgid "/Remove _news account" -msgstr "/²¾°£·s»D¸s²Õ(_R)" - -#: src/folderview.c:246 -msgid "Folder" -msgstr "¸ê®Æ§¨" - -#: src/folderview.c:246 -msgid "New" -msgstr "·sªº" - -#: src/folderview.c:247 src/prefs_common.c:2173 -msgid "Unread" -msgstr "¥¼Åªªº" - -#: src/folderview.c:247 -msgid "#" -msgstr "" - -#: src/folderview.c:257 -msgid "Creating folder view...\n" -msgstr "²£¥Í¸ê®Æ§¨...\n" - -#: src/folderview.c:401 -msgid "Setting folder info...\n" -msgstr "³]©w¸ê®Æ§¨...\n" - -#: src/folderview.c:402 -msgid "Setting folder info..." -msgstr "³]©w¸ê®Æ§¨..." - -#: src/folderview.c:563 src/mainwindow.c:2092 src/setup.c:81 -#, c-format -msgid "Scanning folder %s%c%s ..." -msgstr "±½´y¸ê®Æ§¨ %s%c%s ..." - -#: src/folderview.c:567 src/mainwindow.c:2097 src/setup.c:86 -#, c-format -msgid "Scanning folder %s ..." -msgstr "±½´y¸ê®Æ§¨ %s ..." - -#: src/folderview.c:607 -#, fuzzy -msgid "Updating folder tree..." -msgstr "§ó·s©Ò¦³ªº¸ê®Æ§¨..." - -#: src/folderview.c:624 -msgid "Updating all folders..." -msgstr "§ó·s©Ò¦³ªº¸ê®Æ§¨..." - -#: src/folderview.c:754 src/prefs_account.c:661 -msgid "Inbox" -msgstr "¦¬¥ó§¨" - -#: src/folderview.c:759 -msgid "Outbox" -msgstr "±H¥ó§¨" - -#: src/folderview.c:764 -msgid "Queue" -msgstr "¼È¦s¸ê®Æ§¨" - -#: src/folderview.c:769 -msgid "Trash" -msgstr "§R°£ªº¶l¥ó" - -#: src/folderview.c:1255 -#, c-format -msgid "Folder %s is selected\n" -msgstr "¤w¿ï¨ú %s ¸ê®Æ§¨\n" - -#: src/folderview.c:1386 src/folderview.c:1449 src/folderview.c:1590 -#, c-format -msgid "`%c' can't be included in folder name." -msgstr "¸ê®Æ§¨¦WºÙ¤¤¤£À³§t¦³ `%c' ³o­Ó¦r¤¸¡C" - -#: src/folderview.c:1394 src/folderview.c:1458 src/folderview.c:1598 -#, c-format -msgid "The folder `%s' already exists." -msgstr "¸ê®Æ§¨ `%s' ¤w¦s¦b¡C" - -#: src/folderview.c:1402 src/folderview.c:1606 -#, c-format -msgid "Can't create the folder `%s'." -msgstr "µLªk§R°£¸ê®Æ§¨ `%s'¡C" - -#: src/folderview.c:1441 -#, c-format -msgid "Input new name for `%s':" -msgstr "½Ð¿é¤J `%s' ªº·s¦WºÙ¡G" - -#: src/folderview.c:1443 -msgid "Rename folder" -msgstr "­«·s©R¦W¸ê®Æ§¨" - -#: src/folderview.c:1503 -#, 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:1506 src/folderview.c:1648 -msgid "Delete folder" -msgstr "§R°£¸ê®Æ§¨" - -#: src/folderview.c:1512 src/folderview.c:1654 -#, c-format -msgid "Can't remove the folder `%s'." -msgstr "µLªk§R°£¸ê®Æ§¨ `%s'¡C" - -#: src/folderview.c:1546 -#, 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:1549 -msgid "Remove folder" -msgstr "§R°£¸ê®Æ§¨" - -#: src/folderview.c:1582 -msgid "" -"Input the name of new folder:\n" -"(if you want to create a folder to store subfolders,\n" -" append `/' at the end of the name)" -msgstr "" -"½Ð¿é¤J·s¸ê®Æ§¨¦WºÙ¡G\n" -"¡]­Y¬O¸ê®Æ§¨¤U­n¦³¤l¸ê®Æ§¨¡A\n" -"¡@½Ð¦b¸ê®Æ§¨¦WºÙªº«á­±¥[¤W `/'¡^" - -#: src/folderview.c:1646 -#, c-format -msgid "Really delete folder `%s'?" -msgstr "±z½T©w­n§R°£ %s ¸ê®Æ§¨¡H" - -#: src/folderview.c:1687 -#, fuzzy, c-format -msgid "Really delete IMAP4 account `%s'?" -msgstr "±z½T©w­n§R°£ %s ³o­Ó IMAP4 ¦øªA¾¹¡H" - -#: src/folderview.c:1689 -#, fuzzy -msgid "Delete IMAP4 account" -msgstr "§R°£±b¸¹" - -#: src/folderview.c:1730 -msgid "Subscribe newsgroup" -msgstr "­q¾\·s»D¸s²Õ" - -#: src/folderview.c:1731 -msgid "Input subscribing newsgroup:" -msgstr "½Ð¿é¤J­n­q¾\ªº·s»D¸s²Õ¦WºÙ¡G" - -#: src/folderview.c:1740 -#, c-format -msgid "The newsgroup `%s' already exists." -msgstr "·s»D¸s²Õ `%s' ¤w¦s¦b¡C" - -#: src/folderview.c:1786 -#, c-format -msgid "Really delete newsgroup `%s'?" -msgstr "±z½T©w­n§R°£·s»D¸s²Õ `%s' ¶Ü¡H" - -#: src/folderview.c:1788 -msgid "Delete newsgroup" -msgstr "§R°£·s»D¸s²Õ" - -#: src/folderview.c:1819 -#, fuzzy, c-format -msgid "Really delete news account `%s'?" -msgstr "±z½T©w­n§R°£·s»D¸s²Õ `%s' ¶Ü¡H" - -#: src/folderview.c:1821 -#, fuzzy -msgid "Delete news account" -msgstr "§R°£±b¸¹" - -#: 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:174 src/summaryview.c:1392 -msgid "(No From)" -msgstr "¡]¨S¦³¨Ó·½¡^" - -#: src/headerview.c:189 src/summaryview.c:1408 -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:223 -#, 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:245 src/inc.c:384 src/news.c:129 -#, c-format -msgid "Input password for %s on %s:" -msgstr "½Ð¿é¤J %s ¦b %s ¤Wªº±K½X¡G" - -#: src/imap.c:247 src/inc.c:388 src/news.c:131 -msgid "Input password" -msgstr "¿é¤J±K½X" - -#: src/imap.c:272 -#, c-format -msgid "creating IMAP4 connection to %s:%d ...\n" -msgstr "¥¿¦b²£¥Í IMAP4 ³s½u¨ì %s:%d ...\n" - -#: src/imap.c:427 -#, c-format -msgid "message %d has been already cached.\n" -msgstr "" - -#: src/imap.c:437 -#, c-format -msgid "getting message %d...\n" -msgstr "" - -#: src/imap.c:443 src/procmsg.c:587 -#, c-format -msgid "can't fetch message %d\n" -msgstr "µLªk§ì¨ú«H¥ó %d\n" - -#: src/imap.c:467 -#, c-format -msgid "can't append message %s\n" -msgstr "µLªkÀx¦s±H¥ó³Æ¥÷\n" - -#: src/imap.c:495 src/imap.c:547 src/mh.c:188 src/mh.c:264 src/mh.c:318 -#: src/mh.c:402 -msgid "the src folder is identical to the dest.\n" -msgstr "¨Ó·½»P¥Øªº¸ê®Æ§¨¬Û¦P¡C\n" - -#: src/imap.c:502 src/imap.c:552 src/mh.c:201 src/mh.c:267 -#, c-format -msgid "Moving message %s%c%d to %s ...\n" -msgstr "²¾°Ê«H¥ó %s%c%d ¨ì %s ...\n" - -#: src/imap.c:506 src/imap.c:556 src/mh.c:331 src/mh.c:405 -#, c-format -msgid "Copying message %s%c%d to %s ...\n" -msgstr "" - -#: src/imap.c:626 -#, c-format -msgid "can't set deleted flags: %d\n" -msgstr "µLªk³]©w§R°£ªººX¼Ð¡G%d\n" - -#: src/imap.c:633 src/imap.c:673 -msgid "can't expunge\n" -msgstr "µLªk§R°£\n" - -#: src/imap.c:666 -#, c-format -msgid "can't set deleted flags: 1:%d\n" -msgstr "µLªk³]©w§R°£ªººX¼Ð¡G1:%d\n" - -#: src/imap.c:808 -#, fuzzy -msgid "error occured while getting LIST.\n" -msgstr "¨ú±o xover ®Éµo¥Í¿ù»~¡C\n" - -#: src/imap.c:1009 -#, fuzzy -msgid "can't create mailbox: LIST failed\n" -msgstr "µLªk²£¥Í«H½c\n" - -#: src/imap.c:1029 -msgid "can't create mailbox\n" -msgstr "µLªk²£¥Í«H½c\n" - -#: src/imap.c:1065 -msgid "can't delete mailbox\n" -msgstr "µLªk§R°£«H½c\n" - -#: src/imap.c:1094 -msgid "can't get envelope\n" -msgstr "µLªk¨ú±o«H«Ê¡C\n" - -#: src/imap.c:1102 -msgid "error occurred while getting envelope.\n" -msgstr "¨ú±o«H«Ê®Éµo¥Í¿ù»~¡C\n" - -#: src/imap.c:1117 -#, c-format -msgid "can't parse envelope: %s\n" -msgstr "µLªk¸ÑªR«H«Ê¡G%s\n" - -#: src/imap.c:1147 -#, fuzzy, c-format -msgid "Deleting cached messages %d - %d ... " -msgstr "\t§R°£©Ò¦³§Ö¨ú¶l¥ó..." - -#: src/imap.c:1180 -#, fuzzy -msgid "Deleting all cached messages... " -msgstr "\t§R°£©Ò¦³§Ö¨ú¶l¥ó..." - -#: src/imap.c:1194 -#, 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:1227 -msgid "can't get namespace\n" -msgstr "µLªk¨ú±o«H«Ê¡C\n" - -#: src/imap.c:1672 -#, c-format -msgid "can't select folder: %s\n" -msgstr "µLªk¿ï¾Ü¸ê®Æ§¨¡G%s\n" - -#: src/imap.c:1723 -#, fuzzy, c-format -msgid "can't get the next uid of folder: %s\n" -msgstr "µLªk¿ï¾Ü¸ê®Æ§¨¡G%s\n" - -#: src/imap.c:1746 -msgid "IMAP4 login failed.\n" -msgstr "IMAP4 µn¤J¥¢±Ñ¡C\n" - -#: src/imap.c:1988 -#, c-format -msgid "can't append %s to %s\n" -msgstr "µLªk±N«H¥ó±q %s ·h²¾¨ì %s¡C\n" - -#: src/imap.c:2008 -#, c-format -msgid "can't copy %d to %s\n" -msgstr "µLªk±N½s¸¹ %d ªº«H¥ó²¾¨ì %s\n" - -#: src/imap.c:2033 -#, c-format -msgid "error while imap command: STORE %d:%d %s\n" -msgstr "imap µo¥Í¿ù»~¡A©R¥O¬°¡G STORE %d:%d %s\n" - -#: src/imap.c:2047 -msgid "error while imap command: EXPUNGE\n" -msgstr "imap µo¥Í¿ù»~¡A©R¥O¬°¡G EXPUNGE\n" - -#: src/import.c:126 -msgid "Import" -msgstr "¶×¤J" - -#: src/import.c:148 -msgid "Specify target mbox file and destination folder." -msgstr "½Ð«ü©w¥Ø¼Ð«H½c»P¸ê®Æ§¨¡C" - -#: src/import.c:158 -msgid "Importing file:" -msgstr "¶×¤JÀɮסG" - -#: src/import.c:163 -msgid "Destination dir:" -msgstr "¥Ø¼Ð¥Ø¿ý¡G" - -#: src/import.c:221 -msgid "Select importing file" -msgstr "¿ï¾Ü¶×¤JÀÉ®×" - -#: src/inc.c:187 src/inc.c:236 src/send.c:246 -msgid "Standby" -msgstr "µ¥«Ý³B²z¤¤" - -#: src/inc.c:255 -msgid "Retrieving new messages" -msgstr "¨ú±o·s¶l¥ó¤¤" - -#: src/inc.c:405 -msgid "Retrieving" -msgstr "Ū¨ú¤¤" - -#: src/inc.c:412 -msgid "Done" -msgstr "§¹¦¨" - -#: src/inc.c:421 -#, c-format -msgid "Authorization for %s on %s failed" -msgstr "%s ¦b %s ¤Wªº»{ÃÒ¥¢±Ñ" - -#: src/inc.c:487 -#, c-format -msgid "getting new messages of account %s...\n" -msgstr "¨ú±o %s ªº·s¶l¥ó¤¤, ½Ðµy­Ô...\n" - -#: src/inc.c:495 -#, c-format -msgid "%s: Retrieving new messages" -msgstr "%s¡G¨ú±o·s¶l¥ó¤¤, ½Ðµy­Ô..." - -#: src/inc.c:516 -#, c-format -msgid "Connecting to POP3 server: %s ..." -msgstr "³s½u¨ì POP3 ¦øªA¾¹¡G%s ..." - -#: src/inc.c:527 src/inc.c:660 -#, 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:530 src/inc.c:663 -#, c-format -msgid "Can't connect to POP3 server: %s:%d" -msgstr "µLªk³s½u¨ì POP3 ¦øªA¾¹¡G%s:%d" - -#: src/inc.c:694 src/inc.c:744 -#, c-format -msgid "Retrieving message (%d / %d) (%d / %d bytes)" -msgstr "¨ú±o·s¶l¥ó (%d / %d) (%d / %d bytes)" - -#: src/inc.c:719 -msgid "Authorizing..." -msgstr "±ÂÅv¤¤" - -#: src/inc.c:724 -msgid "Getting the number of new messages (STAT)..." -msgstr "¨ú±o·s¶l¥óªº¼Æ¶q¤¤" - -#: src/inc.c:729 -msgid "Getting the number of new messages (LAST)..." -msgstr "¨ú±o·s¶l¥óªº¼Æ¶q¤¤" - -#: src/inc.c:734 -msgid "Getting the number of new messages (UIDL)..." -msgstr "¨ú±o·s¶l¥óªº¼Æ¶q¤¤" - -#: src/inc.c:739 -msgid "Getting the size of messages (LIST)..." -msgstr "¨ú±o·s¶l¥óªº¼Æ¶q¤¤" - -#: src/inc.c:755 -msgid "Deleting message" -msgstr "§R°£¶l¥ó" - -#: src/inc.c:759 -msgid "Quitting" -msgstr "Â÷¶}" - -#: src/inc.c:787 -msgid "a message won't be received\n" -msgstr "¦³«H¥ó¥¼¦¬¨ì¡C\n" - -#: src/inc.c:813 -msgid "Error occurred while processing mail." -msgstr "³B²z¶l¥ó®Éµo¥Í¿ù»~¡C" - -#: src/inc.c:816 -msgid "No disk space left." -msgstr "ºÏºÐªÅ¶¡¤wº¡¡C" - -#: src/inc.c:867 -msgid "no messages in local mailbox.\n" -msgstr "«H½c¤¤¨S¦³¶l¥ó¡C\n" - -#: src/inc.c:881 -#, 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:108 -#, 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:149 -msgid "g_thread is not supported by glib.\n" -msgstr "glib ¤£¤ä´© g_thread¡C\n" - -#: src/main.c:226 -msgid "" -"GnuPG is not installed properly.\n" -"OpenPGP support disabled." -msgstr "" - -#: src/main.c:307 -#, c-format -msgid "Usage: %s [OPTION]...\n" -msgstr "" - -#: src/main.c:310 -msgid " --compose [address] open composition window" -msgstr " --compose [address] ª½±µ¶}±Ò¼¶¼g¶l¥óµøµ¡" - -#: src/main.c:311 -msgid " --receive receive new messages" -msgstr " --receive ª½±µ±µ¦¬·s¶l¥ó" - -#: src/main.c:312 -msgid " --receive-all receive new messages of all accounts" -msgstr " --receive-all ª½±µ±µ¦¬©Ò¦³±b¸¹ªº·s¶l¥ó" - -#: src/main.c:313 -msgid " --debug debug mode" -msgstr " --debug °£¿ù¼Ò¦¡" - -#: src/main.c:314 -msgid " --help display this help and exit" -msgstr " --help Åã¥Ü¥»»¡©ú¨ÃÂ÷¶}" - -#: src/main.c:315 -msgid " --version output version information and exit" -msgstr " --version Åã¥Üª©¥»¸ê°T" - -#: src/main.c:340 -msgid "Composing message exists. Really quit?" -msgstr "¦³«H¥ó¥¿¦b½s¿è¡C½T©w­nÂ÷¶}¶Ü¡H" - -#: src/main.c:347 -msgid "Queued messages" -msgstr "¦³¥¼°e¥X«H¥ó" - -#: src/main.c:348 -msgid "Some unsent messages are queued. Exit now?" -msgstr "¦³¨Ç«H¥ó¥¿¦b¼È¦s¸ê®Æ§¨¤¤©|¥¼°e¥X¡C½T©w­nÂ÷¶}¶Ü¡H" - -#. remote command mode -#: src/main.c:421 -msgid "another Sylpheed is already running.\n" -msgstr "¤w¸g¦³ Sylpheed µ{¦¡¥¿¦b°õ¦æ¤¤¡C\n" - -#: src/mainwindow.c:334 -msgid "/_File/_Add mailbox..." -msgstr "/ÀÉ®×(_F)/·s¼W«H½c(_A)..." - -#: src/mainwindow.c:335 -msgid "/_File/_Update folder tree" -msgstr "/ÀÉ®×(_F)/§ó·s¸ê®Æ§¨(_U)" - -#: src/mainwindow.c:336 -msgid "/_File/_Folder" -msgstr "/ÀÉ®×(_F)/¸ê®Æ§¨ºÞ²z(_F)" - -#: src/mainwindow.c:337 -msgid "/_File/_Folder/Create _new folder..." -msgstr "/ÀÉ®×(_F)/¸ê®Æ§¨ºÞ²z/·s¼W¸ê®Æ§¨(_n)" - -#: src/mainwindow.c:339 -msgid "/_File/_Folder/_Rename folder..." -msgstr "/ÀÉ®×(_F)/¸ê®Æ§¨ºÞ²z/­«·s©R¦W¸ê®Æ§¨(_R)" - -#: src/mainwindow.c:340 -msgid "/_File/_Folder/_Delete folder" -msgstr "/ÀÉ®×(_F)/¸ê®Æ§¨ºÞ²z/§R°£¸ê®Æ§¨(_D)" - -#: src/mainwindow.c:341 -msgid "/_File/_Import mbox file..." -msgstr "/ÀÉ®×(_F)/¶×¤J¶l¥ó(_I)" - -#: src/mainwindow.c:342 -msgid "/_File/_Export to mbox file..." -msgstr "/ÀÉ®×(_F)/¶×¥X¸ê®Æ§¨(_E)" - -#: src/mainwindow.c:343 -msgid "/_File/Empty _trash" -msgstr "/ÀÉ®×(_F)/²MªÅ§R°£ªº¶l¥ó(_t)" - -#: src/mainwindow.c:345 -msgid "/_File/_Save as..." -msgstr "/ÀÉ®×(_F)/¥t¦s·sÀÉ(_S)..." - -#: src/mainwindow.c:346 -msgid "/_File/_Print..." -msgstr "/ÀÉ®×(_F)/¦C¦L...(_P)" - -#: src/mainwindow.c:349 -msgid "/_File/E_xit" -msgstr "/ÀÉ®×(_F)/Â÷¶}(_X)" - -#: src/mainwindow.c:355 -msgid "/_Edit/_Search" -msgstr "/½s¿è(_E)/´M§ä(_S)" - -#: src/mainwindow.c:357 -msgid "/_View" -msgstr "/Åã¥Ü(_V)" - -#: src/mainwindow.c:358 -msgid "/_View/_Folder tree" -msgstr "/Åã¥Ü(_V)/¸ê®Æ§¨¦Cªí(_F)" - -#: src/mainwindow.c:359 -msgid "/_View/_Message view" -msgstr "/Åã¥Ü(_V)/«H¥ó¹wÄý(_M)" - -#: src/mainwindow.c:360 -msgid "/_View/_Toolbar" -msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)" - -#: src/mainwindow.c:361 -msgid "/_View/_Toolbar/Icon _and text" -msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¹Ï¼Ë»P¤å¦r(_a)" - -#: src/mainwindow.c:362 -msgid "/_View/_Toolbar/_Icon" -msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¹Ï¼Ë(_I)" - -#: src/mainwindow.c:363 -msgid "/_View/_Toolbar/_Text" -msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¤å¦r(_T)" - -#: src/mainwindow.c:364 -#, fuzzy -msgid "/_View/_Toolbar/_None" -msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¹Ï¼Ë(_I)" - -#: src/mainwindow.c:365 -msgid "/_View/_Status bar" -msgstr "/Åã¥Ü(_V)/ª¬ºA¦C(_S)" - -#: src/mainwindow.c:366 src/mainwindow.c:369 -msgid "/_View/---" -msgstr "/Åã¥Ü(_V)/---" - -#: src/mainwindow.c:367 -msgid "/_View/Separate f_older tree" -msgstr "/Åã¥Ü(_V)/±N¸ê®Æ§¨¦Cªí¤ÀÂ÷(_o)" - -#: src/mainwindow.c:368 -msgid "/_View/Separate m_essage view" -msgstr "/Åã¥Ü(_V)/±N«H¥ó¹wÄý¤ÀÂ÷(_e)" - -#: src/mainwindow.c:370 -msgid "/_View/_Code set" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)" - -#: src/mainwindow.c:371 -msgid "/_View/_Code set/_Auto detect" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¦Û°Ê°»´ú(_A)" - -#: src/mainwindow.c:379 -msgid "/_View/_Code set/---" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/---" - -#: src/mainwindow.c:380 -msgid "/_View/_Code set/7bit ascii (US-ASC_II)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/7¦ì¤¸ ASCII ¦r¶°(US-ASC_II)" - -#: src/mainwindow.c:384 -msgid "/_View/_Code set/Unicode (_UTF-8)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/Unicode (_UTF-8)" - -#: src/mainwindow.c:388 -msgid "/_View/_Code set/Western European (ISO-8859-_1)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¦è¼Ú»y¨t (ISO-8859-_1)" - -#: src/mainwindow.c:392 -msgid "/_View/_Code set/Central European (ISO-8859-_2)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤¤¼Ú»y¨t (ISO-8859-_2)" - -#: src/mainwindow.c:395 -msgid "/_View/_Code set/_Baltic (ISO-8859-13)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/_ªiùªº®ü»y¨t (ISO-8859-13)(_B)" - -#: src/mainwindow.c:397 -msgid "/_View/_Code set/Baltic (ISO-8859-_4)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/ªiùªº®ü»y¨t (ISO-8859-_4)" - -#: src/mainwindow.c:400 -msgid "/_View/_Code set/Greek (ISO-8859-_7)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/§Æþ»y (ISO-8859-_7)" - -#: src/mainwindow.c:403 -msgid "/_View/_Code set/Turkish (ISO-8859-_9)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤g¦Õ¨ä»y (ISO-8859-_9)" - -#: src/mainwindow.c:406 -msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/´µ©Ô¤Ò»y (ISO-8859-_5)" - -#: src/mainwindow.c:408 -msgid "/_View/_Code set/Cyrillic (KOI8-_R)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/´µ©Ô¤Ò»y (KOI8-_R)" - -#: src/mainwindow.c:410 -msgid "/_View/_Code set/Cyrillic (Windows-1251)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/´µ©Ô¤Ò»y (Windows-1251)" - -#: src/mainwindow.c:414 -msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤é¤å (ISO-2022-_JP)" - -#: src/mainwindow.c:417 -msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤é¤å (ISO-2022-JP-2)" - -#: src/mainwindow.c:420 -msgid "/_View/_Code set/Japanese (_EUC-JP)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤é¤å (_EUC-JP)" - -#: src/mainwindow.c:422 -msgid "/_View/_Code set/Japanese (_Shift__JIS)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤é¤å (_Shift__JIS)" - -#: src/mainwindow.c:426 -msgid "/_View/_Code set/Simplified Chinese (_GB2312)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/²Å餤¤å (_GB2312)" - -#: src/mainwindow.c:428 -msgid "/_View/_Code set/Traditional Chinese (_Big5)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/ÁcÅ餤¤å (_Big5)" - -#: src/mainwindow.c:430 -msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/ÁcÅ餤¤å (EUC-_TW)" - -#: src/mainwindow.c:432 -msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤¤¤å (ISO-2022-_CN)" - -#: src/mainwindow.c:435 -msgid "/_View/_Code set/Korean (EUC-_KR)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/Áú¤å (EUC-_KR)" - -#: src/mainwindow.c:437 -msgid "/_View/_Code set/Korean (ISO-2022-KR)" -msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/Áú¤å (ISO-2022-KR)" - -#: src/mainwindow.c:445 -#, fuzzy -msgid "/_Message/Get new ma_il" -msgstr "/«H¥ó(_M)/±µ¦¬·s¶l¥ó(_i)" - -#: src/mainwindow.c:446 -#, fuzzy -msgid "/_Message/Get from _all accounts" -msgstr "/«H¥ó(_M)/±q©Ò¦³±b¸¹¤¤±µ¦¬·s¶l¥ó(_a)" - -#: src/mainwindow.c:449 -msgid "/_Message/Send queued messa_ges" -msgstr "/«H¥ó(_M)/±N¼È¦s¸ê®Æ§¨¤¤ªº«H¥ó°e¥X(_g)" - -#: src/mainwindow.c:452 -msgid "/_Message/Compose _new message" -msgstr "/«H¥ó(_M)/¼¶¼g¶l¥ó(_n)" - -#: src/mainwindow.c:453 -msgid "/_Message/_Reply" -msgstr "/«H¥ó(_M)/¦^ÂÐ(_R)" - -#: src/mainwindow.c:454 -msgid "/_Message/Repl_y to sender" -msgstr "/«H¥ó(_M)/¦^Âе¹­ì§@ªÌ(_y)" - -#: src/mainwindow.c:455 -msgid "/_Message/Reply to a_ll" -msgstr "/«H¥ó(_M)/¥þ³¡¦^ÂÐ(_l)" - -#: src/mainwindow.c:456 -msgid "/_Message/_Forward" -msgstr "/«H¥ó(_M)/Âà±H(_F)" - -#: src/mainwindow.c:457 -#, fuzzy -msgid "/_Message/Forward as a_ttachment" -msgstr "/«H¥ó(_M)/±N«H¥ó·í¦¨ªþ¥[ÀÉÂà±H(_t)" - -#: src/mainwindow.c:460 -msgid "/_Message/M_ove..." -msgstr "/«H¥ó(_M)/²¾°Ê...(_o)" - -#: src/mainwindow.c:461 -msgid "/_Message/_Copy..." -msgstr "/«H¥ó(_M)/½Æ»s...(_C)" - -#: src/mainwindow.c:462 -msgid "/_Message/_Delete" -msgstr "/«H¥ó(_M)/§R°£(_D)" - -#: src/mainwindow.c:463 -msgid "/_Message/_Mark" -msgstr "/«H¥ó(_M)/¼Ð°O(_M)" - -#: src/mainwindow.c:464 -msgid "/_Message/_Mark/_Mark" -msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¼Ð°O(_M)" - -#: src/mainwindow.c:465 -msgid "/_Message/_Mark/_Unmark" -msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¥h°£¼Ð°O(_U)" - -#: src/mainwindow.c:466 -msgid "/_Message/_Mark/---" -msgstr "/«H¥ó(_M)/¼Ð°O(_M)/---" - -#: src/mainwindow.c:467 -msgid "/_Message/_Mark/Mark as unr_ead" -msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¼Ð°O¦¨¥¼Åª(_e)" - -#: src/mainwindow.c:468 -#, fuzzy -msgid "/_Message/_Mark/Mark as rea_d" -msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¼Ð°O¦¨¥¼Åª(_e)" - -#: src/mainwindow.c:471 -msgid "/_Message/Open in new _window" -msgstr "/«H¥ó(_M)/¦b·sµøµ¡¶}±Ò(_w)" - -#: src/mainwindow.c:472 -msgid "/_Message/View _source" -msgstr "/«H¥ó(_M)/Æ[¬Ý«H¥ó­ì©l½X(_s)" - -#: src/mainwindow.c:473 -msgid "/_Message/Show all _header" -msgstr "/«H¥ó(_M)/Åã¥Ü©Ò¦³ªº«H¥ó¼ÐÀY(_h)" - -#: src/mainwindow.c:474 -#, fuzzy -msgid "/_Message/Re-_edit" -msgstr "/«H¥ó(_M)/­«·s½s¿è(_e)" - -#: src/mainwindow.c:476 -msgid "/_Summary" -msgstr "/«H¥ó¦Cªí(_S)" - -#: src/mainwindow.c:477 -msgid "/_Summary/_Delete duplicated messages" -msgstr "/«H¥ó¦Cªí(_S)/§R°£­«ÂЪº«H¥ó(_D)" - -#: src/mainwindow.c:479 -msgid "/_Summary/_Filter messages" -msgstr "/«H¥ó¦Cªí(_S)/«H¥ó¹LÂo(_F)" - -#: src/mainwindow.c:480 -msgid "/_Summary/E_xecute" -msgstr "/«H¥ó¦Cªí(_S)/°õ¦æ(_x)" - -#: src/mainwindow.c:481 -msgid "/_Summary/_Update" -msgstr "/«H¥ó¦Cªí(_S)/§ó·s(_U)" - -#: src/mainwindow.c:482 src/mainwindow.c:486 src/mainwindow.c:488 -msgid "/_Summary/---" -msgstr "/«H¥ó¦Cªí(_S)/---" - -#: src/mainwindow.c:483 -msgid "/_Summary/_Prev message" -msgstr "/«H¥ó¦Cªí(_S)/«e¤@«Ê«H¥ó(_P)" - -#: src/mainwindow.c:484 -msgid "/_Summary/_Next message" -msgstr "/«H¥ó¦Cªí(_S)/¤U¤@«Ê«H¥ó(_N)" - -#: src/mainwindow.c:485 -msgid "/_Summary/N_ext unread message" -msgstr "/«H¥ó¦Cªí(_S)/¤U¤@«Ê¥¼Åª«H¥ó(_e)" - -#: src/mainwindow.c:487 -msgid "/_Summary/_Go to other folder" -msgstr "/«H¥ó¦Cªí(_S)/¨ì¨ä¥Lªº¸ê®Æ§¨(_G)" - -#: src/mainwindow.c:489 -msgid "/_Summary/_Sort" -msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)" - -#: src/mainwindow.c:490 -msgid "/_Summary/_Sort/Sort by _number" -msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î½s¸¹±Æ§Ç(_n)" - -#: src/mainwindow.c:491 -msgid "/_Summary/_Sort/Sort by s_ize" -msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î¤j¤p±Æ§Ç(_i)" - -#: src/mainwindow.c:492 -msgid "/_Summary/_Sort/Sort by _date" -msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î¤é´Á±Æ§Ç(_d)" - -#: src/mainwindow.c:493 -msgid "/_Summary/_Sort/Sort by _from" -msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î¨Ó·½±Æ§Ç(_f)" - -#: src/mainwindow.c:494 -msgid "/_Summary/_Sort/Sort by _subject" -msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î¼ÐÃD±Æ§Ç(_s)" - -#: src/mainwindow.c:495 -msgid "/_Summary/_Sort/---" -msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/---" - -#: src/mainwindow.c:496 -msgid "/_Summary/_Sort/_Attract by subject" -msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î«H¥ó¦ê¦C±Æ§Ç(_A)" - -#: src/mainwindow.c:498 -msgid "/_Summary/_Thread view" -msgstr "/«H¥ó¦Cªí(_S)/¦ê°_¦P¤@¦ê¦Cªº«H¥ó(_T)" - -#: src/mainwindow.c:499 -msgid "/_Summary/Unt_hread view" -msgstr "/«H¥ó¦Cªí(_S)/¸Ñ¶}¦P¤@¦ê¦Cªº«H¥ó(_h)" - -#: src/mainwindow.c:500 -msgid "/_Summary/Set display _item..." -msgstr "/«H¥ó¦Cªí(_S)/³]©wÅã¥Üªº¶µ¥Ø...(_i)" - -#: src/mainwindow.c:504 -msgid "/_Tool/_Log window" -msgstr "/¤u¨ã(_T)/¬ö¿ýµøµ¡(_L)" - -#: src/mainwindow.c:506 -msgid "/_Configuration" -msgstr "/³]©w(_C)" - -#: src/mainwindow.c:507 -msgid "/_Configuration/_Common preferences..." -msgstr "/³]©w(_C)/¦@¦P³ß¦n³]©w...(_C)" - -#: src/mainwindow.c:509 -msgid "/_Configuration/_Filter setting..." -msgstr "/³]©w(_C)/«H¥ó¹LÂo³]©w...(_F)" - -#: src/mainwindow.c:511 -msgid "/_Configuration/_Preferences per account..." -msgstr "/³]©w(_C)/­Ó§O±b¸¹³ß¦n³]©w(_P)" - -#: src/mainwindow.c:513 -msgid "/_Configuration/---" -msgstr "/³]©w(_C)/---" - -#: src/mainwindow.c:514 -msgid "/_Configuration/Create _new account..." -msgstr "/³]©w(_C)/·s¼W±b¸¹...(_n)" - -#: src/mainwindow.c:516 -msgid "/_Configuration/_Edit accounts..." -msgstr "/³]©w(_C)/½s¿è±b¸¹...(_E)" - -#: src/mainwindow.c:518 -msgid "/_Configuration/C_hange current account" -msgstr "/³]©w(_C)/§ïÅܲ{¦³±b¸¹(_h)" - -#: src/mainwindow.c:522 -msgid "/_Help/_Manual" -msgstr "/»¡©ú(_H)/»¡©ú¤å¥ó(_M)" - -#: src/mainwindow.c:523 -msgid "/_Help/_Manual/_English" -msgstr "/»¡©ú(_H)/»¡©ú¤å¥ó(_M)/­^¤å(_E)" - -#: src/mainwindow.c:524 -msgid "/_Help/_Manual/_Japanese" -msgstr "/»¡©ú(_H)/»¡©ú¤å¥ó(_M)/¤é¤å(_J)" - -#: src/mainwindow.c:525 -msgid "/_Help/---" -msgstr "/»¡©ú(_H)/---" - -#: src/mainwindow.c:554 -msgid "Creating main window...\n" -msgstr "²£¥Í¥Dµøµ¡...\n" - -#: src/mainwindow.c:673 -#, c-format -msgid "MainWindow: color allocation %d failed\n" -msgstr "¥Dµøµ¡¡GÃC¦â %d °t¸m¥¢±Ñ¡C\n" - -#: src/mainwindow.c:822 src/mainwindow.c:839 -msgid "Untitled" -msgstr "µL¼ÐÃD" - -#: src/mainwindow.c:840 -msgid "none" -msgstr "µL" - -#: src/mainwindow.c:849 -#, c-format -msgid "Current account: %s" -msgstr "¥Ø«e±b¸¹¡G%s" - -#: src/mainwindow.c:940 -#, c-format -msgid "window position: x = %d, y = %d\n" -msgstr "µøµ¡¦ì¸m¡Gx = %d, y = %d\n" - -#: src/mainwindow.c:948 -msgid "Empty trash" -msgstr "²MªÅ§R°£ªº¶l¥ó" - -#: src/mainwindow.c:949 -msgid "Empty all messages in trash?" -msgstr "±z½T©w­n²M°£©Ò¦³³Q§R°£ªº¶l¥ó¡H" - -#: src/mainwindow.c:977 -msgid "Add mailbox" -msgstr "·s¼W«H½c" - -#: src/mainwindow.c:978 -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:984 -#, c-format -msgid "The mailbox `%s' already exists." -msgstr "«H½c %s ¤w¦s¦b¡C" - -#: src/mainwindow.c:989 src/setup.c:57 -msgid "Mailbox" -msgstr "«H½c" - -#: src/mainwindow.c:995 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:1141 -msgid "Setting widgets..." -msgstr "³]©wµøµ¡..." - -#: src/mainwindow.c:1342 -msgid "Get" -msgstr "Àˬd¶l¥ó" - -#: src/mainwindow.c:1343 -msgid "Incorporate new mail" -msgstr "Àˬd¥Ø«e±b¸¹ªº·s¶l¥ó" - -#: src/mainwindow.c:1348 -msgid "Get all" -msgstr "¥þ³¡Àˬd" - -#: src/mainwindow.c:1349 -msgid "Incorporate new mail of all accounts" -msgstr "Àˬd©Ò¦³±b¸¹ªº·s¶l¥ó" - -#: src/mainwindow.c:1360 -msgid "Send queued message(s)" -msgstr "±N¼È¦s¸ê®Æ§¨¤¤ªº«H¥ó°e¥X" - -#: src/mainwindow.c:1370 src/prefs_account.c:509 src/prefs_common.c:638 -msgid "Compose" -msgstr "¼¶¼g¶l¥ó" - -#: src/mainwindow.c:1371 -msgid "Compose new message" -msgstr "½s¿è·s¶l¥ó" - -#: src/mainwindow.c:1378 -msgid "Reply" -msgstr "¦^ÂÐ" - -#: src/mainwindow.c:1379 -msgid "Reply to the message" -msgstr "¦^ÂЫH¥ó" - -#: src/mainwindow.c:1386 -msgid "Reply all" -msgstr "¥þ³¡¦^ÂÐ" - -#: src/mainwindow.c:1387 -msgid "Reply to all" -msgstr "¥þ³¡¦^ÂÐ" - -#: src/mainwindow.c:1394 -msgid "Forward" -msgstr "Âà±H" - -#: src/mainwindow.c:1395 -msgid "Forward the message" -msgstr "Âà±H«H¥ó" - -#: src/mainwindow.c:1406 -msgid "Delete the message" -msgstr "§R°£«H¥ó" - -#: src/mainwindow.c:1414 -msgid "Execute" -msgstr "°õ¦æ" - -#: src/mainwindow.c:1415 -msgid "Execute marked process" -msgstr "°õ¦æ¼Ð°Oªº¦æµ{" - -#: src/mainwindow.c:1423 -msgid "Next" -msgstr "¤U¤@«Ê" - -#: src/mainwindow.c:1424 -msgid "Next unread message" -msgstr "¤U¤@«Ê¥¼Åª¶l¥ó" - -#: src/mainwindow.c:1434 -msgid "Prefs" -msgstr "³ß¦n" - -#: src/mainwindow.c:1435 -msgid "Common preference" -msgstr "¦@¦P³ß¦n³]©w" - -#: src/mainwindow.c:1442 src/progressdialog.c:50 -msgid "Account" -msgstr "±b¸¹" - -#: src/mainwindow.c:1443 -msgid "Account setting" -msgstr "±b¸¹³]©w" - -#: src/mainwindow.c:1659 src/summaryview.c:2542 -msgid "Exit" -msgstr "Â÷¶}" - -#: src/mainwindow.c:1659 src/summaryview.c:2542 -msgid "Exit this program?" -msgstr "±z½T©w­nÂ÷¶}¶Ü¡H" - -#: src/mainwindow.c:1793 -msgid "Sending queued message failed." -msgstr "¼È¦s«H¥ó±H°e¥¢±Ñ¡C" - -#: src/mainwindow.c:1924 -#, c-format -msgid "forced charset: %s\n" -msgstr "±j¨î¨Ï¥Î %s ½s½X¡C\n" - -#: src/mbox.c:68 -#, c-format -msgid "Getting messages from %s into %s...\n" -msgstr "±q %s ¤¤¨ú±o¶l¥ó©ñ¤J %s...\n" - -#: src/mbox.c:78 -msgid "can't read mbox file.\n" -msgstr "µLªkŪ¨ú mbox ÀɮסC\n" - -#: src/mbox.c:85 -#, c-format -msgid "invalid mbox format: %s\n" -msgstr "¤£¦Xªkªº mbox ®æ¦¡¡G%s\n" - -#: src/mbox.c:92 -#, c-format -msgid "malformed mbox: %s\n" -msgstr "·lÃaªº mbox: %s\n" - -#: src/mbox.c:109 -msgid "can't open temporary file\n" -msgstr "µLªk¶}±Ò¼È¦sÀÉ¡C\n" - -#: 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 "µLªk¼g¤J¼È¦sÀÉ¡C\n" - -#: src/mbox.c:226 -#, c-format -msgid "%d messages found.\n" -msgstr "¦@¦³ %d «Ê«H¥ó¡C\n" - -#: src/mbox.c:243 -#, c-format -msgid "can't create lock file %s\n" -msgstr "µLªk¶}±ÒÀÉ®× %s\n" - -#: src/mbox.c:244 -msgid "use 'flock' instead of 'file' if possible.\n" -msgstr "¦pªG¥i¥H¡A½Ð¨Ï¥Î flock ´À¥NÀɮסC\n" - -#: src/mbox.c:256 -#, c-format -msgid "can't create %s\n" -msgstr "µLªk²£¥Í %s\n" - -#: src/mbox.c:262 -msgid "mailbox is owned by another process, waiting...\n" -msgstr "«H½c¥¿³Q¨ä¥Lªº¦æµ{Ū¨ú¤¤, ½Ðµy­Ô...\n" - -#: src/mbox.c:291 -#, c-format -msgid "can't lock %s\n" -msgstr "µLªkÂê¦í %s\n" - -#: src/mbox.c:298 src/mbox.c:345 -msgid "invalid lock type\n" -msgstr "¤£¦Xªkªº lock «¬ºA¡C\n" - -#: src/mbox.c:331 -#, c-format -msgid "can't unlock %s\n" -msgstr "%s µLªk¥´¶} \n" - -#: src/mbox.c:362 -msgid "can't truncate mailbox to zero.\n" -msgstr "µLªk²M°£«H½c¡C\n" - -#: src/mbox.c:383 -#, c-format -msgid "Exporting messages from %s into %s...\n" -msgstr "±N«H¥ó¥Ñ %s ¶×¥X¨ì %s ¤¤...\n" - -#: src/messageview.c:67 -msgid "Creating message view...\n" -msgstr "²£¥Í«H¥óµøµ¡...\n" - -#: src/mh.c:155 -#, 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:199 src/mh.c:258 src/mh.c:329 src/mh.c:396 -msgid "Can't open mark file.\n" -msgstr "µLªk¶}±Ò¼Ð°OªºÀɮסC\n" - -#: src/mh.c:340 src/mh.c:414 -#, c-format -msgid "%s already exists." -msgstr "%s ¤w¦s¦b¡C" - -#: src/mh.c:553 -#, c-format -msgid "Last number in dir %s = %d\n" -msgstr "" - -#: src/mh.c:752 -msgid "\tSearching uncached messages... " -msgstr "´M§ä¤£¦b§Ö¨ú¤ºªº«H¥ó..." - -#: src/mh.c:807 -#, c-format -msgid "%d uncached message(s) found.\n" -msgstr "§ä¨ì %d «Ê¡C\n" - -#: src/mh.c:813 -msgid "\tSorting uncached messages in numerical order... " -msgstr "¥H½s¸¹±Æ§Ç¤¤..." - -#: src/mimeview.c:113 -msgid "/_Open" -msgstr "/¶}±Ò(_O)" - -#: src/mimeview.c:114 -msgid "/Open _with..." -msgstr "/¥Î§Oªºµ{¦¡¶}±Ò(_w)" - -#: src/mimeview.c:115 -msgid "/_Display as text" -msgstr "/¥H¯Â¤å¦r§e²{(_D)" - -#: src/mimeview.c:116 src/summaryview.c:313 -msgid "/_Save as..." -msgstr "¥t¦s·sÀÉ...(_S)" - -#: src/mimeview.c:119 -msgid "/_Check signature" -msgstr "/Àˬd¼Æ¦ìñ³¹(_C)" - -#: src/mimeview.c:139 -msgid "MIME Type" -msgstr "MIME «¬ºA" - -#: src/mimeview.c:143 -msgid "Creating MIME view...\n" -msgstr "²£¥Í MIME µøµ¡...\n" - -#: src/mimeview.c:244 -msgid "Select \"Check signature\" to check" -msgstr "½Ð¿ï¾Ü¡uÀˬd¼Æ¦ìñ³¹¡v¨ÓÀˬd" - -#: src/mimeview.c:415 -msgid "Can't get the part of multipart message." -msgstr "µLªk¨ú±o³o­Óªþ¥[ÀÉ¡C" - -#: src/mimeview.c:674 src/mimeview.c:722 src/mimeview.c:741 src/mimeview.c:764 -msgid "Can't save the part of multipart message." -msgstr "µLªkÀx¦s³o­Óªþ¥[ÀÉ¡C" - -#: src/mimeview.c:708 src/summaryview.c:2020 -msgid "Save as" -msgstr "¥t¦s·sÀÉ" - -#: src/mimeview.c:714 src/summaryview.c:2025 -msgid "Overwrite" -msgstr "Âмg" - -#: src/mimeview.c:715 src/summaryview.c:2026 -msgid "Overwrite existing file?" -msgstr "±z­nÂл\±¼¤w¦s¦bªºÀɮ׶ܡH" - -#: src/mimeview.c:769 -msgid "Open with" -msgstr "¥H§Oªºµ{¦¡¶}±Ò" - -#: src/mimeview.c:770 -#, c-format -msgid "" -"Enter the command line to open file:\n" -"(`%s' will be replaced with file name)" -msgstr "" -"½Ð¿é¤J¶}±Ò«ü¥O¡G\n" -"¡] `%s' ±N·|³Q¸m´«¬°ÀɦW¡^" - -#: src/mimeview.c:822 -#, c-format -msgid "MIME viewer command line is invalid: `%s'" -msgstr "¶}±Ò¦¹ MIME «¬ºAªº©R¥O¬O¿ù»~ªº¡G`%s'" - -#: src/news.c:93 -#, 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:176 -#, 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:245 -#, c-format -msgid "article %d has been already cached.\n" -msgstr "" - -#: src/news.c:257 -#, c-format -msgid "can't select group %s\n" -msgstr "µLªk³]©w·s»D¸s²Õ¡G%s\n" - -#: src/news.c:262 -#, c-format -msgid "getting article %d...\n" -msgstr "" - -#: src/news.c:267 -#, c-format -msgid "can't read article %d\n" -msgstr "µLªkŪ¨ú¤å³¹ %d\n" - -#: src/news.c:299 -msgid "can't post article.\n" -msgstr "µLªkµoªí¤å³¹\n" - -#: src/news.c:323 -#, c-format -msgid "can't retrieve article %d\n" -msgstr "µLªk¨ú±o¤å³¹ %d\n" - -#: src/news.c:393 -#, c-format -msgid "can't set group: %s\n" -msgstr "µLªk³]©w·s»D¸s²Õ¡G%s\n" - -#: src/news.c:400 -#, c-format -msgid "invalid article range: %d - %d\n" -msgstr "¿ù»~ªº¤å³¹½d³ò¡G%d - %d\n" - -#: src/news.c:409 -msgid "no new articles.\n" -msgstr "¨S¦³·s¤å³¹¡C\n" - -#: src/news.c:422 -#, c-format -msgid "getting xover %d - %d in %s...\n" -msgstr "¨ú±o %s ªº xover %d - %d ¤¤...\n" - -#: src/news.c:425 -msgid "can't get xover\n" -msgstr "µLªk¨ú±o xover\n" - -#: src/news.c:431 -msgid "error occurred while getting xover.\n" -msgstr "¨ú±o xover ®Éµo¥Í¿ù»~¡C\n" - -#: src/news.c:439 -#, c-format -msgid "invalid xover line: %s\n" -msgstr "xover ¤º®e¿ù»~¡G%s\n" - -#: src/news.c:456 src/news.c:481 -msgid "can't get xhdr\n" -msgstr "µLªk¨ú±o xover\n" - -#: src/news.c:464 src/news.c:489 -msgid "error occurred while getting xhdr.\n" -msgstr "¨ú±o xover ®Éµo¥Í¿ù»~¡C\n" - -#: src/news.c:613 -#, fuzzy, c-format -msgid "Deleting cached articles 1 - %d ... " -msgstr "\t§R°£©Ò¦³§Ö¨ú¤¤ªº¤å³¹..." - -#: src/news.c:642 -msgid "\tDeleting all cached articles... " -msgstr "\t§R°£©Ò¦³§Ö¨ú¤¤ªº¤å³¹..." - -#: src/nntp.c:52 -#, 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:106 src/nntp.c:169 -#, c-format -msgid "protocol error: %s\n" -msgstr "³q°T¨ó©w¦³¿ù»~¡G%s\n" - -#: src/nntp.c:129 src/nntp.c:175 -msgid "protocol error\n" -msgstr "³q°T¨ó©w¦³¿ù»~\n" - -#: src/nntp.c:225 src/nntp.c:231 -msgid "Error occurred while posting\n" -msgstr "µoªí¤å³¹®Éµo¥Í¿ù»~\n" - -#: src/passphrase.c:77 -msgid "Passphrase" -msgstr "" - -#: src/passphrase.c:240 -msgid "[no user id]" -msgstr "" - -#: src/passphrase.c:244 -#, c-format -msgid "" -"%sPlease enter the passphrase for:\n" -"\n" -" %.*s \n" -"(%.*s)\n" -msgstr "" - -#: src/passphrase.c:248 -msgid "" -"Bad passphrase! Try again...\n" -"\n" -msgstr "" - -#: src/pop.c:98 src/pop.c:145 -msgid "error occurred on authorization\n" -msgstr "±ÂÅv®Éµo¥Í¿ù»~\n" - -#: src/pop.c:117 -msgid "Required APOP timestamp not found in greeting\n" -msgstr "¦b³q°T¤¤§ä¤£¨ì APOP ªº timestamp¡C\n" - -#: src/pop.c:123 -msgid "Timestamp syntax error in greeting\n" -msgstr "³q°T¤¤ªº timestamp »yªk¿ù»~\n" - -#: src/pop.c:171 src/pop.c:212 -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:370 -#: src/prefs_account.c:384 src/prefs_customheader.c:391 -#: src/prefs_customheader.c:437 src/prefs_display_header.c:426 -#: src/prefs_display_header.c:451 src/prefs_filter.c:518 -#: src/prefs_filter.c:542 -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:415 -msgid "Opening account preferences window...\n" -msgstr "¶}±Ò±b¸¹³ß¦n³]©wªºµøµ¡...\n" - -#: src/prefs_account.c:442 -#, c-format -msgid "Account%d" -msgstr "±b¸¹ %d" - -#: src/prefs_account.c:455 -msgid "Preferences for new account" -msgstr "·s±b¸¹ªº³ß¦n³]©w" - -#: src/prefs_account.c:460 -msgid "Preferences for each account" -msgstr "¨C­Ó±b¸¹ªº³ß¦n³]©w" - -#: src/prefs_account.c:483 -msgid "Creating account preferences window...\n" -msgstr "²£¥Í±b¸¹³ß¦n³]©wªºµøµ¡...\n" - -#: src/prefs_account.c:503 -msgid "Basic" -msgstr "°ò¥»³]©w" - -#: src/prefs_account.c:505 src/prefs_common.c:634 -msgid "Receive" -msgstr "±µ¦¬³]©w" - -#: src/prefs_account.c:512 src/prefs_common.c:645 -msgid "Privacy" -msgstr "¨p¤H¸ê®Æ" - -#: src/prefs_account.c:515 -msgid "Advanced" -msgstr "¶i¶¥³]©w" - -#: src/prefs_account.c:569 -msgid "Name of this account" -msgstr "³o­Ó±b¸¹ªº¦WºÙ" - -#: src/prefs_account.c:578 -msgid "Usually used" -msgstr "¹w³]±b¸¹" - -#: src/prefs_account.c:582 -msgid "Personal information" -msgstr "­Ó¤H¸ê°T" - -#: src/prefs_account.c:591 -msgid "Full name" -msgstr "¥þ¦W" - -#: src/prefs_account.c:597 -msgid "Mail address" -msgstr "¹q¤l¶l¥ó¦a§}" - -#: src/prefs_account.c:603 -msgid "Organization" -msgstr "ªA°È¤½¥q/²Õ´" - -#: src/prefs_account.c:627 -msgid "Server information" -msgstr "¦øªA¾¹¸ê°T" - -#: src/prefs_account.c:648 -msgid "POP3 (normal)" -msgstr "POP3 (¤@¯ë¡^" - -#: src/prefs_account.c:650 -msgid "POP3 (APOP auth)" -msgstr "POP3 (APOP »{ÃÒ¡^" - -#: src/prefs_account.c:652 src/prefs_account.c:813 -msgid "IMAP4" -msgstr "" - -#: src/prefs_account.c:654 -msgid "News (NNTP)" -msgstr "·s»D (NNTP)" - -#: src/prefs_account.c:656 -msgid "None (local)" -msgstr "µL (local)" - -#: src/prefs_account.c:678 -msgid "This server requires authentication" -msgstr "³o­Ó¦øªA¾¹»Ý­n»{ÃÒ" - -#: src/prefs_account.c:717 -msgid "News server" -msgstr "·s»D¦øªA¾¹" - -#: src/prefs_account.c:723 -msgid "Server for receiving" -msgstr "±µ¦¬¶l¥ó¦øªA¾¹" - -#: src/prefs_account.c:729 -msgid "SMTP server (send)" -msgstr "µo°e¶l¥ó¦øªA¾¹ (SMTP)" - -#: src/prefs_account.c:736 -msgid "User ID" -msgstr "±b¸¹" - -#: src/prefs_account.c:742 -msgid "Password" -msgstr "±K½X" - -#: src/prefs_account.c:796 -msgid "POP3" -msgstr "" - -#: src/prefs_account.c:804 -msgid "Remove messages on server when received" -msgstr "±µ¦¬¶l¥ó®É¤@¨Ö±q¦øªA¾¹¤W²¾°£¡C" - -#: src/prefs_account.c:806 -#, fuzzy -msgid "Download all messages on server" -msgstr "±µ¦¬¦øªA¾¹¤W©Ò¦³ªº¶l¥ó¡C" - -#: src/prefs_account.c:809 -#, fuzzy -msgid "`Get all' checks for new mail on this account" -msgstr "¡u¥þ³¡Àˬd¡v®ÉÀˬd³o­Ó±b¸¹ªº·s¶l¥ó" - -#: src/prefs_account.c:811 -msgid "Filter messages on receiving" -msgstr "¥´¶}«H¥ó¹LÂo¥\¯à" - -#: src/prefs_account.c:824 -#, fuzzy -msgid "IMAP server directory" -msgstr "¥¼¿é¤J±µ¦¬¶l¥ó¦øªA¾¹¡C" - -#: src/prefs_account.c:870 src/prefs_customheader.c:196 src/prefs_filter.c:244 -msgid "Header" -msgstr "«H¥ó¼ÐÀY³]©w" - -#: src/prefs_account.c:877 -msgid "Add Date header field" -msgstr "¥[¤J¤é´Á" - -#: src/prefs_account.c:878 -msgid "Generate Message-ID" -msgstr "²£¥Í¶l¥óÃѧO½X" - -#: src/prefs_account.c:885 -msgid "Add user-defined header" -msgstr "¥[¤J¨Ï¥ÎªÌ©w¸qªº¼ÐÀY" - -#: src/prefs_account.c:887 src/prefs_common.c:1283 src/prefs_common.c:1308 -msgid " Edit... " -msgstr "½s¿è..." - -#: src/prefs_account.c:897 -msgid "Automatically set following addresses" -msgstr "¦b¬ÛÃöÄæ¦ì¤W¦Û°Ê¥[¤J¤U¦C¹q¤l¶l¥ó«H½c¡G" - -#: src/prefs_account.c:906 -msgid "Cc" -msgstr "½Æ¥»" - -#: src/prefs_account.c:919 -msgid "Bcc" -msgstr "±K¥ó½Æ¥»" - -#: src/prefs_account.c:932 -msgid "Reply-To" -msgstr "¦^«H¦a§}" - -#: src/prefs_account.c:945 -msgid "Authentication" -msgstr "»{ÃÒ" - -#: src/prefs_account.c:953 -msgid "SMTP Authentication (SMTP AUTH)" -msgstr "SMTP »{ÃÒ" - -#: src/prefs_account.c:955 -msgid "Authenticate with POP3 before sending" -msgstr "°e«H«e¥ý°µ POP3 »{ÃÒ" - -#: src/prefs_account.c:989 -msgid "Signature file" -msgstr "ñ¦WÀÉ" - -#: src/prefs_account.c:1018 -msgid "Sign key" -msgstr "" - -#: src/prefs_account.c:1026 -msgid "Use default GnuPG key" -msgstr "¨Ï¥Î¹w³]ªº GnuPG key" - -#: src/prefs_account.c:1035 -msgid "Select key by your email address" -msgstr "®Ú¾Ú§Aªº¹q¤l¶l¥ó¦a§}¿ï¾Ü key" - -#: src/prefs_account.c:1044 -msgid "Specify key manually" -msgstr "¤â°Ê«ü©w key" - -#: src/prefs_account.c:1060 -msgid "User or key ID:" -msgstr "¨Ï¥ÎªÌ¥N¸¹©Î key ªºÃѧO½X¡G" - -#: src/prefs_account.c:1105 -msgid "Specify SMTP port" -msgstr "«ü©w SMTP ³s±µ°ð" - -#: src/prefs_account.c:1117 -msgid "Specify POP3 port" -msgstr "«ü©w POP3 ³s±µ°ð" - -#: src/prefs_account.c:1129 -msgid "Specify domain name" -msgstr "«ü©wºô°ì" - -#: src/prefs_account.c:1176 -msgid "Mail address is not entered." -msgstr "¥¼¿é¤J¹q¤l¶l¥ó«H½c¡C" - -#: src/prefs_account.c:1181 -msgid "SMTP server is not entered." -msgstr "¥¼¿é¤Jµo°e¶l¥ó¦øªA¾¹¡C" - -#: src/prefs_account.c:1186 -msgid "User ID is not entered." -msgstr "¥¼¿é¤J¨Ï¥ÎªÌ±b¸¹¡C" - -#: src/prefs_account.c:1191 -msgid "POP3 server is not entered." -msgstr "¥¼¿é¤J±µ¦¬¶l¥ó¦øªA¾¹¡C" - -#: src/prefs_account.c:1196 -msgid "IMAP4 server is not entered." -msgstr "¥¼¿é¤J±µ¦¬¶l¥ó¦øªA¾¹¡C" - -#: src/prefs_account.c:1201 -msgid "NNTP server is not entered." -msgstr "¥¼¿é¤J·s»D¦øªA¾¹¡C" - -#: src/prefs_common.c:612 -msgid "Creating common preferences window...\n" -msgstr "²£¥Í¦@¦P³ß¦n³]©wµøµ¡...\n" - -#: src/prefs_common.c:616 -msgid "Common Preferences" -msgstr "¦@¦P³ß¦n³]©w" - -#: src/prefs_common.c:640 -msgid "Display" -msgstr "Åã¥Ü" - -#: src/prefs_common.c:642 -msgid "Message" -msgstr "«H¥ó" - -#: src/prefs_common.c:648 -msgid "Interface" -msgstr "¤¶­±" - -#: src/prefs_common.c:650 src/select-keys.c:324 -msgid "Other" -msgstr "¨ä¥L" - -#: src/prefs_common.c:690 src/prefs_common.c:848 -msgid "External program" -msgstr "¥~³¡µ{¦¡" - -#: src/prefs_common.c:699 -msgid "Use external program for incorporation" -msgstr "¥Î¨ä¥L¥~³¡µ{¦¡¨Ó¦¬«H" - -#: src/prefs_common.c:706 src/prefs_common.c:865 -msgid "Program path" -msgstr "µ{¦¡¸ô®|" - -#: src/prefs_common.c:718 -msgid "Local spool" -msgstr "¥»¦a spool" - -#: src/prefs_common.c:729 -msgid "Incorporate from spool" -msgstr "±q spool ¨ú±o«H¥ó" - -#: src/prefs_common.c:731 -msgid "Filter on incorporation" -msgstr "¦¬«H®É¹LÂo" - -#: src/prefs_common.c:739 -msgid "Spool directory" -msgstr "Spool ¥Ø¿ý" - -#: src/prefs_common.c:757 -msgid "Auto-check new mail" -msgstr "¦Û°ÊÀˬd·s¶l¥ó" - -#: src/prefs_common.c:759 -msgid "each" -msgstr "¨C" - -#: src/prefs_common.c:771 -msgid "minute(s)" -msgstr "¤ÀÄÁ" - -#: src/prefs_common.c:780 -msgid "Check new mail on startup" -msgstr "¶}±Ò®ÉÀˬd·s¶l¥ó" - -#: src/prefs_common.c:782 -msgid "News" -msgstr "·s»D" - -#: src/prefs_common.c:790 -msgid "" -"Maximum article number to download\n" -"(unlimited if 0 is specified)" -msgstr "" -"¤@¦¸¤U¸ü¤å³¹¼Æ¶q¤W­­\n" -"(³]¬° 0 «h¤£­­¨î¼Æ¶q)" - -#: src/prefs_common.c:858 -msgid "Use external program for sending" -msgstr "¥Î¨ä¥L¥~³¡µ{¦¡¨Ó°e«H" - -#: src/prefs_common.c:882 -#, fuzzy -msgid "Save sent messages to outbox" -msgstr "±N¤w°e¥X¤§«H¥ó¦s¨ì±H¥ó³Æ¥÷" - -#: src/prefs_common.c:884 -#, fuzzy -msgid "Queue messages that fail to send" -msgstr "±H°e¥¢±Ñªº«H¥ó°e¨ì¼È¦s¸ê®Æ§¨" - -#: src/prefs_common.c:890 -msgid "Outgoing codeset" -msgstr "¿é¥X¦r¶°" - -#: src/prefs_common.c:905 -msgid "Automatic" -msgstr "¦Û°Ê" - -#: src/prefs_common.c:906 -msgid "7bit ascii (US-ASCII)" -msgstr "7¦ì¤¸ ASCII ¦r¶°" - -#: src/prefs_common.c:908 -msgid "Unicode (UTF-8)" -msgstr "" - -#: src/prefs_common.c:910 -msgid "Western European (ISO-8859-1)" -msgstr "¦è¼Ú»y¨t (ISO-8859-1)" - -#: src/prefs_common.c:912 -msgid "Central European (ISO-8859-2)" -msgstr "¤¤¼Ú»y¨t (ISO-8859-2)" - -#: src/prefs_common.c:913 -msgid "Baltic (ISO-8859-13)" -msgstr "ªiùªº®ü»y¨t (ISO-8859-13)" - -#: src/prefs_common.c:914 -msgid "Baltic (ISO-8859-4)" -msgstr "ªiùªº®ü»y¨t (ISO-8859-4)" - -#: src/prefs_common.c:915 -msgid "Greek (ISO-8859-7)" -msgstr "§Æþ»y (ISO-8859-7)" - -#: src/prefs_common.c:916 -msgid "Turkish (ISO-8859-9)" -msgstr "¤g¦Õ¨ä»y (ISO-8859-9)" - -#: src/prefs_common.c:917 -msgid "Cyrillic (ISO-8859-5)" -msgstr "´µ©Ô¤Ò»y (ISO-8859-5)" - -#: src/prefs_common.c:918 -msgid "Cyrillic (KOI8-R)" -msgstr "´µ©Ô¤Ò»y (KOI8-R)" - -#: src/prefs_common.c:919 -msgid "Cyrillic (Windows-1251)" -msgstr "´µ©Ô¤Ò»y (Windows-1251)" - -#: src/prefs_common.c:920 -msgid "Cyrillic (KOI8-U)" -msgstr "´µ©Ô¤Ò»y (KOI8-U)" - -#: src/prefs_common.c:922 -msgid "Japanese (ISO-2022-JP)" -msgstr "¤é¤å (ISO-2022-JP)" - -#: src/prefs_common.c:924 -msgid "Japanese (EUC-JP)" -msgstr "¤é¤å (EUC-JP)" - -#: src/prefs_common.c:925 -msgid "Japanese (Shift_JIS)" -msgstr "¤é¤å (Shift_JIS)" - -#: src/prefs_common.c:928 -msgid "Simplified Chinese (GB2312)" -msgstr "²Å餤¤å (GB2312)" - -#: src/prefs_common.c:929 -msgid "Traditional Chinese (Big5)" -msgstr "ÁcÅ餤¤å (Big5)" - -#: src/prefs_common.c:931 -msgid "Traditional Chinese (EUC-TW)" -msgstr "ÁcÅ餤¤å (EUC-TW)" - -#: src/prefs_common.c:932 -msgid "Chinese (ISO-2022-CN)" -msgstr "¤¤¤å (ISO-2022-CN)" - -#: src/prefs_common.c:934 -msgid "Korean (EUC-KR)" -msgstr "Áú¤å (EUC-KR)" - -#: src/prefs_common.c:984 -msgid "Quotation" -msgstr "¤Þ¥Î³]©w" - -#: src/prefs_common.c:992 -msgid "Quote message when replying" -msgstr "¦^«H®É¤Þ¥Î­ì¤å" - -#: src/prefs_common.c:998 -msgid "Quotation mark" -msgstr "¤Þ¥Îªº­ì¤å«e­±¥[¤W" - -#: src/prefs_common.c:1011 -msgid "Quotation format:" -msgstr "¤Þ¥Î­ì¤å®É³Ì«e­±¥[¤W¡G" - -#: src/prefs_common.c:1016 -msgid " Description of symbols " -msgstr "¯S®í²Å¸¹¥Nªíªº·N¸q" - -#: src/prefs_common.c:1043 -msgid "Insert signature automatically" -msgstr "¦Û°Ê¥[¤Jñ¦W" - -#: src/prefs_common.c:1049 -msgid "Signature separator" -msgstr "ñ¦W¤À¹j²Å¸¹" - -#: src/prefs_common.c:1067 -msgid "Wrap messages at" -msgstr "¨C¦æ³Ì¦h" - -#: src/prefs_common.c:1079 -msgid "characters" -msgstr "­Ó¦r¤¸" - -#: src/prefs_common.c:1087 -msgid "Wrap quotation" -msgstr "§é¦æ®ÉÅã¥Ü²Å¸¹" - -#: src/prefs_common.c:1089 -msgid "Wrap before sending" -msgstr "±H°e¤§«e¦Û°Ê§é¦æ" - -#: src/prefs_common.c:1128 -msgid "Font" -msgstr "¦r«¬" - -#: src/prefs_common.c:1137 -msgid "Text" -msgstr "" - -#: src/prefs_common.c:1160 -msgid "Translate header name (such as `From:', `Subject:')" -msgstr "±N¼ÐÀY¦WºÙ½Ķ¥X¨Ó" - -#: src/prefs_common.c:1163 -msgid "Display unread number next to folder name" -msgstr "­Y¦³¥¼Åª«H¥ó¡A´NÅã¥Ü¦b¸ê®Æ§¨¦WºÙ«á­±" - -#. ---- Summary ---- -#: src/prefs_common.c:1167 -msgid "Summary View" -msgstr "«H¥ó¦Cªí" - -#: src/prefs_common.c:1176 -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:1178 -msgid "Enable horizontal scroll bar" -msgstr "Åã¥Ü¤ô¥­±²¶b" - -#: src/prefs_common.c:1184 -msgid "Date format" -msgstr "¤é´Á®æ¦¡" - -#: src/prefs_common.c:1195 -msgid "" -"Ordinary characters placed in the format string are copied without " -"conversion. Conversion specifiers are introduced by a % character, and are " -"replaced as follows:\n" -"%a: the abbreviated weekday name\n" -"%A: the full weekday name\n" -"%b: the abbreviated month name\n" -"%B: the full month name\n" -"%c: the preferred date and time for the current locale\n" -"%C: the century number (year/100)\n" -"%d: the day of the month as a decimal number\n" -"%H: the hour as a decimal number using a 24-hour clock\n" -"%I: the hour as a decimal number using a 12-hour clock\n" -"%j: the day of the year as a decimal number\n" -"%m: the month as a decimal number\n" -"%M: the minute as a decimal number\n" -"%p: either AM or PM\n" -"%S: the second as a decimal number\n" -"%w: the day of the week as a decimal number\n" -"%x: the preferred date for the current locale\n" -"%y: the last two digits of a year\n" -"%Y: the year as a decimal number\n" -"%Z: the time zone or name or abbreviation" -msgstr "" - -#: src/prefs_common.c:1224 -msgid " Set display item of summary... " -msgstr "³]©w«H¥ó¦Cªí¿ï¶µ..." - -#: src/prefs_common.c:1278 -msgid "Enable coloration of message" -msgstr "«H¥ó¤¤ªº¦r¤¹³\Åܦâ" - -#: src/prefs_common.c:1297 -msgid "Display 2-byte alphabet and numeric with 1-byte character" -msgstr "±N¥þ§Î­^¤å»P¼Æ¦r¥H¥b§Î¨ÓÅã¥Ü" - -#: src/prefs_common.c:1299 -msgid "Display header pane above message view" -msgstr "¦bÅã¥Ü«H¥óÄæ¤W¤è¥[¤J¼ÐÀY¸ê°T" - -#: src/prefs_common.c:1306 -msgid "Display short headers on message view" -msgstr "¦b«H¥ó¹wÄý¤¤Åã¥Ü«H¥ó¼ÐÀY" - -#: src/prefs_common.c:1326 -msgid "Line space" -msgstr "¦æ¶¡¶Z" - -#: src/prefs_common.c:1340 src/prefs_common.c:1380 -msgid "pixel(s)" -msgstr "¹³¯À (pixels)" - -#: src/prefs_common.c:1345 -msgid "Leave space on head" -msgstr "¨C¦æ³Ì«e­±ªÅ¤@®æ" - -#: src/prefs_common.c:1347 -msgid "Scroll" -msgstr "±²¶b" - -#: src/prefs_common.c:1354 -msgid "Half page" -msgstr "¤@¦¸¥b­¶" - -#: src/prefs_common.c:1360 -msgid "Smooth scroll" -msgstr "¥­·Æ±²°Ê" - -#: src/prefs_common.c:1366 -msgid "Step" -msgstr "¨C¦¸±²°Ê" - -#: src/prefs_common.c:1427 -msgid "Encrypt message by default" -msgstr "«H¥ó¦Û°Ê¥[±K" - -#: src/prefs_common.c:1430 -msgid "Sign message by default" -msgstr "«H¥ó¦Û°Ê°µ¼Æ¦ìñ³¹" - -#: src/prefs_common.c:1433 -msgid "Automatically check signatures" -msgstr "¦Û°ÊÀˬd¼Æ¦ìñ³¹" - -#: src/prefs_common.c:1436 -msgid "Show signature check result in a popup window" -msgstr "±N¼Æ¦ìñ³¹Àˬdµ²ªGÅã¥Ü¦b¥t¤@µøµ¡" - -#: src/prefs_common.c:1440 -msgid "Grab input while entering a passphrase" -msgstr "" - -#: src/prefs_common.c:1445 -msgid "Display warning on startup if GnuPG doesn't work" -msgstr "­Y GnuPG µLªk¹B§@¡A«h¦b±Ò°Ê®Éµo¥Xĵ§i" - -#. create default signkey box -#: src/prefs_common.c:1452 -msgid "Default Sign Key" -msgstr "¹w³]ªº¼Æ¦ìñ³¹" - -#: src/prefs_common.c:1554 -msgid "" -"Emulate the behavior of mouse operation of\n" -"Emacs-based mailer" -msgstr "¼ÒÀÀ Emacs-based mailer ªº·Æ¹«¦æ¬°" - -#: src/prefs_common.c:1561 -msgid "Open first unread message when entering a folder" -msgstr "¶i¤J¸ê®Æ§¨®Éª½±µ¸õ¨ì²Ä¤@«Ê¥¼Åª«H¥ó¤W" - -#: src/prefs_common.c:1565 -msgid "Go to inbox after receiving new mail" -msgstr "±µ¦¬§¹·s¶l¥ó«áª½±µ¶i¤J¦¬¥ó§¨¤¤" - -#: src/prefs_common.c:1573 -msgid "Execute immediately when moving or deleting messages" -msgstr "²¾°Ê©Î§R°£«H¥ó®É¥ß§Y°õ¦æ" - -#: src/prefs_common.c:1580 -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:1587 -msgid "Add address to destination when double-clicked" -msgstr "¦b¦ì§}襤¡A¥i§Q¥ÎÂùÀ»ª½±µ±N¸Ó¹q¤l¶l¥ó¥[¤J¦¬«H¤H¤¤" - -#: src/prefs_common.c:1589 -msgid "On exit" -msgstr "Â÷¶}³]©w" - -#: src/prefs_common.c:1597 -msgid "Confirm on exit" -msgstr "Â÷¶}®É½T»{" - -#: src/prefs_common.c:1604 -msgid "Empty trash on exit" -msgstr "Â÷¶}®É²MªÅ§R°£ªº¶l¥ó" - -#: src/prefs_common.c:1606 -msgid "Ask before emptying" -msgstr "²M°£®É½T»{" - -#: src/prefs_common.c:1610 -msgid "Warn if there are queued messages" -msgstr "Â÷¶}®É­Y¦³©|¥¼°e¥X¤§«H¥ó§Yµo¥Xĵ§i" - -#: src/prefs_common.c:1648 -#, 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:1655 src/prefs_common.c:1680 src/prefs_common.c:1696 -msgid "Command" -msgstr "©R¥O¦C" - -#: src/prefs_common.c:1673 -#, c-format -msgid "Printing (%s will be replaced with file name)" -msgstr "¦C¦L«ü¥O¡]%s ±N·|³Q¸m´«¦¨ÀɦW¡^" - -#: src/prefs_common.c:1689 -#, 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:1752 -msgid "Set message colors" -msgstr "³]©w«H¥óÃC¦â" - -#: src/prefs_common.c:1760 -msgid "Colors" -msgstr "ÃC¦â" - -#: src/prefs_common.c:1794 -msgid "Quoted Text - First Level" -msgstr "¤Þ¨¥¤º®e - ²Ä¤@¼h" - -#: src/prefs_common.c:1800 -msgid "Quoted Text - Second Level" -msgstr "¤Þ¨¥¤º®e - ²Ä¤G¼h" - -#: src/prefs_common.c:1806 -msgid "Quoted Text - Third Level" -msgstr "¤Þ¨¥¤º®e - ²Ä¤T¼h" - -#: src/prefs_common.c:1812 -msgid "URI link" -msgstr "¶W³sµ²" - -#: src/prefs_common.c:1819 -msgid "Recycle quote colors" -msgstr "" - -#: src/prefs_common.c:1881 -msgid "Pick color for quotation level 1" -msgstr "¿ï¾Ü²Ä¤@¼h¤Þ¨¥ªºÃC¦â" - -#: src/prefs_common.c:1884 -msgid "Pick color for quotation level 2" -msgstr "¿ï¾Ü²Ä¤G¼h¤Þ¨¥ªºÃC¦â" - -#: src/prefs_common.c:1887 -msgid "Pick color for quotation level 3" -msgstr "¿ï¾Ü²Ä¤T¼h¤Þ¨¥ªºÃC¦â" - -#: src/prefs_common.c:1890 -msgid "Pick color for URI" -msgstr "¿ï¾Ü¶W³sµ²ªºÃC¦â" - -#: src/prefs_common.c:2025 -msgid "Description of symbols" -msgstr "¯S®í²Å¸¹¥Nªíªº·N¸q" - -#: src/prefs_common.c:2052 -#, 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" -"µo«H¤H¥þ¦W\n" -"µo«H¤Hªº©m\n" -"µo«H¤Hªº¦W\n" -"¥DÃD\n" -"¦¬«H¤H\n" -"«H¥óÃѧO½X\n" -"%" - -#: src/prefs_common.c:2155 -msgid "Set display item" -msgstr "«H¥ó¦CªíÅã¥Ü³]©w" - -#: src/prefs_common.c:2172 -msgid "Mark" -msgstr "¼Ð°O" - -#: src/prefs_common.c:2174 -msgid "MIME" -msgstr "" - -#: src/prefs_common.c:2175 -msgid "Number" -msgstr "½s¸¹" - -#: src/prefs_common.c:2177 src/summaryview.c:353 -msgid "Date" -msgstr "¤é´Á" - -#: src/prefs_common.c:2178 src/summaryview.c:354 -msgid "From" -msgstr "¨Ó·½(From)" - -#: src/prefs_common.c:2179 src/summaryview.c:355 -msgid "Subject" -msgstr "¥DÃD" - -#: src/prefs_common.c:2232 -msgid "Font selection" -msgstr "¿ï¾Ü¦r«¬" - -#: src/prefs_customheader.c:148 -msgid "Custom headers" -msgstr "¼ÐÀY" - -#: src/prefs_customheader.c:150 -msgid "Creating custom header setting window...\n" -msgstr "²£¥Í¼ÐÀYµøµ¡...\n" - -#: src/prefs_customheader.c:168 -msgid "Custom header setting" -msgstr "/¥H¯Â¤å¦r§e²{(_D)" - -#: src/prefs_customheader.c:212 -msgid "Value" -msgstr "­È" - -#: src/prefs_customheader.c:320 -msgid "Reading custom header configuration...\n" -msgstr "Ū¨ú¹LÂo«H¥óªº³]©w¤¤...\n" - -#: src/prefs_customheader.c:365 -msgid "Writing custom header configuration...\n" -msgstr "¼g¤J¹LÂo«H¥óªº³]©w¤¤...\n" - -#: src/prefs_customheader.c:490 src/prefs_display_header.c:542 -#: src/prefs_filter.c:613 -msgid "Header name is not set." -msgstr "¼ÐÀY¥¼³]©w" - -#: src/prefs_customheader.c:541 -msgid "Delete header" -msgstr "§R°£¸ê®Æ§¨" - -#: src/prefs_customheader.c:542 -msgid "Do you really want to delete this header?" -msgstr "±z½T©w­n§R°£³o¶µ³W«h¶Ü¡H" - -#: src/prefs_display_header.c:187 -msgid "Creating display header setting window...\n" -msgstr "²£¥Í¼ÐÀYµøµ¡...\n" - -#: src/prefs_display_header.c:210 -msgid "Display header setting" -msgstr "/¥H¯Â¤å¦r§e²{(_D)" - -#: src/prefs_display_header.c:237 -msgid "Header name" -msgstr "«H¥ó¼ÐÀY³]©w" - -#: src/prefs_display_header.c:269 -msgid "Displayed Headers" -msgstr "®i¥Ü %s ªº¼ÐÀY" - -#: src/prefs_display_header.c:327 -msgid "Hidden headers" -msgstr "«H¥ó¼ÐÀY³]©w" - -#: src/prefs_display_header.c:357 -msgid "Show all unspecified headers" -msgstr "/Åã¥Ü©Ò¦³ªº¼ÐÀY(_h)" - -#: src/prefs_display_header.c:382 -msgid "Reading configuration for displaying headers...\n" -msgstr "Ū¨ú²ÕºA³]©w¤¤...\n" - -#: src/prefs_display_header.c:420 -msgid "Writing configuration for displaying headers...\n" -msgstr "¼g¤J¹LÂo«H¥óªº³]©w¤¤...\n" - -#: src/prefs_display_header.c:552 -msgid "This header is already in the list." -msgstr "¸ê®Æ§¨ `%s' ¤w¦s¦b¡C" - -#: src/prefs_filter.c:184 -msgid "Registered rules" -msgstr "¤w¬ö¿ý¤§¹LÂo³W«h" - -#: src/prefs_filter.c:186 -msgid "Creating filter setting window...\n" -msgstr "" - -#: src/prefs_filter.c:205 -msgid "Filter setting" -msgstr "«H¥ó¹LÂo³]©w" - -#: src/prefs_filter.c:228 -msgid "Operator" -msgstr "¹Bºâ¤¸" - -#: src/prefs_filter.c:266 src/prefs_filter.c:626 src/prefs_filter.c:765 -#: src/prefs_filter.c:777 -msgid "(none)" -msgstr "(µL)" - -#: src/prefs_filter.c:272 -msgid "Keyword" -msgstr "ÃöÁä¦r" - -#: src/prefs_filter.c:293 -msgid "Predicate" -msgstr "¥]§t/¤£¥]§t" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:635 -#: src/prefs_filter.c:638 src/prefs_filter.c:782 src/prefs_filter.c:785 -msgid "contains" -msgstr "¥]§t" - -#: src/prefs_filter.c:305 src/prefs_filter.c:316 src/prefs_filter.c:782 -#: src/prefs_filter.c:785 -msgid "not contain" -msgstr "¤£¥]§t" - -#: src/prefs_filter.c:332 -msgid "Destination" -msgstr "©ñ¨ì..." - -#: src/prefs_filter.c:356 -msgid "Use regex" -msgstr "¨Ï¥Î¥¿³W»y¨¥ªí¥Üªk" - -#: src/prefs_filter.c:360 -msgid "Don't receive" -msgstr "©Úµ´±µ¦¬¦¹«H¥ó" - -#: src/prefs_filter.c:385 -msgid "Register" -msgstr "¥[¤J" - -#: src/prefs_filter.c:391 -msgid " Substitute " -msgstr "´À´«" - -#: src/prefs_filter.c:478 -msgid "Reading filter configuration...\n" -msgstr "Ū¨ú¹LÂo«H¥óªº³]©w¤¤...\n" - -#: src/prefs_filter.c:514 -msgid "Writing filter configuration...\n" -msgstr "¼g¤J¹LÂo«H¥óªº³]©w¤¤...\n" - -#: src/prefs_filter.c:557 -msgid "(New)" -msgstr "¡]·s¡^" - -#: src/prefs_filter.c:608 -msgid "Destination is not set." -msgstr "¥Øªº¸ê®Æ§¨¥¼³]©w" - -#: src/prefs_filter.c:719 -msgid "Delete rule" -msgstr "§R°£³W«h" - -#: src/prefs_filter.c:720 -msgid "Do you really want to delete this rule?" -msgstr "±z½T©w­n§R°£³o¶µ³W«h¶Ü¡H" - -#: src/procmime.c:686 -msgid "Code conversion failed.\n" -msgstr "Âà½X¥¢±Ñ¡C\n" - -#: src/procmsg.c:138 -msgid "Cache data is corrupted\n" -msgstr "§Ö¨ú¸ê®Æ·l·´\n" - -#: 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:457 -msgid "Mark file not found.\n" -msgstr "§ä¤£¨ì¼Ð°OªºÀɮסC\n" - -#: src/procmsg.c:459 -#, c-format -msgid "Mark version is different (%d != %d). Discarding it.\n" -msgstr "" - -#: src/procmsg.c:475 -msgid "Can't open mark file with append mode.\n" -msgstr "µLªk­×§ï¼Ð°OªºÀɮסC\n" - -#: src/procmsg.c:480 -msgid "Can't open mark file with write mode.\n" -msgstr "µLªk¶}±Ò¼Ð°OªºÀɮסC\n" - -#: src/procmsg.c:663 -msgid "Sending queued message failed.\n" -msgstr "¼È¦s¸ê®Æ§¨¤¤ªº«H¥ó±H°e¥¢±Ñ¡C\n" - -#: src/procmsg.c:720 -#, c-format -msgid "Print command line is invalid: `%s'\n" -msgstr "¦C¦L©R¥O¿ù»~¡G`%s'\n" - -#: src/progressdialog.c:51 -msgid "Status" -msgstr "ª¬ºA" - -#: src/progressdialog.c:53 -msgid "Creating progress dialog...\n" -msgstr "" - -#: src/recv.c:111 -msgid "error occurred while retrieving data.\n" -msgstr "§ì¨ú¸ê®Æ®Éµo¥Í¿ù»~¡C\n" - -#: src/recv.c:148 src/recv.c:185 src/recv.c:200 -msgid "Can't write to file.\n" -msgstr "µLªk¼g¤JÀɮסC\n" - -#: src/rfc2015.c:137 src/rfc2015.c:172 -msgid "Oops: Signature not verified" -msgstr "ĵ§i¡Gñ³¹¥¼³QÀˬd" - -#: src/rfc2015.c:140 src/rfc2015.c:175 -msgid "No signature found" -msgstr "¥¼µo²{ñ³¹" - -#: src/rfc2015.c:143 -msgid "Good signature" -msgstr "ñ³¹Àˬd¥¿½T" - -#: src/rfc2015.c:146 -msgid "BAD signature" -msgstr "ñ³¹Àˬd¿ù" - -#: src/rfc2015.c:149 src/rfc2015.c:184 -msgid "No public key to verify the signature" -msgstr "¨S¦³ public key ¨ÑÀˬdñ³¹" - -#: src/rfc2015.c:152 src/rfc2015.c:187 -msgid "Error verifying the signature" -msgstr "Àˬdñ³¹®Éµo¥Í¿ù»~" - -#: src/rfc2015.c:155 src/rfc2015.c:190 -msgid "Different results for signatures" -msgstr "ñ³¹Àˬdµ²ªG¿ù»~" - -#: src/rfc2015.c:158 src/rfc2015.c:193 -msgid "Error: Unknown status" -msgstr "¿ù»~¡G¤£©úªºª¬ºA" - -#: src/rfc2015.c:178 -#, c-format -msgid "Good signature from \"%s\"" -msgstr "¨Ó¦Û %s ªºÃ±³¹Àˬd¥¿½T" - -#: src/rfc2015.c:181 -#, c-format -msgid "BAD signature from \"%s\"" -msgstr "¨Ó¦Û %s ªºÃ±³¹Àˬd¿ù»~" - -#: src/rfc2015.c:213 -msgid "Cannot find user ID for this key." -msgstr "µLªk¦b³o­Ó key ¤¤§ä¨ì¨Ï¥ÎªÌ¥N¸¹" - -#: src/rfc2015.c:224 -#, c-format -msgid " aka \"%s\"\n" -msgstr "" - -#: src/rfc2015.c:252 -#, c-format -msgid "Signature made %s\n" -msgstr "" - -#: src/rfc2015.c:261 -#, c-format -msgid "Key fingerprint: %s\n" -msgstr "" - -#: src/select-keys.c:101 -#, c-format -msgid "Please select key for `%s'" -msgstr "" - -#: src/select-keys.c:104 -#, c-format -msgid "Collecting info for `%s' ... %c" -msgstr "" - -#: src/select-keys.c:272 -msgid "Select Keys" -msgstr "" - -#: src/select-keys.c:300 -msgid "Key ID" -msgstr "" - -#: src/select-keys.c:303 -msgid "Val" -msgstr "" - -#: src/select-keys.c:325 -msgid "Select" -msgstr "" - -#: src/select-keys.c:445 -msgid "Add key" -msgstr "" - -#: src/select-keys.c:446 -msgid "Enter another user or key ID\n" -msgstr "" - -#: src/send.c:148 -msgid "Queued message header is broken.\n" -msgstr "¼È¦s¸ê®Æ§¨¤¤ªº«H¥ó¼ÐÀY¿ù»~¡C\n" - -#: src/send.c:157 -msgid "Account not found. Using current account...\n" -msgstr "§ä¤£¨ì±b¸¹¡A±N§ï¥Î²{¦³±b¸¹...\n" - -#: src/send.c:168 -msgid "Account not found.\n" -msgstr "§ä¤£¨ì±b¸¹¡C\n" - -#: src/send.c:250 -#, c-format -msgid "Connecting to SMTP server: %s ..." -msgstr "³s½u¨ì SMTP ¦øªA¾¹ %s..." - -#: src/send.c:254 -msgid "Connecting" -msgstr "³s½u¤¤" - -#: src/send.c:261 -msgid "Sending MAIL FROM..." -msgstr "°e¥X MAIL FROM ¼ÐÀY..." - -#: src/send.c:262 -msgid "Sending" -msgstr "°e«H¤¤" - -#: src/send.c:269 -msgid "Sending RCPT TO..." -msgstr "°e¥X RCPT TO ¼ÐÀY..." - -#: src/send.c:276 -msgid "Sending DATA..." -msgstr "°e¥X«H¥ó¸ê®Æ DATA..." - -#: src/send.c:292 -#, c-format -msgid "Sending message (%d / %d bytes)" -msgstr "°e¥X·s¶l¥ó (%d / %d) (%d / %d bytes)" - -#: src/send.c:309 -msgid "Quitting..." -msgstr "Â÷¶}" - -#: src/send.c:330 -#, 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:341 -msgid "Error occurred while sending HELO\n" -msgstr "°e HELO °T®§®Éµo¥Í¿ù»~\n" - -#: src/send.c:357 -msgid "Sending message" -msgstr "°e¥X«H¥ó" - -#: 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:289 -msgid "/M_ove..." -msgstr "/²¾°Ê...(_o)" - -#: src/summaryview.c:290 -msgid "/_Copy..." -msgstr "/½Æ»s...(_C)" - -#: src/summaryview.c:292 -msgid "/E_xecute" -msgstr "/°õ¦æ(_x)" - -#: src/summaryview.c:293 -msgid "/_Mark" -msgstr "/¼Ð°O(_M)" - -#: src/summaryview.c:294 -msgid "/_Mark/_Mark" -msgstr "/¼Ð°O(_M)/¼Ð°O(_M)" - -#: src/summaryview.c:295 -msgid "/_Mark/_Unmark" -msgstr "/¼Ð°O(_M)/¥h°£¼Ð°O(_U)" - -#: src/summaryview.c:296 -msgid "/_Mark/---" -msgstr "/¼Ð°O(_M)/---" - -#: src/summaryview.c:297 -msgid "/_Mark/Mark as unr_ead" -msgstr "/¼Ð°O(_M)/¼Ð°O¦¨¥¼Åª(_e)" - -#: src/summaryview.c:298 -#, fuzzy -msgid "/_Mark/Mark as rea_d" -msgstr "/¼Ð°O(_M)/¼Ð°O¦¨¥¼Åª(_e)" - -#: src/summaryview.c:301 -msgid "/_Reply" -msgstr "/¦^ÂÐ(_R)" - -#: src/summaryview.c:302 -msgid "/Repl_y to sender" -msgstr "/¥þ³¡¦^ÂÐ(_l)" - -#: src/summaryview.c:303 -msgid "/Reply to a_ll" -msgstr "/¥þ³¡¦^ÂÐ(_l)" - -#: src/summaryview.c:304 -msgid "/_Forward" -msgstr "/Âà±H(_F)" - -#: src/summaryview.c:305 -#, fuzzy -msgid "/Forward as a_ttachment" -msgstr "/Âà±H¦¨ªþ¥[ÀÉ(_t)" - -#: src/summaryview.c:308 -msgid "/Open in new _window" -msgstr "/¦b·sµøµ¡¶}±Ò(_w)" - -#: src/summaryview.c:309 -msgid "/View so_urce" -msgstr "/Åã¥Ü«H¥ó­ì©l½X(_u)" - -#: src/summaryview.c:310 -msgid "/Show all _header" -msgstr "/Åã¥Ü©Ò¦³ªº¼ÐÀY(_h)" - -#: src/summaryview.c:311 -#, fuzzy -msgid "/Re-_edit" -msgstr "/­«·s½s¿è(_e)" - -#: src/summaryview.c:314 -msgid "/_Print..." -msgstr "/¦C¦L...(_P)" - -#: src/summaryview.c:316 -msgid "/Select _all" -msgstr "/¥þ¿ï(_a)" - -#: src/summaryview.c:322 -msgid "M" -msgstr "" - -#: src/summaryview.c:322 -msgid "U" -msgstr "" - -#: src/summaryview.c:337 -msgid "Creating summary view...\n" -msgstr "" - -#: src/summaryview.c:352 -msgid "No." -msgstr "" - -#: src/summaryview.c:573 -msgid "Process mark" -msgstr "«H¥ó¼Ð°O" - -#: src/summaryview.c:574 -msgid "Some marks are left. Process it?" -msgstr "¬Y¨Ç«H¥ó¤w³Q¼Ð°O¡C­nÄ~Äò¶Ü¡H" - -#: src/summaryview.c:599 -msgid "" -"empty folder\n" -"\n" -msgstr "" -"ªÅªº¸ê®Æ§¨\n" -"\n" - -#: src/summaryview.c:611 -#, c-format -msgid "Scanning folder (%s)..." -msgstr "±½´y¸ê®Æ§¨(%s)..." - -#: src/summaryview.c:680 -msgid "done." -msgstr "§¹¦¨¡C" - -#: src/summaryview.c:815 -msgid "No unread message" -msgstr "¨S¦³¥¼Åª«H¥ó" - -#: src/summaryview.c:816 -msgid "No unread message found. Go to next folder?" -msgstr "¨S¦³¥¼Åª«H¥ó¡C­n¨ì¤U¤@­Ó¸ê®Æ§¨¶Ü¡H" - -#: src/summaryview.c:957 src/summaryview.c:959 -msgid "Attracting messages by subject..." -msgstr "®i¶}«H¥ó¤¤..." - -#: src/summaryview.c:1102 -#, c-format -msgid "%d deleted" -msgstr "%d ¤w§R°£" - -#: src/summaryview.c:1106 -#, c-format -msgid "%s%d moved" -msgstr "%s%d ¤w²¾°Ê" - -#: src/summaryview.c:1107 src/summaryview.c:1114 -msgid ", " -msgstr "" - -#: src/summaryview.c:1112 -#, c-format -msgid "%s%d copied" -msgstr "%s%d ¤w½Æ»s" - -#: src/summaryview.c:1129 -msgid " item(s) selected" -msgstr "«Ê¤w¿ï¾Ü" - -#: src/summaryview.c:1140 -#, c-format -msgid "%d new, %d unread, %d total (%s)" -msgstr "%d «Ê¥¼Åª¡A%d «Ê¤wŪ¡A¦@ %d «Ê(%s)" - -#: src/summaryview.c:1146 -#, c-format -msgid "%d new, %d unread, %d total" -msgstr "%d «Ê¥¼Åª¡A%d «Ê¤wŪ¡A¦@ %d «Ê" - -#: src/summaryview.c:1187 src/summaryview.c:1188 -msgid "Sorting summary..." -msgstr "«H¥ó±Æ§Ç¤¤..." - -#: src/summaryview.c:1226 -msgid "\tSetting summary from message data..." -msgstr "\t²£¥Í«H¥ó¦Cªí¤¤..." - -#: src/summaryview.c:1228 -msgid "Setting summary from message data..." -msgstr "²£¥Í«H¥ó¦Cªí¤¤..." - -#: src/summaryview.c:1337 -#, c-format -msgid "Writing summary cache (%s)..." -msgstr "¼g¤J§Ö¨ú(%s)..." - -#: src/summaryview.c:1389 -msgid "(No Date)" -msgstr "(¨S¦³¤é´Á)" - -#: src/summaryview.c:1654 -#, c-format -msgid "Message %d is marked\n" -msgstr "«H¥ó %d ¤w¼Ð°O\n" - -#: src/summaryview.c:1683 -#, c-format -msgid "Message %d is marked as being read\n" -msgstr "«H¥ó %d ¤w¼Ð°O¦¨¤wŪ\n" - -#: src/summaryview.c:1718 -#, c-format -msgid "Message %d is marked as unread\n" -msgstr "«H¥ó %d ¤w¼Ð°O¦¨¥¼Åª\n" - -#: src/summaryview.c:1760 -#, c-format -msgid "Message %s/%d is set to delete\n" -msgstr "«H¥ó %s/%d ¤w¼Ð°O§R°£\n" - -#: src/summaryview.c:1774 -msgid "Current folder is Trash." -msgstr "±z²{¦b¦b¤w§R°£«H¥ó¸ê®Æ§¨¤¤¡C" - -#: src/summaryview.c:1796 src/summaryview.c:1798 -msgid "Deleting duplicated messages..." -msgstr "§R°£­«ÂЪº«H¥ó..." - -#: src/summaryview.c:1848 -#, c-format -msgid "Message %s/%d is unmarked\n" -msgstr "«H¥ó %s/%d ¤w®ø°£¼Ð°O\n" - -#: src/summaryview.c:1885 -#, c-format -msgid "Message %d is set to move to %s\n" -msgstr "«H¥ó %d ¤w³]©w²¾°Ê¨ì %s\n" - -#: src/summaryview.c:1897 -msgid "Destination is same as current folder." -msgstr "¥Ø¼Ð¸ê®Æ§¨»P¨Ó·½¸ê®Æ§¨¬Û¦P" - -#: src/summaryview.c:1947 -#, c-format -msgid "Message %d is set to copy to %s\n" -msgstr "«H¥ó %d ¤w³]©w½Æ»s¨ì %s\n" - -#: src/summaryview.c:1960 -msgid "Destination to copy is same as current folder." -msgstr "«H¥óµLªk½Æ»s¨ì¦P¤@­Ó¸ê®Æ§¨¤º" - -#: src/summaryview.c:1993 -msgid "Selecting all messages..." -msgstr "¿ï¾Ü©Ò¦³ªº«H¥ó..." - -#: src/summaryview.c:2047 -msgid "Print" -msgstr "¦C¦L" - -#: src/summaryview.c:2048 -#, 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:2054 -#, c-format -msgid "" -"Print command line is invalid:\n" -"`%s'" -msgstr "" -"¿é¤Jªº¦C¦L«ü¥O¦³»~¡G\n" -"`%s'" - -#: src/summaryview.c:2276 src/summaryview.c:2277 -msgid "Building threads..." -msgstr "²£¥Í«H¥ó¦ê¦C¤¤..." - -#: src/summaryview.c:2299 src/summaryview.c:2300 -msgid "Unthreading..." -msgstr "¸Ñ°£«H¥ó¦ê¦C¤¤..." - -#: src/summaryview.c:2322 -msgid "Unthreading for execution..." -msgstr "" - -#: src/summaryview.c:2409 -msgid "filtering..." -msgstr "" - -#: src/summaryview.c:2410 -msgid "Filtering..." -msgstr "¹LÂo¤¤..." - -#: src/summaryview.c:2516 -#, c-format -msgid "Go to %s\n" -msgstr "¨ì %s\n" - -#: src/textview.c:138 -msgid "Creating text view...\n" -msgstr "" - -#: src/textview.c:366 -msgid "To save this part, pop up the context menu with " -msgstr "­nÀx¦s³o­ÓÀɮסA½Ð«ö·Æ¹«¥kÁä¨Ã¦b¥Ø¿ý¤¤" - -#: src/textview.c:367 -msgid "right click and select `Save as...', " -msgstr "¿ï¾Ü¡y¥t¦s·sÀÉ¡z...¡A©ÎªÌ¬O«ö¤U `y' Áä¡C" - -#: src/textview.c:368 -msgid "" -"or press `y' key.\n" -"\n" -msgstr "" -"©ÎªÌ¬O«ö¤U `y' Áä¡C\n" -"\n" - -#: src/textview.c:370 -msgid "To display this part as a text message, select " -msgstr "­n¥H¤å¦r¼Ò¦¡Æ[¬Ý³o­ÓÀɮסA½Ð¿ï¾Ü" - -#: src/textview.c:371 -msgid "" -"`Display as text', or press `t' key.\n" -"\n" -msgstr "" -"¡y¥H¯Â¤å¦r§e²{¡z¡A©ÎªÌ¬O«ö¤U `t' Áä¡C\n" -"\n" - -#: src/textview.c:373 -msgid "To open this part with external program, select " -msgstr "­n¥H¨ä¥Lµ{¦¡¶}±Ò³o­ÓÀɮסA½Ð¿ï¾Ü" - -#: src/textview.c:374 -msgid "`Open' or `Open with...', " -msgstr "¡y¶}±Ò¡z©Î¡y¥H§Oªºµ{¦¡¶}±Ò¡z¡A" - -#: src/textview.c:375 -msgid "or double-click, or click the center button, " -msgstr "¤]¥i¥HÂùÀ»¸ÓÀɮסA©Î¬O«ö·Æ¹«¤¤Áä¡A" - -#: src/textview.c:376 -msgid "or press `l' key." -msgstr "©Î¬O«ö `l' Áä¡C" - -#: src/textview.c:395 -msgid "This signature has not been checked yet.\n" -msgstr "³o­Ó¼Æ¦ìñ³¹©|¥¼¸g¹LÀˬd\n" - -#: src/textview.c:396 -msgid "To check it, pop up the context menu with\n" -msgstr "­nÀˬd¼Æ¦ìñ³¹¡A½Ð«ö¤U·Æ¹«¥kÁä¨Ã¦b¥Ø¿ý¤¤\n" - -#: src/textview.c:397 -msgid "right click and select `Check signature'.\n" -msgstr "¿ï¾Ü¡uÀˬd¼Æ¦ìñ³¹¡v¡C\n" - -#: src/utils.c:1547 -#, c-format -msgid "writing to %s failed.\n" -msgstr "¼g¤J¨ì %s ªº°Ê§@¥¢±Ñ¡C\n" - -#: src/utils.c:1588 -#, c-format -msgid "move_file(): file %s already exists." -msgstr "¸ê®Æ§¨ `%s' ¤w¦s¦b¡C" - -#: src/utils.c:1729 -#, c-format -msgid "Open URI command line is invalid: `%s'" -msgstr "¶}±Ò URL ªº©R¥O¿ù»~¡G`%s'" - -#~ msgid "/Remove _news server" -#~ msgstr "/²¾°£·s»D¦øªA¾¹(_n)" - -#~ msgid "Delete IMAP4 server" -#~ msgstr "§R°£ IMAP4 ¦øªA¾¹" - -#~ msgid "Really delete news server `%s'?" -#~ msgstr "±z½T©w­n§R°£·s»D¦øªA¾¹ `%s' ¶Ü¡H" - -#~ msgid "Delete news server" -#~ msgstr "§R°£·s»D¦øªA¾¹" - -#~ msgid "deleting message %d...\n" -#~ msgstr "§R°£¶l¥ó %d...\n" - -#~ msgid "/_View/_Toolbar/_Non-display" -#~ msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¤£Åã¥Ü(_N)" - -#~ msgid "/_Message/_Mark/Mark it as _being read" -#~ msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¼Ð°O¦¨¤wŪ(_b)" - -#~ msgid "deleting article %d...\n" -#~ msgstr "§R°£¤å³¹½s¸¹ %d...\n" - -#~ msgid "/_Mark/Make it as _being read" -#~ msgstr "/¼Ð°O(_M)/¼Ð°O¦¨¤wŪ(_M)" - -#, fuzzy -#~ msgid "Show other headers" -#~ msgstr "/Åã¥Ü©Ò¦³ªº¼ÐÀY(_h)" - -#~ msgid "Receive at getting from all accounts" -#~ msgstr "¤@¦¸±µ¦¬©Ò¦³±b¸¹ªº¶l¥ó" - -#~ msgid "Enable smooth scrolling on the message view" -#~ msgstr "Åý«H¥ó¦Cªí¤¤±²¶b·Æ°Ê§ó¥­¶¶" - -#~ 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 "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" diff --git a/src/.cvsignore b/src/.cvsignore deleted file mode 100644 index 69a7305c4..000000000 --- a/src/.cvsignore +++ /dev/null @@ -1,14 +0,0 @@ -Makefile -.deps -.libs -sylpheed -Makefile.in -tags -*.swp -TAGS -quote_fmt_lex.c -quote_fmt_parse.c -quote_fmt_parse.h -matcher_parser_lex.c -matcher_parser_parse.c -matcher_parser_parse.h diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index aa41e4b28..000000000 --- a/src/Makefile.am +++ /dev/null @@ -1,189 +0,0 @@ -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 \ - prefs_display_header.c prefs_display_header.h \ - prefs_customheader.c prefs_customheader.h \ - account.c account.h \ - displayheader.c displayheader.h \ - customheader.c customheader.h \ - addressbook.c addressbook.h \ - addr_compl.c addr_compl.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 \ - grouplistdialog.c grouplistdialog.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 \ - md5.c md5.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 \ - export.c export.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 \ - sigstatus.c sigstatus.h \ - simple-gettext.c \ - manual.c manual.h \ - gtkstext.c gtkstext.h \ - scoring.c scoring.h \ - prefs_folder_item.c prefs_folder_item.h \ - matcher.c matcher.h \ - prefs_matcher.c prefs_matcher.h \ - prefs_scoring.c prefs_scoring.h \ - filtering.c filtering.h \ - prefs_filtering.c prefs_filtering.h \ - mbox_folder.c mbox_folder.h \ - quote_fmt_lex.l quote_fmt_lex.h \ - quote_fmt_parse.y quote_fmt.h \ - addressitem.h \ - mgutils.c mgutils.h \ - vcard.c vcard.h \ - jpilot.c jpilot.h \ - syldap.c syldap.h \ - editvcard.c editvcard.h \ - editjpilot.c editjpilot.h \ - editldap.c editldap.h \ - editldap_basedn.c editldap_basedn.h \ - labelcolors.c labelcolors.h \ - ssl.c ssl.h \ - gtkspell.c gtkspell.h gtkxtext.h \ - template.c template.h \ - prefs_templates.c prefs_templates.h \ - template_select.c template_select.h - - -EXTRA_DIST = \ - quote_fmt_parse.h \ - 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/continue.xpm \ - pixmaps/complete.xpm \ - pixmaps/error.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_send_queue.xpm \ - pixmaps/stock_mail_compose.xpm \ - pixmaps/stock_news_compose.xpm \ - pixmaps/stock_mail_reply.xpm \ - pixmaps/stock_mail_reply_to_all.xpm \ - pixmaps/stock_mail_reply_to_author.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 \ - pixmaps/vcard.xpm \ - pixmaps/jpilot.xpm \ - pixmaps/category.xpm \ - pixmaps/ldap.xpm \ - pixmaps/ignorethread.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)"\" \ - -DSYSCONFDIR=\""$(sysconfdir)"\" - -YFLAGS = -d - - -BUILT_SOURCES = \ - quote_fmt_lex.c \ - quote_fmt_parse.c \ - quote_fmt_parse.h - diff --git a/src/about.c b/src/about.c deleted file mode 100644 index efcbf111a..000000000 --- a/src/about.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * 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> -#if HAVE_SYS_UTSNAME_H -# include <sys/utsname.h> -#endif - -#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]; - -#if HAVE_SYS_UTSNAME_H - struct utsname utsbuf; -#endif - 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_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); - -#if HAVE_SYS_UTSNAME_H - 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); -#else - g_snprintf(buf, sizeof(buf), - "GTK+ version %d.%d.%d\n" - "Operating System: Windoze", - gtk_major_version, gtk_minor_version, gtk_micro_version); -#endif - - 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 -#if USE_LDAP - " LDAP" -#endif -#if USE_JPILOT - " JPilot" -#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, - _("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 deleted file mode 100644 index 55496fc73..000000000 --- a/src/about.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 deleted file mode 100644 index 94bf40ec3..000000000 --- a/src/account.c +++ /dev/null @@ -1,798 +0,0 @@ -/* - * 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 <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 "inc.h" -#include "gtkutils.h" -#include "utils.h" -#include "alertpanel.h" - -#include "pixmaps/mark.xpm" - -typedef enum -{ - COL_DEFAULT = 0, - COL_GETALL = 1, - COL_NAME = 2, - COL_PROTOCOL = 3, - COL_SERVER = 4 -} EditAccountColumnPos; - -# define N_EDIT_ACCOUNT_COLS 5 - -#define PREFSBUFSIZE 1024 - -PrefsAccount *cur_account; - -static GList *account_list = NULL; - -static struct EditAccount { - GtkWidget *window; - GtkWidget *clist; - GtkWidget *close_btn; -} edit_account; - -static GdkPixmap *markxpm; -static GdkBitmap *markxpmmask; - -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_set_recv_at_get_all (void); - -static void account_edit_close (void); -static gint account_delete_event (GtkWidget *widget, - GdkEventAny *event, - gpointer data); -static void account_selected (GtkCList *clist, - gint row, - gint column, - GdkEvent *event, - gpointer data); -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; -} - -/* - * account_find_from_address: - * @address: Email address string. - * - * Find a mail (not news) account with the specified email address. - * - * Return value: The found account, or NULL if not found. - */ -PrefsAccount *account_find_from_address(const gchar *address) -{ - GList *cur; - PrefsAccount *ac; - - for (cur = account_list; cur != NULL; cur = cur->next) { - ac = (PrefsAccount *)cur->data; - if (ac->protocol != A_NNTP && !strcmp2(address, ac->address)) - 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) -{ - inc_autocheck_timer_remove(); - - if (compose_get_compose_list()) { - alertpanel_notice(_("Some composing windows are open.\n" - "Please close all the composing windows before editing the accounts.")); - inc_autocheck_timer_set(); - 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); - inc_autocheck_timer_remove(); - - if (!ac_prefs) return; - - account_list = g_list_append(account_list, ac_prefs); - - if (ac_prefs->is_default) - account_set_as_default(ac_prefs); - - if (ac_prefs->recv_at_getall) - account_set_as_recv_at_get_all(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); - if (ac_prefs->protocol == A_IMAP4) - folder->create_tree(folder); - folderview_set_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_as_recv_at_get_all(PrefsAccount *ac_prefs) -{ - PrefsAccount *ap; - GList *cur; - - for (cur = account_list; cur != NULL; cur = cur->next) { - ap = (PrefsAccount *)cur->data; - if (ap->account_name == ac_prefs->account_name) { - if (ap->recv_at_getall == 0) - ap->recv_at_getall = 1; - else - ap->recv_at_getall = 0; - } - } - -} - - -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); - if (ap->protocol == A_IMAP4) - folder->create_tree(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 *recvatgetall_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_delete_event), 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); - gtk_widget_realize(window); - - 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] = "D"; - titles[COL_GETALL] = "G"; - 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 , 10); - gtk_clist_set_column_width (GTK_CLIST(clist), COL_GETALL , 10); - 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); - - gtk_signal_connect (GTK_OBJECT (clist), "select_row", - GTK_SIGNAL_FUNC (account_selected), NULL); - - 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 default 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); - - recvatgetall_btn = gtk_button_new_with_label (_(" Enable/Disable 'Receive at Get all' ")); - gtk_widget_show (recvatgetall_btn); - gtk_box_pack_start (GTK_BOX (vbox2), recvatgetall_btn, TRUE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT(recvatgetall_btn), "clicked", - GTK_SIGNAL_FUNC (account_set_recv_at_get_all), 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); - - PIXMAP_CREATE(clist, markxpm, markxpmmask, mark_xpm); - - 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); - inc_autocheck_timer_remove(); - - 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_set_recv_at_get_all(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); - - if ((ac_prefs->protocol != A_POP3) && (ac_prefs->protocol != A_APOP)) return; - - account_set_as_recv_at_get_all(ac_prefs); - account_clist_set(); -} - -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); - - inc_autocheck_timer_set(); -} - -static gint account_delete_event(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - account_edit_close(); - return TRUE; -} - -static void account_selected(GtkCList *clist, gint row, gint column, - GdkEvent *event, gpointer data) -{ - if (event && event->type == GDK_2BUTTON_PRESS) - account_edit_prefs(); -} - -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_GETALL] = (ac_prefs->protocol == A_POP3 || - ac_prefs->protocol == A_APOP) && - ac_prefs->recv_at_getall ? "*" : ""; - text[COL_NAME] = ac_prefs->account_name; -#if !USE_SSL - 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_LOCAL ? "Local" : - ac_prefs->protocol == A_NNTP ? "NNTP" : ""; -#else - text[COL_PROTOCOL] = ac_prefs->protocol == A_POP3 ? (!ac_prefs->ssl_pop ? "POP3" : "POP3 (SSL)") : - ac_prefs->protocol == A_APOP ? (!ac_prefs->ssl_pop ? "APOP" : "APOP (SSL)") : - ac_prefs->protocol == A_IMAP4 ? (!ac_prefs->ssl_imap ? "IMAP4" : "IMAP4 (SSL)") : - ac_prefs->protocol == A_LOCAL ? "Local" : - ac_prefs->protocol == A_NNTP ? "NNTP" : ""; -#endif - 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_GETALL, text[COL_GETALL]); - 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]); - } - - if (*text[COL_DEFAULT]) - gtk_clist_set_pixmap(clist, row, COL_DEFAULT, - markxpm, markxpmmask); - if (*text[COL_GETALL]) - gtk_clist_set_pixmap(clist, row, COL_GETALL, - markxpm, markxpmmask); - - 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); - gtkut_clist_set_focus_row(clist, row); - } - } - - if (prev_row >= 0) { - gtk_clist_select_row(clist, prev_row, -1); - gtkut_clist_set_focus_row(clist, prev_row); - } - - 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 deleted file mode 100644 index 1eba2010a..000000000 --- a/src/account.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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_address (const gchar *address); -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); -void account_set_as_recv_at_get_all (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 deleted file mode 100644 index 7aea906da..000000000 --- a/src/addr_compl.c +++ /dev/null @@ -1,988 +0,0 @@ -/* - * 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) : 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); -} - -/* Need unique data to make unregistering signal handler possible for the auto - * completed entry */ -#define COMPLETION_UNIQUE_DATA (GINT_TO_POINTER(0xfeefaa)) - -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, - COMPLETION_UNIQUE_DATA, - NULL, - 0, - 0); /* magic */ -} - -void address_completion_unregister_entry(GtkEntry *entry) -{ - GtkObject *entry_obj; - - g_return_if_fail(entry != NULL); - g_return_if_fail(GTK_IS_ENTRY(entry)); - - entry_obj = gtk_object_get_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK); - g_return_if_fail(entry_obj); - g_return_if_fail(entry_obj == GTK_OBJECT(entry)); - - /* has the hooked property? */ - gtk_object_set_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK, NULL); - - /* remove the hook */ - gtk_signal_disconnect_by_func(GTK_OBJECT(entry), - GTK_SIGNAL_FUNC(address_completion_entry_key_pressed), - COMPLETION_UNIQUE_DATA); -} - -/* should be called when main window with address completion entries - * terminates. - * NOTE: this function assumes that it is called upon destruction of - * the window */ -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 deleted file mode 100644 index b6ba7c62a..000000000 --- a/src/addr_compl.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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_unregister_entry (GtkEntry *entry); -void address_completion_end (GtkWidget *mainwindow); - -#endif /* __ADDR_COMPL_H__ */ diff --git a/src/addressbook.c b/src/addressbook.c deleted file mode 100644 index 53ee29965..000000000 --- a/src/addressbook.c +++ /dev/null @@ -1,3707 +0,0 @@ -/* - * 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 <setjmp.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 "addressitem.h" -#include "vcard.h" -#include "editvcard.h" - -#ifdef USE_JPILOT -#include "jpilot.h" -#include "editjpilot.h" -#endif - -#ifdef USE_LDAP -#include <pthread.h> -#include "syldap.h" -#include "editldap.h" - -// Interval to check for LDAP search results -// #define ADDRESSBOOK_LDAP_TIMER_INTERVAL 100 -#define ADDRESSBOOK_LDAP_BUSYMSG "Busy" - -#endif - -#include "pixmaps/dir-close.xpm" -#include "pixmaps/dir-open.xpm" -#include "pixmaps/group.xpm" -#include "pixmaps/vcard.xpm" -#ifdef USE_JPILOT -#include "pixmaps/jpilot.xpm" -#include "pixmaps/category.xpm" -#endif -#ifdef USE_LDAP -#include "pixmaps/ldap.xpm" -#endif - -// XML tag names for top level folders -#define ADDRESS_TAG_COMMON "common_address" -#define ADDRESS_TAG_PERSONAL "personal_address" -#define ADDRESS_TAG_VCARD "vcard_list" -#ifdef USE_JPILOT -#define ADDRESS_TAG_JPILOT "jpilot_list" -#endif -#ifdef USE_LDAP -#define ADDRESS_TAG_LDAP "ldap_list" -#endif - -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 156 - -#define COL_FOLDER_WIDTH 170 -#define ADDRESSBOOK_WIDTH 640 -#define ADDRESSBOOK_HEIGHT 360 - -#define ADDRESSBOOK_MSGBUF_SIZE 2048 - -static GdkPixmap *folderxpm; -static GdkBitmap *folderxpmmask; -static GdkPixmap *folderopenxpm; -static GdkBitmap *folderopenxpmmask; -static GdkPixmap *groupxpm; -static GdkBitmap *groupxpmmask; -static GdkPixmap *vcardxpm; -static GdkBitmap *vcardxpmmask; -#ifdef USE_JPILOT -static GdkPixmap *jpilotxpm; -static GdkBitmap *jpilotxpmmask; -static GdkPixmap *categoryxpm; -static GdkBitmap *categoryxpmmask; -#endif -#ifdef USE_LDAP -static GdkPixmap *ldapxpm; -static GdkBitmap *ldapxpmmask; -#endif - -// Pilot library indicator (set at run-time) -static _have_pilot_library_; - -// LDAP library indicator (set at run-time) -static _have_ldap_library_; - -// Message buffer -static gchar addressbook_msgbuf[ ADDRESSBOOK_MSGBUF_SIZE ]; - -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 (gboolean show); -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_lup_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); -static void addressbook_entry_gotfocus (GtkWidget *widget); - -#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); - -// VCard edit stuff -static void addressbook_new_vcard_cb ( gpointer data, - guint action, - GtkWidget *widget ); - -#ifdef USE_JPILOT -// JPilot edit stuff -static void addressbook_new_jpilot_cb ( gpointer data, - guint action, - GtkWidget *widget ); -#endif - -#ifdef USE_LDAP -// LDAP edit stuff -static void addressbook_new_ldap_cb ( gpointer data, - guint action, - GtkWidget *widget ); -#endif - -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 AddressVCard *addressbook_parse_vcard ( XMLFile *file ); -static void addressbook_write_vcard ( FILE *fp, - AddressVCard *vcard, - guint level ); -static void addressbook_vcard_show_message ( VCardFile *vcf ); - -#ifdef USE_JPILOT -static AddressJPilot *addressbook_parse_jpilot ( XMLFile *file ); -static void addressbook_write_jpilot ( FILE *fp, - AddressJPilot *jpilot, - guint level ); -static void addressbook_jpilot_show_message ( JPilotFile *jpf ); -#endif -#ifdef USE_LDAP -static AddressLDAP *addressbook_parse_ldap ( XMLFile *file ); -static void addressbook_write_ldap ( FILE *fp, - AddressLDAP *ldapi, - guint level ); -static void addressbook_ldap_show_message ( SyldapServer *server ); -#endif - -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/New _V-Card"), "<alt>D", addressbook_new_vcard_cb, 0, NULL}, -#ifdef USE_JPILOT - {N_("/_File/New _J-Pilot"), "<alt>J", addressbook_new_jpilot_cb, 0, NULL}, -#endif -#ifdef USE_LDAP - {N_("/_File/New _Server"), "<alt>S", addressbook_new_ldap_cb, 0, NULL}, -#endif - {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_("/New _V-Card"), NULL, addressbook_new_vcard_cb, 0, NULL}, -#ifdef USE_JPILOT - {N_("/New _J-Pilot"), NULL, addressbook_new_jpilot_cb, 0, NULL}, -#endif -#ifdef USE_LDAP - {N_("/New _Server"), NULL, addressbook_new_ldap_cb, 0, NULL}, -#endif - {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(TRUE); - 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_all(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(gboolean show) -{ - 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 *statusbar; - GtkWidget *hmbox; - GtkWidget *hbbox; - GtkWidget *hsbox; - 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; - GtkItemFactory *menu_factory; - gint n_entries; - - gchar *titles[N_COLS] = {_("Name"), _("E-Mail address"), _("Remarks")}; - gchar *text; - gint i; - - debug_print("Creating addressbook window...\n"); - - // Global flag if we have library installed (at run-time) - _have_pilot_library_ = FALSE; - _have_ldap_library_ = FALSE; - - 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); - menu_factory = gtk_item_factory_from_widget(menubar); - - 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)); - gtk_signal_connect(GTK_OBJECT(entry), "focus_in_event", - GTK_SIGNAL_FUNC(addressbook_entry_gotfocus), NULL); - -#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); - - // Status bar - hsbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH); - statusbar = gtk_statusbar_new(); - gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH); - - // Button panel - 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); - gtk_signal_connect(GTK_OBJECT(lup_btn), "clicked", - GTK_SIGNAL_FUNC(addressbook_lup_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); - PIXMAP_CREATE(window, vcardxpm, vcardxpmmask, vcard_xpm); -#ifdef USE_JPILOT - PIXMAP_CREATE(window, jpilotxpm, jpilotxpmmask, jpilot_xpm); - PIXMAP_CREATE(window, categoryxpm, categoryxpmmask, category_xpm); -#endif -#ifdef USE_LDAP - PIXMAP_CREATE(window, ldapxpm, ldapxpmmask, ldap_xpm); -#endif - - 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); - - text = _("V-Card"); - addrbook.vcard = - gtk_ctree_insert_node(GTK_CTREE(ctree), - NULL, NULL, &text, FOLDER_SPACING, - folderxpm, folderxpmmask, - folderopenxpm, folderopenxpmmask, - FALSE, FALSE); - -#ifdef USE_JPILOT - text = _("J-Pllot"); - addrbook.jpilot = - gtk_ctree_insert_node(GTK_CTREE(ctree), - NULL, NULL, &text, FOLDER_SPACING, - folderxpm, folderxpmmask, - folderopenxpm, folderopenxpmmask, - FALSE, FALSE); - if( jpilot_test_pilot_lib() ) { - _have_pilot_library_ = TRUE; - menu_set_sensitive( menu_factory, "/File/New J-Pilot", TRUE ); - } - else { - menu_set_sensitive( menu_factory, "/File/New J-Pilot", FALSE ); - } -#endif - -#ifdef USE_LDAP - text = _("Directory"); - addrbook.ldap = - gtk_ctree_insert_node(GTK_CTREE(ctree), - NULL, NULL, &text, FOLDER_SPACING, - folderxpm, folderxpmmask, - folderopenxpm, folderopenxpmmask, - FALSE, FALSE); - if( syldap_test_ldap_lib() ) { - _have_ldap_library_ = TRUE; - menu_set_sensitive( menu_factory, "/File/New Server", TRUE ); - } - else { - menu_set_sensitive( menu_factory, "/File/New Server", FALSE ); - } -#endif - - /* 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.menubar = menubar; - addrbook.ctree = ctree; - addrbook.clist = clist; - addrbook.entry = entry; - addrbook.statusbar = statusbar; - addrbook.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Addressbook Window" ); - - 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; - addrbook.menu_factory = menu_factory; - - address_completion_start(window); - - if (show) - 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_status_show( gchar *msg ) { - if( addrbook.statusbar != NULL ) { - gtk_statusbar_pop( GTK_STATUSBAR(addrbook.statusbar), addrbook.status_cid ); - if( msg ) { - gtk_statusbar_push( GTK_STATUSBAR(addrbook.statusbar), addrbook.status_cid, msg ); - } - } -} - -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; - gboolean remFlag; - - 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); - remFlag = FALSE; - - 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) { - remFlag = TRUE; - } - else if (obj->type == ADDR_VCARD) { - remFlag = TRUE; - } - else if (obj->type == ADDR_JPILOT) { - remFlag = TRUE; - } - else if (obj->type == ADDR_LDAP) { - remFlag = TRUE; - } - - if( remFlag ) { - 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 = mgu_create_address(); - 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_menubar_set_sensitive( gboolean sensitive ) { - menu_set_sensitive( addrbook.menu_factory, "/File/New Address", sensitive ); - menu_set_sensitive( addrbook.menu_factory, "/File/New Group", sensitive ); - menu_set_sensitive( addrbook.menu_factory, "/File/New Folder", sensitive ); - menu_set_sensitive( addrbook.menu_factory, "/File/New V-Card", sensitive ); -#ifdef USE_JPILOT - menu_set_sensitive( addrbook.menu_factory, "/File/New J-Pilot", sensitive ); -#endif -#ifdef USE_LDAP - menu_set_sensitive( addrbook.menu_factory, "/File/New Server", sensitive ); -#endif - gtk_widget_set_sensitive( addrbook.reg_btn, sensitive ); - gtk_widget_set_sensitive( addrbook.del_btn, sensitive ); -} - -static void addressbook_menuitem_set_sensitive( AddressObject *obj, GtkCTreeNode *node ) { - gboolean canEdit = TRUE; - if( obj->type == ADDR_FOLDER ) { - if( node == addrbook.common ) { - canEdit = FALSE; - } - if( node == addrbook.personal ) { - canEdit = FALSE; - } - if( node == addrbook.vcard ) { - canEdit = FALSE; - menu_set_sensitive( addrbook.menu_factory, "/File/New V-Card", TRUE ); - } -#ifdef USE_JPILOT - else if( node == addrbook.jpilot ) { - canEdit = FALSE; - if( _have_pilot_library_ ) { - menu_set_sensitive( addrbook.menu_factory, "/File/New J-Pilot", TRUE ); - } - } -#endif -#ifdef USE_LDAP - else if( node == addrbook.ldap ) { - canEdit = FALSE; - if( _have_ldap_library_ ) { - menu_set_sensitive( addrbook.menu_factory, "/File/New Server", TRUE ); - } - } -#endif - else { - menu_set_sensitive( addrbook.menu_factory, "/File/New Address", TRUE ); - menu_set_sensitive( addrbook.menu_factory, "/File/New Group", TRUE ); - menu_set_sensitive( addrbook.menu_factory, "/File/New Folder", TRUE ); - gtk_widget_set_sensitive( addrbook.reg_btn, TRUE ); - gtk_widget_set_sensitive( addrbook.del_btn, TRUE ); - } - } - else if( obj->type == ADDR_GROUP ) { - menu_set_sensitive( addrbook.menu_factory, "/File/New Address", TRUE ); - gtk_widget_set_sensitive( addrbook.reg_btn, TRUE ); - gtk_widget_set_sensitive( addrbook.del_btn, TRUE ); - } -#ifdef USE_JPILOT - else if( obj->type == ADDR_JPILOT ) { - if( ! _have_pilot_library_ ) canEdit = FALSE; - } - else if( obj->type == ADDR_CATEGORY ) { - canEdit = FALSE; - } -#endif -#ifdef USE_LDAP - else if( obj->type == ADDR_LDAP ) { - if( ! _have_ldap_library_ ) canEdit = FALSE; - } -#endif - menu_set_sensitive( addrbook.menu_factory, "/File/Edit", canEdit ); - menu_set_sensitive( addrbook.menu_factory, "/File/Delete", canEdit ); -} - -static void addressbook_tree_selected(GtkCTree *ctree, GtkCTreeNode *node, - gint column, gpointer data) -{ - AddressObject *obj; - - addrbook.selected = node; - addrbook.open_folder = FALSE; - addressbook_status_show( "" ); - if( addrbook.entry != NULL ) { - gtk_entry_set_text(GTK_ENTRY(addrbook.entry), ""); - } - - obj = gtk_ctree_node_get_row_data(ctree, node); - if( obj == NULL ) return; - - addrbook.opened = node; - - if( obj->type == ADDR_GROUP || obj->type == ADDR_FOLDER || - obj->type == ADDR_VCARD || obj->type == ADDR_JPILOT || - obj->type == ADDR_CATEGORY || obj->type == ADDR_LDAP ) { - addressbook_set_clist(obj); - } - - if( obj->type == ADDR_VCARD ) { - // Read from file - VCardFile *vcf; - vcf = ADDRESS_VCARD(obj)->cardFile; - vcard_read_data( vcf ); - addressbook_vcard_show_message( vcf ); - ADDRESS_VCARD(obj)->items = vcard_get_address_list( vcf ); - addressbook_set_clist( obj ); - } -#ifdef USE_JPILOT - else if( obj->type == ADDR_JPILOT ) { - if( _have_pilot_library_ ) { - // Read from file - JPilotFile *jpf; - GList *catList, *catNode; - AddressCategory *acat; - GtkCTreeNode *childNode, *nextNode; - GtkCTreeRow *currRow; - - jpf = ADDRESS_JPILOT(obj)->pilotFile; - addressbook_jpilot_show_message( jpf ); - if( jpilot_get_modified( jpf ) ) { - jpilot_read_data( jpf ); - catList = jpilot_get_category_items( jpf ); - - // Remove existing categories - currRow = GTK_CTREE_ROW( node ); - if( currRow ) { - while( nextNode = currRow->children ) { - gtk_ctree_remove_node( ctree, nextNode ); - } - } - - // Load new categories into the tree. - catNode = catList; - while( catNode ) { - AddressItem *item = catNode->data; - acat = g_new(AddressCategory, 1); - ADDRESS_OBJECT_TYPE(acat) = ADDR_CATEGORY; - acat->name = g_strdup( item->name ); - acat->items = NULL; - acat->pilotFile = jpf; - acat->category = item; - catNode = g_list_next( catNode ); - addressbook_add_object(node, ADDRESS_OBJECT(acat)); - } - - ADDRESS_JPILOT(obj)->items = catList; - } - addressbook_set_clist( obj ); - } - } - else if( obj->type == ADDR_CATEGORY ) { - if( _have_pilot_library_ ) { - // Read from file - JPilotFile *jpf; - - jpf = ADDRESS_JPILOT(obj)->pilotFile; - if( jpilot_get_modified( jpf ) ) { - // Force parent to be reloaded - gtk_ctree_select( GTK_CTREE(addrbook.ctree), GTK_CTREE_ROW(node)->parent); - gtk_ctree_expand( GTK_CTREE(addrbook.ctree), GTK_CTREE_ROW(node)->parent); - } - else { - AddressItem *item = NULL; - AddressCategory *acat = ADDRESS_CATEGORY(obj); - if( acat ) item = acat->category; - if( item ) { - ADDRESS_CATEGORY(obj)->items = - jpilot_get_address_list_cat( jpf, item->categoryID ); - } - addressbook_set_clist( obj ); - } - } - } -#endif -#ifdef USE_LDAP - else if( obj->type == ADDR_LDAP ) { - if( _have_ldap_library_ ) { - // Read from cache - SyldapServer *server; - server = ADDRESS_LDAP(obj)->ldapServer; - addressbook_ldap_show_message( server ); - if( ! server->busyFlag ) { - ADDRESS_LDAP(obj)->items = syldap_get_address_list( server ); - addressbook_set_clist( obj ); - } - } - } -#endif - - // Setup main menu selections - addressbook_menubar_set_sensitive( FALSE ); - addressbook_menuitem_set_sensitive( obj, node ); -} - -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) { - if (prefs_common.add_address_by_click && - addrbook.target_compose) - addressbook_to_clicked(NULL, NULL); - else - 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_entry_gotfocus( GtkWidget *widget ) { - gtk_editable_select_region( GTK_EDITABLE(addrbook.entry), 0, -1 ); -} - -static void addressbook_list_button_pressed(GtkWidget *widget, - GdkEventButton *event, - gpointer data) -{ - GtkCList *clist = GTK_CLIST(widget); - gint row, column; - gint tRow, tCol; - AddressObject *obj, *pobj; - - if (!event) return; - - obj = gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), - addrbook.opened); - g_return_if_fail(obj != NULL); - - pobj = gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), addrbook.selected); - if( pobj ) { - if( pobj->type == ADDR_VCARD || - pobj->type == ADDR_JPILOT || - pobj->type == ADDR_CATEGORY || - pobj->type == ADDR_LDAP ) { - menu_set_sensitive(addrbook.menu_factory, "/File/Edit", FALSE); - menu_set_sensitive(addrbook.menu_factory, "/File/Delete", FALSE); - } - } - - if (event->button != 3) return; - 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); - - if( obj->type != ADDR_VCARD && - obj->type != ADDR_JPILOT && - obj->type != ADDR_CATEGORY && - obj->type != ADDR_LDAP ) { - menu_set_sensitive(addrbook.list_factory, "/Edit", TRUE); - menu_set_sensitive(addrbook.list_factory, "/Delete", TRUE); - } - } - - if( !( addrbook.opened == addrbook.vcard || - addrbook.opened == addrbook.jpilot || - addrbook.opened == addrbook.ldap ) ) { - - if( obj->type == ADDR_FOLDER || obj->type == ADDR_GROUP ) { - menu_set_sensitive(addrbook.list_factory, "/New Address", TRUE); - gtk_widget_set_sensitive( addrbook.reg_btn, TRUE ); - gtk_widget_set_sensitive( addrbook.del_btn, 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); - if( node == addrbook.vcard ) { - menu_set_sensitive(addrbook.tree_factory, "/New V-Card", TRUE); - } -#ifdef USE_JPILOT - else if( node == addrbook.jpilot ) { - if( _have_pilot_library_ ) { - menu_set_sensitive(addrbook.tree_factory, "/New J-Pilot", TRUE); - } - } -#endif -#ifdef USE_LDAP - else if( node == addrbook.ldap ) { - if( _have_ldap_library_ ) { - menu_set_sensitive(addrbook.tree_factory, "/New Server", TRUE); - } - } -#endif - else { - menu_set_sensitive(addrbook.tree_factory, "/New Address", TRUE); - 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); - } - gtk_widget_set_sensitive( addrbook.reg_btn, TRUE ); - gtk_widget_set_sensitive( addrbook.del_btn, TRUE ); - } - } - else if (obj->type == ADDR_GROUP) { - menu_set_sensitive(addrbook.tree_factory, "/New Address", TRUE); - menu_set_sensitive(addrbook.tree_factory, "/Edit", TRUE); - menu_set_sensitive(addrbook.tree_factory, "/Delete", TRUE); - gtk_widget_set_sensitive( addrbook.reg_btn, TRUE ); - gtk_widget_set_sensitive( addrbook.del_btn, TRUE ); - } - else if (obj->type == ADDR_VCARD) { - menu_set_sensitive(addrbook.tree_factory, "/Edit", TRUE); - menu_set_sensitive(addrbook.tree_factory, "/Delete", TRUE); - } -#ifdef USE_JPILOT - else if (obj->type == ADDR_JPILOT) { - if( _have_pilot_library_ ) { - menu_set_sensitive(addrbook.tree_factory, "/Edit", TRUE); - menu_set_sensitive(addrbook.tree_factory, "/Delete", TRUE); - } - } - else if (obj->type == ADDR_CATEGORY) { - if( _have_pilot_library_ ) { - menu_set_sensitive(addrbook.tree_factory, "/Edit", FALSE); - menu_set_sensitive(addrbook.tree_factory, "/Delete", FALSE); - } - } -#endif -#ifdef USE_LDAP - else if (obj->type == ADDR_LDAP) { - if( _have_ldap_library_ ) { - menu_set_sensitive(addrbook.tree_factory, "/Edit", TRUE); - menu_set_sensitive(addrbook.tree_factory, "/Delete", TRUE); - } - } -#endif - else { - return; - } - 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 = NULL; - GtkCTreeNode *node = NULL, *parentNode = NULL; - - 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 || - obj->type == ADDR_VCARD || obj->type == ADDR_JPILOT || - obj->type == ADDR_CATEGORY || obj->type == ADDR_LDAP ); - - if (obj->type == ADDR_GROUP) { - addressbook_edit_group(addrbook.selected); - return; - } - - if( obj->type == ADDR_VCARD ) { - AddressVCard *vcard = ADDRESS_VCARD(obj); - if( addressbook_edit_vcard( vcard ) == NULL ) return; - new_name = vcard->name; - parentNode = addrbook.vcard; - } -#ifdef USE_JPILOT - else if( obj->type == ADDR_JPILOT ) { - AddressJPilot *jpilot = ADDRESS_JPILOT(obj); - if( ! _have_pilot_library_ ) return; - if( addressbook_edit_jpilot( jpilot ) == NULL ) return; - new_name = jpilot->name; - parentNode = addrbook.jpilot; - } -#endif -#ifdef USE_LDAP - else if( obj->type == ADDR_LDAP ) { - AddressLDAP *ldapi = ADDRESS_LDAP(obj); - if( ! _have_ldap_library_ ) return; - if( addressbook_edit_ldap( ldapi ) == NULL ) return; - new_name = ldapi->name; - parentNode = addrbook.ldap; - } -#endif - - if( new_name && parentNode) { - // Update node in tree view - node = gtk_ctree_find_by_row_data( ctree, addrbook.selected, obj ); - if( ! node ) return; - addressbook_change_node_name( node, new_name ); - gtk_ctree_sort_node(ctree, parentNode); - addrbook.open_folder = TRUE; - gtk_ctree_select( GTK_CTREE(addrbook.ctree), node ); - 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 if (obj->type == ADDR_VCARD) - name = ADDRESS_VCARD(obj)->name; -#ifdef USE_JPILOT - else if (obj->type == ADDR_JPILOT) { - if( ! _have_pilot_library_ ) return; - name = ADDRESS_JPILOT(obj)->name; - } -#endif -#ifdef USE_LDAP - else if (obj->type == ADDR_LDAP) { - if( ! _have_ldap_library_ ) return; - name = ADDRESS_LDAP(obj)->name; - } -#endif - 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 = mgu_create_address(); - 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); - GtkCTree *ctree; - AddressObject *obj, *pobj; - GtkCTreeNode *node = NULL, *parentNode = NULL; - gchar *nodeName; - - 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); - - pobj = gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), addrbook.selected); - - if (obj->type == ADDR_ITEM) { - AddressItem *item = ADDRESS_ITEM(obj); - - if( pobj ) { - // Prevent edit of readonly items - if( pobj->type == ADDR_VCARD || - pobj->type == ADDR_JPILOT || - pobj->type == ADDR_CATEGORY || - pobj->type == ADDR_LDAP ) return; - } - - 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); - return; - } - else if( obj->type == ADDR_VCARD ) { - AddressVCard *vcard = ADDRESS_VCARD(obj); - if( addressbook_edit_vcard( vcard ) == NULL ) return; - nodeName = vcard->name; - parentNode = addrbook.vcard; - } -#ifdef USE_JPILOT - else if( obj->type == ADDR_JPILOT ) { - AddressJPilot *jpilot = ADDRESS_JPILOT(obj); - if( addressbook_edit_jpilot( jpilot ) == NULL ) return; - nodeName = jpilot->name; - parentNode = addrbook.jpilot; - } -#endif -#ifdef USE_LDAP - else if( obj->type == ADDR_LDAP ) { - AddressLDAP *ldapi = ADDRESS_LDAP(obj); - if( addressbook_edit_ldap( ldapi ) == NULL ) return; - nodeName = ldapi->name; - parentNode = addrbook.ldap; - } -#endif - else { - return; - } - - // Update tree node with node name - ctree = GTK_CTREE( addrbook.ctree ); - node = gtk_ctree_find_by_row_data( ctree, addrbook.selected, obj ); - if( ! node ) return; - addressbook_change_node_name( node, nodeName ); - gtk_ctree_sort_node(ctree, parentNode ); - addrbook.open_folder = TRUE; - gtk_ctree_select( ctree, addrbook.opened ); -} - -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 if (obj->type == ADDR_VCARD) { - items = ADDRESS_VCARD(obj)->items; - } -#ifdef USE_JPILOT - else if (obj->type == ADDR_JPILOT) { - items = ADDRESS_JPILOT(obj)->items; - } - else if (obj->type == ADDR_CATEGORY) { - items = ADDRESS_CATEGORY(obj)->items; - } -#endif -#ifdef USE_LDAP - else if (obj->type == ADDR_LDAP) { - items = ADDRESS_LDAP(obj)->items; - } -#endif - else { - gtk_clist_thaw(clist); - return; - } - - for (; items != NULL; items = items->next) { - AddressObject *iobj; - gint row; - iobj = ADDRESS_OBJECT(items->data); - if( iobj == NULL ) continue; - - 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); - } if (iobj->type == ADDR_VCARD) { - AddressVCard *vcard; - - vcard = ADDRESS_VCARD(iobj); - text[COL_NAME] = vcard->name; - text[COL_ADDRESS] = NULL; - text[COL_REMARKS] = NULL; - row = gtk_clist_append(clist, text); - gtk_clist_set_pixtext(clist, row, COL_NAME, - vcard->name, 4, - vcardxpm, vcardxpmmask); - gtk_clist_set_row_data(clist, row, iobj); -#ifdef USE_JPILOT - } if (iobj->type == ADDR_JPILOT) { - AddressJPilot *jpilot; - - jpilot = ADDRESS_JPILOT(iobj); - text[COL_NAME] = jpilot->name; - text[COL_ADDRESS] = NULL; - text[COL_REMARKS] = NULL; - row = gtk_clist_append(clist, text); - gtk_clist_set_pixtext(clist, row, COL_NAME, - jpilot->name, 4, - jpilotxpm, jpilotxpmmask); - gtk_clist_set_row_data(clist, row, iobj); - } if (iobj->type == ADDR_CATEGORY) { - AddressCategory *category; - - category = ADDRESS_CATEGORY(iobj); - text[COL_NAME] = category->name; - text[COL_ADDRESS] = NULL; - text[COL_REMARKS] = NULL; - row = gtk_clist_append(clist, text); - gtk_clist_set_pixtext(clist, row, COL_NAME, - category->name, 4, - categoryxpm, categoryxpmmask); - gtk_clist_set_row_data(clist, row, iobj); -#endif -#ifdef USE_LDAP - } if (iobj->type == ADDR_LDAP) { - AddressLDAP *ldapi; - - ldapi = ADDRESS_LDAP(iobj); - text[COL_NAME] = ldapi->name; - text[COL_ADDRESS] = NULL; - text[COL_REMARKS] = NULL; - row = gtk_clist_append(clist, text); - gtk_clist_set_pixtext(clist, row, COL_NAME, - ldapi->name, 4, - ldapxpm, ldapxpmmask); - gtk_clist_set_row_data(clist, row, iobj); -#endif - } 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, ADDRESS_TAG_COMMON); - addressbook_get_tree(NULL, addrbook.personal, ADDRESS_TAG_PERSONAL); - addressbook_get_tree(NULL, addrbook.vcard, ADDRESS_TAG_VCARD); -#ifdef USE_JPILOT - addressbook_get_tree(NULL, addrbook.jpilot, ADDRESS_TAG_JPILOT); -#endif -#ifdef USE_LDAP - addressbook_get_tree(NULL, addrbook.ldap, ADDRESS_TAG_LDAP); -#endif - 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, ADDRESS_TAG_COMMON); - addressbook_get_tree(file, addrbook.personal, ADDRESS_TAG_PERSONAL); - addressbook_get_tree(file, addrbook.vcard, ADDRESS_TAG_VCARD); -#ifdef USE_JPILOT - addressbook_get_tree(file, addrbook.jpilot, ADDRESS_TAG_JPILOT); -#endif -#ifdef USE_LDAP - addressbook_get_tree(file, addrbook.ldap, ADDRESS_TAG_LDAP); -#endif - - 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, "vcard" ) ) { - AddressVCard *vcard; - vcard = addressbook_parse_vcard( file ); - if( ! vcard ) return; - new_node = addressbook_add_object - (node, ADDRESS_OBJECT(vcard)); - } -#ifdef USE_JPILOT - else if( xml_compare_tag( file, "jpilot" ) ) { - AddressJPilot *jpilot; - jpilot = addressbook_parse_jpilot( file ); - if( ! jpilot ) return; - new_node = addressbook_add_object - (node, ADDRESS_OBJECT(jpilot)); - } -#endif -#ifdef USE_LDAP - else if( xml_compare_tag( file, "server" ) ) { - AddressLDAP *ldapi; - ldapi = addressbook_parse_ldap( file ); - if( ! ldapi ) return; - new_node = addressbook_add_object - (node, ADDRESS_OBJECT(ldapi)); - } -#endif - 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; - } - } -} - -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 (pobj->type == ADDR_FOLDER && obj->type == ADDR_VCARD ) - gtk_ctree_expand(ctree, node); - - if (pobj->type == ADDR_FOLDER && obj->type == ADDR_JPILOT ) - gtk_ctree_expand(ctree, node); - - if (pobj->type == ADDR_FOLDER && obj->type == ADDR_LDAP ) - 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 if (obj->type == ADDR_VCARD) { - AddressVCard *vcard = ADDRESS_VCARD(obj); - added = gtk_ctree_insert_node(ctree, node, NULL, - &vcard->name, FOLDER_SPACING, - vcardxpm, vcardxpmmask, - vcardxpm, vcardxpmmask, - TRUE, FALSE); - gtk_ctree_node_set_row_data(ctree, added, obj); - } -#ifdef USE_JPILOT - else if (obj->type == ADDR_JPILOT) { - AddressJPilot *jpilot = ADDRESS_JPILOT(obj); - added = gtk_ctree_insert_node(ctree, node, NULL, - &jpilot->name, FOLDER_SPACING, - jpilotxpm, jpilotxpmmask, - jpilotxpm, jpilotxpmmask, - FALSE, FALSE); - gtk_ctree_node_set_row_data(ctree, added, obj); - } - else if (obj->type == ADDR_CATEGORY) { - AddressCategory *category = ADDRESS_CATEGORY(obj); - added = gtk_ctree_insert_node(ctree, node, NULL, - &category->name, FOLDER_SPACING, - categoryxpm, categoryxpmmask, - categoryxpm, categoryxpmmask, - TRUE, FALSE); - gtk_ctree_node_set_row_data(ctree, added, obj); - } -#endif -#ifdef USE_LDAP - else if (obj->type == ADDR_LDAP) { - AddressLDAP *server = ADDRESS_LDAP(obj); - added = gtk_ctree_insert_node(ctree, node, NULL, - &server->name, FOLDER_SPACING, - ldapxpm, ldapxpmmask, - ldapxpm, ldapxpmmask, - TRUE, FALSE); - gtk_ctree_node_set_row_data(ctree, added, obj); - } -#endif - 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); - } - } - - if (pobj->type == ADDR_FOLDER) { - if (obj->type == ADDR_VCARD || obj->type == ADDR_JPILOT || obj->type == ADDR_LDAP) { - 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); - - mgu_free_address( 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); - } - else if( obj->type == ADDR_VCARD ) { - AddressVCard *vcard = ADDRESS_VCARD(obj); - g_free( vcard->name ); - vcard_free( vcard->cardFile ); - vcard->cardFile = NULL; - vcard->items = NULL; - g_free( vcard ); - } -#ifdef USE_JPILOT - else if( obj->type == ADDR_JPILOT ) { - AddressJPilot *jpilot = ADDRESS_JPILOT(obj); - g_free( jpilot->name ); - jpilot_free( jpilot->pilotFile ); - jpilot->pilotFile = NULL; - jpilot->items = NULL; - g_free( jpilot ); - } -#endif -#ifdef USE_LDAP - else if( obj->type == ADDR_LDAP ) { - AddressLDAP *ldapi = ADDRESS_LDAP(obj); - g_free( ldapi->name ); - syldap_free( ldapi->ldapServer ); - ldapi->ldapServer = NULL; - ldapi->items = NULL; - g_free( ldapi ); - } -#endif -} - -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; -} - -static AddressItem *addressbook_parse_item(XMLFile *file) -{ - gchar *element; - AddressItem *item; - guint level; - - item = mgu_create_address(); - 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; - } - - g_warning("addressbook_parse_item(): Parse error\n"); - mgu_free_address( item ); -} - -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); - } - else if (obj->type == ADDR_VCARD) { - AddressVCard *vcard = ADDRESS_VCARD(obj); - addressbook_write_vcard( fp, vcard, GTK_CTREE_ROW(node)->level); - } -#ifdef USE_JPILOT - else if (obj->type == ADDR_JPILOT) { - AddressJPilot *jpilot = ADDRESS_JPILOT(obj); - addressbook_write_jpilot( fp, jpilot, GTK_CTREE_ROW(node)->level); - } -#endif -#ifdef USE_LDAP - else if (obj->type == ADDR_LDAP) { - AddressLDAP *ldap = ADDRESS_LDAP(obj); - addressbook_write_ldap( fp, ldap, GTK_CTREE_ROW(node)->level); - } -#endif -} - -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 if (obj1->type == ADDR_VCARD) - name1 = ADDRESS_VCARD(obj1)->name; -#ifdef USE_JPILOT - else if (obj1->type == ADDR_JPILOT) - name1 = ADDRESS_JPILOT(obj1)->name; - else if (obj1->type == ADDR_CATEGORY) - name1 = ADDRESS_CATEGORY(obj1)->name; -#endif -#ifdef USE_LDAP - else if (obj1->type == ADDR_LDAP) - name1 = ADDRESS_LDAP(obj1)->name; -#endif - 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 if (obj2->type == ADDR_VCARD) - name2 = ADDRESS_VCARD(obj2)->name; -#ifdef USE_JPILOT - else if (obj2->type == ADDR_JPILOT) - name2 = ADDRESS_JPILOT(obj2)->name; - else if (obj2->type == ADDR_CATEGORY) - name2 = ADDRESS_CATEGORY(obj2)->name; -#endif -#ifdef USE_LDAP - else if (obj2->type == ADDR_LDAP) - name2 = ADDRESS_LDAP(obj2)->name; -#endif - 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_VCARD) { - AddressVCard *vcard = ADDRESS_VCARD(obj); - if (!vcard->name) - return -1; - else - return strcasecmp(vcard->name, name); - } -#ifdef USE_JPILOT - else if (obj->type == ADDR_JPILOT) { - AddressJPilot *jpilot = ADDRESS_JPILOT(obj); - if (!jpilot->name) - return -1; - else - return strcasecmp(jpilot->name, name); - } - else if (obj->type == ADDR_CATEGORY) { - AddressCategory *category = ADDRESS_CATEGORY(obj); - if (!category->name) - return -1; - else - return strcasecmp(category->name, name); - } -#endif -#ifdef USE_LDAP - else if (obj->type == ADDR_LDAP) { - AddressLDAP *server = ADDRESS_LDAP(obj); - if (!server->name) - return -1; - else - return strcasecmp(server->name, name); - } -#endif - 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; -} - -static AddressVCard *addressbook_parse_vcard(XMLFile *file) { - AddressVCard *item = NULL; - VCardFile *vcf; - GList *attr; - gchar *name, *value; - - vcf = vcard_create(); - attr = xml_get_current_tag_attr( file ); - while( attr ) { - name = ((XMLAttr *)attr->data)->name; - value = ((XMLAttr *)attr->data)->value; - if( strcmp( name, "name" ) == 0 ) { - vcard_set_name( vcf, value ); - } - else if( strcmp( name, "file" ) == 0) { - vcard_set_file( vcf, value ); - } - attr = g_list_next( attr ); - } - - // Move to next tag - if( xml_parse_next_tag( file ) >= 0 ) { - if( vcard_validate( vcf ) ) { - item = g_new( AddressVCard, 1 ); - ADDRESS_OBJECT(item)->type = ADDR_VCARD; - item->name = g_strdup( vcf->name ); - item->cardFile = vcf; - item->items = NULL; - return item; - } - } - - // Must be an invalid tag or data. - g_warning( "addressbook_parse_vcard(): Parse error\n"); - vcard_free( vcf ); - vcf = NULL; - item = NULL; - return NULL; -} - -static void addressbook_write_vcard( FILE *fp, AddressVCard *vcard, guint level ) { - VCardFile *cardFile = vcard->cardFile; - if( cardFile ) { - tab_indent_out(fp, 1); - fputs("<vcard ", fp); - fputs("name=\"", fp); - xml_file_put_escape_str(fp, cardFile->name); - fputs("\"", fp); - fputs(" file=\"", fp); - xml_file_put_escape_str(fp, cardFile->path); - fputs("\"", fp); - fputs(" />\n", fp); - } -} - -#ifdef USE_JPILOT -static AddressJPilot *addressbook_parse_jpilot(XMLFile *file) { - AddressJPilot *item = NULL; - JPilotFile *jpf; - GList *attr; - gchar *name, *value; - - jpf = jpilot_create(); - attr = xml_get_current_tag_attr( file ); - while( attr ) { - name = ((XMLAttr *)attr->data)->name; - value = ((XMLAttr *)attr->data)->value; - if( strcmp( name, "name" ) == 0 ) { - jpilot_set_name( jpf, value ); - } - else if( strcmp( name, "file" ) == 0 ) { - jpilot_set_file( jpf, value ); - } - else if( strcmp( name, "custom-1" ) == 0 ) { - jpilot_add_custom_label( jpf, value ); - } - else if( strcmp( name, "custom-2" ) == 0 ) { - jpilot_add_custom_label( jpf, value ); - } - else if( strcmp( name, "custom-3" ) == 0 ) { - jpilot_add_custom_label( jpf, value ); - } - else if( strcmp( name, "custom-4" ) == 0 ) { - jpilot_add_custom_label( jpf, value ); - } - attr = g_list_next( attr ); - } - - // Move to next tag - if( xml_parse_next_tag( file ) >= 0 ) { - if( jpilot_validate( jpf ) ) { - item = g_new( AddressJPilot, 1 ); - ADDRESS_OBJECT(item)->type = ADDR_JPILOT; - item->name = g_strdup( jpf->name ); - item->pilotFile = jpf; - item->items = NULL; - return item; - } - } - - // Must be an invalid tag or data. - g_warning( "addressbook_parse_jpilot(): Parse error\n"); - jpilot_free( jpf ); - jpf = NULL; - item = NULL; - return NULL; -} - -static void addressbook_write_jpilot( FILE *fp, AddressJPilot *jpilot, guint level ) { - JPilotFile *pilotFile = jpilot->pilotFile; - if( pilotFile ) { - gint ind; - GList *node; - GList *customLbl = jpilot_get_custom_labels( pilotFile ); - tab_indent_out(fp, 1); - fputs("<jpilot ", fp); - fputs("name=\"", fp); - xml_file_put_escape_str(fp, pilotFile->name); - fputs("\" file=\"", fp); - xml_file_put_escape_str(fp, pilotFile->path); - - fputs( "\" ", fp ); - node = customLbl; - ind = 1; - while( node ) { - fprintf( fp, "custom-%d=\"", ind ); - xml_file_put_escape_str( fp, node->data ); - fputs( "\" ", fp ); - ind++; - node = g_list_next( node ); - } - fputs("/>\n", fp); - } -} -#endif - -static void addressbook_new_vcard_cb( gpointer data, guint action, GtkWidget *widget ) { - AddressVCard *vcard; - - if( addrbook.selected != addrbook.vcard ) return; - vcard = addressbook_edit_vcard( NULL ); - if( vcard ) { - addressbook_add_object( addrbook.selected, ADDRESS_OBJECT(vcard) ); - if( addrbook.selected == addrbook.opened ) { - addrbook.open_folder = TRUE; - gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened ); - } - } -} - -static void addressbook_vcard_show_message( VCardFile *vcf ) { - *addressbook_msgbuf = '\0'; - if( vcf ) { - if( vcf->retVal == MGU_SUCCESS ) { - sprintf( addressbook_msgbuf, "%s", vcf->name ); - } - else { - sprintf( addressbook_msgbuf, "%s: %s", vcf->name, mgu_error2string( vcf->retVal ) ); - } - } - addressbook_status_show( addressbook_msgbuf ); -} - -#ifdef USE_JPILOT -static void addressbook_new_jpilot_cb( gpointer data, guint action, GtkWidget *widget ) { - AddressJPilot *jpilot; - - if( addrbook.selected != addrbook.jpilot ) return; - if( ! _have_pilot_library_ ) return; - jpilot = addressbook_edit_jpilot( NULL ); - if( jpilot ) { - addressbook_add_object( addrbook.selected, ADDRESS_OBJECT(jpilot) ); - if( addrbook.selected == addrbook.opened ) { - addrbook.open_folder = TRUE; - gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened ); - } - } -} - -static void addressbook_jpilot_show_message( JPilotFile *jpf ) { - *addressbook_msgbuf = '\0'; - if( jpf ) { - if( jpf->retVal == MGU_SUCCESS ) { - sprintf( addressbook_msgbuf, "%s", jpf->name ); - } - else { - sprintf( addressbook_msgbuf, "%s: %s", jpf->name, mgu_error2string( jpf->retVal ) ); - } - } - addressbook_status_show( addressbook_msgbuf ); -} - -#endif - -#ifdef USE_LDAP -static void addressbook_new_ldap_cb( gpointer data, guint action, GtkWidget *widget ) { - AddressLDAP *ldapi; - - if( addrbook.selected != addrbook.ldap ) return; - if( ! _have_ldap_library_ ) return; - ldapi = addressbook_edit_ldap( NULL ); - if( ldapi ) { - addressbook_add_object( addrbook.selected, ADDRESS_OBJECT(ldapi) ); - if( addrbook.selected == addrbook.opened ) { - addrbook.open_folder = TRUE; - gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened ); - } - } -} - -static AddressLDAP *addressbook_parse_ldap(XMLFile *file) { - AddressLDAP *item = NULL; - SyldapServer *server; - GList *attr; - gchar *name, *value; - gint ivalue; - - server = syldap_create(); - attr = xml_get_current_tag_attr( file ); - while( attr ) { - name = ((XMLAttr *)attr->data)->name; - value = ((XMLAttr *)attr->data)->value; - ivalue = atoi( value ); - if( strcmp( name, "name" ) == 0 ) { - syldap_set_name( server, value ); - } - else if( strcmp( name, "host" ) == 0 ) { - syldap_set_host( server, value ); - } - else if( strcmp( name, "port" ) == 0 ) { - syldap_set_port( server, ivalue ); - } - else if( strcmp( name, "base-dn" ) == 0 ) { - syldap_set_base_dn( server, value ); - } - else if( strcmp( name, "bind-dn" ) == 0 ) { - syldap_set_bind_dn( server, value ); - } - else if( strcmp( name, "bind-pass" ) == 0 ) { - syldap_set_bind_password( server, value ); - } - else if( strcmp( name, "criteria" ) == 0 ) { - syldap_set_search_criteria( server, value ); - } - else if( strcmp( name, "max-entry" ) == 0 ) { - syldap_set_max_entries( server, ivalue ); - } - else if( strcmp( name, "timeout" ) == 0 ) { - syldap_set_timeout( server, ivalue ); - } - attr = g_list_next( attr ); - } - - // Move to next tag - if( xml_parse_next_tag( file ) >= 0 ) { - item = g_new( AddressLDAP, 1 ); - ADDRESS_OBJECT(item)->type = ADDR_LDAP; - item->name = g_strdup( server->name ); - item->ldapServer = server; - item->items = NULL; - return item; - } - - // Must be an invalid tag or data. - g_warning( "addressbook_parse_ldap(): Parse error\n"); - syldap_free( server ); - server = NULL; - item = NULL; - return NULL; -} - -static void addressbook_write_ldap( FILE *fp, AddressLDAP *ldapi, guint level ) { - SyldapServer *server = ldapi->ldapServer; - if( server ) { - tab_indent_out(fp, 1); - fputs("<server ", fp); - fputs("name=\"", fp); - xml_file_put_escape_str(fp, server->name); - fputs("\" host=\"", fp); - xml_file_put_escape_str(fp, server->hostName); - fprintf( fp, "\" port=\"%d", server->port); - fputs("\" base-dn=\"", fp); - xml_file_put_escape_str(fp, server->baseDN); - fputs("\" bind-dn=\"", fp); - xml_file_put_escape_str(fp, server->bindDN); - fputs("\" bind-pass=\"", fp); - xml_file_put_escape_str(fp, server->bindPass); - fputs("\" criteria=\"", fp); - xml_file_put_escape_str(fp, server->searchCriteria); - fprintf( fp, "\" max-entry=\"%d", server->maxEntries); - fprintf( fp, "\" timeout=\"%d", server->timeOut); - fputs("\" />\n", fp); - } -} - -static void addressbook_ldap_show_message( SyldapServer *svr ) { - *addressbook_msgbuf = '\0'; - if( svr ) { - if( svr->busyFlag ) { - sprintf( addressbook_msgbuf, "%s: %s", svr->name, ADDRESSBOOK_LDAP_BUSYMSG ); - } - else { - if( svr->retVal == MGU_SUCCESS ) { - sprintf( addressbook_msgbuf, "%s", svr->name ); - } - else { - sprintf( addressbook_msgbuf, "%s: %s", svr->name, mgu_error2string( svr->retVal ) ); - } - } - } - addressbook_status_show( addressbook_msgbuf ); -} - -static gint ldapsearch_callback( SyldapServer *sls ) { - GtkCTree *ctree = GTK_CTREE(addrbook.ctree); - AddressObject *obj; - - if( sls == NULL ) return; - if( ! addrbook.selected ) return; - if( GTK_CTREE_ROW( addrbook.selected )->level == 1 ) return; - - obj = gtk_ctree_node_get_row_data( ctree, addrbook.selected ); - if( obj == NULL ) return; - if( obj->type == ADDR_LDAP ) { - AddressLDAP *ldapi = ADDRESS_LDAP(obj); - SyldapServer *server = ldapi->ldapServer; - if( server == sls ) { - if( ! _have_ldap_library_ ) return; - // Read from cache - gtk_widget_show_all(addrbook.window); - ADDRESS_LDAP(obj)->items = syldap_get_address_list( sls ); - addressbook_set_clist( obj ); - addressbook_ldap_show_message( sls ); - gtk_widget_show_all(addrbook.window); - } - } -} -#endif - -/* - * Lookup button handler. - */ -static void addressbook_lup_clicked( GtkButton *button, gpointer data ) { - GtkCTree *ctree = GTK_CTREE(addrbook.ctree); - AddressObject *obj; - gchar *sLookup; -#ifdef USE_LDAP - AddressLDAP *ldapi; - SyldapServer *server; -#endif - - sLookup = gtk_editable_get_chars( GTK_EDITABLE(addrbook.entry), 0, -1 ); - g_strchomp( sLookup ); - - if( ! addrbook.selected ) return; - if( GTK_CTREE_ROW( addrbook.selected )->level == 1 ) return; - - obj = gtk_ctree_node_get_row_data( ctree, addrbook.selected ); - if( obj == NULL ) return; - -#ifdef USE_LDAP - if( obj->type == ADDR_LDAP ) { - ldapi = ADDRESS_LDAP(obj); - server = ldapi->ldapServer; - if( server ) { - if( ! _have_ldap_library_ ) return; - syldap_cancel_read( server ); - if( *sLookup == '\0' || strlen( sLookup ) < 1 ) return; - syldap_set_search_value( server, sLookup ); - syldap_set_callback( server, ldapsearch_callback ); - syldap_read_data_th( server ); - addressbook_ldap_show_message( server ); - } - } -#endif - -} - -/***/ - -typedef struct { - gboolean init; /* if FALSE should init jump buffer */ - GtkCTreeNode *node_found; /* match (can be used to backtrack folders) */ - AddressObject *addr_found; /* match */ - int level; /* current recursion level (0 is root level) */ - jmp_buf jumper; /* jump buffer */ -} FindObject; - -typedef struct { - FindObject ancestor; - const gchar *groupname; -} FindGroup; - -typedef struct { - FindObject ancestor; - const gchar *name; - const gchar *address; -} FindAddress; - -typedef struct { - FindObject ancestor; - GList *grouplist; -} FindAllGroups; - -typedef gboolean (*ADDRESSBOOK_TRAVERSE_FUNC)(AddressObject *node, gpointer data); - -/***/ - -static gboolean traverse_find_group_by_name(AddressObject *ao, FindGroup *find) -{ - AddressFolder *folder; - AddressGroup *group; - - /* a group or folder: both are groups */ - if (ADDRESS_OBJECT_TYPE(ao) == ADDR_GROUP) { - group = ADDRESS_GROUP(ao); - if (0 == g_strcasecmp(group->name, find->groupname)) { - return TRUE; - } - } - else if (ADDRESS_OBJECT_TYPE(ao) == ADDR_FOLDER) { - folder = ADDRESS_FOLDER(ao); - if (0 == g_strcasecmp(folder->name, find->groupname)) { - return TRUE; - } - } - return FALSE; -} - -static gboolean traverse_find_name_email(AddressObject *ao, FindAddress *find) -{ - AddressItem *item; - if (ADDRESS_OBJECT_TYPE(ao) == ADDR_ITEM) { - gboolean nmatch = FALSE, amatch = FALSE; - item = ADDRESS_ITEM(ao); - /* conditions: - * o only match at the first characters in item strings - * o match either name or address */ - if (find->name && item->name) { - nmatch = item->name == strcasestr(item->name, find->name); - } - if (find->address && item->address) { - amatch = item->address == strcasestr(item->address, find->address); - } - return nmatch || amatch; - } - return FALSE; -} - -static gboolean traverse_find_all_groups(AddressObject *ao, FindAllGroups *find) -{ - /* NOTE: added strings come from the address book. should perhaps - * strdup() them, especially if the address book is invalidated */ - if (ADDRESS_OBJECT_TYPE(ao) == ADDR_FOLDER) { - AddressFolder *folder = ADDRESS_FOLDER(ao); - find->grouplist = g_list_insert_sorted(find->grouplist, (gpointer) folder->name, (GCompareFunc) g_strcasecmp); - } - else if (ADDRESS_OBJECT_TYPE(ao) == ADDR_GROUP) { - AddressGroup *group = ADDRESS_GROUP(ao); - find->grouplist = g_list_insert_sorted(find->grouplist, (gpointer) group->name, (GCompareFunc) g_strcasecmp); - } - return FALSE; -} - -/* addressbook_traverse() - traverses all address objects stored in the address book. - * for some reason gtkctree's recursive tree functions don't allow a premature return, - * which is what we need if we need to enumerate the tree and check for a condition - * and then skipping other nodes. */ -static AddressObject *addressbook_traverse(GtkCTreeNode *node, ADDRESSBOOK_TRAVERSE_FUNC func, FindObject *data, int level) -{ - GtkCTreeNode *current, *tmp; - AddressObject *ao; - - if (data->init == FALSE) { - /* initialize non-local exit */ - data->init = TRUE; - data->level = 0; - /* HANDLE NON-LOCAL EXIT */ - if (setjmp(data->jumper)) { - return data->addr_found; - } - } - - /* actual recursive code */ - if (!node) { - current = GTK_CTREE_NODE(GTK_CLIST(addrbook.ctree)->row_list); - } - else { - current = node; - } - - while (current) { - tmp = GTK_CTREE_ROW(current)->sibling; - ao = (AddressObject *) gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), current); - if (ao) { - GList *next; - - next = (ADDRESS_OBJECT_TYPE(ao) == ADDR_FOLDER) ? - g_list_first(((ADDRESS_FOLDER(ao))->items)) : - (ADDRESS_OBJECT_TYPE(ao) == ADDR_GROUP) ? - g_list_first(((ADDRESS_GROUP(ao))->items)) : NULL; - - while (ao) { - /* NOTE: first iteration of the root calls callback for the tree - * node, other iterations call callback for the address book items */ - if (func(ao, data)) { - /* unwind */ - data->node_found = current; - data->addr_found = ao; - longjmp(data->jumper, 1); - } - /* ctree node only stores folders and groups. now descend into - * address object data, searching for address items. */ - for ( ; next && ADDRESS_OBJECT_TYPE((next->data)) != ADDR_ITEM - ; next = g_list_next(next)) - ; - ao = next ? (AddressObject *) next->data : NULL; - next = next ? g_list_next(next) : NULL; - } - } - /* check the children (if level permits) */ - if (level == -1 || data->level < level) { - current = GTK_CTREE_ROW(current)->children; - if (current) { - data->level++; - addressbook_traverse(current, func, data, level); - data->level--; - } - } - /* check the siblings */ - current = tmp; - } - return NULL; -} - -static GtkCTreeNode *addressbook_get_group_node(const gchar *name) -{ - FindGroup fg = { { FALSE, NULL, NULL }, NULL }; - fg.groupname = name; - addressbook_traverse(NULL, (void *)traverse_find_group_by_name, (FindObject *)&fg, -1); - return fg.ancestor.node_found; -} - -static void addressbook_free_item(AddressItem *item) -{ - if (item) { - if (item->name) g_free(item->name); - if (item->address) g_free(item->address); - if (item->remarks) g_free(item->remarks); - g_free(item); - } -} - -static AddressItem *addressbook_alloc_item(const gchar *name, const gchar *address, const gchar *remarks) -{ - AddressItem *item = g_new0(AddressItem, 1); - - if (item) { - item->obj.type = ADDR_ITEM; - if (item->name = g_strdup(name)) - if (item->address = g_strdup(address)) { - if (remarks) { - item->remarks = g_strdup(remarks); - } - return item; - } - } - addressbook_free_item(item); - return NULL; -} - -/***/ - -/* public provisional API */ - -/* addressbook_access() - should be called before using any of the following apis. it - * reloads the address book. */ -void addressbook_access(void) -{ - log_message("accessing address book\n"); - if (!addrbook.window) { - addressbook_create(FALSE); - addressbook_read_file(); - addrbook.open_folder = TRUE; - gtk_ctree_select(GTK_CTREE(addrbook.ctree), GTK_CTREE_NODE(GTK_CLIST(addrbook.ctree)->row_list)); - } -} - -/* addressbook_unaccess() - should only be called after changing the address book's - * contents */ -void addressbook_unaccess(void) -{ - log_message("unaccessing address book\n"); - addressbook_export_to_file(); - invalidate_address_completion(); -} - -const gchar *addressbook_get_personal_folder_name(void) -{ - return _("Personal addresses"); /* human readable */ -} - -const gchar *addressbook_get_common_folder_name(void) -{ - return _("Common addresses"); /* human readable */ -} - -/* addressbook_find_group_by_name() - finds a group (folder or group) by - * its name */ -AddressObject *addressbook_find_group_by_name(const gchar *name) -{ - FindGroup fg = { { FALSE, NULL, NULL } }; - AddressObject *ao; - - /* initialize obj members */ - fg.groupname = name; - ao = addressbook_traverse(NULL, - (ADDRESSBOOK_TRAVERSE_FUNC)traverse_find_group_by_name, - (FindObject *)&fg, -1); - return ao; -} - -/* addressbook_find_contact() - finds an address item by either name or address - * or both. the comparison is done on the first few characters of the strings */ -AddressObject *addressbook_find_contact(const gchar *name, const gchar *address) -{ - FindAddress fa = { { FALSE, NULL, NULL } }; - AddressObject *ao; - - fa.name = name; - fa.address = address; - ao = addressbook_traverse(NULL, (ADDRESSBOOK_TRAVERSE_FUNC)traverse_find_name_email, - (FindObject *)&fa, -1); - return ao; -} - -/* addressbook_get_group_list() - returns a list of strings with group names (both - * groups and folders). free the list using g_list_free(). note that another - * call may invalidate the returned list */ -GList *addressbook_get_group_list(void) -{ - FindAllGroups fag = { { FALSE, NULL, NULL }, NULL }; - addressbook_traverse(NULL, (ADDRESSBOOK_TRAVERSE_FUNC)traverse_find_all_groups, - (FindObject *)&fag, -1); - return fag.grouplist; -} - -/* addressbook_add_contact() - adds a contact to the address book. returns 1 - * if succesful else error */ -gint addressbook_add_contact(const gchar *group, const gchar *name, const gchar *address, - const gchar *remarks) -{ - GtkCTreeNode *node; - AddressItem *item; - FindAddress fa = { { FALSE, NULL, NULL } }; - - /* a healthy mix of hiro's and my code */ - if (name == NULL || strlen(name) == 0 - || address == NULL || strlen(address) == 0 - || group == NULL || strlen(group) == 0) { - return __LINE__; - } - node = addressbook_get_group_node(group); - if (!node) { - return __LINE__; - } - - /* check if it's already in this group */ - fa.name = name; - fa.address = address; - - if (addressbook_traverse(node, (gpointer)traverse_find_name_email, (gpointer)&fa, 0)) { - log_message("address <%s> already in %s\n", address, group); - return __LINE__; - } - - item = addressbook_alloc_item(name, address, remarks); - if (!item) { - return __LINE__; - } - - if (!addressbook_add_object(node, (AddressObject *)item)) { - addressbook_free_item(item); - return __LINE__; - } - - /* make sure it's updated if selected */ - log_message("updating addressbook widgets\n"); - addrbook.open_folder = TRUE; - gtk_ctree_select(GTK_CTREE(addrbook.ctree), addrbook.opened); - - /* not saved yet. only after unaccessing the address book */ - return 0; -} - -static void group_object_data_destroy(gchar *group) -{ - if (group) { - g_free(group); - } -} - -/***/ - -typedef struct { - gchar *name; - gchar *address; - gchar *remarks; -} ContactInfo; - -static void addressbook_destroy_contact(ContactInfo *ci) -{ - g_return_if_fail(ci != NULL); - if (ci->name) g_free(ci->name); - if (ci->address) g_free(ci->address); - if (ci->remarks) g_free(ci->remarks); - g_free(ci); -} - -static ContactInfo *addressbook_new_contact(const gchar *name, const gchar *address, const gchar *remarks) -{ - ContactInfo *ci = g_new0(ContactInfo, 1); - - g_return_val_if_fail(ci != NULL, NULL); - g_return_val_if_fail(address != NULL, NULL); /* address should be valid */ - ci->name = name ? g_strdup(name) : NULL; - ci->address = g_strdup(address); - ci->remarks = remarks ? g_strdup(remarks) : NULL; - if (NULL == ci->address) { - addressbook_destroy_contact(ci); - ci = NULL; - } - return ci; -} - -static void addressbook_group_menu_selected(GtkMenuItem *menuitem, - ContactInfo *data) -{ - const gchar *group_name = (const gchar *) gtk_object_get_data(GTK_OBJECT(menuitem), - "group_name"); - - if (!group_name) { - g_warning("%s(%d) - invalid group name\n", __FILE__, __LINE__); - return ; - } - g_return_if_fail(group_name != NULL); - - g_message("selected group %s from menu\n", group_name); - g_message("selected %s <%s>\n", data->name ? data->name : data->address, data->address); - - addressbook_access(); - addressbook_add_contact(group_name, data->name ? data->name : data->address, - data->address, data->remarks ? data->remarks : data->address); - addressbook_unaccess(); - - g_free(data); -} - -/* addressbook_add_contact_by_meny() - launches menu with group items. submenu may be - * the menu item in the parent menu, or NULL for a normal right-click context menu */ -gboolean addressbook_add_submenu(GtkWidget *submenu, - const gchar *name, - const gchar *address, - const gchar *remarks) -{ - GtkWidget *menu, *menuitem; - GList *groups, *tmp; - ContactInfo *ci; - - ci = addressbook_new_contact(name, address, remarks); - g_return_val_if_fail(ci != NULL, FALSE); - - addressbook_access(); - groups = addressbook_get_group_list(); - g_return_val_if_fail(groups != NULL, (addressbook_destroy_contact(ci), FALSE)); - - menu = gtk_menu_new(); - g_return_val_if_fail(menu != NULL, (g_list_free(groups), addressbook_destroy_contact(ci), FALSE)); - - /* add groups to menu */ - for (tmp = g_list_first(groups); tmp != NULL; tmp = g_list_next(tmp)) { - const gchar *display_name; - gchar *original_name = (gchar *) tmp->data; - gboolean addItem = TRUE; - - if (!g_strcasecmp(original_name, ADDRESS_TAG_PERSONAL)) { - display_name = addressbook_get_personal_folder_name(); - } - else if (!g_strcasecmp(original_name, ADDRESS_TAG_COMMON)) { - display_name = addressbook_get_common_folder_name(); - } - else if( ! g_strcasecmp( original_name, ADDRESS_TAG_VCARD ) ) { - addItem = FALSE; - } -#ifdef USE_JPILOT - else if( ! g_strcasecmp( original_name, ADDRESS_TAG_JPILOT ) ) { - addItem = FALSE; - } -#endif -#ifdef USE_LDAP - else if( ! g_strcasecmp( original_name, ADDRESS_TAG_LDAP ) ) { - addItem = FALSE; - } -#endif - else { - display_name = original_name; - } - - if( addItem ) { - original_name = g_strdup(original_name); - menuitem = gtk_menu_item_new_with_label(display_name); - /* register the duplicated string pointer as object data, - * so we get the opportunity to free it */ - gtk_object_set_data_full(GTK_OBJECT(menuitem), "group_name", - original_name, - (GtkDestroyNotify) group_object_data_destroy); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - GTK_SIGNAL_FUNC(addressbook_group_menu_selected), - (gpointer)(ci)); - gtk_menu_append(GTK_MENU(menu), menuitem); - gtk_widget_show(menuitem); - } - } - - gtk_widget_show(menu); - - if (submenu) { - gtk_menu_item_set_submenu(GTK_MENU_ITEM(submenu), menu); - gtk_widget_set_sensitive(GTK_WIDGET(submenu), TRUE); - } - else { - gtk_widget_grab_focus(GTK_WIDGET(menu)); - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME); - } - - if (groups) g_list_free(groups); - return TRUE; -} - -/* -* End of Source. -*/ - diff --git a/src/addressbook.h b/src/addressbook.h deleted file mode 100644 index d459510df..000000000 --- a/src/addressbook.h +++ /dev/null @@ -1,192 +0,0 @@ -/* - * 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> - -#include "addressitem.h" -#include "vcard.h" - -#ifdef USE_JPILOT -#include "jpilot.h" -#endif - -#ifdef USE_LDAP -#include "syldap.h" -#endif - -#define ADDRESS_GROUP(obj) ((AddressGroup *)obj) -#define ADDRESS_FOLDER(obj) ((AddressFolder *)obj) -#define ADDRESS_VCARD(obj) ((AddressVCard *)obj) -#define ADDRESS_JPILOT(obj) ((AddressJPilot *)obj) -#define ADDRESS_CATEGORY(obj) ((AddressCategory *)obj) -#define ADDRESS_LDAP(obj) ((AddressLDAP *)obj) - - -#include "compose.h" - -typedef struct _AddressBook AddressBook; -struct _AddressBook -{ - GtkWidget *window; - GtkWidget *menubar; - GtkWidget *ctree; - GtkWidget *clist; - GtkWidget *entry; - GtkWidget *statusbar; - - 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; - GtkItemFactory *menu_factory; - - GtkCTreeNode *common; - GtkCTreeNode *personal; - GtkCTreeNode *vcard; - GtkCTreeNode *jpilot; - GtkCTreeNode *ldap; - GtkCTreeNode *selected; - GtkCTreeNode *opened; - - gboolean open_folder; - - Compose *target_compose; - gint status_cid; -}; - -typedef struct _AddressGroup AddressGroup; -struct _AddressGroup -{ - AddressObject obj; - - gchar *name; - - /* Group contains only Items */ - GList *items; -}; - -typedef struct _AddressFolder AddressFolder; -struct _AddressFolder -{ - AddressObject obj; - - gchar *name; - - /* Folder contains Groups and Items */ - GList *items; -}; - -typedef struct _AddressVCard AddressVCard; -struct _AddressVCard -{ - AddressObject obj; - - gchar *name; - VCardFile *cardFile; - - /* Folder contains only VCards */ - GList *items; -}; - -#ifdef USE_JPILOT -typedef struct _AddressJPilot AddressJPilot; -struct _AddressJPilot -{ - AddressObject obj; - - gchar *name; - JPilotFile *pilotFile; - - /* Folder contains only JPilotFiles */ - /* Folder contains only Items for each category */ - GList *items; -}; - -typedef struct _AddressCategory AddressCategory; -struct _AddressCategory -{ - AddressObject obj; - - gchar *name; - JPilotFile *pilotFile; - AddressItem *category; - - /* Category contains only Items */ - GList *items; -}; -#endif - -#ifdef USE_LDAP -typedef struct _AddressLDAP AddressLDAP; -struct _AddressLDAP -{ - AddressObject obj; - - gchar *name; - SyldapServer *ldapServer; - - /* Folder contains only SyldapServers */ - GList *items; -}; -#endif - -struct _AddressFileSelection { - GtkWidget *fileSelector; - gboolean cancelled; -}; -typedef struct _AddressFileSelection AddressFileSelection; - -void addressbook_open (Compose *target); -void addressbook_set_target_compose (Compose *target); -Compose *addressbook_get_target_compose (void); -void addressbook_export_to_file (void); - -/* provisional API for accessing the address book */ - -void addressbook_access (void); -void addressbook_unaccess (void); - -const gchar *addressbook_get_personal_folder_name (void); -const gchar *addressbook_get_common_folder_name (void); - -AddressObject *addressbook_find_group_by_name (const gchar *name); -AddressObject *addressbook_find_contact (const gchar *name, const gchar *address); -GList *addressbook_get_group_list (void); -gint addressbook_add_contact (const gchar *group, const gchar *name, - const gchar *address, const gchar *remarks); - -gboolean addressbook_add_submenu(GtkWidget *submenu, - const gchar *name, - const gchar *address, - const gchar *remarks); - -#endif /* __ADDRESSBOOK_H__ */ diff --git a/src/addressitem.h b/src/addressitem.h deleted file mode 100644 index 0886a9d87..000000000 --- a/src/addressitem.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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. - */ - -/* - * Address item data. - */ - -#ifndef __ADDRESSITEM_H__ -#define __ADDRESSITEM_H__ - -#define ADDRESS_OBJECT(obj) ((AddressObject *)obj) -#define ADDRESS_OBJECT_TYPE(obj) (ADDRESS_OBJECT(obj)->type) -#define ADDRESS_ITEM(obj) ((AddressItem *)obj) - -#define ADDRESS_ITEM_CAT_UNKNOWN -1 - -typedef struct _AddressObject AddressObject; -typedef struct _AddressItem AddressItem; - -typedef enum -{ - ADDR_ITEM, - ADDR_GROUP, - ADDR_FOLDER, - ADDR_VCARD, - ADDR_JPILOT, - ADDR_CATEGORY, - ADDR_LDAP -} AddressObjectType; - -struct _AddressObject -{ - AddressObjectType type; -}; - -struct _AddressItem -{ - AddressObject obj; - - gchar *name; - gchar *address; - gchar *remarks; - gchar *externalID; - gint categoryID; -}; - -#endif /* __ADDRESSITEM_H__ */ diff --git a/src/alertpanel.c b/src/alertpanel.c deleted file mode 100644 index d9039cf8e..000000000 --- a/src/alertpanel.c +++ /dev/null @@ -1,317 +0,0 @@ -/* - * 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 <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, - gboolean can_disable); - -static void alertpanel_button_toggled (GtkToggleButton *button, - gpointer data); -static void alertpanel_button_clicked (GtkWidget *widget, - gpointer data); -static gint alertpanel_deleted (GtkWidget *widget, - GdkEventAny *event, - 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, FALSE); - 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, FALSE); - alertpanel_show(); -} - -AlertValue alertpanel_message_with_disable(const gchar *title, - const gchar *message) -{ - if (alertpanel_is_open) - return 0; - else - alertpanel_is_open = TRUE; - - alertpanel_create(title, message, NULL, NULL, NULL, TRUE); - alertpanel_show(); - - return value; -} - -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; - - /* ungrab the mouse events ? */ - if (gdk_pointer_is_grabbed()) - gdk_pointer_ungrab(GDK_CURRENT_TIME); - - while ((value & G_ALERT_VALUE_MASK) == 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, - gboolean can_disable) -{ - static GdkFont *titlefont; - GtkStyle *style; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *disable_chkbtn; - 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_deleted), - (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, TRUE, TRUE, 16); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - 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_misc_set_alignment(GTK_MISC(label), 0, 0.5); - 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), - GUINT_TO_POINTER(G_ALERTDEFAULT)); - if (button2_label) - gtk_signal_connect(GTK_OBJECT(button2), "clicked", - GTK_SIGNAL_FUNC(alertpanel_button_clicked), - GUINT_TO_POINTER(G_ALERTALTERNATE)); - if (button3_label) - gtk_signal_connect(GTK_OBJECT(button3), "clicked", - GTK_SIGNAL_FUNC(alertpanel_button_clicked), - GUINT_TO_POINTER(G_ALERTOTHER)); - - if (can_disable) { - disable_chkbtn = gtk_check_button_new_with_label - (_("Show this message next time")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(disable_chkbtn), - TRUE); - gtk_box_pack_end(GTK_BOX(vbox), disable_chkbtn, - FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(disable_chkbtn), "toggled", - GTK_SIGNAL_FUNC(alertpanel_button_toggled), - GUINT_TO_POINTER(G_ALERTDISABLE)); - } - - gtk_widget_show_all(dialog); -} - -static void alertpanel_button_toggled(GtkToggleButton *button, - gpointer data) -{ - if (gtk_toggle_button_get_active(button)) - value &= ~GPOINTER_TO_UINT(data); - else - value |= GPOINTER_TO_UINT(data); -} - -static void alertpanel_button_clicked(GtkWidget *widget, gpointer data) -{ - value = (value & ~G_ALERT_VALUE_MASK) | (AlertValue)data; -} - -static gint alertpanel_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - value = (value & ~G_ALERT_VALUE_MASK) | (AlertValue)data; - return TRUE; -} - -static void alertpanel_close(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - if (event->type == GDK_KEY_PRESS) - if (((GdkEventKey *)event)->keyval != GDK_Escape) - return; - - value = (value & ~G_ALERT_VALUE_MASK) | (AlertValue)data; -} diff --git a/src/alertpanel.h b/src/alertpanel.h deleted file mode 100644 index 956f992c5..000000000 --- a/src/alertpanel.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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 __ALERTPANEL_H__ -#define __ALERTPANEL_H__ - -#include <glib.h> -#include <gtk/gtkwindow.h> - -typedef enum -{ - G_ALERTDEFAULT, - G_ALERTALTERNATE, - G_ALERTOTHER, - G_ALERTWAIT, - - G_ALERTDISABLE = 1 << 16 -} AlertValue; - -#define G_ALERT_VALUE_MASK 0x0000ffff - -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); - -AlertValue alertpanel_message_with_disable (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 deleted file mode 100644 index b36d90a1a..000000000 --- a/src/automaton.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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 dummy_source, - GdkInputCondition condition) -{ - Automaton *atm = (Automaton *)data; - SockInfo *sock; - gint next; - - /* We get out sockinfo from the atm context and not from the - * passed file descriptor because we can't map that one back - * to the sockinfo */ - sock = atm->help_sock; - g_assert(sock->sock == dummy_source); - - 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(sock, atm->data); - - if (atm->terminated) - return; - - if (next >= 0 && next <= atm->max && next != atm->num) { - atm->num = next; - atm->tag = sock_gdk_input_add(sock, - atm->state[atm->num].condition, - automaton_input_cb, - data); - } else { - atm->terminate(sock, data); - } -} diff --git a/src/automaton.h b/src/automaton.h deleted file mode 100644 index d8d3d8c4b..000000000 --- a/src/automaton.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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> - -#include "socket.h" - -typedef struct _AtmState AtmState; -typedef struct _Automaton Automaton; - -typedef gint (*AtmHandler) (SockInfo *source, gpointer data); - -struct _AtmState -{ - GdkInputCondition condition; - gint (*handler)(SockInfo *source, gpointer data); -}; - -struct _Automaton -{ - gint max; - gint num; - gint tag; - guint timeout_tag; - guint elapsed; - gboolean terminated; - gpointer data; - AtmState *state; - gint (*terminate)(SockInfo *source, gpointer data); - SockInfo *help_sock; -}; - -Automaton *automaton_create(gint num); -void automaton_destroy(Automaton *atm); -void automaton_input_cb(gpointer data, gint dummy_source, - GdkInputCondition condition); - -#endif /* __AUTOMATON_H__ */ diff --git a/src/base64.c b/src/base64.c deleted file mode 100644 index f0ef2061c..000000000 --- a/src/base64.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * 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 "defs.h" - -#include <ctype.h> -#include <string.h> -#include <glib.h> - -#include "base64.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; -} - -struct _Base64Decoder -{ - int buf_len; - unsigned char buf[4]; -}; - -Base64Decoder * -base64_decoder_new (void) -{ - Base64Decoder *decoder; - - decoder = g_new0 (Base64Decoder, 1); - return decoder; -} - -void -base64_decoder_free (Base64Decoder *decoder) -{ - g_free (decoder); -} - -int -base64_decoder_decode (Base64Decoder *decoder, - const char *in, - char *out) -{ - int len = 0; - int buf_len; - unsigned char buf[4]; - - g_return_val_if_fail (decoder != NULL, -1); - g_return_val_if_fail (in != NULL, -1); - g_return_val_if_fail (out != NULL, -1); - - buf_len = decoder->buf_len; - memcpy (buf, decoder->buf, sizeof(buf)); - while (1) { - while (buf_len < 4) { - int c = *(unsigned char *)in++; - if (c == '\0') break; - if (c == '\r' || c == '\n') continue; - if (c != '=' && DECODE64(c) == BAD) - return -1; - buf[buf_len++] = c; - } - if (buf_len < 4 || buf[0] == '=' || buf[1] == '=') { - decoder->buf_len = buf_len; - memcpy (decoder->buf, buf, sizeof(buf)); - return len; - } - *out++ = ((DECODE64(buf[0]) << 2) - | ((DECODE64(buf[1]) >> 4) & 0x03)); - ++len; - if (buf[2] != '=') { - *out++ = (((DECODE64(buf[1]) << 4) & 0xf0) - | (DECODE64(buf[2]) >> 2)); - ++len; - if (buf[3] != '=') { - *out++ = (((DECODE64(buf[2]) << 6) & 0xc0) - | DECODE64(buf[3])); - ++len; - } - } - buf_len = 0; - if (buf[2] == '=' || buf[3] == '=') { - decoder->buf_len = 0; - return len; - } - } -} - -/* base64.c ends here */ diff --git a/src/base64.h b/src/base64.h deleted file mode 100644 index 327dfbf64..000000000 --- a/src/base64.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __BASE64_H__ -#define __BASE64_H__ - -typedef struct _Base64Decoder Base64Decoder; - -Base64Decoder * base64_decoder_new (void); -void base64_decoder_free (Base64Decoder *decoder); -int base64_decoder_decode (Base64Decoder *decoder, - const char *in, - char *out); - -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 deleted file mode 100644 index d963d3507..000000000 --- a/src/codeconv.c +++ /dev/null @@ -1,1168 +0,0 @@ -/* - * 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 <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, CS_ISO_8859_1, 10)) - code_conv = conv_latintodisp; -#if !HAVE_LIBJCONV - else if (!strncasecmp(charset, "ISO-8859-", 9)) - code_conv = conv_latintodisp; -#endif - 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) { - gchar *tmp; - gint len; - - len = strlen(str) * 2 + 1; - Xalloca(tmp, len, return); - conv_jistodisp(tmp, len, str); - strncpy2(str, tmp, outlen); - } -#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; - - cur_charset = conv_get_current_charset(); - Xstrdup_a(buf, str, return); - -#if HAVE_LIBJCONV - UnMimeHeaderConv(buf, outbuf, outlen); -#else - UnMimeHeader(buf); - strncpy2(outbuf, buf, outlen); -#endif - if (cur_charset == C_EUC_JP) { - gint len; - - len = strlen(outbuf) * 2 + 1; - Xalloca(buf, len, return); - conv_jistodisp(buf, len, outbuf); - strncpy2(outbuf, buf, outlen); - } -} - -#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"); - wtmpp++; - 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 deleted file mode 100644 index 897d0cf43..000000000 --- a/src/codeconv.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * 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 deleted file mode 100644 index e73b92d6e..000000000 --- a/src/compose.c +++ /dev/null @@ -1,4955 +0,0 @@ -/* - * 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/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/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 "gtkstext.h" - -#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 "customheader.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" -#include "template_select.h" - -#if USE_GPGME -# include "rfc2015.h" -#endif - -#include "quote_fmt.h" - -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, - gboolean to_sender, - gboolean - followup_and_reply_to); -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_attach_append_with_type(Compose *compose, - const gchar *file, - const gchar *type, - ContentType cnttype); -static void compose_wrap_line (Compose *compose); -static void compose_set_title (Compose *compose); - -static PrefsAccount *compose_current_mail_account(void); -/* 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 (GtkSText *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 template_select_cb (gpointer daat, - guint action, - GtkWidget *widget); - - -static void select_account(Compose * compose, PrefsAccount * ac); -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_toggle_return_receipt_cb(gpointer data, guint action, - GtkWidget *widget); - -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 void compose_attach_parts(Compose * compose, - MsgInfo * msginfo); - -static gchar *compose_quote_fmt (Compose *compose, - MsgInfo *msginfo, - const gchar *fmt, - const gchar * qmark); - -static void compose_generic_reply(MsgInfo *msginfo, gboolean quote, - gboolean to_all, - gboolean ignore_replyto, - gboolean followup_and_reply_to); - -Compose * compose_generic_new (PrefsAccount *account, - const gchar *to, - FolderItem *item); - -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_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, - {N_("/_Message/_Request Return Receipt"), NULL, compose_toggle_return_receipt_cb, 0, "<ToggleItem>"}, - {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_("/_Tool/_Templates ..."), NULL, template_select_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} -}; - -Compose * compose_new(PrefsAccount *account) -{ - return compose_generic_new(account, NULL, NULL); -} - -Compose * compose_new_with_recipient(PrefsAccount *account, const gchar *to) -{ - return compose_generic_new(account, to, NULL); -} - -Compose * compose_new_with_folderitem(PrefsAccount *account, FolderItem *item) -{ - return compose_generic_new(account, NULL, item); -} - -Compose * compose_generic_new(PrefsAccount *account, const gchar *to, FolderItem *item) -{ - Compose *compose; - - if (!account) account = cur_account; - g_return_val_if_fail(account != NULL, NULL); - - compose = compose_create(account); - compose->mode = COMPOSE_NEW; - compose->replyinfo = NULL; - - if (prefs_common.auto_sig) - compose_insert_sig(compose); - gtk_editable_set_position(GTK_EDITABLE(compose->text), 0); - gtk_stext_set_point(GTK_STEXT(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 { - if(item && item->prefs->enable_default_to) { - compose_entry_append(compose, item->prefs->default_to, COMPOSE_TO); - } else { - gtk_widget_grab_focus(compose->to_entry); - } - } - if(item && item->prefs->request_return_receipt) { - GtkItemFactory *ifactory; - - ifactory = gtk_item_factory_from_widget(compose->menubar); - menu_set_toggle(ifactory, "/Message/Request Return Receipt", TRUE); - } - } else { - if (to) { - compose_entry_append(compose, to, COMPOSE_NEWSGROUPS); - gtk_widget_grab_focus(compose->subject_entry); - } else - gtk_widget_grab_focus(compose->newsgroups_entry); - } - - return compose; -} - -#define CHANGE_FLAGS(msginfo) \ -{ \ -if (msginfo->folder->folder->change_flags != NULL) \ -msginfo->folder->folder->change_flags(msginfo->folder->folder, \ - msginfo->folder, \ - msginfo); \ -} - -/* -Compose * compose_new_followup_and_replyto(PrefsAccount *account, - const gchar *followupto, gchar * to) -{ - Compose *compose; - - if (!account) account = cur_account; - g_return_val_if_fail(account != NULL, NULL); - g_return_val_if_fail(account->protocol != A_NNTP, 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_stext_set_point(GTK_STEXT(compose->text), 0); - - compose_entry_append(compose, to, COMPOSE_TO); - compose_entry_append(compose, followupto, COMPOSE_NEWSGROUPS); - gtk_widget_grab_focus(compose->subject_entry); - - return compose; -} -*/ - -void compose_reply(MsgInfo *msginfo, gboolean quote, gboolean to_all, - gboolean ignore_replyto) -{ - compose_generic_reply(msginfo, quote, to_all, ignore_replyto, FALSE); -} - -void compose_followup_and_reply_to(MsgInfo *msginfo, gboolean quote, - gboolean to_all, - gboolean ignore_replyto) -{ - compose_generic_reply(msginfo, quote, to_all, ignore_replyto, TRUE); -} - -static void compose_generic_reply(MsgInfo *msginfo, gboolean quote, - gboolean to_all, - gboolean ignore_replyto, - gboolean followup_and_reply_to) -{ - Compose *compose; - PrefsAccount *account; - PrefsAccount *reply_account; - GtkSText *text; - - g_return_if_fail(msginfo != NULL); - g_return_if_fail(msginfo->folder != NULL); - - account = msginfo->folder->folder->account; - if (!account && msginfo->to && prefs_common.reply_account_autosel) { - gchar *to; - Xstrdup_a(to, msginfo->to, return); - extract_address(to); - account = account_find_from_address(to); - } - if (!account) account = cur_account; - g_return_if_fail(account != NULL); - - if (ignore_replyto && account->protocol == A_NNTP && - !followup_and_reply_to) { - reply_account = - account_find_from_address(account->address); - if (!reply_account) - reply_account = compose_current_mail_account(); - if (!reply_account) - return; - } else - reply_account = account; - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_FORWARDED); - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_REPLIED); - - CHANGE_FLAGS(msginfo); - - compose = compose_create(reply_account); - compose->mode = COMPOSE_REPLY; - compose->replyinfo = msginfo; - - - if (followup_and_reply_to) { - 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; - } - - if (compose_parse_header(compose, msginfo) < 0) return; - compose_reply_set_entry(compose, msginfo, to_all, ignore_replyto, - followup_and_reply_to); - - text = GTK_STEXT(compose->text); - gtk_stext_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 { - gchar * qmark; - - if (prefs_common.quotemark && *prefs_common.quotemark) - qmark = prefs_common.quotemark; - else - qmark = "> "; - - quote_str = compose_quote_fmt(compose, msginfo, - prefs_common.quotefmt, - qmark); - - /* - quote_str = compose_quote_parse_fmt - (compose, msginfo, prefs_common.quotefmt); - */ - - if (quote_str != NULL) - gtk_stext_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_stext_set_point(text, 0); - - gtk_stext_thaw(text); - gtk_widget_grab_focus(compose->text); -} - - -static gchar *procmime_get_file_name(MimeInfo *mimeinfo) -{ - gchar *base; - gchar *filename; - - g_return_val_if_fail(mimeinfo != NULL, NULL); - - base = mimeinfo->filename ? mimeinfo->filename - : mimeinfo->name ? mimeinfo->name : NULL; - - if (MIME_TEXT_HTML == mimeinfo->mime_type && base == NULL){ - filename = g_strdup_printf("%s%smimetmp%i.html", - get_mime_tmp_dir(), - G_DIR_SEPARATOR_S, - mimeinfo); - return filename; - } - else { - base = base ? base : ""; - base = g_basename(base); - if (*base == '\0') { - filename = g_strdup_printf("%s%smimetmp%i", - get_mime_tmp_dir(), - G_DIR_SEPARATOR_S, - mimeinfo); - return filename; - } - } - - filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, - base, NULL); - - return filename; -} - -static gchar * mime_extract_file(gchar * source, MimeInfo *partinfo) -{ - gchar *filename; - - if (!partinfo) return; - - filename = procmime_get_file_name(partinfo); - - if (procmime_get_part(filename, source, partinfo) < 0) - alertpanel_error - (_("Can't get the part of multipart message.")); - - return filename; -} - -static void compose_attach_parts(Compose * compose, - MsgInfo * msginfo) -{ - - FILE *fp; - gchar *file; - MimeInfo *mimeinfo; - MsgInfo *tmpmsginfo; - gchar *p; - gchar *boundary; - gint boundary_len = 0; - gchar buf[BUFFSIZE]; - glong fpos, prev_fpos; - gint npart; - gchar * source; - gchar * filename; - - 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_TMP_FLAGS(msginfo->flags, MSG_ENCRYPTED); - } - if (MSG_IS_ENCRYPTED(msginfo->flags) && - !msginfo->plaintext_file && - !msginfo->decryption_failed) { - 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; - if (mimeinfo->mime_type == MIME_TEXT) - return; - - if ((fp = procmsg_open_message(msginfo)) == NULL) return; - - 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) { - fclose(fp); - return; - } - } - - if ((fpos = ftell(fp)) < 0) { - perror("ftell"); - fclose(fp); - return; - } - - for (npart = 0;; npart++) { - MimeInfo *partinfo; - gboolean eom = FALSE; - - prev_fpos = fpos; - - partinfo = procmime_scan_mime_header(fp); - if (!partinfo) break; - - if (npart != 0) - procmime_mimeinfo_insert(mimeinfo, partinfo); - else - procmime_mimeinfo_free(partinfo); - - /* 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; - } - - source = procmsg_get_message_file_path(msginfo); - - g_return_if_fail(mimeinfo != NULL); - - if (!mimeinfo->main && mimeinfo->parent) - { - filename = mime_extract_file(source, mimeinfo); - - compose_attach_append_with_type(compose, filename, - mimeinfo->content_type, - mimeinfo->mime_type); - - g_free(filename); - } - - if (mimeinfo->sub && mimeinfo->sub->children) - { - filename = mime_extract_file(source, mimeinfo->sub); - - compose_attach_append_with_type(compose, filename, - mimeinfo->content_type, - mimeinfo->sub->mime_type); - - g_free(filename); - } - - if (mimeinfo->children) { - MimeInfo *child; - - child = mimeinfo->children; - while (child) { - filename = mime_extract_file(source, child); - - compose_attach_append_with_type(compose, filename, - child->content_type, - child->mime_type); - - g_free(filename); - - child = child->next; - } - } - - fclose(fp); - - procmime_mimeinfo_free_all(mimeinfo); -} - - -#define INSERT_FW_HEADER(var, hdr) \ -if (msginfo->var && *msginfo->var) { \ - gtk_stext_insert(text, NULL, NULL, NULL, hdr, -1); \ - gtk_stext_insert(text, NULL, NULL, NULL, msginfo->var, -1); \ - gtk_stext_insert(text, NULL, NULL, NULL, "\n", 1); \ -} - -Compose * compose_forward(PrefsAccount * account, MsgInfo *msginfo, - gboolean as_attach) -{ - Compose *compose; - /* PrefsAccount *account; */ - GtkSText *text; - FILE *fp; - gchar buf[BUFFSIZE]; - - g_return_val_if_fail(msginfo != NULL, NULL); - g_return_val_if_fail(msginfo->folder != NULL, NULL); - - if (account == NULL) { - account = cur_account; - /* - account = msginfo->folder->folder->account; - if (!account) account = cur_account; - */ - } - g_return_val_if_fail(account != NULL, NULL); - - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_REPLIED); - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_FORWARDED); - CHANGE_FLAGS(msginfo); - - 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_STEXT(compose->text); - gtk_stext_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 { - FILE *fp; - gchar *quote_str; - - if ((fp = procmime_get_text_part(msginfo)) == NULL) - g_warning(_("Can't get text part\n")); - else { - gchar * qmark; - - if (prefs_common.fw_quotemark && - *prefs_common.fw_quotemark) - qmark = prefs_common.fw_quotemark; - else - qmark = "> "; - - quote_str = compose_quote_fmt(compose, msginfo, - prefs_common.fw_quotefmt, - qmark); - - if (quote_str != NULL) - gtk_stext_insert(text, NULL, NULL, NULL, - quote_str, -1); - - fclose(fp); - } - - compose_attach_parts(compose, msginfo); - } - - if (prefs_common.auto_sig) - compose_insert_sig(compose); - gtk_editable_set_position(GTK_EDITABLE(compose->text), 0); - gtk_stext_set_point(GTK_STEXT(compose->text), 0); - - gtk_stext_thaw(text); - if (account->protocol != A_NNTP) - gtk_widget_grab_focus(compose->to_entry); - else - gtk_widget_grab_focus(compose->newsgroups_entry); - - return compose; -} - -#undef INSERT_FW_HEADER - -Compose * compose_forward_multiple(PrefsAccount * account, - GSList *msginfo_list) -{ - Compose *compose; - GtkSText *text; - GSList *msginfo; - gchar *msgfile; - - g_return_val_if_fail(msginfo_list != NULL, NULL); - - for (msginfo = msginfo_list; msginfo != NULL; msginfo = msginfo->next) { - if ( ((MsgInfo *)msginfo->data)->folder == NULL ) - return NULL; - } - - if (account == NULL) { - account = cur_account; - /* - account = msginfo->folder->folder->account; - if (!account) account = cur_account; - */ - } - g_return_val_if_fail(account != NULL, NULL); - - compose = compose_create(account); - compose->mode = COMPOSE_FORWARD; - - text = GTK_STEXT(compose->text); - gtk_stext_freeze(text); - - for (msginfo = msginfo_list; msginfo != NULL; msginfo = msginfo->next) { - msgfile = procmsg_get_message_file_path((MsgInfo *)msginfo->data); - 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); - } - - if (prefs_common.auto_sig) - compose_insert_sig(compose); - gtk_editable_set_position(GTK_EDITABLE(compose->text), 0); - gtk_stext_set_point(GTK_STEXT(compose->text), 0); - - gtk_stext_thaw(text); - if (account->protocol != A_NNTP) - gtk_widget_grab_focus(compose->to_entry); - else - gtk_widget_grab_focus(compose->newsgroups_entry); - - return compose; -} - -void compose_reedit(MsgInfo *msginfo) -{ - Compose *compose; - PrefsAccount *account; - GtkSText *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_STEXT(compose->text); - gtk_stext_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_stext_insert(text, NULL, NULL, NULL, buf, -1); - fclose(fp); - } - compose_attach_parts(compose, msginfo); - - gtk_stext_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_NEWSGROUPS: - entry = GTK_ENTRY(compose->newsgroups_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) -{ - GtkSText *text = GTK_STEXT(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_stext_insert(text, NULL, qcolor, NULL, - quote_str, -1); - gtk_stext_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_stext_insert(text, NULL, qcolor, NULL, - quote_str, -1); - gtk_stext_insert(text, NULL, qcolor, NULL, buf, -1); - gtk_stext_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_stext_insert(text, NULL, qcolor, NULL, - quote_str, -1); - - if (isspace(*(linep - 1))) - gtk_stext_insert(text, NULL, - qcolor, NULL, - leftp, line_len - 1); - else - gtk_stext_insert(text, NULL, - qcolor, NULL, - leftp, line_len); - gtk_stext_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_stext_insert(text, NULL, qcolor, NULL, - quote_str, -1); - gtk_stext_insert(text, NULL, qcolor, NULL, leftp, -1); - gtk_stext_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': - 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 'c': - str = msginfo->cc; - 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, gboolean ignore_replyto, - gboolean followup_and_reply_to) -{ - 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) || followup_and_reply_to) - gtk_entry_set_text(GTK_ENTRY(compose->to_entry), - ( (compose->replyto && !ignore_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); - } -} - -#undef SET_ENTRY - -static void compose_exec_sig(Compose *compose, gchar *sigfile) -{ - FILE *tmpfp; - pid_t thepid; - gchar *sigtext; - FILE *sigprg; - gchar *buf; - size_t buf_len = 128; - - if (strlen(sigfile) < 2) - return; - - sigprg = popen(sigfile+1, "r"); - if (sigprg) { - - buf = g_malloc(buf_len); - - if (!buf) { - gtk_stext_insert(GTK_STEXT(compose->text), NULL, NULL, NULL, \ - "Unable to insert signature (malloc failed)\n", -1); - - pclose(sigprg); - return; - } - - while (!feof(sigprg)) { - bzero(buf, buf_len); - fread(buf, buf_len-1, 1, sigprg); - gtk_stext_insert(GTK_STEXT(compose->text), NULL, NULL, NULL, buf, -1); - } - - g_free(buf); - pclose(sigprg); - } - else - { - gtk_stext_insert(GTK_STEXT(compose->text), NULL, NULL, NULL, \ - "Can't exec file: ", -1); - gtk_stext_insert(GTK_STEXT(compose->text), NULL, NULL, NULL, \ - sigfile+1, -1); - } -} - -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(get_home_dir(), G_DIR_SEPARATOR_S, - DEFAULT_SIGNATURE, NULL); - } - - if (!is_file_or_fifo_exist(sigfile) & (sigfile[0] != '|')) { - g_free(sigfile); - return; - } - - gtk_stext_insert(GTK_STEXT(compose->text), NULL, NULL, NULL, "\n\n", 2); - if (prefs_common.sig_sep) { - gtk_stext_insert(GTK_STEXT(compose->text), NULL, NULL, NULL, - prefs_common.sig_sep, -1); - gtk_stext_insert(GTK_STEXT(compose->text), NULL, NULL, NULL, - "\n", 1); - } - - if (sigfile[0] == '|') - { - compose_exec_sig(compose, sigfile); - } - else - { - compose_insert_file(compose, sigfile); - } - g_free(sigfile); -} - -static void compose_insert_file(Compose *compose, const gchar *file) -{ - GtkSText *text = GTK_STEXT(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_stext_freeze(text); - - while (fgets(buf, sizeof(buf), fp) != NULL) - gtk_stext_insert(text, NULL, NULL, NULL, buf, -1); - - gtk_stext_thaw(text); - - fclose(fp); -} - -static void compose_attach_info(Compose * compose, AttachInfo * ainfo, - ContentType cnttype) -{ - gchar *text[N_ATTACH_COLS]; - gint row; - - text[COL_MIMETYPE] = ainfo->content_type; - text[COL_SIZE] = to_human_readable(ainfo->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_attach_append_with_type(Compose *compose, - const gchar *file, - const gchar *type, - ContentType cnttype) -{ - AttachInfo *ainfo; - off_t size; - - 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->encoding = ENC_7BIT; - ainfo->name = g_strdup_printf(_("Message: %s"), - g_basename(file)); - } else { - ainfo->encoding = ENC_BASE64; - ainfo->name = g_strdup(g_basename(file)); - } - - ainfo->content_type = g_strdup(type); - ainfo->size = size; - - compose_attach_info(compose, ainfo, cnttype); -} - -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; - - compose_attach_info(compose, ainfo, cnttype); -} - -static void compose_wrap_line(Compose *compose) -{ - GtkSText *text = GTK_STEXT(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_stext_freeze(text); - - text_len = gtk_stext_get_length(text); - - for (; cur_pos < text_len; cur_pos++) { - if (text->use_wchar) - ch_len = wctomb - (cbuf, (wchar_t)GTK_STEXT_INDEX(text, cur_pos)); - else { - cbuf[0] = GTK_STEXT_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_STEXT_INDEX(text, line_pos - 1)); - else { - cbuf[0] = GTK_STEXT_INDEX(text, line_pos - 1); - tlen = 1; - } - if (tlen == 1 && isspace(*cbuf)) { - gtk_stext_set_point(text, line_pos); - gtk_stext_backward_delete(text, 1); - text_len--; - cur_pos--; - line_pos--; - cur_len--; - line_len--; - } - - gtk_stext_set_point(text, line_pos); - gtk_stext_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_stext_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); -} - -/** - * compose_current_mail_account: - * - * Find a current mail account (the currently selected account, or the - * default account, if a news account is currently selected). If a - * mail account cannot be found, display an error message. - * - * Return value: Mail account, or NULL if not found. - **/ -static PrefsAccount * -compose_current_mail_account(void) -{ - PrefsAccount *ac; - - 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.")); - return NULL; - } - } - return ac; -} - -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 = compose_current_mail_account(); - if (!ac) { - unlink(tmp); - lock = FALSE; - return -1; - } - } - */ - ac = compose->account; - - 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.")); - } - - unlink(tmp); - 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, compose->account) < 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(); - path = folder_item_get_path(outbox); - if (!is_dir_exist(path)) - make_dir_hier(path); - - folder_item_scan(outbox); - if ((num = folder_item_add_msg(outbox, file, FALSE)) < 0) { - g_free(path); - g_warning(_("can't save message\n")); - return -1; - } - - 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.perm_flags = 0; - newmsginfo.flags.tmp_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); - queue_path = folder_item_get_path(queue); - if (!is_dir_exist(queue_path)) - make_dir_hier(queue_path); - if ((num = folder_item_add_msg(queue, tmp, TRUE)) < 0) { - g_warning(_("can't queue the message\n")); - unlink(tmp); - g_free(tmp); - g_free(queue_path); - return -1; - } - g_free(tmp); - - 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.perm_flags = 0; - newmsginfo.flags.tmp_flags = 0; - procmsg_write_flags(&newmsginfo, fp); - fclose(fp); - } - g_free(queue_path); - - folder_item_scan(queue); - folderview_update_item(queue, TRUE); - - 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); -} - -#define IS_IN_CUSTOM_HEADER(header) \ - (compose->account->add_customhdr && \ - custom_header_find(compose->account->customhdr_list, header) != NULL) - -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 (!IS_IN_CUSTOM_HEADER("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); - if (!IS_IN_CUSTOM_HEADER("To")) { - 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); - if (!IS_IN_CUSTOM_HEADER("Newsgroups")) { - 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); - if (!IS_IN_CUSTOM_HEADER("Cc")) { - 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' && !IS_IN_CUSTOM_HEADER("Subject")) { - 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 && !IS_IN_CUSTOM_HEADER("Followup-To")) { - 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 && !IS_IN_CUSTOM_HEADER("Reply-To")) { - 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); - } - } - } - - /* Organization */ - if (compose->account->organization && - !IS_IN_CUSTOM_HEADER("Organization")) { - compose_convert_header(buf, sizeof(buf), - compose->account->organization, - strlen("Organization: ")); - fprintf(fp, "Organization: %s\n", buf); - } - - /* Program version and system info */ - /* uname(&utsbuf); */ - str = gtk_entry_get_text(GTK_ENTRY(compose->to_entry)); - if (*str != '\0' && !IS_IN_CUSTOM_HEADER("X-Mailer")) { - 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' && !IS_IN_CUSTOM_HEADER("X-Newsreader")) { - 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); */ - } - - /* custom headers */ - if (compose->account->add_customhdr) { - GSList *cur; - - for (cur = compose->account->customhdr_list; cur != NULL; - cur = cur->next) { - CustomHeader *chdr = (CustomHeader *)cur->data; - - if (strcasecmp(chdr->name, "Date") != 0 && - strcasecmp(chdr->name, "From") != 0 && - strcasecmp(chdr->name, "To") != 0 && - strcasecmp(chdr->name, "Sender") != 0 && - strcasecmp(chdr->name, "Message-Id") != 0 && - strcasecmp(chdr->name, "In-Reply-To") != 0 && - strcasecmp(chdr->name, "References") != 0 && - strcasecmp(chdr->name, "Mime-Version") != 0 && - strcasecmp(chdr->name, "Content-Type") != 0 && - strcasecmp(chdr->name, "Content-Transfer-Encoding") - != 0) - compose_convert_header - (buf, sizeof(buf), - chdr->value ? chdr->value : "", - strlen(chdr->name) + 2); - fprintf(fp, "%s: %s\n", chdr->name, 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)); - } - - /* Request Return Receipt */ - if (!IS_IN_CUSTOM_HEADER("Disposition-Notification-To")) { - if (compose->return_receipt) { - if (compose->account->name - && *compose->account->name) { - compose_convert_header(buf, sizeof(buf), compose->account->name, strlen("Disposition-Notification-To: ")); - fprintf(fp, "Disposition-Notification-To: %s <%s>\n", buf, compose->account->address); - } else - fprintf(fp, "Disposition-Notification-To: %s\n", compose->account->address); - } - } - - /* separator between header and body */ - fputs("\n", fp); - - return 0; -} - -#undef IS_IN_CUSTOM_HEADER - -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); - gtk_table_set_row_spacing(GTK_TABLE(table), 0, 4); - compose_add_entry_field(table, &newsgroups_hbox, &newsgroups_entry, - &count, "Newsgroups:", FALSE); - gtk_table_set_row_spacing(GTK_TABLE(table), 1, 4); - compose_add_entry_field(table, &hbox, &subject_entry, &count, - "Subject:", FALSE); - gtk_table_set_row_spacing(GTK_TABLE(table), 2, 4); - compose_add_entry_field(table, &cc_hbox, &cc_entry, &count, - "Cc:", TRUE); - gtk_table_set_row_spacing(GTK_TABLE(table), 3, 4); - compose_add_entry_field(table, &bcc_hbox, &bcc_entry, &count, - "Bcc:", TRUE); - gtk_table_set_row_spacing(GTK_TABLE(table), 4, 4); - compose_add_entry_field(table, &reply_hbox, &reply_entry, &count, - "Reply-To:", TRUE); - gtk_table_set_row_spacing(GTK_TABLE(table), 5, 4); - compose_add_entry_field(table, &followup_hbox, &followup_entry, &count, - "Followup-To:", FALSE); - gtk_table_set_row_spacing(GTK_TABLE(table), 6, 4); - - 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_stext_new(gtk_scrolled_window_get_hadjustment - (GTK_SCROLLED_WINDOW(scrolledwin)), - gtk_scrolled_window_get_vadjustment - (GTK_SCROLLED_WINDOW(scrolledwin))); - GTK_STEXT(text)->default_tab_width = 8; - gtk_stext_set_editable(GTK_STEXT(text), TRUE); - if (prefs_common.smart_wrapping) { - gtk_stext_set_word_wrap(GTK_STEXT(text), TRUE); - gtk_stext_set_wrap_rmargin(GTK_STEXT(text), prefs_common.linewrap_len); - } - - 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); - - /* - 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; - -#if USE_GPGME - compose->use_signing = FALSE; - compose->use_encryption = FALSE; -#endif /* USE_GPGME */ - - compose->modified = FALSE; - - compose->return_receipt = 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); - - compose->use_bcc = FALSE; - compose->use_replyto = FALSE; - compose->use_followupto = FALSE; - - /* - 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) { - compose->use_cc = TRUE; - 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) { - compose->use_bcc = TRUE; - menuitem = gtk_item_factory_get_item(ifactory, "/Message/Bcc"); - gtk_check_menu_item_set_active - (GTK_CHECK_MENU_ITEM(menuitem), TRUE); - if (account->auto_bcc) - gtk_entry_set_text(GTK_ENTRY(bcc_entry), - account->auto_bcc); - } - if (account->set_autoreplyto) { - compose->use_replyto = TRUE; - menuitem = gtk_item_factory_get_item(ifactory, - "/Message/Reply to"); - gtk_check_menu_item_set_active - (GTK_CHECK_MENU_ITEM(menuitem), TRUE); - if (account->auto_replyto) - gtk_entry_set_text(GTK_ENTRY(reply_entry), - account->auto_replyto); - } - - 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); - - /* - compose->use_to = FALSE; - compose->use_cc = FALSE; - */ - compose->use_attach = FALSE; - - if (!compose->use_bcc) { - gtk_widget_hide(bcc_hbox); - gtk_widget_hide(bcc_entry); - gtk_table_set_row_spacing(GTK_TABLE(table), 4, 0); - } - if (!compose->use_replyto) { - gtk_widget_hide(reply_hbox); - gtk_widget_hide(reply_entry); - gtk_table_set_row_spacing(GTK_TABLE(table), 5, 0); - } - if (!compose->use_followupto) { - gtk_widget_hide(followup_hbox); - gtk_widget_hide(followup_entry); - gtk_table_set_row_spacing(GTK_TABLE(table), 6, 0); - } - - if (!prefs_common.show_ruler) - gtk_widget_hide(ruler_hbox); - - select_account(compose, account); - - return compose; -} - -#include "pixmaps/stock_mail_send.xpm" -#include "pixmaps/stock_mail_send_queue.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_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_queue_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); -} - -#undef CREATE_TOOLBAR_ICON - -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->account_name, ac->name, ac->address); - 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; - GList *mime_type_list, *strlist; - - 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); - - label = gtk_label_new(_("MIME type")); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, (0 + 1), - GTK_FILL, 0, 0, 0); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - mimetype_entry = gtk_combo_new(); - gtk_table_attach(GTK_TABLE(table), mimetype_entry, 1, 2, 0, (0 + 1), - GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - /* stuff with list */ - mime_type_list = procmime_get_mime_type_list(); - strlist = NULL; - for (; mime_type_list != NULL; mime_type_list = mime_type_list->next) { - MimeType *type = (MimeType *) mime_type_list->data; - strlist = g_list_append(strlist, - g_strdup_printf("%s/%s", - type->type, type->sub_type)); - } - - gtk_combo_set_popdown_strings(GTK_COMBO(mimetype_entry), strlist); - - for (mime_type_list = strlist; mime_type_list != NULL; - mime_type_list = mime_type_list->next) - g_free(mime_type_list->data); - g_list_free(strlist); - - mimetype_entry = GTK_COMBO(mimetype_entry)->entry; - - 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; -} - -#undef SET_LABEL_AND_ENTRY - -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) { - fd_write(pipe_fds[1], "2\n", 2); - _exit(1); - } - - pid_ed = compose_exec_ext_editor_real(tmp); - if (pid_ed < 0) { - fd_write(pipe_fds[1], "1\n", 2); - _exit(1); - } - - /* wait until editor is terminated */ - waitpid(pid_ed, NULL, 0); - - fd_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 */ - GtkSText *text = GTK_STEXT(compose->text); - - gtk_stext_freeze(text); - gtk_stext_set_point(text, 0); - gtk_stext_forward_delete(text, gtk_stext_get_length(text)); - compose_insert_file(compose, compose->exteditor_file); - compose_changed_cb(NULL, compose); - gtk_stext_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(GtkSText *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_STEXT(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 select_account(Compose * compose, PrefsAccount * ac) -{ - compose->account = ac; - compose_set_title(compose); - - if (ac->protocol == A_NNTP) { - GtkItemFactory *ifactory; - GtkWidget *menuitem; - - ifactory = gtk_item_factory_from_widget(compose->menubar); - menu_set_sensitive(ifactory, - "/Message/Followup to", TRUE); - - gtk_widget_show(compose->newsgroups_hbox); - gtk_widget_show(compose->newsgroups_entry); - gtk_table_set_row_spacing(GTK_TABLE(compose->table), - 1, 4); - - compose->use_to = FALSE; - compose->use_cc = FALSE; - - menuitem = gtk_item_factory_get_item(ifactory, "/Message/To"); - gtk_check_menu_item_set_active - (GTK_CHECK_MENU_ITEM(menuitem), FALSE); - menu_set_sensitive(ifactory, - "/Message/To", TRUE); - menuitem = gtk_item_factory_get_item(ifactory, "/Message/Cc"); - gtk_check_menu_item_set_active - (GTK_CHECK_MENU_ITEM(menuitem), FALSE); - - gtk_widget_hide(compose->to_hbox); - gtk_widget_hide(compose->to_entry); - gtk_widget_hide(compose->cc_hbox); - gtk_widget_hide(compose->cc_entry); - - gtk_table_set_row_spacing(GTK_TABLE(compose->table), - 0, 0); - gtk_table_set_row_spacing(GTK_TABLE(compose->table), - 3, 0); - } - else { - GtkItemFactory *ifactory; - GtkWidget *menuitem; - - ifactory = gtk_item_factory_from_widget(compose->menubar); - menu_set_sensitive(ifactory, - "/Message/Followup to", FALSE); - - gtk_entry_set_text(GTK_ENTRY(compose->newsgroups_entry), ""); - gtk_widget_hide(compose->newsgroups_hbox); - gtk_widget_hide(compose->newsgroups_entry); - gtk_table_set_row_spacing(GTK_TABLE(compose->table), - 1, 0); - - compose->use_to = TRUE; - compose->use_cc = TRUE; - - menuitem = gtk_item_factory_get_item(ifactory, "/Message/To"); - gtk_check_menu_item_set_active - (GTK_CHECK_MENU_ITEM(menuitem), TRUE); - menu_set_sensitive(ifactory, - "/Message/To", FALSE); - menuitem = gtk_item_factory_get_item(ifactory, "/Message/Cc"); - gtk_check_menu_item_set_active - (GTK_CHECK_MENU_ITEM(menuitem), TRUE); - - gtk_widget_show(compose->to_hbox); - gtk_widget_show(compose->to_entry); - gtk_widget_show(compose->cc_hbox); - gtk_widget_show(compose->cc_entry); - - gtk_table_set_row_spacing(GTK_TABLE(compose->table), - 0, 4); - gtk_table_set_row_spacing(GTK_TABLE(compose->table), - 3, 4); - } - gtk_widget_queue_resize(compose->table_vbox); -} - -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) - select_account(compose, ac); -} - -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, TRUE) < 0) { - unlink(tmp); - g_free(tmp); - return; - } - - 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; - GList *file_list; - - file_list = filesel_select_multiple_files(_("Select file"), NULL); - - if (file_list) { - GList *tmp; - - for ( tmp = file_list; tmp; tmp = tmp->next) { - gchar *file = (gchar *) tmp->data; - compose_attach_append(compose, file, MIME_UNKNOWN); - g_free(file); - } - g_list_free(file_list); - } -} - -static void compose_insert_file_cb(gpointer data, guint action, - GtkWidget *widget) -{ - Compose *compose = (Compose *)data; - GList *file_list; - - file_list = filesel_select_multiple_files(_("Select file"), NULL); - - if (file_list) { - GList *tmp; - - for ( tmp = file_list; tmp; tmp = tmp->next) { - gchar *file = (gchar *) tmp->data; - compose_insert_file(compose, file); - g_free(file); - } - g_list_free(file_list); - } -} - -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_stext_set_point(GTK_STEXT(widget), - gtk_editable_get_position(GTK_EDITABLE(widget))); -} - -#if 0 -static void compose_key_press_cb(GtkWidget *widget, GdkEventKey *event, - Compose *compose) -{ - gtk_stext_set_point(GTK_STEXT(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); -} - -static void compose_toggle_return_receipt_cb(gpointer data, guint action, - GtkWidget *widget) -{ - Compose *compose = (Compose *)data; - - if (GTK_CHECK_MENU_ITEM(widget)->active) - compose->return_receipt = TRUE; - else - compose->return_receipt = FALSE; -} - -static gchar *compose_quote_fmt (Compose *compose, - MsgInfo *msginfo, - const gchar *fmt, - const gchar *qmark) -{ - gchar * quote_str = NULL; - - if (qmark != NULL) { - gchar * p; - - quote_fmt_init(msginfo, NULL); - quote_fmt_scan_string(qmark); - quote_fmtparse(); - - p = quote_fmt_get_buffer(); - if (p == NULL) { - alertpanel_error - (_("Quote mark format error.")); - } - else { - quote_str = alloca(strlen(p) + 1); - strcpy(quote_str, p); - } - } - - quote_fmt_init(msginfo, quote_str); - quote_fmt_scan_string(fmt); - quote_fmtparse(); - - if (quote_fmt_get_buffer() == NULL) - alertpanel_error - (_("Message reply/forward format error.")); - - return quote_fmt_get_buffer(); -} - -static void template_apply_cb(gchar *s, gpointer data) -{ - Compose *compose = (Compose*)data; - GtkSText *text = GTK_STEXT(compose->text); - gchar *quote_str; - gchar *qmark; - gchar *parsed_text; - gchar *tmpl; - gchar *old_tmpl = s; - - if(!s) return; - - if(compose->replyinfo=NULL) { - gtk_stext_freeze(text); - gtk_stext_set_point(text, 0); - gtk_stext_forward_delete(text, gtk_stext_get_length(text)); - gtk_stext_insert(text, NULL, NULL, NULL, s, -1); - gtk_stext_thaw(text); - g_free(old_tmpl); - return; - } - - parsed_text = g_new(gchar, strlen(s)*2 + 1); - tmpl = parsed_text; - while(*s) { - if (*s == '\n') { - *parsed_text++ = '\\'; - *parsed_text++ = 'n'; - s++; - } else { - *parsed_text++ = *s++; - } - } - *parsed_text = '\0'; - - if (prefs_common.quotemark && *prefs_common.quotemark) - qmark = prefs_common.quotemark; - else - qmark = "> "; - - quote_str = compose_quote_fmt(compose, compose->replyinfo, tmpl, qmark); - if (quote_str != NULL) { - gtk_stext_freeze(text); - gtk_stext_set_point(text, 0); - gtk_stext_forward_delete(text, gtk_stext_get_length(text)); - gtk_stext_insert(text, NULL, NULL, NULL, quote_str, -1); - gtk_stext_thaw(text); - } - - g_free(old_tmpl); - g_free(tmpl); -} - -static void template_select_cb(gpointer data, guint action, - GtkWidget *widget) -{ - template_select(&template_apply_cb, data); -} diff --git a/src/compose.h b/src/compose.h deleted file mode 100644 index 6418862b8..000000000 --- a/src/compose.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * 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 __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, - COMPOSE_NEWSGROUPS -} ComposeEntryType; - -typedef enum -{ - COMPOSE_REPLY, - COMPOSE_REPLY_WITH_QUOTE, - COMPOSE_REPLY_WITHOUT_QUOTE, - COMPOSE_REPLY_TO_SENDER, - COMPOSE_FOLLOWUP_AND_REPLY_TO, - COMPOSE_REPLY_TO_SENDER_WITH_QUOTE, - COMPOSE_REPLY_TO_SENDER_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; - MsgInfo *replyinfo; - - 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; - - gboolean return_receipt; - - 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; -}; - -Compose * compose_new (PrefsAccount *account); - -Compose * compose_new_with_recipient (PrefsAccount *account, - const gchar *to); - -Compose * compose_new_with_folderitem (PrefsAccount *account, - FolderItem *item); - -void compose_followup_and_reply_to (MsgInfo *msginfo, - gboolean quote, - gboolean to_all, - gboolean ignore_replyto); -void compose_reply (MsgInfo *msginfo, - gboolean quote, - gboolean to_all, - gboolean ignore_replyto); -Compose * compose_forward (PrefsAccount *account, - MsgInfo *msginfo, - gboolean as_attach); -Compose * compose_forward_multiple(PrefsAccount * account, - GSList *msginfo_list); - -void compose_reedit (MsgInfo *msginfo); - -GList *compose_get_compose_list (void); - -void compose_entry_append (Compose *compose, - const gchar *address, - ComposeEntryType type); -gint compose_send(Compose *compose); - -#endif /* __COMPOSE_H__ */ diff --git a/src/customheader.c b/src/customheader.c deleted file mode 100644 index 7d8560a1c..000000000 --- a/src/customheader.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * 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 <glib.h> -#include <string.h> -#include <stdlib.h> - -#include "customheader.h" -#include "utils.h" - - -gchar *custom_header_get_str(CustomHeader *ch) -{ - return g_strdup_printf("%i:%s: %s", - ch->account_id, ch->name, - ch->value ? ch->value : ""); -} - -CustomHeader *custom_header_read_str(const gchar *buf) -{ - CustomHeader *ch; - gchar *account_id_str; - gint id; - gchar *name; - gchar *value; - gchar *tmp; - - Xstrdup_a(tmp, buf, return NULL); - g_strstrip(tmp); - - account_id_str = tmp; - - name = strchr(account_id_str, ':'); - if (!name) - return NULL; - else { - gchar *endp; - - *name++ = '\0'; - id = strtol(account_id_str, &endp, 10); - if (*endp != '\0') return NULL; - } - - while (*name == ' ') name++; - - value = strchr(name, ':'); - if (!value) return NULL; - - *value++ = '\0'; - - ch = g_new0(CustomHeader, 1); - ch->account_id = id; - ch->name = *name ? g_strdup(name) : NULL; - while (*value == ' ') value++; - ch->value = *value ? g_strdup(value) : NULL; - - return ch; -} - -CustomHeader *custom_header_find(GSList *header_list, const gchar *header) -{ - GSList *cur; - CustomHeader *chdr; - - for (cur = header_list; cur != NULL; cur = cur->next) { - chdr = (CustomHeader *)cur->data; - if (!strcasecmp(chdr->name, header)) - return chdr; - } - - return NULL; -} - -void custom_header_free(CustomHeader *ch) -{ - if (!ch) return; - - g_free(ch->name); - g_free(ch->value); - g_free(ch); -} diff --git a/src/customheader.h b/src/customheader.h deleted file mode 100644 index 8554ea7fd..000000000 --- a/src/customheader.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 __CUSTOMHEADER_H__ -#define __CUSTOMHEADER_H__ - -#include <glib.h> - -struct _CustomHeader -{ - gint account_id; - gchar *name; - gchar *value; -}; - -typedef struct _CustomHeader CustomHeader; - -gchar *custom_header_get_str (CustomHeader *ch); -CustomHeader *custom_header_read_str (const gchar *buf); -CustomHeader *custom_header_find (GSList *header_list, - const gchar *header); -void custom_header_free (CustomHeader *ch); - -#endif /* __CUSTOMHEADER_H__ */ diff --git a/src/defs.h b/src/defs.h deleted file mode 100644 index a67922afe..000000000 --- a/src/defs.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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 __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 MBOX_CACHE_DIR "mboxcache" -#define MIME_TMP_DIR "mimetmp" -#define COMMON_RC "sylpheedrc" -#define ACCOUNT_RC "accountrc" -#define FILTER_RC "filterrc" -#define CUSTOM_HEADER_RC "customheaderrc" -#define DISPLAY_HEADER_RC "dispheaderrc" -#define FOLDERITEM_RC "folderitemrc" -#define SCORING_RC "scoringrc" -#define FILTERING_RC "filteringrc" -#define MENU_RC "menurc" -#define NEWSGROUP_LIST ".newsgroup_list" -#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 19 -#define MARK_VERSION 2 -#define TEMPLATES_DIR "templates" - -#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 UI_REFRESH_INTERVAL 50000 - -#define NORMAL_FONT prefs_common.normalfont -#define BOLD_FONT prefs_common.boldfont -#define SMALL_FONT prefs_common.smallfont - -#endif /* __DEFS_H__ */ diff --git a/src/displayheader.c b/src/displayheader.c deleted file mode 100644 index 1db374cd4..000000000 --- a/src/displayheader.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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 <glib.h> - -#include "displayheader.h" - -gchar *display_header_prop_get_str(DisplayHeaderProp *dp) -{ - return g_strconcat(dp->hidden ? "-" : "", dp->name, NULL); -} - -DisplayHeaderProp *display_header_prop_read_str(gchar *buf) -{ - DisplayHeaderProp *dp; - - dp = g_new0(DisplayHeaderProp, 1); - - dp->hidden = FALSE; - if (*buf == '-') { - dp->hidden = TRUE; - buf++; - } - if (*buf == '\0') { - g_free(dp); - return NULL; - } - dp->name = g_strdup(buf); - - return dp; -} - -void display_header_prop_free(DisplayHeaderProp *dp) -{ - if (!dp) return; - - g_free(dp->name); - g_free(dp); -} diff --git a/src/displayheader.h b/src/displayheader.h deleted file mode 100644 index e7baa2bed..000000000 --- a/src/displayheader.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 __DISPLAYHEADER_H__ -#define __DISPLAYHEADER_H__ - -#include <glib.h> - -typedef struct _DisplayHeaderProp DisplayHeaderProp; - -struct _DisplayHeaderProp -{ - gchar *name; - gboolean hidden; -}; - -gchar *display_header_prop_get_str (DisplayHeaderProp *dp); -DisplayHeaderProp *display_header_prop_read_str (gchar *buf); -void display_header_prop_free (DisplayHeaderProp *dp); - -#endif /* __DISPLAYHEADER_H__ */ diff --git a/src/editjpilot.c b/src/editjpilot.c deleted file mode 100644 index d98a4cc98..000000000 --- a/src/editjpilot.c +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Edit JPilot address book data. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#ifdef USE_JPILOT - -#include "defs.h" - -#include <glib.h> -#include <gdk/gdkkeysyms.h> -#include <gtk/gtkwindow.h> -#include <gtk/gtksignal.h> -#include <gtk/gtkhbox.h> -#include <gtk/gtklabel.h> -#include <gtk/gtkentry.h> -#include <gtk/gtkhbbox.h> -#include <gtk/gtkbutton.h> - -#include "intl.h" -#include "addressbook.h" -#include "prefs_common.h" -#include "addressitem.h" -#include "jpilot.h" - -#define ADDRESSBOOK_GUESS_JPILOT "MyJPilot" -#define JPILOT_NUM_CUSTOM_LABEL 4 - -static struct _JPilotEdit { - GtkWidget *window; - GtkWidget *name_entry; - GtkWidget *file_entry; - GtkWidget *custom_check[JPILOT_NUM_CUSTOM_LABEL]; - GtkWidget *custom_label[JPILOT_NUM_CUSTOM_LABEL]; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *statusbar; - gint status_cid; -} jpilotedit; - -static struct _AddressFileSelection jpilot_file_selector; - -/* -* Edit functions. -*/ -void edit_jpilot_status_show( gchar *msg ) { - if( jpilotedit.statusbar != NULL ) { - gtk_statusbar_pop( GTK_STATUSBAR(jpilotedit.statusbar), jpilotedit.status_cid ); - if( msg ) { - gtk_statusbar_push( GTK_STATUSBAR(jpilotedit.statusbar), jpilotedit.status_cid, msg ); - } - } -} - -static gint edit_jpilot_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) { - *cancelled = TRUE; - gtk_main_quit(); - return TRUE; -} - -static void edit_jpilot_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { - if (event && event->keyval == GDK_Escape) { - *cancelled = TRUE; - gtk_main_quit(); - } -} - -static void edit_jpilot_ok( GtkWidget *widget, gboolean *cancelled ) { - *cancelled = FALSE; - gtk_main_quit(); -} - -static void edit_jpilot_cancel( GtkWidget *widget, gboolean *cancelled ) { - *cancelled = TRUE; - gtk_main_quit(); -} - -static void edit_jpilot_fill_check_box( JPilotFile *jpf ) { - gint i; - GList *node, *customLbl = NULL; - gchar *labelName; - gboolean done, checked; - for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) { - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( jpilotedit.custom_check[i] ), FALSE ); - gtk_label_set_text( GTK_LABEL( jpilotedit.custom_label[i] ), "" ); - } - - done = FALSE; - i = 0; - customLbl = jpilot_load_custom_label( jpf, customLbl ); - node = customLbl; - while( ! done ) { - if( node ) { - labelName = node->data; - gtk_label_set_text( GTK_LABEL( jpilotedit.custom_label[i] ), labelName ); - checked = jpilot_test_custom_label( jpf, labelName ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( jpilotedit.custom_check[i] ), checked ); - i++; - if( i >= JPILOT_NUM_CUSTOM_LABEL ) done = TRUE; - node = g_list_next( node ); - } - else { - done = TRUE; - } - } - mgu_free_dlist( customLbl ); - customLbl = NULL; -} - -static void edit_jpilot_fill_check_box_new() { - gint i; - for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) { - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( jpilotedit.custom_check[i] ), FALSE ); - gtk_label_set_text( GTK_LABEL( jpilotedit.custom_label[i] ), "" ); - } -} - -static void edit_jpilot_read_check_box( JPilotFile *pilotFile ) { - gint i; - gchar *labelName; - jpilot_clear_custom_labels( pilotFile ); - for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) { - if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(jpilotedit.custom_check[i]) ) ) { - labelName = g_strdup( GTK_LABEL(jpilotedit.custom_label[i])->label ); - jpilot_add_custom_label( pilotFile, labelName ); - } - } -} - -static void edit_jpilot_file_check( void ) { - gint t; - gchar *sFile; - gchar *sMsg; - gboolean flg; - - flg = FALSE; - sFile = gtk_editable_get_chars( GTK_EDITABLE(jpilotedit.file_entry), 0, -1 ); - if( sFile ) { - g_strchomp( sFile ); g_strchug( sFile ); - if( *sFile != '\0' ) { - // Attempt to read file - JPilotFile *jpf = jpilot_create_path( sFile ); - t = jpilot_read_data( jpf ); - if( t == MGU_SUCCESS ) { - // Set check boxes - edit_jpilot_fill_check_box( jpf ); - flg = TRUE; - } - jpilot_free( jpf ); - } - } - if( ! flg ) { - // Clear all check boxes - edit_jpilot_fill_check_box_new(); - } - g_free( sFile ); - - // Display appropriate message - if( t == MGU_SUCCESS ) { - sMsg = ""; - } - else if( t == MGU_BAD_FORMAT || t == MGU_OO_MEMORY ) { - sMsg = _("File does not appear to be JPilot format."); - } - else { - sMsg = _("Could not read file."); - } - edit_jpilot_status_show( sMsg ); -} - -static void edit_jpilot_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; - AddressFileSelection *afs; - GtkWidget *fileSel; - - afs = ( AddressFileSelection * ) data; - fileSel = afs->fileSelector; - sFile = gtk_file_selection_get_filename( GTK_FILE_SELECTION(fileSel) ); - - afs->cancelled = FALSE; - gtk_entry_set_text( GTK_ENTRY(jpilotedit.file_entry), sFile ); - gtk_widget_hide( afs->fileSelector ); - gtk_grab_remove( afs->fileSelector ); - edit_jpilot_file_check(); - gtk_widget_grab_focus( jpilotedit.file_entry ); -} - -static void edit_jpilot_file_cancel( GtkWidget *widget, gpointer data ) { - AddressFileSelection *afs = ( AddressFileSelection * ) data; - afs->cancelled = TRUE; - gtk_widget_hide( afs->fileSelector ); - gtk_grab_remove( afs->fileSelector ); - gtk_widget_grab_focus( jpilotedit.file_entry ); -} - -static void edit_jpilot_file_select_create( AddressFileSelection *afs ) { - GtkWidget *fileSelector; - - fileSelector = gtk_file_selection_new( _("Select JPilot File") ); - gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button), - "clicked", GTK_SIGNAL_FUNC (edit_jpilot_file_ok), ( gpointer ) afs ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button), - "clicked", GTK_SIGNAL_FUNC (edit_jpilot_file_cancel), ( gpointer ) afs ); - afs->fileSelector = fileSelector; - afs->cancelled = TRUE; -} - -static void edit_jpilot_file_select( void ) { - gchar *sFile; - - if (! jpilot_file_selector.fileSelector ) - edit_jpilot_file_select_create( & jpilot_file_selector ); - - sFile = gtk_editable_get_chars( GTK_EDITABLE(jpilotedit.file_entry), 0, -1 ); - gtk_file_selection_set_filename( GTK_FILE_SELECTION( jpilot_file_selector.fileSelector ), sFile ); - g_free( sFile ); - gtk_widget_show( jpilot_file_selector.fileSelector ); - gtk_grab_add( jpilot_file_selector.fileSelector ); -} - -static void addressbook_edit_jpilot_create( gboolean *cancelled ) { - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *table; - GtkWidget *label; - GtkWidget *name_entry; - GtkWidget *file_entry; - GtkWidget *vbox_custom; - GtkWidget *frame_custom; - GtkWidget *custom_check[JPILOT_NUM_CUSTOM_LABEL]; - GtkWidget *custom_label[JPILOT_NUM_CUSTOM_LABEL]; - GtkWidget *hlbox; - GtkWidget *hbbox; - GtkWidget *hsep; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *check_btn; - GtkWidget *file_btn; - GtkWidget *hsbox; - GtkWidget *statusbar; - gint top, i; - - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 450, -1); - gtk_container_set_border_width(GTK_CONTAINER(window), 0); - gtk_window_set_title(GTK_WINDOW(window), _("Edit JPilot Entry")); - 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_jpilot_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_jpilot_key_pressed), - cancelled); - - vbox = gtk_vbox_new(FALSE, 8); - gtk_container_add(GTK_CONTAINER(window), vbox); - gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 ); - - table = gtk_table_new(2 + JPILOT_NUM_CUSTOM_LABEL, 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), 8); - gtk_table_set_col_spacings(GTK_TABLE(table), 8); - - // First row - top = 0; - label = gtk_label_new(_("Name")); - 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); - - name_entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - check_btn = gtk_button_new_with_label( _(" Check File ")); - gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); - - // Second row - top = 1; - label = gtk_label_new(_("File")); - 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); - - file_entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - file_btn = gtk_button_new_with_label( _(" ... ")); - gtk_table_attach(GTK_TABLE(table), file_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); - - // Third row - top = 2; - frame_custom = gtk_frame_new(_("Additional e-Mail address item(s)")); - gtk_table_attach(GTK_TABLE(table), frame_custom, 1, 2, top, (top + JPILOT_NUM_CUSTOM_LABEL), GTK_FILL, 0, 0, 0); - - // Now do custom labels. - vbox_custom = gtk_vbox_new (FALSE, 8); - for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) { - hlbox = gtk_hbox_new( FALSE, 0 ); - custom_check[i] = gtk_check_button_new(); - custom_label[i] = gtk_label_new( "" ); - gtk_box_pack_start( GTK_BOX(hlbox), custom_check[i], FALSE, FALSE, 0 ); - gtk_box_pack_start( GTK_BOX(hlbox), custom_label[i], TRUE, TRUE, 0 ); - gtk_box_pack_start( GTK_BOX(vbox_custom), hlbox, TRUE, TRUE, 0 ); - gtk_misc_set_alignment(GTK_MISC(custom_label[i]), 0, 0.5); - top++; - } - gtk_container_add (GTK_CONTAINER (frame_custom), vbox_custom); - gtk_container_set_border_width( GTK_CONTAINER(vbox_custom), 8 ); - - // Status line - hsbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH); - statusbar = gtk_statusbar_new(); - gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH); - - // Button panel - 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_container_set_border_width( GTK_CONTAINER(hbbox), 0 ); - gtk_widget_grab_default(ok_btn); - - hsep = gtk_hseparator_new(); - gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0); - - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_jpilot_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_jpilot_cancel), cancelled); - gtk_signal_connect(GTK_OBJECT(file_btn), "clicked", - GTK_SIGNAL_FUNC(edit_jpilot_file_select), NULL); - gtk_signal_connect(GTK_OBJECT(check_btn), "clicked", - GTK_SIGNAL_FUNC(edit_jpilot_file_check), NULL); - - gtk_widget_show_all(vbox); - - jpilotedit.window = window; - jpilotedit.name_entry = name_entry; - jpilotedit.file_entry = file_entry; - jpilotedit.ok_btn = ok_btn; - jpilotedit.cancel_btn = cancel_btn; - jpilotedit.statusbar = statusbar; - jpilotedit.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit JPilot Dialog" ); - for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) { - jpilotedit.custom_check[i] = custom_check[i]; - jpilotedit.custom_label[i] = custom_label[i]; - } -} - -AddressJPilot *addressbook_edit_jpilot( AddressJPilot *jpilot ) { - static gboolean cancelled; - gchar *sName; - gchar *sFile; - JPilotFile *jpf; - gboolean fin; - - if (!jpilotedit.window) - addressbook_edit_jpilot_create(&cancelled); - gtk_widget_grab_focus(jpilotedit.ok_btn); - gtk_widget_grab_focus(jpilotedit.name_entry); - gtk_widget_show(jpilotedit.window); - manage_window_set_transient(GTK_WINDOW(jpilotedit.window)); - - edit_jpilot_status_show( "" ); - if( jpilot ) { - jpf = jpilot->pilotFile; - if (jpf->name) - gtk_entry_set_text(GTK_ENTRY(jpilotedit.name_entry), jpf->name); - if (jpf->path) - gtk_entry_set_text(GTK_ENTRY(jpilotedit.file_entry), jpf->path); - gtk_window_set_title( GTK_WINDOW(jpilotedit.window), _("Edit JPilot Entry")); - edit_jpilot_fill_check_box( jpf ); - } - else { - gchar *guessFile = jpilot_find_pilotdb(); - gtk_entry_set_text(GTK_ENTRY(jpilotedit.name_entry), ADDRESSBOOK_GUESS_JPILOT ); - gtk_entry_set_text(GTK_ENTRY(jpilotedit.file_entry), guessFile ); - gtk_window_set_title( GTK_WINDOW(jpilotedit.window), _("Add New JPilot Entry")); - edit_jpilot_fill_check_box_new(); - // Attempt to load labels - if( *guessFile != '\0' ) { - edit_jpilot_file_check(); - } - } - - gtk_main(); - gtk_widget_hide(jpilotedit.window); - if (cancelled == TRUE) return NULL; - - fin = FALSE; - sName = gtk_editable_get_chars( GTK_EDITABLE(jpilotedit.name_entry), 0, -1 ); - sFile = gtk_editable_get_chars( GTK_EDITABLE(jpilotedit.file_entry), 0, -1 ); - if( *sName == '\0' ) fin = TRUE; - if( *sFile == '\0' ) fin = TRUE; - - if( ! fin ) { - if( ! jpilot ) { - jpilot = g_new0(AddressJPilot, 1); - ADDRESS_OBJECT_TYPE(jpilot) = ADDR_JPILOT; - jpf = jpilot_create(); - jpilot->pilotFile = jpf; - } - g_free( jpilot->name ); - jpilot->name = g_strdup( sName ); - jpilot_set_name( jpf, sName ); - jpilot_set_file( jpf, sFile ); - edit_jpilot_read_check_box( jpf ); - } - g_free( sName ); - g_free( sFile ); - - return jpilot; -} - -#endif /* USE_JPILOT */ - -/* -* End of Source. -*/ - diff --git a/src/editjpilot.h b/src/editjpilot.h deleted file mode 100644 index 795d8c91d..000000000 --- a/src/editjpilot.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Edit JPilot address book data. - */ - -#ifndef __EDITJPILOT_H__ -#define __EDITJPILOT_H__ - -#ifdef USE_JPILOT - -// Function prototypes -AddressJPilot *addressbook_edit_jpilot( AddressJPilot *jpilot ); - -#endif /* USE_JPILOT */ - -#endif /* __EDITJPILOT_H__ */ - -/* -* End of Source. -*/ - diff --git a/src/editldap.c b/src/editldap.c deleted file mode 100644 index 010a45d06..000000000 --- a/src/editldap.c +++ /dev/null @@ -1,596 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Edit VCard address book data. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#ifdef USE_LDAP - -#include "defs.h" - -#include <glib.h> -#include <gdk/gdkkeysyms.h> -#include <gtk/gtkwindow.h> -#include <gtk/gtksignal.h> -#include <gtk/gtklabel.h> -#include <gtk/gtkentry.h> -#include <gtk/gtktable.h> -#include <gtk/gtkbutton.h> - -#include "intl.h" -#include "addressbook.h" -#include "prefs_common.h" -#include "menu.h" -#include "addressitem.h" -#include "syldap.h" -#include "editldap_basedn.h" - -#define ADDRESSBOOK_GUESS_LDAP_NAME "MyServer" -#define ADDRESSBOOK_GUESS_LDAP_SERVER "localhost" - -#define LDAPEDIT_TABLE_ROWS 6 -#define LDAPEDIT_TABLE_COLS 3 - -static struct _LDAPEdit { - GtkWidget *window; - GtkWidget *notebook; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *statusbar; - gint status_cid; - GtkWidget *entry_name; - GtkWidget *entry_server; - GtkWidget *spinbtn_port; - GtkWidget *entry_baseDN; - GtkWidget *spinbtn_timeout; - GtkWidget *entry_bindDN; - GtkWidget *entry_bindPW; - GtkWidget *entry_criteria; - GtkWidget *spinbtn_maxentry; -} ldapedit; - -/* -* Edit functions. -*/ -void edit_ldap_status_show( gchar *msg ) { - if( ldapedit.statusbar != NULL ) { - gtk_statusbar_pop( GTK_STATUSBAR(ldapedit.statusbar), ldapedit.status_cid ); - if( msg ) { - gtk_statusbar_push( GTK_STATUSBAR(ldapedit.statusbar), ldapedit.status_cid, msg ); - } - } -} - -static void edit_ldap_ok( GtkWidget *widget, gboolean *cancelled ) { - *cancelled = FALSE; - gtk_main_quit(); -} - -static void edit_ldap_cancel( GtkWidget *widget, gboolean *cancelled ) { - *cancelled = TRUE; - gtk_main_quit(); -} - -static gint edit_ldap_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) { - *cancelled = TRUE; - gtk_main_quit(); - return TRUE; -} - -static void edit_ldap_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { - if (event && event->keyval == GDK_Escape) { - *cancelled = TRUE; - gtk_main_quit(); - } -} - -static void edit_ldap_switch_page( GtkWidget *widget ) { - edit_ldap_status_show( "" ); -} - -static void edit_ldap_server_check( void ) { - gchar *sHost, *sBind, *sPass; - gint iPort, iTime; - gchar *sMsg; - gchar *sBaseDN = NULL; - gint iBaseDN = 0; - gboolean flg; - - edit_ldap_status_show( "" ); - flg = FALSE; - sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 ); - sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 ); - sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 ); - iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) ); - iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) ); - g_strchomp( sHost ); g_strchug( sHost ); - g_strchomp( sBind ); g_strchug( sBind ); - g_strchomp( sPass ); g_strchug( sPass ); - if( *sHost != '\0' ) { - // Test connection to server - if( syldap_test_connect_s( sHost, iPort ) ) { - // Attempt to read base DN - GList *baseDN = syldap_read_basedn_s( sHost, iPort, sBind, sPass, iTime ); - if( baseDN ) { - GList *node = baseDN; - while( node ) { - ++iBaseDN; - if( ! sBaseDN ) { - sBaseDN = g_strdup( node->data ); - } - node = g_list_next( node ); - } - mgu_free_dlist( baseDN ); - baseDN = node = NULL; - } - flg = TRUE; - } - } - g_free( sHost ); - g_free( sBind ); - g_free( sPass ); - - if( sBaseDN ) { - // Load search DN - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), sBaseDN); - g_free( sBaseDN ); - } - - // Display appropriate message - if( flg ) { - sMsg = _( "Connected successfully to server" ); - } - else { - sMsg = _( "Could not connect to server" ); - } - edit_ldap_status_show( sMsg ); -} - -static void edit_ldap_basedn_select( void ) { - gchar *sHost, *sBind, *sPass, *sBase; - gint iPort, iTime; - gchar *selectDN; - - sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 ); - sBase = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_baseDN), 0, -1 ); - sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 ); - sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 ); - iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) ); - iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) ); - g_strchomp( sHost ); g_strchug( sHost ); - g_strchomp( sBind ); g_strchug( sBind ); - g_strchomp( sPass ); g_strchug( sPass ); - selectDN = edit_ldap_basedn_selection( sHost, iPort, sBase, iTime, sBind, sPass ); - if( selectDN ) { - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), selectDN); - g_free( selectDN ); - selectDN = NULL; - } - g_free( sHost ); - g_free( sBase ); - g_free( sBind ); - g_free( sPass ); -} - -static void edit_ldap_search_reset( void ) { - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), SYLDAP_DFL_CRITERIA ); -} - -static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) { - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *notebook; - GtkWidget *hbbox; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *hsbox; - GtkWidget *statusbar; - - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 450, -1); - gtk_container_set_border_width(GTK_CONTAINER(window), 0); - gtk_window_set_title(GTK_WINDOW(window), _("Edit LDAP Server")); - 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_ldap_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_ldap_key_pressed), - cancelled); - - vbox = gtk_vbox_new( FALSE, 6 ); - gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH); - gtk_widget_show( vbox ); - gtk_container_add( GTK_CONTAINER( window ), vbox ); - - // Notebook - 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 ), 6 ); - - // Status line - hsbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH); - statusbar = gtk_statusbar_new(); - gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH); - - // Button panel - 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_ldap_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_cancel), cancelled); - gtk_signal_connect(GTK_OBJECT(notebook), "switch_page", - GTK_SIGNAL_FUNC(edit_ldap_switch_page), NULL ); - - gtk_widget_show_all(vbox); - - ldapedit.window = window; - ldapedit.notebook = notebook; - ldapedit.ok_btn = ok_btn; - ldapedit.cancel_btn = cancel_btn; - ldapedit.statusbar = statusbar; - ldapedit.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit LDAP Server Dialog" ); -} - -void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) { - GtkWidget *vbox; - GtkWidget *table; - GtkWidget *label; - GtkWidget *entry_name; - GtkWidget *entry_server; - GtkWidget *hbox_spin; - GtkObject *spinbtn_port_adj; - GtkWidget *spinbtn_port; - GtkWidget *entry_baseDN; - GtkWidget *check_btn; - GtkWidget *lookdn_btn; - gint top; - - vbox = gtk_vbox_new( FALSE, 8 ); - gtk_widget_show( vbox ); - gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox ); - gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); - - label = gtk_label_new( pageLbl ); - gtk_widget_show( label ); - gtk_notebook_set_tab_label( - GTK_NOTEBOOK( ldapedit.notebook ), - gtk_notebook_get_nth_page( GTK_NOTEBOOK( ldapedit.notebook ), pageNum ), label ); - - table = gtk_table_new( LDAPEDIT_TABLE_ROWS, LDAPEDIT_TABLE_COLS, 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), 8); - gtk_table_set_col_spacings(GTK_TABLE(table), 8); - - // First row - top = 0; - label = gtk_label_new(_("Name")); - 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_name = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - // Next row - ++top; - label = gtk_label_new(_("Hostname")); - 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_server = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry_server, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - // Next row - ++top; - label = gtk_label_new(_("Port")); - 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); - - hbox_spin = gtk_hbox_new (FALSE, 8); - spinbtn_port_adj = gtk_adjustment_new (389, 1, 65535, 100, 1000, 1000); - spinbtn_port = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_port_adj), 1, 0); - gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_port, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_port, 64, -1); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_port), TRUE); - gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - check_btn = gtk_button_new_with_label( _(" Check Server ")); - gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); - - // Next row - ++top; - label = gtk_label_new(_("Search Base")); - 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_baseDN = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry_baseDN, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - lookdn_btn = gtk_button_new_with_label( _(" ... ")); - gtk_table_attach(GTK_TABLE(table), lookdn_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); - - gtk_signal_connect(GTK_OBJECT(check_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_server_check), NULL); - gtk_signal_connect(GTK_OBJECT(lookdn_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_basedn_select), NULL); - - gtk_widget_show_all(vbox); - - ldapedit.entry_name = entry_name; - ldapedit.entry_server = entry_server; - ldapedit.spinbtn_port = spinbtn_port; - ldapedit.entry_baseDN = entry_baseDN; -} - -void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl ) { - GtkWidget *vbox; - GtkWidget *table; - GtkWidget *label; - GtkWidget *entry_bindDN; - GtkWidget *entry_bindPW; - GtkWidget *entry_criteria; - GtkWidget *hbox_spin; - GtkObject *spinbtn_timeout_adj; - GtkWidget *spinbtn_timeout; - GtkObject *spinbtn_maxentry_adj; - GtkWidget *spinbtn_maxentry; - GtkWidget *reset_btn; - gint top; - - vbox = gtk_vbox_new( FALSE, 8 ); - gtk_widget_show( vbox ); - gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox ); - gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); - - label = gtk_label_new( pageLbl ); - gtk_widget_show( label ); - gtk_notebook_set_tab_label( - GTK_NOTEBOOK( ldapedit.notebook ), - gtk_notebook_get_nth_page( GTK_NOTEBOOK( ldapedit.notebook ), pageNum ), label ); - - table = gtk_table_new( LDAPEDIT_TABLE_ROWS, LDAPEDIT_TABLE_COLS, 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), 8); - gtk_table_set_col_spacings(GTK_TABLE(table), 8); - - // First row - top = 0; - label = gtk_label_new(_("Search Criteria")); - 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_criteria = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry_criteria, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - reset_btn = gtk_button_new_with_label( _(" Reset ")); - gtk_table_attach(GTK_TABLE(table), reset_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); - - // Next row - ++top; - label = gtk_label_new(_("Bind DN")); - 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_bindDN = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry_bindDN, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - // Next row - ++top; - label = gtk_label_new(_("Bind Password")); - 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_bindPW = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), entry_bindPW, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - // Next row - ++top; - label = gtk_label_new(_("Timeout (secs)")); - 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); - - hbox_spin = gtk_hbox_new (FALSE, 8); - spinbtn_timeout_adj = gtk_adjustment_new (0, 0, 300, 1, 10, 10); - spinbtn_timeout = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_timeout_adj), 1, 0); - gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_timeout, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_timeout, 64, -1); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_timeout), TRUE); - gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - // Next row - ++top; - label = gtk_label_new(_("Maximum Entries")); - 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); - - hbox_spin = gtk_hbox_new (FALSE, 8); - spinbtn_maxentry_adj = gtk_adjustment_new (0, 0, 500, 1, 10, 10); - spinbtn_maxentry = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_maxentry_adj), 1, 0); - gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_maxentry, FALSE, FALSE, 0); - gtk_widget_set_usize (spinbtn_maxentry, 64, -1); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_maxentry), TRUE); - gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - gtk_signal_connect(GTK_OBJECT(reset_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_search_reset), NULL); - - gtk_widget_show_all(vbox); - - ldapedit.entry_criteria = entry_criteria; - ldapedit.entry_bindDN = entry_bindDN; - ldapedit.entry_bindPW = entry_bindPW; - ldapedit.spinbtn_timeout = spinbtn_timeout; - ldapedit.spinbtn_maxentry = spinbtn_maxentry; -} - -static void addressbook_edit_ldap_create( gboolean *cancelled ) { - gint page = 0; - addressbook_edit_ldap_dialog_create( cancelled ); - addressbook_edit_ldap_page_basic( page++, _( "Basic" ) ); - addressbook_edit_ldap_page_extended( page++, _( "Extended" ) ); - gtk_widget_show_all( ldapedit.window ); -} - -void edit_ldap_set_optmenu( GtkOptionMenu *optmenu, const gint value ) { - GList *cur; - GtkWidget *menu; - GtkWidget *menuitem; - gint menuVal; - gint n = 0; - - g_return_if_fail(menu != 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); - menuVal = GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(menuitem))); - if( menuVal == value ) { - gtk_option_menu_set_history(optmenu, n); - return; - } - n++; - } - gtk_option_menu_set_history(optmenu, 0); -} - -gint edit_ldap_get_optmenu( GtkOptionMenu *optmenu ) { - GtkWidget *menu; - GtkWidget *menuitem; - g_return_if_fail(menu != NULL); - menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu)); - menuitem = gtk_menu_get_active(GTK_MENU(menu)); - return GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(menuitem))); -} - -AddressLDAP *addressbook_edit_ldap( AddressLDAP *ldapi ) { - static gboolean cancelled; - gchar *sName, *sHost, *sBase, *sBind, *sPass, *sCrit; - gint iPort, iMaxE, iTime, iMail, iName; - SyldapServer *server; - gboolean fin; - - if (!ldapedit.window) - addressbook_edit_ldap_create(&cancelled); - gtk_notebook_set_page( GTK_NOTEBOOK(ldapedit.notebook), 0 ); - gtk_widget_grab_focus(ldapedit.ok_btn); - gtk_widget_grab_focus(ldapedit.entry_name); - gtk_widget_show(ldapedit.window); - manage_window_set_transient(GTK_WINDOW(ldapedit.window)); - - edit_ldap_status_show( "" ); - if( ldapi ) { - server = ldapi->ldapServer; - if (server->name) - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name), server->name); - if (server->hostName) - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_server), server->hostName); - gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), server->port ); - gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), server->timeOut ); - if (server->baseDN) - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), server->baseDN); - if (server->searchCriteria) - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), server->searchCriteria); - if (server->bindDN) - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), server->bindDN); - if (server->bindPass) - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), server->bindPass); - gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), server->maxEntries ); - gtk_window_set_title( GTK_WINDOW(ldapedit.window), _("Edit LDAP Server")); - } - else { - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name), ADDRESSBOOK_GUESS_LDAP_NAME ); - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_server), ADDRESSBOOK_GUESS_LDAP_SERVER ); - gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), SYLDAP_DFL_PORT ); - gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), SYLDAP_DFL_TIMEOUT ); - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), ""); - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), SYLDAP_DFL_CRITERIA ); - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), ""); - gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), ""); - gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), SYLDAP_MAX_ENTRIES ); - gtk_window_set_title( GTK_WINDOW(ldapedit.window), _("Add New LDAP Server")); - } - - gtk_main(); - gtk_widget_hide(ldapedit.window); - if (cancelled == TRUE) return NULL; - - fin = FALSE; - sName = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_name), 0, -1 ); - sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 ); - iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) ); - iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) ); - sBase = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_baseDN), 0, -1 ); - sCrit = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_criteria), 0, -1 ); - sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 ); - sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 ); - iMaxE = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ) ); - - if( *sName == '\0' ) fin = TRUE; - if( *sHost == '\0' ) fin = TRUE; - if( *sBase == '\0' ) fin = TRUE; - - if( ! fin ) { - if( ! ldapi ) { - ldapi = g_new0(AddressLDAP, 1); - ADDRESS_OBJECT_TYPE(ldapi) = ADDR_LDAP; - server = syldap_create(); - ldapi->ldapServer = server; - } - g_free( ldapi->name ); - ldapi->name = g_strdup( sName ); - syldap_set_name( server, sName ); - syldap_set_host( server, sHost ); - syldap_set_port( server, iPort ); - syldap_set_base_dn( server, sBase ); - syldap_set_bind_dn( server, sBind ); - syldap_set_bind_password( server, sPass ); - syldap_set_search_criteria( server, sCrit ); - syldap_set_max_entries( server, iMaxE ); - syldap_set_timeout( server, iTime ); - } - g_free( sName ); - g_free( sHost ); - g_free( sBase ); - g_free( sBind ); - g_free( sPass ); - g_free( sCrit ); - - return ldapi; -} - -#endif /* USE_LDAP */ - -/* -* End of Source. -*/ - diff --git a/src/editldap.h b/src/editldap.h deleted file mode 100644 index 68fafb5ca..000000000 --- a/src/editldap.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Edit VCard address book data. - */ - -#ifndef __EDITLDAP_H__ -#define __EDITLDAP_H__ - -#ifdef USE_LDAP - -// Function prototypes -AddressLDAP *addressbook_edit_ldap( AddressLDAP *ldapi ); - -#endif /* USE_LDAP */ - -#endif /* __EDITLDAP_H__ */ - -/* -* End of Source. -*/ - diff --git a/src/editldap_basedn.c b/src/editldap_basedn.c deleted file mode 100644 index aabb27fcd..000000000 --- a/src/editldap_basedn.c +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * LDAP Base DN selection dialog. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#ifdef USE_LDAP - -#include "defs.h" - -#include <glib.h> -#include <gdk/gdkkeysyms.h> -#include <gtk/gtkwindow.h> -#include <gtk/gtksignal.h> -#include <gtk/gtkhbox.h> -#include <gtk/gtklabel.h> -#include <gtk/gtkentry.h> -#include <gtk/gtkhbbox.h> -#include <gtk/gtkbutton.h> - -#include "intl.h" -#include "prefs_common.h" -#include "syldap.h" - -static struct _LDAPEdit_basedn { - GtkWidget *window; - GtkWidget *host_label; - GtkWidget *port_label; - GtkWidget *basedn_entry; - GtkWidget *basedn_list; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *statusbar; - gint status_cid; -} ldapedit_basedn; - -static gboolean ldapedit_basedn_cancelled; -static gboolean ldapedit_basedn_bad_server; - -/* -* Edit functions. -*/ -void edit_ldap_bdn_status_show( gchar *msg ) { - if( ldapedit_basedn.statusbar != NULL ) { - gtk_statusbar_pop( GTK_STATUSBAR(ldapedit_basedn.statusbar), ldapedit_basedn.status_cid ); - if( msg ) { - gtk_statusbar_push( GTK_STATUSBAR(ldapedit_basedn.statusbar), ldapedit_basedn.status_cid, msg ); - } - } -} - -static gint edit_ldap_bdn_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) { - ldapedit_basedn_cancelled = TRUE; - gtk_main_quit(); - return TRUE; -} - -static void edit_ldap_bdn_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { - if (event && event->keyval == GDK_Escape) { - ldapedit_basedn_cancelled = TRUE; - gtk_main_quit(); - } -} - -static void edit_ldap_bdn_ok( GtkWidget *widget, gboolean *cancelled ) { - ldapedit_basedn_cancelled = FALSE; - gtk_main_quit(); -} - -static void edit_ldap_bdn_cancel( GtkWidget *widget, gboolean *cancelled ) { - ldapedit_basedn_cancelled = TRUE; - gtk_main_quit(); -} - -static void edit_ldap_bdn_list_select( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) { - gchar **text; - if( gtk_clist_get_text( clist, row, 0, text ) ) { - if( *text ) { - gtk_entry_set_text(GTK_ENTRY(ldapedit_basedn.basedn_entry), *text ); - } - } -} - -static void edit_ldap_bdn_list_button( GtkCList *clist, GdkEventButton *event, gpointer data ) { - if( ! event ) return; - if( event->button == 1 ) { - if( event->type == GDK_2BUTTON_PRESS ) { - ldapedit_basedn_cancelled = FALSE; - gtk_main_quit(); - } - } -} - -static void edit_ldap_bdn_create() { - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *table; - GtkWidget *label; - GtkWidget *host_label; - GtkWidget *port_label; - GtkWidget *basedn_label; - GtkWidget *basedn_list; - GtkWidget *vlbox; - GtkWidget *lwindow; - GtkWidget *basedn_entry; - GtkWidget *hlbox; - GtkWidget *hbbox; - GtkWidget *hsep; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *check_btn; - GtkWidget *file_btn; - GtkWidget *hsbox; - GtkWidget *statusbar; - gint top; - - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 300, 270); - gtk_container_set_border_width(GTK_CONTAINER(window), 0); - gtk_window_set_title(GTK_WINDOW(window), _("Edit LDAP - Select Search Base")); - 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_ldap_bdn_delete_event), NULL ); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_ldap_bdn_key_pressed), NULL ); - - vbox = gtk_vbox_new(FALSE, 8); - gtk_container_add(GTK_CONTAINER(window), vbox); - gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 ); - - table = gtk_table_new(3, 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), 8); - gtk_table_set_col_spacings(GTK_TABLE(table), 8); - - // First row - top = 0; - label = gtk_label_new(_("Hostname")); - 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); - - host_label = gtk_label_new(""); - gtk_table_attach(GTK_TABLE(table), host_label, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0); - gtk_misc_set_alignment(GTK_MISC(host_label), 0, 0.5); - - // Second row - top = 1; - label = gtk_label_new(_("Port")); - 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); - - port_label = gtk_label_new(""); - gtk_table_attach(GTK_TABLE(table), port_label, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0); - gtk_misc_set_alignment(GTK_MISC(port_label), 0, 0.5); - - // Third row - top = 2; - label = gtk_label_new(_("Search Base")); - 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); - - basedn_entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), basedn_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - // Basedn list - vlbox = gtk_vbox_new(FALSE, 8); - gtk_box_pack_start(GTK_BOX(vbox), vlbox, TRUE, TRUE, 0); - gtk_container_set_border_width( GTK_CONTAINER(vlbox), 8 ); - - lwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(lwindow), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_ALWAYS); - gtk_box_pack_start(GTK_BOX(vlbox), lwindow, TRUE, TRUE, 0); - - basedn_list = gtk_clist_new(1); - gtk_container_add(GTK_CONTAINER(lwindow), basedn_list); - gtk_clist_column_titles_show( GTK_CLIST(basedn_list) ); - gtk_clist_set_column_title( GTK_CLIST(basedn_list), 0, _( "Available Search Base(s)" ) ); - gtk_clist_set_selection_mode(GTK_CLIST(basedn_list), GTK_SELECTION_BROWSE); - - // Status line - hsbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH); - statusbar = gtk_statusbar_new(); - gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH); - - // Button panel - 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_container_set_border_width( GTK_CONTAINER(hbbox), 0 ); - gtk_widget_grab_default(ok_btn); - - hsep = gtk_hseparator_new(); - gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0); - - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_bdn_ok), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_ldap_bdn_cancel), NULL); - gtk_signal_connect(GTK_OBJECT(basedn_list), "select_row", - GTK_SIGNAL_FUNC(edit_ldap_bdn_list_select), NULL); - gtk_signal_connect(GTK_OBJECT(basedn_list), "button_press_event", - GTK_SIGNAL_FUNC(edit_ldap_bdn_list_button), NULL); - - gtk_widget_show_all(vbox); - - ldapedit_basedn.window = window; - ldapedit_basedn.host_label = host_label; - ldapedit_basedn.port_label = port_label; - ldapedit_basedn.basedn_entry = basedn_entry; - ldapedit_basedn.basedn_list = basedn_list; - ldapedit_basedn.ok_btn = ok_btn; - ldapedit_basedn.cancel_btn = cancel_btn; - ldapedit_basedn.statusbar = statusbar; - ldapedit_basedn.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit LDAP Select Base DN" ); -} - -void edit_ldap_bdn_load_data( const gchar *hostName, const gint iPort, const gint tov, const gchar* bindDN, - const gchar *bindPW ) { - gchar *sHost; - gchar *sMsg = NULL; - gchar sPort[20]; - gboolean flgConn; - gboolean flgDN; - - edit_ldap_status_show( "" ); - gtk_clist_clear(GTK_CLIST(ldapedit_basedn.basedn_list)); - ldapedit_basedn_bad_server = TRUE; - flgConn = flgDN = FALSE; - sHost = g_strdup( hostName ); - sprintf( sPort, "%d", iPort ); - gtk_label_set_text(GTK_LABEL(ldapedit_basedn.host_label), hostName); - gtk_label_set_text(GTK_LABEL(ldapedit_basedn.port_label), sPort); - if( *sHost != '\0' ) { - // Test connection to server - if( syldap_test_connect_s( sHost, iPort ) ) { - // Attempt to read base DN - GList *baseDN = syldap_read_basedn_s( sHost, iPort, bindDN, bindPW, tov ); - if( baseDN ) { - GList *node = baseDN; - gchar *sBase[2]; - sBase[1] = NULL; - while( node ) { - sBase[0] = g_strdup( node->data ); - gtk_clist_append(GTK_CLIST(ldapedit_basedn.basedn_list), sBase); - node = g_list_next( node ); - flgDN = TRUE; - } - mgu_free_dlist( baseDN ); - baseDN = node = NULL; - sBase[0] = NULL; - } - ldapedit_basedn_bad_server = FALSE; - flgConn = TRUE; - } - } - g_free( sHost ); - - // Display appropriate message - if( flgConn ) { - if( ! flgDN ) { - sMsg = _( "Could not read Search Base(s) from server - please set manually" ); - } - } - else { - sMsg = _( "Could not connect to server" ); - } - edit_ldap_bdn_status_show( sMsg ); -} - -gchar *edit_ldap_basedn_selection( const gchar *hostName, const gint port, gchar *baseDN, const gint tov, - const gchar* bindDN, const gchar *bindPW ) { - gchar *retVal = NULL; - - ldapedit_basedn_cancelled = FALSE; - if( ! ldapedit_basedn.window ) edit_ldap_bdn_create(); - gtk_widget_grab_focus(ldapedit_basedn.ok_btn); - gtk_widget_show(ldapedit_basedn.window); - manage_window_set_transient(GTK_WINDOW(ldapedit_basedn.window)); - - edit_ldap_bdn_status_show( "" ); - edit_ldap_bdn_load_data( hostName, port, tov, bindDN, bindPW ); - gtk_widget_show(ldapedit_basedn.window); - -// sprintf( sPort, "%d", port ); -// gtk_label_set_text(GTK_LABEL(ldapedit_basedn.host_label), hostName); -// gtk_label_set_text(GTK_LABEL(ldapedit_basedn.port_label), sPort); - gtk_entry_set_text(GTK_ENTRY(ldapedit_basedn.basedn_entry), baseDN); - - gtk_main(); - gtk_widget_hide(ldapedit_basedn.window); - if( ldapedit_basedn_cancelled ) return NULL; -// if( cancelled == TRUE ) return NULL; - if( ldapedit_basedn_bad_server ) return NULL; - - retVal = g_strdup( gtk_editable_get_chars( GTK_EDITABLE(ldapedit_basedn.basedn_entry), 0, -1 ) ); - g_strchomp( retVal ); g_strchug( retVal ); - if( *retVal == '\0' ) { - g_free( retVal ); - retVal = NULL; - } - return retVal; -} - -#endif /* USE_LDAP */ - -/* -* End of Source. -*/ - diff --git a/src/editldap_basedn.h b/src/editldap_basedn.h deleted file mode 100644 index d53620fbd..000000000 --- a/src/editldap_basedn.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Edit VCard address book data. - */ - -#ifndef __EDITLDAP_BASEDN_H__ -#define __EDITLDAP_BASEDN_H__ - -#ifdef USE_LDAP - -// Function prototypes -gchar *edit_ldap_basedn_selection( const gchar *hostName, const gint port, gchar *baseDN, const gint tov, - const gchar* bindDN, const gchar *bindPW ); - -#endif /* USE_LDAP */ - -#endif /* __EDITLDAP_BASEDN_H__ */ - -/* -* End of Source. -*/ - diff --git a/src/editvcard.c b/src/editvcard.c deleted file mode 100644 index 4420b8435..000000000 --- a/src/editvcard.c +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Edit VCard address book data. - */ - -#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/gtklabel.h> -#include <gtk/gtkentry.h> -#include <gtk/gtktable.h> -#include <gtk/gtkbutton.h> - -#include "intl.h" -#include "addressbook.h" -#include "prefs_common.h" -#include "addressitem.h" -#include "vcard.h" - -#define ADDRESSBOOK_GUESS_VCARD "MyGnomeCard" - -static struct _VCardEdit { - GtkWidget *window; - GtkWidget *name_entry; - GtkWidget *file_entry; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *statusbar; - gint status_cid; -} vcardedit; - -static struct _AddressFileSelection vcard_file_selector; - -/* -* Edit functions. -*/ -void edit_vcard_status_show( gchar *msg ) { - if( vcardedit.statusbar != NULL ) { - gtk_statusbar_pop( GTK_STATUSBAR(vcardedit.statusbar), vcardedit.status_cid ); - if( msg ) { - gtk_statusbar_push( GTK_STATUSBAR(vcardedit.statusbar), vcardedit.status_cid, msg ); - } - } -} - -static void edit_vcard_ok( GtkWidget *widget, gboolean *cancelled ) { - *cancelled = FALSE; - gtk_main_quit(); -} - -static void edit_vcard_cancel( GtkWidget *widget, gboolean *cancelled ) { - *cancelled = TRUE; - gtk_main_quit(); -} - -static void edit_vcard_file_check( void ) { - gint t; - gchar *sFile; - gchar *sMsg; - - sFile = gtk_editable_get_chars( GTK_EDITABLE(vcardedit.file_entry), 0, -1 ); - t = vcard_test_read_file( sFile ); - g_free( sFile ); - if( t == MGU_SUCCESS ) { - sMsg = ""; - } - else if( t == MGU_BAD_FORMAT ) { - sMsg = _("File does not appear to be VCard format."); - } - else { - sMsg = _("Could not read file."); - } - edit_vcard_status_show( sMsg ); -} - -static void edit_vcard_file_ok( GtkWidget *widget, gpointer data ) { - gchar *sFile; - AddressFileSelection *afs; - GtkWidget *fileSel; - - afs = ( AddressFileSelection * ) data; - fileSel = afs->fileSelector; - sFile = gtk_file_selection_get_filename( GTK_FILE_SELECTION(fileSel) ); - - afs->cancelled = FALSE; - gtk_entry_set_text( GTK_ENTRY(vcardedit.file_entry), sFile ); - gtk_widget_hide( afs->fileSelector ); - gtk_grab_remove( afs->fileSelector ); - edit_vcard_file_check(); - gtk_widget_grab_focus( vcardedit.file_entry ); -} - -static void edit_vcard_file_cancel( GtkWidget *widget, gpointer data ) { - AddressFileSelection *afs = ( AddressFileSelection * ) data; - afs->cancelled = TRUE; - gtk_widget_hide( afs->fileSelector ); - gtk_grab_remove( afs->fileSelector ); - gtk_widget_grab_focus( vcardedit.file_entry ); -} - -static void edit_vcard_file_select_create( AddressFileSelection *afs ) { - GtkWidget *fileSelector; - - fileSelector = gtk_file_selection_new( _("Select VCard File") ); - gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button), - "clicked", GTK_SIGNAL_FUNC (edit_vcard_file_ok), ( gpointer ) afs ); - gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button), - "clicked", GTK_SIGNAL_FUNC (edit_vcard_file_cancel), ( gpointer ) afs ); - afs->fileSelector = fileSelector; - afs->cancelled = TRUE; -} - -static void edit_vcard_file_select( void ) { - gchar *sFile; - - if (! vcard_file_selector.fileSelector ) - edit_vcard_file_select_create( & vcard_file_selector ); - - sFile = gtk_editable_get_chars( GTK_EDITABLE(vcardedit.file_entry), 0, -1 ); - gtk_file_selection_set_filename( GTK_FILE_SELECTION( vcard_file_selector.fileSelector ), sFile ); - g_free( sFile ); - gtk_widget_show( vcard_file_selector.fileSelector ); - gtk_grab_add( vcard_file_selector.fileSelector ); -} - -static gint edit_vcard_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) { - *cancelled = TRUE; - gtk_main_quit(); - return TRUE; -} - -static void edit_vcard_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) { - if (event && event->keyval == GDK_Escape) { - *cancelled = TRUE; - gtk_main_quit(); - } -} - -static void addressbook_edit_vcard_create( gboolean *cancelled ) { - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *table; - GtkWidget *label; - GtkWidget *name_entry; - GtkWidget *file_entry; - GtkWidget *hbbox; - GtkWidget *hsep; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *check_btn; - GtkWidget *file_btn; - GtkWidget *statusbar; - GtkWidget *hsbox; - gint top; - - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 450, -1); - gtk_container_set_border_width( GTK_CONTAINER(window), 0 ); - gtk_window_set_title(GTK_WINDOW(window), _("Edit VCard Entry")); - 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_vcard_delete_event), - cancelled); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(edit_vcard_key_pressed), - cancelled); - - vbox = gtk_vbox_new(FALSE, 8); - gtk_container_add(GTK_CONTAINER(window), vbox); - gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 ); - - 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), 8); - gtk_table_set_col_spacings(GTK_TABLE(table), 8 ); - - // First row - top = 0; - label = gtk_label_new(_("Name")); - 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); - - name_entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - check_btn = gtk_button_new_with_label( _(" Check File ")); - gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); - - // Second row - top = 1; - label = gtk_label_new(_("File")); - 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); - - file_entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - file_btn = gtk_button_new_with_label( _(" ... ")); - gtk_table_attach(GTK_TABLE(table), file_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); - - // Status line - hsbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH); - statusbar = gtk_statusbar_new(); - gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH); - - // Button panel - 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_container_set_border_width( GTK_CONTAINER(hbbox), 0 ); - gtk_widget_grab_default(ok_btn); - - hsep = gtk_hseparator_new(); - gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0); - - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(edit_vcard_ok), cancelled); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(edit_vcard_cancel), cancelled); - gtk_signal_connect(GTK_OBJECT(file_btn), "clicked", - GTK_SIGNAL_FUNC(edit_vcard_file_select), NULL); - gtk_signal_connect(GTK_OBJECT(check_btn), "clicked", - GTK_SIGNAL_FUNC(edit_vcard_file_check), NULL); - - gtk_widget_show_all(vbox); - - vcardedit.window = window; - vcardedit.name_entry = name_entry; - vcardedit.file_entry = file_entry; - vcardedit.ok_btn = ok_btn; - vcardedit.cancel_btn = cancel_btn; - vcardedit.statusbar = statusbar; - vcardedit.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit VCard Dialog" ); -} - -AddressVCard *addressbook_edit_vcard( AddressVCard *vcard ) { - static gboolean cancelled; - gchar *sName; - gchar *sFile; - VCardFile *vcf; - gboolean fin; - - if (!vcardedit.window) - addressbook_edit_vcard_create(&cancelled); - gtk_widget_grab_focus(vcardedit.ok_btn); - gtk_widget_grab_focus(vcardedit.name_entry); - gtk_widget_show(vcardedit.window); - manage_window_set_transient(GTK_WINDOW(vcardedit.window)); - - edit_vcard_status_show( "" ); - if( vcard ) { - vcf = vcard->cardFile; - if (vcf->name) - gtk_entry_set_text(GTK_ENTRY(vcardedit.name_entry), vcf->name); - if (vcf->path) - gtk_entry_set_text(GTK_ENTRY(vcardedit.file_entry), vcf->path); - gtk_window_set_title( GTK_WINDOW(vcardedit.window), _("Edit VCard Entry")); - } - else { - gtk_entry_set_text(GTK_ENTRY(vcardedit.name_entry), ADDRESSBOOK_GUESS_VCARD ); - gtk_entry_set_text(GTK_ENTRY(vcardedit.file_entry), vcard_find_gnomecard() ); - gtk_window_set_title( GTK_WINDOW(vcardedit.window), _("Add New VCard Entry")); - } - - gtk_main(); - gtk_widget_hide(vcardedit.window); - if (cancelled == TRUE) return NULL; - - fin = FALSE; - sName = gtk_editable_get_chars( GTK_EDITABLE(vcardedit.name_entry), 0, -1 ); - sFile = gtk_editable_get_chars( GTK_EDITABLE(vcardedit.file_entry), 0, -1 ); - if( *sName == '\0' ) fin = TRUE; - if( *sFile == '\0' ) fin = TRUE; - - if( ! fin ) { - if( ! vcard ) { - vcard = g_new0(AddressVCard, 1); - ADDRESS_OBJECT_TYPE(vcard) = ADDR_VCARD; - vcf = vcard_create(); - vcard->cardFile = vcf; - } - g_free( vcard->name ); - vcard->name = g_strdup( sName ); - vcard_set_name( vcf, sName ); - vcard_set_file( vcf, sFile ); - } - g_free( sName ); - g_free( sFile ); - - return vcard; -} - -/* -* End of Source. -*/ - diff --git a/src/editvcard.h b/src/editvcard.h deleted file mode 100644 index 26b9471c4..000000000 --- a/src/editvcard.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Edit VCard address book data. - */ - -#ifndef __EDITVCARD_H__ -#define __EDITVCARD_H__ - -// Function prototypes -AddressVCard *addressbook_edit_vcard( AddressVCard *vcard ); - -#endif /* __EDITVCARD_H__ */ - -/* -* End of Source. -*/ - diff --git a/src/esmtp.c b/src/esmtp.c deleted file mode 100644 index 529bef2f1..000000000 --- a/src/esmtp.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * 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]; - -gint esmtp_auth_cram_md5(SockInfo *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(SockInfo *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(SockInfo *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(SockInfo *sock) -{ - while (sock_gets(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[2] == '4' || - esmtp_response[2] == '3' || - esmtp_response[2] == '1')) - return SM_ERROR; - } - - return SM_UNRECOVERABLE; -} diff --git a/src/esmtp.h b/src/esmtp.h deleted file mode 100644 index 95bf8b810..000000000 --- a/src/esmtp.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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> -#include "socket.h" - -typedef enum -{ - SMTPAUTH_LOGIN = 1, - SMTPAUTH_CRAM_MD5 = 2, - SMTPAUTH_DIGEST_MD5 = 3 -} SMTPAuthType; - -gint esmtp_auth_login(SockInfo *sock); -gint esmtp_auth_cram_md5(SockInfo *sock); -gint esmtp_auth(SockInfo *sock, SMTPAuthType authtype, - const gchar *userid, const gchar *passwd, - gboolean use_smtp_auth); -gint esmtp_ok(SockInfo *sock); - -#endif /* __ESMTP_H__ */ diff --git a/src/export.c b/src/export.c deleted file mode 100644 index 77b615567..000000000 --- a/src/export.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * 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/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 "filesel.h" -#include "foldersel.h" -#include "gtkutils.h" -#include "manage_window.h" -#include "folder.h" -#include "utils.h" - -static GtkWidget *window; -static GtkWidget *src_entry; -static GtkWidget *file_entry; -static GtkWidget *src_button; -static GtkWidget *file_button; -static GtkWidget *ok_button; -static GtkWidget *cancel_button; -static gboolean export_ack; - -static void export_create(void); -static void export_ok_cb(GtkWidget *widget, gpointer data); -static void export_cancel_cb(GtkWidget *widget, gpointer data); -static void export_srcsel_cb(GtkWidget *widget, gpointer data); -static void export_filesel_cb(GtkWidget *widget, gpointer data); -static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); - -gint export_mbox(FolderItem *default_src) -{ - gint ok = 0; - - if (!window) - export_create(); - else - gtk_widget_show(window); - - change_dir(startup_dir); - - if (default_src && default_src->path) - gtk_entry_set_text(GTK_ENTRY(src_entry), default_src->path); - else - gtk_entry_set_text(GTK_ENTRY(src_entry), ""); - gtk_entry_set_text(GTK_ENTRY(file_entry), ""); - gtk_widget_grab_focus(file_entry); - - manage_window_set_transient(GTK_WINDOW(window)); - - gtk_main(); - - if (export_ack) { - gchar *srcdir, *mbox; - FolderItem *src; - - srcdir = gtk_entry_get_text(GTK_ENTRY(src_entry)); - mbox = gtk_entry_get_text(GTK_ENTRY(file_entry)); - - if (mbox && *mbox) { - src = folder_find_item_from_path(srcdir); - if (!src) - g_warning("Can't find the folder.\n"); - else - ok = export_to_mbox(src, mbox); - } - } - - gtk_widget_hide(window); - - return ok; -} - -static void export_create(void) -{ - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *desc_label; - GtkWidget *table; - GtkWidget *file_label; - GtkWidget *src_label; - GtkWidget *confirm_area; - - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_window_set_title(GTK_WINDOW(window), _("Export")); - gtk_container_set_border_width(GTK_CONTAINER(window), 5); - 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); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(delete_event), 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); - - hbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); - - desc_label = gtk_label_new - (_("Specify target folder and mbox file.")); - gtk_box_pack_start(GTK_BOX(hbox), desc_label, FALSE, FALSE, 0); - - 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), 8); - gtk_table_set_col_spacings(GTK_TABLE(table), 8); - gtk_widget_set_usize(table, 420, -1); - - src_label = gtk_label_new(_("Source dir:")); - gtk_table_attach(GTK_TABLE(table), src_label, 0, 1, 0, 1, - GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0); - gtk_misc_set_alignment(GTK_MISC(src_label), 1, 0.5); - - file_label = gtk_label_new(_("Exporting file:")); - gtk_table_attach(GTK_TABLE(table), file_label, 0, 1, 1, 2, - GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0); - gtk_misc_set_alignment(GTK_MISC(file_label), 1, 0.5); - - src_entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), src_entry, 1, 2, 0, 1, - GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - file_entry = gtk_entry_new(); - gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, 1, 2, - GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - src_button = gtk_button_new_with_label(_(" Select... ")); - gtk_table_attach(GTK_TABLE(table), src_button, 2, 3, 0, 1, - 0, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(src_button), "clicked", - GTK_SIGNAL_FUNC(export_srcsel_cb), NULL); - - file_button = gtk_button_new_with_label(_(" Select... ")); - gtk_table_attach(GTK_TABLE(table), file_button, 2, 3, 1, 2, - 0, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(file_button), "clicked", - GTK_SIGNAL_FUNC(export_filesel_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(export_ok_cb), NULL); - gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(export_cancel_cb), NULL); - - gtk_widget_show_all(window); -} - -static void export_ok_cb(GtkWidget *widget, gpointer data) -{ - export_ack = TRUE; - if (gtk_main_level() > 1) - gtk_main_quit(); -} - -static void export_cancel_cb(GtkWidget *widget, gpointer data) -{ - export_ack = FALSE; - if (gtk_main_level() > 1) - gtk_main_quit(); -} - -static void export_filesel_cb(GtkWidget *widget, gpointer data) -{ - gchar *filename; - - filename = filesel_select_file(_("Select exporting file"), NULL); - if (filename) - gtk_entry_set_text(GTK_ENTRY(file_entry), filename); -} - -static void export_srcsel_cb(GtkWidget *widget, gpointer data) -{ - FolderItem *src; - - src = foldersel_folder_sel(NULL, NULL); - if (src && src->path) - gtk_entry_set_text(GTK_ENTRY(src_entry), src->path); -} - -static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - export_cancel_cb(NULL, NULL); - return TRUE; -} - -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) -{ - if (event && event->keyval == GDK_Escape) - export_cancel_cb(NULL, NULL); -} diff --git a/src/export.h b/src/export.h deleted file mode 100644 index 34d73a065..000000000 --- a/src/export.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 __EXPORT_H__ -#define __EXPORT_H__ - -#include <glib.h> - -#include "folder.h" - -gint export_mbox(FolderItem *default_src); - -#endif /* __EXPORT_H__ */ diff --git a/src/filesel.c b/src/filesel.c deleted file mode 100644 index c7cf96a9d..000000000 --- a/src/filesel.c +++ /dev/null @@ -1,296 +0,0 @@ -/* - * 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 <glib.h> -#include <gdk/gdkkeysyms.h> -#include <gtk/gtkwidget.h> -#include <gtk/gtkfilesel.h> -#include <gtk/gtkmain.h> -#include <gtk/gtksignal.h> -#include <gtk/gtkeditable.h> -#include <gtk/gtkentry.h> - -#include "main.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, gboolean multiple_files); -static void filesel_ok_cb(GtkWidget *widget, gpointer data); -static void filesel_cancel_cb(GtkWidget *widget, gpointer data); -static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); - -static void filesel_file_list_select_row(GtkCList *clist, gint row, gint col, - GdkEventButton *event, gpointer userdata); - -static void filesel_dir_list_select_row(GtkCList *clist, gint row, gint col, - GdkEventButton *event, gpointer userdata); - -static GList *filesel_get_multiple_filenames(void); - -gchar *filesel_select_file(const gchar *title, const gchar *file) -{ - static gchar *filename = NULL; - static gchar *cwd = NULL; - - filesel_create(title, FALSE); - - manage_window_set_transient(GTK_WINDOW(filesel)); - - if (filename) { - g_free(filename); - filename = NULL; - } - - if (!cwd) - cwd = g_strconcat(startup_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; -} - -GList *filesel_select_multiple_files(const gchar *title, const gchar *file) -{ - /* ALF - sorry for the exuberant code duping... need to - * be cleaned up. */ - static gchar *filename = NULL; - static gchar *cwd = NULL; - GList *list = NULL; - - filesel_create(title, TRUE); - - manage_window_set_transient(GTK_WINDOW(filesel)); - - if (filename) { - g_free(filename); - filename = NULL; - } - - if (!cwd) - cwd = g_strconcat(startup_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) - list = filesel_get_multiple_filenames(); - - manage_window_focus_out(filesel, NULL, NULL); - gtk_widget_destroy(filesel); - GTK_EVENTS_FLUSH(); - - return list; -} - -static void filesel_create(const gchar *title, gboolean multiple_files) -{ - 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(delete_event), 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); - - if (multiple_files) { - gtk_clist_set_selection_mode - (GTK_CLIST(GTK_FILE_SELECTION(filesel)->file_list), - GTK_SELECTION_MULTIPLE); - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->file_list), - "select_row", - GTK_SIGNAL_FUNC(filesel_file_list_select_row), - NULL); - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->file_list), - "unselect_row", - GTK_SIGNAL_FUNC(filesel_file_list_select_row), - NULL); - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->dir_list), - "select_row", - GTK_SIGNAL_FUNC(filesel_dir_list_select_row), - NULL); - } - -} - -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 gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - filesel_cancel_cb(NULL, NULL); - return TRUE; -} - -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) -{ - if (event && event->keyval == GDK_Escape) - filesel_cancel_cb(NULL, NULL); -} - -/* handle both "select_row" and "unselect_row". note that we're using the - * entry box to put there the selected file names in. we're not using these - * entry box to get the selected file names. instead we use the clist selection. - * the entry box is used only to retrieve dir name. */ -static void filesel_file_list_select_row(GtkCList *clist, gint row, gint col, - GdkEventButton *event, gpointer userdata) -{ - /* simple implementation in which we clear the file entry and refill it */ - GList *list = clist->selection; - GtkEntry *entry = GTK_ENTRY(GTK_FILE_SELECTION(filesel)->selection_entry); - - gtk_editable_delete_text(GTK_EDITABLE(entry), 0, -1); - -#define INVALID_FILENAME_CHARS " " - for (; list; list = list->next) { - gint row = GPOINTER_TO_INT(list->data); - gchar *text = NULL, *tmp; - - if (!gtk_clist_get_text(clist, row, 0, &text)) - break; - - /* NOTE: quick glance in source code of GtkCList - * reveals we should not free the returned 'text' */ - - tmp = g_strconcat(text, " ", NULL); - text = tmp; - gtk_entry_append_text(entry, text); - g_free(text); - } -#undef INVALID_FILENAME_CHARS -} - -static void filesel_dir_list_select_row(GtkCList *clist, gint row, gint col, - GdkEventButton *event, gpointer userdata) -{ - GtkEntry *entry = GTK_ENTRY(GTK_FILE_SELECTION(filesel)->selection_entry); - GtkCList *file_list = GTK_CLIST(GTK_FILE_SELECTION(filesel)->file_list); - - /* if dir list is selected we clean everything */ - gtk_editable_delete_text(GTK_EDITABLE(entry), 0, -1); - gtk_clist_unselect_all(file_list); -} - -static GList *filesel_get_multiple_filenames(void) -{ - /* as noted before we are not using the entry text when selecting - * multiple files. to much hassle to parse out invalid chars (chars - * that need to be escaped). instead we use the file_list. the - * entry is only useful for extracting the current directory. */ - GtkCList *file_list = GTK_CLIST(GTK_FILE_SELECTION(filesel)->file_list); - GtkEntry *file_entry = GTK_ENTRY(GTK_FILE_SELECTION(filesel)->selection_entry); - GList *list = NULL, *sel_list; - gchar *cwd, *tmp; - gboolean separator; - - g_return_val_if_fail(file_list->selection != NULL, NULL); - - tmp = gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel)); - tmp = g_strdup(tmp); - cwd = g_dirname(tmp); - g_free(tmp); - g_return_val_if_fail(cwd != NULL, NULL); - - /* only quick way to check the end of a multi byte string for our - * separator... */ - g_strreverse(cwd); - separator = 0 == g_strncasecmp(cwd, G_DIR_SEPARATOR_S, strlen(G_DIR_SEPARATOR_S)) - ? TRUE : FALSE; - g_strreverse(cwd); - - /* fetch the selected file names */ - for (sel_list = file_list->selection; sel_list; sel_list = sel_list->next) { - gint sel = GPOINTER_TO_INT(sel_list->data); - gchar *sel_text = NULL; - gchar *fname = NULL; - - gtk_clist_get_text(file_list, sel, 0, &sel_text); - if (!sel_text) continue; - sel_text = g_strdup(sel_text); - - if (separator) - fname = g_strconcat(cwd, sel_text, NULL); - else - fname = g_strconcat(cwd, G_DIR_SEPARATOR_S, sel_text, NULL); - - list = g_list_append(list, fname); - g_free(sel_text); - } - - return list; -} - diff --git a/src/filesel.h b/src/filesel.h deleted file mode 100644 index 4ffc27848..000000000 --- a/src/filesel.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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); - -GList *filesel_select_multiple_files(const gchar *title, const gchar *file); - -#endif /* __FILESEL_H__ */ diff --git a/src/filter.c b/src/filter.c deleted file mode 100644 index e2235c6eb..000000000 --- a/src/filter.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * 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_from_file(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 && - procheader_headername_equal(header->name, - filter->name1)) { - if (!filter->body1 || - StrFind1(header->body, filter->body1)) - match1 = TRUE; - } - if (!match2 && - procheader_headername_equal(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 (procheader_headername_equal(header->name, - filter->name1)) - if (!filter->body1 || - StrFind1(header->body, filter->body1)) - return TRUE; - if (filter->name2 && - procheader_headername_equal(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 deleted file mode 100644 index 0d4420dc7..000000000 --- a/src/filter.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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/filtering.c b/src/filtering.c deleted file mode 100644 index 7b3e39ab6..000000000 --- a/src/filtering.c +++ /dev/null @@ -1,1255 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2001 Hiroyuki Yamamoto & The Sylpheed Claws Team - * - * 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. - */ - -/* - * initital Hoa initial - * 07/16/01 Alfons fix bugs - * 07/18/01 Alfons rewrite things - */ - -/* 07/18/01 (alfons) - * - * filter_message() is no longer the entry point for filtering. it's - * replaced with filter_incoming_message() which does not trust - * on MsgInfo's from a folder. instead it directly works with - * the temporary file. - * updating the mark file is a lot easier now, because we can do that - * right after a call to folder_item_add_msg(). - */ - -#include "defs.h" -#include <ctype.h> -#include <string.h> -#include <stdlib.h> -#include <errno.h> -#include <gtk/gtk.h> -#include <stdio.h> -#include "intl.h" -#include "utils.h" -#include "procheader.h" -#include "matcher.h" -#include "filtering.h" -#include "prefs.h" -#include "compose.h" - -#define PREFSBUFSIZE 1024 - -GSList * prefs_filtering = NULL; - -FilteringAction * filteringaction_new(int type, int account_id, - gchar * destination, - gint labelcolor) -{ - FilteringAction * action; - - action = g_new0(FilteringAction, 1); - - action->type = type; - action->account_id = account_id; - if (destination) - action->destination = g_strdup(destination); - action->labelcolor = labelcolor; - return action; -} - -void filteringaction_free(FilteringAction * action) -{ - if (action->destination) - g_free(action->destination); - g_free(action); -} - -FilteringAction * filteringaction_parse(gchar ** str) -{ - FilteringAction * action; - gchar * tmp; - gchar * destination = NULL; - gint account_id = 0; - gint key; - gint labelcolor = 0; - - tmp = * str; - - key = matcher_parse_keyword(&tmp); - - switch (key) { - case MATCHING_ACTION_MOVE: - case MATCHING_ACTION_COPY: - case MATCHING_EXECUTE: - destination = matcher_parse_str(&tmp); - if (tmp == NULL) { - * str = NULL; - return NULL; - } - break; - case MATCHING_ACTION_DELETE: - break; - case MATCHING_ACTION_MARK: - break; - case MATCHING_ACTION_MARK_AS_READ: - break; - case MATCHING_ACTION_UNMARK: - break; - case MATCHING_ACTION_MARK_AS_UNREAD: - break; - case MATCHING_ACTION_FORWARD: - case MATCHING_ACTION_FORWARD_AS_ATTACHMENT: - account_id = matcher_parse_number(&tmp); - if (tmp == NULL) { - * str = NULL; - return NULL; - } - - destination = matcher_parse_str(&tmp); - if (tmp == NULL) { - * str = NULL; - return NULL; - } - - break; - case MATCHING_ACTION_COLOR: - labelcolor = matcher_parse_number(&tmp); - if (tmp == NULL) { - *str = NULL; - return NULL; - } - - break; - default: - * str = NULL; - return NULL; - } - - * str = tmp; - - action = filteringaction_new(key, account_id, destination, labelcolor); - - return action; -} - -FilteringProp * filteringprop_parse(gchar ** str) -{ - gchar * tmp; - gint key; - FilteringProp * filtering; - MatcherList * matchers; - FilteringAction * action; - - tmp = * str; - - matchers = matcherlist_parse(&tmp); - if (tmp == NULL) { - * str = NULL; - return NULL; - } - - if (tmp == NULL) { - matcherlist_free(matchers); - * str = NULL; - return NULL; - } - - action = filteringaction_parse(&tmp); - if (tmp == NULL) { - matcherlist_free(matchers); - * str = NULL; - return NULL; - } - - filtering = filteringprop_new(matchers, action); - - * str = tmp; - return filtering; -} - - -FilteringProp * filteringprop_new(MatcherList * matchers, - FilteringAction * action) -{ - FilteringProp * filtering; - - filtering = g_new0(FilteringProp, 1); - filtering->matchers = matchers; - filtering->action = action; - - return filtering; -} - -void filteringprop_free(FilteringProp * prop) -{ - matcherlist_free(prop->matchers); - filteringaction_free(prop->action); - g_free(prop); -} - -/* filteringaction_update_mark() - updates a mark for a message. note that - * the message should not have been moved or copied. remember that the - * procmsg_open_mark_file(PATH, TRUE) actually _appends_ a new record. - */ -static gboolean filteringaction_update_mark(MsgInfo * info) -{ - gchar * dest_path; - FILE * fp; - - if (info->folder->folder->type == F_MH) { - dest_path = folder_item_get_path(info->folder); - if (!is_dir_exist(dest_path)) - make_dir_hier(dest_path); - - if (dest_path == NULL) { - g_warning(_("Can't open mark file.\n")); - return FALSE; - } - - if ((fp = procmsg_open_mark_file(dest_path, TRUE)) - == NULL) { - g_warning(_("Can't open mark file.\n")); - return FALSE; - } - - procmsg_write_flags(info, fp); - fclose(fp); - return TRUE; - } - return FALSE; -} - -static inline gint strlen_with_check(const gchar *expr, gint fline, const gchar *str) -{ - if (str) - return strlen(str); - else { - debug_print("%s(%d) - invalid string %s\n", __FILE__, fline, expr); - return 0; - } -} - -#define STRLEN_WITH_CHECK(expr) \ - strlen_with_check(#expr, __LINE__, expr) - -static gchar * filteringaction_execute_command(gchar * cmd, MsgInfo * info) -{ - gchar * s = cmd; - gchar * filename = NULL; - gchar * processed_cmd; - gchar * p; - gint size; - - matcher_unescape_str(cmd); - - size = strlen(cmd) + 1; - while (*s != '\0') { - if (*s == '%') { - s++; - switch (*s) { - case '%': - size -= 1; - break; - case 's': /* subject */ - size += STRLEN_WITH_CHECK(info->subject) - 2; - break; - case 'f': /* from */ - size += STRLEN_WITH_CHECK(info->from) - 2; - break; - case 't': /* to */ - size += STRLEN_WITH_CHECK(info->to) - 2; - break; - case 'c': /* cc */ - size += STRLEN_WITH_CHECK(info->cc) - 2; - break; - case 'd': /* date */ - size += STRLEN_WITH_CHECK(info->date) - 2; - break; - case 'i': /* message-id */ - size += STRLEN_WITH_CHECK(info->msgid) - 2; - break; - case 'n': /* newsgroups */ - size += STRLEN_WITH_CHECK(info->newsgroups) - 2; - break; - case 'r': /* references */ - size += STRLEN_WITH_CHECK(info->references) - 2; - break; - case 'F': /* file */ - if (MSG_IS_FILTERING(info->flags)) - filename = g_strdup((gchar *)info->folder); - else - filename = folder_item_fetch_msg(info->folder, info->msgnum); - - if (filename == NULL) { - g_warning(_("filename is not set")); - return NULL; - } - else - size += strlen(filename) - 2; - break; - } - s++; - } - else s++; - } - - - processed_cmd = g_new0(gchar, size); - s = cmd; - p = processed_cmd; - - while (*s != '\0') { - if (*s == '%') { - s++; - switch (*s) { - case '%': - *p = '%'; - p++; - break; - case 's': /* subject */ - if (info->subject != NULL) - strcpy(p, info->subject); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'f': /* from */ - if (info->from != NULL) - strcpy(p, info->from); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 't': /* to */ - if (info->to != NULL) - strcpy(p, info->to); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'c': /* cc */ - if (info->cc != NULL) - strcpy(p, info->cc); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'd': /* date */ - if (info->date != NULL) - strcpy(p, info->date); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'i': /* message-id */ - if (info->msgid != NULL) - strcpy(p, info->msgid); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'n': /* newsgroups */ - if (info->newsgroups != NULL) - strcpy(p, info->newsgroups); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'r': /* references */ - if (info->references != NULL) - strcpy(p, info->references); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'F': /* file */ - strcpy(p, filename); - p += strlen(p); - break; - default: - *p = '%'; - p++; - *p = *s; - p++; - break; - } - s++; - } - else { - *p = *s; - p++; - s++; - } - } - - g_free(filename); - return processed_cmd; -} - -/* - fitleringaction_apply - runs the action on one MsgInfo - return value : return TRUE if the action could be applied -*/ - -#define CHANGE_FLAGS(msginfo) \ -{ \ -if (msginfo->folder->folder->change_flags != NULL) \ -msginfo->folder->folder->change_flags(msginfo->folder->folder, \ - msginfo->folder, \ - msginfo); \ -} - -static gboolean filteringaction_apply(FilteringAction * action, MsgInfo * info, - GHashTable *folder_table) -{ - FolderItem * dest_folder; - gint val; - Compose * compose; - PrefsAccount * account; - gchar * cmd; - - switch(action->type) { - case MATCHING_ACTION_MOVE: - dest_folder = - folder_find_item_from_identifier(action->destination); - if (!dest_folder) - return FALSE; - - if (folder_item_move_msg(dest_folder, info) == -1) - return FALSE; - - /* WRONG: can not update the mark, because the message has - * been moved. info pertains to original location. - * folder_item_move_msg() already updated the mark for the - * destination folder. - info->flags = 0; - filteringaction_update_mark(info); - */ - if (folder_table) { - val = GPOINTER_TO_INT(g_hash_table_lookup - (folder_table, dest_folder)); - if (val == 0) { - folder_item_scan(dest_folder); - g_hash_table_insert(folder_table, dest_folder, - GINT_TO_POINTER(1)); - } - val = GPOINTER_TO_INT(g_hash_table_lookup - (folder_table, info->folder)); - if (val == 0) { - folder_item_scan(info->folder); - g_hash_table_insert(folder_table, info->folder, - GINT_TO_POINTER(1)); - } - } - return TRUE; - - case MATCHING_ACTION_COPY: - dest_folder = - folder_find_item_from_identifier(action->destination); - - if (!dest_folder) - return FALSE; - - /* NOTE: the following call *will* update the mark file for - * the destination folder. but the original message will - * still be there in the inbox. */ - - if (folder_item_copy_msg(dest_folder, info) == -1) - return FALSE; - - if (folder_table) { - val = GPOINTER_TO_INT(g_hash_table_lookup - (folder_table, dest_folder)); - if (val == 0) { - folder_item_scan(dest_folder); - g_hash_table_insert(folder_table, dest_folder, - GINT_TO_POINTER(1)); - } - } - - return TRUE; - - case MATCHING_ACTION_DELETE: - if (folder_item_remove_msg(info->folder, info->msgnum) == -1) - return FALSE; - - /* WRONG: can not update the mark. this would actually add - * a bogus record to the mark file for the message's original - * folder. - info->flags = 0; - filteringaction_update_mark(info); - */ - - return TRUE; - - case MATCHING_ACTION_MARK: - MSG_SET_PERM_FLAGS(info->flags, MSG_MARKED); - debug_print("*** MARKING message %d, in folder %s, \"%s\"\n", - info->msgnum, info->folder->name, - info->subject ? info->subject : "<none>"); - filteringaction_update_mark(info); - - CHANGE_FLAGS(info); - - return TRUE; - - case MATCHING_ACTION_UNMARK: - MSG_UNSET_PERM_FLAGS(info->flags, MSG_MARKED); - filteringaction_update_mark(info); - - CHANGE_FLAGS(info); - - return TRUE; - - case MATCHING_ACTION_MARK_AS_READ: - MSG_UNSET_PERM_FLAGS(info->flags, MSG_UNREAD | MSG_NEW); - filteringaction_update_mark(info); - - CHANGE_FLAGS(info); - - return TRUE; - - case MATCHING_ACTION_MARK_AS_UNREAD: - MSG_SET_PERM_FLAGS(info->flags, MSG_UNREAD | MSG_NEW); - filteringaction_update_mark(info); - - CHANGE_FLAGS(info); - - return TRUE; - - case MATCHING_ACTION_FORWARD: - - account = account_find_from_id(action->account_id); - compose = compose_forward(account, info, FALSE); - if (compose->account->protocol == A_NNTP) - compose_entry_append(compose, action->destination, - COMPOSE_NEWSGROUPS); - else - compose_entry_append(compose, action->destination, - COMPOSE_TO); - - val = compose_send(compose); - if (val == 0) { - gtk_widget_destroy(compose->window); - return TRUE; - } - - gtk_widget_destroy(compose->window); - return FALSE; - - case MATCHING_ACTION_FORWARD_AS_ATTACHMENT: - - account = account_find_from_id(action->account_id); - compose = compose_forward(account, info, TRUE); - if (compose->account->protocol == A_NNTP) - compose_entry_append(compose, action->destination, - COMPOSE_NEWSGROUPS); - else - compose_entry_append(compose, action->destination, - COMPOSE_TO); - - val = compose_send(compose); - if (val == 0) { - gtk_widget_destroy(compose->window); - return TRUE; - } - - gtk_widget_destroy(compose->window); - return FALSE; - - case MATCHING_EXECUTE: - - cmd = matching_build_command(action->destination, info); - if (cmd == NULL) - return TRUE; - else { - system(cmd); - g_free(cmd); - } - - return TRUE; - - default: - return FALSE; - } -} - -/* filteringprop_apply() - runs the action on one MsgInfo if it matches the - * criterium. certain actions can be followed by other actions. in this - * case the function returns FALSE. if an action can not be followed - * by others, the function returns TRUE. - * - * remember that this is because of the fact that msg flags are always - * _appended_ to mark files. currently sylpheed does not insert messages - * at a certain index. - * now, after having performed a certain action, the MsgInfo is still - * valid for the message. in *this* case the function returns FALSE. - */ -static gboolean filteringprop_apply(FilteringProp * filtering, MsgInfo * info, - GHashTable *folder_table) -{ - if (matcherlist_match(filtering->matchers, info)) { - gint result; - gchar * action_str; - - result = TRUE; - - result = filteringaction_apply(filtering->action, info, - folder_table); - action_str = - filteringaction_to_string(filtering->action); - if (!result) { - g_warning(_("action %s could not be applied"), - action_str); - } - else { - debug_print(_("message %i %s..."), - info->msgnum, action_str); - } - - g_free(action_str); - - switch(filtering->action->type) { - case MATCHING_ACTION_MOVE: - case MATCHING_ACTION_DELETE: - return TRUE; /* MsgInfo invalid for message */ - case MATCHING_EXECUTE: - case MATCHING_ACTION_COPY: - case MATCHING_ACTION_MARK: - case MATCHING_ACTION_MARK_AS_READ: - case MATCHING_ACTION_UNMARK: - case MATCHING_ACTION_MARK_AS_UNREAD: - case MATCHING_ACTION_FORWARD: - case MATCHING_ACTION_FORWARD_AS_ATTACHMENT: - return FALSE; /* MsgInfo still valid for message */ - default: - return FALSE; - } - } - else - return FALSE; -} - -void filter_msginfo(GSList * filtering_list, MsgInfo * info, - GHashTable *folder_table) -{ - GSList * l; - - if (info == NULL) { - g_warning(_("msginfo is not set")); - return; - } - - for(l = filtering_list ; l != NULL ; l = g_slist_next(l)) { - FilteringProp * filtering = (FilteringProp *) l->data; - - if (filteringprop_apply(filtering, info, folder_table)) - break; - } -} - -void filter_msginfo_move_or_delete(GSList * filtering_list, MsgInfo * info, - GHashTable *folder_table) -{ - GSList * l; - - if (info == NULL) { - g_warning(_("msginfo is not set")); - return; - } - - for(l = filtering_list ; l != NULL ; l = g_slist_next(l)) { - FilteringProp * filtering = (FilteringProp *) l->data; - - switch (filtering->action->type) { - case MATCHING_ACTION_MOVE: - case MATCHING_ACTION_DELETE: - if (filteringprop_apply(filtering, info, folder_table)) - return; - } - } -} - -void filter_message(GSList * filtering_list, FolderItem * item, - gint msgnum, GHashTable *folder_table) -{ - MsgInfo * msginfo; - gchar * filename; - MsgFlags msgflags = { 0, 0 }; - - if (item == NULL) { - g_warning(_("folderitem not set")); - return; - } - - filename = folder_item_fetch_msg(item, msgnum); - - if (filename == NULL) { - g_warning(_("filename is not set")); - return; - } - - msginfo = procheader_parse(filename, msgflags, TRUE); - - g_free(filename); - - if (msginfo == NULL) { - g_warning(_("could not get info for %s"), filename); - return; - } - - msginfo->folder = item; - msginfo->msgnum = msgnum; - - filter_msginfo(filtering_list, msginfo, folder_table); -} - - -/******************************************************************************/ - -/* revised filtering system. - * - * 07/18/01 alfons initial revisement - */ - -/* (alfons) - * - * the revised filtering system does not rely on a message being "registered" - * in one of sylpheed's folders. it now uses the file sylpheed created on - * incorporation of mail. - * i do use MsgInfo data; that's needed by the matcher, but for the rest - * the MsgInfo is not really used. */ - - -/* add_mark() - adds a mark for a file */ -static void add_mark(FolderItem *folder, gint msgnum, MsgPermFlags flags) -{ - gchar * dest_path; - FILE * fp; - - if (folder->folder->type == F_MH) { - dest_path = folder_item_get_path(folder); - if (!is_dir_exist(dest_path)) - make_dir_hier(dest_path); - - if (dest_path == NULL) { - g_warning(_("Can't open mark file.\n")); - return; - } - - if ((fp = procmsg_open_mark_file(dest_path, TRUE)) - == NULL) { - g_warning(_("Can't open mark file.\n")); - return; - } - - /* TODO: straight from procmsg.c:procmsg_write_flags() - * should update this when mark file version changes */ -#if MARK_VERSION == 2 - WRITE_CACHE_DATA_INT(msgnum, fp); - WRITE_CACHE_DATA_INT(flags, fp); -#else -#error should rewrite the above for new mark version - /* paste the source code of procmsg.c:procmsg_write_flags() */ -#endif - fclose(fp); - return; - } - return; -} - -/* prepare_destination() - prepares destination folder by registering it - * in the global folder table (if not already there). it returns TRUE if - * successful. it also returns the FolderItem for the destination */ -static gboolean prepare_destination(const gchar *destination, FolderItem **item, - GHashTable *folder_table) -{ - gint val; - FolderItem *result; - - result = folder_find_item_from_identifier(destination); - if (!result) - return FALSE; - if (folder_table) { - *item = result; - val = GPOINTER_TO_INT(g_hash_table_lookup(folder_table, *item)); - if (val == 0) { - folder_item_scan(*item); - g_hash_table_insert(folder_table, *item, GINT_TO_POINTER(1)); - } - } - return TRUE; -} - -/* filter_incoming_perform_actions() - performs actions on incoming - * message. this function handles updating marks a little bit smarter; - * remember that marks can only be appended. */ -static gboolean filter_incoming_perform_actions(FolderItem *default_folder, - MsgInfo *msginfo, - GHashTable *folder_table) -{ - /* matching actions for msginfo */ - struct matching_action { - FilteringAction *action; - struct matching_action *next; - }; - - struct matching_action ma_head = { NULL, NULL }; - struct matching_action *ma_tail = &ma_head; - - /* need this for the forwarding stuff */ - PrefsAccount *account; - Compose *compose; - MsgFlags tmp; - gchar *fwd_msg_name; - gint val; - MsgInfo *fwd_msg; - - MsgFlags markflags = { 0, 0 }; - - /* use the global prefs_filtering list */ - GSList * list = prefs_filtering; - - /* things we get after having added a message to a folder */ - FolderItem *dest_folder; - gint msgnum; - - /* after performing certain action, we may have to copy - * the message to inbox too */ - gboolean copy_to_inbox_too = TRUE; - - /* filename is only put in msginfo->folder if MSG_FILTERING is set. */ - const gchar *filename = (gchar *) msginfo->folder; - - MsgPermFlags flags; - gboolean stop; - gchar *cmd; - - /* build list of matching actions */ - for (; list != NULL; list = g_slist_next(list)) { - FilteringProp *prop = (FilteringProp *) list->data; - - if (!matcherlist_match(prop->matchers, msginfo)) - continue; - - if (NULL == (ma_tail->next = alloca(sizeof(struct matching_action)))) { - debug_print(_("action allocation error\n")); - break; - } - - debug_print("*** action %d\n", prop->action->type); - - ma_tail->action = prop->action; - ma_tail->next->action = NULL; - ma_tail->next->next = NULL; - ma_tail = ma_tail->next; - } - - debug_print("*** collecting marks\n"); - - /* collect all marks */ - for (ma_tail = &ma_head, stop = FALSE; ma_tail->action && !stop; ma_tail = ma_tail->next) { - switch (ma_tail->action->type) { - - case MATCHING_ACTION_MARK: - MSG_SET_PERM_FLAGS(markflags, MSG_MARKED); - break; - - case MATCHING_ACTION_UNMARK: - MSG_UNSET_PERM_FLAGS(markflags, MSG_MARKED); - break; - - case MATCHING_ACTION_MARK_AS_READ: - MSG_UNSET_PERM_FLAGS(markflags, MSG_UNREAD); - break; - - case MATCHING_ACTION_MARK_AS_UNREAD: - MSG_SET_PERM_FLAGS(markflags, MSG_UNREAD); - break; - - case MATCHING_ACTION_COLOR: - MSG_SET_LABEL_VALUE(markflags, ma_tail->action->labelcolor); - break; - - /* UNCONTINUABLE */ - case MATCHING_ACTION_FORWARD: - case MATCHING_ACTION_FORWARD_AS_ATTACHMENT: - case MATCHING_ACTION_MOVE: - case MATCHING_ACTION_DELETE: - stop = TRUE; - break; - - default: - break; - } - } - - - /* msgnum & dest_folder should have valid values after a succesful - * drop; in this case there is a MsgInfo available */ - msgnum = -1; - dest_folder = NULL; - - debug_print("*** performing actions\n"); - - for (ma_tail = &ma_head ; ma_tail->action; ma_tail = ma_tail->next) { - - /* there are variables you have to use when defining new actions: - * - * copy_to_inbox_too - if the original message should be copied to the inbox - * (default_folder) too. - * - * also note that after dropping it to a folder (folder_item_add_msg()) you have - * to mark the message, just to make sure any defined mark actions are applied. */ - -#define ACTION (ma_tail->action->type) - - /* C O N T I N U A B L E */ - - if (MATCHING_ACTION_COPY == ACTION) { - debug_print("*** performing copy\n"); - copy_to_inbox_too = TRUE; - if (!prepare_destination(ma_tail->action->destination, &dest_folder, folder_table)) { - debug_print("Rule failed: unknown destination %s\n", ma_tail->action->destination); - continue; /* try next action */ - } - if (0 > (msgnum = folder_item_add_msg(dest_folder, filename, FALSE))) { - debug_print(_("Rule failed: could not copy to folder %s\n"), - ma_tail->action->destination); - continue; /* try next action */ - } - flags = msginfo->flags.perm_flags | markflags.perm_flags; - add_mark(dest_folder, msgnum, flags); - } - else if (MATCHING_EXECUTE == ACTION) { - debug_print("*** performing exec\n"); - copy_to_inbox_too = TRUE; - - /* matching_build_command() knows about filtering */ - cmd = matching_build_command(ma_tail->action->destination, msginfo); - if (cmd) { - system(cmd); - g_free(cmd); - } - else - debug_print(_("Rule failed: no command line\n")); - } - - /* U N C O N T I N U A B L E */ - - else if (MATCHING_ACTION_FORWARD == ACTION - || MATCHING_ACTION_FORWARD_AS_ATTACHMENT == ACTION) { - debug_print("*** performing forward\n"); - - /* forwarding messages is complicated because there's currently no - * way to forward a message using "filenames"; you can only forward - * a message if you have its MsgInfo. this means we have to drop - * the message first */ - if (0 > (msgnum = folder_item_add_msg(default_folder, filename, FALSE))) { - debug_print(_("Rule failed: could not forward\n")); - copy_to_inbox_too = TRUE; - continue; - } - - flags = msginfo->flags.perm_flags | markflags.perm_flags; - flags |= MSG_FORWARDED; - add_mark(default_folder, msgnum, flags); - - /* grab the dropped message */ - fwd_msg_name = folder_item_fetch_msg(default_folder, msgnum); - - tmp.perm_flags = tmp.tmp_flags = 0; - fwd_msg = procheader_parse(fwd_msg_name, tmp, TRUE); - - fwd_msg->folder = default_folder; - fwd_msg->msgnum = msgnum; - - /* do the compose_XXX stuff */ - account = account_find_from_id(ma_tail->action->account_id); - compose = compose_forward(account, fwd_msg, ACTION == MATCHING_ACTION_FORWARD ? FALSE : TRUE); - if (compose->account->protocol == A_NNTP) - compose_entry_append(compose, ma_tail->action->destination, - COMPOSE_NEWSGROUPS); - else - compose_entry_append(compose, ma_tail->action->destination, - COMPOSE_TO); - - compose_send(compose); - - procmsg_msginfo_free(fwd_msg); - - gtk_widget_destroy(compose->window); - break; - } - else if (MATCHING_ACTION_DELETE == ACTION) { - debug_print("*** performing delete\n"); - copy_to_inbox_too = FALSE; - - /* drop to Trash */ - dest_folder = folder_get_default_trash(); - msgnum = folder_item_add_msg(dest_folder, filename, FALSE); - if (msgnum < 0) { - debug_print(_("Rule failed: could not move to trash")); - copy_to_inbox_too = TRUE; - } - else { - flags = msginfo->flags.perm_flags | markflags.perm_flags; - add_mark(dest_folder, msgnum, flags); - } - break; - } - else if (MATCHING_ACTION_MOVE == ACTION) { - debug_print("*** performing move\n"); - copy_to_inbox_too = FALSE; - - if (!prepare_destination(ma_tail->action->destination, &dest_folder, folder_table)) { - copy_to_inbox_too = TRUE; - break; - } - - msgnum = folder_item_add_msg(dest_folder, filename, FALSE); - if (msgnum < 0) { - debug_print(_("Rule failed: could not move to folder %s\n"), - ma_tail->action->destination); - copy_to_inbox_too = TRUE; - break; - } - - flags = msginfo->flags.perm_flags | markflags.perm_flags; - add_mark(dest_folder, msgnum, flags); - break; - } - } - - /* may need to copy it to inbox too */ - if (copy_to_inbox_too) { - debug_print("*** performing inbox copy\n"); - msgnum = folder_item_add_msg(default_folder, filename, TRUE); - if (msgnum < 0) { - debug_print(_("error copying incoming file %s to inbox\n"), - filename); - return FALSE; - } - flags = msginfo->flags.perm_flags | markflags.perm_flags; - add_mark(default_folder, msgnum, flags); - } - else { - debug_print("*** unlinking\n"); - if (unlink(filename) < 0) - debug_print(_("error deleting incoming message file\n")); - } - -#undef ACTION - - return TRUE; -} - -static void filter_incoming_msginfo(FolderItem *default_folder, MsgInfo *msginfo, - GHashTable *folder_table) -{ - filter_incoming_perform_actions(default_folder, msginfo, folder_table); -} - -/* filter_incoming_message() - tries to apply a filter on one incoming message. - * it also handles the case when there's no filter match */ -void filter_incoming_message(FolderItem *default_folder, const gchar *file_name, - GHashTable *folder_table) -{ - MsgInfo *msginfo; - MsgFlags msgflags = { 0, 0 }; - - /* make an "uncomplete" msginfo. it's incomplete because it doesn't - * have a message number / folder yet. */ - if (NULL == (msginfo = procheader_parse(file_name, msgflags, TRUE))) { - g_warning(_("error filtering incoming message %s\n"), - file_name); - return; - } - - /* let matcher know that this is a message that has no - * valid body data yet. */ - MSG_SET_TMP_FLAGS(msginfo->flags, MSG_FILTERING); - msginfo->folder = (FolderItem *) g_strdup(file_name); /* actually storing a pointer to a string */ - msginfo->msgnum = 0; - - filter_incoming_msginfo(default_folder, msginfo, folder_table); - - g_free(msginfo->folder); - procmsg_msginfo_free(msginfo); -} - -/******************************************************************************/ - -void prefs_filtering_read_config(void) -{ - gchar *rcpath; - FILE *fp; - gchar buf[PREFSBUFSIZE]; - - debug_print(_("Reading filtering configuration...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, - FILTERING_RC, NULL); - if ((fp = fopen(rcpath, "r")) == NULL) { - if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); - g_free(rcpath); - prefs_filtering = NULL; - return; - } - g_free(rcpath); - - /* remove all filtering */ - while (prefs_filtering != NULL) { - FilteringProp * filtering = - (FilteringProp *) prefs_filtering->data; - filteringprop_free(filtering); - prefs_filtering = g_slist_remove(prefs_filtering, filtering); - } - - while (fgets(buf, sizeof(buf), fp) != NULL) { - FilteringProp * filtering; - gchar * tmp; - - g_strchomp(buf); - - if ((*buf != '#') && (*buf != '\0')) { - tmp = buf; - filtering = filteringprop_parse(&tmp); - if (tmp != NULL) { - prefs_filtering = - g_slist_append(prefs_filtering, - filtering); - } - else { - /* debug */ - g_warning(_("syntax error : %s\n"), buf); - } - } - } - - fclose(fp); -} - -gchar * filteringaction_to_string(FilteringAction * action) -{ - gchar * command_str; - gint i; - gchar * account_id_str; - gchar * labelcolor_str; - - /* FIXME: use g_sprintf() throughout */ - - command_str = NULL; - command_str = get_matchparser_tab_str(action->type); - - if (command_str == NULL) - return NULL; - - switch(action->type) { - case MATCHING_ACTION_MOVE: - case MATCHING_ACTION_COPY: - case MATCHING_EXECUTE: - return g_strconcat(command_str, " \"", action->destination, - "\"", NULL); - - case MATCHING_ACTION_DELETE: - case MATCHING_ACTION_MARK: - case MATCHING_ACTION_UNMARK: - case MATCHING_ACTION_MARK_AS_READ: - case MATCHING_ACTION_MARK_AS_UNREAD: - return g_strdup(command_str); - break; - - case MATCHING_ACTION_FORWARD: - case MATCHING_ACTION_FORWARD_AS_ATTACHMENT: - account_id_str = itos(action->account_id); - return g_strconcat(command_str, " ", account_id_str, - " \"", action->destination, "\"", NULL); - - case MATCHING_ACTION_COLOR: - labelcolor_str = itos(action->labelcolor); - return g_strconcat(command_str, " ", labelcolor_str, NULL); - - default: - return NULL; - } -} - -gchar * filteringprop_to_string(FilteringProp * prop) -{ - gchar * list_str; - gchar * action_str; - gchar * filtering_str; - - action_str = filteringaction_to_string(prop->action); - - if (action_str == NULL) - return NULL; - - list_str = matcherlist_to_string(prop->matchers); - - if (list_str == NULL) { - g_free(action_str); - return NULL; - } - - filtering_str = g_strconcat(list_str, " ", action_str, NULL); - g_free(list_str); - g_free(action_str); - - return filtering_str; -} - -void prefs_filtering_write_config(void) -{ - gchar *rcpath; - PrefFile *pfile; - GSList *cur; - FilteringProp * prop; - - debug_print(_("Writing filtering configuration...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FILTERING_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_filtering; cur != NULL; cur = cur->next) { - gchar *filtering_str; - - prop = (FilteringProp *) cur->data; - filtering_str = filteringprop_to_string(prop); - - if (fputs(filtering_str, pfile->fp) == EOF || - fputc('\n', pfile->fp) == EOF) { - FILE_OP_ERROR(rcpath, "fputs || fputc"); - prefs_write_close_revert(pfile); - g_free(rcpath); - g_free(filtering_str); - return; - } - g_free(filtering_str); - } - - g_free(rcpath); - - if (prefs_write_close(pfile) < 0) { - g_warning(_("failed to write configuration to file\n")); - return; - } -} diff --git a/src/filtering.h b/src/filtering.h deleted file mode 100644 index 113e33be0..000000000 --- a/src/filtering.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2001 Hiroyuki Yamamoto & The Sylpheed Claws Team - * - * 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_NEW_H - -#define FILTER_NEW_H - -#include <glib.h> -#include "matcher.h" -#include "procmsg.h" - -struct _FilteringAction { - gint type; - gint account_id; - gchar *destination; - gint labelcolor; -}; - -typedef struct _FilteringAction FilteringAction; - -struct _FilteringProp { - MatcherList * matchers; - FilteringAction * action; -}; - -typedef struct _FilteringProp FilteringProp; - -extern GSList * prefs_filtering; - - -FilteringAction * filteringaction_new(int type, int account_id, - gchar * destination, - gint labelcolor); -void filteringaction_free(FilteringAction * action); -FilteringAction * filteringaction_parse(gchar ** str); - -FilteringProp * filteringprop_new(MatcherList * matchers, - FilteringAction * action); -void filteringprop_free(FilteringProp * prop); - -FilteringProp * filteringprop_parse(gchar ** str); - - -void filter_msginfo(GSList * filtering_list, MsgInfo * info, - GHashTable *folder_table); -void filter_msginfo_move_or_delete(GSList * filtering_list, MsgInfo * info, - GHashTable *folder_table); -void filter_message(GSList * filtering_list, FolderItem * item, - gint msgnum, GHashTable *folder_table); -void filter_incoming_message(FolderItem *default_folder, const gchar *file_name, - GHashTable *folder_table); - -gchar * filteringaction_to_string(FilteringAction * action); -void prefs_filtering_write_config(void); -void prefs_filtering_read_config(void); -gchar * filteringprop_to_string(FilteringProp * prop); - -#endif diff --git a/src/folder.c b/src/folder.c deleted file mode 100644 index df28f26fc..000000000 --- a/src/folder.c +++ /dev/null @@ -1,1475 +0,0 @@ -/* - * 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 "intl.h" -#include "folder.h" -#include "folderview.h" -#include "session.h" -#include "imap.h" -#include "news.h" -#include "mh.h" -#include "mbox_folder.h" -#include "utils.h" -#include "xml.h" -#include "codeconv.h" -#include "prefs.h" -#include "account.h" -#include "prefs_account.h" -#include "mbox_folder.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 mbox_folder_destroy (MboxFolder *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); -static void folder_update_op_count_rec (GNode *node); - - -Folder *folder_new(FolderType type, const gchar *name, const gchar *path) -{ - Folder *folder = NULL; - - name = name ? name : path; - switch (type) { - case F_MBOX: - folder = mbox_folder_new(name, path); - break; - 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) -{ - /* implementing */ - Folder *folder; - - folder = (Folder *)g_new0(MboxFolder, 1); - folder_init(folder, F_MBOX, name); - LOCAL_FOLDER(folder)->rootpath = g_strdup(path); - - return folder; -} - -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->no_sub = FALSE; - item->no_select = FALSE; - item->collapsed = FALSE; - item->parent = NULL; - item->folder = NULL; - item->data = NULL; - - item->prefs = prefs_folder_item_new(); - - 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_item_destroy(FolderItem *item) -{ - g_return_if_fail(item != NULL); - - g_free(item->name); - g_free(item->path); - g_free(item); -} - -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_MBOX: - mbox_folder_destroy(MBOX_FOLDER(folder)); - break; - case F_IMAP: - imap_folder_destroy(IMAP_FOLDER(folder)); - break; - case F_NEWS: - news_folder_destroy(NEWS_FOLDER(folder)); - break; - default: - break; - } - - 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); - - folder->inbox = NULL; - folder->outbox = NULL; - folder->draft = NULL; - folder->queue = NULL; - folder->trash = NULL; - folder->node = NULL; -} - -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_MBOX) { - if (cur_folder->type != F_MH && - cur_folder->type != F_MBOX) break; - } else if (folder->type == F_IMAP) { - if (cur_folder->type != F_MH && - cur_folder->type != F_MBOX && - cur_folder->type != F_IMAP) break; - } else if (folder->type == F_NEWS) { - if (cur_folder->type != F_MH && - cur_folder->type != F_MBOX && - 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; - gchar *path; - - path = folder_get_list_path(); - if (!is_file_exist(path)) return -1; - node = xml_parse_file(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 || folder->type == F_MBOX) && - !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_list ? FOLDER(folder_list->data) : NULL; -} - -FolderItem *folder_get_default_inbox(void) -{ - Folder *folder; - - if (!folder_list) return NULL; - folder = FOLDER(folder_list->data); - g_return_val_if_fail(folder != NULL, NULL); - return folder->inbox; -} - -FolderItem *folder_get_default_outbox(void) -{ - Folder *folder; - - if (!folder_list) return NULL; - folder = FOLDER(folder_list->data); - g_return_val_if_fail(folder != NULL, NULL); - return folder->outbox; -} - -FolderItem *folder_get_default_draft(void) -{ - Folder *folder; - - if (!folder_list) return NULL; - folder = FOLDER(folder_list->data); - g_return_val_if_fail(folder != NULL, NULL); - return folder->draft; -} - -FolderItem *folder_get_default_queue(void) -{ - Folder *folder; - - if (!folder_list) return NULL; - folder = FOLDER(folder_list->data); - g_return_val_if_fail(folder != NULL, NULL); - return folder->queue; -} - -FolderItem *folder_get_default_trash(void) -{ - Folder *folder; - - if (!folder_list) return NULL; - 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_MBOX) { - path = mbox_get_virtual_path(item); - if (path == NULL) - return NULL; - folder_path = g_strconcat(get_mbox_cache_dir(), - G_DIR_SEPARATOR_S, path, NULL); - g_free(path); - - return folder_path; - } - 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(get_home_dir(), G_DIR_SEPARATOR_S, - folder_path, G_DIR_SEPARATOR_S, - item->path, NULL); - else - path = g_strconcat(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; - - g_return_if_fail(folder->scan != NULL); - - 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; - - g_return_val_if_fail(folder->scan != NULL, NULL); - g_return_val_if_fail(folder->fetch_msg != NULL, NULL); - - 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, - gboolean remove_source) -{ - Folder *folder; - gint num; - - g_return_val_if_fail(dest != NULL, -1); - g_return_val_if_fail(file != NULL, -1); - - folder = dest->folder; - - g_return_val_if_fail(folder->scan != NULL, -1); - g_return_val_if_fail(folder->add_msg != NULL, -1); - - if (dest->last_num < 0) folder->scan(folder, dest); - - num = folder->add_msg(folder, dest, file, remove_source); - 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_msg(FolderItem *dest, MsgInfo *msginfo) -{ - Folder *folder; - gint num; - gchar * filename; - Folder * src_folder; - - g_return_val_if_fail(dest != NULL, -1); - g_return_val_if_fail(msginfo != NULL, -1); - - folder = dest->folder; - - g_return_val_if_fail(folder->scan != NULL, -1); - g_return_val_if_fail(folder->remove_msg != NULL, -1); - g_return_val_if_fail(folder->copy_msg != NULL, -1); - - if (dest->last_num < 0) folder->scan(folder, dest); - - src_folder = msginfo->folder->folder; - - num = folder->copy_msg(folder, dest, msginfo); - - if (num != -1) { - src_folder->remove_msg(src_folder, - msginfo->folder, - msginfo->msgnum); - } - - if (folder->finished_copy) - folder->finished_copy(folder, dest); - - src_folder = msginfo->folder->folder; - - if (msginfo->folder && src_folder->scan) - src_folder->scan(src_folder, msginfo->folder); - folder->scan(folder, dest); - - 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; - else dest->op_count = 0; - - return num; -} -*/ - -gint folder_item_move_msgs_with_dest(FolderItem *dest, GSList *msglist) -{ - Folder *folder; - FolderItem * item; - GSList * l; - gchar * filename; - - g_return_val_if_fail(dest != NULL, -1); - g_return_val_if_fail(msglist != NULL, -1); - - folder = dest->folder; - - g_return_val_if_fail(folder->scan != NULL, -1); - g_return_val_if_fail(folder->copy_msg != NULL, -1); - g_return_val_if_fail(folder->remove_msg != NULL, -1); - - if (dest->last_num < 0) folder->scan(folder, dest); - - item = NULL; - for(l = msglist ; l != NULL ; l = g_slist_next(l)) { - MsgInfo * msginfo = (MsgInfo *) l->data; - - if (!item && msginfo->folder != NULL) - item = msginfo->folder; - - if (folder->copy_msg(folder, dest, msginfo) != -1) - item->folder->remove_msg(item->folder, - msginfo->folder, - msginfo->msgnum); - } - - if (folder->finished_copy) - folder->finished_copy(folder, dest); - - if (item && item->folder->scan) - item->folder->scan(item->folder, item); - folder->scan(folder, dest); - - return dest->last_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_msg(FolderItem *dest, MsgInfo *msginfo) -{ - Folder *folder; - gint num; - gchar * filename; - Folder * src_folder; - - g_return_val_if_fail(dest != NULL, -1); - g_return_val_if_fail(msginfo != NULL, -1); - - folder = dest->folder; - - g_return_val_if_fail(folder->scan != NULL, -1); - g_return_val_if_fail(folder->copy_msg != NULL, -1); - - if (dest->last_num < 0) folder->scan(folder, dest); - - num = folder->copy_msg(folder, dest, msginfo); - - if (folder->finished_copy) - folder->finished_copy(folder, dest); - - folder->scan(folder, dest); - - 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; - else dest->op_count = 0; - - return num; -} -*/ - -gint folder_item_copy_msgs_with_dest(FolderItem *dest, GSList *msglist) -{ - Folder *folder; - gint num; - GSList * l; - gchar * filename; - - g_return_val_if_fail(dest != NULL, -1); - g_return_val_if_fail(msglist != NULL, -1); - - folder = dest->folder; - - g_return_val_if_fail(folder->scan != NULL, -1); - g_return_val_if_fail(folder->copy_msg != NULL, -1); - - if (dest->last_num < 0) folder->scan(folder, dest); - - for(l = msglist ; l != NULL ; l = g_slist_next(l)) { - MsgInfo * msginfo = (MsgInfo *) l->data; - - folder->copy_msg(folder, dest, msginfo); - } - - if (folder->finished_copy) - folder->finished_copy(folder, dest); - - folder->scan(folder, dest); - - return dest->last_num; -} - -gint folder_item_remove_msg(FolderItem *item, gint num) -{ - Folder *folder; - gint result; - - g_return_val_if_fail(item != NULL, -1); - - folder = item->folder; - - g_return_val_if_fail(folder->scan != NULL, -1); - g_return_val_if_fail(folder->remove_msg != NULL, -1); - - if (folder->finished_remove) - folder->finished_remove(folder, item); - - result = folder->remove_msg(folder, item, num); - - if (item->last_num < 0) folder->scan(folder, item); - - if (result == 0){ - if (folder->finished_remove) - folder->finished_remove(folder, item); - } - - return result; -} - -gint folder_item_remove_all_msg(FolderItem *item) -{ - Folder *folder; - gint result; - - g_return_val_if_fail(item != NULL, -1); - - folder = item->folder; - - g_return_val_if_fail(folder->scan != NULL, -1); - g_return_val_if_fail(folder->remove_all_msg != NULL, -1); - - if (item->last_num < 0) folder->scan(folder, item); - - result = folder->remove_all_msg(folder, item); - - if (result == 0){ - if (folder->finished_remove) - folder->finished_remove(folder, item); - } - - return result; -} - -gboolean folder_item_is_msg_changed(FolderItem *item, MsgInfo *msginfo) -{ - Folder *folder; - - g_return_val_if_fail(item != NULL, FALSE); - - folder = item->folder; - - g_return_val_if_fail(folder->is_msg_changed != NULL, -1); - - 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->copy_msg = mh_copy_msg; - 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->add_msg = imap_add_msg; - folder->move_msg = imap_move_msg; - folder->move_msgs_with_dest = imap_move_msgs_with_dest; - folder->copy_msg = imap_copy_msg; - folder->copy_msgs_with_dest = imap_copy_msgs_with_dest; - folder->remove_msg = imap_remove_msg; - folder->remove_all_msg = imap_remove_all_msg; - folder->scan = imap_scan_folder; - folder->scan_tree = imap_scan_tree; - folder->create_tree = imap_create_tree; - folder->create_folder = imap_create_folder; - folder->remove_folder = imap_remove_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; - case F_MBOX: - folder->get_msg_list = mbox_get_msg_list; - folder->fetch_msg = mbox_fetch_msg; - folder->scan = mbox_scan_folder; - folder->add_msg = mbox_add_msg; - folder->remove_all_msg = mbox_remove_all_msg; - folder->remove_msg = mbox_remove_msg; - /* - folder->move_msg = mbox_move_msg; - folder->move_msgs_with_dest = mbox_move_msgs_with_dest; - folder->copy_msg = mbox_copy_msg; - folder->copy_msgs_with_dest = mbox_copy_msgs_with_dest; - */ - folder->copy_msg = mbox_copy_msg; - - folder->create_tree = mbox_create_tree; - folder->create_folder = mbox_create_folder; - folder->rename_folder = mbox_rename_folder; - folder->remove_folder = mbox_remove_folder; - - folder->update_mark = mbox_update_mark; - folder->change_flags = mbox_change_flags; - folder->finished_copy = mbox_finished_copy; - - break; - default: - break; - } - - 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: - break; - } -} - -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 mbox_folder_destroy(MboxFolder *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; - gboolean no_sub = FALSE, no_select = FALSE, collapsed = FALSE; - 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); - else if (!strcmp(attr->name, "no_sub")) - no_sub = *attr->value == '1' ? TRUE : FALSE; - else if (!strcmp(attr->name, "no_select")) - no_select = *attr->value == '1' ? TRUE : FALSE; - else if (!strcmp(attr->name, "collapsed")) - collapsed = *attr->value == '1' ? TRUE : FALSE; - } - - 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->no_sub = no_sub; - item->no_select = no_select; - item->collapsed = collapsed; - 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: - break; - } - - prefs_folder_item_read_config(item); - - 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; - gboolean collapsed = FALSE; - - 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); - } else if (!strcmp(attr->name, "collapsed")) - collapsed = *attr->value == '1' ? TRUE : FALSE; - } - - 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); - FOLDER_ITEM(node->data)->collapsed = collapsed; - - 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) || (folder->type == F_MBOX)) { - 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); - if (item->collapsed && node->children) - fputs(" collapsed=\"1\"", fp); - } 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); - if (item->no_sub) - fputs(" no_sub=\"1\"", fp); - if (item->no_select) - fputs(" no_select=\"1\"", fp); - if (item->collapsed && node->children) - fputs(" collapsed=\"1\"", fp); - 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); -} - -static void folder_update_op_count_rec(GNode *node) { - FolderItem *fitem = FOLDER_ITEM(node->data); - - if (g_node_depth(node) > 0) { - if (fitem->op_count > 0) { - fitem->op_count = 0; - folderview_update_item(fitem, 0); - } - if (node->children) { - GNode *child; - - child = node->children; - while (child) { - GNode *cur; - - cur = child; - child = cur->next; - folder_update_op_count_rec(cur); - } - } - } -} - -void folder_update_op_count() { - GList *cur; - Folder *folder; - - for (cur = folder_list; cur != NULL; cur = cur->next) { - folder = cur->data; - folder_update_op_count_rec(folder->node); - } -} - -typedef struct _type_str { - gchar * str; - gint type; -} type_str; - - -static type_str type_str_table[] = -{ - {"#mh", F_MH}, - {"#mbox", F_MBOX}, - {"#maildir", F_MAILDIR}, - {"#imap", F_IMAP}, - {"#news", F_NEWS} -}; - - -static gchar * folder_get_type_string(gint type) -{ - gint i; - - for(i = 0 ; i < sizeof(type_str_table) / sizeof(type_str) ; i++) { - if (type_str_table[i].type == type) - return type_str_table[i].str; - } - return NULL; -} - -static gint folder_get_type_from_string(gchar * str) -{ - gint i; - - for(i = 0 ; i < sizeof(type_str_table) / sizeof(type_str) ; i++) { - if (g_strcasecmp(type_str_table[i].str, str)) - return type_str_table[i].type; - } - return F_UNKNOWN; -} - -gchar * folder_get_identifier(Folder * folder) -{ - gchar * type_str; - type_str = folder_get_type_string(folder->type); - - return g_strconcat(type_str, "/", folder->name, NULL); -} - -/* -static gchar * folder_item_get_tree_identifier(FolderItem * item) -{ - if (item->parent != NULL) { - gchar * path; - gchar * id; - - path = folder_item_get_tree_identifier(item->parent); - if (path == NULL) - return NULL; - - id = g_strconcat(path, "/", item->name, NULL); - g_free(path); - - return id; - } - else { - return g_strconcat("/", item->name, NULL); - } -} -*/ - -gchar * folder_item_get_identifier(FolderItem * item) -{ - gchar * path; - gchar * id; - gchar * folder_str; - - folder_str = folder_get_identifier(item->folder); - - if (item->path == NULL) { - g_free(folder_str); - return NULL; - } - - id = g_strconcat(folder_str, "/", item->path, NULL); - - return id; -} - -Folder * folder_find_from_name(const gchar * name) -{ - GList *list; - Folder *folder; - - for (list = g_list_first(folder_list); list != NULL; - list = list->next) { - folder = list->data; - if (strcmp(name, folder->name) == 0) - return folder; - } - return NULL; -} - -FolderItem * folder_find_item_from_identifier(const gchar *identifier) -{ - Folder *folder; - gpointer d[2]; - gchar * str; - gchar * p; - gint type; - gchar * name; - gchar * path; - - Xalloca(str, strlen(identifier) + 1, return NULL); - strcpy(str, identifier); - - /* extract box type */ - - p = strchr(str, '/'); - - if (p == NULL) - return NULL; - - *p = '\0'; - - type = folder_get_type_from_string(str); - - str = p + 1; - - /* extract box name */ - - p = strchr(str, '/'); - - if (p == NULL) - return NULL; - - *p = '\0'; - - name = str; - - folder = folder_find_from_name(name); - if (folder == NULL) - return; - - path = p + 1; - - 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]; -} diff --git a/src/folder.h b/src/folder.h deleted file mode 100644 index 7ebfdbc3d..000000000 --- a/src/folder.h +++ /dev/null @@ -1,303 +0,0 @@ -/* - * 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 __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" -#include "prefs_folder_item.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 FOLDER_IS_LOCAL(obj) (FOLDER_TYPE(obj) == F_MH || \ - FOLDER_TYPE(obj) == F_MBOX || \ - FOLDER_TYPE(obj) == F_MAILDIR) - -#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, - gboolean remove_source); - 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); - void (*update_mark) (Folder *folder, - FolderItem *item); - void (*change_flags) (Folder *folder, - FolderItem *item, - MsgInfo *info); - void (*finished_copy) (Folder * folder, FolderItem * item); - void (*finished_remove) (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; - - GList *namespace; /* list of IMAPNameSpace */ -}; - -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; - - /* special flags */ - guint no_sub : 1; /* no child allowed? */ - guint no_select : 1; /* not selectable? */ - guint collapsed : 1; /* collapsed item */ - - gint op_count; - - FolderItem *parent; - - Folder *folder; - - gpointer data; - - PrefsFolderItem * prefs; -}; - -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_item_destroy (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); -void folder_update_op_count (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, - gboolean remove_source); -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); -gchar * folder_item_get_identifier(FolderItem * item); -FolderItem * folder_find_item_from_identifier(const gchar *identifier); - -#endif /* __FOLDER_H__ */ diff --git a/src/foldersel.c b/src/foldersel.c deleted file mode 100644 index 09fda2ac1..000000000 --- a/src/foldersel.c +++ /dev/null @@ -1,307 +0,0 @@ -/* - * 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/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(Folder *cur_folder); -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 gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); - -FolderItem *foldersel_folder_sel(Folder *cur_folder, - 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(cur_folder); - - 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(delete_event), 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(Folder *cur_folder) -{ - 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_NEWS) continue; - if (cur_folder) { - if (cur_folder->type != folder->type) continue; - if (cur_folder->type == F_IMAP) { - if (cur_folder->account != folder->account) - 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 gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - foldersel_cancel(NULL, NULL); - return TRUE; -} - -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 deleted file mode 100644 index e89361ef5..000000000 --- a/src/foldersel.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 __FOLDERSEL_H__ -#define __FOLDERSEL_H__ - -#include <glib.h> -#include <gtk/gtkwindow.h> - -#include "folder.h" - -FolderItem *foldersel_folder_sel(Folder *cur_folder, - const gchar *default_folder); - -#endif /* __FOLDERSEL_H__ */ diff --git a/src/folderview.c b/src/folderview.c deleted file mode 100644 index fa206ed32..000000000 --- a/src/folderview.c +++ /dev/null @@ -1,2220 +0,0 @@ -/* - * 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/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 "grouplistdialog.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 GtkStyle *normal_style; -static GtkStyle *normal_color_style; -static GtkStyle *bold_style; -static GtkStyle *bold_color_style; - -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_tree_expanded (GtkCTree *ctree, - GtkCTreeNode *node, - FolderView *folderview); -static void folderview_tree_collapsed (GtkCTree *ctree, - GtkCTreeNode *node, - 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_update_tree_cb (FolderView *folderview, - guint action, - GtkWidget *widget); - -static void folderview_new_folder_cb (FolderView *folderview, - guint action, - GtkWidget *widget); -static void folderview_new_mbox_folder_cb(FolderView *folderview, - guint action, - GtkWidget *widget); -static void folderview_rename_folder_cb (FolderView *folderview, - guint action, - GtkWidget *widget); -static void folderview_rename_mbox_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 void folderview_scoring_cb(FolderView *folderview, guint action, - GtkWidget *widget); -static void folderview_property_cb(FolderView *folderview, guint action, GtkWidget *widget); - -static GtkItemFactoryEntry folderview_mbox_popup_entries[] = -{ - {N_("/Create _new folder..."), NULL, folderview_new_mbox_folder_cb, 0, NULL}, - {N_("/_Rename folder..."), NULL, folderview_rename_mbox_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}, - {N_("/_Scoring..."), NULL, folderview_scoring_cb, 0, NULL} -}; - -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_("/_Update folder tree"), NULL, folderview_update_tree_cb, 0, NULL}, - {N_("/Remove _mailbox"), NULL, folderview_remove_mailbox_cb, 0, NULL}, - {N_("/---"), NULL, NULL, 0, "<Separator>"}, - {N_("/_Property..."), NULL, folderview_property_cb, 0, NULL}, - {N_("/_Scoring..."), NULL, folderview_scoring_cb, 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_("/_Update folder tree"), NULL, folderview_update_tree_cb, 0, NULL}, - {N_("/Remove _IMAP4 account"), NULL, folderview_rm_imap_server_cb, 0, NULL}, - {N_("/---"), NULL, NULL, 0, "<Separator>"}, - {N_("/_Property..."), NULL, NULL, 0, NULL}, - {N_("/_Scoring..."), NULL, folderview_scoring_cb, 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 account"), NULL, folderview_rm_news_server_cb, 0, NULL}, - {N_("/---"), NULL, NULL, 0, "<Separator>"}, - {N_("/_Property..."), NULL, NULL, 0, NULL}, - {N_("/_Scoring..."), NULL, folderview_scoring_cb, 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; - GtkWidget *mbox_popup; - GtkItemFactory *mail_factory; - GtkItemFactory *news_factory; - GtkItemFactory *imap_factory; - GtkItemFactory *mbox_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); - - 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); - - /* 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); - n_entries = sizeof(folderview_mbox_popup_entries) / - sizeof(folderview_mbox_popup_entries[0]); - mbox_popup = menu_create_items(folderview_mbox_popup_entries, - n_entries, - "<MailFolder>", &mbox_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_after(GTK_OBJECT(ctree), "tree_expand", - GTK_SIGNAL_FUNC(folderview_tree_expanded), - folderview); - gtk_signal_connect_after(GTK_OBJECT(ctree), "tree_collapse", - GTK_SIGNAL_FUNC(folderview_tree_collapsed), - 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); - gtk_signal_connect(GTK_OBJECT(mbox_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; - folderview->mbox_popup = mbox_popup; - folderview->mbox_factory = mbox_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); - - if (!bold_style) { - bold_style = gtk_style_copy(gtk_widget_get_style(ctree)); - bold_style->font = boldfont; - bold_color_style = gtk_style_copy(bold_style); - bold_color_style->fg[GTK_STATE_NORMAL] = folderview->color_new; - } - if (!normal_style) { - normal_style = gtk_style_copy(gtk_widget_get_style(ctree)); - normal_style->font = normalfont; - normal_color_style = gtk_style_copy(normal_style); - normal_color_style->fg[GTK_STATE_NORMAL] = folderview->color_new; - } - -} - -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_set_all(void) -{ - GList *list; - - for (list = folderview_list; list != NULL; list = list->next) - folderview_set((FolderView *)list->data); -} - -void folderview_select(FolderView *folderview, FolderItem *item) -{ - GtkCTree *ctree = GTK_CTREE(folderview->ctree); - GtkCTreeNode *node; - GtkCTreeNode *old_selected = folderview->selected; - - if (!item) return; - - node = gtk_ctree_find_by_row_data(ctree, NULL, item); - if (node) folderview_select_node(folderview, node); - - if (old_selected != node) - folder_update_op_count(); -} - -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); - - gtkut_ctree_expand_parent_all(ctree, node); -} - -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; -} - -static GtkCTreeNode *folderview_find_next_unread(GtkCTree *ctree, - GtkCTreeNode *node) -{ - FolderItem *item; - - if (node) - node = gtkut_ctree_node_next(ctree, node); - else - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - - for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) { - item = gtk_ctree_node_get_row_data(ctree, node); - if (item && item->unread > 0 && item->stype != F_TRASH) - return node; - } - - return NULL; -} - -void folderview_select_next_unread(FolderView *folderview) -{ - GtkCTree *ctree = GTK_CTREE(folderview->ctree); - GtkCTreeNode *node = NULL; - - if ((node = folderview_find_next_unread(ctree, folderview->opened)) - != NULL) { - folderview_select_node(folderview, node); - return; - } - - if (!folderview->opened || - folderview->opened == GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list)) - return; - /* search again from the first node */ - if ((node = folderview_find_next_unread(ctree, NULL)) != NULL) - folderview_select_node(folderview, node); -} - -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; - gchar *rootpath; - - if (FOLDER_IS_LOCAL(folder)) - rootpath = LOCAL_FOLDER(folder)->rootpath; - else if (folder->type == F_IMAP && folder->account && - folder->account->recv_server) - rootpath = folder->account->recv_server; - else - return; - - 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 ..."), - rootpath, G_DIR_SEPARATOR, - item->path); - else - str = g_strdup_printf(_("Scanning folder %s ..."), - 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_tree(Folder *folder) -{ - GtkWidget *window; - - g_return_if_fail(folder != NULL); - - if (!folder->scan_tree) return; - - window = label_window_create(_("Updating folder tree...")); - - folder_set_ui_func(folder, folderview_scan_tree_func, NULL); - folder->scan_tree(folder); - folder_set_ui_func(folder, NULL, NULL); - - folder_write_list(); - folderview_set_all(); - - gtk_widget_destroy(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(); - folderview_set_all(); - - gtk_widget_destroy(window); -} - -void folderview_update_all_node(void) -{ - GList *list; - FolderItem *item; - FolderView *folderview; - GtkCTree *ctree; - GtkCTreeNode *node; - GtkWidget *window; - - window = label_window_create(_("Updating all folders...")); - - for (list = folderview_list; list != NULL; list = list->next) { - folderview = (FolderView *)list->data; - ctree = GTK_CTREE(folderview->ctree); - - for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - node != NULL; node = gtkut_ctree_node_next(ctree, node)) { - item = gtk_ctree_node_get_row_data(ctree, node); - if (!item || !FOLDER_IS_LOCAL(item->folder) || - !item->path) - continue; - folderview_scan_tree_func(item->folder, item, NULL); - folder_item_scan(item); - folderview_update_node(folderview, node); - } - } - - folder_write_list(); - gtk_widget_destroy(window); -} - -static gboolean folderview_search_new_recursive(GtkCTree *ctree, - GtkCTreeNode *node) -{ - FolderItem *item; - - if (node) { - item = gtk_ctree_node_get_row_data(ctree, node); - if (item) { - if (item->new > 0 || - (item->stype == F_QUEUE && item->total > 0)) - return TRUE; - } - node = GTK_CTREE_ROW(node)->children; - } else - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - - while (node) { - if (folderview_search_new_recursive(ctree, node) == TRUE) - return TRUE; - node = GTK_CTREE_ROW(node)->sibling; - } - - return FALSE; -} - -static gboolean folderview_have_new_children(FolderView *folderview, - GtkCTreeNode *node) -{ - GtkCTree *ctree = GTK_CTREE(folderview->ctree); - - if (!node) - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - if (!node) - return FALSE; - - node = GTK_CTREE_ROW(node)->children; - - while (node) { - if (folderview_search_new_recursive(ctree, node) == TRUE) - return TRUE; - node = GTK_CTREE_ROW(node)->sibling; - } - - return FALSE; -} - -static gboolean folderview_search_unread_recursive(GtkCTree *ctree, - GtkCTreeNode *node) -{ - FolderItem *item; - - if (node) { - item = gtk_ctree_node_get_row_data(ctree, node); - if (item) { - if (item->unread > 0 || - (item->stype == F_QUEUE && item->total > 0)) - return TRUE; - } - node = GTK_CTREE_ROW(node)->children; - } else - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - - while (node) { - if (folderview_search_unread_recursive(ctree, node) == TRUE) - return TRUE; - node = GTK_CTREE_ROW(node)->sibling; - } - - return FALSE; -} - -static gboolean folderview_have_unread_children(FolderView *folderview, - GtkCTreeNode *node) -{ - GtkCTree *ctree = GTK_CTREE(folderview->ctree); - - if (!node) - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - if (!node) - return FALSE; - - node = GTK_CTREE_ROW(node)->children; - - while (node) { - if (folderview_search_unread_recursive(ctree, node) == TRUE) - return TRUE; - node = GTK_CTREE_ROW(node)->sibling; - } - - return FALSE; -} - -static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node) -{ - GtkCTree *ctree = GTK_CTREE(folderview->ctree); - GtkStyle *style = NULL; - FolderItem *item; - GdkPixmap *xpm, *openxpm; - GdkBitmap *mask, *openmask; - gchar *name; - gchar *str; - gboolean add_unread_mark; - gboolean use_bold, use_color; - - 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_MBOX: - name = " (mbox)"; 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 (!GTK_CTREE_ROW(node)->expanded && - folderview_have_unread_children(folderview, node)) - add_unread_mark = TRUE; - else - add_unread_mark = FALSE; - - if (item->stype == F_QUEUE && item->total > 0 && - prefs_common.display_folder_unread) { - str = g_strdup_printf("%s (%d%s)", name, item->total, - add_unread_mark ? "+" : ""); - gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING, - xpm, mask, openxpm, openmask, - FALSE, GTK_CTREE_ROW(node)->expanded); - g_free(str); - } else if ((item->unread > 0 || add_unread_mark) && - prefs_common.display_folder_unread) { - - if (item->unread > 0) - str = g_strdup_printf("%s (%d%s)", name, item->unread, - add_unread_mark ? "+" : ""); - else - str = g_strdup_printf("%s (+)", name); - 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, "-"); - } 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; - use_bold = use_color = FALSE; - if (item->stype == F_QUEUE) { - /* highlight queue folder if there are any messages */ - use_bold = use_color = (item->total > 0); - } else { - /* if unread messages exist, print with bold font */ - use_bold = (item->unread > 0) || add_unread_mark; - /* if new messages exist, print with colored letter */ - use_color = - (item->new > 0) || - (add_unread_mark && - folderview_have_new_children(folderview, node)); - } - - gtk_ctree_node_set_foreground(ctree, node, NULL); - - if (use_bold && use_color) - style = bold_color_style; - else if (use_bold) { - style = bold_style; - if (item->op_count > 0) { - gtk_ctree_node_set_foreground(ctree, node, - &folderview->color_op); - } else { - style = bold_style; - } - } - else if (use_color) { - style = normal_color_style; - gtk_ctree_node_set_foreground(ctree, node, - &folderview->color_new); - } - else if (item->op_count > 0) { - style = normal_color_style; - gtk_ctree_node_set_foreground(ctree, node, - &folderview->color_op); - } else { - style = normal_style; - } - - gtk_ctree_node_set_row_style(ctree, node, style); - - if ((node = gtkut_ctree_find_collapsed_parent(ctree, node)) != NULL) - folderview_update_node(folderview, node); -} - -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) -{ - FolderView *folderview = (FolderView *)data; - FolderItem *item; - - if (GTK_CTREE_ROW(node)->children) { - item = gtk_ctree_node_get_row_data(ctree, node); - g_return_if_fail(item != NULL); - - if (!item->collapsed) - gtk_ctree_expand(ctree, node); - else - folderview_update_node(folderview, 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_MBOX: - folderview_new_mbox_folder_cb(folderview, 0, NULL); - break; - case F_MH: - 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_MBOX: - folderview_rename_mbox_folder_cb(folderview, 0, NULL); - case F_MH: - 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)); - menu_set_insensitive_all(GTK_MENU_SHELL(folderview->mbox_popup)); - - if (FOLDER_IS_LOCAL(folder) && item->parent == NULL) { - menu_set_sensitive(folderview->mail_factory, - "/Create new folder...", TRUE); - menu_set_sensitive(folderview->mail_factory, - "/Update folder tree", TRUE); - menu_set_sensitive(folderview->mail_factory, - "/Remove mailbox", TRUE); - } else if (FOLDER_IS_LOCAL(folder) && item->stype != F_NORMAL) { - menu_set_sensitive(folderview->mail_factory, - "/Create new folder...", TRUE); - menu_set_sensitive(folderview->mail_factory, - "/Scoring...", TRUE); - } else if (FOLDER_IS_LOCAL(folder)) { - 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); - menu_set_sensitive(folderview->mail_factory, - "/Scoring...", TRUE); - menu_set_sensitive(folderview->mail_factory, - "/Property...", 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, - "/Update folder tree", TRUE); - menu_set_sensitive(folderview->imap_factory, - "/Remove IMAP4 account", TRUE); - } else if (folder->type == F_IMAP && item->stype != F_NORMAL) { - menu_set_sensitive(folderview->imap_factory, - "/Create new folder...", TRUE); - } else if (folder->type == F_IMAP) { - menu_set_sensitive(folderview->imap_factory, - "/Create new folder...", TRUE); - menu_set_sensitive(folderview->imap_factory, - "/Delete folder", TRUE); - menu_set_sensitive(folderview->imap_factory, - "/Scoring...", 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 account", TRUE); - } else if (folder->type == F_NEWS) { - menu_set_sensitive(folderview->news_factory, - "/Subscribe to newsgroup...", TRUE); - menu_set_sensitive(folderview->news_factory, - "/Remove newsgroup", TRUE); - menu_set_sensitive(folderview->news_factory, - "/Scoring...", TRUE); - } - if (folder->type == F_MBOX && item->parent == NULL) { - menu_set_sensitive(folderview->mbox_factory, - "/Create new folder...", TRUE); - menu_set_sensitive(folderview->mbox_factory, - "/Remove mailbox", TRUE); - } else if (folder->type == F_MBOX && item->stype != F_NORMAL) { - menu_set_sensitive(folderview->mbox_factory, - "/Create new folder...", TRUE); - menu_set_sensitive(folderview->mbox_factory, - "/Scoring...", TRUE); - } else if (folder->type == F_MBOX) { - menu_set_sensitive(folderview->mbox_factory, - "/Create new folder...", TRUE); - menu_set_sensitive(folderview->mbox_factory, - "/Rename folder...", TRUE); - menu_set_sensitive(folderview->mbox_factory, - "/Delete folder", TRUE); - menu_set_sensitive(folderview->mbox_factory, - "/Scoring...", TRUE); - } - - if (FOLDER_IS_LOCAL(folder)) - 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); - else if (folder->type == F_MBOX) - gtk_menu_popup(GTK_MENU(folderview->mbox_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->open_folder == FALSE && - 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 */ - gboolean opened; - 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; - - 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); - - /* ungrab the mouse event */ - if (GTK_WIDGET_HAS_GRAB(ctree)) { - gtk_grab_remove(GTK_WIDGET(ctree)); - if (gdk_pointer_is_grabbed()) - gdk_pointer_ungrab(GDK_CURRENT_TIME); - } - - opened = summary_show(folderview->summaryview, item, FALSE); - - if (!opened) { - gtk_ctree_select(ctree, folderview->opened); - gtkut_ctree_set_focus_row(ctree, folderview->opened); - } else - folderview->opened = row; - - folderview->open_folder = FALSE; - can_select = TRUE; -} - -static void folderview_tree_expanded(GtkCTree *ctree, GtkCTreeNode *node, - FolderView *folderview) -{ - FolderItem *item; - - item = gtk_ctree_node_get_row_data(ctree, node); - g_return_if_fail(item != NULL); - item->collapsed = FALSE; - folderview_update_node(folderview, node); -} - -static void folderview_tree_collapsed(GtkCTree *ctree, GtkCTreeNode *node, - FolderView *folderview) -{ - FolderItem *item; - - item = gtk_ctree_node_get_row_data(ctree, node); - g_return_if_fail(item != NULL); - item->collapsed= TRUE; - folderview_update_node(folderview, node); -} - -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_update_tree_cb(FolderView *folderview, guint action, - GtkWidget *widget) -{ - GtkCTree *ctree = GTK_CTREE(folderview->ctree); - FolderItem *item; - - if (!folderview->selected) return; - - summary_show(folderview->summaryview, NULL, FALSE); - - item = gtk_ctree_node_get_row_data(ctree, folderview->selected); - g_return_if_fail(item != NULL); - g_return_if_fail(item->folder != NULL); - - folderview_update_tree(item->folder); -} - -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_new_mbox_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; - - /* 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_rename_mbox_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 (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) { - alertpanel_error(_("Can't remove the folder `%s'."), - 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; - gchar *p; - - 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:\n" - "(if you want to create a folder to store subfolders,\n" - " append `/' at the end of the name)"), - _("NewFolder")); - if (!new_folder) return; - - if ((p = strchr(new_folder, G_DIR_SEPARATOR)) != NULL && - *(p + 1) != '\0') { - 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); - if (!new_item) { - alertpanel_error(_("Can't create the folder `%s'."), - new_folder); - g_free(new_folder); - return; - } - g_free(new_folder); - - 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 (item->folder->remove_folder(item->folder, item) < 0) { - alertpanel_error(_("Can't remove the folder `%s'."), - item->path); - if (folderview->opened == folderview->selected) - summary_show(folderview->summaryview, - folderview->summaryview->folder_item, - FALSE); - 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_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 account `%s'?"), - item->folder->name); - avalue = alertpanel(_("Delete IMAP4 account"), 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 = grouplist_dialog(item->folder); - 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 account `%s'?"), - item->folder->name); - avalue = alertpanel(_("Delete news account"), 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, *current_item; - GtkCTreeNode *node = NULL; - gboolean acceptable = FALSE; - - 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); - current_item = folderview->summaryview->folder_item; - if (item != NULL && - item->path != NULL && - current_item != NULL && - current_item != item) { - switch (item->folder->type){ - case F_MH: - if (current_item->folder->type == F_MH) - acceptable = TRUE; - break; - case F_IMAP: - if (current_item->folder->account == item->folder->account) - acceptable = TRUE; - break; - default: - } - } - } - - if (acceptable) { - gtk_ctree_select(GTK_CTREE(widget), node); - gdk_drag_status(context, context->suggested_action, time); - } else { - gtk_ctree_select(GTK_CTREE(widget), folderview->opened); - gdk_drag_status(context, 0, time); - } - - return acceptable; -} - -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); -} - -static void folderview_scoring_cb(FolderView *folderview, guint action, - GtkWidget *widget) -{ - 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); - - prefs_scoring_open(item); -} - -static void folderview_property_cb(FolderView *folderview, guint action, GtkWidget *widget) { - 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); - - prefs_folder_item_create(item); -} - -void folderview_set_target_folder_color(gint color_op) { - GList *list; - FolderView *folderview; - - for (list = folderview_list; list != NULL; list = list->next) { - folderview = (FolderView *)list->data; - gtkut_convert_int_to_gdk_color(color_op, &folderview->color_op); - } -} diff --git a/src/folderview.h b/src/folderview.h deleted file mode 100644 index 0cfd8888a..000000000 --- a/src/folderview.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 __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; - GtkWidget *mbox_popup; - - GtkItemFactory *mail_factory; - GtkItemFactory *imap_factory; - GtkItemFactory *news_factory; - GtkItemFactory *mbox_factory; - - GtkCTreeNode *selected; - GtkCTreeNode *opened; - - gboolean open_folder; - - GdkColor color_new; - GdkColor color_op; - - MainWindow *mainwin; - SummaryView *summaryview; -}; - -FolderView *folderview_create (void); -void folderview_init (FolderView *folderview); -void folderview_set (FolderView *folderview); -void folderview_set_all (void); -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_tree (Folder *folder); -void folderview_update_all (void); -void folderview_update_all_node (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); - -void folderview_set_target_folder_color (gint color_op); -#endif /* __FOLDERVIEW_H__ */ diff --git a/src/grouplistdialog.c b/src/grouplistdialog.c deleted file mode 100644 index d60885367..000000000 --- a/src/grouplistdialog.c +++ /dev/null @@ -1,307 +0,0 @@ -/* - * 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/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/gtkclist.h> -#include <gtk/gtkscrolledwindow.h> -#include <gtk/gtkbutton.h> -#include <gtk/gtkhbbox.h> - -#include "intl.h" -#include "grouplistdialog.h" -#include "manage_window.h" -#include "gtkutils.h" -#include "utils.h" -#include "news.h" -#include "folder.h" -#include "alertpanel.h" -#include "recv.h" -#include "socket.h" - -#define GROUPLIST_DIALOG_WIDTH 420 -#define GROUPLIST_DIALOG_HEIGHT 400 - -static gboolean ack; -static gboolean locked; - -static GtkWidget *dialog; -static GtkWidget *entry; -static GtkWidget *clist; -static GtkWidget *status_label; -static GtkWidget *ok_button; -static GSList *group_list; -static Folder *news_folder; - -static void grouplist_dialog_create (void); -static void grouplist_dialog_set_list (void); -static void grouplist_clear (void); -static void grouplist_recv_func (SockInfo *sock, - gint count, - gint read_bytes, - gpointer data); - -static void ok_clicked (GtkWidget *widget, - gpointer data); -static void cancel_clicked (GtkWidget *widget, - gpointer data); -static void refresh_clicked (GtkWidget *widget, - gpointer data); -static void key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void clist_selected (GtkCList *clist, - gint row, - gint column, - GdkEventButton *event, - gpointer user_data); -static void entry_activated (GtkEditable *editable); - -gchar *grouplist_dialog(Folder *folder) -{ - gchar *str; - - if (dialog && GTK_WIDGET_VISIBLE(dialog)) return NULL; - - if (!dialog) - grouplist_dialog_create(); - - news_folder = folder; - - gtk_widget_show(dialog); - gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); - manage_window_set_transient(GTK_WINDOW(dialog)); - GTK_EVENTS_FLUSH(); - - grouplist_dialog_set_list(); - - gtk_main(); - - manage_window_focus_out(dialog, NULL, NULL); - gtk_widget_hide(dialog); - - if (ack) { - str = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); - if (str && *str == '\0') { - g_free(str); - str = NULL; - } - } else - str = NULL; - - grouplist_clear(); - GTK_EVENTS_FLUSH(); - - debug_print("return string = %s\n", str ? str : "(none)"); - return str; -} - -static void grouplist_clear(void) -{ - gtk_clist_clear(GTK_CLIST(clist)); - gtk_entry_set_text(GTK_ENTRY(entry), ""); - slist_free_strings(group_list); - g_slist_free(group_list); -} - -static void grouplist_dialog_create(void) -{ - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *msg_label; - GtkWidget *confirm_area; - GtkWidget *cancel_button; - GtkWidget *refresh_button; - GtkWidget *scrolledwin; - - dialog = gtk_dialog_new(); - gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, TRUE, FALSE); - gtk_widget_set_usize(dialog, - GROUPLIST_DIALOG_WIDTH, GROUPLIST_DIALOG_HEIGHT); - 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_window_set_title(GTK_WINDOW(dialog), _("Subscribe to newsgroup")); - 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(_("Input subscribing newsgroup:")); - gtk_box_pack_start(GTK_BOX(hbox), msg_label, FALSE, FALSE, 0); - - 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); - - scrolledwin = gtk_scrolled_window_new(NULL, NULL); - gtk_box_pack_start(GTK_BOX (vbox), scrolledwin, TRUE, TRUE, 0); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolledwin), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - - clist = gtk_clist_new(1); - gtk_container_add(GTK_CONTAINER(scrolledwin), clist); - gtk_clist_set_column_width(GTK_CLIST(clist), 0, 80); - gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_BROWSE); - GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[0].button, - GTK_CAN_FOCUS); - gtk_signal_connect(GTK_OBJECT(clist), "select_row", - GTK_SIGNAL_FUNC(clist_selected), NULL); - - hbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - - status_label = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(hbox), status_label, FALSE, FALSE, 0); - - gtkut_button_set_create(&confirm_area, - &ok_button, _("OK"), - &cancel_button, _("Cancel"), - &refresh_button, _("Refresh")); - 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_signal_connect(GTK_OBJECT(refresh_button), "clicked", - GTK_SIGNAL_FUNC(refresh_clicked), NULL); - - gtk_widget_show_all(GTK_DIALOG(dialog)->vbox); -} - -static void grouplist_dialog_set_list(void) -{ - GSList *cur; - gint row; - - if (locked) return; - locked = TRUE; - - recv_set_ui_func(grouplist_recv_func, NULL); - group_list = news_get_group_list(news_folder); - recv_set_ui_func(NULL, NULL); - if (group_list == NULL) { - alertpanel_error(_("Can't retrieve newsgroup list.")); - locked = FALSE; - return; - } - - gtk_clist_freeze(GTK_CLIST(clist)); - for (cur = group_list; cur != NULL ; cur = cur->next) { - row = gtk_clist_append(GTK_CLIST(clist), - (gchar **)&(cur->data)); - gtk_clist_set_row_data(GTK_CLIST(clist), row, cur->data); - } - gtk_clist_thaw(GTK_CLIST(clist)); - - gtk_widget_grab_focus(ok_button); - gtk_widget_grab_focus(clist); - - gtk_label_set_text(GTK_LABEL(status_label), _("Done.")); - - locked = FALSE; -} - -static void grouplist_recv_func(SockInfo *sock, gint count, gint read_bytes, - gpointer data) -{ - gchar buf[BUFFSIZE]; - - g_snprintf(buf, sizeof(buf), - _("%d newsgroups received (%s read)"), - count, to_human_readable(read_bytes)); - gtk_label_set_text(GTK_LABEL(status_label), buf); - GTK_EVENTS_FLUSH(); -} - -static void ok_clicked(GtkWidget *widget, gpointer data) -{ - ack = TRUE; - if (gtk_main_level() > 1) - gtk_main_quit(); -} - -static void cancel_clicked(GtkWidget *widget, gpointer data) -{ - ack = FALSE; - if (gtk_main_level() > 1) - gtk_main_quit(); -} - -static void refresh_clicked(GtkWidget *widget, gpointer data) -{ - if (locked) return; - - grouplist_clear(); - news_remove_group_list(news_folder); - grouplist_dialog_set_list(); -} - -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) -{ - if (event && event->keyval == GDK_Escape) - cancel_clicked(NULL, NULL); -} - -static void clist_selected(GtkCList *clist, gint row, gint column, - GdkEventButton *event, gpointer user_data) -{ - gchar *group; - - group = (gchar *)gtk_clist_get_row_data(GTK_CLIST(clist), row); - gtk_entry_set_text(GTK_ENTRY(entry), group ? group : ""); -} - -static void entry_activated(GtkEditable *editable) -{ - ok_clicked(NULL, NULL); -} diff --git a/src/grouplistdialog.h b/src/grouplistdialog.h deleted file mode 100644 index 6cd0bcb7c..000000000 --- a/src/grouplistdialog.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 __GROUPLISTDIALOG_H__ -#define __GROUPLISTDIALOG_H__ - -#include <glib.h> - -#include "folder.h" - -gchar *grouplist_dialog (Folder *folder); - -#endif /* __GROUPLISTDIALOG_H__ */ diff --git a/src/gtksctree.c b/src/gtksctree.c deleted file mode 100644 index e1713ba99..000000000 --- a/src/gtksctree.c +++ /dev/null @@ -1,538 +0,0 @@ -/* - * 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 deleted file mode 100644 index 977c89f91..000000000 --- a/src/gtksctree.h +++ /dev/null @@ -1,64 +0,0 @@ -/* 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 deleted file mode 100644 index fc32d7eb6..000000000 --- a/src/gtkshruler.c +++ /dev/null @@ -1,210 +0,0 @@ -/* 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 deleted file mode 100644 index df7afb50b..000000000 --- a/src/gtkshruler.h +++ /dev/null @@ -1,63 +0,0 @@ -/* 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/gtkspell.c b/src/gtkspell.c deleted file mode 100644 index 3b9517ebc..000000000 --- a/src/gtkspell.c +++ /dev/null @@ -1,809 +0,0 @@ -/* gtkspell - a spell-checking addon for GtkText - * Copyright (c) 2000 Evan Martin. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 - */ -/* - Stuphead: (C) 2000,2001 Grigroy Bakunov, Sergey Pinaev - */ - -/* - * Adapted for Sylpheed (Claws) (c) 2001 by Hiroyuki Yamamoto & - * The Sylpheed Claws Team. - */ - -#if defined(HAVE_CONFIG_H) -#include "config.h" -#endif - -#include "intl.h" - -#include <gtk/gtk.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <unistd.h> -#include <stdio.h> -#include <signal.h> -#include <ctype.h> -#include <string.h> -#include <stdlib.h> -#include <errno.h> -#include <stdio.h> -#include <sys/time.h> -#include <fcntl.h> -#include <time.h> -#include <prefs_common.h> -#include <utils.h> - -#include <dirent.h> - -#include <gtk/gtkoptionmenu.h> -#include <gtk/gtkmenu.h> -#include <gtk/gtkmenuitem.h> - -#include "gtkxtext.h" - -#include "gtkspell.h" - -/* size of the text buffer used in various word-processing routines. */ -#define BUFSIZE 1024 - -/* number of suggestions to display on each menu. */ -#define MENUCOUNT 15 - -/* because we keep only one copy of the spell program running, - * all ispell-related variables can be static. - */ -volatile pid_t spell_pid = -1; -static int sp_fd_write[2], sp_fd_read[2]; -static int signal_set_up = 0; - -static GdkColor highlight = { 0, 255 * 256, 0, 0 }; - -static void entry_insert_cb(GtkXText *gtktext, - gchar *newtext, guint len, guint *ppos, gpointer d); -static void set_up_signal(); - -int gtkspell_running() -{ - return (spell_pid > 0); -} - -/* functions to interface with pipe */ -static void writetext(unsigned char *text_ccc) -{ - write(sp_fd_write[1], text_ccc, strlen(text_ccc)); -} - -static int readpipe(unsigned char *buf, int bufsize) -{ - int len; - len = read(sp_fd_read[0], buf, bufsize - 1); - if (len < 0) { - debug_print(_("*** readpipe: read: %s\n"), strerror(errno)); - return -1; - } else if (len == 0) { - debug_print(_("*** readpipe: pipe closed.\n")); - return -1; - } else if (len == bufsize - 1) { - debug_print(_("*** readpipe: buffer overflowed?\n")); - } - - buf[len] = 0; - return len; -} - -static int readline(unsigned char *buf) -{ - return readpipe(buf, BUFSIZE); -} - -static int readresponse(unsigned char *buf) -{ - int len; - len = readpipe(buf, BUFSIZE); - - /* all ispell responses of any reasonable length should end in \n\n. - * depending on the speed of the spell checker, this may require more - * reading. */ - if (len >= 2 && (buf[len - 1] != '\n' || buf[len - 2] != '\n')) { - len += readpipe(buf + len, BUFSIZE - len); - } - - /* now we can remove all of the the trailing newlines. */ - while (len > 0 && buf[len - 1] == '\n') - buf[--len] = 0; - - return len; -} - -void gtkspell_stop() -{ - if (gtkspell_running()) { - kill(spell_pid, SIGTERM); - debug_print(_("*** Kill pid[%i] returned: %s\n"), spell_pid, strerror(errno)); - while (spell_pid != -1); - } -} - -static int poller(int buffer) -{ - int len; - fd_set rfds; - struct timeval tv; - int retval; - - FD_ZERO(&rfds); - FD_SET(buffer, &rfds); - memset(&tv, 0, sizeof(tv)); - tv.tv_sec = 2; - tv.tv_usec = 0; - return select(buffer + 1, &rfds, NULL, NULL, &tv); -} - -int gtkspell_start(unsigned char *path, char * args[]) -{ - int fd_error[2]; - FILE *sav_stdin, *sav_stdout, *sav_stderr; - char buf[BUFSIZE]; - int retncode; - - if (gtkspell_running()) { - debug_print(_("*** gtkspell_start called while already running.\n")); - gtkspell_stop(); - } - - if (!signal_set_up) { - set_up_signal(); - signal_set_up = 1; - } - - pipe(sp_fd_write); - pipe(sp_fd_read); - pipe(fd_error); - - spell_pid = fork(); - if (spell_pid < 0) { - debug_print(_("*** fork: %s\n"), strerror(errno)); - return -1; - } else if (spell_pid == 0) { - sav_stdin = fdopen(dup(fileno(stdin)), "r"); - sav_stdout = fdopen(dup(fileno(stdout)), "w"); - sav_stderr = fdopen(dup(fileno(stderr)), "w"); - dup2(sp_fd_write[0], 0); - dup2(sp_fd_read[1], 1); - dup2(fd_error[1], 2); - close(sp_fd_read[0]); - close(fd_error[0]); - close(sp_fd_write[1]); - - if (path == NULL) { - if (execvp(args[0], args) < 0) - //DONT call debug_print here, because stdout is closed at this moment - fprintf(sav_stderr, _("*** execvp('%s'): %s\n"), args[0], strerror(errno)); - } else { - if (execv(path, args) < 0) - //DONT call debug_print here, because stdout is closed at this moment - fprintf(sav_stderr, _("*** execv('%s'): %s\n"), path, strerror(errno)); - } - /* if we get here, we failed. - * send some text on the pipe to indicate status. - */ - write(sp_fd_read[1], "!", 1); - - _exit(0); - } else { - retncode = poller(sp_fd_read[1]); - if (retncode < 0) { - debug_print(_("*** Spell comand failed: %s.\n"), strerror(errno)); - gtkspell_stop(); - return -1; - } - readline(buf); - /* ispell should print something like this: - * @(#) International Ispell Version 3.1.20 10/10/95 - * if it doesn't, it's an error. */ - if (buf[0] != '@') { - debug_print(_("*** ispell didnt print '@'\n")); - gtkspell_stop(); - return -1; - } - } - - /* put ispell into terse mode. - * this makes it not respond on correctly spelled words. */ - sprintf(buf, "!\n"); - writetext(buf); - return 0; -} - -static GList* misspelled_suggest(unsigned char *word) -{ - unsigned char buf[BUFSIZE]; - unsigned char *newword; - GList *l = NULL; - int count; - sprintf(buf, "^%s\n", word); /* guard against ispell control chars */ - writetext(buf); - readresponse(buf); - switch (buf[0]) { /* first char is ispell command. */ - case 0: /* no response: word is ok. */ - return NULL; - case 10: /* just enter word is ok. */ - return NULL; - case '&': /* misspelled, with suggestions */ - /* & <orig> <count> <ofs>: <miss>, <miss>, <guess>, ... */ - strtok(buf, " "); /* & */ - newword = strtok(NULL, " "); /* orig */ - l = g_list_append(l, g_strdup(newword)); - newword = strtok(NULL, " "); /* count */ - count = atoi(newword); - strtok(NULL, " "); /* ofs: */ - - while ((newword = strtok(NULL, ",")) != NULL) { - int len = strlen(newword); - if (newword[len - 1] == ' ' || newword[len - 1] == '\n') - newword[len - 1] = 0; - if (count == 0) { - g_list_append(l, NULL); /* signal the "suggestions" */ - } - /* add it to the list, skipping the initial space. */ - l = g_list_append(l, - g_strdup(newword[0] == ' ' ? newword + 1 : newword)); - - count--; - } - return l; - case '?': /* ispell is guessing. */ - case '#': /* misspelled, no suggestions */ - /* # <orig> <ofs> */ - strtok(buf, " "); /* & */ - newword = strtok(NULL, " "); /* orig */ - l = g_list_append(l, g_strdup(newword)); - return l; - default: - debug_print(_("*** Unsupported spell command '%c'.\n"), buf[0]); - } - return NULL; -} - -static int misspelled_test(unsigned char *word) -{ - unsigned char buf[BUFSIZE]; - sprintf(buf, "^%s\n", word); /* guard against ispell control chars */ - writetext(buf); - readresponse(buf); - - if (buf[0] == 0) { - return 0; - } else if (buf[0] == '&' || buf[0] == '#' || buf[0] == '?') { - return 1; - } - - debug_print(_("*** Unsupported spell command '%c'.\n"), buf[0]); - - return -1; -} - -static gboolean iswordsep(unsigned char c) -{ - return !isalpha(c) && c != '\''; -} - -static guchar get_text_index_whar(GtkXText *gtktext, int pos) -{ - guchar a; - gchar *text; - text = gtk_editable_get_chars(GTK_EDITABLE(gtktext), pos, pos + 1); - if (text == NULL) return 0; - a = (guchar) * text; - g_free(text); - return a; -} - -static gboolean get_word_from_pos(GtkXText *gtktext, int pos, unsigned char* buf, - int *pstart, int *pend) -{ - gint start, end; - if (iswordsep(get_text_index_whar(gtktext, pos))) return FALSE; - - for (start = pos; start >= 0; --start) { - if (iswordsep(get_text_index_whar(gtktext, start))) break; - } - start++; - - for (end = pos; end < gtk_xtext_get_length(gtktext); end++) { - if (iswordsep(get_text_index_whar(gtktext, end))) break; - } - - if (buf) { - for (pos = start; pos < end; pos++) buf[pos - start] = get_text_index_whar(gtktext, pos); - buf[pos - start] = 0; - } - - if (pstart) *pstart = start; - if (pend) *pend = end; - - return TRUE; -} - -static gboolean get_curword(GtkXText *gtktext, unsigned char* buf, - int *pstart, int *pend) -{ - int pos = gtk_editable_get_position(GTK_EDITABLE(gtktext)); - return get_word_from_pos(gtktext, pos, buf, pstart, pend); -} - -static void change_color(GtkXText *gtktext, int start, int end, GdkColor *color) -{ - char *newtext; - if (start >= end) { - return ; - }; - gtk_xtext_freeze(gtktext); - newtext = gtk_editable_get_chars(GTK_EDITABLE(gtktext), start, end); -// if (prefs_common.auto_makeispell) { - gtk_signal_handler_block_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(entry_insert_cb), NULL); -// } - gtk_xtext_set_point(gtktext, start); - gtk_xtext_forward_delete(gtktext, end - start); - - if (newtext && end - start > 0) - gtk_xtext_insert(gtktext, NULL, color, NULL, newtext, end - start); - // if (prefs_common.auto_makeispell) { - gtk_signal_handler_unblock_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(entry_insert_cb), NULL); - // } - gtk_xtext_thaw(gtktext); -} - -static gboolean check_at(GtkXText *gtktext, int from_pos) -{ - int start, end; - unsigned char buf[BUFSIZE]; - if (from_pos < 0) return FALSE; - if (!get_word_from_pos(gtktext, from_pos, buf, &start, &end)) { - return FALSE; - }; - if (misspelled_test(buf)) { - if (highlight.pixel == 0) { - /* add an entry for the highlight in the color map. */ - GdkColormap *gc = gtk_widget_get_colormap(GTK_WIDGET(gtktext)); - gdk_colormap_alloc_color(gc, &highlight, FALSE, TRUE); - ; - } - change_color(gtktext, start, end, &highlight); - return TRUE; - } else { - change_color(gtktext, start, end, - &(GTK_WIDGET(gtktext)->style->fg[0])); - return FALSE; - } -} - -void gtkspell_check_all(GtkXText *gtktext) -{ - guint origpos; - guint pos = 0; - guint len; - float adj_value; - - if (!gtkspell_running()) return ; - - len = gtk_xtext_get_length(gtktext); - - adj_value = gtktext->vadj->value; - gtk_xtext_freeze(gtktext); - origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext)); - while (pos < len) { - while (pos < len && iswordsep(get_text_index_whar(gtktext, pos))) - pos++; - while (pos < len && !iswordsep(get_text_index_whar(gtktext, pos))) - pos++; - if (pos > 0) - check_at(gtktext, pos - 1); - } - gtk_xtext_thaw(gtktext); - gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos); - gtk_editable_select_region(GTK_EDITABLE(gtktext), origpos, origpos); - -} - -static void entry_insert_cb(GtkXText *gtktext, - gchar *newtext, guint len, guint *ppos, gpointer d) -{ - int origpos; - if (!gtkspell_running()) return ; - - gtk_signal_handler_block_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(entry_insert_cb), - NULL); - gtk_xtext_insert(GTK_XTEXT(gtktext), NULL, - &(GTK_WIDGET(gtktext)->style->fg[0]), NULL, newtext, len); - - gtk_signal_handler_unblock_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(entry_insert_cb), - NULL); - gtk_signal_emit_stop_by_name(GTK_OBJECT(gtktext), "insert-text"); - *ppos += len; - origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext)); - - if (iswordsep(newtext[0])) { - /* did we just end a word? */ - if (*ppos >= 2) check_at(gtktext, *ppos - 2); - - /* did we just split a word? */ - if (*ppos < gtk_xtext_get_length(gtktext)) - check_at(gtktext, *ppos + 1); - } else { - /* check as they type, *except* if they're typing at the end (the most - * common case. - */ - if (*ppos < gtk_xtext_get_length(gtktext) && - !iswordsep(get_text_index_whar(gtktext, *ppos))) - check_at(gtktext, *ppos - 1); - } - - gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos); -} - -static void entry_delete_cb(GtkXText *gtktext, - gint start, gint end, gpointer d) -{ - int origpos; - if (!gtkspell_running()) return ; - - origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext)); - check_at(gtktext, start - 1); - gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos); - gtk_editable_select_region(GTK_EDITABLE(gtktext), origpos, origpos); - /* this is to *UNDO* the selection, in case they were holding shift - * while hitting backspace. */ -} - -static void replace_word(GtkWidget *w, gpointer d) -{ - int start, end; - unsigned char *newword; - unsigned char buf[BUFSIZE]; - gtk_xtext_freeze(GTK_XTEXT(d)); - - gtk_label_get(GTK_LABEL(GTK_BIN(w)->child), (gchar**) &newword); - get_curword(GTK_XTEXT(d), buf, &start, &end); - - gtk_xtext_set_point(GTK_XTEXT(d), end); - gtk_xtext_backward_delete(GTK_XTEXT(d), end - start); - gtk_xtext_insert(GTK_XTEXT(d), NULL, NULL, NULL, newword, strlen(newword)); - - gtk_xtext_thaw(GTK_XTEXT(d)); -} - -static GtkMenu *make_menu(GList *l, GtkXText *gtktext) -{ - GtkWidget *menu, *item; - unsigned char *caption; - menu = gtk_menu_new(); - - caption = g_strdup_printf(_("Not in dictionary: %s"), (unsigned char*)l->data); - item = gtk_menu_item_new_with_label(caption); - /* I'd like to make it so this item is never selectable, like - * the menu titles in the GNOME panel... unfortunately, the GNOME - * panel creates their own custom widget to do this! */ - gtk_widget_show(item); - gtk_menu_append(GTK_MENU(menu), item); - - item = gtk_menu_item_new(); - gtk_widget_show(item); - gtk_menu_append(GTK_MENU(menu), item); - - l = l->next; - if (l == NULL) { - item = gtk_menu_item_new_with_label(_("(no suggestions)")); - gtk_widget_show(item); - gtk_menu_append(GTK_MENU(menu), item); - } else { - GtkWidget *curmenu = menu; - int count = 0; - do { - if (l->data == NULL && l->next != NULL) { - count = 0; - curmenu = gtk_menu_new(); - item = gtk_menu_item_new_with_label(_("Others...")); - gtk_widget_show(item); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), curmenu); - gtk_menu_append(GTK_MENU(curmenu), item); - l = l->next; - } else if (count > MENUCOUNT) { - count -= MENUCOUNT; - item = gtk_menu_item_new_with_label(_("More...")); - gtk_widget_show(item); - gtk_menu_append(GTK_MENU(curmenu), item); - curmenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), curmenu); - } - item = gtk_menu_item_new_with_label((unsigned char*)l->data); - gtk_signal_connect(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(replace_word), gtktext); - gtk_widget_show(item); - gtk_menu_append(GTK_MENU(curmenu), item); - count++; - } while ((l = l->next) != NULL); - } - return GTK_MENU(menu); -} - -static void popup_menu(GtkXText *gtktext, GdkEventButton *eb) -{ - unsigned char buf[BUFSIZE]; - GList *list, *l; - if (!get_curword(gtktext, buf, NULL, NULL)) return ; - if (buf == NULL) return ; - list = misspelled_suggest(buf); - if (list != NULL) { - gtk_menu_popup(make_menu(list, gtktext), NULL, NULL, NULL, NULL, - eb->button, eb->time); - for (l = list; l != NULL; l = l->next) - g_free(l->data); - g_list_free(list); - } -} - -/* ok, this is pretty wacky: - * we need to let the right-mouse-click go through, so it moves the cursor, - * but we *can't* let it go through, because GtkText interprets rightclicks as - * weird selection modifiers. - * - * so what do we do? forge rightclicks as leftclicks, then popup the menu. - * HACK HACK HACK. - */ -static gint button_press_intercept_cb(GtkXText *gtktext, GdkEvent *e, gpointer d) -{ - GdkEventButton *eb; - gboolean retval; - - if (!gtkspell_running()) return FALSE; - - if (e->type != GDK_BUTTON_PRESS) return FALSE; - eb = (GdkEventButton*) e; - - if (eb->button != 3) return FALSE; - - /* forge the leftclick */ - eb->button = 1; - - gtk_signal_handler_block_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(button_press_intercept_cb), d); - gtk_signal_emit_by_name(GTK_OBJECT(gtktext), "button-press-event", - e, &retval); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(button_press_intercept_cb), d); - gtk_signal_emit_stop_by_name(GTK_OBJECT(gtktext), "button-press-event"); - - /* now do the menu wackiness */ - popup_menu(gtktext, eb); - return TRUE; -} - -void gtkspell_uncheck_all(GtkXText *gtktext) -{ - int origpos; - unsigned char *text; - float adj_value; - adj_value = gtktext->vadj->value; - gtk_xtext_freeze(gtktext); - origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext)); - text = gtk_editable_get_chars(GTK_EDITABLE(gtktext), 0, -1); - gtk_xtext_set_point(gtktext, 0); - gtk_xtext_forward_delete(gtktext, gtk_xtext_get_length(gtktext)); - gtk_xtext_insert(gtktext, NULL, NULL, NULL, text, strlen(text)); - gtk_xtext_thaw(gtktext); - - gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos); - gtk_adjustment_set_value(gtktext->vadj, adj_value); -} - -void gtkspell_attach(GtkXText *gtktext) -{ -// if (prefs_common.auto_makeispell) { - gtk_signal_connect(GTK_OBJECT(gtktext), "insert-text", - GTK_SIGNAL_FUNC(entry_insert_cb), NULL); - gtk_signal_connect_after(GTK_OBJECT(gtktext), "delete-text", - GTK_SIGNAL_FUNC(entry_delete_cb), NULL); -// }; - gtk_signal_connect(GTK_OBJECT(gtktext), "button-press-event", - GTK_SIGNAL_FUNC(button_press_intercept_cb), NULL); - -} - -void gtkspell_detach(GtkXText *gtktext) -{ -// if (prefs_common.auto_makeispell) { - gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(entry_insert_cb), NULL); - gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(entry_delete_cb), NULL); -// }; - gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext), - GTK_SIGNAL_FUNC(button_press_intercept_cb), NULL); - - gtkspell_uncheck_all(gtktext); -} - -static void sigchld(int param) -{ - int retstat, retval; - - debug_print(_("*** SIGCHLD called. (ispell pid: %i)\n"), spell_pid); - while ((retval = waitpid( -1, &retstat, WNOHANG)) > 0) { - if (retval == spell_pid) { - debug_print(_("*** SIGCHLD called for ispell. (pid: %i)\n"), spell_pid); - spell_pid = -1; - } - } -} - -static void set_up_signal() -{ - /* RETSIGTYPE is found in autoconf's config.h */ -#ifdef RETSIGTYPE - typedef RETSIGTYPE (*sighandler)(int); - signal(SIGCHLD, (sighandler)sigchld); -#else - /* otherwise, just hope it works */ - signal(SIGCHLD, sigchld); -#endif -} - -/*** Sylpheed (Claws) ***/ - -static GSList *create_empty_dictionary_list(void) -{ - GSList *list = NULL; - Dictionary *dict; - - dict = g_new0(Dictionary, 1); - dict->name = g_strdup(_("None")); - dict->path = NULL; - return g_slist_append(list, dict); -} - -/* gtkspell_get_dictionary_list() - returns list of dictionary names and the full - * path of file names. */ -GSList *gtkspell_get_dictionary_list(const gchar *ispell_path) -{ - GSList *list; - gchar *dict_path, *tmp, *prevdir; - GSList *walk; - Dictionary *dict; - DIR *dir; - struct dirent *ent; - - list = NULL; - - /* ASSUME: ispell_path is full path */ - dict_path = strstr(ispell_path + 1, G_DIR_SEPARATOR_S); - tmp = g_strndup(ispell_path, dict_path - ispell_path); - - /* ASSUME: ispell dictionaries in PREFIX/lib/ispell */ - dict_path = g_strconcat(tmp, G_DIR_SEPARATOR_S, "lib", G_DIR_SEPARATOR_S, "ispell", NULL); - g_free(tmp); - -#ifdef USE_THREADS -#warning TODO: no directory change -#endif - - prevdir = g_get_current_dir(); - if (chdir(dict_path) <0) { - FILE_OP_ERROR(dict_path, "chdir"); - g_free(prevdir); - g_free(dict_path); - return create_empty_dictionary_list(); - } - - debug_print(_("Checking for dictionaries in %s\n"), dict_path); - - if (NULL != (dir = opendir("."))) { - while (NULL != (ent = readdir(dir))) { - /* search for hash table */ - if (NULL != (tmp = strstr(ent->d_name, ".hash"))) { - dict = g_new0(Dictionary, 1); - dict->name = g_strndup(ent->d_name, tmp - ent->d_name); - dict->path = g_strconcat(dict_path, G_DIR_SEPARATOR_S, ent->d_name, NULL); - debug_print(_("Found dictionary %s\n"), dict->path); - list = g_slist_append(list, dict); - } - } - closedir(dir); - } - else { - FILE_OP_ERROR(dict_path, "opendir"); - debug_print(_("No dictionary found\n")); - list = create_empty_dictionary_list(); - } - chdir(prevdir); - g_free(dict_path); - g_free(prevdir); - return list; -} - -void gtkspell_free_dictionary_list(GSList *list) -{ - Dictionary *dict; - GSList *walk; - for (walk = list; walk != NULL; walk = g_slist_next(walk)) - if (walk->data) { - dict = (Dictionary *) walk->data; - if (dict->name) - g_free(dict->name); - if (dict->path) - g_free(dict->path); - g_free(dict); - } - g_slist_free(list); -} - -static void dictionary_option_menu_item_data_destroy(gpointer data) -{ - gchar *str = (gchar *) data; - - if (str) - g_free(str); -} - -GtkWidget *gtkspell_dictionary_option_menu_new(const gchar *ispell_path) -{ - GSList *dict_list, *tmp; - GtkWidget *item; - GtkWidget *menu; - Dictionary *dict; - - dict_list = gtkspell_get_dictionary_list(ispell_path); - g_return_val_if_fail(dict_list, NULL); - - menu = gtk_menu_new(); - - for (tmp = dict_list; tmp != NULL; tmp = g_slist_next(tmp)) { - dict = (Dictionary *) tmp->data; - item = gtk_menu_item_new_with_label(dict->name); - if (dict->path) - gtk_object_set_data_full(GTK_OBJECT(item), "full_path", - g_strdup(dict->path), - dictionary_option_menu_item_data_destroy); - gtk_menu_append(GTK_MENU(menu), item); - gtk_widget_show(item); - } - - gtk_widget_show(menu); - - gtkspell_free_dictionary_list(dict_list); - - return menu; -} - -gchar *gtkspell_get_dictionary_menu_active_item(GtkWidget *menu) -{ - GtkWidget *menuitem; - gchar *result; - - g_return_val_if_fail(GTK_IS_MENU(menu), NULL); - menuitem = gtk_menu_get_active(GTK_MENU(menu)); - - result = gtk_object_get_data(GTK_OBJECT(menuitem), "full_path"); - g_return_val_if_fail(result, NULL); - - return g_strdup(result); -} - diff --git a/src/gtkspell.h b/src/gtkspell.h deleted file mode 100644 index 03214187a..000000000 --- a/src/gtkspell.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - Stuphead: (C) 2000,2001 Grigroy Bakunov, Sergey Pinaev - */ -/* gtkspell - a spell-checking addon for GtkText - * Copyright (c) 2000 Evan Martin. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 - */ - -/* - * Adapted by the Sylpheed Claws Team. - */ - -#ifndef __gtkspell_h__ -#define __gtkspell_h__ - -#include "gtkxtext.h" - -typedef struct _Dictionary { - gchar *name; - gchar *path; -} Dictionary; - -int gtkspell_start(unsigned char *path, char * args[]); - -void gtkspell_attach(GtkXText *text_ccc); - -void gtkspell_detach(GtkXText *gtktext); - -void gtkspell_check_all(GtkXText *gtktext); - -void gtkspell_uncheck_all(GtkXText *gtktext); - -GSList *gtkspell_get_dictionary_list(const char *ispell_path); - -void gtkspell_free_dictionary_list(GSList *list); - -GtkWidget *gtkspell_dictionary_option_menu_new(const gchar *ispell_path); -gchar *gtkspell_get_dictionary_menu_active_item(GtkWidget *menu); - -#endif /* __gtkspell_h__ */ diff --git a/src/gtkstext.c b/src/gtkstext.c deleted file mode 100644 index 0129105ce..000000000 --- a/src/gtkstext.c +++ /dev/null @@ -1,6220 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * 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. - */ - -/* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -/* - * Modified by the Sylpheed Team and others 2001. Interesting - * parts are marked using comment block following this one. - * This modification is based on the GtkSText of GTK 1.2.8 - */ - -/* SYLPHEED: - * comment here - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <ctype.h> -#include <string.h> -#include <gdk/gdkkeysyms.h> -#include <gdk/gdki18n.h> -#include <gtk/gtkmain.h> -#include <gtk/gtkselection.h> -#include <gtk/gtksignal.h> -#include <gtkstext.h> - -/* SYLPHEED: - * compile time settings - */ -#define INITIAL_BUFFER_SIZE 1024 -#define INITIAL_LINE_CACHE_SIZE 256 -#define MIN_GAP_SIZE 256 - -/* SYLPHEED: - * intending to introduce a paragraph delimiter '\r' because - * '\r' are being stripped by sylpheed - */ -#define LINE_DELIM '\n' -#define MIN_TEXT_WIDTH_LINES 20 -#define MIN_TEXT_HEIGHT_LINES 10 -#define TEXT_BORDER_ROOM 1 -#define LINE_WRAP_ROOM 8 /* The bitmaps are 6 wide. */ -#define DEFAULT_TAB_STOP_WIDTH 4 -#define SCROLL_PIXELS 5 -#define KEY_SCROLL_PIXELS 10 -#define SCROLL_TIME 100 -#define FREEZE_LENGTH 1024 - - -/* Freeze text when inserting or deleting more than this many characters */ - -/* SYLPHEED: - * could also mark paragraphs using marks, but don't know anything yet - * about consistency when characters are removed - */ -#define SET_PROPERTY_MARK(m, p, o) do { \ - (m)->property = (p); \ - (m)->offset = (o); \ - } while (0) -#define MARK_CURRENT_PROPERTY(mark) ((TextProperty*)(mark)->property->data) -#define MARK_NEXT_PROPERTY(mark) ((TextProperty*)(mark)->property->next->data) -#define MARK_PREV_PROPERTY(mark) ((TextProperty*)((mark)->property->prev ? \ - (mark)->property->prev->data \ - : NULL)) -#define MARK_PREV_LIST_PTR(mark) ((mark)->property->prev) -#define MARK_LIST_PTR(mark) ((mark)->property) -#define MARK_NEXT_LIST_PTR(mark) ((mark)->property->next) -#define MARK_OFFSET(mark) ((mark)->offset) -#define MARK_PROPERTY_LENGTH(mark) (MARK_CURRENT_PROPERTY(mark)->length) - - -#define MARK_CURRENT_FONT(text, mark) \ - ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_FONT) ? \ - MARK_CURRENT_PROPERTY(mark)->font->gdk_font : \ - GTK_WIDGET (text)->style->font) -#define MARK_CURRENT_FORE(text, mark) \ - ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_FOREGROUND) ? \ - &MARK_CURRENT_PROPERTY(mark)->fore_color : \ - &((GtkWidget *)text)->style->text[((GtkWidget *)text)->state]) -#define MARK_CURRENT_BACK(text, mark) \ - ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_BACKGROUND) ? \ - &MARK_CURRENT_PROPERTY(mark)->back_color : \ - &((GtkWidget *)text)->style->base[((GtkWidget *)text)->state]) -#define MARK_CURRENT_TEXT_FONT(text, mark) \ - ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_FONT) ? \ - MARK_CURRENT_PROPERTY(mark)->font : \ - text->current_font) - -#define TEXT_LENGTH(t) ((t)->text_end - (t)->gap_size) -#define FONT_HEIGHT(f) ((f)->ascent + (f)->descent) -#define LINE_HEIGHT(l) ((l).font_ascent + (l).font_descent) -#define LINE_CONTAINS(l, i) ((l).start.index <= (i) && (l).end.index >= (i)) -#define LINE_STARTS_AT(l, i) ((l).start.index == (i)) -#define LINE_START_PIXEL(l) ((l).tab_cont.pixel_offset) -#define LAST_INDEX(t, m) ((m).index == TEXT_LENGTH(t)) -#define CACHE_DATA(c) (*(LineParams*)(c)->data) - -enum { - ARG_0, - ARG_HADJUSTMENT, - ARG_VADJUSTMENT, - ARG_LINE_WRAP, - ARG_WORD_WRAP -}; - -typedef struct _TextProperty TextProperty; -typedef struct _TabStopMark TabStopMark; -typedef struct _PrevTabCont PrevTabCont; -typedef struct _FetchLinesData FetchLinesData; -typedef struct _LineParams LineParams; -typedef struct _SetVerticalScrollData SetVerticalScrollData; - -/* SYLPHEED: - * line callback - */ -typedef gint (*LineIteratorFunction) (GtkSText* text, LineParams* lp, void* data); - -typedef enum -{ - FetchLinesPixels, - FetchLinesCount -} FLType; - -struct _SetVerticalScrollData { - gint pixel_height; - gint last_didnt_wrap; - gint last_line_start; - GtkSPropertyMark mark; -}; - -struct _GtkSTextFont -{ - /* The actual font. */ - GdkFont *gdk_font; - guint ref_count; - - gint16 char_widths[256]; -}; - -typedef enum { - PROPERTY_FONT = 1 << 0, - PROPERTY_FOREGROUND = 1 << 1, - PROPERTY_BACKGROUND = 1 << 2 -} TextPropertyFlags; - -struct _TextProperty -{ - /* Font. */ - GtkSTextFont* font; - - /* Background Color. */ - GdkColor back_color; - - /* Foreground Color. */ - GdkColor fore_color; - - /* Show which properties are set */ - TextPropertyFlags flags; - - /* Length of this property. */ - guint length; -}; - -struct _TabStopMark -{ - GList* tab_stops; /* Index into list containing the next tab position. If - * NULL, using default widths. */ - gint to_next_tab; -}; - -struct _PrevTabCont -{ - guint pixel_offset; - TabStopMark tab_start; -}; - -struct _FetchLinesData -{ - GList* new_lines; - FLType fl_type; - gint data; - gint data_max; -}; - -struct _LineParams -{ - guint font_ascent; - guint font_descent; - guint pixel_width; - guint displayable_chars; - guint wraps : 1; - - PrevTabCont tab_cont; - PrevTabCont tab_cont_next; - - GtkSPropertyMark start; - GtkSPropertyMark end; -}; - - -static void gtk_stext_class_init (GtkSTextClass *klass); -static void gtk_stext_set_arg (GtkObject *object, - GtkArg *arg, - guint arg_id); -static void gtk_stext_get_arg (GtkObject *object, - GtkArg *arg, - guint arg_id); -static void gtk_stext_init (GtkSText *text); -static void gtk_stext_destroy (GtkObject *object); -static void gtk_stext_finalize (GtkObject *object); -static void gtk_stext_realize (GtkWidget *widget); -static void gtk_stext_unrealize (GtkWidget *widget); -static void gtk_stext_style_set (GtkWidget *widget, - GtkStyle *previous_style); -static void gtk_stext_state_changed (GtkWidget *widget, - GtkStateType previous_state); -static void gtk_stext_draw_focus (GtkWidget *widget); -static void gtk_stext_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gtk_stext_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static void gtk_stext_adjustment (GtkAdjustment *adjustment, - GtkSText *text); -static void gtk_stext_disconnect (GtkAdjustment *adjustment, - GtkSText *text); - -static void gtk_stext_insert_text (GtkEditable *editable, - const gchar *new_text, - gint new_text_length, - gint *position); -static void gtk_stext_delete_text (GtkEditable *editable, - gint start_pos, - gint end_pos); -static void gtk_stext_update_text (GtkEditable *editable, - gint start_pos, - gint end_pos); -static gchar *gtk_stext_get_chars (GtkEditable *editable, - gint start, - gint end); -static void gtk_stext_set_selection (GtkEditable *editable, - gint start, - gint end); -static void gtk_stext_real_set_editable (GtkEditable *editable, - gboolean is_editable); - -/* Event handlers */ -static void gtk_stext_draw (GtkWidget *widget, - GdkRectangle *area); -static gint gtk_stext_expose (GtkWidget *widget, - GdkEventExpose *event); -static gint gtk_stext_button_press (GtkWidget *widget, - GdkEventButton *event); -static gint gtk_stext_button_release (GtkWidget *widget, - GdkEventButton *event); -static gint gtk_stext_motion_notify (GtkWidget *widget, - GdkEventMotion *event); -static gint gtk_stext_key_press (GtkWidget *widget, - GdkEventKey *event); -static gint gtk_stext_focus_in (GtkWidget *widget, - GdkEventFocus *event); -static gint gtk_stext_focus_out (GtkWidget *widget, - GdkEventFocus *event); - -static void move_gap (GtkSText* text, guint index); -static void make_forward_space (GtkSText* text, guint len); - -/* Property management */ -static GtkSTextFont* get_text_font (GdkFont* gfont); -static void text_font_unref (GtkSTextFont *text_font); - -static void insert_text_property (GtkSText* text, GdkFont* font, - GdkColor *fore, GdkColor* back, guint len); -static TextProperty* new_text_property (GtkSText *text, GdkFont* font, - GdkColor* fore, GdkColor* back, guint length); -static void destroy_text_property (TextProperty *prop); -static void init_properties (GtkSText *text); -static void realize_property (GtkSText *text, TextProperty *prop); -static void realize_properties (GtkSText *text); -static void unrealize_property (GtkSText *text, TextProperty *prop); -static void unrealize_properties (GtkSText *text); - -static void delete_text_property (GtkSText* text, guint len); - -static guint pixel_height_of (GtkSText* text, GList* cache_line); - -/* Property Movement and Size Computations */ -static void advance_mark (GtkSPropertyMark* mark); -static void decrement_mark (GtkSPropertyMark* mark); -static void advance_mark_n (GtkSPropertyMark* mark, gint n); -static void decrement_mark_n (GtkSPropertyMark* mark, gint n); -static void move_mark_n (GtkSPropertyMark* mark, gint n); -static GtkSPropertyMark find_mark (GtkSText* text, guint mark_position); -static GtkSPropertyMark find_mark_near (GtkSText* text, guint mark_position, const GtkSPropertyMark* near); -static void find_line_containing_point (GtkSText* text, guint point, - gboolean scroll); - -/* Display */ -static void compute_lines_pixels (GtkSText* text, guint char_count, - guint *lines, guint *pixels); - -static gint total_line_height (GtkSText* text, - GList* line, - gint line_count); -static LineParams find_line_params (GtkSText* text, - const GtkSPropertyMark *mark, - const PrevTabCont *tab_cont, - PrevTabCont *next_cont); -static void recompute_geometry (GtkSText* text); -static void insert_expose (GtkSText* text, guint old_pixels, gint nchars, guint new_line_count); -static void delete_expose (GtkSText* text, - guint nchars, - guint old_lines, - guint old_pixels); -static GdkGC *create_bg_gc (GtkSText *text); -static void clear_area (GtkSText *text, GdkRectangle *area); -static void draw_line (GtkSText* text, - gint pixel_height, - LineParams* lp); -static void draw_line_wrap (GtkSText* text, - guint height); -static void draw_cursor (GtkSText* text, gint absolute); -static void undraw_cursor (GtkSText* text, gint absolute); -static gint drawn_cursor_min (GtkSText* text); -static gint drawn_cursor_max (GtkSText* text); -static void expose_text (GtkSText* text, GdkRectangle *area, gboolean cursor); - -/* Search and Placement. */ -static void find_cursor (GtkSText* text, - gboolean scroll); -static void find_cursor_at_line (GtkSText* text, - const LineParams* start_line, - gint pixel_height); -static void find_mouse_cursor (GtkSText* text, gint x, gint y); - -/* Scrolling. */ -static void adjust_adj (GtkSText* text, GtkAdjustment* adj); -static void scroll_up (GtkSText* text, gint diff); -static void scroll_down (GtkSText* text, gint diff); -static void scroll_int (GtkSText* text, gint diff); - -static void process_exposes (GtkSText *text); - -/* Cache Management. */ -static void free_cache (GtkSText* text); -static GList* remove_cache_line (GtkSText* text, GList* list); - -/* Key Motion. */ -static void move_cursor_buffer_ver (GtkSText *text, int dir); -static void move_cursor_page_ver (GtkSText *text, int dir); -static void move_cursor_ver (GtkSText *text, int count); -static void move_cursor_hor (GtkSText *text, int count); - -/* SYLPHEED - */ -static void move_cursor_to_display_row_end (GtkSText *text); -static void move_cursor_to_display_row_start (GtkSText *text); -static void move_cursor_to_display_row_up (GtkSText *text); -static void move_cursor_to_display_row_down (GtkSText *text); -static void reset_persist_col_pos (GtkSText *text); - -/* Binding actions */ -static void gtk_stext_move_cursor (GtkEditable *editable, - gint x, - gint y); -static void gtk_stext_move_word (GtkEditable *editable, - gint n); -static void gtk_stext_move_page (GtkEditable *editable, - gint x, - gint y); -static void gtk_stext_move_to_row (GtkEditable *editable, - gint row); -static void gtk_stext_move_to_column (GtkEditable *editable, - gint row); -static void gtk_stext_kill_char (GtkEditable *editable, - gint direction); -static void gtk_stext_kill_word (GtkEditable *editable, - gint direction); -static void gtk_stext_kill_line (GtkEditable *editable, - gint direction); - -/* To be removed */ -static void gtk_stext_move_forward_character (GtkSText *text); -static void gtk_stext_move_backward_character (GtkSText *text); -static void gtk_stext_move_forward_word (GtkSText *text); -static void gtk_stext_move_backward_word (GtkSText *text); -static void gtk_stext_move_beginning_of_line (GtkSText *text); -static void gtk_stext_move_end_of_line (GtkSText *text); -static void gtk_stext_move_next_line (GtkSText *text); -static void gtk_stext_move_previous_line (GtkSText *text); - -static void gtk_stext_delete_forward_character (GtkSText *text); -static void gtk_stext_delete_backward_character (GtkSText *text); -static void gtk_stext_delete_forward_word (GtkSText *text); -static void gtk_stext_delete_backward_word (GtkSText *text); -static void gtk_stext_delete_line (GtkSText *text); -static void gtk_stext_delete_to_line_end (GtkSText *text); -static void gtk_stext_select_word (GtkSText *text, - guint32 time); -static void gtk_stext_select_line (GtkSText *text, - guint32 time); - -static void gtk_stext_set_position (GtkEditable *editable, - gint position); - - -/* SYLPHEED: - * cursor timer - */ -static void gtk_stext_enable_blink (GtkSText *text); -static void gtk_stext_disable_blink (GtkSText *text); - -/* #define DEBUG_GTK_STEXT */ - -#if defined(DEBUG_GTK_STEXT) && defined(__GNUC__) -/* Debugging utilities. */ -static void gtk_stext_assert_mark (GtkSText *text, - GtkSPropertyMark *mark, - GtkSPropertyMark *before, - GtkSPropertyMark *after, - const gchar *msg, - const gchar *where, - gint line); - -static void gtk_stext_assert (GtkSText *text, - const gchar *msg, - gint line); -static void gtk_stext_show_cache_line (GtkSText *text, GList *cache, - const char* what, const char* func, gint line); -static void gtk_stext_show_cache (GtkSText *text, const char* func, gint line); -static void gtk_stext_show_adj (GtkSText *text, - GtkAdjustment *adj, - const char* what, - const char* func, - gint line); -static void gtk_stext_show_props (GtkSText* test, - const char* func, - int line); - -#define TDEBUG(args) g_message args -#define TEXT_ASSERT(text) gtk_stext_assert (text,__PRETTY_FUNCTION__,__LINE__) -#define TEXT_ASSERT_MARK(text,mark,msg) gtk_stext_assert_mark (text,mark, \ - __PRETTY_FUNCTION__,msg,__LINE__) -#define TEXT_SHOW(text) gtk_stext_show_cache (text, __PRETTY_FUNCTION__,__LINE__) -#define TEXT_SHOW_LINE(text,line,msg) gtk_stext_show_cache_line (text,line,msg,\ - __PRETTY_FUNCTION__,__LINE__) -#define TEXT_SHOW_ADJ(text,adj,msg) gtk_stext_show_adj (text,adj,msg, \ - __PRETTY_FUNCTION__,__LINE__) -#else -#define TDEBUG(args) -#define TEXT_ASSERT(text) -#define TEXT_ASSERT_MARK(text,mark,msg) -#define TEXT_SHOW(text) -#define TEXT_SHOW_LINE(text,line,msg) -#define TEXT_SHOW_ADJ(text,adj,msg) -#endif - -#define AHX_DEBUG -#if defined(AHX_DEBUG) -# define XDEBUG(args) g_message args -#else -# define XDEBUG(args) -#endif /* AHX_DEBUG */ - -/* Memory Management. */ -static GMemChunk *params_mem_chunk = NULL; -static GMemChunk *text_property_chunk = NULL; - -static GtkWidgetClass *parent_class = NULL; - - -static const GtkTextFunction control_keys[26] = -{ - (GtkTextFunction)gtk_stext_move_beginning_of_line, /* a */ - (GtkTextFunction)gtk_stext_move_backward_character, /* b */ - (GtkTextFunction)gtk_editable_copy_clipboard, /* c */ - (GtkTextFunction)gtk_stext_delete_forward_character, /* d */ - (GtkTextFunction)gtk_stext_move_end_of_line, /* e */ - (GtkTextFunction)gtk_stext_move_forward_character, /* f */ - NULL, /* g */ - (GtkTextFunction)gtk_stext_delete_backward_character, /* h */ - NULL, /* i */ - NULL, /* j */ - (GtkTextFunction)gtk_stext_delete_to_line_end, /* k */ - NULL, /* l */ - NULL, /* m */ - (GtkTextFunction)gtk_stext_move_next_line, /* n */ - NULL, /* o */ - (GtkTextFunction)gtk_stext_move_previous_line, /* p */ - NULL, /* q */ - NULL, /* r */ - NULL, /* s */ - NULL, /* t */ - (GtkTextFunction)gtk_stext_delete_line, /* u */ - (GtkTextFunction)gtk_editable_paste_clipboard, /* v */ - (GtkTextFunction)gtk_stext_delete_backward_word, /* w */ - (GtkTextFunction)gtk_editable_cut_clipboard, /* x */ - NULL, /* y */ - NULL, /* z */ -}; - -static const GtkTextFunction alt_keys[26] = -{ - NULL, /* a */ - (GtkTextFunction)gtk_stext_move_backward_word, /* b */ - NULL, /* c */ - (GtkTextFunction)gtk_stext_delete_forward_word, /* d */ - NULL, /* e */ - (GtkTextFunction)gtk_stext_move_forward_word, /* f */ - NULL, /* g */ - NULL, /* h */ - NULL, /* i */ - NULL, /* j */ - NULL, /* k */ - NULL, /* l */ - NULL, /* m */ - NULL, /* n */ - NULL, /* o */ - NULL, /* p */ - NULL, /* q */ - NULL, /* r */ - NULL, /* s */ - NULL, /* t */ - NULL, /* u */ - NULL, /* v */ - NULL, /* w */ - NULL, /* x */ - NULL, /* y */ - NULL, /* z */ -}; - - -/* line_arrow.xbm */ -#define line_arrow_width 6 -#define line_arrow_height 9 -static unsigned char line_arrow_bits[] = { - 0x00, 0x00, 0x04, 0x0c, 0x18, 0x3f, 0x18, 0x0c, 0x04}; - -/* line-wrap.xbm */ -#define line_wrap_width 6 -#define line_wrap_height 9 -static unsigned char line_wrap_bits[] = { - 0x1e, 0x3e, 0x30, 0x30, 0x39, 0x1f, 0x0f, 0x0f, 0x1f, }; - -/**********************************************************************/ -/* Widget Crap */ -/**********************************************************************/ - -GtkType -gtk_stext_get_type (void) -{ - static GtkType text_type = 0; - - if (!text_type) - { - static const GtkTypeInfo text_info = - { - "GtkSText", - sizeof (GtkSText), - sizeof (GtkSTextClass), - (GtkClassInitFunc) gtk_stext_class_init, - (GtkObjectInitFunc) gtk_stext_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - text_type = gtk_type_unique (GTK_TYPE_EDITABLE, &text_info); - } - - return text_type; -} - -static void -gtk_stext_class_init (GtkSTextClass *class) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - GtkEditableClass *editable_class; - - object_class = (GtkObjectClass*) class; - widget_class = (GtkWidgetClass*) class; - editable_class = (GtkEditableClass*) class; - parent_class = gtk_type_class (GTK_TYPE_EDITABLE); - - gtk_object_add_arg_type ("GtkSText::hadjustment", - GTK_TYPE_ADJUSTMENT, - GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT, - ARG_HADJUSTMENT); - gtk_object_add_arg_type ("GtkSText::vadjustment", - GTK_TYPE_ADJUSTMENT, - GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT, - ARG_VADJUSTMENT); - gtk_object_add_arg_type ("GtkSText::line_wrap", - GTK_TYPE_BOOL, - GTK_ARG_READWRITE, - ARG_LINE_WRAP); - gtk_object_add_arg_type ("GtkSText::word_wrap", - GTK_TYPE_BOOL, - GTK_ARG_READWRITE, - ARG_WORD_WRAP); - - object_class->set_arg = gtk_stext_set_arg; - object_class->get_arg = gtk_stext_get_arg; - object_class->destroy = gtk_stext_destroy; - object_class->finalize = gtk_stext_finalize; - - widget_class->realize = gtk_stext_realize; - widget_class->unrealize = gtk_stext_unrealize; - widget_class->style_set = gtk_stext_style_set; - widget_class->state_changed = gtk_stext_state_changed; - widget_class->draw_focus = gtk_stext_draw_focus; - widget_class->size_request = gtk_stext_size_request; - widget_class->size_allocate = gtk_stext_size_allocate; - widget_class->draw = gtk_stext_draw; - widget_class->expose_event = gtk_stext_expose; - widget_class->button_press_event = gtk_stext_button_press; - widget_class->button_release_event = gtk_stext_button_release; - widget_class->motion_notify_event = gtk_stext_motion_notify; - widget_class->key_press_event = gtk_stext_key_press; - widget_class->focus_in_event = gtk_stext_focus_in; - widget_class->focus_out_event = gtk_stext_focus_out; - - widget_class->set_scroll_adjustments_signal = - gtk_signal_new ("set_scroll_adjustments", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (GtkSTextClass, set_scroll_adjustments), - gtk_marshal_NONE__POINTER_POINTER, - GTK_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT); - - editable_class->set_editable = gtk_stext_real_set_editable; - editable_class->insert_text = gtk_stext_insert_text; - editable_class->delete_text = gtk_stext_delete_text; - - editable_class->move_cursor = gtk_stext_move_cursor; - editable_class->move_word = gtk_stext_move_word; - editable_class->move_page = gtk_stext_move_page; - editable_class->move_to_row = gtk_stext_move_to_row; - editable_class->move_to_column = gtk_stext_move_to_column; - - editable_class->kill_char = gtk_stext_kill_char; - editable_class->kill_word = gtk_stext_kill_word; - editable_class->kill_line = gtk_stext_kill_line; - - editable_class->update_text = gtk_stext_update_text; - editable_class->get_chars = gtk_stext_get_chars; - editable_class->set_selection = gtk_stext_set_selection; - editable_class->set_position = gtk_stext_set_position; - - class->set_scroll_adjustments = gtk_stext_set_adjustments; -} - -static void -gtk_stext_set_arg (GtkObject *object, - GtkArg *arg, - guint arg_id) -{ - GtkSText *text; - - text = GTK_STEXT (object); - - switch (arg_id) - { - case ARG_HADJUSTMENT: - gtk_stext_set_adjustments (text, - GTK_VALUE_POINTER (*arg), - text->vadj); - break; - case ARG_VADJUSTMENT: - gtk_stext_set_adjustments (text, - text->hadj, - GTK_VALUE_POINTER (*arg)); - break; - case ARG_LINE_WRAP: - gtk_stext_set_line_wrap (text, GTK_VALUE_BOOL (*arg)); - break; - case ARG_WORD_WRAP: - gtk_stext_set_word_wrap (text, GTK_VALUE_BOOL (*arg)); - break; - default: - break; - } -} - -static void -gtk_stext_get_arg (GtkObject *object, - GtkArg *arg, - guint arg_id) -{ - GtkSText *text; - - text = GTK_STEXT (object); - - switch (arg_id) - { - case ARG_HADJUSTMENT: - GTK_VALUE_POINTER (*arg) = text->hadj; - break; - case ARG_VADJUSTMENT: - GTK_VALUE_POINTER (*arg) = text->vadj; - break; - case ARG_LINE_WRAP: - GTK_VALUE_BOOL (*arg) = text->line_wrap; - break; - case ARG_WORD_WRAP: - GTK_VALUE_BOOL (*arg) = text->word_wrap; - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -gtk_stext_init (GtkSText *text) -{ - GTK_WIDGET_SET_FLAGS (text, GTK_CAN_FOCUS); - - text->text_area = NULL; - text->hadj = NULL; - text->vadj = NULL; - text->gc = NULL; - text->bg_gc = NULL; - text->line_wrap_bitmap = NULL; - text->line_arrow_bitmap = NULL; - - text->use_wchar = FALSE; - text->text.ch = g_new (guchar, INITIAL_BUFFER_SIZE); - text->text_len = INITIAL_BUFFER_SIZE; - - text->scratch_buffer.ch = NULL; - text->scratch_buffer_len = 0; - - text->freeze_count = 0; - - if (!params_mem_chunk) - params_mem_chunk = g_mem_chunk_new ("LineParams", - sizeof (LineParams), - 256 * sizeof (LineParams), - G_ALLOC_AND_FREE); - - text->default_tab_width = 4; - text->tab_stops = NULL; - - text->tab_stops = g_list_prepend (text->tab_stops, (void*)8); - text->tab_stops = g_list_prepend (text->tab_stops, (void*)8); - - text->line_start_cache = NULL; - text->first_cut_pixels = 0; - - text->line_wrap = TRUE; - text->word_wrap = FALSE; - - text->timer = 0; - text->button = 0; - - text->current_font = NULL; - - /* SYLPHEED: - * timer for blinking cursor - */ - text->cursor_visible = FALSE; /* don't know whether gtktext stores this somewhere */ - text->cursor_timer_on = TRUE; - text->cursor_off_ms = 500; - text->cursor_on_ms = 500; - text->cursor_timer_id = 0; - text->cursor_idle_time_timer_id = 0; - text->wrap_rmargin = 0; - text->cursor_type = STEXT_CURSOR_LINE; - text->persist_column = 0; - - init_properties (text); - - GTK_EDITABLE (text)->editable = FALSE; - - gtk_editable_set_position (GTK_EDITABLE (text), 0); -} - -GtkWidget* -gtk_stext_new (GtkAdjustment *hadj, - GtkAdjustment *vadj) -{ - GtkWidget *text; - - if (hadj) - g_return_val_if_fail (GTK_IS_ADJUSTMENT (hadj), NULL); - if (vadj) - g_return_val_if_fail (GTK_IS_ADJUSTMENT (vadj), NULL); - - text = gtk_widget_new (GTK_TYPE_STEXT, - "hadjustment", hadj, - "vadjustment", vadj, - NULL); - - return text; -} - -void -gtk_stext_set_word_wrap (GtkSText *text, - gint word_wrap) -{ - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - - text->word_wrap = (word_wrap != FALSE); - - if (GTK_WIDGET_REALIZED (text)) - { - recompute_geometry (text); - gtk_widget_queue_draw (GTK_WIDGET (text)); - } -} - -void -gtk_stext_set_line_wrap (GtkSText *text, - gint line_wrap) -{ - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - - text->line_wrap = (line_wrap != FALSE); - - if (GTK_WIDGET_REALIZED (text)) - { - recompute_geometry (text); - gtk_widget_queue_draw (GTK_WIDGET (text)); - } -} - -void -gtk_stext_set_editable (GtkSText *text, - gboolean is_editable) -{ - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - - gtk_editable_set_editable (GTK_EDITABLE (text), is_editable); -} - -static void -gtk_stext_real_set_editable (GtkEditable *editable, - gboolean is_editable) -{ - GtkSText *text; - - g_return_if_fail (editable != NULL); - g_return_if_fail (GTK_IS_STEXT (editable)); - - text = GTK_STEXT (editable); - - editable->editable = (is_editable != FALSE); - - if (GTK_WIDGET_REALIZED (text)) - { - recompute_geometry (text); - gtk_widget_queue_draw (GTK_WIDGET (text)); - } -} - -void -gtk_stext_set_adjustments (GtkSText *text, - GtkAdjustment *hadj, - GtkAdjustment *vadj) -{ - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - if (hadj) - g_return_if_fail (GTK_IS_ADJUSTMENT (hadj)); - else - hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); - if (vadj) - g_return_if_fail (GTK_IS_ADJUSTMENT (vadj)); - else - vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); - - if (text->hadj && (text->hadj != hadj)) - { - gtk_signal_disconnect_by_data (GTK_OBJECT (text->hadj), text); - gtk_object_unref (GTK_OBJECT (text->hadj)); - } - - if (text->vadj && (text->vadj != vadj)) - { - gtk_signal_disconnect_by_data (GTK_OBJECT (text->vadj), text); - gtk_object_unref (GTK_OBJECT (text->vadj)); - } - - if (text->hadj != hadj) - { - text->hadj = hadj; - gtk_object_ref (GTK_OBJECT (text->hadj)); - gtk_object_sink (GTK_OBJECT (text->hadj)); - - gtk_signal_connect (GTK_OBJECT (text->hadj), "changed", - (GtkSignalFunc) gtk_stext_adjustment, - text); - gtk_signal_connect (GTK_OBJECT (text->hadj), "value_changed", - (GtkSignalFunc) gtk_stext_adjustment, - text); - gtk_signal_connect (GTK_OBJECT (text->hadj), "disconnect", - (GtkSignalFunc) gtk_stext_disconnect, - text); - gtk_stext_adjustment (hadj, text); - } - - if (text->vadj != vadj) - { - text->vadj = vadj; - gtk_object_ref (GTK_OBJECT (text->vadj)); - gtk_object_sink (GTK_OBJECT (text->vadj)); - - gtk_signal_connect (GTK_OBJECT (text->vadj), "changed", - (GtkSignalFunc) gtk_stext_adjustment, - text); - gtk_signal_connect (GTK_OBJECT (text->vadj), "value_changed", - (GtkSignalFunc) gtk_stext_adjustment, - text); - gtk_signal_connect (GTK_OBJECT (text->vadj), "disconnect", - (GtkSignalFunc) gtk_stext_disconnect, - text); - gtk_stext_adjustment (vadj, text); - } -} - -void -gtk_stext_set_point (GtkSText *text, - guint index) -{ - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - g_return_if_fail (index <= TEXT_LENGTH (text)); - - text->point = find_mark (text, index); -} - -guint -gtk_stext_get_point (GtkSText *text) -{ - g_return_val_if_fail (text != NULL, 0); - g_return_val_if_fail (GTK_IS_STEXT (text), 0); - - return text->point.index; -} - -guint -gtk_stext_get_length (GtkSText *text) -{ - g_return_val_if_fail (text != NULL, 0); - g_return_val_if_fail (GTK_IS_STEXT (text), 0); - - return TEXT_LENGTH (text); -} - -void -gtk_stext_freeze (GtkSText *text) -{ - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - - text->freeze_count++; - undraw_cursor (text, FALSE); -} - -void -gtk_stext_thaw (GtkSText *text) -{ - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - - if (text->freeze_count) - if (!(--text->freeze_count) && GTK_WIDGET_REALIZED (text)) - { - recompute_geometry (text); - gtk_widget_queue_draw (GTK_WIDGET (text)); - } - draw_cursor (text, FALSE); -} - -void -gtk_stext_insert (GtkSText *text, - GdkFont *font, - GdkColor *fore, - GdkColor *back, - const char *chars, - gint nchars) -{ - GtkEditable *editable = GTK_EDITABLE (text); - gboolean frozen = FALSE; - - gint new_line_count = 1; - guint old_height = 0; - guint length; - guint i; - gint numwcs; - - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - if (nchars > 0) - g_return_if_fail (chars != NULL); - else - { - if (!nchars || !chars) - return; - nchars = strlen (chars); - } - length = nchars; - - if (!text->freeze_count && (length > FREEZE_LENGTH)) - { - gtk_stext_freeze (text); - frozen = TRUE; - } - - if (!text->freeze_count && (text->line_start_cache != NULL)) - { - find_line_containing_point (text, text->point.index, TRUE); - old_height = total_line_height (text, text->current_line, 1); - } - - if ((TEXT_LENGTH (text) == 0) && (text->use_wchar == FALSE)) - { - GtkWidget *widget; - widget = GTK_WIDGET (text); - gtk_widget_ensure_style (widget); - if ((widget->style) && (widget->style->font->type == GDK_FONT_FONTSET)) - { - text->use_wchar = TRUE; - g_free (text->text.ch); - text->text.wc = g_new (GdkWChar, INITIAL_BUFFER_SIZE); - text->text_len = INITIAL_BUFFER_SIZE; - if (text->scratch_buffer.ch) - g_free (text->scratch_buffer.ch); - text->scratch_buffer.wc = NULL; - text->scratch_buffer_len = 0; - } - } - - move_gap (text, text->point.index); - make_forward_space (text, length); - - if (text->use_wchar) - { - char *chars_nt = (char *)chars; - if (nchars > 0) - { - chars_nt = g_new (char, length+1); - memcpy (chars_nt, chars, length); - chars_nt[length] = 0; - } - numwcs = gdk_mbstowcs (text->text.wc + text->gap_position, chars_nt, - length); - if (chars_nt != chars) - g_free(chars_nt); - if (numwcs < 0) - numwcs = 0; - } - else - { - numwcs = length; - memcpy(text->text.ch + text->gap_position, chars, length); - } - - if (!text->freeze_count && (text->line_start_cache != NULL)) - { - if (text->use_wchar) - { - for (i=0; i<numwcs; i++) - if (text->text.wc[text->gap_position + i] == '\n') - new_line_count++; - } - else - { - for (i=0; i<numwcs; i++) - if (text->text.ch[text->gap_position + i] == '\n') - new_line_count++; - } - } - - if (numwcs > 0) - { - insert_text_property (text, font, fore, back, numwcs); - - text->gap_size -= numwcs; - text->gap_position += numwcs; - - if (text->point.index < text->first_line_start_index) - text->first_line_start_index += numwcs; - if (text->point.index < editable->selection_start_pos) - editable->selection_start_pos += numwcs; - if (text->point.index < editable->selection_end_pos) - editable->selection_end_pos += numwcs; - /* We'll reset the cursor later anyways if we aren't frozen */ - if (text->point.index < text->cursor_mark.index) - text->cursor_mark.index += numwcs; - - advance_mark_n (&text->point, numwcs); - - if (!text->freeze_count && (text->line_start_cache != NULL)) - insert_expose (text, old_height, numwcs, new_line_count); - } - - if (frozen) - gtk_stext_thaw (text); -} - -gint -gtk_stext_backward_delete (GtkSText *text, - guint nchars) -{ - g_return_val_if_fail (text != NULL, 0); - g_return_val_if_fail (GTK_IS_STEXT (text), 0); - - if (nchars > text->point.index || nchars <= 0) - return FALSE; - - gtk_stext_set_point (text, text->point.index - nchars); - - return gtk_stext_forward_delete (text, nchars); -} - -gint -gtk_stext_forward_delete (GtkSText *text, - guint nchars) -{ - guint old_lines, old_height; - GtkEditable *editable = GTK_EDITABLE (text); - gboolean frozen = FALSE; - - g_return_val_if_fail (text != NULL, 0); - g_return_val_if_fail (GTK_IS_STEXT (text), 0); - - if (text->point.index + nchars > TEXT_LENGTH (text) || nchars <= 0) - return FALSE; - - if (!text->freeze_count && nchars > FREEZE_LENGTH) - { - gtk_stext_freeze (text); - frozen = TRUE; - } - - if (!text->freeze_count && text->line_start_cache != NULL) - { - /* We need to undraw the cursor here, since we may later - * delete the cursor's property - */ - undraw_cursor (text, FALSE); - find_line_containing_point (text, text->point.index, TRUE); - compute_lines_pixels (text, nchars, &old_lines, &old_height); - } - - /* FIXME, or resizing after deleting will be odd */ - if (text->point.index < text->first_line_start_index) - { - if (text->point.index + nchars >= text->first_line_start_index) - { - text->first_line_start_index = text->point.index; - while ((text->first_line_start_index > 0) && - (GTK_STEXT_INDEX (text, text->first_line_start_index - 1) - != LINE_DELIM)) - text->first_line_start_index -= 1; - - } - else - text->first_line_start_index -= nchars; - } - - if (text->point.index < editable->selection_start_pos) - editable->selection_start_pos -= - MIN(nchars, editable->selection_start_pos - text->point.index); - if (text->point.index < editable->selection_end_pos) - editable->selection_end_pos -= - MIN(nchars, editable->selection_end_pos - text->point.index); - /* We'll reset the cursor later anyways if we aren't frozen */ - if (text->point.index < text->cursor_mark.index) - move_mark_n (&text->cursor_mark, - -MIN(nchars, text->cursor_mark.index - text->point.index)); - - move_gap (text, text->point.index); - - text->gap_size += nchars; - - delete_text_property (text, nchars); - - if (!text->freeze_count && (text->line_start_cache != NULL)) - { - delete_expose (text, nchars, old_lines, old_height); - draw_cursor (text, FALSE); - } - - if (frozen) - gtk_stext_thaw (text); - - return TRUE; -} - -static void -gtk_stext_set_position (GtkEditable *editable, - gint position) -{ - GtkSText *text = (GtkSText *) editable; - - undraw_cursor (text, FALSE); - text->cursor_mark = find_mark (text, position); - find_cursor (text, TRUE); - draw_cursor (text, FALSE); - gtk_editable_select_region (editable, 0, 0); -} - -/* SYLPHEED - set_position used. Need to find out whether there's - * a better way to handle this */ -static void gtk_stext_set_position_X (GtkEditable *editable, - gint position) -{ - GtkSText *text = (GtkSText *) editable; - - undraw_cursor (text, FALSE); - text->cursor_mark = find_mark (text, position); - find_cursor (text, TRUE); - draw_cursor (text, FALSE); -} - -static gchar * -gtk_stext_get_chars (GtkEditable *editable, - gint start_pos, - gint end_pos) -{ - GtkSText *text; - - gchar *retval; - - g_return_val_if_fail (editable != NULL, NULL); - g_return_val_if_fail (GTK_IS_STEXT (editable), NULL); - text = GTK_STEXT (editable); - - if (end_pos < 0) - end_pos = TEXT_LENGTH (text); - - if ((start_pos < 0) || - (end_pos > TEXT_LENGTH (text)) || - (end_pos < start_pos)) - return NULL; - - move_gap (text, TEXT_LENGTH (text)); - make_forward_space (text, 1); - - if (text->use_wchar) - { - GdkWChar ch; - ch = text->text.wc[end_pos]; - text->text.wc[end_pos] = 0; - retval = gdk_wcstombs (text->text.wc + start_pos); - text->text.wc[end_pos] = ch; - } - else - { - guchar ch; - ch = text->text.ch[end_pos]; - text->text.ch[end_pos] = 0; - retval = g_strdup (text->text.ch + start_pos); - text->text.ch[end_pos] = ch; - } - - return retval; -} - - -static void -gtk_stext_destroy (GtkObject *object) -{ - GtkSText *text; - - g_return_if_fail (object != NULL); - g_return_if_fail (GTK_IS_STEXT (object)); - - text = (GtkSText*) object; - - gtk_signal_disconnect_by_data (GTK_OBJECT (text->hadj), text); - gtk_signal_disconnect_by_data (GTK_OBJECT (text->vadj), text); - - if (text->timer) - { - gtk_timeout_remove (text->timer); - text->timer = 0; - } - - /* SYLPHEED: - * cursor timer - */ - gtk_stext_disable_blink(text); - - GTK_OBJECT_CLASS(parent_class)->destroy (object); -} - -static void -gtk_stext_finalize (GtkObject *object) -{ - GtkSText *text; - GList *tmp_list; - - g_return_if_fail (object != NULL); - g_return_if_fail (GTK_IS_STEXT (object)); - - text = (GtkSText *)object; - - gtk_object_unref (GTK_OBJECT (text->hadj)); - gtk_object_unref (GTK_OBJECT (text->vadj)); - - /* Clean up the internal structures */ - if (text->use_wchar) - g_free (text->text.wc); - else - g_free (text->text.ch); - - tmp_list = text->text_properties; - while (tmp_list) - { - destroy_text_property (tmp_list->data); - tmp_list = tmp_list->next; - } - - if (text->current_font) - text_font_unref (text->current_font); - - g_list_free (text->text_properties); - - if (text->use_wchar) - { - if (text->scratch_buffer.wc) - g_free (text->scratch_buffer.wc); - } - else - { - if (text->scratch_buffer.ch) - g_free (text->scratch_buffer.ch); - } - - g_list_free (text->tab_stops); - - GTK_OBJECT_CLASS(parent_class)->finalize (object); -} - -static void -gtk_stext_realize (GtkWidget *widget) -{ - GtkSText *text; - GtkEditable *editable; - GdkWindowAttr attributes; - gint attributes_mask; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GTK_IS_STEXT (widget)); - - text = GTK_STEXT (widget); - editable = GTK_EDITABLE (widget); - GTK_WIDGET_SET_FLAGS (text, GTK_REALIZED); - - attributes.window_type = GDK_WINDOW_CHILD; - attributes.x = widget->allocation.x; - attributes.y = widget->allocation.y; - attributes.width = widget->allocation.width; - attributes.height = widget->allocation.height; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - attributes.event_mask = gtk_widget_get_events (widget); - attributes.event_mask |= (GDK_EXPOSURE_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_BUTTON_MOTION_MASK | - GDK_ENTER_NOTIFY_MASK | - GDK_LEAVE_NOTIFY_MASK | - GDK_KEY_PRESS_MASK); - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - - widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); - gdk_window_set_user_data (widget->window, text); - - attributes.x = (widget->style->klass->xthickness + TEXT_BORDER_ROOM); - attributes.y = (widget->style->klass->ythickness + TEXT_BORDER_ROOM); - attributes.width = MAX (1, (gint)widget->allocation.width - (gint)attributes.x * 2); - attributes.height = MAX (1, (gint)widget->allocation.height - (gint)attributes.y * 2); - - attributes.cursor = gdk_cursor_new (GDK_XTERM); - attributes_mask |= GDK_WA_CURSOR; - - text->text_area = gdk_window_new (widget->window, &attributes, attributes_mask); - gdk_window_set_user_data (text->text_area, text); - - gdk_cursor_destroy (attributes.cursor); /* The X server will keep it around as long as necessary */ - - widget->style = gtk_style_attach (widget->style, widget->window); - - /* Can't call gtk_style_set_background here because it's handled specially */ - gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]); - gdk_window_set_background (text->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]); - - if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) - text->bg_gc = create_bg_gc (text); - - text->line_wrap_bitmap = gdk_bitmap_create_from_data (text->text_area, - (gchar*) line_wrap_bits, - line_wrap_width, - line_wrap_height); - - text->line_arrow_bitmap = gdk_bitmap_create_from_data (text->text_area, - (gchar*) line_arrow_bits, - line_arrow_width, - line_arrow_height); - - text->gc = gdk_gc_new (text->text_area); - gdk_gc_set_exposures (text->gc, TRUE); - gdk_gc_set_foreground (text->gc, &widget->style->text[GTK_STATE_NORMAL]); - -#ifdef USE_GTKGDK_XIM - if (gdk_im_ready () && (editable->ic_attr = gdk_ic_attr_new ()) != NULL) - { - gint width, height; - GdkColormap *colormap; - GdkEventMask mask; - GdkICAttr *attr = editable->ic_attr; - GdkICAttributesType attrmask = GDK_IC_ALL_REQ; - GdkIMStyle style; - GdkIMStyle supported_style = GDK_IM_PREEDIT_NONE | - GDK_IM_PREEDIT_NOTHING | - GDK_IM_PREEDIT_POSITION | - GDK_IM_STATUS_NONE | - GDK_IM_STATUS_NOTHING; - - if (widget->style && widget->style->font->type != GDK_FONT_FONTSET) - supported_style &= ~GDK_IM_PREEDIT_POSITION; - - attr->style = style = gdk_im_decide_style (supported_style); - attr->client_window = text->text_area; - - if ((colormap = gtk_widget_get_colormap (widget)) != - gtk_widget_get_default_colormap ()) - { - attrmask |= GDK_IC_PREEDIT_COLORMAP; - attr->preedit_colormap = colormap; - } - - switch (style & GDK_IM_PREEDIT_MASK) - { - case GDK_IM_PREEDIT_POSITION: - if (widget->style && widget->style->font->type != GDK_FONT_FONTSET) - { - g_warning ("over-the-spot style requires fontset"); - break; - } - - attrmask |= GDK_IC_PREEDIT_POSITION_REQ; - gdk_window_get_size (text->text_area, &width, &height); - attr->spot_location.x = 0; - attr->spot_location.y = height; - attr->preedit_area.x = 0; - attr->preedit_area.y = 0; - attr->preedit_area.width = width; - attr->preedit_area.height = height; - attr->preedit_fontset = widget->style->font; - - break; - } - editable->ic = gdk_ic_new (attr, attrmask); - - if (editable->ic == NULL) - g_warning ("Can't create input context."); - else - { - mask = gdk_window_get_events (text->text_area); - mask |= gdk_ic_get_events (editable->ic); - gdk_window_set_events (text->text_area, mask); - - if (GTK_WIDGET_HAS_FOCUS (widget)) - gdk_im_begin (editable->ic, text->text_area); - } - } -#endif - - realize_properties (text); - gdk_window_show (text->text_area); - init_properties (text); - - if (editable->selection_start_pos != editable->selection_end_pos) - gtk_editable_claim_selection (editable, TRUE, GDK_CURRENT_TIME); - - recompute_geometry (text); -} - -static void -gtk_stext_style_set (GtkWidget *widget, - GtkStyle *previous_style) -{ - GtkSText *text = GTK_STEXT (widget); - - if (GTK_WIDGET_REALIZED (widget)) - { - gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]); - gdk_window_set_background (text->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]); - - if (text->bg_gc) - { - gdk_gc_destroy (text->bg_gc); - text->bg_gc = NULL; - } - - if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) - text->bg_gc = create_bg_gc (text); - - recompute_geometry (text); - } - - if (text->current_font) - text_font_unref (text->current_font); - text->current_font = get_text_font (widget->style->font); -} - -static void -gtk_stext_state_changed (GtkWidget *widget, - GtkStateType previous_state) -{ - GtkSText *text = GTK_STEXT (widget); - - if (GTK_WIDGET_REALIZED (widget)) - { - gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]); - gdk_window_set_background (text->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]); - } -} - -static void -gtk_stext_unrealize (GtkWidget *widget) -{ - GtkSText *text; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GTK_IS_STEXT (widget)); - - text = GTK_STEXT (widget); - -#ifdef USE_GTKGDK_XIM - if (GTK_EDITABLE (widget)->ic) - { - gdk_ic_destroy (GTK_EDITABLE (widget)->ic); - GTK_EDITABLE (widget)->ic = NULL; - } - if (GTK_EDITABLE (widget)->ic_attr) - { - gdk_ic_attr_destroy (GTK_EDITABLE (widget)->ic_attr); - GTK_EDITABLE (widget)->ic_attr = NULL; - } -#endif - - gdk_window_set_user_data (text->text_area, NULL); - gdk_window_destroy (text->text_area); - text->text_area = NULL; - - gdk_gc_destroy (text->gc); - text->gc = NULL; - - if (text->bg_gc) - { - gdk_gc_destroy (text->bg_gc); - text->bg_gc = NULL; - } - - gdk_pixmap_unref (text->line_wrap_bitmap); - gdk_pixmap_unref (text->line_arrow_bitmap); - - unrealize_properties (text); - - free_cache (text); - - if (GTK_WIDGET_CLASS (parent_class)->unrealize) - (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); -} - -static void -clear_focus_area (GtkSText *text, gint area_x, gint area_y, gint area_width, gint area_height) -{ - GtkWidget *widget = GTK_WIDGET (text); - GdkGC *gc; - - gint ythick = TEXT_BORDER_ROOM + widget->style->klass->ythickness; - gint xthick = TEXT_BORDER_ROOM + widget->style->klass->xthickness; - - gint width, height; - - if (area_width == 0 || area_height == 0) - return; - - if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) - { - gdk_window_get_size (widget->style->bg_pixmap[GTK_STATE_NORMAL], &width, &height); - - gdk_gc_set_ts_origin (text->bg_gc, - (- (gint)text->first_onscreen_hor_pixel + xthick) % width, - (- (gint)text->first_onscreen_ver_pixel + ythick) % height); - - gc = text->bg_gc; - } - else - gc = widget->style->bg_gc[widget->state]; - - - gdk_draw_rectangle (GTK_WIDGET (text)->window, gc, TRUE, - area_x, area_y, area_width, area_height); -} - -static void -gtk_stext_draw_focus (GtkWidget *widget) -{ - GtkSText *text; - gint width, height; - gint x, y; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GTK_IS_STEXT (widget)); - - text = GTK_STEXT (widget); - - if (GTK_WIDGET_DRAWABLE (widget)) - { - gint ythick = widget->style->klass->ythickness; - gint xthick = widget->style->klass->xthickness; - gint xextra = TEXT_BORDER_ROOM; - gint yextra = TEXT_BORDER_ROOM; - - TDEBUG (("in gtk_stext_draw_focus\n")); - - x = 0; - y = 0; - width = widget->allocation.width; - height = widget->allocation.height; - - if (GTK_WIDGET_HAS_FOCUS (widget)) - { - x += 1; - y += 1; - width -= 2; - height -= 2; - xextra -= 1; - yextra -= 1; - - gtk_paint_focus (widget->style, widget->window, - NULL, widget, "text", - 0, 0, - widget->allocation.width - 1, - widget->allocation.height - 1); - } - - gtk_paint_shadow (widget->style, widget->window, - GTK_STATE_NORMAL, GTK_SHADOW_IN, - NULL, widget, "text", - x, y, width, height); - - x += xthick; - y += ythick; - width -= 2 * xthick; - height -= 2 * ythick; - - /* top rect */ - clear_focus_area (text, x, y, width, yextra); - /* left rect */ - clear_focus_area (text, x, y + yextra, - xextra, y + height - 2 * yextra); - /* right rect */ - clear_focus_area (text, x + width - xextra, y + yextra, - xextra, height - 2 * ythick); - /* bottom rect */ - clear_focus_area (text, x, x + height - yextra, width, yextra); - } - else - { - TDEBUG (("in gtk_stext_draw_focus (undrawable !!!)\n")); - } -} - -static void -gtk_stext_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - gint xthickness; - gint ythickness; - gint char_height; - gint char_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GTK_IS_STEXT (widget)); - g_return_if_fail (requisition != NULL); - - xthickness = widget->style->klass->xthickness + TEXT_BORDER_ROOM; - ythickness = widget->style->klass->ythickness + TEXT_BORDER_ROOM; - - char_height = MIN_TEXT_HEIGHT_LINES * (widget->style->font->ascent + - widget->style->font->descent); - - char_width = MIN_TEXT_WIDTH_LINES * (gdk_text_width (widget->style->font, - "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - 26) - / 26); - - requisition->width = char_width + xthickness * 2; - requisition->height = char_height + ythickness * 2; -} - -static void -gtk_stext_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GtkSText *text; - GtkEditable *editable; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GTK_IS_STEXT (widget)); - g_return_if_fail (allocation != NULL); - - text = GTK_STEXT (widget); - editable = GTK_EDITABLE (widget); - - widget->allocation = *allocation; - if (GTK_WIDGET_REALIZED (widget)) - { - gdk_window_move_resize (widget->window, - allocation->x, allocation->y, - allocation->width, allocation->height); - - gdk_window_move_resize (text->text_area, - widget->style->klass->xthickness + TEXT_BORDER_ROOM, - widget->style->klass->ythickness + TEXT_BORDER_ROOM, - MAX (1, (gint)widget->allocation.width - (gint)(widget->style->klass->xthickness + - (gint)TEXT_BORDER_ROOM) * 2), - MAX (1, (gint)widget->allocation.height - (gint)(widget->style->klass->ythickness + - (gint)TEXT_BORDER_ROOM) * 2)); - -#ifdef USE_GTKGDK_XIM - if (editable->ic && (gdk_ic_get_style (editable->ic) & GDK_IM_PREEDIT_POSITION)) - { - gint width, height; - - gdk_window_get_size (text->text_area, &width, &height); - editable->ic_attr->preedit_area.width = width; - editable->ic_attr->preedit_area.height = height; - - gdk_ic_set_attr (editable->ic, - editable->ic_attr, GDK_IC_PREEDIT_AREA); - } -#endif - - recompute_geometry (text); - } -} - -static void -gtk_stext_draw (GtkWidget *widget, - GdkRectangle *area) -{ - g_return_if_fail (widget != NULL); - g_return_if_fail (GTK_IS_STEXT (widget)); - g_return_if_fail (area != NULL); - - if (GTK_WIDGET_DRAWABLE (widget)) - { - expose_text (GTK_STEXT (widget), area, TRUE); - gtk_widget_draw_focus (widget); - } -} - -static gint -gtk_stext_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_STEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - if (event->window == GTK_STEXT (widget)->text_area) - { - TDEBUG (("in gtk_stext_expose (expose)\n")); - expose_text (GTK_STEXT (widget), &event->area, TRUE); - } - else if (event->count == 0) - { - TDEBUG (("in gtk_stext_expose (focus)\n")); - gtk_widget_draw_focus (widget); - } - - return FALSE; -} - -static gint -gtk_stext_scroll_timeout (gpointer data) -{ - GtkSText *text; - GdkEventMotion event; - gint x, y; - GdkModifierType mask; - - GDK_THREADS_ENTER (); - - text = GTK_STEXT (data); - - text->timer = 0; - gdk_window_get_pointer (text->text_area, &x, &y, &mask); - - if (mask & (GDK_BUTTON1_MASK | GDK_BUTTON3_MASK)) - { - event.is_hint = 0; - event.x = x; - event.y = y; - event.state = mask; - - gtk_stext_motion_notify (GTK_WIDGET (text), &event); - } - - GDK_THREADS_LEAVE (); - - return FALSE; -} - -static gint -gtk_stext_button_press (GtkWidget *widget, - GdkEventButton *event) -{ - GtkSText *text; - GtkEditable *editable; - static GdkAtom ctext_atom = GDK_NONE; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_STEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - if (ctext_atom == GDK_NONE) - ctext_atom = gdk_atom_intern ("COMPOUND_TEXT", FALSE); - - text = GTK_STEXT (widget); - editable = GTK_EDITABLE (widget); - - if (text->button && (event->button != text->button)) - return FALSE; - - text->button = event->button; - - if (!GTK_WIDGET_HAS_FOCUS (widget)) - gtk_widget_grab_focus (widget); - - if (event->button == 1) - { - switch (event->type) - { - case GDK_BUTTON_PRESS: - gtk_grab_add (widget); - - undraw_cursor (text, FALSE); - find_mouse_cursor (text, (gint)event->x, (gint)event->y); - draw_cursor (text, FALSE); - - /* Set it now, so we display things right. We'll unset it - * later if things don't work out */ - editable->has_selection = TRUE; - gtk_stext_set_selection (GTK_EDITABLE(text), - text->cursor_mark.index, - text->cursor_mark.index); - - break; - - case GDK_2BUTTON_PRESS: - gtk_stext_select_word (text, event->time); - break; - - case GDK_3BUTTON_PRESS: - gtk_stext_select_line (text, event->time); - break; - - default: - break; - } - } - else if (event->type == GDK_BUTTON_PRESS) - { - if ((event->button == 2) && editable->editable) - { - if (editable->selection_start_pos == editable->selection_end_pos || - editable->has_selection) - { - undraw_cursor (text, FALSE); - find_mouse_cursor (text, (gint)event->x, (gint)event->y); - draw_cursor (text, FALSE); - - } - - gtk_selection_convert (widget, GDK_SELECTION_PRIMARY, - ctext_atom, event->time); - } - else - { - gtk_grab_add (widget); - - undraw_cursor (text, FALSE); - find_mouse_cursor (text, event->x, event->y); - draw_cursor (text, FALSE); - - gtk_stext_set_selection (GTK_EDITABLE(text), - text->cursor_mark.index, - text->cursor_mark.index); - - editable->has_selection = FALSE; - if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == widget->window) - gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY, event->time); - } - } - - return FALSE; -} - -static gint -gtk_stext_button_release (GtkWidget *widget, - GdkEventButton *event) -{ - GtkSText *text; - GtkEditable *editable; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_STEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - text = GTK_STEXT (widget); - - gtk_grab_remove (widget); - - if (text->button != event->button) - return FALSE; - - text->button = 0; - - if (text->timer) - { - gtk_timeout_remove (text->timer); - text->timer = 0; - } - - if (event->button == 1) - { - text = GTK_STEXT (widget); - editable = GTK_EDITABLE (widget); - - gtk_grab_remove (widget); - - editable->has_selection = FALSE; - if (editable->selection_start_pos != editable->selection_end_pos) - { - if (gtk_selection_owner_set (widget, - GDK_SELECTION_PRIMARY, - event->time)) - editable->has_selection = TRUE; - else - gtk_stext_update_text (editable, editable->selection_start_pos, - editable->selection_end_pos); - } - else - { - if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == widget->window) - gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY, event->time); - } - } - else if (event->button == 3) - { - gtk_grab_remove (widget); - } - - undraw_cursor (text, FALSE); - find_cursor (text, TRUE); - draw_cursor (text, FALSE); - - return FALSE; -} - -static gint -gtk_stext_motion_notify (GtkWidget *widget, - GdkEventMotion *event) -{ - GtkSText *text; - gint x, y; - gint height; - GdkModifierType mask; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_STEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - text = GTK_STEXT (widget); - - x = event->x; - y = event->y; - mask = event->state; - if (event->is_hint || (text->text_area != event->window)) - { - gdk_window_get_pointer (text->text_area, &x, &y, &mask); - } - - if ((text->button == 0) || - !(mask & (GDK_BUTTON1_MASK | GDK_BUTTON3_MASK))) - return FALSE; - - gdk_window_get_size (text->text_area, NULL, &height); - - if ((y < 0) || (y > height)) - { - if (text->timer == 0) - { - text->timer = gtk_timeout_add (SCROLL_TIME, - gtk_stext_scroll_timeout, - text); - - if (y < 0) - scroll_int (text, y/2); - else - scroll_int (text, (y - height)/2); - } - else - return FALSE; - } - - undraw_cursor (GTK_STEXT (widget), FALSE); - find_mouse_cursor (GTK_STEXT (widget), x, y); - draw_cursor (GTK_STEXT (widget), FALSE); - - gtk_stext_set_selection (GTK_EDITABLE(text), - GTK_EDITABLE(text)->selection_start_pos, - text->cursor_mark.index); - - return FALSE; -} - -static void -gtk_stext_insert_text (GtkEditable *editable, - const gchar *new_text, - gint new_text_length, - gint *position) -{ - GtkSText *text = GTK_STEXT (editable); - GdkFont *font; - GdkColor *fore, *back; - - TextProperty *property; - - gtk_stext_set_point (text, *position); - - property = MARK_CURRENT_PROPERTY (&text->point); - font = property->flags & PROPERTY_FONT ? property->font->gdk_font : NULL; - fore = property->flags & PROPERTY_FOREGROUND ? &property->fore_color : NULL; - back = property->flags & PROPERTY_BACKGROUND ? &property->back_color : NULL; - - gtk_stext_insert (text, font, fore, back, new_text, new_text_length); - - *position = text->point.index; -} - -static void -gtk_stext_delete_text (GtkEditable *editable, - gint start_pos, - gint end_pos) -{ - GtkSText *text; - - g_return_if_fail (start_pos >= 0); - - text = GTK_STEXT (editable); - - gtk_stext_set_point (text, start_pos); - if (end_pos < 0) - end_pos = TEXT_LENGTH (text); - - if (end_pos > start_pos) - gtk_stext_forward_delete (text, end_pos - start_pos); -} - -static gint -gtk_stext_key_press (GtkWidget *widget, - GdkEventKey *event) -{ - GtkSText *text; - GtkEditable *editable; - gchar key; - gint return_val; - gint position; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_STEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - return_val = FALSE; - - text = GTK_STEXT (widget); - editable = GTK_EDITABLE (widget); - - key = event->keyval; - return_val = TRUE; - - if ((GTK_EDITABLE(text)->editable == FALSE)) - { - switch (event->keyval) - { - case GDK_Home: - if (event->state & GDK_CONTROL_MASK) - scroll_int (text, -text->vadj->value); - else - return_val = FALSE; - break; - case GDK_End: - if (event->state & GDK_CONTROL_MASK) - scroll_int (text, +text->vadj->upper); - else - return_val = FALSE; - break; - case GDK_Page_Up: scroll_int (text, -text->vadj->page_increment); break; - case GDK_Page_Down: scroll_int (text, +text->vadj->page_increment); break; - case GDK_Up: - scroll_int (text, -KEY_SCROLL_PIXELS); - break; - case GDK_Down: scroll_int (text, +KEY_SCROLL_PIXELS); break; - case GDK_Return: - if (event->state & GDK_CONTROL_MASK) - gtk_signal_emit_by_name (GTK_OBJECT (text), "activate"); - else - return_val = FALSE; - break; - default: - return_val = FALSE; - break; - } - } - else - { - gint extend_selection; - gint extend_start; - guint initial_pos = editable->current_pos; - - text->point = find_mark (text, text->cursor_mark.index); - - extend_selection = event->state & GDK_SHIFT_MASK; - extend_start = FALSE; - - if (extend_selection) - { - editable->has_selection = TRUE; - - if (editable->selection_start_pos == editable->selection_end_pos) - { - editable->selection_start_pos = text->point.index; - editable->selection_end_pos = text->point.index; - } - - extend_start = (text->point.index == editable->selection_start_pos); - gtk_stext_disable_blink(text); - } - - /* SYLPHEED: - * cursor - */ - if (!extend_selection) - gtk_stext_enable_blink(text); - - if (event->keyval != GDK_Up && event->keyval != GDK_Down) { - reset_persist_col_pos(text); - } - - switch (event->keyval) - { - case GDK_Home: - if (event->state & GDK_CONTROL_MASK) { - if (text->wrap_rmargin == 0) { - /* SYLPHEED: old behaviour */ - move_cursor_buffer_ver (text, -1); - } - else { - /* SYLPHEED: contrived, but "trusty" */ - move_cursor_buffer_ver(text, -1); - move_cursor_to_display_row_start(text); - } - } - else { - if (text->wrap_rmargin > 0) { - /* SYLPHEED: line start */ - move_cursor_to_display_row_start(text); - } - else { - gtk_stext_move_beginning_of_line (text); - } - } - break; - case GDK_End: - if (event->state & GDK_CONTROL_MASK) { - /* SYLPHEED: a little bit contrived... */ - if (text->wrap_rmargin == 0) { - /* old behaviour */ - move_cursor_buffer_ver (text, +1); - } - else { - move_cursor_buffer_ver(text, +1); - move_cursor_to_display_row_end(text); - } - } - else { - if (text->wrap_rmargin > 0) { - /* SYLPHEED: line end */ - move_cursor_to_display_row_end(text); - } - else { - gtk_stext_move_end_of_line(text); - } - } - break; - case GDK_Page_Up: - move_cursor_page_ver (text, -1); - break; - case GDK_Page_Down: move_cursor_page_ver (text, +1); break; - /* CUA has Ctrl-Up/Ctrl-Down as paragraph up down */ - case GDK_Up: - if (text->wrap_rmargin > 0) { - /* SYLPHEED - */ - move_cursor_to_display_row_up(text); - } - else { - move_cursor_ver (text, -1); - } - break; - case GDK_Down: - move_cursor_to_display_row_down(text); -/* move_cursor_ver (text, +1); */ - break; - case GDK_Left: - if (event->state & GDK_CONTROL_MASK) - gtk_stext_move_backward_word (text); - else - move_cursor_hor (text, -1); - break; - case GDK_Right: - if (event->state & GDK_CONTROL_MASK) - gtk_stext_move_forward_word (text); - else - move_cursor_hor (text, +1); - break; - - case GDK_BackSpace: - if (event->state & GDK_CONTROL_MASK) - gtk_stext_delete_backward_word (text); - else - gtk_stext_delete_backward_character (text); - break; - case GDK_Clear: - gtk_stext_delete_line (text); - break; - case GDK_Insert: - if (event->state & GDK_SHIFT_MASK) - { - extend_selection = FALSE; - gtk_editable_paste_clipboard (editable); - } - else if (event->state & GDK_CONTROL_MASK) - { - gtk_editable_copy_clipboard (editable); - } - else - { - /* gtk_toggle_insert(text) -- IMPLEMENT */ - } - break; - case GDK_Delete: - { - if (event->state & GDK_CONTROL_MASK) { - gtk_stext_delete_forward_word (text); - } - else if (event->state & GDK_SHIFT_MASK) - { - extend_selection = FALSE; - gtk_editable_cut_clipboard (editable); - } - else { - gtk_stext_delete_forward_character (text); - } - } - break; - case GDK_Tab: - position = text->point.index; - gtk_editable_insert_text (editable, "\t", 1, &position); - break; - case GDK_Return: - if (event->state & GDK_CONTROL_MASK) - gtk_signal_emit_by_name (GTK_OBJECT (text), "activate"); - else - { - position = text->point.index; - gtk_editable_insert_text (editable, "\n", 1, &position); - } - break; - case GDK_Escape: - /* Don't insert literally */ - return_val = FALSE; - break; - - default: - return_val = FALSE; - - if (event->state & GDK_CONTROL_MASK) - { - if ((key >= 'A') && (key <= 'Z')) - key -= 'A' - 'a'; - - if ((key >= 'a') && (key <= 'z') && control_keys[(int) (key - 'a')]) - { - (* control_keys[(int) (key - 'a')]) (editable, event->time); - return_val = TRUE; - } - - break; - } - else if (event->state & GDK_MOD1_MASK) - { - if ((key >= 'A') && (key <= 'Z')) - key -= 'A' - 'a'; - - if ((key >= 'a') && (key <= 'z') && alt_keys[(int) (key - 'a')]) - { - (* alt_keys[(int) (key - 'a')]) (editable, event->time); - return_val = TRUE; - } - - break; - } - else if (event->length > 0) - { - extend_selection = FALSE; - - gtk_editable_delete_selection (editable); - position = text->point.index; - gtk_editable_insert_text (editable, event->string, event->length, &position); - - return_val = TRUE; - } - else - return_val = FALSE; - } - - if (return_val && (editable->current_pos != initial_pos)) - { - if (extend_selection) - { - if (editable->current_pos < editable->selection_start_pos) - gtk_stext_set_selection (editable, editable->current_pos, - editable->selection_end_pos); - else if (editable->current_pos > editable->selection_end_pos) - gtk_stext_set_selection (editable, editable->selection_start_pos, - editable->current_pos); - else - { - if (extend_start) - gtk_stext_set_selection (editable, editable->current_pos, - editable->selection_end_pos); - else - gtk_stext_set_selection (editable, editable->selection_start_pos, - editable->current_pos); - } - } - else - gtk_stext_set_selection (editable, 0, 0); - - gtk_editable_claim_selection (editable, - editable->selection_start_pos != editable->selection_end_pos, - event->time); - } - } - - return return_val; -} - -static gint -gtk_stext_focus_in (GtkWidget *widget, - GdkEventFocus *event) -{ - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_STEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - TDEBUG (("in gtk_stext_focus_in\n")); - - GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); - gtk_widget_draw_focus (widget); - -#ifdef USE_GTKGDK_XIM - if (GTK_EDITABLE(widget)->ic) - gdk_im_begin (GTK_EDITABLE(widget)->ic, GTK_STEXT(widget)->text_area); -#endif - - draw_cursor (GTK_STEXT(widget), TRUE); - GTK_STEXT(widget)->cursor_visible = TRUE; - gtk_stext_enable_blink(GTK_STEXT(widget)); - - return FALSE; -} - -static gint -gtk_stext_focus_out (GtkWidget *widget, - GdkEventFocus *event) -{ - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_STEXT (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - TDEBUG (("in gtk_stext_focus_out\n")); - - GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); - gtk_widget_draw_focus (widget); - - /* SYLPHEED: - * should disable blink before undrawing the cursor - disabling blink - * redraws the cursor. - */ - gtk_stext_disable_blink(GTK_STEXT(widget)); - undraw_cursor (GTK_STEXT(widget), TRUE); - GTK_STEXT(widget)->cursor_visible = FALSE; - -#ifdef USE_GTKGDK_XIM - gdk_im_end (); -#endif - - return FALSE; -} - -static void -gtk_stext_adjustment (GtkAdjustment *adjustment, - GtkSText *text) -{ - gfloat old_val; - - g_return_if_fail (adjustment != NULL); - g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - - /* Clamp the value here, because we'll get really confused - * if someone tries to move the adjusment outside of the - * allowed bounds - */ - old_val = adjustment->value; - - adjustment->value = MIN (adjustment->value, adjustment->upper - adjustment->page_size); - adjustment->value = MAX (adjustment->value, 0.0); - - if (adjustment->value != old_val) - { - gtk_signal_handler_block_by_func (GTK_OBJECT (adjustment), - GTK_SIGNAL_FUNC (gtk_stext_adjustment), - text); - gtk_adjustment_changed (adjustment); - gtk_signal_handler_unblock_by_func (GTK_OBJECT (adjustment), - GTK_SIGNAL_FUNC (gtk_stext_adjustment), - text); - } - - /* Just ignore it if we haven't been size-allocated and realized yet */ - if (text->line_start_cache == NULL) - return; - - if (adjustment == text->hadj) - { - g_warning ("horizontal scrolling not implemented"); - } - else - { - gint diff = ((gint)adjustment->value) - text->last_ver_value; - - if (diff != 0) - { - undraw_cursor (text, FALSE); - - if (diff > 0) - scroll_down (text, diff); - else /* if (diff < 0) */ - scroll_up (text, diff); - - draw_cursor (text, FALSE); - - text->last_ver_value = adjustment->value; - } - } -} - -static void -gtk_stext_disconnect (GtkAdjustment *adjustment, - GtkSText *text) -{ - g_return_if_fail (adjustment != NULL); - g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); - g_return_if_fail (text != NULL); - g_return_if_fail (GTK_IS_STEXT (text)); - - if (adjustment == text->hadj) - gtk_stext_set_adjustments (text, NULL, text->vadj); - if (adjustment == text->vadj) - gtk_stext_set_adjustments (text, text->hadj, NULL); -} - - -static GtkSPropertyMark -find_this_line_start_mark (GtkSText* text, guint point_position, const GtkSPropertyMark* near) -{ - GtkSPropertyMark mark; - - mark = find_mark_near (text, point_position, near); - - while (mark.index > 0 && - GTK_STEXT_INDEX (text, mark.index - 1) != LINE_DELIM) - decrement_mark (&mark); - - return mark; -} - -static void -init_tab_cont (GtkSText* text, PrevTabCont* tab_cont) -{ - tab_cont->pixel_offset = 0; - tab_cont->tab_start.tab_stops = text->tab_stops; - tab_cont->tab_start.to_next_tab = (gulong) text->tab_stops->data; - - if (!tab_cont->tab_start.to_next_tab) - tab_cont->tab_start.to_next_tab = text->default_tab_width; -} - -static void -line_params_iterate (GtkSText* text, - const GtkSPropertyMark* mark0, - const PrevTabCont* tab_mark0, - gint8 alloc, - void* data, - LineIteratorFunction iter) - /* mark0 MUST be a real line start. if ALLOC, allocate line params - * from a mem chunk. DATA is passed to ITER_CALL, which is called - * for each line following MARK, iteration continues unless ITER_CALL - * returns TRUE. */ -{ - GtkSPropertyMark mark = *mark0; - PrevTabCont tab_conts[2]; - LineParams *lp, lpbuf; - gint tab_cont_index = 0; - - if (tab_mark0) - tab_conts[0] = *tab_mark0; - else - init_tab_cont (text, tab_conts); - - for (;;) - { - if (alloc) - lp = g_chunk_new (LineParams, params_mem_chunk); - else - lp = &lpbuf; - - *lp = find_line_params (text, &mark, tab_conts + tab_cont_index, - tab_conts + (tab_cont_index + 1) % 2); - - if ((*iter) (text, lp, data)) - return; - - if (LAST_INDEX (text, lp->end)) - break; - - mark = lp->end; - advance_mark (&mark); - tab_cont_index = (tab_cont_index + 1) % 2; - } -} - -static gint -fetch_lines_iterator (GtkSText* text, LineParams* lp, void* data) -{ - FetchLinesData *fldata = (FetchLinesData*) data; - - fldata->new_lines = g_list_prepend (fldata->new_lines, lp); - - switch (fldata->fl_type) - { - case FetchLinesCount: - if (!text->line_wrap || !lp->wraps) - fldata->data += 1; - - if (fldata->data >= fldata->data_max) - return TRUE; - - break; - case FetchLinesPixels: - - fldata->data += LINE_HEIGHT(*lp); - - if (fldata->data >= fldata->data_max) - return TRUE; - - break; - } - - return FALSE; -} - -static GList* -fetch_lines (GtkSText* text, - const GtkSPropertyMark* mark0, - const PrevTabCont* tab_cont0, - FLType fl_type, - gint data) -{ - FetchLinesData fl_data; - - fl_data.new_lines = NULL; - fl_data.data = 0; - fl_data.data_max = data; - fl_data.fl_type = fl_type; - - line_params_iterate (text, mark0, tab_cont0, TRUE, &fl_data, fetch_lines_iterator); - - return g_list_reverse (fl_data.new_lines); -} - -static void -fetch_lines_backward (GtkSText* text) -{ - GList* new_lines = NULL, *new_line_start; - GtkSPropertyMark mark; - - if (CACHE_DATA(text->line_start_cache).start.index == 0) - return; - - mark = find_this_line_start_mark (text, - CACHE_DATA(text->line_start_cache).start.index - 1, - &CACHE_DATA(text->line_start_cache).start); - - new_line_start = new_lines = fetch_lines (text, &mark, NULL, FetchLinesCount, 1); - - while (new_line_start->next) - new_line_start = new_line_start->next; - - new_line_start->next = text->line_start_cache; - text->line_start_cache->prev = new_line_start; -} - -static void -fetch_lines_forward (GtkSText* text, gint line_count) -{ - GtkSPropertyMark mark; - GList* line = text->line_start_cache; - - while(line->next) - line = line->next; - - mark = CACHE_DATA(line).end; - - if (LAST_INDEX (text, mark)) - return; - - advance_mark(&mark); - - line->next = fetch_lines (text, &mark, &CACHE_DATA(line).tab_cont_next, FetchLinesCount, line_count); - - if (line->next) - line->next->prev = line; -} - -/* Compute the number of lines, and vertical pixels for n characters - * starting from the point - */ -static void -compute_lines_pixels (GtkSText* text, guint char_count, - guint *lines, guint *pixels) -{ - GList *line = text->current_line; - gint chars_left = char_count; - - *lines = 0; - *pixels = 0; - - /* If chars_left == 0, that means we're joining two lines in a - * deletion, so add in the values for the next line as well - */ - for (; line && chars_left >= 0; line = line->next) - { - *pixels += LINE_HEIGHT(CACHE_DATA(line)); - - if (line == text->current_line) - chars_left -= CACHE_DATA(line).end.index - text->point.index + 1; - else - chars_left -= CACHE_DATA(line).end.index - CACHE_DATA(line).start.index + 1; - - if (!text->line_wrap || !CACHE_DATA(line).wraps) - *lines += 1; - else - if (chars_left < 0) - chars_left = 0; /* force another loop */ - - if (!line->next) - fetch_lines_forward (text, 1); - } -} - -static gint -total_line_height (GtkSText* text, GList* line, gint line_count) -{ - gint height = 0; - - for (; line && line_count > 0; line = line->next) - { - height += LINE_HEIGHT(CACHE_DATA(line)); - - if (!text->line_wrap || !CACHE_DATA(line).wraps) - line_count -= 1; - - if (!line->next) - fetch_lines_forward (text, line_count); - } - - return height; -} - -static void -swap_lines (GtkSText* text, GList* old, GList* new, guint old_line_count) -{ - if (old == text->line_start_cache) - { - GList* last; - - for (; old_line_count > 0; old_line_count -= 1) - { - while (text->line_start_cache && - text->line_wrap && - CACHE_DATA(text->line_start_cache).wraps) - remove_cache_line(text, text->line_start_cache); - - remove_cache_line(text, text->line_start_cache); - } - - last = g_list_last (new); - - last->next = text->line_start_cache; - - if (text->line_start_cache) - text->line_start_cache->prev = last; - - text->line_start_cache = new; - } - else - { - GList *last; - - g_assert (old->prev); - - last = old->prev; - - for (; old_line_count > 0; old_line_count -= 1) - { - while (old && text->line_wrap && CACHE_DATA(old).wraps) - old = remove_cache_line (text, old); - - old = remove_cache_line (text, old); - } - - last->next = new; - new->prev = last; - - last = g_list_last (new); - - last->next = old; - - if (old) - old->prev = last; - } -} - -static void -correct_cache_delete (GtkSText* text, gint nchars, gint lines) -{ - GList* cache = text->current_line; - gint i; - - for (i = 0; cache && i < lines; i += 1, cache = cache->next) - /* nothing */; - - for (; cache; cache = cache->next) - { - GtkSPropertyMark *start = &CACHE_DATA(cache).start; - GtkSPropertyMark *end = &CACHE_DATA(cache).end; - - start->index -= nchars; - end->index -= nchars; - - if (LAST_INDEX (text, text->point) && - start->index == text->point.index) - *start = text->point; - else if (start->property == text->point.property) - start->offset = start->index - (text->point.index - text->point.offset); - - if (LAST_INDEX (text, text->point) && - end->index == text->point.index) - *end = text->point; - if (end->property == text->point.property) - end->offset = end->index - (text->point.index - text->point.offset); - - /*TEXT_ASSERT_MARK(text, start, "start");*/ - /*TEXT_ASSERT_MARK(text, end, "end");*/ - } -} - -static void -delete_expose (GtkSText* text, guint nchars, guint old_lines, guint old_pixels) -{ - GtkWidget *widget = GTK_WIDGET (text); - - gint pixel_height; - guint new_pixels = 0; - GdkRectangle rect; - GList* new_line = NULL; - gint width, height; - - text->cursor_virtual_x = 0; - - correct_cache_delete (text, nchars, old_lines); - - pixel_height = pixel_height_of(text, text->current_line) - - LINE_HEIGHT(CACHE_DATA(text->current_line)); - - if (CACHE_DATA(text->current_line).start.index == text->point.index) - CACHE_DATA(text->current_line).start = text->point; - - new_line = fetch_lines (text, - &CACHE_DATA(text->current_line).start, - &CACHE_DATA(text->current_line).tab_cont, - FetchLinesCount, - 1); - - swap_lines (text, text->current_line, new_line, old_lines); - - text->current_line = new_line; - - new_pixels = total_line_height (text, new_line, 1); - - gdk_window_get_size (text->text_area, &width, &height); - - if (old_pixels != new_pixels) - { - if (!widget->style->bg_pixmap[GTK_STATE_NORMAL]) - { - gdk_draw_pixmap (text->text_area, - text->gc, - text->text_area, - 0, - pixel_height + old_pixels, - 0, - pixel_height + new_pixels, - width, - height); - } - text->vadj->upper += new_pixels; - text->vadj->upper -= old_pixels; - adjust_adj (text, text->vadj); - } - - rect.x = 0; - rect.y = pixel_height; - rect.width = width; - rect.height = new_pixels; - - expose_text (text, &rect, FALSE); - gtk_stext_draw_focus ( (GtkWidget *) text); - - text->cursor_mark = text->point; - - find_cursor (text, TRUE); - - if (old_pixels != new_pixels) - { - if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) - { - rect.x = 0; - rect.y = pixel_height + new_pixels; - rect.width = width; - rect.height = height - rect.y; - - expose_text (text, &rect, FALSE); - } - else - process_exposes (text); - } - - TEXT_ASSERT (text); - TEXT_SHOW(text); -} - -/* note, the point has already been moved forward */ -static void -correct_cache_insert (GtkSText* text, gint nchars) -{ - GList *cache; - GtkSPropertyMark *start; - GtkSPropertyMark *end; - - /* If we inserted a property exactly at the beginning of the - * line, we have to correct here, or fetch_lines will - * fetch junk. - */ - start = &CACHE_DATA(text->current_line).start; - if (start->index == text->point.index - nchars) - { - *start = text->point; - move_mark_n (start, -nchars); - } - - /* Now correct the offsets, and check for start or end marks that - * are after the point, yet point to a property before the point's - * property. This indicates that they are meant to point to the - * second half of a property we split in insert_text_property(), so - * we fix them up that way. - */ - cache = text->current_line->next; - - for (; cache; cache = cache->next) - { - start = &CACHE_DATA(cache).start; - end = &CACHE_DATA(cache).end; - - if (LAST_INDEX (text, text->point) && - start->index == text->point.index) - *start = text->point; - else - { - if (start->property == text->point.property) - { - start->offset += nchars; - start->index += nchars; - } - else if (start->property->next && - (start->property->next->next == text->point.property)) - { - /* We split the property, and this is the second half */ - start->offset -= MARK_CURRENT_PROPERTY (start)->length; - start->index += nchars; - start->property = text->point.property; - } - else - start->index += nchars; - } - - if (LAST_INDEX (text, text->point) && - end->index == text->point.index) - *end = text->point; - else - { - if (end->property == text->point.property) - { - end->offset += nchars; - end->index += nchars; - } - else if (end->property->next && - (end->property->next->next == text->point.property)) - { - /* We split the property, and this is the second half */ - end->offset -= MARK_CURRENT_PROPERTY (end)->length; - end->index += nchars; - end->property = text->point.property; - } - else - end->index += nchars; - } - - /*TEXT_ASSERT_MARK(text, start, "start");*/ - /*TEXT_ASSERT_MARK(text, end, "end");*/ - } -} - - -static void -insert_expose (GtkSText* text, guint old_pixels, gint nchars, - guint new_line_count) -{ - GtkWidget *widget = GTK_WIDGET (text); - - gint pixel_height; - guint new_pixels = 0; - GdkRectangle rect; - GList* new_lines = NULL; - gint width, height; - - text->cursor_virtual_x = 0; - - undraw_cursor (text, FALSE); - - correct_cache_insert (text, nchars); - - TEXT_SHOW_ADJ (text, text->vadj, "vadj"); - - pixel_height = pixel_height_of(text, text->current_line) - - LINE_HEIGHT(CACHE_DATA(text->current_line)); - - new_lines = fetch_lines (text, - &CACHE_DATA(text->current_line).start, - &CACHE_DATA(text->current_line).tab_cont, - FetchLinesCount, - new_line_count); - - swap_lines (text, text->current_line, new_lines, 1); - - text->current_line = new_lines; - - new_pixels = total_line_height (text, new_lines, new_line_count); - - gdk_window_get_size (text->text_area, &width, &height); - - if (old_pixels != new_pixels) - { - if (!widget->style->bg_pixmap[GTK_STATE_NORMAL]) - { - gdk_draw_pixmap (text->text_area, - text->gc, - text->text_area, - 0, - pixel_height + old_pixels, - 0, - pixel_height + new_pixels, - width, - height + (old_pixels - new_pixels) - pixel_height); - - } - text->vadj->upper += new_pixels; - text->vadj->upper -= old_pixels; - adjust_adj (text, text->vadj); - } - - rect.x = 0; - rect.y = pixel_height; - rect.width = width; - rect.height = new_pixels; - - expose_text (text, &rect, FALSE); - gtk_stext_draw_focus ( (GtkWidget *) text); - - text->cursor_mark = text->point; - - find_cursor (text, TRUE); - - draw_cursor (text, FALSE); - - if (old_pixels != new_pixels) - { - if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) - { - rect.x = 0; - rect.y = pixel_height + new_pixels; - rect.width = width; - rect.height = height - rect.y; - - expose_text (text, &rect, FALSE); - } - else - process_exposes (text); - } - - TEXT_SHOW_ADJ (text, text->vadj, "vadj"); - TEXT_ASSERT (text); - TEXT_SHOW(text); -} - -/* Text property functions */ - -static guint -font_hash (gconstpointer font) -{ - return gdk_font_id ((const GdkFont*) font); -} - -static GHashTable *font_cache_table = NULL; - -static GtkSTextFont* -get_text_font (GdkFont* gfont) -{ - GtkSTextFont* tf; - gint i; - - if (!font_cache_table) - font_cache_table = g_hash_table_new (font_hash, (GCompareFunc) gdk_font_equal); - - tf = g_hash_table_lookup (font_cache_table, gfont); - - if (tf) - { - tf->ref_count++; - return tf; - } - - tf = g_new (GtkSTextFont, 1); - tf->ref_count = 1; - - tf->gdk_font = gfont; - gdk_font_ref (gfont); - - for(i = 0; i < 256; i += 1) - tf->char_widths[i] = gdk_char_width (gfont, (char)i); - - g_hash_table_insert (font_cache_table, gfont, tf); - - return tf; -} - -static void -text_font_unref (GtkSTextFont *text_font) -{ - text_font->ref_count--; - if (text_font->ref_count == 0) - { - g_hash_table_remove (font_cache_table, text_font->gdk_font); - gdk_font_unref (text_font->gdk_font); - g_free (text_font); - } -} - -static gint -text_properties_equal (TextProperty* prop, GdkFont* font, GdkColor *fore, GdkColor *back) -{ - if (prop->flags & PROPERTY_FONT) - { - gboolean retval; - GtkSTextFont *text_font; - - if (!font) - return FALSE; - - text_font = get_text_font (font); - - retval = (prop->font == text_font); - text_font_unref (text_font); - - if (!retval) - return FALSE; - } - else - if (font != NULL) - return FALSE; - - if (prop->flags & PROPERTY_FOREGROUND) - { - if (!fore || !gdk_color_equal (&prop->fore_color, fore)) - return FALSE; - } - else - if (fore != NULL) - return FALSE; - - if (prop->flags & PROPERTY_BACKGROUND) - { - if (!back || !gdk_color_equal (&prop->back_color, back)) - return FALSE; - } - else - if (back != NULL) - return FALSE; - - return TRUE; -} - -static void -realize_property (GtkSText *text, TextProperty *prop) -{ - GdkColormap *colormap = gtk_widget_get_colormap (GTK_WIDGET (text)); - - if (prop->flags & PROPERTY_FOREGROUND) - gdk_colormap_alloc_color (colormap, &prop->fore_color, FALSE, FALSE); - - if (prop->flags & PROPERTY_BACKGROUND) - gdk_colormap_alloc_color (colormap, &prop->back_color, FALSE, FALSE); -} - -static void -realize_properties (GtkSText *text) -{ - GList *tmp_list = text->text_properties; - - while (tmp_list) - { - realize_property (text, tmp_list->data); - - tmp_list = tmp_list->next; - } -} - -static void -unrealize_property (GtkSText *text, TextProperty *prop) -{ - GdkColormap *colormap = gtk_widget_get_colormap (GTK_WIDGET (text)); - - if (prop->flags & PROPERTY_FOREGROUND) - gdk_colormap_free_colors (colormap, &prop->fore_color, 1); - - if (prop->flags & PROPERTY_BACKGROUND) - gdk_colormap_free_colors (colormap, &prop->back_color, 1); -} - -static void -unrealize_properties (GtkSText *text) -{ - GList *tmp_list = text->text_properties; - - while (tmp_list) - { - unrealize_property (text, tmp_list->data); - - tmp_list = tmp_list->next; - } -} - -static TextProperty* -new_text_property (GtkSText *text, GdkFont *font, GdkColor* fore, - GdkColor* back, guint length) -{ - TextProperty *prop; - - if (text_property_chunk == NULL) - { - text_property_chunk = g_mem_chunk_new ("text property mem chunk", - sizeof(TextProperty), - 1024*sizeof(TextProperty), - G_ALLOC_AND_FREE); - } - - prop = g_chunk_new(TextProperty, text_property_chunk); - - prop->flags = 0; - if (font) - { - prop->flags |= PROPERTY_FONT; - prop->font = get_text_font (font); - } - else - prop->font = NULL; - - if (fore) - { - prop->flags |= PROPERTY_FOREGROUND; - prop->fore_color = *fore; - } - - if (back) - { - prop->flags |= PROPERTY_BACKGROUND; - prop->back_color = *back; - } - - prop->length = length; - - if (GTK_WIDGET_REALIZED (text)) - realize_property (text, prop); - - return prop; -} - -static void -destroy_text_property (TextProperty *prop) -{ - if (prop->font) - text_font_unref (prop->font); - - g_mem_chunk_free (text_property_chunk, prop); -} - -/* Flop the memory between the point and the gap around like a - * dead fish. */ -static void -move_gap (GtkSText* text, guint index) -{ - if (text->gap_position < index) - { - gint diff = index - text->gap_position; - - if (text->use_wchar) - g_memmove (text->text.wc + text->gap_position, - text->text.wc + text->gap_position + text->gap_size, - diff*sizeof (GdkWChar)); - else - g_memmove (text->text.ch + text->gap_position, - text->text.ch + text->gap_position + text->gap_size, - diff); - - text->gap_position = index; - } - else if (text->gap_position > index) - { - gint diff = text->gap_position - index; - - if (text->use_wchar) - g_memmove (text->text.wc + index + text->gap_size, - text->text.wc + index, - diff*sizeof (GdkWChar)); - else - g_memmove (text->text.ch + index + text->gap_size, - text->text.ch + index, - diff); - - text->gap_position = index; - } -} - -/* Increase the gap size. */ -static void -make_forward_space (GtkSText* text, guint len) -{ - if (text->gap_size < len) - { - guint sum = MAX(2*len, MIN_GAP_SIZE) + text->text_end; - - if (sum >= text->text_len) - { - guint i = 1; - - while (i <= sum) i <<= 1; - - if (text->use_wchar) - text->text.wc = (GdkWChar *)g_realloc(text->text.wc, - i*sizeof(GdkWChar)); - else - text->text.ch = (guchar *)g_realloc(text->text.ch, i); - text->text_len = i; - } - - if (text->use_wchar) - g_memmove (text->text.wc + text->gap_position + text->gap_size + 2*len, - text->text.wc + text->gap_position + text->gap_size, - (text->text_end - (text->gap_position + text->gap_size)) - *sizeof(GdkWChar)); - else - g_memmove (text->text.ch + text->gap_position + text->gap_size + 2*len, - text->text.ch + text->gap_position + text->gap_size, - text->text_end - (text->gap_position + text->gap_size)); - - text->text_end += len*2; - text->gap_size += len*2; - } -} - -/* Inserts into the text property list a list element that guarantees - * that for len characters following the point, text has the correct - * property. does not move point. adjusts text_properties_point and - * text_properties_point_offset relative to the current value of - * point. */ -static void -insert_text_property (GtkSText* text, GdkFont* font, - GdkColor *fore, GdkColor* back, guint len) -{ - GtkSPropertyMark *mark = &text->point; - TextProperty* forward_prop = MARK_CURRENT_PROPERTY(mark); - TextProperty* backward_prop = MARK_PREV_PROPERTY(mark); - - if (MARK_OFFSET(mark) == 0) - { - /* Point is on the boundary of two properties. - * If it is the same as either, grow, else insert - * a new one. */ - - if (text_properties_equal(forward_prop, font, fore, back)) - { - /* Grow the property in front of us. */ - - MARK_PROPERTY_LENGTH(mark) += len; - } - else if (backward_prop && - text_properties_equal(backward_prop, font, fore, back)) - { - /* Grow property behind us, point property and offset - * change. */ - - SET_PROPERTY_MARK (&text->point, - MARK_PREV_LIST_PTR (mark), - backward_prop->length); - - backward_prop->length += len; - } - else if ((MARK_NEXT_LIST_PTR(mark) == NULL) && - (forward_prop->length == 1)) - { - /* Next property just has last position, take it over */ - - if (GTK_WIDGET_REALIZED (text)) - unrealize_property (text, forward_prop); - - forward_prop->flags = 0; - if (font) - { - forward_prop->flags |= PROPERTY_FONT; - forward_prop->font = get_text_font (font); - } - else - forward_prop->font = NULL; - - if (fore) - { - forward_prop->flags |= PROPERTY_FOREGROUND; - forward_prop->fore_color = *fore; - } - if (back) - { - forward_prop->flags |= PROPERTY_BACKGROUND; - forward_prop->back_color = *back; - } - forward_prop->length += len; - - if (GTK_WIDGET_REALIZED (text)) - realize_property (text, forward_prop); - } - else - { - /* Splice a new property into the list. */ - - GList* new_prop = g_list_alloc(); - - new_prop->next = MARK_LIST_PTR(mark); - new_prop->prev = MARK_PREV_LIST_PTR(mark); - new_prop->next->prev = new_prop; - - if (new_prop->prev) - new_prop->prev->next = new_prop; - - new_prop->data = new_text_property (text, font, fore, back, len); - - SET_PROPERTY_MARK (mark, new_prop, 0); - } - } - else - { - /* The following will screw up the line_start cache, - * we'll fix it up in correct_cache_insert - */ - - /* In the middle of forward_prop, if properties are equal, - * just add to its length, else split it into two and splice - * in a new one. */ - if (text_properties_equal (forward_prop, font, fore, back)) - { - forward_prop->length += len; - } - else if ((MARK_NEXT_LIST_PTR(mark) == NULL) && - (MARK_OFFSET(mark) + 1 == forward_prop->length)) - { - /* Inserting before only the last position in the text */ - - GList* new_prop; - forward_prop->length -= 1; - - new_prop = g_list_alloc(); - new_prop->data = new_text_property (text, font, fore, back, len+1); - new_prop->prev = MARK_LIST_PTR(mark); - new_prop->next = NULL; - MARK_NEXT_LIST_PTR(mark) = new_prop; - - SET_PROPERTY_MARK (mark, new_prop, 0); - } - else - { - GList* new_prop = g_list_alloc(); - GList* new_prop_forward = g_list_alloc(); - gint old_length = forward_prop->length; - GList* next = MARK_NEXT_LIST_PTR(mark); - - /* Set the new lengths according to where they are split. Construct - * two new properties. */ - forward_prop->length = MARK_OFFSET(mark); - - new_prop_forward->data = - new_text_property(text, - forward_prop->flags & PROPERTY_FONT ? - forward_prop->font->gdk_font : NULL, - forward_prop->flags & PROPERTY_FOREGROUND ? - &forward_prop->fore_color : NULL, - forward_prop->flags & PROPERTY_BACKGROUND ? - &forward_prop->back_color : NULL, - old_length - forward_prop->length); - - new_prop->data = new_text_property(text, font, fore, back, len); - - /* Now splice things in. */ - MARK_NEXT_LIST_PTR(mark) = new_prop; - new_prop->prev = MARK_LIST_PTR(mark); - - new_prop->next = new_prop_forward; - new_prop_forward->prev = new_prop; - - new_prop_forward->next = next; - - if (next) - next->prev = new_prop_forward; - - SET_PROPERTY_MARK (mark, new_prop, 0); - } - } - - while (text->text_properties_end->next) - text->text_properties_end = text->text_properties_end->next; - - while (text->text_properties->prev) - text->text_properties = text->text_properties->prev; -} - -static void -delete_text_property (GtkSText* text, guint nchars) -{ - /* Delete nchars forward from point. */ - - /* Deleting text properties is problematical, because we - * might be storing around marks pointing to a property. - * - * The marks in question and how we handle them are: - * - * point: We know the new value, since it will be at the - * end of the deleted text, and we move it there - * first. - * cursor: We just remove the mark and set it equal to the - * point after the operation. - * line-start cache: We replace most affected lines. - * The current line gets used to fetch the new - * lines so, if necessary, (delete at the beginning - * of a line) we fix it up by setting it equal to the - * point. - */ - - TextProperty *prop; - GList *tmp; - gint is_first; - - for(; nchars; nchars -= 1) - { - prop = MARK_CURRENT_PROPERTY(&text->point); - - prop->length -= 1; - - if (prop->length == 0) - { - tmp = MARK_LIST_PTR (&text->point); - - is_first = tmp == text->text_properties; - - MARK_LIST_PTR (&text->point) = g_list_remove_link (tmp, tmp); - text->point.offset = 0; - - if (GTK_WIDGET_REALIZED (text)) - unrealize_property (text, prop); - - destroy_text_property (prop); - g_list_free_1 (tmp); - - prop = MARK_CURRENT_PROPERTY (&text->point); - - if (is_first) - text->text_properties = MARK_LIST_PTR (&text->point); - - g_assert (prop->length != 0); - } - else if (prop->length == text->point.offset) - { - MARK_LIST_PTR (&text->point) = MARK_NEXT_LIST_PTR (&text->point); - text->point.offset = 0; - } - } - - /* Check to see if we have just the single final position remaining - * along in a property; if so, combine it with the previous property - */ - if (LAST_INDEX (text, text->point) && - (MARK_OFFSET (&text->point) == 0) && - (MARK_PREV_LIST_PTR(&text->point) != NULL)) - { - tmp = MARK_LIST_PTR (&text->point); - prop = MARK_CURRENT_PROPERTY(&text->point); - - MARK_LIST_PTR (&text->point) = MARK_PREV_LIST_PTR (&text->point); - MARK_CURRENT_PROPERTY(&text->point)->length += 1; - MARK_NEXT_LIST_PTR(&text->point) = NULL; - - text->point.offset = MARK_CURRENT_PROPERTY(&text->point)->length - 1; - - if (GTK_WIDGET_REALIZED (text)) - unrealize_property (text, prop); - - destroy_text_property (prop); - g_list_free_1 (tmp); - } -} - -static void -init_properties (GtkSText *text) -{ - if (!text->text_properties) - { - text->text_properties = g_list_alloc(); - text->text_properties->next = NULL; - text->text_properties->prev = NULL; - text->text_properties->data = new_text_property (text, NULL, NULL, NULL, 1); - text->text_properties_end = text->text_properties; - - SET_PROPERTY_MARK (&text->point, text->text_properties, 0); - - text->point.index = 0; - } -} - - -/**********************************************************************/ -/* Property Movement */ -/**********************************************************************/ - -static void -move_mark_n (GtkSPropertyMark* mark, gint n) -{ - if (n > 0) - advance_mark_n(mark, n); - else if (n < 0) - decrement_mark_n(mark, -n); -} - -static void -advance_mark (GtkSPropertyMark* mark) -{ - TextProperty* prop = MARK_CURRENT_PROPERTY (mark); - - mark->index += 1; - - if (prop->length > mark->offset + 1) - mark->offset += 1; - else - { - mark->property = MARK_NEXT_LIST_PTR (mark); - mark->offset = 0; - } -} - -static void -advance_mark_n (GtkSPropertyMark* mark, gint n) -{ - gint i; - TextProperty* prop; - - g_assert (n > 0); - - i = 0; /* otherwise it migth not be init. */ - prop = MARK_CURRENT_PROPERTY(mark); - - if ((prop->length - mark->offset - 1) < n) { /* if we need to change prop. */ - /* to make it easier */ - n += (mark->offset); - mark->index -= mark->offset; - mark->offset = 0; - /* first we take seven-mile-leaps to get to the right text - * property. */ - while ((n-i) > prop->length - 1) { - i += prop->length; - mark->index += prop->length; - mark->property = MARK_NEXT_LIST_PTR (mark); - prop = MARK_CURRENT_PROPERTY (mark); - } - } - - /* and then the rest */ - mark->index += n - i; - mark->offset += n - i; -} - -static void -decrement_mark (GtkSPropertyMark* mark) -{ - mark->index -= 1; - - if (mark->offset > 0) - mark->offset -= 1; - else - { - mark->property = MARK_PREV_LIST_PTR (mark); - mark->offset = MARK_CURRENT_PROPERTY (mark)->length - 1; - } -} - -static void -decrement_mark_n (GtkSPropertyMark* mark, gint n) -{ - g_assert (n > 0); - - while (mark->offset < n) { - /* jump to end of prev */ - n -= mark->offset + 1; - mark->index -= mark->offset + 1; - mark->property = MARK_PREV_LIST_PTR (mark); - mark->offset = MARK_CURRENT_PROPERTY (mark)->length - 1; - } - - /* and the rest */ - mark->index -= n; - mark->offset -= n; -} - -static GtkSPropertyMark -find_mark (GtkSText* text, guint mark_position) -{ - return find_mark_near (text, mark_position, &text->point); -} - -/* - * You can also start from the end, what a drag. - */ -static GtkSPropertyMark -find_mark_near (GtkSText* text, guint mark_position, const GtkSPropertyMark* near) -{ - gint diffa; - gint diffb; - - GtkSPropertyMark mark; - - if (!near) - diffa = mark_position + 1; - else - diffa = mark_position - near->index; - - diffb = mark_position; - - if (diffa < 0) - diffa = -diffa; - - if (diffa <= diffb) - { - mark = *near; - } - else - { - mark.index = 0; - mark.property = text->text_properties; - mark.offset = 0; - } - - move_mark_n (&mark, mark_position - mark.index); - - return mark; -} - -/* This routine must be called with scroll == FALSE, only when - * point is at least partially on screen - */ - -static void -find_line_containing_point (GtkSText* text, guint point, - gboolean scroll) -{ - GList* cache; - gint height; - - text->current_line = NULL; - - TEXT_SHOW (text); - - /* Scroll backwards until the point is on screen - */ - while (CACHE_DATA(text->line_start_cache).start.index > point) - scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache))); - - /* Now additionally try to make sure that the point is fully on screen - */ - if (scroll) - { - while (text->first_cut_pixels != 0 && - text->line_start_cache->next && - CACHE_DATA(text->line_start_cache->next).start.index > point) - scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache->next))); - } - - gdk_window_get_size (text->text_area, NULL, &height); - - for (cache = text->line_start_cache; cache; cache = cache->next) - { - guint lph; - - if (CACHE_DATA(cache).end.index >= point || - LAST_INDEX(text, CACHE_DATA(cache).end)) - { - text->current_line = cache; /* LOOK HERE, this proc has an - * important side effect. */ - return; - } - - TEXT_SHOW_LINE (text, cache, "cache"); - - if (cache->next == NULL) - fetch_lines_forward (text, 1); - - if (scroll) - { - lph = pixel_height_of (text, cache->next); - - /* Scroll the bottom of the line is on screen, or until - * the line is the first onscreen line. - */ - while (cache->next != text->line_start_cache && lph > height) - { - TEXT_SHOW_LINE (text, cache, "cache"); - TEXT_SHOW_LINE (text, cache->next, "cache->next"); - scroll_int (text, LINE_HEIGHT(CACHE_DATA(cache->next))); - lph = pixel_height_of (text, cache->next); - } - } - } - - g_assert_not_reached (); /* Must set text->current_line here */ -} - -static guint -pixel_height_of (GtkSText* text, GList* cache_line) -{ - gint pixels = - text->first_cut_pixels; - GList *cache = text->line_start_cache; - - while (TRUE) { - pixels += LINE_HEIGHT (CACHE_DATA(cache)); - - if (cache->data == cache_line->data) - break; - - cache = cache->next; - } - - return pixels; -} - -/**********************************************************************/ -/* Search and Placement */ -/**********************************************************************/ - -static gint -find_char_width (GtkSText* text, const GtkSPropertyMark *mark, const TabStopMark *tab_mark) -{ - GdkWChar ch; - gint16* char_widths; - - if (LAST_INDEX (text, *mark)) - return 0; - - ch = GTK_STEXT_INDEX (text, mark->index); - char_widths = MARK_CURRENT_TEXT_FONT (text, mark)->char_widths; - - if (ch == '\t') - { - return tab_mark->to_next_tab * char_widths[' ']; - } - else if (!text->use_wchar) - { - return char_widths[ch]; - } - else - { - return gdk_char_width_wc(MARK_CURRENT_TEXT_FONT(text, mark)->gdk_font, ch); - } -} - -static void -advance_tab_mark (GtkSText* text, TabStopMark* tab_mark, GdkWChar ch) -{ - if (tab_mark->to_next_tab == 1 || ch == '\t') - { - if (tab_mark->tab_stops->next) - { - tab_mark->tab_stops = tab_mark->tab_stops->next; - tab_mark->to_next_tab = (gulong) tab_mark->tab_stops->data; - } - else - { - tab_mark->to_next_tab = text->default_tab_width; - } - } - else - { - tab_mark->to_next_tab -= 1; - } -} - -static void -advance_tab_mark_n (GtkSText* text, TabStopMark* tab_mark, gint n) - /* No tabs! */ -{ - while (n--) - advance_tab_mark (text, tab_mark, 0); -} - -static void -find_cursor_at_line (GtkSText* text, const LineParams* start_line, gint pixel_height) -{ - GdkWChar ch; - GtkEditable *editable = (GtkEditable *)text; - - GtkSPropertyMark mark = start_line->start; - TabStopMark tab_mark = start_line->tab_cont.tab_start; - gint pixel_width = LINE_START_PIXEL (*start_line); - - while (mark.index < text->cursor_mark.index) - { - pixel_width += find_char_width (text, &mark, &tab_mark); - - advance_tab_mark (text, &tab_mark, GTK_STEXT_INDEX(text, mark.index)); - advance_mark (&mark); - } - - text->cursor_pos_x = pixel_width; - text->cursor_pos_y = pixel_height; - text->cursor_char_offset = start_line->font_descent; - text->cursor_mark = mark; - - ch = LAST_INDEX (text, mark) ? - LINE_DELIM : GTK_STEXT_INDEX (text, mark.index); - - if ((text->use_wchar) ? gdk_iswspace (ch) : isspace (ch)) - text->cursor_char = 0; - else - text->cursor_char = ch; - -#ifdef USE_GTKGDK_XIM - if (GTK_WIDGET_HAS_FOCUS(text) && gdk_im_ready() && editable->ic && - (gdk_ic_get_style (editable->ic) & GDK_IM_PREEDIT_POSITION)) - { - GdkICAttributesType mask = GDK_IC_SPOT_LOCATION | - GDK_IC_PREEDIT_FOREGROUND | - GDK_IC_PREEDIT_BACKGROUND; - - editable->ic_attr->spot_location.x = text->cursor_pos_x; - editable->ic_attr->spot_location.y - = text->cursor_pos_y - text->cursor_char_offset; - editable->ic_attr->preedit_foreground = *MARK_CURRENT_FORE (text, &mark); - editable->ic_attr->preedit_background = *MARK_CURRENT_BACK (text, &mark); - - if (MARK_CURRENT_FONT (text, &mark)->type == GDK_FONT_FONTSET) - { - mask |= GDK_IC_PREEDIT_FONTSET; - editable->ic_attr->preedit_fontset = MARK_CURRENT_FONT (text, &mark); - } - - gdk_ic_set_attr (editable->ic, editable->ic_attr, mask); - } -#endif -} - -static void -find_cursor (GtkSText* text, gboolean scroll) -{ - if (GTK_WIDGET_REALIZED (text)) - { - find_line_containing_point (text, text->cursor_mark.index, scroll); - - if (text->current_line) - find_cursor_at_line (text, - &CACHE_DATA(text->current_line), - pixel_height_of(text, text->current_line)); - } - - GTK_EDITABLE (text)->current_pos = text->cursor_mark.index; -} - -static void -find_mouse_cursor_at_line (GtkSText *text, const LineParams* lp, - guint line_pixel_height, - gint button_x) -{ - GtkSPropertyMark mark = lp->start; - TabStopMark tab_mark = lp->tab_cont.tab_start; - - gint char_width = find_char_width(text, &mark, &tab_mark); - gint pixel_width = LINE_START_PIXEL (*lp) + (char_width+1)/2; - - text->cursor_pos_y = line_pixel_height; - - for (;;) - { - GdkWChar ch = LAST_INDEX (text, mark) ? - LINE_DELIM : GTK_STEXT_INDEX (text, mark.index); - - if (button_x < pixel_width || mark.index == lp->end.index) - { - text->cursor_pos_x = pixel_width - (char_width+1)/2; - text->cursor_mark = mark; - text->cursor_char_offset = lp->font_descent; - - if ((text->use_wchar) ? gdk_iswspace (ch) : isspace (ch)) - text->cursor_char = 0; - else - text->cursor_char = ch; - - break; - } - - advance_tab_mark (text, &tab_mark, ch); - advance_mark (&mark); - - pixel_width += char_width/2; - - char_width = find_char_width (text, &mark, &tab_mark); - - pixel_width += (char_width+1)/2; - } -} - -static void -find_mouse_cursor (GtkSText* text, gint x, gint y) -{ - gint pixel_height; - GList* cache = text->line_start_cache; - - g_assert (cache); - - pixel_height = - text->first_cut_pixels; - - for (; cache; cache = cache->next) - { - pixel_height += LINE_HEIGHT(CACHE_DATA(cache)); - - if (y < pixel_height || !cache->next) - { - find_mouse_cursor_at_line (text, &CACHE_DATA(cache), pixel_height, x); - - find_cursor (text, FALSE); - - return; - } - } -} - -/**********************************************************************/ -/* Cache Manager */ -/**********************************************************************/ - -static void -free_cache (GtkSText* text) -{ - GList* cache = text->line_start_cache; - - if (cache) - { - while (cache->prev) - cache = cache->prev; - - text->line_start_cache = cache; - } - - for (; cache; cache = cache->next) - g_mem_chunk_free (params_mem_chunk, cache->data); - - g_list_free (text->line_start_cache); - - text->line_start_cache = NULL; -} - -static GList* -remove_cache_line (GtkSText* text, GList* member) -{ - GList *list; - - if (member == NULL) - return NULL; - - if (member == text->line_start_cache) - text->line_start_cache = text->line_start_cache->next; - - if (member->prev) - member->prev->next = member->next; - - if (member->next) - member->next->prev = member->prev; - - list = member->next; - - g_mem_chunk_free (params_mem_chunk, member->data); - g_list_free_1 (member); - - return list; -} - -/**********************************************************************/ -/* Key Motion */ -/**********************************************************************/ - -static void -move_cursor_buffer_ver (GtkSText *text, int dir) -{ - undraw_cursor (text, FALSE); - - if (dir > 0) - { - scroll_int (text, text->vadj->upper); - text->cursor_mark = find_this_line_start_mark (text, - TEXT_LENGTH (text), - &text->cursor_mark); - } - else - { - scroll_int (text, - text->vadj->value); - text->cursor_mark = find_this_line_start_mark (text, - 0, - &text->cursor_mark); - } - - find_cursor (text, TRUE); - draw_cursor (text, FALSE); -} - -static void -move_cursor_page_ver (GtkSText *text, int dir) -{ - scroll_int (text, dir * text->vadj->page_increment); -} - -static void -move_cursor_ver (GtkSText *text, int count) -{ - gint i; - GtkSPropertyMark mark; - gint offset; - - mark = find_this_line_start_mark (text, text->cursor_mark.index, &text->cursor_mark); - offset = text->cursor_mark.index - mark.index; - - if (offset > text->cursor_virtual_x) - text->cursor_virtual_x = offset; - - if (count < 0) - { - if (mark.index == 0) - return; - - decrement_mark (&mark); - mark = find_this_line_start_mark (text, mark.index, &mark); - } - else - { - mark = text->cursor_mark; - - while (!LAST_INDEX(text, mark) && GTK_STEXT_INDEX(text, mark.index) != LINE_DELIM) - advance_mark (&mark); - - if (LAST_INDEX(text, mark)) - return; - - advance_mark (&mark); - } - - for (i=0; i < text->cursor_virtual_x; i += 1, advance_mark(&mark)) - if (LAST_INDEX(text, mark) || - GTK_STEXT_INDEX(text, mark.index) == LINE_DELIM) - break; - - undraw_cursor (text, FALSE); - - text->cursor_mark = mark; - - find_cursor (text, TRUE); - - draw_cursor (text, FALSE); -} - -static void -move_cursor_hor (GtkSText *text, int count) -{ - /* count should be +-1. */ - if ( (count > 0 && text->cursor_mark.index + count > TEXT_LENGTH(text)) || - (count < 0 && text->cursor_mark.index < (- count)) || - (count == 0) ) - return; - - text->cursor_virtual_x = 0; - - undraw_cursor (text, FALSE); - - move_mark_n (&text->cursor_mark, count); - - find_cursor (text, TRUE); - - draw_cursor (text, FALSE); -} - -/* SYLPHEED - the default cursor movement of GtkText is aeons ahead of the - * current technology level of the current generation of programmers and - * end users. so sylpheed has to take a more mundane approach to editing. - * - * implemented: - * move_cursor_to_display_row_end() (end of display line) - * move_cursor_to_display_row_home() (home of display line) - * move_cursor_to_display_row_up() (line up) - * move_cursor_to_display_row_down() (line down) - */ - -/* - * SYLPHEED_TODO: for some reason the line fetcher also returns markers - * of just one character! should investigate this... -- alfons - */ - -static void move_cursor_to_display_row_end(GtkSText *text) -{ - LineParams lp = CACHE_DATA(text->current_line); - int to_move = (lp.end.index - text->cursor_mark.index); - - /* advance this much */ - if (to_move > 0) { - move_cursor_hor(text, to_move); - } -} - -static void move_cursor_to_display_row_start(GtkSText *text) -{ - LineParams lp = CACHE_DATA(text->current_line); - int to_move = (text->cursor_mark.index - lp.start.index); - if (to_move > 0) { - move_cursor_hor(text, -to_move); - } -} - -/* dumb */ -static gboolean range_intersect(guint x1, guint x2, guint y1, guint y2) -{ - guint tmp; - if (x1 > x2) { tmp = x1; x1 = x2; x2 = tmp; } - if (y1 > y2) { tmp = y1; y1 = y2; y1 = tmp; } - if (y1 < x1) { tmp = x1; x1 = y1; y1 = tmp; tmp = x2; x2 = y2; y2 = tmp; } - return y1 <= x2; -} - -typedef struct { - int start, end; - gboolean found; - LineParams lp; -} bdrf; - -static gint back_display_row_fetcher(GtkSText *text, - LineParams *params, - bdrf *data) -{ - if (range_intersect(data->start, data->end, params->start.index, params->end.index)) { - XDEBUG( ("%s(%d) - FOUND search (%d, %d), current (%d, %d)", __FILE__, __LINE__, - data->start, data->end, - params->start.index, params->end.index) ); - data->found = TRUE; - return TRUE; - } - else { - XDEBUG( ("%s(%d) - NEXT search (%d, %d), current (%d, %d)", __FILE__, __LINE__, - data->start, data->end, - params->start.index, params->end.index) ); - data->lp = *params; - return FALSE; - } -} - -static void move_cursor_to_display_row_up(GtkSText *text) -{ - LineParams lp; - bdrf data = { 0 }; - int new_index; - int col; - GtkSPropertyMark mark; - - mark = find_this_line_start_mark(text, text->cursor_mark.index, &text->cursor_mark); - - /* top of buffer */ - if (mark.index == 0) { - XDEBUG ( ("%s(%d) top of buffer", __FILE__, __LINE__) ); - } - - /* we need previous DISPLAY row not the previous BUFFER line, so we go to start - * of paragraph, and iterate over the lines until we have a LineParams that matches - * the original */ - lp = CACHE_DATA(text->current_line); - col = (text->cursor_mark.index - lp.start.index); - data.start = lp.start.index; - data.end = lp.end.index; - - /* get the previous line */ - if (mark.index != 0) { - decrement_mark(&mark); - if (mark.index != 0) { - GtkSPropertyMark smark = mark; - XDEBUG( ("%s(%d) finding line start mark", __FILE__, __LINE__) ); - mark = find_this_line_start_mark(text, smark.index -1, &smark); - } - } - - /* let's get the previous display line */ - XDEBUG( ("%s(%d) iterating to get display lines", __FILE__, __LINE__) ); - line_params_iterate(text, &mark, NULL, FALSE, &data, - (LineIteratorFunction)back_display_row_fetcher); - XDEBUG( ("%s(%d) done iterating. found = %d", __FILE__, __LINE__, data.found) ); - - if (data.found) { - if (col < text->persist_column) col = text->persist_column; - else text->persist_column = col; - new_index = data.lp.start.index + col; - XDEBUG( ("%s(%d) - new index = %d", __FILE__, __LINE__, new_index) ); - if (new_index > data.lp.end.index) { - new_index = data.lp.end.index; - } - /* and move the cursor */ - XDEBUG( ("%s(%d) - setting index", __FILE__, __LINE__) ); - gtk_stext_set_position_X(GTK_EDITABLE(text), new_index); - } -} - -typedef struct { - gboolean found; - gboolean completed; - gint start, end; - LineParams lp; -} fdrf; - -#if defined(AHX_DEBUG) -static void print_line(GtkSText *text, guint start, guint end) -{ - gchar *buf = alloca(2048), *walk = buf; - - memset(buf, 0, 2048); - for (; start <= end; start++) { - *walk++ = GTK_STEXT_INDEX(text, start); - } - XDEBUG( ("%s", buf) ); -} -#endif - -static gint forward_display_row_fetcher(GtkSText *text, - LineParams *lp, - fdrf *data) -{ - if (data->found) { - XDEBUG( ("%s(%d) - FW RETURNS. search (%d, %d), current (%d, %d)", - __FILE__, __LINE__, data->start, data->end, lp->start.index, lp->end.index) ); - data->lp = *lp; - data->completed = TRUE; - print_line(text, lp->start.index, lp->end.index); - return TRUE; - } - else if (range_intersect(data->start, data->end, lp->start.index, lp->end.index)) { - XDEBUG( ("%s(%d) - FW FOUND IT. search (%d, %d), current (%d, %d)", - __FILE__, __LINE__, data->start, data->end, lp->start.index, lp->end.index) ); - data->found = TRUE; - return FALSE; - } - else { - return FALSE; - } -} - -static void move_cursor_to_display_row_down (GtkSText *text) -{ - LineParams lp; - int new_index; - int col; - GtkSPropertyMark mark; - fdrf data = { FALSE, FALSE }; - - mark = find_this_line_start_mark(text, text->cursor_mark.index, &text->cursor_mark); - lp = CACHE_DATA(text->current_line); - col = (text->cursor_mark.index - lp.start.index); - - data.start = lp.start.index; - data.end = lp.end.index; - - /* find the next DISPLAY line */ - XDEBUG( ("%s(%d) - FW iterating", __FILE__, __LINE__) ) ; - line_params_iterate(text, &mark, NULL, FALSE, &data, - (LineIteratorFunction)forward_display_row_fetcher); - XDEBUG( ("%s(%d) - FW done iterating", __FILE__, __LINE__) ); - - if (data.completed) { - if (col < text->persist_column) col = text->persist_column; - else text->persist_column = col; - new_index = data.lp.start.index + col; - if (new_index > data.lp.end.index) { - new_index = data.lp.end.index; - } - /* and move the cursor */ - XDEBUG( ("%s(%d) - FW set pos %d", __FILE__, __LINE__, new_index) ); - gtk_stext_set_position_X(GTK_EDITABLE(text), new_index); - } -} - -static void reset_persist_col_pos(GtkSText *text) -{ - text->persist_column = 0; -} - -static void -gtk_stext_move_cursor (GtkEditable *editable, - gint x, - gint y) -{ - if (x > 0) - { - while (x-- != 0) - move_cursor_hor (GTK_STEXT (editable), 1); - } - else if (x < 0) - { - while (x++ != 0) - move_cursor_hor (GTK_STEXT (editable), -1); - } - - if (y > 0) - { - while (y-- != 0) - move_cursor_ver (GTK_STEXT (editable), 1); - } - else if (y < 0) - { - while (y++ != 0) - move_cursor_ver (GTK_STEXT (editable), -1); - } -} - -static void -gtk_stext_move_forward_character (GtkSText *text) -{ - move_cursor_hor (text, 1); -} - -static void -gtk_stext_move_backward_character (GtkSText *text) -{ - move_cursor_hor (text, -1); -} - -static void -gtk_stext_move_next_line (GtkSText *text) -{ - move_cursor_ver (text, 1); -} - -static void -gtk_stext_move_previous_line (GtkSText *text) -{ - move_cursor_ver (text, -1); -} - -static void -gtk_stext_move_word (GtkEditable *editable, - gint n) -{ - if (n > 0) - { - while (n-- != 0) - gtk_stext_move_forward_word (GTK_STEXT (editable)); - } - else if (n < 0) - { - while (n++ != 0) - gtk_stext_move_backward_word (GTK_STEXT (editable)); - } -} - -static void -gtk_stext_move_forward_word (GtkSText *text) -{ - text->cursor_virtual_x = 0; - - undraw_cursor (text, FALSE); - - if (text->use_wchar) - { - while (!LAST_INDEX (text, text->cursor_mark) && - !gdk_iswalnum (GTK_STEXT_INDEX(text, text->cursor_mark.index))) - advance_mark (&text->cursor_mark); - - while (!LAST_INDEX (text, text->cursor_mark) && - gdk_iswalnum (GTK_STEXT_INDEX(text, text->cursor_mark.index))) - advance_mark (&text->cursor_mark); - } - else - { - while (!LAST_INDEX (text, text->cursor_mark) && - !isalnum (GTK_STEXT_INDEX(text, text->cursor_mark.index))) - advance_mark (&text->cursor_mark); - - while (!LAST_INDEX (text, text->cursor_mark) && - isalnum (GTK_STEXT_INDEX(text, text->cursor_mark.index))) - advance_mark (&text->cursor_mark); - } - - find_cursor (text, TRUE); - draw_cursor (text, FALSE); -} - -static void -gtk_stext_move_backward_word (GtkSText *text) -{ - text->cursor_virtual_x = 0; - - undraw_cursor (text, FALSE); - - if (text->use_wchar) - { - while ((text->cursor_mark.index > 0) && - !gdk_iswalnum (GTK_STEXT_INDEX(text, text->cursor_mark.index-1))) - decrement_mark (&text->cursor_mark); - - while ((text->cursor_mark.index > 0) && - gdk_iswalnum (GTK_STEXT_INDEX(text, text->cursor_mark.index-1))) - decrement_mark (&text->cursor_mark); - } - else - { - while ((text->cursor_mark.index > 0) && - !isalnum (GTK_STEXT_INDEX(text, text->cursor_mark.index-1))) - decrement_mark (&text->cursor_mark); - - while ((text->cursor_mark.index > 0) && - isalnum (GTK_STEXT_INDEX(text, text->cursor_mark.index-1))) - decrement_mark (&text->cursor_mark); - } - - find_cursor (text, TRUE); - draw_cursor (text, FALSE); -} - -static void -gtk_stext_move_page (GtkEditable *editable, - gint x, - gint y) -{ - if (y != 0) - scroll_int (GTK_STEXT (editable), - y * GTK_STEXT(editable)->vadj->page_increment); -} - -static void -gtk_stext_move_to_row (GtkEditable *editable, - gint row) -{ -} - -static void -gtk_stext_move_to_column (GtkEditable *editable, - gint column) -{ - GtkSText *text; - - text = GTK_STEXT (editable); - - text->cursor_virtual_x = 0; /* FIXME */ - - undraw_cursor (text, FALSE); - - /* Move to the beginning of the line */ - while ((text->cursor_mark.index > 0) && - (GTK_STEXT_INDEX (text, text->cursor_mark.index - 1) != LINE_DELIM)) - decrement_mark (&text->cursor_mark); - - while (!LAST_INDEX (text, text->cursor_mark) && - (GTK_STEXT_INDEX (text, text->cursor_mark.index) != LINE_DELIM)) - { - if (column > 0) - column--; - else if (column == 0) - break; - - advance_mark (&text->cursor_mark); - } - - find_cursor (text, TRUE); - draw_cursor (text, FALSE); -} - -static void -gtk_stext_move_beginning_of_line (GtkSText *text) -{ - gtk_stext_move_to_column (GTK_EDITABLE (text), 0); - -} - -static void -gtk_stext_move_end_of_line (GtkSText *text) -{ - gtk_stext_move_to_column (GTK_EDITABLE (text), -1); -} - -static void -gtk_stext_kill_char (GtkEditable *editable, - gint direction) -{ - GtkSText *text; - - text = GTK_STEXT (editable); - - if (editable->selection_start_pos != editable->selection_end_pos) - gtk_editable_delete_selection (editable); - else - { - if (direction >= 0) - { - if (text->point.index + 1 <= TEXT_LENGTH (text)) - gtk_editable_delete_text (editable, text->point.index, text->point.index + 1); - } - else - { - if (text->point.index > 0) - gtk_editable_delete_text (editable, text->point.index - 1, text->point.index); - } - } -} - -static void -gtk_stext_delete_forward_character (GtkSText *text) -{ - gtk_stext_kill_char (GTK_EDITABLE (text), 1); -} - -static void -gtk_stext_delete_backward_character (GtkSText *text) -{ - gtk_stext_kill_char (GTK_EDITABLE (text), -1); -} - -static void -gtk_stext_kill_word (GtkEditable *editable, - gint direction) -{ - if (editable->selection_start_pos != editable->selection_end_pos) { - gtk_editable_delete_selection (editable); - } - else - { - gint old_pos = editable->current_pos; - if (direction >= 0) - { - gtk_stext_move_word (editable, 1); - gtk_editable_delete_text (editable, old_pos, editable->current_pos); - } - else - { - gtk_stext_move_word (editable, -1); - gtk_editable_delete_text (editable, editable->current_pos, old_pos); - } - } -} - -static void -gtk_stext_delete_forward_word (GtkSText *text) -{ - gtk_stext_kill_word (GTK_EDITABLE (text), 1); -} - -static void -gtk_stext_delete_backward_word (GtkSText *text) -{ - gtk_stext_kill_word (GTK_EDITABLE (text), -1); -} - -static void -gtk_stext_kill_line (GtkEditable *editable, - gint direction) -{ - gint old_pos = editable->current_pos; - if (direction >= 0) - { - gtk_stext_move_to_column (editable, -1); - gtk_editable_delete_text (editable, old_pos, editable->current_pos); - } - else - { - gtk_stext_move_to_column (editable, 0); - gtk_editable_delete_text (editable, editable->current_pos, old_pos); - } -} - -static void -gtk_stext_delete_line (GtkSText *text) -{ - gtk_stext_move_to_column (GTK_EDITABLE (text), 0); - gtk_stext_kill_line (GTK_EDITABLE (text), 1); -} - -static void -gtk_stext_delete_to_line_end (GtkSText *text) -{ - gtk_stext_kill_line (GTK_EDITABLE (text), 1); -} - -static void -gtk_stext_select_word (GtkSText *text, guint32 time) -{ - gint start_pos; - gint end_pos; - - GtkEditable *editable; - editable = GTK_EDITABLE (text); - - gtk_stext_move_backward_word (text); - start_pos = text->cursor_mark.index; - - gtk_stext_move_forward_word (text); - end_pos = text->cursor_mark.index; - - editable->has_selection = TRUE; - gtk_stext_set_selection (editable, start_pos, end_pos); - gtk_editable_claim_selection (editable, start_pos != end_pos, time); -} - -static void -gtk_stext_select_line (GtkSText *text, guint32 time) -{ - gint start_pos; - gint end_pos; - - GtkEditable *editable; - editable = GTK_EDITABLE (text); - - gtk_stext_move_beginning_of_line (text); - start_pos = text->cursor_mark.index; - - gtk_stext_move_end_of_line (text); - gtk_stext_move_forward_character (text); - end_pos = text->cursor_mark.index; - - editable->has_selection = TRUE; - gtk_stext_set_selection (editable, start_pos, end_pos); - gtk_editable_claim_selection (editable, start_pos != end_pos, time); -} - -/**********************************************************************/ -/* Scrolling */ -/**********************************************************************/ - -static void -adjust_adj (GtkSText* text, GtkAdjustment* adj) -{ - gint height; - - gdk_window_get_size (text->text_area, NULL, &height); - - adj->step_increment = MIN (adj->upper, (float) SCROLL_PIXELS); - adj->page_increment = MIN (adj->upper, height - (float) KEY_SCROLL_PIXELS); - adj->page_size = MIN (adj->upper, height); - adj->value = MIN (adj->value, adj->upper - adj->page_size); - adj->value = MAX (adj->value, 0.0); - - gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed"); -} - -static gint -set_vertical_scroll_iterator (GtkSText* text, LineParams* lp, void* data) -{ - SetVerticalScrollData *svdata = (SetVerticalScrollData *) data; - - if ((text->first_line_start_index >= lp->start.index) && - (text->first_line_start_index <= lp->end.index)) - { - svdata->mark = lp->start; - - if (text->first_line_start_index == lp->start.index) - { - text->first_onscreen_ver_pixel = svdata->pixel_height + text->first_cut_pixels; - } - else - { - text->first_onscreen_ver_pixel = svdata->pixel_height; - text->first_cut_pixels = 0; - } - - text->vadj->value = (float) text->first_onscreen_ver_pixel; - } - - svdata->pixel_height += LINE_HEIGHT (*lp); - - return FALSE; -} - -static gint -set_vertical_scroll_find_iterator (GtkSText* text, LineParams* lp, void* data) -{ - SetVerticalScrollData *svdata = (SetVerticalScrollData *) data; - gint return_val; - - if (svdata->pixel_height <= (gint) text->vadj->value && - svdata->pixel_height + LINE_HEIGHT(*lp) > (gint) text->vadj->value) - { - svdata->mark = lp->start; - - text->first_cut_pixels = (gint)text->vadj->value - svdata->pixel_height; - text->first_onscreen_ver_pixel = svdata->pixel_height; - text->first_line_start_index = lp->start.index; - - return_val = TRUE; - } - else - { - svdata->pixel_height += LINE_HEIGHT (*lp); - - return_val = FALSE; - } - - return return_val; -} - -static GtkSPropertyMark -set_vertical_scroll (GtkSText* text) -{ - GtkSPropertyMark mark = find_mark (text, 0); - SetVerticalScrollData data; - gint height; - gint orig_value; - - data.pixel_height = 0; - line_params_iterate (text, &mark, NULL, FALSE, &data, set_vertical_scroll_iterator); - - text->vadj->upper = (float) data.pixel_height; - orig_value = (gint) text->vadj->value; - - gdk_window_get_size (text->text_area, NULL, &height); - - text->vadj->step_increment = MIN (text->vadj->upper, (float) SCROLL_PIXELS); - text->vadj->page_increment = MIN (text->vadj->upper, height - (float) KEY_SCROLL_PIXELS); - text->vadj->page_size = MIN (text->vadj->upper, height); - text->vadj->value = MIN (text->vadj->value, text->vadj->upper - text->vadj->page_size); - text->vadj->value = MAX (text->vadj->value, 0.0); - - text->last_ver_value = (gint)text->vadj->value; - - gtk_signal_emit_by_name (GTK_OBJECT (text->vadj), "changed"); - - if (text->vadj->value != orig_value) - { - /* We got clipped, and don't really know which line to put first. */ - data.pixel_height = 0; - data.last_didnt_wrap = TRUE; - - line_params_iterate (text, &mark, NULL, - FALSE, &data, - set_vertical_scroll_find_iterator); - } - - return data.mark; -} - -static void -scroll_int (GtkSText* text, gint diff) -{ - gfloat upper; - - text->vadj->value += diff; - - upper = text->vadj->upper - text->vadj->page_size; - text->vadj->value = MIN (text->vadj->value, upper); - text->vadj->value = MAX (text->vadj->value, 0.0); - - gtk_signal_emit_by_name (GTK_OBJECT (text->vadj), "value_changed"); -} - -static void -process_exposes (GtkSText *text) -{ - GdkEvent *event; - - /* Make sure graphics expose events are processed before scrolling - * again */ - - while ((event = gdk_event_get_graphics_expose (text->text_area)) != NULL) - { - gtk_widget_event (GTK_WIDGET (text), event); - if (event->expose.count == 0) - { - gdk_event_free (event); - break; - } - gdk_event_free (event); - } -} - -static gint last_visible_line_height (GtkSText* text) -{ - GList *cache = text->line_start_cache; - gint height; - - gdk_window_get_size (text->text_area, NULL, &height); - - for (; cache->next; cache = cache->next) - if (pixel_height_of(text, cache->next) > height) - break; - - if (cache) - return pixel_height_of(text, cache) - 1; - else - return 0; -} - -static gint first_visible_line_height (GtkSText* text) -{ - if (text->first_cut_pixels) - return pixel_height_of(text, text->line_start_cache) + 1; - else - return 1; -} - -static void -scroll_down (GtkSText* text, gint diff0) -{ - GdkRectangle rect; - gint real_diff = 0; - gint width, height; - - text->first_onscreen_ver_pixel += diff0; - - while (diff0-- > 0) - { - if (text->first_cut_pixels < LINE_HEIGHT(CACHE_DATA(text->line_start_cache)) - 1) - { - text->first_cut_pixels += 1; - } - else - { - text->first_cut_pixels = 0; - - text->line_start_cache = text->line_start_cache->next; - g_assert (text->line_start_cache); - - text->first_line_start_index = - CACHE_DATA(text->line_start_cache).start.index; - - if (!text->line_start_cache->next) - fetch_lines_forward (text, 1); - } - - real_diff += 1; - } - - gdk_window_get_size (text->text_area, &width, &height); - if (height > real_diff) - gdk_draw_pixmap (text->text_area, - text->gc, - text->text_area, - 0, - real_diff, - 0, - 0, - width, - height - real_diff); - - rect.x = 0; - rect.y = MAX (0, height - real_diff); - rect.width = width; - rect.height = MIN (height, real_diff); - - expose_text (text, &rect, FALSE); - gtk_stext_draw_focus ( (GtkWidget *) text); - - if (text->current_line) - { - gint cursor_min; - - text->cursor_pos_y -= real_diff; - cursor_min = drawn_cursor_min(text); - - if (cursor_min < 0) - find_mouse_cursor (text, text->cursor_pos_x, - first_visible_line_height (text)); - } - - if (height > real_diff) - process_exposes (text); -} - -static void -scroll_up (GtkSText* text, gint diff0) -{ - gint real_diff = 0; - GdkRectangle rect; - gint width, height; - - text->first_onscreen_ver_pixel += diff0; - - while (diff0++ < 0) - { - g_assert (text->line_start_cache); - - if (text->first_cut_pixels > 0) - { - text->first_cut_pixels -= 1; - } - else - { - if (!text->line_start_cache->prev) - fetch_lines_backward (text); - - text->line_start_cache = text->line_start_cache->prev; - - text->first_line_start_index = - CACHE_DATA(text->line_start_cache).start.index; - - text->first_cut_pixels = LINE_HEIGHT(CACHE_DATA(text->line_start_cache)) - 1; - } - - real_diff += 1; - } - - gdk_window_get_size (text->text_area, &width, &height); - if (height > real_diff) - gdk_draw_pixmap (text->text_area, - text->gc, - text->text_area, - 0, - 0, - 0, - real_diff, - width, - height - real_diff); - - rect.x = 0; - rect.y = 0; - rect.width = width; - rect.height = MIN (height, real_diff); - - expose_text (text, &rect, FALSE); - gtk_stext_draw_focus ( (GtkWidget *) text); - - if (text->current_line) - { - gint cursor_max; - gint height; - - text->cursor_pos_y += real_diff; - cursor_max = drawn_cursor_max(text); - gdk_window_get_size (text->text_area, NULL, &height); - - if (cursor_max >= height) - find_mouse_cursor (text, text->cursor_pos_x, - last_visible_line_height (text)); - } - - if (height > real_diff) - process_exposes (text); -} - -/**********************************************************************/ -/* Display Code */ -/**********************************************************************/ - -/* Assumes mark starts a line. Calculates the height, width, and - * displayable character count of a single DISPLAYABLE line. That - * means that in line-wrap mode, this does may not compute the - * properties of an entire line. */ -static LineParams -find_line_params (GtkSText* text, - const GtkSPropertyMark* mark, - const PrevTabCont *tab_cont, - PrevTabCont *next_cont) -{ - LineParams lp; - TabStopMark tab_mark = tab_cont->tab_start; - guint max_display_pixels; - GdkWChar ch; - gint ch_width; - GdkFont *font; - - gdk_window_get_size (text->text_area, (gint*) &max_display_pixels, NULL); - - if (text->wrap_rmargin) { - /* SYLPHEED - since sylpheed is a mail program, assume we work with - * fixed fonts. only assume we're using one font! */ - font = MARK_CURRENT_FONT(text, mark); - - /* SYLPHEED - ok for multi byte charsets to check for ASCII char? - */ - if (text->use_wchar) - ch_width = gdk_char_width_wc(font, 'W'); - else - ch_width = gdk_char_width(font, 'W'); - - /* SYLPHEED - max_display_chars has the rmargin in pixels - */ - max_display_pixels = text->wrap_rmargin * ch_width; - } - - if (GTK_EDITABLE (text)->editable || !text->word_wrap) - max_display_pixels -= LINE_WRAP_ROOM; - - lp.wraps = 0; - lp.tab_cont = *tab_cont; - lp.start = *mark; - lp.end = *mark; - lp.pixel_width = tab_cont->pixel_offset; - lp.displayable_chars = 0; - lp.font_ascent = 0; - lp.font_descent = 0; - - init_tab_cont (text, next_cont); - - while (!LAST_INDEX(text, lp.end)) - { - g_assert (lp.end.property); - - ch = GTK_STEXT_INDEX (text, lp.end.index); - font = MARK_CURRENT_FONT (text, &lp.end); - - if (ch == LINE_DELIM) - { - /* Newline doesn't count in computation of line height, even - * if its in a bigger font than the rest of the line. Unless, - * of course, there are no other characters. */ - - if (!lp.font_ascent && !lp.font_descent) - { - lp.font_ascent = font->ascent; - lp.font_descent = font->descent; - } - - lp.tab_cont_next = *next_cont; - - return lp; - } - - ch_width = find_char_width (text, &lp.end, &tab_mark); - - if ((ch_width + lp.pixel_width > max_display_pixels) && - (lp.end.index > lp.start.index)) - { - lp.wraps = 1; - - if (text->line_wrap) - { - next_cont->tab_start = tab_mark; - next_cont->pixel_offset = 0; - - if (ch == '\t') - { - /* Here's the tough case, a tab is wrapping. */ - gint pixels_avail = max_display_pixels - lp.pixel_width; - gint space_width = MARK_CURRENT_TEXT_FONT(text, &lp.end)->char_widths[' ']; - gint spaces_avail = pixels_avail / space_width; - - if (spaces_avail == 0) - { - decrement_mark (&lp.end); - } - else - { - advance_tab_mark (text, &next_cont->tab_start, '\t'); - next_cont->pixel_offset = space_width * (tab_mark.to_next_tab - - spaces_avail); - lp.displayable_chars += 1; - } - } - else - { - if (text->word_wrap) - { - GtkSPropertyMark saved_mark = lp.end; - guint saved_characters = lp.displayable_chars; - - lp.displayable_chars += 1; - - if (text->use_wchar) - { - while (!gdk_iswspace (GTK_STEXT_INDEX (text, lp.end.index)) && - (lp.end.index > lp.start.index)) - { - decrement_mark (&lp.end); - lp.displayable_chars -= 1; - } - } - else - { - while (!isspace(GTK_STEXT_INDEX (text, lp.end.index)) && - (lp.end.index > lp.start.index)) - { - decrement_mark (&lp.end); - lp.displayable_chars -= 1; - } - } - - /* If whole line is one word, revert to char wrapping */ - if (lp.end.index == lp.start.index) - { - lp.end = saved_mark; - lp.displayable_chars = saved_characters; - decrement_mark (&lp.end); - } - } - else - { - /* Don't include this character, it will wrap. */ - decrement_mark (&lp.end); - } - } - - lp.tab_cont_next = *next_cont; - - return lp; - } - } - else - { - lp.displayable_chars += 1; - } - - lp.font_ascent = MAX (font->ascent, lp.font_ascent); - lp.font_descent = MAX (font->descent, lp.font_descent); - lp.pixel_width += ch_width; - - advance_mark(&lp.end); - advance_tab_mark (text, &tab_mark, ch); - } - - if (LAST_INDEX(text, lp.start)) - { - /* Special case, empty last line. */ - font = MARK_CURRENT_FONT (text, &lp.end); - - lp.font_ascent = font->ascent; - lp.font_descent = font->descent; - } - - lp.tab_cont_next = *next_cont; - - return lp; -} - -static void -expand_scratch_buffer (GtkSText* text, guint len) -{ - if (len >= text->scratch_buffer_len) - { - guint i = 1; - - while (i <= len && i < MIN_GAP_SIZE) i <<= 1; - - if (text->use_wchar) - { - if (!text->scratch_buffer.wc) - text->scratch_buffer.wc = g_new (GdkWChar, i); - else - text->scratch_buffer.wc = g_realloc (text->scratch_buffer.wc, - i * sizeof (GdkWChar)); - } - else - { - if (!text->scratch_buffer.ch) - text->scratch_buffer.ch = g_new (guchar, i); - else - text->scratch_buffer.ch = g_realloc (text->scratch_buffer.ch, i); - } - - text->scratch_buffer_len = i; - } -} - -/* Side effect: modifies text->gc - */ - -static void -draw_bg_rect (GtkSText* text, GtkSPropertyMark *mark, - gint x, gint y, gint width, gint height, - gboolean already_cleared) -{ - GtkEditable *editable = GTK_EDITABLE(text); - - if ((mark->index >= MIN(editable->selection_start_pos, editable->selection_end_pos) && - mark->index < MAX(editable->selection_start_pos, editable->selection_end_pos))) - { - gtk_paint_flat_box(GTK_WIDGET(text)->style, text->text_area, - editable->has_selection ? - GTK_STATE_SELECTED : GTK_STATE_ACTIVE, - GTK_SHADOW_NONE, - NULL, GTK_WIDGET(text), "text", - x, y, width, height); - } - else if (!gdk_color_equal(MARK_CURRENT_BACK (text, mark), - >K_WIDGET(text)->style->base[GTK_WIDGET_STATE (text)])) - { - gdk_gc_set_foreground (text->gc, MARK_CURRENT_BACK (text, mark)); - - gdk_draw_rectangle (text->text_area, - text->gc, - TRUE, x, y, width, height); - } - else if (GTK_WIDGET (text)->style->bg_pixmap[GTK_STATE_NORMAL]) - { - GdkRectangle rect; - - rect.x = x; - rect.y = y; - rect.width = width; - rect.height = height; - - clear_area (text, &rect); - } - else if (!already_cleared) - gdk_window_clear_area (text->text_area, x, y, width, height); -} - -static void -draw_line (GtkSText* text, - gint pixel_start_height, - LineParams* lp) -{ - GdkGCValues gc_values; - gint i; - gint len = 0; - guint running_offset = lp->tab_cont.pixel_offset; - union { GdkWChar *wc; guchar *ch; } buffer; - GdkGC *fg_gc; - - GtkEditable *editable = GTK_EDITABLE(text); - - guint selection_start_pos = MIN (editable->selection_start_pos, editable->selection_end_pos); - guint selection_end_pos = MAX (editable->selection_start_pos, editable->selection_end_pos); - - GtkSPropertyMark mark = lp->start; - TabStopMark tab_mark = lp->tab_cont.tab_start; - gint pixel_height = pixel_start_height + lp->font_ascent; - guint chars = lp->displayable_chars; - - /* First provide a contiguous segment of memory. This makes reading - * the code below *much* easier, and only incurs the cost of copying - * when the line being displayed spans the gap. */ - if (mark.index <= text->gap_position && - mark.index + chars > text->gap_position) - { - expand_scratch_buffer (text, chars); - - if (text->use_wchar) - { - for (i = 0; i < chars; i += 1) - text->scratch_buffer.wc[i] = GTK_STEXT_INDEX(text, mark.index + i); - buffer.wc = text->scratch_buffer.wc; - } - else - { - for (i = 0; i < chars; i += 1) - text->scratch_buffer.ch[i] = GTK_STEXT_INDEX(text, mark.index + i); - buffer.ch = text->scratch_buffer.ch; - } - } - else - { - if (text->use_wchar) - { - if (mark.index >= text->gap_position) - buffer.wc = text->text.wc + mark.index + text->gap_size; - else - buffer.wc = text->text.wc + mark.index; - } - else - { - if (mark.index >= text->gap_position) - buffer.ch = text->text.ch + mark.index + text->gap_size; - else - buffer.ch = text->text.ch + mark.index; - } - } - - - if (running_offset > 0) - { - draw_bg_rect (text, &mark, 0, pixel_start_height, running_offset, - LINE_HEIGHT (*lp), TRUE); - } - - while (chars > 0) - { - len = 0; - if ((text->use_wchar && buffer.wc[0] != '\t') || - (!text->use_wchar && buffer.ch[0] != '\t')) - { - union { GdkWChar *wc; guchar *ch; } next_tab; - gint pixel_width; - GdkFont *font; - - next_tab.wc = NULL; - if (text->use_wchar) - for (i=0; i<chars; i++) - { - if (buffer.wc[i] == '\t') - { - next_tab.wc = buffer.wc + i; - break; - } - } - else - next_tab.ch = memchr (buffer.ch, '\t', chars); - - len = MIN (MARK_CURRENT_PROPERTY (&mark)->length - mark.offset, chars); - - if (text->use_wchar) - { - if (next_tab.wc) - len = MIN (len, next_tab.wc - buffer.wc); - } - else - { - if (next_tab.ch) - len = MIN (len, next_tab.ch - buffer.ch); - } - - if (mark.index < selection_start_pos) - len = MIN (len, selection_start_pos - mark.index); - else if (mark.index < selection_end_pos) - len = MIN (len, selection_end_pos - mark.index); - - font = MARK_CURRENT_FONT (text, &mark); - if (font->type == GDK_FONT_FONT) - { - gdk_gc_set_font (text->gc, font); - gdk_gc_get_values (text->gc, &gc_values); - if (text->use_wchar) - pixel_width = gdk_text_width_wc (gc_values.font, - buffer.wc, len); - else - pixel_width = gdk_text_width (gc_values.font, - buffer.ch, len); - } - else - { - if (text->use_wchar) - pixel_width = gdk_text_width_wc (font, buffer.wc, len); - else - pixel_width = gdk_text_width (font, buffer.ch, len); - } - - draw_bg_rect (text, &mark, running_offset, pixel_start_height, - pixel_width, LINE_HEIGHT (*lp), TRUE); - - if ((mark.index >= selection_start_pos) && - (mark.index < selection_end_pos)) - { - if (editable->has_selection) - fg_gc = GTK_WIDGET(text)->style->fg_gc[GTK_STATE_SELECTED]; - else - fg_gc = GTK_WIDGET(text)->style->fg_gc[GTK_STATE_ACTIVE]; - } - else - { - gdk_gc_set_foreground (text->gc, MARK_CURRENT_FORE (text, &mark)); - fg_gc = text->gc; - } - - if (text->use_wchar) - gdk_draw_text_wc (text->text_area, MARK_CURRENT_FONT (text, &mark), - fg_gc, - running_offset, - pixel_height, - buffer.wc, - len); - else - gdk_draw_text (text->text_area, MARK_CURRENT_FONT (text, &mark), - fg_gc, - running_offset, - pixel_height, - buffer.ch, - len); - - running_offset += pixel_width; - - advance_tab_mark_n (text, &tab_mark, len); - } - else - { - gint pixels_remaining; - gint space_width; - gint spaces_avail; - - len = 1; - - gdk_window_get_size (text->text_area, &pixels_remaining, NULL); - if (GTK_EDITABLE (text)->editable || !text->word_wrap) - pixels_remaining -= (LINE_WRAP_ROOM + running_offset); - else - pixels_remaining -= running_offset; - - space_width = MARK_CURRENT_TEXT_FONT(text, &mark)->char_widths[' ']; - - spaces_avail = pixels_remaining / space_width; - spaces_avail = MIN (spaces_avail, tab_mark.to_next_tab); - - draw_bg_rect (text, &mark, running_offset, pixel_start_height, - spaces_avail * space_width, LINE_HEIGHT (*lp), TRUE); - - running_offset += tab_mark.to_next_tab * - MARK_CURRENT_TEXT_FONT(text, &mark)->char_widths[' ']; - - advance_tab_mark (text, &tab_mark, '\t'); - } - - advance_mark_n (&mark, len); - if (text->use_wchar) - buffer.wc += len; - else - buffer.ch += len; - chars -= len; - } -} - -static void -draw_line_wrap (GtkSText* text, guint height /* baseline height */) -{ - gint width; - GdkPixmap *bitmap; - gint bitmap_width; - gint bitmap_height; - - if (!GTK_EDITABLE (text)->editable && text->word_wrap) - return; - - /* SYLPHEED - don't draw ugly word wrapping thing if - * our wrap margin is set */ - if (text->wrap_rmargin > 0) { - return; - } - - if (text->line_wrap) - { - bitmap = text->line_wrap_bitmap; - bitmap_width = line_wrap_width; - bitmap_height = line_wrap_height; - } - else - { - bitmap = text->line_arrow_bitmap; - bitmap_width = line_arrow_width; - bitmap_height = line_arrow_height; - } - - gdk_window_get_size (text->text_area, &width, NULL); - width -= LINE_WRAP_ROOM; - - gdk_gc_set_stipple (text->gc, - bitmap); - - gdk_gc_set_fill (text->gc, GDK_STIPPLED); - - gdk_gc_set_foreground (text->gc, >K_WIDGET (text)->style->text[GTK_STATE_NORMAL]); - - gdk_gc_set_ts_origin (text->gc, - width + 1, - height - bitmap_height - 1); - - gdk_draw_rectangle (text->text_area, - text->gc, - TRUE, - width + 1, - height - bitmap_height - 1 /* one pixel above the baseline. */, - bitmap_width, - bitmap_height); - - gdk_gc_set_ts_origin (text->gc, 0, 0); - - gdk_gc_set_fill (text->gc, GDK_SOLID); -} - -static void -undraw_cursor (GtkSText* text, gint absolute) -{ - GtkEditable *editable = (GtkEditable *)text; - - TDEBUG (("in undraw_cursor\n")); - - if (absolute) - text->cursor_drawn_level = 0; - - if ((text->cursor_drawn_level ++ == 0) && - (editable->selection_start_pos == editable->selection_end_pos) && - GTK_WIDGET_DRAWABLE (text) && text->line_start_cache) - { - GdkFont* font; - gint pixel_width, pixel_height; - GdkGC *gc; - - g_assert(text->cursor_mark.property); - - gc = gdk_gc_new(text->text_area); - g_assert(gc); - gdk_gc_copy(gc, text->gc); - - font = MARK_CURRENT_FONT(text, &text->cursor_mark); - - /* SYLPHEED: - * changed the cursor to a real block (TM) - */ - if (text->cursor_type == STEXT_CURSOR_BLOCK) { - if (text->use_wchar) - pixel_width = gdk_char_width_wc(font, text->cursor_char); - else - pixel_width = gdk_char_width(font, text->cursor_char); - pixel_width -= 1; - pixel_height = LINE_HEIGHT(CACHE_DATA(text->current_line)); - - draw_bg_rect (text, &text->cursor_mark, - text->cursor_pos_x, - text->cursor_pos_y - (pixel_height + 1), - pixel_width + 1, - pixel_height + 1, - FALSE); - } - else { - draw_bg_rect (text, &text->cursor_mark, - text->cursor_pos_x - 1, - text->cursor_pos_y - text->cursor_char_offset - font->ascent, - 2, font->descent + font->ascent + 1, FALSE); - - } - - if (text->cursor_char) - { - if (font->type == GDK_FONT_FONT) - gdk_gc_set_font (text->gc, font); - - gdk_gc_set_foreground (text->gc, MARK_CURRENT_FORE (text, &text->cursor_mark)); - - gdk_draw_text_wc (text->text_area, font, - text->gc, - text->cursor_pos_x, - text->cursor_pos_y - text->cursor_char_offset, - &text->cursor_char, - 1); - } - - gdk_gc_copy(text->gc, gc); - gdk_gc_unref(gc); - } -} - -static gint -drawn_cursor_min (GtkSText* text) -{ - GdkFont* font; - - g_assert(text->cursor_mark.property); - - font = MARK_CURRENT_FONT(text, &text->cursor_mark); - - return text->cursor_pos_y - text->cursor_char_offset - font->ascent; -} - -static gint -drawn_cursor_max (GtkSText* text) -{ - GdkFont* font; - - g_assert(text->cursor_mark.property); - - font = MARK_CURRENT_FONT(text, &text->cursor_mark); - - return text->cursor_pos_y - text->cursor_char_offset; -} - -static void -draw_cursor (GtkSText* text, gint absolute) -{ - GtkEditable *editable = (GtkEditable *)text; - gint pixel_width, pixel_height; - - TDEBUG (("in draw_cursor\n")); - - if (absolute) - text->cursor_drawn_level = 1; - - if ((--text->cursor_drawn_level == 0) && - editable->editable && - (editable->selection_start_pos == editable->selection_end_pos) && - GTK_WIDGET_DRAWABLE (text) && text->line_start_cache) - { - GdkFont* font; - GdkGC* gc; - - g_assert (text->cursor_mark.property); - - gc = gdk_gc_new(text->text_area); - g_assert (gc); - gdk_gc_copy(gc, text->gc); - font = MARK_CURRENT_FONT (text, &text->cursor_mark); - if (text->cursor_type == STEXT_CURSOR_BLOCK) { - /* SYLPHEED: - * changed the cursor to a real block (TM) - */ - if (text->use_wchar) { - pixel_width = gdk_char_width_wc(font, text->cursor_char); - } - else { - pixel_width = gdk_char_width(font, text->cursor_char); - } - pixel_width -= 1; - - pixel_height = LINE_HEIGHT(CACHE_DATA(text->current_line)); - gdk_gc_set_foreground (text->gc, >K_WIDGET (text)->style->text[GTK_STATE_NORMAL]); - gdk_gc_set_function(text->gc, GDK_INVERT); - gdk_draw_rectangle(text->text_area, text->gc, TRUE, - text->cursor_pos_x, - text->cursor_pos_y - pixel_height, - pixel_width, - pixel_height); - } - else { - gdk_gc_set_line_attributes(text->gc, 2, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_MITER); - gdk_gc_set_foreground(text->gc, >K_WIDGET (text)->style->text[GTK_STATE_NORMAL]); - gdk_draw_line(text->text_area, text->gc, text->cursor_pos_x, - text->cursor_pos_y + font->descent - text->cursor_char_offset, - text->cursor_pos_x, - text->cursor_pos_y - text->cursor_char_offset - font->ascent ); - - } - gdk_gc_copy(text->gc, gc); - gdk_gc_unref(gc); - } -} - -static GdkGC * -create_bg_gc (GtkSText *text) -{ - GdkGCValues values; - - values.tile = GTK_WIDGET (text)->style->bg_pixmap[GTK_STATE_NORMAL]; - values.fill = GDK_TILED; - - return gdk_gc_new_with_values (text->text_area, &values, - GDK_GC_FILL | GDK_GC_TILE); -} - -static void -clear_area (GtkSText *text, GdkRectangle *area) -{ - GtkWidget *widget = GTK_WIDGET (text); - - if (text->bg_gc) - { - gint width, height; - - gdk_window_get_size (widget->style->bg_pixmap[GTK_STATE_NORMAL], &width, &height); - - gdk_gc_set_ts_origin (text->bg_gc, - (- (gint)text->first_onscreen_hor_pixel) % width, - (- (gint)text->first_onscreen_ver_pixel) % height); - - gdk_draw_rectangle (text->text_area, text->bg_gc, TRUE, - area->x, area->y, area->width, area->height); - } - else - gdk_window_clear_area (text->text_area, area->x, area->y, area->width, area->height); -} - -static void -expose_text (GtkSText* text, GdkRectangle *area, gboolean cursor) -{ - GList *cache = text->line_start_cache; - gint pixels = - text->first_cut_pixels; - gint min_y = MAX (0, area->y); - gint max_y = MAX (0, area->y + area->height); - gint height; - - gdk_window_get_size (text->text_area, NULL, &height); - max_y = MIN (max_y, height); - - TDEBUG (("in expose x=%d y=%d w=%d h=%d\n", area->x, area->y, area->width, area->height)); - - clear_area (text, area); - - for (; pixels < height; cache = cache->next) - { - if (pixels < max_y && (pixels + (gint)LINE_HEIGHT(CACHE_DATA(cache))) >= min_y) - { - draw_line (text, pixels, &CACHE_DATA(cache)); - - if (CACHE_DATA(cache).wraps) - draw_line_wrap (text, pixels + CACHE_DATA(cache).font_ascent); - } - - if (cursor && GTK_WIDGET_HAS_FOCUS (text)) - { - if (CACHE_DATA(cache).start.index <= text->cursor_mark.index && - CACHE_DATA(cache).end.index >= text->cursor_mark.index) - { - /* We undraw and draw the cursor here to get the drawn - * level right ... FIXME - maybe the second parameter - * of draw_cursor should work differently - */ - undraw_cursor (text, FALSE); - draw_cursor (text, FALSE); - } - } - - pixels += LINE_HEIGHT(CACHE_DATA(cache)); - - if (!cache->next) - { - fetch_lines_forward (text, 1); - - if (!cache->next) - break; - } - } -} - -static void -gtk_stext_update_text (GtkEditable *editable, - gint start_pos, - gint end_pos) -{ - GtkSText *text = GTK_STEXT (editable); - - GList *cache = text->line_start_cache; - gint pixels = - text->first_cut_pixels; - GdkRectangle area; - gint width; - gint height; - - if (end_pos < 0) - end_pos = TEXT_LENGTH (text); - - if (end_pos < start_pos) - return; - - gdk_window_get_size (text->text_area, &width, &height); - area.x = 0; - area.y = -1; - area.width = width; - area.height = 0; - - TDEBUG (("in expose span start=%d stop=%d\n", start_pos, end_pos)); - - for (; pixels < height; cache = cache->next) - { - if (CACHE_DATA(cache).start.index < end_pos) - { - if (CACHE_DATA(cache).end.index >= start_pos) - { - if (area.y < 0) - area.y = MAX(0,pixels); - area.height = pixels + LINE_HEIGHT(CACHE_DATA(cache)) - area.y; - } - } - else - break; - - pixels += LINE_HEIGHT(CACHE_DATA(cache)); - - if (!cache->next) - { - fetch_lines_forward (text, 1); - - if (!cache->next) - break; - } - } - - if (area.y >= 0) - expose_text (text, &area, TRUE); -} - -static void -recompute_geometry (GtkSText* text) -{ - GtkSPropertyMark mark, start_mark; - GList *new_lines; - gint height; - gint width; - - free_cache (text); - - mark = start_mark = set_vertical_scroll (text); - - /* We need a real start of a line when calling fetch_lines(). - * not the start of a wrapped line. - */ - while (mark.index > 0 && - GTK_STEXT_INDEX (text, mark.index - 1) != LINE_DELIM) - decrement_mark (&mark); - - gdk_window_get_size (text->text_area, &width, &height); - - /* Fetch an entire line, to make sure that we get all the text - * we backed over above, in addition to enough text to fill up - * the space vertically - */ - - new_lines = fetch_lines (text, - &mark, - NULL, - FetchLinesCount, - 1); - - mark = CACHE_DATA (g_list_last (new_lines)).end; - if (!LAST_INDEX (text, mark)) - { - advance_mark (&mark); - - new_lines = g_list_concat (new_lines, - fetch_lines (text, - &mark, - NULL, - FetchLinesPixels, - height + text->first_cut_pixels)); - } - - /* Now work forward to the actual first onscreen line */ - - while (CACHE_DATA (new_lines).start.index < start_mark.index) - new_lines = new_lines->next; - - text->line_start_cache = new_lines; - - find_cursor (text, TRUE); -} - -/**********************************************************************/ -/* Selection */ -/**********************************************************************/ - -static void -gtk_stext_set_selection (GtkEditable *editable, - gint start, - gint end) -{ - GtkSText *text = GTK_STEXT (editable); - - guint start1, end1, start2, end2; - - if (end < 0) - end = TEXT_LENGTH (text); - - start1 = MIN(start,end); - end1 = MAX(start,end); - start2 = MIN(editable->selection_start_pos, editable->selection_end_pos); - end2 = MAX(editable->selection_start_pos, editable->selection_end_pos); - - if (start2 < start1) - { - guint tmp; - - tmp = start1; start1 = start2; start2 = tmp; - tmp = end1; end1 = end2; end2 = tmp; - } - - undraw_cursor (text, FALSE); - editable->selection_start_pos = start; - editable->selection_end_pos = end; - draw_cursor (text, FALSE); - - /* Expose only what changed */ - - if (start1 < start2) - gtk_stext_update_text (editable, start1, MIN(end1, start2)); - - if (end2 > end1) - gtk_stext_update_text (editable, MAX(end1, start2), end2); - else if (end2 < end1) - gtk_stext_update_text (editable, end2, end1); -} - - -/* SYLPHEED: - * cursor timer - */ - -static gint stext_blink_timer_proc(GtkSText *text) -{ - if (text->cursor_state_on) { - text->cursor_state_on = FALSE; - undraw_cursor(text, TRUE); - /* kill this timer... */ - gtk_timeout_remove(text->cursor_timer_id); - text->cursor_timer_id = gtk_timeout_add(text->cursor_off_ms, (GtkFunction) stext_blink_timer_proc, (gpointer) text); - } - else { - text->cursor_state_on = TRUE; - draw_cursor(text, TRUE); - /* kill this timer... */ - gtk_timeout_remove(text->cursor_timer_id); - text->cursor_timer_id = gtk_timeout_add(text->cursor_on_ms, (GtkFunction) stext_blink_timer_proc, (gpointer) text); - } - return TRUE; -} - -static gint stext_idle_timer_proc(GtkSText *text) -{ - /* make sure the cursor timer is off */ - if (text->cursor_timer_id) { - gtk_timeout_remove(text->cursor_timer_id); - text->cursor_timer_id = 0; - } - /* assuming it's always on when calling this function ... */ - text->cursor_state_on = TRUE; - text->cursor_timer_id = gtk_timeout_add(text->cursor_on_ms, (GtkFunction) stext_blink_timer_proc, (gpointer) text); - /* make sure we kill the timer (could perhaps make this function return FALSE (not documented in - * the current docs). should check the source. */ - gtk_idle_remove( text->cursor_idle_time_timer_id ); - text->cursor_idle_time_timer_id = 0; - return TRUE; -} - -static void gtk_stext_enable_blink (GtkSText *text) -{ - if (text->cursor_timer_on) { - gtk_stext_disable_blink(text); - text->cursor_idle_time_timer_id = gtk_idle_add((GtkFunction) stext_idle_timer_proc, (gpointer) text); - } -} - -static void gtk_stext_disable_blink (GtkSText *text) -{ - if (text->cursor_timer_on) { - if (text->cursor_idle_time_timer_id) { - gtk_idle_remove( text->cursor_idle_time_timer_id ); - text->cursor_idle_time_timer_id = 0; - } - if (text->cursor_timer_id) { - gtk_timeout_remove( text->cursor_timer_id ); - text->cursor_timer_id = 0; - } - draw_cursor(text, TRUE); - } -} - -void gtk_stext_set_blink(GtkSText *text, gboolean blinkin_on) -{ - if (text->cursor_timer_on != blinkin_on) { - if (text->cursor_timer_on) { - /* text widget already created? */ - if (text->cursor_visible) { - gtk_stext_disable_blink(text); - } - text->cursor_timer_on = FALSE; - } - else { - if (text->cursor_visible) { - gtk_stext_enable_blink(text); - } - text->cursor_timer_on = TRUE; - } - } -} - - -void gtk_stext_set_wrap_rmargin (GtkSText *text, gint rmargin) -{ - /* not particularly impressive, but it does the job. */ - /* TODO: currently only allowed to set this after a - * gtk_stext_new() */ - text->wrap_rmargin = rmargin >= 0 ? rmargin : 0; -} - -/**********************************************************************/ -/* Debug */ -/**********************************************************************/ - -#ifdef DEBUG_GTK_STEXT -static void -gtk_stext_show_cache_line (GtkSText *text, GList *cache, - const char* what, const char* func, gint line) -{ - LineParams *lp = &CACHE_DATA(cache); - gint i; - - if (cache == text->line_start_cache) - g_message ("Line Start Cache: "); - - if (cache == text->current_line) - g_message("Current Line: "); - - g_message ("%s:%d: cache line %s s=%d,e=%d,lh=%d (", - func, - line, - what, - lp->start.index, - lp->end.index, - LINE_HEIGHT(*lp)); - - for (i = lp->start.index; i < (lp->end.index + lp->wraps); i += 1) - g_message ("%c", GTK_STEXT_INDEX (text, i)); - - g_message (")\n"); -} - -static void -gtk_stext_show_cache (GtkSText *text, const char* func, gint line) -{ - GList *l = text->line_start_cache; - - if (!l) { - return; - } - - /* back up to the absolute beginning of the line cache */ - while (l->prev) - l = l->prev; - - g_message ("*** line cache ***\n"); - for (; l; l = l->next) - gtk_stext_show_cache_line (text, l, "all", func, line); -} - -static void -gtk_stext_assert_mark (GtkSText *text, - GtkSPropertyMark *mark, - GtkSPropertyMark *before, - GtkSPropertyMark *after, - const gchar *msg, - const gchar *where, - gint line) -{ - GtkSPropertyMark correct_mark = find_mark (text, mark->index); - - if (mark->offset != correct_mark.offset || - mark->property != correct_mark.property) - g_warning ("incorrect %s text property marker in %s:%d, index %d -- bad!", where, msg, line, mark->index); -} - -static void -gtk_stext_assert (GtkSText *text, - const gchar *msg, - gint line) -{ - GList* cache = text->line_start_cache; - GtkSPropertyMark* before_mark = NULL; - GtkSPropertyMark* after_mark = NULL; - - gtk_stext_show_props (text, msg, line); - - for (; cache->prev; cache = cache->prev) - /* nothing */; - - g_message ("*** line markers ***\n"); - - for (; cache; cache = cache->next) - { - after_mark = &CACHE_DATA(cache).end; - gtk_stext_assert_mark (text, &CACHE_DATA(cache).start, before_mark, after_mark, msg, "start", line); - before_mark = &CACHE_DATA(cache).start; - - if (cache->next) - after_mark = &CACHE_DATA(cache->next).start; - else - after_mark = NULL; - - gtk_stext_assert_mark (text, &CACHE_DATA(cache).end, before_mark, after_mark, msg, "end", line); - before_mark = &CACHE_DATA(cache).end; - } -} - -static void -gtk_stext_show_adj (GtkSText *text, - GtkAdjustment *adj, - const char* what, - const char* func, - gint line) -{ - g_message ("*** adjustment ***\n"); - - g_message ("%s:%d: %s adjustment l=%.1f u=%.1f v=%.1f si=%.1f pi=%.1f ps=%.1f\n", - func, - line, - what, - adj->lower, - adj->upper, - adj->value, - adj->step_increment, - adj->page_increment, - adj->page_size); -} - -static void -gtk_stext_show_props (GtkSText *text, - const char* msg, - int line) -{ - GList* props = text->text_properties; - int proplen = 0; - - g_message ("%s:%d: ", msg, line); - - for (; props; props = props->next) - { - TextProperty *p = (TextProperty*)props->data; - - proplen += p->length; - - g_message ("[%d,%p,", p->length, p); - if (p->flags & PROPERTY_FONT) - g_message ("%p,", p->font); - else - g_message ("-,"); - if (p->flags & PROPERTY_FOREGROUND) - g_message ("%ld, ", p->fore_color.pixel); - else - g_message ("-,"); - if (p->flags & PROPERTY_BACKGROUND) - g_message ("%ld] ", p->back_color.pixel); - else - g_message ("-] "); - } - - g_message ("\n"); - - if (proplen - 1 != TEXT_LENGTH(text)) - g_warning ("incorrect property list length in %s:%d -- bad!", msg, line); -} -#endif diff --git a/src/gtkstext.h b/src/gtkstext.h deleted file mode 100644 index 09bb1b98b..000000000 --- a/src/gtkstext.h +++ /dev/null @@ -1,262 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * 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. - */ - -/* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -/* - * Modified by the Sylpheed Team and others 2001. - */ - -#ifndef __GTK_STEXT_H__ -#define __GTK_STEXT_H__ - - -#include <gdk/gdk.h> -#include <gtk/gtkadjustment.h> -#include <gtk/gtkeditable.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -#define GTK_TYPE_STEXT (gtk_stext_get_type ()) -#define GTK_STEXT(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_STEXT, GtkSText)) -#define GTK_STEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_STEXT, GtkSTextClass)) -#define GTK_IS_STEXT(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_STEXT)) -#define GTK_IS_STEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_STEXT)) - -typedef struct _GtkSTextFont GtkSTextFont; -typedef struct _GtkSPropertyMark GtkSPropertyMark; -typedef struct _GtkSText GtkSText; -typedef struct _GtkSTextClass GtkSTextClass; - -typedef enum _GtkSTextCursorType GtkSTextCursorType; - -enum _GtkSTextCursorType -{ - STEXT_CURSOR_LINE, - STEXT_CURSOR_BLOCK -}; - -struct _GtkSPropertyMark -{ - /* Position in list. */ - GList* property; - - /* Offset into that property. */ - guint offset; - - /* Current index. */ - guint index; -}; - -struct _GtkSText -{ - GtkEditable editable; - - GdkWindow *text_area; - - GtkAdjustment *hadj; - GtkAdjustment *vadj; - - GdkGC *gc; - - GdkPixmap* line_wrap_bitmap; - GdkPixmap* line_arrow_bitmap; - - /* GAPPED TEXT SEGMENT */ - - /* The text, a single segment of text a'la emacs, with a gap - * where insertion occurs. */ - union { GdkWChar *wc; guchar *ch; } text; - /* The allocated length of the text segment. */ - guint text_len; - /* The gap position, index into address where a char - * should be inserted. */ - guint gap_position; - /* The gap size, s.t. *(text + gap_position + gap_size) is - * the first valid character following the gap. */ - guint gap_size; - /* The last character position, index into address where a - * character should be appeneded. Thus, text_end - gap_size - * is the length of the actual data. */ - guint text_end; - /* LINE START CACHE */ - - /* A cache of line-start information. Data is a LineParam*. */ - GList *line_start_cache; - /* Index to the start of the first visible line. */ - guint first_line_start_index; - /* The number of pixels cut off of the top line. */ - guint first_cut_pixels; - /* First visible horizontal pixel. */ - guint first_onscreen_hor_pixel; - /* First visible vertical pixel. */ - guint first_onscreen_ver_pixel; - - /* FLAGS */ - - /* True iff this buffer is wrapping lines, otherwise it is using a - * horizontal scrollbar. */ - guint line_wrap : 1; - guint word_wrap : 1; - /* If a fontset is supplied for the widget, use_wchar become true, - * and we use GdkWchar as the encoding of text. */ - guint use_wchar : 1; - - /* Frozen, don't do updates. @@@ fixme */ - guint freeze_count; - /* TEXT PROPERTIES */ - - /* A doubly-linked-list containing TextProperty objects. */ - GList *text_properties; - /* The end of this list. */ - GList *text_properties_end; - /* The first node before or on the point along with its offset to - * the point and the buffer's current point. This is the only - * PropertyMark whose index is guaranteed to remain correct - * following a buffer insertion or deletion. */ - GtkSPropertyMark point; - - /* SCRATCH AREA */ - - union { GdkWChar *wc; guchar *ch; } scratch_buffer; - guint scratch_buffer_len; - - /* SCROLLING */ - - gint last_ver_value; - - /* CURSOR */ - - gint cursor_pos_x; /* Position of cursor. */ - gint cursor_pos_y; /* Baseline of line cursor is drawn on. */ - GtkSPropertyMark cursor_mark; /* Where it is in the buffer. */ - GdkWChar cursor_char; /* Character to redraw. */ - gchar cursor_char_offset; /* Distance from baseline of the font. */ - gint cursor_virtual_x; /* Where it would be if it could be. */ - gint cursor_drawn_level; /* How many people have undrawn. */ - - /* Current Line */ - - GList *current_line; - - /* Tab Stops */ - - GList *tab_stops; - gint default_tab_width; - - GtkSTextFont *current_font; /* Text font for current style */ - - /* Timer used for auto-scrolling off ends */ - gint timer; - - guint button; /* currently pressed mouse button */ - GdkGC *bg_gc; /* gc for drawing background pixmap */ - - /* SYLPHEED: - * properties added for different cursor - */ - gboolean cursor_visible; /* whether cursor is visible */ - gboolean cursor_timer_on; /* blinking enabled */ - guint cursor_off_ms, cursor_on_ms; /* cursor off / on time */ - gboolean cursor_state_on; /* state */ - guint32 cursor_timer_id; /* blinking timer */ - guint32 cursor_idle_time_timer_id; /* timer id */ - - GtkSTextCursorType cursor_type; - - /* SYLPHEED: - * properties added for rmargin - */ - gint wrap_rmargin; /* right margin */ - - /* SYLPHEED: - * properties added for persist column position when - * using up and down key */ - gint persist_column; -}; - -struct _GtkSTextClass -{ - GtkEditableClass parent_class; - - void (*set_scroll_adjustments) (GtkSText *text, - GtkAdjustment *hadjustment, - GtkAdjustment *vadjustment); -}; - - -GtkType gtk_stext_get_type (void); -GtkWidget* gtk_stext_new (GtkAdjustment *hadj, - GtkAdjustment *vadj); -void gtk_stext_set_editable (GtkSText *text, - gboolean editable); -void gtk_stext_set_word_wrap (GtkSText *text, - gint word_wrap); -void gtk_stext_set_line_wrap (GtkSText *text, - gint line_wrap); -void gtk_stext_set_adjustments (GtkSText *text, - GtkAdjustment *hadj, - GtkAdjustment *vadj); -void gtk_stext_set_point (GtkSText *text, - guint index); -guint gtk_stext_get_point (GtkSText *text); -guint gtk_stext_get_length (GtkSText *text); -void gtk_stext_freeze (GtkSText *text); -void gtk_stext_thaw (GtkSText *text); -void gtk_stext_insert (GtkSText *text, - GdkFont *font, - GdkColor *fore, - GdkColor *back, - const char *chars, - gint length); -gint gtk_stext_backward_delete (GtkSText *text, - guint nchars); -gint gtk_stext_forward_delete (GtkSText *text, - guint nchars); - -/* SYLPHEED - */ -void gtk_stext_set_blink (GtkSText *text, gboolean blinking_on); - -/* Set the rmargin for the stext. if rmargin is 0, then reset to old - * behaviour */ -void gtk_stext_set_wrap_rmargin (GtkSText *text, gint rmargin); - -void gtk_stext_set_cursor_type (GtkSText *text, GtkSTextCursorType cursor_type); - -#define GTK_STEXT_INDEX(t, index) (((t)->use_wchar) \ - ? ((index) < (t)->gap_position ? (t)->text.wc[index] : \ - (t)->text.wc[(index)+(t)->gap_size]) \ - : ((index) < (t)->gap_position ? (t)->text.ch[index] : \ - (t)->text.ch[(index)+(t)->gap_size])) - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __GTK_STEXT_H__ */ diff --git a/src/gtkutils.c b/src/gtkutils.c deleted file mode 100644 index e65adbabd..000000000 --- a/src/gtkutils.c +++ /dev/null @@ -1,333 +0,0 @@ -/* - * 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); -} - -/* get the next node, including the invisible one */ -GtkCTreeNode *gtkut_ctree_node_next(GtkCTree *ctree, GtkCTreeNode *node) -{ - GtkCTreeNode *parent; - - if (!node) return NULL; - - if (GTK_CTREE_ROW(node)->children) - return GTK_CTREE_ROW(node)->children; - - if (GTK_CTREE_ROW(node)->sibling) - return GTK_CTREE_ROW(node)->sibling; - - for (parent = GTK_CTREE_ROW(node)->parent; parent != NULL; - parent = GTK_CTREE_ROW(parent)->parent) { - if (GTK_CTREE_ROW(parent)->sibling) - return GTK_CTREE_ROW(parent)->sibling; - } - - return NULL; -} - -GtkCTreeNode *gtkut_ctree_find_collapsed_parent(GtkCTree *ctree, - GtkCTreeNode *node) -{ - if (!node) return NULL; - - while ((node = GTK_CTREE_ROW(node)->parent) != NULL) { - if (!GTK_CTREE_ROW(node)->expanded) - return node; - } - - return NULL; -} - -void gtkut_ctree_expand_parent_all(GtkCTree *ctree, GtkCTreeNode *node) -{ - while ((node = gtkut_ctree_find_collapsed_parent(ctree, node)) != NULL) - gtk_ctree_expand(ctree, 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 deleted file mode 100644 index 96706261d..000000000 --- a/src/gtkutils.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * 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); -GtkCTreeNode *gtkut_ctree_node_next (GtkCTree *ctree, - GtkCTreeNode *node); -GtkCTreeNode *gtkut_ctree_find_collapsed_parent - (GtkCTree *ctree, - GtkCTreeNode *node); -void gtkut_ctree_expand_parent_all (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/gtkxtext.h b/src/gtkxtext.h deleted file mode 100644 index 96c589019..000000000 --- a/src/gtkxtext.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Hiroyuki Yamamoto & The Sylpheed Claws Team - * - * 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 GTKXTEXT_H__ -#define GTKXTEXT_H__ - -#include "config.h" - -#ifdef CLAWS - -#include "gtkstext.h" - -typedef GtkSText GtkXText; - -#define GTK_IS_XTEXT(obj) GTK_IS_STEXT(obj) -#define GTK_XTEXT(obj) GTK_STEXT(obj) - -#define gtk_xtext_get_type gtk_stext_get_type -#define gtk_xtext_new gtk_stext_new -#define gtk_xtext_set_editable gtk_stext_set_editable -#define gtk_xtext_set_word_wrap gtk_stext_set_word_wrap -#define gtk_xtext_set_line_wrap gtk_stext_set_line_wrap -#define gtk_xtext_set_adjustments gtk_stext_set_adjustments -#define gtk_xtext_set_point gtk_stext_set_point -#define gtk_xtext_get_point gtk_stext_get_point -#define gtk_xtext_get_length gtk_stext_get_length -#define gtk_xtext_freeze gtk_stext_freeze -#define gtk_xtext_thaw gtk_stext_thaw -#define gtk_xtext_insert gtk_stext_insert -#define gtk_xtext_backward_delete gtk_stext_backward_delete -#define gtk_xtext_forward_delete gtk_stext_forward_delete - -#define GTK_XTEXT_INDEX GTK_STEXT_INDEX - -#else - -#include <gtk/gtktext.h> - -typedef GtkText GtkXText; - -#define GTK_IS_XTEXT(obj) GTK_IS_TEXT(obj) -#define GTK_XTEXT(obj) GTK_TEXT(obj) - -#define gtk_xtext_get_type gtk_text_get_type -#define gtk_xtext_new gtk_text_new -#define gtk_xtext_set_editable gtk_text_set_editable -#define gtk_xtext_set_word_wrap gtk_text_set_word_wrap -#define gtk_xtext_set_line_wrap gtk_text_set_line_wrap -#define gtk_xtext_set_adjustments gtk_text_set_adjustments -#define gtk_xtext_set_point gtk_text_set_point -#define gtk_xtext_get_point gtk_text_get_point -#define gtk_xtext_get_length gtk_text_get_length -#define gtk_xtext_freeze gtk_text_freeze -#define gtk_xtext_thaw gtk_text_thaw -#define gtk_xtext_insert gtk_text_insert -#define gtk_xtext_backward_delete gtk_text_backward_delete -#define gtk_xtext_forward_delete gtk_text_forward_delete - -#define GTK_XTEXT_INDEX GTK_TEXT_INDEX - -#endif /* !CLAWS */ - - -#endif /* GTKXTEXT_H__ */ - diff --git a/src/headerview.c b/src/headerview.c deleted file mode 100644 index 42228dc9f..000000000 --- a/src/headerview.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * 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/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)); \ - if (boldfont) \ - 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; - } - if (!GTK_WIDGET_VISIBLE(headerview->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 deleted file mode 100644 index db7d810be..000000000 --- a/src/headerview.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 deleted file mode 100644 index a854caae7..000000000 --- a/src/headerwindow.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * 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/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 "prefs_common.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->selected; - MsgInfo *msginfo; - - if (node) { - 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 deleted file mode 100644 index 652f40255..000000000 --- a/src/headerwindow.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 deleted file mode 100644 index 5ce4f0843..000000000 --- a/src/html.c +++ /dev/null @@ -1,683 +0,0 @@ -/* - * 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 deleted file mode 100644 index 41853b582..000000000 --- a/src/html.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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 deleted file mode 100644 index a1f7243df..000000000 --- a/src/imageview.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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 deleted file mode 100644 index ab0c42d24..000000000 --- a/src/imageview.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 deleted file mode 100644 index b8838f72f..000000000 --- a/src/imap.c +++ /dev/null @@ -1,2308 +0,0 @@ -/* - * 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 <glib.h> -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <dirent.h> -#include <unistd.h> -#include <ctype.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" -#include "inputdialog.h" -#include "ssl.h" - -#define IMAP4_PORT 143 -#if USE_SSL -#define IMAPS_PORT 993 -#endif - -static GList *session_list = NULL; - -static gint imap_cmd_count = 0; - -static IMAPSession *imap_session_get (Folder *folder); -static gchar *imap_query_password (const gchar *server, - const gchar *user); - -static void imap_scan_tree_recursive (IMAPSession *session, - FolderItem *item, - IMAPNameSpace *namespace); -static GSList *imap_parse_list (IMAPSession *session, - const gchar *path); -static gint imap_create_trash (Folder *folder); - -static gint imap_do_copy (Folder *folder, - FolderItem *dest, - MsgInfo *msginfo, - gboolean remove_source); -static gint imap_do_copy_msgs_with_dest (Folder *folder, - FolderItem *dest, - GSList *msglist, - gboolean remove_source); - -static GSList *imap_get_uncached_messages (IMAPSession *session, - FolderItem *item, - guint32 first_uid, - guint32 last_uid); -static GSList *imap_delete_cached_messages (GSList *mlist, - FolderItem *item, - guint32 first_uid, - guint32 last_uid); -static void imap_delete_all_cached_messages (FolderItem *item); - -#if !USE_SSL -static SockInfo *imap_open (const gchar *server, - gushort port, - gchar *buf); -#else -static SockInfo *imap_open (const gchar *server, - gushort port, - gchar *buf, - gboolean use_ssl); -#endif - -static gint imap_set_message_flags (IMAPSession *session, - guint32 first_uid, - guint32 last_uid, - IMAPFlags flag, - gboolean is_set); -static gint imap_select (IMAPSession *session, - IMAPFolder *folder, - const gchar *path, - gint *exists, - gint *recent, - gint *unseen, - guint32 *uid_validity); -static gint imap_get_uid (IMAPSession *session, - gint msgnum, - guint32 *uid); -static gint imap_status (IMAPSession *session, - IMAPFolder *folder, - const gchar *path, - gint *messages, - gint *recent, - gint *unseen, - guint32 *uid_validity); - -static void imap_parse_namespace (IMAPSession *session, - IMAPFolder *folder); -static IMAPNameSpace *imap_find_namespace (IMAPFolder *folder, - const gchar *path); -static gchar *imap_get_real_path (IMAPFolder *folder, - const gchar *path); - -static gchar *imap_parse_atom (SockInfo *sock, - gchar *src, - gchar *dest, - gint dest_len, - GString *str); -static gchar *imap_parse_one_address (SockInfo *sock, - gchar *start, - gchar *out_from_str, - gchar *out_fromname_str, - GString *str); -static gchar *imap_parse_address (SockInfo *sock, - gchar *start, - gchar **out_from_str, - gchar **out_fromname_str, - GString *str); -static MsgFlags imap_parse_flags (const gchar *flag_str); -static MsgInfo *imap_parse_envelope (SockInfo *sock, - GString *line_str); - -/* low-level IMAP4rev1 commands */ -static gint imap_cmd_login (SockInfo *sock, - const gchar *user, - const gchar *pass); -static gint imap_cmd_logout (SockInfo *sock); -static gint imap_cmd_noop (SockInfo *sock); -static gint imap_cmd_namespace (SockInfo *sock, - gchar **ns_str); -static gint imap_cmd_list (SockInfo *sock, - const gchar *ref, - const gchar *mailbox, - GPtrArray *argbuf); -static gint imap_cmd_do_select (SockInfo *sock, - const gchar *folder, - gboolean examine, - gint *exists, - gint *recent, - gint *unseen, - guint32 *uid_validity); -static gint imap_cmd_select (SockInfo *sock, - const gchar *folder, - gint *exists, - gint *recent, - gint *unseen, - guint32 *uid_validity); -static gint imap_cmd_examine (SockInfo *sock, - const gchar *folder, - gint *exists, - gint *recent, - gint *unseen, - guint32 *uid_validity); -static gint imap_cmd_create (SockInfo *sock, - const gchar *folder); -static gint imap_cmd_delete (SockInfo *sock, - const gchar *folder); -static gint imap_cmd_envelope (SockInfo *sock, - guint32 first_uid, - guint32 last_uid); -#if 0 -static gint imap_cmd_search (SockInfo *sock, - GSList *numlist); -#endif -static gint imap_cmd_fetch (SockInfo *sock, - guint32 uid, - const gchar *filename); -static gint imap_cmd_append (SockInfo *sock, - const gchar *destfolder, - const gchar *file); -static gint imap_cmd_copy (SockInfo *sock, - guint32 uid, - const gchar *destfolder); -static gint imap_cmd_store (SockInfo *sock, - guint32 first_uid, - guint32 last_uid, - gchar *sub_cmd); -static gint imap_cmd_expunge (SockInfo *sock); - -static gint imap_cmd_ok (SockInfo *sock, - GPtrArray *argbuf); -static void imap_cmd_gen_send (SockInfo *sock, - const gchar *format, ...); -static gint imap_cmd_gen_recv (SockInfo *sock, - gchar *buf, - gint size); - -/* misc utility functions */ -static gchar *strchr_cpy (const gchar *src, - gchar ch, - gchar *dest, - gint len); -static gchar *get_quoted (const gchar *src, - gchar ch, - gchar *dest, - gint len); -static gchar *search_array_contain_str (GPtrArray *array, - gchar *str); -static void imap_path_separator_subst (gchar *str, - gchar separator); - -static IMAPSession *imap_session_get(Folder *folder) -{ - RemoteFolder *rfolder = REMOTE_FOLDER(folder); - gushort port; - - 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 !USE_SSL - port = folder->account->set_imapport ? folder->account->imapport - : IMAP4_PORT; -#else - port = folder->account->set_imapport ? folder->account->imapport - : (folder->account->ssl_imap ? IMAPS_PORT : IMAP4_PORT); -#endif - - if (!rfolder->session) { - rfolder->session = -#if !USE_SSL - imap_session_new(folder->account->recv_server, port, - folder->account->userid, - folder->account->passwd); -#else - imap_session_new(folder->account->recv_server, port, - folder->account->userid, - folder->account->passwd, - folder->account->ssl_imap); -#endif - if (rfolder->session) - imap_parse_namespace(IMAP_SESSION(rfolder->session), - IMAP_FOLDER(folder)); - statusbar_pop_all(); - return IMAP_SESSION(rfolder->session); - } - - if (imap_cmd_noop(rfolder->session->sock) != IMAP_SUCCESS) { - log_warning(_("IMAP4 connection to %s:%d has been" - " disconnected. Reconnecting...\n"), - folder->account->recv_server, port); - session_destroy(rfolder->session); - rfolder->session = -#if !USE_SSL - imap_session_new(folder->account->recv_server, port, - folder->account->userid, - folder->account->passwd); -#else - imap_session_new(folder->account->recv_server, port, - folder->account->userid, - folder->account->passwd, - folder->account->ssl_imap); -#endif - if (rfolder->session) - imap_parse_namespace(IMAP_SESSION(rfolder->session), - IMAP_FOLDER(folder)); - } - - statusbar_pop_all(); - return IMAP_SESSION(rfolder->session); -} - -static gchar *imap_query_password(const gchar *server, const gchar *user) -{ - gchar *message; - gchar *pass; - - message = g_strdup_printf(_("Input password for %s on %s:"), - user, server); - pass = input_dialog_with_invisible(_("Input password"), message, NULL); - g_free(message); - - return pass; -} - -#if !USE_SSL -Session *imap_session_new(const gchar *server, gushort port, - const gchar *user, const gchar *pass) -#else -Session *imap_session_new(const gchar *server, gushort port, - const gchar *user, const gchar *pass, - gboolean use_ssl) -#endif -{ - gchar buf[IMAPBUFSIZE]; - IMAPSession *session; - SockInfo *imap_sock; - - g_return_val_if_fail(server != NULL, NULL); - g_return_val_if_fail(user != NULL, NULL); - - if (!pass) { - gchar *tmp_pass; - tmp_pass = imap_query_password(server, user); - if (!tmp_pass) - return NULL; - Xstrdup_a(pass, tmp_pass, {g_free(tmp_pass); return NULL;}); - g_free(tmp_pass); - } - - log_message(_("creating IMAP4 connection to %s:%d ...\n"), - server, port); - -#if !USE_SSL - if ((imap_sock = imap_open(server, port, buf)) == NULL) -#else - if ((imap_sock = imap_open(server, port, buf, use_ssl)) == NULL) -#endif - return NULL; - if (imap_cmd_login(imap_sock, user, pass) != IMAP_SUCCESS) { - imap_cmd_logout(imap_sock); - 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) -{ -#if USE_SSL - ssl_done_socket(SESSION(session)->sock); -#endif - sock_close(SESSION(session)->sock); - SESSION(session)->sock = NULL; - - 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_cmd_logout(SESSION(session)->sock); - imap_session_destroy(session); - } -} - -#define THROW goto catch - -GSList *imap_get_msg_list(Folder *folder, FolderItem *item, gboolean use_cache) -{ - GSList *mlist = NULL; - IMAPSession *session; - gint ok, exists = 0, recent = 0, unseen = 0; - guint32 uid_validity = 0; - guint32 first_uid = 0, last_uid = 0, begin; - - 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_get(folder); - - if (!session) { - mlist = procmsg_read_cache(item, FALSE); - item->last_num = procmsg_get_last_num_in_cache(mlist); - procmsg_set_flags(mlist, item); - statusbar_pop_all(); - return mlist; - } - - ok = imap_select(session, IMAP_FOLDER(folder), item->path, - &exists, &recent, &unseen, &uid_validity); - if (ok != IMAP_SUCCESS) THROW; - if (exists > 0) { - ok = imap_get_uid(session, 1, &first_uid); - if (ok != IMAP_SUCCESS) THROW; - if (1 != exists) { - ok = imap_get_uid(session, exists, &last_uid); - if (ok != IMAP_SUCCESS) THROW; - } else - last_uid = first_uid; - } else { - imap_delete_all_cached_messages(item); - statusbar_pop_all(); - return NULL; - } - - if (use_cache) { - guint32 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 (item->mtime != uid_validity) { - /* mailbox is changed (get all) */ - begin = first_uid; - } else if (last_uid < cache_last) { - /* mailbox is changed (get all) */ - begin = first_uid; - } else if (last_uid == cache_last) { - /* mailbox unchanged (get none)*/ - begin = 0; - } else { - begin = cache_last + 1; - } - - item->mtime = uid_validity; - - if (first_uid > 0 && last_uid > 0) { - mlist = imap_delete_cached_messages(mlist, item, - 0, first_uid - 1); - mlist = imap_delete_cached_messages(mlist, item, - last_uid + 1, - UINT_MAX); - } - if (begin > 0) - mlist = imap_delete_cached_messages(mlist, item, - begin, UINT_MAX); - } else { - imap_delete_all_cached_messages(item); - begin = first_uid; - } - - if (begin > 0 && begin <= last_uid) { - GSList *newlist; - newlist = imap_get_uncached_messages(session, item, - begin, last_uid); - mlist = g_slist_concat(mlist, newlist); - } - - item->last_num = last_uid; - -catch: - statusbar_pop_all(); - return mlist; -} - -#undef THROW - -gchar *imap_fetch_msg(Folder *folder, FolderItem *item, gint uid) -{ - gchar *path, *filename; - IMAPSession *session; - gint ok; - - g_return_val_if_fail(folder != NULL, NULL); - g_return_val_if_fail(item != NULL, NULL); - - path = folder_item_get_path(item); - if (!is_dir_exist(path)) - make_dir_hier(path); - filename = g_strconcat(path, G_DIR_SEPARATOR_S, itos(uid), NULL); - g_free(path); - - if (is_file_exist(filename)) { - debug_print(_("message %d has been already cached.\n"), uid); - return filename; - } - - session = imap_session_get(folder); - if (!session) { - g_free(filename); - return NULL; - } - - debug_print(_("getting message %d...\n"), uid); - ok = imap_cmd_fetch(SESSION(session)->sock, (guint32)uid, filename); - - statusbar_pop_all(); - - if (ok != IMAP_SUCCESS) { - g_warning(_("can't fetch message %d\n"), uid); - g_free(filename); - return NULL; - } - - return filename; -} - -gint imap_add_msg(Folder *folder, FolderItem *dest, const gchar *file, - gboolean remove_source) -{ - IMAPSession *session; - gint ok; - - g_return_val_if_fail(folder != NULL, -1); - g_return_val_if_fail(dest != NULL, -1); - g_return_val_if_fail(file != NULL, -1); - - session = imap_session_get(folder); - if (!session) - return -1; - - ok = imap_cmd_append(SESSION(session)->sock, dest->path, file); - if (ok != IMAP_SUCCESS) { - g_warning(_("can't append message %s\n"), file); - return -1; - } - - if (remove_source) { - if (unlink(file) < 0) - FILE_OP_ERROR(file, "unlink"); - } - - return dest->last_num; -} - -static gint imap_do_copy(Folder *folder, FolderItem *dest, MsgInfo *msginfo, - gboolean remove_source) -{ - gchar *destdir; - IMAPSession *session; - gint ok; - - g_return_val_if_fail(folder != NULL, -1); - g_return_val_if_fail(folder->type == F_IMAP, -1); - g_return_val_if_fail(dest != NULL, -1); - g_return_val_if_fail(msginfo != NULL, -1); - - session = imap_session_get(folder); - if (!session) return -1; - - if (msginfo->folder == dest) { - g_warning(_("the src folder is identical to the dest.\n")); - return -1; - } - - destdir = imap_get_real_path(IMAP_FOLDER(folder), dest->path); - - if (remove_source) - debug_print(_("Moving message %s%c%d to %s ...\n"), - msginfo->folder->path, G_DIR_SEPARATOR, - msginfo->msgnum, destdir); - else - debug_print(_("Copying message %s%c%d to %s ...\n"), - msginfo->folder->path, G_DIR_SEPARATOR, - msginfo->msgnum, destdir); - - ok = imap_cmd_copy(SESSION(session)->sock, msginfo->msgnum, destdir); - - if (ok == IMAP_SUCCESS && remove_source) { - imap_set_message_flags(session, msginfo->msgnum, msginfo->msgnum, - IMAP_FLAG_DELETED, TRUE); - ok = imap_cmd_expunge(SESSION(session)->sock); - } - - g_free(destdir); - statusbar_pop_all(); - - return ok; -} - -static gint imap_do_copy_msgs_with_dest(Folder *folder, FolderItem *dest, - GSList *msglist, - gboolean remove_source) -{ - gchar *destdir; - GSList *cur; - MsgInfo *msginfo; - IMAPSession *session; - gint ok; - - 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_get(folder); - if (!session) return -1; - - destdir = imap_get_real_path(IMAP_FOLDER(folder), dest->path); - - 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; - } - - if (remove_source) - debug_print(_("Moving message %s%c%d to %s ...\n"), - msginfo->folder->path, G_DIR_SEPARATOR, - msginfo->msgnum, destdir); - else - debug_print(_("Copying message %s%c%d to %s ...\n"), - msginfo->folder->path, G_DIR_SEPARATOR, - msginfo->msgnum, destdir); - - ok = imap_cmd_copy(SESSION(session)->sock, msginfo->msgnum, - destdir); - - if (ok == IMAP_SUCCESS && remove_source) { - imap_set_message_flags - (session, msginfo->msgnum, msginfo->msgnum, - IMAP_FLAG_DELETED, TRUE); - } - } - - if (remove_source) - ok = imap_cmd_expunge(SESSION(session)->sock); - - g_free(destdir); - statusbar_pop_all(); - - return IMAP_SUCCESS; -} - -gint imap_move_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) -{ - return imap_do_copy(folder, dest, msginfo, TRUE); -} - -gint imap_move_msgs_with_dest(Folder *folder, FolderItem *dest, - GSList *msglist) -{ - return imap_do_copy_msgs_with_dest(folder, dest, msglist, TRUE); -} - -gint imap_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) -{ - return imap_do_copy(folder, dest, msginfo, FALSE); -} - -gint imap_copy_msgs_with_dest(Folder *folder, FolderItem *dest, - GSList *msglist) -{ - return imap_do_copy_msgs_with_dest(folder, dest, msglist, FALSE); -} - -gint imap_remove_msg(Folder *folder, FolderItem *item, gint uid) -{ - gint exists, recent, unseen; - guint32 uid_validity; - gint ok; - IMAPSession *session; - - g_return_val_if_fail(folder != NULL, -1); - g_return_val_if_fail(folder->type == F_IMAP, -1); - g_return_val_if_fail(item != NULL, -1); - - session = imap_session_get(folder); - if (!session) return -1; - - ok = imap_select(session, IMAP_FOLDER(folder), item->path, - &exists, &recent, &unseen, &uid_validity); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) - return ok; - - ok = imap_set_message_flags - (IMAP_SESSION(REMOTE_FOLDER(folder)->session), - (guint32)uid, (guint32)uid, IMAP_FLAG_DELETED, TRUE); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) { - log_warning(_("can't set deleted flags: %d\n"), uid); - return ok; - } - - ok = imap_cmd_expunge(SESSION(session)->sock); - statusbar_pop_all(); - 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; - guint32 uid_validity; - gint ok; - IMAPSession *session; - - g_return_val_if_fail(folder != NULL, -1); - g_return_val_if_fail(item != NULL, -1); - - session = imap_session_get(folder); - if (!session) return -1; - - ok = imap_select(session, IMAP_FOLDER(folder), item->path, - &exists, &recent, &unseen, &uid_validity); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) - return ok; - if (exists == 0) - return IMAP_SUCCESS; - - imap_cmd_gen_send(SESSION(session)->sock, - "STORE 1:%d +FLAGS (\\Deleted)", exists); - ok = imap_cmd_ok(SESSION(session)->sock, NULL); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) { - log_warning(_("can't set deleted flags: 1:%d\n"), exists); - return ok; - } - - ok = imap_cmd_expunge(SESSION(session)->sock); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) { - log_warning(_("can't expunge\n")); - return ok; - } - - return IMAP_SUCCESS; -} - -void imap_scan_folder(Folder *folder, FolderItem *item) -{ - IMAPSession *session; - gint messages, recent, unseen; - guint32 uid_validity; - gint ok; - - g_return_if_fail(folder != NULL); - g_return_if_fail(item != NULL); - - session = imap_session_get(folder); - if (!session) return; - - ok = imap_status(session, IMAP_FOLDER(folder), item->path, - &messages, &recent, &unseen, &uid_validity); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) return; - - item->new = recent; - item->unread = unseen; - item->total = messages; - /* item->mtime = uid_validity; */ -} - -void imap_scan_tree(Folder *folder) -{ - IMAPFolder *imapfolder = IMAP_FOLDER(folder); - FolderItem *item, *inbox; - IMAPSession *session; - IMAPNameSpace *namespace = NULL; - gchar *root_folder = NULL; - - g_return_if_fail(folder != NULL); - g_return_if_fail(folder->account != NULL); - - session = imap_session_get(folder); - if (!session) return; - - if (imapfolder->namespace && imapfolder->namespace->data) - namespace = (IMAPNameSpace *)imapfolder->namespace->data; - - if (folder->account->imap_dir && *folder->account->imap_dir) { - gchar *imap_dir; - Xstrdup_a(imap_dir, folder->account->imap_dir, return); - strtailchomp(imap_dir, '/'); - root_folder = g_strconcat - (namespace && namespace->name ? namespace->name : "", - imap_dir, NULL); - if (namespace && namespace->separator) - subst_char(root_folder, namespace->separator, '/'); - } - - if (root_folder) - debug_print("IMAP root directory: %s\n", root_folder); - - folder_tree_destroy(folder); - item = folder_item_new(folder->name, root_folder); - item->folder = folder; - folder->node = g_node_new(item); - g_free(root_folder); - - imap_scan_tree_recursive(session, item, namespace); - - if (!folder->inbox) { - inbox = folder_item_new("INBOX", "INBOX"); - inbox->stype = F_INBOX; - folder_item_append(item, inbox); - folder->inbox = inbox; - } - if (!folder->trash) - imap_create_trash(folder); -} - -static void imap_scan_tree_recursive(IMAPSession *session, - FolderItem *item, - IMAPNameSpace *namespace) -{ - IMAPFolder *imapfolder; - FolderItem *new_item; - GSList *item_list, *cur; - gchar *real_path; - - g_return_if_fail(item != NULL); - g_return_if_fail(item->folder != NULL); - g_return_if_fail(item->no_sub == FALSE); - - imapfolder = IMAP_FOLDER(item->folder); - - if (item->folder->ui_func) - item->folder->ui_func(item->folder, item, - item->folder->ui_func_data); - - if (item->path) { - real_path = imap_get_real_path(imapfolder, item->path); - imap_cmd_gen_send(SESSION(session)->sock, "LIST \"\" %s%c%%", - real_path, - namespace && namespace->separator - ? namespace->separator : '/'); - } else { - real_path = g_strdup(namespace && namespace->name - ? namespace->name : ""); - imap_cmd_gen_send(SESSION(session)->sock, "LIST \"\" %s%%", - real_path); - } - - strtailchomp(real_path, namespace && namespace->separator - ? namespace->separator : '/'); - - item_list = imap_parse_list(session, real_path); - for (cur = item_list; cur != NULL; cur = cur->next) { - new_item = cur->data; - if (!strcmp(new_item->path, "INBOX")) { - if (!item->folder->inbox) { - new_item->stype = F_INBOX; - item->folder->inbox = new_item; - } else { - folder_item_destroy(new_item); - continue; - } - } else if (!item->parent && !item->folder->trash) { - if (!strcasecmp(g_basename(new_item->path), "Trash")) { - new_item->stype = F_TRASH; - item->folder->trash = new_item; - } - } - folder_item_append(item, new_item); - if (new_item->no_select == FALSE) - imap_scan_folder(new_item->folder, new_item); - if (new_item->no_sub == FALSE) - imap_scan_tree_recursive(session, new_item, namespace); - } -} - -static GSList *imap_parse_list(IMAPSession *session, const gchar *path) -{ - gchar buf[IMAPBUFSIZE]; - gchar flags[256]; - gchar separator[16]; - gchar *p; - gchar *name; - GSList *item_list = NULL; - GString *str; - FolderItem *new_item; - - debug_print("getting list of %s ...\n", *path ? path : "\"\""); - - str = g_string_new(NULL); - - for (;;) { - if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) <= 0) { - log_warning(_("error occured while getting LIST.\n")); - break; - } - strretchomp(buf); - if (buf[0] != '*' || buf[1] != ' ') { - log_print("IMAP4< %s\n", buf); - break; - } - debug_print("IMAP4< %s\n", buf); - - g_string_assign(str, buf); - p = str->str + 2; - if (strncmp(p, "LIST ", 5) != 0) continue; - p += 5; - - if (*p != '(') continue; - p++; - p = strchr_cpy(p, ')', flags, sizeof(flags)); - if (!p) continue; - while (*p == ' ') p++; - - p = strchr_cpy(p, ' ', separator, sizeof(separator)); - if (!p) continue; - extract_quote(separator, '"'); - if (!strcmp(separator, "NIL")) - separator[0] = '\0'; - - buf[0] = '\0'; - while (*p == ' ') p++; - if (*p == '{' || *p == '"') - p = imap_parse_atom(SESSION(session)->sock, p, - buf, sizeof(buf), str); - else - strncpy2(buf, p, sizeof(buf)); - strtailchomp(buf, separator[0]); - if (buf[0] == '\0') continue; - if (!strcmp(buf, path)) continue; - - if (separator[0] != '\0') - subst_char(buf, separator[0], '/'); - name = g_basename(buf); - if (name[0] == '.') continue; - - new_item = folder_item_new(name, buf); - if (strcasestr(flags, "\\Noinferiors") != NULL) - new_item->no_sub = TRUE; - if (strcasestr(flags, "\\Noselect") != NULL) - new_item->no_select = TRUE; - - item_list = g_slist_append(item_list, new_item); - - debug_print("folder %s has been added.\n", buf); - } - - g_string_free(str, TRUE); - statusbar_pop_all(); - - return item_list; -} - -gint imap_create_tree(Folder *folder) -{ - FolderItem *item; - - g_return_val_if_fail(folder != NULL, -1); - g_return_val_if_fail(folder->node != NULL, -1); - g_return_val_if_fail(folder->node->data != NULL, -1); - g_return_val_if_fail(folder->account != NULL, -1); - - imap_scan_tree(folder); - - item = FOLDER_ITEM(folder->node->data); - - if (!folder->inbox) { - FolderItem *inbox; - - inbox = folder_item_new("INBOX", "INBOX"); - inbox->stype = F_INBOX; - folder_item_append(item, inbox); - folder->inbox = inbox; - } - if (!folder->trash) - imap_create_trash(folder); - - return 0; -} - -static gint imap_create_trash(Folder *folder) -{ - IMAPFolder *imapfolder = IMAP_FOLDER(folder); - FolderItem *item; - FolderItem *new_item; - gchar *trash_path; - gchar *imap_dir = ""; - - g_return_val_if_fail(folder != NULL, -1); - g_return_val_if_fail(folder->node != NULL, -1); - g_return_val_if_fail(folder->node->data != NULL, -1); - g_return_val_if_fail(folder->account != NULL, -1); - - if (folder->account->imap_dir && *folder->account->imap_dir) { - gchar *tmpdir; - - Xstrdup_a(tmpdir, folder->account->imap_dir, return -1); - strtailchomp(tmpdir, '/'); - Xalloca(imap_dir, strlen(tmpdir) + 2, return -1); - g_snprintf(imap_dir, strlen(tmpdir) + 2, "%s%c", tmpdir, '/'); - } - - if (imapfolder->namespace && imapfolder->namespace->data) { - IMAPNameSpace *namespace = - (IMAPNameSpace *)imapfolder->namespace->data; - - if (*namespace->name != '\0') { - gchar *name; - - Xstrdup_a(name, namespace->name, return -1); - subst_char(name, namespace->separator, '/'); - trash_path = g_strconcat(name, imap_dir, "Trash", NULL); - } else - trash_path = g_strconcat(imap_dir, "Trash", NULL); - } else - trash_path = g_strconcat(imap_dir, "Trash", NULL); - - item = FOLDER_ITEM(folder->node->data); - new_item = imap_create_folder(folder, item, trash_path); - - if (!new_item) { - gchar *path; - - new_item = folder_item_new("Trash", trash_path); - folder_item_append(item, new_item); - - path = folder_item_get_path(new_item); - if (!is_dir_exist(path)) - make_dir_hier(path); - g_free(path); - } else { - g_free(new_item->name); - new_item->name = g_strdup("Trash"); - } - new_item->stype = F_TRASH; - folder->trash = new_item; - - g_free(trash_path); - - return 0; -} - -FolderItem *imap_create_folder(Folder *folder, FolderItem *parent, - const gchar *name) -{ - gchar *dirpath, *imappath; - IMAPSession *session; - IMAPNameSpace *namespace; - FolderItem *new_item; - gchar *new_name; - const gchar *p; - gint ok; - - g_return_val_if_fail(folder != NULL, NULL); - g_return_val_if_fail(folder->account != NULL, NULL); - g_return_val_if_fail(parent != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); - - session = imap_session_get(folder); - if (!session) return NULL; - - if (parent->path) - dirpath = g_strconcat(parent->path, "/", name, NULL); - else if ((p = strchr(name, '/')) != NULL && *(p + 1) != '\0') - dirpath = g_strdup(name); - else if (folder->account->imap_dir && *folder->account->imap_dir) { - gchar *imap_dir; - - Xstrdup_a(imap_dir, folder->account->imap_dir, return NULL); - strtailchomp(imap_dir, '/'); - dirpath = g_strconcat(imap_dir, "/", name, NULL); - } else - dirpath = g_strdup(name); - - Xstrdup_a(imappath, dirpath, {g_free(dirpath); return NULL;}); - Xstrdup_a(new_name, name, {g_free(dirpath); return NULL;}); - namespace = imap_find_namespace(IMAP_FOLDER(folder), imappath); - if (namespace && namespace->separator) { - imap_path_separator_subst(imappath, namespace->separator); - imap_path_separator_subst(new_name, namespace->separator); - strtailchomp(new_name, namespace->separator); - } - strtailchomp(dirpath, '/'); - - if (strcmp(name, "INBOX") != 0) { - GPtrArray *argbuf; - gint i; - gboolean exist = FALSE; - - argbuf = g_ptr_array_new(); - ok = imap_cmd_list(SESSION(session)->sock, NULL, imappath, - argbuf); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) { - log_warning(_("can't create mailbox: LIST failed\n")); - g_free(dirpath); - g_ptr_array_free(argbuf, TRUE); - return NULL; - } - - for (i = 0; i < argbuf->len; i++) { - gchar *str; - str = g_ptr_array_index(argbuf, i); - if (!strncmp(str, "LIST ", 5)) { - exist = TRUE; - break; - } - } - g_ptr_array_free(argbuf, TRUE); - - if (!exist) { - ok = imap_cmd_create(SESSION(session)->sock, imappath); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) { - log_warning(_("can't create mailbox\n")); - g_free(dirpath); - return NULL; - } - } - } - - new_item = folder_item_new(new_name, dirpath); - folder_item_append(parent, new_item); - g_free(dirpath); - - dirpath = folder_item_get_path(new_item); - if (!is_dir_exist(dirpath)) - make_dir_hier(dirpath); - g_free(dirpath); - - return new_item; -} - -gint imap_remove_folder(Folder *folder, FolderItem *item) -{ - gint ok; - IMAPSession *session; - gchar *path; - gint exists, recent, unseen; - guint32 uid_validity; - - 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); - - session = imap_session_get(folder); - if (!session) return -1; - - path = imap_get_real_path(IMAP_FOLDER(folder), item->path); - - ok = imap_cmd_examine(SESSION(session)->sock, "INBOX", - &exists, &recent, &unseen, &uid_validity); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) { - g_free(path); - return -1; - } - - ok = imap_cmd_delete(SESSION(session)->sock, path); - statusbar_pop_all(); - if (ok != IMAP_SUCCESS) { - log_warning(_("can't delete mailbox\n")); - g_free(path); - return -1; - } - - g_free(path); - folder_item_remove(item); - - return 0; -} - -static GSList *imap_get_uncached_messages(IMAPSession *session, - FolderItem *item, - guint32 first_uid, guint32 last_uid) -{ - gchar *tmp; - GSList *newlist = NULL; - GSList *llast = NULL; - GString *str; - 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_uid <= last_uid, NULL); - - if (imap_cmd_envelope(SESSION(session)->sock, first_uid, last_uid) - != IMAP_SUCCESS) { - log_warning(_("can't get envelope\n")); - return NULL; - } - - str = g_string_new(NULL); - - for (;;) { - if ((tmp = sock_getline(SESSION(session)->sock)) == NULL) { - log_warning(_("error occurred while getting envelope.\n")); - g_string_free(str, TRUE); - return newlist; - } - strretchomp(tmp); - log_print("IMAP4< %s\n", tmp); - if (tmp[0] != '*' || tmp[1] != ' ') { - g_free(tmp); - break; - } - g_string_assign(str, tmp); - g_free(tmp); - - msginfo = imap_parse_envelope(SESSION(session)->sock, str); - if (!msginfo) { - log_warning(_("can't parse envelope: %s\n"), str->str); - continue; - } - - msginfo->folder = item; - - if (!newlist) - llast = newlist = g_slist_append(newlist, msginfo); - else { - llast = g_slist_append(llast, msginfo); - llast = llast->next; - } - } - - g_string_free(str, TRUE); - - return newlist; -} - -static GSList *imap_delete_cached_messages(GSList *mlist, FolderItem *item, - guint32 first_uid, guint32 last_uid) -{ - GSList *cur, *next; - MsgInfo *msginfo; - gchar *dir; - - g_return_val_if_fail(item != NULL, mlist); - g_return_val_if_fail(item->folder != NULL, mlist); - g_return_val_if_fail(item->folder->type == F_IMAP, mlist); - - debug_print(_("Deleting cached messages %d - %d ... "), - first_uid, last_uid); - - dir = folder_item_get_path(item); - remove_numbered_files(dir, first_uid, last_uid); - g_free(dir); - - for (cur = mlist; cur != NULL; ) { - next = cur->next; - - msginfo = (MsgInfo *)cur->data; - if (msginfo != NULL && first_uid <= msginfo->msgnum && - msginfo->msgnum <= last_uid) { - procmsg_msginfo_free(msginfo); - mlist = g_slist_remove(mlist, msginfo); - } - - cur = next; - } - - debug_print(_("done.\n")); - - return mlist; -} - -static void imap_delete_all_cached_messages(FolderItem *item) -{ - gchar *dir; - - g_return_if_fail(item != NULL); - g_return_if_fail(item->folder != NULL); - g_return_if_fail(item->folder->type == F_IMAP); - - debug_print(_("Deleting all cached messages... ")); - - dir = folder_item_get_path(item); - remove_all_numbered_files(dir); - g_free(dir); - - debug_print(_("done.\n")); -} - -#if !USE_SSL -static SockInfo *imap_open(const gchar *server, gushort port, gchar *buf) -#else -static SockInfo *imap_open(const gchar *server, gushort port, gchar *buf, gboolean use_ssl) -#endif -{ - SockInfo *sock; - - if ((sock = sock_connect(server, port)) == NULL) { - log_warning(_("Can't connect to IMAP4 server: %s:%d\n"), - server, port); - return NULL; - } - -#if USE_SSL - if(use_ssl && !ssl_init_socket(sock)) { - sock_close(sock); - return NULL; - } -#endif - - imap_cmd_count = 0; - - if (imap_cmd_noop(sock) != IMAP_SUCCESS) { - sock_close(sock); - return NULL; - } - - return sock; -} - -#define THROW goto catch - -static void imap_parse_namespace(IMAPSession *session, IMAPFolder *folder) -{ - gchar *ns_str; - gchar *name; - gchar *separator; - gchar *p; - IMAPNameSpace *namespace; - GList *ns_list = NULL; - - g_return_if_fail(session != NULL); - g_return_if_fail(folder != NULL); - - if (folder->namespace != NULL) return; - - if (imap_cmd_namespace(SESSION(session)->sock, &ns_str) - != IMAP_SUCCESS) { - log_warning(_("can't get namespace\n")); - return; - } - - /* get the first element */ - extract_one_parenthesis_with_skip_quote(ns_str, '"', '(', ')'); - g_strstrip(ns_str); - p = ns_str; - - while (*p != '\0') { - /* parse ("#foo" "/") */ - - while (*p && *p != '(') p++; - if (*p == '\0') THROW; - p++; - - while (*p && *p != '"') p++; - if (*p == '\0') THROW; - p++; - name = p; - - while (*p && *p != '"') p++; - if (*p == '\0') THROW; - *p = '\0'; - p++; - - while (*p && isspace(*p)) p++; - if (*p == '\0') THROW; - if (strncmp(p, "NIL", 3) == 0) - separator = NULL; - else if (*p == '"') { - p++; - separator = p; - while (*p && *p != '"') p++; - if (*p == '\0') THROW; - *p = '\0'; - p++; - } else THROW; - - while (*p && *p != ')') p++; - if (*p == '\0') THROW; - p++; - - namespace = g_new(IMAPNameSpace, 1); - namespace->name = g_strdup(name); - namespace->separator = separator ? separator[0] : '\0'; - ns_list = g_list_append(ns_list, namespace); - IMAP_FOLDER(folder)->namespace = ns_list; - } - -catch: - g_free(ns_str); - return; -} - -#undef THROW - -static IMAPNameSpace *imap_find_namespace(IMAPFolder *folder, - const gchar *path) -{ - IMAPNameSpace *namespace = NULL; - GList *ns_list; - gchar *name; - - g_return_val_if_fail(folder != NULL, NULL); - g_return_val_if_fail(path != NULL, NULL); - - ns_list = folder->namespace; - - for (; ns_list != NULL; ns_list = ns_list->next) { - IMAPNameSpace *tmp_ns = ns_list->data; - - Xstrdup_a(name, tmp_ns->name, return namespace); - if (tmp_ns->separator && tmp_ns->separator != '/') - subst_char(name, tmp_ns->separator, '/'); - if (strncmp(path, name, strlen(name)) == 0) - namespace = tmp_ns; - } - - return namespace; -} - -static gchar *imap_get_real_path(IMAPFolder *folder, const gchar *path) -{ - gchar *real_path; - IMAPNameSpace *namespace; - - g_return_val_if_fail(folder != NULL, NULL); - g_return_val_if_fail(path != NULL, NULL); - - real_path = g_strdup(path); - namespace = imap_find_namespace(folder, path); - if (namespace && namespace->separator) - imap_path_separator_subst(real_path, namespace->separator); - - return real_path; -} - -static gchar *imap_parse_atom(SockInfo *sock, gchar *src, - gchar *dest, gint dest_len, GString *str) -{ - gchar *cur_pos = src; - - g_return_val_if_fail(str != NULL, cur_pos); - - while (*cur_pos == ' ') cur_pos++; - - if (!strncmp(cur_pos, "NIL", 3)) { - *dest = '\0'; - cur_pos += 3; - } else if (*cur_pos == '\"') { - gchar *p; - - p = get_quoted(cur_pos, '\"', dest, dest_len); - cur_pos = p ? p : cur_pos + 2; - } else if (*cur_pos == '{') { - gchar buf[32]; - gint len; - gchar *nextline; - - cur_pos = strchr_cpy(cur_pos + 1, '}', buf, sizeof(buf)); - len = atoi(buf); - - if ((nextline = sock_getline(sock)) == NULL) - return cur_pos; - strretchomp(nextline); - log_print("IMAP4< %s\n", nextline); - g_string_assign(str, nextline); - - len = MIN(len, strlen(nextline)); - memcpy(dest, nextline, MIN(len, dest_len - 1)); - dest[MIN(len, dest_len - 1)] = '\0'; - cur_pos = str->str + len; - } - - return cur_pos; -} - -static gchar *imap_parse_one_address(SockInfo *sock, gchar *start, - gchar *out_from_str, - gchar *out_fromname_str, - GString *str) -{ - gchar buf[IMAPBUFSIZE]; - gchar *userid; - gchar *domain; - gchar *cur_pos = start; - - cur_pos = imap_parse_atom(sock, cur_pos, buf, sizeof(buf), str); - conv_unmime_header(out_fromname_str, IMAPBUFSIZE, buf, NULL); - - cur_pos = imap_parse_atom(sock, cur_pos, buf, sizeof(buf), str); - - cur_pos = imap_parse_atom(sock, cur_pos, buf, sizeof(buf), str); - Xstrdup_a(userid, buf, return cur_pos + 1); - - cur_pos = imap_parse_atom(sock, cur_pos, buf, sizeof(buf), str); - Xstrdup_a(domain, buf, return cur_pos + 1); - - if (out_fromname_str[0] != '\0') { - g_snprintf(out_from_str, IMAPBUFSIZE, "\"%s\" <%s@%s>", - out_fromname_str, userid, domain); - } else { - g_snprintf(out_from_str, IMAPBUFSIZE, "%s@%s", - userid, domain); - strcpy(out_fromname_str, out_from_str); - } - - while (*cur_pos == ' ') cur_pos++; - g_return_val_if_fail(*cur_pos == ')', NULL); - - return cur_pos + 1; -} - -static gchar *imap_parse_address(SockInfo *sock, gchar *start, - gchar **out_from_str, - gchar **out_fromname_str, - GString *str) -{ - gchar buf[IMAPBUFSIZE]; - gchar name_buf[IMAPBUFSIZE]; - gchar *cur_pos = start; - GString *addr_str; - - 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++; - - addr_str = g_string_new(NULL); - - for (;;) { - gchar ch = *cur_pos++; - if (ch == ')') break; - if (ch == '(') { - cur_pos = imap_parse_one_address - (sock, cur_pos, buf, name_buf, str); - if (!cur_pos) { - g_string_free(addr_str, TRUE); - return NULL; - } - if (addr_str->str[0] != '\0') - g_string_append(addr_str, ", "); - g_string_append(addr_str, buf); - } - } - - if (out_from_str) *out_from_str = g_strdup(addr_str->str); - if (out_fromname_str) *out_fromname_str = g_strdup(name_buf); - - g_string_free(addr_str, TRUE); - - return cur_pos; -} - -static MsgFlags imap_parse_flags(const gchar *flag_str) -{ - const gchar *p = flag_str; - MsgFlags flags; - - flags.perm_flags = MSG_UNREAD; - flags.tmp_flags = MSG_IMAP; - - while ((p = strchr(p, '\\')) != NULL) { - p++; - - if (g_strncasecmp(p, "Recent", 6) == 0) { - MSG_SET_PERM_FLAGS(flags, MSG_NEW|MSG_UNREAD); - } else if (g_strncasecmp(p, "Seen", 4) == 0) { - MSG_UNSET_PERM_FLAGS(flags, MSG_NEW|MSG_UNREAD); - } else if (g_strncasecmp(p, "Deleted", 7) == 0) { - MSG_SET_PERM_FLAGS(flags, MSG_DELETED); - } else if (g_strncasecmp(p, "Flagged", 7) == 0) { - MSG_SET_PERM_FLAGS(flags, MSG_MARKED); - } - } - - return flags; -} - -static MsgInfo *imap_parse_envelope(SockInfo *sock, GString *line_str) -{ - MsgInfo *msginfo; - gchar buf[IMAPBUFSIZE]; - gchar tmp[IMAPBUFSIZE]; - gchar *cur_pos; - gint msgnum; - guint32 uid = 0; - size_t size = 0; - gchar *date = NULL; - time_t date_t = 0; - 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 = {0, 0}; - - g_return_val_if_fail(line_str != NULL, NULL); - g_return_val_if_fail(line_str->str[0] == '*' && - line_str->str[1] == ' ', NULL); - - cur_pos = line_str->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); - - g_return_val_if_fail(*cur_pos == '(', NULL); - cur_pos++; - - while (*cur_pos != '\0' && *cur_pos != ')') { - while (*cur_pos == ' ') cur_pos++; - - if (!strncmp(cur_pos, "UID ", 4)) { - cur_pos += 4; - uid = strtoul(cur_pos, &cur_pos, 10); - } else if (!strncmp(cur_pos, "FLAGS ", 6)) { - cur_pos += 6; - g_return_val_if_fail(*cur_pos == '(', NULL); - cur_pos++; - PARSE_ONE_ELEMENT(')'); - flags = imap_parse_flags(buf); - } else if (!strncmp(cur_pos, "RFC822.SIZE ", 12)) { - cur_pos += 12; - size = strtol(cur_pos, &cur_pos, 10); - } else if (!strncmp(cur_pos, "ENVELOPE ", 9)) { - cur_pos += 9; - g_return_val_if_fail(*cur_pos == '(', NULL); - cur_pos = imap_parse_atom - (sock, cur_pos + 1, buf, sizeof(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, sizeof(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, sizeof(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, sizeof(buf), line_str); - if (buf[0] != '\0') { - extract_parenthesis(buf, '<', '>'); - remove_space(buf); - Xstrdup_a(msgid, buf, return NULL); - } - - g_return_val_if_fail(*cur_pos == ')', NULL); - cur_pos++; - } else { - g_warning("invalid FETCH response: %s\n", cur_pos); - break; - } - } - - msginfo = g_new0(MsgInfo, 1); - msginfo->msgnum = uid; - 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; -} - -static gint imap_set_message_flags(IMAPSession *session, - guint32 first_uid, - guint32 last_uid, - 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_cmd_store(SESSION(session)->sock, first_uid, last_uid, - buf->str); - g_string_free(buf, TRUE); - - return ok; -} - -static gint imap_select(IMAPSession *session, IMAPFolder *folder, - const gchar *path, - gint *exists, gint *recent, gint *unseen, - guint32 *uid_validity) -{ - gchar *real_path; - gint ok; - - real_path = imap_get_real_path(folder, path); - ok = imap_cmd_select(SESSION(session)->sock, real_path, - exists, recent, unseen, uid_validity); - if (ok != IMAP_SUCCESS) - log_warning(_("can't select folder: %s\n"), real_path); - g_free(real_path); - - return ok; -} - -#define THROW(err) { ok = err; goto catch; } - -static gint imap_get_uid(IMAPSession *session, gint msgnum, guint32 *uid) -{ - gint ok; - GPtrArray *argbuf; - gchar *str; - gint num; - - *uid = 0; - argbuf = g_ptr_array_new(); - - imap_cmd_gen_send(SESSION(session)->sock, "FETCH %d (UID)", msgnum); - if ((ok = imap_cmd_ok(SESSION(session)->sock, argbuf)) != IMAP_SUCCESS) - THROW(ok); - - str = search_array_contain_str(argbuf, "FETCH"); - if (!str) THROW(IMAP_ERROR); - - if (sscanf(str, "%d FETCH (UID %d)", &num, uid) != 2 || - num != msgnum) { - g_warning("imap_get_uid(): invalid FETCH line.\n"); - THROW(IMAP_ERROR); - } - -catch: - ptr_array_free_strings(argbuf); - g_ptr_array_free(argbuf, TRUE); - - return ok; -} - -static gint imap_status(IMAPSession *session, IMAPFolder *folder, - const gchar *path, - gint *messages, gint *recent, gint *unseen, - guint32 *uid_validity) -{ - gchar *real_path; - gint ok; - GPtrArray *argbuf; - gchar *str; - - *messages = *recent = *unseen = *uid_validity = 0; - - argbuf = g_ptr_array_new(); - - real_path = imap_get_real_path(folder, path); - if (strchr(real_path, ' ') != NULL) - imap_cmd_gen_send(SESSION(session)->sock, "STATUS \"%s\" " - "(MESSAGES RECENT UNSEEN UIDVALIDITY)", - real_path); - else - imap_cmd_gen_send(SESSION(session)->sock, "STATUS %s " - "(MESSAGES RECENT UNSEEN UIDVALIDITY)", - real_path); - - ok = imap_cmd_ok(SESSION(session)->sock, argbuf); - if (ok != IMAP_SUCCESS) THROW(ok); - - str = search_array_contain_str(argbuf, "STATUS"); - if (!str) THROW(IMAP_ERROR); - - str = strchr(str, '('); - if (!str) THROW(IMAP_ERROR); - str++; - while (*str != '\0' && *str != ')') { - while (*str == ' ') str++; - - if (!strncmp(str, "MESSAGES ", 9)) { - str += 9; - *messages = strtol(str, &str, 10); - } else if (!strncmp(str, "RECENT ", 7)) { - str += 7; - *recent = strtol(str, &str, 10); - } else if (!strncmp(str, "UNSEEN ", 7)) { - str += 7; - *unseen = strtol(str, &str, 10); - } else if (!strncmp(str, "UIDVALIDITY ", 12)) { - str += 12; - *uid_validity = strtoul(str, &str, 10); - } else { - g_warning("invalid STATUS response: %s\n", str); - break; - } - } - -catch: - g_free(real_path); - ptr_array_free_strings(argbuf); - g_ptr_array_free(argbuf, TRUE); - - return ok; -} - -#undef THROW - - -/* low-level IMAP4rev1 commands */ - -static gint imap_cmd_login(SockInfo *sock, - const gchar *user, const gchar *pass) -{ - gint ok; - - if (strchr(user, ' ') != NULL) - imap_cmd_gen_send(sock, "LOGIN \"%s\" %s", user, pass); - else - imap_cmd_gen_send(sock, "LOGIN %s %s", user, pass); - - ok = imap_cmd_ok(sock, NULL); - if (ok != IMAP_SUCCESS) - log_warning(_("IMAP4 login failed.\n")); - - return ok; -} - -static gint imap_cmd_logout(SockInfo *sock) -{ - imap_cmd_gen_send(sock, "LOGOUT"); - return imap_cmd_ok(sock, NULL); -} - -static gint imap_cmd_noop(SockInfo *sock) -{ - imap_cmd_gen_send(sock, "NOOP"); - return imap_cmd_ok(sock, NULL); -} - -#define THROW(err) { ok = err; goto catch; } - -static gint imap_cmd_namespace(SockInfo *sock, gchar **ns_str) -{ - gint ok; - GPtrArray *argbuf; - gchar *str; - - argbuf = g_ptr_array_new(); - - imap_cmd_gen_send(sock, "NAMESPACE"); - if ((ok = imap_cmd_ok(sock, argbuf)) != IMAP_SUCCESS) THROW(ok); - - str = search_array_contain_str(argbuf, "NAMESPACE"); - if (!str) THROW(IMAP_ERROR); - - *ns_str = g_strdup(str); - -catch: - ptr_array_free_strings(argbuf); - g_ptr_array_free(argbuf, TRUE); - - return ok; -} - -#undef THROW - -static gint imap_cmd_list(SockInfo *sock, const gchar *ref, - const gchar *mailbox, GPtrArray *argbuf) -{ - gchar *new_ref; - gchar *new_mailbox; - - if (!ref) ref = "\"\""; - if (!mailbox) mailbox = "\"\""; - - if (*ref != '"' && strchr(ref, ' ') != NULL) - new_ref = g_strdup_printf("\"%s\"", ref); - else - new_ref = g_strdup(ref); - if (*mailbox != '"' && strchr(mailbox, ' ') != NULL) - new_mailbox = g_strdup_printf("\"%s\"", mailbox); - else - new_mailbox = g_strdup(mailbox); - - imap_cmd_gen_send(sock, "LIST %s %s", new_ref, new_mailbox); - - g_free(new_ref); - g_free(new_mailbox); - - return imap_cmd_ok(sock, argbuf); -} - -#define THROW goto catch - -static gint imap_cmd_do_select(SockInfo *sock, const gchar *folder, - gboolean examine, - gint *exists, gint *recent, gint *unseen, - guint32 *uid_validity) -{ - gint ok; - gchar *resp_str; - GPtrArray *argbuf; - gchar *select_cmd; - - *exists = *recent = *unseen = *uid_validity = 0; - argbuf = g_ptr_array_new(); - - if (examine) - select_cmd = "EXAMINE"; - else - select_cmd = "SELECT"; - - if (strchr(folder, ' ') != NULL) - imap_cmd_gen_send(sock, "%s \"%s\"", select_cmd, folder); - else - imap_cmd_gen_send(sock, "%s %s", select_cmd, folder); - - if ((ok = imap_cmd_ok(sock, argbuf)) != IMAP_SUCCESS) THROW; - - resp_str = search_array_contain_str(argbuf, "EXISTS"); - if (resp_str) { - if (sscanf(resp_str,"%d EXISTS", exists) != 1) { - g_warning("imap_cmd_select(): invalid EXISTS line.\n"); - THROW; - } - } - - resp_str = search_array_contain_str(argbuf, "RECENT"); - if (resp_str) { - if (sscanf(resp_str, "%d RECENT", recent) != 1) { - g_warning("imap_cmd_select(): invalid RECENT line.\n"); - THROW; - } - } - - resp_str = search_array_contain_str(argbuf, "UIDVALIDITY"); - if (resp_str) { - if (sscanf(resp_str, "OK [UIDVALIDITY %u] ", uid_validity) - != 1) { - g_warning("imap_cmd_select(): invalid UIDVALIDITY line.\n"); - THROW; - } - } - - resp_str = search_array_contain_str(argbuf, "UNSEEN"); - if (resp_str) { - if (sscanf(resp_str, "OK [UNSEEN %d] ", unseen) != 1) { - g_warning("imap_cmd_select(): invalid UNSEEN line.\n"); - THROW; - } - } - -catch: - ptr_array_free_strings(argbuf); - g_ptr_array_free(argbuf, TRUE); - - return ok; -} - -static gint imap_cmd_select(SockInfo *sock, const gchar *folder, - gint *exists, gint *recent, gint *unseen, - guint32 *uid_validity) -{ - return imap_cmd_do_select(sock, folder, FALSE, - exists, recent, unseen, uid_validity); -} - -static gint imap_cmd_examine(SockInfo *sock, const gchar *folder, - gint *exists, gint *recent, gint *unseen, - guint32 *uid_validity) -{ - return imap_cmd_do_select(sock, folder, TRUE, - exists, recent, unseen, uid_validity); -} - -#undef THROW - -static gint imap_cmd_create(SockInfo *sock, const gchar *folder) -{ - if (strchr(folder, ' ') != NULL) - imap_cmd_gen_send(sock, "CREATE \"%s\"", folder); - else - imap_cmd_gen_send(sock, "CREATE %s", folder); - - return imap_cmd_ok(sock, NULL); -} - -static gint imap_cmd_delete(SockInfo *sock, const gchar *folder) -{ - if (strchr(folder, ' ') != NULL) - imap_cmd_gen_send(sock, "DELETE \"%s\"", folder); - else - imap_cmd_gen_send(sock, "DELETE %s", folder); - - return imap_cmd_ok(sock, NULL); -} - -static gint imap_cmd_fetch(SockInfo *sock, guint32 uid, 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_cmd_gen_send(sock, "UID FETCH %d BODY[]", uid); - - if (sock_gets(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_cmd_gen_recv(sock, buf, sizeof(buf)) != IMAP_SUCCESS) - return IMAP_ERROR; - - if (buf[0] == '\0' || buf[strlen(buf) - 1] != ')') - return IMAP_ERROR; - - ok = imap_cmd_ok(sock, NULL); - - return ok; -} - -static gint imap_cmd_append(SockInfo *sock, const gchar *destfolder, - const gchar *file) -{ - gint ok; - gint size; - - g_return_val_if_fail(file != NULL, IMAP_ERROR); - - size = get_file_size(file); - imap_cmd_gen_send(sock, "APPEND %s {%d}", destfolder, size); - ok = imap_cmd_ok(sock, NULL); - if (ok != IMAP_SUCCESS) { - log_warning(_("can't append %s to %s\n"), file, destfolder); - return -1; - } - - return ok; -} - -static gint imap_cmd_copy(SockInfo *sock, guint32 uid, const gchar *destfolder) -{ - gint ok; - - g_return_val_if_fail(destfolder != NULL, IMAP_ERROR); - - if (strchr(destfolder, ' ') != NULL) - imap_cmd_gen_send(sock, "UID COPY %d \"%s\"", uid, destfolder); - else - imap_cmd_gen_send(sock, "UID COPY %d %s", uid, destfolder); - - ok = imap_cmd_ok(sock, NULL); - if (ok != IMAP_SUCCESS) { - log_warning(_("can't copy %d to %s\n"), uid, destfolder); - return -1; - } - - return ok; -} - -gint imap_cmd_envelope(SockInfo *sock, guint32 first_uid, guint32 last_uid) -{ - imap_cmd_gen_send - (sock, "UID FETCH %d:%d (UID FLAGS RFC822.SIZE ENVELOPE)", - first_uid, last_uid); - - return IMAP_SUCCESS; -} - -static gint imap_cmd_store(SockInfo *sock, guint32 first_uid, guint32 last_uid, - gchar *sub_cmd) -{ - gint ok; - - imap_cmd_gen_send(sock, "UID STORE %d:%d %s", - first_uid, last_uid, sub_cmd); - - if ((ok = imap_cmd_ok(sock, NULL)) != IMAP_SUCCESS) { - log_warning(_("error while imap command: STORE %d:%d %s\n"), - first_uid, last_uid, sub_cmd); - return ok; - } - - return IMAP_SUCCESS; -} - -static gint imap_cmd_expunge(SockInfo *sock) -{ - gint ok; - - imap_cmd_gen_send(sock, "EXPUNGE"); - if ((ok = imap_cmd_ok(sock, NULL)) != IMAP_SUCCESS) { - log_warning(_("error while imap command: EXPUNGE\n")); - return ok; - } - - return IMAP_SUCCESS; -} - -static gint imap_cmd_ok(SockInfo *sock, GPtrArray *argbuf) -{ - gint ok; - gchar buf[IMAPBUFSIZE]; - gint cmd_num; - gchar cmd_status[IMAPBUFSIZE]; - - while ((ok = imap_cmd_gen_recv(sock, buf, sizeof(buf))) - == IMAP_SUCCESS) { - if (buf[0] == '*' && buf[1] == ' ') { - if (argbuf) - g_ptr_array_add(argbuf, g_strdup(buf + 2)); - continue; - } - - 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 void imap_cmd_gen_send(SockInfo *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 = '\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_cmd_gen_recv(SockInfo *sock, gchar *buf, gint size) -{ - if (sock_gets(sock, buf, size) == -1) - return IMAP_SOCKET; - - strretchomp(buf); - - log_print("IMAP4< %s\n", buf); - - return IMAP_SUCCESS; -} - - -/* misc utility functions */ - -static gchar *strchr_cpy(const gchar *src, gchar ch, gchar *dest, gint len) -{ - gchar *tmp; - - dest[0] = '\0'; - tmp = strchr(src, ch); - if (!tmp) - return NULL; - - memcpy(dest, src, MIN(tmp - src, len - 1)); - dest[MIN(tmp - src, len - 1)] = '\0'; - - return tmp + 1; -} - -static gchar *get_quoted(const gchar *src, gchar ch, gchar *dest, gint len) -{ - const gchar *p = src; - gint n = 0; - - g_return_val_if_fail(*p == ch, NULL); - - *dest = '\0'; - p++; - - while (*p != '\0' && *p != ch) { - if (n < len - 1) { - if (*p == '\\' && *(p + 1) != '\0') - p++; - *dest++ = *p++; - } else - p++; - n++; - } - - *dest = '\0'; - return (gchar *)(*p == ch ? p + 1 : p); -} - -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_path_separator_subst(gchar *str, gchar separator) -{ - if (separator && separator != '/') - subst_char(str, '/', separator); -} diff --git a/src/imap.h b/src/imap.h deleted file mode 100644 index 96a7716ef..000000000 --- a/src/imap.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * 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 __IMAP_H__ -#define __IMAP_H__ - -#include <glib.h> - -#include "folder.h" -#include "session.h" - -typedef struct _IMAPSession IMAPSession; -typedef struct _IMAPNameSpace IMAPNameSpace; - -#include "prefs_account.h" - -#define IMAP_SESSION(obj) ((IMAPSession *)obj) - -struct _IMAPSession -{ - Session session; - - gchar *mbox; -}; - -struct _IMAPNameSpace -{ - gchar *name; - gchar separator; -}; - -#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) - -#if !USE_SSL -Session *imap_session_new (const gchar *server, - gushort port, - const gchar *user, - const gchar *pass); -#else -Session *imap_session_new (const gchar *server, - gushort port, - const gchar *user, - const gchar *pass, - gboolean use_ssl); -#endif -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 uid); -gint imap_add_msg (Folder *folder, - FolderItem *dest, - const gchar *file, - gboolean remove_source); - -gint imap_move_msg (Folder *folder, - FolderItem *dest, - MsgInfo *msginfo); -gint imap_move_msgs_with_dest (Folder *folder, - FolderItem *dest, - GSList *msglist); -gint imap_copy_msg (Folder *folder, - FolderItem *dest, - MsgInfo *msginfo); -gint imap_copy_msgs_with_dest (Folder *folder, - FolderItem *dest, - GSList *msglist); - -gint imap_remove_msg (Folder *folder, - FolderItem *item, - gint uid); -gint imap_remove_all_msg (Folder *folder, - FolderItem *item); - -void imap_scan_folder (Folder *folder, - FolderItem *item); -void imap_scan_tree (Folder *folder); - -gint imap_create_tree (Folder *folder); - -FolderItem *imap_create_folder (Folder *folder, - FolderItem *parent, - const gchar *name); -gint imap_remove_folder (Folder *folder, - FolderItem *item); - -#endif /* __IMAP_H__ */ diff --git a/src/import.c b/src/import.c deleted file mode 100644 index bd89968fa..000000000 --- a/src/import.c +++ /dev/null @@ -1,245 +0,0 @@ -/* - * 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/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 gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data); -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); - -gint import_mbox(FolderItem *default_dest) -{ - gint ok = 0; - - if (!window) - import_create(); - else - gtk_widget_show(window); - - gtk_entry_set_text(GTK_ENTRY(file_entry), ""); - if (default_dest && default_dest->path) - gtk_entry_set_text(GTK_ENTRY(dest_entry), default_dest->path); - else - gtk_entry_set_text(GTK_ENTRY(dest_entry), ""); - gtk_widget_grab_focus(file_entry); - - 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 *hbox; - GtkWidget *desc_label; - 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_container_set_border_width(GTK_CONTAINER(window), 5); - 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); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(delete_event), 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); - - hbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); - - desc_label = gtk_label_new - (_("Specify target mbox file and destination folder.")); - gtk_box_pack_start(GTK_BOX(hbox), desc_label, FALSE, FALSE, 0); - - 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), 8); - gtk_table_set_col_spacings(GTK_TABLE(table), 8); - gtk_widget_set_usize(table, 420, -1); - - 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; - if (gtk_main_level() > 1) - gtk_main_quit(); -} - -static void import_cancel_cb(GtkWidget *widget, gpointer data) -{ - import_ack = FALSE; - if (gtk_main_level() > 1) - 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, NULL); - if (dest && dest->path) - gtk_entry_set_text(GTK_ENTRY(dest_entry), dest->path); -} - -static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - import_cancel_cb(NULL, NULL); - return TRUE; -} - -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 deleted file mode 100644 index 64d8421f6..000000000 --- a/src/import.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 __IMPORT_H__ -#define __IMPORT_H__ - -#include <glib.h> - -#include "folder.h" - -gint import_mbox(FolderItem *default_dest); - -#endif /* __IMPORT_H__ */ diff --git a/src/inc.c b/src/inc.c deleted file mode 100644 index 35d1bc63e..000000000 --- a/src/inc.c +++ /dev/null @@ -1,1123 +0,0 @@ -/* - * 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/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" -#include "filtering.h" - -#include "pixmaps/continue.xpm" -#include "pixmaps/complete.xpm" -#include "pixmaps/error.xpm" - -GdkPixmap *currentxpm; -GdkBitmap *currentxpmmask; -GdkPixmap *errorxpm; -GdkBitmap *errorxpmmask; -GdkPixmap *okxpm; -GdkBitmap *okxpmmask; - -#define MSGBUFSIZE 8192 - -static void inc_finished (MainWindow *mainwin, - gboolean new_messages); -static gint 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 gint inc_start (IncProgressDialog *inc_dialog); -static IncState inc_pop3_session_do (IncSession *session); -static gint pop3_automaton_terminate (SockInfo *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_pop3_recv_func (SockInfo *sock, - gint count, - gint read_bytes, - gpointer data); - -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_all_spool(void); - -static gint inc_autocheck_func (gpointer data); - -/** - * inc_finished: - * @mainwin: Main window. - * @new_messages: TRUE if some messages have been received. - * - * Update the folder view and the summary view after receiving - * messages. If @new_messages is FALSE, this function avoids unneeded - * updating. - **/ -static void inc_finished(MainWindow *mainwin, gboolean new_messages) -{ - FolderItem *item; - - if (prefs_common.scan_all_after_inc) - folderview_update_all_node(); - /* XXX: major problems right here. if we change marks after - * incorporation of mail, folderview_select() rewrites it - * right under our nose. folderview_select() eventually - * calls summary_show(), which rewrites the cache twice: - * one for the previously selected FolderItem*, and one - * for the newly selected FolderItem* - * - * since filtering also allows changing mark files, - * i've solved this by using a global variable (in - * SummmaryView*). a better solution is to use the folder - * hash table, and see whether the newly and currently - * selected FolderItem* where updated by the filtering. */ - - mainwin->summaryview->filtering_happened = TRUE; - - /* XXX: filtering_happened is reset by summary_show() */ - - if (!new_messages && !prefs_common.scan_all_after_inc) return; - - 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) -{ - gint new_msgs = 0; - - inc_autocheck_timer_remove(); - summary_write_cache(mainwin->summaryview); - main_window_lock(mainwin); - - if (prefs_common.use_extinc && prefs_common.extinc_path) { - gint pid; - - /* external incorporating program */ - if ((pid = fork()) < 0) { - perror("fork"); - main_window_unlock(mainwin); - inc_autocheck_timer_set(); - 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) - new_msgs = inc_spool(); - } else { - if (prefs_common.inc_local) - new_msgs = inc_spool(); - - new_msgs += inc_account_mail(cur_account, mainwin); - } - - inc_finished(mainwin, new_msgs > 0); - main_window_unlock(mainwin); - inc_autocheck_timer_set(); -} - -static gint inc_account_mail(PrefsAccount *account, MainWindow *mainwin) -{ - IncProgressDialog *inc_dialog; - IncSession *session; - gchar *text[3]; - - session = inc_session_new(account); - if (!session) return 0; - - 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; - - text[0] = NULL; - text[1] = account->account_name; - text[2] = _("Standby"); - gtk_clist_append(GTK_CLIST(inc_dialog->dialog->clist), text); - - return inc_start(inc_dialog); -} - -void inc_all_account_mail(MainWindow *mainwin) -{ - GList *list, *queue_list = NULL; - IncProgressDialog *inc_dialog; - gint new_msgs = 0; - - inc_autocheck_timer_remove(); - summary_write_cache(mainwin->summaryview); - main_window_lock(mainwin); - - if (prefs_common.inc_local) - new_msgs = inc_spool(); - - list = account_get_list(); - if (!list) { - inc_finished(mainwin, new_msgs > 0); - main_window_unlock(mainwin); - inc_autocheck_timer_set(); - 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) { - inc_finished(mainwin, new_msgs > 0); - main_window_unlock(mainwin); - inc_autocheck_timer_set(); - 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; - gchar *text[3]; - - session->data = inc_dialog; - - text[0] = NULL; - text[1] = session->pop3_state->ac_prefs->account_name; - text[2] = _("Standby"); - gtk_clist_append(GTK_CLIST(inc_dialog->dialog->clist), text); - } - - new_msgs += inc_start(inc_dialog); - - inc_finished(mainwin, new_msgs > 0); - main_window_unlock(mainwin); - inc_autocheck_timer_set(); -} - -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); - - progress_dialog_set_value(progress, 0.0); - - PIXMAP_CREATE(progress->clist, okxpm, okxpmmask, complete_xpm); - PIXMAP_CREATE(progress->clist, - currentxpm, currentxpmmask, continue_xpm); - PIXMAP_CREATE(progress->clist, errorxpm, errorxpmmask, error_xpm); - - if (prefs_common.recv_dialog_mode == RECV_DIALOG_ALWAYS || - (prefs_common.recv_dialog_mode == RECV_DIALOG_ACTIVE && - manage_window_get_focus_window())) { - dialog->show_dialog = TRUE; - 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); - g_free(state->sizes); - - 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 gint inc_start(IncProgressDialog *inc_dialog) -{ - IncSession *session; - GtkCList *clist = GTK_CLIST(inc_dialog->dialog->clist); - Pop3State *pop3_state; - IncState inc_state; - gint num = 0; - gint error_num = 0; - gint new_msgs = 0; - - 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); - if (inc_dialog->show_dialog) - 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; - } - } - - gtk_clist_set_pixmap(clist, num, 0, currentxpm, currentxpmmask); - gtk_clist_set_text(clist, num, 2, _("Retrieving")); - - /* begin POP3 session */ - inc_state = inc_pop3_session_do(session); - - if (inc_state == INC_SUCCESS) { - gtk_clist_set_pixmap(clist, num, 0, okxpm, okxpmmask); - gtk_clist_set_text(clist, num, 2, _("Done")); - } else if (inc_state == INC_CANCEL) { - gtk_clist_set_pixmap(clist, num, 0, okxpm, okxpmmask); - gtk_clist_set_text(clist, num, 2, _("Cancelled")); - } else { - gtk_clist_set_pixmap(clist, num, 0, errorxpm, errorxpmmask); - if (inc_state == INC_CONNECT_ERROR) - gtk_clist_set_text(clist, num, 2, - _("Connection failed")); - else if (inc_state == INC_AUTH_FAILED) - gtk_clist_set_text(clist, num, 2, - _("Auth failed")); - else - gtk_clist_set_text(clist, num, 2, _("Error")); - } - - if (pop3_state->error_val == PS_AUTHFAIL) { - if(!prefs_common.noerrorpanel) { - if((prefs_common.recv_dialog_mode == RECV_DIALOG_ALWAYS) || - ((prefs_common.recv_dialog_mode == RECV_DIALOG_ACTIVE) && focus_window)) { - 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(); - - new_msgs += pop3_state->cur_total_num; - - if (!prefs_common.scan_all_after_inc) { - 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_state != INC_CANCEL) { - error_num++; - if (inc_state == INC_NOSPACE) { - inc_put_error(inc_state); - break; - } - } - - inc_session_destroy(session); - inc_dialog->queue_list = - g_list_remove(inc_dialog->queue_list, session); - - num++; - } - - if (error_num) { - if (inc_dialog->show_dialog) - manage_window_focus_in(inc_dialog->dialog->window, - NULL, NULL); - alertpanel_error(_("Some errors occured while getting mail.")); - if (inc_dialog->show_dialog) - manage_window_focus_out(inc_dialog->dialog->window, - NULL, NULL); - } - - 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); - - return new_msgs; -} - - -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; - static 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_getsize_list_send , pop3_getsize_list_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; -#if USE_SSL - port = pop3_state->ac_prefs->set_popport ? - pop3_state->ac_prefs->popport : (pop3_state->ac_prefs->ssl_pop ? 995 : 110); -#else - port = pop3_state->ac_prefs->set_popport ? - pop3_state->ac_prefs->popport : 110; -#endif - - 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(server, port)) == NULL) { -#endif - log_warning(_("Can't connect to POP3 server: %s:%d\n"), - server, port); - if(!prefs_common.noerrorpanel) { - if((prefs_common.recv_dialog_mode == RECV_DIALOG_ALWAYS) || - ((prefs_common.recv_dialog_mode == RECV_DIALOG_ACTIVE) && focus_window)) { - 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(NULL, atm); - automaton_destroy(atm); - - return INC_CONNECT_ERROR; - } - - /* :WK: Hmmm, with the later sock_gdk_input, we have 2 references - * to the sock structure - implement a reference counter?? */ - pop3_state->sockinfo = sockinfo; - atm->help_sock = sockinfo; - -#ifdef USE_SSL - if(pop3_state->ac_prefs->ssl_pop) { - if(!ssl_init_socket(sockinfo)) { - pop3_automaton_terminate(NULL, atm); - automaton_destroy(atm); - - return INC_CONNECT_ERROR; - } - } else { - sockinfo->ssl = NULL; - } -#endif - - - recv_set_ui_func(inc_pop3_recv_func, session); - -#if USE_THREADS - atm->timeout_tag = gtk_timeout_add - (TIMEOUT_ITV, (GtkFunction)connection_check_cb, atm); -#else - atm->tag = sock_gdk_input_add(sockinfo, - atm->state[atm->num].condition, - automaton_input_cb, atm); -#endif - - gtk_main(); - - recv_set_ui_func(NULL, NULL); - -#if USE_THREADS -/* - pthread_join(sockinfo->connect_thr, NULL); -*/ -#endif - -#if USE_SSL - ssl_done_socket(sockinfo); -#endif - automaton_destroy(atm); - - return pop3_state->inc_state; -} - -static gint pop3_automaton_terminate(SockInfo *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) { - 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; - log_warning(_("Can't connect to POP3 server: %s:%d\n"), - sockinfo->hostname, sockinfo->port); - if(!prefs_common.noerrorpanel) { - if((prefs_common.recv_dialog_mode == RECV_DIALOG_ALWAYS) || - ((prefs_common.recv_dialog_mode == RECV_DIALOG_ACTIVE) && focus_window)) { - 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); - } - pop3_automaton_terminate(sockinfo, atm); - return FALSE; - } else if (sockinfo->state == CONN_ESTABLISHED) { - atm->timeout_tag = 0; - atm->tag = sock_gdk_input_add(sockinfo, - atm->state[atm->num].condition, - automaton_input_cb, atm); - return FALSE; - } else { - return TRUE; - } -} -#endif - -static void inc_pop3_recv_func(SockInfo *sock, gint count, gint read_bytes, - gpointer data) -{ - gchar buf[MSGBUFSIZE]; - IncSession *session = (IncSession *)data; - Pop3State *state = session->pop3_state; - IncProgressDialog *inc_dialog = session->data; - ProgressDialog *dialog = inc_dialog->dialog; - gint cur_total; - gchar *total_size; - - cur_total = state->cur_total_bytes + read_bytes; - if (cur_total > state->total_bytes) - cur_total = state->total_bytes; - - Xstrdup_a(total_size, to_human_readable(state->total_bytes), return); - g_snprintf(buf, sizeof(buf), - _("Retrieving message (%d / %d) (%s / %s)"), - state->cur_msg, state->count, - to_human_readable(cur_total), total_size); - progress_dialog_set_label(dialog, buf); - - progress_dialog_set_percentage - (dialog, (gfloat)cur_total / (gfloat)state->total_bytes); - GTK_EVENTS_FLUSH(); -} - -void inc_progress_update(Pop3State *state, Pop3Phase phase) -{ - gchar buf[MSGBUFSIZE]; - IncProgressDialog *inc_dialog = state->session->data; - ProgressDialog *dialog = inc_dialog->dialog; - gchar *total_size; - - 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: - progress_dialog_set_label - (dialog, _("Getting the number of new messages (STAT)...")); - break; - case POP3_GETRANGE_LAST_SEND: - case POP3_GETRANGE_LAST_RECV: - progress_dialog_set_label - (dialog, _("Getting the number of new messages (LAST)...")); - break; - case POP3_GETRANGE_UIDL_SEND: - case POP3_GETRANGE_UIDL_RECV: - progress_dialog_set_label - (dialog, _("Getting the number of new messages (UIDL)...")); - break; - case POP3_GETSIZE_LIST_SEND: - case POP3_GETSIZE_LIST_RECV: - progress_dialog_set_label - (dialog, _("Getting the size of messages (LIST)...")); - break; - case POP3_RETR_SEND: - case POP3_RETR_RECV: - Xstrdup_a(total_size, to_human_readable(state->total_bytes), return); - g_snprintf(buf, sizeof(buf), - _("Retrieving message (%d / %d) (%s / %s)"), - state->cur_msg, state->count, - to_human_readable(state->cur_total_bytes), - total_size); - progress_dialog_set_label(dialog, buf); - progress_dialog_set_percentage - (dialog, - (gfloat)(state->cur_total_bytes) / - (gfloat)(state->total_bytes)); - 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: - break; - } -} - -gint inc_drop_message(const gchar *file, Pop3State *state) -{ - FolderItem *inbox; - FolderItem *dropfolder; - gint val; - gint msgnum; - - 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 (prefs_filtering == NULL) { - /* old filtering */ - 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; - } else { - /* new filtering */ - 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 (prefs_filtering == NULL || !state->ac_prefs->filter_on_recv) { - if ((msgnum = folder_item_add_msg(dropfolder, file, TRUE)) < 0) { - unlink(file); - return -1; - } - } - else { - filter_incoming_message(dropfolder, file, state->folder_table); - } - - return 0; -} - -static void inc_put_error(IncState istate) -{ - switch (istate) { - case INC_ERROR: - if(!prefs_common.noerrorpanel) { - alertpanel_error(_("Error occurred while processing mail.")); - } - break; - case INC_NOSPACE: - alertpanel_error(_("No disk space left.")); - break; - default: - break; - } -} - -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, 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 void inc_spool_account(PrefsAccount *account) -{ - FolderItem *inbox; - FolderItem *dropfolder; - gint val; - - if (account->inbox) { - inbox = folder_find_item_from_path(account->inbox); - if (!inbox) - inbox = folder_get_default_inbox(); - } else - inbox = folder_get_default_inbox(); - - get_spool(inbox, account->local_mbox); -} - -static void inc_all_spool(void) -{ - GList *list = NULL; - - list = account_get_list(); - if (!list) return; - - for (; list != NULL; list = list->next) { - IncSession *session; - PrefsAccount *account = list->data; - - if (account->protocol == A_LOCAL) - inc_spool_account(account); - } -} - -static gint get_spool(FolderItem *dest, const gchar *mbox) -{ - gint msgs, size; - gint lockfd; - gchar tmp_mbox[MAXPATHLEN + 1]; - 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; - - g_snprintf(tmp_mbox, sizeof(tmp_mbox), "%s%ctmpmbox%d", - get_rc_dir(), G_DIR_SEPARATOR, (gint)mbox); - - 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) { - if (!prefs_common.scan_all_after_inc) { - g_hash_table_insert(folder_table, dest, - GINT_TO_POINTER(1)); - folder_item_scan_foreach(folder_table); - folderview_update_item_foreach(folder_table); - } - g_hash_table_destroy(folder_table); - } else if (!prefs_common.scan_all_after_inc) { - folder_item_scan(dest); - folderview_update_item(dest, FALSE); - } - - return msgs; -} - -static guint autocheck_timer = 0; -static gpointer autocheck_data = NULL; - -void inc_autocheck_timer_init(MainWindow *mainwin) -{ - autocheck_data = mainwin; - inc_autocheck_timer_set(); -} - -void inc_autocheck_timer_set(void) -{ - inc_autocheck_timer_remove(); - - if (prefs_common.autochk_newmail && autocheck_data) { - autocheck_timer = gtk_timeout_add - (prefs_common.autochk_itv * 60000, - inc_autocheck_func, - autocheck_data); - } -} - -void inc_autocheck_timer_remove(void) -{ - if (autocheck_timer) { - gtk_timeout_remove(autocheck_timer); - autocheck_timer = 0; - } -} - -static gint inc_autocheck_func(gpointer data) -{ - MainWindow *mainwin = (MainWindow *)data; - - inc_all_account_mail(mainwin); - - return FALSE; -} diff --git a/src/inc.h b/src/inc.h deleted file mode 100644 index 0bee8614c..000000000 --- a/src/inc.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * 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 __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_CONNECT_ERROR, - INC_AUTH_FAILED, - INC_ERROR, - INC_NOSPACE, - INC_CANCEL -} IncState; - -struct _IncProgressDialog -{ - ProgressDialog *dialog; - - MainWindow *mainwin; - - gboolean show_dialog; - - 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 total_bytes; - gint cur_msg; - gint cur_total_num; - gint cur_total_bytes; - gint *sizes; - - /* 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); -void inc_autocheck_timer_init (MainWindow *mainwin); -void inc_autocheck_timer_set (void); -void inc_autocheck_timer_remove (void); - -#endif /* __INC_H__ */ diff --git a/src/inputdialog.c b/src/inputdialog.c deleted file mode 100644 index 2ffb28ae6..000000000 --- a/src/inputdialog.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * 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 gint delete_event (GtkWidget *widget, - GdkEventAny *event, - 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') { - g_free(str); - 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(delete_event), 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 gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - ack = FALSE; - gtk_main_quit(); - - return TRUE; -} - -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 deleted file mode 100644 index b3993532d..000000000 --- a/src/inputdialog.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 deleted file mode 100644 index 0f172d7c1..000000000 --- a/src/intl.h +++ /dev/null @@ -1,22 +0,0 @@ -#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/jpilot.c b/src/jpilot.c deleted file mode 100644 index 27d08967d..000000000 --- a/src/jpilot.c +++ /dev/null @@ -1,1264 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Functions necessary to access JPilot database files. - * JPilot is Copyright(c) by Judd Montgomery. - * Visit http://www.jpilot.org for more details. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#ifdef USE_JPILOT - -#include <time.h> -#include <stdio.h> -#include <sys/stat.h> -#include <dlfcn.h> - -#include <pi-args.h> -#include <pi-appinfo.h> -#include <pi-address.h> - -#include "mgutils.h" -#include "jpilot.h" - -#define JPILOT_DBHOME_DIR ".jpilot" -#define JPILOT_DBHOME_FILE "AddressDB.pdb" -#define PILOT_LINK_LIB_NAME "libpisock.so" - -#define IND_LABEL_LASTNAME 0 // Index of last name in address data -#define IND_LABEL_FIRSTNAME 1 // Index of first name in address data -#define IND_PHONE_EMAIL 4 // Index of E-Mail address in phone labels -#define OFFSET_PHONE_LABEL 3 // Offset to phone data in address data -#define IND_CUSTOM_LABEL 14 // Offset to custom label names -#define NUM_CUSTOM_LABEL 4 // Number of custom labels - -typedef struct _JPilotCategory JPilotCategory; -struct _JPilotCategory { - AddressItem *category; - GList *addressList; - gint count; -}; - -/* -* Specify name to be used. -*/ -void jpilot_set_name( JPilotFile* pilotFile, const gchar *name ) { - if( pilotFile->name ) g_free( pilotFile->name ); - if( name ) pilotFile->name = g_strdup( name ); -} - -/* -* Specify file to be used. -*/ -void jpilot_set_file( JPilotFile* pilotFile, const gchar *path ) { - g_return_if_fail( pilotFile != NULL ); - mgu_refresh_cache( pilotFile->addressCache ); - pilotFile->readMetadata = FALSE; - - /* Copy file path */ - if( pilotFile->path ) g_free( pilotFile->path ); - if( path ) pilotFile->path = g_strdup( path ); -} - -/* -* Create new pilot file object. -*/ -JPilotFile *jpilot_create() { - JPilotFile *pilotFile; - pilotFile = g_new( JPilotFile, 1 ); - pilotFile->name = NULL; - pilotFile->path = NULL; - pilotFile->file = NULL; - pilotFile->addressCache = mgu_create_cache(); - pilotFile->readMetadata = FALSE; - pilotFile->customLabels = NULL; - pilotFile->labelInd = NULL; - pilotFile->retVal = MGU_SUCCESS; - pilotFile->categoryList = NULL; - pilotFile->catAddrList = NULL; - return pilotFile; -} - -/* -* Create new pilot file object for specified file. -*/ -JPilotFile *jpilot_create_path( const gchar *path ) { - JPilotFile *pilotFile; - pilotFile = jpilot_create(); - jpilot_set_file( pilotFile, path ); - return pilotFile; -} - -/* -* Test whether file was modified since last access. -* Return: TRUE if file was modified. -*/ -gboolean jpilot_get_modified( JPilotFile *pilotFile ) { - g_return_if_fail( pilotFile != NULL ); - return mgu_check_file( pilotFile->addressCache, pilotFile->path ); -} - -/* -* Free up custom label list. -*/ -void jpilot_clear_custom_labels( JPilotFile *pilotFile ) { - GSList *node; - g_return_if_fail( pilotFile != NULL ); - - // Release custom labels - mgu_free_list( pilotFile->customLabels ); - pilotFile->customLabels = NULL; - - // Release indexes - node = pilotFile->labelInd; - while( node ) { - node->data = NULL; - node = g_slist_next( node ); - } - g_slist_free( pilotFile->labelInd ); - pilotFile->labelInd = NULL; - - // Force a fresh read - mgu_refresh_cache( pilotFile->addressCache ); -} - -/* -* Append a custom label, representing an E-Mail address field to the -* custom label list. -*/ -void jpilot_add_custom_label( JPilotFile *pilotFile, const gchar *labelName ) { - g_return_if_fail( pilotFile != NULL ); - - if( labelName ) { - gchar *labelCopy = g_strdup( labelName ); - g_strstrip( labelCopy ); - if( *labelCopy == '\0' ) { - g_free( labelCopy ); - } - else { - pilotFile->customLabels = g_slist_append( pilotFile->customLabels, labelCopy ); - // Force a fresh read - mgu_refresh_cache( pilotFile->addressCache ); - } - } -} - -/* -* Get list of custom labels. -* Return: List of labels. Must use g_free() when done. -*/ -GList *jpilot_get_custom_labels( JPilotFile *pilotFile ) { - GList *retVal = NULL; - GSList *node; - g_return_if_fail( pilotFile != NULL ); - node = pilotFile->customLabels; - while( node ) { - retVal = g_list_append( retVal, g_strdup( node->data ) ); - node = g_slist_next( node ); - } - return retVal; -} - -/* -* Free up pilot file object by releasing internal memory. -*/ -void jpilot_free( JPilotFile *pilotFile ) { - g_return_if_fail( pilotFile != NULL ); - - /* Free internal stuff */ - g_free( pilotFile->path ); - - // Release custom labels - jpilot_clear_custom_labels( pilotFile ); - - /* Clear cache */ - mgu_clear_cache( pilotFile->addressCache ); - mgu_free_cache( pilotFile->addressCache ); - mgu_free_dlist( pilotFile->categoryList ); - pilotFile->addressCache = NULL; - pilotFile->readMetadata = FALSE; - pilotFile->categoryList = NULL; - pilotFile->catAddrList = NULL; - - /* Now release file object */ - g_free( pilotFile ); -} - -/* -* Refresh internal variables to force a file read. -*/ -void jpilot_force_refresh( JPilotFile *pilotFile ) { - mgu_refresh_cache( pilotFile->addressCache ); -} - -/* -* Print category address list for specified category. -*/ -void jpilot_print_category( JPilotCategory *jpcat, FILE *stream ) { - fprintf( stream, "category: %s : count: %d\n", jpcat->category->name, jpcat->count ); - if( jpcat->addressList ) { - mgu_print_address_list( jpcat->addressList, stream ); - } - fprintf( stream, "=========================================\n" ); -} - -/* -* Print address list for all categories. -*/ -void jpilot_print_category_list( GList *catAddrList, FILE *stream ) { - GList *node; - JPilotCategory *jpcat; - if( catAddrList == NULL ) return; - - fprintf( stream, "Address list by category\n" ); - node = catAddrList; - while( node ) { - jpcat = node->data; - jpilot_print_category( jpcat, stream ); - node = g_list_next( node ); - } -} - -/* -* Print object to specified stream. -*/ -void jpilot_print_file( JPilotFile *pilotFile, FILE *stream ) { - GSList *node; - g_return_if_fail( pilotFile != NULL ); - fprintf( stream, "JPilotFile:\n" ); - fprintf( stream, "file spec: '%s'\n", pilotFile->path ); - fprintf( stream, " metadata: %s\n", pilotFile->readMetadata ? "yes" : "no" ); - fprintf( stream, " ret val: %d\n", pilotFile->retVal ); - - node = pilotFile->customLabels; - while( node ) { - fprintf( stream, " c label: %s\n", node->data ); - node = g_slist_next( node ); - } - - node = pilotFile->labelInd; - while( node ) { - fprintf( stream, " labelind: %d\n", GPOINTER_TO_INT(node->data) ); - node = g_slist_next( node ); - } - - mgu_print_cache( pilotFile->addressCache, stream ); - jpilot_print_category_list( pilotFile->catAddrList, stream ); -} - -// Shamelessly copied from JPilot (libplugin.c) -static unsigned int bytes_to_bin(unsigned char *bytes, unsigned int num_bytes) { - unsigned int i, n; - n=0; - for (i=0;i<num_bytes;i++) { - n = n*256+bytes[i]; - } - return n; -} - -// Shamelessly copied from JPilot (utils.c) -/*These next 2 functions were copied from pi-file.c in the pilot-link app */ -/* Exact value of "Jan 1, 1970 0:00:00 GMT" - "Jan 1, 1904 0:00:00 GMT" */ -#define PILOT_TIME_DELTA (unsigned)(2082844800) - -time_t pilot_time_to_unix_time ( unsigned long raw_time ) { - return (time_t)(raw_time - PILOT_TIME_DELTA); -} - -// Shamelessly copied from JPilot (libplugin.c) -static int raw_header_to_header(RawDBHeader *rdbh, DBHeader *dbh) { - unsigned long temp; - strncpy(dbh->db_name, rdbh->db_name, 31); - dbh->db_name[31] = '\0'; - dbh->flags = bytes_to_bin(rdbh->flags, 2); - dbh->version = bytes_to_bin(rdbh->version, 2); - temp = bytes_to_bin(rdbh->creation_time, 4); - dbh->creation_time = pilot_time_to_unix_time(temp); - temp = bytes_to_bin(rdbh->modification_time, 4); - dbh->modification_time = pilot_time_to_unix_time(temp); - temp = bytes_to_bin(rdbh->backup_time, 4); - dbh->backup_time = pilot_time_to_unix_time(temp); - dbh->modification_number = bytes_to_bin(rdbh->modification_number, 4); - dbh->app_info_offset = bytes_to_bin(rdbh->app_info_offset, 4); - dbh->sort_info_offset = bytes_to_bin(rdbh->sort_info_offset, 4); - strncpy(dbh->type, rdbh->type, 4); - dbh->type[4] = '\0'; - strncpy(dbh->creator_id, rdbh->creator_id, 4); - dbh->creator_id[4] = '\0'; - strncpy(dbh->unique_id_seed, rdbh->unique_id_seed, 4); - dbh->unique_id_seed[4] = '\0'; - dbh->next_record_list_id = bytes_to_bin(rdbh->next_record_list_id, 4); - dbh->number_of_records = bytes_to_bin(rdbh->number_of_records, 2); - return 0; -} - -// Shamelessly copied from JPilot (libplugin.c) -/*returns 1 if found */ -/* 0 if eof */ -static int find_next_offset( mem_rec_header *mem_rh, long fpos, - unsigned int *next_offset, unsigned char *attrib, unsigned int *unique_id ) -{ - mem_rec_header *temp_mem_rh; - unsigned char found = 0; - unsigned long found_at; - - found_at=0xFFFFFF; - for (temp_mem_rh=mem_rh; temp_mem_rh; temp_mem_rh = temp_mem_rh->next) { - if ((temp_mem_rh->offset > fpos) && (temp_mem_rh->offset < found_at)) { - found_at = temp_mem_rh->offset; - /* *attrib = temp_mem_rh->attrib; */ - /* *unique_id = temp_mem_rh->unique_id; */ - } - if ((temp_mem_rh->offset == fpos)) { - found = 1; - *attrib = temp_mem_rh->attrib; - *unique_id = temp_mem_rh->unique_id; - } - } - *next_offset = found_at; - return found; -} - -// Shamelessly copied from JPilot (libplugin.c) -static void free_mem_rec_header(mem_rec_header **mem_rh) { - mem_rec_header *h, *next_h; - for (h=*mem_rh; h; h=next_h) { - next_h=h->next; - free(h); - } - *mem_rh = NULL; -} - -// Shamelessly copied from JPilot (libplugin.c) -int jpilot_free_db_list( GList **br_list ) { - GList *temp_list, *first; - buf_rec *br; - - /* Go to first entry in the list */ - first=NULL; - for( temp_list = *br_list; temp_list; temp_list = temp_list->prev ) { - first = temp_list; - } - for (temp_list = first; temp_list; temp_list = temp_list->next) { - if (temp_list->data) { - br=temp_list->data; - if (br->buf) { - free(br->buf); - temp_list->data=NULL; - } - free(br); - } - } - g_list_free(*br_list); - *br_list=NULL; - return 0; -} - -// Shamelessly copied from JPilot (libplugin.c) -// Read file size. -int jpilot_get_info_size( FILE *in, int *size ) { - RawDBHeader rdbh; - DBHeader dbh; - unsigned int offset; - record_header rh; - - fseek(in, 0, SEEK_SET); - fread(&rdbh, sizeof(RawDBHeader), 1, in); - if (feof(in)) { - // fprintf( stderr, "error reading file in 'jpilot_get_info_size'\n" ); - return MGU_EOF; - } - - raw_header_to_header(&rdbh, &dbh); - if (dbh.app_info_offset==0) { - *size=0; - return MGU_SUCCESS; - } - if (dbh.sort_info_offset!=0) { - *size = dbh.sort_info_offset - dbh.app_info_offset; - return MGU_SUCCESS; - } - if (dbh.number_of_records==0) { - fseek(in, 0, SEEK_END); - *size=ftell(in) - dbh.app_info_offset; - return MGU_SUCCESS; - } - - fread(&rh, sizeof(record_header), 1, in); - offset = ((rh.Offset[0]*256+rh.Offset[1])*256+rh.Offset[2])*256+rh.Offset[3]; - *size=offset - dbh.app_info_offset; - - return MGU_SUCCESS; -} - -// Read address file into address list. Based on JPilot's -// libplugin.c (jp_get_app_info) -gint jpilot_get_file_info( JPilotFile *pilotFile, unsigned char **buf, int *buf_size ) { - FILE *in; - int num; - unsigned int rec_size; - RawDBHeader rdbh; - DBHeader dbh; - - if( ( !buf_size ) || ( ! buf ) ) { - return MGU_BAD_ARGS; - } - - *buf = NULL; - *buf_size=0; - - if( pilotFile->path ) { - in = fopen( pilotFile->path, "r" ); - if( !in ) { - // fprintf( stderr, "can't open %s\n", pilotFile->path ); - return MGU_OPEN_FILE; - } - } - else { - // fprintf( stderr, "file not specified\n" ); - return MGU_NO_FILE; - } - - num = fread( &rdbh, sizeof( RawDBHeader ), 1, in ); - if( num != 1 ) { - if( ferror(in) ) { - // fprintf( stderr, "error reading %s\n", pilotFile->path ); - fclose(in); - return MGU_ERROR_READ; - } - } - if (feof(in)) { - fclose(in); - return MGU_EOF; - } - - // Convert header into something recognizable - raw_header_to_header(&rdbh, &dbh); - - num = jpilot_get_info_size(in, &rec_size); - if (num) { - fclose(in); - return MGU_ERROR_READ; - } - - fseek(in, dbh.app_info_offset, SEEK_SET); - *buf = ( char * ) malloc(rec_size); - if (!(*buf)) { - // fprintf( stderr, "jpilot_get_file_info(): Out of memory\n" ); - fclose(in); - return MGU_OO_MEMORY; - } - num = fread(*buf, rec_size, 1, in); - if (num != 1) { - if (ferror(in)) { - fclose(in); - free(*buf); - // fprintf( stderr, "Error reading %s\n", pilotFile->path ); - return MGU_ERROR_READ; - } - } - fclose(in); - - *buf_size = rec_size; - - return MGU_SUCCESS; -} - -#define FULLNAME_BUFSIZE 256 -#define EMAIL_BUFSIZE 256 -// Read address file into address cache. Based on JPilot's -// jp_read_DB_files (from libplugin.c) -gint jpilot_read_cache( JPilotFile *pilotFile ) { - FILE *in; - char *buf; - int num_records, recs_returned, i, num, r; - unsigned int offset, prev_offset, next_offset, rec_size; - int out_of_order; - long fpos; /*file position indicator */ - unsigned char attrib; - unsigned int unique_id; - gint cat_id; - mem_rec_header *mem_rh, *temp_mem_rh, *last_mem_rh; - record_header rh; - RawDBHeader rdbh; - DBHeader dbh; - gint retVal; - struct Address addr; - struct AddressAppInfo *ai; - char **addrEnt; - int inum, k; - gchar fullName[ FULLNAME_BUFSIZE ]; - gchar bufEMail[ EMAIL_BUFSIZE ]; - gchar* extID; - AddressItem *addrItem = NULL; - int *indPhoneLbl; - char *labelEntry; - GSList *node; - - retVal = MGU_SUCCESS; - mem_rh = last_mem_rh = NULL; - recs_returned = 0; - - // Pointer to address metadata. - ai = & pilotFile->addrInfo; - - // Open file for read - if( pilotFile->path ) { - in = fopen( pilotFile->path, "r" ); - if( !in ) { - // fprintf( stderr, "can't open %s\n", pilotFile->path ); - return MGU_OPEN_FILE; - } - } - else { - // fprintf( stderr, "file not specified\n" ); - return MGU_NO_FILE; - } - - /* Read the database header */ - num = fread(&rdbh, sizeof(RawDBHeader), 1, in); - if (num != 1) { - if (ferror(in)) { - // fprintf( stderr, "error reading '%s'\n", pilotFile->path ); - fclose(in); - return MGU_ERROR_READ; - } - if (feof(in)) { - return MGU_EOF; - } - } - - raw_header_to_header(&rdbh, &dbh); - - /*Read each record entry header */ - num_records = dbh.number_of_records; - out_of_order = 0; - prev_offset = 0; - - for (i=1; i<num_records+1; i++) { - num = fread( &rh, sizeof( record_header ), 1, in ); - if (num != 1) { - if (ferror(in)) { - // fprintf( stderr, "error reading '%s'\n", pilotFile->path ); - retVal = MGU_ERROR_READ; - break; - } - if (feof(in)) { - return MGU_EOF; - } - } - - offset = ((rh.Offset[0]*256+rh.Offset[1])*256+rh.Offset[2])*256+rh.Offset[3]; - if (offset < prev_offset) { - out_of_order = 1; - } - prev_offset = offset; - - temp_mem_rh = (mem_rec_header *)malloc(sizeof(mem_rec_header)); - if (!temp_mem_rh) { - // fprintf( stderr, "jpilot_read_db_file(): Out of memory 1\n" ); - retVal = MGU_OO_MEMORY; - break; - } - - temp_mem_rh->next = NULL; - temp_mem_rh->rec_num = i; - temp_mem_rh->offset = offset; - temp_mem_rh->attrib = rh.attrib; - temp_mem_rh->unique_id = (rh.unique_ID[0]*256+rh.unique_ID[1])*256+rh.unique_ID[2]; - - if (mem_rh == NULL) { - mem_rh = temp_mem_rh; - last_mem_rh = temp_mem_rh; - } - else { - last_mem_rh->next = temp_mem_rh; - last_mem_rh = temp_mem_rh; - } - - } // for( ;; ) - - temp_mem_rh = mem_rh; - - if (num_records) { - if (out_of_order) { - find_next_offset(mem_rh, 0, &next_offset, &attrib, &unique_id); - } - else { - if (mem_rh) { - next_offset = mem_rh->offset; - attrib = mem_rh->attrib; - unique_id = mem_rh->unique_id; - } - } - fseek(in, next_offset, SEEK_SET); - - // Now go load all records - while(!feof(in)) { - struct CategoryAppInfo *cat = & ai->category; - fpos = ftell(in); - if (out_of_order) { - find_next_offset(mem_rh, fpos, &next_offset, &attrib, &unique_id); - } - else { - next_offset = 0xFFFFFF; - if (temp_mem_rh) { - attrib = temp_mem_rh->attrib; - unique_id = temp_mem_rh->unique_id; - cat_id = attrib & 0x0F; - if (temp_mem_rh->next) { - temp_mem_rh = temp_mem_rh->next; - next_offset = temp_mem_rh->offset; - } - } - } - rec_size = next_offset - fpos; - - buf = ( char * ) malloc(rec_size); - if (!buf) break; - num = fread(buf, rec_size, 1, in); - if ((num != 1)) { - if (ferror(in)) { - // fprintf( stderr, "Error reading %s 5\n", pilotFile ); - free(buf); - retVal = MGU_ERROR_READ; - break; - } - } - - // Retrieve address - inum = unpack_Address( & addr, buf, rec_size ); - if( inum > 0 ) { - addrEnt = addr.entry; - - *fullName = *bufEMail = '\0'; - if( addrEnt[ IND_LABEL_FIRSTNAME ] ) { - strcat( fullName, addrEnt[ IND_LABEL_FIRSTNAME ] ); - } - - if( addrEnt[ IND_LABEL_LASTNAME ] ) { - strcat( fullName, " " ); - strcat( fullName, addrEnt[ IND_LABEL_LASTNAME ] ); - } - g_strchug( fullName ); - g_strchomp( fullName ); - extID = g_strdup_printf( "%d", unique_id ); - - // Add entry for each email address listed under phone labels. - indPhoneLbl = addr.phoneLabel; - for( k = 0; k < JPILOT_NUM_ADDR_PHONE; k++ ) { - int ind; - ind = indPhoneLbl[k]; - // fprintf( stdout, "%d : %d : %20s : %s\n", k, ind, ai->phoneLabels[ind], addrEnt[3+k] ); - if( indPhoneLbl[k] == IND_PHONE_EMAIL ) { - labelEntry = addrEnt[ OFFSET_PHONE_LABEL + k ]; - if( labelEntry ) { - strcpy( bufEMail, labelEntry ); - g_strchug( bufEMail ); - g_strchomp( bufEMail ); - - addrItem = mgu_create_address(); - addrItem->name = g_strdup( fullName ); - addrItem->address = g_strdup( bufEMail ); - addrItem->remarks = g_strdup( "" ); - addrItem->externalID = g_strdup( extID ); - addrItem->categoryID = cat_id; - mgu_add_cache( pilotFile->addressCache, addrItem ); - } - } - } - - // Add entry for each custom label - node = pilotFile->labelInd; - while( node ) { - gint ind; - ind = GPOINTER_TO_INT( node->data ); - if( ind > -1 ) { - // fprintf( stdout, "%d : %20s : %s\n", ind, ai->labels[ind], addrEnt[ind] ); - labelEntry = addrEnt[ind]; - if( labelEntry ) { - strcpy( bufEMail, labelEntry ); - g_strchug( bufEMail ); - g_strchomp( bufEMail ); - - addrItem = mgu_create_address(); - addrItem->name = g_strdup( fullName ); - addrItem->address = g_strdup( bufEMail ); - addrItem->remarks = g_strdup( ai->labels[ind] ); - addrItem->externalID = g_strdup( extID ); - addrItem->categoryID = cat_id; - mgu_add_cache( pilotFile->addressCache, addrItem ); - } - - } - - node = g_slist_next( node ); - } - - g_free( extID ); - extID = NULL; - } - recs_returned++; - } - } - fclose(in); - free_mem_rec_header(&mem_rh); - return retVal; -} - -/* -* Read metadata from file. -*/ -gint jpilot_read_metadata( JPilotFile *pilotFile ) { - gint retVal; - unsigned int rec_size; - unsigned char *buf; - int num; - - g_return_if_fail( pilotFile != NULL ); - - pilotFile->readMetadata = FALSE; - - // Read file info - retVal = jpilot_get_file_info( pilotFile, &buf, &rec_size); - if( retVal != MGU_SUCCESS ) { - pilotFile->retVal = retVal; - return pilotFile->retVal; - } - - num = unpack_AddressAppInfo( &pilotFile->addrInfo, buf, rec_size ); - if( buf ) { - free(buf); - } - if( num <= 0 ) { - // fprintf( stderr, "error reading '%s'\n", pilotFile->path ); - pilotFile->retVal = MGU_ERROR_READ; - return pilotFile->retVal; - } - - pilotFile->readMetadata = TRUE; - pilotFile->retVal = MGU_SUCCESS; - return pilotFile->retVal; -} - -/* -* Setup labels and indexes from metadata. -* Return: TRUE is setup successfully. -*/ -gboolean jpilot_setup_labels( JPilotFile *pilotFile ) { - gboolean retVal = FALSE; - struct AddressAppInfo *ai; - GSList *node; - - g_return_if_fail( pilotFile != NULL ); - - // Release indexes - node = pilotFile->labelInd; - while( node ) { - node->data = NULL; - node = g_slist_next( node ); - } - pilotFile->labelInd = NULL; - - if( pilotFile->readMetadata ) { - ai = & pilotFile->addrInfo; - node = pilotFile->customLabels; - while( node ) { - gchar *lbl, *labelName; - int i; - gint ind; - ind = -1; - lbl = node->data; - for( i = 0; i < JPILOT_NUM_LABELS; i++ ) { - labelName = ai->labels[i]; - if( g_strcasecmp( labelName, lbl ) == 0 ) { - ind = i; - break; - } - } - pilotFile->labelInd = g_slist_append( pilotFile->labelInd, GINT_TO_POINTER(ind) ); - node = g_slist_next( node ); - } - retVal = TRUE; - } - return retVal; -} - -/* -* Load list with character strings of label names. -*/ -GSList *jpilot_load_label( JPilotFile *pilotFile, GSList *labelList ) { - int i; - g_return_if_fail( pilotFile != NULL ); - if( pilotFile->readMetadata ) { - struct AddressAppInfo *ai = & pilotFile->addrInfo; - for( i = 0; i < JPILOT_NUM_LABELS; i++ ) { - gchar *labelName = ai->labels[i]; - if( labelName ) { - labelList = g_slist_append( labelList, g_strdup( labelName ) ); - } - else { - labelList = g_slist_append( labelList, g_strdup( "" ) ); - } - } - } - return labelList; -} - -/* -* Return category name for specified category ID. -* Enter: Category ID. -* Return: Name, or empty string if not invalid ID. Name should be g_free() when done. -*/ -gchar *jpilot_get_category_name( JPilotFile *pilotFile, gint catID ) { - gchar *catName = NULL; - g_return_if_fail( pilotFile != NULL ); - if( pilotFile->readMetadata ) { - struct AddressAppInfo *ai = & pilotFile->addrInfo; - struct CategoryAppInfo *cat = & ai->category; - if( catID < 0 || catID > JPILOT_NUM_CATEG ) { - } - else { - catName = g_strdup( cat->name[catID] ); - } - } - if( ! catName ) catName = g_strdup( "" ); - return catName; -} - -/* -* Load list with character strings of phone label names. -*/ -GSList *jpilot_load_phone_label( JPilotFile *pilotFile, GSList *labelList ) { - int i; - g_return_if_fail( pilotFile != NULL ); - if( pilotFile->readMetadata ) { - struct AddressAppInfo *ai = & pilotFile->addrInfo; - for( i = 0; i < JPILOT_NUM_PHONELABELS; i++ ) { - gchar *labelName = ai->phoneLabels[i]; - if( labelName ) { - labelList = g_slist_append( labelList, g_strdup( labelName ) ); - } - else { - labelList = g_slist_append( labelList, g_strdup( "" ) ); - } - } - } - return labelList; -} - -/* -* Load list with character strings of label names. Only none blank names -* are loaded. -*/ -GList *jpilot_load_custom_label( JPilotFile *pilotFile, GList *labelList ) { - int i; - g_return_if_fail( pilotFile != NULL ); - - if( pilotFile->readMetadata ) { - struct AddressAppInfo *ai = & pilotFile->addrInfo; - for( i = 0; i < NUM_CUSTOM_LABEL; i++ ) { - gchar *labelName = ai->labels[i+IND_CUSTOM_LABEL]; - if( labelName ) { - g_strchomp( labelName ); - g_strchug( labelName ); - if( *labelName != '\0' ) { - labelList = g_list_append( labelList, g_strdup( labelName ) ); - } - } - } - } - return labelList; -} - -/* -* Load list with character strings of category names. -*/ -GSList *jpilot_get_category_list( JPilotFile *pilotFile ) { - GSList *catList = NULL; - int i; - g_return_if_fail( pilotFile != NULL ); - if( pilotFile->readMetadata ) { - struct AddressAppInfo *ai = & pilotFile->addrInfo; - struct CategoryAppInfo *cat = & ai->category; - for( i = 0; i < JPILOT_NUM_CATEG; i++ ) { - gchar *catName = cat->name[i]; - if( catName ) { - catList = g_slist_append( catList, g_strdup( catName ) ); - } - else { - catList = g_slist_append( catList, g_strdup( "" ) ); - } - } - } - return catList; -} - -/* -* Free category address list. -*/ -void jpilot_free_address_list( JPilotFile *pilotFile ) { - GList *addrList; - g_return_if_fail( pilotFile != NULL ); - - addrList = pilotFile->catAddrList; - while( addrList ) { - JPilotCategory *jpcat = addrList->data; - mgu_free_address( jpcat->category ); - mgu_free_address_list( jpcat->addressList ); - jpcat->category = NULL; - jpcat->addressList = NULL; - jpcat->count = 0; - g_free( jpcat ); - jpcat = NULL; - addrList->data = NULL; - addrList = g_list_next( addrList ); - } - pilotFile->catAddrList = NULL; -} - -/* -* Move data from address list and group into category address list. -*/ -void jpilot_load_category_items( JPilotFile *pilotFile ) { - JPilotCategory *jpcat[ 1 + JPILOT_NUM_CATEG ]; - struct AddressAppInfo *ai = & pilotFile->addrInfo; - struct CategoryAppInfo *cat = & ai->category; - AddressItem *itemCat; - GList *addrList; - int i; - - // Create array for data by category - for( i = 0; i < 1 + JPILOT_NUM_CATEG; i++ ) { - itemCat = mgu_create_address_item( ADDR_CATEGORY ); - itemCat->categoryID = i; - jpcat[i] = g_new( JPilotCategory, 1 ); - jpcat[i]->category = itemCat; - jpcat[i]->addressList = NULL; - jpcat[i]->count = 0; - if( i < JPILOT_NUM_CATEG ) { - gchar *catName = cat->name[i]; - if( catName && strlen( catName ) > 0 ) { - itemCat->name = g_strdup( catName ); - } - } - } - - // Process address list moving data to category - addrList = pilotFile->addressCache->addressList; - while( addrList ) { - GList *addrLink; - AddressItem *item; - item = addrList->data; - i = item->categoryID; - if( i < 0 || i > JPILOT_NUM_CATEG ) i = JPILOT_NUM_CATEG; // Position at end of array - - // Add item to category list - addrLink = jpcat[i]->addressList; - addrLink = g_list_append( addrLink, item ); - jpcat[i]->addressList = addrLink; - jpcat[i]->count++; - - // Clear from cache list - addrList->data = NULL; - addrList = g_list_next( addrList ); - } - - // Remove entries from address cache - mgu_clear_cache_null( pilotFile->addressCache ); - -/* - printf( "dump jpcArray[]...\n" ); - for( i = 0; i < 1 + JPILOT_NUM_CATEG; i++ ) { - jpilot_print_category( jpcat[i], stdout ); - } -*/ - - // Free up existing category address list - jpilot_free_address_list( pilotFile ); - - // Move categories from array to category address list - addrList = NULL; - for( i = 0; i < 1 + JPILOT_NUM_CATEG; i++ ) { - if( jpcat[i]->count > 0 ) { - itemCat = jpcat[i]->category; - if( ! itemCat->name ) { - // Create a category name - itemCat->name = g_strdup_printf( "? %d", itemCat->categoryID ); - } - } - addrList = g_list_append( addrList, jpcat[i] ); - jpcat[i] = NULL; - } - pilotFile->catAddrList = addrList; - - // jpilot_print_category_list( pilotFile->catAddrList, stdout ); - -} - -/* -* Build linked list of address items for each category. -*/ -GList *jpilot_build_category_list( JPilotFile *pilotFile ) { - GList *catList = NULL; - GList *node; - node = pilotFile->catAddrList; - while( node ) { - JPilotCategory *jpcat = node->data; - AddressItem *catItem = jpcat->category; - - catItem = jpcat->category; - if( jpcat->count > 0 || catItem->name ) { - AddressItem *itemNew = mgu_copy_address_item( catItem ); - if( itemNew ) { - catList = g_list_append( catList, itemNew ); - } - } - node = g_list_next( node ); - } - mgu_free_address_list( pilotFile->categoryList ); - pilotFile->categoryList = catList; - // mgu_print_address_list( catList, stdout ); - return catList; -} - -// ============================================================================================ -/* -* Read file into list. Main entry point -* Return: TRUE if file read successfully. -*/ -// ============================================================================================ -gint jpilot_read_data( JPilotFile *pilotFile ) { - g_return_if_fail( pilotFile != NULL ); - pilotFile->retVal = MGU_SUCCESS; - if( mgu_check_file( pilotFile->addressCache, pilotFile->path ) ) { - mgu_clear_cache( pilotFile->addressCache ); - jpilot_read_metadata( pilotFile ); - if( pilotFile->retVal == MGU_SUCCESS ) { - jpilot_setup_labels( pilotFile ); - pilotFile->retVal = jpilot_read_cache( pilotFile ); - if( pilotFile->retVal == MGU_SUCCESS ) { - mgu_mark_cache( pilotFile->addressCache, pilotFile->path ); - pilotFile->addressCache->modified = FALSE; - pilotFile->addressCache->dataRead = TRUE; - } - jpilot_load_category_items( pilotFile ); - jpilot_build_category_list( pilotFile ); - } - } - return pilotFile->retVal; -} - -/* -* Return linked list of address items for loaded category names. -*/ -GList *jpilot_get_category_items( JPilotFile *pilotFile ) { - g_return_if_fail( pilotFile != NULL ); - return pilotFile->categoryList; -} - -/* -* Return address list for specified category. -*/ -GList *jpilot_get_address_list_cat( JPilotFile *pilotFile, const gint catID ) { - GList *addrList = NULL, *node; - g_return_if_fail( pilotFile != NULL ); - - node = pilotFile->catAddrList; - while( node ) { - JPilotCategory *jpcat = node->data; - AddressItem *catItem = jpcat->category; - if( catItem->categoryID == catID ) { - addrList = jpcat->addressList; - break; - } - node = g_list_next( node ); - } - return addrList; -} - -/* -* Return linked list of address items. -*/ -GList *jpilot_get_address_list( JPilotFile *pilotFile ) { - g_return_if_fail( pilotFile != NULL ); - return pilotFile->addressCache->addressList; -} - -/* -* Check label list for specified label. -*/ -gint jpilot_check_label( struct AddressAppInfo *ai, gchar *lblCheck ) { - int i; - gchar *lblName; - if( lblCheck == NULL ) return -1; - if( strlen( lblCheck ) < 1 ) return -1; - for( i = 0; i < JPILOT_NUM_LABELS; i++ ) { - lblName = ai->labels[i]; - if( lblName ) { - if( strlen( lblName ) ) { - if( g_strcasecmp( lblName, lblCheck ) == 0 ) return i; - } - } - } - return -2; -} - -/* -* Validate that all parameters specified. -* Return: TRUE if data is good. -*/ -gboolean jpilot_validate( const JPilotFile *pilotFile ) { - gboolean retVal; - g_return_if_fail( pilotFile != NULL ); - - retVal = TRUE; - if( pilotFile->path ) { - if( strlen( pilotFile->path ) < 1 ) retVal = FALSE; - } - else { - retVal = FALSE; - } - if( pilotFile->name ) { - if( strlen( pilotFile->name ) < 1 ) retVal = FALSE; - } - else { - retVal = FALSE; - } - return retVal; -} - -#define WORK_BUFLEN 1024 - -/* -* Attempt to find a valid JPilot file. -* Return: Filename, or home directory if not found, or empty string if -* no home. Filename should be g_free() when done. -*/ -gchar *jpilot_find_pilotdb( void ) { - gchar *homedir; - gchar str[ WORK_BUFLEN ]; - gint len; - FILE *fp; - - homedir = g_get_home_dir(); - if( ! homedir ) return g_strdup( "" ); - - strcpy( str, homedir ); - len = strlen( str ); - if( len > 0 ) { - if( str[ len-1 ] != G_DIR_SEPARATOR ) { - str[ len ] = G_DIR_SEPARATOR; - str[ ++len ] = '\0'; - } - } - strcat( str, JPILOT_DBHOME_DIR ); - strcat( str, G_DIR_SEPARATOR_S ); - strcat( str, JPILOT_DBHOME_FILE ); - - // Attempt to open - if( ( fp = fopen( str, "r" ) ) != NULL ) { - fclose( fp ); - } - else { - // Truncate filename - str[ len ] = '\0'; - } - return g_strdup( str ); -} - -/* -* Attempt to read file, testing for valid JPilot format. -* Return: TRUE if file appears to be valid format. -*/ -gint jpilot_test_read_file( const gchar *fileSpec ) { - JPilotFile *pilotFile; - gint retVal; - if( fileSpec ) { - pilotFile = jpilot_create_path( fileSpec ); - retVal = jpilot_read_metadata( pilotFile ); - jpilot_free( pilotFile ); - pilotFile = NULL; - } - else { - retVal = MGU_NO_FILE; - } - return retVal; -} - -/* -* Check whether label is in custom labels. -* Return: TRUE if found. -*/ -gboolean jpilot_test_custom_label( JPilotFile *pilotFile, const gchar *labelName ) { - gboolean retVal; - GSList *node; - g_return_if_fail( pilotFile != NULL ); - - retVal = FALSE; - if( labelName ) { - node = pilotFile->customLabels; - while( node ) { - if( g_strcasecmp( labelName, node->data ) == 0 ) { - retVal = TRUE; - break; - } - node = g_slist_next( node ); - } - } - return retVal; -} - -/* -* Test whether pilot link library installed. -* Return: TRUE if library available. -*/ -gboolean jpilot_test_pilot_lib() { - void *handle, *fun; - - handle = dlopen( PILOT_LINK_LIB_NAME, RTLD_LAZY ); - if( ! handle ) { - return FALSE; - } - - // Test for symbols we need - fun = dlsym( handle, "unpack_Address" ); - if( ! fun ) { - dlclose( handle ); - return FALSE; - } - - fun = dlsym( handle, "unpack_AddressAppInfo" ); - if( ! fun ) { - dlclose( handle ); - return FALSE; - } - dlclose( handle ); - return TRUE; -} - -#endif /* USE_JPILOT */ - -/* -* End of Source. -*/ diff --git a/src/jpilot.h b/src/jpilot.h deleted file mode 100644 index dd28795ab..000000000 --- a/src/jpilot.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Definitions for accessing JPilot database files. - * JPilot is Copyright(c) by Judd Montgomery. - * Visit http://www.jpilot.org for more details. - */ - -#ifndef __JPILOT_H__ -#define __JPILOT_H__ - -#ifdef USE_JPILOT - -#include <pi-address.h> - -#include <time.h> -#include <stdio.h> -#include <glib.h> - -#include "mgutils.h" - -typedef struct _JPilotFile JPilotFile; - -struct _JPilotFile { - gchar *name; - FILE *file; - gchar *path; - AddressCache *addressCache; - struct AddressAppInfo addrInfo; - gboolean readMetadata; - GSList *customLabels; - GSList *labelInd; - gint retVal; - GList *categoryList; - GList *catAddrList; -}; - -// Limits -#define JPILOT_NUM_LABELS 22 // Number of labels -#define JPILOT_NUM_PHONELABELS 8 // Number of phone number labels -#define JPILOT_NUM_CATEG 16 // Number of categories -#define JPILOT_LEN_LABEL 15 // Max length of label -#define JPILOT_LEN_CATEG 15 // Max length of category -#define JPILOT_NUM_ADDR_PHONE 5 // Number of phone entries a person can have - -// Shamelessly copied from JPilot (libplugin.h) -typedef struct { - unsigned char db_name[32]; - unsigned char flags[2]; - unsigned char version[2]; - unsigned char creation_time[4]; - unsigned char modification_time[4]; - unsigned char backup_time[4]; - unsigned char modification_number[4]; - unsigned char app_info_offset[4]; - unsigned char sort_info_offset[4]; - unsigned char type[4];/*Database ID */ - unsigned char creator_id[4];/*Application ID */ - unsigned char unique_id_seed[4]; - unsigned char next_record_list_id[4]; - unsigned char number_of_records[2]; -} RawDBHeader; - -// Shamelessly copied from JPilot (libplugin.h) -typedef struct { - char db_name[32]; - unsigned int flags; - unsigned int version; - time_t creation_time; - time_t modification_time; - time_t backup_time; - unsigned int modification_number; - unsigned int app_info_offset; - unsigned int sort_info_offset; - char type[5];/*Database ID */ - char creator_id[5];/*Application ID */ - char unique_id_seed[5]; - unsigned int next_record_list_id; - unsigned int number_of_records; -} DBHeader; - -// Shamelessly copied from JPilot (libplugin.h) -typedef struct { - unsigned char Offset[4]; /*4 bytes offset from BOF to record */ - unsigned char attrib; - unsigned char unique_ID[3]; -} record_header; - -// Shamelessly copied from JPilot (libplugin.h) -typedef struct mem_rec_header_s { - unsigned int rec_num; - unsigned int offset; - unsigned int unique_id; - unsigned char attrib; - struct mem_rec_header_s *next; -} mem_rec_header; - -// Shamelessly copied from JPilot (libplugin.h) -#define SPENT_PC_RECORD_BIT 256 - -typedef enum { - PALM_REC = 100L, - MODIFIED_PALM_REC = 101L, - DELETED_PALM_REC = 102L, - NEW_PC_REC = 103L, - DELETED_PC_REC = SPENT_PC_RECORD_BIT + 104L, - DELETED_DELETED_PALM_REC = SPENT_PC_RECORD_BIT + 105L -} PCRecType; - -// Shamelessly copied from JPilot (libplugin.h) -typedef struct { - PCRecType rt; - unsigned int unique_id; - unsigned char attrib; - void *buf; - int size; -} buf_rec; - -/* Function prototypes */ -JPilotFile *jpilot_create(); -JPilotFile *jpilot_create_path( const gchar *path ); -void jpilot_free( JPilotFile *pilotFile ); -void jpilot_force_refresh( JPilotFile *pilotFile ); -gboolean jpilot_get_modified( JPilotFile *pilotFile ); -void jpilot_print_file( JPilotFile *jpilotFile, FILE *stream ); -void jpilot_print_list( GSList *list, FILE *stream ); -gint jpilot_read_file( JPilotFile *pilotFile ); - -GList *jpilot_get_address_list( JPilotFile *pilotFile ); -GSList *jpilot_load_label( JPilotFile *pilotFile, GSList *labelList ); -GSList *jpilot_get_category_list( JPilotFile *pilotFile ); -gchar *jpilot_get_category_name( JPilotFile *pilotFile, gint catID ); -GSList *jpilot_load_phone_label( JPilotFile *pilotFile, GSList *labelList ); -GList *jpilot_load_custom_label( JPilotFile *pilotFile, GList *labelList ); - -GList *jpilot_get_category_items( JPilotFile *pilotFile ); -GList *jpilot_get_address_list_cat( JPilotFile *pilotFile, const gint catID ); - -void jpilot_set_file( JPilotFile* pilotFile, const gchar *path ); -gboolean jpilot_validate( const JPilotFile *pilotFile ); -gchar *jpilot_find_pilotdb( void ); -gint jpilot_test_read_data( const gchar *fileSpec ); - -void jpilot_clear_custom_labels( JPilotFile *pilotFile ); -void jpilot_add_custom_label( JPilotFile *pilotFile, const gchar *labelName ); -GList *jpilot_get_custom_labels( JPilotFile *pilotFile ); -gboolean jpilot_test_custom_label( JPilotFile *pilotFile, const gchar *labelName ); -gboolean jpilot_setup_labels( JPilotFile *pilotFile ); -gboolean jpilot_test_pilot_lib(); - -#endif /* USE_JPILOT */ - -#endif /* __JPILOT_H__ */ - diff --git a/src/labelcolors.c b/src/labelcolors.c deleted file mode 100644 index 18823f500..000000000 --- a/src/labelcolors.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Hiroyuki Yamamoto & The Sylpheed Claws Team - * - * 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. - */ - -/* (alfons) - based on a contribution by Satoshi Nagayasu; revised for colorful - * menu and more Sylpheed integration. The idea to put the code in a separate - * file is just that it make it easier to allow "user changeable" label colors. - */ - -#include "defs.h" -#include "intl.h" - -#include <glib.h> -#include <gdk/gdkx.h> -#include <gtk/gtkwidget.h> -#include <gtk/gtkpixmap.h> -#include <gtk/gtkmenu.h> -#include <gtk/gtkcheckmenuitem.h> -#include <gtk/gtklabel.h> -#include <gtk/gtkmenuitem.h> -#include <gtk/gtkalignment.h> -#include <gtk/gtkhbox.h> -#include <gtk/gtkwindow.h> - - -#include "labelcolors.h" -#include "gtkutils.h" -#include "utils.h" - -static gchar *labels[] = { - N_("Orange"), - N_("Red") , - N_("Pink"), - N_("Sky blue"), - N_("Blue"), - N_("Green"), - N_("Brown") -}; - -typedef enum LabelColorChangeFlags_ { - LCCF_COLOR = 1 << 0, - LCCF_LABEL = 1 << 1, - LCCF_ALL = LCCF_COLOR | LCCF_LABEL -} LabelColorChangeFlags; - -/* XXX: if you add colors, make sure you also check the procmsg.h. color indices - * are stored as 3 bits; that explains the max. of 7 colors */ -static struct -{ - LabelColorChangeFlags changed; - GdkColor color; - - /* XXX: note that the label member is supposed to be dynamically - * allocated and fffreed */ - gchar *label; - GtkPixmap *pixmap; -} -label_colors[] = -{ - { LCCF_ALL, { 0, 0xffff, (0x99 << 8), 0x0 }, NULL, NULL }, - { LCCF_ALL, { 0, 0xffff, 0, 0 }, NULL, NULL }, - { LCCF_ALL, { 0, 0xffff, (0x66 << 8), 0xffff }, NULL, NULL }, - { LCCF_ALL, { 0, 0x0, (0xcc << 8), 0xffff }, NULL, NULL }, - { LCCF_ALL, { 0, 0x0, 0x0, 0xffff }, NULL, NULL }, - { LCCF_ALL, { 0, 0x0, 0x99 << 8, 0x0 }, NULL, NULL }, - { LCCF_ALL, { 0, 0x66 << 8, 0x33 << 8, 0x33 << 8 }, NULL, NULL } -}; - -#define LABEL_COLORS_ELEMS (sizeof label_colors / sizeof label_colors[0]) - -#define G_RETURN_VAL_IF_INVALID_COLOR(color, val) \ - g_return_val_if_fail((color) >= 0 && (color) < LABEL_COLORS_ELEMS, (val)) - -static void labelcolors_recreate (gint); -static void labelcolors_recreate_label (gint); - -gint labelcolors_get_color_count(void) -{ - return LABEL_COLORS_ELEMS; -} - -GdkColor labelcolors_get_color(gint color_index) -{ - GdkColor invalid = { 0 }; - - G_RETURN_VAL_IF_INVALID_COLOR(color_index, invalid); - - return label_colors[color_index].color; -} - -gchar *labelcolors_get_color_text(gint color_index) -{ - G_RETURN_VAL_IF_INVALID_COLOR(color_index, NULL); - - labelcolors_recreate_label(color_index); - return label_colors[color_index].label; -} - -GtkPixmap *labelcolors_create_color_pixmap(GdkColor color) -{ - const char *FMT = "+ c #%2.2X%2.2X%2.2X"; - char buf[40]; - - /* black frame of 1 pixel */ - char * dummy_xpm[] = { - "16 16 3 1", - " c None", - ". c #000000", - "+ c #000000", - "................", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - ".++++++++++++++.", - "................" - }; - - GdkBitmap *xpmmask; - GdkPixmap *xpm; - GtkPixmap *pixmap; - - /* put correct color in xpm data */ - sprintf(buf, FMT, color.red >> 8, color.green >> 8, color.blue >> 8); - dummy_xpm[3] = buf; - - /* XXX: passing NULL as GdkWindow* seems to be possible */ - xpm = gdk_pixmap_create_from_xpm_d(GDK_ROOT_PARENT(), &xpmmask, NULL, (gchar **) &dummy_xpm); - if (xpm == NULL) - debug_print("*** NO XPM\n"); - pixmap = GTK_PIXMAP(gtk_pixmap_new(xpm, xpmmask)); - - - g_return_val_if_fail(pixmap, NULL); - - gdk_pixmap_unref(xpm); - gdk_bitmap_unref(xpmmask); - return pixmap; -} - -/* XXX: this function to check if menus with colors and labels should - * be recreated */ -gboolean labelcolors_changed(void) -{ - gint n; - for (n = 0; n < LABEL_COLORS_ELEMS; n++) { - if (label_colors[n].changed) - return TRUE; - } - return FALSE; -} - -/* XXX: labelcolors_recreate_XXX are there to make sure everything - * is initialized ok, without having to call a global _xxx_init_ - * function */ -static void labelcolors_recreate_color(gint color) -{ - GtkPixmap *pixmap; - - if (!(label_colors[color].changed & LCCF_COLOR)) - return; - - pixmap = GTK_PIXMAP(labelcolors_create_color_pixmap(label_colors[color].color)); - g_return_if_fail(pixmap); - - if (label_colors[color].pixmap) - gtk_widget_destroy(GTK_WIDGET(label_colors[color].pixmap)); - - label_colors[color].pixmap = pixmap; - label_colors[color].changed &= ~LCCF_COLOR; -} - -static void labelcolors_recreate_label(gint color) -{ - if (!label_colors[color].changed & LCCF_LABEL) - return; - - if (label_colors[color].label == NULL) - label_colors[color].label = g_strdup(labels[color]); - - label_colors[color].changed &= ~LCCF_LABEL; -} - -/* XXX: call this function everytime when you're doing important - * stuff with the label_colors[] array */ -static void labelcolors_recreate(gint color) -{ - labelcolors_recreate_label(color); - labelcolors_recreate_color(color); -} - -static void labelcolors_recreate_all(void) -{ - gint n; - for ( n = 0; n < LABEL_COLORS_ELEMS; n++) - labelcolors_recreate(n); -} - -/* labelcolors_create_check_color_menu_item() - creates a color - * menu item with a check box */ -GtkWidget *labelcolors_create_check_color_menu_item(gint color_index) -{ - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *align; - GtkWidget *pixmap; - GtkWidget *item; - - G_RETURN_VAL_IF_INVALID_COLOR(color_index, NULL); - - item = gtk_check_menu_item_new(); - - labelcolors_recreate(color_index); - - /* XXX: gnome-core::panel::menu.c is a great example of - * how to create pixmap menus */ - label = gtk_label_new(label_colors[color_index].label); - - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - gtk_widget_show(label); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); - gtk_container_add(GTK_CONTAINER(item), hbox); - - align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0); - gtk_widget_show(align); - gtk_container_set_border_width(GTK_CONTAINER(align), 1); - - gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(label_colors[color_index].pixmap)); - gtk_widget_show(GTK_WIDGET(label_colors[color_index].pixmap)); - gtk_widget_set_usize(align, 16, 16); - - gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4); - - return item; -} - -/* labelcolors_create_color_menu() - creates a color menu without - * checkitems, probably for use in combo items */ -GtkWidget *labelcolors_create_color_menu(void) -{ - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *align; - GtkWidget *pixmap; - GtkWidget *item; - GtkWidget *menu; - gint i; - - labelcolors_recreate_all(); - - /* create the menu items. each item has its color code attached */ - menu = gtk_menu_new(); - gtk_object_set_data(GTK_OBJECT(menu), "label_color_menu", menu); - - item = gtk_menu_item_new_with_label(_("None")); - gtk_menu_append(GTK_MENU(menu), item); - gtk_object_set_data(GTK_OBJECT(item), "color", GUINT_TO_POINTER(0)); - gtk_widget_show(item); - - /* and the color items */ - for (i = 0; i < LABEL_COLORS_ELEMS; i++) { - GtkPixmap *pixmap = labelcolors_create_color_pixmap(label_colors[i].color); - - item = gtk_menu_item_new(); - gtk_object_set_data(GTK_OBJECT(item), "color", GUINT_TO_POINTER(i + 1)); - - label = gtk_label_new(label_colors[i].label); - - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - gtk_widget_show(label); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); - gtk_container_add(GTK_CONTAINER(item), hbox); - - align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0); - gtk_widget_show(align); - gtk_container_set_border_width(GTK_CONTAINER(align), 1); - - gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(pixmap)); - gtk_widget_show(GTK_WIDGET(pixmap)); - gtk_widget_set_usize(align, 16, 16); - - gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4); - - gtk_menu_append(GTK_MENU(menu), item); - gtk_widget_show(item); - } - - gtk_widget_show(menu); - - return menu; -} - -guint labelcolors_get_color_menu_active_item(GtkWidget *menu) -{ - GtkWidget *menuitem; - guint color; - - g_return_val_if_fail( gtk_object_get_data(GTK_OBJECT(menu), "label_color_menu"), 0); - menuitem = gtk_menu_get_active(GTK_MENU(menu)); - color = GPOINTER_TO_UINT( gtk_object_get_data(GTK_OBJECT(menuitem), "color") ); - return color; -} - - diff --git a/src/labelcolors.h b/src/labelcolors.h deleted file mode 100644 index 1891bb514..000000000 --- a/src/labelcolors.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Hiroyuki Yamamoto & The Sylpheed Claws Team - * - * 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. - */ - -#if !defined(LABELCOLORS_H__) -#define LABELCOLORS_H__ - -gint labelcolors_get_color_count(void); - -GdkColor labelcolors_get_color(gint color_index); - -gchar *labelcolors_get_color_text(gint color_index); - -GtkPixmap *labelcolors_create_color_pixmap(GdkColor color); - -gboolean labelcolors_changed(void); - -GtkWidget *labelcolors_create_check_color_menu_item(gint color_index); - -GtkWidget *labelcolors_create_color_menu(void); - -guint labelcolors_get_color_menu_active_item(GtkWidget *menu); - -#endif /* LABELCOLORS_H__ */ - diff --git a/src/logwindow.c b/src/logwindow.c deleted file mode 100644 index 3226267d1..000000000 --- a/src/logwindow.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * 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 deleted file mode 100644 index 48b64a045..000000000 --- a/src/logwindow.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 deleted file mode 100644 index 67e6903d1..000000000 --- a/src/main.c +++ /dev/null @@ -1,501 +0,0 @@ -/* - * 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 - -#if USE_SSL -# include "ssl.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 "scoring.h" -#include "prefs_display_header.h" -#include "account.h" -#include "procmsg.h" -#include "inc.h" -#include "import.h" -#include "manage_window.h" -#include "alertpanel.h" -#include "addressbook.h" -#include "compose.h" -#include "folder.h" -#include "setup.h" -#include "utils.h" -#include "gtkutils.h" - -#if USE_GPGME -# include "rfc2015.h" -#endif - -gchar *prog_version; -gchar *startup_dir; -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); - - parse_cmd_opt(argc, argv); - - 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 - - srandom((gint)time(NULL)); - - /* parse gtkrc files */ - userrc = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S, ".gtkrc", - NULL); - gtk_rc_parse(userrc); - g_free(userrc); - userrc = g_strconcat(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; - startup_dir = g_get_current_dir(); - - CHDIR_RETURN_VAL_IF_FAIL(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 "sylpheed.log")) { - if (rename(RC_DIR G_DIR_SEPARATOR_S "sylpheed.log", - RC_DIR G_DIR_SEPARATOR_S "sylpheed.log.bak") < 0) - FILE_OP_ERROR("sylpheed.log", "rename"); - } - set_log_file(RC_DIR G_DIR_SEPARATOR_S "sylpheed.log"); - - 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"); - } - - prefs_common_read_config(); - -#if USE_GPGME - if (gpgme_check_engine()) { /* Also does some gpgme init */ - rfc2015_disable_all(); - debug_print("gpgme_engine_version:\n%s\n", - gpgme_get_engine_info()); - - if (prefs_common.gpg_warning) { - AlertValue val; - - val = alertpanel_message_with_disable - (_("Warning"), - _("GnuPG is not installed properly.\n" - "OpenPGP support disabled.")); - if (val & G_ALERTDISABLE) - prefs_common.gpg_warning = FALSE; - } - } - gpgme_register_idle(idle_function_for_gpgme); -#endif - -#if USE_SSL - ssl_init(); -#endif - - prefs_common_save_config(); - prefs_filter_read_config(); - prefs_filter_write_config(); - prefs_display_header_read_config(); - prefs_display_header_write_config(); - prefs_filtering_read_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); - folder_write_list(); - } - account_set_missing_folder(); - folderview_set(folderview); - - prefs_scoring_read_config(); - - inc_autocheck_timer_init(mainwin); - - if (cmd.receive_all || prefs_common.chk_on_startup) - inc_all_account_mail(mainwin); - else if (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(); - -#if USE_SSL - ssl_done(); -#endif - - 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_basename(argv[0])); - - 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); - } - } -} - -static gint get_queued_message_num(void) -{ - FolderItem *queue; - - queue = folder_get_default_queue(); - g_return_val_if_fail(queue != NULL, -1); - - folder_item_scan(queue); - return queue->total; -} - -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; - manage_window_focus_in(mainwin->window, NULL, NULL); - } - - if (prefs_common.warn_queued_on_exit && get_queued_message_num() > 0) { - if (alertpanel(_("Queued messages"), - _("Some unsent messages are queued. Exit now?"), - _("OK"), _("Cancel"), NULL) != G_ALERTDEFAULT) - return; - manage_window_focus_in(mainwin->window, NULL, NULL); - } - - 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()); - - close_log_file(); - - /* delete unix domain socket */ - gdk_input_remove(lock_socket_tag); - fd_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 = fd_connect_unix(path); - if (uxsock < 0) { - unlink(path); - return fd_open_unix(path); - } - - /* remote command mode */ - - debug_print(_("another Sylpheed is already running.\n")); - - if (cmd.receive_all) - fd_write(uxsock, "receive_all\n", 12); - else if (cmd.receive) - fd_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"); - - fd_write(uxsock, compose_str, strlen(compose_str)); - g_free(compose_str); - } else - fd_write(uxsock, "popup\n", 6); - - fd_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 = fd_accept(source); - fd_gets(sock, buf, sizeof(buf)); - fd_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 deleted file mode 100644 index 0fb8c56f0..000000000 --- a/src/main.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 __MAIN_H__ -#define __MAIN_H__ - -#include <glib.h> -#include <gtk/gtkwidget.h> - -extern gchar *prog_version; -extern gchar *startup_dir; -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 deleted file mode 100644 index 4891cce2d..000000000 --- a/src/mainwindow.c +++ /dev/null @@ -1,2694 +0,0 @@ -/* - * 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 "export.h" -#include "prefs_common.h" -#include "prefs_filter.h" -#include "prefs_filtering.h" -#include "prefs_scoring.h" -#include "prefs_account.h" -#include "prefs_folder_item.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" -#include "prefs_templates.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_popup_compose_type_cb(GtkWidget *widget, - gpointer data); -static void toolbar_popup_compose_type_set(GtkWidget *widget, - gpointer data); -static void toolbar_compose_news_cb (GtkWidget *widget, - gpointer data); -static void toolbar_compose_mail_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_reply_to_sender_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 void ac_menu_popup_closed (GtkMenuShell *menu_shell, - 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 add_mbox_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 export_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 (GtkCheckMenuItem *checkitem, - 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 compose_mail_cb(MainWindow *mainwin, guint action, - GtkWidget *widget); -static void compose_news_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 next_marked_cb (MainWindow *mainwin, - guint action, - GtkWidget *widget); - -static void prev_marked_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_scoring_open_cb (MainWindow *mainwin, - guint action, - GtkWidget *widget); -static void prefs_filtering_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 void activate_compose_button (MainWindow *mainwin, - ToolbarStyle style, - ComposeButtonType type); - -static void prefs_templates_open_cb(MainWindow *mainwin, - guint action, - GtkWidget *widget); - -#define SEPARATE_ACTION 667 - -static GtkItemFactoryEntry mainwin_entries[] = -{ - {N_("/_File"), NULL, NULL, 0, "<Branch>"}, - {N_("/_File/_Add mailbox..."), NULL, add_mailbox_cb, 0, NULL}, - {N_("/_File/_Add mbox mailbox..."), NULL, add_mbox_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/_Export to mbox file..."), NULL, export_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/_None"), 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, NULL, SEPARATE_ACTION + SEPARATE_FOLDER, "<ToggleItem>"}, - {N_("/_View/Separate m_essage view"), NULL, NULL, SEPARATE_ACTION + 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/Get new ma_il"), "<alt>I", inc_mail_cb, 0, NULL}, - {N_("/_Message/Get 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 a_n email message"), "<alt>N", compose_mail_cb, 0, NULL}, - {N_("/_Message/Compose a news message"), NULL, compose_news_cb, 0, NULL}, - {N_("/_Message/_Reply"), "<alt>R", reply_cb, COMPOSE_REPLY, NULL}, - {N_("/_Message/Repl_y to sender"), "<control><alt>R", reply_cb, COMPOSE_REPLY_TO_SENDER, NULL}, - {N_("/_Message/Follow-up and reply to"), NULL, reply_cb, COMPOSE_FOLLOWUP_AND_REPLY_TO, 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 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 as rea_d"), - 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/Prev marked message"), NULL, prev_marked_cb, 0, NULL}, - {N_("/_Summary/Next marked message"), NULL, next_marked_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/Sort by sco_re"), NULL, sort_summary_cb, SORT_BY_SCORE, NULL}, - {N_("/_Summary/_Sort/Sort by _label"), NULL, sort_summary_cb, SORT_BY_LABEL, 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/_Scoring ..."), - NULL, prefs_scoring_open_cb, 0, NULL}, - {N_("/_Configuration/_Filtering ..."), - NULL, prefs_filtering_open_cb, 0, NULL}, - {N_("/_Configuration/_Templates ..."), - NULL, prefs_templates_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, manual_open_cb, 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[4]; - gboolean success[4]; - 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; - - folderview->color_new.red = (guint16)55000; - folderview->color_new.green = folderview->color_new.blue = 15000; - - gtkut_convert_int_to_gdk_color(prefs_common.tgt_folder_col, - &folderview->color_op); - - summaryview->color_important.red = 0; - summaryview->color_marked.green = 0; - summaryview->color_important.blue = (guint16)65535; - - color[0] = summaryview->color_marked; - color[1] = summaryview->color_dim; - color[2] = folderview->color_new; - color[3] = folderview->color_op; - - colormap = gdk_window_get_colormap(window->window); - gdk_colormap_alloc_colors(colormap, color, 4, FALSE, TRUE, success); - for (i = 0; i < 4; 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/None"); - 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); - - /* set the check of the SEPARATE_xxx menu items. we also need the main window - * as a property and pass the action type to the callback */ - menuitem = gtk_item_factory_get_widget_by_action(ifactory, SEPARATE_ACTION + SEPARATE_FOLDER); - g_assert(menuitem); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), type & SEPARATE_FOLDER); - gtk_object_set_data(GTK_OBJECT(menuitem), "mainwindow", mainwin); - gtk_signal_connect(GTK_OBJECT(menuitem), "toggled", GTK_SIGNAL_FUNC(separate_widget_cb), - GUINT_TO_POINTER(SEPARATE_FOLDER)); - - menuitem = gtk_item_factory_get_widget_by_action(ifactory, SEPARATE_ACTION + SEPARATE_MESSAGE); - g_assert(menuitem); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), type & SEPARATE_MESSAGE); - gtk_object_set_data(GTK_OBJECT(menuitem), "mainwindow", mainwin); - gtk_signal_connect(GTK_OBJECT(menuitem), "toggled", GTK_SIGNAL_FUNC(separate_widget_cb), - GUINT_TO_POINTER(SEPARATE_MESSAGE)); - - - 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); - - /*main_window_set_thread_option(mainwin);*/ - - - /* set account selection menu */ - ac_menu = gtk_item_factory_get_widget - (ifactory, "/Configuration/Change current account"); - gtk_signal_connect(GTK_OBJECT(ac_menu), "selection_done", - GTK_SIGNAL_FUNC(ac_menu_popup_closed), mainwin); - 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->lock_count = 0; - 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(); -} - -/* lock / unlock the user-interface */ -void main_window_lock(MainWindow *mainwin) -{ - if (mainwin->lock_count == 0) { - gtk_widget_set_sensitive(mainwin->toolbar, FALSE); - gtk_widget_set_sensitive(mainwin->ac_button, FALSE); - } - - mainwin->lock_count++; - - main_window_set_menu_sensitive(mainwin); -} - -void main_window_unlock(MainWindow *mainwin) -{ - if (mainwin->lock_count) - mainwin->lock_count--; - - main_window_set_menu_sensitive(mainwin); - - if (mainwin->lock_count == 0) { - gtk_widget_set_sensitive(mainwin->toolbar, TRUE); - gtk_widget_set_sensitive(mainwin->ac_button, TRUE); - } -} - -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); - } - - if (prefs_common.immediate_exec) - gtk_widget_hide(mainwin->exec_btn); - else - gtk_widget_show(mainwin->exec_btn); - - summary_change_display_item(mainwin->summaryview); - summary_redisplay_msg(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; - manage_window_focus_in(mainwin->window, NULL, NULL); - } - - 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_add_mbox(MainWindow *mainwin) -{ - gchar *path; - Folder *folder; - FolderItem * item; - - path = input_dialog(_("Add mbox mailbox"), - _("Input the location of mailbox."), - "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_MBOX, _("Mailbox"), path); - else - */ - - folder = folder_new(F_MBOX, g_basename(path), path); - g_free(path); - - if (folder->create_tree(folder) < 0) { - alertpanel_error(_("Creation of the mailbox failed.")); - folder_destroy(folder); - return; - } - - folder_add(folder); - - item = folder_item_new(folder->name, NULL); - item->folder = folder; - folder->node = g_node_new(item); - - folder->create_folder(folder, item, "inbox"); - folder->create_folder(folder, item, "outbox"); - folder->create_folder(folder, item, "queue"); - folder->create_folder(folder, item, "draft"); - folder->create_folder(folder, item, "trash"); - - 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->replysender_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); -} - -typedef enum -{ - M_UNLOCKED = 1 << 0, - M_MSG_EXIST = 1 << 1, - M_TARGET_EXIST = 1 << 2, - M_SINGLE_TARGET_EXIST = 1 << 3, - M_EXEC = 1 << 4, - M_ALLOW_REEDIT = 1 << 5 -} MenuItemSensitiveCond; - -void main_window_set_menu_sensitive(MainWindow *mainwin) -{ - GtkItemFactory *ifactory; - SummarySelection selection; - MenuItemSensitiveCond state = 0; - gboolean sensitive; - gint i; - - static const struct { - gchar *const entry; - MenuItemSensitiveCond cond; - } entry[] = { - {"/File/Add mailbox..." , M_UNLOCKED}, - {"/File/Update folder tree" , M_UNLOCKED}, - {"/File/Folder" , M_UNLOCKED}, - {"/File/Import mbox file..." , M_UNLOCKED}, - {"/File/Export to mbox file...", M_UNLOCKED}, - {"/File/Empty trash" , M_UNLOCKED}, - {"/File/Save as...", M_SINGLE_TARGET_EXIST|M_UNLOCKED}, - {"/File/Print..." , M_TARGET_EXIST|M_UNLOCKED}, - {"/File/Close", M_UNLOCKED}, - {"/File/Exit" , M_UNLOCKED}, - - {"/Message/Get new mail" , M_UNLOCKED}, - {"/Message/Get from all accounts", M_UNLOCKED}, - {"/Message/Reply" , M_SINGLE_TARGET_EXIST}, - {"/Message/Reply to sender" , M_SINGLE_TARGET_EXIST}, - {"/Message/Reply to all" , M_SINGLE_TARGET_EXIST}, - {"/Message/Forward" , M_SINGLE_TARGET_EXIST}, - {"/Message/Forward as attachment", M_SINGLE_TARGET_EXIST}, - {"/Message/Open in new window" , M_SINGLE_TARGET_EXIST}, - {"/Message/Show all header" , M_SINGLE_TARGET_EXIST}, - {"/Message/View source" , M_SINGLE_TARGET_EXIST}, - {"/Message/Move...", M_TARGET_EXIST|M_EXEC|M_UNLOCKED}, - {"/Message/Copy...", M_TARGET_EXIST|M_EXEC|M_UNLOCKED}, - {"/Message/Delete" , M_TARGET_EXIST|M_EXEC|M_UNLOCKED}, - {"/Message/Mark" , M_TARGET_EXIST}, - {"/Message/Re-edit", M_ALLOW_REEDIT}, - - {"/Summary/Delete duplicated messages", M_MSG_EXIST|M_EXEC|M_UNLOCKED}, - {"/Summary/Filter messages", M_MSG_EXIST|M_EXEC|M_UNLOCKED}, - {"/Summary/Execute" , M_MSG_EXIST|M_UNLOCKED}, - {"/Summary/Prev message" , M_MSG_EXIST}, - {"/Summary/Next message" , M_MSG_EXIST}, - {"/Summary/Next unread message", M_MSG_EXIST}, - {"/Summary/Sort" , M_MSG_EXIST}, - - {"/Configuration", M_UNLOCKED}, - - {NULL, 0} - }; - - ifactory = gtk_item_factory_from_widget(mainwin->menubar); - selection = summary_get_selection_type(mainwin->summaryview); - - if (mainwin->lock_count == 0) - state |= M_UNLOCKED; - if (selection != SUMMARY_NONE) - state |= M_MSG_EXIST; - if (selection == SUMMARY_SELECTED_SINGLE || - selection == SUMMARY_SELECTED_MULTIPLE) - state |= M_TARGET_EXIST; - if (selection == SUMMARY_SELECTED_SINGLE) - state |= M_SINGLE_TARGET_EXIST; - if (mainwin->summaryview->folder_item && - mainwin->summaryview->folder_item->folder->type != F_NEWS) - state |= M_EXEC; - if (selection == SUMMARY_SELECTED_SINGLE && - (mainwin->summaryview->folder_item && - mainwin->summaryview->folder_item->stype == F_DRAFT)) - state |= M_ALLOW_REEDIT; - - for (i = 0; entry[i].entry != NULL; i++) { - sensitive = ((entry[i].cond & state) == entry[i].cond); - menu_set_sensitive(ifactory, entry[i].entry, sensitive); - } -} - -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); - gdk_window_show(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: - break; - } -} - -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_news_compose.xpm" -#include "pixmaps/stock_mail_reply.xpm" -#include "pixmaps/stock_mail_reply_to_all.xpm" -#include "pixmaps/stock_mail_reply_to_author.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_mail_btn; - GtkWidget *compose_news_btn; - GtkWidget *compose_mail_btn_plain; - GtkWidget *compose_news_btn_plain; - GtkWidget *reply_btn; - GtkWidget *replyall_btn; - GtkWidget *replysender_btn; - GtkWidget *fwd_btn; - GtkWidget *send_btn; - /* - GtkWidget *prefs_btn; - GtkWidget *account_btn; - */ - GtkWidget *next_btn; - GtkWidget *delete_btn; - GtkWidget *exec_btn; - GtkWidget *compose_type_btn; - GtkWidget *compose_type_arrow; - GtkWidget *compose_box; - GtkWidget *compose_label; - GtkTooltips *tooltips; - - 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"), - _("Get new mail from current account"), - "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"), - _("Get new mail from 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); - - /* to implement Leandro's "combined" compose buttons, we create - * two sets of compose buttons, one for normal (text + icon) - * toolbar, and one for both text-only and icon-only toolbar; - * we switch between those sets. */ - - /* insert compose mail button widget */ - - compose_mail_btn = gtk_button_new(); - gtk_widget_show(compose_mail_btn); - tooltips = gtk_tooltips_new(); - gtk_tooltips_set_tip(tooltips, compose_mail_btn, - _("Compose email message"), - _("email")); - compose_box = gtk_vbox_new(0, 0); - gtk_widget_show(compose_box); - - gtk_container_add(GTK_CONTAINER(compose_mail_btn), compose_box); - CREATE_TOOLBAR_ICON(stock_mail_compose_xpm); - gtk_box_pack_start(GTK_BOX(compose_box), icon_wid, FALSE, FALSE, 0); - - compose_label = gtk_label_new(_("Email")); - gtk_widget_show(compose_label); - gtk_box_pack_start(GTK_BOX(compose_box), compose_label, FALSE, FALSE, 0); - - GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(compose_mail_btn), GTK_CAN_FOCUS); - gtk_button_set_relief(GTK_BUTTON(compose_mail_btn), GTK_RELIEF_NONE); - gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), compose_mail_btn, - NULL, NULL); - - /* insert compose news button widget */ - - compose_news_btn = gtk_button_new(); - gtk_widget_show(compose_news_btn); - tooltips = gtk_tooltips_new(); - gtk_tooltips_set_tip(tooltips, compose_news_btn, - _("Compose news article"), - _("news")); - compose_box = gtk_vbox_new(0, 0); - gtk_widget_show(compose_box); - - gtk_container_add(GTK_CONTAINER(compose_news_btn), compose_box); - CREATE_TOOLBAR_ICON(stock_news_compose_xpm); - gtk_box_pack_start(GTK_BOX(compose_box), icon_wid, FALSE, FALSE, 0); - - compose_label = gtk_label_new(_("News")); - gtk_widget_show(compose_label); - gtk_box_pack_start(GTK_BOX(compose_box), compose_label, FALSE, FALSE, 0); - - GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(compose_news_btn), GTK_CAN_FOCUS); - gtk_button_set_relief(GTK_BUTTON(compose_news_btn), GTK_RELIEF_NONE); - gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), compose_news_btn, - NULL, NULL); - - /* insert compose btn plain */ - - CREATE_TOOLBAR_ICON(stock_mail_compose_xpm); - compose_mail_btn_plain = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), - _("Email"), - _("Compose an email message"), - "New", - icon_wid, - toolbar_compose_mail_cb, - mainwin); - - /* insert compose btn plain */ - - CREATE_TOOLBAR_ICON(stock_news_compose_xpm); - compose_news_btn_plain = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), - _("News"), - _("Compose a news message"), - "New", - icon_wid, - toolbar_compose_news_cb, - mainwin); - - /* insert compose button type widget */ - - compose_type_btn = gtk_button_new(); - gtk_widget_show(compose_type_btn); - - compose_type_arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT); - gtk_widget_show(compose_type_arrow); - - gtk_container_add(GTK_CONTAINER(compose_type_btn), compose_type_arrow); - - GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(compose_type_btn), GTK_CAN_FOCUS); - gtk_button_set_relief(GTK_BUTTON(compose_type_btn), GTK_RELIEF_NONE); - - gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), compose_type_btn, - NULL, NULL); - - gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); - - 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), - _("All"), - _("Reply to all"), - "Reply to all", - icon_wid, - toolbar_reply_to_all_cb, - mainwin); - CREATE_TOOLBAR_ICON(stock_mail_reply_to_author_xpm); - replysender_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), - _("Sender"), - _("Reply to sender"), - "Reply to sender", - icon_wid, - toolbar_reply_to_sender_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); - - 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); - */ - - gtk_signal_connect(GTK_OBJECT(compose_type_btn), "clicked", - GTK_SIGNAL_FUNC(toolbar_popup_compose_type_cb), - mainwin); - - gtk_signal_connect(GTK_OBJECT(compose_mail_btn), "clicked", - GTK_SIGNAL_FUNC(toolbar_compose_mail_cb), - mainwin); - - gtk_signal_connect(GTK_OBJECT(compose_news_btn), "clicked", - GTK_SIGNAL_FUNC(toolbar_compose_news_cb), - mainwin); - - mainwin->toolbar = toolbar; - mainwin->get_btn = get_btn; - mainwin->getall_btn = getall_btn; - mainwin->compose_mail_btn = compose_mail_btn; - mainwin->compose_news_btn = compose_news_btn; - mainwin->compose_mail_btn_plain = compose_mail_btn_plain; - mainwin->compose_news_btn_plain = compose_news_btn_plain; - mainwin->reply_btn = reply_btn; - mainwin->replyall_btn = replyall_btn; - mainwin->replysender_btn = replysender_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); - - /* activate Leandro menu system */ - activate_compose_button(mainwin, - prefs_common.toolbar_style, - mainwin->compose_btn_type); -} - -/* callback functions */ - -static void toolbar_popup_compose_type_cb (GtkWidget *widget, - gpointer data) -{ - MainWindow *mainwindow = (MainWindow *) data; - GtkWidget *compose_menu, *compose_item; - - g_return_if_fail(mainwindow != NULL); - - compose_menu = gtk_menu_new(); - - compose_item = gtk_menu_item_new_with_label(_("Email message")); - gtk_widget_show(compose_item); - gtk_menu_append(GTK_MENU(compose_menu), compose_item); - gtk_signal_connect(GTK_OBJECT(compose_item), "activate", - GTK_SIGNAL_FUNC(toolbar_popup_compose_type_set), - mainwindow); - gtk_object_set_data(GTK_OBJECT(compose_item), "entry", GINT_TO_POINTER(COMPOSEBUTTON_MAIL)); - - compose_item = gtk_menu_item_new_with_label(_("News article")); - gtk_widget_show(compose_item); - gtk_menu_append(GTK_MENU(compose_menu), compose_item); - gtk_signal_connect(GTK_OBJECT(compose_item), "activate", - GTK_SIGNAL_FUNC(toolbar_popup_compose_type_set), - mainwindow); - gtk_object_set_data(GTK_OBJECT(compose_item), "entry", GINT_TO_POINTER(COMPOSEBUTTON_NEWS)); - - gtk_menu_popup(GTK_MENU(compose_menu), NULL, NULL, NULL, - NULL, 1, 0); -} - -static void toolbar_popup_compose_type_set(GtkWidget *widget, gpointer data) -{ - ComposeButtonType compose_type = GPOINTER_TO_INT( gtk_object_get_data(GTK_OBJECT(widget), "entry") ); - MainWindow *mainwindow = (MainWindow *) data; - - mainwindow->compose_btn_type = compose_type; - - activate_compose_button(mainwindow, prefs_common.toolbar_style, mainwindow->compose_btn_type); -} - -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; - - if (mainwin->compose_btn_type == COMPOSEBUTTON_MAIL) - compose_cb(mainwin, 0, NULL); - else - compose_news_cb(mainwin, 0, NULL); -} - -static void toolbar_compose_news_cb (GtkWidget *widget, - gpointer data) -{ - MainWindow *mainwin = (MainWindow *)data; - - compose_news_cb(mainwin, 0, NULL); -} - -static void toolbar_compose_mail_cb (GtkWidget *widget, - gpointer data) -{ - MainWindow *mainwin = (MainWindow *)data; - - compose_mail_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_reply_to_sender_cb (GtkWidget *widget, - gpointer data) -{ - MainWindow *mainwin = (MainWindow *)data; - - reply_cb(mainwin, COMPOSE_REPLY_TO_SENDER, NULL); -} - -static void toolbar_forward_cb (GtkWidget *widget, - gpointer data) -{ - MainWindow *mainwin = (MainWindow *)data; - - if (prefs_common.forward_as_attachment) - reply_cb(mainwin, COMPOSE_FORWARD_AS_ATTACH, NULL); - else - 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_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL); - gtk_object_set_data(GTK_OBJECT(mainwin->ac_menu), "menu_button", - widget); - - gtk_menu_popup(GTK_MENU(mainwin->ac_menu), NULL, NULL, - menu_button_position, widget, - event->button, event->time); -} - -static void ac_label_button_pressed(GtkWidget *widget, GdkEventButton *event, - gpointer data) -{ - MainWindow *mainwin = (MainWindow *)data; - - if (!event) return; - - gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL); - gtk_object_set_data(GTK_OBJECT(mainwin->ac_menu), "menu_button", - widget); - - gtk_menu_popup(GTK_MENU(mainwin->ac_menu), NULL, NULL, - menu_button_position, widget, - event->button, event->time); -} - -static void ac_menu_popup_closed(GtkMenuShell *menu_shell, gpointer data) -{ - MainWindow *mainwin = (MainWindow *)data; - GtkWidget *button; - - button = gtk_object_get_data(GTK_OBJECT(menu_shell), "menu_button"); - gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); - gtk_object_remove_data(GTK_OBJECT(mainwin->ac_menu), "menu_button"); -} - -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 add_mbox_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - main_window_add_mbox(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(mainwin->summaryview->folder_item); -} - -static void export_mbox_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - export_mbox(mainwin->summaryview->folder_item); -} - -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) -{ - activate_compose_button(mainwin, (ToolbarStyle)action, - mainwin->compose_btn_type); - - 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(GtkCheckMenuItem *checkitem, guint action, GtkWidget *widget) - -{ - MainWindow *mainwin; - SeparateType type; - - mainwin = (MainWindow *) gtk_object_get_data(GTK_OBJECT(checkitem), "mainwindow"); - g_return_if_fail(mainwin != NULL); - - 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) { - if (mainwin->summaryview->folder_item->folder->account != NULL - && mainwin->summaryview->folder_item->folder->account->protocol == A_NNTP) - compose_new_with_recipient(mainwin->summaryview->folder_item->folder->account, mainwin->summaryview->folder_item->path); - else - compose_new_with_folderitem(mainwin->summaryview->folder_item->folder->account, mainwin->summaryview->folder_item); - } - else - compose_new(NULL); -} - -static void compose_mail_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - PrefsAccount * ac; - GList * list; - GList * cur; - - if (mainwin->summaryview->folder_item) { - ac = mainwin->summaryview->folder_item->folder->account; - if (ac && ac->protocol != A_NNTP) { - compose_new_with_folderitem(ac, mainwin->summaryview->folder_item); - return; - } - } - - if(cur_account && (cur_account->protocol != A_NNTP)) { - compose_new_with_folderitem(cur_account, mainwin->summaryview->folder_item); - return; - } - - list = account_get_list(); - for(cur = list ; cur != NULL ; cur = g_list_next(cur)) { - ac = (PrefsAccount *) cur->data; - if (ac->protocol != A_NNTP) { - compose_new_with_folderitem(ac, mainwin->summaryview->folder_item); - return; - } - } -} - -static void compose_news_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - PrefsAccount * ac = NULL; - GList * list; - GList * cur; - - if (mainwin->summaryview->folder_item) { - ac = mainwin->summaryview->folder_item->folder->account; - if (ac && ac->protocol == A_NNTP) { - compose_new_with_recipient - (ac, mainwin->summaryview->folder_item->path); - return; - } - } - - list = account_get_list(); - for(cur = list ; cur != NULL ; cur = g_list_next(cur)) { - ac = (PrefsAccount *) cur->data; - if (ac->protocol == A_NNTP) { - compose_new(ac); - return; - } - } -} - -static void reply_cb(MainWindow *mainwin, guint action, GtkWidget *widget) -{ - GList *sel = GTK_CLIST(mainwin->summaryview->ctree)->selection; - 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, FALSE); - break; - case COMPOSE_REPLY_TO_SENDER: - compose_reply(msginfo, prefs_common.reply_with_quote, - FALSE, TRUE); - break; - case COMPOSE_FOLLOWUP_AND_REPLY_TO: - compose_followup_and_reply_to(msginfo, - prefs_common.reply_with_quote, - FALSE, TRUE); - break; - case COMPOSE_REPLY_TO_ALL: - compose_reply(msginfo, prefs_common.reply_with_quote, - TRUE, FALSE); - break; - case COMPOSE_FORWARD: - if (!sel->next) { - compose_forward(NULL, msginfo, FALSE); - break; - } - /* if (sel->next) FALL_THROUGH */ - case COMPOSE_FORWARD_AS_ATTACH: - { - GSList *msginfo_list = NULL; - for ( ; sel != NULL; sel = sel->next) - msginfo_list = g_slist_append(msginfo_list, - gtk_ctree_node_get_row_data(GTK_CTREE(mainwin->summaryview->ctree), - GTK_CTREE_NODE(sel->data))); - compose_forward_multiple(NULL, msginfo_list); - g_slist_free(msginfo_list); - } - break; - default: - g_warning("reply_cb(): invalid action type: %d\n", action); - } - - 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"); -} - -/*void main_window_set_thread_option(MainWindow *mainwin) -{ - GtkItemFactory *ifactory; - gboolean no_item = FALSE; - - ifactory = gtk_item_factory_from_widget(mainwin->menubar); - - if (mainwin->summaryview == NULL) - no_item = TRUE; - else if (mainwin->summaryview->folder_item == NULL) - no_item = TRUE; - - if (no_item) { - menu_set_sensitive(ifactory, "/Summary/Thread view", FALSE); - menu_set_sensitive(ifactory, "/Summary/Unthread view", FALSE); - } - else { - if (mainwin->summaryview->folder_item->prefs->enable_thread) { - menu_set_sensitive(ifactory, - "/Summary/Thread view", FALSE); - menu_set_sensitive(ifactory, - "/Summary/Unthread view", TRUE); - summary_thread_build(mainwin->summaryview, TRUE); - } - else { - menu_set_sensitive(ifactory, - "/Summary/Thread view", TRUE); - menu_set_sensitive(ifactory, - "/Summary/Unthread view", FALSE); - summary_unthread(mainwin->summaryview); - } - prefs_folder_item_save_config(mainwin->summaryview->folder_item); - } -}*/ - -static void thread_cb(MainWindow *mainwin, guint action, GtkWidget *widget) -{ - /*mainwin->summaryview->folder_item->prefs->enable_thread = - !mainwin->summaryview->folder_item->prefs->enable_thread; - main_window_set_thread_option(mainwin); - */ - - GtkItemFactory *ifactory; - - ifactory = gtk_item_factory_from_widget(widget); - - if (0 == action) { - summary_thread_build(mainwin->summaryview, FALSE); - 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; - - folder_update_op_count(); - - 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 next_marked_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - summary_select_next_marked(mainwin->summaryview); -} - -static void prev_marked_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - summary_select_prev_marked(mainwin->summaryview); -} - -static void goto_folder_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - FolderItem *to_folder; - - to_folder = foldersel_folder_sel(NULL, 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_scoring_open_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - prefs_scoring_open(NULL); -} - -static void prefs_filtering_open_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - prefs_filtering_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); -} - -static void activate_compose_button (MainWindow *mainwin, - ToolbarStyle style, - ComposeButtonType type) -{ - if (style == TOOLBAR_NONE) - return; - - if (style == TOOLBAR_BOTH) { - gtk_widget_hide(mainwin->compose_mail_btn_plain); - gtk_widget_hide(mainwin->compose_news_btn_plain); - gtk_widget_hide(type == COMPOSEBUTTON_NEWS ? mainwin->compose_mail_btn - : mainwin->compose_news_btn); - gtk_widget_show(type == COMPOSEBUTTON_NEWS ? mainwin->compose_news_btn - : mainwin->compose_mail_btn); - mainwin->compose_btn_type = type; - } - else { - gtk_widget_hide(mainwin->compose_news_btn); - gtk_widget_hide(mainwin->compose_mail_btn); - gtk_widget_hide(type == COMPOSEBUTTON_NEWS ? mainwin->compose_mail_btn_plain - : mainwin->compose_news_btn_plain); - gtk_widget_show(type == COMPOSEBUTTON_NEWS ? mainwin->compose_news_btn_plain - : mainwin->compose_mail_btn_plain); - mainwin->compose_btn_type = type; - } -} - -static void prefs_templates_open_cb(MainWindow *mainwin, guint action, - GtkWidget *widget) -{ - prefs_templates_open(); -} diff --git a/src/mainwindow.h b/src/mainwindow.h deleted file mode 100644 index e8cb412b3..000000000 --- a/src/mainwindow.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * 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; - -typedef enum -{ - COMPOSEBUTTON_MAIL, - COMPOSEBUTTON_NEWS -} ComposeButtonType; - -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; - - /* toolbar */ - GtkWidget *handlebox; - GtkWidget *toolbar; - GtkWidget *get_btn; - GtkWidget *getall_btn; - - /* compose button stuff */ - GtkWidget *compose_mail_btn; /* a la Leandro */ - GtkWidget *compose_news_btn; /* a la Leandro */ - GtkWidget *compose_mail_btn_plain; /* plain (text/icon only) */ - GtkWidget *compose_news_btn_plain; /* plain (text/icon only) */ - ComposeButtonType compose_btn_type; - - GtkWidget *reply_btn; - GtkWidget *replyall_btn; - GtkWidget *replysender_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 lock_count; - 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_lock (MainWindow *mainwin); -void main_window_unlock (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); - -void main_window_popup (MainWindow *mainwin); -/*void main_window_set_thread_option (MainWindow *mainwin);*/ - -#endif /* __MAINWINDOW_H__ */ diff --git a/src/manage_window.c b/src/manage_window.c deleted file mode 100644 index aba9f50b6..000000000 --- a/src/manage_window.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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" - -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)); -} - -GtkWidget *manage_window_get_focus_window(void) -{ - return focus_window; -} diff --git a/src/manage_window.h b/src/manage_window.h deleted file mode 100644 index 04775605d..000000000 --- a/src/manage_window.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 __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); - -extern GtkWidget *focus_window; - -GtkWidget *manage_window_get_focus_window (void); - - -#endif /* __MANAGE_WINDOW_H__ */ diff --git a/src/manual.c b/src/manual.c deleted file mode 100644 index 2f9535ebd..000000000 --- a/src/manual.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 deleted file mode 100644 index f88e20345..000000000 --- a/src/manual.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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/matcher.c b/src/matcher.c deleted file mode 100644 index 9a671c52a..000000000 --- a/src/matcher.c +++ /dev/null @@ -1,1474 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2001 Hiroyuki Yamamoto & The Sylpheed Claws Team - * - * 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. - */ - -/* - * initial Hoa initial - * - * 07/18/01 Alfons when we want a file name from a MsgInfo, get that - * from MsgInfo->folder if the message is being filtered - * from incorporation. also some more safe string checking. - */ - -#include <ctype.h> -#include <string.h> -#include <stdlib.h> -#include <errno.h> -#include "defs.h" -#include "utils.h" -#include "procheader.h" -#include "matcher.h" -#include "intl.h" - -struct _MatchParser { - gint id; - gchar * str; -}; - -typedef struct _MatchParser MatchParser; - -static MatchParser matchparser_tab[] = { - /* msginfo flags */ - {MATCHING_ALL, "all"}, - {MATCHING_UNREAD, "unread"}, - {MATCHING_NOT_UNREAD, "~unread"}, - {MATCHING_NEW, "new"}, - {MATCHING_NOT_NEW, "~new"}, - {MATCHING_MARKED, "marked"}, - {MATCHING_NOT_MARKED, "~marked"}, - {MATCHING_DELETED, "deleted"}, - {MATCHING_NOT_DELETED, "~deleted"}, - {MATCHING_REPLIED, "replied"}, - {MATCHING_NOT_REPLIED, "~replied"}, - {MATCHING_FORWARDED, "forwarded"}, - {MATCHING_NOT_FORWARDED, "~forwarded"}, - - /* msginfo headers */ - {MATCHING_SUBJECT, "subject"}, - {MATCHING_NOT_SUBJECT, "~subject"}, - {MATCHING_FROM, "from"}, - {MATCHING_NOT_FROM, "~from"}, - {MATCHING_TO, "to"}, - {MATCHING_NOT_TO, "~to"}, - {MATCHING_CC, "cc"}, - {MATCHING_NOT_CC, "~cc"}, - {MATCHING_TO_OR_CC, "to_or_cc"}, - {MATCHING_NOT_TO_AND_NOT_CC, "~to_or_cc"}, - {MATCHING_AGE_GREATER, "age_greater"}, - {MATCHING_AGE_LOWER, "age_lower"}, - {MATCHING_NEWSGROUPS, "newsgroups"}, - {MATCHING_NOT_NEWSGROUPS, "~newsgroups"}, - {MATCHING_INREPLYTO, "inreplyto"}, - {MATCHING_NOT_INREPLYTO, "~inreplyto"}, - {MATCHING_REFERENCES, "references"}, - {MATCHING_NOT_REFERENCES, "~references"}, - {MATCHING_SCORE_GREATER, "score_greater"}, - {MATCHING_SCORE_LOWER, "score_lower"}, - - /* content have to be read */ - {MATCHING_HEADER, "header"}, - {MATCHING_NOT_HEADER, "~header"}, - {MATCHING_HEADERS_PART, "headers_part"}, - {MATCHING_NOT_HEADERS_PART, "~headers_part"}, - {MATCHING_MESSAGE, "message"}, - {MATCHING_NOT_MESSAGE, "~message"}, - {MATCHING_BODY_PART, "body_part"}, - {MATCHING_NOT_BODY_PART, "~body_part"}, - {MATCHING_EXECUTE, "execute"}, - {MATCHING_NOT_EXECUTE, "~execute"}, - - /* match type */ - {MATCHING_MATCHCASE, "matchcase"}, - {MATCHING_MATCH, "match"}, - {MATCHING_REGEXPCASE, "regexpcase"}, - {MATCHING_REGEXP, "regexp"}, - - /* actions */ - {MATCHING_SCORE, "score"}, - - /* actions */ - {MATCHING_ACTION_MOVE, "move"}, - {MATCHING_ACTION_COPY, "copy"}, - {MATCHING_ACTION_DELETE, "delete"}, - {MATCHING_ACTION_MARK, "mark"}, - {MATCHING_ACTION_UNMARK, "unmark"}, - {MATCHING_ACTION_MARK_AS_READ, "mark_as_read"}, - {MATCHING_ACTION_MARK_AS_UNREAD, "mark_as_unread"}, - {MATCHING_ACTION_FORWARD, "forward"}, - {MATCHING_ACTION_FORWARD_AS_ATTACHMENT, "forward_as_attachment"}, - {MATCHING_ACTION_COLOR, "color"} - /* {MATCHING_EXECUTE, "execute"}, */ -}; - -gchar * get_matchparser_tab_str(gint id) -{ - gint i; - - for(i = 0 ; i < (int) (sizeof(matchparser_tab) / sizeof(MatchParser)) ; - i++) { - if (matchparser_tab[i].id == id) - return matchparser_tab[i].str; - } - return NULL; -} - - - -/* - syntax for matcher - - header "x-mailing" match "toto" - subject match "regexp" & to regexp "regexp" - subject match "regexp" | to regexpcase "regexp" | age_sup 5 - */ - -static gboolean matcher_is_blank(gchar ch); - -/* ******************* parser *********************** */ - -static gboolean matcher_is_blank(gchar ch) -{ - return (ch == ' ') || (ch == '\t'); -} - -/* parse for one condition */ - -MatcherProp * matcherprop_parse(gchar ** str) -{ - MatcherProp * prop; - gchar * tmp; - gint key; - gint value; - gchar * expr; - gint match; - gchar * header = NULL; - - tmp = * str; - key = matcher_parse_keyword(&tmp); - if (tmp == NULL) { - * str = NULL; - return NULL; - } - - switch (key) { - case MATCHING_AGE_LOWER: - case MATCHING_AGE_GREATER: - case MATCHING_SCORE_LOWER: - case MATCHING_SCORE_GREATER: - value = matcher_parse_number(&tmp); - if (tmp == NULL) { - * str = NULL; - return NULL; - } - *str = tmp; - - prop = matcherprop_new(key, NULL, 0, NULL, value); - - return prop; - - case MATCHING_ALL: - case MATCHING_UNREAD: - case MATCHING_NOT_UNREAD: - case MATCHING_NEW: - case MATCHING_NOT_NEW: - case MATCHING_MARKED: - case MATCHING_NOT_MARKED: - case MATCHING_DELETED: - case MATCHING_NOT_DELETED: - case MATCHING_REPLIED: - case MATCHING_NOT_REPLIED: - case MATCHING_FORWARDED: - case MATCHING_NOT_FORWARDED: - prop = matcherprop_new(key, NULL, 0, NULL, 0); - *str = tmp; - - return prop; - - case MATCHING_SUBJECT: - case MATCHING_NOT_SUBJECT: - case MATCHING_FROM: - case MATCHING_NOT_FROM: - case MATCHING_TO: - case MATCHING_NOT_TO: - case MATCHING_CC: - case MATCHING_NOT_CC: - case MATCHING_TO_OR_CC: - case MATCHING_NOT_TO_AND_NOT_CC: - case MATCHING_NEWSGROUPS: - case MATCHING_NOT_NEWSGROUPS: - case MATCHING_INREPLYTO: - case MATCHING_NOT_REFERENCES: - case MATCHING_REFERENCES: - case MATCHING_NOT_INREPLYTO: - case MATCHING_MESSAGE: - case MATCHING_NOT_MESSAGE: - case MATCHING_EXECUTE: - case MATCHING_NOT_EXECUTE: - case MATCHING_HEADERS_PART: - case MATCHING_NOT_HEADERS_PART: - case MATCHING_BODY_PART: - case MATCHING_NOT_BODY_PART: - case MATCHING_HEADER: - case MATCHING_NOT_HEADER: - if ((key == MATCHING_HEADER) || (key == MATCHING_NOT_HEADER)) { - header = matcher_parse_str(&tmp); - if (tmp == NULL) { - * str = NULL; - return NULL; - } - } - - match = matcher_parse_keyword(&tmp); - if (tmp == NULL) { - if (header) - g_free(header); - * str = NULL; - return NULL; - } - - switch(match) { - case MATCHING_REGEXP: - case MATCHING_REGEXPCASE: - expr = matcher_parse_regexp(&tmp); - if (tmp == NULL) { - if (header) - g_free(header); - * str = NULL; - return NULL; - } - *str = tmp; - prop = matcherprop_new(key, header, match, expr, 0); - g_free(expr); - - return prop; - case MATCHING_MATCH: - case MATCHING_MATCHCASE: - expr = matcher_parse_str(&tmp); - if (tmp == NULL) { - if (header) - g_free(header); - * str = NULL; - return NULL; - } - *str = tmp; - prop = matcherprop_new(key, header, match, expr, 0); - g_free(expr); - - return prop; - default: - if (header) - g_free(header); - * str = NULL; - return NULL; - } - default: - * str = NULL; - return NULL; - } -} - -gint matcher_parse_keyword(gchar ** str) -{ - gchar * p; - gchar * dup; - gchar * start; - gint i; - gint match; - - dup = alloca(strlen(* str) + 1); - p = dup; - strcpy(dup, * str); - - while (matcher_is_blank(*p)) - p++; - - start = p; - - while (!matcher_is_blank(*p) && (*p != '\0')) - p++; - - match = -1; - for(i = 0 ; i < (int) (sizeof(matchparser_tab) / sizeof(MatchParser)) ; - i++) { - if ((strlen(matchparser_tab[i].str) == p - start) && - (strncasecmp(matchparser_tab[i].str, start, - p - start) == 0)) { - match = i; - break; - } - } - - if (match == -1) { - * str = NULL; - return 0; - } - - *p = '\0'; - - *str += p - dup + 1; - return matchparser_tab[match].id; -} - -gint matcher_parse_number(gchar ** str) -{ - gchar * p; - gchar * dup; - gchar * start; - - dup = alloca(strlen(* str) + 1); - p = dup; - strcpy(dup, * str); - - while (matcher_is_blank(*p)) - p++; - - start = p; - - if (!isdigit(*p) && *p != '-' && *p != '+') { - *str = NULL; - return 0; - } - if (*p == '-' || *p == '+') - p++; - while (isdigit(*p)) - p++; - - *p = '\0'; - - *str += p - dup + 1; - return atoi(start); -} - -gboolean matcher_parse_boolean_op(gchar ** str) -{ - gchar * p; - - p = * str; - - while (matcher_is_blank(*p)) - p++; - - if (*p == '|') { - *str += p - * str + 1; - return FALSE; - } - else if (*p == '&') { - *str += p - * str + 1; - return TRUE; - } - else { - *str = NULL; - return FALSE; - } -} - -gchar * matcher_parse_regexp(gchar ** str) -{ - gchar * p; - gchar * dup; - gchar * start; - - dup = alloca(strlen(* str) + 1); - p = dup; - strcpy(dup, * str); - - while (matcher_is_blank(*p)) - p++; - - if (*p != '/') { - * str = NULL; - return NULL; - } - - p ++; - start = p; - while (*p != '/') { - if (*p == '\\') - p++; - p++; - } - *p = '\0'; - - *str += p - dup + 2; - return g_strdup(start); -} - -/* matcher_parse_str() - parses a string until it hits a - * terminating \". to unescape characters use \. The string - * should not be used directly: matcher_unescape_str() - * returns a string that can be used directly. */ -gchar * matcher_parse_str(gchar ** str) -{ - gchar * p; - gchar * dup; - gchar * start; - gchar * dest; - - dup = alloca(strlen(* str) + 1); - p = dup; - strcpy(dup, * str); - - while (matcher_is_blank(*p)) - p++; - - if (*p != '"') { - * str = NULL; - return NULL; - } - - p ++; - start = p; - dest = p; - - for ( ; *p && *p != '\"'; p++, dest++) { - if (*p == '\\') { - *dest++ = *p++; - *dest = *p; - } - else - *dest = *p; - } - *dest = '\0'; - - *str += dest - dup + 2; - return g_strdup(start); -} - -gchar *matcher_unescape_str(gchar *str) -{ - gchar *tmp = alloca(strlen(str) + 1); - register gchar *src = tmp; - register gchar *dst = str; - - strcpy(tmp, str); - - for ( ; *src; src++) { - if (*src != '\\') - *dst++ = *src; - else { - src++; - if (*src == '\\') - *dst++ = '\\'; - else if (*src == 'n') - *dst++ = '\n'; - else if (*src == 'r') - *dst++ = '\r'; - else if (*src == '\'' || *src == '\"') - *dst++ = *src; - else { - src--; - *dst++ = *src; - } - } - } - *dst = 0; - return str; -} - -/* **************** data structure allocation **************** */ - - -MatcherProp * matcherprop_new(gint criteria, gchar * header, - gint matchtype, gchar * expr, - int value) -{ - MatcherProp * prop; - - prop = g_new0(MatcherProp, 1); - prop->criteria = criteria; - if (header != NULL) - prop->header = g_strdup(header); - else - prop->header = NULL; - if (expr != NULL) - prop->expr = g_strdup(expr); - else - prop->expr = NULL; - prop->matchtype = matchtype; - prop->preg = NULL; - prop->value = value; - prop->error = 0; - - return prop; -} - -void matcherprop_free(MatcherProp * prop) -{ - g_free(prop->expr); - if (prop->preg != NULL) { - regfree(prop->preg); - g_free(prop->preg); - } - g_free(prop); -} - - -/* ************** match ******************************/ - - -/* match the given string */ - -static gboolean matcherprop_string_match(MatcherProp * prop, gchar * str) -{ - gchar * str1; - gchar * str2; - - if (str == NULL) - return FALSE; - - switch(prop->matchtype) { - case MATCHING_REGEXPCASE: - case MATCHING_REGEXP: - if (!prop->preg && (prop->error == 0)) { - prop->preg = g_new0(regex_t, 1); - if (regcomp(prop->preg, prop->expr, - REG_NOSUB | REG_EXTENDED - | ((prop->matchtype == MATCHING_REGEXPCASE) - ? REG_ICASE : 0)) != 0) { - prop->error = 1; - g_free(prop->preg); - } - } - if (prop->preg == NULL) - return FALSE; - - if (regexec(prop->preg, str, 0, NULL, 0) == 0) - return TRUE; - else - return FALSE; - - case MATCHING_MATCH: - return (strstr(str, prop->expr) != NULL); - - case MATCHING_MATCHCASE: - str2 = alloca(strlen(prop->expr) + 1); - strcpy(str2, prop->expr); - g_strup(str2); - str1 = alloca(strlen(str) + 1); - strcpy(str1, str); - g_strup(str1); - return (strstr(str1, str2) != NULL); - - default: - return FALSE; - } -} - -gboolean matcherprop_match_execute(MatcherProp * prop, MsgInfo * info) -{ - gchar * cmd; - - cmd = matching_build_command(prop->expr, info); - if (cmd == NULL) - return FALSE; - - return (system(cmd) == 0); -} - -/* match a message and his headers, hlist can be NULL if you don't - want to use headers */ - -gboolean matcherprop_match(MatcherProp * prop, MsgInfo * info) -{ - time_t t; - - switch(prop->criteria) { - case MATCHING_ALL: - return 1; - case MATCHING_UNREAD: - return MSG_IS_UNREAD(info->flags); - case MATCHING_NOT_UNREAD: - return !MSG_IS_UNREAD(info->flags); - case MATCHING_NEW: - return MSG_IS_NEW(info->flags); - case MATCHING_NOT_NEW: - return !MSG_IS_NEW(info->flags); - case MATCHING_MARKED: - return MSG_IS_MARKED(info->flags); - case MATCHING_NOT_MARKED: - return !MSG_IS_MARKED(info->flags); - case MATCHING_DELETED: - return MSG_IS_DELETED(info->flags); - case MATCHING_NOT_DELETED: - return !MSG_IS_DELETED(info->flags); - case MATCHING_REPLIED: - return MSG_IS_REPLIED(info->flags); - case MATCHING_NOT_REPLIED: - return !MSG_IS_REPLIED(info->flags); - case MATCHING_FORWARDED: - return MSG_IS_FORWARDED(info->flags); - case MATCHING_NOT_FORWARDED: - return !MSG_IS_FORWARDED(info->flags); - case MATCHING_SUBJECT: - return matcherprop_string_match(prop, info->subject); - case MATCHING_NOT_SUBJECT: - return !matcherprop_string_match(prop, info->subject); - case MATCHING_FROM: - return matcherprop_string_match(prop, info->from); - case MATCHING_NOT_FROM: - return !matcherprop_string_match(prop, info->from); - case MATCHING_TO: - return matcherprop_string_match(prop, info->to); - case MATCHING_NOT_TO: - return !matcherprop_string_match(prop, info->to); - case MATCHING_CC: - return matcherprop_string_match(prop, info->cc); - case MATCHING_NOT_CC: - return !matcherprop_string_match(prop, info->cc); - case MATCHING_TO_OR_CC: - return matcherprop_string_match(prop, info->to) - || matcherprop_string_match(prop, info->cc); - case MATCHING_NOT_TO_AND_NOT_CC: - return !(matcherprop_string_match(prop, info->to) - || matcherprop_string_match(prop, info->cc)); - case MATCHING_AGE_GREATER: - t = time(NULL); - return ((t - info->date_t) / (60 * 60 * 24)) >= prop->value; - case MATCHING_AGE_LOWER: - t = time(NULL); - return ((t - info->date_t) / (60 * 60 * 24)) <= prop->value; - case MATCHING_SCORE_GREATER: - return info->score >= prop->value; - case MATCHING_SCORE_LOWER: - return info->score <= prop->value; - case MATCHING_NEWSGROUPS: - return matcherprop_string_match(prop, info->newsgroups); - case MATCHING_NOT_NEWSGROUPS: - return !matcherprop_string_match(prop, info->newsgroups); - case MATCHING_INREPLYTO: - return matcherprop_string_match(prop, info->inreplyto); - case MATCHING_NOT_INREPLYTO: - return !matcherprop_string_match(prop, info->inreplyto); - case MATCHING_REFERENCES: - return matcherprop_string_match(prop, info->references); - case MATCHING_NOT_REFERENCES: - return !matcherprop_string_match(prop, info->references); - case MATCHING_EXECUTE: - return matcherprop_match_execute(prop, info); - case MATCHING_NOT_EXECUTE: - return !matcherprop_match_execute(prop, info); - default: - return 0; - } -} - -/* ********************* MatcherList *************************** */ - - -/* parse for a list of conditions */ - -MatcherList * matcherlist_parse(gchar ** str) -{ - gchar * tmp; - MatcherProp * matcher; - GSList * matchers_list = NULL; - gboolean bool_and = TRUE; - gchar * save; - MatcherList * cond; - gboolean main_bool_and = TRUE; - GSList * l; - - tmp = * str; - - matcher = matcherprop_parse(&tmp); - - if (tmp == NULL) { - * str = NULL; - return NULL; - } - matchers_list = g_slist_append(matchers_list, matcher); - while (matcher) { - save = tmp; - bool_and = matcher_parse_boolean_op(&tmp); - if (tmp == NULL) { - tmp = save; - matcher = NULL; - } - else { - main_bool_and = bool_and; - matcher = matcherprop_parse(&tmp); - if (tmp != NULL) { - matchers_list = - g_slist_append(matchers_list, matcher); - } - else { - for(l = matchers_list ; l != NULL ; - l = g_slist_next(l)) - matcherprop_free((MatcherProp *) - l->data); - g_slist_free(matchers_list); - * str = NULL; - return NULL; - } - } - } - - cond = matcherlist_new(matchers_list, main_bool_and); - - * str = tmp; - - return cond; -} - -MatcherList * matcherlist_new(GSList * matchers, gboolean bool_and) -{ - MatcherList * cond; - - cond = g_new0(MatcherList, 1); - - cond->matchers = matchers; - cond->bool_and = bool_and; - - return cond; -} - -void matcherlist_free(MatcherList * cond) -{ - GSList * l; - - for(l = cond->matchers ; l != NULL ; l = g_slist_next(l)) { - matcherprop_free((MatcherProp *) l->data); - } - g_free(cond); -} - -/* - skip the headers - */ - -static void matcherlist_skip_headers(FILE *fp) -{ - gchar buf[BUFFSIZE]; - - while (procheader_get_one_field(buf, sizeof(buf), fp, NULL) != -1) { - } -} - -/* - matcherprop_match_one_header - returns TRUE if buf matchs the MatchersProp criteria - */ - -static gboolean matcherprop_match_one_header(MatcherProp * matcher, - gchar * buf) -{ - gboolean result; - Header *header; - - switch(matcher->criteria) { - case MATCHING_HEADER: - case MATCHING_NOT_HEADER: - header = procheader_parse_header(buf); - if (!header) - return FALSE; - if (procheader_headername_equal(header->name, - matcher->header)) { - if (matcher->criteria == MATCHING_HEADER) - result = matcherprop_string_match(matcher, header->body); - else - result = !matcherprop_string_match(matcher, header->body); - procheader_header_free(header); - return result; - } - else { - procheader_header_free(header); - } - break; - case MATCHING_HEADERS_PART: - case MATCHING_MESSAGE: - return matcherprop_string_match(matcher, buf); - case MATCHING_NOT_MESSAGE: - case MATCHING_NOT_HEADERS_PART: - return !matcherprop_string_match(matcher, buf); - } - return FALSE; -} - -/* - matcherprop_criteria_header - returns TRUE if the headers must be matched - */ - -static gboolean matcherprop_criteria_headers(MatcherProp * matcher) -{ - switch(matcher->criteria) { - case MATCHING_HEADER: - case MATCHING_NOT_HEADER: - case MATCHING_HEADERS_PART: - case MATCHING_NOT_HEADERS_PART: - return TRUE; - default: - return FALSE; - } -} - -static gboolean matcherprop_criteria_message(MatcherProp * matcher) -{ - switch(matcher->criteria) { - case MATCHING_MESSAGE: - case MATCHING_NOT_MESSAGE: - return TRUE; - default: - return FALSE; - } -} - -/* - matcherlist_match_one_header - returns TRUE if match should stop - */ - -static gboolean matcherlist_match_one_header(MatcherList * matchers, - gchar * buf) -{ - GSList * l; - - for(l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) { - MatcherProp * matcher = (MatcherProp *) l->data; - - if (matcherprop_criteria_headers(matcher) || - matcherprop_criteria_message(matcher)) { - if (matcherprop_match_one_header(matcher, buf)) { - matcher->result = TRUE; - } - } - - if (matcherprop_criteria_headers(matcher)) { - if (matcher->result) { - if (!matchers->bool_and) - return TRUE; - } - } - } - - return FALSE; -} - -/* - matcherlist_match_headers - returns TRUE if one of the headers matchs the MatcherList criteria - */ - -static gboolean matcherlist_match_headers(MatcherList * matchers, FILE * fp) -{ - gchar buf[BUFFSIZE]; - - while (procheader_get_one_field(buf, sizeof(buf), fp, NULL) != -1) - if (matcherlist_match_one_header(matchers, buf)) - return TRUE; - - return FALSE; -} - -/* - matcherprop_criteria_body - returns TRUE if the body must be matched - */ - -static gboolean matcherprop_criteria_body(MatcherProp * matcher) -{ - switch(matcher->criteria) { - case MATCHING_BODY_PART: - case MATCHING_NOT_BODY_PART: - return TRUE; - default: - return FALSE; - } -} - -/* - matcherprop_match_line - returns TRUE if the string matchs the MatcherProp criteria - */ - -static gboolean matcherprop_match_line(MatcherProp * matcher, gchar * line) -{ - switch(matcher->criteria) { - case MATCHING_BODY_PART: - case MATCHING_MESSAGE: - return matcherprop_string_match(matcher, line); - case MATCHING_NOT_BODY_PART: - case MATCHING_NOT_MESSAGE: - return !matcherprop_string_match(matcher, line); - } - return FALSE; -} - -/* - matcherlist_match_line - returns TRUE if the string matchs the MatcherList criteria - */ - -static gboolean matcherlist_match_line(MatcherList * matchers, gchar * line) -{ - GSList * l; - - for(l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) { - MatcherProp * matcher = (MatcherProp *) l->data; - - if (matcherprop_criteria_body(matcher) || - matcherprop_criteria_message(matcher)) { - if (matcherprop_match_line(matcher, line)) { - matcher->result = TRUE; - } - } - - if (matcher->result) { - if (!matchers->bool_and) - return TRUE; - } - } - return FALSE; -} - -/* - matcherlist_match_body - returns TRUE if one line of the body matchs the MatcherList criteria - */ - -static gboolean matcherlist_match_body(MatcherList * matchers, FILE * fp) -{ - gchar buf[BUFFSIZE]; - - while (fgets(buf, sizeof(buf), fp) != NULL) - if (matcherlist_match_line(matchers, buf)) - return TRUE; - - return FALSE; -} - -gboolean matcherlist_match_file(MatcherList * matchers, MsgInfo * info, - gboolean result) -{ - gboolean read_headers; - gboolean read_body; - GSList * l; - FILE * fp; - gchar * file; - gboolean is_incorporating = MSG_IS_FILTERING(info->flags); - - /* check which things we need to do */ - read_headers = FALSE; - read_body = FALSE; - - for(l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) { - MatcherProp * matcher = (MatcherProp *) l->data; - - if (matcherprop_criteria_headers(matcher)) - read_headers = TRUE; - if (matcherprop_criteria_body(matcher)) - read_body = TRUE; - if (matcherprop_criteria_message(matcher)) { - read_headers = TRUE; - read_body = TRUE; - } - matcher->result = FALSE; - } - - if (!read_headers && !read_body) - return result; - - file = is_incorporating ? g_strdup(info->folder) - : procmsg_get_message_file(info); - - if (file == NULL) - return FALSE; - - if ((fp = fopen(file, "r")) == NULL) { - FILE_OP_ERROR(file, "fopen"); - g_free(file); - return result; - } - - /* read the headers */ - - if (read_headers) { - if (matcherlist_match_headers(matchers, fp)) - read_body = FALSE; - } - else { - matcherlist_skip_headers(fp); - } - - /* read the body */ - if (read_body) { - matcherlist_match_body(matchers, fp); - } - - for(l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) { - MatcherProp * matcher = (MatcherProp *) l->data; - - if (matcherprop_criteria_headers(matcher) || - matcherprop_criteria_body(matcher) || - matcherprop_criteria_message(matcher)) - if (matcher->result) { - if (!matchers->bool_and) { - result = TRUE; - break; - } - } - else { - if (matchers->bool_and) { - result = FALSE; - break; - } - } - } - - g_free(file); - - fclose(fp); - - return result; -} - -/* test a list of condition */ - -gboolean matcherlist_match(MatcherList * matchers, MsgInfo * info) -{ - GSList * l; - gboolean result; - - if (matchers->bool_and) - result = TRUE; - else - result = FALSE; - - /* test the cached elements */ - - for(l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) { - MatcherProp * matcher = (MatcherProp *) l->data; - - switch(matcher->criteria) { - case MATCHING_ALL: - case MATCHING_UNREAD: - case MATCHING_NOT_UNREAD: - case MATCHING_NEW: - case MATCHING_NOT_NEW: - case MATCHING_MARKED: - case MATCHING_NOT_MARKED: - case MATCHING_DELETED: - case MATCHING_NOT_DELETED: - case MATCHING_REPLIED: - case MATCHING_NOT_REPLIED: - case MATCHING_FORWARDED: - case MATCHING_NOT_FORWARDED: - case MATCHING_SUBJECT: - case MATCHING_NOT_SUBJECT: - case MATCHING_FROM: - case MATCHING_NOT_FROM: - case MATCHING_TO: - case MATCHING_NOT_TO: - case MATCHING_CC: - case MATCHING_NOT_CC: - case MATCHING_TO_OR_CC: - case MATCHING_NOT_TO_AND_NOT_CC: - case MATCHING_AGE_GREATER: - case MATCHING_AGE_LOWER: - case MATCHING_NEWSGROUPS: - case MATCHING_NOT_NEWSGROUPS: - case MATCHING_INREPLYTO: - case MATCHING_NOT_INREPLYTO: - case MATCHING_REFERENCES: - case MATCHING_NOT_REFERENCES: - case MATCHING_SCORE_GREATER: - case MATCHING_SCORE_LOWER: - case MATCHING_EXECUTE: - case MATCHING_NOT_EXECUTE: - if (matcherprop_match(matcher, info)) { - if (!matchers->bool_and) { - return TRUE; - } - } - else { - if (matchers->bool_and) { - return FALSE; - } - } - } - } - - /* test the condition on the file */ - - if (matcherlist_match_file(matchers, info, result)) { - if (!matchers->bool_and) - return TRUE; - } - else { - if (matchers->bool_and) - return FALSE; - } - - return result; -} - -#if 0 -static void matcherprop_print(MatcherProp * matcher) -{ - int i; - - if (matcher == NULL) { - printf("no matcher\n"); - return; - } - - switch (matcher->matchtype) { - case MATCHING_MATCH: - printf("match\n"); - break; - case MATCHING_REGEXP: - printf("regexp\n"); - break; - case MATCHING_MATCHCASE: - printf("matchcase\n"); - break; - case MATCHING_REGEXPCASE: - printf("regexpcase\n"); - break; - } - - for(i = 0 ; i < (int) (sizeof(matchparser_tab) / sizeof(MatchParser)) ; - i++) { - if (matchparser_tab[i].id == matcher->criteria) - printf("%s\n", matchparser_tab[i].str); - } - - if (matcher->expr) - printf("expr : %s\n", matcher->expr); - - printf("age: %i\n", matcher->value; - - printf("compiled : %s\n", matcher->preg != NULL ? "yes" : "no"); - printf("error: %i\n", matcher->error); -} -#endif - -gchar * matcherprop_to_string(MatcherProp * matcher) -{ - gchar * matcher_str = NULL; - gchar * criteria_str; - gchar * matchtype_str; - int i; - gchar * p; - gint count; - gchar * expr_str; - gchar * out; - - criteria_str = NULL; - for(i = 0 ; i < (int) (sizeof(matchparser_tab) / sizeof(MatchParser)) ; - i++) { - if (matchparser_tab[i].id == matcher->criteria) - criteria_str = matchparser_tab[i].str; - } - if (criteria_str == NULL) - return NULL; - - switch(matcher->criteria) { - case MATCHING_AGE_GREATER: - case MATCHING_AGE_LOWER: - case MATCHING_SCORE_GREATER: - case MATCHING_SCORE_LOWER: - return g_strdup_printf("%s %i", criteria_str, matcher->value); - break; - case MATCHING_ALL: - case MATCHING_UNREAD: - case MATCHING_NOT_UNREAD: - case MATCHING_NEW: - case MATCHING_NOT_NEW: - case MATCHING_MARKED: - case MATCHING_NOT_MARKED: - case MATCHING_DELETED: - case MATCHING_NOT_DELETED: - case MATCHING_REPLIED: - case MATCHING_NOT_REPLIED: - case MATCHING_FORWARDED: - case MATCHING_NOT_FORWARDED: - return g_strdup(criteria_str); - } - - matchtype_str = NULL; - for(i = 0 ; i < (int) (sizeof(matchparser_tab) / sizeof(MatchParser)) ; - i++) { - if (matchparser_tab[i].id == matcher->matchtype) - matchtype_str = matchparser_tab[i].str; - } - - if (matchtype_str == NULL) - return NULL; - - switch (matcher->matchtype) { - case MATCHING_MATCH: - case MATCHING_MATCHCASE: - count = 0; - for(p = matcher->expr; *p != 0 ; p++) - if (*p == '\"') count ++; - - expr_str = g_new(char, strlen(matcher->expr) + count + 1); - - for(p = matcher->expr, out = expr_str ; *p != 0 ; p++, out++) { - if (*p == '\"') { - *out = '\\'; out++; - *out = '\"'; - } - else - *out = *p; - } - * out = '\0'; - - if (matcher->header) - matcher_str = - g_strdup_printf("%s \"%s\" %s \"%s\"", - criteria_str, matcher->header, - matchtype_str, expr_str); - else - matcher_str = - g_strdup_printf("%s %s \"%s\"", criteria_str, - matchtype_str, expr_str); - - g_free(expr_str); - - break; - - case MATCHING_REGEXP: - case MATCHING_REGEXPCASE: - - if (matcher->header) - matcher_str = - g_strdup_printf("%s \"%s\" %s /%s/", - criteria_str, matcher->header, - matchtype_str, matcher->expr); - else - matcher_str = - g_strdup_printf("%s %s /%s/", criteria_str, - matchtype_str, matcher->expr); - - break; - } - - return matcher_str; -} - -gchar * matcherlist_to_string(MatcherList * matchers) -{ - gint count; - gchar ** vstr; - GSList * l; - gchar ** cur_str; - gchar * result; - - count = g_slist_length(matchers->matchers); - vstr = g_new(gchar *, count + 1); - - for (l = matchers->matchers, cur_str = vstr ; l != NULL ; - l = g_slist_next(l), cur_str ++) { - *cur_str = matcherprop_to_string((MatcherProp *) l->data); - if (*cur_str == NULL) - break; - } - *cur_str = NULL; - - if (matchers->bool_and) - result = g_strjoinv(" & ", vstr); - else - result = g_strjoinv(" | ", vstr); - - for(cur_str = vstr ; *cur_str != NULL ; cur_str ++) - g_free(*cur_str); - g_free(vstr); - - return result; -} - -static inline gint strlen_with_check(const gchar *expr, gint fline, const gchar *str) -{ - if (str) - return strlen(str); - else { - debug_print("%s(%d) - invalid string %s\n", __FILE__, fline, expr); - return 0; - } -} - -#define STRLEN_WITH_CHECK(expr) \ - strlen_with_check(#expr, __LINE__, expr) - -gchar * matching_build_command(gchar * cmd, MsgInfo * info) -{ - gchar * s = cmd; - gchar * filename = NULL; - gchar * processed_cmd; - gchar * p; - gint size; - - matcher_unescape_str(cmd); - - size = strlen(cmd) + 1; - while (*s != '\0') { - if (*s == '%') { - s++; - switch (*s) { - case '%': - size -= 1; - break; - case 's': /* subject */ - size += STRLEN_WITH_CHECK(info->subject) - 2; - break; - case 'f': /* from */ - size += STRLEN_WITH_CHECK(info->from) - 2; - break; - case 't': /* to */ - size += STRLEN_WITH_CHECK(info->to) - 2; - break; - case 'c': /* cc */ - size += STRLEN_WITH_CHECK(info->cc) - 2; - break; - case 'd': /* date */ - size += STRLEN_WITH_CHECK(info->date) - 2; - break; - case 'i': /* message-id */ - size += STRLEN_WITH_CHECK(info->msgid) - 2; - break; - case 'n': /* newsgroups */ - size += STRLEN_WITH_CHECK(info->newsgroups) - 2; - break; - case 'r': /* references */ - size += STRLEN_WITH_CHECK(info->references) - 2; - break; - case 'F': /* file */ - if (MSG_IS_FILTERING(info->flags)) - filename = g_strdup(info->folder); - else - filename = folder_item_fetch_msg(info->folder, info->msgnum); - - if (filename == NULL) { - debug_print(_("%s(%d) - filename is not set"), __FILE__, __LINE__); - return NULL; - } - else - size += strlen(filename) - 2; - break; - } - s++; - } - else s++; - } - - processed_cmd = g_new0(gchar, size); - s = cmd; - p = processed_cmd; - - while (*s != '\0') { - if (*s == '%') { - s++; - switch (*s) { - case '%': - *p = '%'; - p++; - break; - case 's': /* subject */ - if (info->subject != NULL) - strcpy(p, info->subject); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'f': /* from */ - if (info->from != NULL) - strcpy(p, info->from); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 't': /* to */ - if (info->to != NULL) - strcpy(p, info->to); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'c': /* cc */ - if (info->cc != NULL) - strcpy(p, info->cc); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'd': /* date */ - if (info->date != NULL) - strcpy(p, info->date); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'i': /* message-id */ - if (info->msgid != NULL) - strcpy(p, info->msgid); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'n': /* newsgroups */ - if (info->newsgroups != NULL) - strcpy(p, info->newsgroups); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'r': /* references */ - if (info->references != NULL) - strcpy(p, info->references); - else - strcpy(p, "(none)"); - p += strlen(p); - break; - case 'F': /* file */ - strcpy(p, filename); - p += strlen(p); - break; - default: - *p = '%'; - p++; - *p = *s; - p++; - break; - } - s++; - } - else { - *p = *s; - p++; - s++; - } - } - - debug_print("*** exec string \"%s\"\n", processed_cmd); - - g_free(filename); - return processed_cmd; -} - - -/* ************************************************************ */ - -/* -static void matcher_parse (gchar * str) -{ - matcher_parser_scan_string(str); - matcher_parserparse(); -} -*/ diff --git a/src/matcher.h b/src/matcher.h deleted file mode 100644 index 54d253e21..000000000 --- a/src/matcher.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef MATCHER_H - -#define MATCHER_H - -#include <sys/types.h> -#include <regex.h> -#include <glib.h> -#include "procmsg.h" - -enum { - /* msginfo flags */ - MATCHING_ALL, - MATCHING_UNREAD, - MATCHING_NOT_UNREAD, - MATCHING_NEW, - MATCHING_NOT_NEW, - MATCHING_MARKED, - MATCHING_NOT_MARKED, - MATCHING_DELETED, - MATCHING_NOT_DELETED, - MATCHING_REPLIED, - MATCHING_NOT_REPLIED, - MATCHING_FORWARDED, - MATCHING_NOT_FORWARDED, - - /* msginfo headers */ - MATCHING_SUBJECT, - MATCHING_NOT_SUBJECT, - MATCHING_FROM, - MATCHING_NOT_FROM, - MATCHING_TO, - MATCHING_NOT_TO, - MATCHING_CC, - MATCHING_NOT_CC, - MATCHING_TO_OR_CC, - MATCHING_NOT_TO_AND_NOT_CC, - MATCHING_AGE_GREATER, - MATCHING_AGE_LOWER, - MATCHING_NEWSGROUPS, - MATCHING_NOT_NEWSGROUPS, - MATCHING_INREPLYTO, - MATCHING_NOT_INREPLYTO, - MATCHING_REFERENCES, - MATCHING_NOT_REFERENCES, - MATCHING_SCORE_GREATER, - MATCHING_SCORE_LOWER, - - /* file content */ - MATCHING_HEADER, - MATCHING_NOT_HEADER, - MATCHING_MESSAGE, - MATCHING_NOT_MESSAGE, - MATCHING_HEADERS_PART, - MATCHING_NOT_HEADERS_PART, - MATCHING_BODY_PART, - MATCHING_NOT_BODY_PART, - MATCHING_EXECUTE, - MATCHING_NOT_EXECUTE, - - /* scoring */ - MATCHING_SCORE, - - /* filtering */ - MATCHING_ACTION_MOVE, - MATCHING_ACTION_COPY, - MATCHING_ACTION_DELETE, - MATCHING_ACTION_MARK, - MATCHING_ACTION_MARK_AS_READ, - MATCHING_ACTION_UNMARK, - MATCHING_ACTION_MARK_AS_UNREAD, - MATCHING_ACTION_FORWARD, - MATCHING_ACTION_FORWARD_AS_ATTACHMENT, - MATCHING_ACTION_COLOR, - /* MATCHING_ACTION_EXECUTE, */ - - MATCHING_MATCH, - MATCHING_REGEXP, - MATCHING_MATCHCASE, - MATCHING_REGEXPCASE -}; - -struct _MatcherProp { - int matchtype; - int criteria; - gchar * header; - gchar * expr; - int value; - regex_t * preg; - int error; - gboolean result; -}; - -typedef struct _MatcherProp MatcherProp; - -struct _MatcherList { - GSList * matchers; - gboolean bool_and; -}; - -typedef struct _MatcherList MatcherList; - -gchar * get_matchparser_tab_str(gint id); -MatcherProp * matcherprop_new(gint criteria, gchar * header, - gint matchtype, gchar * expr, - int age); -void matcherprop_free(MatcherProp * prop); -MatcherProp * matcherprop_parse(gchar ** str); - -gboolean matcherprop_match(MatcherProp * prop, MsgInfo * info); - -MatcherList * matcherlist_new(GSList * matchers, gboolean bool_and); -void matcherlist_free(MatcherList * cond); -MatcherList * matcherlist_parse(gchar ** str); - -gboolean matcherlist_match(MatcherList * cond, MsgInfo * info); - -gint matcher_parse_keyword(gchar ** str); -gint matcher_parse_number(gchar ** str); -gboolean matcher_parse_boolean_op(gchar ** str); -gchar * matcher_parse_regexp(gchar ** str); -gchar * matcher_parse_str(gchar ** str); -gchar * matcher_unescape_str(gchar *str); -gchar * matcherprop_to_string(MatcherProp * matcher); -gchar * matcherlist_to_string(MatcherList * matchers); -gchar * matching_build_command(gchar * cmd, MsgInfo * info); - -#endif diff --git a/src/matcher_parser.h b/src/matcher_parser.h deleted file mode 100644 index 85b4facfd..000000000 --- a/src/matcher_parser.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef MATCHER_PARSER_H - -#define MATCHER_PARSER_H - -#include "filtering.h" -#include "scoring.h" -#include <glib.h> - -#define MATCHER_BUF_SIZE 16384 - -enum { - MATCHTYPE_MATCH, - MATCHTYPE_MATCHCASE, - MATCHTYPE_REGEXP, - MATCHTYPE_REGEXPCASE -}; - -enum { -MATCHCRITERIA_ALL, -MATCHCRITERIA_UNREAD, MATCHCRITERIA_NOT_UNREAD, -MATCHCRITERIA_NEW, MATCHCRITERIA_NOT_NEW, -MATCHCRITERIA_MARKED, MATCHCRITERIA_NOT_MARKED, -MATCHCRITERIA_DELETED, MATCHCRITERIA_NOT_DELETED, -MATCHCRITERIA_REPLIED, MATCHCRITERIA_NOT_REPLIED, -MATCHCRITERIA_FORWARDED, MATCHCRITERIA_NOT_FORWARDED, -MATCHCRITERIA_SUBJECT, MATCHCRITERIA_NOT_SUBJECT, -MATCHCRITERIA_FROM, MATCHCRITERIA_NOT_FROM, -MATCHCRITERIA_TO, MATCHCRITERIA_NOT_TO, -MATCHCRITERIA_CC, MATCHCRITERIA_NOT_CC, -MATCHCRITERIA_TO_OR_CC, MATCHCRITERIA_NOT_TO_AND_NOT_CC, -MATCHCRITERIA_AGE_GREATER, MATCHCRITERIA_AGE_LOWER, -MATCHCRITERIA_NEWSGROUPS, MATCHCRITERIA_NOT_NEWSGROUPS, -MATCHCRITERIA_INREPLYTO, MATCHCRITERIA_NOT_INREPLYTO, -MATCHCRITERIA_REFERENCES, MATCHCRITERIA_NOT_REFERENCES, -MATCHCRITERIA_SCORE_GREATER, MATCHCRITERIA_SCORE_LOWER, -MATCHCRITERIA_HEADER, MATCHCRITERIA_NOT_HEADER, -MATCHCRITERIA_HEADERS_PART, MATCHCRITERIA_NOT_HEADERS_PART, -MATCHCRITERIA_MESSAGE, MATCHCRITERIA_NOT_MESSAGE, -MATCHCRITERIA_BODY_PART, MATCHCRITERIA_NOT_BODY_PART, -MATCHCRITERIA_EXECUTE, MATCHCRITERIA_NOT_EXECUTE -}; - -enum { - MATCHACTION_SCORE, - MATCHACTION_EXECUTE, - MATCHACTION_MOVE, - MATCHACTION_COPY, - MATCHACTION_DELETE, - MATCHACTION_MARK, - MATCHACTION_UNMARK, - MATCHACTION_MARK_AS_READ, - MATCHACTION_MARK_AS_UNREAD, - MATCHACTION_FORWARD, - MATCHACTION_FORWARD_AS_ATTACHMENT -}; - -enum { - MATCHERBOOL_OR, - MATCHERBOOL_AND, -}; - -extern FILE *matcher_parserin; -extern int matcher_parserlineno; - -int matcher_parserparse(void); -/* void matcher_parser_init();*/ -MatcherList * matcher_parser_get_cond(gchar * str); -FilteringProp * matcher_parser_get_filtering(gchar * str); -ScoringProp * matcher_parser_get_scoring(gchar * str); - -#endif diff --git a/src/matcher_parser_lex.h b/src/matcher_parser_lex.h deleted file mode 100644 index 4c3dadedb..000000000 --- a/src/matcher_parser_lex.h +++ /dev/null @@ -1,47 +0,0 @@ -/* The following defines shamelessly stolen from GDB sources... */ - -/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc), - as well as gratuitiously global symbol names, so we can have multiple - yacc generated parsers in gdb. Note that these are only the variables - produced by yacc. If other parser generators (bison, byacc, etc) produce - additional global names that conflict at link time, then those parser - generators need to be fixed instead of adding those names to this list. */ - -#define yymaxdepth matcher_parsermaxdepth -#define yyparse matcher_parserparse -#define yylex matcher_parserlex -#define yyerror matcher_parsererror -#define yylval matcher_parserlval -#define yychar matcher_parserchar -#define yydebug matcher_parserdebug -#define yypact matcher_parserpact -#define yyr1 matcher_parserr1 -#define yyr2 matcher_parserr2 -#define yydef matcher_parserdef -#define yychk matcher_parserchk -#define yypgo matcher_parserpgo -#define yyact matcher_parseract -#define yyexca matcher_parserexca -#define yyerrflag matcher_parsererrflag -#define yynerrs matcher_parsernerrs -#define yyps matcher_parserps -#define yypv matcher_parserpv -#define yys matcher_parsers -#define yy_yys matcher_parseryys -#define yystate matcher_parserstate -#define yytmp matcher_parsertmp -#define yyv matcher_parserv -#define yy_yyv matcher_parseryyv -#define yyval matcher_parserval -#define yylloc matcher_parserlloc -#define yyreds matcher_parserreds /* With YYDEBUG defined */ -#define yytoks matcher_parsertoks /* With YYDEBUG defined */ -#define yylhs matcher_parseryylhs -#define yylen matcher_parseryylen -#define yydefred matcher_parseryydefred -#define yydgoto matcher_parseryydgoto -#define yysindex matcher_parseryysindex -#define yyrindex matcher_parseryyrindex -#define yygindex matcher_parseryygindex -#define yytable matcher_parseryytable -#define yycheck matcher_parseryycheck diff --git a/src/matcher_parser_lex.l b/src/matcher_parser_lex.l deleted file mode 100644 index f869273f7..000000000 --- a/src/matcher_parser_lex.l +++ /dev/null @@ -1,118 +0,0 @@ -%{ -#include "matcher_parser_lex.h" -#include "matcher_parser_parse.h" -#include <glib.h> - -#define MAX_STR_CONST 512 - -char string_buf[MAX_STR_CONST]; -char * string_buf_ptr; - -static void add_char(char ch) -{ - if (string_buf_ptr - string_buf < sizeof(string_buf)) - *string_buf_ptr++ = ch; -} -%} - -%option prefix="matcher_parser" -%option outfile="lex.yy.c" -%option yylineno - -%x string -%x section - -%% - -"all" return MATCHER_ALL; -"unread" return MATCHER_UNREAD; -"~unread" return MATCHER_NOT_UNREAD; -"new" return MATCHER_NEW; -"~new" return MATCHER_NOT_NEW; -"marked" return MATCHER_MARKED; -"~marked" return MATCHER_NOT_MARKED; -"deleted" return MATCHER_DELETED; -"~deleted" return MATCHER_NOT_DELETED; -"replied" return MATCHER_REPLIED; -"~replied" return MATCHER_NOT_REPLIED; -"forwarded" return MATCHER_FORWARDED; -"~forwarded" return MATCHER_NOT_FORWARDED; -"subject" return MATCHER_SUBJECT; -"~subject" return MATCHER_NOT_SUBJECT; -"from" return MATCHER_FROM; -"~from" return MATCHER_NOT_FROM; -"to" return MATCHER_TO; -"~to" return MATCHER_NOT_TO; -"cc" return MATCHER_CC; -"~cc" return MATCHER_NOT_CC; -"to_or_cc" return MATCHER_TO_OR_CC; -"~to_or_cc" return MATCHER_NOT_TO_AND_NOT_CC; -"age_greater" return MATCHER_AGE_GREATER; -"age_lower" return MATCHER_AGE_LOWER; -"newsgroups" return MATCHER_NEWSGROUPS; -"~newsgroups" return MATCHER_NOT_NEWSGROUPS; -"inreplyto" return MATCHER_INREPLYTO; -"~inreplyto" return MATCHER_NOT_INREPLYTO; -"references" return MATCHER_REFERENCES; -"~references" return MATCHER_NOT_REFERENCES; -"score_greater" return MATCHER_SCORE_GREATER; -"score_lower" return MATCHER_SCORE_LOWER; -"header" return MATCHER_HEADER; -"~header" return MATCHER_NOT_HEADER; -"headers_part" return MATCHER_HEADERS_PART; -"~headers_part" return MATCHER_NOT_HEADERS_PART; -"message" return MATCHER_MESSAGE; -"~message" return MATCHER_NOT_MESSAGE; -"body_part" return MATCHER_BODY_PART; -"~body_part" return MATCHER_NOT_BODY_PART; -"execute" return MATCHER_EXECUTE; -"~execute" return MATCHER_NOT_EXECUTE; -"matchcase" return MATCHER_MATCHCASE; -"match" return MATCHER_MATCH; -"regexpcase" return MATCHER_REGEXPCASE; -"regexp" return MATCHER_REGEXP; -"score" return MATCHER_SCORE; -"move" return MATCHER_MOVE; -"copy" return MATCHER_COPY; -"delete" return MATCHER_DELETE; -"mark" return MATCHER_MARK; -"unmark" return MATCHER_UNMARK; -"mark_as_read" return MATCHER_MARK_AS_READ; -"mark_as_unread" return MATCHER_MARK_AS_UNREAD; -"forward" return MATCHER_FORWARD; -"forward_as_attachment" return MATCHER_FORWARD_AS_ATTACHMENT; -[ \t]+ -"\n" return MATCHER_EOL; -"&" return MATCHER_AND; -"|" return MATCHER_OR; -\" { - BEGIN(string); - string_buf_ptr = string_buf; - } -<string>\\n add_char('\n'); -<string>\\t add_char('\t'); -<string>\\r add_char('\r'); -<string>\\b add_char('\b'); -<string>\\f add_char('\f'); -<string>\\. add_char(yytext[1]); -<string>\" { - BEGIN(0); - *string_buf_ptr = '\0'; - yylval.str = string_buf; - return MATCHER_STRING; - } -<string>. { -add_char(yytext[0]); -} -\[[^\[\]]*\] { - BEGIN(0); - yylval.str = yytext + 1; - yytext[strlen(yytext) - 1] = '\0'; - return MATCHER_SECTION; - } -[-+]?[0-9]+ { - yylval.str = yytext; - return MATCHER_INTEGER; - } - -%% diff --git a/src/matcher_parser_parse.y b/src/matcher_parser_parse.y deleted file mode 100644 index 3dd4f9f22..000000000 --- a/src/matcher_parser_parse.y +++ /dev/null @@ -1,743 +0,0 @@ -%{ -#include "filtering.h" -#include "scoring.h" -#include "matcher.h" -#include "matcher_parser.h" -#include "matcher_parser_lex.h" -#include "intl.h" -#include <glib.h> - -static gint error = 0; -static gint bool_op = 0; -static gint match_type = 0; -static gchar * header = NULL; - -static MatcherProp * prop; - -static GSList * matchers_list = NULL; - -static MatcherList * cond; -static gint score = 0; -static FilteringAction * action = NULL; - -static FilteringProp * filtering; -static ScoringProp * scoring = NULL; - -static GSList ** prefs_scoring = NULL; -static GSList ** prefs_filtering = NULL; - -static int matcher_parser_dialog = 0; - -FilteringProp * matcher_parser_get_filtering(gchar * str) -{ - void * bufstate; - - matcher_parserlineno = 1; - matcher_parser_dialog = 1; - bufstate = matcher_parser_scan_string(str); - matcher_parserparse(); - matcher_parser_dialog = 0; - matcher_parser_delete_buffer(bufstate); - return filtering; -} - -ScoringProp * matcher_parser_get_scoring(gchar * str) -{ - void * bufstate; - - matcher_parserlineno = 1; - matcher_parser_dialog = 1; - bufstate = matcher_parser_scan_string(str); - matcher_parserparse(); - matcher_parser_dialog = 0; - matcher_parser_delete_buffer(bufstate); - return scoring; -} - -MatcherList * matcher_parser_get_cond(gchar * str) -{ - void * bufstate; - - matcher_parserlineno = 1; - matcher_parser_dialog = 1; - bufstate = matcher_parser_scan_string(str); - matcher_parserparse(); - matcher_parser_dialog = 0; - matcher_parser_delete_buffer(bufstate); - return cond; -} - -MatcherProp * matcher_parser_get_prop(gchar * str) -{ - MatcherList * list; - MatcherProp * prop; - - matcher_parserlineno = 1; - list = matcher_parser_get_cond(str); - if (list == NULL) - return NULL; - - if (list->matchers == NULL) - return NULL; - - if (list->matchers->next != NULL) - return NULL; - - prop = list->matchers->data; - - g_slist_free(list->matchers); - g_free(list); -} - -void matcher_parsererror(char * str) -{ - GSList * l; - - if (matchers_list) { - for(l = matchers_list ; l != NULL ; - l = g_slist_next(l)) - matcherprop_free((MatcherProp *) - l->data); - g_slist_free(matchers_list); - matchers_list = NULL; - } - - g_warning(_("scoring / filtering parsing: %i: %s\n"), - matcher_parserlineno, str); - error = 1; -} - -int matcher_parserwrap(void) -{ - return 1; -} -%} - -%union { - char * str; - int value; -} - -%token MATCHER_ALL MATCHER_UNREAD MATCHER_NOT_UNREAD -%token MATCHER_NEW MATCHER_NOT_NEW MATCHER_MARKED -%token MATCHER_NOT_MARKED MATCHER_DELETED MATCHER_NOT_DELETED -%token MATCHER_REPLIED MATCHER_NOT_REPLIED MATCHER_FORWARDED -%token MATCHER_NOT_FORWARDED MATCHER_SUBJECT MATCHER_NOT_SUBJECT -%token MATCHER_FROM MATCHER_NOT_FROM MATCHER_TO MATCHER_NOT_TO -%token MATCHER_CC MATCHER_NOT_CC MATCHER_TO_OR_CC MATCHER_NOT_TO_AND_NOT_CC -%token MATCHER_AGE_GREATER MATCHER_AGE_LOWER MATCHER_NEWSGROUPS -%token MATCHER_NOT_NEWSGROUPS MATCHER_INREPLYTO MATCHER_NOT_INREPLYTO -%token MATCHER_REFERENCES MATCHER_NOT_REFERENCES MATCHER_SCORE_GREATER -%token MATCHER_SCORE_LOWER MATCHER_HEADER MATCHER_NOT_HEADER -%token MATCHER_HEADERS_PART MATCHER_NOT_HEADERS_PART MATCHER_MESSAGE -%token MATCHER_NOT_MESSAGE MATCHER_BODY_PART MATCHER_NOT_BODY_PART -%token MATCHER_EXECUTE MATCHER_NOT_EXECUTE MATCHER_MATCHCASE MATCHER_MATCH -%token MATCHER_REGEXPCASE MATCHER_REGEXP MATCHER_SCORE MATCHER_MOVE -%token MATCHER_COPY MATCHER_DELETE MATCHER_MARK MATCHER_UNMARK -%token MATCHER_MARK_AS_READ MATCHER_MARK_AS_UNREAD MATCHER_FORWARD -%token MATCHER_FORWARD_AS_ATTACHMENT MATCHER_EOL MATCHER_STRING -%token MATCHER_OR MATCHER_AND - -%start file - -%token <str> MATCHER_STRING -%token <str> MATCHER_SECTION -%token <value> MATCHER_INTEGER - -%% - -file: -{ - if (!matcher_parser_dialog) { - prefs_scoring = &global_scoring; - prefs_filtering = &global_filtering; - } -} -file_line_list; - -file_line_list: -file_line -file_line_list -| file_line -; - -file_line: -section_notification -| instruction -; - -section_notification: -MATCHER_SECTION MATCHER_EOL -{ - gchar * folder = $1; - FolderItem * item = NULL; - - if (!matcher_parser_dialog) { - item = folder_find_item_from_identifier(folder); - if (item == NULL) { - prefs_scoring = &global_scoring; - prefs_filtering = &global_scoring; - } - else { - prefs_scoring = &item->prefs->scoring; - prefs_filtering = &item->prefs->processing; - } - } -} -; - -instruction: -condition end_instr_opt -| MATCHER_EOL -; - -end_instr_opt: -filtering_or_scoring MATCHER_EOL -| -{ - if (!matcher_parser_dialog) { - yyerror("parse error"); - return 1; - } -} -; - -filtering_or_scoring: -filtering_action -{ - filtering = filteringprop_new(cond, action); - cond = NULL; - action = NULL; - if (!matcher_parser_dialog) { - * prefs_filtering = g_slist_append(* prefs_filtering, - filtering); - filtering = NULL; - } -} -| scoring_rule -{ - scoring = scoringprop_new(cond, score); - cond = NULL; - score = 0; - if (!matcher_parser_dialog) { - * prefs_scoring = g_slist_append(* prefs_scoring, scoring); - scoring = NULL; - } -} -; - -match_type: -MATCHER_MATCHCASE -{ - match_type = MATCHTYPE_MATCHCASE; -} -| MATCHER_MATCH -{ - match_type = MATCHTYPE_MATCH; -} -| MATCHER_REGEXPCASE -{ - match_type = MATCHTYPE_REGEXPCASE; -} -| MATCHER_REGEXP -{ - match_type = MATCHTYPE_REGEXP; -} -; - -condition: -condition_list -{ - cond = matcherlist_new(matchers_list, (bool_op == MATCHERBOOL_AND)); - matchers_list = NULL; -} -; - -condition_list: -condition_list bool_op one_condition -{ - matchers_list = g_slist_append(matchers_list, prop); -} -| one_condition -{ - matchers_list = NULL; - matchers_list = g_slist_append(matchers_list, prop); -} -; - -bool_op: -MATCHER_AND -{ - bool_op = MATCHERBOOL_AND; -} -| MATCHER_OR -{ - bool_op = MATCHERBOOL_OR; -} -; - -one_condition: -MATCHER_ALL -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_ALL; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_UNREAD -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_UNREAD; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_NOT_UNREAD -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_NOT_UNREAD; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_NEW -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_NEW; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_NOT_NEW -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_NOT_NEW; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_MARKED -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_MARKED; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_NOT_MARKED -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_NOT_MARKED; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_DELETED -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_DELETED; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_NOT_DELETED -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_NOT_DELETED; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_REPLIED -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_REPLIED; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_NOT_REPLIED -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_NOT_REPLIED; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_FORWARDED -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_FORWARDED; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_NOT_FORWARDED -{ - gint criteria = 0; - - criteria = MATCHCRITERIA_NOT_FORWARDED; - prop = matcherprop_new(criteria, NULL, 0, NULL, 0); -} -| MATCHER_SUBJECT match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_SUBJECT; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_SUBJECT match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_SUBJECT; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_FROM match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_FROM; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_FROM match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_FROM; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_TO match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_TO; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_TO match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_TO; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_CC match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_CC; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_CC match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_CC; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_TO_OR_CC match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_TO_OR_CC; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_TO_AND_NOT_CC match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_TO_AND_NOT_CC; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_AGE_GREATER MATCHER_INTEGER -{ - gint criteria = 0; - gint value = 0; - - criteria = MATCHCRITERIA_AGE_GREATER; - value = atoi($2); - prop = matcherprop_new(criteria, NULL, 0, NULL, value); -} -| MATCHER_AGE_LOWER MATCHER_INTEGER -{ - gint criteria = 0; - gint value = 0; - - criteria = MATCHCRITERIA_AGE_LOWER; - value = atoi($2); - prop = matcherprop_new(criteria, NULL, 0, NULL, value); -} -| MATCHER_NEWSGROUPS match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NEWSGROUPS; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_NEWSGROUPS match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_NEWSGROUPS; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_INREPLYTO match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_INREPLYTO; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_INREPLYTO match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_INREPLYTO; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_REFERENCES match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_REFERENCES; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_REFERENCES match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_REFERENCES; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_SCORE_GREATER MATCHER_INTEGER -{ - gint criteria = 0; - gint value = 0; - - criteria = MATCHCRITERIA_SCORE_GREATER; - value = atoi($2); - prop = matcherprop_new(criteria, NULL, 0, NULL, value); -} -| MATCHER_SCORE_LOWER MATCHER_INTEGER -{ - gint criteria = 0; - gint value = 0; - - criteria = MATCHCRITERIA_SCORE_LOWER; - value = atoi($2); - prop = matcherprop_new(criteria, NULL, 0, NULL, value); -} -| MATCHER_HEADER MATCHER_STRING -{ - header = g_strdup($2); -} match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_HEADER; - expr = $2; - prop = matcherprop_new(criteria, header, match_type, expr, 0); - g_free(header); -} -| MATCHER_NOT_HEADER MATCHER_STRING -{ - header = g_strdup($2); -} match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_HEADER; - expr = $2; - prop = matcherprop_new(criteria, header, match_type, expr, 0); - g_free(header); -} -| MATCHER_HEADERS_PART match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_HEADERS_PART; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_HEADERS_PART match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_HEADERS_PART; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_MESSAGE match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_MESSAGE; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_MESSAGE match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_MESSAGE; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_BODY_PART match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_BODY_PART; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_NOT_BODY_PART match_type MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_BODY_PART; - expr = $3; - prop = matcherprop_new(criteria, NULL, match_type, expr, 0); -} -| MATCHER_EXECUTE MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_EXECUTE; - expr = $2; - prop = matcherprop_new(criteria, NULL, 0, expr, 0); -} -| MATCHER_NOT_EXECUTE MATCHER_STRING -{ - gint criteria = 0; - gchar * expr = NULL; - - criteria = MATCHCRITERIA_NOT_EXECUTE; - expr = $2; - prop = matcherprop_new(criteria, NULL, 0, expr, 0); -} -; - -filtering_action: -MATCHER_EXECUTE MATCHER_STRING -{ - gchar * cmd = NULL; - gint action_type = 0; - - action_type = MATCHACTION_EXECUTE; - cmd = $2; - action = filteringaction_new(action_type, 0, cmd); -} -| MATCHER_MOVE MATCHER_STRING -{ - gchar * destination = NULL; - gint action_type = 0; - - action_type = MATCHACTION_MOVE; - destination = $2; - action = filteringaction_new(action_type, 0, destination); -} -| MATCHER_COPY MATCHER_STRING -{ - gchar * destination = NULL; - gint action_type = 0; - - action_type = MATCHACTION_COPY; - destination = $2; - action = filteringaction_new(action_type, 0, destination); -} -| MATCHER_DELETE -{ - gint action_type = 0; - - action_type = MATCHACTION_DELETE; - action = filteringaction_new(action_type, 0, NULL); -} -| MATCHER_MARK -{ - gint action_type = 0; - - action_type = MATCHACTION_MARK; - action = filteringaction_new(action_type, 0, NULL); -} -| MATCHER_UNMARK -{ - gint action_type = 0; - - action_type = MATCHACTION_UNMARK; - action = filteringaction_new(action_type, 0, NULL); -} -| MATCHER_MARK_AS_READ -{ - gint action_type = 0; - - action_type = MATCHACTION_MARK_AS_READ; - action = filteringaction_new(action_type, 0, NULL); -} -| MATCHER_MARK_AS_UNREAD -{ - gint action_type = 0; - - action_type = MATCHACTION_MARK_AS_UNREAD; - action = filteringaction_new(action_type, 0, NULL); -} -| MATCHER_FORWARD MATCHER_INTEGER MATCHER_STRING -{ - gchar * destination = NULL; - gint action_type = 0; - gint account_id = 0; - - action_type = MATCHACTION_FORWARD; - account_id = $2; - destination = $3; - action = filteringaction_new(action_type, account_id, destination); -} -| MATCHER_FORWARD_AS_ATTACHMENT MATCHER_INTEGER MATCHER_STRING -{ - gchar * destination = NULL; - gint action_type = 0; - gint account_id = 0; - - action_type = MATCHACTION_FORWARD_AS_ATTACHMENT; - account_id = $2; - destination = $3; - action = filteringaction_new(action_type, account_id, destination); -} -; - -scoring_rule: -MATCHER_SCORE MATCHER_INTEGER -{ - score = atoi($2); -} -; diff --git a/src/mbox.c b/src/mbox.c deleted file mode 100644 index cc76d055e..000000000 --- a/src/mbox.c +++ /dev/null @@ -1,445 +0,0 @@ -/* - * 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" -#include "filtering.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; - gint msgnum; - - 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) { - if (prefs_filtering == NULL) { - /* old filtering */ - 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 { - /* new filtering */ - dropfolder = dest; - } - } else - dropfolder = dest; - - /* old filtering */ - if (prefs_filtering == NULL || folder_table == NULL) { - if ((msgnum = folder_item_add_msg(dropfolder, tmp_file, TRUE)) < 0) { - fclose(mbox_fp); - unlink(tmp_file); - return -1; - } - folder_item_scan(dropfolder); - } - else - filter_incoming_message(dropfolder, tmp_file, folder_table); - - 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_to_mbox(FolderItem *src, const gchar *mbox) -{ - GSList *mlist; - 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); - - if ((mbox_fp = fopen(mbox, "w")) == NULL) { - FILE_OP_ERROR(mbox, "fopen"); - return -1; - } - - mlist = src->folder->get_msg_list(src->folder, src, TRUE); - - for (cur = mlist; cur != NULL; cur = cur->next) { - msginfo = (MsgInfo *)cur->data; - - msg_fp = procmsg_open_message(msginfo); - if (!msg_fp) { - procmsg_msginfo_free(msginfo); - 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 deleted file mode 100644 index 3b210f0a4..000000000 --- a/src/mbox.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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_to_mbox (FolderItem *src, - const gchar *mbox); - -#endif /* __MBOX_H__ */ diff --git a/src/mbox_folder.c b/src/mbox_folder.c deleted file mode 100644 index 8c5f7ece9..000000000 --- a/src/mbox_folder.c +++ /dev/null @@ -1,2223 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2001 Hiroyuki Yamamoto & The Sylpheed Claws Team - * - * 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 <unistd.h> -#include <fcntl.h> -#include <glib.h> -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> - -#include "mbox_folder.h" -#include "folder.h" -#include "procmsg.h" -#include "procheader.h" -#include "utils.h" -#include "intl.h" - -#define MSGBUFSIZE 8192 - -static gboolean mbox_write_data(FILE * mbox_fp, FILE * new_fp, - gchar * new_filename, gint size); -static gboolean mbox_rewrite(gchar * mbox); -static gboolean mbox_purge_deleted(gchar * mbox); -static gchar * mbox_get_new_path(FolderItem * parent, gchar * name); -static gchar * mbox_get_folderitem_name(gchar * name); - - - -static gchar * mbox_folder_create_parent(const gchar * path) -{ - if (!is_file_exist(path)) { - gchar * new_path; - - new_path = g_dirname(path); - if (new_path[strlen(new_path) - 1] == G_DIR_SEPARATOR) - new_path[strlen(new_path) - 1] = '\0'; - - if (!is_dir_exist(new_path)) - make_dir_hier(new_path); - g_free(new_path); - - } -} - - -static gchar *mbox_folder_get_path(FolderItem *item) -{ - gchar *folder_path; - gchar *path; - - g_return_val_if_fail(item != NULL, NULL); - - if (item->path && item->path[0] == G_DIR_SEPARATOR) { - mbox_folder_create_parent(item->path); - return g_strdup(item->path); - } - - folder_path = g_strdup(LOCAL_FOLDER(item->folder)->rootpath); - 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(get_home_dir(), G_DIR_SEPARATOR_S, - folder_path, G_DIR_SEPARATOR_S, - item->path, NULL); - else - path = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S, - folder_path, NULL); - } - - g_free(folder_path); - - mbox_folder_create_parent(path); - - return path; -} - - -/**********************************************************/ -/* */ -/* file lock */ -/* */ -/**********************************************************/ - - -static GSList * file_lock = NULL; - -static gboolean mbox_file_lock_file(gchar * base) -{ - 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 FALSE; - } - - 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); - - return TRUE; -} - -static gboolean mbox_fcntl_lockwrite_file(FILE * fp) -{ - struct flock lck; - - lck.l_type = F_WRLCK; - lck.l_whence = 0; - lck.l_start = 0; - lck.l_len = 0; - - if (fcntl(fileno(fp), F_SETLK, &lck) < 0) - return FALSE; - else - return TRUE; -} - -static gboolean mbox_fcntl_lockread_file(FILE * fp) -{ - struct flock lck; - - lck.l_type = F_RDLCK; - lck.l_whence = 0; - lck.l_start = 0; - lck.l_len = 0; - - if (fcntl(fileno(fp), F_SETLK, &lck) < 0) - return FALSE; - else - return TRUE; -} - -static gboolean mbox_fcntl_unlock_file(FILE * fp) -{ - struct flock lck; - - lck.l_type = F_UNLCK; - lck.l_whence = 0; - lck.l_start = 0; - lck.l_len = 0; - - if (fcntl(fileno(fp), F_SETLK, &lck) < 0) - return FALSE; - else - return TRUE; -} - -static gboolean mbox_file_unlock_file(gchar * base) -{ - gchar *lockfile; - - lockfile = g_strdup_printf("%s.lock", base); - unlink(lockfile); - g_free(lockfile); - - return TRUE; -} - -static gboolean mbox_lockread_file(FILE * fp, gchar * base) -{ - gboolean result; - - result = mbox_fcntl_lockread_file(fp); - if (!result) { - if ((result = mbox_file_lock_file(base)) == TRUE) { - file_lock = g_slist_append(file_lock, g_strdup(base)); - debug_print("lockfile lock %s.\n", base); - } - else - g_warning(_("could not lock read file %s\n"), base); - } - else - debug_print("fcntl lock %s.\n", base); - - return result; -} - -static gboolean mbox_lockwrite_file(FILE * fp, gchar * base) -{ - gboolean result; - - result = mbox_fcntl_lockwrite_file(fp); - if (!result) { - if ((result = mbox_file_lock_file(base)) == TRUE) { - file_lock = g_slist_append(file_lock, g_strdup(base)); - debug_print("lockfile lock %s.\n", base); - } - else - g_warning(_("could not lock write file %s\n"), base); - } - else - debug_print("fcntl lock %s.\n", base); - - return result; -} - -static gboolean mbox_unlock_file(FILE * fp, gchar * base) -{ - gboolean result = FALSE; - GSList * l; - gboolean unlocked = FALSE; - - for(l = file_lock ; l != NULL ; l = g_slist_next(l)) { - gchar * data = l->data; - - if (strcmp(data, base) == 0) { - file_lock = g_slist_remove(file_lock, data); - g_free(data); - result = mbox_file_unlock_file(base); - unlocked = TRUE; - debug_print("lockfile unlock - %s.\n", base); - break; - } - } - - if (!unlocked) { - result = mbox_fcntl_unlock_file(fp); - debug_print("fcntl unlock - %s.\n", base); - } - - return result; -} - -/**********************************************************/ -/* */ -/* mbox parsing */ -/* */ -/**********************************************************/ - -#define MAILFILE_ERROR_NO_ERROR 0x000 -#define MAILFILE_ERROR_FILE_NOT_FOUND 0x001 -#define MAILFILE_ERROR_MEMORY 0x002 -#define MAILFILE_ERROR_MESSAGE_NOT_FOUND 0x003 - -static int mailfile_error = MAILFILE_ERROR_NO_ERROR; - -#define STATE_BEGIN 0x000 -#define STATE_TEXT_READ 0x001 -#define STATE_FROM_READ 0x002 -#define STATE_FIELD_READ 0x003 -#define STATE_END 0x004 -#define STATE_END_OF_FILE 0x005 -#define STATE_MEM_ERROR 0x006 -#define STATE_TEXT_BEGIN 0x007 - -#define STATE_MASK 0x0FF /* filter state from functions */ - -#define STATE_RESTORE_POS 0x100 /* go back while reading */ - -typedef struct _mailfile mailfile; - -struct _mailfile -{ - gint count; - gchar * filename; - GList * msg_list; -}; - -struct _message -{ - int msgnum; - int offset; - int header; - int content; - int end; - int marked; - gchar * messageid; - gchar * fromspace; - MsgFlags flags; - MsgFlags old_flags; - gboolean fetched; -}; - -#define MSG_IS_INVALID(msg) \ - ((msg).perm_flags == (msg).tmp_flags && (msg).tmp_flags == -1) - -#define MSG_SET_INVALID(msg) \ - ((msg).perm_flags = (msg).tmp_flags = -1) - -static int startFrom(char * s) -{ - return (strncmp(s, "From ", 5) == 0); -} - -static int startSpace(char * s) -{ - return ((*s == ' ') || (*s == '\t')); -} - -static int startEmpty(char * s) -{ - return (*s == '\n'); -} - -static void free_msg_list(GList * l) -{ - GList * elt = g_list_first(l); - - while (elt) - { - g_free(elt->data); - elt = g_list_next(elt); - } - - g_list_free(l); -} - - -static mailfile * mailfile_init_from_file(FILE * f, gchar * filename) -{ - int state; - GList * msg_list = NULL; - char * r = NULL; - char s[256]; - int lastpos = 0; - int former_pos = 0; - int ignore_next = 0; - int msgnum = 0; - struct _message * data = NULL; - mailfile * mf; - - state = STATE_BEGIN; - - - while (state != STATE_END_OF_FILE) { - if ((state & STATE_RESTORE_POS) == 0) { - former_pos = lastpos; - lastpos = ftell(f); - - r = fgets(s, 256, f); - - if (r != NULL && *r) - ignore_next = (s[strlen(s) - 1] != '\n'); - else - ignore_next = 0; - } - - switch(state & 0x0F) { - case STATE_BEGIN: - if (r == NULL) - state = STATE_END_OF_FILE; - else if (startFrom(s)) { - state = STATE_FROM_READ; - - data = g_new0(struct _message, 1); - if (data == NULL) { - free_msg_list(msg_list); - return NULL; - } - - msgnum ++; - data->msgnum = msgnum; - data->offset = lastpos; - data->header = lastpos; - data->end = 0; - data->content = 0; - data->messageid = NULL; - data->fromspace = NULL; - MSG_SET_INVALID(data->flags); - MSG_SET_INVALID(data->old_flags); - data->fetched = FALSE; - msg_list = g_list_append(msg_list, - (gpointer) data); - } - else - state = STATE_BEGIN; - - break; - - case STATE_TEXT_READ: - if (r == NULL) - state = STATE_END; - else if (startFrom(s)) - state = STATE_END | STATE_RESTORE_POS; - else - state = STATE_TEXT_READ; - break; - - case STATE_TEXT_BEGIN: - data->content = lastpos; - if (r == NULL) - state = STATE_END; - else if (startFrom(s)) { - state = STATE_END | STATE_RESTORE_POS; - } - else { - state = STATE_TEXT_READ; - } - break; - - case STATE_FROM_READ: - data->content = lastpos; - if (r == NULL) - state = STATE_END; - else if (startSpace(s)) - state = STATE_FROM_READ; - else if (startEmpty(s)) - state = STATE_TEXT_READ; - else - state = STATE_FIELD_READ; - break; - - case STATE_FIELD_READ: - data->content = lastpos; - if (r == NULL) - state = STATE_END; - else if (startSpace(s)) - state = STATE_FIELD_READ; - else if (startEmpty(s)) { - state = STATE_TEXT_BEGIN; - } - else - state = STATE_FIELD_READ; - break; - } - - if ((state & STATE_MASK) == STATE_END) { - state = STATE_BEGIN | (state & STATE_RESTORE_POS); - data->end = lastpos; - } - - if (ignore_next) { - do { - r = fgets(s, 256, f); - if (r == NULL || *r == '\0') - break; - } - while (s[strlen(s) - 1] != '\n'); - } - } - - mf = (mailfile *) g_new0(struct _mailfile, 1); - if (mf == NULL) { - free_msg_list(msg_list); - mailfile_error = MAILFILE_ERROR_MEMORY; - return NULL; - } - - mf->msg_list = g_list_first(msg_list); - - mf->filename = g_strdup(filename); - mf->count = msgnum; - - mailfile_error = MAILFILE_ERROR_NO_ERROR; - - return mf; -} - -static mailfile * mailfile_init(char * filename) -{ - - FILE * f; - mailfile * mf; - - f = fopen(filename, "r"); - - if (f == NULL) { - mailfile_error = MAILFILE_ERROR_FILE_NOT_FOUND; - return NULL; - } - - mbox_lockread_file(f, filename); - - mf = mailfile_init_from_file(f, filename); - - mbox_unlock_file(f, filename); - - fclose(f); - - return mf; -} - -static void mailfile_done(mailfile * f) -{ - free_msg_list(f->msg_list); - g_free(f->filename); - - g_free(f); -} - -/* -#define MAX_READ 4096 - -static char * readfile(char * filename, int offset, int max_offset) -{ - char * message; - int size; - int pos; - int max; - int bread; - FILE * handle; - - handle = fopen(filename, "r"); - - if (handle == NULL) { - mailfile_error = MAILFILE_ERROR_FILE_NOT_FOUND; - return NULL; - } - - size = max_offset - offset; - - message = (char *) malloc(size + 1); - if (message == NULL) { - fclose(handle); - mailfile_error = MAILFILE_ERROR_MEMORY; - return NULL; - } - - fseek(handle, offset, SEEK_SET); - - pos = 0; - while (pos < size) { - if ((size - pos) > MAX_READ) - max = MAX_READ; - else - max = (size - pos); - - bread = fread(message + pos, 1, max, handle); - - if (bread != -1) - pos += bread; - - if (bread < max) - break; - } - - message[pos] = 0; - - fclose(handle); - - return message; -} - -static char * mailfile_readmsg(mailfile f, int index) -{ - GList * nth; - int max_offset; - int offset; - char * message; - struct _message * msginfo; - - nth = g_list_nth(f->msg_list, index); - - if (!nth) { - mailfile_error = MAILFILE_ERROR_MESSAGE_NOT_FOUND; - return NULL; - } - - msginfo = (struct _message *)nth->data; - - offset = msginfo->offset; - max_offset = msginfo->end; - message = readfile(f->filename, offset, max_offset); - - mailfile_error = MAILFILE_ERROR_NO_ERROR; - - return message; -} - -static char * mailfile_readheader(mailfile f, int index) -{ - GList * nth; - int max_offset; - int offset; - char * message; - struct _message * msginfo; - - nth = g_list_nth(f->msg_list, index); - - if (!nth) { - mailfile_error = MAILFILE_ERROR_MESSAGE_NOT_FOUND; - return NULL; - } - - msginfo = (struct _message *)nth->data; - - offset = msginfo->offset; - max_offset = msginfo->content; - message = readfile(f->filename, offset, max_offset); - - mailfile_error = MAILFILE_ERROR_NO_ERROR; - - return message; -} - -static int mailfile_count(mailfile * f) -{ - return g_list_length(f->msg_list); -} - -static int mailfile_find_deleted(mailfile f, char * filename) -{ - FILE * handle; - - handle = fopen(filename, "r"); - - while (elt) { - struct _message m = elt->data; - n = fread(&m.deleted, sizeof(int), 1, handle); - if (!n) - break; - elt = g_list_next(elt); - } - - fclose(handle); -} -*/ - - - -/**********************************************************/ -/* */ -/* mbox cache operations */ -/* */ -/**********************************************************/ - -struct _mboxcache { - gchar * filename; - mailfile * mf; - GPtrArray * tab_mf; - gint mtime; - gboolean modification; -}; - -typedef struct _mboxcache mboxcache; - -static GHashTable * mbox_cache_table = NULL; - -static MsgInfo *mbox_parse_msg(FILE * fp, struct _message * msg, - FolderItem *item) -{ - MsgInfo *msginfo; - MsgFlags flags = { 0, 0 }; - - MSG_SET_PERM_FLAGS(flags, MSG_NEW | MSG_UNREAD); - - g_return_val_if_fail(fp != NULL, NULL); - - if (item != NULL) { - if (item->stype == F_QUEUE) { - MSG_SET_TMP_FLAGS(flags, MSG_QUEUED); - } else if (item->stype == F_DRAFT) { - MSG_SET_TMP_FLAGS(flags, MSG_DRAFT); - } - } - - msginfo = procheader_file_parse(fp, flags, FALSE); - - if (!msginfo) return NULL; - - if (item != NULL) { - msginfo->msgnum = msg->msgnum; - msginfo->folder = item; - } - - return msginfo; -} - -static void mbox_cache_init() -{ - mbox_cache_table = g_hash_table_new(g_str_hash, g_str_equal); -} - -static void mbox_cache_done() -{ - g_hash_table_destroy(mbox_cache_table); -} - -static void mbox_cache_free_mbox(mboxcache * cache) -{ - g_hash_table_remove(mbox_cache_table, cache->filename); - - if (cache->mf) - mailfile_done(cache->mf); - if (cache->tab_mf) - g_ptr_array_free(cache->tab_mf, FALSE); - if (cache->filename) - g_free(cache->filename); - g_free(cache); -} - -static void mbox_cache_get_msginfo_from_file(FILE * fp, GList * msg_list) -{ - GList * l; - MsgInfo * msginfo; - - for(l = msg_list ; l != NULL ; l = g_list_next(l)) { - struct _message * msg; - - msg = (struct _message *) l->data; - - fseek(fp, msg->header, SEEK_SET); - msginfo = mbox_parse_msg(fp, msg, NULL); - if (msginfo) { - if (msginfo->msgid) - msg->messageid = - g_strdup(msginfo->msgid); - if (msginfo->fromspace) - msg->fromspace = - g_strdup(msginfo->fromspace); - msg->flags = msginfo->flags; - msg->old_flags = msginfo->flags; - - procmsg_msginfo_free(msginfo); - } - } -} - -static void mbox_cache_get_msginfo(gchar * filename, GList * msg_list) -{ - FILE * fp; - - fp = fopen(filename, "r"); - if (fp == NULL) - return; - - mbox_cache_get_msginfo_from_file(fp, msg_list); - fclose(fp); -} - -static mboxcache * mbox_cache_read_mbox(gchar * filename) -{ - mboxcache * cache; - struct stat s; - mailfile * mf; - GList * l; - - if (stat(filename, &s) < 0) - return NULL; - - mf = mailfile_init(filename); - if (mf == NULL) - return NULL; - - cache = g_new0(mboxcache, 1); - - cache->mtime = s.st_mtime; - cache->mf = mf; - cache->filename = g_strdup(filename); - cache->modification = FALSE; - - cache->tab_mf = g_ptr_array_new(); - for(l = mf->msg_list ; l != NULL ; l = g_list_next(l)) - g_ptr_array_add(cache->tab_mf, l->data); - - mbox_cache_get_msginfo(filename, mf->msg_list); - - debug_print(_("read mbox - %s\n"), filename); - - return cache; -} - -static mboxcache * mbox_cache_read_mbox_from_file(FILE * fp, gchar * filename) -{ - mboxcache * cache; - struct stat s; - mailfile * mf; - GList * l; - - if (stat(filename, &s) < 0) - return NULL; - - mf = mailfile_init_from_file(fp, filename); - if (mf == NULL) - return NULL; - - cache = g_new0(mboxcache, 1); - - cache->mtime = s.st_mtime; - cache->mf = mf; - cache->filename = g_strdup(filename); - - cache->tab_mf = g_ptr_array_new(); - for(l = mf->msg_list ; l != NULL ; l = g_list_next(l)) - g_ptr_array_add(cache->tab_mf, l->data); - - mbox_cache_get_msginfo_from_file(fp, mf->msg_list); - - debug_print(_("read mbox from file - %s\n"), filename); - - return cache; -} - -static void mbox_cache_insert_mbox(mboxcache * data) -{ - if (mbox_cache_table == NULL) - mbox_cache_init(); - - g_hash_table_insert(mbox_cache_table, data->filename, data); -} - -static mboxcache * mbox_cache_get_mbox(gchar * filename) -{ - if (mbox_cache_table == NULL) - mbox_cache_init(); - - return g_hash_table_lookup(mbox_cache_table, filename); -} - - -static gint mbox_cache_get_count(gchar * filename) -{ - mboxcache * cache; - - cache = mbox_cache_get_mbox(filename); - if (cache == NULL) - return -1; - if (cache->mf == NULL) - return -1; - return cache->mf->count; -} - -static gint mbox_cache_get_mtime(gchar * filename) -{ - mboxcache * cache; - - cache = mbox_cache_get_mbox(filename); - if (cache == NULL) - return -1; - return cache->mtime; -} - -static GList * mbox_cache_get_msg_list(gchar * filename) -{ - mboxcache * cache; - - cache = mbox_cache_get_mbox(filename); - - if (cache == NULL) - return NULL; - - if (cache->mf == NULL) - return NULL; - - return cache->mf->msg_list; -} - -static void mbox_cache_synchronize_lists(GList * old_msg_list, - GList * new_msg_list) -{ - GList * l; - GList * l2; - - for(l2 = old_msg_list ; l2 != NULL ; l2 = g_list_next(l2)) { - struct _message * msg2 = l2->data; - - if ((msg2->messageid == NULL) || - (msg2->fromspace == NULL)) - continue; - - for(l = new_msg_list ; l != NULL ; l = g_list_next(l)) { - struct _message * msg = l->data; - - if ((msg->messageid == NULL) || - (msg->fromspace == NULL)) - continue; - - if ((strcmp(msg->messageid, msg2->messageid) == 0) && - (strcmp(msg->fromspace, msg2->fromspace) == 0)) { - if (msg2->flags.perm_flags != msg2->old_flags.perm_flags) { - msg->flags = msg2->flags; - break; - } - } - } - } -} - -static void mbox_cache_synchronize(gchar * filename, gboolean sync) -{ - mboxcache * new_cache; - mboxcache * old_cache; - gboolean scan_new = TRUE; - struct stat s; - - old_cache = mbox_cache_get_mbox(filename); - - if (old_cache != NULL) { - if (stat(filename, &s) < 0) { - FILE_OP_ERROR(filename, "stat"); - } else if (old_cache->mtime == s.st_mtime) { - debug_print("Folder is not modified.\n"); - scan_new = FALSE; - } - } - - if (scan_new) { - GList * l; - - /* - if (strstr(filename, "trash") == 0) - printf("old_cache: %p %s\n", old_cache, filename); - if (old_cache) { - printf("begin old\n"); - for(l = old_cache->mf->msg_list ; l != NULL ; - l = g_list_next(l)) { - struct _message * msg = l->data; - printf("%p\n", msg); - } - printf("end old\n"); - } - */ - - new_cache = mbox_cache_read_mbox(filename); - - /* - if (strstr(filename, "trash") == 0) - printf("new_cache: %p %s\n", new_cache, filename); - if (new_cache) { - printf("begin new\n"); - for(l = new_cache->mf->msg_list ; l != NULL ; - l = g_list_next(l)) { - struct _message * msg = l->data; - printf("%p\n", msg); - } - printf("end new\n"); - } - */ - - if (!new_cache) - return; - - if (sync && new_cache && old_cache) - mbox_cache_synchronize_lists(old_cache->mf->msg_list, - new_cache->mf->msg_list); - - if (old_cache != NULL) - mbox_cache_free_mbox(old_cache); - - if (new_cache) { - mbox_cache_insert_mbox(new_cache); - /* - printf("insert %p %s\n", new_cache, new_cache->filename); - printf("inserted %s %p\n", filename, - mbox_cache_get_mbox(filename)); - */ - } - } -} - -static void mbox_cache_synchronize_from_file(FILE * fp, gchar * filename, - gboolean sync) -{ - mboxcache * new_cache; - mboxcache * old_cache; - gboolean scan_new = TRUE; - struct stat s; - - old_cache = mbox_cache_get_mbox(filename); - - if (old_cache != NULL) { - if (stat(filename, &s) < 0) { - FILE_OP_ERROR(filename, "stat"); - } else if (old_cache->mtime == s.st_mtime) { - debug_print("Folder is not modified.\n"); - scan_new = FALSE; - } - } - - - if (scan_new) { - - /* - GList * l; - - if (strstr(filename, "trash") == 0) - printf("old_cache: %p %s\n", old_cache, filename); - - if (old_cache) { - printf("begin old\n"); - for(l = old_cache->mf->msg_list ; l != NULL ; - l = g_list_next(l)) { - struct _message * msg = l->data; - printf("%p\n", msg); - } - printf("end old\n"); - } - */ - - new_cache = mbox_cache_read_mbox_from_file(fp, filename); - - /* - if (strstr(filename, "trash") == 0) - printf("new_cache: %p %s\n", new_cache, filename); - - if (new_cache) { - printf("begin new\n"); - for(l = new_cache->mf->msg_list ; l != NULL ; - l = g_list_next(l)) { - struct _message * msg = l->data; - printf("%p\n", msg); - } - printf("end new\n"); - } - */ - - if (!new_cache) - return; - - if (sync && new_cache && old_cache) - mbox_cache_synchronize_lists(old_cache->mf->msg_list, - new_cache->mf->msg_list); - - if (old_cache != NULL) - mbox_cache_free_mbox(old_cache); - - if (new_cache) { - mbox_cache_insert_mbox(new_cache); - /* - printf("insert %p %s\n", new_cache, new_cache->filename); - printf("inserted %s %p\n", filename, - mbox_cache_get_mbox(filename)); - */ - } - } -} - -gboolean mbox_cache_msg_fetched(gchar * filename, gint num) -{ - struct _message * msg; - mboxcache * cache; - - cache = mbox_cache_get_mbox(filename); - - if (cache == NULL) - return FALSE; - - msg = (struct _message *) g_ptr_array_index(cache->tab_mf, - num - 1); - if (msg == NULL) - return FALSE; - - return msg->fetched; -} - -void mbox_cache_msg_set_fetched(gchar * filename, gint num) -{ - struct _message * msg; - mboxcache * cache; - - cache = mbox_cache_get_mbox(filename); - - if (cache == NULL) - return; - - msg = (struct _message *) g_ptr_array_index(cache->tab_mf, - num - 1); - if (msg == NULL) - return; - - msg->fetched = TRUE; -} - -struct _message * mbox_cache_get_msg(gchar * filename, gint num) -{ - mboxcache * cache; - - cache = mbox_cache_get_mbox(filename); - - if (cache == NULL) { - return NULL; - } - - return (struct _message *) g_ptr_array_index(cache->tab_mf, - num - 1); -} - - -/**********************************************************/ -/* */ -/* mbox operations */ -/* */ -/**********************************************************/ - - -GSList *mbox_get_msg_list(Folder *folder, FolderItem *item, gboolean use_cache) -{ - GSList *mlist; - MsgInfo * msginfo; - GList * l; - FILE * fp; - gchar * mbox_path; - -#ifdef MEASURE_TIME - struct timeval tv_before, tv_after, tv_result; - - gettimeofday(&tv_before, NULL); -#endif - - mlist = NULL; - - mbox_path = mbox_folder_get_path(item); - - if (mbox_path == NULL) - return NULL; - - mbox_purge_deleted(mbox_path); - - fp = fopen(mbox_path, "r"); - - if (fp == NULL) { - g_free(mbox_path); - return NULL; - } - - mbox_lockread_file(fp, mbox_path); - - mbox_cache_synchronize_from_file(fp, mbox_path, TRUE); - - item->last_num = mbox_cache_get_count(mbox_path); - - for(l = mbox_cache_get_msg_list(mbox_path) ; l != NULL ; - l = g_list_next(l)) { - struct _message * msg; - - msg = (struct _message *) l->data; - - if (MSG_IS_INVALID(msg->flags) || !MSG_IS_REALLY_DELETED(msg->flags)) { - fseek(fp, msg->header, SEEK_SET); - - msginfo = mbox_parse_msg(fp, msg, item); - - if (!MSG_IS_INVALID(msg->flags)) - msginfo->flags = msg->flags; - else { - msg->old_flags = msginfo->flags; - msg->flags = msginfo->flags; - } - - mlist = g_slist_append(mlist, msginfo); - } - else { - MSG_SET_PERM_FLAGS(msg->flags, MSG_REALLY_DELETED); - } - } - - mbox_unlock_file(fp, mbox_path); - - g_free(mbox_path); - - fclose(fp); - -#ifdef MEASURE_TIME - gettimeofday(&tv_after, NULL); - - timersub(&tv_after, &tv_before, &tv_result); - g_print("mbox_get_msg_list: %s: elapsed time: %ld.%06ld sec\n", - mbox_path, tv_result.tv_sec, tv_result.tv_usec); -#endif - - return mlist; -} - -static gboolean mbox_extract_msg(FolderItem * item, gint msgnum, - gchar * dest_filename) -{ - struct _message * msg; - gint offset; - gint max_offset; - gint size; - FILE * src; - FILE * dest; - gboolean err; - /* GList * msg_list;*/ - gboolean already_fetched; - gchar * mbox_path; - - mbox_path = mbox_folder_get_path(item); - - if (mbox_path == NULL) - return FALSE; - - src = fopen(mbox_path, "r"); - if (src == NULL) { - g_free(mbox_path); - return FALSE; - } - - mbox_lockread_file(src, mbox_path); - - mbox_cache_synchronize_from_file(src, mbox_path, TRUE); - - already_fetched = mbox_cache_msg_fetched(mbox_path, msgnum); - - if (already_fetched) { - mbox_unlock_file(src, mbox_path); - fclose(src); - g_free(mbox_path); - return TRUE; - } - - msg = mbox_cache_get_msg(mbox_path, msgnum); - - if (msg == NULL) { - mbox_unlock_file(src, mbox_path); - fclose(src); - g_free(mbox_path); - return FALSE; - } - - offset = msg->offset; - max_offset = msg->end; - - size = max_offset - offset; - - fseek(src, offset, SEEK_SET); - - dest = fopen(dest_filename, "w"); - if (dest == NULL) { - mbox_unlock_file(src, mbox_path); - fclose(src); - g_free(mbox_path); - return FALSE; - } - - if (change_file_mode_rw(dest, dest_filename) < 0) { - FILE_OP_ERROR(dest_filename, "chmod"); - g_warning(_("can't change file mode\n")); - } - - if (!mbox_write_data(src, dest, dest_filename, size)) { - mbox_unlock_file(src, mbox_path); - fclose(dest); - fclose(src); - unlink(dest_filename); - g_free(mbox_path); - return FALSE; - } - - err = FALSE; - - if (ferror(src)) { - FILE_OP_ERROR(mbox_path, "fread"); - err = TRUE; - } - - mbox_cache_msg_set_fetched(mbox_path, msgnum); - - if (fclose(dest) == -1) { - FILE_OP_ERROR(dest_filename, "fclose"); - err = TRUE; - } - - mbox_unlock_file(src, mbox_path); - - if (fclose(src) == -1) { - FILE_OP_ERROR(mbox_path, "fclose"); - err = TRUE; - } - - g_free(mbox_path); - - if (err) { - unlink(dest_filename); - return FALSE; - } - - return TRUE; -} - -gchar *mbox_fetch_msg(Folder *folder, FolderItem *item, gint num) -{ - gchar *path; - gchar *filename; - - 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); - if (!is_dir_exist(path)) - make_dir_hier(path); - - filename = g_strconcat(path, G_DIR_SEPARATOR_S, itos(num), NULL); - - g_free(path); - - if (!mbox_extract_msg(item, num, filename)) { - g_free(filename); - return NULL; - } - - return filename; -} - -gint mbox_add_msg(Folder *folder, FolderItem *dest, const gchar *file, - gboolean remove_source) -{ - FILE * src_fp; - FILE * dest_fp; - gchar buf[BUFSIZ]; - gint old_size; - gint n_read; - gboolean err; - gchar * mbox_path; - gchar from_line[MSGBUFSIZE]; - - if (dest->last_num < 0) { - mbox_scan_folder(folder, dest); - if (dest->last_num < 0) return -1; - } - - src_fp = fopen(file, "r"); - if (src_fp == NULL) { - return -1; - } - - mbox_path = mbox_folder_get_path(dest); - if (mbox_path == NULL) - return -1; - - dest_fp = fopen(mbox_path, "a"); - if (dest_fp == NULL) { - fclose(src_fp); - g_free(mbox_path); - return -1; - } - - if (change_file_mode_rw(dest_fp, mbox_path) < 0) { - FILE_OP_ERROR(mbox_path, "chmod"); - g_warning(_("can't change file mode\n")); - } - - old_size = ftell(dest_fp); - - mbox_lockwrite_file(dest_fp, mbox_path); - - if (fgets(from_line, sizeof(from_line), src_fp) == NULL) { - mbox_unlock_file(dest_fp, mbox_path); - g_warning(_("unvalid file - %s.\n"), file); - fclose(dest_fp); - fclose(src_fp); - g_free(mbox_path); - return -1; - } - - if (strncmp(from_line, "From ", 5) != 0) { - struct stat s; - - if (stat(file, &s) < 0) { - mbox_unlock_file(dest_fp, mbox_path); - g_warning(_("unvalid file - %s.\n"), file); - fclose(dest_fp); - fclose(src_fp); - g_free(mbox_path); - return -1; - } - - fprintf(dest_fp, "From - %s", ctime(&s.st_mtime)); - } - - fputs(from_line, dest_fp); - - while (1) { - n_read = fread(buf, 1, sizeof(buf), src_fp); - if ((n_read < (gint) sizeof(buf)) && ferror(src_fp)) - break; - if (fwrite(buf, n_read, 1, dest_fp) < 1) { - mbox_unlock_file(dest_fp, mbox_path); - g_warning(_("writing to %s failed.\n"), mbox_path); - ftruncate(fileno(dest_fp), old_size); - fclose(dest_fp); - fclose(src_fp); - g_free(mbox_path); - return -1; - } - - if (n_read < (gint) sizeof(buf)) - break; - } - - err = FALSE; - - if (ferror(src_fp)) { - FILE_OP_ERROR(mbox_path, "fread"); - } - - mbox_unlock_file(dest_fp, mbox_path); - - if (fclose(src_fp) == -1) { - FILE_OP_ERROR(file, "fclose"); - err = TRUE; - } - - if (fclose(dest_fp) == -1) { - FILE_OP_ERROR(mbox_path, "fclose"); - g_free(mbox_path); - return -1; - } - - if (err) { - ftruncate(fileno(dest_fp), old_size); - g_free(mbox_path); - return -1; - } - - if (remove_source) { - if (unlink(file) < 0) - FILE_OP_ERROR(file, "unlink"); - } - - g_free(mbox_path); - - dest->last_num++; - return dest->last_num; - -} - -gint mbox_remove_msg(Folder *folder, FolderItem *item, gint num) -{ - struct _message * msg; - gchar * mbox_path; - - mbox_path = mbox_folder_get_path(item); - if (mbox_path == NULL) - return -1; - - mbox_cache_synchronize(mbox_path, TRUE); - - msg = mbox_cache_get_msg(mbox_path, num); - - g_free(mbox_path); - - if (msg != NULL) - MSG_SET_PERM_FLAGS(msg->flags, MSG_REALLY_DELETED); - - return 0; -} - -gint mbox_remove_all_msg(Folder *folder, FolderItem *item) -{ - FILE * fp; - gchar * mbox_path; - - mbox_path = mbox_folder_get_path(item); - if (mbox_path == NULL) - return -1; - - fp = fopen(mbox_path, "w"); - if (fp == NULL) { - g_free(mbox_path); - return -1; - } - - fclose(fp); - - g_free(mbox_path); - - return 0; -} - -/* -gint mbox_move_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) -{ - gchar * filename; - gint msgnum; - - filename = mbox_fetch_msg(folder, msginfo->folder, msginfo->msgnum); - if (filename == NULL) - return -1; - - msgnum = mbox_add_msg(folder, dest, filename, TRUE); - - if (msgnum != -1) { - MSG_SET_FLAGS(msginfo->flags, MSG_REALLY_DELETED); - mbox_change_flags(folder, msginfo->folder, msginfo); - } - - return msgnum; -} - -gint mbox_move_msgs_with_dest(Folder *folder, FolderItem *dest, GSList *msglist) -{ - GSList * l; - gchar * mbox_path = NULL; - - for(l = msglist ; l != NULL ; l = g_slist_next(l)) { - MsgInfo * msginfo = (MsgInfo *) l->data; - - if (msginfo->folder && mbox_path == NULL) - mbox_path = mbox_folder_get_path(msginfo->folder); - - mbox_move_msg(folder, dest, msginfo); - } - - if (mbox_path) { - mbox_cache_synchronize(mbox_path); - g_free(mbox_path); - } - - mbox_path = mbox_folder_get_path(dest); - mbox_cache_synchronize(mbox_path); - g_free(mbox_path); - - return dest->last_num; -} -*/ - -/* -gint mbox_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) -{ - gchar * filename; - gint msgnum; - - filename = mbox_fetch_msg(folder, msginfo->folder, msginfo->msgnum); - if (filename == NULL) - return -1; - - msgnum = mbox_add_msg(folder, dest, filename, FALSE); - - return msgnum; -} - -gint mbox_copy_msgs_with_dest(Folder *folder, FolderItem *dest, GSList *msglist) -{ - GSList * l; - gchar * mbox_path = NULL; - - for(l = msglist ; l != NULL ; l = g_slist_next(l)) { - MsgInfo * msginfo = (MsgInfo *) l->data; - - if (msginfo->folder && mbox_path == NULL) - mbox_path = mbox_folder_get_path(msginfo->folder); - - mbox_copy_msg(folder, dest, msginfo); - } - - if (mbox_path) { - mbox_cache_synchronize(mbox_path); - g_free(mbox_path); - } - - mbox_path = mbox_folder_get_path(dest); - mbox_cache_synchronize(mbox_path); - g_free(mbox_path); - - return dest->last_num; -} -*/ - -struct _copy_flags_info -{ - gint num; - MsgFlags flags; -}; - -typedef struct _copy_flags_info CopyFlagsInfo; - -GSList * copy_flags_data = NULL; - -gint mbox_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) -{ - Folder * src_folder; - gchar * filename; - gint num; - gchar * destdir; - gchar * mbox_path; - struct _message * msg; - CopyFlagsInfo * flags_info; - - src_folder = msginfo->folder->folder; - - g_return_val_if_fail(src_folder->fetch_msg != NULL, -1); - - /* - mbox_path = mbox_folder_get_path(msginfo->folder); - mbox_rewrite(mbox_path); - g_free(mbox_path); - */ - - filename = src_folder->fetch_msg(src_folder, - msginfo->folder, - msginfo->msgnum); - if (filename == NULL) - return -1; - - num = folder->add_msg(folder, dest, filename, FALSE); - - /* - mbox_path = mbox_folder_get_path(dest); - msg = mbox_cache_get_msg(mbox_path, num); - if (msg != NULL) - msg->flags = msginfo->flags; - g_free(mbox_path); - */ - - if (num == -1) - return -1; - - flags_info = g_new0(CopyFlagsInfo, 1); - flags_info->num = num; - flags_info->flags = msginfo->flags; - copy_flags_data = g_slist_append(copy_flags_data, flags_info); - - return num; -} - -void mbox_finished_copy(Folder *folder, FolderItem *dest) -{ - gchar * mbox_path; - GSList * l; - mboxcache * cache; - - mbox_path = mbox_folder_get_path(dest); - if (mbox_path == NULL) - return; - - mbox_cache_synchronize(mbox_path, TRUE); - - for(l = copy_flags_data ; l != NULL ; l = g_slist_next(l)) { - CopyFlagsInfo * flags_info = l->data; - struct _message * msg; - - msg = mbox_cache_get_msg(mbox_path, flags_info->num); - if (msg != NULL) - msg->flags = flags_info->flags; - g_free(flags_info); - } - - if (copy_flags_data != NULL) { - cache = mbox_cache_get_mbox(mbox_path); - cache->modification = TRUE; - } - - g_slist_free(copy_flags_data); - copy_flags_data = NULL; - - mbox_rewrite(mbox_path); - - g_free(mbox_path); -} - -void mbox_scan_folder(Folder *folder, FolderItem *item) -{ - gchar *mbox_path; - gint n_msg; - mboxcache * cached; - GList * l; - - mbox_path = mbox_folder_get_path(item); - if (mbox_path == NULL) - return; - - mbox_cache_synchronize(mbox_path, TRUE); - - cached = mbox_cache_get_mbox(mbox_path); - - if (cached == NULL) { - item->new = 0; - item->unread = 0; - item->total = 0; - item->last_num = 0; - g_free(mbox_path); - return; - } - - n_msg = mbox_cache_get_count(mbox_path); - - if (n_msg == 0) { - item->new = item->unread = item->total = 0; - } - else { - gint new = 0; - gint unread = 0; - gint total = 0; - - for(l = mbox_cache_get_msg_list(mbox_path) ; l != NULL ; - l = g_list_next(l)) { - struct _message * msg = (struct _message *) l->data; - if (!MSG_IS_REALLY_DELETED(msg->flags)) - total ++; - if (MSG_IS_NEW(msg->flags) /*&& !MSG_IS_IGNORE_THREAD(msg->flags)*/) - new ++; - if (MSG_IS_UNREAD(msg->flags) /*&& !MSG_IS_IGNORE_THREAD(msg->flags)*/) - unread ++; - } - - item->new = new; - item->unread = unread; - item->total = total; - } - - debug_print(_("Last number in dir %s = %d\n"), mbox_path, - item->total); - item->last_num = n_msg; - g_free(mbox_path); -} - -gchar * mbox_get_virtual_path(FolderItem * item) -{ - if (item == NULL) - return NULL; - - if (item->parent == NULL) { - return NULL; - } - else { - gchar * parent_path; - gchar * result_path; - - parent_path = mbox_get_virtual_path(item->parent); - if (parent_path == NULL) - result_path = g_strdup(item->name); - else - result_path = g_strconcat(parent_path, - G_DIR_SEPARATOR_S, - item->name, NULL); - g_free(parent_path); - - return result_path; - } -} - -static gboolean mbox_write_data(FILE * mbox_fp, FILE * new_fp, - gchar * new_filename, gint size) -{ - gint n_read; - gint pos; - gchar buf[BUFSIZ]; - gint max; - - pos = 0; - while (pos < size) { - if ((size - pos) > (gint) sizeof(buf)) - max = sizeof(buf); - else - max = (size - pos); - - n_read = fread(buf, 1, max, mbox_fp); - - if (n_read < max && ferror(mbox_fp)) { - return FALSE; - } - if (fwrite(buf, n_read, 1, new_fp) < 1) { - g_warning(_("writing to %s failed.\n"), new_filename); - return FALSE; - } - - if (n_read != -1) - pos += n_read; - - if (n_read < max) - break; - } - return TRUE; -} - -static gboolean mbox_write_message(FILE * mbox_fp, FILE * new_fp, - gchar * new_filename, - struct _message * msg) -{ - gint size; - GPtrArray * headers; - gint i; - - fseek(mbox_fp, msg->header, SEEK_SET); - - headers = procheader_get_header_array_asis(mbox_fp); - - for (i = 0; i < (gint) headers->len; i++) { - Header * h = g_ptr_array_index(headers, i); - - if (!procheader_headername_equal(h->name, - "Status") && - !procheader_headername_equal(h->name, - "X-Status")) { - fwrite(h->name, strlen(h->name), - 1, new_fp); - if (h->name[strlen(h->name) - 1] != ' ') - fwrite(" ", 1, 1, new_fp); - fwrite(h->body, strlen(h->body), - 1, new_fp); - fwrite("\n", 1, 1, new_fp); - } - procheader_header_free(h); - g_ptr_array_remove_index(headers, i); - i--; - } - - g_ptr_array_free(headers, FALSE); - - if (!MSG_IS_INVALID(msg->flags)) { - /* Status header */ - fwrite("Status: ", strlen("Status: "), 1, new_fp); - if (!MSG_IS_UNREAD(msg->flags)) - fwrite("R", 1, 1, new_fp); - fwrite("O", 1, 1, new_fp); - fwrite("\n", 1, 1, new_fp); - - /* X-Status header */ - if (MSG_IS_REALLY_DELETED(msg->flags) - || MSG_IS_MARKED(msg->flags) - || MSG_IS_DELETED(msg->flags) - || MSG_IS_REPLIED(msg->flags) - || MSG_IS_FORWARDED(msg->flags)) { - fwrite("X-Status: ", strlen("X-Status: "), 1, new_fp); - if (MSG_IS_REALLY_DELETED(msg->flags)) - fwrite("D", 1, 1, new_fp); /* really deleted */ - else { - if (MSG_IS_MARKED(msg->flags)) - fwrite("F", 1, 1, new_fp); - if (MSG_IS_DELETED(msg->flags)) - fwrite("d", 1, 1, new_fp); - if (MSG_IS_REPLIED(msg->flags)) - fwrite("r", 1, 1, new_fp); - if (MSG_IS_FORWARDED(msg->flags)) - fwrite("f", 1, 1, new_fp); - } - fwrite("\n", 1, 1, new_fp); - } - } - - fwrite("\n", 1, 1, new_fp); - - size = msg->end - msg->content; - fseek(mbox_fp, msg->content, SEEK_SET); - - return mbox_write_data(mbox_fp, new_fp, new_filename, size); -} - -void mbox_update_mark(Folder * folder, FolderItem * item) -{ - gchar * mbox_path; - - mbox_path = mbox_folder_get_path(item); - if (mbox_path == NULL) - return; - - mbox_rewrite(mbox_path); - g_free(mbox_path); -} - -void mbox_change_flags(Folder * folder, FolderItem * item, MsgInfo * info) -{ - struct _message * msg; - mboxcache * cache; - gchar * mbox_path; - - mbox_path = mbox_folder_get_path(item); - if (mbox_path == NULL) - return; - - msg = mbox_cache_get_msg(mbox_path, info->msgnum); - - cache = mbox_cache_get_mbox(mbox_path); - - g_free(mbox_path); - - if ((msg == NULL) || (cache == NULL)) - return; - - msg->flags = info->flags; - - cache->modification = TRUE; -} - - -static gboolean mbox_rewrite(gchar * mbox) -{ - FILE * mbox_fp; - FILE * new_fp; - gchar * new; - GList * l; - gboolean result; - GList * msg_list; - gint count; - mboxcache * cache; - - msg_list = mbox_cache_get_msg_list(mbox); - - cache = mbox_cache_get_mbox(mbox); - if (cache == NULL) - return FALSE; - - if (!cache->modification) { - debug_print(_("no modification - %s\n"), mbox); - return FALSE; - } - - debug_print(_("save modification - %s\n"), mbox); - - mbox_fp = fopen(mbox, "r+"); - mbox_lockwrite_file(mbox_fp, mbox); - - mbox_cache_synchronize_from_file(mbox_fp, mbox, TRUE); - - new = g_strconcat(mbox, ".", itos((int) mbox), NULL); - new_fp = fopen(new, "w"); - - if (change_file_mode_rw(new_fp, new) < 0) { - FILE_OP_ERROR(new, "chmod"); - g_warning(_("can't change file mode\n")); - } - - mbox_lockwrite_file(new_fp, new); - - result = TRUE; - - count = 0; - msg_list = mbox_cache_get_msg_list(mbox); - for(l = msg_list ; l != NULL ; l = g_list_next(l)) { - struct _message * msg = (struct _message *) l->data; - if (!mbox_write_message(mbox_fp, new_fp, new, msg)) { - result = FALSE; - break; - } - count ++; - } - - unlink(mbox); - - if (rename(new, mbox) == -1) { - g_warning(_("can't rename %s to %s\n"), new, mbox); - mbox_unlock_file(new_fp, new); - fclose(new_fp); - mbox_unlock_file(mbox_fp, mbox); - fclose(mbox_fp); - return -1; - } - - if (change_file_mode_rw(new_fp, mbox) < 0) { - FILE_OP_ERROR(new, "chmod"); - g_warning(_("can't change file mode\n")); - } - - mbox_unlock_file(new_fp, new); - - fclose(new_fp); - - mbox_unlock_file(mbox_fp, mbox); - - fclose(mbox_fp); - - debug_print(_("%i messages written - %s\n"), count, mbox); - - cache = mbox_cache_get_mbox(mbox); - - if (cache != NULL) - cache->mtime = -1; - - mbox_cache_synchronize(mbox, FALSE); - - return result; -} - -static gboolean mbox_purge_deleted(gchar * mbox) -{ - FILE * mbox_fp; - FILE * new_fp; - gchar * new; - GList * l; - gboolean result; - gboolean modification = FALSE; - GList * msg_list; - gint count; - - mbox_cache_synchronize(mbox, TRUE); - - msg_list = mbox_cache_get_msg_list(mbox); - - for(l = msg_list ; l != NULL ; l = g_list_next(l)) { - struct _message * msg = (struct _message *) l->data; - if (MSG_IS_INVALID(msg->flags) && MSG_IS_REALLY_DELETED(msg->flags)) { - modification = TRUE; - break; - } - } - - if (!modification) { - debug_print(_("no deleted messages - %s\n"), mbox); - return FALSE; - } - - debug_print(_("purge deleted messages - %s\n"), mbox); - - mbox_fp = fopen(mbox, "r+"); - mbox_lockwrite_file(mbox_fp, mbox); - - mbox_cache_synchronize_from_file(mbox_fp, mbox, TRUE); - - new = g_strconcat(mbox, ".", itos((int) mbox), NULL); - new_fp = fopen(new, "w"); - - if (change_file_mode_rw(new_fp, new) < 0) { - FILE_OP_ERROR(new, "chmod"); - g_warning(_("can't change file mode\n")); - } - - mbox_lockwrite_file(new_fp, new); - - result = TRUE; - - count = 0; - msg_list = mbox_cache_get_msg_list(mbox); - for(l = msg_list ; l != NULL ; l = g_list_next(l)) { - struct _message * msg = (struct _message *) l->data; - if (MSG_IS_INVALID(msg->flags) || !MSG_IS_REALLY_DELETED(msg->flags)) { - if (!mbox_write_message(mbox_fp, new_fp, new, msg)) { - result = FALSE; - break; - } - count ++; - } - } - - unlink(mbox); - - if (rename(new, mbox) == -1) { - g_warning(_("can't rename %s to %s\n"), new, mbox); - mbox_unlock_file(new_fp, new); - fclose(new_fp); - mbox_unlock_file(mbox_fp, mbox); - fclose(mbox_fp); - return -1; - } - - if (change_file_mode_rw(new_fp, mbox) < 0) { - FILE_OP_ERROR(new, "chmod"); - g_warning(_("can't change file mode\n")); - } - - mbox_unlock_file(new_fp, new); - - fclose(new_fp); - - mbox_unlock_file(mbox_fp, mbox); - - fclose(mbox_fp); - - debug_print(_("%i messages written - %s\n"), count, mbox); - - mbox_cache_synchronize(mbox, FALSE); - - return result; -} - -#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 mbox_create_tree(Folder *folder) -{ - gchar *rootpath; - - g_return_val_if_fail(folder != NULL, -1); - - CHDIR_RETURN_VAL_IF_FAIL(get_home_dir(), -1); - rootpath = LOCAL_FOLDER(folder)->rootpath; - MAKE_DIR_IF_NOT_EXIST(rootpath); - CHDIR_RETURN_VAL_IF_FAIL(rootpath, -1); - - return 0; -} - -#undef MAKE_DIR_IF_NOT_EXIST - -static gchar * mbox_get_new_path(FolderItem * parent, gchar * name) -{ - gchar * path; - - if (strchr(name, '/') == NULL) { - if (parent->path != NULL) - path = g_strconcat(parent->path, ".sbd", G_DIR_SEPARATOR_S, name, NULL); - else - path = g_strdup(name); - } - else - path = g_strdup(name); - - return path; -} - -static gchar * mbox_get_folderitem_name(gchar * name) -{ - gchar * foldername; - - foldername = g_strdup(g_basename(name)); - - return foldername; -} - -FolderItem *mbox_create_folder(Folder *folder, FolderItem *parent, - const gchar *name) -{ - gchar * path; - FolderItem *new_item; - gchar * foldername; - - 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 = mbox_get_new_path(parent, (gchar *) name); - - foldername = mbox_get_folderitem_name((gchar *) name); - - new_item = folder_item_new(foldername, path); - folder_item_append(parent, new_item); - - if (!strcmp(name, "inbox")) { - new_item->stype = F_INBOX; - new_item->folder->inbox = new_item; - } else if (!strcmp(name, "outbox")) { - new_item->stype = F_OUTBOX; - new_item->folder->outbox = new_item; - } else if (!strcmp(name, "draft")) { - new_item->stype = F_DRAFT; - new_item->folder->draft = new_item; - } else if (!strcmp(name, "queue")) { - new_item->stype = F_QUEUE; - new_item->folder->queue = new_item; - } else if (!strcmp(name, "trash")) { - new_item->stype = F_TRASH; - new_item->folder->trash = new_item; - } - - g_free(foldername); - g_free(path); - - return new_item; -} - -gint mbox_rename_folder(Folder *folder, FolderItem *item, const gchar *name) -{ - gchar * path; - gchar * foldername; - - 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); - - path = mbox_get_new_path(item->parent, (gchar *) name); - foldername = mbox_get_folderitem_name((gchar *) name); - - if (rename(item->path, path) == -1) { - g_free(foldername); - g_free(path); - g_warning(_("Cannot rename folder item")); - - return -1; - } - else { - g_free(item->name); - g_free(item->path); - item->path = path; - item->name = foldername; - - return 0; - } -} - -gint mbox_remove_folder(Folder *folder, FolderItem *item) -{ - 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); - - folder_item_remove(item); - return 0; -} - diff --git a/src/mbox_folder.h b/src/mbox_folder.h deleted file mode 100644 index 44a6913a5..000000000 --- a/src/mbox_folder.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2001 Hiroyuki Yamamoto & The Sylpheed Claws Team - * - * 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_FOLDER_H - -#define MBOX_FOLDER_H - -#include <glib.h> -#include "folder.h" - -/* -mailfile mailfile_init(char * filename); -char * mailfile_readmsg(mailfile f, int index); -char * mailfile_readheader(mailfile f, int index); -void mailfile_done(mailfile f); -int mailfile_count(mailfile f); -*/ - -GSList *mbox_get_msg_list(Folder *folder, FolderItem *item, gboolean use_cache); -gchar *mbox_fetch_msg(Folder *folder, FolderItem *item, gint num); - -void mbox_scan_folder(Folder *folder, FolderItem *item); -gchar * mbox_get_virtual_path(FolderItem * item); -gint mbox_add_msg(Folder *folder, FolderItem *dest, const gchar *file, - gboolean remove_source); - -gint mbox_remove_all_msg(Folder *folder, FolderItem *item); -gint mbox_remove_msg(Folder *folder, FolderItem *item, gint num); -void mbox_update_mark(Folder * folder, FolderItem * item); -gint mbox_move_msgs_with_dest(Folder *folder, FolderItem *dest, - GSList *msglist); -gint mbox_move_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo); -void mbox_change_flags(Folder * folder, FolderItem * item, MsgInfo * info); -gint mbox_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo); -gint mbox_copy_msgs_with_dest(Folder *folder, FolderItem *dest, GSList *msglist); -gint mbox_create_tree(Folder *folder); -FolderItem *mbox_create_folder(Folder *folder, FolderItem *parent, - const gchar *name); -gint mbox_rename_folder(Folder *folder, FolderItem *item, const gchar *name); -gint mbox_remove_folder(Folder *folder, FolderItem *item); -void mbox_finished_copy(Folder *folder, FolderItem *dest); - - -#endif diff --git a/src/md5.c b/src/md5.c deleted file mode 100644 index fcc8f9687..000000000 --- a/src/md5.c +++ /dev/null @@ -1,433 +0,0 @@ -/* md5.c - MD5 Message-Digest Algorithm - * Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc. - * - * according to the definition of MD5 in RFC 1321 from April 1992. - * NOTE: This is *not* the same file as the one from glibc. - * - * 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. - */ -/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */ -/* heavily modified for GnuPG by <werner.koch@guug.de> */ -/* modified again for Sylpheed by <wk@gnupg.org> 2001-02-11 */ - - -/* Test values: - * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E - * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61 - * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72 - * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0 - */ - -#include <config.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <assert.h> - -#include "utils.h" -#include "md5.h" - - -/**************** - * Rotate a 32 bit integer by n bytes - */ -#if defined(__GNUC__) && defined(__i386__) -static inline u32 -rol( u32 x, int n) -{ - __asm__("roll %%cl,%0" - :"=r" (x) - :"0" (x),"c" (n)); - return x; -} -#else -#define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) -#endif - - -void -md5_init(MD5_CONTEXT *ctx) -{ - ctx->A = 0x67452301; - ctx->B = 0xefcdab89; - ctx->C = 0x98badcfe; - ctx->D = 0x10325476; - - ctx->nblocks = 0; - ctx->count = 0; - ctx->finalized = 0; -} - -/* These are the four functions used in the four steps of the MD5 algorithm - and defined in the RFC 1321. The first function is a little bit optimized - (as found in Colin Plumbs public domain implementation). */ -/* #define FF(b, c, d) ((b & c) | (~b & d)) */ -#define FF(b, c, d) (d ^ (b & (c ^ d))) -#define FG(b, c, d) FF (d, b, c) -#define FH(b, c, d) (b ^ c ^ d) -#define FI(b, c, d) (c ^ (b | ~d)) - - -/**************** - * transform n*64 bytes - */ -static void -transform(MD5_CONTEXT *ctx, const unsigned char *data) -{ - u32 correct_words[16]; - u32 A = ctx->A; - u32 B = ctx->B; - u32 C = ctx->C; - u32 D = ctx->D; - u32 *cwp = correct_words; - -#ifdef BIG_ENDIAN_HOST - { - int i; - const unsigned char *p2, *p1; - - for (i = 0, p1 = data, p2 = (unsigned char*)correct_words; - i < 16; i++, p2 += 4) { - p2[3] = *p1++; - p2[2] = *p1++; - p2[1] = *p1++; - p2[0] = *p1++; - } - } -#else - memcpy(correct_words, data, 64); -#endif - - -#define OP(a, b, c, d, s, T) \ - do { \ - a += FF (b, c, d) + (*cwp++) + T; \ - a = rol(a, s); \ - a += b; \ - } while (0) - - /* Before we start, one word about the strange constants. - They are defined in RFC 1321 as - - T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 - */ - - /* Round 1. */ - OP (A, B, C, D, 7, 0xd76aa478); - OP (D, A, B, C, 12, 0xe8c7b756); - OP (C, D, A, B, 17, 0x242070db); - OP (B, C, D, A, 22, 0xc1bdceee); - OP (A, B, C, D, 7, 0xf57c0faf); - OP (D, A, B, C, 12, 0x4787c62a); - OP (C, D, A, B, 17, 0xa8304613); - OP (B, C, D, A, 22, 0xfd469501); - OP (A, B, C, D, 7, 0x698098d8); - OP (D, A, B, C, 12, 0x8b44f7af); - OP (C, D, A, B, 17, 0xffff5bb1); - OP (B, C, D, A, 22, 0x895cd7be); - OP (A, B, C, D, 7, 0x6b901122); - OP (D, A, B, C, 12, 0xfd987193); - OP (C, D, A, B, 17, 0xa679438e); - OP (B, C, D, A, 22, 0x49b40821); - -#undef OP -#define OP(f, a, b, c, d, k, s, T) \ - do { \ - a += f (b, c, d) + correct_words[k] + T; \ - a = rol(a, s); \ - a += b; \ - } while (0) - - /* Round 2. */ - OP (FG, A, B, C, D, 1, 5, 0xf61e2562); - OP (FG, D, A, B, C, 6, 9, 0xc040b340); - OP (FG, C, D, A, B, 11, 14, 0x265e5a51); - OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); - OP (FG, A, B, C, D, 5, 5, 0xd62f105d); - OP (FG, D, A, B, C, 10, 9, 0x02441453); - OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); - OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); - OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); - OP (FG, D, A, B, C, 14, 9, 0xc33707d6); - OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); - OP (FG, B, C, D, A, 8, 20, 0x455a14ed); - OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); - OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); - OP (FG, C, D, A, B, 7, 14, 0x676f02d9); - OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); - - /* Round 3. */ - OP (FH, A, B, C, D, 5, 4, 0xfffa3942); - OP (FH, D, A, B, C, 8, 11, 0x8771f681); - OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); - OP (FH, B, C, D, A, 14, 23, 0xfde5380c); - OP (FH, A, B, C, D, 1, 4, 0xa4beea44); - OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); - OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); - OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); - OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); - OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); - OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); - OP (FH, B, C, D, A, 6, 23, 0x04881d05); - OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); - OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); - OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); - OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); - - /* Round 4. */ - OP (FI, A, B, C, D, 0, 6, 0xf4292244); - OP (FI, D, A, B, C, 7, 10, 0x432aff97); - OP (FI, C, D, A, B, 14, 15, 0xab9423a7); - OP (FI, B, C, D, A, 5, 21, 0xfc93a039); - OP (FI, A, B, C, D, 12, 6, 0x655b59c3); - OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); - OP (FI, C, D, A, B, 10, 15, 0xffeff47d); - OP (FI, B, C, D, A, 1, 21, 0x85845dd1); - OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); - OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); - OP (FI, C, D, A, B, 6, 15, 0xa3014314); - OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); - OP (FI, A, B, C, D, 4, 6, 0xf7537e82); - OP (FI, D, A, B, C, 11, 10, 0xbd3af235); - OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); - OP (FI, B, C, D, A, 9, 21, 0xeb86d391); - - /* Put checksum in context given as argument. */ - ctx->A += A; - ctx->B += B; - ctx->C += C; - ctx->D += D; -} - - - -/* The routine updates the message-digest context to - * account for the presence of each of the characters inBuf[0..inLen-1] - * in the message whose digest is being computed. - */ -void -md5_update(MD5_CONTEXT *hd, const unsigned char *inbuf, size_t inlen) -{ - if (hd->count == 64) { /* flush the buffer */ - transform( hd, hd->buf ); - hd->count = 0; - hd->nblocks++; - } - if (!inbuf) - return; - if (hd->count) { - for (; inlen && hd->count < 64; inlen--) - hd->buf[hd->count++] = *inbuf++; - md5_update(hd, NULL, 0); - if (!inlen) - return; - } - - while (inlen >= 64) { - transform(hd, inbuf); - hd->count = 0; - hd->nblocks++; - inlen -= 64; - inbuf += 64; - } - - for (; inlen && hd->count < 64; inlen--) - hd->buf[hd->count++] = *inbuf++; -} - - - -/* The routine final terminates the message-digest computation and - * ends with the desired message digest in mdContext->digest[0...15]. - * The handle is prepared for a new MD5 cycle. - * Returns 16 bytes representing the digest. - */ - -static void -do_final(MD5_CONTEXT *hd) -{ - u32 t, msb, lsb; - unsigned char *p; - - md5_update(hd, NULL, 0); /* flush */ - - msb = 0; - t = hd->nblocks; - if ((lsb = t << 6) < t) /* multiply by 64 to make a byte count */ - msb++; - msb += t >> 26; - t = lsb; - if ((lsb = t + hd->count) < t) /* add the count */ - msb++; - t = lsb; - if ((lsb = t << 3) < t) /* multiply by 8 to make a bit count */ - msb++; - msb += t >> 29; - - if (hd->count < 56) { /* enough room */ - hd->buf[hd->count++] = 0x80; /* pad */ - while(hd->count < 56) - hd->buf[hd->count++] = 0; /* pad */ - } else { /* need one extra block */ - hd->buf[hd->count++] = 0x80; /* pad character */ - while (hd->count < 64) - hd->buf[hd->count++] = 0; - md5_update(hd, NULL, 0); /* flush */ - memset(hd->buf, 0, 56); /* fill next block with zeroes */ - } - - /* append the 64 bit count */ - hd->buf[56] = lsb ; - hd->buf[57] = lsb >> 8; - hd->buf[58] = lsb >> 16; - hd->buf[59] = lsb >> 24; - hd->buf[60] = msb ; - hd->buf[61] = msb >> 8; - hd->buf[62] = msb >> 16; - hd->buf[63] = msb >> 24; - transform(hd, hd->buf); - - p = hd->buf; -#ifdef BIG_ENDIAN_HOST -#define X(a) do { *p++ = hd->##a ; *p++ = hd->##a >> 8; \ - *p++ = hd->##a >> 16; *p++ = hd->##a >> 24; } while(0) -#else /* little endian */ - /*#define X(a) do { *(u32*)p = hd->##a ; p += 4; } while(0)*/ - /* Unixware's cpp doesn't like the above construct so we do it his way: - * (reported by Allan Clark) */ -#define X(a) do { *(u32*)p = (*hd).a ; p += 4; } while(0) -#endif - X(A); - X(B); - X(C); - X(D); -#undef X - hd->finalized = 1; -} - -void -md5_final(unsigned char *digest, MD5_CONTEXT *ctx) -{ - if (!ctx->finalized) - do_final(ctx); - memcpy(digest, ctx->buf, 16); -} - -/* - * Creates a MD5 digest in hex fomrat (lowercase letters) from the - * string S. hextdigest but be buffer of at lease 33 bytes! - */ -void -md5_hex_digest(char *hexdigest, const unsigned char *s) -{ - int i; - MD5_CTX_syl context; - unsigned char digest[16]; - - md5_init(&context); - md5_update(&context, s, strlen(s)); - md5_final(digest, &context); - - for (i = 0; i < 16; i++) - sprintf(hexdigest + 2 * i, "%02x", digest[i]); -} - - -/* -** Function: md5_hmac -** taken from the file rfc2104.txt -** written by Martin Schaaf <mascha@ma-scha.de> -*/ -void -md5_hmac(unsigned char *digest, - const unsigned char* text, int text_len, - const unsigned char* key, int key_len) -{ - MD5_CTX_syl context; - unsigned char k_ipad[64]; /* inner padding - - * key XORd with ipad - */ - unsigned char k_opad[64]; /* outer padding - - * key XORd with opad - */ - /* unsigned char tk[16]; */ - int i; - - /* start out by storing key in pads */ - memset(k_ipad, 0, sizeof k_ipad); - memset(k_opad, 0, sizeof k_opad); - if (key_len > 64) { - /* if key is longer than 64 bytes reset it to key=MD5(key) */ - MD5_CTX_syl tctx; - - md5_init(&tctx); - md5_update(&tctx, key, key_len); - md5_final(k_ipad, &tctx); - md5_final(k_opad, &tctx); - } else { - memcpy(k_ipad, key, key_len); - memcpy(k_opad, key, key_len); - } - - /* - * 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 - */ - - - /* XOR key with ipad and opad values */ - for (i = 0; i < 64; i++) { - k_ipad[i] ^= 0x36; - k_opad[i] ^= 0x5c; - } - - /* - * perform inner MD5 - */ - md5_init(&context); /* init context for 1st - * pass */ - md5_update(&context, k_ipad, 64); /* start with inner pad */ - md5_update(&context, text, text_len); /* then text of datagram */ - md5_final(digest, &context); /* finish up 1st pass */ - /* - * perform outer MD5 - */ - md5_init(&context); /* init context for 2nd - * pass */ - md5_update(&context, k_opad, 64); /* start with outer pad */ - md5_update(&context, digest, 16); /* then results of 1st - * hash */ - md5_final(digest, &context); /* finish up 2nd pass */ -} - - -void -md5_hex_hmac(char *hexdigest, - const unsigned char* text, int text_len, - const unsigned char* key, int key_len) -{ - unsigned char digest[16]; - int i; - - md5_hmac(digest, text, text_len, key, key_len); - for (i = 0; i < 16; i++) - sprintf(hexdigest + 2 * i, "%02x", digest[i]); -} diff --git a/src/md5.h b/src/md5.h deleted file mode 100644 index a3783dad2..000000000 --- a/src/md5.h +++ /dev/null @@ -1,51 +0,0 @@ -/* md5.h - MD5 Message-Digest Algorithm - * Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc. - * - * according to the definition of MD5 in RFC 1321 from April 1992. - * NOTE: This is *not* the same file as the one from glibc - * - * 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 _MD5_HDR_ -#define _MD5_HDR_ - -#include "utils.h" - -typedef struct { /* Hmm, should be private */ - u32 A,B,C,D; - u32 nblocks; - unsigned char buf[64]; - int count; - int finalized; -} MD5_CONTEXT; - -typedef MD5_CONTEXT MD5_CTX_syl; - -void md5_init(MD5_CONTEXT *ctx); -void md5_update(MD5_CONTEXT *hd, const unsigned char *inbuf, size_t inlen); -void md5_final(unsigned char *digest, MD5_CONTEXT *ctx); - -void md5_hex_digest(char *hexdigest, const unsigned char *s); - -void md5_hmac(unsigned char *digest, - const unsigned char* text, int text_len, - const unsigned char* key, int key_len); -void md5_hex_hmac(char *hexdigest, - const unsigned char* text, int text_len, - const unsigned char* key, int key_len); - -#endif /* _MD5_HDR_ */ - diff --git a/src/menu.c b/src/menu.c deleted file mode 100644 index 0906a1e75..000000000 --- a/src/menu.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * 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 <glib.h> -#include <gtk/gtkwidget.h> -#include <gtk/gtkmenu.h> -#include <gtk/gtkmenubar.h> -#include <gtk/gtkitemfactory.h> -#include <gtk/gtkcheckmenuitem.h> -#include <gtk/gtkbutton.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); -} - -void menu_set_toggle(GtkItemFactory *ifactory, const gchar *path, - gboolean active) -{ - GtkWidget *widget; - - g_return_if_fail(ifactory != NULL); - - widget = gtk_item_factory_get_item(ifactory, path); - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), active); -} - -void menu_button_position(GtkMenu *menu, gint *x, gint *y, gpointer user_data) -{ - GtkWidget *button; - GtkRequisition requisition; - gint button_xpos, button_ypos; - gint xpos, ypos; - gint width, height; - gint scr_width, scr_height; - - g_return_if_fail(user_data != NULL); - g_return_if_fail(GTK_IS_BUTTON(user_data)); - - button = GTK_WIDGET(user_data); - - gtk_widget_get_child_requisition(GTK_WIDGET(menu), &requisition); - width = requisition.width; - height = requisition.height; - gdk_window_get_origin(button->window, &button_xpos, &button_ypos); - - xpos = button_xpos; - ypos = button_ypos + button->allocation.height; - - scr_width = gdk_screen_width(); - scr_height = gdk_screen_height(); - - if (xpos + width > scr_width) - xpos -= (xpos + width) - scr_width; - if (ypos + height > scr_height) - ypos = button_ypos - height; - if (xpos < 0) - xpos = 0; - if (ypos < 0) - ypos = 0; - - *x = xpos; - *y = ypos; -} diff --git a/src/menu.h b/src/menu.h deleted file mode 100644 index 8d5fb32c8..000000000 --- a/src/menu.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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); -void menu_set_toggle (GtkItemFactory *ifactory, - const gchar *path, - gboolean active); -void menu_button_position (GtkMenu *menu, - gint *x, - gint *y, - gpointer user_data); - -#endif /* __MENU_H__ */ diff --git a/src/messageview.c b/src/messageview.c deleted file mode 100644 index eee4f9985..000000000 --- a/src/messageview.c +++ /dev/null @@ -1,550 +0,0 @@ -/* - * 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" -#include "account.h" -#include "alertpanel.h" -#include "send.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);*/ -} - -static void notification_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 gint disposition_notification_queue(PrefsAccount * account, - gchar * to, 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(account != NULL, -1); - - tmp = g_strdup_printf("%s%cqueue.%d", g_get_tmp_dir(), - G_DIR_SEPARATOR, (gint)file); - 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"); - fprintf(fp, "MID:\n"); - fprintf(fp, "CFG:\n"); - fprintf(fp, "PT:0\n"); - fprintf(fp, "S:%s\n", account->address); - fprintf(fp, "RQ:\n"); - if (account->smtp_server) - fprintf(fp, "SSV:%s\n", account->smtp_server); - else - fprintf(fp, "SSV:\n"); - if (account->nntp_server) - fprintf(fp, "NSV:%s\n", account->nntp_server); - else - fprintf(fp, "NSV:\n"); - fprintf(fp, "SSH:\n"); - fprintf(fp, "R:<%s>", to); - 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); - queue_path = folder_item_get_path(queue); - if (!is_dir_exist(queue_path)) - make_dir_hier(queue_path); - if ((num = folder_item_add_msg(queue, tmp, TRUE)) < 0) { - g_warning(_("can't queue the message\n")); - unlink(tmp); - g_free(tmp); - g_free(queue_path); - return -1; - } - g_free(tmp); - - 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.perm_flags = newmsginfo.flags.tmp_flags = 0; - procmsg_write_flags(&newmsginfo, fp); - fclose(fp); - } - g_free(queue_path); - - folder_item_scan(queue); - folderview_update_item(queue, TRUE); - - return 0; -} - -static gint disposition_notification_send(MsgInfo * msginfo) -{ - gchar buf[BUFFSIZE]; - gchar tmp[MAXPATHLEN + 1]; - FILE *fp; - GSList * to_list; - gint ok; - gchar * to; - - if ((!msginfo->returnreceiptto) && - (!msginfo->dispositionnotificationto)) - return -1; - - /* write to temporary file */ - g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg%d", - get_rc_dir(), G_DIR_SEPARATOR, (gint)msginfo); - - if ((fp = fopen(tmp, "w")) == NULL) { - FILE_OP_ERROR(tmp, "fopen"); - return -1; - } - - /* chmod for security */ - if (change_file_mode_rw(fp, tmp) < 0) { - FILE_OP_ERROR(tmp, "chmod"); - g_warning(_("can't change file mode\n")); - } - - /* Date */ - get_rfc822_date(buf, sizeof(buf)); - fprintf(fp, "Date: %s\n", buf); - - /* From */ - if (cur_account->name && *cur_account->name) { - notification_convert_header - (buf, sizeof(buf), cur_account->name, - strlen("From: ")); - fprintf(fp, "From: %s <%s>\n", buf, cur_account->address); - } else - fprintf(fp, "From: %s\n", cur_account->address); - - /* To */ - if (msginfo->dispositionnotificationto) - to = msginfo->dispositionnotificationto; - else - to = msginfo->returnreceiptto; - fprintf(fp, "To: %s\n", to); - - /* Subject */ - notification_convert_header(buf, sizeof(buf), msginfo->subject, - strlen("Subject: ")); - fprintf(fp, "Subject: Disposition notification: %s\n", buf); - - if (fclose(fp) == EOF) { - FILE_OP_ERROR(tmp, "fclose"); - unlink(tmp); - return -1; - } - - to_list = address_list_append(NULL, msginfo->dispositionnotificationto); - ok = send_message(tmp, cur_account, to_list); - - if (ok < 0) { - if (prefs_common.queue_msg) { - AlertValue val; - - val = alertpanel - (_("Queueing"), - _("Error occurred while sending the notification.\n" - "Put this notification into queue folder?"), - _("OK"), _("Cancel"), NULL); - if (G_ALERTDEFAULT == val) { - ok = disposition_notification_queue(cur_account, to, tmp); - if (ok < 0) - alertpanel_error(_("Can't queue the notification.")); - } - } else - alertpanel_error(_("Error occurred while sending the notification.")); - } - - if (unlink(tmp) < 0) FILE_OP_ERROR(tmp, "unlink"); - - return ok; -} - -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_TMP_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); - - if (prefs_common.return_receipt - && (tmpmsginfo->dispositionnotificationto - || tmpmsginfo->returnreceiptto) - && (MSG_IS_UNREAD(msginfo->flags))) { - gint ok; - - if (alertpanel(_("Return Receipt"), _("Send return receipt ?"), - _("Yes"), _("No"), NULL) == G_ALERTDEFAULT) { - ok = disposition_notification_send(tmpmsginfo); - if (ok < 0) - alertpanel_error(_("Error occurred while sending notification.")); - } - } - - 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 deleted file mode 100644 index f17f418ea..000000000 --- a/src/messageview.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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/mgutils.c b/src/mgutils.c deleted file mode 100644 index 68595ddc2..000000000 --- a/src/mgutils.c +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * General functions for create common address book entries. - */ - -#include <sys/stat.h> -#include <stdio.h> -#include <glib.h> - -#include "addressitem.h" -#include "mgutils.h" - -/* -* Create new address item. -*/ -AddressItem *mgu_create_address_item( AddressObjectType type ) { - AddressItem *item; - item = g_new( AddressItem, 1 ); - ADDRESS_OBJECT(item)->type = type; - item->name = NULL; - item->address = NULL; - item->remarks = NULL; - item->externalID = NULL; - item->categoryID = ADDRESS_ITEM_CAT_UNKNOWN; - return item; -} - -/* -* Create new address item. -*/ -AddressItem *mgu_create_address( void ) { - AddressItem *item; - item = g_new( AddressItem, 1 ); - ADDRESS_OBJECT(item)->type = ADDR_ITEM; - item->name = NULL; - item->address = NULL; - item->remarks = NULL; - item->externalID = NULL; - item->categoryID = ADDRESS_ITEM_CAT_UNKNOWN; - return item; -} - -/* -* Create copy of specified address item. -*/ -AddressItem *mgu_copy_address_item( AddressItem *item ) { - AddressItem *itemNew = NULL; - if( item ) { - itemNew = mgu_create_address_item( ADDRESS_OBJECT(item)->type ); - itemNew->name = g_strdup( item->name ); - itemNew->address = g_strdup( item->address ); - itemNew->remarks = g_strdup( item->remarks ); - itemNew->externalID = g_strdup( item->externalID ); - itemNew->categoryID = item->categoryID; - } - return itemNew; -} - -/* -* Free address item. -*/ -void mgu_free_address( AddressItem *item ) { - g_return_if_fail( item != NULL ); - - /* Free internal stuff */ - g_free( item->name ); - g_free( item->address ); - g_free( item->remarks ); - g_free( item->externalID ); - item->name = NULL; - item->address = NULL; - item->remarks = NULL; - item->externalID = NULL; - item->categoryID = ADDRESS_ITEM_CAT_UNKNOWN; - - /* Now release item */ - g_free( item ); -} - -/* -* Refresh internal variables to force a reload. -*/ -void mgu_refresh_cache( AddressCache *cache ) { - cache->dataRead = FALSE; - cache->modified = TRUE; - cache->modifyTime = 0; -} - -/* -* Free up address list. -*/ -void mgu_free_address_list( GList *addrList ) { - AddressItem *item; - GList *node; - - /* Free data in the list */ - node = addrList; - while( node ) { - item = node->data; - mgu_free_address( item ); - node->data = NULL; - node = g_list_next( node ); - } - - /* Now release linked list object */ - g_list_free( addrList ); -} - -/* -* Clear the cache. -*/ -void mgu_clear_cache( AddressCache *cache ) { - AddressItem *item; - GList *node; - g_return_if_fail( cache != NULL ); - - /* Free data in the list */ - mgu_free_address_list( cache->addressList ); - cache->addressList = NULL; - mgu_refresh_cache( cache ); -} - -/* -* Clear the cache by setting pointers to NULL and free list. -* Note that individual items are not free'd. -*/ -void mgu_clear_cache_null( AddressCache *cache ) { - GList *node; - g_return_if_fail( cache != NULL ); - - /* Free data in the list */ - node = cache->addressList; - while( node ) { - node->data = NULL; - node = g_list_next( node ); - } - - /* Now release linked list object */ - g_list_free( cache->addressList ); - cache->addressList = NULL; -} - -/* -* Create new cache. -*/ -AddressCache *mgu_create_cache( void ) { - AddressCache *cache; - cache = g_new( AddressCache, 1 ); - cache->addressList = NULL; - cache->dataRead = FALSE; - cache->modified = FALSE; - cache->modifyTime = 0; - return cache; -} - -/* -* Create new address item. -*/ -void mgu_free_cache( AddressCache *cache ) { - mgu_clear_cache( cache ); - cache->addressList = NULL; -} - -/* -* Print address item. -*/ -void mgu_print_address( AddressItem *item, FILE *stream ) { - g_return_if_fail( item != NULL ); - fprintf( stream, "addr item:\n" ); - fprintf( stream, "\tname: '%s'\n", item->name ); - fprintf( stream, "\taddr: '%s'\n", item->address ); - fprintf( stream, "\trems: '%s'\n", item->remarks ); - fprintf( stream, "\tid : '%s'\n", item->externalID ); - fprintf( stream, "\tcatg: '%d'\n", item->categoryID ); - fprintf( stream, "---\n" ); -} - -/* -* Print linked list containing address item(s). -*/ -void mgu_print_address_list( GList *addrList, FILE *stream ) { - GList *node; - g_return_if_fail( addrList != NULL ); - - /* Now process the list */ - node = addrList; - while( node ) { - gpointer *gptr = node->data; - AddressItem *item = ( AddressItem * ) gptr; - mgu_print_address( item, stream ); - node = g_list_next( node ); - } -} - -/* -* Print address cache. -*/ -void mgu_print_cache( AddressCache *cache, FILE *stream ) { - GList *node; - g_return_if_fail( cache != NULL ); - fprintf( stream, "AddressCache:\n" ); - fprintf( stream, "modified : %s\n", cache->modified ? "yes" : "no" ); - fprintf( stream, "data read: %s\n", cache->dataRead ? "yes" : "no" ); - - /* Now process the list */ - node = cache->addressList; - while( node ) { - gpointer *gptr; - AddressItem *item; - gptr = node->data; - item = ( AddressItem * ) gptr; - mgu_print_address( item, stream ); - node = g_list_next( node ); - } -} - -/* -* Dump linked list of character strings (for debug). -*/ -void mgu_print_list( GSList *list, FILE *stream ) { - GSList *node = list; - while( node ) { - fprintf( stream, "\t- >%s<\n", node->data ); - node = g_slist_next( node ); - } -} - -/* -* Dump linked list of character strings (for debug). -*/ -void mgu_print_dlist( GList *list, FILE *stream ) { - GList *node = list; - while( node ) { - fprintf( stream, "\t- >%s<\n", node->data ); - node = g_list_next( node ); - } -} - -/* -* Check whether file has changed by comparing with cache. -* return: TRUE if file has changed. -*/ -gboolean mgu_check_file( AddressCache *cache, gchar *path ) { - gboolean retVal; - struct stat filestat; - retVal = TRUE; - if( path ) { - if( 0 == lstat( path, &filestat ) ) { - if( filestat.st_mtime == cache->modifyTime ) retVal = FALSE; - } - } - return retVal; -} - -/* -* Save file time to cache. -* return: TRUE if time marked. -*/ -gboolean mgu_mark_cache( AddressCache *cache, gchar *path ) { - gboolean retVal = FALSE; - struct stat filestat; - if( path ) { - if( 0 == lstat( path, &filestat ) ) { - cache->modifyTime = filestat.st_mtime; - retVal = TRUE; - } - } - return retVal; -} - -/* -* Free linked list of character strings. -*/ -void mgu_free_list( GSList *list ) { - GSList *node = list; - while( node ) { - g_free( node->data ); - node->data = NULL; - node = g_slist_next( node ); - } - g_slist_free( list ); -} - -/* -* Free linked list of character strings. -*/ -void mgu_free_dlist( GList *list ) { - GList *node = list; - while( node ) { - g_free( node->data ); - node->data = NULL; - node = g_list_next( node ); - } - g_list_free( list ); -} - -/* -* Coalesce linked list of characaters into one long string. -*/ -gchar *mgu_list_coalesce( GSList *list ) { - gchar *str = NULL; - gchar *buf = NULL; - gchar *start = NULL; - GSList *node = NULL; - gint len; - - if( ! list ) return NULL; - - // Calculate maximum length of text - len = 0; - node = list; - while( node ) { - str = node->data; - len += 1 + strlen( str ); - node = g_slist_next( node ); - } - - // Create new buffer. - buf = g_new( gchar, len+1 ); - start = buf; - node = list; - while( node ) { - str = node->data; - len = strlen( str ); - strcpy( start, str ); - start += len; - node = g_slist_next( node ); - } - return buf; -} - -/* -* Add address item to cache. -*/ -void mgu_add_cache( AddressCache *cache, AddressItem *addrItem ) { - cache->addressList = g_list_append( cache->addressList, addrItem ); - cache->modified = TRUE; -} - -struct mgu_error_entry { - gint e_code; - gchar *e_reason; -}; - -static const struct mgu_error_entry mgu_error_list[] = { - { MGU_SUCCESS, "Success" }, - { MGU_BAD_ARGS, "Bad arguments" }, - { MGU_NO_FILE, "File not specified" }, - { MGU_OPEN_FILE, "Error opening file" }, - { MGU_ERROR_READ, "Error reading file" }, - { MGU_EOF, "End of file encountered" }, - { MGU_OO_MEMORY, "Error allocating memory" }, - { MGU_BAD_FORMAT, "Bad file format" }, - { MGU_LDAP_CONNECT, "Error connecting to LDAP server" }, - { MGU_LDAP_INIT, "Error initializing LDAP" }, - { MGU_LDAP_BIND, "Error binding to LDAP server" }, - { MGU_LDAP_SEARCH, "Error searching LDAP database" }, - { MGU_LDAP_TIMEOUT, "Timeout performing LDAP operation" }, - { MGU_LDAP_CRITERIA, "Error in LDAP search criteria" }, - { MGU_LDAP_CRITERIA, "Error in LDAP search criteria" }, - { MGU_LDAP_NOENTRIES, "No LDAP entries found for search criteria" }, - { -999, NULL } -}; - -static const struct mgu_error_entry *mgu_error_find( gint err ) { - gint i; - for ( i = 0; mgu_error_list[i].e_code != -999; i++ ) { - if ( err == mgu_error_list[i].e_code ) - return & mgu_error_list[i]; - } - return NULL; -} - -/* -* Return error message for specified error code. -*/ -gchar *mgu_error2string( gint err ) { - const struct mgu_error_entry *e; - e = mgu_error_find( err ); - return ( e != NULL ) ? e->e_reason : "Unknown error"; -} - -/* -* End of Source. -*/ diff --git a/src/mgutils.h b/src/mgutils.h deleted file mode 100644 index 04ea7c172..000000000 --- a/src/mgutils.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * General definitions for common address book entries. - */ - -#ifndef __MGUTILS_H__ -#define __MGUTILS_H__ - -#include <time.h> -#include <stdio.h> -#include <glib.h> - -#include "addressitem.h" - -// Error codes -#define MGU_SUCCESS 0 -#define MGU_BAD_ARGS -1 -#define MGU_NO_FILE -2 -#define MGU_OPEN_FILE -3 -#define MGU_ERROR_READ -4 -#define MGU_EOF -5 -#define MGU_OO_MEMORY -6 -#define MGU_BAD_FORMAT -7 -#define MGU_LDAP_CONNECT -8 -#define MGU_LDAP_INIT -9 -#define MGU_LDAP_BIND -10 -#define MGU_LDAP_SEARCH -11 -#define MGU_LDAP_TIMEOUT -12 -#define MGU_LDAP_CRITERIA -13 -#define MGU_LDAP_NOENTRIES -14 - -// Address cache -typedef struct _AddressCache AddressCache; -struct _AddressCache { - GList *addressList; - gboolean dataRead; - gboolean modified; - time_t modifyTime; -}; - -// Function prototypes -AddressItem *mgu_create_address_item( AddressObjectType type ); -AddressItem *mgu_create_address( void ); -AddressItem *mgu_copy_address_item( AddressItem *item ); -void mgu_free_address( AddressItem *item ); -void mgu_free_address_list( GList *addrList ); -void mgu_refresh_cache( AddressCache *cache ); -void mgu_clear_cache( AddressCache *cache ); -void mgu_clear_cache_null( AddressCache *cache ); -AddressCache *mgu_create_cache( void ); -void mgu_free_cache( AddressCache *cache ); -void mgu_print_address( AddressItem *item, FILE *stream ); -void mgu_print_address_list( GList *addrList, FILE *stream ); -void mgu_print_cache( AddressCache *cache, FILE *stream ); -void mgu_print_list( GSList *list, FILE *stream ); -void mgu_print_dlist( GList *list, FILE *stream ); -gboolean mgu_check_file( AddressCache *cache, gchar *path ); -gboolean mgu_mark_cache( AddressCache *cache, gchar *path ); -void mgu_free_list( GSList *list ); -void mgu_free_dlist( GList *list ); -gchar *mgu_list_coalesce( GSList *list ); -void mgu_add_cache( AddressCache *cache, AddressItem *addrItem ); -gchar *mgu_error2string( gint err ); - -#endif /* __MGUTILS_H__ */ diff --git a/src/mh.c b/src/mh.c deleted file mode 100644 index 0ff17bec2..000000000 --- a/src/mh.c +++ /dev/null @@ -1,1119 +0,0 @@ -/* - * 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 <unistd.h> -#include <string.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, - gboolean remove_source) -{ - 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); - if (!is_dir_exist(destpath)) - make_dir_hier(destpath); - - destfile = g_strdup_printf("%s%c%d", destpath, G_DIR_SEPARATOR, - dest->last_num + 1); - - if (link(file, destfile) < 0) { - if (EXDEV == errno) { - if (copy_file(file, destfile) < 0) { - g_warning(_("can't copy message %s to %s\n"), - file, destfile); - g_free(destfile); - return -1; - } - } else { - FILE_OP_ERROR(file, "link"); - g_free(destfile); - return -1; - } - } - - if (remove_source) { - if (unlink(file) < 0) - FILE_OP_ERROR(file, "unlink"); - } - - 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; - gint filemode = 0; - PrefsFolderItem *prefs; - - 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; - } - - prefs = dest->prefs; - - 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 (move_file(srcfile, destfile) < 0) { - g_free(srcfile); - g_free(destfile); - if (fp) fclose(fp); - return -1; - } - - if (prefs && prefs->enable_folder_chmod && prefs->folder_chmod) { - if (chmod(destfile, prefs->folder_chmod) < 0) - FILE_OP_ERROR(destfile, "chmod"); - - /* for mark file */ - filemode = prefs->folder_chmod; - if (filemode & S_IRGRP) filemode |= S_IWGRP; - if (filemode & S_IROTH) filemode |= S_IWOTH; - } - - 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_PERM_FLAGS(newmsginfo.flags, - MSG_NEW|MSG_UNREAD|MSG_DELETED); - - procmsg_write_flags(&newmsginfo, fp); - - if (filemode) { -#if HAVE_FCHMOD - fchmod(fileno(fp), filemode); -#else - markfile = folder_item_get_mark_file(dest); - if (markfile) { - chmod(markfile, filemode); - g_free(markfile); - } -#endif - } - - 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; - PrefsFolderItem *prefs; - - 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; - } - - prefs = dest->prefs; - - 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 (move_file(srcfile, destfile) < 0) { - 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_PERM_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; - gint filemode = 0; - PrefsFolderItem *prefs; - - 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; - } - - prefs = dest->prefs; - - destdir = folder_item_get_path(dest); - if (!is_dir_exist(destdir)) - make_dir_hier(destdir); - - 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); - - dest->op_count--; - - 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; - } - - if (prefs && prefs->enable_folder_chmod && prefs->folder_chmod) { - if (chmod(destfile, prefs->folder_chmod) < 0) - FILE_OP_ERROR(destfile, "chmod"); - - /* for mark file */ - filemode = prefs->folder_chmod; - if (filemode & S_IRGRP) filemode |= S_IWGRP; - if (filemode & S_IROTH) filemode |= S_IWOTH; - } - - 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_PERM_FLAGS(newmsginfo.flags, - MSG_NEW|MSG_UNREAD|MSG_DELETED); - procmsg_write_flags(&newmsginfo, fp); - - if (filemode) { -#if HAVE_FCHMOD - fchmod(fileno(fp), filemode); -#else - markfile = folder_item_get_mark_file(dest); - if (markfile) { - chmod(markfile, filemode); - g_free(markfile); - } -#endif - } - - fclose(fp); - } - - return dest->last_num; -} - -/* -gint mh_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) -{ - Folder * src_folder; - gchar * filename; - gint num; - gchar * destdir; - FILE * fp; - - src_folder = msginfo->folder->folder; - - g_return_val_if_fail(src_folder->fetch_msg != NULL, -1); - - filename = src_folder->fetch_msg(src_folder, - msginfo->folder, - msginfo->msgnum); - if (filename == NULL) - return -1; - - num = folder->add_msg(folder, dest, filename, FALSE); - - destdir = folder_item_get_path(dest); - if ((fp = procmsg_open_mark_file(destdir, TRUE)) == NULL) - g_warning(_("Can't open mark file.\n")); - - 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 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 (!is_dir_exist(destdir)) - make_dir_hier(destdir); - - 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_PERM_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; - gint val; - - g_return_val_if_fail(item != NULL, -1); - - path = folder_item_get_path(item); - g_return_val_if_fail(path != NULL, -1); - val = remove_all_numbered_files(path); - g_free(path); - - return val; -} - -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(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); - if (!is_dir_exist(path)) - make_dir_hier(path); - - 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); - if (!is_dir_exist(oldpath)) - make_dir_hier(oldpath); - - 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; - - flags.perm_flags = MSG_NEW|MSG_UNREAD; - flags.tmp_flags = 0; - - g_return_val_if_fail(item != NULL, NULL); - g_return_val_if_fail(file != NULL, NULL); - - if (item->stype == F_QUEUE) { - MSG_SET_TMP_FLAGS(flags, MSG_QUEUED); - } else if (item->stype == F_DRAFT) { - MSG_SET_TMP_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 gboolean mh_is_maildir_one(const gchar *path, const gchar *dir) -{ - gchar *entry; - gboolean result; - - entry = g_strconcat(path, G_DIR_SEPARATOR_S, dir, NULL); - result = is_dir_exist(entry); - g_free(entry); - - return result; -} - -/* - * check whether PATH is a Maildir style mailbox. - * This is the case if the 3 subdir: new, cur, tmp are existing. - * This functon assumes that entry is an directory - */ -static gboolean mh_is_maildir(const gchar *path) -{ - return mh_is_maildir_one(path, "new") && - mh_is_maildir_one(path, "cur") && - mh_is_maildir_one(path, "tmp"); -} - -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; - - if (mh_is_maildir(entry)) { - g_free(entry); - continue; - } - - 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 deleted file mode 100644 index 646727948..000000000 --- a/src/mh.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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, - gboolean remove_source); -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 deleted file mode 100644 index fc5e252ba..000000000 --- a/src/mimeview.c +++ /dev/null @@ -1,915 +0,0 @@ -/* - * 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/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 "inputdialog.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, - MimeViewType 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_open_with (MimeView *mimeview); -static void mimeview_view_file (const gchar *filename, - MimeInfo *partinfo, - const gchar *cmdline); -#if USE_GPGME -static void mimeview_check_signature (MimeView *mimeview); -#endif - -static GtkItemFactoryEntry mimeview_popup_entries[] = -{ - {N_("/_Open"), NULL, mimeview_launch, 0, NULL}, - {N_("/Open _with..."), NULL, mimeview_open_with, 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); - 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; - - /* ungrab the mouse event */ - if (GTK_WIDGET_HAS_GRAB(ctree)) { - gtk_grab_remove(GTK_WIDGET(ctree)); - if (gdk_pointer_is_grabbed()) - gdk_pointer_ungrab(GDK_CURRENT_TIME); - } - - 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 (partinfo && - partinfo->mime_type == MIME_APPLICATION_OCTET_STREAM) - menu_set_sensitive(mimeview->popupfactory, - "/Open", FALSE); - else - menu_set_sensitive(mimeview->popupfactory, - "/Open", 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: - break; - } - - 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, NULL); - - g_free(filename); -} - -static void mimeview_open_with(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 { - gchar *cmd; - - cmd = input_dialog - (_("Open with"), - _("Enter the command line to open file:\n" - "(`%s' will be replaced with file name)"), - "gedit %s"); - if (cmd) { - mimeview_view_file(filename, partinfo, cmd); - g_free(cmd); - } - } - - g_free(filename); -} - -static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo, - const gchar *cmdline) -{ - 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 -x -c %s '%s'"; - gchar buf[1024]; - gchar m_buf[1024]; - const gchar *cmd; - const gchar *def_cmd; - const gchar *p; - - if (cmdline) { - cmd = cmdline; - def_cmd = NULL; - } else 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 deleted file mode 100644 index 42051396f..000000000 --- a/src/mimeview.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * 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 deleted file mode 100644 index a3a820887..000000000 --- a/src/news.c +++ /dev/null @@ -1,749 +0,0 @@ -/* - * 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 <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" -#include "prefs_account.h" -#include "inputdialog.h" -#include "alertpanel.h" - -#define NNTP_PORT 119 - -static Session *news_session_new (const gchar *server, - gushort port, - const gchar *userid, - const gchar *passwd); - -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 gint news_select_group (NNTPSession *session, - const gchar *group); -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 gchar *news_parse_xhdr (const gchar *xhdr_str, - MsgInfo *msginfo); -static GSList *news_delete_old_articles (GSList *alist, - FolderItem *item, - gint first); -static void news_delete_all_articles (FolderItem *item); - - -static Session *news_session_new(const gchar *server, gushort port, - const gchar *userid, const gchar *passwd) -{ - gchar buf[NNTPBUFSIZE]; - NNTPSession *session; - NNTPSockInfo *nntp_sock; - - g_return_val_if_fail(server != NULL, NULL); - - log_message(_("creating NNTP connection to %s:%d ...\n"), server, port); - - if (userid && passwd) - nntp_sock = nntp_open_auth(server, port, buf, userid, passwd); - else - nntp_sock = nntp_open(server, port, buf); - if (nntp_sock == NULL) - return NULL; - - session = g_new(NNTPSession, 1); - SESSION(session)->type = SESSION_NEWS; - SESSION(session)->server = g_strdup(server); - session->nntp_sock = nntp_sock; - SESSION(session)->sock = nntp_sock->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) -{ - nntp_close(session->nntp_sock); - session->nntp_sock = NULL; - SESSION(session)->sock = NULL; - - g_free(session->group); -} - -static gchar *news_query_password(const gchar *server, const gchar *user) -{ - gchar *message; - gchar *pass; - - message = g_strdup_printf(_("Input password for %s on %s:"), - user, server); - pass = input_dialog_with_invisible(_("Input password"), message, NULL); - g_free(message); - - return pass; -} - -static Session *news_session_new_for_folder(Folder *folder) -{ - Session *session; - PrefsAccount *ac; - const gchar *userid = NULL; - gchar *passwd = NULL; - - g_return_val_if_fail(folder != NULL, NULL); - g_return_val_if_fail(folder->account != NULL, NULL); - - ac = folder->account; - if (ac->use_nntp_auth && ac->userid && ac->userid[0]) { - userid = ac->userid; - if (ac->passwd && ac->passwd[0]) - passwd = g_strdup(ac->passwd); - else - passwd = news_query_password(ac->nntp_server, userid); - } - - session = news_session_new(ac->nntp_server, - ac->set_nntpport ? ac->nntpport : NNTP_PORT, - userid, passwd); - g_free(passwd); - - return session; -} - -NNTPSession *news_session_get(Folder *folder) -{ - NNTPSession *session; - - 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_for_folder(folder); - statusbar_pop_all(); - return NNTP_SESSION(REMOTE_FOLDER(folder)->session); - } - - session = NNTP_SESSION(REMOTE_FOLDER(folder)->session); - - if (nntp_mode(session->nntp_sock, FALSE) != NN_SUCCESS) { - log_warning(_("NNTP connection to %s:%d has been" - " disconnected. Reconnecting...\n"), - folder->account->nntp_server, - folder->account->set_nntpport ? - folder->account->nntpport : NNTP_PORT); - session_destroy(REMOTE_FOLDER(folder)->session); - REMOTE_FOLDER(folder)->session = - news_session_new_for_folder(folder); - } - - statusbar_pop_all(); - 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_articles(alist, item, 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_articles(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; - NNTPSession *session; - gint ok; - - g_return_val_if_fail(folder != NULL, NULL); - g_return_val_if_fail(item != NULL, NULL); - - path = folder_item_get_path(item); - if (!is_dir_exist(path)) - make_dir_hier(path); - 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; - } - - session = news_session_get(folder); - if (!session) { - g_free(filename); - return NULL; - } - - ok = news_select_group(session, item->path); - statusbar_pop_all(); - if (ok != NN_SUCCESS) { - g_warning(_("can't select group %s\n"), item->path); - 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) -{ -} - -GSList *news_get_group_list(Folder *folder) -{ - gchar *path, *filename; - FILE *fp; - GSList *list = NULL; - GSList *last = NULL; - gchar buf[NNTPBUFSIZE]; - - g_return_val_if_fail(folder != NULL, NULL); - g_return_val_if_fail(folder->type == F_NEWS, NULL); - - path = folder_item_get_path(FOLDER_ITEM(folder->node->data)); - if (!is_dir_exist(path)) - make_dir_hier(path); - filename = g_strconcat(path, G_DIR_SEPARATOR_S, NEWSGROUP_LIST, NULL); - g_free(path); - - if ((fp = fopen(filename, "r")) == NULL) { - NNTPSession *session; - - session = news_session_get(folder); - if (!session) { - g_free(filename); - return NULL; - } - - if (nntp_list(session->nntp_sock) != NN_SUCCESS) { - g_free(filename); - statusbar_pop_all(); - return NULL; - } - statusbar_pop_all(); - if (recv_write_to_file(SESSION(session)->sock, filename) < 0) { - log_warning(_("can't retrieve newsgroup list\n")); - g_free(filename); - return NULL; - } - - if ((fp = fopen(filename, "r")) == NULL) { - FILE_OP_ERROR(filename, "fopen"); - g_free(filename); - return NULL; - } - } - - while (fgets(buf, sizeof(buf), fp) != NULL) { - gchar *p = buf; - while (*p != '\0' && *p != ' ') p++; - *p = '\0'; - if (!last) - last = list = g_slist_append(NULL, g_strdup(buf)); - else { - last = g_slist_append(last, g_strdup(buf)); - last = last->next; - } - } - - fclose(fp); - g_free(filename); - - list = g_slist_sort(list, (GCompareFunc)g_strcasecmp); - - statusbar_pop_all(); - - return list; -} - -void news_remove_group_list(Folder *folder) -{ - gchar *path, *filename; - - g_return_if_fail(folder != NULL); - g_return_if_fail(folder->type == F_NEWS); - - path = folder_item_get_path(FOLDER_ITEM(folder->node->data)); - filename = g_strconcat(path, G_DIR_SEPARATOR_S, NEWSGROUP_LIST, NULL); - g_free(path); - - if (is_file_exist(filename)) { - if (remove(filename) < 0) - FILE_OP_ERROR(filename, "remove"); - } - g_free(filename); -} - -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->nntp_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->nntp_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->nntp_sock->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); -} - -/** - * news_select_group: - * @session: Active NNTP session. - * @group: Newsgroup name. - * - * Select newsgroup @group with the GROUP command if it is not already - * selected in @session. - * - * Return value: NNTP result code. - **/ -static gint news_select_group(NNTPSession *session, const gchar *group) -{ - gint ok; - gint num, first, last; - - if (session->group && g_strcasecmp(session->group, group) == 0) - return NN_SUCCESS; - - g_free(session->group); - session->group = NULL; - - ok = nntp_group(session->nntp_sock, group, &num, &first, &last); - if (ok == NN_SUCCESS) - session->group = g_strdup(group); - - return ok; -} - -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); - - g_free(session->group); - session->group = NULL; - - ok = nntp_group(session->nntp_sock, item->path, - &num, &first, &last); - if (ok != NN_SUCCESS) { - log_warning(_("can't set group: %s\n"), item->path); - return NULL; - } - session->group = g_strdup(item->path); - - /* 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 (rfirst) *rfirst = first; - if (rlast) *rlast = 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->nntp_sock, begin, end) != NN_SUCCESS) { - log_warning(_("can't get xover\n")); - return NULL; - } - - for (;;) { - if (sock_gets(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.perm_flags = MSG_NEW|MSG_UNREAD; - msginfo->flags.tmp_flags = MSG_NEWS; - msginfo->newsgroups = g_strdup(item->path); - - if (!newlist) - llast = newlist = g_slist_append(newlist, msginfo); - else { - llast = g_slist_append(llast, msginfo); - llast = llast->next; - } - } - - if (nntp_xhdr(session->nntp_sock, "to", begin, end) != NN_SUCCESS) { - log_warning(_("can't get xhdr\n")); - return newlist; - } - - llast = newlist; - - for (;;) { - if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) { - log_warning(_("error occurred while getting xhdr.\n")); - return newlist; - } - - if (buf[0] == '.' && buf[1] == '\r') break; - if (!llast) { - g_warning("llast == NULL\n"); - continue; - } - - msginfo = (MsgInfo *)llast->data; - msginfo->to = news_parse_xhdr(buf, msginfo); - - llast = llast->next; - } - - if (nntp_xhdr(session->nntp_sock, "cc", begin, end) != NN_SUCCESS) { - log_warning(_("can't get xhdr\n")); - return newlist; - } - - llast = newlist; - - for (;;) { - if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) { - log_warning(_("error occurred while getting xhdr.\n")); - return newlist; - } - - if (buf[0] == '.' && buf[1] == '\r') break; - if (!llast) { - g_warning("llast == NULL\n"); - continue; - } - - msginfo = (MsgInfo *)llast->data; - msginfo->cc = news_parse_xhdr(buf, msginfo); - - llast = llast->next; - } - - 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); - - msginfo->references = g_strdup(ref); - 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 gchar *news_parse_xhdr(const gchar *xhdr_str, MsgInfo *msginfo) -{ - gchar *p; - gchar *tmp; - gint num; - - p = strchr(xhdr_str, ' '); - if (!p) - return NULL; - else - p++; - - num = atoi(xhdr_str); - if (msginfo->msgnum != num) return NULL; - - tmp = strchr(p, '\r'); - if (!tmp) tmp = strchr(p, '\n'); - - if (tmp) - return g_strndup(p, tmp - p); - else - return g_strdup(p); -} - -static GSList *news_delete_old_articles(GSList *alist, FolderItem *item, - gint first) -{ - GSList *cur, *next; - MsgInfo *msginfo; - gchar *dir; - - g_return_val_if_fail(item != NULL, alist); - g_return_val_if_fail(item->folder != NULL, alist); - g_return_val_if_fail(item->folder->type == F_NEWS, alist); - - if (first < 2) return alist; - - debug_print(_("Deleting cached articles 1 - %d ... "), first - 1); - - dir = folder_item_get_path(item); - remove_numbered_files(dir, 1, first - 1); - g_free(dir); - - for (cur = alist; cur != NULL; ) { - next = cur->next; - - msginfo = (MsgInfo *)cur->data; - if (msginfo && msginfo->msgnum < first) { - procmsg_msginfo_free(msginfo); - alist = g_slist_remove(alist, msginfo); - } - - cur = next; - } - - return alist; -} - -static void news_delete_all_articles(FolderItem *item) -{ - gchar *dir; - - g_return_if_fail(item != NULL); - g_return_if_fail(item->folder != NULL); - g_return_if_fail(item->folder->type == F_NEWS); - - debug_print(_("\tDeleting all cached articles... ")); - - dir = folder_item_get_path(item); - remove_all_numbered_files(dir); - g_free(dir); - - debug_print(_("done.\n")); -} diff --git a/src/news.h b/src/news.h deleted file mode 100644 index 4dfe84574..000000000 --- a/src/news.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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 __NEWS_H__ -#define __NEWS_H__ - -#include <glib.h> - -#include "folder.h" -#include "session.h" -#include "nntp.h" - -typedef struct _NNTPSession NNTPSession; - -#define NNTP_SESSION(obj) ((NNTPSession *)obj) - -struct _NNTPSession -{ - Session session; - - NNTPSockInfo *nntp_sock; - gchar *group; -}; - - -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); - -GSList *news_get_group_list (Folder *folder); -void news_remove_group_list (Folder *folder); - -gint news_post (Folder *folder, - const gchar *file); - -#endif /* __NEWS_H__ */ diff --git a/src/nntp.c b/src/nntp.c deleted file mode 100644 index 458ffe739..000000000 --- a/src/nntp.c +++ /dev/null @@ -1,361 +0,0 @@ -/* - * 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 <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 (NNTPSockInfo *sock, - const gchar *format, - ...); -static gint nntp_gen_recv (NNTPSockInfo *sock, - gchar *buf, - gint size); -static gint nntp_gen_command (NNTPSockInfo *sock, - gchar *argbuf, - const gchar *format, - ...); - -NNTPSockInfo *nntp_open(const gchar *server, gushort port, gchar *buf) -{ - SockInfo *sock; - NNTPSockInfo *nntp_sock; - - if ((sock = sock_connect(server, port)) == NULL) { - log_warning(_("Can't connect to NNTP server: %s:%d\n"), - server, port); - return NULL; - } - nntp_sock = g_new0(NNTPSockInfo, 1); - nntp_sock->sock = sock; - - if (nntp_ok(nntp_sock, buf) == NN_SUCCESS) - return nntp_sock; - else { - sock_close(sock); - g_free(nntp_sock); - return NULL; - } -} - -NNTPSockInfo *nntp_open_auth(const gchar *server, gushort port, gchar *buf, - const gchar *userid, const gchar *passwd) -{ - NNTPSockInfo *sock; - - sock = nntp_open(server, port, buf); - if (!sock) return NULL; - - sock->userid = g_strdup(userid); - sock->passwd = g_strdup(passwd); - - return sock; -} - -void nntp_close(NNTPSockInfo *sock) -{ - if (!sock) return; - - sock_close(sock->sock); - g_free(sock->userid); - g_free(sock->passwd); - g_free(sock); -} - -gint nntp_group(NNTPSockInfo *sock, const gchar *group, - gint *num, gint *first, gint *last) -{ - gint ok; - gint resp; - gchar buf[NNTPBUFSIZE]; - - ok = nntp_gen_command(sock, buf, "GROUP %s", group); - - if (ok != 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(NNTPSockInfo *sock, const gchar *cmd, gint num, - gchar **msgid) -{ - gint ok; - gchar buf[NNTPBUFSIZE]; - - if (num > 0) - ok = nntp_gen_command(sock, buf, "%s %d", cmd, num); - else - ok = nntp_gen_command(sock, buf, cmd); - - if (ok != 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(NNTPSockInfo *sock, gint num, gchar **msgid) -{ - return nntp_get_article(sock, "ARTICLE", num, msgid); -} - -gint nntp_body(NNTPSockInfo *sock, gint num, gchar **msgid) -{ - return nntp_get_article(sock, "BODY", num, msgid); -} - -gint nntp_head(NNTPSockInfo *sock, gint num, gchar **msgid) -{ - return nntp_get_article(sock, "HEAD", num, msgid); -} - -gint nntp_stat(NNTPSockInfo *sock, gint num, gchar **msgid) -{ - return nntp_get_article(sock, "STAT", num, msgid); -} - -gint nntp_next(NNTPSockInfo *sock, gint *num, gchar **msgid) -{ - gint ok; - gint resp; - gchar buf[NNTPBUFSIZE]; - - ok = nntp_gen_command(sock, buf, "NEXT"); - - if (ok != 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(NNTPSockInfo *sock, gint first, gint last) -{ - gint ok; - gchar buf[NNTPBUFSIZE]; - - ok = nntp_gen_command(sock, buf, "XOVER %d-%d", first, last); - if (ok != NN_SUCCESS) - return ok; - - return NN_SUCCESS; -} - -gint nntp_xhdr(NNTPSockInfo *sock, const gchar *header, gint first, gint last) -{ - gint ok; - gchar buf[NNTPBUFSIZE]; - - ok = nntp_gen_command(sock, buf, "XHDR %s %d-%d", header, first, last); - if (ok != NN_SUCCESS) - return ok; - - return NN_SUCCESS; -} - -gint nntp_list(NNTPSockInfo *sock) -{ - return nntp_gen_command(sock, NULL, "LIST"); -} - -gint nntp_post(NNTPSockInfo *sock, FILE *fp) -{ - gint ok; - gchar buf[NNTPBUFSIZE]; - - ok = nntp_gen_command(sock, buf, "POST"); - if (ok != NN_SUCCESS) - return ok; - - while (fgets(buf, sizeof(buf), fp) != NULL) { - strretchomp(buf); - if (buf[0] == '.') { - if (sock_write(sock->sock, ".", 1) < 0) { - log_warning(_("Error occurred while posting\n")); - return NN_SOCKET; - } - } - - if (sock_puts(sock->sock, buf) < 0) { - log_warning(_("Error occurred while posting\n")); - return NN_SOCKET; - } - } - - sock_write(sock->sock, ".\r\n", 3); - if ((ok = nntp_ok(sock, buf)) != NN_SUCCESS) - return ok; - - return NN_SUCCESS; -} - -gint nntp_newgroups(NNTPSockInfo *sock) -{ - return NN_SUCCESS; -} - -gint nntp_newnews(NNTPSockInfo *sock) -{ - return NN_SUCCESS; -} - -gint nntp_mode(NNTPSockInfo *sock, gboolean stream) -{ - gint ok; - - if (sock->auth_failed) - return NN_AUTHREQ; - - ok = nntp_gen_command(sock, NULL, "MODE %s", - stream ? "STREAM" : "READER"); - - return ok; -} - -gint nntp_ok(NNTPSockInfo *sock, gchar *argbuf) -{ - gint ok; - gchar buf[NNTPBUFSIZE]; - - if ((ok = nntp_gen_recv(sock, buf, sizeof(buf))) == NN_SUCCESS) { - if (strlen(buf) < 3) - return NN_ERROR; - - if ((buf[0] == '1' || buf[0] == '2' || buf[0] == '3') && - (buf[3] == ' ' || buf[3] == '\0')) { - if (argbuf) - strcpy(argbuf, buf); - - if (!strncmp(buf, "381", 3)) - return NN_AUTHCONT; - - return NN_SUCCESS; - } else if (!strncmp(buf, "480", 3)) - return NN_AUTHREQ; - else - return NN_ERROR; - } - - return ok; -} - -static void nntp_gen_send(NNTPSockInfo *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) { - if (!g_strncasecmp(buf, "AUTHINFO PASS", 13)) - log_print("NNTP> AUTHINFO PASS ********\n"); - else - log_print("NNTP> %s\n", buf); - } - - strcat(buf, "\r\n"); - sock_write(sock->sock, buf, strlen(buf)); -} - -static gint nntp_gen_recv(NNTPSockInfo *sock, gchar *buf, gint size) -{ - if (sock_gets(sock->sock, buf, size) == -1) - return NN_SOCKET; - - strretchomp(buf); - - if (verbose) - log_print("NNTP< %s\n", buf); - - return NN_SUCCESS; -} - -static gint nntp_gen_command(NNTPSockInfo *sock, gchar *argbuf, - const gchar *format, ...) -{ - gchar buf[NNTPBUFSIZE]; - va_list args; - gint ok; - - va_start(args, format); - g_vsnprintf(buf, sizeof(buf), format, args); - va_end(args); - - nntp_gen_send(sock, "%s", buf); - ok = nntp_ok(sock, argbuf); - if (ok == NN_AUTHREQ) { - if (!sock->userid || !sock->passwd) { - sock->auth_failed = TRUE; - return ok; - } - - nntp_gen_send(sock, "AUTHINFO USER %s", sock->userid); - ok = nntp_ok(sock, NULL); - if (ok == NN_AUTHCONT) { - nntp_gen_send(sock, "AUTHINFO PASS %s", sock->passwd); - ok = nntp_ok(sock, NULL); - } - if (ok != NN_SUCCESS) { - sock->auth_failed = TRUE; - return ok; - } - - nntp_gen_send(sock, "%s", buf); - ok = nntp_ok(sock, argbuf); - } - - return ok; -} diff --git a/src/nntp.h b/src/nntp.h deleted file mode 100644 index 3063c0836..000000000 --- a/src/nntp.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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 __NNTP_H__ -#define __NNTP_H__ - -#include "socket.h" - -typedef struct _NNTPSockInfo NNTPSockInfo; - -struct _NNTPSockInfo -{ - SockInfo *sock; - - gchar *userid; - gchar *passwd; - gboolean auth_failed; -}; - -#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 NN_AUTHREQ 8 -#define NN_AUTHCONT 9 - -#define NNTPBUFSIZE 8192 - -NNTPSockInfo *nntp_open (const gchar *server, - gushort port, - gchar *buf); -NNTPSockInfo *nntp_open_auth (const gchar *server, - gushort port, - gchar *buf, - const gchar *userid, - const gchar *passwd); -void nntp_close (NNTPSockInfo *sock); -gint nntp_group (NNTPSockInfo *sock, - const gchar *group, - gint *num, - gint *first, - gint *last); -gint nntp_get_article (NNTPSockInfo *sock, - const gchar *cmd, - gint num, - gchar **msgid); -gint nntp_article (NNTPSockInfo *sock, - gint num, - gchar **msgid); -gint nntp_body (NNTPSockInfo *sock, - gint num, - gchar **msgid); -gint nntp_head (NNTPSockInfo *sock, - gint num, - gchar **msgid); -gint nntp_stat (NNTPSockInfo *sock, - gint num, - gchar **msgid); -gint nntp_next (NNTPSockInfo *sock, - gint *num, - gchar **msgid); -gint nntp_xover (NNTPSockInfo *sock, - gint first, - gint last); -gint nntp_xhdr (NNTPSockInfo *sock, - const gchar *header, - gint first, - gint last); -gint nntp_list (NNTPSockInfo *sock); -gint nntp_post (NNTPSockInfo *sock, - FILE *fp); -gint nntp_newgroups (NNTPSockInfo *sock); -gint nntp_newnews (NNTPSockInfo *sock); -gint nntp_mode (NNTPSockInfo *sock, - gboolean stream); -gint nntp_ok (NNTPSockInfo *sock, - gchar *argbuf); - -#endif /* __NNTP_H__ */ diff --git a/src/passphrase.c b/src/passphrase.c deleted file mode 100644 index 74b963b93..000000000 --- a/src/passphrase.c +++ /dev/null @@ -1,257 +0,0 @@ -/* 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 - -#if USE_GPGME - -#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 gint passphrase_deleted(GtkWidget *widget, GdkEventAny *event, - 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_deleted), 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 gint -passphrase_deleted(GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - passphrase_cancel_cb(NULL, NULL); - return TRUE; -} - - -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; -} - -#endif /* USE_GPGME */ diff --git a/src/passphrase.h b/src/passphrase.h deleted file mode 100644 index c3c69b70a..000000000 --- a/src/passphrase.h +++ /dev/null @@ -1,27 +0,0 @@ -/* 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/category.xpm b/src/pixmaps/category.xpm deleted file mode 100644 index fd16880fc..000000000 --- a/src/pixmaps/category.xpm +++ /dev/null @@ -1,35 +0,0 @@ -/* XPM */ -static char * category_xpm[] = { -"16 16 16 1", -" c None", -". c #000000", -"+ c #2C7AD4", -"@ c #3B98C5", -"# c #2D5AD3", -"$ c #01DFFF", -"% c #BFEDE2", -"& c #12BDEE", -"* c #B8EADF", -"= c #2ABAD6", -"- c #039FFD", -"; c #155DEB", -"> c #271BD9", -", c #3F18C1", -"' c #1F1CE1", -") c #3719C9", -" ", -" ", -" .... ", -" .+@+@. ", -" .+#+#@+...... ", -" .$$%$%&*%$==$.", -" .=@&@&@=+=+-;.", -" .$&@&@=+=+-+#.", -" .=@&@=+=+-+->.", -" .$&@=+=+-+-;#.", -" .=@=+=+-+-;-,.", -" .$=+=+-+-;-;>.", -" .=';';';';)>,.", -" ............ ", -" ", -" "}; diff --git a/src/pixmaps/clip.xpm b/src/pixmaps/clip.xpm deleted file mode 100644 index c425d2037..000000000 --- a/src/pixmaps/clip.xpm +++ /dev/null @@ -1,17 +0,0 @@ -/* XPM */ -static char * clip_xpm[] = { -"6 12 2 1", -" c None", -". c #000000", -" ... ", -" . .", -" . .", -".. ..", -".. ..", -".. ..", -".. ..", -". .. .", -". .", -". .", -" .... ", -" "}; diff --git a/src/pixmaps/complete.xpm b/src/pixmaps/complete.xpm deleted file mode 100644 index edeb542b0..000000000 --- a/src/pixmaps/complete.xpm +++ /dev/null @@ -1,41 +0,0 @@ -/* XPM */ -static char * complete_xpm[] = { -"20 20 18 1", -" c None", -". c #000000", -"+ c #B3C2A7", -"@ c #708C58", -"# c #859D71", -"$ c #627B4D", -"% c #97AB86", -"& c #566C43", -"* c #A2BD9E", -"= c #789774", -"- c #88AC84", -"; c #5E764A", -"> c #698566", -", c #6D8855", -"' c #688251", -") c #668050", -"! c #6D8956", -"~ c #4F633E", -" ", -" ", -" ", -" .. ", -" .+@. ", -" .#$. ", -" .%@. ", -" .. .#&. ", -" .*=. .#@. ", -" .--.. .@&. ", -" .-=..;@. ", -" .-->.,&. ", -" .--'). ", -" .-!~. ", -" .--. ", -" .>. ", -" . ", -" ", -" ", -" "}; diff --git a/src/pixmaps/continue.xpm b/src/pixmaps/continue.xpm deleted file mode 100644 index 9237651b7..000000000 --- a/src/pixmaps/continue.xpm +++ /dev/null @@ -1,76 +0,0 @@ -/* XPM */ -static char * continue_xpm[] = { -"24 24 49 1", -" c None", -". c #000000", -"+ c #E1EADF", -"@ c #FFFFFF", -"# c #F0F4EF", -"$ c #D4E0D1", -"% c #F3F7F3", -"& c #EDF2EB", -"* c #CEDCCB", -"= c #F4F7F4", -"- c #F1F5F0", -"; c #EFF3EE", -"> c #EBF1EA", -", c #C9D8C5", -"' c #E5ECE3", -") c #CBDAC7", -"! c #181818", -"~ c #2B2B2B", -"{ c #E4EBE2", -"] c #DEE7DC", -"^ c #D7E3D5", -"/ c #EEF3ED", -"( c #B1C7AC", -"_ c #9DBB90", -": c #88AC80", -"< c #83AA7C", -"[ c #85A879", -"} c #7EA476", -"| c #84A778", -"1 c #759B6C", -"2 c #59814F", -"3 c #3A5934", -"4 c #9ABB8F", -"5 c #83AA7A", -"6 c #87AC7D", -"7 c #82A87B", -"8 c #86A97C", -"9 c #759C6D", -"0 c #537C49", -"a c #445840", -"b c #80A776", -"c c #749868", -"d c #4B7040", -"e c #90B387", -"f c #749A6B", -"g c #3B5E31", -"h c #5D8554", -"i c #37592F", -"j c #3F6534", -" ", -" ", -" ", -" ", -" ", -" .. ", -" .+.. ", -" .@#$.. ", -" .@%&#*.. ", -" .@=-;>-,.. ", -" .@;;;>>'#)!. ", -" ~@;;;>{]^]/(.. ", -" ._:<:<[}|123.. ", -" .4567|890a.. ", -" .46b[c0d.. ", -" .ebf0g.. ", -" .<hi.. ", -" .j.. ", -" .. ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/deleted.xpm b/src/pixmaps/deleted.xpm deleted file mode 100644 index 988364b88..000000000 --- a/src/pixmaps/deleted.xpm +++ /dev/null @@ -1,15 +0,0 @@ -/* 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 deleted file mode 100644 index d766258c7..000000000 --- a/src/pixmaps/dir-close.xpm +++ /dev/null @@ -1,47 +0,0 @@ -/* 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 deleted file mode 100644 index 41f8341fa..000000000 --- a/src/pixmaps/dir-open.xpm +++ /dev/null @@ -1,53 +0,0 @@ -/* 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/error.xpm b/src/pixmaps/error.xpm deleted file mode 100644 index b145e9deb..000000000 --- a/src/pixmaps/error.xpm +++ /dev/null @@ -1,193 +0,0 @@ -/* XPM */ -static char * error_xpm[] = { -"24 24 166 2", -" c None", -". c #010000", -"+ c #080102", -"@ c #0E0203", -"# c #110305", -"$ c #140505", -"% c #150405", -"& c #130204", -"* c #020000", -"= c #030000", -"- c #B1A4A4", -"; c #CEBBBC", -"> c #DDCCCC", -", c #DDCCCD", -"' c #CBB6B7", -") c #B89A9B", -"! c #7D5E61", -"~ c #210708", -"{ c #270A0B", -"] c #A19999", -"^ c #DED1D1", -"/ c #F3E6E6", -"( c #EFE0E1", -"_ c #EBDCDD", -": c #EADCDC", -"< c #E4D7D7", -"[ c #E6D2D3", -"} c #E1C5C6", -"| c #AC7D7D", -"1 c #654040", -"2 c #2E0C0D", -"3 c #050001", -"4 c #DED1D2", -"5 c #F4EBEB", -"6 c #F1E6E6", -"7 c #EBDFDF", -"8 c #E4DBDA", -"9 c #E5DBDB", -"0 c #E2D3D3", -"a c #DDC3C4", -"b c #DBB3B6", -"c c #A06E6E", -"d c #310D0D", -"e c #A39596", -"f c #F5ECEC", -"g c #EEE4E4", -"h c #120808", -"i c #E4DADA", -"j c #E5DEDD", -"k c #0E0505", -"l c #CBB3B4", -"m c #D8B9BB", -"n c #B88B8C", -"o c #633E3F", -"p c #250A0A", -"q c #BFB2B3", -"r c #EADEDE", -"s c #190E0E", -"t c #0F0606", -"u c #130A0A", -"v c #E6DCDC", -"w c #0C0404", -"x c #0F0505", -"y c #130606", -"z c #C3A9A9", -"A c #CBA5A6", -"B c #A57577", -"C c #2C0B0D", -"D c #0D0303", -"E c #D1C3C4", -"F c #EDE1E0", -"G c #120909", -"H c #090303", -"I c #0B0303", -"J c #0D0404", -"K c #B9A7A7", -"L c #DEC6C7", -"M c #CCABAD", -"N c #B68B8F", -"O c #290A0C", -"P c #CCB9B9", -"Q c #ECE1E1", -"R c #E5DDDD", -"S c #DFD1D0", -"T c #DFCDCC", -"U c #CDB1B1", -"V c #CBA7A9", -"W c #B28487", -"X c #2B0A0C", -"Y c #1B0607", -"Z c #C9AFB0", -"` c #ECDFDF", -" . c #E6DEDF", -".. c #0F0405", -"+. c #120506", -"@. c #D0B4B6", -"#. c #CBAAAB", -"$. c #C09699", -"%. c #A17273", -"&. c #2A0B0C", -"*. c #1A0507", -"=. c #AD8C8D", -"-. c #D6C0C0", -";. c #E1D0D1", -">. c #0F0504", -",. c #100405", -"'. c #DECFCF", -"). c #120505", -"!. c #180707", -"~. c #24090A", -"{. c #C69B9E", -"]. c #B38083", -"^. c #905E5F", -"/. c #170405", -"(. c #957273", -"_. c #C6A3A5", -":. c #DAB9BA", -"<. c #DCC4C4", -"[. c #130505", -"}. c #DCC6C7", -"|. c #E0C9CA", -"1. c #CFB3B4", -"2. c #22080A", -"3. c #BA8D8F", -"4. c #BE8C8D", -"5. c #A16C6E", -"6. c #774748", -"7. c #220809", -"8. c #1D0607", -"9. c #B88D8F", -"0. c #C79FA0", -"a. c #D6B2B4", -"b. c #D8BEBF", -"c. c #CDACAF", -"d. c #D9BABC", -"e. c #CBA5A7", -"f. c #C6999A", -"g. c #BF8B8C", -"h. c #9F6A6B", -"i. c #804F50", -"j. c #1E0708", -"k. c #A17477", -"l. c #C29698", -"m. c #C69E9F", -"n. c #C69B9C", -"o. c #C59898", -"p. c #B27C7D", -"q. c #AB7475", -"r. c #8C5A5B", -"s. c #734849", -"t. c #210707", -"u. c #250909", -"v. c #9E7070", -"w. c #B98A8B", -"x. c #B88888", -"y. c #B37D7F", -"z. c #9F6767", -"A. c #824E4F", -"B. c #703F40", -"C. c #27090A", -"D. c #1B0507", -"E. c #1E0707", -"F. c #230909", -"G. c #280B0B", -"H. c #2C0B0C", -"I. c #2F0C0C", -" ", -" ", -" ", -" ", -" . + @ # $ % & ", -" * = - ; > , ' ) ! ~ { ", -" = ] ^ / ( _ : < [ } | 1 2 ", -" 3 4 5 6 7 8 8 9 0 a b c d ", -" 3 e f g 7 h 8 i j k l m n o p ", -" + q 6 r s t u v w x y z A B C ", -" D E F r 8 G H I J x K L M N O ", -" $ P Q 8 R R I J J S T U V W X ", -" Y Z ` . .J ....k +.@.#.$.%.&. ", -" *.=.-.;...>.,.'.).!.~.{.].^.O ", -" /.(._.:.<.[.}.|.1.2.3.4.5.6.7. ", -" 8.9.0.a.b.c.d.e.f.g.h.i.O ", -" j.k.l.m.n.f.o.4.p.q.r.s.8. ", -" t.u.v.w.x.y.z.A.B.C.D. ", -" E.F.G.H.I.I.C. ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/folder.xpm b/src/pixmaps/folder.xpm deleted file mode 100644 index 962e47d63..000000000 --- a/src/pixmaps/folder.xpm +++ /dev/null @@ -1,80 +0,0 @@ -/* 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 deleted file mode 100644 index a3cabada9..000000000 --- a/src/pixmaps/forwarded.xpm +++ /dev/null @@ -1,23 +0,0 @@ -/* 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 deleted file mode 100644 index 3f035cbf7..000000000 --- a/src/pixmaps/group.xpm +++ /dev/null @@ -1,47 +0,0 @@ -/* 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/ignorethread.xpm b/src/pixmaps/ignorethread.xpm deleted file mode 100644 index 817aa7cc6..000000000 --- a/src/pixmaps/ignorethread.xpm +++ /dev/null @@ -1,19 +0,0 @@ -/* XPM */ -static char * ignorethread_xpm[] = { -"13 10 6 1", -" c None", -". c #FF0000", -"+ c #191919", -"@ c #B2B2B2", -"# c #FFFFFF", -"$ c #999999", -" . ", -" +++++.. ", -" ++@@@@..+ ", -" +#@@$+..@#+ ", -"+##@$+..$@##+", -"+##@$..+$@##+", -" +#@..+$@@#+ ", -" +..@@@@++ ", -" ..+++++ ", -" . "}; diff --git a/src/pixmaps/inbox.xpm b/src/pixmaps/inbox.xpm deleted file mode 100644 index 321776e44..000000000 --- a/src/pixmaps/inbox.xpm +++ /dev/null @@ -1,25 +0,0 @@ -/* 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/jpilot.xpm b/src/pixmaps/jpilot.xpm deleted file mode 100644 index b72225cf6..000000000 --- a/src/pixmaps/jpilot.xpm +++ /dev/null @@ -1,25 +0,0 @@ -/* XPM */ -static char * jpilot_xpm[] = { -"16 16 6 1", -" c None", -". c #000000", -"+ c #848587", -"@ c #34991E", -"# c #F8FAF6", -"$ c #97989B", -" ", -" ........... ", -" .+++++++++. ", -" .+@@@@@@@+. ", -" .+@@@@@@@+. ", -" .+@@@@@@@+. ", -" .+@@@@@@@+. ", -" .+@@@@@@@+. ", -" .+@@@@@@@+. ", -" .+@@@@@@@+. ", -" .+++++++++. ", -" .++++#++++. ", -" .+#+#$#+#+. ", -" .++++#++++. ", -" ........... ", -" "}; diff --git a/src/pixmaps/ldap.xpm b/src/pixmaps/ldap.xpm deleted file mode 100644 index c1e61e447..000000000 --- a/src/pixmaps/ldap.xpm +++ /dev/null @@ -1,25 +0,0 @@ -/* XPM */ -static char * ldap_xpm[] = { -"16 16 6 1", -" c None", -". c #000000", -"+ c #E3DAB1", -"@ c #606060", -"# c #A0A0A0", -"$ c #F6210A", -" ", -" . ........ ", -" . .++++++. ", -" . .@#@#@#. ", -" . .#@#@#@. ", -" . .++++++. ", -" @.@ .++++++. ", -" @......++++++. ", -" @.@ .++++++. ", -" . .++++++. ", -" . .++++++. ", -" . .+++$$+. ", -" . .+++$$+. ", -" . .++++++. ", -" . ........ ", -" "}; diff --git a/src/pixmaps/linewrap.xpm b/src/pixmaps/linewrap.xpm deleted file mode 100644 index bce4af2b6..000000000 --- a/src/pixmaps/linewrap.xpm +++ /dev/null @@ -1,29 +0,0 @@ -/* 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 deleted file mode 100644 index de17d9c94..000000000 --- a/src/pixmaps/mark.xpm +++ /dev/null @@ -1,16 +0,0 @@ -/* XPM */ -static char * mark_xpm[] = { -"10 10 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ..", -" .+.", -" .++.", -".. .+++.", -".+. .+++. ", -".++.+++. ", -".+++++. ", -" .+++. ", -" .+. ", -" . "}; diff --git a/src/pixmaps/new.xpm b/src/pixmaps/new.xpm deleted file mode 100644 index 1f260907b..000000000 --- a/src/pixmaps/new.xpm +++ /dev/null @@ -1,76 +0,0 @@ -/* 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 deleted file mode 100644 index 70944f13c..000000000 --- a/src/pixmaps/outbox.xpm +++ /dev/null @@ -1,27 +0,0 @@ -/* 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 deleted file mode 100644 index 08f31f0db..000000000 --- a/src/pixmaps/regular.xpm +++ /dev/null @@ -1,93 +0,0 @@ -/* 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 deleted file mode 100644 index e16ab028e..000000000 --- a/src/pixmaps/replied.xpm +++ /dev/null @@ -1,24 +0,0 @@ -/* 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 deleted file mode 100644 index 88c28568e..000000000 --- a/src/pixmaps/stock_close.xpm +++ /dev/null @@ -1,29 +0,0 @@ -/* 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 deleted file mode 100644 index e6adb7db5..000000000 --- a/src/pixmaps/stock_down_arrow.xpm +++ /dev/null @@ -1,100 +0,0 @@ -/* 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 deleted file mode 100644 index 777b17d6c..000000000 --- a/src/pixmaps/stock_exec.xpm +++ /dev/null @@ -1,107 +0,0 @@ -/* 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 deleted file mode 100644 index 0e27ce4b7..000000000 --- a/src/pixmaps/stock_mail.xpm +++ /dev/null @@ -1,143 +0,0 @@ -/* 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 deleted file mode 100644 index dc14e6d33..000000000 --- a/src/pixmaps/stock_mail_attach.xpm +++ /dev/null @@ -1,134 +0,0 @@ -/* 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 deleted file mode 100644 index 77da55df5..000000000 --- a/src/pixmaps/stock_mail_compose.xpm +++ /dev/null @@ -1,144 +0,0 @@ -/* 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 deleted file mode 100644 index 5d12c8f70..000000000 --- a/src/pixmaps/stock_mail_forward.xpm +++ /dev/null @@ -1,153 +0,0 @@ -/* 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 deleted file mode 100644 index 5ad326ebc..000000000 --- a/src/pixmaps/stock_mail_receive.xpm +++ /dev/null @@ -1,175 +0,0 @@ -/* 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 deleted file mode 100644 index c74d97bc4..000000000 --- a/src/pixmaps/stock_mail_receive_all.xpm +++ /dev/null @@ -1,181 +0,0 @@ -/* 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 deleted file mode 100644 index 94905b816..000000000 --- a/src/pixmaps/stock_mail_reply.xpm +++ /dev/null @@ -1,154 +0,0 @@ -/* 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 deleted file mode 100644 index 6086a8606..000000000 --- a/src/pixmaps/stock_mail_reply_to_all.xpm +++ /dev/null @@ -1,126 +0,0 @@ -/* 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_reply_to_author.xpm b/src/pixmaps/stock_mail_reply_to_author.xpm deleted file mode 100644 index bc6d1b4b4..000000000 --- a/src/pixmaps/stock_mail_reply_to_author.xpm +++ /dev/null @@ -1,127 +0,0 @@ -/* XPM */ -static char * stock_mail_reply_to_author_xpm[] = { -"24 24 100 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 #EEEDE8", -"n c #EDECE6", -"o c #4E4E4C", -"p c #797976", -"q c #797874", -"r c #E9E8E1", -"s c #E8E7DF", -"t c #B4B3AF", -"u c #DED5BB", -"v c #AF9F7E", -"w c #7A7A77", -"x c #979691", -"y c #EAE9E2", -"z c #959590", -"A c #787773", -"B c #B8B7B0", -"C c #E6E4DC", -"D c #ECEBE4", -"E c #EBEAE3", -"F c #E9E7E0", -"G c #E8E6DF", -"H c #E7E5DD", -"I c #777671", -"J c #93918C", -"K c #E8E6DE", -"L c #E6E4DB", -"M c #E4E3DA", -"N c #75746F", -"O c #91908A", -"P c #E7E6DE", -"Q c #E6E5DC", -"R c #E5E4DB", -"S c #E4E2DA", -"T c #CCCBC4", -"U c #A3A29D", -"V c #CDCCC6", -"W c #959490", -"X c #CECDC7", -"Y c #E0D8B0", -"Z c #B39C82", -"` c #BCA488", -" . c #C5AC8F", -".. c #AA947B", -"+. c #A18D75", -"@. c #98856E", -"#. c #8F7D68", -"$. c #867561", -"%. c #7D6D5B", -"&. 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 n o p q r s t . ", -". u u u u u u u u u v . w o x y z A B C . ", -". u v v v v v v v v v . D E l F G H I J . ", -". u v v v v v v . v v . 0 l F K H L M N O . ", -". u v v v v v v . v v . r s P Q R S T U . . ", -". u v v v v v v v v v . s P C V W . . . ", -". u v v v v v v v v v . X z . . . . ", -". u v v v v v v v v v . . . . Y . ", -". u v v v v v v v . . . . . . Y Y Y . ", -". u v v v v v v v v . . Z . . Y Y Y . ", -". u v v v v v . v v . . ` Z . . . . . . . . ", -". u v v v v v v . . . . .` Z ..+.@.#.$.%.&.. ", -". u v v v v v v v v . . .` Z ..+.@.#.$.%.. ", -". v v v v v v v v v . . ` Z . . . . . . ", -". . . . . . . . . . . Z . ", -" . . ", -" "}; diff --git a/src/pixmaps/stock_mail_send.xpm b/src/pixmaps/stock_mail_send.xpm deleted file mode 100644 index f53bfa8e3..000000000 --- a/src/pixmaps/stock_mail_send.xpm +++ /dev/null @@ -1,162 +0,0 @@ -/* 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_mail_send_queue.xpm b/src/pixmaps/stock_mail_send_queue.xpm deleted file mode 100644 index 97e40138d..000000000 --- a/src/pixmaps/stock_mail_send_queue.xpm +++ /dev/null @@ -1,244 +0,0 @@ -/* XPM */ -static char * stock_mail_send_queue_xpm[] = { -"24 24 217 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 #3F3F3F", -"B c #0E0E0E", -"C c #1E1E1D", -"D c #6B6B69", -"E c #BFBEBA", -"F c #BEBDB9", -"G c #7A7A77", -"H c #979691", -"I c #EAE9E2", -"J c #959590", -"K c #787773", -"L c #B8B7B0", -"M c #E6E4DC", -"N c #101010", -"O c #D5D5D5", -"P c #FFFFFF", -"Q c #B1B1B1", -"R c #1D1D1D", -"S c #626260", -"T c #ECEBE4", -"U c #EBEAE3", -"V c #E9E7E0", -"W c #E8E6DF", -"X c #E7E5DD", -"Y c #777671", -"Z c #93918C", -"` c #ECEAE4", -" . c #E8E6DE", -".. c #E6E4DB", -"+. c #E4E3DA", -"@. c #75746F", -"#. c #91908A", -"$. c #EBEBE9", -"%. c #B4B5B0", -"&. c #A0A29B", -"*. c #9FA099", -"=. c #AAACA5", -"-. c #C6C7C2", -";. c #F5F6F4", -">. c #E7E6DE", -",. c #E6E5DC", -"'. c #E5E4DB", -"). c #E4E2DA", -"!. c #CCCBC4", -"~. c #A3A29D", -"{. c #D1D2CF", -"]. c #979890", -"^. c #9FA199", -"/. c #A8A9A1", -"(. c #ADAFA6", -"_. c #B2B3AB", -":. c #B6B8B0", -"<. c #BABCB4", -"[. c #11110F", -"}. c #1D1D1C", -"|. c #CDCCC6", -"1. c #959490", -"2. c #ECECEA", -"3. c #989991", -"4. c #A1A39B", -"5. c #B0B1A9", -"6. c #BBBCB5", -"7. c #BFC0B8", -"8. c #C2C4BC", -"9. c #C1C2BA", -"0. c #D1D1D0", -"a. c #DEDEDE", -"b. c #9C9E96", -"c. c #C5C7BF", -"d. c #CBCCC5", -"e. c #CDCEC6", -"f. c #C5C7BE", -"g. c #DEDFDA", -"h. c #939393", -"i. c #2F2F2F", -"j. c #282828", -"k. c #6D675E", -"l. c #786F64", -"m. c #9E9F98", -"n. c #A1A29A", -"o. c #B5B7AF", -"p. c #CFD1C8", -"q. c #D0D2CA", -"r. c #CCCEC6", -"s. c #D1D3CB", -"t. c #736A5B", -"u. c #908570", -"v. c #928875", -"w. c #665C4E", -"x. c #9A9B93", -"y. c #A6A8A0", -"z. c #C8CAC1", -"A. c #D6D7D0", -"B. c #D5D7CF", -"C. c #D4D5CD", -"D. c #D3D5CD", -"E. c #8C816F", -"F. c #9B907F", -"G. c #0F0E0B", -"H. c #A5A69F", -"I. c #A8A9A2", -"J. c #BABBB3", -"K. c #C9CAC2", -"L. c #94958E", -"M. c #D6D8D0", -"N. c #D7D9D1", -"O. c #DBDCD5", -"P. c #AB9A87", -"Q. c #A8967F", -"R. c #BFC0BB", -"S. c #A8AAA2", -"T. c #C4C5BD", -"U. c #B0B2AA", -"V. c #D7D8D0", -"W. c #E6E7E2", -"X. c #998873", -"Y. c #B6A38A", -"Z. c #8C7C69", -"`. c #F2F2F1", -" + c #ADAEA6", -".+ c #B1B3AB", -"++ c #BCBDB5", -"@+ c #C6C8C0", -"#+ c #CFD0C9", -"$+ c #D4D6CE", -"%+ c #D5D6CE", -"&+ c #D6D7CF", -"*+ c #C8B298", -"=+ c #E4E4E1", -"-+ c #B3B4AC", -";+ c #B7B8B0", -">+ c #BCBEB6", -",+ c #C4C6BE", -"'+ c #C9CBC3", -")+ c #CBCCC4", -"!+ c #D0D1C9", -"~+ c #D4D5D2", -"{+ c #B7A38A", -"]+ c #DAC2A5", -"^+ c #B49E84", -"/+ c #B9B9B9", -"(+ c #F5F5F4", -"_+ c #CFD0CB", -":+ c #C0C2BB", -"<+ c #C0C2BA", -"[+ c #C8C9C2", -"}+ c #D9DAD5", -"|+ c #D9D9D8", -"1+ c #D3D3D3", -"2+ c #0D0D0D", -"3+ c #7A7A7A", -"4+ c #343434", -" . . . . ", -" . . . . . + @ # $ . ", -" . . . . . % $ & * = - ; > , . ", -" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", -" . | 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 F G u H I J K L M . ", -" N . O P P O Q . R S t T U l V W X Y Z . ", -" . O P P P P P P O Q . ` 0 l V .X ..+.@.#.. ", -" . O P $.%.&.*.=.-.;.O O . x y >.,.'.).!.~.. . ", -"N Q P {.].^./.(._.:.<.[.O Q }.>.M |.1.. . . ", -". O 2.3.4.5.6.7.8.9.. . 0.O . J . . . . . ", -"Q a.%.b.. . c.d.e.. . f.g.O h.i. j.k.l.. ", -"O P m.n.o.. . p.. . q.r.s.O h.N . t.u.v.w.. ", -"a.P x.y.6.z.. . . A.B.C.D.O h.. . . . E.F.. G.. ", -"O P H.I.J.K.L.. 3.M.N.N.O.O h.N . P.Q.. ", -"Q a.R.S.o.T.r.U.V.M.N.N.W.O h.A . X.Y.Y.Z.. ", -". O `. +.+++@+#+$+%+&+N.0.O . . *+*+*+*+. ", -"N Q a.=+-+;+>+,+'+)+!+~+O Q N . {+]+]+]+]+^+. ", -" . /+a.(+_+:+<+[+}+|+O Q . . . . . . . . . ", -" 1+. /+a.a.P P a.O Q h.. ", -" 2+. Q /+/+Q 3+. N ", -" 4+2+. . A "}; diff --git a/src/pixmaps/stock_news_compose.xpm b/src/pixmaps/stock_news_compose.xpm deleted file mode 100644 index 277f54f7d..000000000 --- a/src/pixmaps/stock_news_compose.xpm +++ /dev/null @@ -1,64 +0,0 @@ -/* XPM */ -static char * stock_news_compose_xpm[] = { -"24 24 37 1", -" c None", -". c #000000", -"+ c #828282", -"@ c #979797", -"# c #0E0E0E", -"$ c #DBDBDB", -"% c #D9D9D9", -"& c #010101", -"* c #D8BE6A", -"= c #AFAFAF", -"- c #898989", -"; c #ECECEC", -"> c #121212", -", c #8E7D45", -"' c #ECEBE8", -") c #9D9D9B", -"! c #404040", -"~ c #EAE9E6", -"{ c #5E5E5E", -"] c #777777", -"^ c #525252", -"/ c #1C1C1C", -"( c #515151", -"_ c #797979", -": c #8C8C8C", -"< c #B5B5B5", -"[ c #C8C8C8", -"} c #BABABA", -"| c #EEEEEE", -"1 c #C1C1C1", -"2 c #757575", -"3 c #AD8E30", -"4 c #756020", -"5 c #A5A5A5", -"6 c #878787", -"7 c #060605", -"8 c #919191", -" ", -" ", -" ", -" ", -" ... ", -" ..+@+# . ", -" ..$$.%%&..*. ", -" .$==$.-;>.*,. ", -" ..==$$$&').*,. ", -" ..$=$$$$$!~.*,. ", -" .{==$$$]]$^/*,. ", -" .=$$$($_]$.*,.:. ", -" .$$(($$((.*,.<[. ", -" .$(}}($$.*,.-|-. ", -" .$$(($$.*,..11<2. ", -" .$($$$34..<-<56.. ", -" .$$$$$7.<-<58.. ", -" .$$$..<<-58.. ", -" .$..-<-56.. ", -" ..<<<56.. ", -" .. ", -" ", -" ", -" "}; diff --git a/src/pixmaps/stock_paste.xpm b/src/pixmaps/stock_paste.xpm deleted file mode 100644 index 81072cf8b..000000000 --- a/src/pixmaps/stock_paste.xpm +++ /dev/null @@ -1,132 +0,0 @@ -/* 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 deleted file mode 100644 index d68760dcf..000000000 --- a/src/pixmaps/stock_preferences.xpm +++ /dev/null @@ -1,80 +0,0 @@ -/* 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 deleted file mode 100644 index c13d7ae8b..000000000 --- a/src/pixmaps/stock_properties.xpm +++ /dev/null @@ -1,140 +0,0 @@ -/* 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 deleted file mode 100644 index 645eff5ce..000000000 --- a/src/pixmaps/stock_search.xpm +++ /dev/null @@ -1,155 +0,0 @@ -/* 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 deleted file mode 100644 index 11c9ebcc4..000000000 --- a/src/pixmaps/stock_trash.xpm +++ /dev/null @@ -1,112 +0,0 @@ -/* 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 deleted file mode 100644 index bb5c3195e..000000000 --- a/src/pixmaps/stock_up_arrow.xpm +++ /dev/null @@ -1,100 +0,0 @@ -/* 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 deleted file mode 100644 index d727c3921..000000000 --- a/src/pixmaps/sylpheed-logo.xpm +++ /dev/null @@ -1,53 +0,0 @@ -/* 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 deleted file mode 100644 index 289be56f6..000000000 --- a/src/pixmaps/tb_address_book.xpm +++ /dev/null @@ -1,56 +0,0 @@ -/* 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 deleted file mode 100644 index 1f735d5b7..000000000 --- a/src/pixmaps/trash.xpm +++ /dev/null @@ -1,32 +0,0 @@ -/* 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 deleted file mode 100644 index b1c2f7688..000000000 --- a/src/pixmaps/unread.xpm +++ /dev/null @@ -1,59 +0,0 @@ -/* 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/pixmaps/vcard.xpm b/src/pixmaps/vcard.xpm deleted file mode 100644 index 7b1aeec4e..000000000 --- a/src/pixmaps/vcard.xpm +++ /dev/null @@ -1,25 +0,0 @@ -/* XPM */ -static char * vcard_xpm[] = { -"16 16 6 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #4D4D4D", -"# c #CFBF7A", -"$ c #858585", -" ", -" ", -" ...............", -" .+++++++++++++.", -" .+++++++++++++.", -" .+@@@+++++++++.", -" .+@#@+.+.+.+.+.", -" .+@@@+++++++++.", -" .+#@#+.+..+..+.", -" .+@#@+++++++++.", -" .+@$@+..+..+.+.", -" .+@$@+++++++++.", -" .+++++++++++++.", -" ...............", -" ", -" "}; diff --git a/src/pop.c b/src/pop.c deleted file mode 100644 index 48853c49a..000000000 --- a/src/pop.c +++ /dev/null @@ -1,505 +0,0 @@ -/* - * 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 <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 "md5.h" -#include "prefs_account.h" -#include "utils.h" -#include "inc.h" -#include "recv.h" - -static gint pop3_ok(SockInfo *sock, gchar *argbuf); -static void pop3_gen_send(SockInfo *sock, const gchar *format, ...); -static gint pop3_gen_recv(SockInfo *sock, gchar *buf, gint size); - -gint pop3_greeting_recv(SockInfo *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(SockInfo *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(SockInfo *sock, gpointer data) -{ - if (pop3_ok(sock, NULL) == PS_SUCCESS) - return POP3_GETAUTH_PASS_SEND; - else - return -1; -} - -gint pop3_getauth_pass_send(SockInfo *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(SockInfo *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 authentication\n")); - state->error_val = PS_AUTHFAIL; - state->inc_state = INC_AUTH_FAILED; - return -1; - } -} - -gint pop3_getauth_apop_send(SockInfo *sock, gpointer data) -{ - Pop3State *state = (Pop3State *)data; - gchar *start, *end; - gchar *apop_str; - gchar md5sum[33]; - - 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); - md5_hex_digest(md5sum, 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(SockInfo *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 authentication\n")); - state->error_val = PS_AUTHFAIL; - state->inc_state = INC_AUTH_FAILED; - return -1; - } -} - -gint pop3_getrange_stat_send(SockInfo *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(SockInfo *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->total_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_GETSIZE_LIST_SEND; - else - return POP3_GETRANGE_UIDL_SEND; - } - } - } else if (ok == PS_PROTOCOL) - return POP3_LOGOUT_SEND; - else - return -1; -} - -gint pop3_getrange_last_send(SockInfo *sock, gpointer data) -{ - Pop3State *state = (Pop3State *)data; - - inc_progress_update(state, POP3_GETRANGE_LAST_SEND); - - pop3_gen_send(sock, "LAST"); - - return POP3_GETRANGE_LAST_RECV; -} - -gint pop3_getrange_last_recv(SockInfo *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_GETSIZE_LIST_SEND; - } - } - } else - return POP3_GETSIZE_LIST_SEND; -} - -gint pop3_getrange_uidl_send(SockInfo *sock, gpointer data) -{ - Pop3State *state = (Pop3State *)data; - - inc_progress_update(state, POP3_GETRANGE_UIDL_SEND); - - pop3_gen_send(sock, "UIDL"); - - return POP3_GETRANGE_UIDL_RECV; -} - -gint pop3_getrange_uidl_recv(SockInfo *sock, gpointer data) -{ - Pop3State *state = (Pop3State *)data; - 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; - - while (sock_gets(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 (new == TRUE) - return POP3_GETSIZE_LIST_SEND; - else - return POP3_LOGOUT_SEND; -} - -gint pop3_getsize_list_send(SockInfo *sock, gpointer data) -{ - Pop3State *state = (Pop3State *)data; - - inc_progress_update(state, POP3_GETSIZE_LIST_SEND); - - pop3_gen_send(sock, "LIST"); - - return POP3_GETSIZE_LIST_RECV; -} - -gint pop3_getsize_list_recv(SockInfo *sock, gpointer data) -{ - Pop3State *state = (Pop3State *)data; - gchar buf[POPBUFSIZE]; - - if (pop3_ok(sock, NULL) != PS_SUCCESS) return POP3_LOGOUT_SEND; - - state->sizes = g_new0(gint, state->count + 1); - state->cur_total_bytes = 0; - - while (sock_gets(sock, buf, sizeof(buf)) >= 0) { - guint num, size; - - if (buf[0] == '.') break; - if (sscanf(buf, "%u %u", &num, &size) != 2) - return -1; - - if (num > 0 && num <= state->count) - state->sizes[num] = size; - if (num > 0 && num < state->cur_msg) - state->cur_total_bytes += size; - } - - while (state->sizes[state->cur_msg] == 0) { - if (state->cur_msg == state->count) - return POP3_LOGOUT_SEND; - else - state->cur_msg++; - } - - return POP3_RETR_SEND; -} - -gint pop3_retr_send(SockInfo *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(SockInfo *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; - } - - state->cur_total_bytes += state->sizes[state->cur_msg]; - state->cur_total_num++; - - 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++; - while (state->sizes[state->cur_msg] == 0) { - if (state->cur_msg == state->count) - return POP3_LOGOUT_SEND; - else - 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(SockInfo *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(SockInfo *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++; - while (state->sizes[state->cur_msg] == 0) { - if (state->cur_msg == state->count) - return POP3_LOGOUT_SEND; - else - 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(SockInfo *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(SockInfo *sock, gpointer data) -{ - if (pop3_ok(sock, NULL) == PS_SUCCESS) - return -1; - else - return -1; -} - -static gint pop3_ok(SockInfo *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(SockInfo *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(SockInfo *sock, gchar *buf, gint size) -{ - if (sock_gets(sock, buf, size) < 0) { - return PS_SOCKET; - } else { - strretchomp(buf); - log_print("POP3< %s\n", buf); - - return PS_SUCCESS; - } -} diff --git a/src/pop.h b/src/pop.h deleted file mode 100644 index 41e5b3dfd..000000000 --- a/src/pop.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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> - -#include "socket.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_GETSIZE_LIST_SEND, - POP3_GETSIZE_LIST_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 (SockInfo *sock, gpointer data); -gint pop3_getauth_user_send (SockInfo *sock, gpointer data); -gint pop3_getauth_user_recv (SockInfo *sock, gpointer data); -gint pop3_getauth_pass_send (SockInfo *sock, gpointer data); -gint pop3_getauth_pass_recv (SockInfo *sock, gpointer data); -gint pop3_getauth_apop_send (SockInfo *sock, gpointer data); -gint pop3_getauth_apop_recv (SockInfo *sock, gpointer data); -gint pop3_getrange_stat_send (SockInfo *sock, gpointer data); -gint pop3_getrange_stat_recv (SockInfo *sock, gpointer data); -gint pop3_getrange_last_send (SockInfo *sock, gpointer data); -gint pop3_getrange_last_recv (SockInfo *sock, gpointer data); -gint pop3_getrange_uidl_send (SockInfo *sock, gpointer data); -gint pop3_getrange_uidl_recv (SockInfo *sock, gpointer data); -gint pop3_getsize_list_send (SockInfo *sock, gpointer data); -gint pop3_getsize_list_recv (SockInfo *sock, gpointer data); -gint pop3_retr_send (SockInfo *sock, gpointer data); -gint pop3_retr_recv (SockInfo *sock, gpointer data); -gint pop3_delete_send (SockInfo *sock, gpointer data); -gint pop3_delete_recv (SockInfo *sock, gpointer data); -gint pop3_logout_send (SockInfo *sock, gpointer data); -gint pop3_logout_recv (SockInfo *sock, gpointer data); - -#endif /* __POP_H__ */ diff --git a/src/prefs.c b/src/prefs.c deleted file mode 100644 index 470580638..000000000 --- a/src/prefs.c +++ /dev/null @@ -1,802 +0,0 @@ -/* - * 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: - break; - } - } -} - -#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); - - if (prefs_is_readonly(path)) { - g_warning(_("no permission - %s\n"), path); - return 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(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: - break; - } - } -} - -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: - break; - } - } -} - -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(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: - break; - } - 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); - } -} - -gboolean prefs_is_readonly(const gchar * path) -{ - if (path == NULL) - return TRUE; - - return (access(path, W_OK) != 0 && access(path, F_OK) == 0); -} - -gboolean prefs_rc_is_readonly(const gchar * rcfile) -{ - gboolean result; - gchar * rcpath; - - if (rcfile == NULL) - return TRUE; - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, rcfile, NULL); - result = prefs_is_readonly(rcpath); - g_free(rcpath); - - return result; -} diff --git a/src/prefs.h b/src/prefs.h deleted file mode 100644 index a11479518..000000000 --- a/src/prefs.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * 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_END_CHECK_BUTTON(box, chkbtn, label) \ -{ \ - chkbtn = gtk_check_button_new_with_label(label); \ - gtk_widget_show(chkbtn); \ - gtk_box_pack_end(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); -gboolean prefs_is_readonly(const gchar * path); -gboolean prefs_rc_is_readonly(const gchar * rcfile); - -#endif /* __PREFS_H__ */ diff --git a/src/prefs_account.c b/src/prefs_account.c deleted file mode 100644 index 2218a66b4..000000000 --- a/src/prefs_account.c +++ /dev/null @@ -1,1843 +0,0 @@ -/* - * 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 <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 "prefs_customheader.h" -#include "account.h" -#include "mainwindow.h" -#include "manage_window.h" -#include "inc.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 *localmbox_label; - GtkWidget *mailcmd_label; - GtkWidget *recvserv_entry; - GtkWidget *smtpserv_entry; - GtkWidget *nntpserv_entry; - GtkWidget *nntpauth_chkbtn; - GtkWidget *localmbox_entry; - GtkWidget *mailcmd_chkbtn; - GtkWidget *mailcmd_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; - - GtkWidget *imap_frame; - GtkWidget *imapdir_entry; -} 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; - -#if USE_GPGME -static struct Privacy { - GtkWidget *defaultkey_radiobtn; - GtkWidget *emailkey_radiobtn; - GtkWidget *customkey_radiobtn; - GtkWidget *customkey_entry; -} privacy; -#endif /* USE_GPGME */ - -#if USE_SSL -static struct SSLPrefs { - GtkWidget *pop_chkbtn; - GtkWidget *imap_chkbtn; - - GtkWidget *smtp_nossl_radiobtn; - GtkWidget *smtp_ssltunnel_radiobtn; - GtkWidget *smtp_sslstarttls_radiobtn; -} ssl; -#endif /* USE_SSL */ - -static struct Advanced { - GtkWidget *smtpport_chkbtn; - GtkWidget *smtpport_entry; - GtkWidget *popport_hbox; - GtkWidget *popport_chkbtn; - GtkWidget *popport_entry; - GtkWidget *imapport_hbox; - GtkWidget *imapport_chkbtn; - GtkWidget *imapport_entry; - GtkWidget *nntpport_hbox; - GtkWidget *nntpport_chkbtn; - GtkWidget *nntpport_entry; - GtkWidget *domain_chkbtn; - GtkWidget *domain_entry; -} advanced; - -static void prefs_account_fix_size (void); - -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); -#if USE_GPGME || USE_SSL -static void prefs_account_enum_set_data_from_radiobtn (PrefParam *pparam); -static void prefs_account_enum_set_radiobtn (PrefParam *pparam); -#endif /* USE_GPGME */ - -static void prefs_account_nntpauth_toggled(GtkToggleButton *button, - gpointer user_data); -static void prefs_account_mailcmd_toggled(GtkToggleButton *button, - gpointer user_data); - -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}, - - {"local_mbox", NULL, &tmp_ac_prefs.local_mbox, P_STRING, - &basic.localmbox_entry, prefs_set_data_from_entry, prefs_set_entry}, - - {"use_mail_command", "FALSE", &tmp_ac_prefs.use_mail_command, P_BOOL, - &basic.mailcmd_chkbtn, prefs_set_data_from_toggle, prefs_set_toggle}, - - {"mail_command", "/usr/sbin/sendmail", &tmp_ac_prefs.mail_command, P_STRING, - &basic.mailcmd_entry, prefs_set_data_from_entry, prefs_set_entry}, - - {"use_nntp_auth", "FALSE", &tmp_ac_prefs.use_nntp_auth, P_BOOL, - &basic.nntpauth_chkbtn, - prefs_set_data_from_toggle, prefs_set_toggle}, - - {"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}, - - {"imap_directory", NULL, &tmp_ac_prefs.imap_dir, P_STRING, - &receive.imapdir_entry, prefs_set_data_from_entry, prefs_set_entry}, - - /* 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}, - -#if USE_GPGME - /* Privacy */ - {"sign_key", NULL, &tmp_ac_prefs.sign_key, P_ENUM, - &privacy.defaultkey_radiobtn, - prefs_account_enum_set_data_from_radiobtn, - prefs_account_enum_set_radiobtn}, - {"sign_key_id", NULL, &tmp_ac_prefs.sign_key_id, P_STRING, - &privacy.customkey_entry, - prefs_set_data_from_entry, prefs_set_entry}, -#endif /* USE_GPGME */ - -#if USE_SSL - /* SSL Config */ - {"ssl_smtp", "FALSE", &tmp_ac_prefs.ssl_smtp, P_ENUM, - &ssl.smtp_nossl_radiobtn, - prefs_account_enum_set_data_from_radiobtn, - prefs_account_enum_set_radiobtn}, - - {"ssl_pop", "FALSE", &tmp_ac_prefs.ssl_pop, P_BOOL, - &ssl.pop_chkbtn, - prefs_set_data_from_toggle, prefs_set_toggle}, - - {"ssl_imap", "FALSE", &tmp_ac_prefs.ssl_imap, P_BOOL, - &ssl.imap_chkbtn, - prefs_set_data_from_toggle, prefs_set_toggle}, -#endif /* USE_SSL */ - - /* 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_imapport", "FALSE", &tmp_ac_prefs.set_imapport, P_BOOL, - &advanced.imapport_chkbtn, - prefs_set_data_from_toggle, prefs_set_toggle}, - - {"imap_port", "143", &tmp_ac_prefs.imapport, P_USHORT, - &advanced.imapport_entry, - prefs_set_data_from_entry, prefs_set_entry}, - - {"set_nntpport", "FALSE", &tmp_ac_prefs.set_nntpport, P_BOOL, - &advanced.nntpport_chkbtn, - prefs_set_data_from_toggle, prefs_set_toggle}, - - {"nntp_port", "119", &tmp_ac_prefs.nntpport, P_USHORT, - &advanced.nntpport_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); -#if USE_GPGME -static void prefs_account_privacy_create (void); -#endif /* USE_GPGME */ -#if USE_SSL -static void prefs_account_ssl_create (void); -#endif /* USE_SSL */ -static void prefs_account_advanced_create (void); - -static void prefs_account_edit_custom_header (void); - -static gint prefs_account_deleted (GtkWidget *widget, - GdkEventAny *event, - gpointer data); -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 3 -#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; - - prefs_custom_header_read_config(ac_prefs); -} - -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; - - if (prefs_rc_is_readonly(ACCOUNT_RC)) - return ac_prefs; - - debug_print(_("Opening account preferences window...\n")); - - inc_autocheck_timer_remove(); - - 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); - } - - if (ac_prefs->protocol != A_LOCAL) { - gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE); - gtk_widget_set_sensitive(basic.smtpserv_label, TRUE); - } - - gtk_widget_show(dialog.window); - gtk_main(); - gtk_widget_hide(dialog.window); - - inc_autocheck_timer_set(); - - 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_deleted), 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++); -#if USE_GPGME - prefs_account_privacy_create(); - SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++); -#endif /* USE_GPGME */ -#if USE_SSL - prefs_account_ssl_create(); - SET_NOTEBOOK_LABEL(dialog.notebook, _("SSL"), page++); -#endif /* USE_GPGME */ - prefs_account_advanced_create(); - SET_NOTEBOOK_LABEL(dialog.notebook, _("Advanced"), page++); - - prefs_account_fix_size(); - gtk_widget_show(dialog.window); -} - -/** - * prefs_account_fix_size: - * - * Fix the window size after creating widgets by selecting "Local" - * protocol (currently it has the largest size of parameter widgets). - * Without this the window gets too large. - **/ -static void prefs_account_fix_size(void) -{ - GtkOptionMenu *optmenu = GTK_OPTION_MENU (basic.protocol_optmenu); - GtkWidget *menu; - GtkWidget *menuitem; - - gtk_option_menu_set_history (optmenu, 4); /* local */ - menu = gtk_option_menu_get_menu (optmenu); - menuitem = gtk_menu_get_active (GTK_MENU (menu)); - gtk_menu_item_activate (GTK_MENU_ITEM (menuitem)); -} - -#define SET_ACTIVATE(menuitem) \ -{ \ - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", \ - GTK_SIGNAL_FUNC(prefs_account_protocol_activated), \ - NULL); \ -} - -#define TABLE_YPAD 2 - -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 *localmbox_label; - GtkWidget *mailcmd_label; - GtkWidget *recvserv_entry; - GtkWidget *smtpserv_entry; - GtkWidget *nntpserv_entry; - GtkWidget *nntpauth_chkbtn; - GtkWidget *localmbox_entry; - GtkWidget *mailcmd_chkbtn; - GtkWidget *mailcmd_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 (6, 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_row_spacing (GTK_TABLE (serv_table), 3, 0); - 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); */ - - nntpauth_chkbtn = gtk_check_button_new_with_label - (_("This server requires authentication")); - gtk_widget_show (nntpauth_chkbtn); - gtk_table_attach (GTK_TABLE (serv_table), nntpauth_chkbtn, 0, 4, 1, 2, - GTK_FILL, 0, 0, 0); - - recvserv_entry = gtk_entry_new (); - gtk_widget_show (recvserv_entry); - gtk_table_attach (GTK_TABLE (serv_table), recvserv_entry, 1, 4, 2, 3, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); - - localmbox_entry = gtk_entry_new (); - gtk_widget_show (localmbox_entry); - gtk_table_attach (GTK_TABLE (serv_table), localmbox_entry, 1, 4, 3, 4, - 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, 4, 5, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); - - mailcmd_entry = gtk_entry_new (); - gtk_widget_show (mailcmd_entry); - gtk_table_attach (GTK_TABLE (serv_table), mailcmd_entry, 1, 4, 6, 7, - 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, 7, 8, - 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, 7, 8, - 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, 2, 3, - GTK_FILL, 0, 0, 0); - gtk_misc_set_alignment (GTK_MISC (recvserv_label), 1, 0.5); - - localmbox_label = gtk_label_new (_("Local mailbox file")); - gtk_widget_show (localmbox_label); - gtk_table_attach (GTK_TABLE (serv_table), localmbox_label, 0, 1, 3, 4, - GTK_FILL, 0, 0, 0); - gtk_misc_set_alignment (GTK_MISC (localmbox_label), 1, 0.5); -/* gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); */ - - smtpserv_label = gtk_label_new (_("SMTP server (send)")); - gtk_widget_show (smtpserv_label); - gtk_table_attach (GTK_TABLE (serv_table), smtpserv_label, 0, 1, 4, 5, - 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); */ - - mailcmd_chkbtn = gtk_check_button_new_with_label - (_("Use mail command rather than SMTP server")); - gtk_widget_show (mailcmd_chkbtn); - gtk_table_attach (GTK_TABLE (serv_table), mailcmd_chkbtn, 0, 4, 5, 6, - GTK_EXPAND | GTK_FILL, - 0, 0, TABLE_YPAD); - gtk_signal_connect(GTK_OBJECT(mailcmd_chkbtn), "toggled", - GTK_SIGNAL_FUNC(prefs_account_mailcmd_toggled), - NULL); - - mailcmd_label = gtk_label_new (_("command to send mails")); - gtk_widget_show (mailcmd_label); - gtk_table_attach (GTK_TABLE (serv_table), mailcmd_label, 0, 1, 6, 7, - GTK_FILL, 0, 0, 0); - gtk_misc_set_alignment (GTK_MISC (mailcmd_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, 7, 8, - 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, 7, 8, - 0, 0, 0, 0); - - SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_label); - SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_label); - SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_entry); - SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_entry); - - 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.nntpauth_chkbtn = nntpauth_chkbtn; - basic.localmbox_label = localmbox_label; - basic.localmbox_entry = localmbox_entry; - basic.mailcmd_chkbtn = mailcmd_chkbtn; - basic.mailcmd_label = mailcmd_label; - basic.mailcmd_entry = mailcmd_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; - GtkWidget *frame2; - GtkWidget *hbox1; - GtkWidget *imapdir_label; - GtkWidget *imapdir_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); - - 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, - _("Download all messages on server")); - PACK_CHECK_BUTTON - (vbox2, recvatgetall_chkbtn, - _("`Get all' checks for new mail on this account")); - PACK_CHECK_BUTTON (vbox2, filter_on_recv_chkbtn, - _("Filter messages on receiving")); - - PACK_FRAME (vbox1, frame2, _("IMAP4")); - - vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); - gtk_widget_show (vbox2); - gtk_container_add (GTK_CONTAINER (frame2), vbox2); - gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); - - hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0); - - imapdir_label = gtk_label_new (_("IMAP server directory")); - gtk_widget_show (imapdir_label); - gtk_box_pack_start (GTK_BOX (hbox1), imapdir_label, FALSE, FALSE, 0); - - imapdir_entry = gtk_entry_new(); - gtk_widget_show (imapdir_entry); - gtk_box_pack_start (GTK_BOX (hbox1), imapdir_entry, TRUE, TRUE, 0); - - 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; - - receive.imap_frame = frame2; - receive.imapdir_entry = imapdir_entry; -} - -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); - - 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); - gtk_signal_connect (GTK_OBJECT (customhdr_edit_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_account_edit_custom_header), - NULL); - - 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; -} - -#if USE_GPGME -static void prefs_account_privacy_create(void) -{ - GtkWidget *vbox1; - GtkWidget *frame1; - GtkWidget *vbox2; - GtkWidget *hbox1; - GtkWidget *label; - GtkWidget *defaultkey_radiobtn; - GtkWidget *emailkey_radiobtn; - GtkWidget *customkey_radiobtn; - GtkWidget *customkey_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); - - PACK_FRAME (vbox1, frame1, _("Sign key")); - - 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); - - defaultkey_radiobtn = gtk_radio_button_new_with_label - (NULL, _("Use default GnuPG key")); - gtk_widget_show (defaultkey_radiobtn); - gtk_box_pack_start (GTK_BOX (vbox2), defaultkey_radiobtn, - FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (defaultkey_radiobtn), - GINT_TO_POINTER (SIGN_KEY_DEFAULT)); - - emailkey_radiobtn = gtk_radio_button_new_with_label_from_widget - (GTK_RADIO_BUTTON (defaultkey_radiobtn), - _("Select key by your email address")); - gtk_widget_show (emailkey_radiobtn); - gtk_box_pack_start (GTK_BOX (vbox2), emailkey_radiobtn, - FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (emailkey_radiobtn), - GINT_TO_POINTER (SIGN_KEY_BY_FROM)); - - customkey_radiobtn = gtk_radio_button_new_with_label_from_widget - (GTK_RADIO_BUTTON (defaultkey_radiobtn), - _("Specify key manually")); - gtk_widget_show (customkey_radiobtn); - gtk_box_pack_start (GTK_BOX (vbox2), customkey_radiobtn, - FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (customkey_radiobtn), - GINT_TO_POINTER (SIGN_KEY_CUSTOM)); - - hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0); - - label = gtk_label_new (""); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0); - gtk_widget_set_usize (label, 16, -1); - - label = gtk_label_new (_("User or key ID:")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0); - - customkey_entry = gtk_entry_new (); - gtk_widget_show (customkey_entry); - gtk_box_pack_start (GTK_BOX (hbox1), customkey_entry, - TRUE, TRUE, 0); - - SET_TOGGLE_SENSITIVITY (customkey_radiobtn, customkey_entry); - - privacy.defaultkey_radiobtn = defaultkey_radiobtn; - privacy.emailkey_radiobtn = emailkey_radiobtn; - privacy.customkey_radiobtn = customkey_radiobtn; - privacy.customkey_entry = customkey_entry; -} -#endif /* USE_GPGME */ - -#if USE_SSL -static void prefs_account_ssl_create(void) -{ - GtkWidget *vbox1; - - GtkWidget *receive_frame; - GtkWidget *vbox2; - GtkWidget *pop_chkbtn; - GtkWidget *imap_chkbtn; - - GtkWidget *send_frame; - GtkWidget *vbox3; - GtkWidget *smtp_nossl_radiobtn; - GtkWidget *smtp_ssltunnel_radiobtn; - GtkWidget *smtp_sslstarttls_radiobtn; - - /* Vertial Box */ - 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); - - /* Receive Options */ - PACK_FRAME (vbox1, receive_frame, _("Receive")); - - vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); - gtk_widget_show (vbox2); - gtk_container_add (GTK_CONTAINER (receive_frame), vbox2); - gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); - - PACK_CHECK_BUTTON (vbox2, pop_chkbtn, _("Use SSL tunnel to connect to POP server")); - PACK_CHECK_BUTTON (vbox2, imap_chkbtn, _("Use SSL tunnel to connect to IMAP server")); - - /* Send Options */ - PACK_FRAME (vbox1, send_frame, _("Send")); - - vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW); - gtk_widget_show (vbox3); - gtk_container_add (GTK_CONTAINER (send_frame), vbox3); - gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8); - - smtp_nossl_radiobtn = gtk_radio_button_new_with_label - (NULL, _("No SSL for SMTP")); - gtk_widget_show (smtp_nossl_radiobtn); - gtk_box_pack_start (GTK_BOX (vbox3), smtp_nossl_radiobtn, - FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (smtp_nossl_radiobtn), - GINT_TO_POINTER (SSL_SMTP_NONE)); - - smtp_ssltunnel_radiobtn = gtk_radio_button_new_with_label_from_widget - (GTK_RADIO_BUTTON (smtp_nossl_radiobtn), - _("Use SSL tunnel to connect to SMTP server")); - gtk_widget_show (smtp_ssltunnel_radiobtn); - gtk_box_pack_start (GTK_BOX (vbox3), smtp_ssltunnel_radiobtn, - FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (smtp_ssltunnel_radiobtn), - GINT_TO_POINTER (SSL_SMTP_TUNNEL)); - - smtp_sslstarttls_radiobtn = gtk_radio_button_new_with_label_from_widget - (GTK_RADIO_BUTTON (smtp_nossl_radiobtn), - _("Use STARTTLS command to start SMTP SSL session")); - gtk_widget_show (smtp_sslstarttls_radiobtn); - gtk_box_pack_start (GTK_BOX (vbox3), smtp_sslstarttls_radiobtn, - FALSE, FALSE, 0); - gtk_object_set_user_data (GTK_OBJECT (smtp_sslstarttls_radiobtn), - GINT_TO_POINTER (SSL_SMTP_STARTTLS)); - - ssl.pop_chkbtn = pop_chkbtn; - ssl.imap_chkbtn = imap_chkbtn; - ssl.smtp_nossl_radiobtn = smtp_nossl_radiobtn; - ssl.smtp_ssltunnel_radiobtn = smtp_ssltunnel_radiobtn; - ssl.smtp_sslstarttls_radiobtn = smtp_sslstarttls_radiobtn; -} -#endif /* USE_SSL */ - -static void prefs_account_advanced_create(void) -{ - GtkWidget *vbox1; - GtkWidget *vbox2; - GtkWidget *hbox1; - GtkWidget *checkbtn_smtpport; - GtkWidget *entry_smtpport; - GtkWidget *hbox_popport; - GtkWidget *checkbtn_popport; - GtkWidget *entry_popport; - GtkWidget *hbox_imapport; - GtkWidget *checkbtn_imapport; - GtkWidget *entry_imapport; - GtkWidget *hbox_nntpport; - GtkWidget *checkbtn_nntpport; - GtkWidget *entry_nntpport; - GtkWidget *checkbtn_domain; - GtkWidget *entry_domain; - -#define PACK_HBOX(hbox) \ -{ \ - hbox = gtk_hbox_new (FALSE, 8); \ - gtk_widget_show (hbox); \ - gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); \ -} - -#define PACK_PORT_ENTRY(box, entry) \ -{ \ - entry = gtk_entry_new_with_max_length (5); \ - gtk_widget_show (entry); \ - gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0); \ - gtk_widget_set_usize (entry, 64, -1); \ -} - - 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); - - PACK_HBOX (hbox1); - PACK_CHECK_BUTTON (hbox1, checkbtn_smtpport, _("Specify SMTP port")); - PACK_PORT_ENTRY (hbox1, entry_smtpport); - SET_TOGGLE_SENSITIVITY (checkbtn_smtpport, entry_smtpport); - - PACK_HBOX (hbox_popport); - PACK_CHECK_BUTTON (hbox_popport, checkbtn_popport, - _("Specify POP3 port")); - PACK_PORT_ENTRY (hbox_popport, entry_popport); - SET_TOGGLE_SENSITIVITY (checkbtn_popport, entry_popport); - - PACK_HBOX (hbox_imapport); - PACK_CHECK_BUTTON (hbox_imapport, checkbtn_imapport, - _("Specify IMAP4 port")); - PACK_PORT_ENTRY (hbox_imapport, entry_imapport); - SET_TOGGLE_SENSITIVITY (checkbtn_imapport, entry_imapport); - - PACK_HBOX (hbox_nntpport); - PACK_CHECK_BUTTON (hbox_nntpport, checkbtn_nntpport, - _("Specify NNTP port")); - PACK_PORT_ENTRY (hbox_nntpport, entry_nntpport); - SET_TOGGLE_SENSITIVITY (checkbtn_nntpport, entry_nntpport); - - PACK_HBOX (hbox1); - PACK_CHECK_BUTTON (hbox1, checkbtn_domain, _("Specify domain name")); - - entry_domain = gtk_entry_new (); - gtk_widget_show (entry_domain); - gtk_box_pack_start (GTK_BOX (hbox1), entry_domain, TRUE, TRUE, 0); - SET_TOGGLE_SENSITIVITY (checkbtn_domain, entry_domain); - -#undef PACK_HBOX -#undef PACK_PORT_ENTRY - - advanced.smtpport_chkbtn = checkbtn_smtpport; - advanced.smtpport_entry = entry_smtpport; - advanced.popport_hbox = hbox_popport; - advanced.popport_chkbtn = checkbtn_popport; - advanced.popport_entry = entry_popport; - advanced.imapport_hbox = hbox_imapport; - advanced.imapport_chkbtn = checkbtn_imapport; - advanced.imapport_entry = entry_imapport; - advanced.nntpport_hbox = hbox_nntpport; - advanced.nntpport_chkbtn = checkbtn_nntpport; - advanced.nntpport_entry = entry_nntpport; - advanced.domain_chkbtn = checkbtn_domain; - advanced.domain_entry = entry_domain; -} - -static gint prefs_account_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - prefs_account_cancel(); - return TRUE; -} - -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_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn)))) && - *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; - } - - if (protocol == A_LOCAL && - *gtk_entry_get_text(GTK_ENTRY(basic.localmbox_entry)) == '\0') { - alertpanel_error(_("local mailbox filename is not entered.")); - return -1; - } - - if (protocol == A_LOCAL && - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn)) && *gtk_entry_get_text(GTK_ENTRY(basic.mailcmd_entry)) == '\0') { - alertpanel_error(_("mail command 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_edit_custom_header(void) -{ - prefs_custom_header_open(&tmp_ac_prefs); -} - -#if USE_GPGME || USE_SSL -static void prefs_account_enum_set_data_from_radiobtn(PrefParam *pparam) -{ - GtkRadioButton *radiobtn; - GSList *group; - - radiobtn = GTK_RADIO_BUTTON (*pparam->widget); - group = gtk_radio_button_group (radiobtn); - while (group != NULL) { - GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data); - if (gtk_toggle_button_get_active (btn)) { - *((gint *)pparam->data) = GPOINTER_TO_INT - (gtk_object_get_user_data (GTK_OBJECT (btn))); - break; - } - group = group->next; - } -} - -static void prefs_account_enum_set_radiobtn(PrefParam *pparam) -{ - GtkRadioButton *radiobtn; - GSList *group; - gpointer data; - - data = GINT_TO_POINTER (*((gint *)pparam->data)); - radiobtn = GTK_RADIO_BUTTON (*pparam->widget); - group = gtk_radio_button_group (radiobtn); - while (group != NULL) { - GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data); - gpointer data1 = gtk_object_get_user_data (GTK_OBJECT (btn)); - if (data1 == data) { - gtk_toggle_button_set_active (btn, TRUE); - break; - } - group = group->next; - } -} - -#endif /* USE_GPGME */ - -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; - /* - case A_LOCAL_CMD: - gtk_option_menu_set_history(optmenu, 5); - break; - */ - default: - break; - } - - 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; - gboolean active; - gint auth; - - 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_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 0, VSPACING_NARROW); - gtk_widget_set_sensitive(basic.nntpauth_chkbtn, TRUE); - gtk_widget_show(basic.nntpauth_chkbtn); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 1, VSPACING_NARROW); - gtk_widget_hide(basic.recvserv_label); - gtk_widget_hide(basic.recvserv_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 2, 0); - gtk_widget_show(basic.smtpserv_label); - gtk_widget_show(basic.smtpserv_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 4, VSPACING_NARROW); - gtk_widget_hide(basic.localmbox_label); - gtk_widget_hide(basic.localmbox_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 3, 0); - gtk_widget_hide(basic.mailcmd_label); - gtk_widget_hide(basic.mailcmd_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 6, 0); - gtk_widget_hide(basic.mailcmd_chkbtn); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 5, 0); - gtk_widget_show(basic.uid_label); - gtk_widget_show(basic.pass_label); - gtk_widget_show(basic.uid_entry); - gtk_widget_show(basic.pass_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 7, 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); - - /* update userid/passwd sensitive state */ - prefs_account_nntpauth_toggled - (GTK_TOGGLE_BUTTON(basic.nntpauth_chkbtn), NULL); - gtk_widget_set_sensitive(receive.pop3_frame, FALSE); - gtk_widget_set_sensitive(receive.imap_frame, FALSE); - gtk_widget_hide(advanced.popport_hbox); - gtk_widget_hide(advanced.imapport_hbox); - gtk_widget_show(advanced.nntpport_hbox); - -#if USE_SSL - gtk_widget_set_sensitive(ssl.pop_chkbtn, FALSE); - gtk_widget_set_sensitive(ssl.imap_chkbtn, FALSE); -#endif - 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_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 0, 0); - gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE); - gtk_widget_hide(basic.nntpauth_chkbtn); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 1, 0); - gtk_widget_hide(basic.recvserv_label); - gtk_widget_hide(basic.recvserv_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 2, 0); - gtk_widget_show(basic.smtpserv_label); - gtk_widget_show(basic.smtpserv_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 4, VSPACING_NARROW); - gtk_widget_show(basic.localmbox_label); - gtk_widget_show(basic.localmbox_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 3, VSPACING_NARROW); - gtk_widget_show(basic.mailcmd_label); - gtk_widget_show(basic.mailcmd_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 6, VSPACING_NARROW); - gtk_widget_show(basic.mailcmd_chkbtn); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 5, VSPACING_NARROW); - gtk_widget_hide(basic.uid_label); - gtk_widget_hide(basic.pass_label); - gtk_widget_hide(basic.uid_entry); - gtk_widget_hide(basic.pass_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 7, 0); - - 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); - gtk_widget_set_sensitive(receive.imap_frame, FALSE); - gtk_widget_hide(advanced.popport_hbox); - gtk_widget_hide(advanced.imapport_hbox); - gtk_widget_hide(advanced.nntpport_hbox); - prefs_account_mailcmd_toggled - (GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn), NULL); - -#if USE_SSL - gtk_widget_set_sensitive(ssl.pop_chkbtn, FALSE); - gtk_widget_set_sensitive(ssl.imap_chkbtn, FALSE); -#endif - break; - case A_IMAP4: - gtk_widget_set_sensitive(basic.inbox_label, FALSE); - gtk_widget_set_sensitive(basic.inbox_entry, FALSE); - gtk_widget_hide(basic.nntpserv_label); - gtk_widget_hide(basic.nntpserv_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 0, 0); - gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE); - gtk_widget_hide(basic.nntpauth_chkbtn); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 1, 0); - 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_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 2, VSPACING_NARROW); - gtk_widget_show(basic.smtpserv_label); - gtk_widget_show(basic.smtpserv_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 4, VSPACING_NARROW); - gtk_widget_hide(basic.localmbox_label); - gtk_widget_hide(basic.localmbox_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 3, 0); - gtk_widget_hide(basic.mailcmd_label); - gtk_widget_hide(basic.mailcmd_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 6, 0); - gtk_widget_hide(basic.mailcmd_chkbtn); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 5, 0); - gtk_widget_show(basic.uid_label); - gtk_widget_show(basic.pass_label); - gtk_widget_show(basic.uid_entry); - gtk_widget_show(basic.pass_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 7, 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); - gtk_widget_set_sensitive(receive.imap_frame, TRUE); - gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE); - gtk_widget_set_sensitive(basic.smtpserv_label, TRUE); - gtk_widget_hide(advanced.popport_hbox); - gtk_widget_show(advanced.imapport_hbox); - gtk_widget_hide(advanced.nntpport_hbox); - -#if USE_SSL - gtk_widget_set_sensitive(ssl.pop_chkbtn, FALSE); - gtk_widget_set_sensitive(ssl.imap_chkbtn, TRUE); -#endif - break; - case A_POP3: - 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_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 0, 0); - gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE); - gtk_widget_hide(basic.nntpauth_chkbtn); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 1, 0); - 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_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 2, VSPACING_NARROW); - gtk_widget_show(basic.smtpserv_label); - gtk_widget_show(basic.smtpserv_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 4, VSPACING_NARROW); - gtk_widget_hide(basic.localmbox_label); - gtk_widget_hide(basic.localmbox_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 3, 0); - gtk_widget_hide(basic.mailcmd_label); - gtk_widget_hide(basic.mailcmd_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 6, 0); - gtk_widget_hide(basic.mailcmd_chkbtn); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 5, 0); - gtk_widget_show(basic.uid_label); - gtk_widget_show(basic.pass_label); - gtk_widget_show(basic.uid_entry); - gtk_widget_show(basic.pass_entry); - gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), - 7, 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); - gtk_widget_set_sensitive(receive.imap_frame, FALSE); - gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE); - gtk_widget_set_sensitive(basic.smtpserv_label, TRUE); - gtk_widget_show(advanced.popport_hbox); - gtk_widget_hide(advanced.imapport_hbox); - gtk_widget_hide(advanced.nntpport_hbox); - -#if USE_SSL - gtk_widget_set_sensitive(ssl.pop_chkbtn, TRUE); - gtk_widget_set_sensitive(ssl.imap_chkbtn, FALSE); -#endif - break; - } - - gtk_widget_queue_resize(basic.serv_frame); -} - -static void prefs_account_nntpauth_toggled(GtkToggleButton *button, - gpointer user_data) -{ - gboolean auth; - - if (!GTK_WIDGET_SENSITIVE (GTK_WIDGET (button))) - return; - auth = gtk_toggle_button_get_active (button); - gtk_widget_set_sensitive(basic.uid_label, auth); - gtk_widget_set_sensitive(basic.pass_label, auth); - gtk_widget_set_sensitive(basic.uid_entry, auth); - gtk_widget_set_sensitive(basic.pass_entry, auth); -} - -static void prefs_account_mailcmd_toggled(GtkToggleButton *button, - gpointer user_data) -{ - gboolean use_mailcmd; - - use_mailcmd = gtk_toggle_button_get_active (button); - - gtk_widget_set_sensitive(basic.mailcmd_entry, use_mailcmd); - gtk_widget_set_sensitive(basic.mailcmd_label, use_mailcmd); - gtk_widget_set_sensitive(basic.smtpserv_entry, !use_mailcmd); - gtk_widget_set_sensitive(basic.smtpserv_label, !use_mailcmd); - gtk_widget_set_sensitive(basic.uid_entry, !use_mailcmd); - gtk_widget_set_sensitive(basic.pass_entry, !use_mailcmd); -} diff --git a/src/prefs_account.h b/src/prefs_account.h deleted file mode 100644 index 11f0f0105..000000000 --- a/src/prefs_account.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * 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_ACCOUNT_H__ -#define __PREFS_ACCOUNT_H__ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#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; - -#if USE_GPGME -typedef enum { - SIGN_KEY_DEFAULT, - SIGN_KEY_BY_FROM, - SIGN_KEY_CUSTOM -} SignKeyType; -#endif /* USE_GPGME */ - -#if USE_SSL -typedef enum { - SSL_SMTP_NONE, - SSL_SMTP_TUNNEL, - SSL_SMTP_STARTTLS -} SSLSMTPType; -#endif /* USE_SSL */ - -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; - - gchar * local_mbox; - gboolean use_mail_command; - gchar * mail_command; - - /* Temporarily preserved password */ - gchar *tmp_pass; - - /* Receive */ - gboolean rmmail; - gboolean getall; - gboolean recv_at_getall; - gboolean filter_on_recv; - - gchar *imap_dir; - - /* 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; - - GSList *customhdr_list; - - /* Compose */ - gchar *sig_path; - -#if USE_GPGME - /* Privacy */ - SignKeyType sign_key; - gchar *sign_key_id; -#endif /* USE_GPGME */ - -#if USE_SSL - /* SSL Config */ - gboolean ssl_pop; - gboolean ssl_imap; - SSLSMTPType ssl_smtp; -#endif /* USE_SSL */ - - /* Advanced */ - gboolean set_smtpport; - gushort smtpport; - gboolean set_popport; - gushort popport; - gboolean set_imapport; - gushort imapport; - 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 deleted file mode 100644 index 0aa547627..000000000 --- a/src/prefs_common.c +++ /dev/null @@ -1,3430 +0,0 @@ -/* - * 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 "prefs_display_header.h" -#include "mainwindow.h" -#include "summaryview.h" -#include "messageview.h" -#include "manage_window.h" -#include "inc.h" -#include "menu.h" -#include "codeconv.h" -#include "utils.h" -#include "gtkutils.h" -#include "alertpanel.h" -#include "folder.h" -#include "gtkspell.h" -#include "filesel.h" -#include "folderview.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 *checkbtn_noerrorpanel; - GtkWidget *checkbtn_scan_after_inc; - - - 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; - - GtkWidget *checkbtn_returnreceipt; -} send; - -static struct Compose { - GtkWidget *checkbtn_quote; - GtkWidget *entry_quotemark; - GtkWidget *text_quotefmt; - GtkWidget *checkbtn_autosig; - GtkWidget *entry_sigsep; - - GtkWidget *checkbtn_reply_account_autosel; - GtkWidget *entry_fw_quotemark; - GtkWidget *text_fw_quotefmt; - - GtkWidget *spinbtn_linewrap; - GtkObject *spinbtn_linewrap_adj; - GtkWidget *checkbtn_wrapquote; - GtkWidget *checkbtn_wrapatsend; - - GtkWidget * checkbtn_forward_as_attachment; - GtkWidget * checkbtn_smart_wrapping; - - /* spelling */ - GtkWidget *checkbtn_enable_ispell; - GtkWidget *entry_ispell_path; - GtkWidget *btn_ispell_path; - GtkWidget *optmenu_dictionary_path; -} compose; - -static struct Display { - GtkWidget *entry_textfont; - GtkWidget *button_textfont; - - GtkWidget *entry_smallfont; - GtkWidget *entry_normalfont; - GtkWidget *entry_boldfont; - - GtkWidget *chkbtn_folder_unread; - - GtkWidget *chkbtn_transhdr; - - GtkWidget *chkbtn_swapfrom; - GtkWidget *chkbtn_hscrollbar; - GtkWidget *chkbtn_useaddrbook; - GtkWidget *chkbtn_expand_thread; - GtkWidget *chkbtn_bold_unread; - - GtkWidget *entry_datefmt; -} 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_gpg_signature_popup; - GtkWidget *checkbtn_passphrase_grab; - GtkWidget *checkbtn_gpg_warning; - 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; - GtkWidget *checkbtn_warnqueued; - GtkWidget *checkbtn_addaddrbyclick; - GtkWidget *optmenu_recvdialog; -} 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; - GtkWidget *tgt_folder_btn; -} color_buttons; - -static GtkWidget *quote_desc_win; -static GtkWidget *font_sel_win; -static guint font_sel_conn_id; -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 -static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam); -static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam); - -static void prefs_dictionary_set_data_from_optmenu(PrefParam *param); -static void prefs_dictionary_set_optmenu(PrefParam *pparam); - - -/* - 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}, - {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL, - &receive.checkbtn_noerrorpanel, - prefs_set_data_from_toggle, prefs_set_toggle}, - {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc, - P_BOOL, &receive.checkbtn_scan_after_inc, - 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%Q", - - &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt, - prefs_set_data_from_text, prefs_set_text}, - {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING, - &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry}, - {"fw_quote_format", "---------- Forwarded message ----------\\n?d(Date: %d\\n)?f(From: %f\\n)?t(To: %t\\n)?c(Cc: %c\\n)?n(Newsgroups: %n\\n)?s(Subject: %s\\n)\\n%Q", - &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_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}, - - {"reply_account_autoselect", "TRUE", - &prefs_common.reply_account_autosel, P_BOOL, - &compose.checkbtn_reply_account_autosel, - prefs_set_data_from_toggle, prefs_set_toggle}, - - {"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}, - {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment, - P_BOOL, &compose.checkbtn_forward_as_attachment, - prefs_set_data_from_toggle, prefs_set_toggle}, - {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping, - P_BOOL, &compose.checkbtn_smart_wrapping, - prefs_set_data_from_toggle, prefs_set_toggle}, - {"enable_ispell", "TRUE", &prefs_common.enable_ispell, - P_BOOL, &compose.checkbtn_enable_ispell, - prefs_set_data_from_toggle, prefs_set_toggle}, - {"ispell_path", ISPELL_PATH, &prefs_common.ispell_path, - P_STRING, &compose.entry_ispell_path, - prefs_set_data_from_entry, prefs_set_entry}, - {"dictionary_path", "", &prefs_common.dictionary_path, - P_STRING, &compose.optmenu_dictionary_path, - prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu }, - - {"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}, - {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*", - &prefs_common.smallfont, P_STRING, - &display.entry_smallfont, - prefs_set_data_from_entry, prefs_set_entry}, - {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*", - &prefs_common.boldfont, P_STRING, - &display.entry_boldfont, - prefs_set_data_from_entry, prefs_set_entry}, - {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*", - &prefs_common.normalfont, P_STRING, - &display.entry_normalfont, - 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}, - - {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL, - &display.chkbtn_transhdr, - prefs_set_data_from_toggle, prefs_set_toggle}, - - /* Display: Summary View */ - {"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}, - {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL, - &display.chkbtn_useaddrbook, - prefs_set_data_from_toggle, prefs_set_toggle}, - {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format, - P_STRING, &display.entry_datefmt, - prefs_set_data_from_entry, prefs_set_entry}, - {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL, - &display.chkbtn_expand_thread, - prefs_set_data_from_toggle, prefs_set_toggle}, - {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL, - &display.chkbtn_bold_unread, - 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", "FALSE", &prefs_common.show_number, P_BOOL, - NULL, NULL, NULL}, - {"show_score", "TRUE", &prefs_common.show_score, 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_score", "40", &prefs_common.summary_col_score, - 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}, - {"target_folder_color", "14294218", &prefs_common.tgt_folder_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}, - - {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL, - NULL, NULL, NULL}, - - /* 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}, - {"gpg_signature_popup", "FALSE", - &prefs_common.gpg_signature_popup, P_BOOL, - &privacy.checkbtn_gpg_signature_popup, - prefs_set_data_from_toggle, prefs_set_toggle}, -#ifndef __MINGW32__ - {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL, - &privacy.checkbtn_passphrase_grab, - prefs_set_data_from_toggle, prefs_set_toggle}, -#endif /* __MINGW32__ */ - {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL, - &privacy.checkbtn_gpg_warning, - 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, - NULL, NULL, NULL}, */ - - {"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}, - {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM, - &interface.optmenu_recvdialog, - prefs_common_recv_dialog_set_data_from_optmenu, - prefs_common_recv_dialog_set_optmenu}, - - {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click, - P_BOOL, &interface.checkbtn_addaddrbyclick, - 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}, - {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL, - &send.checkbtn_returnreceipt, - 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}, - {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit, - P_BOOL, &interface.checkbtn_warnqueued, - 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}, - - {"kill_score", "-9999", &prefs_common.kill_score, P_INT, - NULL, NULL, NULL}, - {"important_score", "1", &prefs_common.important_score, P_INT, - NULL, NULL, NULL}, - - {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL} -}; - -#define VSPACING 12 -#define VSPACING_NARROW 3 - -#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 date_format_ok_btn_clicked (GtkButton *button, - GtkWidget **widget); -static void date_format_cancel_btn_clicked (GtkButton *button, - GtkWidget **widget); -static void date_format_key_pressed (GtkWidget *keywidget, - GdkEventKey *event, - GtkWidget **widget); -static gboolean date_format_on_delete (GtkWidget *dialogwidget, - GdkEventAny *event, - GtkWidget **widget); -static void date_format_entry_on_change (GtkEditable *editable, - GtkLabel *example); -static void date_format_select_row (GtkWidget *date_format_list, - gint row, - gint column, - GdkEventButton *event, - GtkWidget *date_format); -static GtkWidget *date_format_create (GtkButton *button, - void *data); - -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 prefs_quote_colors_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -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 quote_colors_set_dialog_key_pressed (GtkWidget *widget, - GdkEventKey *event, - 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, GtkEntry *entry); - -static void prefs_font_selection_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry); - -static gint prefs_common_deleted (GtkWidget *widget, - GdkEventAny *event, - gpointer data); -static void prefs_common_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void prefs_common_ok (void); -static void prefs_common_apply (void); -static void prefs_common_cancel (void); - -static void compose_prefs_fmt_open(void); -static void compose_prefs_fmt_create(void); - -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 (prefs_rc_is_readonly(COMMON_RC)) - return; - - inc_autocheck_timer_remove(); - - 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(prefs_common_deleted), 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(prefs_common_cancel), - 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++); - - compose_prefs_fmt_create(); - - 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 *checkbtn_noerrorpanel; - GtkWidget *checkbtn_scan_after_inc; - - - 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); - - 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_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel, - _("No error popup on receive error")); - PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc, - _("Update all local folders after incorporation")); - - - 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.checkbtn_noerrorpanel = checkbtn_noerrorpanel; - receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc; - - - 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; - GtkWidget *checkbtn_returnreceipt; - - 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 messages to outbox")); - PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg, - _("Queue messages that fail to send")); - PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt, - _("Send return receipt on request")); - - 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 (Recommended)"), 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); - 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); -#if HAVE_LIBJCONV - SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5); -#endif - SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R); -#if HAVE_LIBJCONV - SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251); - SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U); -#endif - 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 */ - 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); - - 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.checkbtn_returnreceipt = checkbtn_returnreceipt; - - send.optmenu_charset = optmenu; -} - -static void prefs_dictionary_set_data_from_optmenu(PrefParam *param) -{ - gchar *str; - gchar *dict_path; - - g_return_if_fail(param); - g_return_if_fail(param->data); - g_return_if_fail(param->widget); - g_return_if_fail(*(param->widget)); - - dict_path = gtkspell_get_dictionary_menu_active_item - (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget)))); - str = *((gchar **) param->data); - if (str) - g_free(str); - *((gchar **) param->data) = dict_path; -} - -static void prefs_dictionary_set_optmenu(PrefParam *pparam) -{ - GList *cur; - GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget); - GtkWidget *menu; - GtkWidget *menuitem; - gchar *dict_path; - gint n = 0; - - g_return_if_fail(optmenu != NULL); - g_return_if_fail(pparam->data != NULL); - - if (*(gchar **) pparam->data) { - menu = gtk_option_menu_get_menu(optmenu); - for (cur = GTK_MENU_SHELL(menu)->children; - cur != NULL; cur = cur->next) { - menuitem = GTK_WIDGET(cur->data); - dict_path = gtk_object_get_data(GTK_OBJECT(menuitem), "full_path"); - if (!strcmp(dict_path, *((gchar **)pparam->data))) { - gtk_option_menu_set_history(optmenu, n); - return; - } - n++; - } - } - - gtk_option_menu_set_history(optmenu, 0); - prefs_dictionary_set_data_from_optmenu(pparam); -} - -static void prefs_compose_checkbtn_enable_ispell_toggle_cb - (GtkWidget *widget, - gpointer data) -{ - gboolean toggled; - - toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); - gtk_widget_set_sensitive(compose.entry_ispell_path, toggled); - gtk_widget_set_sensitive(compose.optmenu_dictionary_path, toggled); - gtk_widget_set_sensitive(compose.btn_ispell_path, toggled); -} - -static void prefs_compose_btn_ispell_path_clicked_cb(GtkWidget *widget, - gpointer data) -{ - gchar *file_path; - GtkWidget *new_menu; - - file_path = filesel_select_file(_("Select spelling checker location"), - prefs_common.ispell_path); - if (file_path == NULL) { - /* don't change */ - } - else { - if (prefs_common.ispell_path) - g_free(prefs_common.ispell_path); - prefs_common.ispell_path = file_path; - - new_menu = gtkspell_dictionary_option_menu_new(file_path); - gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path), - new_menu); - - gtk_entry_set_text(GTK_ENTRY(compose.entry_ispell_path), file_path); - /* select first one */ - gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary_path), 0); - - prefs_common.dictionary_path = gtkspell_get_dictionary_menu_active_item( - gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path))); - } - -} - -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 *hbox1; - GtkWidget *hbox2; - GtkWidget *btn_quotefmt; - - GtkWidget *frame_sig; - GtkWidget *vbox_sig; - GtkWidget *checkbtn_autosig; - GtkWidget *label_sigsep; - GtkWidget *entry_sigsep; - - GtkWidget *checkbtn_reply_account_autosel; - GtkWidget *vbox_linewrap; - - GtkWidget *hbox3; - GtkWidget *hbox4; - GtkWidget *label_linewrap; - GtkObject *spinbtn_linewrap_adj; - GtkWidget *spinbtn_linewrap; - GtkWidget *checkbtn_wrapquote; - GtkWidget *checkbtn_wrapatsend; - - GtkWidget *checkbtn_forward_as_attachment; - GtkWidget *checkbtn_smart_wrapping; - - GtkWidget *frame_spell; - GtkWidget *hbox_spell; - GtkWidget *vbox_spell; - GtkWidget *hbox_ispell_path; - GtkWidget *checkbtn_enable_ispell; - GtkWidget *label_ispell_path; - GtkWidget *entry_ispell_path; - GtkWidget *btn_ispell_path; - GtkWidget *hbox_dictionary_path; - GtkWidget *label_dictionary_path; - GtkWidget *optmenu_dictionary_path; - - 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); - */ - - hbox1 = gtk_hbox_new (FALSE, 32); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); - - btn_quotefmt = gtk_button_new_with_label (_(" Quote format ")); - gtk_widget_show (btn_quotefmt); - gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked", - GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL); - - 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")); - - PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment, - _("Forward as attachment")); - - PACK_CHECK_BUTTON (vbox1, checkbtn_reply_account_autosel, - _("Automatically select account for mail replies")); - - PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping, - _("Smart wrapping (EXPERIMENTAL)")); - - /* spell checker defaults */ - PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings")); - vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW); - gtk_widget_show (vbox_spell); - gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell); - gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8); - - PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_ispell, - _("Enable spell checker")); - - gtk_signal_connect(GTK_OBJECT(checkbtn_enable_ispell), "toggled", - GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_ispell_toggle_cb), - NULL); - - hbox_ispell_path = gtk_hbox_new (FALSE, 8); - gtk_widget_show(hbox_ispell_path); - gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_ispell_path, TRUE, TRUE, 0); - - label_ispell_path = gtk_label_new (_("Ispelll path")); - gtk_widget_show(label_ispell_path); - gtk_box_pack_start(GTK_BOX(hbox_ispell_path), label_ispell_path, FALSE, FALSE, 0); - - entry_ispell_path = gtk_entry_new(); - gtk_widget_show(entry_ispell_path); - gtk_box_pack_start(GTK_BOX(hbox_ispell_path), entry_ispell_path, FALSE, FALSE, 0); - gtk_widget_set_usize(entry_ispell_path, 150, -1); - gtk_widget_set_sensitive(entry_ispell_path, prefs_common.enable_ispell); - - btn_ispell_path = gtk_button_new_with_label(_("...")); - gtk_widget_show(btn_ispell_path); - gtk_box_pack_start(GTK_BOX(hbox_ispell_path), btn_ispell_path, FALSE, FALSE, 0); - gtk_widget_set_sensitive(btn_ispell_path, prefs_common.enable_ispell); - - gtk_signal_connect(GTK_OBJECT(btn_ispell_path), "clicked", - GTK_SIGNAL_FUNC(prefs_compose_btn_ispell_path_clicked_cb), - NULL); - - hbox_dictionary_path = gtk_hbox_new(FALSE, 8); - gtk_widget_show(hbox_dictionary_path); - gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary_path, TRUE, TRUE, 0); - - label_dictionary_path = gtk_label_new(_("Dictionaries")); - gtk_widget_show(label_dictionary_path); - gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), label_dictionary_path, FALSE, FALSE, 0); - - optmenu_dictionary_path = gtk_option_menu_new(); - gtk_widget_show(optmenu_dictionary_path); - gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary_path), - gtkspell_dictionary_option_menu_new(prefs_common.ispell_path)); - gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), optmenu_dictionary_path, FALSE, FALSE, 0); - gtk_widget_set_sensitive(optmenu_dictionary_path, prefs_common.enable_ispell); - - /* - 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.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel; - - compose.spinbtn_linewrap = spinbtn_linewrap; - compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj; - compose.checkbtn_wrapquote = checkbtn_wrapquote; - compose.checkbtn_wrapatsend = checkbtn_wrapatsend; - - compose.checkbtn_forward_as_attachment = - checkbtn_forward_as_attachment; - compose.checkbtn_smart_wrapping = - checkbtn_smart_wrapping; - - compose.checkbtn_enable_ispell = checkbtn_enable_ispell; - compose.entry_ispell_path = entry_ispell_path; - compose.btn_ispell_path = btn_ispell_path; - compose.optmenu_dictionary_path = optmenu_dictionary_path; -} - -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 *chkbtn_useaddrbook; - GtkWidget *chkbtn_expand_thread; - GtkWidget *chkbtn_bold_unread; - GtkWidget *hbox1; - GtkWidget *label_datefmt; - GtkWidget *button_datefmt; - GtkWidget *entry_datefmt; - GtkWidget *vbox3; - GtkWidget *button_dispitem; - GtkWidget *tmplabel, *tmpbutton, *tmpentry; - - 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 (4, 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_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5); - 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), entry_textfont); - - tmplabel = gtk_label_new (_("Small")); - gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5); - gtk_widget_show (tmplabel); - gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2, - GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0); - - tmpentry = gtk_entry_new (); - gtk_widget_show (tmpentry); - gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2, - (GTK_EXPAND | GTK_FILL), 0, 0, 0); - - tmpbutton = gtk_button_new_with_label (" ... "); - gtk_widget_show (tmpbutton); - gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2, - 0, 0, 0, 0); - gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked", - GTK_SIGNAL_FUNC(prefs_font_select), tmpentry); - display.entry_smallfont = tmpentry; - - tmplabel = gtk_label_new (_("Normal")); - gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5); - gtk_widget_show (tmplabel); - gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3, - GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0); - - tmpentry = gtk_entry_new (); - gtk_widget_show (tmpentry); - gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3, - (GTK_EXPAND | GTK_FILL), 0, 0, 0); - - tmpbutton = gtk_button_new_with_label (" ... "); - gtk_widget_show (tmpbutton); - gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3, - 0, 0, 0, 0); - gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked", - GTK_SIGNAL_FUNC(prefs_font_select), tmpentry); - display.entry_normalfont = tmpentry; - - tmplabel = gtk_label_new (_("Bold")); - gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5); - gtk_widget_show (tmplabel); - gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4, - GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0); - - tmpentry = gtk_entry_new (); - gtk_widget_show (tmpentry); - gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4, - (GTK_EXPAND | GTK_FILL), 0, 0, 0); - - tmpbutton = gtk_button_new_with_label (" ... "); - gtk_widget_show (tmpbutton); - gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4, - 0, 0, 0, 0); - gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked", - GTK_SIGNAL_FUNC(prefs_font_select), tmpentry); - display.entry_boldfont = tmpentry; - - 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_useaddrbook, - _("Display sender using address book")); - PACK_CHECK_BUTTON - (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar")); - PACK_CHECK_BUTTON - (vbox2, chkbtn_expand_thread, _("Expand threads")); - PACK_CHECK_BUTTON - (vbox2, chkbtn_bold_unread, - _("Display unread messages with bold font")); - - hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0); - - label_datefmt = gtk_label_new (_("Date format")); - gtk_widget_show (label_datefmt); - gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0); - - entry_datefmt = gtk_entry_new (); - gtk_widget_show (entry_datefmt); - gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0); - - button_datefmt = gtk_button_new_with_label ("... "); - - gtk_widget_show (button_datefmt); - gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked", - GTK_SIGNAL_FUNC (date_format_create), NULL); - - /* spacer */ - vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW); - gtk_widget_show (vbox3); - gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, TRUE, 0); - - 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; - display.chkbtn_expand_thread = chkbtn_expand_thread; - display.chkbtn_bold_unread = chkbtn_bold_unread; - display.chkbtn_useaddrbook = chkbtn_useaddrbook; - display.entry_datefmt = entry_datefmt; -} - -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 *button_edit_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")); - - hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0); - - PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr, - _("Display short headers on message view")); - - button_edit_disphdr = gtk_button_new_with_label (_(" Edit... ")); - gtk_widget_show (button_edit_disphdr); - gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr, - FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_open), - NULL); - - SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr); - - 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_gpg_signature_popup; - GtkWidget *checkbtn_passphrase_grab; - GtkWidget *checkbtn_gpg_warning; - 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_gpg_signature_popup, - _("Show signature check result in a popup window")); - -#ifndef __MINGW32__ - PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab, - _("Grab input while entering a passphrase")); -#endif - - PACK_CHECK_BUTTON - (vbox2, checkbtn_gpg_warning, - _("Display warning on startup if GnuPG doesn't work")); - - 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_gpg_signature_popup - = checkbtn_gpg_signature_popup; - privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab; - privacy.checkbtn_gpg_warning = checkbtn_gpg_warning; - 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 *hbox1; - GtkWidget *label; - GtkWidget *optmenu_recvdialog; - GtkWidget *menu; - GtkWidget *menuitem; - - GtkWidget *frame_addr; - GtkWidget *vbox_addr; - GtkWidget *checkbtn_addaddrbyclick; - - GtkWidget *frame_exit; - GtkWidget *vbox_exit; - GtkWidget *checkbtn_confonexit; - GtkWidget *checkbtn_cleanonexit; - GtkWidget *checkbtn_askonclean; - GtkWidget *checkbtn_warnqueued; - - 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); - - hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0); - - label = gtk_label_new (_("Show receive dialog")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0); - - optmenu_recvdialog = gtk_option_menu_new (); - gtk_widget_show (optmenu_recvdialog); - gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog, - FALSE, FALSE, 0); - - menu = gtk_menu_new (); - MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS); - MENUITEM_ADD (menu, menuitem, _("Only if a window is active"), - RECV_DIALOG_ACTIVE); - MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER); - - gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu); - - PACK_FRAME (vbox1, frame_addr, _("Address book")); - - vbox_addr = gtk_vbox_new (FALSE, VSPACING_NARROW); - gtk_widget_show (vbox_addr); - gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr); - gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8); - - PACK_CHECK_BUTTON - (vbox_addr, checkbtn_addaddrbyclick, - _("Add address to destination when double-clicked")); - - /* Receive Dialog */ -/* 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 (_("Show receive Dialog")); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - recvdialog_optmenu = gtk_option_menu_new (); - gtk_widget_show (recvdialog_optmenu); - gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0); - - recvdialog_optmenu_menu = gtk_menu_new (); - - MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS); - MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE); - MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER); - - gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */ - - /* On Exit */ - 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); - - PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued, - _("Warn if there are queued messages")); - - /* interface.checkbtn_emacs = checkbtn_emacs; */ - interface.checkbtn_openunread = checkbtn_openunread; - interface.checkbtn_openinbox = checkbtn_openinbox; - interface.checkbtn_immedexec = checkbtn_immedexec; - interface.optmenu_recvdialog = recvdialog_optmenu; - interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick; - interface.checkbtn_confonexit = checkbtn_confonexit; - interface.checkbtn_cleanonexit = checkbtn_cleanonexit; - interface.checkbtn_askonclean = checkbtn_askonclean; - interface.checkbtn_warnqueued = checkbtn_warnqueued; -} - -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)'", - "netscape '%s'", - "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; -} - -static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget) -{ - GtkWidget *datefmt_sample = NULL; - gchar *text; - - g_return_if_fail(widget != NULL); - g_return_if_fail(*widget != NULL); - g_return_if_fail(display.entry_datefmt != NULL); - - datefmt_sample = GTK_WIDGET(gtk_object_get_data - (GTK_OBJECT(*widget), "datefmt_sample")); - g_return_if_fail(datefmt_sample != NULL); - - text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1); - g_free(prefs_common.date_format); - prefs_common.date_format = text; - gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text); - - gtk_widget_destroy(*widget); - *widget = NULL; -} - -static void date_format_cancel_btn_clicked(GtkButton *button, - GtkWidget **widget) -{ - g_return_if_fail(widget != NULL); - g_return_if_fail(*widget != NULL); - - gtk_widget_destroy(*widget); - *widget = NULL; -} - -static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event, - GtkWidget **widget) -{ - if (event && event->keyval == GDK_Escape) - date_format_cancel_btn_clicked(NULL, widget); -} - -static gboolean date_format_on_delete(GtkWidget *dialogwidget, - GdkEventAny *event, GtkWidget **widget) -{ - g_return_val_if_fail(widget != NULL, FALSE); - g_return_val_if_fail(*widget != NULL, FALSE); - - *widget = NULL; - return FALSE; -} - -static void date_format_entry_on_change(GtkEditable *editable, - GtkLabel *example) -{ - time_t cur_time; - struct tm *cal_time; - gchar buffer[100]; - gchar *text; - - cur_time = time(NULL); - cal_time = localtime(&cur_time); - buffer[0] = 0; - text = gtk_editable_get_chars(editable, 0, -1); - if (text) - strftime(buffer, sizeof buffer, text, cal_time); - gtk_label_set_text(example, buffer); -} - -static void date_format_select_row(GtkWidget *date_format_list, gint row, - gint column, GdkEventButton *event, - GtkWidget *date_format) -{ - gint cur_pos; - gchar *format; - gchar *old_format; - gchar *new_format; - GtkWidget *datefmt_sample; - - /* only on double click */ - if (!event || event->type != GDK_2BUTTON_PRESS) return; - - - datefmt_sample = GTK_WIDGET(gtk_object_get_data - (GTK_OBJECT(date_format), "datefmt_sample")); - - g_return_if_fail(date_format_list != NULL); - g_return_if_fail(date_format != NULL); - g_return_if_fail(datefmt_sample != NULL); - - /* get format from clist */ - gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format); - - cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample)); - old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample)); - - /* insert the format into the text entry */ - new_format = g_malloc(strlen(old_format) + 3); - - strncpy(new_format, old_format, cur_pos); - new_format[cur_pos] = '\0'; - strcat(new_format, format); - strcat(new_format, &old_format[cur_pos]); - - gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format); - gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2); - - g_free(new_format); -} - -static GtkWidget *date_format_create(GtkButton *button, void *data) -{ - static GtkWidget *datefmt_win = NULL; - GtkWidget *vbox1; - GtkWidget *scrolledwindow1; - GtkWidget *datefmt_clist; - GtkWidget *table; - GtkWidget *label1; - GtkWidget *label2; - GtkWidget *label3; - GtkWidget *confirm_area; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *datefmt_entry; - - const struct { - gchar *fmt; - gchar *txt; - } time_format[] = { - { "%a", _("the full abbreviated weekday name") }, - { "%A", _("the full weekday name") }, - { "%b", _("the abbreviated month name") }, - { "%B", _("the full month name") }, - { "%c", _("the preferred date and time for the current locale") }, - { "%C", _("the century number (year/100)") }, - { "%d", _("the day of the month as a decimal number") }, - { "%H", _("the hour as a decimal number using a 24-hour clock") }, - { "%I", _("the hour as a decimal number using a 12-hour clock") }, - { "%j", _("the day of the year as a decimal number") }, - { "%m", _("the month as a decimal number") }, - { "%M", _("the minute as a decimal number") }, - { "%p", _("either AM or PM") }, - { "%S", _("the second as a decimal number") }, - { "%w", _("the day of the week as a decimal number") }, - { "%x", _("the preferred date for the current locale") }, - { "%y", _("the last two digits of a year") }, - { "%Y", _("the year as a decimal number") }, - { "%Z", _("the time zone or name or abbreviation") } - }; - - gchar *titles[2]; - gint i; - const gint TIME_FORMAT_ELEMS = - sizeof time_format / sizeof time_format[0]; - - if (datefmt_win) return datefmt_win; - - datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8); - gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format")); - gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER); - gtk_widget_set_usize(datefmt_win, 440, 280); - - vbox1 = gtk_vbox_new(FALSE, 10); - gtk_widget_show(vbox1); - gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1); - - scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy - (GTK_SCROLLED_WINDOW(scrolledwindow1), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_widget_show(scrolledwindow1); - gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0); - - titles[0] = _("Specifier"); - titles[1] = _("Description"); - datefmt_clist = gtk_clist_new_with_titles(2, titles); - gtk_widget_show(datefmt_clist); - gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist); -/* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */ - - gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist), - GTK_SELECTION_BROWSE); - - for (i = 0; i < TIME_FORMAT_ELEMS; i++) { - gchar *text[2]; - /* phoney casting necessary because of gtk... */ - text[0] = (gchar *)time_format[i].fmt; - text[1] = (gchar *)time_format[i].txt; - gtk_clist_append(GTK_CLIST(datefmt_clist), text); - } - - table = gtk_table_new(2, 2, FALSE); - gtk_widget_show(table); - gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0); - gtk_table_set_row_spacings(GTK_TABLE(table), 4); - gtk_table_set_col_spacings(GTK_TABLE(table), 8); - - label1 = gtk_label_new(_("Date format")); - gtk_widget_show(label1); - gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1, - GTK_FILL, 0, 0, 0); - gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5); - - datefmt_entry = gtk_entry_new_with_max_length(256); - gtk_widget_show(datefmt_entry); - gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1, - (GTK_EXPAND | GTK_FILL), 0, 0, 0); - - /* we need the "sample" entry box; add it as data so callbacks can - * get the entry box */ - gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample", - datefmt_entry); - - label2 = gtk_label_new(_("Example")); - gtk_widget_show(label2); - gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2, - GTK_FILL, 0, 0, 0); - gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5); - - label3 = gtk_label_new(""); - gtk_widget_show(label3); - gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2, - (GTK_EXPAND | GTK_FILL), 0, 0, 0); - gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5); - - gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"), - &cancel_btn, _("Cancel"), NULL, NULL); - gtk_widget_grab_default(ok_btn); - gtk_widget_show(confirm_area); - - gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0); - - /* set the current format */ - gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format); - date_format_entry_on_change(GTK_EDITABLE(datefmt_entry), - GTK_LABEL(label3)); - - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(date_format_ok_btn_clicked), - &datefmt_win); - gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked), - &datefmt_win); - gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event", - GTK_SIGNAL_FUNC(date_format_key_pressed), - &datefmt_win); - gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event", - GTK_SIGNAL_FUNC(date_format_on_delete), - &datefmt_win); - gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed", - GTK_SIGNAL_FUNC(date_format_entry_on_change), - label3); - - gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row", - GTK_SIGNAL_FUNC(date_format_select_row), - datefmt_win); - - gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER); - gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE); - - gtk_widget_show(datefmt_win); - manage_window_set_transient(GTK_WINDOW(datefmt_win)); - - gtk_widget_grab_focus(ok_btn); - - return datefmt_win; -} - -void prefs_quote_colors_dialog(void) -{ - if (!quote_color_win) - prefs_quote_colors_dialog_create(); - gtk_widget_show(quote_color_win); - manage_window_set_transient(GTK_WINDOW(quote_color_win)); - - gtk_main(); - gtk_widget_hide(quote_color_win); - - textview_update_message_colors(); - main_window_reflect_prefs_all(); -} - -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 *tgt_folder_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, FALSE, 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), 5); - - - color_buttons.quote_level1_btn = gtk_button_new(); - gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn, - 0, 1, 0, 1, 0, 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, 0, 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, 0, 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, 0, 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); - - color_buttons.tgt_folder_btn = gtk_button_new_with_label (""); - gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn, - 0, 1, 4, 5, 0, 0, 0, 0); - gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30); - gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_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); - - tgt_folder_label = gtk_label_new (_("Target folder")); - gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5, - (GTK_EXPAND | GTK_FILL), 0, 0, 0); - gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment (GTK_MISC (tgt_folder_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(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(window), "delete_event", - GTK_SIGNAL_FUNC(gtk_main_quit), NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed), - 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(color_buttons.tgt_folder_btn), "clicked", - GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD"); - gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled", - GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL); - gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(gtk_main_quit), 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); - set_button_bg_color(color_buttons.tgt_folder_btn, - prefs_common.tgt_folder_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 prefs_quote_colors_key_pressed(GtkWidget *widget, - GdkEventKey *event, gpointer data) -{ - if (event && event->keyval == GDK_Escape) - gtk_main_quit(); -} - -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 if(g_strcasecmp(type, "TGTFLD") == 0) { - title = _("Pick color for target folder"); - rgbvalue = prefs_common.tgt_folder_col; - } else { /* Should never be called */ - g_warning("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); - manage_window_set_transient(GTK_WINDOW(color_dialog)); - - gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button), - "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data); - gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button), - "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data); - gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event", - GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed), - 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 = GTK_COLOR_SELECTION_DIALOG(color_dialog); - gtk_color_selection_set_color - (GTK_COLOR_SELECTION(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 if (g_strcasecmp(type, "TGTFLD") == 0) { - prefs_common.tgt_folder_col = rgbvalue; - set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue); - folderview_set_target_folder_color(prefs_common.tgt_folder_col); - } else - fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type ); - - gtk_widget_destroy(color_dialog); -} - -static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data) -{ - gtk_widget_destroy(color_dialog); -} - -static void quote_colors_set_dialog_key_pressed(GtkWidget *widget, - GdkEventKey *event, - gpointer data) -{ - gtk_widget_destroy(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 - ("SYMBOL\n\n" - "%d\n" /* date */ - "%f\n" /* from */ - "%N\n" /* full name */ - "%F\n" /* first name */ - "%I\n" /* sender's initial */ - "%s\n" /* subject line */ - "%t\n" /* to */ - "%c\n" /* cc */ - "%n\n" /* newsgroups */ - "%i\n" /* message id */ - "%r\n" /* references */ - "\n" - "%x\n" - "?x(expr)\n" - "\n" - "%M\n" - "%Q\n" - "%m\n" - "%q\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 - (_("DESCRIPTION\n\n" - "Date\n" - "From\n" - "Full Name of Sender\n" - "First Name of Sender\n" - "Initial of Sender\n" - "Subject\n" - "To\n" - "Cc\n" - "Newsgroups\n" - "Message-ID\n" - "References\n" - "\n" - "Display the information\n" - "If the information x is set, displays expr\n" - "\n" - "Message body\n" - "Quoted message body\n" - "Message body without signature\n" - "Quoted message body without signature\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_SCORE, show_score); - 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_SCORE, show_score); - 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_SCORE, _("Score")); - 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, GtkEntry *entry) -{ - gchar *font_name; - - g_return_if_fail(entry != NULL); - - 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_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)); - } - - if(font_sel_conn_id) { - gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id); - } - font_sel_conn_id = gtk_signal_connect - (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), - "clicked", - GTK_SIGNAL_FUNC(prefs_font_selection_ok), - entry); - printf("%i\n", font_sel_conn_id); - - font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); - gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name); - g_free(font_name); - 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, GtkEntry *entry) -{ - gchar *fontname; - - fontname = gtk_font_selection_dialog_get_font_name - (GTK_FONT_SELECTION_DIALOG(font_sel_win)); - - if (fontname) { - gtk_entry_set_text(entry, 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_recv_dialog_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)); - *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); -} - -static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam) -{ - RecvDialogMode mode = *((RecvDialogMode *)pparam->data); - GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget); - GtkWidget *menu; - GtkWidget *menuitem; - - switch (mode) { - case RECV_DIALOG_ALWAYS: - gtk_option_menu_set_history(optmenu, 0); - break; - case RECV_DIALOG_ACTIVE: - gtk_option_menu_set_history(optmenu, 1); - break; - case RECV_DIALOG_NEVER: - gtk_option_menu_set_history(optmenu, 2); - 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 gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - prefs_common_cancel(); - return TRUE; -} - -static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) -{ - if (event && event->keyval == GDK_Escape) - prefs_common_cancel(); -} - -static void prefs_common_ok(void) -{ - prefs_common_apply(); - gtk_widget_hide(dialog.window); - if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win)) - gtk_widget_hide(quote_desc_win); - - inc_autocheck_timer_set(); -} - -static void prefs_common_apply(void) -{ - prefs_set_data_from_dialog(param); - main_window_reflect_prefs_all(); - prefs_common_save_config(); -} - -static void prefs_common_cancel(void) -{ - gtk_widget_hide(dialog.window); - inc_autocheck_timer_set(); -} - - -static struct _ComposePrefs -{ - GtkWidget *window; - - GtkWidget *close_btn; -} composeprefs; - -static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event); -static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event); -static void compose_prefs_close(GtkWidget *widget); -static void compose_prefs_fmt_create(void); - -static void compose_prefs_fmt_open(void) -{ - if (composeprefs.window == NULL) - compose_prefs_fmt_create(); - gtk_widget_show(composeprefs.window); -} - - -static void compose_prefs_fmt_create(void) -{ - GtkWidget *window; - GtkWidget *close_btn; - - GtkWidget *frame_quote; - GtkWidget *vbox_quote; - GtkWidget *hbox1; - GtkWidget *checkbtn_quote; - GtkWidget *label_quotemark; - GtkWidget *entry_quotemark; - GtkWidget *scrolledwin_quotefmt; - GtkWidget *text_quotefmt; - GtkWidget *label_quotefmt; - GtkWidget *btn_quotedesc; - - GtkWidget *label_fw_quotemark; - GtkWidget *entry_fw_quotemark; - GtkWidget *label_fw_quotefmt; - GtkWidget *text_fw_quotefmt; - - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_container_set_border_width(GTK_CONTAINER(window), 8); - gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences")); - 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(compose_prefs_delete_event), - NULL); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(compose_prefs_key_pressed), - NULL); - - vbox_quote = gtk_vbox_new(FALSE, 8); - gtk_container_add(GTK_CONTAINER(window), vbox_quote); - - 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); - - hbox1 = gtk_hbox_new (FALSE, 0); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0); - - label_quotefmt = gtk_label_new (_("Quotation format:")); - gtk_widget_show (label_quotefmt); - gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0); - - 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, 400, 60); - - hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0); - - label_fw_quotemark = gtk_label_new (_("Forward quotation mark")); - gtk_widget_show (label_fw_quotemark); - gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0); - - entry_fw_quotemark = gtk_entry_new (); - gtk_widget_show (entry_fw_quotemark); - gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0); - gtk_widget_set_usize (entry_fw_quotemark, 64, -1); - - hbox1 = gtk_hbox_new (FALSE, 0); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0); - - label_fw_quotefmt = gtk_label_new (_("Forward format:")); - gtk_widget_show (label_fw_quotefmt); - gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0); - - 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_fw_quotefmt = gtk_text_new (NULL, NULL); - gtk_widget_show (text_fw_quotefmt); - gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt); - gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE); - gtk_widget_set_usize(text_fw_quotefmt, 400, 60); - - hbox1 = gtk_hbox_new (FALSE, 0); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0); - - btn_quotedesc = - gtk_button_new_with_label (_(" Description of symbols ")); - gtk_widget_show (btn_quotedesc); - gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, - FALSE, FALSE, 0); - - gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked", - GTK_SIGNAL_FUNC(prefs_quote_description), NULL); - - - gtkut_button_set_create(&hbox1, &close_btn, _("Close"), - NULL, NULL, NULL, NULL); - gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0); - gtk_widget_grab_default(close_btn); - - gtk_signal_connect(GTK_OBJECT(close_btn), "clicked", - GTK_SIGNAL_FUNC(compose_prefs_close), NULL); - - gtk_widget_show_all(vbox_quote); - - composeprefs.window = window; - composeprefs.close_btn = close_btn; - - compose.checkbtn_quote = checkbtn_quote; - compose.entry_quotemark = entry_quotemark; - compose.text_quotefmt = text_quotefmt; - compose.entry_fw_quotemark = entry_fw_quotemark; - compose.text_fw_quotefmt = text_fw_quotefmt; -} - -static void compose_prefs_close(GtkWidget *widget) -{ - gtk_widget_hide(composeprefs.window); -} - -static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event) -{ - gtk_widget_hide(composeprefs.window); - - return TRUE; -} - -static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event) -{ - if (event && event->keyval == GDK_Escape) { - gtk_widget_hide(composeprefs.window); - } -} - -/* static void prefs_recvdialog_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)); - *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT - (gtk_object_get_user_data(GTK_OBJECT(menuitem))); -} */ - -/* static void prefs_recvdialog_set_optmenu(PrefParam *pparam) -{ - RecvDialogShow dialog_show; - GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget); - GtkWidget *menu; - GtkWidget *menuitem; - - dialog_show = *((RecvDialogShow *)pparam->data); - - switch (dialog_show) { - case RECVDIALOG_ALWAYS: - gtk_option_menu_set_history(optmenu, 0); - break; - case RECVDIALOG_WINDOW_ACTIVE: - gtk_option_menu_set_history(optmenu, 1); - break; - case RECVDIALOG_NEVER: - gtk_option_menu_set_history(optmenu, 2); - 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)); -} */ diff --git a/src/prefs_common.h b/src/prefs_common.h deleted file mode 100644 index 85d1e374c..000000000 --- a/src/prefs_common.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * 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_COMMON_H__ -#define __PREFS_COMMON_H__ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <glib.h> - -#include "mainwindow.h" -#include "codeconv.h" -#include "textview.h" - -typedef struct _PrefsCommon PrefsCommon; - -typedef enum { - RECV_DIALOG_ALWAYS, - RECV_DIALOG_ACTIVE, - RECV_DIALOG_NEVER -} RecvDialogMode; - -struct _PrefsCommon -{ - /* Receive */ - gboolean use_extinc; - gchar *extinc_path; - gboolean inc_local; - gboolean filter_on_inc; - gchar *spool_path; - gboolean scan_all_after_inc; - gboolean autochk_newmail; - gint autochk_itv; - gboolean chk_on_startup; - gboolean noerrorpanel; - 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 reply_account_autosel; - gboolean show_ruler; - gchar *fw_quotemark; - gchar *fw_quotefmt; - gboolean forward_as_attachment; - gboolean smart_wrapping; - gboolean enable_ispell; - gchar *ispell_path; - gchar *dictionary_path; - - /* Display */ - gchar *widgetfont; - gchar *textfont; - gchar *normalfont; - gchar *boldfont; - gchar *smallfont; - gboolean display_folder_unread; - ToolbarStyle toolbar_style; - gboolean show_statusbar; - gboolean trans_hdr; - gboolean enable_thread; - gboolean enable_hscrollbar; - gboolean expand_thread; - gboolean bold_unread; - gboolean swap_from; - gboolean use_addr_book; - gchar *date_format; - - /* Filtering */ - GSList *fltlist; - - gint kill_score; - gint important_score; - - gboolean show_mark; - gboolean show_unread; - gboolean show_mime; - gboolean show_number; - gboolean show_score; - 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 summary_col_score; - - 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; - gint tgt_folder_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; - - gboolean show_other_header; - GSList *disphdr_list; - - /* MIME viewer */ - gchar *mime_image_viewer; - gchar *mime_audio_player; - - /* Privacy */ - gboolean default_encrypt; - gboolean default_sign; - gboolean auto_check_signatures; - gboolean gpg_signature_popup; - gboolean passphrase_grab; - gchar *default_signkey; - gboolean gpg_warning; - - /* Interface */ - gboolean sep_folder; - gboolean sep_msg; - gboolean emulate_emacs; - gboolean open_unread_on_enter; - gboolean open_inbox_on_inc; - gboolean immediate_exec; - RecvDialogMode recv_dialog_mode; - gboolean add_address_by_click; - - gboolean confirm_on_exit; - gboolean clean_on_exit; - gboolean ask_on_clean; - gboolean warn_queued_on_exit; - gboolean return_receipt; - - /* 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_customheader.c b/src/prefs_customheader.c deleted file mode 100644 index dcd362a0d..000000000 --- a/src/prefs_customheader.c +++ /dev/null @@ -1,630 +0,0 @@ -/* - * 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_customheader.h" -#include "prefs_common.h" -#include "prefs_account.h" -#include "mainwindow.h" -#include "foldersel.h" -#include "manage_window.h" -#include "customheader.h" -#include "folder.h" -#include "utils.h" -#include "gtkutils.h" -#include "alertpanel.h" - -static struct CustomHdr { - GtkWidget *window; - - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - - GtkWidget *hdr_combo; - GtkWidget *hdr_entry; - GtkWidget *val_entry; - GtkWidget *customhdr_clist; -} customhdr; - -#define VSPACING 12 -#define VSPACING_NARROW 4 -#define DEFAULT_ENTRY_WIDTH 80 -#define PREFSBUFSIZE 1024 - -/* widget creating functions */ -static void prefs_custom_header_create (void); - -static void prefs_custom_header_set_dialog (PrefsAccount *ac); -static void prefs_custom_header_set_list (PrefsAccount *ac); -static gint prefs_custom_header_clist_set_row (PrefsAccount *ac, - gint row); - -/* callback functions */ -static void prefs_custom_header_add_cb (void); -static void prefs_custom_header_delete_cb (void); -static void prefs_custom_header_up (void); -static void prefs_custom_header_down (void); -static void prefs_custom_header_select (GtkCList *clist, - gint row, - gint column, - GdkEvent *event); - -static void prefs_custom_header_row_moved (GtkCList *clist, - gint source_row, - gint dest_row, - gpointer data); - -static void prefs_custom_header_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void prefs_custom_header_ok (void); -static void prefs_custom_header_cancel (void); -static gint prefs_custom_header_deleted (GtkWidget *widget, - GdkEventAny *event, - gpointer data); - -static PrefsAccount *cur_ac = NULL; - -void prefs_custom_header_open(PrefsAccount *ac) -{ - if (!customhdr.window) { - prefs_custom_header_create(); - } - - manage_window_set_transient(GTK_WINDOW(customhdr.window)); - gtk_widget_grab_focus(customhdr.ok_btn); - - prefs_custom_header_set_dialog(ac); - - cur_ac = ac; - - gtk_widget_show(customhdr.window); -} - -static void prefs_custom_header_create(void) -{ - GtkWidget *window; - GtkWidget *vbox; - - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - - GtkWidget *confirm_area; - - GtkWidget *vbox1; - - GtkWidget *table1; - GtkWidget *hdr_label; - GtkWidget *hdr_combo; - GtkWidget *val_label; - GtkWidget *val_entry; - - GtkWidget *reg_hbox; - GtkWidget *btn_hbox; - GtkWidget *arrow; - GtkWidget *add_btn; - GtkWidget *del_btn; - - GtkWidget *ch_hbox; - GtkWidget *ch_scrolledwin; - GtkWidget *customhdr_clist; - - GtkWidget *btn_vbox; - GtkWidget *up_btn; - GtkWidget *down_btn; - - gchar *title[] = {_("Custom headers")}; - - debug_print(_("Creating custom header 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, &ok_btn, _("OK"), - &cancel_btn, _("Cancel"), NULL, NULL); - gtk_widget_show (confirm_area); - gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); - gtk_widget_grab_default (ok_btn); - - gtk_window_set_title (GTK_WINDOW(window), _("Custom header setting")); - 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(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_custom_header_deleted), - NULL); - gtk_signal_connect (GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_custom_header_key_pressed), - NULL); - gtk_signal_connect (GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_custom_header_ok), NULL); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_custom_header_cancel), 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 (2, 2, 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); - - hdr_label = gtk_label_new (_("Header")); - gtk_widget_show (hdr_label); - gtk_table_attach (GTK_TABLE (table1), hdr_label, 0, 1, 0, 1, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - 0, 0, 0); - gtk_misc_set_alignment (GTK_MISC (hdr_label), 0, 0.5); - - hdr_combo = gtk_combo_new (); - gtk_widget_show (hdr_combo); - gtk_table_attach (GTK_TABLE (table1), hdr_combo, 0, 1, 1, 2, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - 0, 0, 0); - gtk_widget_set_usize (hdr_combo, 150, -1); - gtkut_combo_set_items (GTK_COMBO (hdr_combo), - "User-Agent", "X-Face", "X-Operating-System", - NULL); - - val_label = gtk_label_new (_("Value")); - gtk_widget_show (val_label); - gtk_table_attach (GTK_TABLE (table1), val_label, 1, 2, 0, 1, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - 0, 0, 0); - gtk_misc_set_alignment (GTK_MISC (val_label), 0, 0.5); - - val_entry = gtk_entry_new (); - gtk_widget_show (val_entry); - gtk_table_attach (GTK_TABLE (table1), val_entry, 1, 2, 1, 2, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - 0, 0, 0); - gtk_widget_set_usize (val_entry, 200, -1); - - /* add / 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); - - add_btn = gtk_button_new_with_label (_("Add")); - gtk_widget_show (add_btn); - gtk_box_pack_start (GTK_BOX (btn_hbox), add_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (add_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_custom_header_add_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_custom_header_delete_cb), - NULL); - - - ch_hbox = gtk_hbox_new (FALSE, 8); - gtk_widget_show (ch_hbox); - gtk_box_pack_start (GTK_BOX (vbox1), ch_hbox, TRUE, TRUE, 0); - - ch_scrolledwin = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_set_usize (ch_scrolledwin, -1, 200); - gtk_widget_show (ch_scrolledwin); - gtk_box_pack_start (GTK_BOX (ch_hbox), ch_scrolledwin, TRUE, TRUE, 0); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ch_scrolledwin), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - - customhdr_clist = gtk_clist_new_with_titles(1, title); - gtk_widget_show (customhdr_clist); - gtk_container_add (GTK_CONTAINER (ch_scrolledwin), customhdr_clist); - gtk_clist_set_column_width (GTK_CLIST (customhdr_clist), 0, 80); - gtk_clist_set_selection_mode (GTK_CLIST (customhdr_clist), - GTK_SELECTION_BROWSE); - gtk_clist_set_reorderable (GTK_CLIST (customhdr_clist), TRUE); - gtk_clist_set_use_drag_icons (GTK_CLIST (customhdr_clist), FALSE); - GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (customhdr_clist)->column[0].button, - GTK_CAN_FOCUS); - gtk_signal_connect (GTK_OBJECT (customhdr_clist), "select_row", - GTK_SIGNAL_FUNC (prefs_custom_header_select), - NULL); - gtk_signal_connect_after - (GTK_OBJECT (customhdr_clist), "row_move", - GTK_SIGNAL_FUNC (prefs_custom_header_row_moved), NULL); - - btn_vbox = gtk_vbox_new (FALSE, 8); - gtk_widget_show (btn_vbox); - gtk_box_pack_start (GTK_BOX (ch_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_custom_header_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_custom_header_down), NULL); - - gtk_widget_show_all(window); - - customhdr.window = window; - customhdr.ok_btn = ok_btn; - customhdr.cancel_btn = cancel_btn; - - customhdr.hdr_combo = hdr_combo; - customhdr.hdr_entry = GTK_COMBO (hdr_combo)->entry; - customhdr.val_entry = val_entry; - - customhdr.customhdr_clist = customhdr_clist; -} - -void prefs_custom_header_read_config(PrefsAccount *ac) -{ - gchar *rcpath; - FILE *fp; - gchar buf[PREFSBUFSIZE]; - CustomHeader *ch; - - debug_print(_("Reading custom header configuration...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, - CUSTOM_HEADER_RC, NULL); - if ((fp = fopen(rcpath, "r")) == NULL) { - if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); - g_free(rcpath); - ac->customhdr_list = NULL; - return; - } - g_free(rcpath); - - /* remove all previous headers list */ - while (ac->customhdr_list != NULL) { - ch = (CustomHeader *)ac->customhdr_list->data; - custom_header_free(ch); - ac->customhdr_list = g_slist_remove(ac->customhdr_list, ch); - } - - while (fgets(buf, sizeof(buf), fp) != NULL) { - g_strchomp(buf); - ch = custom_header_read_str(buf); - if (ch) { - if (ch->account_id == ac->account_id) { - ac->customhdr_list = - g_slist_append(ac->customhdr_list, ch); - } else - custom_header_free(ch); - } - } - - fclose(fp); -} - -void prefs_custom_header_write_config(PrefsAccount *ac) -{ - gchar *rcpath; - PrefFile *pfile; - GSList *cur; - gchar buf[PREFSBUFSIZE]; - FILE * fp; - CustomHeader *ch; - - GSList *all_hdrs = NULL; - - debug_print(_("Writing custom header configuration...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, - CUSTOM_HEADER_RC, NULL); - - if ((fp = fopen(rcpath, "r")) == NULL) { - if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); - } else { - all_hdrs = NULL; - - while (fgets(buf, sizeof(buf), fp) != NULL) { - g_strchomp(buf); - ch = custom_header_read_str(buf); - if (ch) { - if (ch->account_id != ac->account_id) - all_hdrs = - g_slist_append(all_hdrs, ch); - else - custom_header_free(ch); - } - } - - fclose(fp); - } - - if ((pfile = prefs_write_open(rcpath)) == NULL) { - g_warning(_("failed to write configuration to file\n")); - g_free(rcpath); - return; - } - - for (cur = all_hdrs; cur != NULL; cur = cur->next) { - CustomHeader *hdr = (CustomHeader *)cur->data; - gchar *chstr; - - chstr = custom_header_get_str(hdr); - if (fputs(chstr, pfile->fp) == EOF || - fputc('\n', pfile->fp) == EOF) { - FILE_OP_ERROR(rcpath, "fputs || fputc"); - prefs_write_close_revert(pfile); - g_free(rcpath); - g_free(chstr); - return; - } - g_free(chstr); - } - - for (cur = ac->customhdr_list; cur != NULL; cur = cur->next) { - CustomHeader *hdr = (CustomHeader *)cur->data; - gchar *chstr; - - chstr = custom_header_get_str(hdr); - if (fputs(chstr, pfile->fp) == EOF || - fputc('\n', pfile->fp) == EOF) { - FILE_OP_ERROR(rcpath, "fputs || fputc"); - prefs_write_close_revert(pfile); - g_free(rcpath); - g_free(chstr); - return; - } - g_free(chstr); - } - - g_free(rcpath); - - while (all_hdrs != NULL) { - ch = (CustomHeader *)all_hdrs->data; - custom_header_free(ch); - all_hdrs = g_slist_remove(all_hdrs, ch); - } - - if (prefs_write_close(pfile) < 0) { - g_warning(_("failed to write configuration to file\n")); - return; - } -} - -static void prefs_custom_header_set_dialog(PrefsAccount *ac) -{ - GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist); - GSList *cur; - gchar *ch_str[1]; - gint row; - - gtk_clist_freeze(clist); - gtk_clist_clear(clist); - - for (cur = ac->customhdr_list; cur != NULL; cur = cur->next) { - CustomHeader *ch = (CustomHeader *)cur->data; - - ch_str[0] = g_strdup_printf("%s: %s", ch->name, - ch->value ? ch->value : ""); - row = gtk_clist_append(clist, ch_str); - gtk_clist_set_row_data(clist, row, ch); - - g_free(ch_str[0]); - } - - gtk_clist_thaw(clist); -} - -static void prefs_custom_header_set_list(PrefsAccount *ac) -{ - gint row = 0; - CustomHeader *ch; - - g_slist_free(ac->customhdr_list); - ac->customhdr_list = NULL; - - while ((ch = gtk_clist_get_row_data - (GTK_CLIST(customhdr.customhdr_clist), row)) != NULL) { - ac->customhdr_list = g_slist_append(ac->customhdr_list, ch); - row++; - } -} - -static gint prefs_custom_header_clist_set_row(PrefsAccount *ac, gint row) -{ - GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist); - CustomHeader *ch; - gchar *entry_text; - gchar *ch_str[1]; - - entry_text = gtk_entry_get_text(GTK_ENTRY(customhdr.hdr_entry)); - if (entry_text[0] == '\0') { - alertpanel_error(_("Header name is not set.")); - return -1; - } - - ch = g_new0(CustomHeader, 1); - - ch->account_id = ac->account_id; - - ch->name = g_strdup(entry_text); - unfold_line(ch->name); - - entry_text = gtk_entry_get_text(GTK_ENTRY(customhdr.val_entry)); - if (entry_text[0] != '\0') { - ch->value = g_strdup(entry_text); - unfold_line(ch->value); - } - - ch_str[0] = g_strdup_printf("%s: %s", ch->name, - ch->value ? ch->value : ""); - - if (row < 0) - row = gtk_clist_append(clist, ch_str); - else { - CustomHeader *tmp_ch; - - gtk_clist_set_text(clist, row, 0, ch_str[0]); - tmp_ch = gtk_clist_get_row_data(clist, row); - if (tmp_ch) - custom_header_free(tmp_ch); - } - - gtk_clist_set_row_data(clist, row, ch); - - g_free(ch_str[0]); - - prefs_custom_header_set_list(cur_ac); - - return row; -} - -static void prefs_custom_header_add_cb(void) -{ - prefs_custom_header_clist_set_row(cur_ac, -1); -} - -static void prefs_custom_header_delete_cb(void) -{ - GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist); - CustomHeader *ch; - gint row; - - if (!clist->selection) return; - row = GPOINTER_TO_INT(clist->selection->data); - - if (alertpanel(_("Delete header"), - _("Do you really want to delete this header?"), - _("Yes"), _("No"), NULL) != G_ALERTDEFAULT) - return; - - ch = gtk_clist_get_row_data(clist, row); - custom_header_free(ch); - gtk_clist_remove(clist, row); - cur_ac->customhdr_list = g_slist_remove(cur_ac->customhdr_list, ch); -} - -static void prefs_custom_header_up(void) -{ - GtkCList *clist = GTK_CLIST(customhdr.customhdr_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); -} - -static void prefs_custom_header_down(void) -{ - GtkCList *clist = GTK_CLIST(customhdr.customhdr_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); -} - -#define ENTRY_SET_TEXT(entry, str) \ - gtk_entry_set_text(GTK_ENTRY(entry), str ? str : "") - -static void prefs_custom_header_select(GtkCList *clist, gint row, gint column, - GdkEvent *event) -{ - CustomHeader *ch; - CustomHeader default_ch = { 0, "", NULL }; - - ch = gtk_clist_get_row_data(clist, row); - if (!ch) ch = &default_ch; - - ENTRY_SET_TEXT(customhdr.hdr_entry, ch->name); - ENTRY_SET_TEXT(customhdr.val_entry, ch->value); -} - -#undef ENTRY_SET_TEXT - -static void prefs_custom_header_row_moved(GtkCList *clist, gint source_row, - gint dest_row, gpointer data) -{ - prefs_custom_header_set_list(cur_ac); -} - -static void prefs_custom_header_key_pressed(GtkWidget *widget, - GdkEventKey *event, - gpointer data) -{ - if (event && event->keyval == GDK_Escape) - prefs_custom_header_cancel(); -} - -static void prefs_custom_header_ok(void) -{ - prefs_custom_header_write_config(cur_ac); - gtk_widget_hide(customhdr.window); -} - -static void prefs_custom_header_cancel(void) -{ - prefs_custom_header_read_config(cur_ac); - gtk_widget_hide(customhdr.window); -} - -static gint prefs_custom_header_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - prefs_custom_header_cancel(); - return TRUE; -} diff --git a/src/prefs_customheader.h b/src/prefs_customheader.h deleted file mode 100644 index c72e29d26..000000000 --- a/src/prefs_customheader.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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_CUSTOMHEADER_H__ -#define __PREFS_CUSTOMHEADER_H__ - -#include "prefs_account.h" - -void prefs_custom_header_read_config (PrefsAccount *ac); -void prefs_custom_header_write_config (PrefsAccount *ac); -void prefs_custom_header_open (PrefsAccount *ac); - -#endif /* __PREFS_CUSTOMHEADER_H__ */ diff --git a/src/prefs_display_header.c b/src/prefs_display_header.c deleted file mode 100644 index 99beec23e..000000000 --- a/src/prefs_display_header.c +++ /dev/null @@ -1,655 +0,0 @@ -/* - * 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 "prefs.h" -#include "prefs_display_header.h" -#include "prefs_common.h" -#include "manage_window.h" -#include "alertpanel.h" -#include "displayheader.h" -#include "utils.h" -#include "gtkutils.h" - -static struct DisplayHeader { - GtkWidget *window; - - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - - GtkWidget *hdr_combo; - GtkWidget *hdr_entry; - GtkWidget *key_check; - GtkWidget *headers_clist; - GtkWidget *hidden_headers_clist; - - GtkWidget *other_headers; -} dispheader; - -/* - 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_display_header_create (void); - -static void prefs_display_header_set_dialog (void); -static void prefs_display_header_set_list (void); -static gint prefs_display_header_clist_set_row (gboolean hidden); - -/* callback functions */ -static void prefs_display_header_register_cb (GtkButton *btn, - gpointer hidden_data); -static void prefs_display_header_delete_cb (GtkButton *btn, - gpointer clist_data); -static void prefs_display_header_up (void); -static void prefs_display_header_down (void); - -static void prefs_display_header_row_moved (GtkCList *clist, - gint source_row, - gint dest_row, - gpointer data); - -static void prefs_display_header_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void prefs_display_header_ok (void); -static void prefs_display_header_cancel (void); -static gint prefs_display_header_deleted (GtkWidget *widget, - GdkEventAny *event, - gpointer data); - -static gchar *defaults[] = -{ - "From", - "To", - "Cc", - "Reply-To", - "Newsgroups", - "Followup-To", - "Subject", - "Date", - "Sender", - "Organization", - "X-Mailer", - "X-Newsreader", - "User-Agent", - "-Received", - "-Message-Id", - "-In-Reply-To", - "-References", - "-Mime-Version", - "-Content-Type", - "-Content-Transfer-Encoding", - "-X-UIDL", - "-Precedence", - "-Status", - "-Priority", - "-X-Face" -}; - -static void prefs_display_header_set_default(void) -{ - gint i; - DisplayHeaderProp *dp; - - for(i = 0; i < sizeof(defaults) / sizeof(defaults[0]); i++) { - dp = display_header_prop_read_str(defaults[i]); - prefs_common.disphdr_list = - g_slist_append(prefs_common.disphdr_list, dp); - } -} - -void prefs_display_header_open(void) -{ - if (prefs_rc_is_readonly(DISPLAY_HEADER_RC)) - return; - - if (!dispheader.window) { - prefs_display_header_create(); - } - - manage_window_set_transient(GTK_WINDOW(dispheader.window)); - gtk_widget_grab_focus(dispheader.ok_btn); - - prefs_display_header_set_dialog(); - - gtk_widget_show(dispheader.window); -} - -static void prefs_display_header_create(void) -{ - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *btn_hbox; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *confirm_area; - - GtkWidget *vbox1; - - GtkWidget *hbox1; - GtkWidget *hdr_label; - GtkWidget *hdr_combo; - - GtkWidget *btn_vbox; - GtkWidget *reg_btn; - GtkWidget *del_btn; - GtkWidget *up_btn; - GtkWidget *down_btn; - - GtkWidget *clist_hbox; - GtkWidget *clist_hbox1; - GtkWidget *clist_hbox2; - GtkWidget *clist_scrolledwin; - GtkWidget *headers_clist; - GtkWidget *hidden_headers_clist; - - GtkWidget *checkbtn_other_headers; - - gchar *title[1]; - - debug_print(_("Creating display header 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); - - btn_hbox = gtk_hbox_new (FALSE, 8); - gtk_widget_show (btn_hbox); - gtk_box_pack_end (GTK_BOX (vbox), btn_hbox, FALSE, FALSE, 0); - - gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"), - &cancel_btn, _("Cancel"), NULL, NULL); - gtk_widget_show (confirm_area); - gtk_box_pack_end (GTK_BOX(btn_hbox), confirm_area, FALSE, FALSE, 0); - gtk_widget_grab_default (ok_btn); - - gtk_window_set_title (GTK_WINDOW(window), - _("Display header setting")); - 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(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_display_header_deleted), - NULL); - gtk_signal_connect (GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_display_header_key_pressed), - NULL); - gtk_signal_connect (GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_display_header_ok), - NULL); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_display_header_cancel), - 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); - - hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0); - - hdr_label = gtk_label_new (_("Header name")); - gtk_widget_show (hdr_label); - gtk_box_pack_start (GTK_BOX (hbox1), hdr_label, FALSE, FALSE, 0); - - hdr_combo = gtk_combo_new (); - gtk_widget_show (hdr_combo); - gtk_box_pack_start (GTK_BOX (hbox1), hdr_combo, TRUE, TRUE, 0); - gtk_widget_set_usize (hdr_combo, 150, -1); - gtkut_combo_set_items (GTK_COMBO (hdr_combo), - "From", "To", "Cc", "Subject", "Date", - "Reply-To", "Sender", "User-Agent", "X-Mailer", - NULL); - - clist_hbox = gtk_hbox_new (FALSE, 10); - gtk_widget_show (clist_hbox); - gtk_box_pack_start (GTK_BOX (vbox1), clist_hbox, TRUE, TRUE, 0); - - /* display headers list */ - - clist_hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (clist_hbox1); - gtk_box_pack_start (GTK_BOX (clist_hbox), clist_hbox1, TRUE, TRUE, 0); - - clist_scrolledwin = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_set_usize (clist_scrolledwin, 200, 210); - gtk_widget_show (clist_scrolledwin); - gtk_box_pack_start (GTK_BOX (clist_hbox1), clist_scrolledwin, - TRUE, TRUE, 0); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clist_scrolledwin), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - - title[0] = _("Displayed Headers"); - headers_clist = gtk_clist_new_with_titles(1, title); - gtk_widget_show (headers_clist); - gtk_container_add (GTK_CONTAINER (clist_scrolledwin), headers_clist); - gtk_clist_set_selection_mode (GTK_CLIST (headers_clist), - GTK_SELECTION_BROWSE); - gtk_clist_set_reorderable (GTK_CLIST (headers_clist), TRUE); - gtk_clist_set_use_drag_icons (GTK_CLIST (headers_clist), FALSE); - GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (headers_clist)->column[0].button, - GTK_CAN_FOCUS); - gtk_signal_connect_after - (GTK_OBJECT (headers_clist), "row_move", - GTK_SIGNAL_FUNC (prefs_display_header_row_moved), NULL); - - btn_vbox = gtk_vbox_new (FALSE, 8); - gtk_widget_show (btn_vbox); - gtk_box_pack_start (GTK_BOX (clist_hbox1), btn_vbox, FALSE, FALSE, 0); - - reg_btn = gtk_button_new_with_label (_("Add")); - gtk_widget_show (reg_btn); - gtk_box_pack_start (GTK_BOX (btn_vbox), reg_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (reg_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_register_cb), - FALSE); - del_btn = gtk_button_new_with_label (_("Delete")); - gtk_widget_show (del_btn); - gtk_box_pack_start (GTK_BOX (btn_vbox), del_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (del_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_delete_cb), - headers_clist); - - 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_display_header_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_display_header_down), NULL); - - /* hidden headers list */ - - clist_hbox2 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (clist_hbox2); - gtk_box_pack_start (GTK_BOX (clist_hbox), clist_hbox2, TRUE, TRUE, 0); - - clist_scrolledwin = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_set_usize (clist_scrolledwin, 200, 210); - gtk_widget_show (clist_scrolledwin); - gtk_box_pack_start (GTK_BOX (clist_hbox2), clist_scrolledwin, - TRUE, TRUE, 0); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clist_scrolledwin), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - - title[0] = _("Hidden headers"); - hidden_headers_clist = gtk_clist_new_with_titles(1, title); - gtk_widget_show (hidden_headers_clist); - gtk_container_add (GTK_CONTAINER (clist_scrolledwin), - hidden_headers_clist); - gtk_clist_set_selection_mode (GTK_CLIST (hidden_headers_clist), - GTK_SELECTION_BROWSE); - gtk_clist_set_auto_sort(GTK_CLIST (hidden_headers_clist), TRUE); - GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (hidden_headers_clist)-> - column[0].button, GTK_CAN_FOCUS); - - btn_vbox = gtk_vbox_new (FALSE, 8); - gtk_widget_show (btn_vbox); - gtk_box_pack_start (GTK_BOX (clist_hbox2), btn_vbox, FALSE, FALSE, 0); - - reg_btn = gtk_button_new_with_label (_("Add")); - gtk_widget_show (reg_btn); - gtk_box_pack_start (GTK_BOX (btn_vbox), reg_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (reg_btn), "clicked", - GTK_SIGNAL_FUNC - (prefs_display_header_register_cb), - (void *) TRUE); - del_btn = gtk_button_new_with_label (_("Delete")); - gtk_widget_show (del_btn); - gtk_box_pack_start (GTK_BOX (btn_vbox), del_btn, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (del_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_display_header_delete_cb), - (void *) hidden_headers_clist); - - PACK_CHECK_BUTTON (btn_hbox, checkbtn_other_headers, - _("Show all unspecified headers")); - SET_TOGGLE_SENSITIVITY (checkbtn_other_headers, clist_hbox2); - - gtk_widget_show_all(window); - - dispheader.window = window; - dispheader.ok_btn = ok_btn; - dispheader.cancel_btn = cancel_btn; - - dispheader.hdr_combo = hdr_combo; - dispheader.hdr_entry = GTK_COMBO (hdr_combo)->entry; - - dispheader.headers_clist = headers_clist; - dispheader.hidden_headers_clist = hidden_headers_clist; - - dispheader.other_headers = checkbtn_other_headers; -} - -void prefs_display_header_read_config(void) -{ - gchar *rcpath; - FILE *fp; - gchar buf[PREFSBUFSIZE]; - DisplayHeaderProp *dp; - - debug_print(_("Reading configuration for displaying headers...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, - DISPLAY_HEADER_RC, NULL); - if ((fp = fopen(rcpath, "r")) == NULL) { - if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); - g_free(rcpath); - prefs_common.disphdr_list = NULL; - prefs_display_header_set_default(); - return; - } - g_free(rcpath); - - /* remove all previous headers list */ - while (prefs_common.disphdr_list != NULL) { - dp = (DisplayHeaderProp *)prefs_common.disphdr_list->data; - display_header_prop_free(dp); - prefs_common.disphdr_list = - g_slist_remove(prefs_common.disphdr_list, dp); - } - - while (fgets(buf, sizeof(buf), fp) != NULL) { - g_strdelimit(buf, "\r\n", '\0'); - dp = display_header_prop_read_str(buf); - if (dp) - prefs_common.disphdr_list = - g_slist_append(prefs_common.disphdr_list, dp); - } - - fclose(fp); -} - -void prefs_display_header_write_config(void) -{ - gchar *rcpath; - PrefFile *pfile; - GSList *cur; - - debug_print(_("Writing configuration for displaying headers...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, - DISPLAY_HEADER_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.disphdr_list; cur != NULL; - cur = cur->next) { - DisplayHeaderProp *dp = (DisplayHeaderProp *)cur->data; - gchar *dpstr; - - dpstr = display_header_prop_get_str(dp); - if (fputs(dpstr, pfile->fp) == EOF || - fputc('\n', pfile->fp) == EOF) { - FILE_OP_ERROR(rcpath, "fputs || fputc"); - prefs_write_close_revert(pfile); - g_free(rcpath); - g_free(dpstr); - return; - } - g_free(dpstr); - } - - g_free(rcpath); - - if (prefs_write_close(pfile) < 0) { - g_warning(_("failed to write configuration to file\n")); - return; - } -} - -static void prefs_display_header_set_dialog(void) -{ - GtkCList *clist = GTK_CLIST(dispheader.headers_clist); - GtkCList *hidden_clist = GTK_CLIST(dispheader.hidden_headers_clist); - GSList *cur; - gchar *dp_str[1]; - gint row; - - gtk_clist_freeze(clist); - gtk_clist_freeze(hidden_clist); - - gtk_clist_clear(clist); - gtk_clist_clear(hidden_clist); - - for (cur = prefs_common.disphdr_list; cur != NULL; - cur = cur->next) { - DisplayHeaderProp *dp = (DisplayHeaderProp *)cur->data; - - dp_str[0] = dp->name; - - if (dp->hidden) { - row = gtk_clist_append(hidden_clist, dp_str); - gtk_clist_set_row_data(hidden_clist, row, dp); - } else { - row = gtk_clist_append(clist, dp_str); - gtk_clist_set_row_data(clist, row, dp); - } - } - - gtk_clist_thaw(hidden_clist); - gtk_clist_thaw(clist); - - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON(dispheader.other_headers), - prefs_common.show_other_header); -} - -static void prefs_display_header_set_list() -{ - gint row = 0; - DisplayHeaderProp *dp; - - g_slist_free(prefs_common.disphdr_list); - prefs_common.disphdr_list = NULL; - - while ((dp = gtk_clist_get_row_data - (GTK_CLIST(dispheader.headers_clist), row)) != NULL) { - prefs_common.disphdr_list = - g_slist_append(prefs_common.disphdr_list, dp); - row++; - } - - row = 0; - while ((dp = gtk_clist_get_row_data - (GTK_CLIST(dispheader.hidden_headers_clist), row)) != NULL) { - prefs_common.disphdr_list = - g_slist_append(prefs_common.disphdr_list, dp); - row++; - } -} - -static gint prefs_display_header_find_header(GtkCList *clist, - const gchar *header) -{ - gint row = 0; - DisplayHeaderProp *dp; - - while ((dp = gtk_clist_get_row_data(clist, row)) != NULL) { - if (g_strcasecmp(dp->name, header) == 0) - return row; - row++; - } - - return -1; -} - -static gint prefs_display_header_clist_set_row(gboolean hidden) -{ - GtkCList *clist; - DisplayHeaderProp *dp; - gchar *entry_text; - gchar *dp_str[1]; - gint row; - - entry_text = gtk_entry_get_text(GTK_ENTRY(dispheader.hdr_entry)); - if (entry_text[0] == '\0') { - alertpanel_error(_("Header name is not set.")); - return -1; - } - - if (hidden) - clist = GTK_CLIST(dispheader.hidden_headers_clist); - else - clist = GTK_CLIST(dispheader.headers_clist); - - if (prefs_display_header_find_header(clist, entry_text) != -1) { - alertpanel_error(_("This header is already in the list.")); - return -1; - } - - dp = g_new0(DisplayHeaderProp, 1); - - dp->name = g_strdup(entry_text); - dp->hidden = hidden; - - dp_str[0] = dp->name; - row = gtk_clist_append(clist, dp_str); - gtk_clist_set_row_data(clist, row, dp); - - prefs_display_header_set_list(); - - return row; -} - -static void prefs_display_header_register_cb(GtkButton *btn, - gpointer hidden_data) -{ - gboolean hidden = (gboolean)hidden_data; - - prefs_display_header_clist_set_row(hidden); -} - -static void prefs_display_header_delete_cb(GtkButton *btn, gpointer clist_data) -{ - GtkCList *clist = GTK_CLIST(clist_data); - DisplayHeaderProp *dp; - gint row; - - if (!clist->selection) return; - row = GPOINTER_TO_INT(clist->selection->data); - - dp = gtk_clist_get_row_data(clist, row); - display_header_prop_free(dp); - gtk_clist_remove(clist, row); - prefs_common.disphdr_list = - g_slist_remove(prefs_common.disphdr_list, dp); -} - -static void prefs_display_header_up(void) -{ - GtkCList *clist = GTK_CLIST(dispheader.headers_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); -} - -static void prefs_display_header_down(void) -{ - GtkCList *clist = GTK_CLIST(dispheader.headers_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); -} - -static void prefs_display_header_row_moved(GtkCList *clist, gint source_row, - gint dest_row, gpointer data) -{ - prefs_display_header_set_list(); -} - -static void prefs_display_header_key_pressed(GtkWidget *widget, - GdkEventKey *event, - gpointer data) -{ - if (event && event->keyval == GDK_Escape) - prefs_display_header_cancel(); -} - -static void prefs_display_header_ok(void) -{ - prefs_common.show_other_header = - gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON(dispheader.other_headers)); - prefs_display_header_write_config(); - gtk_widget_hide(dispheader.window); -} - -static void prefs_display_header_cancel(void) -{ - prefs_display_header_read_config(); - gtk_widget_hide(dispheader.window); -} - -static gint prefs_display_header_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - prefs_display_header_cancel(); - return TRUE; -} diff --git a/src/prefs_display_header.h b/src/prefs_display_header.h deleted file mode 100644 index bf1f4f2d0..000000000 --- a/src/prefs_display_header.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_DISPLAY_HEADER_H__ -#define __PREFS_DISPLAY_HEADER_H__ - -void prefs_display_header_read_config (void); -void prefs_display_header_write_config (void); -void prefs_display_header_open (void); - -#endif /* __PREFS_DISPLAY_HEADER_H__ */ diff --git a/src/prefs_filter.c b/src/prefs_filter.c deleted file mode 100644 index f0ae19827..000000000 --- a/src/prefs_filter.c +++ /dev/null @@ -1,856 +0,0 @@ -/* - * 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 "inc.h" -#include "filter.h" -#include "utils.h" -#include "gtkutils.h" -#include "alertpanel.h" -#include "folder.h" - -static struct Filter { - GtkWidget *window; - - GtkWidget *ok_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 gint prefs_filter_deleted (GtkWidget *widget, - GdkEventAny *event, - gpointer data); -static void prefs_filter_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void prefs_filter_cancel (void); -static void prefs_filter_ok (void); - -void prefs_filter_open(void) -{ - if (prefs_rc_is_readonly(FILTER_RC)) - return; - - inc_autocheck_timer_remove(); - - if (!filter.window) { - prefs_filter_create(); - } - - manage_window_set_transient(GTK_WINDOW(filter.window)); - gtk_widget_grab_focus(filter.ok_btn); - - prefs_filter_set_dialog(); - - gtk_widget_show(filter.window); -} - -static void prefs_filter_create(void) -{ - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *ok_btn; - GtkWidget *cancel_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, &ok_btn, _("OK"), - &cancel_btn, _("Cancel"), NULL, NULL); - gtk_widget_show (confirm_area); - gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); - gtk_widget_grab_default (ok_btn); - - /* - 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(prefs_filter_deleted), 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(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_filter_ok), NULL); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_filter_cancel), 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", "List-Id", - "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", "List-Id", - "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.ok_btn = ok_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, 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); - if(gtk_clist_row_is_visible(clist, row - 1) != GTK_VISIBILITY_FULL) { - gtk_clist_moveto(clist, row - 1, 0, 0, 0); - } - 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); - if(gtk_clist_row_is_visible(clist, row + 1) != GTK_VISIBILITY_FULL) { - gtk_clist_moveto(clist, row + 1, 0, 1, 0); - } - 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 gint prefs_filter_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - prefs_filter_cancel(); - return TRUE; -} - -static void prefs_filter_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) -{ - if (event && event->keyval == GDK_Escape) - prefs_filter_cancel(); -} - -static void prefs_filter_ok(void) -{ - prefs_filter_write_config(); - gtk_widget_hide(filter.window); - inc_autocheck_timer_set(); -} - -static void prefs_filter_cancel(void) -{ - prefs_filter_read_config(); - gtk_widget_hide(filter.window); - inc_autocheck_timer_set(); -} diff --git a/src/prefs_filter.h b/src/prefs_filter.h deleted file mode 100644 index 4ca1d6f10..000000000 --- a/src/prefs_filter.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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/prefs_filtering.c b/src/prefs_filtering.c deleted file mode 100644 index ea9996cab..000000000 --- a/src/prefs_filtering.c +++ /dev/null @@ -1,1176 +0,0 @@ -/* - * 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 <gtk/gtkoptionmenu.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_matcher.h" -#include "prefs_filtering.h" -#include "prefs_common.h" -#include "mainwindow.h" -#include "foldersel.h" -#include "manage_window.h" -#include "inc.h" -#include "utils.h" -#include "gtkutils.h" -#include "alertpanel.h" -#include "folder.h" -#include "filtering.h" -#include "addr_compl.h" -#include "labelcolors.h" - -static struct Filtering { - GtkWidget *window; - - GtkWidget *ok_btn; - GtkWidget *cond_entry; - GtkWidget *action_list; - GtkWidget *action_combo; - GtkWidget *account_list; - GtkWidget *account_combo; - GtkWidget *dest_entry; - GtkWidget *dest_btn; - GtkWidget *dest_label; - GtkWidget *exec_label; - GtkWidget *exec_btn; - - GtkWidget *color_label; - GtkWidget *color_optmenu; - - GtkWidget *cond_clist; - - /* need this to make address completion entry work */ - gint current_action; -} filtering; - -#define VSPACING 12 -#define VSPACING_NARROW 4 -#define DEFAULT_ENTRY_WIDTH 80 -#define PREFSBUFSIZE 1024 - -/* widget creating functions */ -static void prefs_filtering_create (void); - -static void prefs_filtering_set_dialog (void); -static void prefs_filtering_set_list (void); - -/* callback functions */ -/* static void prefs_filtering_select_dest_cb (void); */ -static void prefs_filtering_register_cb (void); -static void prefs_filtering_substitute_cb (void); -static void prefs_filtering_delete_cb (void); -static void prefs_filtering_up (void); -static void prefs_filtering_down (void); -static void prefs_filtering_select (GtkCList *clist, - gint row, - gint column, - GdkEvent *event); - -static gint prefs_filtering_deleted (GtkWidget *widget, - GdkEventAny *event, - gpointer data); -static void prefs_filtering_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void prefs_filtering_cancel (void); -static void prefs_filtering_ok (void); - -static void prefs_filtering_condition_define (void); -static gint prefs_filtering_clist_set_row(gint row, FilteringProp * prop); -static void prefs_filtering_select_dest(void); -static void prefs_filtering_action_select(GtkList *list, - GtkWidget *widget, - gpointer user_data); -static void prefs_filtering_action_selection_changed(GtkList *list, - gpointer user_data); - -static void prefs_filtering_reset_dialog(void); - -enum { - ACTION_MOVE = 0, - ACTION_COPY = 1, - ACTION_DELETE = 2, - ACTION_MARK = 3, - ACTION_UNMARK = 4, - ACTION_MARK_AS_READ = 5, - ACTION_MARK_AS_UNREAD = 6, - ACTION_FORWARD = 7, - ACTION_FORWARD_AS_ATTACHMENT = 8, - ACTION_EXECUTE = 9, - ACTION_COLOR = 10 -}; - -static gint get_sel_from_list(GtkList * list) -{ - gint row = 0; - void * sel; - GList * child; - - if (list->selection == NULL) - return -1; - - sel = list->selection->data; - for(child = list->children ; child != NULL ; - child = g_list_next(child)) { - if (child->data == sel) - return row; - row ++; - } - - return row; -} - -static gint get_account_id_from_list_id(gint list_id) -{ - GList * accounts; - - for (accounts = account_get_list() ; accounts != NULL; - accounts = accounts->next) { - PrefsAccount *ac = (PrefsAccount *)accounts->data; - - if (list_id == 0) - return ac->account_id; - list_id--; - } - return 0; -} - -static gint get_list_id_from_account_id(gint account_id) -{ - GList * accounts; - gint list_id = 0; - - for (accounts = account_get_list() ; accounts != NULL; - accounts = accounts->next) { - PrefsAccount *ac = (PrefsAccount *)accounts->data; - - if (account_id == ac->account_id) - return list_id; - list_id++; - } - return 0; -} - -static gint prefs_filtering_get_matching_from_action(gint action_id) -{ - switch(action_id) { - case ACTION_MOVE: - return MATCHING_ACTION_MOVE; - case ACTION_COPY: - return MATCHING_ACTION_COPY; - case ACTION_DELETE: - return MATCHING_ACTION_DELETE; - case ACTION_MARK: - return MATCHING_ACTION_MARK; - case ACTION_UNMARK: - return MATCHING_ACTION_UNMARK; - case ACTION_MARK_AS_READ: - return MATCHING_ACTION_MARK_AS_READ; - case ACTION_MARK_AS_UNREAD: - return MATCHING_ACTION_MARK_AS_UNREAD; - case ACTION_FORWARD: - return MATCHING_ACTION_FORWARD; - case ACTION_FORWARD_AS_ATTACHMENT: - return MATCHING_ACTION_FORWARD_AS_ATTACHMENT; - case ACTION_EXECUTE: - return MATCHING_EXECUTE; - case ACTION_COLOR: - return MATCHING_ACTION_COLOR; - default: - return -1; - } -} - -static gchar * action_text [] = { - N_("Move"), - N_("Copy"), - N_("Delete"), - N_("Mark"), - N_("Unmark"), - N_("Mark as read"), - N_("Mark as unread"), - N_("Forward"), - N_("Forward as attachment"), - N_("Execute"), - N_("Color") -}; - -void prefs_filtering_open(void) -{ - if (prefs_rc_is_readonly(FILTERING_RC)) - return; - - inc_autocheck_timer_remove(); - - if (!filtering.window) { - prefs_filtering_create(); - } - - manage_window_set_transient(GTK_WINDOW(filtering.window)); - gtk_widget_grab_focus(filtering.ok_btn); - - prefs_filtering_set_dialog(); - - gtk_widget_show(filtering.window); - - start_address_completion(); -} - -/* prefs_filtering_close() - just to have one common exit point */ -static void prefs_filtering_close(void) -{ - end_address_completion(); - - gtk_widget_hide(filtering.window); -} - -static void prefs_filtering_create(void) -{ - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *confirm_area; - - GtkWidget *vbox1; - GtkWidget *hbox1; - GtkWidget *reg_hbox; - GtkWidget *arrow; - GtkWidget *btn_hbox; - - GtkWidget *cond_label; - GtkWidget *cond_entry; - GtkWidget *cond_btn; - GtkWidget *action_label; - GtkWidget *action_list; - GtkWidget *action_combo; - GtkWidget *account_label; - GtkWidget *account_list; - GtkWidget *account_combo; - GtkWidget *dest_label; - GtkWidget *exec_label; - GtkWidget *dest_entry; - GtkWidget *dest_btn; - GtkWidget *exec_btn; - GtkWidget *color_label; - GtkWidget *color_optmenu; - - 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; - - GtkWidget *dummy; - - GList *combo_items; - gint i; - - GList *accounts; - GList * cur; - - gchar *title[] = {_("Registered rules")}; - - debug_print(_("Creating filtering 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, &ok_btn, _("OK"), - &cancel_btn, _("Cancel"), NULL, NULL); - gtk_widget_show (confirm_area); - gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); - gtk_widget_grab_default (ok_btn); - - gtk_window_set_title (GTK_WINDOW(window), - _("Filtering setting")); - gtk_signal_connect (GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_filtering_deleted), NULL); - gtk_signal_connect (GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_filtering_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(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_filtering_ok), NULL); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_filtering_cancel), 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); - - cond_label = gtk_label_new (_("Condition")); - gtk_widget_show (cond_label); - gtk_misc_set_alignment (GTK_MISC (cond_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (vbox1), cond_label, FALSE, FALSE, 0); - - hbox1 = gtk_hbox_new (FALSE, VSPACING); - gtk_widget_show (vbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2); - - cond_entry = gtk_entry_new (); - gtk_widget_show (cond_entry); -// gtk_widget_set_usize (cond_entry, 200, -1); - gtk_box_pack_start (GTK_BOX (hbox1), cond_entry, TRUE, TRUE, 0); - - cond_btn = gtk_button_new_with_label (_("Define ...")); - gtk_widget_show (cond_btn); - gtk_box_pack_start (GTK_BOX (hbox1), cond_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (cond_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_filtering_condition_define), - NULL); - - hbox1 = gtk_hbox_new (FALSE, VSPACING); - gtk_widget_show (vbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2); - - action_label = gtk_label_new (_("Action")); - gtk_widget_show (action_label); - gtk_misc_set_alignment (GTK_MISC (action_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox1), action_label, FALSE, FALSE, 0); - - action_combo = gtk_combo_new (); - gtk_widget_show (action_combo); -// gtk_widget_set_usize (action_combo, 200, -1); - gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(action_combo)->entry), - FALSE); - - combo_items = NULL; - - for(i = 0 ; i < (gint) (sizeof(action_text) / sizeof(gchar *)) ; - i++) { - combo_items = g_list_append(combo_items, - (gpointer) _(action_text[i])); - } - gtk_combo_set_popdown_strings(GTK_COMBO(action_combo), combo_items); - - g_list_free(combo_items); - - gtk_box_pack_start (GTK_BOX (hbox1), action_combo, - TRUE, TRUE, 0); - action_list = GTK_COMBO(action_combo)->list; - gtk_signal_connect (GTK_OBJECT (action_list), "select-child", - GTK_SIGNAL_FUNC (prefs_filtering_action_select), - NULL); - - gtk_signal_connect(GTK_OBJECT(action_list), "selection-changed", - GTK_SIGNAL_FUNC(prefs_filtering_action_selection_changed), - NULL); - - /* accounts */ - - hbox1 = gtk_hbox_new (FALSE, VSPACING); - gtk_widget_show (vbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2); - - account_label = gtk_label_new (_("Account")); - gtk_widget_show (account_label); - gtk_misc_set_alignment (GTK_MISC (account_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox1), account_label, FALSE, FALSE, 0); - - account_combo = gtk_combo_new (); - gtk_widget_show (account_combo); - - combo_items = NULL; - for (accounts = account_get_list() ; accounts != NULL; - accounts = accounts->next) { - PrefsAccount *ac = (PrefsAccount *)accounts->data; - gchar *name; - - name = g_strdup_printf("%s <%s> (%s)", - ac->name, ac->address, - ac->account_name); - combo_items = g_list_append(combo_items, (gpointer) name); - } - - gtk_combo_set_popdown_strings(GTK_COMBO(account_combo), combo_items); - - for(cur = g_list_first(combo_items) ; cur != NULL ; - cur = g_list_next(cur)) - g_free(cur->data); - g_list_free(combo_items); - - gtk_box_pack_start (GTK_BOX (hbox1), account_combo, - TRUE, TRUE, 0); - account_list = GTK_COMBO(account_combo)->list; - gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(account_combo)->entry), - FALSE); - - /* destination */ - - hbox1 = gtk_hbox_new (FALSE, VSPACING); - gtk_widget_show (vbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2); - - dest_label = gtk_label_new (_("Destination")); - gtk_widget_show (dest_label); - gtk_misc_set_alignment (GTK_MISC (dest_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox1), dest_label, FALSE, FALSE, 0); - - exec_label = gtk_label_new (_("Execute")); - gtk_widget_show (exec_label); - gtk_misc_set_alignment (GTK_MISC (exec_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox1), exec_label, FALSE, FALSE, 0); - - color_label = gtk_label_new (_("Color")); - gtk_widget_show(color_label); - gtk_misc_set_alignment(GTK_MISC(color_label), 0, 0.5); - gtk_box_pack_start(GTK_BOX(hbox1), color_label, FALSE, FALSE, 0); - - dest_entry = gtk_entry_new (); - gtk_widget_show (dest_entry); -// gtk_widget_set_usize (dest_entry, 200, -1); - gtk_box_pack_start (GTK_BOX (hbox1), dest_entry, TRUE, TRUE, 0); - - color_optmenu = gtk_option_menu_new(); - gtk_option_menu_set_menu(GTK_OPTION_MENU(color_optmenu), - labelcolors_create_color_menu()); -// gtk_widget_set_usize(color_optmenu, -1, -1); - gtk_box_pack_start(GTK_BOX(hbox1), color_optmenu, TRUE, TRUE, 0); - - dest_btn = gtk_button_new_with_label (_("Select ...")); - gtk_widget_show (dest_btn); - gtk_box_pack_start (GTK_BOX (hbox1), dest_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (dest_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_filtering_select_dest), - NULL); - - exec_btn = gtk_button_new_with_label (_("Info ...")); - gtk_widget_show (exec_btn); - gtk_box_pack_start (GTK_BOX (hbox1), exec_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (exec_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_matcher_exec_info), - NULL); - -// dummy = gtk_label_new(""); -// gtk_widget_show (dummy); -// gtk_box_pack_start(GTK_BOX (hbox1), dummy, FALSE, FALSE, 0); - - - /* 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_filtering_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_filtering_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_filtering_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_filtering_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_filtering_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_filtering_down), NULL); - - gtk_widget_set_usize(window, 500, -1); - - gtk_widget_show_all(window); - - filtering.window = window; - filtering.ok_btn = ok_btn; - - filtering.cond_entry = cond_entry; - filtering.action_list = action_list; - filtering.action_combo = action_combo; - filtering.account_list = account_list; - filtering.account_combo = account_combo; - filtering.dest_entry = dest_entry; - filtering.dest_btn = dest_btn; - filtering.dest_label = dest_label; - filtering.exec_label = exec_label; - filtering.exec_btn = exec_btn; - - filtering.cond_clist = cond_clist; - - filtering.color_label = color_label; - filtering.color_optmenu = color_optmenu; -} - -static void prefs_filtering_update_hscrollbar(void) -{ - gint optwidth = gtk_clist_optimal_column_width(GTK_CLIST(filtering.cond_clist), 0); - gtk_clist_set_column_width(GTK_CLIST(filtering.cond_clist), 0, optwidth); -} - -static void prefs_filtering_set_dialog(void) -{ - GtkCList *clist = GTK_CLIST(filtering.cond_clist); - GSList *cur; - - gtk_clist_freeze(clist); - gtk_clist_clear(clist); - - prefs_filtering_clist_set_row(-1, NULL); - for(cur = prefs_filtering ; cur != NULL ; cur = g_slist_next(cur)) { - FilteringProp * prop = (FilteringProp *) cur->data; - - prefs_filtering_clist_set_row(-1, prop); - } - - prefs_filtering_update_hscrollbar(); - gtk_clist_thaw(clist); - - prefs_filtering_reset_dialog(); -} - -static void prefs_filtering_reset_dialog(void) -{ - gtk_list_select_item(GTK_LIST(filtering.action_list), 0); - gtk_list_select_item(GTK_LIST(filtering.account_list), 0); - gtk_entry_set_text(GTK_ENTRY(filtering.dest_entry), ""); - gtk_entry_set_text(GTK_ENTRY(filtering.cond_entry), ""); -} - -static void prefs_filtering_set_list(void) -{ - gint row = 1; - FilteringProp *prop; - GSList * cur; - gchar * filtering_str; - gchar * tmp; - - for(cur = prefs_filtering ; cur != NULL ; cur = g_slist_next(cur)) - filteringprop_free((FilteringProp *) cur->data); - g_slist_free(prefs_filtering); - prefs_filtering = NULL; - - while (gtk_clist_get_text(GTK_CLIST(filtering.cond_clist), - row, 0, &filtering_str)) { - if (strcmp(filtering_str, _("(New)")) != 0) { - tmp = filtering_str; - prop = filteringprop_parse(&tmp); - if (prop != NULL) - prefs_filtering = g_slist_append(prefs_filtering, - prop); - } - row++; - } -} - -static gint prefs_filtering_clist_set_row(gint row, FilteringProp * prop) -{ - GtkCList *clist = GTK_CLIST(filtering.cond_clist); - gchar * str; - gchar *cond_str[1]; - - if (prop == NULL) { - cond_str[0] = _("(New)"); - return gtk_clist_append(clist, cond_str); - } - - str = filteringprop_to_string(prop); - if (str == NULL) { - return -1; - } - cond_str[0] = str; - - if (row < 0) - row = gtk_clist_append(clist, cond_str); - else - gtk_clist_set_text(clist, row, 0, cond_str[0]); - g_free(str); - - return row; -} - -static void prefs_filtering_condition_define_done(MatcherList * matchers) -{ - gchar * str; - - if (matchers == NULL) - return; - - str = matcherlist_to_string(matchers); - - if (str != NULL) { - gtk_entry_set_text(GTK_ENTRY(filtering.cond_entry), str); - g_free(str); - } -} - -static void prefs_filtering_condition_define(void) -{ - gchar * cond_str; - MatcherList * matchers = NULL; - - cond_str = gtk_entry_get_text(GTK_ENTRY(filtering.cond_entry)); - - if (*cond_str != '\0') { - gchar * tmp; - - tmp = cond_str; - matchers = matcherlist_parse(&tmp); - if (tmp == NULL) - alertpanel_error(_("Match string is not valid.")); - } - - prefs_matcher_open(matchers, prefs_filtering_condition_define_done); - - if (matchers != NULL) - matcherlist_free(matchers); -} - - -/* register / substitute delete buttons */ - - -static FilteringProp * prefs_filtering_dialog_to_filtering(void) -{ - MatcherList * cond; - gchar * cond_str; - FilteringProp * prop; - FilteringAction * action; - gchar * tmp; - gint list_id; - gint action_id; - gint action_type; - gint account_id; - gchar * destination; - gint labelcolor; - - cond_str = gtk_entry_get_text(GTK_ENTRY(filtering.cond_entry)); - if (*cond_str == '\0') { - alertpanel_error(_("Score is not set.")); - return NULL; - } - - action_id = get_sel_from_list(GTK_LIST(filtering.action_list)); - action_type = prefs_filtering_get_matching_from_action(action_id); - list_id = get_sel_from_list(GTK_LIST(filtering.account_list)); - account_id = get_account_id_from_list_id(list_id); - - switch (action_id) { - case ACTION_MOVE: - case ACTION_COPY: - case ACTION_FORWARD: - case ACTION_FORWARD_AS_ATTACHMENT: - case ACTION_EXECUTE: - destination = gtk_entry_get_text(GTK_ENTRY(filtering.dest_entry)); - if (*destination == '\0') { - alertpanel_error(_("Destination is not set.")); - return NULL; - } - break; - case ACTION_COLOR: - labelcolor = labelcolors_get_color_menu_active_item( - gtk_option_menu_get_menu(GTK_OPTION_MENU(filtering.color_optmenu))); - destination = NULL; - break; - default: - destination = NULL; - break; - } - - action = filteringaction_new(action_type, account_id, destination, labelcolor); - - tmp = cond_str; - cond = matcherlist_parse(&tmp); - - if (tmp == NULL) { - alertpanel_error(_("Match string is not valid.")); - filteringaction_free(action); - return NULL; - } - - prop = filteringprop_new(cond, action); - - return prop; -} - -static void prefs_filtering_register_cb(void) -{ - FilteringProp * prop; - - prop = prefs_filtering_dialog_to_filtering(); - if (prop == NULL) - return; - prefs_filtering_clist_set_row(-1, prop); - - filteringprop_free(prop); - - prefs_filtering_update_hscrollbar(); -} - -static void prefs_filtering_substitute_cb(void) -{ - GtkCList *clist = GTK_CLIST(filtering.cond_clist); - gint row; - FilteringProp * prop; - - if (!clist->selection) return; - - row = GPOINTER_TO_INT(clist->selection->data); - if (row == 0) return; - - prop = prefs_filtering_dialog_to_filtering(); - if (prop == NULL) - return; - prefs_filtering_clist_set_row(row, prop); - - filteringprop_free(prop); - - prefs_filtering_update_hscrollbar(); -} - -static void prefs_filtering_delete_cb(void) -{ - GtkCList *clist = GTK_CLIST(filtering.cond_clist); - 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; - - gtk_clist_remove(clist, row); - - prefs_filtering_update_hscrollbar(); -} - -static void prefs_filtering_up(void) -{ - GtkCList *clist = GTK_CLIST(filtering.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); - if(gtk_clist_row_is_visible(clist, row - 1) != GTK_VISIBILITY_FULL) { - gtk_clist_moveto(clist, row - 1, 0, 0, 0); - } - } -} - -static void prefs_filtering_down(void) -{ - GtkCList *clist = GTK_CLIST(filtering.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); - if(gtk_clist_row_is_visible(clist, row + 1) != GTK_VISIBILITY_FULL) { - gtk_clist_moveto(clist, row + 1, 0, 1, 0); - } - } -} - -static void prefs_filtering_select_set(FilteringProp * prop) -{ - FilteringAction * action; - gchar * matcher_str; - gint list_id; - - prefs_filtering_reset_dialog(); - - action = prop->action; - - matcher_str = matcherlist_to_string(prop->matchers); - if (matcher_str == NULL) { - filteringprop_free(prop); - return; - } - - gtk_entry_set_text(GTK_ENTRY(filtering.cond_entry), matcher_str); - - if (action->destination) - gtk_entry_set_text(GTK_ENTRY(filtering.dest_entry), action->destination); - else - gtk_entry_set_text(GTK_ENTRY(filtering.dest_entry), ""); - - switch(action->type) { - case MATCHING_ACTION_MOVE: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_MOVE); - break; - case MATCHING_ACTION_COPY: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_COPY); - break; - case MATCHING_ACTION_DELETE: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_DELETE); - break; - case MATCHING_ACTION_MARK: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_MARK); - break; - case MATCHING_ACTION_UNMARK: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_UNMARK); - break; - case MATCHING_ACTION_MARK_AS_READ: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_MARK_AS_READ); - break; - case MATCHING_ACTION_MARK_AS_UNREAD: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_MARK_AS_UNREAD); - break; - case MATCHING_ACTION_FORWARD: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_FORWARD); - list_id = get_list_id_from_account_id(action->account_id); - gtk_list_select_item(GTK_LIST(filtering.account_list), - list_id); - break; - case MATCHING_ACTION_FORWARD_AS_ATTACHMENT: - list_id = get_list_id_from_account_id(action->account_id); - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_FORWARD_AS_ATTACHMENT); - gtk_list_select_item(GTK_LIST(filtering.account_list), - list_id); - break; - case MATCHING_EXECUTE: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_EXECUTE); - break; - case MATCHING_ACTION_COLOR: - gtk_list_select_item(GTK_LIST(filtering.action_list), - ACTION_COLOR); - gtk_option_menu_set_history(GTK_OPTION_MENU(filtering.color_optmenu), action->labelcolor); - break; - } - - g_free(matcher_str); -} - -static void prefs_filtering_select(GtkCList *clist, gint row, gint column, - GdkEvent *event) -{ - FilteringProp * prop; - gchar * tmp; - gchar * filtering_str; - - if (row == 0) { - prefs_filtering_reset_dialog(); - return; - } - - if (!gtk_clist_get_text(GTK_CLIST(filtering.cond_clist), - row, 0, &filtering_str)) - return; - - tmp = filtering_str; - prop = filteringprop_parse(&tmp); - if (tmp == NULL) - return; - - prefs_filtering_select_set(prop); - - filteringprop_free(prop); -} - -static void prefs_filtering_select_dest(void) -{ - FolderItem *dest; - gchar * path; - - dest = foldersel_folder_sel(NULL, NULL); - if (!dest) return; - - path = folder_item_get_identifier(dest); - - gtk_entry_set_text(GTK_ENTRY(filtering.dest_entry), path); - g_free(path); -} - -static void prefs_filtering_action_selection_changed(GtkList *list, - gpointer user_data) -{ - gint value; - - value = get_sel_from_list(GTK_LIST(filtering.action_list)); - - if (filtering.current_action != value) { - if (filtering.current_action == ACTION_FORWARD - || filtering.current_action == ACTION_FORWARD_AS_ATTACHMENT) { - debug_print("unregistering address completion entry\n"); - address_completion_unregister_entry(GTK_ENTRY(filtering.dest_entry)); - } - if (value == ACTION_FORWARD || value == ACTION_FORWARD_AS_ATTACHMENT) { - debug_print("registering address completion entry\n"); - address_completion_register_entry(GTK_ENTRY(filtering.dest_entry)); - } - filtering.current_action = value; - } -} - -static void prefs_filtering_action_select(GtkList *list, - GtkWidget *widget, - gpointer user_data) -{ - gint value; - - value = get_sel_from_list(GTK_LIST(filtering.action_list)); - - switch (value) { - case ACTION_MOVE: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, TRUE); - gtk_widget_show(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_COPY: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, TRUE); - gtk_widget_show(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_DELETE: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, FALSE); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_MARK: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, FALSE); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_UNMARK: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, FALSE); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_MARK_AS_READ: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, FALSE); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_MARK_AS_UNREAD: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, FALSE); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_FORWARD: - gtk_widget_set_sensitive(filtering.account_combo, TRUE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, TRUE); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_FORWARD_AS_ATTACHMENT: - gtk_widget_set_sensitive(filtering.account_combo, TRUE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, TRUE); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_show(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_hide(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_EXECUTE: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_show(filtering.dest_entry); - gtk_widget_set_sensitive(filtering.dest_entry, TRUE); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_hide(filtering.dest_label); - gtk_widget_show(filtering.exec_label); - gtk_widget_set_sensitive(filtering.exec_btn, FALSE); - gtk_widget_show(filtering.exec_btn); - gtk_widget_hide(filtering.color_optmenu); - gtk_widget_hide(filtering.color_label); - break; - case ACTION_COLOR: - gtk_widget_set_sensitive(filtering.account_combo, FALSE); - gtk_widget_hide(filtering.dest_entry); - gtk_widget_hide(filtering.dest_btn); - gtk_widget_hide(filtering.dest_label); - gtk_widget_hide(filtering.exec_label); - gtk_widget_show(filtering.exec_btn); - gtk_widget_set_sensitive(filtering.exec_btn, FALSE); - gtk_widget_show(filtering.color_optmenu); - gtk_widget_show(filtering.color_label); - break; - } -} - -static gint prefs_filtering_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - prefs_filtering_cancel(); - return TRUE; -} - -static void prefs_filtering_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) -{ - if (event && event->keyval == GDK_Escape) - prefs_filtering_cancel(); -} - -static void prefs_filtering_ok(void) -{ - prefs_filtering_set_list(); - prefs_filtering_write_config(); - prefs_filtering_close(); -} - -static void prefs_filtering_cancel(void) -{ - prefs_filtering_read_config(); - prefs_filtering_close(); -} diff --git a/src/prefs_filtering.h b/src/prefs_filtering.h deleted file mode 100644 index 09f10191e..000000000 --- a/src/prefs_filtering.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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_FILTERING_H__ -#define __PREFS_FILTERING_H__ - -/* -void prefs_scoring_read_config (void); -void prefs_scoring_write_config (void); -*/ -void prefs_filtering_open (void); - -#endif /* __PREFS_FILTERING_H__ */ diff --git a/src/prefs_folder_item.c b/src/prefs_folder_item.c deleted file mode 100644 index b6a010481..000000000 --- a/src/prefs_folder_item.c +++ /dev/null @@ -1,372 +0,0 @@ -/* - * 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 "intl.h" -#include "defs.h" -#include "folder.h" -#include "prefs_folder_item.h" -#include "summaryview.h" -#include "prefs.h" -#include "manage_window.h" - -PrefsFolderItem tmp_prefs; - -struct PrefsFolderItemDialog -{ - FolderItem *item; - GtkWidget *window; - GtkWidget *checkbtn_request_return_receipt; - GtkWidget *checkbtn_default_to; - GtkWidget *entry_default_to; - GtkWidget *checkbtn_folder_chmod; - GtkWidget *entry_folder_chmod; -}; - -static PrefParam param[] = { - {"sort_by_number", "FALSE", &tmp_prefs.sort_by_number, P_BOOL, - NULL, NULL, NULL}, - {"sort_by_size", "FALSE", &tmp_prefs.sort_by_size, P_BOOL, - NULL, NULL, NULL}, - {"sort_by_date", "FALSE", &tmp_prefs.sort_by_date, P_BOOL, - NULL, NULL, NULL}, - {"sort_by_from", "FALSE", &tmp_prefs.sort_by_from, P_BOOL, - NULL, NULL, NULL}, - {"sort_by_subject", "FALSE", &tmp_prefs.sort_by_subject, P_BOOL, - NULL, NULL, NULL}, - {"sort_by_score", "FALSE", &tmp_prefs.sort_by_score, P_BOOL, - NULL, NULL, NULL}, - {"sort_descending", "FALSE", &tmp_prefs.sort_descending, P_BOOL, - NULL, NULL, NULL}, - /*{"enable_thread", "TRUE", &tmp_prefs.enable_thread, P_BOOL, - NULL, NULL, NULL},*/ - {"kill_score", "-9999", &tmp_prefs.kill_score, P_INT, - NULL, NULL, NULL}, - {"important_score", "1", &tmp_prefs.important_score, P_INT, - NULL, NULL, NULL}, - {"request_return_receipt", "", &tmp_prefs.request_return_receipt, P_BOOL, - NULL, NULL, NULL}, - {"enable_default_to", "", &tmp_prefs.enable_default_to, P_BOOL, - NULL, NULL, NULL}, - {"default_to", "", &tmp_prefs.default_to, P_STRING, - NULL, NULL, NULL}, - {"enable_folder_chmod", "", &tmp_prefs.enable_folder_chmod, P_BOOL, - NULL, NULL, NULL}, - {"folder_chmod", "", &tmp_prefs.folder_chmod, P_INT, - NULL, NULL, NULL}, - {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL} -}; - -void prefs_folder_item_delete_cb(GtkWidget *widget, GdkEventAny *event, struct PrefsFolderItemDialog *dialog); -void prefs_folder_item_cancel_cb(GtkWidget *widget, struct PrefsFolderItemDialog *dialog); -void prefs_folder_item_ok_cb(GtkWidget *widget, struct PrefsFolderItemDialog *dialog); -void prefs_folder_item_default_to_cb(GtkWidget *widget, struct PrefsFolderItemDialog *dialog); -void prefs_folder_item_folder_chmod_cb(GtkWidget *widget, struct PrefsFolderItemDialog *dialog); -gint prefs_folder_item_chmod_mode(gchar *folder_chmod); - -void prefs_folder_item_read_config(FolderItem * item) -{ - gchar * id; - - id = folder_item_get_identifier(item); - - prefs_read_config(param, id, FOLDERITEM_RC); - g_free(id); - - * item->prefs = tmp_prefs; -} - -void prefs_folder_item_save_config(FolderItem * item) -{ - gchar * id; - - tmp_prefs = * item->prefs; - - id = folder_item_get_identifier(item); - - prefs_save_config(param, id, FOLDERITEM_RC); - g_free(id); -} - -void prefs_folder_item_set_config(FolderItem * item, - int sort_type, gint sort_mode) -{ - tmp_prefs = * item->prefs; - - tmp_prefs.sort_by_number = FALSE; - tmp_prefs.sort_by_size = FALSE; - tmp_prefs.sort_by_date = FALSE; - tmp_prefs.sort_by_from = FALSE; - tmp_prefs.sort_by_subject = FALSE; - tmp_prefs.sort_by_score = FALSE; - - switch (sort_mode) { - case SORT_BY_NUMBER: - tmp_prefs.sort_by_number = TRUE; - break; - case SORT_BY_SIZE: - tmp_prefs.sort_by_size = TRUE; - break; - case SORT_BY_DATE: - tmp_prefs.sort_by_date = TRUE; - break; - case SORT_BY_FROM: - tmp_prefs.sort_by_from = TRUE; - break; - case SORT_BY_SUBJECT: - tmp_prefs.sort_by_subject = TRUE; - break; - case SORT_BY_SCORE: - tmp_prefs.sort_by_score = TRUE; - break; - } - tmp_prefs.sort_descending = (sort_type == GTK_SORT_DESCENDING); - - * item->prefs = tmp_prefs; -} - -PrefsFolderItem * prefs_folder_item_new(void) -{ - PrefsFolderItem * prefs; - - prefs = g_new0(PrefsFolderItem, 1); - - tmp_prefs.sort_by_number = FALSE; - tmp_prefs.sort_by_size = FALSE; - tmp_prefs.sort_by_date = FALSE; - tmp_prefs.sort_by_from = FALSE; - tmp_prefs.sort_by_subject = FALSE; - tmp_prefs.sort_by_score = FALSE; - tmp_prefs.sort_descending = FALSE; - tmp_prefs.kill_score = -9999; - tmp_prefs.important_score = 9999; - - tmp_prefs.request_return_receipt = FALSE; - tmp_prefs.enable_default_to = FALSE; - tmp_prefs.default_to = NULL; - tmp_prefs.enable_folder_chmod = FALSE; - tmp_prefs.folder_chmod = 0; - - * prefs = tmp_prefs; - - return prefs; -} - -void prefs_folder_item_free(PrefsFolderItem * prefs) -{ - g_free(prefs->default_to); - if (prefs->scoring != NULL) - prefs_scoring_free(prefs->scoring); - g_free(prefs); -} - -gint prefs_folder_item_get_sort_mode(FolderItem * item) -{ - tmp_prefs = * item->prefs; - - if (tmp_prefs.sort_by_number) - return SORT_BY_NUMBER; - if (tmp_prefs.sort_by_size) - return SORT_BY_SIZE; - if (tmp_prefs.sort_by_date) - return SORT_BY_DATE; - if (tmp_prefs.sort_by_from) - return SORT_BY_FROM; - if (tmp_prefs.sort_by_subject) - return SORT_BY_SUBJECT; - if (tmp_prefs.sort_by_score) - return SORT_BY_SCORE; - return SORT_BY_NONE; -} - -gint prefs_folder_item_get_sort_type(FolderItem * item) -{ - tmp_prefs = * item->prefs; - - if (tmp_prefs.sort_descending) - return GTK_SORT_DESCENDING; - else - return GTK_SORT_ASCENDING; -} - -void prefs_folder_item_create(FolderItem *item) { - struct PrefsFolderItemDialog *dialog; - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *confirm_area; - GtkWidget *hbox; - - GtkWidget *checkbtn_request_return_receipt; - GtkWidget *checkbtn_default_to; - GtkWidget *entry_default_to; - GtkWidget *checkbtn_folder_chmod; - GtkWidget *entry_folder_chmod; - - dialog = g_new0(struct PrefsFolderItemDialog, 1); - dialog->item = item; - - /* Window */ - window = gtk_window_new (GTK_WINDOW_DIALOG); - gtk_window_set_title (GTK_WINDOW(window), - _("Folder Property")); - gtk_container_set_border_width (GTK_CONTAINER (window), 8); - gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); - gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE); - gtk_signal_connect (GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_folder_item_delete_cb), dialog); - 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, 6); - gtk_widget_show(vbox); - gtk_container_add(GTK_CONTAINER (window), vbox); - - /* Ok and Cancle Buttons */ - gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"), - &cancel_btn, _("Cancel"), NULL, NULL); - gtk_widget_show(confirm_area); - gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); - gtk_widget_grab_default(ok_btn); - gtk_signal_connect (GTK_OBJECT(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_folder_item_ok_cb), dialog); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_folder_item_cancel_cb), dialog); - - /* Request Return Receipt */ - PACK_CHECK_BUTTON(vbox, checkbtn_request_return_receipt, - _("Request Return Receipt")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_request_return_receipt), - item->prefs->request_return_receipt); - - /* Default To */ - hbox = gtk_hbox_new(FALSE, 8); - gtk_widget_show(hbox); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - - PACK_CHECK_BUTTON(hbox, checkbtn_default_to, - _("Default To: ")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_default_to), item->prefs->enable_default_to); - gtk_signal_connect(GTK_OBJECT(checkbtn_default_to), "toggled", - GTK_SIGNAL_FUNC(prefs_folder_item_default_to_cb), dialog); - - entry_default_to = gtk_entry_new(); - gtk_widget_show(entry_default_to); - gtk_box_pack_start(GTK_BOX(hbox), entry_default_to, FALSE, FALSE, 0); - gtk_editable_set_editable(GTK_EDITABLE(entry_default_to), item->prefs->enable_default_to); - gtk_entry_set_text(GTK_ENTRY(entry_default_to), item->prefs->default_to); - - /* Folder chmod */ - hbox = gtk_hbox_new(FALSE, 8); - gtk_widget_show(hbox); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - - PACK_CHECK_BUTTON(hbox, checkbtn_folder_chmod, - _("Folder chmod: ")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_folder_chmod), item->prefs->enable_folder_chmod); - gtk_signal_connect(GTK_OBJECT(checkbtn_folder_chmod), "toggled", - GTK_SIGNAL_FUNC(prefs_folder_item_folder_chmod_cb), dialog); - - entry_folder_chmod = gtk_entry_new(); - gtk_widget_show(entry_folder_chmod); - gtk_box_pack_start(GTK_BOX(hbox), entry_folder_chmod, FALSE, FALSE, 0); - gtk_editable_set_editable(GTK_EDITABLE(entry_folder_chmod), item->prefs->enable_folder_chmod); - if (item->prefs->folder_chmod) { - gint tmp; - gint mult; - gint count = 0; - char buf[64]; /* plenty enough for an integer */ - - tmp = item->prefs->folder_chmod; - while (tmp && (count < sizeof(buf) - 1)) { - mult = tmp / 8; - buf[count++] = '0' + (tmp - mult * 8); - tmp /= 8; - } - buf[count] = '\0'; - gtk_entry_set_text(GTK_ENTRY(entry_folder_chmod), buf); - } - - dialog->window = window; - dialog->checkbtn_request_return_receipt = checkbtn_request_return_receipt; - dialog->checkbtn_default_to = checkbtn_default_to; - dialog->entry_default_to = entry_default_to; - dialog->checkbtn_folder_chmod = checkbtn_folder_chmod; - dialog->entry_folder_chmod = entry_folder_chmod; - - gtk_widget_show(window); -} - -void prefs_folder_item_destroy(struct PrefsFolderItemDialog *dialog) { - gtk_widget_destroy(dialog->window); - g_free(dialog); -} - -void prefs_folder_item_cancel_cb(GtkWidget *widget, struct PrefsFolderItemDialog *dialog) { - prefs_folder_item_destroy(dialog); -} - -void prefs_folder_item_delete_cb(GtkWidget *widget, GdkEventAny *event, struct PrefsFolderItemDialog *dialog) { - prefs_folder_item_destroy(dialog); -} - -void prefs_folder_item_ok_cb(GtkWidget *widget, struct PrefsFolderItemDialog *dialog) { - PrefsFolderItem *prefs = dialog->item->prefs; - - prefs->request_return_receipt = - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->checkbtn_request_return_receipt)); - prefs->enable_default_to = - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->checkbtn_default_to)); - g_free(prefs->default_to); - prefs->default_to = - gtk_editable_get_chars(GTK_EDITABLE(dialog->entry_default_to), 0, -1); - prefs->enable_folder_chmod = - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->checkbtn_folder_chmod)); - prefs->folder_chmod = prefs_folder_item_chmod_mode( - gtk_editable_get_chars(GTK_EDITABLE(dialog->entry_folder_chmod), - 0, -1)); - - prefs_folder_item_save_config(dialog->item); - prefs_folder_item_destroy(dialog); -} - -void prefs_folder_item_default_to_cb(GtkWidget *widget, struct PrefsFolderItemDialog *dialog) { - gtk_editable_set_editable(GTK_EDITABLE(dialog->entry_default_to), - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->checkbtn_default_to))); -} - -void prefs_folder_item_folder_chmod_cb(GtkWidget *widget, struct PrefsFolderItemDialog *dialog) { - gtk_editable_set_editable(GTK_EDITABLE(dialog->entry_folder_chmod), - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->checkbtn_folder_chmod))); -} - -gint prefs_folder_item_chmod_mode(gchar *folder_chmod) { - gint newmode = 0; - gchar *tmp; - - if (folder_chmod) { - newmode = strtol(folder_chmod, &tmp, 8); - if (!(*(folder_chmod) && !(*tmp))) - newmode = 0; - } - - return newmode; -} diff --git a/src/prefs_folder_item.h b/src/prefs_folder_item.h deleted file mode 100644 index e06ff6ff4..000000000 --- a/src/prefs_folder_item.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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_FOLDER_ITEM_H - -#define PREFS_FOLDER_ITEM_H - -#include "folder.h" -#include <glib.h> - -struct _PrefsFolderItem { - gchar * directory; - - gboolean sort_by_number; - gboolean sort_by_size; - gboolean sort_by_date; - gboolean sort_by_from; - gboolean sort_by_subject; - gboolean sort_by_score; - - gboolean sort_descending; - - gboolean enable_thread; - - gint kill_score; - gint important_score; - - GSList * scoring; - GSList * processing; - - gboolean request_return_receipt; - gboolean enable_default_to; - gchar *default_to; - gboolean enable_folder_chmod; - gint folder_chmod; -}; - -typedef struct _PrefsFolderItem PrefsFolderItem; - -void prefs_folder_item_read_config(FolderItem * item); -void prefs_folder_item_save_config(FolderItem * item); -void prefs_folder_item_set_config(FolderItem * item, - int sort_type, gint sort_mode); -PrefsFolderItem * prefs_folder_item_new(void); -void prefs_folder_item_free(PrefsFolderItem * prefs); -gint prefs_folder_item_get_sort_type(FolderItem * item); -gint prefs_folder_item_get_sort_mode(FolderItem * item); - -#endif diff --git a/src/prefs_matcher.c b/src/prefs_matcher.c deleted file mode 100644 index 9cdb370da..000000000 --- a/src/prefs_matcher.c +++ /dev/null @@ -1,1474 +0,0 @@ -/* - * 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_matcher.h" -#include "prefs_common.h" -#include "mainwindow.h" -#include "foldersel.h" -#include "manage_window.h" -#include "inc.h" -#include "matcher.h" -#include "utils.h" -#include "gtkutils.h" -#include "alertpanel.h" -#include "folder.h" - -static struct Matcher { - GtkWidget *window; - - GtkWidget *ok_btn; - - GtkWidget *predicate_combo; - GtkWidget *predicate_flag_combo; - GtkWidget *header_combo; - - GtkWidget *criteria_list; - - GtkWidget *predicate_list; - GtkWidget *predicate_label; - GtkWidget *predicate_flag_list; - - GtkWidget *bool_op_list; - - GtkWidget *header_entry; - GtkWidget *header_label; - GtkWidget *value_entry; - GtkWidget *value_label; - GtkWidget *case_chkbtn; - GtkWidget *regexp_chkbtn; - - GtkWidget *exec_btn; - - GtkWidget *cond_clist; -} matcher; - -/* choice in the list */ - -enum { - CRITERIA_ALL = 0, - - CRITERIA_SUBJECT = 1, - CRITERIA_FROM = 2, - CRITERIA_TO = 3, - CRITERIA_CC = 4, - CRITERIA_TO_OR_CC = 5, - CRITERIA_NEWSGROUPS = 6, - CRITERIA_INREPLYTO = 7, - CRITERIA_REFERENCES = 8, - CRITERIA_AGE_GREATER = 9, - CRITERIA_AGE_LOWER = 10, - CRITERIA_HEADER = 11, - CRITERIA_HEADERS_PART = 12, - CRITERIA_BODY_PART = 13, - CRITERIA_MESSAGE = 14, - - CRITERIA_UNREAD = 15, - CRITERIA_NEW = 16, - CRITERIA_MARKED = 17, - CRITERIA_DELETED = 18, - CRITERIA_REPLIED = 19, - CRITERIA_FORWARDED = 20, - - CRITERIA_SCORE_GREATER = 21, - CRITERIA_SCORE_LOWER = 22, - - CRITERIA_EXECUTE = 23 -}; - -enum { - BOOL_OP_OR = 0, - BOOL_OP_AND = 1 -}; - -gchar * bool_op_text [] = { - N_("or"), N_("and") -}; - -enum { - PREDICATE_CONTAINS = 0, - PREDICATE_DOES_NOT_CONTAIN = 1 -}; - -gchar * predicate_text [] = { - N_("contains"), N_("does not contain") -}; - -enum { - PREDICATE_FLAG_ENABLED = 0, - PREDICATE_FLAG_DISABLED = 1 -}; - -gchar * predicate_flag_text [] = { - N_("yes"), N_("no") -}; - -gchar * criteria_text [] = { - N_("All messages"), N_("Subject"), - N_("From"), N_("To"), N_("Cc"), N_("To or Cc"), - N_("Newsgroups"), N_("In reply to"), N_("References"), - N_("Age greater than"), N_("Age lower than"), - N_("Header"), N_("Headers part"), - N_("Body part"), N_("Whole message"), - N_("Unread flag"), N_("New flag"), - N_("Marked flag"), N_("Deleted flag"), - N_("Replied flag"), N_("Forwarded flag"), - N_("Score greater than"), N_("Score lower than"), - N_("Execute") -}; - -static gint get_sel_from_list(GtkList * list) -{ - gint row = 0; - void * sel; - GList * child; - - sel = list->selection->data; - for(child = list->children ; child != NULL ; - child = g_list_next(child)) { - if (child->data == sel) - return row; - row ++; - } - - return row; -} - -static PrefsMatcherSignal * matchers_callback; - -#define VSPACING 12 -#define VSPACING_NARROW 4 -#define DEFAULT_ENTRY_WIDTH 80 -#define PREFSBUFSIZE 1024 - -/* widget creating functions */ -static void prefs_matcher_create (void); - -static void prefs_matcher_set_dialog (MatcherList * matchers); - -/* -static void prefs_matcher_set_list (void); -static gint prefs_matcher_clist_set_row (gint row); -*/ - -/* callback functions */ - -/* -static void prefs_matcher_select_dest_cb (void); -*/ -static void prefs_matcher_register_cb (void); -static void prefs_matcher_substitute_cb (void); -static void prefs_matcher_delete_cb (void); -static void prefs_matcher_up (void); -static void prefs_matcher_down (void); -static void prefs_matcher_select (GtkCList *clist, - gint row, - gint column, - GdkEvent *event); - -static void prefs_matcher_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void prefs_matcher_ok (void); -static void prefs_matcher_cancel (void); -static gint prefs_matcher_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data); -static void prefs_matcher_criteria_select(GtkList *list, - GtkWidget *widget, - gpointer user_data); -static MatcherList * prefs_matcher_get_list(void); -static void prefs_matcher_exec_info_create(void); - -void prefs_matcher_open(MatcherList * matchers, PrefsMatcherSignal * cb) -{ - inc_autocheck_timer_remove(); - - if (!matcher.window) { - prefs_matcher_create(); - } - - manage_window_set_transient(GTK_WINDOW(matcher.window)); - gtk_widget_grab_focus(matcher.ok_btn); - - matchers_callback = cb; - - prefs_matcher_set_dialog(matchers); - - gtk_widget_show(matcher.window); -} - -static void prefs_matcher_create(void) -{ - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *confirm_area; - - GtkWidget *vbox1; - GtkWidget *vbox2; - GtkWidget *vbox3; - GtkWidget *table1; - - GtkWidget *hbox1; - - GtkWidget *header_combo; - GtkWidget *header_entry; - GtkWidget *header_label; - GtkWidget *criteria_combo; - GtkWidget *criteria_list; - GtkWidget *criteria_label; - GtkWidget *value_label; - GtkWidget *value_entry; - GtkWidget *predicate_combo; - GtkWidget *predicate_list; - GtkWidget *predicate_flag_combo; - GtkWidget *predicate_flag_list; - GtkWidget *predicate_label; - GtkWidget *bool_op_combo; - GtkWidget *bool_op_list; - GtkWidget *bool_op_label; - - GtkWidget *regexp_chkbtn; - GtkWidget *case_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; - - GtkWidget *exec_btn; - - GList *combo_items; - gint i; - - gchar *title[] = {_("Registered rules")}; - - debug_print(_("Creating matcher 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, &ok_btn, _("OK"), - &cancel_btn, _("Cancel"), NULL, NULL); - gtk_widget_show (confirm_area); - gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); - gtk_widget_grab_default (ok_btn); - - gtk_window_set_title (GTK_WINDOW(window), - _("Condition setting")); - gtk_signal_connect (GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_matcher_deleted), NULL); - gtk_signal_connect (GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_matcher_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(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_matcher_ok), NULL); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_matcher_cancel), 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 (2, 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); - - /* criteria combo box */ - - criteria_label = gtk_label_new (_("Match type")); - gtk_widget_show (criteria_label); - gtk_misc_set_alignment (GTK_MISC (criteria_label), 0, 0.5); - gtk_table_attach (GTK_TABLE (table1), criteria_label, 0, 1, 0, 1, - GTK_FILL, 0, 0, 0); - - criteria_combo = gtk_combo_new (); - gtk_widget_show (criteria_combo); - - combo_items = NULL; - - for(i = 0 ; i < (gint) (sizeof(criteria_text) / sizeof(gchar *)) ; - i++) { - combo_items = g_list_append(combo_items, - (gpointer) _(criteria_text[i])); - } - gtk_combo_set_popdown_strings(GTK_COMBO(criteria_combo), combo_items); - - g_list_free(combo_items); - - gtk_widget_set_usize (criteria_combo, 120, -1); - gtk_table_attach (GTK_TABLE (table1), criteria_combo, 0, 1, 1, 2, - 0, 0, 0, 0); - criteria_list = GTK_COMBO(criteria_combo)->list; - gtk_signal_connect (GTK_OBJECT (criteria_list), "select-child", - GTK_SIGNAL_FUNC (prefs_matcher_criteria_select), - NULL); - - gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(criteria_combo)->entry), - FALSE); - - /* header name */ - - header_label = gtk_label_new (_("Header name")); - gtk_widget_show (header_label); - gtk_misc_set_alignment (GTK_MISC (header_label), 0, 0.5); - gtk_table_attach (GTK_TABLE (table1), header_label, 1, 2, 0, 1, - GTK_FILL, 0, 0, 0); - - header_combo = gtk_combo_new (); - gtk_widget_show (header_combo); - gtk_widget_set_usize (header_combo, 96, -1); - gtkut_combo_set_items (GTK_COMBO (header_combo), - "Subject", "From", "To", "Cc", "Reply-To", - "Sender", "X-ML-Name", "X-List", "X-Sequence", - "X-Mailer", - NULL); - gtk_table_attach (GTK_TABLE (table1), header_combo, 1, 2, 1, 2, - 0, 0, 0, 0); - header_entry = GTK_COMBO (header_combo)->entry; - gtk_entry_set_editable (GTK_ENTRY (header_entry), TRUE); - - /* value */ - - value_label = gtk_label_new (_("Value")); - gtk_widget_show (value_label); - gtk_misc_set_alignment (GTK_MISC (value_label), 0, 0.5); - gtk_table_attach (GTK_TABLE (table1), value_label, 2, 3, 0, 1, - GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0, 0); - - value_entry = gtk_entry_new (); - gtk_widget_show (value_entry); - gtk_widget_set_usize (value_entry, 200, -1); - gtk_table_attach (GTK_TABLE (table1), value_entry, 2, 3, 1, 2, - GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0, 0); - - exec_btn = gtk_button_new_with_label (_("Info ...")); - gtk_widget_show (exec_btn); - gtk_table_attach (GTK_TABLE (table1), exec_btn, 3, 4, 1, 2, - GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0, 0); - gtk_signal_connect (GTK_OBJECT (exec_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_matcher_exec_info), - NULL); - - /* predicate */ - - vbox2 = gtk_vbox_new (FALSE, VSPACING); - 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); - - predicate_label = gtk_label_new (_("Predicate")); - gtk_widget_show (predicate_label); - gtk_box_pack_start (GTK_BOX (hbox1), predicate_label, - FALSE, FALSE, 0); - - predicate_combo = gtk_combo_new (); - gtk_widget_show (predicate_combo); - gtk_widget_set_usize (predicate_combo, 120, -1); - predicate_list = GTK_COMBO(predicate_combo)->list; - gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(predicate_combo)->entry), - FALSE); - - combo_items = NULL; - - for(i = 0 ; i < (gint) (sizeof(predicate_text) / sizeof(gchar *)) ; - i++) { - combo_items = g_list_append(combo_items, - (gpointer) _(predicate_text[i])); - } - gtk_combo_set_popdown_strings(GTK_COMBO(predicate_combo), combo_items); - - g_list_free(combo_items); - - gtk_box_pack_start (GTK_BOX (hbox1), predicate_combo, - FALSE, FALSE, 0); - - /* predicate flag */ - - predicate_flag_combo = gtk_combo_new (); - gtk_widget_hide (predicate_flag_combo); - gtk_widget_set_usize (predicate_flag_combo, 120, -1); - predicate_flag_list = GTK_COMBO(predicate_flag_combo)->list; - gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(predicate_flag_combo)->entry), FALSE); - - combo_items = NULL; - - for(i = 0 ; i < (gint) (sizeof(predicate_text) / sizeof(gchar *)) ; - i++) { - combo_items = g_list_append(combo_items, (gpointer) _(predicate_flag_text[i])); - } - gtk_combo_set_popdown_strings(GTK_COMBO(predicate_flag_combo), - combo_items); - - g_list_free(combo_items); - - gtk_box_pack_start (GTK_BOX (hbox1), predicate_flag_combo, - FALSE, FALSE, 0); - - vbox3 = gtk_vbox_new (FALSE, 0); - gtk_widget_show (vbox3); - gtk_box_pack_start (GTK_BOX (hbox1), vbox3, FALSE, FALSE, 0); - - PACK_CHECK_BUTTON (vbox3, case_chkbtn, _("Case sensitive")); - PACK_CHECK_BUTTON (vbox3, regexp_chkbtn, _("Use regexp")); - - /* 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_matcher_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_matcher_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_matcher_delete_cb), NULL); - - /* boolean operation */ - - bool_op_label = gtk_label_new (_("Boolean Op")); - gtk_misc_set_alignment (GTK_MISC (value_label), 0, 0.5); - gtk_widget_show (bool_op_label); - gtk_box_pack_start (GTK_BOX (btn_hbox), bool_op_label, - FALSE, FALSE, 0); - - bool_op_combo = gtk_combo_new (); - gtk_widget_show (bool_op_combo); - gtk_widget_set_usize (bool_op_combo, 50, -1); - bool_op_list = GTK_COMBO(bool_op_combo)->list; - gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(bool_op_combo)->entry), - FALSE); - - combo_items = NULL; - - for(i = 0 ; i < (gint) (sizeof(bool_op_text) / sizeof(gchar *)) ; - i++) { - combo_items = g_list_append(combo_items, - (gpointer) _(bool_op_text[i])); - } - gtk_combo_set_popdown_strings(GTK_COMBO(bool_op_combo), combo_items); - - g_list_free(combo_items); - - gtk_box_pack_start (GTK_BOX (btn_hbox), bool_op_combo, - FALSE, FALSE, 0); - - 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_matcher_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_matcher_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_matcher_down), NULL); - - gtk_widget_show_all(window); - - matcher.window = window; - - matcher.ok_btn = ok_btn; - - matcher.criteria_list = criteria_list; - matcher.header_combo = header_combo; - matcher.header_entry = header_entry; - matcher.header_label = header_label; - matcher.value_entry = value_entry; - matcher.value_label = value_label; - matcher.predicate_label = predicate_label; - matcher.predicate_list = predicate_list; - matcher.predicate_combo = predicate_combo; - matcher.predicate_flag_list = predicate_flag_list; - matcher.predicate_flag_combo = predicate_flag_combo; - matcher.case_chkbtn = case_chkbtn; - matcher.regexp_chkbtn = regexp_chkbtn; - matcher.bool_op_list = bool_op_list; - matcher.exec_btn = exec_btn; - - matcher.cond_clist = cond_clist; -} - -static gint prefs_matcher_clist_set_row(gint row, MatcherProp * prop) -{ - GtkCList *clist = GTK_CLIST(matcher.cond_clist); - gchar * cond_str[1]; - gchar * matcher_str; - - if (prop == NULL) { - cond_str[0] = _("(New)"); - return gtk_clist_append(clist, cond_str); - } - - matcher_str = matcherprop_to_string(prop); - cond_str[0] = matcher_str; - if (row < 0) - row = gtk_clist_append(clist, cond_str); - else - gtk_clist_set_text(clist, row, 0, cond_str[0]); - g_free(matcher_str); - - return row; -} - -static void prefs_matcher_reset_condition(void) -{ - gtk_list_select_item(GTK_LIST(matcher.criteria_list), 0); - gtk_list_select_item(GTK_LIST(matcher.predicate_list), 0); - gtk_entry_set_text(GTK_ENTRY(matcher.header_entry), ""); - gtk_entry_set_text(GTK_ENTRY(matcher.value_entry), ""); -} - -static void prefs_matcher_update_hscrollbar(void) -{ - gint optwidth = gtk_clist_optimal_column_width(GTK_CLIST(matcher.cond_clist), 0); - gtk_clist_set_column_width(GTK_CLIST(matcher.cond_clist), 0, optwidth); -} - -static void prefs_matcher_set_dialog(MatcherList * matchers) -{ - GtkCList *clist = GTK_CLIST(matcher.cond_clist); - GSList * cur; - gboolean bool_op = 1; - - gtk_clist_freeze(clist); - gtk_clist_clear(clist); - - prefs_matcher_clist_set_row(-1, NULL); - if (matchers != NULL) { - for (cur = matchers->matchers ; cur != NULL ; - cur = g_slist_next(cur)) { - MatcherProp * prop; - prop = (MatcherProp *) cur->data; - prefs_matcher_clist_set_row(-1, prop); - } - - bool_op = matchers->bool_and; - } - - prefs_matcher_update_hscrollbar(); - - gtk_clist_thaw(clist); - - gtk_list_select_item(GTK_LIST(matcher.bool_op_list), bool_op); - - prefs_matcher_reset_condition(); -} - -static MatcherList * prefs_matcher_get_list(void) -{ - gchar * matcher_str; - MatcherProp * prop; - gint row = 1; - gchar * tmp; - gboolean bool_and; - GSList * matcher_list; - MatcherList * matchers; - - matcher_list = NULL; - - while (gtk_clist_get_text(GTK_CLIST(matcher.cond_clist), - row, 0, &matcher_str)) { - - if (strcmp(matcher_str, _("(New)")) != 0) { - tmp = matcher_str; - prop = matcherprop_parse(&tmp); - - if (tmp == NULL) - break; - - matcher_list = g_slist_append(matcher_list, prop); - } - row ++; - } - - bool_and = get_sel_from_list(GTK_LIST(matcher.bool_op_list)); - - matchers = matcherlist_new(matcher_list, bool_and); - - return matchers; -} - -static gint prefs_matcher_get_criteria_from_matching(gint matching_id) -{ - switch(matching_id) { - case MATCHING_ALL: - return CRITERIA_ALL; - case MATCHING_NOT_UNREAD: - case MATCHING_UNREAD: - return CRITERIA_UNREAD; - case MATCHING_NOT_NEW: - case MATCHING_NEW: - return CRITERIA_NEW; - case MATCHING_NOT_MARKED: - case MATCHING_MARKED: - return CRITERIA_MARKED; - case MATCHING_NOT_DELETED: - case MATCHING_DELETED: - return CRITERIA_DELETED; - break; - case MATCHING_NOT_REPLIED: - case MATCHING_REPLIED: - return CRITERIA_REPLIED; - case MATCHING_NOT_FORWARDED: - case MATCHING_FORWARDED: - return CRITERIA_FORWARDED; - case MATCHING_NOT_SUBJECT: - case MATCHING_SUBJECT: - return CRITERIA_SUBJECT; - case MATCHING_NOT_FROM: - case MATCHING_FROM: - return CRITERIA_FROM; - case MATCHING_NOT_TO: - case MATCHING_TO: - return CRITERIA_TO; - case MATCHING_NOT_CC: - case MATCHING_CC: - return CRITERIA_CC; - case MATCHING_NOT_NEWSGROUPS: - case MATCHING_NEWSGROUPS: - return CRITERIA_NEWSGROUPS; - case MATCHING_NOT_INREPLYTO: - case MATCHING_INREPLYTO: - return CRITERIA_INREPLYTO; - case MATCHING_NOT_REFERENCES: - case MATCHING_REFERENCES: - return CRITERIA_REFERENCES; - case MATCHING_NOT_TO_AND_NOT_CC: - case MATCHING_TO_OR_CC: - return CRITERIA_TO_OR_CC; - case MATCHING_NOT_BODY_PART: - case MATCHING_BODY_PART: - return CRITERIA_BODY_PART; - case MATCHING_NOT_MESSAGE: - case MATCHING_MESSAGE: - return CRITERIA_MESSAGE; - break; - case MATCHING_NOT_HEADERS_PART: - case MATCHING_HEADERS_PART: - return CRITERIA_HEADERS_PART; - case MATCHING_NOT_HEADER: - case MATCHING_HEADER: - return CRITERIA_HEADER; - case MATCHING_AGE_GREATER: - return CRITERIA_AGE_GREATER; - case MATCHING_AGE_LOWER: - return CRITERIA_AGE_LOWER; - case MATCHING_SCORE_GREATER: - return CRITERIA_SCORE_GREATER; - case MATCHING_SCORE_LOWER: - return CRITERIA_SCORE_LOWER; - case MATCHING_NOT_EXECUTE: - case MATCHING_EXECUTE: - return CRITERIA_EXECUTE; - break; - default: - return -1; - } -} - -static gint prefs_matcher_get_matching_from_criteria(gint criteria_id) -{ - switch (criteria_id) { - case CRITERIA_ALL: - return MATCHING_ALL; - case CRITERIA_UNREAD: - return MATCHING_UNREAD; - case CRITERIA_NEW: - return MATCHING_NEW; - case CRITERIA_MARKED: - return MATCHING_MARKED; - case CRITERIA_DELETED: - return MATCHING_DELETED; - case CRITERIA_REPLIED: - return MATCHING_REPLIED; - case CRITERIA_FORWARDED: - return MATCHING_FORWARDED; - case CRITERIA_SUBJECT: - return MATCHING_SUBJECT; - case CRITERIA_FROM: - return MATCHING_FROM; - case CRITERIA_TO: - return MATCHING_TO; - case CRITERIA_CC: - return MATCHING_CC; - case CRITERIA_TO_OR_CC: - return MATCHING_TO_OR_CC; - case CRITERIA_NEWSGROUPS: - return MATCHING_NEWSGROUPS; - case CRITERIA_INREPLYTO: - return MATCHING_INREPLYTO; - case CRITERIA_REFERENCES: - return MATCHING_REFERENCES; - case CRITERIA_AGE_GREATER: - return MATCHING_AGE_GREATER; - case CRITERIA_AGE_LOWER: - return MATCHING_AGE_LOWER; - case CRITERIA_SCORE_GREATER: - return MATCHING_SCORE_GREATER; - case CRITERIA_SCORE_LOWER: - return MATCHING_SCORE_LOWER; - case CRITERIA_HEADER: - return MATCHING_HEADER; - case CRITERIA_HEADERS_PART: - return MATCHING_HEADERS_PART; - case CRITERIA_BODY_PART: - return MATCHING_BODY_PART; - case CRITERIA_MESSAGE: - return MATCHING_MESSAGE; - case CRITERIA_EXECUTE: - return MATCHING_EXECUTE; - default: - return -1; - } -} - -static gint prefs_matcher_not_criteria(gint matcher_criteria) -{ - switch(matcher_criteria) { - case MATCHING_UNREAD: - return MATCHING_NOT_UNREAD; - case MATCHING_NEW: - return MATCHING_NOT_NEW; - case MATCHING_MARKED: - return MATCHING_NOT_MARKED; - case MATCHING_DELETED: - return MATCHING_NOT_DELETED; - case MATCHING_REPLIED: - return MATCHING_NOT_REPLIED; - case MATCHING_FORWARDED: - return MATCHING_NOT_FORWARDED; - case MATCHING_SUBJECT: - return MATCHING_NOT_SUBJECT; - case MATCHING_FROM: - return MATCHING_NOT_FROM; - case MATCHING_TO: - return MATCHING_NOT_TO; - case MATCHING_CC: - return MATCHING_NOT_CC; - case MATCHING_TO_OR_CC: - return MATCHING_NOT_TO_AND_NOT_CC; - case MATCHING_NEWSGROUPS: - return MATCHING_NOT_NEWSGROUPS; - case MATCHING_INREPLYTO: - return MATCHING_NOT_INREPLYTO; - case MATCHING_REFERENCES: - return MATCHING_NOT_REFERENCES; - case MATCHING_HEADER: - return MATCHING_NOT_HEADER; - case MATCHING_HEADERS_PART: - return MATCHING_NOT_HEADERS_PART; - case MATCHING_MESSAGE: - return MATCHING_NOT_MESSAGE; - case MATCHING_EXECUTE: - return MATCHING_NOT_EXECUTE; - case MATCHING_BODY_PART: - return MATCHING_NOT_BODY_PART; - default: - return matcher_criteria; - } -} - -static MatcherProp * prefs_matcher_dialog_to_matcher() -{ - MatcherProp * matcherprop; - gint criteria; - gint matchtype; - gint value_pred; - gint value_pred_flag; - gint value_criteria; - gboolean use_regexp; - gboolean case_sensitive; - gchar * header; - gchar * expr; - gint value; - gchar * value_str; - - value_criteria = get_sel_from_list(GTK_LIST(matcher.criteria_list)); - - criteria = prefs_matcher_get_matching_from_criteria(value_criteria); - - value_pred = get_sel_from_list(GTK_LIST(matcher.predicate_list)); - value_pred_flag = get_sel_from_list(GTK_LIST(matcher.predicate_flag_list)); - - use_regexp = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(matcher.regexp_chkbtn)); - case_sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(matcher.case_chkbtn)); - - switch (value_criteria) { - case CRITERIA_UNREAD: - case CRITERIA_NEW: - case CRITERIA_MARKED: - case CRITERIA_DELETED: - case CRITERIA_REPLIED: - case CRITERIA_FORWARDED: - if (value_pred_flag == PREDICATE_FLAG_DISABLED) - criteria = prefs_matcher_not_criteria(criteria); - break; - case CRITERIA_SUBJECT: - case CRITERIA_FROM: - case CRITERIA_TO: - case CRITERIA_CC: - case CRITERIA_TO_OR_CC: - case CRITERIA_NEWSGROUPS: - case CRITERIA_INREPLYTO: - case CRITERIA_REFERENCES: - case CRITERIA_HEADERS_PART: - case CRITERIA_BODY_PART: - case CRITERIA_MESSAGE: - case CRITERIA_EXECUTE: - case CRITERIA_AGE_GREATER: - case CRITERIA_AGE_LOWER: - case CRITERIA_HEADER: - if (value_pred == PREDICATE_DOES_NOT_CONTAIN) - criteria = prefs_matcher_not_criteria(criteria); - break; - } - - if (use_regexp) { - if (case_sensitive) - matchtype = MATCHING_REGEXP; - else - matchtype = MATCHING_REGEXPCASE; - } - else { - if (case_sensitive) - matchtype = MATCHING_MATCH; - else - matchtype = MATCHING_MATCHCASE; - } - - header = NULL; - expr = NULL; - value = 0; - - switch (value_criteria) { - case CRITERIA_ALL: - case CRITERIA_UNREAD: - case CRITERIA_NEW: - case CRITERIA_MARKED: - case CRITERIA_DELETED: - case CRITERIA_REPLIED: - case CRITERIA_FORWARDED: - break; - - case CRITERIA_SUBJECT: - case CRITERIA_FROM: - case CRITERIA_TO: - case CRITERIA_CC: - case CRITERIA_TO_OR_CC: - case CRITERIA_NEWSGROUPS: - case CRITERIA_INREPLYTO: - case CRITERIA_REFERENCES: - case CRITERIA_HEADERS_PART: - case CRITERIA_BODY_PART: - case CRITERIA_MESSAGE: - case CRITERIA_EXECUTE: - expr = gtk_entry_get_text(GTK_ENTRY(matcher.value_entry)); - - /* - if (*expr == '\0') { - alertpanel_error(_("Match string is not set.")); - return NULL; - } - */ - break; - - case CRITERIA_AGE_GREATER: - case CRITERIA_AGE_LOWER: - case CRITERIA_SCORE_GREATER: - case CRITERIA_SCORE_LOWER: - value_str = gtk_entry_get_text(GTK_ENTRY(matcher.value_entry)); - - if (*value_str == '\0') { - alertpanel_error(_("Value is not set.")); - return NULL; - } - - value = atoi(value_str); - - break; - - case CRITERIA_HEADER: - - header = gtk_entry_get_text(GTK_ENTRY(matcher.header_entry)); - expr = gtk_entry_get_text(GTK_ENTRY(matcher.value_entry)); - - if (*header == '\0') { - alertpanel_error(_("Header name is not set.")); - return NULL; - } - /* - if (*expr == '\0') { - alertpanel_error(_("Match string is not set.")); - return NULL; - } - */ - break; - } - - matcherprop = matcherprop_new(criteria, header, matchtype, - expr, value); - - return matcherprop; -} - -static void prefs_matcher_register_cb(void) -{ - MatcherProp * matcherprop; - - matcherprop = prefs_matcher_dialog_to_matcher(); - if (matcherprop == NULL) - return; - - prefs_matcher_clist_set_row(-1, matcherprop); - - matcherprop_free(matcherprop); - - prefs_matcher_reset_condition(); - prefs_matcher_update_hscrollbar(); -} - -static void prefs_matcher_substitute_cb(void) -{ - GtkCList *clist = GTK_CLIST(matcher.cond_clist); - gint row; - MatcherProp * matcherprop; - - row = GPOINTER_TO_INT(clist->selection->data); - if (row == 0) - return; - - matcherprop = prefs_matcher_dialog_to_matcher(); - if (matcherprop == NULL) - return; - - prefs_matcher_clist_set_row(row, matcherprop); - - matcherprop_free(matcherprop); - - prefs_matcher_reset_condition(); - - prefs_matcher_update_hscrollbar(); -} - -static void prefs_matcher_delete_cb(void) -{ - GtkCList *clist = GTK_CLIST(matcher.cond_clist); - gint row; - - if (!clist->selection) return; - row = GPOINTER_TO_INT(clist->selection->data); - if (row == 0) - return; - - gtk_clist_remove(clist, row); - - prefs_matcher_update_hscrollbar(); -} - -static void prefs_matcher_up(void) -{ - GtkCList *clist = GTK_CLIST(matcher.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); - if(gtk_clist_row_is_visible(clist, row - 1) != GTK_VISIBILITY_FULL) { - gtk_clist_moveto(clist, row - 1, 0, 0, 0); - } - } -} - -static void prefs_matcher_down(void) -{ - GtkCList *clist = GTK_CLIST(matcher.cond_clist); - gint row; - - if (!clist->selection) return; - - row = GPOINTER_TO_INT(clist->selection->data); - if (row >= 1 && row < clist->rows - 1) { - gtk_clist_row_move(clist, row, row + 1); - if(gtk_clist_row_is_visible(clist, row + 1) != GTK_VISIBILITY_FULL) { - gtk_clist_moveto(clist, row + 1, 0, 1, 0); - } - } -} - -static void prefs_matcher_select(GtkCList *clist, gint row, gint column, - GdkEvent *event) -{ - gchar * matcher_str; - gchar * tmp; - MatcherProp * prop; - gboolean negative_cond; - gint criteria; - - if (!gtk_clist_get_text(GTK_CLIST(matcher.cond_clist), - row, 0, &matcher_str)) - return; - - negative_cond = FALSE; - - if (row == 0) { - prefs_matcher_reset_condition(); - return; - } - - tmp = matcher_str; - prop = matcherprop_parse(&tmp); - if (tmp == NULL) - return; - - criteria = prefs_matcher_get_criteria_from_matching(prop->criteria); - if (criteria != -1) - gtk_list_select_item(GTK_LIST(matcher.criteria_list), - criteria); - - switch(prop->criteria) { - case MATCHING_NOT_UNREAD: - case MATCHING_NOT_NEW: - case MATCHING_NOT_MARKED: - case MATCHING_NOT_DELETED: - case MATCHING_NOT_REPLIED: - case MATCHING_NOT_FORWARDED: - case MATCHING_NOT_SUBJECT: - case MATCHING_NOT_FROM: - case MATCHING_NOT_TO: - case MATCHING_NOT_CC: - case MATCHING_NOT_NEWSGROUPS: - case MATCHING_NOT_INREPLYTO: - case MATCHING_NOT_REFERENCES: - case MATCHING_NOT_TO_AND_NOT_CC: - case MATCHING_NOT_BODY_PART: - case MATCHING_NOT_MESSAGE: - case MATCHING_NOT_HEADERS_PART: - case MATCHING_NOT_HEADER: - negative_cond = TRUE; - break; - } - - switch(prop->criteria) { - case MATCHING_ALL: - break; - - case MATCHING_NOT_SUBJECT: - case MATCHING_NOT_FROM: - case MATCHING_NOT_TO: - case MATCHING_NOT_CC: - case MATCHING_NOT_TO_AND_NOT_CC: - case MATCHING_NOT_NEWSGROUPS: - case MATCHING_NOT_INREPLYTO: - case MATCHING_NOT_REFERENCES: - case MATCHING_NOT_HEADERS_PART: - case MATCHING_NOT_BODY_PART: - case MATCHING_NOT_MESSAGE: - case MATCHING_SUBJECT: - case MATCHING_FROM: - case MATCHING_TO: - case MATCHING_CC: - case MATCHING_TO_OR_CC: - case MATCHING_NEWSGROUPS: - case MATCHING_INREPLYTO: - case MATCHING_REFERENCES: - case MATCHING_HEADERS_PART: - case MATCHING_BODY_PART: - case MATCHING_MESSAGE: - gtk_entry_set_text(GTK_ENTRY(matcher.value_entry), prop->expr); - break; - - case MATCHING_AGE_GREATER: - case MATCHING_AGE_LOWER: - case MATCHING_SCORE_GREATER: - case MATCHING_SCORE_LOWER: - gtk_entry_set_text(GTK_ENTRY(matcher.value_entry), itos(prop->value)); - break; - - case MATCHING_NOT_HEADER: - case MATCHING_HEADER: - gtk_entry_set_text(GTK_ENTRY(matcher.header_entry), prop->header); - gtk_entry_set_text(GTK_ENTRY(matcher.value_entry), prop->expr); - break; - } - - if (negative_cond) - gtk_list_select_item(GTK_LIST(matcher.predicate_list), 1); - else - gtk_list_select_item(GTK_LIST(matcher.predicate_list), 0); - - switch(prop->matchtype) { - case MATCHING_MATCH: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_chkbtn), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_chkbtn), TRUE); - break; - - case MATCHING_MATCHCASE: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_chkbtn), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_chkbtn), FALSE); - break; - - case MATCHING_REGEXP: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_chkbtn), TRUE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_chkbtn), TRUE); - break; - - case MATCHING_REGEXPCASE: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_chkbtn), TRUE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_chkbtn), FALSE); - break; - } -} - -static void prefs_matcher_criteria_select(GtkList *list, - GtkWidget *widget, - gpointer user_data) -{ - gint value; - - value = get_sel_from_list(GTK_LIST(matcher.criteria_list)); - - switch (value) { - case CRITERIA_ALL: - gtk_widget_set_sensitive(matcher.header_combo, FALSE); - gtk_widget_set_sensitive(matcher.header_label, FALSE); - gtk_widget_set_sensitive(matcher.value_label, FALSE); - gtk_widget_set_sensitive(matcher.value_entry, FALSE); - gtk_widget_set_sensitive(matcher.predicate_label, FALSE); - gtk_widget_set_sensitive(matcher.predicate_combo, FALSE); - gtk_widget_set_sensitive(matcher.predicate_flag_combo, FALSE); - gtk_widget_hide(matcher.predicate_combo); - gtk_widget_show(matcher.predicate_flag_combo); - gtk_widget_set_sensitive(matcher.case_chkbtn, FALSE); - gtk_widget_set_sensitive(matcher.regexp_chkbtn, FALSE); - gtk_widget_set_sensitive(matcher.exec_btn, FALSE); - break; - - case CRITERIA_UNREAD: - case CRITERIA_NEW: - case CRITERIA_MARKED: - case CRITERIA_DELETED: - case CRITERIA_REPLIED: - case CRITERIA_FORWARDED: - gtk_widget_set_sensitive(matcher.header_combo, FALSE); - gtk_widget_set_sensitive(matcher.header_label, FALSE); - gtk_widget_set_sensitive(matcher.value_label, FALSE); - gtk_widget_set_sensitive(matcher.value_entry, FALSE); - gtk_widget_set_sensitive(matcher.predicate_label, TRUE); - gtk_widget_set_sensitive(matcher.predicate_combo, FALSE); - gtk_widget_set_sensitive(matcher.predicate_flag_combo, TRUE); - gtk_widget_hide(matcher.predicate_combo); - gtk_widget_show(matcher.predicate_flag_combo); - gtk_widget_set_sensitive(matcher.case_chkbtn, FALSE); - gtk_widget_set_sensitive(matcher.regexp_chkbtn, FALSE); - gtk_widget_set_sensitive(matcher.exec_btn, FALSE); - break; - - case CRITERIA_SUBJECT: - case CRITERIA_FROM: - case CRITERIA_TO: - case CRITERIA_CC: - case CRITERIA_TO_OR_CC: - case CRITERIA_NEWSGROUPS: - case CRITERIA_INREPLYTO: - case CRITERIA_REFERENCES: - case CRITERIA_HEADERS_PART: - case CRITERIA_BODY_PART: - case CRITERIA_MESSAGE: - gtk_widget_set_sensitive(matcher.header_combo, FALSE); - gtk_widget_set_sensitive(matcher.header_label, FALSE); - gtk_widget_set_sensitive(matcher.value_label, TRUE); - gtk_widget_set_sensitive(matcher.value_entry, TRUE); - gtk_widget_set_sensitive(matcher.predicate_label, TRUE); - gtk_widget_set_sensitive(matcher.predicate_combo, TRUE); - gtk_widget_set_sensitive(matcher.predicate_flag_combo, FALSE); - gtk_widget_show(matcher.predicate_combo); - gtk_widget_hide(matcher.predicate_flag_combo); - gtk_widget_set_sensitive(matcher.case_chkbtn, TRUE); - gtk_widget_set_sensitive(matcher.regexp_chkbtn, TRUE); - gtk_widget_set_sensitive(matcher.exec_btn, FALSE); - break; - - case CRITERIA_EXECUTE: - gtk_widget_set_sensitive(matcher.header_combo, FALSE); - gtk_widget_set_sensitive(matcher.header_label, FALSE); - gtk_widget_set_sensitive(matcher.value_label, TRUE); - gtk_widget_set_sensitive(matcher.value_entry, TRUE); - gtk_widget_set_sensitive(matcher.predicate_label, TRUE); - gtk_widget_set_sensitive(matcher.predicate_combo, FALSE); - gtk_widget_set_sensitive(matcher.predicate_flag_combo, TRUE); - gtk_widget_hide(matcher.predicate_combo); - gtk_widget_show(matcher.predicate_flag_combo); - gtk_widget_set_sensitive(matcher.case_chkbtn, FALSE); - gtk_widget_set_sensitive(matcher.regexp_chkbtn, FALSE); - gtk_widget_set_sensitive(matcher.exec_btn, TRUE); - break; - - case CRITERIA_AGE_GREATER: - case CRITERIA_AGE_LOWER: - case CRITERIA_SCORE_GREATER: - case CRITERIA_SCORE_LOWER: - gtk_widget_set_sensitive(matcher.header_combo, FALSE); - gtk_widget_set_sensitive(matcher.header_label, FALSE); - gtk_widget_set_sensitive(matcher.value_label, TRUE); - gtk_widget_set_sensitive(matcher.value_entry, TRUE); - gtk_widget_set_sensitive(matcher.predicate_label, FALSE); - gtk_widget_set_sensitive(matcher.predicate_combo, FALSE); - gtk_widget_set_sensitive(matcher.predicate_flag_combo, FALSE); - gtk_widget_show(matcher.predicate_combo); - gtk_widget_hide(matcher.predicate_flag_combo); - gtk_widget_set_sensitive(matcher.case_chkbtn, FALSE); - gtk_widget_set_sensitive(matcher.regexp_chkbtn, FALSE); - gtk_widget_set_sensitive(matcher.exec_btn, FALSE); - break; - - case CRITERIA_HEADER: - gtk_widget_set_sensitive(matcher.header_combo, TRUE); - gtk_widget_set_sensitive(matcher.header_label, TRUE); - gtk_widget_set_sensitive(matcher.value_label, TRUE); - gtk_widget_set_sensitive(matcher.value_entry, TRUE); - gtk_widget_set_sensitive(matcher.predicate_label, TRUE); - gtk_widget_set_sensitive(matcher.predicate_combo, TRUE); - gtk_widget_set_sensitive(matcher.predicate_flag_combo, FALSE); - gtk_widget_show(matcher.predicate_combo); - gtk_widget_hide(matcher.predicate_flag_combo); - gtk_widget_set_sensitive(matcher.case_chkbtn, TRUE); - gtk_widget_set_sensitive(matcher.regexp_chkbtn, TRUE); - gtk_widget_set_sensitive(matcher.exec_btn, FALSE); - break; - } -} - -static void prefs_matcher_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) -{ - if (event && event->keyval == GDK_Escape) - prefs_matcher_cancel(); -} - -static void prefs_matcher_cancel(void) -{ - gtk_widget_hide(matcher.window); -} - -static void prefs_matcher_ok(void) -{ - MatcherList * matchers; - - matchers = prefs_matcher_get_list(); - if (matchers != NULL) { - gtk_widget_hide(matcher.window); - if (matchers_callback != NULL) - matchers_callback(matchers); - matcherlist_free(matchers); - } - else { - gtk_widget_hide(matcher.window); - } -} - -static gint prefs_matcher_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - prefs_matcher_cancel(); - return TRUE; -} - -static GtkWidget * exec_info_win; - -void prefs_matcher_exec_info(void) -{ - if (!exec_info_win) - prefs_matcher_exec_info_create(); - - gtk_widget_show(exec_info_win); - gtk_main(); - gtk_widget_hide(exec_info_win); -} - -static void prefs_matcher_exec_info_create(void) -{ - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *hbbox; - GtkWidget *label; - GtkWidget *ok_btn; - - exec_info_win = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_window_set_title(GTK_WINDOW(exec_info_win), - _("Description of symbols")); - gtk_container_set_border_width(GTK_CONTAINER(exec_info_win), 8); - gtk_window_set_position(GTK_WINDOW(exec_info_win), GTK_WIN_POS_CENTER); - gtk_window_set_modal(GTK_WINDOW(exec_info_win), TRUE); - gtk_window_set_policy(GTK_WINDOW(exec_info_win), FALSE, TRUE, FALSE); - - vbox = gtk_vbox_new(FALSE, 8); - gtk_container_add(GTK_CONTAINER(exec_info_win), vbox); - - hbox = gtk_hbox_new(FALSE, 4); - gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); - - label = gtk_label_new - ("%%:\n" - "%s:\n" - "%f:\n" - "%t:\n" - "%c:\n" - "%d:\n" - "%i:\n" - "%n:\n" - "%r:\n" - "%F:\n" - "\\n:\n" - "\\:\n" - "\\\":\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 - (_("%\n" - "Subject\n" - "From\n" - "To\n" - "Cc\n" - "Date\n" - "Message-ID\n" - "Newsgroups\n" - "References\n" - "Filename - should not be modified\n" - "new line\n" - "escape character for quotes\n" - "quote character\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(exec_info_win), "delete_event", - GTK_SIGNAL_FUNC(gtk_main_quit), NULL); - - gtk_widget_show_all(vbox); -} diff --git a/src/prefs_matcher.h b/src/prefs_matcher.h deleted file mode 100644 index 6ec7ea7ab..000000000 --- a/src/prefs_matcher.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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_MATCHER_H__ -#define __PREFS_MATCHER_H__ - -#include "matcher.h" - -/* -void prefs_matcher_read_config (void); -void prefs_matcher_write_config (void); -*/ - -typedef void PrefsMatcherSignal(MatcherList * matchers); - -void prefs_matcher_open (MatcherList * matchers, - PrefsMatcherSignal * cb); -void prefs_matcher_exec_info(void); - -#endif /* __PREFS_FILTER_H__ */ diff --git a/src/prefs_scoring.c b/src/prefs_scoring.c deleted file mode 100644 index ef1296e84..000000000 --- a/src/prefs_scoring.c +++ /dev/null @@ -1,760 +0,0 @@ -/* - * 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_matcher.h" -#include "prefs_scoring.h" -#include "prefs_common.h" -#include "mainwindow.h" -#include "foldersel.h" -#include "manage_window.h" -#include "inc.h" -#include "utils.h" -#include "gtkutils.h" -#include "alertpanel.h" -#include "folder.h" -#include "scoring.h" - -static struct Scoring { - GtkWidget *window; - - GtkWidget *ok_btn; - GtkWidget *cond_entry; - GtkWidget *score_entry; - GtkWidget *kill_score_label; - GtkWidget *kill_score_entry; - GtkWidget *important_score_entry; - - GtkWidget *cond_clist; -} scoring; - -/* - 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_scoring_create (void); - -static void prefs_scoring_set_dialog (ScoringProp * prop); -static void prefs_scoring_set_list (void); - -/* callback functions */ -/* static void prefs_scoring_select_dest_cb (void); */ -static void prefs_scoring_register_cb (void); -static void prefs_scoring_substitute_cb (void); -static void prefs_scoring_delete_cb (void); -static void prefs_scoring_up (void); -static void prefs_scoring_down (void); -static void prefs_scoring_select (GtkCList *clist, - gint row, - gint column, - GdkEvent *event); - -static gint prefs_scoring_deleted (GtkWidget *widget, - GdkEventAny *event, - gpointer data); -static void prefs_scoring_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer data); -static void prefs_scoring_cancel (void); -static void prefs_scoring_ok (void); - -static void prefs_scoring_condition_define (void); -static gint prefs_scoring_clist_set_row(gint row, ScoringProp * prop); -static void prefs_scoring_select_set_dialog(ScoringProp * prop); -static void prefs_scoring_reset_dialog(void); - - -static FolderItem * cur_item = NULL; -static gint cur_important_score; -static gint cur_kill_score; - -void prefs_scoring_open(FolderItem * item) -{ - if (prefs_rc_is_readonly(SCORING_RC)) - return; - - inc_autocheck_timer_remove(); - - if (!scoring.window) { - prefs_scoring_create(); - } - - manage_window_set_transient(GTK_WINDOW(scoring.window)); - gtk_widget_grab_focus(scoring.ok_btn); - - cur_item = item; - - prefs_scoring_set_dialog(NULL); - - gtk_widget_show(scoring.window); -} - -void prefs_scoring_open_with_scoring(ScoringProp * prop) -{ - inc_autocheck_timer_remove(); - - if (!scoring.window) { - prefs_scoring_create(); - } - - manage_window_set_transient(GTK_WINDOW(scoring.window)); - gtk_widget_grab_focus(scoring.ok_btn); - - prefs_scoring_set_dialog(prop); - - gtk_widget_show(scoring.window); -} - -static void prefs_scoring_create(void) -{ - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *ok_btn; - GtkWidget *cancel_btn; - GtkWidget *confirm_area; - - GtkWidget *vbox1; - GtkWidget *hbox1; - GtkWidget *reg_hbox; - GtkWidget *arrow; - GtkWidget *btn_hbox; - - GtkWidget *cond_label; - GtkWidget *cond_entry; - GtkWidget *cond_btn; - GtkWidget *score_label; - GtkWidget *score_entry; - - 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; - - GtkWidget *important_score_entry; - GtkWidget *kill_score_entry; - GtkWidget *kill_score_label; - - gchar *title[] = {_("Registered rules")}; - - debug_print(_("Creating scoring 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, &ok_btn, _("OK"), - &cancel_btn, _("Cancel"), NULL, NULL); - gtk_widget_show (confirm_area); - gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); - gtk_widget_grab_default (ok_btn); - - gtk_window_set_title (GTK_WINDOW(window), - _("Scoring setting")); - gtk_signal_connect (GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(prefs_scoring_deleted), NULL); - gtk_signal_connect (GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(prefs_scoring_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(ok_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_scoring_ok), NULL); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC(prefs_scoring_cancel), 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); - - cond_label = gtk_label_new (_("Condition")); - gtk_widget_show (cond_label); - gtk_misc_set_alignment (GTK_MISC (cond_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (vbox1), cond_label, FALSE, FALSE, 0); - - hbox1 = gtk_hbox_new (FALSE, VSPACING); - gtk_widget_show (vbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2); - - cond_entry = gtk_entry_new (); - gtk_widget_show (cond_entry); - gtk_widget_set_usize (cond_entry, 300, -1); - gtk_box_pack_start (GTK_BOX (hbox1), cond_entry, TRUE, TRUE, 0); - - cond_btn = gtk_button_new_with_label (_("Define ...")); - gtk_widget_show (cond_btn); - gtk_box_pack_start (GTK_BOX (hbox1), cond_btn, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (cond_btn), "clicked", - GTK_SIGNAL_FUNC (prefs_scoring_condition_define), - NULL); - - hbox1 = gtk_hbox_new (FALSE, VSPACING); - gtk_widget_show (vbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2); - - score_label = gtk_label_new (_("Score")); - gtk_widget_show (score_label); - gtk_misc_set_alignment (GTK_MISC (score_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox1), score_label, FALSE, FALSE, 0); - - score_entry = gtk_entry_new (); - gtk_widget_show (score_entry); - gtk_widget_set_usize (score_entry, 50, -1); - gtk_box_pack_start (GTK_BOX (hbox1), score_entry, FALSE, FALSE, 0); - - /* 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_scoring_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_scoring_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_scoring_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_scoring_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_scoring_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_scoring_down), NULL); - - hbox1 = gtk_hbox_new (FALSE, 8); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0); - - kill_score_label = gtk_label_new (_("Kill score")); - gtk_widget_show (kill_score_label); - gtk_misc_set_alignment (GTK_MISC (kill_score_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox1), kill_score_label, - FALSE, FALSE, 0); - - kill_score_entry = gtk_entry_new (); - gtk_widget_show (kill_score_entry); - gtk_widget_set_usize (kill_score_entry, 50, -1); - gtk_box_pack_start (GTK_BOX (hbox1), kill_score_entry, - FALSE, FALSE, 0); - - score_label = gtk_label_new (_("Important score")); - gtk_widget_show (score_label); - gtk_misc_set_alignment (GTK_MISC (score_label), 0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox1), score_label, FALSE, FALSE, 0); - - important_score_entry = gtk_entry_new (); - gtk_widget_show (important_score_entry); - gtk_widget_set_usize (important_score_entry, 50, -1); - gtk_box_pack_start (GTK_BOX (hbox1), important_score_entry, - FALSE, FALSE, 0); - - gtk_widget_show_all(window); - - scoring.window = window; - scoring.ok_btn = ok_btn; - - scoring.cond_entry = cond_entry; - scoring.score_entry = score_entry; - scoring.kill_score_entry = kill_score_entry; - scoring.kill_score_label = kill_score_label; - scoring.important_score_entry = important_score_entry; - - scoring.cond_clist = cond_clist; -} - -static void prefs_scoring_set_dialog(ScoringProp * cond) -{ - GtkCList *clist = GTK_CLIST(scoring.cond_clist); - GSList *cur; - GSList * prefs_scoring; - gchar * score_str; - - if (cond == NULL) - prefs_scoring_reset_dialog(); - else - prefs_scoring_select_set_dialog(cond); - - gtk_clist_freeze(clist); - gtk_clist_clear(clist); - - prefs_scoring_clist_set_row(-1, NULL); - if (cur_item == NULL) { - prefs_scoring = global_scoring; - cur_kill_score = prefs_common.kill_score; - cur_important_score = prefs_common.important_score; - gtk_widget_show(scoring.kill_score_label); - gtk_widget_show(scoring.kill_score_entry); - } - else { - prefs_scoring = cur_item->prefs->scoring; - cur_kill_score = cur_item->prefs->kill_score; - cur_important_score = cur_item->prefs->important_score; - if (cur_item->folder->type != F_NEWS) { - gtk_widget_hide(scoring.kill_score_label); - gtk_widget_hide(scoring.kill_score_entry); - } - else { - gtk_widget_show(scoring.kill_score_label); - gtk_widget_show(scoring.kill_score_entry); - } - } - - for(cur = prefs_scoring ; cur != NULL ; - cur = g_slist_next(cur)) { - ScoringProp * prop = (ScoringProp *) cur->data; - - prefs_scoring_clist_set_row(-1, prop); - } - - score_str = itos(cur_kill_score); - gtk_entry_set_text(GTK_ENTRY(scoring.kill_score_entry), - score_str); - score_str = itos(cur_important_score); - gtk_entry_set_text(GTK_ENTRY(scoring.important_score_entry), - score_str); - - gtk_clist_thaw(clist); -} - -static void prefs_scoring_reset_dialog(void) -{ - gtk_entry_set_text(GTK_ENTRY(scoring.cond_entry), ""); - gtk_entry_set_text(GTK_ENTRY(scoring.score_entry), ""); -} - -static void prefs_scoring_set_list(void) -{ - gint row = 1; - ScoringProp *prop; - GSList * cur; - gchar * scoring_str; - gchar * tmp; - GSList * prefs_scoring; - - if (cur_item == NULL) - prefs_scoring = global_scoring; - else - prefs_scoring = cur_item->prefs->scoring; - - for(cur = prefs_scoring ; cur != NULL ; - cur = g_slist_next(cur)) - scoringprop_free((ScoringProp *) cur->data); - g_slist_free(prefs_scoring); - prefs_scoring = NULL; - - while (gtk_clist_get_text(GTK_CLIST(scoring.cond_clist), - row, 0, &scoring_str)) { - if (strcmp(scoring_str, _("(New)")) != 0) { - tmp = scoring_str; - prop = scoringprop_parse(&tmp); - if (prop != NULL) - prefs_scoring = g_slist_append(prefs_scoring, - prop); - } - row++; - } - - cur_kill_score = atoi(gtk_entry_get_text(GTK_ENTRY(scoring.kill_score_entry))); - cur_important_score = atoi(gtk_entry_get_text(GTK_ENTRY(scoring.important_score_entry))); - - if (cur_item == NULL) { - global_scoring = prefs_scoring; - prefs_common.kill_score = cur_kill_score; - prefs_common.important_score = cur_important_score; - } - else { - cur_item->prefs->scoring = prefs_scoring; - cur_item->prefs->kill_score = cur_kill_score; - cur_item->prefs->important_score = cur_important_score; - } -} - -static gint prefs_scoring_clist_set_row(gint row, ScoringProp * prop) -{ - GtkCList *clist = GTK_CLIST(scoring.cond_clist); - gchar * str; - gchar *cond_str[1]; - - if (prop == NULL) { - cond_str[0] = _("(New)"); - return gtk_clist_append(clist, cond_str); - } - - str = scoringprop_to_string(prop); - if (str == NULL) { - return -1; - } - cond_str[0] = str; - - if (row < 0) - row = gtk_clist_append(clist, cond_str); - else - gtk_clist_set_text(clist, row, 0, cond_str[0]); - g_free(str); - - return row; -} - -static void prefs_scoring_condition_define_done(MatcherList * matchers) -{ - gchar * str; - - if (matchers == NULL) - return; - - str = matcherlist_to_string(matchers); - - if (str != NULL) { - gtk_entry_set_text(GTK_ENTRY(scoring.cond_entry), str); - g_free(str); - } -} - -static void prefs_scoring_condition_define(void) -{ - gchar * cond_str; - MatcherList * matchers = NULL; - - cond_str = gtk_entry_get_text(GTK_ENTRY(scoring.cond_entry)); - - if (*cond_str != '\0') { - gchar * tmp; - - tmp = cond_str; - matchers = matcherlist_parse(&tmp); - if (tmp == NULL) - alertpanel_error(_("Match string is not valid.")); - } - - prefs_matcher_open(matchers, prefs_scoring_condition_define_done); - - if (matchers != NULL) - matcherlist_free(matchers); -} - - -/* register / substitute delete buttons */ - -static void prefs_scoring_register_cb(void) -{ - MatcherList * cond; - gchar * cond_str; - gchar * score_str; - ScoringProp * prop; - gint score; - gchar * tmp; - - cond_str = gtk_entry_get_text(GTK_ENTRY(scoring.cond_entry)); - if (*cond_str == '\0') { - alertpanel_error(_("Score is not set.")); - return; - } - - score_str = gtk_entry_get_text(GTK_ENTRY(scoring.score_entry)); - if (*score_str == '\0') { - alertpanel_error(_("Match string is not set.")); - return; - } - - score = atoi(score_str); - tmp = cond_str; - cond = matcherlist_parse(&tmp); - - if (tmp == NULL) { - alertpanel_error(_("Match string is not valid.")); - return; - } - - prop = scoringprop_new(cond, score); - - prefs_scoring_clist_set_row(-1, prop); - - scoringprop_free(prop); - - prefs_scoring_reset_dialog(); -} - -static void prefs_scoring_substitute_cb(void) -{ - GtkCList *clist = GTK_CLIST(scoring.cond_clist); - gint row; - MatcherList * cond; - gchar * cond_str; - gchar * score_str; - ScoringProp * prop; - gint score; - gchar * tmp; - - if (!clist->selection) return; - - row = GPOINTER_TO_INT(clist->selection->data); - if (row == 0) return; - - cond_str = gtk_entry_get_text(GTK_ENTRY(scoring.cond_entry)); - if (*cond_str == '\0') { - alertpanel_error(_("Score is not set.")); - return; - } - - score_str = gtk_entry_get_text(GTK_ENTRY(scoring.score_entry)); - if (*score_str == '\0') { - alertpanel_error(_("Match string is not set.")); - return; - } - - score = atoi(score_str); - tmp = cond_str; - cond = matcherlist_parse(&tmp); - - if (tmp == NULL) { - alertpanel_error(_("Match string is not valid.")); - return; - } - - prop = scoringprop_new(cond, score); - - prefs_scoring_clist_set_row(row, prop); - - scoringprop_free(prop); - - prefs_scoring_reset_dialog(); -} - -static void prefs_scoring_delete_cb(void) -{ - GtkCList *clist = GTK_CLIST(scoring.cond_clist); - 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; - - gtk_clist_remove(clist, row); -} - -static void prefs_scoring_up(void) -{ - GtkCList *clist = GTK_CLIST(scoring.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); - if(gtk_clist_row_is_visible(clist, row - 1) != GTK_VISIBILITY_FULL) { - gtk_clist_moveto(clist, row - 1, 0, 0, 0); - } - } -} - -static void prefs_scoring_down(void) -{ - GtkCList *clist = GTK_CLIST(scoring.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); - if(gtk_clist_row_is_visible(clist, row + 1) != GTK_VISIBILITY_FULL) { - gtk_clist_moveto(clist, row + 1, 0, 1, 0); - } - } -} - -static void prefs_scoring_select_set_dialog(ScoringProp * prop) -{ - gchar * matcher_str; - gchar * score_str; - - if (prop == NULL) - return; - - matcher_str = matcherlist_to_string(prop->matchers); - if (matcher_str == NULL) { - scoringprop_free(prop); - return; - } - - score_str = itos(prop->score); - - gtk_entry_set_text(GTK_ENTRY(scoring.cond_entry), matcher_str); - gtk_entry_set_text(GTK_ENTRY(scoring.score_entry), score_str); - - g_free(matcher_str); -} - -static void prefs_scoring_select(GtkCList *clist, gint row, gint column, - GdkEvent *event) -{ - ScoringProp * prop; - gchar * tmp; - - gchar * scoring_str; - - if (row == 0) { - prefs_scoring_reset_dialog(); - return; - } - - if (!gtk_clist_get_text(GTK_CLIST(scoring.cond_clist), - row, 0, &scoring_str)) - return; - - tmp = scoring_str; - prop = scoringprop_parse(&tmp); - if (tmp == NULL) - return; - - prefs_scoring_select_set_dialog(prop); - - scoringprop_free(prop); -} - -static gint prefs_scoring_deleted(GtkWidget *widget, GdkEventAny *event, - gpointer data) -{ - prefs_scoring_cancel(); - return TRUE; -} - -static void prefs_scoring_key_pressed(GtkWidget *widget, GdkEventKey *event, - gpointer data) -{ - if (event && event->keyval == GDK_Escape) - prefs_scoring_cancel(); -} - -static void prefs_scoring_ok(void) -{ - prefs_scoring_set_list(); - prefs_scoring_write_config(); - if (cur_item != NULL) - prefs_folder_item_save_config(cur_item); - gtk_widget_hide(scoring.window); -} - -static void prefs_scoring_cancel(void) -{ - prefs_scoring_read_config(); - gtk_widget_hide(scoring.window); -} diff --git a/src/prefs_scoring.h b/src/prefs_scoring.h deleted file mode 100644 index 92d6dea73..000000000 --- a/src/prefs_scoring.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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_SCORING_H__ -#define __PREFS_SCORING_H__ - -#include "scoring.h" - -/* -void prefs_scoring_read_config (void); -void prefs_scoring_write_config (void); -*/ -void prefs_scoring_open(FolderItem * item); - /* -void prefs_scoring_open (void); - */ -void prefs_scoring_open_with_scoring(ScoringProp * prop); - -#endif /* __PREFS_SCORING_H__ */ diff --git a/src/procheader.c b/src/procheader.c deleted file mode 100644 index bf31661d8..000000000 --- a/src/procheader.c +++ /dev/null @@ -1,781 +0,0 @@ -/* - * 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 <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 "prefs_common.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_from_file(const gchar *file) -{ - FILE *fp; - GSList *hlist; - - if ((fp = fopen(file, "r")) == NULL) { - FILE_OP_ERROR(file, "fopen"); - return NULL; - } - - hlist = procheader_get_header_list(fp); - - fclose(fp); - return hlist; -} - -GSList *procheader_get_header_list(FILE *fp) -{ - gchar buf[BUFFSIZE], tmp[BUFFSIZE]; - gchar *p; - GSList *hlist = NULL; - Header *header; - - g_return_val_if_fail(fp != NULL, NULL); - - while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) { - if (header = procheader_parse_header(buf)) - hlist = g_slist_append(hlist, header); - /* - 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; - } - } - */ - } - - return hlist; -} - -GPtrArray *procheader_get_header_array(FILE *fp) -{ - gchar buf[BUFFSIZE], tmp[BUFFSIZE]; - gchar *p; - GPtrArray *headers; - Header *header; - - g_return_val_if_fail(fp != NULL, NULL); - - headers = g_ptr_array_new(); - - while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) { - if (header = procheader_parse_header(buf)) - g_ptr_array_add(headers, header); - /* - 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); - - g_ptr_array_add(headers, header); - break; - } - } - */ - } - - return headers; -} - -GPtrArray *procheader_get_header_array_asis(FILE *fp) -{ - gchar buf[BUFFSIZE], tmp[BUFFSIZE]; - gchar *p; - GPtrArray *headers; - Header *header; - - g_return_val_if_fail(fp != NULL, NULL); - - headers = g_ptr_array_new(); - - while (procheader_get_one_field(buf, sizeof(buf), fp, NULL) != -1) { - if (header = procheader_parse_header(buf)) - g_ptr_array_add(headers, header); - /* - if (*buf == ':') continue; - for (p = buf; *p && *p != ' '; p++) { - if (*p == ':') { - header = g_new(Header, 1); - header->name = g_strndup(buf, p - buf); - p++; - conv_unmime_header(tmp, sizeof(tmp), p, NULL); - header->body = g_strdup(tmp); - - g_ptr_array_add(headers, header); - break; - } - } - */ - } - - return headers; -} - -void procheader_header_list_destroy(GSList *hlist) -{ - Header *header; - - while (hlist != NULL) { - header = hlist->data; - procheader_header_free(header); - hlist = g_slist_remove(hlist, header); - } -} - -void procheader_header_array_destroy(GPtrArray *harray) -{ - gint i; - Header *header; - - for (i = 0; i < harray->len; i++) { - header = g_ptr_array_index(harray, i); - procheader_header_free(header); - } - - g_ptr_array_free(harray, TRUE); -} - -void procheader_header_free(Header *header) -{ - if (!header) return; - - g_free(header->name); - g_free(header->body); - g_free(header); -} - -/* - tests whether two headers' names are equal - remove the trailing ':' or ' ' before comparing -*/ - -gboolean procheader_headername_equal(char * hdr1, char * hdr2) -{ - int len1; - int len2; - - len1 = strlen(hdr1); - len2 = strlen(hdr2); - if (hdr1[len1 - 1] == ':') - len1--; - if (hdr2[len2 - 1] == ':') - len2--; - if (len1 != len2) - return 0; - - return (g_strncasecmp(hdr1, hdr2, len1) == 0); -} - -/* - parse headers, for example : - From: dinh@enseirb.fr becomes : - header->name = "From:" - header->body = "dinh@enseirb.fr" - */ - -Header * procheader_parse_header(gchar * buf) -{ - gchar tmp[BUFFSIZE]; - gchar *p = buf; - Header * header; - - if ((*buf == ':') || (*buf == ' ')) - return NULL; - - for (p = buf; *p ; p++) { - if ((*p == ':') || (*p == ' ')) { - header = g_new(Header, 1); - header->name = g_strndup(buf, p - buf + 1); - p++; - while (*p == ' ' || *p == '\t') p++; - conv_unmime_header(tmp, sizeof(tmp), p, NULL); - header->body = g_strdup(tmp); - return header; - } - } - return NULL; -} - -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 (procheader_headername_equal(hp->name, "To") || - procheader_headername_equal(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_CC = 3, - H_NEWSGROUPS = 4, - H_SUBJECT = 5, - H_MSG_ID = 6, - H_REFERENCES = 7, - H_IN_REPLY_TO = 8, - H_CONTENT_TYPE = 9, - H_SEEN = 10, - H_STATUS = 11, - H_X_STATUS = 12, - H_FROM_SPACE = 13, - H_X_FACE = 14, - H_DISPOSITION_NOTIFICATION_TO = 15, - H_RETURN_RECEIPT_TO = 16 -}; - -MsgInfo *procheader_parse(const gchar *file, MsgFlags flags, gboolean full) -{ - FILE *fp; - MsgInfo *msginfo; - - if ((fp = fopen(file, "r")) == NULL) { - FILE_OP_ERROR(file, "fopen"); - return NULL; - } - - msginfo = procheader_file_parse(fp, flags, full); - - fclose(fp); - - return msginfo; -} - - -/* FIXME: we should not allow headers in messages to change the sylpheed marks - * so we're currently disabling setting any MsgFlags when detecting X-Seen, - * Seen, X-Status, Status. See macro ALLOW_HEADER_HINT */ - -#define ALLOW_HEADER_HINT - -MsgInfo *procheader_file_parse(FILE * fp, MsgFlags flags, - gboolean full) -{ - static HeaderEntry hentry_full[] = {{"Date:", NULL, FALSE}, - {"From:", NULL, TRUE}, - {"To:", NULL, TRUE}, - {"Cc:", 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}, - {"Status:", NULL, FALSE}, - {"X-Status:", NULL, FALSE}, - {"From ", NULL, FALSE}, - {"X-Face:", NULL, FALSE}, - {"Disposition-Notification-To:", NULL, FALSE}, - {"Return-Receipt-To:", NULL, FALSE}, - {NULL, NULL, FALSE}}; - - static HeaderEntry hentry_short[] = {{"Date:", NULL, FALSE}, - {"From:", NULL, TRUE}, - {"To:", NULL, TRUE}, - {"Cc:", 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}, - {"Status:", NULL, FALSE}, - {"X-Status:", NULL, FALSE}, - {"From ", NULL, FALSE}, - {NULL, NULL, FALSE}}; - - 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 (MSG_IS_QUEUED(flags)) { - while (fgets(buf, sizeof(buf), fp) != NULL) - if (buf[0] == '\r' || buf[0] == '\n') break; - } - - msginfo = g_new0(MsgInfo, 1); - - if (flags.tmp_flags || flags.perm_flags) - msginfo->flags = flags; - else - MSG_SET_PERM_FLAGS(msginfo->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_CC: - conv_unmime_header(tmp, sizeof(tmp), hp, NULL); - if (msginfo->cc) { - p = msginfo->cc; - msginfo->cc = - g_strconcat(p, ", ", tmp, NULL); - g_free(p); - } else - msginfo->cc = 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) { - msginfo->references = g_strdup(hp); - 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)) - MSG_SET_TMP_FLAGS(msginfo->flags, MSG_MIME); - break; -#ifdef ALLOW_HEADER_HINT - case H_SEEN: - /* mnews Seen header */ - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW|MSG_UNREAD); - break; -#endif - case H_X_FACE: - if (msginfo->xface) break; - msginfo->xface = g_strdup(hp); - break; - case H_DISPOSITION_NOTIFICATION_TO: - if (msginfo->dispositionnotificationto) break; - msginfo->dispositionnotificationto = g_strdup(hp); - break; - case H_RETURN_RECEIPT_TO: - if (msginfo->returnreceiptto) break; - msginfo->returnreceiptto = g_strdup(hp); - break; -#ifdef ALLOW_HEADER_HINT - case H_STATUS: - if (strchr(hp, 'R') != NULL) - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_UNREAD); - if (strchr(hp, 'O') != NULL) - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW); - if (strchr(hp, 'U') != NULL) - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_UNREAD); - break; - case H_X_STATUS: - if (strchr(hp, 'D') != NULL) - MSG_SET_PERM_FLAGS(msginfo->flags, - MSG_REALLY_DELETED); - if (strchr(hp, 'F') != NULL) - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_MARKED); - if (strchr(hp, 'd') != NULL) - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_DELETED); - if (strchr(hp, 'r') != NULL) - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_REPLIED); - if (strchr(hp, 'f') != NULL) - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_FORWARDED); - break; -#endif - case H_FROM_SPACE: - if (msginfo->fromspace) break; - msginfo->fromspace = g_strdup(hp); - break; - default: - break; - } - } - msginfo->inreplyto = reference; - - 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) -{ - struct tm *lt; - gchar *default_format = "%y/%m/%d(%a) %H:%M"; - - lt = localtime(&timer); - - if (prefs_common.date_format) - strftime(dest, len, prefs_common.date_format, lt); - else - strftime(dest, len, default_format, lt); -} diff --git a/src/procheader.h b/src/procheader.h deleted file mode 100644 index 7f8571cbb..000000000 --- a/src/procheader.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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_from_file (const gchar *file); -GSList *procheader_get_header_list (FILE *fp); -GPtrArray *procheader_get_header_array (FILE *fp); -GPtrArray *procheader_get_header_array_asis (FILE *fp); -void procheader_header_list_destroy (GSList *hlist); -void procheader_header_array_destroy (GPtrArray *harray); -void procheader_header_free (Header *header); - -void procheader_get_header_fields (FILE *fp, - HeaderEntry hentry[]); -MsgInfo *procheader_parse (const gchar *file, - MsgFlags flags, - gboolean full); -MsgInfo *procheader_file_parse(FILE * fp, 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); -Header * procheader_parse_header (gchar * buf); - -gboolean procheader_headername_equal (char * hdr1, char * hdr2); -void procheader_header_free (Header * header); - -#endif /* __PROCHEADER_H__ */ diff --git a/src/procmime.c b/src/procmime.c deleted file mode 100644 index db91d83e6..000000000 --- a/src/procmime.c +++ /dev/null @@ -1,910 +0,0 @@ -/* - * 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 <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); - -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; - - Xstrdup_a(buf, encoding, return); - - 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; - - if (conv_get_current_charset() == C_EUC_JP && - strchr(content_type, '\033')) { - gint len; - len = strlen(content_type) * 2 + 1; - Xalloca(buf, len, return); - conv_jistoeuc(buf, len, content_type); - } else - Xstrdup_a(buf, content_type, return); - - 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)); - - mimeinfo->mime_type = procmime_scan_mime_type(cnttype); - - 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; - - if (conv_get_current_charset() == C_EUC_JP && - strchr(content_disposition, '\033')) { - gint len; - len = strlen(content_disposition) * 2 + 1; - Xalloca(buf, len, return); - conv_jistoeuc(buf, len, content_disposition); - } else - Xstrdup_a(buf, content_disposition, return); - - 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->mime_type == MIME_APPLICATION_OCTET_STREAM && - mimeinfo->name) { - const gchar *type; - type = procmime_get_mime_type(mimeinfo->name); - if (type) - mimeinfo->mime_type = procmime_scan_mime_type(type); - } - - 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; - Base64Decoder *decoder; - - decoder = base64_decoder_new(); - while (fgets(buf, sizeof(buf), infp) != NULL && - (!boundary || - !IS_BOUNDARY(buf, boundary, boundary_len))) { - len = base64_decoder_decode(decoder, buf, outbuf); - if (len < 0) { - g_warning("Bad BASE64 content\n"); - break; - } - fwrite(outbuf, sizeof(gchar), len, outfp); - } - base64_decoder_free(decoder); - } 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; -} - -ContentType procmime_scan_mime_type(const gchar *mime_type) -{ - ContentType type; - - if (!strncasecmp(mime_type, "text/html", 9)) - type = MIME_TEXT_HTML; - else if (!strncasecmp(mime_type, "text/", 5)) - type = MIME_TEXT; - else if (!strncasecmp(mime_type, "message/rfc822", 14)) - type = MIME_MESSAGE_RFC822; - else if (!strncasecmp(mime_type, "message/", 8)) - type = MIME_TEXT; - else if (!strncasecmp(mime_type, "application/octet-stream", 24)) - type = MIME_APPLICATION_OCTET_STREAM; - else if (!strncasecmp(mime_type, "application/", 12)) - type = MIME_APPLICATION; - else if (!strncasecmp(mime_type, "multipart/", 10)) - type = MIME_MULTIPART; - else if (!strncasecmp(mime_type, "image/", 6)) - type = MIME_IMAGE; - else if (!strncasecmp(mime_type, "audio/", 6)) - type = MIME_AUDIO; - else if (!strcasecmp(mime_type, "text")) - type = MIME_TEXT; - else - type = MIME_UNKNOWN; - - return type; -} - -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 guint procmime_str_hash(gconstpointer gptr) -{ - guint hash_result = 0; - const char *str; - - for (str = gptr; str && *str; str++) { - if (isupper(*str)) hash_result += (*str + ' '); - else hash_result += *str; - } - - return hash_result; -} - -static gint procmime_str_equal(gconstpointer gptr1, gconstpointer gptr2) -{ - const char *str1 = gptr1; - const char *str2 = gptr2; - - return !strcasecmp(str1, str2); -} - -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(procmime_str_hash, procmime_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; -} - -GList *procmime_get_mime_type_list(void) -{ - GList *list = NULL; - FILE *fp; - gchar buf[BUFFSIZE]; - gchar *p, *delim; - MimeType *mime_type; - - if (mime_type_list) - return mime_type_list; - - if ((fp = fopen(SYSCONFDIR "/mime.types", "r")) == NULL) { - FILE_OP_ERROR(SYSCONFDIR "/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 deleted file mode 100644 index e99aba648..000000000 --- a/src/procmime.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * 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 __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); - -ContentType procmime_scan_mime_type (const gchar *mime_type); -gchar *procmime_get_mime_type (const gchar *filename); - -GList *procmime_get_mime_type_list (void); - -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 deleted file mode 100644 index 394722ea1..000000000 --- a/src/procmsg.c +++ /dev/null @@ -1,841 +0,0 @@ -/* - * 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.perm_flags = MSG_NEW|MSG_UNREAD; - default_flags.tmp_flags = MSG_CACHED; - if (type == F_MH) { - if (item->stype == F_QUEUE) { - MSG_SET_TMP_FLAGS(default_flags, MSG_QUEUED); - } else if (item->stype == F_DRAFT) { - MSG_SET_TMP_FLAGS(default_flags, MSG_DRAFT); - } - } else if (type == F_IMAP) { - MSG_SET_TMP_FLAGS(default_flags, MSG_IMAP); - } else if (type == F_NEWS) { - MSG_SET_TMP_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.tmp_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->cc, 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); - READ_CACHE_DATA(msginfo->references, fp); - - MSG_SET_PERM_FLAGS(msginfo->flags, default_flags.perm_flags); - MSG_SET_TMP_FLAGS(msginfo->flags, default_flags.tmp_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); - if (!is_dir_exist(markdir)) - make_dir_hier(markdir); - - 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 = g_hash_table_lookup - (mark_table, GUINT_TO_POINTER(msginfo->msgnum)); - - if (flags != NULL) { - /* add the permanent flags only */ - msginfo->flags.perm_flags = flags->perm_flags; - if (item->folder->type == F_IMAP) { - MSG_SET_TMP_FLAGS(msginfo->flags, MSG_IMAP); - } else if (item->folder->type == F_NEWS) { - MSG_SET_TMP_FLAGS(msginfo->flags, MSG_NEWS); - } - } else { - /* not found (new message) */ - if (newmsg == 0) { - for (tmp = mlist; tmp != cur; tmp = tmp->next) - MSG_UNSET_PERM_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); - - hash_free_value_mem(mark_table); - 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_msg_list_free(GSList *mlist) -{ - GSList *cur; - MsgInfo *msginfo; - - for (cur = mlist; cur != NULL; cur = cur->next) { - msginfo = (MsgInfo *)cur->data; - procmsg_msginfo_free(msginfo); - } - g_slist_free(mlist); -} - -void procmsg_write_cache(MsgInfo *msginfo, FILE *fp) -{ - MsgTmpFlags flags = msginfo->flags.tmp_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->cc, 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); - WRITE_CACHE_DATA(msginfo->references, fp); -} - -void procmsg_write_flags(MsgInfo *msginfo, FILE *fp) -{ - MsgPermFlags flags = msginfo->flags.perm_flags; - - 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 = value; - struct MarkSum *marksum = data; - - /*if (MSG_IS_NEW(*flags) && !MSG_IS_IGNORE_THREAD(*flags)) (*marksum->new)++;*/ - if (MSG_IS_NEW(*flags)) (*marksum->new)++; - /*if (MSG_IS_UNREAD(*flags) && !MSG_IS_IGNORE_THREAD(*flags)) (*marksum->unread)++;*/ - 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; - MsgPermFlags perm_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(&perm_flags, sizeof(flags), 1, fp) != 1) break; - - flags = g_new0(MsgFlags, 1); - flags->perm_flags = perm_flags; - - g_hash_table_insert(mark_table, GUINT_TO_POINTER(num), 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->cc) fprintf(prfp, "Cc: %s\n", msginfo->cc); - 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(cc); - MEMBDUP(newsgroups); - MEMBDUP(subject); - MEMBDUP(msgid); - MEMBDUP(inreplyto); - - MEMBCOPY(folder); - MEMBCOPY(to_folder); - - MEMBDUP(xface); - MEMBDUP(dispositionnotificationto); - MEMBDUP(returnreceiptto); - MEMBDUP(references); - - MEMBCOPY(score); - MEMBCOPY(threadscore); - - return newmsginfo; -} - -void procmsg_msginfo_free(MsgInfo *msginfo) -{ - if (msginfo == NULL) return; - - g_free(msginfo->fromspace); - g_free(msginfo->references); - g_free(msginfo->returnreceiptto); - g_free(msginfo->dispositionnotificationto); - g_free(msginfo->xface); - - g_free(msginfo->fromname); - - g_free(msginfo->date); - g_free(msginfo->from); - g_free(msginfo->to); - g_free(msginfo->cc); - 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 deleted file mode 100644 index 60795bda0..000000000 --- a/src/procmsg.h +++ /dev/null @@ -1,236 +0,0 @@ -/* - * 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 __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; -typedef struct _MsgFlags MsgFlags; - -#include "folder.h" - -typedef enum -{ - MSG_NEW = 1 << 0, - MSG_UNREAD = 1 << 1, - MSG_MARKED = 1 << 2, - MSG_DELETED = 1 << 3, - MSG_REPLIED = 1 << 4, - MSG_FORWARDED = 1 << 5, - - MSG_REALLY_DELETED = 1 << 6, /* mbox stuff */ - -#define MSG_LABEL_SBIT (7) /* start bit message label */ -#define MAKE_MSG_LABEL(h, m, l) (((h) << (MSG_LABEL_SBIT+2)) | \ - ((m) << (MSG_LABEL_SBIT+1)) | \ - ((l) << (MSG_LABEL_SBIT+0))) - - MSG_LABEL = MAKE_MSG_LABEL(1, 1, 1), - MSG_LABEL_NONE = MAKE_MSG_LABEL(0, 0, 0), - MSG_LABEL_1 = MAKE_MSG_LABEL(0, 0, 1), - MSG_LABEL_2 = MAKE_MSG_LABEL(0, 1, 0), - MSG_LABEL_3 = MAKE_MSG_LABEL(0, 1, 1), - MSG_LABEL_4 = MAKE_MSG_LABEL(1, 0, 0), - MSG_LABEL_5 = MAKE_MSG_LABEL(1, 0, 1), - MSG_LABEL_6 = MAKE_MSG_LABEL(1, 1, 0), - MSG_LABEL_7 = MAKE_MSG_LABEL(1, 1, 1), - -#define MSG_LABEL_ORANGE (MSG_LABEL_1) -#define MSG_LABEL_RED (MSG_LABEL_2) -#define MSG_LABEL_PINK (MSG_LABEL_3) -#define MSG_LABEL_SKYBLUE (MSG_LABEL_4) -#define MSG_LABEL_BLUE (MSG_LABEL_5) -#define MSG_LABEL_GREEN (MSG_LABEL_6) -#define MSG_LABEL_BROWN (MSG_LABEL_7) - - MSG_IGNORE_THREAD = 1 << 10, /* ignore threads */ - - /* RESERVED */ - MSG_RESERVED_CLAWS = 1 << 30, /* for sylpheed-claws */ - MSG_RESERVED_MAIN = 1 << 31 /* for sylpheed-main */ -} MsgPermFlags; - -typedef enum -{ - MSG_MOVE = 1 << 0, - MSG_COPY = 1 << 1, - - MSG_QUEUED = 1 << 16, - MSG_DRAFT = 1 << 17, - MSG_ENCRYPTED = 1 << 18, - MSG_IMAP = 1 << 19, - MSG_NEWS = 1 << 20, - - MSG_FILTERING = 1 << 25, /* claws: re/set by filtering */ - - MSG_MIME = 1 << 29, - MSG_CACHED = 1 << 31 -} MsgTmpFlags; - -#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_SET_PERM_FLAGS(msg, flags) \ - MSG_SET_FLAGS((msg).perm_flags, flags) -#define MSG_SET_TMP_FLAGS(msg, flags) \ - MSG_SET_FLAGS((msg).tmp_flags, flags) -#define MSG_UNSET_PERM_FLAGS(msg, flags) \ - MSG_UNSET_FLAGS((msg).perm_flags, flags) -#define MSG_UNSET_TMP_FLAGS(msg, flags) \ - MSG_UNSET_FLAGS((msg).tmp_flags, flags) - -#define MSG_IS_NEW(msg) (((msg).perm_flags & MSG_NEW) != 0) -#define MSG_IS_UNREAD(msg) (((msg).perm_flags & MSG_UNREAD) != 0) -#define MSG_IS_MARKED(msg) (((msg).perm_flags & MSG_MARKED) != 0) -#define MSG_IS_DELETED(msg) (((msg).perm_flags & MSG_DELETED) != 0) -#define MSG_IS_REPLIED(msg) (((msg).perm_flags & MSG_REPLIED) != 0) -#define MSG_IS_FORWARDED(msg) (((msg).perm_flags & MSG_FORWARDED) != 0) - -#define MSG_IS_MOVE(msg) (((msg).tmp_flags & MSG_MOVE) != 0) -#define MSG_IS_COPY(msg) (((msg).tmp_flags & MSG_COPY) != 0) - -#define MSG_IS_QUEUED(msg) (((msg).tmp_flags & MSG_QUEUED) != 0) -#define MSG_IS_DRAFT(msg) (((msg).tmp_flags & MSG_DRAFT) != 0) -#define MSG_IS_ENCRYPTED(msg) (((msg).tmp_flags & MSG_ENCRYPTED) != 0) -#define MSG_IS_IMAP(msg) (((msg).tmp_flags & MSG_IMAP) != 0) -#define MSG_IS_NEWS(msg) (((msg).tmp_flags & MSG_NEWS) != 0) -#define MSG_IS_MIME(msg) (((msg).tmp_flags & MSG_MIME) != 0) -#define MSG_IS_CACHED(msg) (((msg).tmp_flags & MSG_CACHED) != 0) - -/* Claws related flags */ -#define MSG_IS_REALLY_DELETED(msg) (((msg).perm_flags & MSG_REALLY_DELETED) != 0) -#define MSG_IS_IGNORE_THREAD(msg) (((msg).perm_flags & MSG_IGNORE_THREAD) != 0) -#define MSG_GET_LABEL(msg) (((msg).perm_flags & MSG_LABEL)) -#define MSG_GET_LABEL_VALUE(msg) (MSG_GET_LABEL(msg) >> MSG_LABEL_SBIT) -/* 7 == nr. of colors excl. none */ -#define MSG_SET_LABEL_VALUE(msg, val) MSG_SET_PERM_FLAGS(msg, ((((unsigned)(val)) & 7) << MSG_LABEL_SBIT)) -#define MSG_IS_FILTERING(msg) (((msg).tmp_flags & MSG_FILTERING) != 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 _MsgFlags -{ - MsgPermFlags perm_flags; - MsgTmpFlags tmp_flags; -}; - -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 *cc; - gchar *newsgroups; - gchar *subject; - gchar *msgid; - gchar *inreplyto; - - FolderItem *folder; - FolderItem *to_folder; - - gchar *xface; - - gchar *dispositionnotificationto; - gchar *returnreceiptto; - - gchar *references; - gchar *fromspace; - - gint score; - gint threadscore; - - /* 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_msg_list_free (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 deleted file mode 100644 index 1b28c6abf..000000000 --- a/src/progressdialog.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * 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 <glib.h> -#include <gtk/gtkwindow.h> -#include <gtk/gtkvbox.h> -#include <gtk/gtkhbox.h> -#include <gtk/gtklabel.h> -#include <gtk/gtkprogressbar.h> -#include <gtk/gtkscrolledwindow.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; - GtkWidget *scrolledwin; - GtkWidget *clist; - gchar *text[] = {NULL, NULL, NULL}; - - text[1] = _("Account"); - text[2] = _("Status"); - - debug_print(_("Creating progress dialog...\n")); - progress = g_new0(ProgressDialog, 1); - - window = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_widget_set_usize(window, 450, -1); - gtk_container_set_border_width(GTK_CONTAINER(window), 8); - gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); - gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE); - gtk_widget_realize(window); - - 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, FALSE, FALSE, 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_start(GTK_BOX(vbox), progressbar, FALSE, FALSE, 0); - gtk_widget_show(progressbar); - - scrolledwin = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwin); - gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - - clist = gtk_clist_new_with_titles(3, text); - gtk_widget_show(clist); - gtk_container_add(GTK_CONTAINER(scrolledwin), clist); - gtk_widget_set_usize(clist, -1, 120); - gtk_clist_set_column_justification(GTK_CLIST(clist), 0, - GTK_JUSTIFY_CENTER); - gtk_clist_set_column_width(GTK_CLIST(clist), 0, 16); - gtk_clist_set_column_width(GTK_CLIST(clist), 1, 180); - - progress->window = window; - progress->label = label; - progress->cancel_btn = cancel_btn; - progress->progressbar = progressbar; - progress->clist = clist; - - 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 deleted file mode 100644 index 047524efd..000000000 --- a/src/progressdialog.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 __PROGRESS_H__ -#define __PROGRESS_H__ - -#include <glib.h> -#include <gtk/gtkwidget.h> - -typedef struct _ProgressDialog ProgressDialog; - -struct _ProgressDialog -{ - GtkWidget *window; - GtkWidget *label; - GtkWidget *cancel_btn; - GtkWidget *progressbar; - GtkWidget *clist; -}; - -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/quote_fmt.h b/src/quote_fmt.h deleted file mode 100644 index a7278e8a1..000000000 --- a/src/quote_fmt.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef QUOTE_FMT_H - -#define QUOTE_FMT_H - -gchar * quote_fmt_get_buffer(); -void quote_fmt_init(MsgInfo * info, gchar * my_quote_str); -int quote_fmtparse(void); - -#endif diff --git a/src/quote_fmt_lex.h b/src/quote_fmt_lex.h deleted file mode 100644 index 585751a19..000000000 --- a/src/quote_fmt_lex.h +++ /dev/null @@ -1,47 +0,0 @@ -/* The following defines shamelessly stolen from GDB sources... */ - -/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc), - as well as gratuitiously global symbol names, so we can have multiple - yacc generated parsers in gdb. Note that these are only the variables - produced by yacc. If other parser generators (bison, byacc, etc) produce - additional global names that conflict at link time, then those parser - generators need to be fixed instead of adding those names to this list. */ - -#define yymaxdepth quote_fmtmaxdepth -#define yyparse quote_fmtparse -#define yylex quote_fmtlex -#define yyerror quote_fmterror -#define yylval quote_fmtlval -#define yychar quote_fmtchar -#define yydebug quote_fmtdebug -#define yypact quote_fmtpact -#define yyr1 quote_fmtr1 -#define yyr2 quote_fmtr2 -#define yydef quote_fmtdef -#define yychk quote_fmtchk -#define yypgo quote_fmtpgo -#define yyact quote_fmtact -#define yyexca quote_fmtexca -#define yyerrflag quote_fmterrflag -#define yynerrs quote_fmtnerrs -#define yyps quote_fmtps -#define yypv quote_fmtpv -#define yys quote_fmts -#define yy_yys quote_fmtyys -#define yystate quote_fmtstate -#define yytmp quote_fmttmp -#define yyv quote_fmtv -#define yy_yyv quote_fmtyyv -#define yyval quote_fmtval -#define yylloc quote_fmtlloc -#define yyreds quote_fmtreds /* With YYDEBUG defined */ -#define yytoks quote_fmttoks /* With YYDEBUG defined */ -#define yylhs quote_fmtyylhs -#define yylen quote_fmtyylen -#define yydefred quote_fmtyydefred -#define yydgoto quote_fmtyydgoto -#define yysindex quote_fmtyysindex -#define yyrindex quote_fmtyyrindex -#define yygindex quote_fmtyygindex -#define yytable quote_fmtyytable -#define yycheck quote_fmtyycheck diff --git a/src/quote_fmt_lex.l b/src/quote_fmt_lex.l deleted file mode 100644 index 4216b6454..000000000 --- a/src/quote_fmt_lex.l +++ /dev/null @@ -1,46 +0,0 @@ -%{ -#include "quote_fmt_lex.h" -#include "quote_fmt_parse.h" -%} - -%option prefix="quote_fmt" -%option outfile="lex.yy.c" - -%% - -"%d" /* date */ return SHOW_DATE; -"%f" /* From */ return SHOW_FROM; -"%N" /* Full name */ return SHOW_FULLNAME; -"%F" /* firt name */ return SHOW_FIRST_NAME; -"%I" /* initial of sender */ return SHOW_SENDER_INITIAL; -"%s" /* subject */ return SHOW_SUBJECT; -"%t" /* to */ return SHOW_TO; -"%c" /* cc */ return SHOW_CC; -"%n" /* newsgroups */ return SHOW_NEWSGROUPS; -"%i" /* message-id */ return SHOW_MESSAGEID; -"%r" /* references */ return SHOW_REFERENCES; -"%M" /* message */ return SHOW_MESSAGE; -"%Q" /* quoted message */ return SHOW_QUOTED_MESSAGE; -"%m" /* message with no signature */ return SHOW_MESSAGE_NO_SIGNATURE; -"%q" /* quoted message with no signature */ return SHOW_QUOTED_MESSAGE_NO_SIGNATURE; -"%%" /* % */ return SHOW_PERCENT; -"\\\\" /* \ */ return SHOW_BACKSLASH; -"\\t" /* tab */ return SHOW_TAB; -"\\n" /* retour à la ligne */ return SHOW_EOL; -"\\?" /* ? */ return SHOW_QUESTION_MARK; -"\\(" return SHOW_OPARENT; -"\\)" return SHOW_CPARENT; -"?d" /* query date */ return QUERY_DATE; -"?f" /* query from */ return QUERY_FROM; -"?N"|"?F"|"?I" /* query from name */ return QUERY_FULLNAME; -"?s" /* query subject */ return QUERY_SUBJECT; -"?t" /* query to */ return QUERY_TO; -"?c" /* query cc */ return QUERY_CC; -"?n" /* query newsgroups */ return QUERY_NEWSGROUPS; -"?i" /* query message-id */ return QUERY_MESSAGEID; -"?r" /* query references */ return QUERY_REFERENCES; -"(" return OPARENT; -")" return CPARENT; -. { yylval.chr = yytext[0]; return CHARACTER; } - -%% diff --git a/src/quote_fmt_parse.y b/src/quote_fmt_parse.y deleted file mode 100644 index 9cde46d30..000000000 --- a/src/quote_fmt_parse.y +++ /dev/null @@ -1,415 +0,0 @@ -%{ - -#include "defs.h" - -#include <ctype.h> -#include <gtk/gtk.h> -#include <glib.h> - -#include "procmsg.h" -#include "procmime.h" -#include "utils.h" -#include "intl.h" - -#include "quote_fmt.h" -#include "quote_fmt_lex.h" - -/* decl */ -/* -flex quote_fmt.l -bison -p quote_fmt quote_fmt.y -*/ - -static MsgInfo * msginfo = NULL; -static gboolean * visible = NULL; -static gint maxsize = 0; -static gint stacksize = 0; - -static gchar * buffer = NULL; -static gint bufmax = 0; -static gint bufsize = 0; -static gchar * quote_str = NULL; -static gint error = 0; - -static void add_visibility(gboolean val) -{ - stacksize ++; - if (maxsize < stacksize) { - maxsize += 128; - visible = g_realloc(visible, maxsize * sizeof(gboolean)); - if (visible == NULL) - maxsize = 0; - } - - visible[stacksize - 1] = val; -} - -static void remove_visibility() -{ - stacksize --; -} - - -static void add_buffer(gchar * s) -{ - gint len = strlen(s); - - if (bufsize + len + 1 > bufmax) { - if (bufmax == 0) - bufmax = 128; - while (bufsize + len + 1 > bufmax) - bufmax *= 2; - buffer = g_realloc(buffer, bufmax); - } - strcpy(buffer + bufsize, s); - bufsize += len; -} - -static void flush_buffer() -{ - if (buffer != NULL) - *buffer = 0; - bufsize = 0; -} - -gchar * quote_fmt_get_buffer() -{ - if (error != 0) - return NULL; - else - return buffer; -} - -#define INSERT(buf) \ - if (stacksize != 0 && visible[stacksize - 1]) \ - add_buffer(buf) - -#define INSERT_CHARACTER(chr) \ - if (stacksize != 0 && visible[stacksize - 1]) { \ - gchar tmp[2]; \ - tmp[0] = (chr); \ - tmp[1] = '\0'; \ - add_buffer(tmp); \ - } - -void quote_fmt_init(MsgInfo * info, gchar * my_quote_str) -{ - quote_str = my_quote_str; - msginfo = info; - stacksize = 0; - add_visibility(TRUE); - if (buffer != NULL) - *buffer = 0; - bufsize = 0; - error = 0; -} - -void quote_fmterror(char * str) -{ - g_warning(_("Error %s\n"), str); - error = 1; -} - -int quote_fmtwrap(void) -{ - return 1; -} - -static int isseparator(char ch) -{ - return isspace(ch) || ch == '.' || ch == '-'; -} -%} - -%union { - char chr; -} - -%token SHOW_NEWSGROUPS -%token SHOW_DATE SHOW_FROM SHOW_FULLNAME SHOW_FIRST_NAME -%token SHOW_SENDER_INITIAL SHOW_SUBJECT SHOW_TO SHOW_MESSAGEID -%token SHOW_PERCENT SHOW_CC SHOW_REFERENCES SHOW_MESSAGE -%token SHOW_QUOTED_MESSAGE SHOW_BACKSLASH SHOW_TAB -%token SHOW_QUOTED_MESSAGE_NO_SIGNATURE SHOW_MESSAGE_NO_SIGNATURE -%token SHOW_EOL SHOW_QUESTION_MARK SHOW_OPARENT SHOW_CPARENT -%token QUERY_DATE QUERY_FROM -%token QUERY_FULLNAME QUERY_SUBJECT QUERY_TO QUERY_NEWSGROUPS -%token QUERY_MESSAGEID QUERY_CC QUERY_REFERENCES -%token OPARENT CPARENT -%token CHARACTER - -%start quote_fmt - -%token <chr> CHARACTER -%type <chr> character - -%% - -quote_fmt: - character_or_special_or_query_list; - -character_or_special_or_query_list: - character_or_special_or_query character_or_special_or_query_list - | character_or_special_or_query ; - -character_or_special_or_query: - special ; - | character - { - INSERT_CHARACTER($1); - } - | query ; - - -character: - CHARACTER - ; - -special: - SHOW_NEWSGROUPS - { - if (msginfo->newsgroups) - INSERT(msginfo->newsgroups); - } - | SHOW_DATE - { - if (msginfo->date) - INSERT(msginfo->date); - } - | SHOW_FROM - { - if (msginfo->from) - INSERT(msginfo->from); - } - | SHOW_FULLNAME - { - if (msginfo->fromname) - INSERT(msginfo->fromname); - } - | SHOW_FIRST_NAME - { - if (msginfo->fromname) { - gchar * p; - gchar * str; - - str = alloca(strlen(msginfo->fromname) + 1); - if (str != NULL) { - strcpy(str, msginfo->fromname); - p = str; - while (*p && !isspace(*p)) p++; - *p = '\0'; - INSERT(str); - } - } - } - | SHOW_SENDER_INITIAL - { -#define MAX_SENDER_INITIAL 20 - if (msginfo->fromname) { - gchar tmp[MAX_SENDER_INITIAL]; - gchar * p; - gchar * cur; - gint len = 0; - - p = msginfo->fromname; - cur = tmp; - while (*p) { - if (*p && isalnum(*p)) { - *cur = toupper(*p); - cur ++; - len ++; - if (len >= MAX_SENDER_INITIAL - 1) - break; - } - else - break; - while (*p && !isseparator(*p)) p++; - while (*p && isseparator(*p)) p++; - } - *cur = '\0'; - INSERT(tmp); - } - } - | SHOW_SUBJECT - { - if (msginfo->subject) - INSERT(msginfo->subject); - } - | SHOW_TO - { - if (msginfo->to) - INSERT(msginfo->to); - } - | SHOW_MESSAGEID - { - if (msginfo->msgid) - INSERT(msginfo->msgid); - } - | SHOW_PERCENT - { - INSERT("%"); - } - | SHOW_CC - { - if (msginfo->cc) - INSERT(msginfo->cc); - } - | SHOW_REFERENCES - { - if (msginfo->references) - INSERT(msginfo->references); - } - | SHOW_MESSAGE - { - gchar buf[BUFFSIZE]; - FILE * fp; - - if ((fp = procmime_get_text_part(msginfo)) == NULL) - g_warning(_("Can't get text part\n")); - while (fgets(buf, sizeof(buf), fp) != NULL) { - INSERT(buf); - } - fclose(fp); - } - | SHOW_QUOTED_MESSAGE - { - gchar buf[BUFFSIZE]; - FILE * fp; - - if ((fp = procmime_get_text_part(msginfo)) == NULL) - g_warning(_("Can't get text part\n")); - while (fgets(buf, sizeof(buf), fp) != NULL) { - if (quote_str) - INSERT(quote_str); - INSERT(buf); - } - fclose(fp); - } - | SHOW_MESSAGE_NO_SIGNATURE - { - gchar buf[BUFFSIZE]; - FILE * fp; - - if ((fp = procmime_get_text_part(msginfo)) == NULL) - g_warning(_("Can't get text part\n")); - while (fgets(buf, sizeof(buf), fp) != NULL) { - if (strncmp(buf, "-- ", 3) == 0) - break; - INSERT(buf); - } - fclose(fp); - } - | SHOW_QUOTED_MESSAGE_NO_SIGNATURE - { - gchar buf[BUFFSIZE]; - FILE * fp; - - if ((fp = procmime_get_text_part(msginfo)) == NULL) - g_warning(_("Can't get text part\n")); - while (fgets(buf, sizeof(buf), fp) != NULL) { - if (strncmp(buf, "-- ", 3) == 0) - break; - if (quote_str) - INSERT(quote_str); - INSERT(buf); - } - fclose(fp); - } - | SHOW_BACKSLASH - { - INSERT("\\"); - } - | SHOW_TAB - { - INSERT("\t"); - } - | SHOW_EOL - { - INSERT("\n"); - } - | SHOW_QUESTION_MARK - { - INSERT("?"); - } - | SHOW_OPARENT - { - INSERT("("); - } - | SHOW_CPARENT - { - INSERT(")"); - }; - -query: - QUERY_DATE - { - add_visibility(msginfo->date != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - } - | QUERY_FROM - { - add_visibility(msginfo->from != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - } - | QUERY_FULLNAME - { - add_visibility(msginfo->fromname != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - } - | QUERY_SUBJECT - { - add_visibility(msginfo->subject != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - } - | QUERY_TO - { - add_visibility(msginfo->to != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - } - | QUERY_NEWSGROUPS - { - add_visibility(msginfo->newsgroups != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - } - | QUERY_MESSAGEID - { - add_visibility(msginfo->msgid != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - } - | QUERY_CC - { - add_visibility(msginfo->cc != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - } - | QUERY_REFERENCES - { - add_visibility(msginfo->references != NULL); - } - OPARENT quote_fmt CPARENT - { - remove_visibility(); - }; diff --git a/src/recv.c b/src/recv.c deleted file mode 100644 index 8be500a5d..000000000 --- a/src/recv.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * 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 <unistd.h> -#include <sys/time.h> - -#include "intl.h" -#include "recv.h" -#include "socket.h" -#include "utils.h" - -static RecvUIFunc recv_ui_func; -static gpointer recv_ui_func_data; - -gint recv_write_to_file(SockInfo *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(SockInfo *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(SockInfo *sock, FILE *fp) -{ - gchar buf[BUFFSIZE]; - gint len; - gint count = 0; - gint bytes = 0; - struct timeval tv_prev, tv_cur; - - gettimeofday(&tv_prev, NULL); - - for (;;) { - if (sock_gets(sock, buf, sizeof(buf)) < 0) { - g_warning(_("error occurred while retrieving data.\n")); - return -1; - } - - len = strlen(buf); - if (len > 1 && buf[0] == '.' && buf[1] == '\r') { - if (recv_ui_func) - recv_ui_func(sock, count, bytes, - recv_ui_func_data); - break; - } - count++; - bytes += len; - - if (recv_ui_func) { - gettimeofday(&tv_cur, NULL); - /* if elapsed time from previous update is greater - than 10msec, update UI */ - if (tv_cur.tv_sec - tv_prev.tv_sec > 0 || - tv_cur.tv_usec - tv_prev.tv_usec > UI_REFRESH_INTERVAL) { - recv_ui_func(sock, count, bytes, - recv_ui_func_data); - gettimeofday(&tv_prev, NULL); - } - } - - if (len > 1 && buf[len - 1] == '\n' && buf[len - 2] == '\r') { - buf[len - 2] = '\n'; - buf[len - 1] = '\0'; - len--; - } - - if (buf[0] == '.' && buf[1] == '.') - memmove(buf, buf + 1, len--); - - if (!strncmp(buf, ">From ", 6)) - memmove(buf, buf + 1, len--); - - if (fp && fputs(buf, fp) == EOF) { - perror("fputs"); - g_warning(_("Can't write to file.\n")); - fp = NULL; - } - } - - if (!fp) return -1; - - return 0; -} - -gint recv_bytes_write(SockInfo *sock, glong size, FILE *fp) -{ - gchar *buf; - glong count = 0; - gchar *prev, *cur; - - buf = g_malloc(size); - - do { - gint read_count; - - read_count = sock_read(sock, buf + count, size - count); - if (read_count < 0) { - g_free(buf); - return -1; - } - count += read_count; - } while (count < size); - - /* +------------------+----------------+--------------------------+ * - * ^buf ^prev ^cur buf+size-1^ */ - - prev = buf; - while ((cur = memchr(prev, '\r', size - (prev - buf))) != NULL) { - if (cur == buf + size - 1) break; - - 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")); - g_free(buf); - return -1; - } - - if (*(cur + 1) == '\n') - prev = cur + 2; - else - prev = cur + 1; - - 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")); - g_free(buf); - return -1; - } - - g_free(buf); - return 0; -} - -void recv_set_ui_func(RecvUIFunc func, gpointer data) -{ - recv_ui_func = func; - recv_ui_func_data = data; -} diff --git a/src/recv.h b/src/recv.h deleted file mode 100644 index bc1dd89dd..000000000 --- a/src/recv.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 __RECV_H__ -#define __RECV_H__ - -#include <glib.h> - -#include "socket.h" - -typedef void (*RecvUIFunc) (SockInfo *sock, - gint count, - gint read_bytes, - gpointer data); - -gint recv_write_to_file (SockInfo *sock, - const gchar *filename); -gint recv_bytes_write_to_file (SockInfo *sock, - glong size, - const gchar *filename); -gint recv_write (SockInfo *sock, - FILE *fp); -gint recv_bytes_write (SockInfo *sock, - glong size, - FILE *fp); - -void recv_set_ui_func (RecvUIFunc func, - gpointer data); - -#endif /* __RECV_H__ */ diff --git a/src/rfc2015.c b/src/rfc2015.c deleted file mode 100644 index ec7c2ed3a..000000000 --- a/src/rfc2015.c +++ /dev/null @@ -1,1231 +0,0 @@ -/* - * 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 - -#if 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 "sigstatus.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; - GpgmegtkSigStatus statuswindow = NULL; - const char *result = NULL; - - if (prefs_common.gpg_signature_popup) - statuswindow = gpgmegtk_sig_status_create (); - - 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)); - - /* FIXME: check what the heck this sig_status_full stuff is. - * it should better go into sigstatus.c */ - g_free (partinfo->sigstatus_full); - partinfo->sigstatus_full = sig_status_full (ctx); - -leave: - result = gpgmegtk_sig_status_to_string(status); - debug_print("verification status: %s\n", result); - if (prefs_common.gpg_signature_popup) - gpgmegtk_sig_status_update (statuswindow,ctx); - - g_assert (!err); /* FIXME: Hey: this may indeed happen */ - g_free (partinfo->sigstatus); - partinfo->sigstatus = g_strdup (result); - - gpgme_data_release (sig); - gpgme_data_release (text); - gpgme_release (ctx); - if (prefs_common.gpg_signature_popup) - gpgmegtk_sig_status_destroy (statuswindow); -} - -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 (g_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 && !g_strcasecmp (partinfo->content_type, - "application/pgp-encrypted")) { - /* Fixme: check that the version is 1 */ - ver_okay = 1; - } - else if (n == 2 && !g_strcasecmp (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 */ -} - -int -set_signers (GpgmeCtx ctx, PrefsAccount *ac) -{ - GSList *key_list = NULL; - GpgmeCtx list_ctx = NULL; - const char *keyid = NULL; - GSList *p; - GpgmeError err; - GpgmeKey key; - - if (ac == NULL) - return 0; - - switch (ac->sign_key) { - case SIGN_KEY_DEFAULT: - return 0; /* nothing to do */ - - case SIGN_KEY_BY_FROM: - keyid = ac->address; - break; - - case SIGN_KEY_CUSTOM: - keyid = ac->sign_key_id; - break; - - default: - g_assert_not_reached (); - } - - err = gpgme_new (&list_ctx); - if (err) - goto leave; - err = gpgme_op_keylist_start (list_ctx, keyid, 1); - if (err) - goto leave; - while ( !(err = gpgme_op_keylist_next (list_ctx, &key)) ) { - key_list = g_slist_append (key_list, key); - } - if (err != GPGME_EOF) - goto leave; - if (key_list == NULL) { - g_warning ("no keys found for keyid \"%s\"", keyid); - } - gpgme_signers_clear (ctx); - for (p = key_list; p != NULL; p = p->next) { - err = gpgme_signers_add (ctx, (GpgmeKey) p->data); - if (err) - goto leave; - } - -leave: - if (err) - g_message ("** set_signers failed: %s", gpgme_strerror (err)); - for (p = key_list; p != NULL; p = p->next) - gpgme_key_unref ((GpgmeKey) p->data); - g_slist_free (key_list); - if (list_ctx) - gpgme_release (list_ctx); - return err; -} - -/* - * 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, PrefsAccount *ac) -{ - 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 = set_signers (ctx, ac); - if (err) - goto leave; - 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, PrefsAccount *ac) -{ - 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, ac); - 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 deleted file mode 100644 index d9ebb9c12..000000000 --- a/src/rfc2015.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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" -#include "prefs_account.h" - -void rfc2015_disable_all (void); -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, PrefsAccount *ac); - -#endif /* __RFC2015_H__ */ diff --git a/src/rfc822.c b/src/rfc822.c deleted file mode 100644 index 766029ac2..000000000 --- a/src/rfc822.c +++ /dev/null @@ -1,424 +0,0 @@ -/* - * 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 deleted file mode 100644 index 75c0fed9b..000000000 --- a/src/rfc822.h +++ /dev/null @@ -1,3 +0,0 @@ -/* rfc822.c: RFC822 header parsing */ -char *reply_hack(char *, const char *); -char *nxtaddr(const char *); diff --git a/src/scoring.c b/src/scoring.c deleted file mode 100644 index 4f7ea3def..000000000 --- a/src/scoring.c +++ /dev/null @@ -1,442 +0,0 @@ -#include <ctype.h> -#include <string.h> -#include <stdlib.h> -#include <errno.h> -#include <stdio.h> -#include "defs.h" -#include "intl.h" -#include "utils.h" -#include "procheader.h" -#include "matcher.h" -#include "scoring.h" -#include "prefs.h" -#include "folder.h" - -#define PREFSBUFSIZE 1024 - - -GSList * global_scoring; - -ScoringProp * scoringprop_parse(gchar ** str) -{ - gchar * tmp; - gint key; - ScoringProp * scoring; - gint score; - MatcherList * matchers; - - tmp = * str; - - matchers = matcherlist_parse(&tmp); - if (tmp == NULL) { - * str = NULL; - return NULL; - } - - key = matcher_parse_keyword(&tmp); - - if (tmp == NULL) { - matcherlist_free(matchers); - * str = NULL; - return NULL; - } - - if (key != MATCHING_SCORE) { - matcherlist_free(matchers); - * str = NULL; - return NULL; - } - - score = matcher_parse_number(&tmp); - - if (tmp == NULL) { - matcherlist_free(matchers); - * str = NULL; - return NULL; - } - - scoring = scoringprop_new(matchers, score); - - * str = tmp; - return scoring; -} - - -ScoringProp * scoringprop_new(MatcherList * matchers, int score) -{ - ScoringProp * scoring; - - scoring = g_new0(ScoringProp, 1); - scoring->matchers = matchers; - scoring->score = score; - - return scoring; -} - -void scoringprop_free(ScoringProp * prop) -{ - matcherlist_free(prop->matchers); - g_free(prop); -} - -gint scoringprop_score_message(ScoringProp * scoring, MsgInfo * info) -{ - if (matcherlist_match(scoring->matchers, info)) - return scoring->score; - else - return 0; -} - -gint score_message(GSList * scoring_list, MsgInfo * info) -{ - gint score = 0; - gint add_score; - GSList * l; - - for(l = scoring_list ; l != NULL ; l = g_slist_next(l)) { - ScoringProp * scoring = (ScoringProp *) l->data; - - add_score = (scoringprop_score_message(scoring, info)); - if (add_score == MAX_SCORE || add_score == MIN_SCORE) { - score = add_score; - break; - } - score += add_score; - } - return score; -} - -#if 0 -static void scoringprop_print(ScoringProp * prop) -{ - GSList * l; - - if (prop == NULL) { - printf("no scoring\n"); - return; - } - - printf("----- scoring ------\n"); - for(l = prop->matchers ; l != NULL ; l = g_slist_next(l)) { - matcherprop_print((MatcherProp *) l->data); - } - printf("cond: %s\n", prop->bool_and ? "and" : "or"); - printf("score: %i\n", prop->score); -} -#endif - -/* - syntax for scoring config - - file ~/.sylpheed/scoringrc - - header "x-mailing" match "toto" score -10 - subject match "regexp" & to regexp "regexp" score 50 - subject match "regexp" | to regexpcase "regexp" | age_sup 5 score 30 - - if score is = MIN_SCORE (-999), no more match is done in the list - if score is = MAX_SCORE (-999), no more match is done in the list - */ - -/* -void prefs_scoring_read_config(void) -{ - gchar *rcpath; - FILE *fp; - gchar buf[PREFSBUFSIZE]; - - debug_print(_("Reading headers configuration...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, SCORING_RC, NULL); - if ((fp = fopen(rcpath, "r")) == NULL) { - if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); - g_free(rcpath); - prefs_scoring = NULL; - return; - } - g_free(rcpath); - - while (prefs_scoring != NULL) { - ScoringProp * scoring = (ScoringProp *) prefs_scoring->data; - scoringprop_free(scoring); - prefs_scoring = g_slist_remove(prefs_scoring, scoring); - } - - while (fgets(buf, sizeof(buf), fp) != NULL) { - ScoringProp * scoring; - gchar * tmp; - - g_strchomp(buf); - - if ((*buf != '#') && (*buf != '\0')) { - tmp = buf; - scoring = scoringprop_parse(&tmp); - if (tmp != NULL) { - prefs_scoring = g_slist_append(prefs_scoring, - scoring); - } - else { - g_warning(_("syntax error : %s\n"), buf); - } - } - } - - fclose(fp); -} -*/ - -gchar * scoringprop_to_string(ScoringProp * prop) -{ - gchar * list_str; - gchar * score_str; - gchar * scoring_str; - - list_str = matcherlist_to_string(prop->matchers); - - if (list_str == NULL) - return NULL; - - score_str = itos(prop->score); - scoring_str = g_strconcat(list_str, " score ", score_str, NULL); - g_free(list_str); - - return scoring_str; -} - -/* -void prefs_scoring_write_config(void) -{ - gchar *rcpath; - PrefFile *pfile; - GSList *cur; - ScoringProp * prop; - - debug_print(_("Writing scoring configuration...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, SCORING_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_scoring; cur != NULL; cur = cur->next) { - gchar *scoring_str; - - prop = (ScoringProp *) cur->data; - scoring_str = scoringprop_to_string(prop); - if (fputs(scoring_str, pfile->fp) == EOF || - fputc('\n', pfile->fp) == EOF) { - FILE_OP_ERROR(rcpath, "fputs || fputc"); - prefs_write_close_revert(pfile); - g_free(rcpath); - g_free(scoring_str); - return; - } - g_free(scoring_str); - } - - g_free(rcpath); - - if (prefs_write_close(pfile) < 0) { - g_warning(_("failed to write configuration to file\n")); - return; - } -} -*/ - -void prefs_scoring_free(GSList * prefs_scoring) -{ - while (prefs_scoring != NULL) { - ScoringProp * scoring = (ScoringProp *) prefs_scoring->data; - scoringprop_free(scoring); - prefs_scoring = g_slist_remove(prefs_scoring, scoring); - } -} - -static gboolean prefs_scoring_free_func(GNode *node, gpointer data) -{ - FolderItem *item = node->data; - - if(!item->prefs) - return FALSE; - - prefs_scoring_free(item->prefs->scoring); - item->prefs->scoring = NULL; - - return FALSE; -} - -static void prefs_scoring_clear() -{ - GList * cur; - - for (cur = folder_get_list() ; cur != NULL ; cur = g_list_next(cur)) { - Folder *folder; - - folder = (Folder *) cur->data; - g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, - prefs_scoring_free_func, NULL); - } - - prefs_scoring_free(global_scoring); - global_scoring = NULL; -} - -void prefs_scoring_read_config(void) -{ - gchar *rcpath; - FILE *fp; - gchar buf[PREFSBUFSIZE]; - GSList * prefs_scoring = NULL; - FolderItem * item = NULL; - - debug_print(_("Reading headers configuration...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, SCORING_RC, NULL); - if ((fp = fopen(rcpath, "r")) == NULL) { - if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); - g_free(rcpath); - prefs_scoring = NULL; - return; - } - g_free(rcpath); - - prefs_scoring_clear(); - - while (fgets(buf, sizeof(buf), fp) != NULL) { - ScoringProp * scoring; - gchar * tmp; - - g_strchomp(buf); - - if (g_strcasecmp(buf, "[global]") == 0) { - if (item != NULL) { - item->prefs->scoring = prefs_scoring; - item = NULL; - prefs_scoring = global_scoring; - } - } - else if ((*buf == '[') && buf[strlen(buf) - 1] == ']') { - gchar * id; - - if (item == NULL) - global_scoring = prefs_scoring; - else - item->prefs->scoring = prefs_scoring; - - id = buf + 1; - id[strlen(id) - 1] = '\0'; - - item = folder_find_item_from_identifier(id); - if (item == NULL) - prefs_scoring = global_scoring; - else - prefs_scoring = item->prefs->scoring; - } - else if ((*buf != '#') && (*buf != '\0')) { - tmp = buf; - scoring = scoringprop_parse(&tmp); - if (tmp != NULL) { - prefs_scoring = g_slist_append(prefs_scoring, - scoring); - } - else { - /* debug */ - g_warning(_("syntax error : %s\n"), buf); - } - } - } - - if (item == NULL) - global_scoring = prefs_scoring; - else - item->prefs->scoring = prefs_scoring; - - fclose(fp); -} - -static void prefs_scoring_write(FILE * fp, GSList * prefs_scoring) -{ - GSList * cur; - - for (cur = prefs_scoring; cur != NULL; cur = cur->next) { - gchar *scoring_str; - ScoringProp * prop; - - prop = (ScoringProp *) cur->data; - scoring_str = scoringprop_to_string(prop); - if (fputs(scoring_str, fp) == EOF || - fputc('\n', fp) == EOF) { - FILE_OP_ERROR("scoring config", "fputs || fputc"); - g_free(scoring_str); - return; - } - g_free(scoring_str); - } -} - -static gboolean prefs_scoring_write_func(GNode *node, gpointer data) -{ - FolderItem *item = node->data; - FILE * fp = data; - - if (item->prefs->scoring != NULL) { - gchar * id = folder_item_get_identifier(item); - - fprintf(fp, "[%s]\n", id); - g_free(id); - - prefs_scoring_write(fp, item->prefs->scoring); - - fputc('\n', fp); - } - - return FALSE; -} - -static void prefs_scoring_save(FILE * fp) -{ - GList * cur; - - fputs("[global]\n", fp); - prefs_scoring_write(fp, global_scoring); - fputc('\n', fp); - - for (cur = folder_get_list() ; cur != NULL ; cur = g_list_next(cur)) { - Folder *folder; - - folder = (Folder *) cur->data; - g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, - prefs_scoring_write_func, fp); - } -} - -void prefs_scoring_write_config(void) -{ - gchar *rcpath; - PrefFile *pfile; - GSList *cur; - ScoringProp * prop; - - debug_print(_("Writing scoring configuration...\n")); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, SCORING_RC, NULL); - - if ((pfile = prefs_write_open(rcpath)) == NULL) { - g_warning(_("failed to write configuration to file\n")); - g_free(rcpath); - return; - } - - - prefs_scoring_save(pfile->fp); - - g_free(rcpath); - - if (prefs_write_close(pfile) < 0) { - g_warning(_("failed to write configuration to file\n")); - return; - } -} diff --git a/src/scoring.h b/src/scoring.h deleted file mode 100644 index e8627ac0a..000000000 --- a/src/scoring.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SCORING_H - -#define SCORING_H - -#include <glib.h> -#include "matcher.h" -#include "procmsg.h" - -#define MAX_SCORE 9999 -#define MIN_SCORE -9999 - -struct _ScoringProp { - MatcherList * matchers; - int score; -}; - -typedef struct _ScoringProp ScoringProp; - -extern GSList * global_scoring; -extern gint global_kill_score; -extern gint global_important_score; - -ScoringProp * scoringprop_new(MatcherList * matchers, int score); -void scoringprop_free(ScoringProp * prop); -gint scoringprop_score_message(ScoringProp * scoring, MsgInfo * info); - -ScoringProp * scoringprop_parse(gchar ** str); - - -gint score_message(GSList * scoring_list, MsgInfo * info); - -void prefs_scoring_write_config(void); -void prefs_scoring_read_config(void); -gchar * scoringprop_to_string(ScoringProp * prop); - -void prefs_scoring_free(GSList * prefs_scoring); - -#endif diff --git a/src/select-keys.c b/src/select-keys.c deleted file mode 100644 index 638c8ae2e..000000000 --- a/src/select-keys.c +++ /dev/null @@ -1,526 +0,0 @@ -/* 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/gtksignal.h> - -#include "intl.h" -#include "select-keys.h" -#include "utils.h" -#include "gtkutils.h" -#include "inputdialog.h" - -#define DIM(v) (sizeof(v)/sizeof((v)[0])) -#define DIMof(type,member) DIM(((type *)0)->member) - - -enum col_titles { - COL_ALGO, - COL_KEYID, - COL_NAME, - COL_EMAIL, - COL_VALIDITY, - - N_COL_TITLES -}; - -struct select_keys_s { - int okay; - GtkWidget *window; - GtkLabel *toplabel; - GtkCList *clist; - const char *pattern; - GpgmeRecipients rset; - GpgmeCtx select_ctx; - - GtkSortType sort_type; - enum col_titles sort_column; - -}; - - -static void set_row (GtkCList *clist, GpgmeKey key); -static void fill_clist (struct select_keys_s *sk, const char *pattern); -static void create_dialog (struct select_keys_s *sk); -static void open_dialog (struct select_keys_s *sk); -static void close_dialog (struct select_keys_s *sk); -static gint delete_event_cb (GtkWidget *widget, - GdkEventAny *event, gpointer data); -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 other_btn_cb (GtkWidget *widget, gpointer data); -static void sort_keys (struct select_keys_s *sk, enum col_titles column); -static void sort_keys_name (GtkWidget *widget, gpointer data); -static void sort_keys_email (GtkWidget *widget, gpointer data); - - -static void -update_progress (struct select_keys_s *sk, int running, const char *pattern) -{ - static int windmill[] = { '-', '\\', '|', '/' }; - char *buf; - - if (!running) - buf = g_strdup_printf (_("Please select key for `%s'"), - pattern); - else - buf = g_strdup_printf (_("Collecting info for `%s' ... %c"), - pattern, - windmill[running%DIM(windmill)]); - gtk_label_set_text (sk->toplabel, buf); - g_free (buf); -} - - -/** - * 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) -{ - struct select_keys_s sk; - GpgmeError err; - - memset ( &sk, 0, sizeof sk); - - err = gpgme_recipients_new (&sk.rset); - if (err) { - g_message ("** failed to allocate recipients set: %s", - gpgme_strerror (err)); - return NULL; - } - - open_dialog (&sk); - - do { - sk.pattern = recp_names? recp_names->data:NULL; - gtk_clist_clear (sk.clist); - fill_clist (&sk, sk.pattern); - update_progress (&sk, 0, sk.pattern); - gtk_main (); - if (recp_names) - recp_names = recp_names->next; - } while (sk.okay && recp_names); - - close_dialog (&sk); - - if (!sk.okay) { - gpgme_recipients_release (sk.rset); - sk.rset = NULL; - } - return sk.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; - - /* first check whether the key is capable of encryption which is not - * the case for revoked, expired or sign-only keys */ - if ( !gpgme_key_get_ulong_attr (key, GPGME_ATTR_CAN_ENCRYPT, NULL, 0 ) ) - return; - - 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 (struct select_keys_s *sk, const char *pattern) -{ - GtkCList *clist; - GpgmeCtx ctx; - GpgmeError err; - GpgmeKey key; - int running=0; - - g_return_if_fail (sk); - clist = sk->clist; - g_return_if_fail (clist); - - debug_print ("select_keys:fill_clist: pattern `%s'\n", pattern); - - /*gtk_clist_freeze (select_keys.clist);*/ - err = gpgme_new (&ctx); - g_assert (!err); - - sk->select_ctx = ctx; - - update_progress (sk, ++running, pattern); - 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)); - sk->select_ctx = NULL; - return; - } - update_progress (sk, ++running, pattern); - while ( !(err = gpgme_op_keylist_next ( ctx, &key )) ) { - debug_print ("%% %s:%d: insert\n", __FILE__ ,__LINE__ ); - set_row (clist, key ); key = NULL; - update_progress (sk, ++running, pattern); - while (gtk_events_pending ()) - gtk_main_iteration (); - } - debug_print ("%% %s:%d: ready\n", __FILE__ ,__LINE__ ); - if (err != GPGME_EOF) - g_message ("** gpgme_op_keylist_next failed: %s", - gpgme_strerror (err)); - sk->select_ctx = NULL; - gpgme_release (ctx); - /*gtk_clist_thaw (select_keys.clist);*/ -} - - - - -static void -create_dialog (struct select_keys_s *sk) -{ - GtkWidget *window; - GtkWidget *vbox, *vbox2, *hbox; - GtkWidget *bbox; - GtkWidget *scrolledwin; - GtkWidget *clist; - GtkWidget *label; - GtkWidget *other_btn, *select_btn, *cancel_btn; - const char *titles[N_COL_TITLES]; - - g_assert (!sk->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 (delete_event_cb), sk); - gtk_signal_connect (GTK_OBJECT (window), "key_press_event", - GTK_SIGNAL_FUNC (key_pressed_cb), sk); - - 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 ( "" ); - 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, (char**)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); - gtk_signal_connect (GTK_OBJECT(GTK_CLIST(clist)->column[COL_NAME].button), - "clicked", - GTK_SIGNAL_FUNC(sort_keys_name), sk); - gtk_signal_connect (GTK_OBJECT(GTK_CLIST(clist)->column[COL_EMAIL].button), - "clicked", - GTK_SIGNAL_FUNC(sort_keys_email), sk); - - hbox = gtk_hbox_new (FALSE, 8); - gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - gtkut_button_set_create (&bbox, - &other_btn, _("Other"), - &select_btn, _("Select"), - &cancel_btn, _("Cancel")); - gtk_box_pack_end (GTK_BOX (hbox), bbox, FALSE, FALSE, 0); - gtk_widget_grab_default (select_btn); - - gtk_signal_connect (GTK_OBJECT (other_btn), "clicked", - GTK_SIGNAL_FUNC (other_btn_cb), sk); - gtk_signal_connect (GTK_OBJECT (select_btn), "clicked", - GTK_SIGNAL_FUNC (select_btn_cb), sk); - gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", - GTK_SIGNAL_FUNC (cancel_btn_cb), sk); - - - vbox2 = gtk_vbox_new (FALSE, 4); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0); - - gtk_widget_show_all (window); - sk->window = window; - sk->toplabel = GTK_LABEL (label); - sk->clist = GTK_CLIST (clist); -} - - -static void -open_dialog (struct select_keys_s *sk) -{ - if ( !sk->window ) - create_dialog (sk); - sk->okay = 0; - sk->sort_column = N_COL_TITLES; /* use an invalid value */ - sk->sort_type = GTK_SORT_ASCENDING; - gtk_widget_show (sk->window); -} - - -static void -close_dialog (struct select_keys_s *sk) -{ - g_return_if_fail (sk); - gtk_widget_destroy (sk->window); - sk->window = NULL; -} - - -static gint -delete_event_cb (GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - struct select_keys_s *sk = data; - - sk->okay = 0; - gtk_main_quit (); - - return TRUE; -} - - -static void -key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer data) -{ - struct select_keys_s *sk = data; - - g_return_if_fail (sk); - if (event && event->keyval == GDK_Escape) { - sk->okay = 0; - gtk_main_quit (); - } -} - - -static void -select_btn_cb (GtkWidget *widget, gpointer data) -{ - struct select_keys_s *sk = data; - int row; - GpgmeKey key; - - g_return_if_fail (sk); - if (!sk->clist->selection) { - g_message ("** nothing selected"); - return; - } - row = GPOINTER_TO_INT(sk->clist->selection->data); - key = gtk_clist_get_row_data(sk->clist, row); - if (key) { - const char *s = gpgme_key_get_string_attr (key, - GPGME_ATTR_FPR, - NULL, 0 ); - if ( gpgme_key_get_ulong_attr (key, GPGME_ATTR_VALIDITY, NULL, 0 ) - < GPGME_VALIDITY_FULL ) { - g_message ("** FIXME: we are faking the trust calculation"); - } - if (!gpgme_recipients_add_name_with_validity (sk->rset, s, - GPGME_VALIDITY_FULL) ) { - sk->okay = 1; - gtk_main_quit (); - } - } -} - - -static void -cancel_btn_cb (GtkWidget *widget, gpointer data) -{ - struct select_keys_s *sk = data; - - g_return_if_fail (sk); - sk->okay = 0; - if (sk->select_ctx) - gpgme_cancel (sk->select_ctx); - gtk_main_quit (); -} - - -static void -other_btn_cb (GtkWidget *widget, gpointer data) -{ - struct select_keys_s *sk = data; - char *uid; - - g_return_if_fail (sk); - uid = input_dialog ( _("Add key"), - _("Enter another user or key ID\n"), - NULL ); - if (!uid) - return; - fill_clist (sk, uid); - update_progress (sk, 0, sk->pattern); - g_free (uid); -} - - -static gint -cmp_attr (gconstpointer pa, gconstpointer pb, GpgmeAttr attr) -{ - GpgmeKey a = ((GtkCListRow *)pa)->data; - GpgmeKey b = ((GtkCListRow *)pb)->data; - const char *sa, *sb; - - sa = a? gpgme_key_get_string_attr (a, attr, NULL, 0 ) : NULL; - sb = b? gpgme_key_get_string_attr (b, attr, NULL, 0 ) : NULL; - if (!sa) - return !!sb; - if (!sb) - return -1; - return strcasecmp(sa, sb); -} - -static gint -cmp_name (GtkCList *clist, gconstpointer pa, gconstpointer pb) -{ - return cmp_attr (pa, pb, GPGME_ATTR_NAME); -} - -static gint -cmp_email (GtkCList *clist, gconstpointer pa, gconstpointer pb) -{ - return cmp_attr (pa, pb, GPGME_ATTR_EMAIL); -} - -static void -sort_keys ( struct select_keys_s *sk, enum col_titles column) -{ - GtkCList *clist = sk->clist; - - switch (column) { - case COL_NAME: - gtk_clist_set_compare_func (clist, cmp_name); - break; - case COL_EMAIL: - gtk_clist_set_compare_func (clist, cmp_email); - break; - default: - return; - } - - /* column clicked again: toggle as-/decending */ - if ( sk->sort_column == column) { - sk->sort_type = sk->sort_type == GTK_SORT_ASCENDING ? - GTK_SORT_DESCENDING : GTK_SORT_ASCENDING; - } - else - sk->sort_type = GTK_SORT_ASCENDING; - - sk->sort_column = column; - gtk_clist_set_sort_type (clist, sk->sort_type); - gtk_clist_sort (clist); -} - -static void -sort_keys_name (GtkWidget *widget, gpointer data) -{ - sort_keys ((struct select_keys_s*)data, COL_NAME); -} - -static void -sort_keys_email (GtkWidget *widget, gpointer data) -{ - sort_keys ((struct select_keys_s*)data, COL_EMAIL); -} - - -#endif /*USE_GPGME*/ diff --git a/src/select-keys.h b/src/select-keys.h deleted file mode 100644 index 009afc109..000000000 --- a/src/select-keys.h +++ /dev/null @@ -1,29 +0,0 @@ -/* 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 deleted file mode 100644 index 1fec8be84..000000000 --- a/src/send.c +++ /dev/null @@ -1,529 +0,0 @@ -/* - * 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/gtksignal.h> -#include <gtk/gtkwindow.h> -#include <gtk/gtkclist.h> -#include <stdio.h> -#include <string.h> -#include <sys/time.h> -#include <unistd.h> - -#include "intl.h" -#include "send.h" -#include "socket.h" -#include "smtp.h" -#include "prefs_account.h" -#include "account.h" -#include "compose.h" -#include "progressdialog.h" -#include "manage_window.h" -#include "procmsg.h" -#include "procheader.h" -#include "utils.h" -#include "gtkutils.h" - -#define SMTP_PORT 25 -#if USE_SSL -#define SSMTP_PORT 465 -#endif - -typedef struct _SendProgressDialog SendProgressDialog; - -struct _SendProgressDialog -{ - ProgressDialog *dialog; - GList *queue_list; - gboolean cancelled; -}; - -#if !USE_SSL -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 SockInfo *send_smtp_open (const gchar *server, gushort port, - const gchar *domain, gboolean use_smtp_auth); -#else -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, SSLSMTPType ssl); - -static SockInfo *send_smtp_open (const gchar *server, gushort port, - const gchar *domain, gboolean use_smtp_auth, SSLSMTPType ssl); -#endif - -static SendProgressDialog *send_progress_dialog_create(void); -static void send_progress_dialog_destroy(SendProgressDialog *dialog); -static void send_cancel(GtkWidget *widget, gpointer data); - -static gint send_message_with_command(GSList *to_list, gchar * mailcmd, - FILE * fp); - -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; - } - - if (ac_prefs->protocol == A_LOCAL && ac_prefs->use_mail_command) { - val = send_message_with_command(to_list, - ac_prefs->mail_command, - fp); - } else { -#if !USE_SSL - port = ac_prefs->set_smtpport ? ac_prefs->smtpport : SMTP_PORT; -#else - port = ac_prefs->set_smtpport ? ac_prefs->smtpport : - (ac_prefs->ssl_smtp == SSL_SMTP_TUNNEL ? SSMTP_PORT : SMTP_PORT); -#endif - domain = ac_prefs->set_domain ? ac_prefs->domain : NULL; - -#if !USE_SSL - 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); -#else - 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, - ac_prefs->ssl_smtp); -#endif - } - - fclose(fp); - return val; -} - -enum -{ - Q_SENDER = 0, - Q_SMTPSERVER = 1, - Q_RECIPIENTS = 2 -}; - -static gint send_message_with_command(GSList *to_list, gchar * mailcmd, - FILE * fp) -{ - FILE * p; - int len; - gchar * cmdline; - GSList *cur; - gchar buf[BUFFSIZE]; - - len = strlen(mailcmd); - for (cur = to_list; cur != NULL; cur = cur->next) - len += strlen((gchar *)cur->data) + 1; - - cmdline = g_new(gchar, len + 1); - strcpy(cmdline, mailcmd); - - for (cur = to_list; cur != NULL; cur = cur->next) { - cmdline = strncat(cmdline, " ", len); - cmdline = strncat(cmdline, (gchar *)cur->data, len); - } - - log_message(_("Using command to send mail: %s ...\n"), cmdline); - - p = popen(cmdline, "w"); - if (p != NULL) { - while (fgets(buf, sizeof(buf), fp) != NULL) { - strretchomp(buf); - - /* escape when a dot appears on the top */ - if (buf[0] == '.') - fputs(".", p); - - fputs(buf, p); - fputs("\n", p); - } - pclose(p); - } - - log_message(_("Mail sent successfully ...\n")); - - return 0; -} - -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) { -#if !USE_SSL - port = ac->set_smtpport ? ac->smtpport : SMTP_PORT; -#else - port = ac->set_smtpport ? ac->smtpport : (ac->ssl_smtp == SSL_SMTP_TUNNEL ? SSMTP_PORT : SMTP_PORT); -#endif - domain = ac->set_domain ? ac->domain : NULL; -#if !USE_SSL - val = send_message_smtp - (to_list, from, server, port, domain, - ac->userid, ac->passwd, ac->use_smtp_auth, fp); -#else - val = send_message_smtp - (to_list, from, server, port, domain, - ac->userid, ac->passwd, ac->use_smtp_auth, fp, ac->ssl_smtp); -#endif - } else { - g_warning(_("Account not found.\n")); -#if !USE_SSL - val = send_message_smtp - (to_list, from, server, SMTP_PORT, NULL, - NULL, NULL, FALSE, fp); -#else - val = send_message_smtp - (to_list, from, server, SMTP_PORT, NULL, - NULL, NULL, FALSE, fp, FALSE); -#endif - } - } - - slist_free_strings(to_list); - g_slist_free(to_list); - g_free(from); - g_free(server); - fclose(fp); - - return val; -} - -#define EXIT_IF_CANCELLED() \ -{ \ - if (dialog->cancelled) { \ - sock_close(smtp_sock); \ - send_progress_dialog_destroy(dialog); \ - return -1; \ - } \ -} - -#define SEND_EXIT_IF_ERROR(f, s) \ -{ \ - EXIT_IF_CANCELLED(); \ - if (!(f)) { \ - log_warning("Error occurred while %s\n", s); \ - sock_close(smtp_sock); \ - send_progress_dialog_destroy(dialog); \ - return -1; \ - } \ -} - -#define SEND_EXIT_IF_NOTOK(f, s) \ -{ \ - EXIT_IF_CANCELLED(); \ - 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); \ - send_progress_dialog_destroy(dialog); \ - return -1; \ - } \ -} - -#if !USE_SSL -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) -#else -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, SSLSMTPType ssl) -#endif -{ - SockInfo *smtp_sock = NULL; - SendProgressDialog *dialog; - GtkCList *clist; - const gchar *text[3]; - gchar buf[BUFFSIZE]; - gchar str[BUFFSIZE]; - GSList *cur; - gint size; - gint bytes = 0; - struct timeval tv_prev, tv_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); - - size = get_left_file_size(fp); - if (size < 0) return -1; - - dialog = send_progress_dialog_create(); - - text[0] = NULL; - text[1] = server; - text[2] = _("Standby"); - clist = GTK_CLIST(dialog->dialog->clist); - gtk_clist_append(clist, (gchar **)text); - - g_snprintf(buf, sizeof(buf), _("Connecting to SMTP server: %s ..."), - server); - log_message("%s\n", buf); - progress_dialog_set_label(dialog->dialog, buf); - gtk_clist_set_text(clist, 0, 2, _("Connecting")); - GTK_EVENTS_FLUSH(); - -#if !USE_SSL - SEND_EXIT_IF_ERROR((smtp_sock = send_smtp_open - (server, port, domain, use_smtp_auth)), - "connecting to server"); -#else - SEND_EXIT_IF_ERROR((smtp_sock = send_smtp_open - (server, port, domain, use_smtp_auth, ssl)), - "connecting to server"); -#endif - - progress_dialog_set_label(dialog->dialog, _("Sending MAIL FROM...")); - gtk_clist_set_text(clist, 0, 2, _("Sending")); - GTK_EVENTS_FLUSH(); - - SEND_EXIT_IF_NOTOK - (smtp_from(smtp_sock, from, userid, passwd, use_smtp_auth), - "sending MAIL FROM"); - - progress_dialog_set_label(dialog->dialog, _("Sending RCPT TO...")); - GTK_EVENTS_FLUSH(); - - for (cur = to_list; cur != NULL; cur = cur->next) - SEND_EXIT_IF_NOTOK(smtp_rcpt(smtp_sock, (gchar *)cur->data), - "sending RCPT TO"); - - progress_dialog_set_label(dialog->dialog, _("Sending DATA...")); - GTK_EVENTS_FLUSH(); - - SEND_EXIT_IF_NOTOK(smtp_data(smtp_sock), "sending DATA"); - - gettimeofday(&tv_prev, NULL); - - /* send main part */ - while (fgets(buf, sizeof(buf), fp) != NULL) { - bytes += strlen(buf); - strretchomp(buf); - - gettimeofday(&tv_cur, NULL); - if (tv_cur.tv_sec - tv_prev.tv_sec > 0 || - tv_cur.tv_usec - tv_prev.tv_usec > UI_REFRESH_INTERVAL) { - g_snprintf(str, sizeof(str), - _("Sending message (%d / %d bytes)"), - bytes, size); - progress_dialog_set_label(dialog->dialog, str); - progress_dialog_set_percentage - (dialog->dialog, (gfloat)bytes / (gfloat)size); - GTK_EVENTS_FLUSH(); - gettimeofday(&tv_prev, NULL); - } - - /* 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"); - } - - progress_dialog_set_label(dialog->dialog, _("Quitting...")); - GTK_EVENTS_FLUSH(); - - SEND_EXIT_IF_NOTOK(smtp_eom(smtp_sock), "terminating data"); - SEND_EXIT_IF_NOTOK(smtp_quit(smtp_sock), "sending QUIT"); - -#if USE_SSL - ssl_done_socket(smtp_sock); -#endif - - sock_close(smtp_sock); - send_progress_dialog_destroy(dialog); - - return 0; -} - -#if !USE_SSL -static SockInfo *send_smtp_open(const gchar *server, gushort port, - const gchar *domain, gboolean use_smtp_auth) -#else -static SockInfo *send_smtp_open(const gchar *server, gushort port, - const gchar *domain, gboolean use_smtp_auth, SSLSMTPType ssl) -#endif -{ - SockInfo *sock; - gint val; - - g_return_val_if_fail(server != NULL, NULL); - - if ((sock = sock_connect(server, port)) == NULL) { - log_warning(_("Can't connect to SMTP server: %s:%d\n"), - server, port); - return NULL; - } - -#if USE_SSL - if((ssl == SSL_SMTP_TUNNEL) && !ssl_init_socket(sock)) { - log_warning(_("SSL connection failed")); - sock_close(sock); - return NULL; - } -#endif - - if (smtp_ok(sock) == SM_OK) { - val = smtp_helo(sock, domain ? domain : get_domain_name(), - use_smtp_auth); - if (val != SM_OK) { - log_warning(_("Error occurred while sending HELO\n")); - sock_close(sock); - return NULL; - } - } - -#if USE_SSL - if(ssl == SSL_SMTP_STARTTLS) { - val = smtp_starttls(sock, domain ? domain : get_domain_name(), - use_smtp_auth); - if (val != SM_OK) { - log_warning(_("Error occurred while sending STARTTLS\n")); - sock_close(sock); - return NULL; - } - } -#endif - - return sock; -} - - -static SendProgressDialog *send_progress_dialog_create(void) -{ - SendProgressDialog *dialog; - ProgressDialog *progress; - - dialog = g_new0(SendProgressDialog, 1); - - progress = progress_dialog_create(); - gtk_window_set_title(GTK_WINDOW(progress->window), - _("Sending message")); - gtk_signal_connect(GTK_OBJECT(progress->cancel_btn), "clicked", - GTK_SIGNAL_FUNC(send_cancel), dialog); - gtk_signal_connect(GTK_OBJECT(progress->window), "delete_event", - GTK_SIGNAL_FUNC(gtk_true), NULL); - gtk_window_set_modal(GTK_WINDOW(progress->window), TRUE); - 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; - dialog->cancelled = FALSE; - - return dialog; -} - -static void send_progress_dialog_destroy(SendProgressDialog *dialog) -{ - g_return_if_fail(dialog != NULL); - - progress_dialog_destroy(dialog->dialog); - g_free(dialog); -} - -static void send_cancel(GtkWidget *widget, gpointer data) -{ - SendProgressDialog *dialog = data; - - dialog->cancelled = TRUE; -} diff --git a/src/send.h b/src/send.h deleted file mode 100644 index 72fa4fe00..000000000 --- a/src/send.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 __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 deleted file mode 100644 index 316e45650..000000000 --- a/src/session.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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: - break; - } - - g_free(session->server); - g_free(session); -} diff --git a/src/session.h b/src/session.h deleted file mode 100644 index 112a2acdd..000000000 --- a/src/session.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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> - -#include "socket.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; - - SockInfo *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 deleted file mode 100644 index ccbb955ca..000000000 --- a/src/setup.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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 deleted file mode 100644 index 5b889d33d..000000000 --- a/src/setup.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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/sigstatus.c b/src/sigstatus.c deleted file mode 100644 index b2b48715e..000000000 --- a/src/sigstatus.c +++ /dev/null @@ -1,243 +0,0 @@ -/* sigstatus.h - GTK+ based signature status display - * 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 - -#if USE_GPGME - -#include <glib.h> -#include <gtk/gtkwindow.h> -#include <gtk/gtkvbox.h> -#include <gtk/gtkhbox.h> -#include <gtk/gtklabel.h> -#include <gtk/gtkbutton.h> -#include <gdk/gdkkeysyms.h> -#include <gpgme.h> - -#include "intl.h" -#include "gtkutils.h" -#include "utils.h" -#include "sigstatus.h" - -/* remove the window after 30 seconds to avoid cluttering the deskop - * with too many of them */ -#define MY_TIMEOUT (30*1000) - -struct gpgmegtk_sig_status_s { - GtkWidget *mainwindow; - GtkWidget *label; - gint running; - gint destroy_pending; - guint timeout_id; - gint timeout_id_valid; -}; - - -static void do_destroy(GpgmegtkSigStatus hd) -{ - if (!hd->running) { - if (hd->mainwindow) { - gtk_widget_destroy ( hd->mainwindow ); - hd->mainwindow = NULL; - } - if (hd->timeout_id_valid) { - gtk_timeout_remove(hd->timeout_id); - hd->timeout_id_valid = 0; - } - if (hd->destroy_pending) - g_free(hd); - } -} - -static void okay_cb(GtkWidget *widget, gpointer data) -{ - GpgmegtkSigStatus hd = data; - - hd->running = 0; - do_destroy(hd); -} - -static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - GpgmegtkSigStatus hd = data; - - hd->running = 0; - do_destroy(hd); - - return TRUE; -} - -static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) -{ - GpgmegtkSigStatus hd = data; - - if (event && event->keyval == GDK_Escape) { - hd->running = 0; - do_destroy(hd); - } -} - -GpgmegtkSigStatus gpgmegtk_sig_status_create(void) -{ - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *okay_btn; - GtkWidget *okay_area; - GpgmegtkSigStatus hd; - - hd = g_malloc0(sizeof *hd); - hd->running = 1; - - window = gtk_window_new(GTK_WINDOW_DIALOG); - hd->mainwindow = window; - 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_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", - GTK_SIGNAL_FUNC(delete_event), hd); - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", - GTK_SIGNAL_FUNC(key_pressed), hd); - - 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(_("Checking signature")); - hd->label = label; - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 8); - gtk_widget_show(label); - - gtkut_button_set_create(&okay_area, &okay_btn, _("OK"), - NULL, NULL, NULL, NULL); - gtk_box_pack_end(GTK_BOX(vbox), okay_area, FALSE, FALSE, 0); - gtk_widget_grab_default(okay_btn); - gtk_signal_connect(GTK_OBJECT(okay_btn), "clicked", - GTK_SIGNAL_FUNC(okay_cb), hd); - - gtk_widget_show_all(window); - - while (gtk_events_pending()) - gtk_main_iteration(); - - return hd; -} - -static gint timeout_cb(gpointer data) -{ - GpgmegtkSigStatus hd = data; - - hd->running = 0; - hd->timeout_id_valid = 0; - do_destroy(hd); - - return FALSE; -} - -void gpgmegtk_sig_status_destroy(GpgmegtkSigStatus hd) -{ - if( hd ) { - hd->destroy_pending = 1; - if (hd->running && !hd->timeout_id_valid) { - hd->timeout_id = gtk_timeout_add(MY_TIMEOUT, - timeout_cb, hd); - hd->timeout_id_valid = 1; - } - do_destroy(hd); - } -} - -/* Fixme: remove status and get it from the context */ -void gpgmegtk_sig_status_update(GpgmegtkSigStatus hd, GpgmeCtx ctx) -{ - gint idx; - time_t created; - GpgmeSigStat status; - gchar *text = NULL; - - if (!hd || !hd->running || !ctx) - return; - - for (idx = 0; gpgme_get_sig_status(ctx, idx, &status, &created); - idx++) { - gchar *tmp; - const gchar *userid; - GpgmeKey key = NULL; - - if ( !gpgme_get_sig_key (ctx, idx, &key) ) { - userid = gpgme_key_get_string_attr - (key, GPGME_ATTR_USERID, NULL, 0); - } else - userid = "[?]"; - - tmp = g_strdup_printf ( "%s%s%s from \"%s\"", - text? text:"", - text? "\n":"", - gpgmegtk_sig_status_to_string(status), - userid ); - g_free (text); - text = tmp; - gpgme_key_unref (key); - } - - gtk_label_set_text(GTK_LABEL(hd->label), text ); - g_free (text); - - while (gtk_events_pending()) - gtk_main_iteration(); -} - -const char *gpgmegtk_sig_status_to_string(GpgmeSigStat status) -{ - const char *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; - default: - break; - } - - return result; -} - -#endif /* USE_GPGME */ diff --git a/src/sigstatus.h b/src/sigstatus.h deleted file mode 100644 index f4834b071..000000000 --- a/src/sigstatus.h +++ /dev/null @@ -1,33 +0,0 @@ -/* sigstatus.h - GTK+ based signature status display - * 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_SIGSTATUS_H -#define GPGMEGTK_SIGSTATUS_H - -#include <gpgme.h> - -struct gpgmegtk_sig_status_s; -typedef struct gpgmegtk_sig_status_s *GpgmegtkSigStatus; - -GpgmegtkSigStatus gpgmegtk_sig_status_create(void); -void gpgmegtk_sig_status_destroy(GpgmegtkSigStatus hd); -void gpgmegtk_sig_status_update(GpgmegtkSigStatus hd, GpgmeCtx ctx); - -const char *gpgmegtk_sig_status_to_string(GpgmeSigStat status); - -#endif /* GPGMEGTK_SIGSTATUS_H */ diff --git a/src/simple-gettext.c b/src/simple-gettext.c deleted file mode 100644 index be6292bb4..000000000 --- a/src/simple-gettext.c +++ /dev/null @@ -1,386 +0,0 @@ -/* simple-gettext.c - a simplified version of gettext. - * Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. - * - * This file is part of GnuPG. - * - * GnuPG 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. - * - * GnuPG 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 - */ - -/* This is a simplified version of gettext written by Ulrich Drepper. - * It is used for the Win32 version of GnuPG becuase all the overhead - * of gettext is not needed and we have to do some special Win32 stuff. - * I decided that this is far easier than to tweak gettext for the special - * cases (I tried it but it is a lot of code). wk 15.09.99 - */ - -#include <config.h> -#ifdef USE_SIMPLE_GETTEXT -#ifndef __MINGW32__ - #error This file can only be used with MinGW32 -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <windows.h> -#include "w32reg.h" - -typedef unsigned int u32; /* That is fine with MingW32 */ - -typedef unsigned long ulong; - -/* 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 - - -/* Header for binary .mo file format. */ -struct mo_file_header -{ - /* The magic number. */ - u32 magic; - /* The revision number of the file format. */ - u32 revision; - /* The number of strings pairs. */ - u32 nstrings; - /* Offset of table with start offsets of original strings. */ - u32 orig_tab_offset; - /* Offset of table with start offsets of translation strings. */ - u32 trans_tab_offset; - /* Size of hashing table. */ - u32 hash_tab_size; - /* Offset of first hashing entry. */ - u32 hash_tab_offset; -}; - -struct string_desc -{ - /* Length of addressed string. */ - u32 length; - /* Offset of string in file. */ - u32 offset; -}; - - - -struct loaded_domain -{ - char *data; - int must_swap; - u32 nstrings; - char *mapped; - struct string_desc *orig_tab; - struct string_desc *trans_tab; - u32 hash_size; - u32 *hash_tab; -}; - - -static struct loaded_domain *the_domain; - -static __inline__ u32 -do_swap_u32( u32 i ) -{ - return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); -} - -#define SWAPIT(flag, data) ((flag) ? do_swap_u32(data) : (data) ) - - -/* We assume to have `unsigned long int' value with at least 32 bits. */ -#define HASHWORDBITS 32 - -/* 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 __inline__ ulong -hash_string( const char *str_param ) -{ - unsigned long int hval, g; - const char *str = str_param; - - 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; -} - - -static struct loaded_domain * -load_domain( const char *filename ) -{ - FILE *fp; - size_t size; - struct stat st; - struct mo_file_header *data = NULL; - struct loaded_domain *domain = NULL; - size_t to_read; - char *read_ptr; - - fp = fopen( filename, "rb" ); - if( !fp ) - return NULL; /* can't open the file */ - /* we must know about the size of the file */ - if( fstat( fileno(fp ), &st ) - || (size = (size_t)st.st_size) != st.st_size - || size < sizeof (struct mo_file_header) ) { - fclose( fp ); - return NULL; - } - - data = malloc( size ); - if( !data ) { - fclose( fp ); - return NULL; /* out of memory */ - } - - to_read = size; - read_ptr = (char *) data; - do { - long int nb = fread( read_ptr, 1, to_read, fp ); - if( nb < to_read ) { - fclose (fp); - free(data); - return NULL; /* read error */ - } - read_ptr += nb; - to_read -= nb; - } while( to_read > 0 ); - fclose (fp); - - /* 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. */ - free( data ); - return NULL; - } - - domain = calloc( 1, sizeof *domain ); - if( !domain ) { - free( data ); - return NULL; - } - domain->data = (char *) data; - domain->must_swap = data->magic != MAGIC; - - /* Fill in the information about the available tables. */ - switch( SWAPIT(domain->must_swap, data->revision) ) { - case 0: - domain->nstrings = SWAPIT(domain->must_swap, data->nstrings); - domain->orig_tab = (struct string_desc *) - ((char *) data + SWAPIT(domain->must_swap, data->orig_tab_offset)); - domain->trans_tab = (struct string_desc *) - ((char *) data + SWAPIT(domain->must_swap, data->trans_tab_offset)); - domain->hash_size = SWAPIT(domain->must_swap, data->hash_tab_size); - domain->hash_tab = (u32 *) - ((char *) data + SWAPIT(domain->must_swap, data->hash_tab_offset)); - break; - - default: /* This is an invalid revision. */ - free( data ); - free( domain ); - return NULL; - } - - /* allocate an array to keep track of code page mappings */ - domain->mapped = calloc( 1, domain->nstrings ); - if( !domain->mapped ) { - free( data ); - free( domain ); - return NULL; - } - - return domain; -} - - -/**************** - * Set the file used for translations. Pass a NULL to disable - * translation. A new filename may be set at anytime. - * WARNING: After changing the filename you shoudl not access any data - * retrieved by gettext(). - */ -int -set_gettext_file( const char *filename ) -{ - struct loaded_domain *domain = NULL; - - if( filename && *filename ) { - if( filename[0] == '/' - #ifdef HAVE_DRIVE_LETTERS - || ( isalpha(filename[0]) - && filename[1] == ':' - && (filename[2] == '/' || filename[2] == '\\') ) - #endif - ) { - /* absolute path - use it as is */ - domain = load_domain( filename ); - } - else { /* relative path - append ".mo" and get dir from the environment */ - char *buf = NULL; - char *dir; - - dir = read_w32_registry_string( NULL, - "Control Panel\\Mingw32\\NLS", - "MODir" ); - if( dir && (buf=malloc(strlen(dir)+strlen(filename)+1+3+1)) ) { - strcpy(stpcpy(stpcpy(stpcpy( buf, dir),"\\"), filename),".mo"); - domain = load_domain( buf ); - free(buf); - } - free(dir); - } - if( !domain ) { - return -1; } - } - if( the_domain ) { - free( the_domain->data ); - free( the_domain->mapped ); - free( the_domain ); - the_domain = NULL; - } - the_domain = domain; - return NULL; -} - - -static const char* -get_string( struct loaded_domain *domain, u32 idx ) -{ - char *p = domain->data + SWAPIT(domain->must_swap, - domain->trans_tab[idx].offset); - - /* status of domain->mapped[idx] is ignored. - * not sure about the consequences. - * perhaps mapped can entirely be removed? - */ - - /* we assume, strings are already correctly - * encoded. - */ - - return (const char*)p; -} - - - -const char * -gettext( const char *msgid ) -{ - struct loaded_domain *domain; - size_t act = 0; - size_t top, bottom; - - if( !(domain = the_domain) ) { - goto not_found; - } - - /* Locate the MSGID and its translation. */ - if( domain->hash_size > 2 && domain->hash_tab ) { - /* Use the hashing table. */ - u32 len = strlen (msgid); - u32 hash_val = hash_string (msgid); - u32 idx = hash_val % domain->hash_size; - u32 incr = 1 + (hash_val % (domain->hash_size - 2)); - u32 nstr = SWAPIT (domain->must_swap, domain->hash_tab[idx]); - - if ( !nstr ) /* Hash table entry is empty. */ - goto not_found; - - if( SWAPIT(domain->must_swap, - domain->orig_tab[nstr - 1].length) == len - && !strcmp( msgid, - domain->data + SWAPIT(domain->must_swap, - domain->orig_tab[nstr - 1].offset)) ) - return get_string( domain, nstr - 1 ); - - for(;;) { - if (idx >= domain->hash_size - incr) - idx -= domain->hash_size - incr; - else - idx += incr; - - nstr = SWAPIT(domain->must_swap, domain->hash_tab[idx]); - if( !nstr ) - goto not_found; /* Hash table entry is empty. */ - - if ( SWAPIT(domain->must_swap, - domain->orig_tab[nstr - 1].length) == len - && !strcmp (msgid, - domain->data + SWAPIT(domain->must_swap, - domain->orig_tab[nstr - 1].offset))) - return get_string( domain, nstr-1 ); - } - /* 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 - + SWAPIT(domain->must_swap, - domain->orig_tab[act].offset)); - if (cmp_val < 0) - top = act; - else if (cmp_val > 0) - bottom = act + 1; - else - return get_string( domain, act ); - } - - not_found: - return msgid; -} - -#if 0 - unsigned int cp1, cp2; - - cp1 = GetConsoleCP(); - cp2 = GetConsoleOutputCP(); - - log_info("InputCP=%u OutputCP=%u\n", cp1, cp2 ); - - if( !SetConsoleOutputCP( 1252 ) ) - log_info("SetConsoleOutputCP failed: %d\n", (int)GetLastError() ); - - cp1 = GetConsoleCP(); - cp2 = GetConsoleOutputCP(); - log_info("InputCP=%u OutputCP=%u after switch1\n", cp1, cp2 ); -#endif - -#endif /* USE_SIMPLE_GETTEXT */ diff --git a/src/smtp.c b/src/smtp.c deleted file mode 100644 index e36fb0e91..000000000 --- a/src/smtp.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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 <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(SockInfo *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(SockInfo *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(SockInfo *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(SockInfo *sock) -{ - sock_printf(sock, "DATA\r\n"); - if (verbose) - log_print("SMTP> DATA\n"); - - return smtp_ok(sock); -} - -gint smtp_rset(SockInfo *sock) -{ - sock_printf(sock, "RSET\r\n"); - if (verbose) - log_print("SMTP> RSET\n"); - - return smtp_ok(sock); -} - -gint smtp_quit(SockInfo *sock) -{ - sock_printf(sock, "QUIT\r\n"); - if (verbose) - log_print("SMTP> QUIT\n"); - - return smtp_ok(sock); -} - -gint smtp_eom(SockInfo *sock) -{ - sock_printf(sock, ".\r\n"); - if (verbose) - log_print("SMTP> . (EOM)\n"); - - return smtp_ok(sock); -} - -gint smtp_ok(SockInfo *sock) -{ - while ((sock_gets(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] == ' ' || smtp_response[3] == '\0')) - return SM_OK; - else if (smtp_response[3] != '-') - return SM_ERROR; - else if (smtp_response[0] == '5' && - smtp_response[1] == '0' && - (smtp_response[2] == '4' || - smtp_response[2] == '3' || - smtp_response[2] == '1')) - return SM_ERROR; - } - - return SM_UNRECOVERABLE; -} - -#if USE_SSL -gint smtp_starttls(SockInfo *sock, const char *hostname, gboolean use_smtp_auth) -{ - gint ret; - - sock_printf(sock, "STARTTLS\r\n", hostname); - if (verbose) - log_print("SMTP> STARTTLS\n", hostname); - - ret = smtp_ok(sock); - if(ret != SM_OK) - return ret; - - if(!ssl_init_socket_with_method(sock, SSL_METHOD_TLSv1)) { - return SM_ERROR; - } - - return smtp_helo(sock, hostname, use_smtp_auth); -} -#endif \ No newline at end of file diff --git a/src/smtp.h b/src/smtp.h deleted file mode 100644 index 42ae2295e..000000000 --- a/src/smtp.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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> - -#include "socket.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(SockInfo *sock, const char *hostname, gboolean use_smtp_auth); -gint smtp_from(SockInfo *sock, const gchar *from, const gchar *userid, - const gchar *passwd, gboolean use_smtp_auth); -gint smtp_rcpt(SockInfo *sock, const gchar *to); -gint smtp_data(SockInfo *sock); -gint smtp_rset(SockInfo *sock); -gint smtp_quit(SockInfo *sock); -gint smtp_eom(SockInfo *sock); -gint smtp_ok(SockInfo *sock); - -#endif /* __SMTP_H__ */ diff --git a/src/socket.c b/src/socket.c deleted file mode 100644 index 0468b2ce0..000000000 --- a/src/socket.c +++ /dev/null @@ -1,634 +0,0 @@ -/* - * 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 <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" - -#if USE_GIO -#error USE_GIO is currently not supported -#endif - -#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 fd_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 fd_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 fd_accept(gint sock) -{ - struct sockaddr_in caddr; - gint caddr_len; - - caddr_len = sizeof(caddr); - return accept(sock, (struct sockaddr *)&caddr, &caddr_len); -} - - -static gint set_nonblocking_mode(gint fd, gboolean nonblock) -{ - gint flags; - - flags = fcntl(fd, F_GETFL, 0); - if (flags < 0) { - perror("fcntl"); - return -1; - } - - if (nonblock) - flags |= O_NONBLOCK; - else - flags &= ~O_NONBLOCK; - - return fcntl(fd, F_SETFL, flags); -} - -gint sock_set_nonblocking_mode(SockInfo *sock, gboolean nonblock) -{ - g_return_val_if_fail(sock != NULL, -1); - - return set_nonblocking_mode(sock->sock, nonblock); -} - - -static gboolean is_nonblocking_mode(gint fd) -{ - gint flags; - - flags = fcntl(fd, F_GETFL, 0); - if (flags < 0) { - perror("fcntl"); - return FALSE; - } - - return ((flags & O_NONBLOCK) != 0); -} - -gboolean sock_is_nonblocking_mode(SockInfo *sock) -{ - g_return_val_if_fail(sock != NULL, FALSE); - - return is_nonblocking_mode(sock->sock); -} - - -#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 */ - -#if 0 -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 (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 (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"); - 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; -} -#endif - -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"); - 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 - - -gint sock_printf(SockInfo *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_read(SockInfo *sock, gchar *buf, gint len) -{ - g_return_val_if_fail(sock != NULL, -1); - -#if USE_SSL - if(sock->ssl) { - return ssl_read(sock->ssl, buf, len); - } -#endif - return fd_read(sock->sock, buf, len); -} - -gint fd_read(gint fd, gchar *buf, gint len) -{ - return read(fd, buf, len); -} - -#ifdef USE_SSL -gint ssl_read(SSL *ssl, gchar *buf, gint len) -{ - return SSL_read(ssl, buf, len); -} -#endif - -gint sock_write(SockInfo *sock, const gchar *buf, gint len) -{ - g_return_val_if_fail(sock != NULL, -1); - -#if USE_SSL - if(sock->ssl) { - return ssl_write(sock->ssl, buf, len); - } -#endif - return fd_write(sock->sock, buf, len); -} - -gint fd_write(gint fd, const gchar *buf, gint len) -{ - gint n, wrlen = 0; - - while (len) { - n = write(fd, buf, len); - if (n <= 0) - return -1; - len -= n; - wrlen += n; - buf += n; - } - - return wrlen; -} - -#ifdef USE_SSL -gint ssl_write(SSL *ssl, const gchar *buf, gint len) -{ - gint n, wrlen = 0; - - while (len) { - n = SSL_write(ssl, buf, len); - if (n <= 0) - return -1; - len -= n; - wrlen += n; - buf += n; - } - - return wrlen; -} -#endif - -gint fd_gets(gint fd, gchar *buf, gint len) -{ - gchar *newline, *bp = buf; - gint n; - - if (--len < 1) - return -1; - do { - if ((n = recv(fd, bp, len, MSG_PEEK)) <= 0) - return -1; - if ((newline = memchr(bp, '\n', n)) != NULL) - n = newline - bp + 1; - if ((n = read(fd, bp, n)) < 0) - return -1; - bp += n; - len -= n; - } while (!newline && len); - - *bp = '\0'; - return bp - buf; -} - -#if USE_SSL -gint ssl_gets(SSL *ssl, gchar *buf, gint len) -{ - gchar *buf2 = buf; - gboolean newline = FALSE; - gint n, count = 0; - - if (--len < 1) - return -1; - while(len > 0 && !newline) { - *buf2 = '\0'; - if((n = SSL_read(ssl, buf2, 1)) < 0) - return -1; - if(*buf2 == '\n') - newline = TRUE; - buf2 += n; - count += n; - } - - *buf2 = '\0'; - return count; -} -#endif - -gint sock_gets(SockInfo *sock, gchar *buf, gint len) -{ - g_return_val_if_fail(sock != NULL, -1); - -#if USE_SSL - if(sock->ssl) { - return ssl_gets(sock->ssl, buf, len); - } -#endif - return fd_gets(sock->sock, buf, len); -} - -gchar *fd_getline(gint fd) -{ - gchar buf[BUFFSIZE]; - gchar *str = NULL; - gint len; - gulong size = 1; - - while ((len = fd_gets(fd, buf, sizeof(buf))) > 0) { - size += len; - if (!str) - str = g_strdup(buf); - else { - str = g_realloc(str, size); - strcat(str, buf); - } - if (buf[len - 1] == '\n') - break; - } - - return str; -} - -#if USE_SSL -gchar *ssl_getline(SSL *ssl) -{ - gchar buf[BUFFSIZE]; - gchar *str = NULL; - gint len; - gulong size = 1; - - while ((len = ssl_gets(ssl, buf, sizeof(buf))) > 0) { - size += len; - if (!str) - str = g_strdup(buf); - else { - str = g_realloc(str, size); - strcat(str, buf); - } - if (buf[len - 1] == '\n') - break; - } - - return str; -} -#endif - -gchar *sock_getline(SockInfo *sock) -{ - g_return_val_if_fail(sock != NULL, NULL); - -#if USE_SSL - if(sock->ssl) { - return ssl_getline(sock->ssl); - } -#endif - return fd_getline(sock->sock); -} - -gint sock_puts(SockInfo *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(SockInfo *sock) -{ - gint n; - gchar ch; - - g_return_val_if_fail(sock != NULL, -1); - - if ((n = recv(sock->sock, &ch, 1, MSG_PEEK)) < 0) - return -1; - else - return ch; -} - -gint sock_close(SockInfo *sock) -{ - gint ret; - - if (!sock) - return 0; - - ret = fd_close(sock->sock); - g_free(sock->hostname); - g_free(sock); - - return ret; -} - -gint fd_close(gint fd) -{ - return close(fd); -} - -gint sock_gdk_input_add(SockInfo *sock, - GdkInputCondition condition, - GdkInputFunction function, - gpointer data) -{ - g_return_val_if_fail(sock != NULL, -1); - - /* :WK: We have to change some things here becuse most likey - function() does take SockInfo * and not an gint */ - return gdk_input_add(sock->sock, condition, function, data); -} diff --git a/src/socket.h b/src/socket.h deleted file mode 100644 index ac06ef74b..000000000 --- a/src/socket.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * 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 __SOCKET_H__ -#define __SOCKET_H__ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <glib.h> -#include <gdk/gdk.h> /* ugly, just needed for the GdkInputCondition et al. */ - -#if USE_THREADS -# include <pthread.h> -#endif - -typedef struct _SockInfo SockInfo; - -#if USE_SSL -# include "ssl.h" -#endif - -typedef enum -{ - CONN_READY, - CONN_LOOKUPSUCCESS, - CONN_ESTABLISHED, - CONN_LOOKUPFAILED, - CONN_FAILED -} ConnectionState; - -struct _SockInfo -{ -#if USE_GIO - GIOChannel *channel; - gchar *buf; - gint buflen; -#else - gint sock; -#endif - gchar *hostname; - gushort port; - ConnectionState state; - gpointer data; -#if USE_THREADS - pthread_t connect_thr; - pthread_mutex_t mutex; -#endif -#if USE_SSL - SSL *ssl; -#endif -}; - -gint sock_set_nonblocking_mode (SockInfo *sock, gboolean nonblock); -gboolean sock_is_nonblocking_mode (SockInfo *sock); - -SockInfo *sock_connect_nb (const gchar *hostname, gushort port); -SockInfo *sock_connect (const gchar *hostname, gushort port); - - -#if USE_THREADS -SockInfo *sock_connect_with_thread (const gchar *hostname, gushort port); -#endif - -gint sock_printf (SockInfo *sock, const gchar *format, ...) - G_GNUC_PRINTF(2, 3); -gint sock_read (SockInfo *sock, gchar *buf, gint len); -gint sock_write (SockInfo *sock, const gchar *buf, gint len); -gint sock_gets (SockInfo *sock, gchar *buf, gint len); -gchar *sock_getline (SockInfo *sock); -gint sock_puts (SockInfo *sock, const gchar *buf); -gint sock_close (SockInfo *sock); - -/* wrapper functions */ -gint sock_gdk_input_add (SockInfo *sock, - GdkInputCondition condition, - GdkInputFunction function, - gpointer data); - - -/* Functions to directly work on FD. They are needed for pipes */ -gint fd_connect_unix (const gchar *path); -gint fd_open_unix (const gchar *path); -gint fd_accept (gint sock); - -gint fd_read (gint sock, gchar *buf, gint len); -gint fd_write (gint sock, const gchar *buf, gint len); -gint fd_gets (gint sock, gchar *buf, gint len); -gchar *fd_getline (gint sock); -gint fd_close (gint sock); - -#endif /* __SOCKET_H__ */ diff --git a/src/sourcewindow.c b/src/sourcewindow.c deleted file mode 100644 index 0a8c9cf84..000000000 --- a/src/sourcewindow.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - * 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 deleted file mode 100644 index a50a1329b..000000000 --- a/src/sourcewindow.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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/ssl.c b/src/ssl.c deleted file mode 100644 index 308890ed3..000000000 --- a/src/ssl.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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 - -#if USE_SSL - -#include "intl.h" -#include "utils.h" -#include "ssl.h" - -SSL_CTX *ssl_ctx_SSLv23; -SSL_CTX *ssl_ctx_TLSv1; - -void ssl_init() { - SSL_METHOD *meth; - - SSL_library_init(); - SSL_load_error_strings(); - - ssl_ctx_SSLv23 = SSL_CTX_new(SSLv23_client_method()); - if(ssl_ctx_SSLv23 == NULL) { - debug_print(_("SSLv23 not available\n")); - } else { - debug_print(_("SSLv23 available\n")); - } - - ssl_ctx_TLSv1 = SSL_CTX_new(TLSv1_client_method()); - if(ssl_ctx_TLSv1 == NULL) { - debug_print(_("TLSv1 not available\n")); - } else { - debug_print(_("TLSv1 available\n")); - } -} - -void ssl_done() { - if(ssl_ctx_SSLv23) { - SSL_CTX_free(ssl_ctx_SSLv23); - } - - if(ssl_ctx_TLSv1) { - SSL_CTX_free(ssl_ctx_TLSv1); - } -} - -gboolean ssl_init_socket(SockInfo *sockinfo) { - return ssl_init_socket_with_method(sockinfo, SSL_METHOD_SSLv23); -} - -gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSL_METHODs method) { - X509 *server_cert; - int ret; - - switch(method) { - case SSL_METHOD_SSLv23: - if(!ssl_ctx_SSLv23) { - log_warning(_("SSL method not available\n")); - return FALSE; - } - sockinfo->ssl = SSL_new(ssl_ctx_SSLv23); - break; - case SSL_METHOD_TLSv1: - if(!ssl_ctx_TLSv1) { - log_warning(_("SSL method not available\n")); - return FALSE; - } - sockinfo->ssl = SSL_new(ssl_ctx_TLSv1); - break; - default: - log_warning(_("Unknown SSL method *PROGRAM BUG*\n")); - return FALSE; - break; - } - - if(sockinfo->ssl == NULL) { - log_warning(_("Error creating ssl context\n")); - - return FALSE; - } - - SSL_set_fd(sockinfo->ssl, sockinfo->sock); - if((ret = SSL_connect(sockinfo->ssl)) == -1) { - log_warning(_("SSL connect failed (%s)\n"), ERR_error_string(ERR_get_error(), NULL)); - - return FALSE; - } - - /* Get the cipher */ - - log_print(_("SSL connection using %s\n"), SSL_get_cipher(sockinfo->ssl)); - - /* Get server's certificate (note: beware of dynamic allocation) */ - - if((server_cert = SSL_get_peer_certificate(sockinfo->ssl)) != NULL) { - char *str; - - log_print(_("Server certificate:\n")); - - if((str = X509_NAME_oneline(X509_get_subject_name (server_cert),0,0)) != NULL) { - log_print(_(" Subject: %s\n"), str); - free(str); - } - - if((str = X509_NAME_oneline(X509_get_issuer_name (server_cert),0,0)) != NULL) { - log_print(_(" Issuer: %s\n"), str); - free(str); - } - - X509_free(server_cert); - } - - return TRUE; -} - -void ssl_done_socket(SockInfo *sockinfo) { - if(sockinfo->ssl) { - SSL_free(sockinfo->ssl); - } -} - -#endif /* USE_SSL */ \ No newline at end of file diff --git a/src/ssl.h b/src/ssl.h deleted file mode 100644 index 5f2468f10..000000000 --- a/src/ssl.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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. - */ - -#if USE_SSL - -#ifndef __SSL_H__ -#define __SSL_H__ - -#include <openssl/crypto.h> -#include <openssl/x509.h> -#include <openssl/pem.h> -#include <openssl/ssl.h> -#include <openssl/err.h> - -#include "socket.h" - -typedef enum { - SSL_METHOD_SSLv23, - SSL_METHOD_TLSv1 -} SSL_METHODs; - -void ssl_init(); -void ssl_done(); -gboolean ssl_init_socket(SockInfo *sockinfo); -gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSL_METHODs method); -void ssl_done_socket(SockInfo *sockinfo); - -#endif /* __SSL_H__ */ - -#endif /* USE_SSL */ diff --git a/src/statusbar.c b/src/statusbar.c deleted file mode 100644 index df55616a9..000000000 --- a/src/statusbar.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * 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 deleted file mode 100644 index 991b672b6..000000000 --- a/src/statusbar.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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 deleted file mode 100644 index b5f46b47b..000000000 --- a/src/summary_search.c +++ /dev/null @@ -1,381 +0,0 @@ -/* - * 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 deleted file mode 100644 index f2448fb06..000000000 --- a/src/summary_search.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 deleted file mode 100644 index ff946d102..000000000 --- a/src/summaryview.c +++ /dev/null @@ -1,4193 +0,0 @@ -/* - * 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 <gtk/gtkmenuitem.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <unistd.h> -#include <sys/stat.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 "manage_window.h" -#include "alertpanel.h" -#include "inputdialog.h" -#include "statusbar.h" -#include "filter.h" -#include "folder.h" -#include "addressbook.h" -#include "addr_compl.h" -#include "scoring.h" -#include "prefs_folder_item.h" -#include "filtering.h" -#include "labelcolors.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" -#include "pixmaps/ignorethread.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 *boldfont; -static GdkFont *smallfont; - -static GtkStyle *bold_style; -static GtkStyle *bold_marked_style; -static GtkStyle *bold_deleted_style; -static GtkStyle *small_style; -static GtkStyle *small_marked_style; -static GtkStyle *small_deleted_style; - -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 *ignorethreadxpm; -static GdkBitmap *ignorethreadxpmmask; - -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 void summary_set_add_sender_menu (SummaryView *summaryview); - -static void summary_select_node (SummaryView *summaryview, - GtkCTreeNode *node, - gboolean display_msg); - -static guint summary_get_msgnum (SummaryView *summaryview, - GtkCTreeNode *node); - -static GtkCTreeNode *summary_find_next_unread_msg - (SummaryView *summaryview, - GtkCTreeNode *current_node); -static GtkCTreeNode *summary_find_next_marked_msg - (SummaryView *summaryview, - GtkCTreeNode *current_node); -static GtkCTreeNode *summary_find_prev_marked_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); -static void summary_ignore_thread(SummaryView *summaryview); -static void summary_unignore_thread(SummaryView *summaryview); - -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_tree_expanded (GtkCTree *ctree, - GtkCTreeNode *node, - SummaryView *summaryview); -static void summary_tree_collapsed (GtkCTree *ctree, - GtkCTreeNode *node, - 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_score_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_mark_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); -static gint summary_cmp_by_score (GtkCList *clist, - gconstpointer ptr1, - gconstpointer ptr2); -static gint summary_cmp_by_label (GtkCList *clist, - gconstpointer ptr1, - gconstpointer ptr2); - -#if MARK_ALL_READ -static void summary_mark_all_read (SummaryView *summaryview); -#endif - -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/Mark as rea_d"), NULL, summary_mark_as_read, 0, NULL}, -#if MARK_ALL_READ - {N_("/_Mark/Mark all read"), NULL, summary_mark_all_read, 0, NULL}, -#endif - {N_("/_Mark/Ignore thread"), NULL, summary_ignore_thread, 0, NULL}, - {N_("/_Mark/Unignore thread"), NULL, summary_unignore_thread, 0, NULL}, - - {N_("/---"), NULL, NULL, 0, "<Separator>"}, - {N_("/_Reply"), NULL, summary_reply_cb, COMPOSE_REPLY, NULL}, - {N_("/Repl_y to sender"), NULL, summary_reply_cb, COMPOSE_REPLY_TO_SENDER, NULL}, - {N_("/Follow-up and reply to"), NULL, summary_reply_cb, COMPOSE_FOLLOWUP_AND_REPLY_TO, 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 a_ttachment"), - NULL, summary_reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL}, - {N_("/---"), NULL, NULL, 0, "<Separator>"}, - {N_("/Add sender to address _book"), - NULL, NULL, 0, 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} -}; - -#define LABEL_COLORS_ELEMS labelcolors_get_color_count() - -static void label_menu_item_activate_cb(GtkWidget *widget, gpointer data) -{ - guint color = GPOINTER_TO_UINT(data); - SummaryView *view = gtk_object_get_data(GTK_OBJECT(widget), "view"); - - g_return_if_fail(view); - - /* "dont_toggle" state set? */ - if (gtk_object_get_data(GTK_OBJECT(view->label_menu), "dont_toggle")) - return; - - summary_set_label(view, color, NULL); -} - -/* summary_set_label_color() - labelcolor parameter is the color *flag* - * for the messsage; not the color index */ -void summary_set_label_color(GtkCTree *ctree, GtkCTreeNode *node, - guint labelcolor) -{ - GdkColor color; - GtkStyle *style, *prev_style, *ctree_style; - MsgInfo *msginfo; - gint color_index; - - color_index = labelcolor == 0 ? -1 : (gint) labelcolor - 1; - - 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 (color_index < 0 || color_index >= LABEL_COLORS_ELEMS) { - color_index = 0; - color.red = ctree_style->fg[GTK_STATE_NORMAL].red; - color.green = ctree_style->fg[GTK_STATE_NORMAL].green; - color.blue = ctree_style->fg[GTK_STATE_NORMAL].blue; - style->fg[GTK_STATE_NORMAL] = color; - - color.red = ctree_style->fg[GTK_STATE_SELECTED].red; - color.green = ctree_style->fg[GTK_STATE_SELECTED].green; - color.blue = ctree_style->fg[GTK_STATE_SELECTED].blue; - style->fg[GTK_STATE_SELECTED] = color; - gtk_ctree_node_set_row_style(ctree, node, style); - } - else { - color = labelcolors_get_color(color_index); - } - - msginfo = gtk_ctree_node_get_row_data(ctree, node); - - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_LABEL); - MSG_SET_LABEL_VALUE(msginfo->flags, labelcolor); - - if ( style ) { - style->fg[GTK_STATE_NORMAL] = color; - style->fg[GTK_STATE_SELECTED] = color; - gtk_ctree_node_set_row_style(ctree, node, style); - } -} - -void summary_set_label(SummaryView *summaryview, guint labelcolor, GtkWidget *widget) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GtkCList *clist = GTK_CLIST(summaryview->ctree); - GList *cur; - - for (cur = clist->selection; cur != NULL; cur = cur->next) - summary_set_label_color(ctree, GTK_CTREE_NODE(cur->data), labelcolor); -} - -static void label_menu_item_activate_item_cb(GtkMenuItem *label_menu_item, gpointer data) -{ - SummaryView *summaryview; - GtkMenuShell *label_menu; - GtkCheckMenuItem **items; - int n; - GList *cur, *sel; - - summaryview = (SummaryView *) data; - g_return_if_fail(summaryview); - if (NULL == (sel = GTK_CLIST(summaryview->ctree)->selection)) - return; - - label_menu = GTK_MENU_SHELL(summaryview->label_menu); - g_return_if_fail(label_menu); - - items = alloca( (LABEL_COLORS_ELEMS + 1) * sizeof(GtkWidget *)); - g_return_if_fail(items); - - /* NOTE: don't return prematurely because we set the "dont_toggle" state - * for check menu items */ - gtk_object_set_data(GTK_OBJECT(label_menu), "dont_toggle", GINT_TO_POINTER(1)); - - /* clear items. get item pointers. */ - for (n = 0, cur = label_menu->children; cur != NULL; cur = cur->next) { - if (GTK_IS_CHECK_MENU_ITEM(cur->data)) { - gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(cur->data), FALSE); - items[n] = GTK_CHECK_MENU_ITEM(cur->data); - n++; - } - } - - if (n == (LABEL_COLORS_ELEMS + 1)) { - /* iterate all messages and set the state of the appropriate items */ - for (; sel != NULL; sel = sel->next) { - MsgInfo *msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree), - GTK_CTREE_NODE(sel->data)); - gint menu_item; - if (msginfo) { - menu_item = MSG_GET_LABEL_VALUE(msginfo->flags); - if (!items[menu_item]->active) - gtk_check_menu_item_set_state(items[menu_item], TRUE); - } - } - } - else - g_warning("invalid number of color elements (%d)\n", n); - - /* reset "dont_toggle" state */ - gtk_object_set_data(GTK_OBJECT(label_menu), "dont_toggle", GINT_TO_POINTER(0)); -} - -static void summary_create_label_menu(SummaryView *summaryview) -{ - const gint LABEL_MENU_POS = 5; - GtkWidget *label_menu_item; - GtkWidget *label_menu; - GtkWidget *item; - gint i; - - label_menu_item = gtk_menu_item_new_with_label(_("Label")); - gtk_menu_insert(GTK_MENU(summaryview->popupmenu), label_menu_item, LABEL_MENU_POS); - gtk_signal_connect(GTK_OBJECT(label_menu_item), "activate", - GTK_SIGNAL_FUNC(label_menu_item_activate_item_cb), summaryview); - - gtk_widget_show(label_menu_item); - summaryview->label_menu_item = label_menu_item; - - label_menu = gtk_menu_new(); - - /* create sub items. for the menu item activation callback we pass the - * index of label_colors[] as data parameter. for the None color we pass - * an invalid (high) value. also we attach a data pointer so we can - * always get back the SummaryView pointer. */ - - item = gtk_check_menu_item_new_with_label(_("None")); - gtk_menu_append(GTK_MENU(label_menu), item); - gtk_signal_connect(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(label_menu_item_activate_cb), - GUINT_TO_POINTER(0)); - gtk_object_set_data(GTK_OBJECT(item), "view", summaryview); - gtk_widget_show(item); - - item = gtk_menu_item_new(); - gtk_menu_append(GTK_MENU(label_menu), item); - gtk_widget_show(item); - - /* create pixmap/label menu items */ - for (i = 0; i < LABEL_COLORS_ELEMS; i++) { - item = labelcolors_create_check_color_menu_item(i); - gtk_menu_append(GTK_MENU(label_menu), item); - gtk_signal_connect(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(label_menu_item_activate_cb), - GUINT_TO_POINTER(i + 1)); - gtk_object_set_data(GTK_OBJECT(item), "view", summaryview); - gtk_widget_show(item); - } - - gtk_widget_show(label_menu); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(label_menu_item), label_menu); - summaryview->label_menu = label_menu; -} - -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"); - titles[S_COL_SCORE] = _("Score"); - - 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_SCORE, - 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_SCORE, - prefs_common.summary_col_score); - 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_SCORE].button), - "clicked", - GTK_SIGNAL_FUNC(summary_score_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); - gtk_signal_connect - (GTK_OBJECT(GTK_CLIST(ctree)->column[S_COL_MARK].button), - "clicked", - GTK_SIGNAL_FUNC(summary_mark_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_after(GTK_OBJECT(ctree), "tree_expand", - GTK_SIGNAL_FUNC(summary_tree_expanded), - summaryview); - gtk_signal_connect_after(GTK_OBJECT(ctree), "tree_collapse", - GTK_SIGNAL_FUNC(summary_tree_collapsed), - summaryview); - - 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_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, ignorethreadxpm, ignorethreadxpmmask, - ignorethread_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 (!small_style) { - small_style = gtk_style_copy - (gtk_widget_get_style(summaryview->ctree)); - if (!smallfont) - smallfont = gdk_fontset_load(SMALL_FONT); - small_style->font = smallfont; - small_marked_style = gtk_style_copy(small_style); - small_marked_style->fg[GTK_STATE_NORMAL] = - summaryview->color_marked; - small_deleted_style = gtk_style_copy(small_style); - small_deleted_style->fg[GTK_STATE_NORMAL] = - summaryview->color_dim; - } - if (!bold_style) { - bold_style = gtk_style_copy - (gtk_widget_get_style(summaryview->ctree)); - if (!boldfont) - boldfont = gdk_fontset_load(BOLD_FONT); - bold_style->font = boldfont; - bold_marked_style = gtk_style_copy(bold_style); - bold_marked_style->fg[GTK_STATE_NORMAL] = - summaryview->color_marked; - bold_deleted_style = gtk_style_copy(bold_style); - bold_deleted_style->fg[GTK_STATE_NORMAL] = - summaryview->color_dim; - } - - style = gtk_style_copy(gtk_widget_get_style - (summaryview->statlabel_folder)); - - 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); - summary_create_label_menu(summaryview); - -} - -GtkCTreeNode * summary_find_next_important_score(SummaryView *summaryview, - GtkCTreeNode *current_node) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GtkCTreeNode *node; - MsgInfo *msginfo; - gint best_score = MIN_SCORE; - GtkCTreeNode *best_node = NULL; - - 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 (msginfo->score >= summaryview->important_score) - break; - if (msginfo->score > best_score) { - best_score = msginfo->score; - best_node = node; - } - } - - if (node != NULL) - return node; - else - return best_node; -} - -GtkCTreeNode * summary_find_prev_important_score(SummaryView *summaryview, - GtkCTreeNode *current_node) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GtkCTreeNode *node; - MsgInfo *msginfo; - gint best_score = MIN_SCORE; - GtkCTreeNode *best_node = NULL; - - if (current_node) - /*node = current_node;*/ - node = GTK_CTREE_NODE_PREV(current_node); - else - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - - for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) { - msginfo = gtk_ctree_node_get_row_data(ctree, node); - if (msginfo->score >= summaryview->important_score) - break; - if (msginfo->score > best_score) { - best_score = msginfo->score; - best_node = node; - } - } - - if (node != NULL) - return node; - else - return best_node; -} - -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 selected_msgnum = 0; - guint displayed_msgnum = 0; - GtkCTreeNode *selected_node = summaryview->folderview->selected; - GSList *cur; - gint sort_mode; - gint sort_type; - static gboolean locked = FALSE; - - if (locked) { - g_print("Summary view is locked, waiting...\n"); - return FALSE; - /* while (locked) - gtk_main_iteration(); - g_print("unlocked.\n"); */ - } - locked = TRUE; - - STATUSBAR_POP(summaryview->mainwin); - - is_refresh = (!prefs_common.open_inbox_on_inc && - item == summaryview->folder_item) ? TRUE : FALSE; - if (is_refresh) { - selected_msgnum = summary_get_msgnum(summaryview, - summaryview->selected); - displayed_msgnum = summary_get_msgnum(summaryview, - summaryview->displayed); - } - - /* process the marks if any */ - if (summaryview->moved > 0 || summaryview->copied > 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 { - locked = FALSE; - return FALSE; - } - folder_update_op_count(); - } - else if (!summaryview->filtering_happened) { - summary_write_cache(summaryview); - } - - summaryview->filtering_happened = FALSE; - - summaryview->folderview->opened = selected_node; - - gtk_clist_freeze(GTK_CLIST(ctree)); - - summary_clear_list(summaryview); - summary_set_menu_sensitive(summaryview); - if (!is_refresh) - messageview_clear(summaryview->messageview); - - buf = NULL; - if (!item || !item->path || !item->parent || item->no_select || - (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")); - if (is_refresh) - messageview_clear(summaryview->messageview); - summary_clear_all(summaryview); - summaryview->folder_item = item; - gtk_clist_thaw(GTK_CLIST(ctree)); - locked = FALSE; - return TRUE; - } - g_free(buf); - - summaryview->folder_item = item; - - gtk_signal_handler_block_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); - - for(cur = mlist ; cur != NULL ; cur = g_slist_next(cur)) { - MsgInfo * msginfo = (MsgInfo *) cur->data; - - msginfo->score = score_message(global_scoring, msginfo); - if (msginfo->score != MAX_SCORE && - msginfo->score != MIN_SCORE) { - msginfo->score += score_message(item->prefs->scoring, - msginfo); - } - } - - summaryview->killed_messages = NULL; - if ((global_scoring || item->prefs->scoring) && - (item->folder->type == F_NEWS)) { - GSList *not_killed; - gint kill_score; - - not_killed = NULL; - kill_score = prefs_common.kill_score; - if (item->prefs->kill_score > kill_score) - kill_score = item->prefs->kill_score; - for(cur = mlist ; cur != NULL ; cur = g_slist_next(cur)) { - MsgInfo * msginfo = (MsgInfo *) cur->data; - - if (MSG_IS_NEWS(msginfo->flags) && - (msginfo->score <= kill_score)) - summaryview->killed_messages = g_slist_append(summaryview->killed_messages, msginfo); - else - not_killed = g_slist_append(not_killed, - msginfo); - } - g_slist_free(mlist); - mlist = not_killed; - } - - 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_handler_unblock_by_data(GTK_OBJECT(ctree), summaryview); - - gtk_clist_thaw(GTK_CLIST(ctree)); - - /* sort before */ - sort_mode = prefs_folder_item_get_sort_mode(item); - sort_type = prefs_folder_item_get_sort_type(item); - - if (sort_mode != SORT_BY_NONE) { - summaryview->sort_mode = sort_mode; - if (sort_type == GTK_SORT_DESCENDING) - summaryview->sort_type = GTK_SORT_ASCENDING; - else - summaryview->sort_type = GTK_SORT_DESCENDING; - - summary_sort(summaryview, sort_mode); - } - - if (is_refresh) { - summaryview->displayed = - summary_find_msg_by_msgnum(summaryview, - displayed_msgnum); - if (!summaryview->displayed) - messageview_clear(summaryview->messageview); - summary_select_by_msgnum(summaryview, selected_msgnum); - if (!summaryview->selected) { - /* no selected message - select first unread - message, but do not display it */ - 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); - summary_select_node(summaryview, node, FALSE); - } - } else { - /* select first unread message */ - if (sort_mode == SORT_BY_SCORE) - node = summary_find_next_important_score(summaryview, - NULL); - else - 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); - summary_select_node(summaryview, node, - prefs_common.open_unread_on_enter); - } - - 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); - locked = FALSE; - - return TRUE; -} - -void summary_clear_list(SummaryView *summaryview) -{ - GtkCList *clist = GTK_CLIST(summaryview->ctree); - gint optimal_width; - GSList * cur; - - gtk_clist_freeze(clist); - - for(cur = summaryview->killed_messages ; cur != NULL ; - cur = g_slist_next(cur)) { - MsgInfo * msginfo = (MsgInfo *) cur->data; - - procmsg_msginfo_free(msginfo); - } - g_slist_free(summaryview->killed_messages); - summaryview->killed_messages = NULL; - - 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; - } - if (summaryview->subject_table) { - g_hash_table_destroy(summaryview->subject_table); - summaryview->subject_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); -} - -SummarySelection summary_get_selection_type(SummaryView *summaryview) -{ - GtkCList *clist = GTK_CLIST(summaryview->ctree); - 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; - - return selection; -} - -static void summary_set_menu_sensitive(SummaryView *summaryview) -{ - GtkItemFactory *ifactory = summaryview->popupfactory; - SummarySelection selection; - gboolean sens; - - selection = summary_get_selection_type(summaryview); - main_window_set_menu_sensitive(summaryview->mainwin); - - 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); - } - - gtk_widget_set_sensitive(summaryview->label_menu_item, 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 sender", sens); - menu_set_sensitive(ifactory, "/Reply to all", sens); - menu_set_sensitive(ifactory, "/Forward", TRUE); - menu_set_sensitive(ifactory, "/Forward as attachment", TRUE); - - 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) || - (summaryview->folder_item->stype == F_OUTBOX) || - (summaryview->folder_item->stype == F_QUEUE)) - menu_set_sensitive(ifactory, "/Re-edit", 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/Mark as read", TRUE); -#if MARK_ALL_READ - menu_set_sensitive(ifactory, "/Mark/Mark all read", TRUE); -#endif - menu_set_sensitive(ifactory, "/Mark/Ignore thread", TRUE); - menu_set_sensitive(ifactory, "/Mark/Unignore thread", TRUE); - - menu_set_sensitive(ifactory, "/Select all", TRUE); - - if (summaryview->folder_item->folder->account) - sens = summaryview->folder_item->folder->account->protocol - == A_NNTP; - else - sens = FALSE; - menu_set_sensitive(ifactory, "/Follow-up and reply to", sens); -} - -static void summary_set_add_sender_menu(SummaryView *summaryview) -{ - GtkWidget *menu; - GtkWidget *submenu; - MsgInfo *msginfo; - gchar *from; - - menu = gtk_item_factory_get_item(summaryview->popupfactory, - "/Add sender to address book"); - msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree), - summaryview->selected); - if (!msginfo || !msginfo->from) { - gtk_widget_set_sensitive(menu, FALSE); - submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu); - return; - } - - gtk_widget_set_sensitive(menu, TRUE); - Xstrdup_a(from, msginfo->from, return); - eliminate_address_comment(from); - extract_address(from); - addressbook_add_submenu(menu, msginfo->fromname, from, NULL); - -} - -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) { - gtkut_ctree_expand_parent_all(ctree, node); - gtk_sctree_unselect_all(GTK_SCTREE(ctree)); - gtk_sctree_select(GTK_SCTREE(ctree), node); - - /* BUGFIX: select next unread message - * REVERT: causes incorrect folder stats - * gtk_ctree_node_moveto(ctree, node, -1, 0.5, 0.0); - */ - - 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_next_marked(SummaryView *summaryview) -{ - GtkCTreeNode *node; - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - - node = summary_find_next_marked_msg(summaryview, - summaryview->selected); - - if (!node) { - AlertValue val; - - val = alertpanel(_("No more marked messages"), - _("No marked message found. " - "Search from the beginning?"), - _("Yes"), _("No"), NULL); - if (val != G_ALERTDEFAULT) return; - node = summary_find_next_marked_msg(summaryview, - NULL); - } - if (!node) { - alertpanel_notice(_("No marked messages.")); - } else { - 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); - } -} - -void summary_select_prev_marked(SummaryView *summaryview) -{ - GtkCTreeNode *node; - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - - node = summary_find_prev_marked_msg(summaryview, - summaryview->selected); - - if (!node) { - AlertValue val; - - val = alertpanel(_("No more marked messages"), - _("No marked message found. " - "Search from the end?"), - _("Yes"), _("No"), NULL); - if (val != G_ALERTDEFAULT) return; - node = summary_find_prev_marked_msg(summaryview, - NULL); - } - if (!node) { - alertpanel_notice(_("No marked messages.")); - } else { - 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); - } -} - -void summary_select_by_msgnum(SummaryView *summaryview, guint msgnum) -{ - GtkCTreeNode *node; - - node = summary_find_msg_by_msgnum(summaryview, msgnum); - summary_select_node(summaryview, node, FALSE); -} - -/** - * summary_select_node: - * @summaryview: Summary view. - * @node: Summary tree node. - * @display_msg: TRUE to display the selected message. - * - * Select @node (bringing it into view by scrolling and expanding its - * thread, if necessary) and unselect all others. If @display_msg is - * TRUE, display the corresponding message in the message view. - **/ -static void summary_select_node(SummaryView *summaryview, GtkCTreeNode *node, - gboolean display_msg) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - - if (node) { - GTK_EVENTS_FLUSH(); - gtkut_ctree_expand_parent_all(ctree, node); - gtk_ctree_node_moveto(ctree, node, -1, 0.5, 0); - gtk_widget_grab_focus(GTK_WIDGET(ctree)); - gtk_sctree_unselect_all(GTK_SCTREE(ctree)); - summaryview->display_msg = display_msg; - gtk_sctree_select(GTK_SCTREE(ctree), node); - } -} - -static guint summary_get_msgnum(SummaryView *summaryview, GtkCTreeNode *node) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - MsgInfo *msginfo; - - if (!node) - return 0; - msginfo = gtk_ctree_node_get_row_data(ctree, node); - 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; - else - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - - for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) { - msginfo = gtk_ctree_node_get_row_data(ctree, node); - if (MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags)) break; - } - - return node; -} - -static GtkCTreeNode *summary_find_next_marked_msg(SummaryView *summaryview, - GtkCTreeNode *current_node) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GtkCTreeNode *node; - MsgInfo *msginfo; - - if (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_MARKED(msginfo->flags)) break; - } - - return node; -} - -static GtkCTreeNode *summary_find_prev_marked_msg(SummaryView *summaryview, - GtkCTreeNode *current_node) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GtkCTreeNode *node; - MsgInfo *msginfo; - - if (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_MARKED(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 = gtkut_ctree_node_next(ctree, 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) && !MSG_IS_IGNORE_THREAD(msginfo->flags)) - summaryview->newmsgs++; - if (MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_IGNORE_THREAD(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 = gtkut_ctree_node_next(ctree, node)) { - msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); - - if (MSG_IS_NEW(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags)) - summaryview->newmsgs++; - if (MSG_IS_UNREAD(msginfo->flags)&& !MSG_IS_IGNORE_THREAD(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 && - FOLDER_IS_LOCAL(summaryview->folder_item->folder)) { - 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; - - if (!summaryview->folder_item) - return; - - 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; - case SORT_BY_SCORE: - cmp_func = (GtkCListCompareFunc)summary_cmp_by_score; - break; - case SORT_BY_LABEL: - cmp_func = (GtkCListCompareFunc)summary_cmp_by_label; - 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);*/ - - prefs_folder_item_set_config(summaryview->folder_item, - summaryview->sort_type, - summaryview->sort_mode); - prefs_folder_item_save_config(summaryview->folder_item); - - debug_print(_("done.\n")); - STATUSBAR_POP(summaryview->mainwin); - - main_window_cursor_normal(summaryview->mainwin); -} - -static GtkCTreeNode * subject_table_lookup(GHashTable *subject_table, - gchar * subject) -{ - if (g_strncasecmp(subject, "Re: ", 4) == 0) - return g_hash_table_lookup(subject_table, subject + 4); - else - return g_hash_table_lookup(subject_table, subject); -} - -static void subject_table_insert(GHashTable *subject_table, gchar * subject, - GtkCTreeNode * node) -{ - if (g_strncasecmp(subject, "Re: ", 4) == 0) - g_hash_table_insert(subject_table, subject + 4, node); - else - g_hash_table_insert(subject_table, subject, node); -} - -static void summary_set_ctree_from_list(SummaryView *summaryview, - GSList *mlist) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - MsgInfo *msginfo; - MsgInfo *parentinfo; - MsgInfo *cur_msginfo; - GtkCTreeNode *node, *parent; - gchar *text[N_SUMMARY_COLS]; - GHashTable *msgid_table; - GHashTable *subject_table; - GSList * cur; - GtkCTreeNode *cur_parent; - - if (!mlist) return; - - debug_print(_("\tSetting summary from message data...")); - STATUSBAR_PUSH(summaryview->mainwin, - _("Setting summary from message data...")); - gdk_flush(); - - msgid_table = g_hash_table_new(g_str_hash, g_str_equal); - summaryview->msgid_table = msgid_table; - subject_table = g_hash_table_new(g_str_hash, g_str_equal); - summaryview->subject_table = subject_table; - - if (prefs_common.use_addr_book) - start_address_completion(); - - /*main_window_set_thread_option(summaryview->mainwin)*/; - - for (cur = mlist ; cur != NULL; cur = cur->next) { - msginfo = (MsgInfo *)cur->data; - msginfo->threadscore = msginfo->score; - } - - if (global_scoring || summaryview->folder_item->prefs->scoring) { - summaryview->important_score = prefs_common.important_score; - if (summaryview->folder_item->prefs->important_score > - summaryview->important_score) - summaryview->important_score = - summaryview->folder_item->prefs->important_score; - } - - if (prefs_common.enable_thread) { - /*if (summaryview->folder_item->prefs->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); - } - if (parent == NULL && msginfo->subject && - g_strncasecmp(msginfo->subject, "Re: ", 4) == 0) { - parent = subject_table_lookup - (subject_table, msginfo->subject); - } - if(parent) { - parentinfo = gtk_ctree_node_get_row_data(ctree, parent); - if(parentinfo && MSG_IS_IGNORE_THREAD(parentinfo->flags)) { - - if (MSG_IS_NEW(msginfo->flags)) - summaryview->newmsgs--; - if (MSG_IS_UNREAD(msginfo->flags)) - summaryview->unread--; - - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_IGNORE_THREAD); - } - } - - node = gtk_ctree_insert_node - (ctree, parent, NULL, text, 2, - NULL, NULL, NULL, NULL, FALSE, - parent ? TRUE : FALSE); - GTKUT_CTREE_NODE_SET_ROW_DATA(node, msginfo); - summary_set_marks_func(ctree, node, summaryview); - - if (MSG_GET_LABEL(msginfo->flags)) - summary_set_label_color(ctree, node, MSG_GET_LABEL_VALUE(msginfo->flags)); - - /* 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); - if (msginfo->subject && - subject_table_lookup(subject_table, - msginfo->subject) == NULL) { - subject_table_insert(subject_table, - msginfo->subject, node); - } - - cur_parent = parent; - cur_msginfo = msginfo; - while (cur_parent != NULL) { - parentinfo = gtk_ctree_node_get_row_data(ctree, cur_parent); - - if (!parentinfo) - break; - - if (parentinfo->threadscore < - cur_msginfo->threadscore) { - gchar * s; - parentinfo->threadscore = - cur_msginfo->threadscore; -#if 0 - s = itos(parentinfo->threadscore); - gtk_ctree_node_set_text(ctree, cur_parent, S_COL_SCORE, s); -#endif - } - else break; - - cur_msginfo = parentinfo; - if (cur_msginfo->inreplyto && - *cur_msginfo->inreplyto) { - cur_parent = g_hash_table_lookup(msgid_table, cur_msginfo->inreplyto); - } - if (cur_parent == NULL && - cur_msginfo->subject && - g_strncasecmp(cur_msginfo->subject, - "Re: ", 4) == 0) { - cur_parent = subject_table_lookup(subject_table, cur_msginfo->subject); - } - } - } - - /* complete the thread */ - summary_thread_build(summaryview, TRUE); - } 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, FALSE); - GTKUT_CTREE_NODE_SET_ROW_DATA(node, msginfo); - summary_set_marks_func(ctree, node, summaryview); - - if ( MSG_GET_LABEL(msginfo->flags) ) - summary_set_label_color(ctree, node, MSG_GET_LABEL_VALUE(msginfo->flags)); - - if (msginfo->msgid && *msginfo->msgid && - g_hash_table_lookup(msgid_table, msginfo->msgid) - == NULL) - g_hash_table_insert(msgid_table, - msginfo->msgid, node); - - if (msginfo->subject && - subject_table_lookup(subject_table, - msginfo->subject) == NULL) - subject_table_insert(subject_table, - msginfo->subject, 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); - } - - if (prefs_common.use_addr_book) - end_address_completion(); - - 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)); - debug_print("\tsubject hash table size = %d\n", - g_hash_table_size(subject_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; - GSList * cur; - gint filemode = 0; - PrefsFolderItem *prefs; - - if (!summaryview->folder_item || !summaryview->folder_item->path) - return -1; - - if (summaryview->folder_item->folder->update_mark != NULL) - summaryview->folder_item->folder->update_mark(summaryview->folder_item->folder, summaryview->folder_item); - - 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"); - - prefs = summaryview->folder_item->prefs; - if (prefs && prefs->enable_folder_chmod && prefs->folder_chmod) { - /* for cache file */ - filemode = prefs->folder_chmod; - if (filemode & S_IRGRP) filemode |= S_IWGRP; - if (filemode & S_IROTH) filemode |= S_IWOTH; -#if HAVE_FCHMOD - fchmod(fileno(fps.cache_fp), filemode); -#else - chmod(cachefile, filemode); -#endif - } - - 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"); - if (prefs && prefs->enable_folder_chmod && prefs->folder_chmod) { -#if HAVE_FCHMOD - fchmod(fileno(fps.mark_fp), filemode); -#else - chmod(markfile, filemode); -#endif - } - - 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); - - for(cur = summaryview->killed_messages ; cur != NULL ; - cur = g_slist_next(cur)) { - MsgInfo *msginfo = (MsgInfo *) cur->data; - - procmsg_write_cache(msginfo, fps.cache_fp); - procmsg_write_flags(msginfo, fps.mark_fp); - } - - 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; - static gchar *from_name = NULL; - static gchar col_number[11]; - static gchar col_score[11]; - - text[S_COL_MARK] = NULL; - text[S_COL_UNREAD] = NULL; - text[S_COL_MIME] = NULL; - text[S_COL_NUMBER] = itos_buf(col_number, msginfo->msgnum); - text[S_COL_SIZE] = to_human_readable(msginfo->size); -#if 0 - text[S_COL_SCORE] = itos_buf(col_score, msginfo->threadscore); -#else - text[S_COL_SCORE] = itos_buf(col_score, msginfo->score); -#endif - - 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 && - !MSG_IS_NEWS(msginfo->flags)) { - gchar *from; - - Xalloca(from, strlen(msginfo->from) + 1, return); - strcpy(from, msginfo->from); - extract_address(from); - if (account_find_from_address(from)) { - g_free(to); - to = g_strconcat("-->", msginfo->to, NULL); - text[S_COL_FROM] = to; - } - } - - if ((text[S_COL_FROM] != to) && prefs_common.use_addr_book && - msginfo->from) { - gint count; - gchar *from; - - Xalloca(from, strlen(msginfo->from) + 1, return); - strcpy(from, msginfo->from); - extract_address(from); - if (*from) { - count = complete_address(from); - if (count > 1) { - g_free(from_name); - from = get_complete_address(1); - from_name = procheader_get_fromname(from); - g_free(from); - text[S_COL_FROM] = from_name; - } - } - } - - text[S_COL_SUBJECT] = msginfo->subject ? msginfo->subject : - _("(No Subject)"); -} - -#define CHANGE_FLAGS(msginfo) \ -{ \ -if (msginfo->folder->folder->change_flags != NULL) \ -msginfo->folder->folder->change_flags(msginfo->folder->folder, \ - msginfo->folder, \ - msginfo); \ -} - -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); - GTK_EVENTS_FLUSH(); - - 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) && !MSG_IS_IGNORE_THREAD(msginfo->flags)) - summaryview->newmsgs--; - if (MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags)) - summaryview->unread--; - if (MSG_IS_NEW(msginfo->flags) || MSG_IS_UNREAD(msginfo->flags)) { - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW | MSG_UNREAD); - CHANGE_FLAGS(msginfo); - 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 && - summaryview->folder_item->stype != F_OUTBOX && - summaryview->folder_item->stype != F_QUEUE)) 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); - - if (type == GTK_SCROLL_STEP_FORWARD) { - GtkCTreeNode *node; - node = gtkut_ctree_node_next(ctree, summaryview->selected); - if (node) - gtkut_ctree_expand_parent_all(ctree, node); - } - - 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 gboolean summary_search_unread_recursive(GtkCTree *ctree, - GtkCTreeNode *node) -{ - MsgInfo *msginfo; - - if (node) { - msginfo = gtk_ctree_node_get_row_data(ctree, node); - if (msginfo && MSG_IS_UNREAD(msginfo->flags)) - return TRUE; - node = GTK_CTREE_ROW(node)->children; - } else - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - - while (node) { - if (summary_search_unread_recursive(ctree, node) == TRUE) - return TRUE; - node = GTK_CTREE_ROW(node)->sibling; - } - - return FALSE; -} - -static gboolean summary_have_unread_children(SummaryView *summaryview, - GtkCTreeNode *node) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - - if (!node) return FALSE; - - node = GTK_CTREE_ROW(node)->children; - - while (node) { - if (summary_search_unread_recursive(ctree, node) == TRUE) - return TRUE; - node = GTK_CTREE_ROW(node)->sibling; - } - - return FALSE; -} - -static void summary_set_row_marks(SummaryView *summaryview, GtkCTreeNode *row) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GtkStyle *style = NULL; - 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, NULL); - - /* set new/unread column */ - if (MSG_IS_IGNORE_THREAD(flags)) { - gtk_ctree_node_set_pixmap(ctree, row, S_COL_UNREAD, - ignorethreadxpm, ignorethreadxpmmask); - } else 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); - } - - if (prefs_common.bold_unread && - (MSG_IS_UNREAD(flags) || - (!GTK_CTREE_ROW(row)->expanded && - GTK_CTREE_ROW(row)->children && - summary_have_unread_children(summaryview, row)))) - style = bold_style; - - /* set mark column */ - if (MSG_IS_DELETED(flags)) { - gtk_ctree_node_set_pixmap(ctree, row, S_COL_MARK, - deletedxpm, deletedxpmmask); - if (style) - style = bold_deleted_style; - else { - style = small_deleted_style; - } - 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"); - if (style) - style = bold_marked_style; - else { - style = small_marked_style; - } - 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"); - if (style) - style = bold_marked_style; - else { - style = small_marked_style; - } - gtk_ctree_node_set_foreground - (ctree, row, &summaryview->color_marked); - } - else if ((global_scoring || - summaryview->folder_item->prefs->scoring) && - (msginfo->score >= summaryview->important_score) && - (MSG_IS_MARKED(msginfo->flags) || MSG_IS_MOVE(msginfo->flags) || MSG_IS_COPY(msginfo->flags))) { - gtk_ctree_node_set_text(ctree, row, S_COL_MARK, "!"); - gtk_ctree_node_set_foreground(ctree, row, - &summaryview->color_important); - } 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); - } - if (!style) - style = small_style; - - gtk_ctree_node_set_row_style(ctree, row, style); -} - -void summary_set_marks_selected(SummaryView *summaryview) -{ - summary_set_row_marks(summaryview, summaryview->selected); -} - -static void summary_mark_row(SummaryView *summaryview, GtkCTreeNode *row) -{ - gboolean changed = FALSE; - 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--; - changed = TRUE; - } - if (MSG_IS_COPY(msginfo->flags)) { - summaryview->copied--; - changed = TRUE; - } - if (changed && !prefs_common.immediate_exec) { - msginfo->to_folder->op_count--; - if (msginfo->to_folder->op_count == 0) - folderview_update_item(msginfo->to_folder, 0); - } - msginfo->to_folder = NULL; - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED); - MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY); - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_MARKED); - CHANGE_FLAGS(msginfo); - 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); */ - summary_status_show(summaryview); -} - -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) && !MSG_IS_IGNORE_THREAD(msginfo->flags)) - summaryview->newmsgs--; - if (MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags)) - summaryview->unread--; - if (MSG_IS_NEW(msginfo->flags) || - MSG_IS_UNREAD(msginfo->flags)) { - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW | MSG_UNREAD); - CHANGE_FLAGS(msginfo); - summary_set_row_marks(summaryview, row); - debug_print(_("Message %d is marked as 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); -} - -#if MARK_ALL_READ -static void summary_mark_all_read(SummaryView *summaryview) -{ - summary_select_all(summaryview); - summary_mark_as_read(summaryview); - summary_unselect_all(summaryview); -} -#endif - -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_PERM_FLAGS(msginfo->flags, MSG_DELETED); - summaryview->deleted--; - } - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_REPLIED | MSG_FORWARDED); - if (!MSG_IS_UNREAD(msginfo->flags)) { - MSG_SET_PERM_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); - } - - CHANGE_FLAGS(msginfo); - - 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) -{ - gboolean changed = FALSE; - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - MsgInfo *msginfo; - - msginfo = gtk_ctree_node_get_row_data(ctree, row); - - if (MSG_IS_DELETED(msginfo->flags)) return; - - if (MSG_IS_MOVE(msginfo->flags)) { - summaryview->moved--; - changed = TRUE; - } - if (MSG_IS_COPY(msginfo->flags)) { - summaryview->copied--; - changed = TRUE; - } - if (changed && !prefs_common.immediate_exec) { - msginfo->to_folder->op_count--; - if (msginfo->to_folder->op_count == 0) - folderview_update_item(msginfo->to_folder, 0); - } - msginfo->to_folder = NULL; - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED); - MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY); - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_DELETED); - CHANGE_FLAGS(msginfo); - 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) -{ - gboolean changed = FALSE; - 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--; - changed = TRUE; - } - if (MSG_IS_COPY(msginfo->flags)) { - summaryview->copied--; - changed = TRUE; - } - if (changed && !prefs_common.immediate_exec) { - msginfo->to_folder->op_count--; - if (msginfo->to_folder->op_count == 0) - folderview_update_item(msginfo->to_folder, 0); - } - msginfo->to_folder = NULL; - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED); - MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY); - CHANGE_FLAGS(msginfo); - 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) -{ - gboolean changed = FALSE; - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - MsgInfo *msginfo; - - g_return_if_fail(to_folder != NULL); - - msginfo = gtk_ctree_node_get_row_data(ctree, row); - if (MSG_IS_MOVE(msginfo->flags)) { - if (!prefs_common.immediate_exec) { - msginfo->to_folder->op_count--; - if (msginfo->to_folder->op_count == 0) { - folderview_update_item(msginfo->to_folder, 0); - changed = TRUE; - } - } - } - msginfo->to_folder = to_folder; - if (MSG_IS_DELETED(msginfo->flags)) - summaryview->deleted--; - if (MSG_IS_COPY(msginfo->flags)) { - summaryview->copied--; - if (!prefs_common.immediate_exec) - msginfo->to_folder->op_count--; - } - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED); - MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_COPY); - if (!MSG_IS_MOVE(msginfo->flags)) { - MSG_SET_TMP_FLAGS(msginfo->flags, MSG_MOVE); - summaryview->moved++; - changed = TRUE; - } - if (!prefs_common.immediate_exec) { - summary_set_row_marks(summaryview, row); - if (changed) { - msginfo->to_folder->op_count++; - if (msginfo->to_folder->op_count == 1) - folderview_update_item(msginfo->to_folder, 0); - } - } - - 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); - - folderview_update_item(to_folder, 0); - } -} - -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, NULL); - summary_move_selected_to(summaryview, to_folder); -} - -static void summary_copy_row_to(SummaryView *summaryview, GtkCTreeNode *row, - FolderItem *to_folder) -{ - gboolean changed = FALSE; - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - MsgInfo *msginfo; - - g_return_if_fail(to_folder != NULL); - - msginfo = gtk_ctree_node_get_row_data(ctree, row); - if (MSG_IS_COPY(msginfo->flags)) { - if (!prefs_common.immediate_exec) { - msginfo->to_folder->op_count--; - if (msginfo->to_folder->op_count == 0) { - folderview_update_item(msginfo->to_folder, 0); - changed = TRUE; - } - } - } - msginfo->to_folder = to_folder; - if (MSG_IS_DELETED(msginfo->flags)) - summaryview->deleted--; - if (MSG_IS_MOVE(msginfo->flags)) { - summaryview->moved--; - if (!prefs_common.immediate_exec) - msginfo->to_folder->op_count--; - } - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED); - MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE); - if (!MSG_IS_COPY(msginfo->flags)) { - MSG_SET_TMP_FLAGS(msginfo->flags, MSG_COPY); - summaryview->copied++; - changed = TRUE; - } - if (!prefs_common.immediate_exec) { - summary_set_row_marks(summaryview, row); - if (changed) { - msginfo->to_folder->op_count++; - if (msginfo->to_folder->op_count == 1) - folderview_update_item(msginfo->to_folder, 0); - } - } - - 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); - - folderview_update_item(to_folder, 0); - } -} - -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, 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); - g_free(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); - } - - g_free(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 (summaryview->folder_item->prefs->enable_thread) */ - 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 = gtkut_ctree_node_next(ctree, 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 (summaryview->folder_item->prefs->enable_thread) */ - if (prefs_common.enable_thread) - summary_thread_build(summaryview, FALSE); - - 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_TMP_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; - if (summaryview->folder_item->folder->type == F_MH) { - 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; - - for(cur = summaryview->mlist ; cur != NULL ; cur = cur->next) { - MsgInfo * msginfo = cur->data; - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED); - } - - 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); - - if (msginfo->subject && - node == subject_table_lookup(summaryview->subject_table, - msginfo->subject)) { - gchar *s = msginfo->subject + (g_strncasecmp(msginfo->subject, "Re: ", 4) == 0 ? 4 : 0); - g_hash_table_remove(summaryview->subject_table, s); - } - } -} - -/* thread functions */ - -void summary_thread_build(SummaryView *summaryview, gboolean init) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GtkCTreeNode *node; - GtkCTreeNode *next; - GtkCTreeNode *parent; - MsgInfo *msginfo; - - debug_print(_("Building threads...")); - STATUSBAR_PUSH(summaryview->mainwin, _("Building threads...")); - main_window_cursor_wait(summaryview->mainwin); - - gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), - summary_tree_expanded, summaryview); - gtk_clist_freeze(GTK_CLIST(ctree)); - - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - while (node) { - next = GTK_CTREE_ROW(node)->sibling; - - msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); - if (msginfo && msginfo->inreplyto) { - parent = g_hash_table_lookup(summaryview->msgid_table, - msginfo->inreplyto); - if (parent && parent != node) { - gtk_ctree_move(ctree, node, parent, NULL); - gtk_ctree_expand(ctree, node); - } - } - - node = next; - } - - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - - /* for optimization */ - if (init) { - if (prefs_common.expand_thread) { - while (node) { - next = GTK_CTREE_ROW(node)->sibling; - if (GTK_CTREE_ROW(node)->children) - gtk_ctree_expand(ctree, node); - node = next; - } - } else if (prefs_common.bold_unread) { - while (node) { - next = GTK_CTREE_ROW(node)->sibling; - if (GTK_CTREE_ROW(node)->children) - summary_set_row_marks - (summaryview, node); - node = next; - } - } - } else { - while (node) { - next = GTK_CTREE_NODE_NEXT(node); - if (prefs_common.expand_thread) - gtk_ctree_expand(ctree, node); - if (prefs_common.bold_unread && - GTK_CTREE_ROW(node)->children) - summary_set_row_marks(summaryview, node); - node = next; - } - } - - gtk_clist_thaw(GTK_CLIST(ctree)); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), - summary_tree_expanded, summaryview); - - debug_print(_("done.\n")); - STATUSBAR_POP(summaryview->mainwin); - main_window_cursor_normal(summaryview->mainwin); -} - -void summary_unthread(SummaryView *summaryview) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GtkCTreeNode *node; - GtkCTreeNode *child; - GtkCTreeNode *sibling; - GtkCTreeNode *next_child; - - debug_print(_("Unthreading...")); - STATUSBAR_PUSH(summaryview->mainwin, _("Unthreading...")); - main_window_cursor_wait(summaryview->mainwin); - - gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), - summary_tree_collapsed, summaryview); - gtk_clist_freeze(GTK_CLIST(ctree)); - - for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - node != NULL; node = GTK_CTREE_NODE_NEXT(node)) { - child = GTK_CTREE_ROW(node)->children; - sibling = GTK_CTREE_ROW(node)->sibling; - - while (child != NULL) { - next_child = GTK_CTREE_ROW(child)->sibling; - gtk_ctree_move(ctree, child, NULL, sibling); - child = next_child; - } - } - - gtk_clist_thaw(GTK_CLIST(ctree)); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), - summary_tree_collapsed, summaryview); - - 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_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)); - - if (prefs_filtering == NULL) { - 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); - } - else { - summaryview->folder_table = g_hash_table_new(NULL, NULL); - - gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL, - GTK_CTREE_FUNC(summary_filter_func), - summaryview); - - gtk_clist_thaw(GTK_CLIST(summaryview->ctree)); - - folder_item_scan_foreach(summaryview->folder_table); - folderview_update_item_foreach(summaryview->folder_table); - - g_hash_table_destroy(summaryview->folder_table); - summaryview->folder_table = NULL; - - summary_show(summaryview, summaryview->folder_item, FALSE); - } - - 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; - - if (prefs_filtering == NULL) { - /* old filtering */ - 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); - } - else - filter_msginfo_move_or_delete(prefs_filtering, msginfo, - summaryview->folder_table); -} - -/* 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 */ - summary_set_add_sender_menu(summaryview); - 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 - -#define RETURN_IF_LOCKED() \ - if (summaryview->mainwin->lock_count) return - -#define KEY_PRESS_EVENT_STOP() \ - 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"); \ - } - -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: - RETURN_IF_LOCKED(); - BREAK_ON_MODIFIER_KEY(); - KEY_PRESS_EVENT_STOP(); - to_folder = foldersel_folder_sel(NULL, 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) { - PrefsAccount *ac; - ac = summaryview->folder_item->folder->account; - if (ac && ac->protocol == A_NNTP) - compose_new_with_recipient - (ac, summaryview->folder_item->path); - else - compose_new_with_folderitem(ac, summaryview->folder_item); - } else - compose_new(NULL); - return; - case GDK_D: /* Empty trash */ - RETURN_IF_LOCKED(); - BREAK_ON_MODIFIER_KEY(); - KEY_PRESS_EVENT_STOP(); - main_window_empty_trash(summaryview->mainwin, TRUE); - return; - case GDK_Q: /* Quit */ - RETURN_IF_LOCKED(); - BREAK_ON_MODIFIER_KEY(); - - if (prefs_common.confirm_on_exit) { - if (alertpanel(_("Exit"), _("Exit this program?"), - _("OK"), _("Cancel"), NULL) - == G_ALERTDEFAULT) { - manage_window_focus_in - (summaryview->mainwin->window, - NULL, NULL); - app_will_exit(NULL, summaryview->mainwin); - } - } - return; - case GDK_Left: /* Move focus */ - case GDK_Escape: - gtk_widget_grab_focus(summaryview->folderview->ctree); - return; - default: - break; - } - - 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 */ - RETURN_IF_LOCKED(); - 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 */ - RETURN_IF_LOCKED(); - BREAK_ON_MODIFIER_KEY(); - summary_move_to(summaryview); - break; - case GDK_O: /* Copy */ - RETURN_IF_LOCKED(); - BREAK_ON_MODIFIER_KEY(); - summary_copy_to(summaryview); - break; - case GDK_x: /* Execute */ - case GDK_X: - RETURN_IF_LOCKED(); - BREAK_ON_MODIFIER_KEY(); - KEY_PRESS_EVENT_STOP(); - 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: - break; - } -} - -#undef BREAK_ON_MODIFIER_KEY -#undef RETURN_IF_LOCKED -#undef KEY_PRESS_EVENT_STOP - -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_tree_expanded(GtkCTree *ctree, GtkCTreeNode *node, - SummaryView *summaryview) -{ - summary_set_row_marks(summaryview, node); -} - -static void summary_tree_collapsed(GtkCTree *ctree, GtkCTreeNode *node, - SummaryView *summaryview) -{ - summary_set_row_marks(summaryview, node); -} - -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_PERM_FLAGS(msginfo->flags, MSG_MARKED); - CHANGE_FLAGS(msginfo); - 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: - break; - } - - 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_SCORE: - prefs_common.summary_col_score = 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: - break; - } -} - -static void summary_reply_cb(SummaryView *summaryview, guint action, - GtkWidget *widget) -{ - MsgInfo *msginfo; - GList *sel = GTK_CLIST(summaryview->ctree)->selection; - - 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, FALSE); - break; - case COMPOSE_REPLY_WITH_QUOTE: - compose_reply(msginfo, TRUE, FALSE, FALSE); - break; - case COMPOSE_REPLY_WITHOUT_QUOTE: - compose_reply(msginfo, FALSE, FALSE, FALSE); - break; - case COMPOSE_REPLY_TO_SENDER: - compose_reply(msginfo, prefs_common.reply_with_quote, - FALSE, TRUE); - break; - case COMPOSE_FOLLOWUP_AND_REPLY_TO: - compose_followup_and_reply_to(msginfo, - prefs_common.reply_with_quote, - FALSE, TRUE); - break; - case COMPOSE_REPLY_TO_SENDER_WITH_QUOTE: - compose_reply(msginfo, TRUE, FALSE, TRUE); - break; - case COMPOSE_REPLY_TO_SENDER_WITHOUT_QUOTE: - compose_reply(msginfo, FALSE, FALSE, TRUE); - break; - case COMPOSE_REPLY_TO_ALL: - compose_reply(msginfo, prefs_common.reply_with_quote, - TRUE, FALSE); - break; - case COMPOSE_REPLY_TO_ALL_WITH_QUOTE: - compose_reply(msginfo, TRUE, TRUE, FALSE); - break; - case COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE: - compose_reply(msginfo, FALSE, TRUE, FALSE); - break; - case COMPOSE_FORWARD: - if (!sel->next) { - compose_forward(NULL, msginfo, FALSE); - break; - } - /* if (sel->next) FALL THROUGH */ - case COMPOSE_FORWARD_AS_ATTACH: - { - GSList *msginfo_list = NULL; - for ( ; sel != NULL; sel = sel->next) - msginfo_list = g_slist_append(msginfo_list, - gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree), - GTK_CTREE_NODE(sel->data))); - compose_forward_multiple(NULL, msginfo_list); - g_slist_free(msginfo_list); - } - break; - default: - g_warning("summary_reply_cb(): invalid action: %d\n", action); - } - - 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_score_clicked(GtkWidget *button, - SummaryView *summaryview) -{ - summary_sort(summaryview, SORT_BY_SCORE); -} - -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); -} - -static void summary_mark_clicked(GtkWidget *button, - SummaryView *summaryview) -{ - summary_sort(summaryview, SORT_BY_LABEL); -} - -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_SCORE, prefs_common.show_score); - 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); -} - -static gint summary_cmp_by_label(GtkCList *clist, - gconstpointer ptr1, gconstpointer ptr2) -{ - MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; - MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; - - return MSG_GET_LABEL(msginfo1->flags) - MSG_GET_LABEL(msginfo2->flags); -} - -static gint summary_cmp_by_score(GtkCList *clist, - gconstpointer ptr1, gconstpointer ptr2) -{ - MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; - MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; - int diff; - - /* if score are equal, sort by date */ - - diff = msginfo1->threadscore - msginfo2->threadscore; - if (diff != 0) - return diff; - else - return summary_cmp_by_date(clist, ptr1, ptr2); -} - -static void summary_ignore_thread_func(GtkCTree *ctree, GtkCTreeNode *row, gpointer data) -{ - SummaryView *summaryview = (SummaryView *) data; - 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--; - MSG_SET_PERM_FLAGS(msginfo->flags, MSG_IGNORE_THREAD); - - CHANGE_FLAGS(msginfo); - - summary_set_row_marks(summaryview, row); - debug_print(_("Message %d is marked as ignore thread\n"), - msginfo->msgnum); -} - -static void summary_ignore_thread(SummaryView *summaryview) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GList *cur; - - for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next) { - gtk_ctree_pre_recursive(ctree, GTK_CTREE_NODE(cur->data), GTK_CTREE_FUNC(summary_ignore_thread_func), summaryview); - } - - summary_status_show(summaryview); -} - -static void summary_unignore_thread_func(GtkCTree *ctree, GtkCTreeNode *row, gpointer data) -{ - SummaryView *summaryview = (SummaryView *) data; - 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++; - MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_IGNORE_THREAD); - - CHANGE_FLAGS(msginfo); - - summary_set_row_marks(summaryview, row); - debug_print(_("Message %d is marked as unignore thread\n"), - msginfo->msgnum); -} - -static void summary_unignore_thread(SummaryView *summaryview) -{ - GtkCTree *ctree = GTK_CTREE(summaryview->ctree); - GList *cur; - - for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next) { - gtk_ctree_pre_recursive(ctree, GTK_CTREE_NODE(cur->data), GTK_CTREE_FUNC(summary_unignore_thread_func), summaryview); - } - - summary_status_show(summaryview); -} - diff --git a/src/summaryview.h b/src/summaryview.h deleted file mode 100644 index 489198158..000000000 --- a/src/summaryview.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * 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_SCORE = 4, - S_COL_SIZE = 5, - S_COL_DATE = 6, - S_COL_FROM = 7, - S_COL_SUBJECT = 8 -} SummaryColumnPos; - -#define N_SUMMARY_COLS 9 - -typedef enum -{ - SORT_BY_NONE, - SORT_BY_NUMBER, - SORT_BY_SIZE, - SORT_BY_DATE, - SORT_BY_FROM, - SORT_BY_SUBJECT, - SORT_BY_SCORE, - SORT_BY_LABEL -} 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; - GtkWidget *label_menu_item; /* label menu item */ - GtkWidget *label_menu; /* label menu itself */ - - GtkItemFactory *popupfactory; - - GtkWidget *window; - - GtkCTreeNode *selected; - GtkCTreeNode *displayed; - - gboolean msg_is_toggled_on; - gboolean display_msg; - - GdkColor color_important; - GdkColor color_marked; - GdkColor color_dim; - - MainWindow *mainwin; - FolderView *folderview; - HeaderView *headerview; - MessageView *messageview; - HeaderWindow *headerwin; - - FolderItem *folder_item; - - GSList * killed_messages; - gint important_score; - - /* 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; - GHashTable *subject_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; - - /* tell filtering happened recently */ - gboolean filtering_happened; - -}; - -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); - -SummarySelection summary_get_selection_type (SummaryView *summaryview); - -void summary_select_next_unread (SummaryView *summaryview); -void summary_select_next_marked (SummaryView *summaryview); -void summary_select_prev_marked (SummaryView *summaryview); -void summary_select_by_msgnum (SummaryView *summaryview, - guint msgnum); -guint summary_get_current_msgnum (SummaryView *summaryview); -void summary_thread_build (SummaryView *summaryview, - gboolean init); -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); -void summary_set_label (SummaryView *summaryview, guint labelcolor, GtkWidget *widget); -void summary_set_label_color (GtkCTree *ctree, GtkCTreeNode *node, guint labelcolor); - -#endif /* __SUMMARY_H__ */ diff --git a/src/syldap.c b/src/syldap.c deleted file mode 100644 index 188f8c48e..000000000 --- a/src/syldap.c +++ /dev/null @@ -1,1056 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Functions necessary to access LDAP servers. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#ifdef USE_LDAP - -#include <sys/time.h> -#include <glib.h> -#include <ldap.h> -#include <lber.h> -#include <pthread.h> -#include <dlfcn.h> - -#include "mgutils.h" -#include "syldap.h" - -/* -* Specify name to be used. -*/ -void syldap_set_name( SyldapServer* ldapServer, const gchar *value ) { - if( ldapServer->name ) g_free( ldapServer->name ); - if( value ) ldapServer->name = g_strdup( value ); - g_strstrip( ldapServer->name ); -} - -/* -* Specify hostname to be used. -*/ -void syldap_set_host( SyldapServer* ldapServer, const gchar *value ) { - mgu_refresh_cache( ldapServer->addressCache ); - - if( ldapServer->hostName ) g_free( ldapServer->hostName ); - if( value ) ldapServer->hostName = g_strdup( value ); - g_strstrip( ldapServer->hostName ); -} - -/* -* Specify port to be used. -*/ -void syldap_set_port( SyldapServer* ldapServer, const gint value ) { - mgu_refresh_cache( ldapServer->addressCache ); - - if( value > 0 ) { - ldapServer->port = value; - } - else { - ldapServer->port = SYLDAP_DFL_PORT; - } -} - -/* -* Specify base DN to be used. -*/ -void syldap_set_base_dn( SyldapServer* ldapServer, const gchar *value ) { - mgu_refresh_cache( ldapServer->addressCache ); - - if( ldapServer->baseDN ) g_free( ldapServer->baseDN ); - if( value ) ldapServer->baseDN = g_strdup( value ); - g_strstrip( ldapServer->baseDN ); -} - -/* -* Specify bind DN to be used. -*/ -void syldap_set_bind_dn( SyldapServer* ldapServer, const gchar *value ) { - mgu_refresh_cache( ldapServer->addressCache ); - - if( ldapServer->bindDN ) g_free( ldapServer->bindDN ); - if( value ) ldapServer->bindDN = g_strdup( value ); - g_strstrip( ldapServer->bindDN ); -} - -/* -* Specify bind password to be used. -*/ -void syldap_set_bind_password( SyldapServer* ldapServer, const gchar *value ) { - mgu_refresh_cache( ldapServer->addressCache ); - - if( ldapServer->bindPass ) g_free( ldapServer->bindPass ); - if( value ) ldapServer->bindPass = g_strdup( value ); - g_strstrip( ldapServer->bindPass ); -} - -/* -* Specify search criteria to be used. -*/ -void syldap_set_search_criteria( SyldapServer* ldapServer, const gchar *value ) { - mgu_refresh_cache( ldapServer->addressCache ); - - if( ldapServer->searchCriteria ) g_free( ldapServer->searchCriteria ); - if( value ) ldapServer->searchCriteria = g_strdup( value ); - g_strstrip( ldapServer->searchCriteria ); - ldapServer->newSearch = TRUE; -} - -/* -* Specify search value to be searched for. -*/ -void syldap_set_search_value( SyldapServer* ldapServer, const gchar *value ) { - mgu_refresh_cache( ldapServer->addressCache ); - - if( ldapServer->searchValue ) g_free( ldapServer->searchValue ); - if( value ) ldapServer->searchValue = g_strdup( value ); - g_strstrip( ldapServer->searchValue ); - ldapServer->newSearch = TRUE; -} - -/* -* Specify maximum number of entries to retrieve. -*/ -void syldap_set_max_entries( SyldapServer* ldapServer, const gint value ) { - mgu_refresh_cache( ldapServer->addressCache ); - if( value > 0 ) { - ldapServer->maxEntries = value; - } - else { - ldapServer->maxEntries = SYLDAP_MAX_ENTRIES; - } -} - -/* -* Specify timeout value for LDAP operation (in seconds). -*/ -void syldap_set_timeout( SyldapServer* ldapServer, const gint value ) { - mgu_refresh_cache( ldapServer->addressCache ); - if( value > 0 ) { - ldapServer->timeOut = value; - } - else { - ldapServer->timeOut = SYLDAP_DFL_TIMEOUT; - } -} - -/* -* Register a callback function. When called, the function will be passed -* this object as an argument. -*/ -void syldap_set_callback( SyldapServer *ldapServer, void *func ) { - ldapServer->callBack = func; -} - -/* -* Create new LDAP server interface object. -*/ -SyldapServer *syldap_create() { - SyldapServer *ldapServer; - ldapServer = g_new( SyldapServer, 1 ); - ldapServer->name = NULL; - ldapServer->hostName = NULL; - ldapServer->port = SYLDAP_DFL_PORT; - ldapServer->baseDN = NULL; - ldapServer->bindDN = NULL; - ldapServer->bindPass = NULL; - ldapServer->searchCriteria = NULL; - ldapServer->searchValue = NULL; - ldapServer->entriesRead = 0; - ldapServer->maxEntries = SYLDAP_MAX_ENTRIES; - ldapServer->timeOut = SYLDAP_DFL_TIMEOUT; - ldapServer->newSearch = TRUE; - ldapServer->addressCache = mgu_create_cache(); - ldapServer->thread = NULL; - ldapServer->busyFlag = FALSE; - ldapServer->retVal = MGU_SUCCESS; - ldapServer->callBack = NULL; - return ldapServer; -} - -/* -* Refresh internal variables to force a file read. -*/ -void syldap_force_refresh( SyldapServer *ldapServer ) { - mgu_refresh_cache( ldapServer->addressCache ); - ldapServer->newSearch = TRUE; -} - -/* -* Free up LDAP server interface object by releasing internal memory. -*/ -void syldap_free( SyldapServer *ldapServer ) { - g_return_if_fail( ldapServer != NULL ); - - ldapServer->callBack = NULL; - // fprintf( stdout, "freeing... SyldapServer\n" ); - - /* Free internal stuff */ - g_free( ldapServer->name ); - g_free( ldapServer->hostName ); - g_free( ldapServer->baseDN ); - g_free( ldapServer->bindDN ); - g_free( ldapServer->bindPass ); - g_free( ldapServer->searchCriteria ); - g_free( ldapServer->searchValue ); - - ldapServer->port = 0; - ldapServer->entriesRead = 0; - ldapServer->maxEntries = 0; - ldapServer->newSearch = FALSE; - - /* Clear cache */ - mgu_clear_cache( ldapServer->addressCache ); - mgu_free_cache( ldapServer->addressCache ); - - // Clear pointers - ldapServer->name = NULL; - ldapServer->hostName = NULL; - ldapServer->baseDN = NULL; - ldapServer->bindDN = NULL; - ldapServer->bindPass = NULL; - ldapServer->searchCriteria = NULL; - ldapServer->searchValue = NULL; - ldapServer->addressCache = NULL; - ldapServer->thread = NULL; - ldapServer->busyFlag = FALSE; - ldapServer->retVal = MGU_SUCCESS; - - /* Now release file object */ - g_free( ldapServer ); - - // fprintf( stdout, "freeing... SyldapServer done\n" ); - -} - -/* -* Display object to specified stream. -*/ -void syldap_print_data( SyldapServer *ldapServer, FILE *stream ) { - GSList *node; - g_return_if_fail( ldapServer != NULL ); - fprintf( stream, "SyldapServer:\n" ); - fprintf( stream, " name: '%s'\n", ldapServer->name ); - fprintf( stream, "host name: '%s'\n", ldapServer->hostName ); - fprintf( stream, " port: %d\n", ldapServer->port ); - fprintf( stream, " base dn: '%s'\n", ldapServer->baseDN ); - fprintf( stream, " bind dn: '%s'\n", ldapServer->bindDN ); - fprintf( stream, "bind pass: '%s'\n", ldapServer->bindPass ); - fprintf( stream, " criteria: '%s'\n", ldapServer->searchCriteria ); - fprintf( stream, "searchval: '%s'\n", ldapServer->searchValue ); - fprintf( stream, "max entry: %d\n", ldapServer->maxEntries ); - fprintf( stream, " num read: %d\n", ldapServer->entriesRead ); - fprintf( stream, " ret val: %d\n", ldapServer->retVal ); - mgu_print_cache( ldapServer->addressCache, stream ); -} - -/* -* Display object to specified stream. -*/ -void syldap_print_short( SyldapServer *ldapServer, FILE *stream ) { - GSList *node; - g_return_if_fail( ldapServer != NULL ); - fprintf( stream, "SyldapServer:\n" ); - fprintf( stream, " name: '%s'\n", ldapServer->name ); - fprintf( stream, "host name: '%s'\n", ldapServer->hostName ); - fprintf( stream, " port: %d\n", ldapServer->port ); - fprintf( stream, " base dn: '%s'\n", ldapServer->baseDN ); - fprintf( stream, " bind dn: '%s'\n", ldapServer->bindDN ); - fprintf( stream, "bind pass: '%s'\n", ldapServer->bindPass ); - fprintf( stream, " criteria: '%s'\n", ldapServer->searchCriteria ); - fprintf( stream, "searchval: '%s'\n", ldapServer->searchValue ); - fprintf( stream, "max entry: %d\n", ldapServer->maxEntries ); - fprintf( stream, " num read: %d\n", ldapServer->entriesRead ); - fprintf( stream, " ret val: %d\n", ldapServer->retVal ); -} - -/* -* Build an address list entry and append to list of address items. Name is formatted -* as it appears in the common name (cn) attribute. -*/ -void syldap_build_items_cn( SyldapServer *ldapServer, GSList *listName, GSList *listAddr ) { - AddressItem *addrItem = NULL; - GSList *nodeName = listName; - while( nodeName ) { - GSList *nodeAddress = listAddr; - while( nodeAddress ) { - addrItem = mgu_create_address(); - addrItem->name = g_strdup( nodeName->data ); - addrItem->address = g_strdup( nodeAddress->data ); - addrItem->remarks = g_strdup( "" ); - mgu_add_cache( ldapServer->addressCache, addrItem ); - nodeAddress = g_slist_next( nodeAddress ); - ldapServer->entriesRead++; - } - nodeName = g_slist_next( nodeName ); - } - addrItem = NULL; -} - -/* -* Build an address list entry and append to list of address items. Name is formatted -* as "<first-name> <last-name>". -*/ -void syldap_build_items_fl( SyldapServer *ldapServer, GSList *listAddr, GSList *listFirst, GSList *listLast ) { - AddressItem *addrItem = NULL; - GSList *nodeFirst = listFirst; - GSList *nodeAddress = listAddr; - gchar *firstName = NULL, *lastName = NULL, *fullName = NULL; - gint iLen = 0, iLenT = 0; - - // Find longest first name in list - while( nodeFirst ) { - if( firstName == NULL ) { - firstName = nodeFirst->data; - iLen = strlen( firstName ); - } - else { - if( ( iLenT = strlen( nodeFirst->data ) ) > iLen ) { - firstName = nodeFirst->data; - iLen = iLenT; - } - } - nodeFirst = g_slist_next( nodeFirst ); - } - - // Format name - if( listLast ) { - lastName = listLast->data; - } - - if( firstName ) { - if( lastName ) { - fullName = g_strdup_printf( "%s %s", firstName, lastName ); - } - else { - fullName = g_strdup_printf( "%s", firstName ); - } - } - else { - if( lastName ) { - fullName = g_strdup_printf( "%s", lastName ); - } - } - if( fullName ) { - g_strchug( fullName ); g_strchomp( fullName ); - } - - // Add address item - while( nodeAddress ) { - addrItem = mgu_create_address(); - if( fullName ) { - addrItem->name = g_strdup( fullName ); - } - else { - addrItem->name = g_strdup( "" ); - } - addrItem->address = g_strdup( nodeAddress->data ); - addrItem->remarks = g_strdup( "" ); - mgu_add_cache( ldapServer->addressCache, addrItem ); - - nodeAddress = g_slist_next( nodeAddress ); - ldapServer->entriesRead++; - } - g_free( fullName ); - fullName = firstName = lastName = NULL; - addrItem = NULL; -} - -/* -* Add all attribute values to a list. -*/ -GSList *syldap_add_list_values( LDAP *ld, LDAPMessage *entry, char *attr ) { - GSList *list = NULL; - gint i; - char **vals; - if( ( vals = ldap_get_values( ld, entry, attr ) ) != NULL ) { - for( i = 0; vals[i] != NULL; i++ ) { - // printf( "lv\t%s: %s\n", attr, vals[i] ); - list = g_slist_append( list, g_strdup( vals[i] ) ); - } - } - ldap_value_free( vals ); - return list; -} - -/* -* Add a single attribute value to a list. -*/ -GSList *syldap_add_single_value( LDAP *ld, LDAPMessage *entry, char *attr ) { - GSList *list = NULL; - char **vals; - if( ( vals = ldap_get_values( ld, entry, attr ) ) != NULL ) { - if( vals[0] != NULL ) { - // printf( "sv\t%s: %s\n", attr, vals[0] ); - list = g_slist_append( list, g_strdup( vals[0] ) ); - } - } - ldap_value_free( vals ); - return list; -} - -/* -* Free linked lists of character strings. -*/ -void syldap_free_lists( GSList *listName, GSList *listAddr, GSList *listID, GSList *listDN, GSList *listFirst, GSList *listLast ) { - mgu_free_list( listName ); - mgu_free_list( listAddr ); - mgu_free_list( listID ); - mgu_free_list( listDN ); - mgu_free_list( listFirst ); - mgu_free_list( listLast ); -} - -/* -* Check parameters that are required for a search. This should -* be called before performing a search. -* Return: TRUE if search criteria appear OK. -*/ -gboolean syldap_check_search( SyldapServer *ldapServer ) { - g_return_if_fail( ldapServer != NULL ); - ldapServer->retVal = MGU_LDAP_CRITERIA; - - // Test search criteria - if( ldapServer->searchCriteria == NULL ) { - return FALSE; - } - if( strlen( ldapServer->searchCriteria ) < 1 ) { - return FALSE; - } - - if( ldapServer->searchValue == NULL ) { - return FALSE; - } - if( strlen( ldapServer->searchValue ) < 1 ) { - return FALSE; - } - - ldapServer->retVal = MGU_SUCCESS; - return TRUE; -} - -/* -* Perform the LDAP search, reading LDAP entries into cache. -* Note that one LDAP entry can have multiple values for many of its -* attributes. If these attributes are E-Mail addresses; these are -* broken out into separate address items. For any other attribute, -* only the first occurrence is read. -*/ -gint syldap_search( SyldapServer *ldapServer ) { - LDAP *ld; - LDAPMessage *result, *e; - char *attribs[10]; - char *attribute; - gchar *criteria; - BerElement *ber; - int rc, cnt; - GSList *listName = NULL, *listAddress = NULL, *listID = NULL; - GSList *listFirst = NULL, *listLast = NULL, *listDN = NULL; - struct timeval timeout; - gboolean entriesFound = FALSE; - - g_return_if_fail( ldapServer != NULL ); - - ldapServer->retVal = MGU_SUCCESS; - if( ! syldap_check_search( ldapServer ) ) { - return ldapServer->retVal; - } - - // Set timeout - timeout.tv_sec = ldapServer->timeOut; - timeout.tv_usec = 0L; - - ldapServer->entriesRead = 0; - if( ( ld = ldap_init( ldapServer->hostName, ldapServer->port ) ) == NULL ) { - ldapServer->retVal = MGU_LDAP_INIT; - return ldapServer->retVal; - } - - // printf( "connected to LDAP host %s on port %d\n", ldapServer->hostName, ldapServer->port ); - - // Bind to the server, if required - if( ldapServer->bindDN ) { - if( * ldapServer->bindDN != '\0' ) { - // printf( "binding...\n" ); - rc = ldap_simple_bind_s( ld, ldapServer->bindDN, ldapServer->bindPass ); - // printf( "rc=%d\n", rc ); - if( rc != LDAP_SUCCESS ) { - // printf( "LDAP Error: ldap_simple_bind_s: %s\n", ldap_err2string( rc ) ); - ldap_unbind( ld ); - ldapServer->retVal = MGU_LDAP_BIND; - return ldapServer->retVal; - } - } - } - - // Define all attributes we are interested in. - attribs[0] = SYLDAP_ATTR_DN; - attribs[1] = SYLDAP_ATTR_COMMONNAME; - attribs[2] = SYLDAP_ATTR_GIVENNAME; - attribs[3] = SYLDAP_ATTR_SURNAME; - attribs[4] = SYLDAP_ATTR_EMAIL; - attribs[5] = SYLDAP_ATTR_UID; - attribs[6] = NULL; - - // Create LDAP search string and apply search criteria - criteria = g_strdup_printf( ldapServer->searchCriteria, ldapServer->searchValue ); - rc = ldap_search_ext_s( ld, ldapServer->baseDN, LDAP_SCOPE_SUBTREE, criteria, attribs, 0, NULL, NULL, - &timeout, 0, &result ); - g_free( criteria ); - criteria = NULL; - if( rc == LDAP_TIMEOUT ) { - ldap_unbind( ld ); - ldapServer->retVal = MGU_LDAP_TIMEOUT; - return ldapServer->retVal; - } - if( rc != LDAP_SUCCESS ) { - // printf( "LDAP Error: ldap_search_st: %s\n", ldap_err2string( rc ) ); - ldap_unbind( ld ); - ldapServer->retVal = MGU_LDAP_SEARCH; - return ldapServer->retVal; - } - - // printf( "Total results are: %d\n", ldap_count_entries( ld, result ) ); - - // Clear the cache if we have new entries, otherwise leave untouched. - if( ldap_count_entries( ld, result ) > 0 ) { - mgu_clear_cache( ldapServer->addressCache ); - } - - // Process results - ldapServer->entriesRead = 0; - for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) { - entriesFound = TRUE; - if( ldapServer->entriesRead >= ldapServer->maxEntries ) break; - // printf( "DN: %s\n", ldap_get_dn( ld, e ) ); - - // Process all attributes - for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL; - attribute = ldap_next_attribute( ld, e, ber ) ) { - if( strcasecmp( attribute, SYLDAP_ATTR_COMMONNAME ) == 0 ) { - listName = syldap_add_list_values( ld, e, attribute ); - } - if( strcasecmp( attribute, SYLDAP_ATTR_EMAIL ) == 0 ) { - listAddress = syldap_add_list_values( ld, e, attribute ); - } - if( strcasecmp( attribute, SYLDAP_ATTR_UID ) == 0 ) { - listID = syldap_add_single_value( ld, e, attribute ); - } - if( strcasecmp( attribute, SYLDAP_ATTR_GIVENNAME ) == 0 ) { - listFirst = syldap_add_list_values( ld, e, attribute ); - } - if( strcasecmp( attribute, SYLDAP_ATTR_SURNAME ) == 0 ) { - listLast = syldap_add_single_value( ld, e, attribute ); - } - if( strcasecmp( attribute, SYLDAP_ATTR_DN ) == 0 ) { - listDN = syldap_add_single_value( ld, e, attribute ); - } - } - - // Free memory used to store attribute - ldap_memfree( attribute ); - - // Format and add items to cache - syldap_build_items_fl( ldapServer, listAddress, listFirst, listLast ); - - // Free up - syldap_free_lists( listName, listAddress, listID, listDN, listFirst, listLast ); - listName = listAddress = listID = listFirst = listLast = listDN = NULL; - - if( ber != NULL ) { - ber_free( ber, 0 ); - } - } - - syldap_free_lists( listName, listAddress, listID, listDN, listFirst, listLast ); - listName = listAddress = listID = listFirst = listLast = listDN = NULL; - - // Free up and disconnect - ldap_msgfree( result ); - ldap_unbind( ld ); - ldapServer->newSearch = FALSE; - if( entriesFound ) { - ldapServer->retVal = MGU_SUCCESS; - } - else { - ldapServer->retVal = MGU_LDAP_NOENTRIES; - } - return ldapServer->retVal; -} - -// ============================================================================================ -/* -* Read data into list. Main entry point -* Return: TRUE if file read successfully. -*/ -// ============================================================================================ -gint syldap_read_data( SyldapServer *ldapServer ) { - g_return_if_fail( ldapServer != NULL ); - - pthread_detach( pthread_self() ); - if( ldapServer->newSearch ) { - // Read data into the list - syldap_search( ldapServer ); - - // Mark cache - ldapServer->addressCache->modified = FALSE; - ldapServer->addressCache->dataRead = TRUE; - } - - // Callback - ldapServer->busyFlag = FALSE; - if( ldapServer->callBack ) { - sched_yield(); - ( ldapServer->callBack )( ldapServer ); - } - ldapServer->thread = NULL; - pthread_exit( NULL ); - return ldapServer->retVal; -} - -// ============================================================================================ -/* -* Cancel read with thread. -*/ -// ============================================================================================ -void syldap_cancel_read( SyldapServer *ldapServer ) { - g_return_if_fail( ldapServer != NULL ); - if( ldapServer->thread ) { -printf( "thread cancelled\n" ); - pthread_cancel( *ldapServer->thread ); - } - ldapServer->thread = NULL; - ldapServer->busyFlag = FALSE; -} - -// ============================================================================================ -/* -* Read data into list using a background thread. -* Return: TRUE if file read successfully. Callback function will be -* notified when search is complete. -*/ -// ============================================================================================ -gint syldap_read_data_th( SyldapServer *ldapServer ) { - pthread_t thread; - g_return_if_fail( ldapServer != NULL ); - - ldapServer->busyFlag = FALSE; - syldap_check_search( ldapServer ); - if( ldapServer->retVal == MGU_SUCCESS ) { - ldapServer->busyFlag = TRUE; - ldapServer->thread = &thread; - pthread_create( ldapServer->thread, NULL, (void *) &syldap_read_data, (void *) ldapServer ); - } - return ldapServer->retVal; -} - -/* -* Return link list of address items. -* Return: TRUE if file read successfully. -*/ -GList *syldap_get_address_list( const SyldapServer *ldapServer ) { - g_return_if_fail( ldapServer != NULL ); - return ldapServer->addressCache->addressList; -} - -#define SYLDAP_TEST_FILTER "(objectclass=*)" -#define SYLDAP_SEARCHBASE_V2 "cn=config" -#define SYLDAP_SEARCHBASE_V3 "" -#define SYLDAP_V2_TEST_ATTR "database" -#define SYLDAP_V3_TEST_ATTR "namingcontexts" - -/* -* Attempt to discover the base DN for the server. -* Enter: -* host Host name -* port Port number -* bindDN Bind DN (optional). -* bindPW Bind PW (optional). -* tov Timeout value (seconds), or 0 for none, default 30 secs. -* Return: List of Base DN's, or NULL if could not read. Base DN should -* be g_free() when done. -*/ -GList *syldap_read_basedn_s( const gchar *host, const gint port, const gchar *bindDN, const gchar *bindPW, const gint tov ) { - GList *baseDN = NULL; - LDAP *ld; - int rc, i; - LDAPMessage *result, *e; - char *attribs[10]; - BerElement *ber; - char *attribute; - char **vals; - struct timeval timeout; - - if( host == NULL ) return baseDN; - if( port < 1 ) return baseDN; - - // Set timeout - timeout.tv_usec = 0L; - if( tov > 0 ) { - timeout.tv_sec = tov; - } - else { - timeout.tv_sec = 30L; - } - - // Connect to server. - if( ( ld = ldap_init( host, port ) ) == NULL ) { - return baseDN; - } - - // Bind to the server, if required - if( bindDN ) { - if( *bindDN != '\0' ) { - rc = ldap_simple_bind_s( ld, bindDN, bindPW ); - if( rc != LDAP_SUCCESS ) { - // printf( "LDAP Error: ldap_simple_bind_s: %s\n", ldap_err2string( rc ) ); - ldap_unbind( ld ); - return baseDN; - } - } - } - - // Test for LDAP version 3 - attribs[0] = SYLDAP_V3_TEST_ATTR; - attribs[1] = NULL; - rc = ldap_search_ext_s( ld, SYLDAP_SEARCHBASE_V3, LDAP_SCOPE_BASE, SYLDAP_TEST_FILTER, attribs, - 0, NULL, NULL, &timeout, 0, &result ); - if( rc == LDAP_SUCCESS ) { - // Process entries - for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) { - // printf( "DN: %s\n", ldap_get_dn( ld, e ) ); - - // Process attributes - for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL; - attribute = ldap_next_attribute( ld, e, ber ) ) { - if( strcasecmp( attribute, SYLDAP_V3_TEST_ATTR ) == 0 ) { - if( ( vals = ldap_get_values( ld, e, attribute ) ) != NULL ) { - for( i = 0; vals[i] != NULL; i++ ) { - // printf( "\t%s: %s\n", attribute, vals[i] ); - baseDN = g_list_append( baseDN, g_strdup( vals[i] ) ); - } - } - ldap_value_free( vals ); - } - } - ldap_memfree( attribute ); - if( ber != NULL ) { - ber_free( ber, 0 ); - } - } - ldap_msgfree( result ); - } - else { - } - - if( baseDN == NULL ) { - // Test for LDAP version 2 - attribs[0] = NULL; - rc = ldap_search_ext_s( ld, SYLDAP_SEARCHBASE_V2, LDAP_SCOPE_BASE, SYLDAP_TEST_FILTER, attribs, - 0, NULL, NULL, &timeout, 0, &result ); - if( rc == LDAP_SUCCESS ) { - // Process entries - for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) { - // if( baseDN ) break; - // printf( "DN: %s\n", ldap_get_dn( ld, e ) ); - - // Process attributes - for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL; - attribute = ldap_next_attribute( ld, e, ber ) ) { - // if( baseDN ) break; - if( strcasecmp( attribute, SYLDAP_V2_TEST_ATTR ) == 0 ) { - if( ( vals = ldap_get_values( ld, e, attribute ) ) != NULL ) { - for( i = 0; vals[i] != NULL; i++ ) { - char *ch; - // Strip the 'ldb:' from the front of the value - ch = ( char * ) strchr( vals[i], ':' ); - if( ch ) { - gchar *bn = g_strdup( ++ch ); - g_strchomp( bn ); - g_strchug( bn ); - baseDN = g_list_append( baseDN, g_strdup( bn ) ); - } - } - } - ldap_value_free( vals ); - } - } - ldap_memfree( attribute ); - if( ber != NULL ) { - ber_free( ber, 0 ); - } - } - ldap_msgfree( result ); - } - } - ldap_unbind( ld ); - return baseDN; -} - -/* -* Attempt to discover the base DN for the server. -* Enter: ldapServer Server to test. -* Return: List of Base DN's, or NULL if could not read. Base DN should -* be g_free() when done. Return code set in ldapServer. -*/ -GList *syldap_read_basedn( SyldapServer *ldapServer ) { - GList *baseDN = NULL; - LDAP *ld; - int rc, i; - LDAPMessage *result, *e; - char *attribs[10]; - BerElement *ber; - char *attribute; - char **vals; - struct timeval timeout; - - ldapServer->retVal = MGU_BAD_ARGS; - if( ldapServer == NULL ) return baseDN; - if( ldapServer->hostName == NULL ) return baseDN; - if( ldapServer->port < 1 ) return baseDN; - - // Set timeout - timeout.tv_usec = 0L; - if( ldapServer->timeOut > 0 ) { - timeout.tv_sec = ldapServer->timeOut; - } - else { - timeout.tv_sec = 30L; - } - - // Connect to server. - if( ( ld = ldap_init( ldapServer->hostName, ldapServer->port ) ) == NULL ) { - ldapServer->retVal = MGU_LDAP_INIT; - return baseDN; - } - - // Bind to the server, if required - if( ldapServer->bindDN ) { - if( *ldapServer->bindDN != '\0' ) { - rc = ldap_simple_bind_s( ld, ldapServer->bindDN, ldapServer->bindPass ); - if( rc != LDAP_SUCCESS ) { - //printf( "LDAP Error: ldap_simple_bind_s: %s\n", ldap_err2string( rc ) ); - ldap_unbind( ld ); - ldapServer->retVal = MGU_LDAP_BIND; - return baseDN; - } - } - } - - ldapServer->retVal = MGU_LDAP_SEARCH; - - // Test for LDAP version 3 - attribs[0] = SYLDAP_V3_TEST_ATTR; - attribs[1] = NULL; - rc = ldap_search_ext_s( ld, SYLDAP_SEARCHBASE_V3, LDAP_SCOPE_BASE, SYLDAP_TEST_FILTER, attribs, - 0, NULL, NULL, &timeout, 0, &result ); - if( rc == LDAP_SUCCESS ) { - // Process entries - for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) { - // printf( "DN: %s\n", ldap_get_dn( ld, e ) ); - - // Process attributes - for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL; - attribute = ldap_next_attribute( ld, e, ber ) ) { - if( strcasecmp( attribute, SYLDAP_V3_TEST_ATTR ) == 0 ) { - if( ( vals = ldap_get_values( ld, e, attribute ) ) != NULL ) { - for( i = 0; vals[i] != NULL; i++ ) { - // printf( "\t%s: %s\n", attribute, vals[i] ); - baseDN = g_list_append( baseDN, g_strdup( vals[i] ) ); - } - } - ldap_value_free( vals ); - } - } - ldap_memfree( attribute ); - if( ber != NULL ) { - ber_free( ber, 0 ); - } - } - ldap_msgfree( result ); - ldapServer->retVal = MGU_SUCCESS; - } - else if( rc == LDAP_TIMEOUT ) { - ldapServer->retVal = MGU_LDAP_TIMEOUT; - } - - if( baseDN == NULL ) { - // Test for LDAP version 2 - attribs[0] = NULL; - rc = ldap_search_ext_s( ld, SYLDAP_SEARCHBASE_V2, LDAP_SCOPE_BASE, SYLDAP_TEST_FILTER, attribs, - 0, NULL, NULL, &timeout, 0, &result ); - if( rc == LDAP_SUCCESS ) { - // Process entries - for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) { - // if( baseDN ) break; - // printf( "DN: %s\n", ldap_get_dn( ld, e ) ); - - // Process attributes - for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL; - attribute = ldap_next_attribute( ld, e, ber ) ) { - // if( baseDN ) break; - if( strcasecmp( attribute, SYLDAP_V2_TEST_ATTR ) == 0 ) { - if( ( vals = ldap_get_values( ld, e, attribute ) ) != NULL ) { - for( i = 0; vals[i] != NULL; i++ ) { - char *ch; - // Strip the 'ldb:' from the front of the value - ch = ( char * ) strchr( vals[i], ':' ); - if( ch ) { - gchar *bn = g_strdup( ++ch ); - g_strchomp( bn ); - g_strchug( bn ); - baseDN = g_list_append( baseDN, g_strdup( bn ) ); - } - } - } - ldap_value_free( vals ); - } - } - ldap_memfree( attribute ); - if( ber != NULL ) { - ber_free( ber, 0 ); - } - } - ldap_msgfree( result ); - ldapServer->retVal = MGU_SUCCESS; - } - else if( rc == LDAP_TIMEOUT ) { - ldapServer->retVal = MGU_LDAP_TIMEOUT; - } - } - ldap_unbind( ld ); - - return baseDN; -} - -/* -* Attempt to connect to the server. -* Enter: -* host Host name -* port Port number -* Return: TRUE if connected successfully. -*/ -gboolean syldap_test_connect_s( const gchar *host, const gint port ) { - gboolean retVal = FALSE; - LDAP *ld; - if( host == NULL ) return retVal; - if( port < 1 ) return retVal; - if( ( ld = ldap_open( host, port ) ) != NULL ) { - retVal = TRUE; - } - if( ld != NULL ) { - ldap_unbind( ld ); - } - return retVal; -} - -/* -* Attempt to connect to the server. -* Enter: ldapServer Server to test. -* Return: TRUE if connected successfully. Return code set in ldapServer. -*/ -gboolean syldap_test_connect( SyldapServer *ldapServer ) { - gboolean retVal = FALSE; - LDAP *ld; - ldapServer->retVal = MGU_BAD_ARGS; - if( ldapServer == NULL ) return retVal; - if( ldapServer->hostName == NULL ) return retVal; - if( ldapServer->port < 1 ) return retVal; - ldapServer->retVal = MGU_LDAP_INIT; - if( ( ld = ldap_open( ldapServer->hostName, ldapServer->port ) ) != NULL ) { - ldapServer->retVal = MGU_SUCCESS; - retVal = TRUE; - } - if( ld != NULL ) { - ldap_unbind( ld ); - } - return retVal; -} - -#define LDAP_LINK_LIB_NAME_1 "libldap.so" -#define LDAP_LINK_LIB_NAME_2 "liblber.so" -#define LDAP_LINK_LIB_NAME_3 "libresolv.so" -#define LDAP_LINK_LIB_NAME_4 "libpthread.so" - -/* -* Test whether LDAP libraries installed. -* Return: TRUE if library available. -*/ -gboolean syldap_test_ldap_lib() { - void *handle, *fun; - - // Get library - handle = dlopen( LDAP_LINK_LIB_NAME_1, RTLD_LAZY ); - if( ! handle ) { - return FALSE; - } - - // Test for symbols we need - fun = dlsym( handle, "ldap_init" ); - if( ! fun ) { - dlclose( handle ); - return FALSE; - } - dlclose( handle ); handle = NULL; fun = NULL; - - handle = dlopen( LDAP_LINK_LIB_NAME_2, RTLD_LAZY ); - if( ! handle ) { - return FALSE; - } - fun = dlsym( handle, "ber_init" ); - if( ! fun ) { - dlclose( handle ); - return FALSE; - } - dlclose( handle ); handle = NULL; fun = NULL; - - handle = dlopen( LDAP_LINK_LIB_NAME_3, RTLD_LAZY ); - if( ! handle ) { - return FALSE; - } - fun = dlsym( handle, "res_query" ); - if( ! fun ) { - dlclose( handle ); - return FALSE; - } - dlclose( handle ); handle = NULL; fun = NULL; - - handle = dlopen( LDAP_LINK_LIB_NAME_4, RTLD_LAZY ); - if( ! handle ) { - return FALSE; - } - fun = dlsym( handle, "pthread_create" ); - if( ! fun ) { - dlclose( handle ); - return FALSE; - } - dlclose( handle ); handle = NULL; fun = NULL; - - return TRUE; -} - -#endif /* USE_LDAP */ - -/* -* End of Source. -*/ diff --git a/src/syldap.h b/src/syldap.h deleted file mode 100644 index c9151d458..000000000 --- a/src/syldap.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Definitions necessary to access LDAP servers. - */ - -#ifndef __SYLDAP_H__ -#define __SYLDAP_H__ - -#ifdef USE_LDAP - -#include <glib.h> -#include <pthread.h> - -#include "mgutils.h" - -#define SYLDAP_DFL_PORT 389 -#define SYLDAP_MAX_ENTRIES 20 -#define SYLDAP_DFL_TIMEOUT 30 -#define SYLDAP_DFL_CRITERIA "(&(mail=*)(cn=%s*))" - -#define SYLDAP_ATTR_DN "dn" -#define SYLDAP_ATTR_COMMONNAME "cn" -#define SYLDAP_ATTR_GIVENNAME "givenName" -#define SYLDAP_ATTR_SURNAME "sn" -#define SYLDAP_ATTR_EMAIL "mail" -#define SYLDAP_ATTR_UID "uid" - -// VCard object -typedef struct _SyldapServer SyldapServer; -struct _SyldapServer { - gchar *name; - gchar *hostName; - gint port; - gchar *baseDN; - gchar *bindDN; - gchar *bindPass; - gchar *searchCriteria; - gchar *searchValue; - gint entriesRead; - gint maxEntries; - gint timeOut; - gboolean newSearch; - AddressCache *addressCache; - gint retVal; - pthread_t *thread; - gboolean busyFlag; - void (*callBack)( void * ); -}; - -/* Function prototypes */ -void syldap_set_name( SyldapServer* ldapServer, const gchar *value ); -void syldap_set_host( SyldapServer* ldapServer, const gchar *value ); -void syldap_set_port( SyldapServer* ldapServer, const gint value ); -void syldap_set_base_dn( SyldapServer* ldapServer, const gchar *value ); -void syldap_set_bind_dn( SyldapServer* ldapServer, const gchar *value ); -void syldap_set_bind_password( SyldapServer* ldapServer, const gchar *value ); -void syldap_set_search_criteria( SyldapServer* ldapServer, const gchar *value ); -void syldap_set_search_value( SyldapServer* ldapServer, const gchar *value ); -void syldap_set_max_entries( SyldapServer* ldapServer, const gint value ); -void syldap_set_timeout( SyldapServer* ldapServer, const gint value ); -void syldap_set_callback( SyldapServer *ldapServer, void *func ); -void syldap_force_refresh( SyldapServer *ldapServer ); -SyldapServer *syldap_create(); -void syldap_free( SyldapServer *ldapServer ); -void syldap_print_data( SyldapServer *ldapServer, FILE *stream ); -gboolean syldap_check_search( SyldapServer *ldapServer ); -gint syldap_read_data( SyldapServer *ldapServer ); -gint syldap_read_data_th( SyldapServer *ldapServer ); -void syldap_cancel_read( SyldapServer *ldapServer ); -GList *syldap_get_address_list( const SyldapServer *ldapServer ); -GList *syldap_read_basedn_s( const gchar *host, const gint port, const gchar *bindDN, const gchar *bindPW, const gint tov ); -GList *syldap_read_basedn( SyldapServer *ldapServer ); -gboolean syldap_test_connect_s( const gchar *host, const gint port ); -gboolean syldap_test_connect( SyldapServer *ldapServer ); -gboolean syldap_test_ldap_lib(); - -#endif /* USE_LDAP */ - -#endif /* __SYLDAP_H__ */ - diff --git a/src/template.c b/src/template.c deleted file mode 100644 index 26b01bdd1..000000000 --- a/src/template.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Sylpheed templates subsystem - * Copyright (C) 2001 Alexander Barinov - * - * 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 <gdk/gdk.h> -#include <stdio.h> -#include <dirent.h> -#include <sys/stat.h> - -#include "utils.h" -#include "main.h" -#include "template.h" -#include "intl.h" - -static GSList* template_load(GSList *tmpl_list, gchar *filename) -{ - Template *tmpl; - FILE *fp; - char buf[32000]; - gint bytes_read; - - LOG_MESSAGE(_("%s:%d loading template from %s\n"), __FILE__, __LINE__, filename); - - if ((fp = fopen(filename, "r")) == NULL) { - FILE_OP_ERROR(filename, "fopen"); - return tmpl_list; - } - - tmpl = g_new(Template, 1); - - if (fgets(buf, sizeof(buf), fp) == NULL) { - FILE_OP_ERROR(filename, "fgets"); - g_free(tmpl); - LOG_MESSAGE(_("%s:%d exiting\n"), __FILE__, __LINE__); - return tmpl_list; - } - tmpl->name = g_strdup(g_strstrip(buf)); - - memset(buf, 0, sizeof(buf)); - if ((bytes_read = fread(buf, 1, sizeof(buf)-1, fp)) == 0) { - FILE_OP_ERROR(filename, "fread"); - g_free(tmpl->name); - g_free(tmpl); - return tmpl_list; - } - tmpl->value = g_strdup(buf); - - tmpl_list = g_slist_append(tmpl_list, tmpl); - fclose(fp); - return tmpl_list; -} - -void template_free(Template *tmpl) -{ - g_free(tmpl->name); - g_free(tmpl->value); - g_free(tmpl); -} - -void template_clear_config(GSList *tmpl_list) -{ - Template *tmpl; - - while (tmpl_list != NULL) { - tmpl = tmpl_list->data; - template_free(tmpl); - tmpl_list = g_slist_remove(tmpl_list, tmpl); - } -} - -GSList* template_read_config(void) -{ - gchar *path; - gchar *filename; - DIR *dp; - struct dirent *de; - struct stat s; - GSList *tmpl_list = NULL; - - path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, TEMPLATES_DIR, NULL); - LOG_MESSAGE(_("%s:%d reading templates dir %s\n"), __FILE__, __LINE__, path); - - if ((dp = opendir(path)) == NULL) { - FILE_OP_ERROR(path, "opendir"); - return tmpl_list; - } - - while ((de = readdir(dp)) != NULL) { - filename = g_strconcat(path, G_DIR_SEPARATOR_S, de->d_name, NULL); - LOG_MESSAGE(_("%s:%d found file %s\n"), __FILE__, __LINE__, filename); - - if (stat(filename, &s) != 0 || !S_ISREG(s.st_mode) ) { - LOG_MESSAGE(_("%s:%d %s is not an ordinary file\n"), - __FILE__, __LINE__, filename); - continue; - } - - tmpl_list = template_load(tmpl_list, filename); - g_free(filename); - } - - closedir(dp); - g_free(path); - return tmpl_list; -} - -void template_write_config(GSList *tmpl_list) -{ - gchar *path; - gchar *filename; - GSList *cur; - Template *tmpl; - FILE *fp; - gint tmpl_num = 1; - - path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, TEMPLATES_DIR, NULL); - - if (!is_dir_exist(path)) { - if (is_file_exist(path)) { - LOG_MESSAGE(_("%s:%d file %s allready exists\n"), - __FILE__, __LINE__, filename); - g_free(path); - return; - } - if (mkdir(path, S_IRWXU) < 0) { - FILE_OP_ERROR(path, "mkdir"); - g_free(path); - return; - } - } - - remove_all_files(path); - - for (cur = tmpl_list; cur != NULL; cur = cur->next) { - tmpl = cur->data; - - filename = g_strconcat(path, G_DIR_SEPARATOR_S, itos(tmpl_num), NULL); - - if ((fp = fopen(filename, "w")) == NULL) { - FILE_OP_ERROR(filename, "fopen"); - g_free(filename); - g_free(path); - return; - } - - LOG_MESSAGE(_("%s:%d writing template \"%s\" to %s\n"), - __FILE__, __LINE__, tmpl->name, filename); - fputs(tmpl->name, fp); - fputs("\n", fp); - fwrite(tmpl->value, sizeof(gchar), strlen(tmpl->value), fp); - fclose(fp); - - tmpl_num ++; - } - - g_free(path); -} diff --git a/src/template.h b/src/template.h deleted file mode 100644 index a069d60a3..000000000 --- a/src/template.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Sylpheed templates subsystem - * Copyright (C) 2001 Alexander Barinov - * - * 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 __TEMPLATE_H__ -#define __TEMPLATE_H__ - -struct _Template { - gchar *name; - gchar *value; -}; - -typedef struct _Template Template; - -#define LOG_MESSAGE \ - debug_mode == 0 ? (debug_mode == debug_mode) : (void)debug_print - -void template_free (Template *tmpl); -void template_clear_config (GSList *tmpl_list); -GSList* template_read_config (void); -void template_write_config (GSList *tmpl_list); - -#endif /* __TEMPLATE_H__ */ diff --git a/src/textview.c b/src/textview.c deleted file mode 100644 index dbed263f1..000000000 --- a/src/textview.c +++ /dev/null @@ -1,1302 +0,0 @@ -/* - * 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/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" -#include "addressbook.h" -#include "displayheader.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_TEXT(text_sb)->default_tab_width = 8; - GTK_TEXT(text_mb)->default_tab_width = 8; - 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 (headers) procheader_header_array_destroy(headers); - 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 (headers) procheader_header_array_destroy(headers); - 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) { - textview_show_header(textview, headers); - procheader_header_array_destroy(headers); - } - - 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); -} - -#define TEXT_INSERT(str) \ - gtk_text_insert(text, textview->msgfont, NULL, NULL, str, -1) - -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); - - TEXT_INSERT(_("To save this part, pop up the context menu with ")); - TEXT_INSERT(_("right click and select `Save as...', ")); - TEXT_INSERT(_("or press `y' key.\n\n")); - - TEXT_INSERT(_("To display this part as a text message, select ")); - TEXT_INSERT(_("`Display as text', or press `t' key.\n\n")); - - TEXT_INSERT(_("To open this part with external program, select ")); - TEXT_INSERT(_("`Open' or `Open with...', ")); - TEXT_INSERT(_("or double-click, or click the center button, ")); - TEXT_INSERT(_("or press `l' key.")); - - 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) { - TEXT_INSERT(_("This signature has not been checked yet.\n")); - TEXT_INSERT(_("To check it, pop up the context menu with\n")); - TEXT_INSERT(_("right click and select `Check signature'.\n")); - } else { - TEXT_INSERT(partinfo->sigstatus_full); - } - - gtk_text_thaw(text); -} -#endif /* USE_GPGME */ - -#undef TEXT_INSERT - -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))) - -#define IS_QUOTE(ch) ((ch) == '\'' || (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_ = NULL; - const gchar *ep_ = NULL; - - /* the informative part of the email address (describing the name - * of the email address owner) may contain quoted parts. the - * closure stack stores the last encountered quotes. */ - gchar closure_stack[128]; - gchar *ptr = closure_stack; - - 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; - } - } - - if (!result) return FALSE; - - /* skip if it's between quotes "'alfons@proteus.demon.nl'" <alfons@proteus.demon.nl> */ - if (bp_ - 1 > start && IS_QUOTE(*(bp_ - 1)) && IS_QUOTE(*ep_)) - return FALSE; - - /* see if this is <bracketed>; in this case we also scan for the informative part. */ - if (bp_ - 1 <= start || *(bp_ - 1) != '<' || *ep_ != '>') - return TRUE; - -#define FULL_STACK() ((size_t) (ptr - closure_stack) >= sizeof closure_stack) -#define IN_STACK() (ptr > closure_stack) -/* has underrun check */ -#define POP_STACK() if(IN_STACK()) --ptr -/* has overrun check */ -#define PUSH_STACK(c) if(!FULL_STACK()) *ptr++ = (c); else return TRUE -/* has underrun check */ -#define PEEK_STACK() (IN_STACK() ? *(ptr - 1) : 0) - - ep_++; - - /* scan for the informative part. */ - for (bp_ -= 2; bp_ >= start; bp_--) { - /* if closure on the stack keep scanning */ - if (PEEK_STACK() == *bp_) { - POP_STACK(); - continue; - } - if (*bp_ == '\'' || *bp_ == '"') { - PUSH_STACK(*bp_); - continue; - } - - /* if nothing in the closure stack, do the special conditions - * the following if..else expression simply checks whether - * a token is acceptable. if not acceptable, the clause - * should terminate the loop with a 'break' */ - if (!PEEK_STACK()) { - if (*bp_ == '-' - && (((bp_ - 1) >= start) && isalnum(*(bp_ - 1))) - && (((bp_ + 1) < ep_) && isalnum(*(bp_ + 1)))) { - /* hyphens are allowed, but only in - between alnums */ - } else if (!ispunct(*bp_)) { - /* but anything not being a punctiation - is ok */ - } else { - break; /* anything else is rejected */ - } - } - } - - bp_++; - -#undef PEEK_STACK -#undef PUSH_STACK -#undef POP_STACK -#undef IN_STACK -#undef FULL_STACK - - /* scan forward (should start with an alnum) */ - for (; *bp_ != '<' && isspace(*bp_) && *bp_ != '"'; bp_++) - ; - - *ep = ep_; - *bp = bp_; - - return result; -} - -#undef IS_QUOTE -#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, - GdkFont *font, - 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; - - GtkText *text = GTK_TEXT(textview->text); - - /* 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) - && (size_t) (ep - bp - 1) > strlen(parser[last_index].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, font, - 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, font, 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, font, fg_color, - NULL, normal_text, -1); - } else - gtk_text_insert(text, font, 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, textview->msgfont, - fg_color, &uri_color, buf); - else - textview_make_clickable_parts(textview, textview->msgfont, - fg_color, NULL, buf); -} - -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 (!g_strncasecmp(codeset, "ISO-8859-", 9) || - !g_strncasecmp(codeset, "KOI8-", 5) || - !g_strncasecmp(codeset, "CP", 2) || - !g_strncasecmp(codeset, "WINDOWS-", 8) || - !g_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) -{ - gchar buf[BUFFSIZE]; - GPtrArray *headers, *sorted_headers; - GSList *disphdr_list; - Header *header; - gint i; - - 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 = procheader_get_header_array_asis(fp); - - sorted_headers = g_ptr_array_new(); - - for (disphdr_list = prefs_common.disphdr_list; disphdr_list != NULL; - disphdr_list = disphdr_list->next) { - DisplayHeaderProp *dp = - (DisplayHeaderProp *)disphdr_list->data; - - for (i = 0; i < headers->len; i++) { - header = g_ptr_array_index(headers, i); - - if (procheader_headername_equal(header->name, - dp->name)) { - if (dp->hidden) - procheader_header_free(header); - else - g_ptr_array_add(sorted_headers, header); - - g_ptr_array_remove_index(headers, i); - i--; - } - } - } - - if (prefs_common.show_other_header) { - for (i = 0; i < headers->len; i++) { - header = g_ptr_array_index(headers, i); - g_ptr_array_add(sorted_headers, header); - } - } - - g_ptr_array_free(headers, FALSE); - - return sorted_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 (header->name[strlen(header->name) - 1] != ' ') - gtk_text_insert(text, textview->boldfont, - NULL, NULL, " ", 1); - - if (procheader_headername_equal(header->name, "Subject") || - procheader_headername_equal(header->name, "From") || - procheader_headername_equal(header->name, "To") || - procheader_headername_equal(header->name, "Cc")) - unfold_line(header->body); - - if (prefs_common.enable_color && - (procheader_headername_equal(header->name, "X-Mailer") || - procheader_headername_equal(header->name, - "X-Newsreader")) && - strstr(header->body, "Sylpheed") != NULL) - gtk_text_insert(text, NULL, &emphasis_color, NULL, - header->body, -1); - else if (prefs_common.enable_color) { - textview_make_clickable_parts(textview, - NULL, NULL, &uri_color, - header->body); - } else { - textview_make_clickable_parts(textview, - NULL, NULL, NULL, - header->body); - } - 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 || event->button == 3)) { - 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 (!g_strncasecmp(uri->uri, "mailto:", 7)) { - if (event->button == 3) { - gchar *fromname, *fromaddress; - /* extract url */ - fromaddress = g_strdup(uri->uri + 7); - /* Hiroyuki: please put this function in utils.c! */ - fromname = procheader_get_fromname(fromaddress); - extract_address(fromaddress); - g_message("adding from textview %s <%s>", fromname, fromaddress); - addressbook_add_submenu(NULL, fromname, fromaddress, NULL); - g_free(fromaddress); - g_free(fromname); - } else { - 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 deleted file mode 100644 index 71334a24a..000000000 --- a/src/textview.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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 __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 deleted file mode 100644 index e9f0c3621..000000000 --- a/src/unmime.c +++ /dev/null @@ -1,995 +0,0 @@ -/* - * 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 deleted file mode 100644 index ccd163785..000000000 --- a/src/unmime.h +++ /dev/null @@ -1,23 +0,0 @@ -/* 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 deleted file mode 100644 index e12d18a17..000000000 --- a/src/utils.c +++ /dev/null @@ -1,2095 +0,0 @@ -/* - * 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); -} - -static void hash_free_value_mem_func(gpointer key, gpointer value, - gpointer data) -{ - g_free(value); -} - -void hash_free_value_mem(GHashTable *table) -{ - g_hash_table_foreach(table, hash_free_value_mem_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, - nstr must be not lower than 11 characters length */ -gchar *itos_buf(gchar *nstr, gint n) -{ - g_snprintf(nstr, 11, "%d", n); - return nstr; -} - -/* convert integer into string */ -gchar *itos(gint n) -{ - static gchar nstr[11]; - - return itos_buf(nstr, n); -} - -gchar *to_human_readable(off_t size) -{ - static gchar str[10]; - 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), "%.2fMB", (gfloat)size / div); - break; - default: - g_snprintf(str, sizeof(str), "%.2fGB", (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; -} - -/* remove trailing character */ -gchar *strtailchomp(gchar *str, gchar tail_char) -{ - register gchar *s; - - if (!*str) return str; - if (tail_char == '\0') return str; - - for (s = str + strlen(str) - 1; s >= str && *s == tail_char; 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_one_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; - - if ((srcp = strchr_with_skip_quote(destp, quote_chr, op))) { - 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 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, quote_chr, 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 unfold_line(gchar *str) -{ - register gchar *p = str; - register gint spc; - - while (*p) { - if (*p == '\n' || *p == '\r') { - *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; -} - -/* - * We need this wrapper around g_get_home_dir(), so that - * we can fix some Windoze things here. Should be done in glibc of course - * but as long as we are not able to do our own extensions to glibc, we do - * it here. - */ -gchar *get_home_dir(void) -{ -#if HAVE_DOSISH_SYSTEM - static gchar *home_dir; - - if (!home_dir) { - home_dir = read_w32_registry_string(NULL, - "Software\\Sylpheed", "HomeDir" ); - if (!home_dir || !*home_dir) { - if (getenv ("HOMEDRIVE") && getenv("HOMEPATH")) { - const char *s = g_get_home_dir(); - if (s && *s) - home_dir = g_strdup (s); - } - if (!home_dir || !*home_dir) - home_dir = g_strdup ("c:\\sylpheed"); - } - debug_print("initialized home_dir to `%s'\n", home_dir); - } - return home_dir; -#else /* standard glib */ - return g_get_home_dir(); -#endif -} - -gchar *get_rc_dir(void) -{ - static gchar *rc_dir = NULL; - - if (!rc_dir) - rc_dir = g_strconcat(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_mbox_cache_dir(void) -{ - static gchar *mbox_cache_dir = NULL; - - if (!mbox_cache_dir) - mbox_cache_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, - MBOX_CACHE_DIR, NULL); - - return mbox_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; -} - -off_t get_left_file_size(FILE *fp) -{ - glong pos; - glong end; - off_t size; - - if ((pos = ftell(fp)) < 0) { - perror("ftell"); - return -1; - } - if (fseek(fp, 0L, SEEK_END) < 0) { - perror("fseek"); - return -1; - } - if ((end = ftell(fp)) < 0) { - perror("fseek"); - return -1; - } - size = end - pos; - if (fseek(fp, pos, SEEK_SET) < 0) { - perror("fseek"); - return -1; - } - - return 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_numbered_files(const gchar *dir, guint first, guint last) -{ - DIR *dp; - struct dirent *d; - gchar *prev_dir; - gint fileno; - - 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) { - fileno = to_number(d->d_name); - if (fileno >= 0 && first <= fileno && fileno <= last) { - 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_all_numbered_files(const gchar *dir) -{ - return remove_numbered_files(dir, 0, UINT_MAX); -} - -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 move_file(const gchar *src, const gchar *dest) -{ - if (is_file_exist(dest)) { - g_warning(_("move_file(): file %s already exists."), dest); - return -1; - } - - if (rename(src, dest) == 0) return 0; - - if (EXDEV != errno) { - FILE_OP_ERROR(src, "rename"); - return -1; - } - - if (copy_file(src, dest) < 0) return -1; - - unlink(src); - - 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)); -} - -static FILE *log_fp = NULL; - -void set_log_file(const gchar *filename) -{ - if (log_fp) return; - log_fp = fopen(filename, "w"); - if (!log_fp) - FILE_OP_ERROR(filename, "fopen"); -} - -void close_log_file(void) -{ - if (log_fp) { - fclose(log_fp); - log_fp = NULL; - } -} - -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]; - gchar *logbuf; - gchar timestr[6]; - time_t t; - - va_start(args, format); - g_vsnprintf(buf, sizeof(buf), format, args); - va_end(args); - - time(&t); - strftime(timestr, 6, "%H:%M", localtime(&t)); - logbuf = g_strdup_printf("[%s] %s", timestr, buf); - - if (debug_mode) fputs(logbuf, stdout); - log_window_append(logbuf, LOG_NORMAL); - if (log_fp) { - fputs(logbuf, log_fp); - fflush(log_fp); - } - statusbar_puts_all(buf); - - g_free(logbuf); -} - -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); - if (log_fp) { - fputs("message: ", log_fp); - fputs(buf, log_fp); - fflush(log_fp); - } -} - -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); - if (log_fp) { - fputs("*** warning: ", log_fp); - fputs(buf, log_fp); - fflush(log_fp); - } -} - -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); - if (log_fp) { - fputs("*** error: ", log_fp); - fputs(buf, log_fp); - fflush(log_fp); - } -} diff --git a/src/utils.h b/src/utils.h deleted file mode 100644 index 9501547fc..000000000 --- a/src/utils.h +++ /dev/null @@ -1,304 +0,0 @@ -/* - * 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 __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 - -/* The AC_CHECK_SIZEOF() in configure fails for some machines. - * we provide some fallback values here */ -#if !SIZEOF_UNSIGNED_SHORT - #undef SIZEOF_UNSIGNED_SHORT - #define SIZEOF_UNSIGNED_SHORT 2 -#endif -#if !SIZEOF_UNSIGNED_INT - #undef SIZEOF_UNSIGNED_INT - #define SIZEOF_UNSIGNED_INT 4 -#endif -#if !SIZEOF_UNSIGNED_LONG - #undef SIZEOF_UNSIGNED_LONG - #define SIZEOF_UNSIGNED_LONG 4 -#endif - -#ifndef HAVE_U32_TYPEDEF - #undef u32 /* maybe there is a macro with this name */ - typedef guint32 u32; - #define HAVE_U32_TYPEDEF -#endif - -#ifndef BIG_ENDIAN_HOST - #if (G_BYTE_ORDER == G_BIG_ENDIAN) - #define BIG_ENDIAN_HOST 1 - #endif -#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 hash_free_value_mem (GHashTable *table); - -void ptr_array_free_strings (GPtrArray *array); - -/* number-string conversion */ -gint to_number (const gchar *nstr); -gchar *itos_buf (gchar *nstr, - gint n); -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 *strtailchomp (gchar *str, - gchar tail_char); -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_one_parenthesis_with_skip_quote (gchar *str, - gchar quote_chr, - 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 unfold_line (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_home_dir (void); -gchar *get_rc_dir (void); -gchar *get_news_cache_dir (void); -gchar *get_imap_cache_dir (void); -gchar *get_mbox_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); -off_t get_left_file_size (FILE *fp); -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_numbered_files (const gchar *dir, - guint first, - guint last); -gint remove_all_numbered_files (const gchar *dir); -gint remove_dir_recursive (const gchar *dir); -gint copy_file (const gchar *src, - const gchar *dest); -gint move_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 set_log_file (const gchar *filename); -void close_log_file (void); -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 deleted file mode 100644 index e0b2e79a3..000000000 --- a/src/uuencode.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * 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 deleted file mode 100644 index 3658ebc6d..000000000 --- a/src/uuencode.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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/vcard.c b/src/vcard.c deleted file mode 100644 index d9cf5230d..000000000 --- a/src/vcard.c +++ /dev/null @@ -1,691 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Functions necessary to access VCard files. VCard files are used - * by GnomeCard for addressbook, and Netscape for sending business - * card information. Refer to RFC2426 for more information. - */ - -#include <sys/stat.h> -#include <glib.h> - -#include "mgutils.h" -#include "vcard.h" - -#define GNOMECARD_DIR ".gnome" -#define GNOMECARD_FILE "GnomeCard" -#define GNOMECARD_SECTION "[file]" -#define GNOMECARD_PARAM "open" - -#define VCARD_TEST_LINES 200 - -/* -* Specify name to be used. -*/ -void vcard_set_name( VCardFile* cardFile, const gchar *name ) { - /* Copy file name */ - if( cardFile->name ) g_free( cardFile->name ); - if( name ) cardFile->name = g_strdup( name ); - g_strstrip( cardFile->name ); -} - -/* -* Specify file to be used. -*/ -void vcard_set_file( VCardFile* cardFile, const gchar *path ) { - mgu_refresh_cache( cardFile->addressCache ); - - /* Copy file path */ - if( cardFile->path ) g_free( cardFile->path ); - if( path ) cardFile->path = g_strdup( path ); - g_strstrip( cardFile->path ); -} - -/* -* Create new cardfile object. -*/ -VCardFile *vcard_create() { - VCardFile *cardFile; - cardFile = g_new( VCardFile, 1 ); - cardFile->name = NULL; - cardFile->path = NULL; - cardFile->file = NULL; - cardFile->bufptr = cardFile->buffer; - cardFile->addressCache = mgu_create_cache(); - cardFile->retVal = MGU_SUCCESS; - return cardFile; -} - -/* -* Refresh internal variables to force a file read. -*/ -void vcard_force_refresh( VCardFile *cardFile ) { - mgu_refresh_cache( cardFile->addressCache ); -} - -/* -* Create new cardfile object for specified file. -*/ -VCardFile *vcard_create_path( const gchar *path ) { - VCardFile *cardFile; - cardFile = vcard_create(); - vcard_set_file(cardFile, path ); - return cardFile; -} - -/* -* Free up cardfile object by releasing internal memory. -*/ -void vcard_free( VCardFile *cardFile ) { - g_return_if_fail( cardFile != NULL ); - - // fprintf( stdout, "freeing... VCardFile\n" ); - - /* Close file */ - if( cardFile->file ) fclose( cardFile->file ); - - /* Free internal stuff */ - g_free( cardFile->name ); - g_free( cardFile->path ); - - /* Clear cache */ - mgu_clear_cache( cardFile->addressCache ); - mgu_free_cache( cardFile->addressCache ); - - // Clear pointers - cardFile->file = NULL; - cardFile->name = NULL; - cardFile->path = NULL; - cardFile->addressCache = NULL; - cardFile->retVal = MGU_SUCCESS; - - /* Now release file object */ - g_free( cardFile ); - - // fprintf( stdout, "freeing... VCardFile done\n" ); - -} - -/* -* Display object to specified stream. -*/ -void vcard_print_file( VCardFile *cardFile, FILE *stream ) { - GSList *node; - g_return_if_fail( cardFile != NULL ); - fprintf( stream, "VCardFile:\n" ); - fprintf( stream, " name: '%s'\n", cardFile->name ); - fprintf( stream, "file spec: '%s'\n", cardFile->path ); - fprintf( stream, " ret val: %d\n", cardFile->retVal ); - mgu_print_cache( cardFile->addressCache, stream ); -} - -/* -* Open file for read. -* return: TRUE if file opened successfully. -*/ -gint vcard_open_file( VCardFile* cardFile ) { - g_return_if_fail( cardFile != NULL ); - - // fprintf( stdout, "Opening file\n" ); - cardFile->addressCache->dataRead = FALSE; - if( cardFile->path ) { - cardFile->file = fopen( cardFile->path, "r" ); - if( ! cardFile->file ) { - // fprintf( stderr, "can't open %s\n", cardFile->path ); - cardFile->retVal = MGU_OPEN_FILE; - return cardFile->retVal; - } - } - else { - // fprintf( stderr, "file not specified\n" ); - cardFile->retVal = MGU_NO_FILE; - return cardFile->retVal; - } - - /* Setup a buffer area */ - cardFile->buffer[0] = '\0'; - cardFile->bufptr = cardFile->buffer; - cardFile->retVal = MGU_SUCCESS; - return cardFile->retVal; -} - -/* -* Close file. -*/ -void vcard_close_file( VCardFile *cardFile ) { - g_return_if_fail( cardFile != NULL ); - if( cardFile->file ) fclose( cardFile->file ); - cardFile->file = NULL; -} - -/* -* Read line of text from file. -* Return: ptr to buffer where line starts. -*/ -gchar *vcard_read_line( VCardFile *cardFile ) { - while( *cardFile->bufptr == '\n' || *cardFile->bufptr == '\0' ) { - if( fgets( cardFile->buffer, VCARDBUFSIZE, cardFile->file ) == NULL ) - return NULL; - g_strstrip( cardFile->buffer ); - cardFile->bufptr = cardFile->buffer; - } - return cardFile->bufptr; -} - -/* -* Read line of text from file. -* Return: ptr to buffer where line starts. -*/ -gchar *vcard_get_line( VCardFile *cardFile ) { - gchar buf[ VCARDBUFSIZE ]; - gchar *start, *end; - gint len; - - if (vcard_read_line( cardFile ) == NULL ) { - buf[0] = '\0'; - return; - } - - /* Copy into private buffer */ - start = cardFile->bufptr; - len = strlen( start ); - end = start + len; - strncpy( buf, start, len ); - buf[ len ] = '\0'; - g_strstrip(buf); - cardFile->bufptr = end + 1; - - /* Return a copy of buffer */ - return g_strdup( buf ); -} - -/* -* Free linked lists of character strings. -*/ -void vcard_free_lists( GSList *listName, GSList *listAddr, GSList *listRem, GSList* listID ) { - mgu_free_list( listName ); - mgu_free_list( listAddr ); - mgu_free_list( listRem ); - mgu_free_list( listID ); -} - -/* -* Read quoted-printable text, which may span several lines into one long string. -* Param: cardFile - object. -* Param: tagvalue - will be placed into the linked list. -*/ -gchar *vcard_read_qp( VCardFile *cardFile, char *tagvalue ) { - GSList *listQP = NULL; - gint len = 0; - gchar *line = tagvalue; - while( line ) { - listQP = g_slist_append( listQP, line ); - len = strlen( line ) - 1; - if( len > 0 ) { - if( line[ len ] != '=' ) break; - line[ len ] = '\0'; - } - line = vcard_get_line( cardFile ); - } - - // Coalesce linked list into one long buffer. - line = mgu_list_coalesce( listQP ); - - // Clean up - mgu_free_list( listQP ); - listQP = NULL; - return line; -} - -/* -* Parse tag name from line buffer. -* Return: Buffer containing the tag name, or NULL if no delimiter char found. -*/ -gchar *vcard_get_tagname( char* line, gchar dlm ) { - gint len = 0; - gchar *tag = NULL; - gchar *lptr = line; - while( *lptr++ ) { - if( *lptr == dlm ) { - len = lptr - line; - tag = g_strndup( line, len+1 ); - tag[ len ] = '\0'; - g_strdown( tag ); - return tag; - } - } - return tag; -} - -/* -* Parse tag value from line buffer. -* Return: Buffer containing the tag value. Empty string is returned if -* no delimiter char found. -*/ -gchar *vcard_get_tagvalue( gchar* line, gchar dlm ) { - gchar *value = NULL; - gchar *start = NULL; - gchar *lptr; - gint len = 0; - - for( lptr = line; *lptr; lptr++ ) { - if( *lptr == dlm ) { - if( ! start ) - start = lptr + 1; - } - } - if( start ) { - len = lptr - start; - value = g_strndup( start, len+1 ); - } - else { - // Ensure that we get an empty string - value = g_strndup( "", 1 ); - } - value[ len ] = '\0'; - return value; -} - -/* -* Dump linked lists of character strings (for debug). -*/ -void vcard_dump_lists( GSList *listName, GSList *listAddr, GSList *listRem, GSList *listID, FILE *stream ) { - fprintf( stream, "dump name\n" ); - fprintf( stream, "------------\n" ); - mgu_print_list( listName, stdout ); - fprintf( stream, "dump address\n" ); - fprintf( stream, "------------\n" ); - mgu_print_list( listAddr, stdout ); - fprintf( stream, "dump remarks\n" ); - fprintf( stdout, "------------\n" ); - mgu_print_list( listRem, stdout ); - fprintf( stream, "dump id\n" ); - fprintf( stdout, "------------\n" ); - mgu_print_list( listID, stdout ); -} - -/* -* Build an address list entry and append to list of address items. -*/ -void vcard_build_items( VCardFile *cardFile, GSList *listName, GSList *listAddr, GSList *listRem, GSList *listID ) { - AddressItem *addrItem = NULL; - GSList *nodeName = listName; - GSList *nodeID = listID; - while( nodeName ) { - GSList *nodeAddress = listAddr; - GSList *nodeRemarks = listRem; - while( nodeAddress ) { - addrItem = mgu_create_address(); - addrItem->name = g_strdup( nodeName->data ); - addrItem->address = g_strdup( nodeAddress->data ); - if( nodeRemarks ) { - if( nodeRemarks->data ) { - if( g_strcasecmp( nodeRemarks->data, "internet" ) == 0 ) { - // Trivially exclude this one (appears for most records) - addrItem->remarks = g_strdup( "" ); - } - else { - addrItem->remarks = g_strdup( nodeRemarks->data ); - } - } - else { - addrItem->remarks = g_strdup( "" ); - } - } - else { - addrItem->remarks = g_strdup( "" ); - } -/* - if( nodeID ) { - if( nodeID->data ) { - addrItem->externalID = g_strdup( nodeID->data ); - } - else { - addrItem->externalID = g_strdup( "" ); - } - } - else { - addrItem->externalID = g_strdup( "" ); - } -*/ - mgu_add_cache( cardFile->addressCache, addrItem ); - - nodeAddress = g_slist_next( nodeAddress ); - nodeRemarks = g_slist_next( nodeRemarks ); - } - nodeName = g_slist_next( nodeName ); - nodeID = g_slist_next( nodeID ); - } - addrItem = NULL; -} - -// Unescape characters in quoted-printable string. -void vcard_unescape_qp( gchar *value ) { - gchar *ptr, *src, *dest; - int d, v; - char ch; - gboolean gotch; - ptr = value; - while( *ptr ) { - gotch = FALSE; - if( *ptr == '=' ) { - v = 0; - ch = *(ptr + 1); - if( ch ) { - if( ch > '0' && ch < '8' ) v = ch - '0'; - } - d = -1; - ch = *(ptr + 2); - if( ch ) { - if( ch > '\x60' ) ch -= '\x20'; - if( ch > '0' && ch < ' ' ) d = ch - '0'; - d = ch - '0'; - if( d > 9 ) d -= 7; - if( d > -1 && d < 16 ) { - v = ( 16 * v ) + d; - gotch = TRUE; - } - } - } - if( gotch ) { - // Replace = with char and move down in buffer - *ptr = v; - src = ptr + 3; - dest = ptr + 1; - while( *src ) { - *dest++ = *src++; - } - *dest = '\0'; - } - ptr++; - } -} - -/* -* Read file into cache. -* Note that one VCard can have multiple E-Mail addresses (MAIL tags); -* these are broken out into separate address items. An address item -* is generated for the person identified by FN tag and each EMAIL tag. -* If a sub-type is included in the EMAIL entry, this will be used as -* the Remarks member. Also note that it is possible for one VCard -* entry to have multiple FN tags; this might not make sense. However, -* it will generate duplicate address entries for each person listed. -*/ -void vcard_read_cache( VCardFile *cardFile ) { - gchar *tagtemp = NULL, *tagname = NULL, *tagvalue = NULL, *tagtype = NULL, *tagrest = NULL; - GSList *listName = NULL, *listAddress = NULL, *listRemarks = NULL, *listID = NULL; - GSList *listQP = NULL; - - for( ;; ) { - gchar *line = vcard_get_line( cardFile ); - if( line == NULL ) break; - - // fprintf( stdout, "%s\n", line ); - - /* Parse line */ - tagtemp = vcard_get_tagname( line, VCARD_SEP_TAG ); - if( tagtemp ) { - // fprintf( stdout, "\ttemp: %s\n", tagtemp ); - tagvalue = vcard_get_tagvalue( line, VCARD_SEP_TAG ); - tagname = vcard_get_tagname( tagtemp, VCARD_SEP_TYPE ); - tagtype = vcard_get_tagvalue( tagtemp, VCARD_SEP_TYPE ); - if( tagname == NULL ) { - tagname = tagtemp; - tagtemp = NULL; - } - - // fprintf( stdout, "\tname: %s\n", tagname ); - // fprintf( stdout, "\ttype: %s\n", tagtype ); - // fprintf( stdout, "\tvalue: %s\n", tagvalue ); - - if( tagvalue ) { - if( g_strcasecmp( tagtype, VCARD_TYPE_QP ) == 0 ) { - // Quoted-Printable: could span multiple lines - tagvalue = vcard_read_qp( cardFile, tagvalue ); - vcard_unescape_qp( tagvalue ); - // fprintf( stdout, "QUOTED-PRINTABLE !!! final\n>%s<\n", tagvalue ); - } - - if( g_strcasecmp( tagname, VCARD_TAG_START ) == 0 && g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) { - // fprintf( stdout, "start card\n" ); - vcard_free_lists( listName, listAddress, listRemarks, listID ); - listName = listAddress = listRemarks = listID = NULL; - } - if( g_strcasecmp( tagname, VCARD_TAG_FULLNAME ) == 0 ) { - // fprintf( stdout, "- full name: %s\n", tagvalue ); - listName = g_slist_append( listName, g_strdup( tagvalue ) ); - } - if( g_strcasecmp( tagname, VCARD_TAG_EMAIL ) == 0 ) { - // fprintf( stdout, "- address: %s\n", tagvalue ); - listAddress = g_slist_append( listAddress, g_strdup( tagvalue ) ); - listRemarks = g_slist_append( listRemarks, g_strdup( tagtype ) ); - } - if( g_strcasecmp( tagname, VCARD_TAG_UID ) == 0 ) { - // fprintf( stdout, "- id: %s\n", tagvalue ); - listID = g_slist_append( listID, g_strdup( tagvalue ) ); - } - if( g_strcasecmp( tagname, VCARD_TAG_END ) == 0 && g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) { - // VCard is complete - // fprintf( stdout, "end card\n--\n" ); - // vcard_dump_lists( listName, listAddress, listRemarks, listID, stdout ); - vcard_build_items( cardFile, listName, listAddress, listRemarks, listID ); - vcard_free_lists( listName, listAddress, listRemarks, listID ); - listName = listAddress = listRemarks = listID = NULL; - } - g_free( tagvalue ); - } - g_free( tagname ); - g_free( tagtype ); - } - } - - // Free lists - vcard_free_lists( listName, listAddress, listRemarks, listID ); - listName = listAddress = listRemarks = listID = NULL; -} - -// ============================================================================================ -/* -* Read file into list. Main entry point -* Return: TRUE if file read successfully. -*/ -// ============================================================================================ -gint vcard_read_data( VCardFile *cardFile ) { - g_return_if_fail( cardFile != NULL ); - cardFile->retVal = MGU_SUCCESS; - if( mgu_check_file( cardFile->addressCache, cardFile->path ) ) { - mgu_clear_cache( cardFile->addressCache ); - vcard_open_file( cardFile ); - if( cardFile->retVal == MGU_SUCCESS ) { - // Read data into the list - vcard_read_cache( cardFile ); - vcard_close_file( cardFile ); - - // Mark cache - mgu_mark_cache( cardFile->addressCache, cardFile->path ); - cardFile->addressCache->modified = FALSE; - cardFile->addressCache->dataRead = TRUE; - } - } - return cardFile->retVal; -} - -/* -* Return link list of address items. -* Return: TRUE if file read successfully. -*/ -GList *vcard_get_address_list( VCardFile *cardFile ) { - g_return_if_fail( cardFile != NULL ); - return cardFile->addressCache->addressList; -} - -/* -* Validate that all parameters specified. -* Return: TRUE if data is good. -*/ -gboolean vcard_validate( const VCardFile *cardFile ) { - gboolean retVal; - g_return_if_fail( cardFile != NULL ); - - retVal = TRUE; - if( cardFile->path ) { - if( strlen( cardFile->path ) < 1 ) retVal = FALSE; - } - else { - retVal = FALSE; - } - if( cardFile->name ) { - if( strlen( cardFile->name ) < 1 ) retVal = FALSE; - } - else { - retVal = FALSE; - } - return retVal; -} - -#define WORK_BUFLEN 1024 - -/* -* Attempt to find a valid GnomeCard file. -* Return: Filename, or home directory if not found. Filename should -* be g_free() when done. -*/ -gchar *vcard_find_gnomecard( void ) { - gchar *homedir; - gchar buf[ WORK_BUFLEN ]; - gchar str[ WORK_BUFLEN ]; - gchar *fileSpec; - gint len, lenlbl, i; - FILE *fp; - - homedir = g_get_home_dir(); - if( ! homedir ) return NULL; - - strcpy( str, homedir ); - len = strlen( str ); - if( len > 0 ) { - if( str[ len-1 ] != G_DIR_SEPARATOR ) { - str[ len ] = G_DIR_SEPARATOR; - str[ ++len ] = '\0'; - } - } - strcat( str, GNOMECARD_DIR ); - strcat( str, G_DIR_SEPARATOR_S ); - strcat( str, GNOMECARD_FILE ); - - fileSpec = NULL; - if( ( fp = fopen( str, "r" ) ) != NULL ) { - // Read configuration file - lenlbl = strlen( GNOMECARD_SECTION ); - while( fgets( buf, sizeof( buf ), fp ) != NULL ) { - if( 0 == g_strncasecmp( buf, GNOMECARD_SECTION, lenlbl ) ) { - break; - } - } - - while( fgets( buf, sizeof( buf ), fp ) != NULL ) { - g_strchomp( buf ); - if( buf[0] == '[' ) break; - for( i = 0; i < lenlbl; i++ ) { - if( buf[i] == '=' ) { - if( 0 == g_strncasecmp( buf, GNOMECARD_PARAM, i ) ) { - fileSpec = g_strdup( buf + i + 1 ); - g_strstrip( fileSpec ); - } - } - } - } - fclose( fp ); - } - - if( fileSpec == NULL ) { - // Use the home directory - str[ len ] = '\0'; - fileSpec = g_strdup( str ); - } - - return fileSpec; -} - -/* -* Attempt to read file, testing for valid VCard format. -* Return: TRUE if file appears to be valid format. -*/ -gint vcard_test_read_file( const gchar *fileSpec ) { - gboolean haveStart; - gchar *tagtemp = NULL, *tagname = NULL, *tagvalue = NULL, *tagtype = NULL, *tagrest = NULL, *line; - VCardFile *cardFile; - gint retVal, lines; - - if( ! fileSpec ) return MGU_NO_FILE; - - cardFile = vcard_create_path( fileSpec ); - cardFile->retVal = MGU_SUCCESS; - vcard_open_file( cardFile ); - if( cardFile->retVal == MGU_SUCCESS ) { - cardFile->retVal = MGU_BAD_FORMAT; - haveStart = FALSE; - lines = VCARD_TEST_LINES; - while( lines > 0 ) { - lines--; - if( ( line = vcard_get_line( cardFile ) ) == NULL ) break; - - /* Parse line */ - tagtemp = vcard_get_tagname( line, VCARD_SEP_TAG ); - if( tagtemp ) { - tagvalue = vcard_get_tagvalue( line, VCARD_SEP_TAG ); - tagname = vcard_get_tagname( tagtemp, VCARD_SEP_TYPE ); - tagtype = vcard_get_tagvalue( tagtemp, VCARD_SEP_TYPE ); - if( tagname == NULL ) { - tagname = tagtemp; - tagtemp = NULL; - } - - if( tagvalue ) { - if( g_strcasecmp( tagtype, VCARD_TYPE_QP ) == 0 ) { - // Quoted-Printable: could span multiple lines - tagvalue = vcard_read_qp( cardFile, tagvalue ); - vcard_unescape_qp( tagvalue ); - } - - if( g_strcasecmp( tagname, VCARD_TAG_START ) == 0 && g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) { - haveStart = TRUE; - } - if( g_strcasecmp( tagname, VCARD_TAG_END ) == 0 && g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) { - // VCard is complete - if( haveStart ) cardFile->retVal = MGU_SUCCESS; - } - g_free( tagvalue ); - } - g_free( tagname ); - g_free( tagtype ); - } - } - vcard_close_file( cardFile ); - } - retVal = cardFile->retVal; - vcard_free( cardFile ); - cardFile = NULL; - return retVal; -} - -/* -* End of Source. -*/ diff --git a/src/vcard.h b/src/vcard.h deleted file mode 100644 index dd5e420d9..000000000 --- a/src/vcard.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 2001 Match Grun - * - * 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. - */ - -/* - * Definitions necessary to access VCard files. VCard files are used - * by GnomeCard for addressbook, and Netscape for sending business - * card information. Refer to RFC2426 for more information. - */ - -#ifndef __VCARD_H__ -#define __VCARD_H__ - -#include <time.h> -#include <stdio.h> -#include <glib.h> - -#include "mgutils.h" - -#define VCARDBUFSIZE 1024 - -#define VCARD_TAG_START "begin" -#define VCARD_TAG_END "end" -#define VCARD_NAME "vcard" - -#define VCARD_TAG_FULLNAME "fn" -#define VCARD_TAG_NAME "n" -#define VCARD_TAG_EMAIL "email" -#define VCARD_TAG_UID "uid" - -#define VCARD_TYPE_QP "quoted-printable" - -#define VCARD_SEP_TAG ':' -#define VCARD_SEP_TYPE ';' - -/* -// Typical VCard entry: -// -// BEGIN:VCARD -// FN:Axle Rose -// N:Rose;Axle;D;Ms;Jnr -// REV:2001-04-22T03:52:05 -// ADR;HOME:;;777 Lexington Avenue;Denver;CO;80299;USA -// ADR;POSTAL:P O Box 777;;;Denver;CO;80298;Usa -// TEL;HOME:303-555-1234 -// EMAIL;AOL:axlerose@aol.com -// EMAIL;INTERNET:axlerose@netscape.net -// TITLE:Janitor -// ORG:The Company -// URL:http://www.axlerose.com -// END:VCARD -*/ - -// VCard object -typedef struct _VCardFile VCardFile; -struct _VCardFile { - gchar *name; - FILE *file; - gchar *path; - AddressCache *addressCache; - gchar buffer[ VCARDBUFSIZE ]; - gchar *bufptr; - gint retVal; -}; - -/* Function prototypes */ -VCardFile *vcard_create(); -VCardFile *vcard_create_path( const gchar *path ); -void vcard_force_refresh( VCardFile *cardFile ); -void vcard_free( VCardFile *cardFile ); -gint vcard_read_data( VCardFile *cardFile ); -GList *vcard_get_address_list( VCardFile *cardFile ); -gboolean vcard_validate( const VCardFile *cardFile ); -gchar *vcard_find_gnomecard( void ); -gint vcard_test_read_file( const gchar *fileSpec ); - -#endif /* __VCARD_H__ */ diff --git a/src/xml.c b/src/xml.c deleted file mode 100644 index b27611533..000000000 --- a/src/xml.c +++ /dev/null @@ -1,511 +0,0 @@ -/* - * 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 deleted file mode 100644 index c88791340..000000000 --- a/src/xml.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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/sylpheed.desktop b/sylpheed.desktop deleted file mode 100644 index 08e137af3..000000000 --- a/sylpheed.desktop +++ /dev/null @@ -1,7 +0,0 @@ -[desktop Entry] -Name=Sylpheed -Comment=Sylpheed Mail -Exec=sylpheed -Icon=sylpheed.png -Terminal=0 -Type=Application diff --git a/sylpheed.png b/sylpheed.png deleted file mode 100644 index e60c304a47503ff528dc3ba8db89dd9f8582a6d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcwPel00001 literal 3419 zcwPZp4W#mkP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&00004XF*Lt006O% z3;baP00006VoOIv0RI600RN!9r;`8x010qNS#tmY3labT3lag+-G2N4000McNliru z(FGM0Iyu`C5Gnuw4A@CTK~#9!&6;O#9Lbr-e-(PBrzbIpRNB=hTf2ul9~SWUI>2uX z+{ZKaUK(ed?M?7XrYMP&L@`Y0=}_Uh7d;%#ki#HhaX12vYD_h|>R(UzKcUrs{_&3z zVnjrmYw13o|F(S1=dYVv`}_Ix%j?`S7uW1(?Yi@M8)9UCZx5R!hzP)9M1=X>wfBo> zueq1==dXKi`F$cN0HrYVQMA5xO%Wl6z^o{+B7#j4{^JjSAfBK0n(?N&E8|=;*FCe4 z+`93mxi#Z|efJ$vqyci<#_kG2Vg!jO1Whvv5fFmJ=2U-05Y2kc{_TpGJ^+NQY+g_j zY3WGM2t6yLMlc3qRE%eVqe2+hk?<>mh)a97a*K*w-t@9+AQ6MmHj#mibc|q?U@UZd z3B%2VV&;&;K&k?#MmU^BX5s3FJ_f|HBUq8h%7$+dXQCph5&9;Q89^y9R*_|v&FzFv zR|7&PQ%DFL9R@aHAhv~r5XqOo#9P+8n?yve>h6*oT}G}XVwI5D$j}Oj7PJOy6}`S? zu$j<qtGRD!0Ba3fyKO`wM+bq8Brr>a(nacJ4fq&I#JCDX;HsD}Euuu|TVW#++6J^y zBrVNgXvunpB$+!?k<}5wXxQFuA+eFnwhQD|IQCc9xt62WanF(v?6P=na+#J!3RxR^ zgM`7*((b7Bo0qr%(fk%MTDZ4skzfd~D+Z-7R^V^3!&}G8s&$*2jY?2T=yWZ^&4i?N zRRS?I?=S|Gx&VQAhz=tKJKHs(^c1ylRBG~%H1fElT5(0SZsQ7xlrAzl_SB{0{^N9R z4;NsHnIoUn^oN!-RVV_)8e$243Vw=-j{Ca_iEZ&}7K!;>b{}i(cjb}uv6jeLC3IAz zDujGo)81*VsFQ@q=(u2d7P<dGlXV;_<_(CDLzsaCGzl%8;VMg6wMeY}XfUg)HGj!U zP`JhwmlCOhU`(S%7a#&iAo`MWe8%{AME<ts$>)lG-=SmCNJcy{3McO;{QUhPd;1xq zWSd^U|IuJpz1AA{Cu<nDreWtSQS-n}=K5cO&++*&lXnNadv(G=oilx-`1*GpHa0C< z(||at_}iaP*nd&+X3}MvHf!{HJ?uw-Sz&gr`{yg{8!5dYaqgL9ZUcS-^$C7@NPhH^ z*9Rkt%2AyO(f9bb-*3?$CY&5q{Qb`-9PH)nkA=hWl*%@T7($@i>tT&q@uD|zNL<J4 zca4229|@vXc%lJR5vwWnY|La<kbBt8EP1Y(<_6~@-~aa+ulI675L|?T_ISy$Q<$lM z#6TzOk~E}ryGveHt+*z^xheJuO7KCr$PP5<7U(vZ7D{P)7CKh3v)ke8Zy&JrV93j7 zXZT>*zMlb+UBK0maS=JoXPiaw-VnS+j6syTLXz<sFsl+-V%KY#7QrGUs!4PZ0cAj^ zV7n-jqKskKg5g%e*Z;oBCtq$6b&m&MWZZj@A@u}_H6WC;K#_Y!r=H2gkb8J9kt2yr zy}F2$Z{v{|mtw6ukfKItsW_*OCH6*vGAM0ON|W_0Uwt#+lP`K0YcQ>hBul`j;M$El zj;<j~)kt(SYVrQK#mR|g|5WjMDjXFN_d#B3j_Nj2)GE?7(wGOAW2)va>nA*XJmkx7 z2DH=0a8asJJ*(zULV#&wTRH*LW4JqD_^`v~`#|z+O6P4w<s!%7BYEVy1PY0?w2+xN z-+R0WLFRzcj^T@^eYUrStY=wG%+JAe=bYjiASMGl0Mh|&+1j;;2vzC$wDRP2Wcne@ z9&ZWU48p)fv=Wj;lXlD^R6mzWZ(!-RGmNU15G-F@NJv@GwgI4QGao$w+dG#0aY{9F z9Oc5yMf^4UyF!S!kx!x`T`P1tn(f^-{eijUf(5M=7zGiE+;jA<rgVz-uua+nO(0Yw zbR5y?1UkJGt6cMnxIhU?^Wc%<a6hoq@*GS-;`-Xc71g?xNmcVAHD9%^0%=Ecv5SjS zpPV_K|1{#|p2Okk@3iRjD`K64J0sQ;jEQXSWIX<Sz+ki89Kr&Kp=Av1WJXUs(Hlb0 zYh%KNYQ=MdxkVygB4?!_G2m*)xN8^;ExmyyO&bs~3a3XUzx?%t7tf~5>I9cX+@zvk zRp2K)dgzHkc=;^n@Wq(Zw-dhkc7v^*l%|BG7GMUw66I&aBEgZOFSGs<JzV4?w@9QG z;awRS*TV5E(i=JYCyLFXVPnfM>_=wfntyyh;-5cHm=uu%XQ=9$uk@JVCOrNWKL1UM zF)16HmY@DQ;^p%(Ng|}b-=a52mK=m9OC7$PKxru@VA~z6F)Igu)kfA3;N`Ih!c2q_ z!nTj-C`j#a6||Hm_<+Pnl4w*JX%WE}81K3Npv#v}J7nEPMV@@srz!(K{Kd2XJm<-8 z`l~=_xGK6DSJccrv?8?A6s`4oW9Kf3)qFHWHj~J(CG<Lq?JdJ#5J+rA+KoK@*FHPD zn&WpR?+$C;9oOi}F&iuDs!i5U=V496`Gl!Y2$d(F2qAzmYQ@8e2*G=bVn$FJtu;xK zER6hIIyWX(m))HqveSy}c3^A6vU9&hf1qgF88`>dv%TA5bKCIfNte+{&FdF4_Mhh* z?3c7Uj;G(Y>Go3&4sxEqwv1zsK_^hUHa@m7NuyRsSb&*2p>iJTnj}fkTBDS@$|G`z zNK;E>yB&Fu!Op#e`;Sw)J%d&bJPjA9Ht2|^ChIk!%5Xd7-lIMTuOesTHv2COot|Ou zh2hz>N0udI)`4y#x&wxJdR#97X^IruIcnz`FvhG=tveWdY9bHkARayGkaf+RKjw^W zdQIFE+D%FuN{~R-H#`|^vGqxdqqmBa_mSgc$Jta7l_fP5I(oW2P0~teT-V&Kt0s`F z=e!$2Ab3v*0X2_~*M=z9<s@2~a_C0i@aVG+S=N9EK2Q~b;Dsb<lcq@nO1FRs!~&E- z+myj}kF;;;^eSFFo6s6N9@`ld6WSd|H|t?k4YZs1i^%(Tj+dh*cUe~d5W>RX&xK&) zngZSB&{->CtE0GgzfG1I>dJHcreHd*DGN^w5v_%+tJuD$==TgpnI^=CM&E;@mB8-9 z1jz7ZL6}w~ndj-hblBJskP5_rZu4rd;`#HEpHCxIWX1TGGefzqWV*HvOC)U@hFb|| zCnaxR=1fL4brlx1EbkpA*1UOMG8{Ude5M!-FB(Q@54wfb3A^_V(RJ9_-C)qmxVHnX zwqB6o>lZVA`C-Bjhmn&?H!TS+fw|IFSSoVelu!j9IXx<Q`)bB4uPL2yTtr57WLnnL z#f+>Tu@S~}RKdwB%~#)ax&KLqO<Z%@(SmAWb&LBCExQkfSmV*uAd#Zb?C(uEeC61G z=XgGWI;txmmYvhBJhI}&v@n}_e*DLjS?(D-;iQZdK9ZL;<H?lK*%{U3j9#4bRmV|I zVRAO(>F+l9;%Oh7Xdr;{AT^0@&22#gZQdP}ym&U_<bB|MF8u98IH@39YT2!XQ<qgs zt!XP<E;u|NNyD^Js6$iVa?Uf&XPlm%a&mG)p66%@j0!~_;4|+De>p=b`24qXFybMc z14<|g&5LIhhp%d8x$v%lpGT2{JW%_v(r-j5&gpVRBIkstl)BON29YZ%X9$6^EE$hR zj7B4>sv=1ek|d+HhP|k;F<@toAOB|xO7Zz`dsy4JR#(-$+8eR=OTlQQsAHR#Rf|`J z;-v5tWrcIDiEsg>6vmhZ8J?^DDk08U@<R$^!F!6?jM;2Ph>=c~(MeNU?e?NJ^;$fY zulOvl(0?z{+VJqxl;gK0&wd*7{!Pj8B=WX290t!6k3&<}j;gBg-mid2ti>3ES~7)| za*+Or;&F%(KlkU|EF;S@(lo^;33`5FAq38RO<tEgdsFb^xFpJ$(@{l{JI19ja!|!c z(4ehHYmN6F=iGw$j4^X*Cl>+Zxjipe<L{JMt!uwoOSjiUD@8j^FG6e)h!JfJkrtKG z<iYUfv>=}b@<QR9!UrJ=2!c`$<$M!E&DBY3jkT5}Nfv5#nM>BjS|3_GZnxWus^Buy zUe2kN(&(gx7O)+#5nO~A>P4YXmMVu@Ym6}~AQmCX<qYvdW36?)yYo|uYpVE{M*wRr zX_~II(42FN`Exb0)-J9^q<byLT`ppOVDE1EbBenrW->qRR;#rF(EG+VjI~%}ut|cM z16W?;P6fIT?%jQ4fBYOw(rS^$h*Apg{X!ZGTbNVAjdkBURpajh;v@UxP1RB@?8_!e z6J;sY)VwZB^M;QXR*n7t5X5r(TPfAp!BXjSt!CV0f9K48&eGrg=}#A~^OjGTeyz`( x&gX8uU$^Gcr%?+YDa!Ky{fA{YegqdI{|nUn0f@*nA)^2Q002ovPDHLkV1mK+jN$+Q diff --git a/sylpheed.spec.in b/sylpheed.spec.in deleted file mode 100644 index 00c551adb..000000000 --- a/sylpheed.spec.in +++ /dev/null @@ -1,264 +0,0 @@ -%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/*/* diff --git a/tools/README b/tools/README deleted file mode 100644 index b7c93b77f..000000000 --- a/tools/README +++ /dev/null @@ -1,85 +0,0 @@ - -* filter_conv.pl - - WHAT IT DOES - - This perl script provides easy conversion of your filtering rules - form sylpheed's old filter system to the new filtering system used - in sylpheed-claws. It reads 'filterrc' and outputs 'filteringrc'. - - HOW TO USE IT - - Move 'filter_conv.pl' to the $HOME/.sylpheed directory. - From the $HOME/.sylpheed directory, issue the command: - - perl filter_conv.pl - - That's it, the new filtering system is now implemented with your - previous rules applied. - - Any problems, contact Paul <claws@thewildbeast.co.uk> - ------------------------------------------------------------------------ - -* gif2xface.pl - - WHAT IT DOES - - This perl script converts a monochrome (1 bit) 48x48 pixels GIF file - into an X-Face graphic suitable for inclusion into custom headers of - Sylpheed. An X-Face allows to quickly identify (or be identified as) - the sender of a mail message in a xface-capable MUA (like sylpheed). - - HOW TO USE IT - - After obtaining the desired image for your X-Face you should: - * scale it to 48x48 pixels (Image->Scale image on Gimp) - * down color depth to b/w (Image->Mode->Indexed selecting "Use - Black/White palette" and the desired dithering options (prior to - indexing doing Image->Colors->Threshold allows you to select the - b/w level if you don't want a dithered (dotty) image)) - * save file as non-interlaced GIF - Then do: - - ./gif2xface < filename.gif > filename.xface - - In filename.xface will be the X-Face header ready to use. - You can add a custom header in Sylpheed through Configuration-> - Preferences per account, "Send" tab, check "Add user-defined header" - then "Edit..." if you want to add it via Sylpheed interface, or do - - echo "0:" `cat filename.xface` > ~/.sylpheed/customheaderrc - - if you want to create the custom headers file yourself (Warning: this - method is valid only if you don't have any other custom header set or - they will be lost!). - - Any problems, contact Ricardo Mones Lastra <mones@aic.uniovi.es> - ------------------------------------------------------------------------ - -* ldif-to-xml.py - - WHAT IT DOES - - This python script converts the netscape ldif format address book to - the sylpheed xml format. - - HOW TO USE IT - - Inside Netscape export your address book to a file. - From the command line, execute: - - ./ldif-to-xml.py <path/filename> - - In case of trouble, just invoke your python interpreter directly: - - python ldif-to-xml.py <path/filename> - - Either way a file called addressbook.xml will be generated in the current - directory. This xml file should be merged with or simply placed in the - $HOME/.sylpheed directory. - - Any problems, contact Rod Senra <rodrigo.senra@ic.unicamp.br> - ------------------------------------------------------------------------ diff --git a/tools/filter_conv.pl b/tools/filter_conv.pl deleted file mode 100644 index fa3e6c8a3..000000000 --- a/tools/filter_conv.pl +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/perl - -# * Copyright 2001 Paul Mangan <claws@thewildbeast.co.uk> -# * -# * 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. -# * - - -$INPUT = open (FILTERRC, "<filterrc"); -@input_file = <FILTERRC>; -$WRITE_THIS = ""; -close FILTERRC; - -foreach $input_file (@input_file) { -@split_lines = split("\t", $input_file); -if (($split_lines[3]) && ($split_lines[0] eq "To")) { -$WRITE_THIS .= "to_or_cc match \"$split_lines[1]\""; -} elsif ($split_lines[0] eq "To") { -$WRITE_THIS .= "to match \"$split_lines[1]\""; -} elsif ($split_lines[0] eq "Reply-To") { -$WRITE_THIS .= "inreplyto match \"$split_lines[1]\""; -} elsif ($split_lines[0] eq "Subject") { -$WRITE_THIS .= "subject match \"$split_lines[1]\""; -} elsif (($split_lines[0] eq "From") || ($split_lines[0] eq "Sender")){ -$WRITE_THIS .= "from match \"$split_lines[1]\""; -} -if (!$split_lines[5]) { -$WRITE_THIS .= " delete"; -} elsif ($split_lines[8] == "m"){ -$WRITE_THIS .= " move \"\#mh/Mailbox/$split_lines[5]\""; -} -$WRITE_THIS .= "\n"; - -@split_lines = ""; -} - -open (FILTERINGRC, ">filteringrc"); - -print FILTERINGRC $WRITE_THIS; -close FILTERINGRC; - -exit; - diff --git a/tools/gif2xface.pl b/tools/gif2xface.pl deleted file mode 100644 index 4d09f34da..000000000 --- a/tools/gif2xface.pl +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/perl -# -# gif2xface -- converts a 48x48 GIF file to an X-Face mail header -# -# Author: Ricardo Mones Lastra <mones@aic.uniovi.es> -# -# URL: http://www.aic.uniovi.es/mones -# -# This is a hack over the original xbm2face script. The xbm files generated -# by some graphic tools (notably The Gimp version 1.2.1) aren't suitable to -# feed the compface program. Starting with a GIF and using some filters does -# the trick. A little help screen also added. -# This requieres giftopnm and pbmtoxbm (both in libgr-progs package). -# -# The original xbm2face author's comment follows: -# -# xbm2xface -- converts a 48x48 xbm file to an X-Face mail header -# -# Author: Jonathan Stigelman <Stig@hackvan.com> -# -# URL: http://hackvan.com/pub/stig/src/linux/ -# FTP: hackvan.com:/pub/stig/src/linux/ -# -# This is a Perl script that I wrote to convert 48x48 xbm (X bitmap) files -# into X-Face: headers suitable for inclusion in RFC822 internet -# electronic mail. A 48x48 bitmap is awfully small, but X-Faces are still -# good enough for other people to visually establish your identity in -# email without having to carefully read your name. -# -# Basically, it gets you noticed...either as the person with the cool -# X-Face or as that jerk with modem noise in all of his email messages. -# -# People will start looking over your shoulder and say "Hey Cool! How'd -# you do that?" When they do, you just send 'em to my URL for this -# utility and tell 'em to upgrade to a real mail reader: XEmacs and VM. -# -# It also requires the 'compface' utility. -# - -sub check_for_help { - local($param) = @_; - - # is a filter, no args must be present - if (defined($param)) - { - print "\n", 'gif2xface -- A filter for converting an 48x48 gif into a xface string', "\n\n" ; - print 'Usage: gif2xface < input.gif > output.xface', "\n\n"; - exit; - } -} - -sub reverse_byte { - local($byte) = @_; - local($n, $b); - for ( $b= $n= 0; $b<8; ++$b) { - $n |= (($byte & 1) << (7-$b)); - $byte >>= 1; - } - return($n); -} - - -&check_for_help($ARGV[0]); - -# printf "0x%02x\n", &reverse_byte(0xF0); - -$ra = rand; -$tf = "/tmp/gif2xface.$ra"; -open(GP,"|giftopnm|pbmtoxbm>$tf"); - -while (<>) { - print GP $_; -} -close(GP); -open(GP,"<$tf"); -<GP>; -m/^#define \w+_width (\d+)/ && ($width=$1); -<GP>; -m/^#define \w+_height (\d+)/ && ($height=$1); -<GP>; -m/^static.* = \{/ && (( $width == 48 && $height == 48 ) - || die $0, ": sorry, xfaces must be 48x48 pixels" ); - -$| = 1; print "X-Face:"; - -open(CF,"|compface"); - -while (<GP>) { - $st=""; - while (s/(0x..)(,|\};)\s*//) { - $st .= sprintf("0x%02x, ", &reverse_byte(eval($1))); - } - $_=$st; - s/(0x..), 0x(..)/\1\2/g; - s/\s*(0x...., 0x...., 0x....)(,|\};)\s/\1,\n/g; - print CF $_; -} -close (CF); -close (GP); -unlink $tf; diff --git a/tools/ldif-to-xml.py b/tools/ldif-to-xml.py deleted file mode 100644 index bfafdfe16..000000000 --- a/tools/ldif-to-xml.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env python - -# * Copyright 2001 Rod Senra <Rodrigo.Senra@ic.unicamp.br> -# * -# * 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. -# * - -import re -import sys - -header = """<?xml version="1.0" encoding="ISO-8859-1"?> -<addressbook> - -<common_address> -""" - -footer = """ -</common_address> - -<personal_address> -</personal_address> - -</addressbook> -""" - -def printGroupRec(fd,name,members): - """ Print XML group record from r-tuple""" - fd.write(" <group name=\"%s\">\n"%(name)) - for each in members: - printRec(fd,each," ") - fd.write(" </group>\n") - -def printRec(fd,r,ident): - """ Print XML group record from r-tuple""" - fd.write("%s<item>\n"%(ident) ) - fd.write("%s <name>%s</name>\n"%(ident,r[0])) - fd.write("%s <address>%s</address>\n"%(ident,r[1])) - fd.write("%s <remarks>%s</remarks>\n"%(ident,r[2])) - fd.write("%s</item>\n"%(ident)) - -outfd = open('addressbook.xml','w') - - -outfd.write(header) -try: - rec = {} - for line in open(sys.argv[1]).readlines(): - line = line[:-1].strip() # clean string - if line=='': - try: - if rec.has_key('description'): - str = rec['description'] - elif rec.has_key('xmozillanickname'): - str = rec['xmozillanickname'] - elif rec.has_key('sn'): - str = rec['sn'] - else: - str = '' - try: - if rec.has_key('member'): - printGroupRec(outfd,rec['cn'].strip(),rec['member']) - elif rec.has_key('mail'): - printRec(outfd,(rec['cn'].strip(),rec['mail'].strip(),str.strip())," ") - - except KeyError: - pass - finally: - del rec - rec = {} - continue - - try: # parse line - key,value = line.split(':') - except: - continue - if key=='member': - name,addr = value.split(',') - name = name.split('=')[1].strip() - addr = addr.split('=')[1].strip() - value = (name,addr,'') - if rec.has_key('member'): - rec['member'].append(value) - else : - rec['member'] = [value] - else: - rec[key]=value - -finally: - outfd.write(footer) - outfd.close() -- 2.11.4.GIT