diff -Nru elmo-0.8.1/NEWS elmo-0.8.1-/NEWS --- elmo-0.8.1/NEWS 2003-07-21 22:08:00.000000000 +0200 +++ elmo-0.8.1-/NEWS 2003-07-31 12:33:39.000000000 +0200 @@ -5,6 +5,8 @@ - guessing smtp account in reply and forward - address tab-completion - finding duplicates + - working addressbook + - reply all 0.8 Pliki binarne elmo-0.8.1/po/de.gmo i elmo-0.8.1-/po/de.gmo siê ró¿ni± diff -Nru elmo-0.8.1/po/de.po elmo-0.8.1-/po/de.po --- elmo-0.8.1/po/de.po 2003-07-29 13:45:59.000000000 +0200 +++ elmo-0.8.1-/po/de.po 2003-07-31 12:22:33.000000000 +0200 @@ -1,5 +1,5 @@ # German translations for elmo package. -# Copyright (C) 2003 THE elmo'S COPYRIGHT HOLDER +# Copyright (C) 2003 rzyjontko # This file is distributed under the same license as the elmo package. # Martin Sieper , 2003. # @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: elmo 0.8.x\n" -"POT-Creation-Date: 2003-07-29 13:45+0200\n" +"POT-Creation-Date: 2003-07-31 12:22+0200\n" "PO-Revision-Date: 2003-06-18 11:21+0200\n" "Last-Translator: Martin Sieper \n" "Language-Team: German \n" @@ -16,11 +16,11 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/abook.c:485 +#: src/abook.c:486 msgid "addressbook" msgstr "Adressbuch" -#: src/abook.c:840 +#: src/abook.c:843 msgid "select address" msgstr "Adresse wählen" @@ -32,40 +32,40 @@ msgid "file: " msgstr "Datei: " -#: src/cmd.c:306 +#: src/cmd.c:308 msgid "state stack overflow, please send bug report" msgstr "Status Stack Überlauf, bitte Fehlerbericht senden" -#: src/cmd.c:318 +#: src/cmd.c:320 msgid "state stack underflow, please send bug report" msgstr "Status Stack Unterlauf, bitte Fehlerbericht senden" -#: confread.l:366 +#: confread.l:367 msgid "includes nested to deep" msgstr "" -#: confread.l:469 +#: confread.l:470 msgid "identifier" msgstr "Identifizierer" -#: confread.l:474 +#: confread.l:475 msgid "end of line" msgstr "Zeilenende" -#: confread.l:478 +#: confread.l:479 msgid "quoted text" msgstr "zitierter Text" -#: confread.l:484 +#: confread.l:485 msgid "key specifier" msgstr "Tastenbeschreibung" -#: confread.l:487 +#: confread.l:488 #, fuzzy msgid "end of file" msgstr "Zeilenende" -#: confread.l:497 +#: confread.l:498 #, c-format msgid "%s:%d: parse error near %s" msgstr "%s:%d: Fehler bei grammatikalischer Analyse neben %s" @@ -269,11 +269,7 @@ msgid "internal error" msgstr "Interner Fehler" -#: src/smtp.c:522 -msgid "no receivers defined" -msgstr "Kein Empfänger definiert" - -#: src/smtp.c:530 +#: src/smtp.c:528 #, c-format msgid "address <%s> was rejected" msgstr "Adresse <%s> wurde abgewiesen" @@ -290,6 +286,9 @@ msgid " new:" msgstr " neu:" +#~ msgid "no receivers defined" +#~ msgstr "Kein Empfänger definiert" + #~ msgid "congratulations! you have just found a bug" #~ msgstr "Herzlichen Glückwunsch! Sie haben einen Bug gefunden" diff -Nru elmo-0.8.1/po/elmo.pot elmo-0.8.1-/po/elmo.pot --- elmo-0.8.1/po/elmo.pot 2003-07-29 13:45:59.000000000 +0200 +++ elmo-0.8.1-/po/elmo.pot 2003-07-31 12:22:32.000000000 +0200 @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2003-07-29 13:45+0200\n" +"POT-Creation-Date: 2003-07-31 12:22+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,11 +15,11 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/abook.c:485 +#: src/abook.c:486 msgid "addressbook" msgstr "" -#: src/abook.c:840 +#: src/abook.c:843 msgid "select address" msgstr "" @@ -31,39 +31,39 @@ msgid "file: " msgstr "" -#: src/cmd.c:306 +#: src/cmd.c:308 msgid "state stack overflow, please send bug report" msgstr "" -#: src/cmd.c:318 +#: src/cmd.c:320 msgid "state stack underflow, please send bug report" msgstr "" -#: confread.l:366 +#: confread.l:367 msgid "includes nested to deep" msgstr "" -#: confread.l:469 +#: confread.l:470 msgid "identifier" msgstr "" -#: confread.l:474 +#: confread.l:475 msgid "end of line" msgstr "" -#: confread.l:478 +#: confread.l:479 msgid "quoted text" msgstr "" -#: confread.l:484 +#: confread.l:485 msgid "key specifier" msgstr "" -#: confread.l:487 +#: confread.l:488 msgid "end of file" msgstr "" -#: confread.l:497 +#: confread.l:498 #, c-format msgid "%s:%d: parse error near %s" msgstr "" @@ -267,11 +267,7 @@ msgid "internal error" msgstr "" -#: src/smtp.c:522 -msgid "no receivers defined" -msgstr "" - -#: src/smtp.c:530 +#: src/smtp.c:528 #, c-format msgid "address <%s> was rejected" msgstr "" Pliki binarne elmo-0.8.1/po/pl.gmo i elmo-0.8.1-/po/pl.gmo siê ró¿ni± diff -Nru elmo-0.8.1/po/pl.po elmo-0.8.1-/po/pl.po --- elmo-0.8.1/po/pl.po 2003-07-29 13:45:59.000000000 +0200 +++ elmo-0.8.1-/po/pl.po 2003-07-31 12:22:33.000000000 +0200 @@ -1,12 +1,12 @@ # Polish translations for elmo package. -# Copyright (C) 2003 THE elmo'S COPYRIGHT HOLDER +# Copyright (C) 2003 rzyjontko # This file is distributed under the same license as the elmo package. # Artur Skura , 2003. # msgid "" msgstr "" "Project-Id-Version: elmo 0.6\n" -"POT-Creation-Date: 2003-07-29 13:45+0200\n" +"POT-Creation-Date: 2003-07-31 12:22+0200\n" "PO-Revision-Date: 2003-04-16 01:41+0200\n" "Last-Translator: Artur Skura \n" "Language-Team: Polish \n" @@ -16,11 +16,11 @@ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: src/abook.c:485 +#: src/abook.c:486 msgid "addressbook" msgstr "ksi±¿ka adresowa" -#: src/abook.c:840 +#: src/abook.c:843 msgid "select address" msgstr "wybierz adres" @@ -32,40 +32,40 @@ msgid "file: " msgstr "plik: " -#: src/cmd.c:306 +#: src/cmd.c:308 msgid "state stack overflow, please send bug report" msgstr "przepe³nienie bufora stanu, prosimy o przes³anie raportu o b³êdzie" -#: src/cmd.c:318 +#: src/cmd.c:320 msgid "state stack underflow, please send bug report" msgstr "niedope³nienie bufora stanu, prosimy o przes³anie raportu o b³êdzie" -#: confread.l:366 +#: confread.l:367 msgid "includes nested to deep" msgstr "" -#: confread.l:469 +#: confread.l:470 msgid "identifier" msgstr "" -#: confread.l:474 +#: confread.l:475 msgid "end of line" msgstr "" -#: confread.l:478 +#: confread.l:479 msgid "quoted text" msgstr "" -#: confread.l:484 +#: confread.l:485 msgid "key specifier" msgstr "" -#: confread.l:487 +#: confread.l:488 #, fuzzy msgid "end of file" msgstr "odczytywanie pliku" -#: confread.l:497 +#: confread.l:498 #, c-format msgid "%s:%d: parse error near %s" msgstr "%s:%d: b³±d parsowania przy %s" @@ -271,11 +271,7 @@ msgid "internal error" msgstr "b³±d wewnêtrzny" -#: src/smtp.c:522 -msgid "no receivers defined" -msgstr "nie okre¶lono odbiorców" - -#: src/smtp.c:530 +#: src/smtp.c:528 #, c-format msgid "address <%s> was rejected" msgstr "serwer odrzuci³ adresata <%s>" @@ -292,6 +288,9 @@ msgid " new:" msgstr " nowych:" +#~ msgid "no receivers defined" +#~ msgstr "nie okre¶lono odbiorców" + #~ msgid "congratulations! you have just found a bug" #~ msgstr "gratulacje! w³a¶nie znalaz³a¶/e¶ b³±d w programie" diff -Nru elmo-0.8.1/src/abook.c elmo-0.8.1-/src/abook.c --- elmo-0.8.1/src/abook.c 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/abook.c 2003-07-28 17:06:01.000000000 +0200 @@ -60,6 +60,7 @@ #define ABOOK_WIDTH 80 #define DFL_LOCATION() file_with_dir (getenv ("HOME"), ".addressbook") +#define NONEMPTY do { if (abook->count == 0) return; } while (0) #define PREAMBLE do { if (abook_select == NULL) return; } while (0) #define PREAMBLE_ADD do { if (add_select == NULL) return; } while (0) @@ -743,6 +744,7 @@ char **item; PREAMBLE; + NONEMPTY; addr = abook->array[abook_select->bar_pos]; name = read_argument ("name: ", addr->name, COMPLETE_NONE); @@ -782,6 +784,7 @@ char **item; PREAMBLE; + NONEMPTY; addr = abook->array[abook_select->bar_pos]; email = read_argument ("email: ", addr->email, COMPLETE_NONE); diff -Nru elmo-0.8.1/src/address.c elmo-0.8.1-/src/address.c --- elmo-0.8.1/src/address.c 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/address.c 2003-07-31 11:50:37.000000000 +0200 @@ -111,7 +111,7 @@ static char * clean_copy (memblock_t **block, const char *str) { - char *last_space; + char *last_space = NULL; char *end; char *result; @@ -595,12 +595,13 @@ if (! current || ! current->used) return NULL; + memblock_set_mark (*data_block); addr = address_empty_mem (data_block); addr->full = clean_copy (data_block, str); inserted = insert (addr); if (inserted){ - memblock_free_last (*data_block); + memblock_free_marked (data_block); return inserted; } @@ -663,12 +664,26 @@ return result; } + /**************************************************************************** * SERVICE FUNCTIONS ****************************************************************************/ char * +address_name (addr_t *addr) +{ + if (addr == NULL) + return NULL; + + if (addr->name) + return addr->name; + + return addr->full; +} + + +char * address_wrote_format (addr_t *addr) { switch (addr->flags.sex){ diff -Nru elmo-0.8.1/src/address.h elmo-0.8.1-/src/address.h --- elmo-0.8.1/src/address.h 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/address.h 2003-07-31 11:50:30.000000000 +0200 @@ -134,6 +134,7 @@ extern addr_t *address_complete (addr_t *addr); extern addr_t *address_copy (addr_t *addr, memblock_t **data_block); +extern char *address_name (addr_t *addr); extern char *address_wrote_format (addr_t *addr); extern int address_cmp (const addr_t *a, const addr_t *b); diff -Nru elmo-0.8.1/src/cmd.c elmo-0.8.1-/src/cmd.c --- elmo-0.8.1/src/cmd.c 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/cmd.c 2003-07-31 12:02:39.000000000 +0200 @@ -134,6 +134,7 @@ keymap_add (keymaps + CMD_LIST, 'F', fetch_open); keymap_add (keymaps + CMD_LIST, 'm', sender_open_new); keymap_add (keymaps + CMD_LIST, 'r', sender_open_reply); + keymap_add (keymaps + CMD_LIST, 'R', sender_open_reply_all); keymap_add (keymaps + CMD_LIST, 'f', sender_open_fwd); keymap_add (keymaps + CMD_LIST, 'c', box_selection_open); keymap_add (keymaps + CMD_LIST, '$', folder_flush); @@ -141,6 +142,7 @@ keymap_add (keymaps + CMD_LIST, '*', folder_flag_invert); keymap_add (keymaps + CMD_LIST, '+', folder_flag_all); keymap_add (keymaps + CMD_LIST, '-', folder_unflag_all); + keymap_add (keymaps + CMD_LIST, '=', folder_flag_duplicates); keymap_add (keymaps + CMD_SELECT_BOX, KEY_PPAGE, box_selection_prev_page); keymap_add (keymaps + CMD_SELECT_BOX, KEY_NPAGE, box_selection_next_page); diff -Nru elmo-0.8.1/src/compose.c elmo-0.8.1-/src/compose.c --- elmo-0.8.1/src/compose.c 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/compose.c 2003-07-31 12:04:22.000000000 +0200 @@ -76,6 +76,7 @@ #endif #define DEFAULT_REPLY_FMT "On %d, %f wrote:" +#define LINE_MAX_LEN 70 #define PREAMBLE do {if (mail == NULL) return NULL; } while (0) @@ -248,15 +249,78 @@ static char * make_to (char *to) { - size_t to_len = strlen (to); + size_t to_len = (to) ? strlen (to) : 0; char *result = xmalloc (4 + to_len + 1); - sprintf (result, "To: %s", to); + if (to) + sprintf (result, "To: %s", to); + else + sprintf (result, "To: "); return result; } +static int +may_be (addr_t *addr, addr_t *first, char *email) +{ + if (addr == NULL) + return 0; + + if (addr->full == NULL) + return 0; + + if (strcmp (addr->email, email) == 0) + return 0; + + if (strcmp (addr->email, first->email) == 0) + return 0; + + return 1; +} + + + +static void +make_to_reply (rstring_t *strings, mail_t *mail, int all) +{ + int i; + char *email = ask_get_field (sender_ask, "email"); + addr_t *first = NULL; + raddress_t *to = raddress_create_size (1 + mail->to->count + 1); + raddress_t *cc = NULL; + + if (mail->reply_to) + first = mail->reply_to; + else + first = mail->from; + + if (first) + raddress_add (to, first); + + if (all){ + for (i = 0; i < mail->to->count; i++){ + if (may_be (mail->to->array[i], first, email)) + raddress_add (to, mail->to->array[i]); + } + if (mail->cc && mail->cc->count > 0){ + cc = raddress_create_size (mail->cc->count + 1); + for (i = 0; i < mail->cc->count; i++) + if (may_be (mail->cc->array[i], first, email)) + raddress_add (cc, mail->cc->array[i]); + } + } + + rstring_add (strings, raddress_list (to, "To")); + raddress_destroy (to); + if (cc){ + rstring_add (strings, raddress_list (cc, "Cc")); + raddress_destroy (cc); + } +} + + + static char * make_subject (char *subj, char *prefix) { @@ -500,7 +564,7 @@ char * -compose_reply (void) +compose_reply (int all) { mail_t *mail = folder_mail_selected (); rstring_t *header; @@ -520,13 +584,7 @@ ask_change_where (sender_ask, "email", mail->recv_for->email); rstring_add (header, make_from ()); - if (mail->reply_to) - rstring_add (header, make_to (mail->reply_to->full)); - else if (mail->from) - rstring_add (header, make_to (mail->from->full)); - else - rstring_add (header, make_to ("")); - + make_to_reply (header, mail, all); rstring_add (header, make_subject (mail->subject, "Re:")); line_count++; diff -Nru elmo-0.8.1/src/compose.h elmo-0.8.1-/src/compose.h --- elmo-0.8.1/src/compose.h 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/compose.h 2003-07-28 18:24:22.000000000 +0200 @@ -44,7 +44,7 @@ ****************************************************************************/ extern char *compose_new (char *to); -extern char *compose_reply (void); +extern char *compose_reply (int all); extern char *compose_fwd (char *to); extern char *compose_date (void); extern char *compose_msg_id (void); diff -Nru elmo-0.8.1/src/confread.c elmo-0.8.1-/src/confread.c --- elmo-0.8.1/src/confread.c 2003-07-29 13:43:50.000000000 +0200 +++ elmo-0.8.1-/src/confread.c 2003-07-29 20:39:31.000000000 +0200 @@ -18,7 +18,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /cvsroot/elmo/elmo/src/confread.c,v 1.31 2003/07/29 11:43:50 sdas Exp $ + * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ */ #define FLEX_SCANNER @@ -1979,7 +1979,8 @@ ftop = -1; - frame_push (xstrdup (file)); + if (frame_push (xstrdup (file))) + return 1; current_token = next_token (); ret = parse (); frame_pop (); diff -Nru elmo-0.8.1/src/confread.l elmo-0.8.1-/src/confread.l --- elmo-0.8.1/src/confread.l 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/confread.l 2003-07-28 16:51:38.000000000 +0200 @@ -278,7 +278,8 @@ ftop = -1; - frame_push (xstrdup (file)); + if (frame_push (xstrdup (file))) + return 1; current_token = next_token (); ret = parse (); frame_pop (); diff -Nru elmo-0.8.1/src/eprintf.c elmo-0.8.1-/src/eprintf.c --- elmo-0.8.1/src/eprintf.c 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/eprintf.c 2003-07-31 11:51:17.000000000 +0200 @@ -286,10 +286,7 @@ /* Johnny Masta Killa */ case 'f': - if (mail->from) - put_string_fs (s, mail->from->name, &fs); - else - put_string_fs (s, NULL, &fs); + put_string_fs (s, address_name (mail->from), &fs); break; /* Johnny Masta Killa */ @@ -302,8 +299,8 @@ /* Bob The Ripper */ case 't': - if (mail->to && mail->to->count) - put_string_fs (s, mail->to->array[0]->name, &fs); + if (mail->to) + put_string_fs (s, address_name (mail->to->array[0]), &fs); else put_string_fs (s, NULL, &fs); break; diff -Nru elmo-0.8.1/src/exec_table.t elmo-0.8.1-/src/exec_table.t --- elmo-0.8.1/src/exec_table.t 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/exec_table.t 2003-07-28 18:37:47.000000000 +0200 @@ -134,6 +134,7 @@ {"sender_refresh", sender_refresh, NULL, NULL}, {"sender_open_new", sender_open_new, NULL, NULL}, {"sender_open_reply", sender_open_reply, NULL, NULL}, +{"sender_open_reply_all", sender_open_reply_all, NULL, NULL}, {"sender_open_fwd", sender_open_fwd, NULL, NULL}, {"sender_close", sender_close, NULL, NULL}, {"sender_prev", sender_prev, NULL, NULL}, diff -Nru elmo-0.8.1/src/mlex.c elmo-0.8.1-/src/mlex.c --- elmo-0.8.1/src/mlex.c 2003-07-29 13:43:50.000000000 +0200 +++ elmo-0.8.1-/src/mlex.c 2003-07-31 11:28:41.000000000 +0200 @@ -1,7 +1,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /cvsroot/elmo/elmo/src/mlex.c,v 1.56 2003/07/29 11:43:50 sdas Exp $ + * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ */ #define FLEX_SCANNER @@ -690,6 +690,7 @@ #define DOT_ATOM "(" DOT_ATOM_TEXT ")" #define EMAIL_RE "(" DOT_ATOM "@" DOT_ATOM ")" #define FOR_EMAIL_RE "for <" EMAIL_RE ">;" +#define WITH_SMTP_RE "with E?SMTP" /**************************************************************************** * IMPLEMENTATION PRIVATE CLASS PROTOTYPES / EXTERNAL CLASS REFERENCES @@ -770,7 +771,7 @@ #define FINISH 2 #define MIME 3 -#line 774 "mlex.c" +#line 775 "mlex.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -935,10 +936,10 @@ register char *yy_cp, *yy_bp; register int yy_act; -#line 175 "mlex.l" +#line 176 "mlex.l" -#line 942 "mlex.c" +#line 943 "mlex.c" if ( yy_init ) { @@ -1025,7 +1026,7 @@ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 177 "mlex.l" +#line 178 "mlex.l" { struct tm tm; @@ -1081,7 +1082,7 @@ YY_BREAK case 2: YY_RULE_SETUP -#line 232 "mlex.l" +#line 233 "mlex.l" { if (strstr (yytext + 11, "Mutt")) a_mail->mua = MUA_MUTT; @@ -1097,7 +1098,7 @@ YY_BREAK case 3: YY_RULE_SETUP -#line 246 "mlex.l" +#line 247 "mlex.l" { if (strstr (yytext + 10, "Outlook Express")) a_mail->mua = MUA_OUTLOOK_EXPRESS; @@ -1121,7 +1122,7 @@ YY_BREAK case 4: YY_RULE_SETUP -#line 268 "mlex.l" +#line 269 "mlex.l" { mime_t *mime = a_mail->rmime->array[a_mail->rmime->count - 1]; @@ -1140,7 +1141,7 @@ YY_BREAK case 5: YY_RULE_SETUP -#line 285 "mlex.l" +#line 286 "mlex.l" { mime_t *mime = a_mail->rmime->array[a_mail->rmime->count -1 ]; @@ -1149,7 +1150,7 @@ YY_BREAK case 6: YY_RULE_SETUP -#line 292 "mlex.l" +#line 293 "mlex.l" { mime_t *mime = a_mail->rmime->array[a_mail->rmime->count - 1]; mime->encoding = MENC_NONE; @@ -1162,7 +1163,7 @@ YY_BREAK case 7: YY_RULE_SETUP -#line 303 "mlex.l" +#line 304 "mlex.l" { char *tmp = yytext + 6; char *date = unfold_content (tmp); @@ -1195,7 +1196,7 @@ YY_BREAK case 8: YY_RULE_SETUP -#line 334 "mlex.l" +#line 335 "mlex.l" { char *tmp = yytext + 9; a_mail->subject = unfold_content (tmp); @@ -1203,7 +1204,7 @@ YY_BREAK case 9: YY_RULE_SETUP -#line 340 "mlex.l" +#line 341 "mlex.l" { char *tmp = yytext + 6; char *from = unfold_content (tmp); @@ -1214,7 +1215,7 @@ YY_BREAK case 10: YY_RULE_SETUP -#line 349 "mlex.l" +#line 350 "mlex.l" { char *tmp = yytext + 8; char *sender = unfold_content (tmp); @@ -1226,7 +1227,7 @@ YY_BREAK case 11: YY_RULE_SETUP -#line 359 "mlex.l" +#line 360 "mlex.l" { char *tmp = yytext + 4; char *to = unfold_content (tmp); @@ -1237,7 +1238,7 @@ YY_BREAK case 12: YY_RULE_SETUP -#line 368 "mlex.l" +#line 369 "mlex.l" { char *tmp = yytext + 4; char *cc = unfold_content (tmp); @@ -1248,7 +1249,7 @@ YY_BREAK case 13: YY_RULE_SETUP -#line 377 "mlex.l" +#line 378 "mlex.l" { char *tmp = yytext + 4; char *bcc = unfold_content (tmp); @@ -1259,7 +1260,7 @@ YY_BREAK case 14: YY_RULE_SETUP -#line 386 "mlex.l" +#line 387 "mlex.l" { char *tmp = yytext + 12; a_mail->msg_id = unfold_content (tmp); @@ -1272,7 +1273,7 @@ YY_BREAK case 15: YY_RULE_SETUP -#line 397 "mlex.l" +#line 398 "mlex.l" { char *tmp = yytext + 13; char *irt; @@ -1291,7 +1292,7 @@ YY_BREAK case 16: YY_RULE_SETUP -#line 414 "mlex.l" +#line 415 "mlex.l" { char *tmp = yytext + 12; @@ -1306,7 +1307,7 @@ YY_BREAK case 17: YY_RULE_SETUP -#line 427 "mlex.l" +#line 428 "mlex.l" { char *tmp = yytext + 10; char *reply_to = unfold_content (tmp); @@ -1318,7 +1319,7 @@ YY_BREAK case 18: YY_RULE_SETUP -#line 437 "mlex.l" +#line 438 "mlex.l" { char *i; char *tmp = yytext + 8; @@ -1345,7 +1346,7 @@ YY_BREAK case 19: YY_RULE_SETUP -#line 462 "mlex.l" +#line 463 "mlex.l" { char *i; char *tmp = yytext + 10; @@ -1366,7 +1367,7 @@ YY_BREAK case 20: YY_RULE_SETUP -#line 481 "mlex.l" +#line 482 "mlex.l" { int len; char *tmp; @@ -1377,7 +1378,8 @@ tmp = yytext + 9; recv_for = unfold_content (tmp); - if (misc_regex (FOR_EMAIL_RE, recv_for, matches)){ + if (misc_regex (WITH_SMTP_RE, recv_for, matches) + && misc_regex (FOR_EMAIL_RE, recv_for, matches)){ len = matches[0].rm_eo - matches[0].rm_so - 7 + 1; tmp = xmalloc (len); memcpy (tmp, recv_for + matches[0].rm_so + 5, len - 1); @@ -1391,7 +1393,7 @@ YY_BREAK case 21: YY_RULE_SETUP -#line 504 "mlex.l" +#line 506 "mlex.l" { mime_t *mime = a_mail->rmime->array[a_mail->rmime->count - 1]; @@ -1402,17 +1404,17 @@ YY_BREAK case 22: YY_RULE_SETUP -#line 513 "mlex.l" +#line 515 "mlex.l" YY_BREAK case 23: YY_RULE_SETUP -#line 516 "mlex.l" +#line 518 "mlex.l" YY_BREAK case 24: YY_RULE_SETUP -#line 520 "mlex.l" +#line 522 "mlex.l" { char *seek; mime_t *mime; @@ -1449,16 +1451,16 @@ YY_BREAK case 25: YY_RULE_SETUP -#line 555 "mlex.l" +#line 557 "mlex.l" YY_BREAK case 26: YY_RULE_SETUP -#line 558 "mlex.l" +#line 560 "mlex.l" YY_BREAK case YY_STATE_EOF(HEADER): -#line 561 "mlex.l" +#line 563 "mlex.l" { only_one = 0; @@ -1471,7 +1473,7 @@ } YY_BREAK case YY_STATE_EOF(FINISH): -#line 573 "mlex.l" +#line 575 "mlex.l" { BEGIN (INITIAL); @@ -1486,7 +1488,7 @@ YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(MIME): -#line 586 "mlex.l" +#line 588 "mlex.l" { mime_t *mime; @@ -1511,10 +1513,10 @@ YY_BREAK case 27: YY_RULE_SETUP -#line 610 "mlex.l" +#line 612 "mlex.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 1518 "mlex.c" +#line 1520 "mlex.c" case YY_END_OF_BUFFER: { @@ -2398,7 +2400,7 @@ return 0; } #endif -#line 610 "mlex.l" +#line 612 "mlex.l" diff -Nru elmo-0.8.1/src/mlex.l elmo-0.8.1-/src/mlex.l --- elmo-0.8.1/src/mlex.l 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/mlex.l 2003-07-31 11:28:39.000000000 +0200 @@ -84,6 +84,7 @@ #define DOT_ATOM "(" DOT_ATOM_TEXT ")" #define EMAIL_RE "(" DOT_ATOM "@" DOT_ATOM ")" #define FOR_EMAIL_RE "for <" EMAIL_RE ">;" +#define WITH_SMTP_RE "with E?SMTP" /**************************************************************************** * IMPLEMENTATION PRIVATE CLASS PROTOTYPES / EXTERNAL CLASS REFERENCES @@ -488,7 +489,8 @@ tmp = yytext + 9; recv_for = unfold_content (tmp); - if (misc_regex (FOR_EMAIL_RE, recv_for, matches)){ + if (misc_regex (WITH_SMTP_RE, recv_for, matches) + && misc_regex (FOR_EMAIL_RE, recv_for, matches)){ len = matches[0].rm_eo - matches[0].rm_so - 7 + 1; tmp = xmalloc (len); memcpy (tmp, recv_for + matches[0].rm_so + 5, len - 1); diff -Nru elmo-0.8.1/src/pop.c elmo-0.8.1-/src/pop.c --- elmo-0.8.1/src/pop.c 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/pop.c 2003-07-31 12:12:41.000000000 +0200 @@ -292,7 +292,7 @@ for (i = 0; i < pop_stat_size; i++){ if (pop_stat_list[i].info){ - mail_destroy (pop_stat_list[i].info, BOX_MAILDIR); + mail_destroy (pop_stat_list[i].info, BOX_POP3); xfree (pop_stat_list[i].info); } } diff -Nru elmo-0.8.1/src/raddress.c elmo-0.8.1-/src/raddress.c --- elmo-0.8.1/src/raddress.c 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/raddress.c 2003-07-31 11:15:06.000000000 +0200 @@ -34,10 +34,14 @@ #include "raddress.h" #include "rstring.h" #include "xmalloc.h" +#include "str.h" /**************************************************************************** * IMPLEMENTATION PRIVATE DEFINITIONS / ENUMERATIONS / SIMPLE TYPEDEFS ****************************************************************************/ + +#define LINE_MAX_LEN 70 + /**************************************************************************** * IMPLEMENTATION PRIVATE CLASS PROTOTYPES / EXTERNAL CLASS REFERENCES ****************************************************************************/ @@ -190,6 +194,53 @@ +char * +raddress_list (raddress_t *ptr, const char *header) +{ + int i; + int len; + int line_len = 0; + int first = 1; + str_t *str = str_create (); + addr_t *addr; + + if (ptr == NULL) + return NULL; + + if (header){ + line_len = str_sprintf (str, "%s: ", header); + } + + for (i = 0; i < ptr->count; i++){ + addr = ptr->array[i]; + + if (addr->full == NULL) + continue; + + if (first){ + line_len += str_sprintf (str, "%s", addr->full); + first = 0; + } + else { + len = strlen (addr->full); + if (line_len + len + 3 > LINE_MAX_LEN){ + str_putchar (str, ','); + str_putchar (str, '\n'); + line_len = 0; + } + else { + str_putchar (str, ','); + line_len++; + } + line_len += str_sprintf (str, " %s", addr->full); + } + } + + return str_finished (str); +} + + + /**************************************************************************** * INTERFACE CLASS BODIES ****************************************************************************/ diff -Nru elmo-0.8.1/src/raddress.h elmo-0.8.1-/src/raddress.h --- elmo-0.8.1/src/raddress.h 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/raddress.h 2003-07-31 10:45:23.000000000 +0200 @@ -65,6 +65,7 @@ extern void raddress_add_array (raddress_t *x, raddress_t *y); extern raddress_t *raddress_get_from_header (char *header); extern rstring_t *raddress_to_strings (raddress_t *ptr); +extern char *raddress_list (raddress_t *ptr, const char *header); /**************************************************************************** * INTERFACE OBJECT CLASS DEFINITIONS diff -Nru elmo-0.8.1/src/select.c elmo-0.8.1-/src/select.c --- elmo-0.8.1/src/select.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/select.c 2003-07-29 18:01:49.000000000 +0200 @@ -45,6 +45,7 @@ #define PREAMBLE do {if (select == NULL) return; } while (0) +#define NONEMPTY do {if (select->items->count == 0) return; } while (0) /**************************************************************************** * IMPLEMENTATION PRIVATE CLASS PROTOTYPES / EXTERNAL CLASS REFERENCES @@ -95,7 +96,7 @@ static void put_items (select_t *select) { - int bold; + int bold = 0; int i; unsigned index; line_t *line; @@ -128,10 +129,10 @@ static void draw_bar (select_t *select) { - int bold; + int bold = 0; line_t *line; - if (select->no_bar) + if (select->no_bar || select->items->count == 0) return; bold = bitarray_is_set (select->selected, select->bar_pos); @@ -437,6 +438,7 @@ select_change (select_t *select) { PREAMBLE; + NONEMPTY; bitarray_change_bit (select->selected, select->bar_pos); select_redraw (select); @@ -447,6 +449,7 @@ select_change_all (select_t *select) { PREAMBLE; + NONEMPTY; bitarray_neg (select->selected); select_redraw (select); @@ -457,6 +460,7 @@ select_set (select_t *select) { PREAMBLE; + NONEMPTY; bitarray_set (select->selected, select->bar_pos); select_redraw (select); @@ -467,6 +471,7 @@ select_unset (select_t *select) { PREAMBLE; + NONEMPTY; bitarray_unset (select->selected, select->bar_pos); select_redraw (select); @@ -478,6 +483,7 @@ select_set_all (select_t *select) { PREAMBLE; + NONEMPTY; bitarray_ones (select->selected); select_redraw (select); @@ -488,6 +494,7 @@ select_unset_all (select_t *select) { PREAMBLE; + NONEMPTY; bitarray_zeros (select->selected); select_redraw (select); diff -Nru elmo-0.8.1/src/sender.c elmo-0.8.1-/src/sender.c --- elmo-0.8.1/src/sender.c 2003-07-29 13:38:35.000000000 +0200 +++ elmo-0.8.1-/src/sender.c 2003-07-31 12:00:32.000000000 +0200 @@ -228,6 +228,7 @@ char *boundary = NULL; int i; char *charset = ask_for_default ("charset", NULL); + char *header; if (!charset || !*charset){ charset = "us-ascii"; @@ -240,12 +241,15 @@ } if (message->from && message->from->full) fprintf (fp, "From: %s\n", message->from->full); - if (message->to && message->to->count){ - fprintf (fp, "To: %s", message->to->array[0]->full); - for (i = 1; i < message->to->count; i++){ - fprintf (fp, ",\n\t%s", message->to->array[i]->full); - } - fprintf (fp, "\n"); + header = raddress_list (message->to, "To"); + if (header){ + fprintf (fp, "%s\n", header); + xfree (header); + } + header = raddress_list (message->cc, "Cc"); + if (header){ + fprintf (fp, "%s\n", header); + xfree (header); } if (message->subject) fprintf (fp, "Subject: %s\n", message->subject); @@ -468,7 +472,32 @@ if (sender_ask == NULL) return; - file = compose_reply (); + file = compose_reply (0); + + if (file == NULL){ + ask_destroy (sender_ask); + sender_ask = NULL; + return; + } + + if (sender_open (file)) + return; + + cmd_state_push (CMD_SENDER); +} + + + +void +sender_open_reply_all (void) +{ + char *file; + + sender_ask = ask_select_default ("smtp_acc"); + if (sender_ask == NULL) + return; + + file = compose_reply (1); if (file == NULL){ ask_destroy (sender_ask); @@ -484,6 +513,7 @@ + void sender_open_fwd (void) { @@ -528,6 +558,7 @@ break; case 1: + rewrite_file (); leave_window (SENDER_DRAFT); break; } @@ -802,7 +833,9 @@ return; } - if (smtp_send_mail (message->place.file_name, message->to)){ + if (smtp_send_mail (message->place.file_name, message->to) + || smtp_send_mail (message->place.file_name, message->cc) + || smtp_send_mail (message->place.file_name, message->bcc)){ smtp_finish_connection (); return; } diff -Nru elmo-0.8.1/src/sender.h elmo-0.8.1-/src/sender.h --- elmo-0.8.1/src/sender.h 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/sender.h 2003-07-28 18:36:16.000000000 +0200 @@ -53,6 +53,7 @@ extern void sender_open_new_to (char *to); extern void sender_open_new (void); extern void sender_open_reply (void); +extern void sender_open_reply_all (void); extern void sender_open_fwd (void); extern void sender_close (void); extern void sender_prev (void); diff -Nru elmo-0.8.1/src/smtp.c elmo-0.8.1-/src/smtp.c --- elmo-0.8.1/src/smtp.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/smtp.c 2003-07-29 18:16:27.000000000 +0200 @@ -517,10 +517,8 @@ int success_count = 0; int ret; - if (receivers == NULL){ - smtp_finish_connection (); - error_ (0, 0, _("no receivers defined")); - return 1; + if (receivers == NULL || receivers->count == 0){ + return 0; } for (rcpt = receivers->array; *rcpt; rcpt++){ diff -Nru elmo-0.8.1/src/str.c elmo-0.8.1-/src/str.c --- elmo-0.8.1/src/str.c 2003-07-21 22:10:26.000000000 +0200 +++ elmo-0.8.1-/src/str.c 2003-07-29 21:20:36.000000000 +0200 @@ -94,28 +94,54 @@ } + +char * +str_finished (str_t *str) +{ + char *result = str->str; + + xfree (str); + return result; +} + + void +str_putchar (str_t *str, int c) +{ + if (str->len >= str->size - 1){ + str->size *= 2; + str->str = xrealloc (str->str, str->size); + } + str->str[str->len] = c; + str->str[str->len + 1] = '\0'; + str->len++; +} + + +int str_sprintf (str_t *str, const char *fmt, ...) { int n; - int max_size = str->size - str->len; + int max_size; va_list ap; while (1){ + max_size = str->size - str->len - 1; va_start (ap, fmt); n = vsnprintf (str->str + str->len, max_size, fmt, ap); va_end (ap); if (n > -1 && n < max_size){ str->len += n; - return; + return n; } if (n > -1) while (max_size < n + 1){ str->size *= 2; max_size = str->size - str->len; } - else + else { str->size *= 2; + } str->str = xrealloc (str->str, str->size); } diff -Nru elmo-0.8.1/src/str.h elmo-0.8.1-/src/str.h --- elmo-0.8.1/src/str.h 2003-07-21 22:10:26.000000000 +0200 +++ elmo-0.8.1-/src/str.h 2003-07-29 21:06:19.000000000 +0200 @@ -54,7 +54,9 @@ extern str_t *str_create_size (int size); extern str_t *str_create (void); extern void str_destroy (str_t *str); -extern void str_sprintf (str_t *str, const char *fmt, ...) FORMAT; +extern char *str_finished (str_t *str); +extern void str_putchar (str_t *str, int c); +extern int str_sprintf (str_t *str, const char *fmt, ...) FORMAT; /**************************************************************************** * INTERFACE OBJECT CLASS DEFINITIONS diff -Nru elmo-0.8.1/TODO elmo-0.8.1-/TODO --- elmo-0.8.1/TODO 2003-07-21 22:08:00.000000000 +0200 +++ elmo-0.8.1-/TODO 2003-07-31 12:33:49.000000000 +0200 @@ -1,25 +1,38 @@ TODO list: - - smtp-auth (see RFC 2554) - - external programs handling unknown file types (i.e. links for - html) - - reply all - - help windows - - menu - - bounce - - message searching - - defaults - - utf8 - - signal handler + networking: + - rewrite all networking modules + - smtp-auth (see RFC 2554) + - imap + - ssl + + mime: + - rewrite mime.c + - external programs handling unknown mime types + - utf8 + + mail folder: + - message searching + + spam: + - store hash table via libdb + - algorithm improvements + + sending: + - bounce + - draft reedition + + general: + - rewrite error.c + - allow reading strings longer than screen width + - help windows + - menu + - defaults + - immediate compose (for interaction with web browsers) Wanna-have list: - PGP + - S/MIME support - full mbox support - - -Files to be rewritten: - - - error.c - - mime.c