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-22 08:59:05.000000000 +0200 +++ elmo-0.8.1-/po/de.po 2003-07-28 10:35:50.000000000 +0200 @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: elmo 0.8.x\n" -"POT-Creation-Date: 2003-06-13 14:07+0200\n" +"POT-Creation-Date: 2003-07-28 10:35+0200\n" "PO-Revision-Date: 2003-06-18 11:21+0200\n" "Last-Translator: Martin Sieper \n" "Language-Team: German \n" @@ -16,135 +16,135 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/abook.c:119 -msgid "congratulations! you have just found a bug" -msgstr "Herzlichen Glückwunsch! Sie haben einen Bug gefunden" - -#: src/abook.c:207 src/abook.c:211 -#, c-format -msgid "opening addressbook: %s" -msgstr "öffne Adressbuch: %s" - -#: src/abook.c:301 +#: src/abook.c:485 msgid "addressbook" msgstr "Adressbuch" -#: src/abook.c:521 +#: src/abook.c:840 msgid "select address" msgstr "Adresse wählen" -#: src/attach.c:173 +#: src/attach.c:174 msgid "attachments" msgstr "Anhänge" -#: src/attach.c:260 +#: src/attach.c:284 msgid "file: " msgstr "Datei: " -#: src/cmd.c:287 +#: src/cmd.c:306 msgid "state stack overflow, please send bug report" msgstr "Status Stack Überlauf, bitte Fehlerbericht senden" -#: src/cmd.c:299 +#: src/cmd.c:318 msgid "state stack underflow, please send bug report" msgstr "Status Stack Unterlauf, bitte Fehlerbericht senden" -#: confread.l:383 +#: confread.l:366 +msgid "includes nested to deep" +msgstr "" + +#: confread.l:469 msgid "identifier" msgstr "Identifizierer" -#: confread.l:388 +#: confread.l:474 msgid "end of line" msgstr "Zeilenende" -#: confread.l:391 +#: confread.l:478 msgid "quoted text" msgstr "zitierter Text" -#: confread.l:397 +#: confread.l:484 msgid "key specifier" msgstr "Tastenbeschreibung" -#: confread.l:407 +#: confread.l:487 +#, fuzzy +msgid "end of file" +msgstr "Zeilenende" + +#: confread.l:497 #, c-format msgid "%s:%d: parse error near %s" msgstr "%s:%d: Fehler bei grammatikalischer Analyse neben %s" -#: src/elmo.c:175 +#: src/elmo.c:172 #, c-format msgid "%s - ELectronic Mail Operator\n" msgstr "%s - ELectronic Mail Operator\n" -#: src/elmo.c:176 +#: src/elmo.c:173 #, c-format msgid "Usage: %s [OPTION]... \n" msgstr "Benutzung: %s [Option]... \n" -#: src/elmo.c:177 +#: src/elmo.c:174 msgid "Options:\n" msgstr "Optionen:\n" -#: src/elmo.c:178 +#: src/elmo.c:175 msgid " -F use alternate rc file\n" msgstr " -F benutze alternative rc Datei\n" -#: src/elmo.c:179 +#: src/elmo.c:176 msgid " -h, --help display this help and exit\n" msgstr " -h, --help diese Hilfe ausgeben und beenden\n" -#: src/elmo.c:180 +#: src/elmo.c:177 msgid " -V, --version output version information and exit\n" msgstr " -V, --version Versionsinformation anzeigen und beenden\n" -#: src/elmo.c:258 +#: src/elmo.c:249 msgid " initializing..." msgstr " initialisierung..." -#: src/elmo.c:326 +#: src/elmo.c:321 msgid "ncurses: initialization failure\n" msgstr "ncurses: Initialisierungsversagen\n" -#: src/exec.c:189 +#: src/exec.c:192 #, c-format msgid "undefined function %s" msgstr "Undefinierte Funktion %s" -#: src/fetch.c:209 +#: src/fetch.c:199 msgid "server field in pop_acc not defined" msgstr "Undefiniertes Feld (server: foo.bar) in pop_acc" -#: src/fetch.c:216 +#: src/fetch.c:206 msgid "username field in pop_acc not defined" msgstr "Undefiniertes Feld (username: address@hidden) in pop_acc" -#: src/fetch.c:223 +#: src/fetch.c:213 msgid "password field in pop_acc not defined" msgstr "Undefiniertes Feld (password: TopSecret) in pop_acc" -#: src/fetch.c:261 +#: src/fetch.c:260 #, c-format msgid "couldn't write to %s" msgstr "Kann nicht nach %s schreiben" -#: src/fetch.c:272 +#: src/fetch.c:271 #, c-format msgid "couldn't fetch mail %d" msgstr "Kann keine Post holen %d" -#: src/fetch.c:298 +#: src/fetch.c:297 msgid "no new mail" msgstr "Keine neue Post" -#: src/fetch.c:320 +#: src/fetch.c:323 msgid "fetch" msgstr "holen" -#: src/maildir.c:282 +#: src/maildir.c:285 #, c-format msgid "%s has bad format" msgstr "%s hat falsches Format" -#: src/maildir.c:489 +#: src/maildir.c:506 msgid "reading directory" msgstr "lese Verzeichnis" @@ -190,22 +190,22 @@ msgid "send" msgstr "senden" -#: src/pop.c:345 +#: src/pop.c:347 #, c-format msgid "logging as %s..." msgstr "Anmelden als %s..." -#: src/pop.c:348 +#: src/pop.c:350 #, c-format msgid "invalid user name %s" msgstr "Ungültiger Benutzername %s" -#: src/pop.c:353 +#: src/pop.c:355 #, c-format msgid "password %s rejected" msgstr "Passwort %s zurückgewiesen" -#: src/pop.c:401 +#: src/pop.c:403 msgid "retrieving list" msgstr "Liste zurückholen" @@ -289,3 +289,9 @@ #: src/status.c:140 msgid " new:" msgstr " neu:" + +#~ msgid "congratulations! you have just found a bug" +#~ msgstr "Herzlichen Glückwunsch! Sie haben einen Bug gefunden" + +#~ msgid "opening addressbook: %s" +#~ msgstr "öffne Adressbuch: %s" 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/po/elmo.pot 2003-07-28 10:35:49.000000000 +0200 @@ -1,12 +1,13 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2003-06-13 14:07+0200\n" +"POT-Creation-Date: 2003-07-28 10:35+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -14,135 +15,134 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/abook.c:119 -msgid "congratulations! you have just found a bug" -msgstr "" - -#: src/abook.c:207 src/abook.c:211 -#, c-format -msgid "opening addressbook: %s" -msgstr "" - -#: src/abook.c:301 +#: src/abook.c:485 msgid "addressbook" msgstr "" -#: src/abook.c:521 +#: src/abook.c:840 msgid "select address" msgstr "" -#: src/attach.c:173 +#: src/attach.c:174 msgid "attachments" msgstr "" -#: src/attach.c:260 +#: src/attach.c:284 msgid "file: " msgstr "" -#: src/cmd.c:287 +#: src/cmd.c:306 msgid "state stack overflow, please send bug report" msgstr "" -#: src/cmd.c:299 +#: src/cmd.c:318 msgid "state stack underflow, please send bug report" msgstr "" -#: confread.l:383 +#: confread.l:366 +msgid "includes nested to deep" +msgstr "" + +#: confread.l:469 msgid "identifier" msgstr "" -#: confread.l:388 +#: confread.l:474 msgid "end of line" msgstr "" -#: confread.l:391 +#: confread.l:478 msgid "quoted text" msgstr "" -#: confread.l:397 +#: confread.l:484 msgid "key specifier" msgstr "" -#: confread.l:407 +#: confread.l:487 +msgid "end of file" +msgstr "" + +#: confread.l:497 #, c-format msgid "%s:%d: parse error near %s" msgstr "" -#: src/elmo.c:175 +#: src/elmo.c:172 #, c-format msgid "%s - ELectronic Mail Operator\n" msgstr "" -#: src/elmo.c:176 +#: src/elmo.c:173 #, c-format msgid "Usage: %s [OPTION]... \n" msgstr "" -#: src/elmo.c:177 +#: src/elmo.c:174 msgid "Options:\n" msgstr "" -#: src/elmo.c:178 +#: src/elmo.c:175 msgid " -F use alternate rc file\n" msgstr "" -#: src/elmo.c:179 +#: src/elmo.c:176 msgid " -h, --help display this help and exit\n" msgstr "" -#: src/elmo.c:180 +#: src/elmo.c:177 msgid " -V, --version output version information and exit\n" msgstr "" -#: src/elmo.c:258 +#: src/elmo.c:249 msgid " initializing..." msgstr "" -#: src/elmo.c:326 +#: src/elmo.c:321 msgid "ncurses: initialization failure\n" msgstr "" -#: src/exec.c:189 +#: src/exec.c:192 #, c-format msgid "undefined function %s" msgstr "" -#: src/fetch.c:209 +#: src/fetch.c:199 msgid "server field in pop_acc not defined" msgstr "" -#: src/fetch.c:216 +#: src/fetch.c:206 msgid "username field in pop_acc not defined" msgstr "" -#: src/fetch.c:223 +#: src/fetch.c:213 msgid "password field in pop_acc not defined" msgstr "" -#: src/fetch.c:261 +#: src/fetch.c:260 #, c-format msgid "couldn't write to %s" msgstr "" -#: src/fetch.c:272 +#: src/fetch.c:271 #, c-format msgid "couldn't fetch mail %d" msgstr "" -#: src/fetch.c:298 +#: src/fetch.c:297 msgid "no new mail" msgstr "" -#: src/fetch.c:320 +#: src/fetch.c:323 msgid "fetch" msgstr "" -#: src/maildir.c:282 +#: src/maildir.c:285 #, c-format msgid "%s has bad format" msgstr "" -#: src/maildir.c:489 +#: src/maildir.c:506 msgid "reading directory" msgstr "" @@ -188,22 +188,22 @@ msgid "send" msgstr "" -#: src/pop.c:345 +#: src/pop.c:347 #, c-format msgid "logging as %s..." msgstr "" -#: src/pop.c:348 +#: src/pop.c:350 #, c-format msgid "invalid user name %s" msgstr "" -#: src/pop.c:353 +#: src/pop.c:355 #, c-format msgid "password %s rejected" msgstr "" -#: src/pop.c:401 +#: src/pop.c:403 msgid "retrieving list" 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-22 08:59:05.000000000 +0200 +++ elmo-0.8.1-/po/pl.po 2003-07-28 10:35:50.000000000 +0200 @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: elmo 0.6\n" -"POT-Creation-Date: 2003-06-13 14:07+0200\n" +"POT-Creation-Date: 2003-07-28 10:35+0200\n" "PO-Revision-Date: 2003-04-16 01:41+0200\n" "Last-Translator: Artur Skura \n" "Language-Team: Polish \n" @@ -16,135 +16,135 @@ "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:119 -msgid "congratulations! you have just found a bug" -msgstr "gratulacje! w³a¶nie znalaz³a¶/e¶ b³±d w programie" - -#: src/abook.c:207 src/abook.c:211 -#, c-format -msgid "opening addressbook: %s" -msgstr "otwieranie ksi±¿ki adresowej: %s" - -#: src/abook.c:301 +#: src/abook.c:485 msgid "addressbook" msgstr "ksi±¿ka adresowa" -#: src/abook.c:521 +#: src/abook.c:840 msgid "select address" msgstr "wybierz adres" -#: src/attach.c:173 +#: src/attach.c:174 msgid "attachments" msgstr "za³±czniki" -#: src/attach.c:260 +#: src/attach.c:284 msgid "file: " msgstr "plik: " -#: src/cmd.c:287 +#: src/cmd.c:306 msgid "state stack overflow, please send bug report" msgstr "przepe³nienie bufora stanu, prosimy o przes³anie raportu o b³êdzie" -#: src/cmd.c:299 +#: src/cmd.c:318 msgid "state stack underflow, please send bug report" msgstr "niedope³nienie bufora stanu, prosimy o przes³anie raportu o b³êdzie" -#: confread.l:383 +#: confread.l:366 +msgid "includes nested to deep" +msgstr "" + +#: confread.l:469 msgid "identifier" msgstr "" -#: confread.l:388 +#: confread.l:474 msgid "end of line" msgstr "" -#: confread.l:391 +#: confread.l:478 msgid "quoted text" msgstr "" -#: confread.l:397 +#: confread.l:484 msgid "key specifier" msgstr "" -#: confread.l:407 +#: confread.l:487 +#, fuzzy +msgid "end of file" +msgstr "odczytywanie pliku" + +#: confread.l:497 #, c-format msgid "%s:%d: parse error near %s" msgstr "%s:%d: b³±d parsowania przy %s" -#: src/elmo.c:175 +#: src/elmo.c:172 #, c-format msgid "%s - ELectronic Mail Operator\n" msgstr "%s - ELektroniczny prograM pOcztowy\n" -#: src/elmo.c:176 +#: src/elmo.c:173 #, c-format msgid "Usage: %s [OPTION]... \n" msgstr "Wywo³anie: %s [OPCJE]... \n" -#: src/elmo.c:177 +#: src/elmo.c:174 msgid "Options:\n" msgstr "Opcje:\n" -#: src/elmo.c:178 +#: src/elmo.c:175 msgid " -F use alternate rc file\n" msgstr " -F u¿yj innego pliku rc\n" -#: src/elmo.c:179 +#: src/elmo.c:176 msgid " -h, --help display this help and exit\n" msgstr " -h, --help wy¶wietl ten komunikat i zakoñcz pracê\n" -#: src/elmo.c:180 +#: src/elmo.c:177 msgid " -V, --version output version information and exit\n" msgstr " -V, --version wy¶wietl numer wersji i zakoñcz pracê\n" -#: src/elmo.c:258 +#: src/elmo.c:249 msgid " initializing..." msgstr " inicjalizacja..." -#: src/elmo.c:326 +#: src/elmo.c:321 msgid "ncurses: initialization failure\n" msgstr "b³ad inicjalizacji ncurses\n" -#: src/exec.c:189 +#: src/exec.c:192 #, c-format msgid "undefined function %s" msgstr "niezdefiniowana funkcja %s" -#: src/fetch.c:209 +#: src/fetch.c:199 msgid "server field in pop_acc not defined" msgstr "" -#: src/fetch.c:216 +#: src/fetch.c:206 msgid "username field in pop_acc not defined" msgstr "" -#: src/fetch.c:223 +#: src/fetch.c:213 msgid "password field in pop_acc not defined" msgstr "" -#: src/fetch.c:261 +#: src/fetch.c:260 #, fuzzy, c-format msgid "couldn't write to %s" msgstr "zapis w katalogu %s nie jest mo¿liwy" -#: src/fetch.c:272 +#: src/fetch.c:271 #, c-format msgid "couldn't fetch mail %d" msgstr "nie mo¿na pobraæ listu nr %d" -#: src/fetch.c:298 +#: src/fetch.c:297 msgid "no new mail" msgstr "brak nowej poczty" -#: src/fetch.c:320 +#: src/fetch.c:323 msgid "fetch" msgstr "pobieranie" -#: src/maildir.c:282 +#: src/maildir.c:285 #, c-format msgid "%s has bad format" msgstr "%s ma z³y format" -#: src/maildir.c:489 +#: src/maildir.c:506 msgid "reading directory" msgstr "odczytywanie katalogu" @@ -192,22 +192,22 @@ msgid "send" msgstr "wysy³anie" -#: src/pop.c:345 +#: src/pop.c:347 #, c-format msgid "logging as %s..." msgstr "logowanie jako %s..." -#: src/pop.c:348 +#: src/pop.c:350 #, c-format msgid "invalid user name %s" msgstr "%s: b³êdna nazwa u¿ytkownika" -#: src/pop.c:353 +#: src/pop.c:355 #, c-format msgid "password %s rejected" msgstr "odrzucono has³o %s" -#: src/pop.c:401 +#: src/pop.c:403 msgid "retrieving list" msgstr "pobieranie listy" @@ -292,6 +292,12 @@ msgid " new:" msgstr " nowych:" +#~ msgid "congratulations! you have just found a bug" +#~ msgstr "gratulacje! w³a¶nie znalaz³a¶/e¶ b³±d w programie" + +#~ msgid "opening addressbook: %s" +#~ msgstr "otwieranie ksi±¿ki adresowej: %s" + #~ msgid "invalid state in key definition '%s'" #~ msgstr "nieprawid³owa nazwa stanu w definicji klawisza '%s'" 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/abook.c 2003-07-28 10:34:02.000000000 +0200 @@ -69,6 +69,10 @@ * IMPLEMENTATION PRIVATE CLASS PROTOTYPES / EXTERNAL CLASS REFERENCES ****************************************************************************/ +/** + * There is only one structure of this type. It is used to collect data + * about the address being read from the addressbook file. + */ typedef struct new_item { addr_t *addr; char **s_field; @@ -121,7 +125,7 @@ static new_item_t new_item = {NULL, NULL, 0, 0}; /** - * All addressbook addresses are stored in this memblock. + * All addressbook addresses (with their data) are stored in this memblock. */ static memblock_t *addr_block = NULL; @@ -142,7 +146,6 @@ addr_t **addr; char *fmt = ask_for_default ("abook_format", NULL); rstring_t *result = rstring_create_size (abook->count + 1); - line_t *line = line_create (ABOOK_WIDTH - 2 + 1); if (fmt == NULL) fmt = DEFAULT_FORMAT; @@ -151,7 +154,6 @@ for (addr = abook->array; *addr; addr++){ rstring_add (result, eprintf_addr (fmt, *addr)); } - line_destroy (line); return result; } @@ -200,12 +202,21 @@ { fprintf (fp, "addr {\n"); - if (addr->name) - fprintf (fp, " name:\t\t\"%s\"\n", addr->name); + /** + * it won't work if name has both kinds of quotes (single and double) + */ + if (addr->name){ + if (addr->flags.atomic_name) + fprintf (fp, " name:\t\t%s\n", addr->name); + else if (! addr->flags.quotes_in_name) + fprintf (fp, " name:\t\t\"%s\"\n", addr->name); + else + fprintf (fp, " name:\t\t'%s'\n", addr->name); + } if (addr->email) - fprintf (fp, " email:\t\t\"%s\"\n", addr->email); + fprintf (fp, " email:\t\t%s\n", addr->email); if (addr->initials) - fprintf (fp, " initials:\t\"%s\"\n", addr->initials); + fprintf (fp, " initials:\t%s\n", addr->initials); if (addr->flags.sex == SEX_MALE) fprintf (fp, " sex:\t\tM\n"); else if (addr->flags.sex == SEX_FEMALE) @@ -395,6 +406,32 @@ } + +static void +action_change_sex (int index) +{ + addr_t *addr = abook->array[index]; + + if (addr->flags.sex == SEX_MALE) + addr->flags.sex = SEX_FEMALE; + else if (addr->flags.sex == SEX_FEMALE) + addr->flags.sex = SEX_MALE; + + if (addr->flags.sex != SEX_UNKNOWN) + abook_changed = 1; +} + + +static void +action_change_official (int index) +{ + addr_t *addr = abook->array[index]; + + addr->flags.official = ! addr->flags.official; + abook_changed = 1; +} + + static void action_add_to_str (int index) { @@ -415,6 +452,9 @@ PREAMBLE; + /** + * The reversed order is essential for action_remove. + */ for (i = abook->count - 1; i >= 0; i--){ if (bitarray_is_set (abook_select->selected, i)){ fun (i); @@ -422,7 +462,7 @@ } } - if (! took){ + if (! took && abook->count > 0){ fun (abook_select->bar_pos); } } @@ -464,6 +504,15 @@ } +void +abook_refresh (void) +{ + PREAMBLE; + + select_show (abook_select); +} + + void abook_next (void) @@ -525,7 +574,7 @@ void -abook_change (void) +abook_hit (void) { PREAMBLE; @@ -535,7 +584,7 @@ void -abook_change_all (void) +abook_hit_all (void) { PREAMBLE; @@ -595,6 +644,33 @@ void +abook_change_official (void) +{ + rstring_t *items; + + PREAMBLE; + + take_action (action_change_official); + items = make_items (); + select_install_new_items (abook_select, items); +} + + + +void +abook_change_sex (void) +{ + rstring_t *items; + + PREAMBLE; + + take_action (action_change_sex); + items = make_items (); + select_install_new_items (abook_select, items); +} + + +void abook_compose (void) { PREAMBLE; @@ -613,121 +689,128 @@ { char *name; char *email; - char *flags; - addr_t *addr = NULL; - char *item = NULL; - line_t *line = line_create (ABOOK_WIDTH + 2 - 1); - - name = xstrdup (read_argument ("name: ", NULL, COMPLETE_NONE)); - if (name == NULL || *name == '\0'){ - if (name) - xfree (name); - line_destroy (line); - return; - } - email = xstrdup (read_argument ("email: ", NULL, COMPLETE_NONE)); - if (email == NULL || *email == '\0'){ - xfree (name); - if (email) - xfree (email); - line_destroy (line); - return; - } - flags = xstrdup (read_argument ("flag: ", NULL, COMPLETE_NONE)); - if (flags == NULL || flags == '\0'){ - xfree (name); - xfree (email); - if (flags) - xfree (flags); - line_destroy (line); - return; - } -/* - addr = address_construct (email, name, *flags); -*/ - raddress_add (abook, addr); - select_add_item (abook_select, item); + char *fmt; + char *item; + addr_t *addr; - line_destroy (line); - xfree (name); - xfree (email); - xfree (flags); -} + PREAMBLE; + + name = read_argument ("name: ", NULL, COMPLETE_NONE); + if (name == NULL) + return; + else if (*name == '\0') + name = NULL; + else + name = memblock_strdup (&addr_block, name); + email = read_argument ("email: ", NULL, COMPLETE_NONE); + if (email == NULL || (*email == '\0' && name == NULL)) + return; + else if (*email == '\0') + email = NULL; + else + email = memblock_strdup (&addr_block, email); + addr = address_empty (); + addr->name = name; + addr->email = email; + addr->flags.abook = YES; -void -abook_change_name (void) -{ - addr_t *addr = abook->array[abook_select->bar_pos]; - char *name = read_argument ("name: ", addr->name, COMPLETE_NONE); - char **item = abook_select->items->array + abook_select->bar_pos; - line_t *line = line_create (ABOOK_WIDTH + 2 - 1); + address_complete_mem (addr, &addr_block); + + raddress_add (abook, addr); - if (name == NULL || *name == '\0'){ - line_destroy (line); - return; - } + abook_changed = 1; + abook_sorted = 0; + + fmt = ask_for_default ("abook_format", NULL); + if (fmt == NULL) + fmt = DEFAULT_FORMAT; -/* - addr = address_construct (addr->email, name, addr->flags); -*/ - xfree (*item); - abook->array[abook_select->bar_pos] = addr; - select_redraw (abook_select); + item = eprintf_addr (fmt, addr); - line_destroy (line); + select_add_item (abook_select, item); } void -abook_change_email (void) +abook_change_name (void) { - addr_t *addr = abook->array[abook_select->bar_pos]; - char *email = read_argument ("email: ", addr->email, COMPLETE_NONE); - char **item = abook_select->items->array + abook_select->bar_pos; - line_t *line = line_create (ABOOK_WIDTH + 2 - 1); + addr_t *addr; + char *fmt; + char *name; + char **item; - if (email == NULL || *email == '\0'){ - line_destroy (line); + PREAMBLE; + + addr = abook->array[abook_select->bar_pos]; + name = read_argument ("name: ", addr->name, COMPLETE_NONE); + if (name == NULL) return; - } + else if (*name == '\0') + name = NULL; + else + name = memblock_strdup (&addr_block, name); + + addr->name = name; + addr->full = NULL; + + address_complete_mem (addr, &addr_block); -/* - addr = address_construct (email, addr->name, addr->flags); -*/ + fmt = ask_for_default ("abook_format", NULL); + if (fmt == NULL) + fmt = DEFAULT_FORMAT; + + item = abook_select->items->array + abook_select->bar_pos; xfree (*item); - abook->array[abook_select->bar_pos] = addr; - select_redraw (abook_select); + *item = eprintf_addr (fmt, addr); - line_destroy (line); -} + abook_changed = 1; + select_redraw (abook_select); +} void -abook_change_flag (void) +abook_change_email (void) { - char *flags = read_argument ("flag: ", NULL, COMPLETE_NONE); - char **item = abook_select->items->array + abook_select->bar_pos; - line_t *line = line_create (ABOOK_WIDTH + 2 - 1); + addr_t *addr; + char *fmt; + char *email; + char **item; + + PREAMBLE; - if (flags == NULL || *flags == '\0'){ - line_destroy (line); + addr = abook->array[abook_select->bar_pos]; + email = read_argument ("email: ", addr->email, COMPLETE_NONE); + + if (email == NULL) return; - } + else if (*email == '\0') + email = NULL; + else + email = memblock_strdup (&addr_block, email); + + addr->email = email; + addr->full = NULL; + + address_complete_mem (addr, &addr_block); + + fmt = ask_for_default ("abook_format", NULL); + if (fmt == NULL) + fmt = DEFAULT_FORMAT; -/* - addr->flags = *flags; -*/ + item = abook_select->items->array + abook_select->bar_pos; xfree (*item); + *item = eprintf_addr (fmt, addr); + + abook_changed = 1; select_redraw (abook_select); - line_destroy (line); } - + /**************************************************************************** * ADDRESSBOOK ADDING WINDOW FUNCTIONS @@ -785,6 +868,16 @@ void +abook_add_refresh (void) +{ + PREAMBLE_ADD; + + select_show (add_select); +} + + + +void abook_add_next (void) { PREAMBLE_ADD; @@ -851,6 +944,9 @@ PREAMBLE_ADD; + if (add_raddress->count == 0) + return; + addr = add_raddress->array[add_select->bar_pos]; if (addr->flags.abook) return; diff -Nru elmo-0.8.1/src/abook.h elmo-0.8.1-/src/abook.h --- elmo-0.8.1/src/abook.h 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/abook.h 2003-07-27 16:31:56.000000000 +0200 @@ -56,27 +56,30 @@ extern void abook_open (void); extern void abook_close (void); +extern void abook_refresh (void); extern void abook_next (void); extern void abook_prev (void); extern void abook_next_page (void); extern void abook_prev_page (void); extern void abook_first (void); extern void abook_last (void); -extern void abook_change (void); -extern void abook_change_all (void); +extern void abook_hit (void); +extern void abook_hit_all (void); extern void abook_set (void); extern void abook_unset (void); extern void abook_set_all (void); extern void abook_unset_all (void); extern void abook_change_name (void); extern void abook_change_email (void); -extern void abook_change_flag (void); +extern void abook_change_sex (void); +extern void abook_change_official (void); extern void abook_remove (void); extern void abook_insert (void); extern void abook_compose (void); extern void abook_add_open (void); extern void abook_add_close (void); +extern void abook_add_refresh (void); extern void abook_add_next (void); extern void abook_add_prev (void); extern void abook_add_next_page (void); 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/address.c 2003-07-27 17:45:19.000000000 +0200 @@ -64,6 +64,7 @@ #define PHRASE "(" WORD "+)" +#define ATOM_RE "^" ATOM "$" #define EMAIL_RE "(" DOT_ATOM "@" DOT_ATOM ")" #define COMMENT_RE "[(][^()]*[)]" @@ -107,6 +108,32 @@ ****************************************************************************/ +static char * +clean_copy (memblock_t **block, const char *str) +{ + char *last_space; + char *end; + char *result; + + while (isspace (*str)) + str++; + + result = memblock_strdup (block, str); + + for (end = result; *end; end++){ + if (isspace (*end) && last_space == NULL) + last_space = end; + else + last_space = NULL; + } + + if (last_space) + *last_space = '\0'; + + return result; +} + + /** * ALGORITHM: * 1. find email (according to RFC2822 syntax) in the addr->full string @@ -207,18 +234,19 @@ -static void +static int strip_quotes (char *str) { char *src = str; char *dest = str; int off = 0; int len = 0; + int ret = 0; int slen; regmatch_t matches[1]; if (str == NULL) - return; + return 1; while (misc_regex (QUOTED_STRING, src, matches)){ off = matches[0].rm_so; @@ -228,6 +256,7 @@ memmove (dest + off, src + off + 1, len - 2); dest += off + len - 2; src = src + matches[0].rm_eo; + ret = 1; } if (len){ @@ -236,6 +265,7 @@ memmove (dest, src + 1, slen - 1); dest[slen] = '\0'; } + return ret; } @@ -283,7 +313,8 @@ addr->name = NULL; strip_name (addr); - strip_quotes (addr->name); + if (strip_quotes (addr->name)) + addr->flags.atomic_name = YES; strip_escapes (addr->name); } @@ -345,6 +376,9 @@ if (addr->name == NULL) return; + + if (*addr->name == '\0') + return; iseek = initials = xmalloc (strlen (addr->name)); @@ -364,12 +398,64 @@ } +static int +is_atom (const char *str) +{ + regmatch_t matches[1]; + + return misc_regex (ATOM_RE, str, matches); +} + + static void make_full (addr_t *addr, memblock_t **data_block) { + int ret; + int len; + int n_len; + int e_len; + int f_len; + char *f_ptr; + char *seek; + if (addr->name && addr->email){ - addr->full = memblock_sprintf (data_block, "\"%s\" <%s>", addr->name, - addr->email); + ret = is_atom (addr->name); + if (ret){ + addr->flags.atomic_name = YES; + addr->full = memblock_sprintf (data_block, "%s <%s>", addr->name, + addr->email); + return; + } + + addr->flags.atomic_name = NO; + + n_len = strlen (addr->name); + e_len = strlen (addr->email); + /* " name " < email > \0 */ + f_len = 1 + 2 * n_len + 1 + 1 + e_len + 1 + 1; + + f_ptr = addr->full = memblock_malloc (data_block, f_len); + *f_ptr = '"'; + f_ptr++; + for (seek = addr->name; *seek; seek++){ + if (*seek == '"'){ + *f_ptr = '\\'; + f_ptr++; + addr->flags.quotes_in_name = YES; + } + else if (*seek == '\\'){ + *f_ptr = '\\'; + f_ptr++; + } + *f_ptr = *seek; + f_ptr++; + } + + len = f_ptr - addr->full; + len += sprintf (f_ptr, "\" <%s>", addr->email); + len += 1; + + memblock_shrink_last (*data_block, len); } else if (addr->name){ addr->full = addr->name; @@ -510,7 +596,7 @@ return NULL; addr = address_empty_mem (data_block); - addr->full = memblock_strdup (data_block, str); + addr->full = clean_copy (data_block, str); inserted = insert (addr); if (inserted){ 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/address.h 2003-07-27 17:37:00.000000000 +0200 @@ -102,12 +102,14 @@ char *initials; union { struct { - enum email_kind kind : 3; - enum email_sex sex : 2; - enum yes_no official : 1; - enum yes_no foreign : 1; - enum yes_no abook : 1; - enum yes_no own : 1; + enum email_kind kind : 3; + enum email_sex sex : 2; + enum yes_no official : 1; + enum yes_no foreign : 1; + enum yes_no abook : 1; + enum yes_no own : 1; + enum yes_no atomic_name : 1; + enum yes_no quotes_in_name : 1; }; unsigned value; } flags; 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/cmd.c 2003-07-27 16:33:56.000000000 +0200 @@ -136,8 +136,11 @@ keymap_add (keymaps + CMD_LIST, 'r', sender_open_reply); keymap_add (keymaps + CMD_LIST, 'f', sender_open_fwd); keymap_add (keymaps + CMD_LIST, 'c', box_selection_open); - keymap_add (keymaps + CMD_LIST, ' ', folder_toggle_flag); keymap_add (keymaps + CMD_LIST, '$', folder_flush); + keymap_add (keymaps + CMD_LIST, ' ', folder_toggle_flag); + 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_SELECT_BOX, KEY_PPAGE, box_selection_prev_page); keymap_add (keymaps + CMD_SELECT_BOX, KEY_NPAGE, box_selection_next_page); @@ -157,10 +160,14 @@ keymap_add (keymaps + CMD_ABOOK, KEY_DC, abook_remove); keymap_add (keymaps + CMD_ABOOK, 'n', abook_change_name); keymap_add (keymaps + CMD_ABOOK, 'e', abook_change_email); - keymap_add (keymaps + CMD_ABOOK, 'f', abook_change_flag); + keymap_add (keymaps + CMD_ABOOK, 's', abook_change_sex); + keymap_add (keymaps + CMD_ABOOK, 'o', abook_change_official); keymap_add (keymaps + CMD_ABOOK, 'a', abook_insert); keymap_add (keymaps + CMD_ABOOK, 'q', abook_close); - keymap_add (keymaps + CMD_ABOOK, ' ', abook_change); + keymap_add (keymaps + CMD_ABOOK, ' ', abook_hit); + keymap_add (keymaps + CMD_ABOOK, '*', abook_hit_all); + keymap_add (keymaps + CMD_ABOOK, '+', abook_set_all); + keymap_add (keymaps + CMD_ABOOK, '-', abook_unset_all); keymap_add (keymaps + CMD_ABOOK, 'm', abook_compose); keymap_add (keymaps + CMD_READ_MAIL, 'q', mailreader_close); @@ -213,6 +220,7 @@ keymap_add (keymaps + CMD_SENDER, 'f', sender_change_from); keymap_add (keymaps + CMD_SENDER, 's', sender_change_subject); keymap_add (keymaps + CMD_SENDER, 'r', sender_change_reply_to); + keymap_add (keymaps + CMD_SENDER, 'S', sender_change_smtp); keymap_add (keymaps + CMD_SENDER, 'a', sender_add_attachment); keymap_add (keymaps + CMD_SENDER, KEY_DC, sender_delete_attachment); keymap_add (keymaps + CMD_SENDER, 'd', sender_delete_attachment); @@ -221,10 +229,12 @@ keymap_add (keymaps + CMD_SENDER, 'y', sender_go); keymap_add (keymaps + CMD_SENDER, 'E', sender_reedit); - keymap_add (keymaps + CMD_ASK, KEY_HOME, choose_first); - keymap_add (keymaps + CMD_ASK, KEY_END, choose_last); - keymap_add (keymaps + CMD_ASK, KEY_DOWN, choose_next); - keymap_add (keymaps + CMD_ASK, KEY_UP, choose_prev); + keymap_add (keymaps + CMD_ASK, KEY_HOME, choose_first); + keymap_add (keymaps + CMD_ASK, KEY_END, choose_last); + keymap_add (keymaps + CMD_ASK, KEY_DOWN, choose_next); + keymap_add (keymaps + CMD_ASK, KEY_RIGHT, choose_next); + keymap_add (keymaps + CMD_ASK, KEY_UP, choose_prev); + keymap_add (keymaps + CMD_ASK, KEY_LEFT, choose_prev); keymap_add (keymaps + CMD_LIST, '~', cmd_test_action); } @@ -348,6 +358,14 @@ attach_refresh (); break; + case CMD_ABOOK: + abook_refresh (); + break; + + case CMD_ABOOK_ADD: + abook_add_refresh (); + break; + default: break; } 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/compose.c 2003-07-26 15:31:56.000000000 +0200 @@ -459,13 +459,17 @@ char * compose_new (char *to) { + char *real_to; char *ret; char *subject; rstring_t *header; if (to == NULL) - to = xstrdup (read_argument ("To: ", NULL, COMPLETE_ADDRS)); - if (to == NULL) + real_to = xstrdup (read_argument ("To: ", NULL, COMPLETE_ADDRS)); + else + real_to = xstrdup (to); + + if (real_to == NULL) return NULL; subject = read_argument ("Subject: ", NULL, COMPLETE_NONE); @@ -478,14 +482,14 @@ compose_act = COMPOSE_NEW; rstring_add (header, make_from ()); - rstring_add (header, make_to (to)); + rstring_add (header, make_to (real_to)); rstring_add (header, make_subject (subject, NULL)); rstring_add (header, make_empty_line ()); rstring_add (header, make_signature ()); ret = make_file_and_run (header, header->count, header->count, NULL); - xfree (to); + xfree (real_to); rstring_free_strings (header); rstring_delete (header); 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/confread.c 2003-07-26 18:45:34.000000000 +0200 @@ -18,7 +18,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /cvsroot/elmo/elmo/src/confread.c,v 1.30 2003/07/21 20:08:01 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 diff -Nru elmo-0.8.1/src/elmo.c elmo-0.8.1-/src/elmo.c --- elmo-0.8.1/src/elmo.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/elmo.c 2003-07-26 15:08:11.000000000 +0200 @@ -110,9 +110,10 @@ static char *config_file = NULL; /** - * this is used in signal handler + * this is used in signal handler to indicate that this error is being + * handled (see info libc) */ -static volatile sig_atomic_t segmentation_fault = 0; +static volatile sig_atomic_t error_indicator = 0; /**************************************************************************** * INTERFACE DATA @@ -284,19 +285,22 @@ screen_doupdate (); } + + static void curses_cleanup (int signum) { - if (segmentation_fault) + if (error_indicator) raise (signum); - segmentation_fault = 1; + error_indicator = 1; clock_stop (); curs_set (1); endwin (); - write (2, BUG_MSG, sizeof (BUG_MSG)); + if (signum == SIGSEGV || signum == SIGFPE || signum == SIGABRT) + write (2, BUG_MSG, sizeof (BUG_MSG)); signal (signum, SIG_DFL); raise (signum); @@ -306,11 +310,9 @@ static void setup_window (void) { - - signal (SIGINT, elmo_finish); - signal (SIGTERM, elmo_finish); - signal (SIGQUIT, elmo_finish); - + signal (SIGTERM, curses_cleanup); + signal (SIGQUIT, curses_cleanup); + signal (SIGINT, curses_cleanup); signal (SIGSEGV, curses_cleanup); signal (SIGFPE, curses_cleanup); signal (SIGABRT, curses_cleanup); @@ -388,10 +390,8 @@ status_free_resources (); screen_free_resources (); confhold_free_resources (); - curs_set(1); + curs_set (1); debug_end (); - if (signum) - exit (EXIT_SUCCESS); } 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/eprintf.c 2003-07-26 18:42:38.000000000 +0200 @@ -220,7 +220,7 @@ int w_len; if (! t) - return; + t = ""; t_len = strlen (t); @@ -286,30 +286,34 @@ /* Johnny Masta Killa */ case 'f': - if (mail->from && mail->from->name) + if (mail->from) put_string_fs (s, mail->from->name, &fs); - else if (mail->from && mail->from->full) - put_string_fs (s, mail->from->full, &fs); + else + put_string_fs (s, NULL, &fs); break; /* Johnny Masta Killa */ case 'F': - if (mail->from && mail->from->full) + if (mail->from) put_string_fs (s, mail->from->full, &fs); + else + put_string_fs (s, NULL, &fs); break; /* Bob The Ripper */ case 't': - if (mail->to && mail->to->count && mail->to->array[0]->name) + if (mail->to && mail->to->count) put_string_fs (s, mail->to->array[0]->name, &fs); - else if (mail->to && mail->to->count && mail->to->array[0]->full) - put_string_fs (s, mail->to->array[0]->full, &fs); + else + put_string_fs (s, NULL, &fs); break; /* Bob The Ripper */ case 'T': - if (mail->to && mail->to->count && mail->to->array[0]->full) + if (mail->to && mail->to->count) put_string_fs (s, mail->to->array[0]->full, &fs); + else + put_string_fs (s, NULL, &fs); break; /* Wed, 7 May 2003 15:36:46 +0200 */ @@ -326,29 +330,21 @@ /* Bow before me! */ case 's': - if (mail->subject) - put_string_fs (s, mail->subject, &fs); + put_string_fs (s, mail->subject, &fs); break; /* JMK */ case 'i': - if (mail->from && mail->from->initials) + if (mail->from) put_string_fs (s, mail->from->initials, &fs); - else { - if (mail->from && mail->from->name) - put_char (s, *mail->from->name); - else if (mail->from - && mail->from->full) - put_char (s, *mail->from->full); - if (mail->from && mail->from->last) - put_char (s, *mail->from->last); - } + else + put_string_fs (s, NULL, &fs); break; /* (3.5K) */ case 'S': size = wrapbox_mail_size (mail); - put_string_fs (s, human_size_paren (size), &fs); + put_string_fs (s, human_size_pure (size), &fs); break; /* these are flags */ @@ -438,13 +434,11 @@ break; case 'n': - if (addr->name) - put_string_fs (s, addr->name, &fs); + put_string_fs (s, addr->name, &fs); break; case 'e': - if (addr->email) - put_string_fs (s, addr->email, &fs); + put_string_fs (s, addr->email, &fs); break; case 'o': 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/exec_table.t 2003-07-27 16:32:00.000000000 +0200 @@ -8,26 +8,29 @@ {"abook_new_store", abook_new_store, NULL, NULL}, {"abook_open", abook_open, NULL, NULL}, {"abook_close", abook_close, NULL, NULL}, +{"abook_refresh", abook_refresh, NULL, NULL}, {"abook_next", abook_next, NULL, NULL}, {"abook_prev", abook_prev, NULL, NULL}, {"abook_next_page", abook_next_page, NULL, NULL}, {"abook_prev_page", abook_prev_page, NULL, NULL}, {"abook_first", abook_first, NULL, NULL}, {"abook_last", abook_last, NULL, NULL}, -{"abook_change", abook_change, NULL, NULL}, -{"abook_change_all", abook_change_all, NULL, NULL}, +{"abook_hit", abook_hit, NULL, NULL}, +{"abook_hit_all", abook_hit_all, NULL, NULL}, {"abook_set", abook_set, NULL, NULL}, {"abook_unset", abook_unset, NULL, NULL}, {"abook_set_all", abook_set_all, NULL, NULL}, {"abook_unset_all", abook_unset_all, NULL, NULL}, {"abook_change_name", abook_change_name, NULL, NULL}, {"abook_change_email", abook_change_email, NULL, NULL}, -{"abook_change_flag", abook_change_flag, NULL, NULL}, +{"abook_change_sex", abook_change_sex, NULL, NULL}, +{"abook_change_official", abook_change_official, NULL, NULL}, {"abook_remove", abook_remove, NULL, NULL}, {"abook_insert", abook_insert, NULL, NULL}, {"abook_compose", abook_compose, NULL, NULL}, {"abook_add_open", abook_add_open, NULL, NULL}, {"abook_add_close", abook_add_close, NULL, NULL}, +{"abook_add_refresh", abook_add_refresh, NULL, NULL}, {"abook_add_next", abook_add_next, NULL, NULL}, {"abook_add_prev", abook_add_prev, NULL, NULL}, {"abook_add_next_page", abook_add_next_page, NULL, NULL}, diff -Nru elmo-0.8.1/src/fetch.c elmo-0.8.1-/src/fetch.c --- elmo-0.8.1/src/fetch.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/fetch.c 2003-07-26 14:05:25.000000000 +0200 @@ -89,7 +89,7 @@ /** * This is the default format of the line displayed in the fetch window. */ -static char *default_format = "%?%$ %D %016f %S %s"; +static char *default_format = "%?%$ %D %016f (%-06S) %s"; /**************************************************************************** * INTERFACE DATA diff -Nru elmo-0.8.1/src/mail.c elmo-0.8.1-/src/mail.c --- elmo-0.8.1/src/mail.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/mail.c 2003-07-26 15:14:45.000000000 +0200 @@ -295,6 +295,7 @@ mail->place.generic = NULL; mail->date = 0; mail->mua = MUA_UNKNOWN; + mail->type = BOX_INVALID; mail->rmime = NULL; } diff -Nru elmo-0.8.1/src/maildir.c elmo-0.8.1-/src/maildir.c --- elmo-0.8.1/src/maildir.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/maildir.c 2003-07-26 13:59:48.000000000 +0200 @@ -277,6 +277,7 @@ ret = mlex_scan_file (0); if (ret == NEXT_MAIL){ newmail->flags |= mail_flags (fname, dir, dname_len); + newmail->type = BOX_MAILDIR; newmail->place.file_name = full_name; mail_array_insert (new_marray, newmail); } @@ -530,6 +531,7 @@ static mail_array_t * read_cache (const char *dir) { + int i; char *fname; FILE *fp; mail_array_t *marray; @@ -554,6 +556,9 @@ if (marray_r) mail_array_substitute (marray, marray_r); + for (i = 0; i < marray->count; i++) + marray->array[i].type = BOX_MAILDIR; + xfree (fname); return marray; } diff -Nru elmo-0.8.1/src/mail.h elmo-0.8.1-/src/mail.h --- elmo-0.8.1/src/mail.h 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/mail.h 2003-07-26 13:57:37.000000000 +0200 @@ -42,7 +42,7 @@ #define FLAG_TRASHED 0x0008 #define FLAG_DRAFT 0x0010 #define FLAG_FLAGGED 0x0020 - #define FLAG_PASSED 0x0040 +#define FLAG_PASSED 0x0040 #define FLAG_LEGITIMATE 0x0080 #define FLAG_NOSPAM 0x0100 #define FLAG_SPAM 0x0200 @@ -98,6 +98,7 @@ BOX_INVALID, BOX_MBOX, BOX_MAILDIR, + BOX_POP3, } box_type_t; @@ -122,6 +123,8 @@ * INTERFACE STRUCTURES / UTILITY CLASSES ****************************************************************************/ +struct mail_array; + /** * This simple structure describes a single mail and its connections with * other mails grouped in mail_array, and in a tree which is built when @@ -135,6 +138,8 @@ * to -- To: field split into an array of addresses * cc -- Cc: field split into an array of addresses * bcc -- Bcc: field split into an array of addresses + * recv_for -- Received: [...] for ; -- email address as + * a string * msg_id -- Message-ID: field * in_reply_to -- References: field split into an array of message ids or * one message id taken from In-reply-to: field. @@ -170,11 +175,14 @@ time_t date; mua_t mua; rmime_t *rmime; + + box_type_t type; union { void *generic; unsigned offset_header; char *file_name; + int size; } place; }; diff -Nru elmo-0.8.1/src/mbox.c elmo-0.8.1-/src/mbox.c --- elmo-0.8.1/src/mbox.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/mbox.c 2003-07-26 14:00:01.000000000 +0200 @@ -151,6 +151,7 @@ switch (ret){ case NEXT_MAIL: + newmail->type = BOX_MBOX; mail_array_insert (result, newmail); progress_add (mbox_mail_size (newmail)); break; diff -Nru elmo-0.8.1/src/memblock.c elmo-0.8.1-/src/memblock.c --- elmo-0.8.1/src/memblock.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/memblock.c 2003-07-27 17:12:09.000000000 +0200 @@ -199,6 +199,18 @@ void +memblock_shrink_last (memblock_t *block, int size) +{ + if (size > block->last) + return; + + block->used -= size - block->last; + block->last = size; +} + + + +void memblock_free_last (memblock_t *block) { block->used -= block->last; diff -Nru elmo-0.8.1/src/memblock.h elmo-0.8.1-/src/memblock.h --- elmo-0.8.1/src/memblock.h 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/memblock.h 2003-07-27 16:52:28.000000000 +0200 @@ -58,6 +58,7 @@ extern void memblock_destroy (memblock_t *block); extern char *memblock_strdup (memblock_t **block, const char *str); extern void *memblock_malloc (memblock_t **block, int size); +extern void memblock_shrink_last (memblock_t *block, int size); extern void memblock_free_last (memblock_t *block); extern void memblock_set_mark (memblock_t *block); extern void memblock_free_marked (memblock_t **block); 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/mlex.c 2003-07-26 18:45:33.000000000 +0200 @@ -1,7 +1,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /cvsroot/elmo/elmo/src/mlex.c,v 1.55 2003/07/21 20:08:01 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 diff -Nru elmo-0.8.1/src/mybox.c elmo-0.8.1-/src/mybox.c --- elmo-0.8.1/src/mybox.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/mybox.c 2003-07-26 14:09:13.000000000 +0200 @@ -48,6 +48,10 @@ /**************************************************************************** * IMPLEMENTATION PRIVATE DEFINITIONS / ENUMERATIONS / SIMPLE TYPEDEFS ****************************************************************************/ + +#define REGULAR_FORMAT "%?%$%# %D %016f (%-06S) " +#define SENT_FORMAT "%?%$ %D %016t (%-06S) " + /**************************************************************************** * IMPLEMENTATION PRIVATE CLASS PROTOTYPES / EXTERNAL CLASS REFERENCES ****************************************************************************/ @@ -92,7 +96,7 @@ * folder line format */ -char *mybox_format = "%?%$%# %D %016f %S "; +char *mybox_format = NULL; /**************************************************************************** * IMPLEMENTATION PRIVATE FUNCTION PROTOTYPES @@ -193,12 +197,12 @@ if (is_box (box, "sent") || is_box (box, "drafts")){ mybox_format = ask_for_default ("sent_format", NULL); if (mybox_format == NULL) - mybox_format = "%?%$ %D %016t %S "; + mybox_format = SENT_FORMAT; } else { mybox_format = ask_for_default ("line_format", NULL); if (mybox_format == NULL) - mybox_format = "%?%$%# %D %016f %S "; + mybox_format = REGULAR_FORMAT; } } diff -Nru elmo-0.8.1/src/pop.c elmo-0.8.1-/src/pop.c --- elmo-0.8.1/src/pop.c 2003-05-22 21:27:24.000000000 +0200 +++ elmo-0.8.1-/src/pop.c 2003-07-26 15:14:03.000000000 +0200 @@ -246,6 +246,8 @@ { item->info = xmalloc (sizeof (mail_t)); memcpy (item->info, newmail, sizeof (mail_t)); + item->info->type = BOX_POP3; + item->info->place.size = item->size; } 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/raddress.c 2003-07-23 17:28:30.000000000 +0200 @@ -59,6 +59,22 @@ /**************************************************************************** * IMPLEMENTATION PRIVATE FUNCTIONS ****************************************************************************/ + +static char * +find_comma (char *str) +{ + int in_quotes = 0; + + while (*str){ + if (*str == '"') + in_quotes = ! in_quotes; + if (*str == ',' && ! in_quotes) + return str; + str++; + } + return NULL; +} + /**************************************************************************** * INTERFACE FUNCTIONS ****************************************************************************/ @@ -139,7 +155,7 @@ result = raddress_create (); while (seek && *seek){ - comma = strchr (seek, ','); + comma = find_comma (seek); if (comma) *comma = '\0'; 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-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/sender.c 2003-07-26 15:25:12.000000000 +0200 @@ -61,6 +61,7 @@ ****************************************************************************/ typedef enum {SENDER_DROP, SENDER_DRAFT, SENDER_SENT} sent_t; + #define PREAMBLE do {if (message == NULL) return; } while (0) /**************************************************************************** @@ -601,9 +602,7 @@ } if (from){ -/* - message->reply_to = message->from = address_create (from); -*/ + message->reply_to = message->from = address_from_string (from); } mailinfo_refresh (); @@ -614,8 +613,9 @@ void sender_change_smtp (void) { - char *email; - char *name; + char *email; + char *name; + addr_t *addr; if(sender_ask == NULL) return; @@ -625,9 +625,11 @@ email = ask_get_field (sender_ask, "email"); name = ask_get_field (sender_ask, "my_name"); -/* - message->reply_to = message->from = address_construct (email, name, 'F'); -*/ + addr = address_empty (); + addr->name = name; + addr->email = email; + + message->reply_to = message->from = address_complete (addr); select_redraw (sender_select); mailinfo_refresh (); @@ -652,9 +654,7 @@ } if (reply_to){ -/* - message->reply_to = address_create (reply_to); -*/ + message->reply_to = address_from_string (reply_to); } mailinfo_refresh (); diff -Nru elmo-0.8.1/src/wrapbox.c elmo-0.8.1-/src/wrapbox.c --- elmo-0.8.1/src/wrapbox.c 2003-07-21 22:08:01.000000000 +0200 +++ elmo-0.8.1-/src/wrapbox.c 2003-07-26 13:58:50.000000000 +0200 @@ -175,9 +175,6 @@ switch (wrapbox_marray->type){ - case BOX_INVALID: - return 1; - case BOX_MBOX: ret = mbox_mail_header (mail, place, wrapbox_marray->path); break; @@ -185,6 +182,9 @@ case BOX_MAILDIR: ret = maildir_mail_header (mail, place); break; + + default: + return 1; } if (ret == 0) @@ -225,9 +225,6 @@ switch (wrapbox_marray->type){ - case BOX_INVALID: - return 1; - case BOX_MBOX: ret = mbox_mail_body (mail, place, mime, wrapbox_marray->path); break; @@ -235,6 +232,9 @@ case BOX_MAILDIR: ret = maildir_mail_body (mail, place, mime); break; + + default: + return 1; } if (ret == 0) @@ -256,14 +256,14 @@ switch (wrapbox_marray->type){ - case BOX_INVALID: - return NULL; - case BOX_MAILDIR: return maildir_fetch_single (mail); case BOX_MBOX: return NULL; + + default: + return NULL; } return NULL; @@ -284,14 +284,14 @@ switch (wrapbox_marray->type){ - case BOX_INVALID: - return NULL; - case BOX_MAILDIR: return maildir_fetch_where (wrapbox_marray->path); case BOX_MBOX: return NULL; + + default: + return NULL; } return NULL; @@ -386,13 +386,7 @@ int wrapbox_mail_size (mail_t *mail) { - if (wrapbox_marray == NULL) - return 0; - - switch (wrapbox_marray->type){ - - case BOX_INVALID: - return 0; + switch (mail->type){ case BOX_MBOX: return mbox_mail_size (mail); @@ -400,6 +394,9 @@ case BOX_MAILDIR: return maildir_mail_size (mail); + case BOX_POP3: + return mail->place.size; + default: return 0; }