Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
files elm-2.4ME+PL102.patch.gz
and elm-2.4ME+102.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL102.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+102.tar.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+102.tar.gz >
and <URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL102.patch.gz >
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL102.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Files listed on OBSOLETE should have deleted (they are empty.)
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL101 (25) ------------------------------------
Index: elm2.4.ME+.102cvs/hdrs/patchlevel.h
Prereq: 1070000000
*** elm2.4.ME+.101/hdrs/patchlevel.h 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/hdrs/patchlevel.h 2003-05-27 18:52:04.000000000 +0300
***************
*** 1,9 ****
! #define PATCHLEVEL "101 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.101
*/
! #define LAST_REPORT_TIME 1070000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Mar, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Mar, 2003"
--- 1,9 ----
! #define PATCHLEVEL "102 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.102
*/
! #define LAST_REPORT_TIME 1080000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "May, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released May, 2003"
Index: elm2.4.ME+.102cvs/README.ME+
*** elm2.4.ME+.101/README.ME+ 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/README.ME+ 2003-05-28 21:02:27.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.549 2003/03/20 06:49:00 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.572 2003/05/28 18:02:27 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,597 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL102 (25) compared with Elm2.4ME+ PL101 (25)
+ ------------------------------------------------------------------
+
+ Undo Elm2.4ME+ PL101a (25), Elm2.4ME+ PL101b (25) and
+ Elm2.4ME+ PL101c (25) patches before applying this patch.
+
+ SUMMARY: This release collects patches 101a - 101c,
+ adds support for environment variables (on some
+ cases) to internal mailcap parser, changes
+ folder handling of nfrm, adds new tool
+ elmlibregister and fixes some bugs. Now dynamic
+ libraries (iconv, smtp, tls) are registered
+ on (post-)install time to global elm.rc, if wanted.
+
+ - Fix (harmless) error message
+ bin/elmregister: [on_current] Bad command letter: s
+ (occurs when upgrading version.)
+ - Fix elmregister message
+ Keeping link .../elmuninstall.1 from old version (was (null))
+
+ - Running of test= on internal mailcap parser was causing
+ segmentation violation
+
+ - Added to support for environment variables ($xxxx)
+ inside of " on internal mailcap parser (only environment
+ variables formed from letters are supported). Environment
+ variables outside of quotes are not supported
+ by internal mailcap parser.
+
+ - Fix crash on header editing screen
+
+ - "We're setting up Elm 2.4ME+ PL99b (25) for use as an
+ IMAP client to our mailserver, and I ran into a problem
+ when configuring the main elm.rc file.
+
+ I wanted to be able to set the incoming-mailbox variable
+ to be $USER@engmail, so that by default users would be
+ prompted for a password, and mail would be retrieved from
+ their engmail account.
+
+ However, when I set "incoming-mailbox = $USER@engmail"
+ and ran elm, I got:
+
+ Cannot initialize "incoming-mailbox" -
+ error expanding "$USER@engmail".
+
+ I traced the problem to the expand_path() routine in the
+ lib/expand.c file. The environment variable expansion was
+ using '/' as its only delimiter, so that the $USER portion
+ wasn't being split off from the remainder of the path, and
+ the environment variable lookup failed.
+
+ By adding '@' to the possible delimiters, the problem goes
+ away."
+ From: Paul D. McKone <pdmc...@engmail.uwaterloo.ca>
+
+ - Adding X-ELM-OSV, X-Mailer or Content-Name headers to
+ .elm/elmheaders was causing crash (now they are ignored.)
+
+ - Add fclose() to mailcap.c
+
+ - Do not ignore reply-to header on .elm/elmheaders.
+ Problem noted by: Rui Aguiar <rui...@it.pt>
+
+ - Fix crash
+ ISO2022 PANIC in cs_iso2022.c:836:state_add_raw
+ >>>Value not in range 0-255
+
+ - Fix Segmentation fault when viewing attachments when
+ attachment have a corrupted header
+ Content-Type: type=application/msword
+
+ - Print enconding on MIME structure Menu also when it
+ fits only partially to column
+
+ - Reprint error message after turning Raw off when
+ locking of mailbox fails.
+
+ - Changed error messages of "frm".
+
+ - If "frm -s new" or "nfrm" is given for folder instead
+ of mailbox, show 'new' messages. But also print error
+ message:
+ WARNING: %s is folder, not mailbox!
+ Delivery of new mail to folder when it is open may
+ corrupt it.
+ Setting default-folder-status = New disables warning.
+
+
+ - Fix for valgrind reported error
+ Conditional jump or move depends on uninitialised value(s)
+ at 0x80E9136: expand_dt_path (rc_handle.c:1130)
+ (actually loop condition did not depend
+ uninitialized value although one subexpresions value
+ was uninitialized on that situation.)
+
+ - Fix for valgrind reported error/warning
+ 1310 bytes in 177 blocks are definitely lost in
+ loss record 19 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F081B: safe_malloc (safemalloc.c:46)
+ by 0x80AE3B8: dequote_opt (charset.c:787)
+ by 0x80AE985: load_charset_map_info (charset.c:948)
+
+ - Fix for valgrind reported error/warning
+ 552 bytes in 68 blocks are definitely lost in loss
+ record 16 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F081B: safe_malloc (safemalloc.c:46)
+ by 0x80F4F29: set_dir_selection (savefolder.c:2141)
+ by 0x80F23A5: real_select_local (savefolder.c:747)
+
+ - Fix for valgrind reported error/warning
+ 528 bytes in 66 blocks are definitely lost in loss
+ record 16 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F081B: safe_malloc (safemalloc.c:46)
+ by 0x8105638: malloc_string (string.c:116)
+ by 0x8105873: new_string2 (string.c:180)
+ by 0x80C506A: hdr_text (hdrdecode.c:412)
+
+ - Fix for valgrind reported error/warning
+ 280 bytes in 35 blocks are definitely lost in loss
+ record 16 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0827: safe_malloc (safemalloc.c:46)
+ by 0x8105644: malloc_string (string.c:116)
+ by 0x810587F: new_string2 (string.c:180)
+ by 0x80C4D7B: hdr_comment (hdrdecode.c:272)
+
+ - Fix for valgrind reported error/warning
+ 96 bytes in 12 blocks are definitely lost in loss
+ record 11 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0833: safe_malloc (safemalloc.c:46)
+ by 0x8105650: malloc_string (string.c:116)
+ by 0x810588B: new_string2 (string.c:180)
+ by 0x80C4F1F: hdr_phrase (hdrdecode.c:348)
+
+ - Fix for valgrind reported error/warning
+ 224 bytes in 11 blocks are definitely lost in loss
+ record 16 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0847: safe_malloc (safemalloc.c:46)
+ by 0x81056D2: malloc_string (string.c:130)
+ by 0x8106B98: dup_string (string.c:678)
+ by 0x80DAD85: add_expanded_addr_ (outheaders.c:134)
+
+ - Fix for valgrind reported error/warning
+ 24 bytes in 1 blocks are definitely lost in loss
+ record 1 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F083B: safe_malloc (safemalloc.c:46)
+ by 0x80C6887: update_header_list (headers.c:575)
+ by 0x809C8BB: state_read_headers (parse_util.c:137)
+ by 0x809C7C8: file_read_headers (parse_util.c:104)
+ by 0x8076770: copy_message_2 (fileio.c:1048)
+
+ - Fix for valgrind reported error/warning
+ 52 bytes in 5 blocks are definitely lost in loss
+ record 6 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F087B: safe_malloc (safemalloc.c:46)
+ by 0x8105706: malloc_string (string.c:130)
+ by 0x81057CC: new_string (string.c:153)
+ by 0x80DB167: make_surface_addr (outheaders.c:235)
+ by 0x8059485: build_address_l (addr_util.c:452)
+
+ - Fix for valgrind reported error/warning
+ 32 bytes in 4 blocks are definitely lost in loss record 5 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F089F: safe_malloc (safemalloc.c:46)
+ by 0x81056BC: malloc_string (string.c:116)
+ by 0x810627F: cat_strings (string.c:434)
+ by 0x80C510B: hdr_text (hdrdecode.c:419)
+ by 0x80C51E6: hdr_to_string (hdrdecode.c:462)
+ by 0x80C5CC3: hdr_decode_from_text (headers.c:36)
+ by 0x80C71C4: give_decoded_header (headers.c:816)
+ by 0x809CB02: state_write_header (parse_util.c:197)
+
+ - Fix for valgrind reported error/warning
+ 32 bytes in 4 blocks are definitely lost in loss record 5 of 26
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F08B3: safe_malloc (safemalloc.c:46)
+ by 0x8104DD1: alloc_simple (streamsched.c:1047)
+
+ - Fix for valgrind reported error/warning
+ 16 bytes in 2 blocks are definitely lost in loss record 1 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F08B3: safe_malloc (safemalloc.c:46)
+ by 0x81056F8: malloc_string (string.c:116)
+ by 0x810582C: new_string (string.c:153)
+ by 0x807B350: enter_helper (in_utils.c:432)
+ by 0x807BECE: optionally_enter2 (in_utils.c:863)
+ by 0x807C01E: optionally_enter (in_utils.c:898)
+
+ - Fix for valgrind reported error/warning
+ 16 bytes in 2 blocks are definitely lost in loss record 1 of 26
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F08CB: safe_malloc (safemalloc.c:46)
+ by 0x80B33D7: cs_stream_from_ascii (cs_binary.c:1508)
+ by 0x8107089: stream_from_string (string.c:799)
+ by 0x807C049: optionally_enter (in_utils.c:909)
+
+ - Fix for valgrind reported error/warning
+ 140 bytes in 1 blocks are definitely lost in loss record 13 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0996: safe_realloc (safemalloc.c:62)
+ by 0x80E509D: mbx_prepare_read_pop (pop.c:1592)
+
+ - Fix for valgrind reported error/warning
+ 15 bytes in 1 blocks are definitely lost in loss record 1 of 26
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F09A2: safe_realloc (safemalloc.c:62)
+ by 0x80A1357: make_mailcap_arg (mailcap.c:918)
+ by 0x80A1EF8: mailcap_view_command (mailcap.c:1319)
+ by 0x80973A6: prompt_programs_1 (showmsg.c:131)
+ by 0x8097587: prompt_programs_1 (showmsg.c:188)
+ by 0x80975F1: prompt_programs (showmsg.c:211)
+
+ - Fix for valgrind reported error/warning
+ 32 bytes in 2 blocks are definitely lost in loss record 5 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0933: safe_malloc (safemalloc.c:46)
+ by 0x80C6973: update_header_list (headers.c:575)
+ by 0x80C6D3F: read_folder_headers (headers.c:700)
+ by 0x80D5771: prepare_message_access (mbox.c:1351)
+
+ - Fix for valgrind reported error/warning
+ 8 bytes in 1 blocks are definitely lost in loss record 1 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F094F: safe_malloc (safemalloc.c:46)
+ by 0x8105794: malloc_string (string.c:116)
+ by 0x8106CC8: dup_string (string.c:678)
+ by 0x812FEB5: sb_get_line_from_mem (sb_mem.c:69)
+ by 0x8109A89: get_line_from_stringbuffer (stringbuffer.c:177)
+ by 0x8067162: builtinplusplus (builtin++.c:176)
+
+ - Fix for valgrind reported error/warning
+ 55 bytes in 2 blocks are definitely lost in loss record 6 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F099F: safe_malloc (safemalloc.c:46)
+ by 0x80FDE2A: malloc_service_entry (service_list.c:198)
+
+ - Fix for valgrind reported error/warning
+ 3 bytes in 1 blocks are definitely lost in loss record 1 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F099F: safe_malloc (safemalloc.c:46)
+ by 0x81221FC: imap_got_header_line (imap.c:5794)
+ by 0x8122863: mbx_copy_header_imap (imap.c:5991)
+
+ - Fix for valgrind reported error/warning
+ 4050 bytes in 67 blocks are definitely lost in loss
+ record 21 of 24
+ at 0x4015E8A3: realloc (vg_clientfuncs.c:276)
+ by 0x80F0A6E: safe_realloc (safemalloc.c:62)
+ by 0x80E0025: elm_vmessage (output.c:1229)
+ by 0x80E0881: elm_message (output.c:1460)
+ by 0x8121F12: mbx_copy_envelope_imap (imap.c:5687)
+
+ - Fix for valgrind reported error/warning
+ 9 bytes in 1 blocks are definitely lost in loss record 2 of 30
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0B37: safe_strdup (safemalloc.c:78)
+ by 0x80FB31A: probe_imap_capa_lib (shared.c:1010)
+
+ - Fix for valgrind reported error/warning
+ 40 bytes in 1 blocks are definitely lost in loss record 6 of 29
+ at 0x4015E8A3: realloc (vg_clientfuncs.c:276)
+ by 0x80F0A6E: safe_realloc (safemalloc.c:62)
+ by 0x80E0209: elm_vmessage (output.c:1281)
+ by 0x80E0881: elm_message (output.c:1460)
+ by 0x4146ED0A: smtp_common_mailer_backend (smtp.c:1026)
+
+ - Fix for valgrind reported error
+ Invalid read of size 4
+ at 0x80C0994: debug_level_check (debug.c:256)
+ by 0x80F0B22: safe_realloc (safemalloc.c:69)
+ by 0x80C08B1: set_debugging (debug.c:214)
+
+ - Added "install_libs" target for testing top level Makefile
+
+ - Due on error on Makefile on doc/, elmrc-info (and possible
+ other files) was not installed.
+
+ - Added new tool elmlibregister, which check is libraries
+ given on use-library on elm.rc (or on .elm/elmrc) loadable.
+ Now Configure asks which libraries should be registered on
+ on (post-)install time. elmlibregister command is used to
+ add these libraries to use-library line on global elm.rc.
+
+ - Quotes was handled incorrectly on internal mailcap parser.
+
+ New tools:
+ elmlibregister
+
+ New files:
+ utils/elmlibregister.c
+ doc/elmlibregister.1
+
+ Changes of Elm2.4ME+ PL101c (25) compared with Elm2.4ME+ PL101b (25)
+ --------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch fixes segmentation fault, when
+ when viewing attachment with unxepected
+ Content-Type, and fixes some memory leaks
+ and other errors found by memory checker
+ tools. Also other small changes are included
+ to this patch.
+
+ - Fix Segmentation fault when viewing attachments when
+ attachment have a corrupted header
+ Content-Type: type=application/msword
+
+ - Print enconding on MIME structure Menu also when it
+ fits only partially to column
+
+ - Reprint error message after turning Raw off when
+ locking of mailbox fails.
+
+ - Fix for valgrind reported error
+ Conditional jump or move depends on uninitialised value(s)
+ at 0x80E9136: expand_dt_path (rc_handle.c:1130)
+ (actually loop condition did not depend
+ uninitialized value although one subexpresions value
+ was uninitialized on that situation.)
+
+ - Fix for valgrind reported error/warning
+ 1310 bytes in 177 blocks are definitely lost in
+ loss record 19 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F081B: safe_malloc (safemalloc.c:46)
+ by 0x80AE3B8: dequote_opt (charset.c:787)
+ by 0x80AE985: load_charset_map_info (charset.c:948)
+
+ - Fix for valgrind reported error/warning
+ 552 bytes in 68 blocks are definitely lost in loss
+ record 16 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F081B: safe_malloc (safemalloc.c:46)
+ by 0x80F4F29: set_dir_selection (savefolder.c:2141)
+ by 0x80F23A5: real_select_local (savefolder.c:747)
+
+ - Fix for valgrind reported error/warning
+ 528 bytes in 66 blocks are definitely lost in loss
+ record 16 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F081B: safe_malloc (safemalloc.c:46)
+ by 0x8105638: malloc_string (string.c:116)
+ by 0x8105873: new_string2 (string.c:180)
+ by 0x80C506A: hdr_text (hdrdecode.c:412)
+
+ - Fix for valgrind reported error/warning
+ 280 bytes in 35 blocks are definitely lost in loss
+ record 16 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0827: safe_malloc (safemalloc.c:46)
+ by 0x8105644: malloc_string (string.c:116)
+ by 0x810587F: new_string2 (string.c:180)
+ by 0x80C4D7B: hdr_comment (hdrdecode.c:272)
+
+ - Fix for valgrind reported error/warning
+ 96 bytes in 12 blocks are definitely lost in loss
+ record 11 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0833: safe_malloc (safemalloc.c:46)
+ by 0x8105650: malloc_string (string.c:116)
+ by 0x810588B: new_string2 (string.c:180)
+ by 0x80C4F1F: hdr_phrase (hdrdecode.c:348)
+
+ - Fix for valgrind reported error/warning
+ 224 bytes in 11 blocks are definitely lost in loss
+ record 16 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0847: safe_malloc (safemalloc.c:46)
+ by 0x81056D2: malloc_string (string.c:130)
+ by 0x8106B98: dup_string (string.c:678)
+ by 0x80DAD85: add_expanded_addr_ (outheaders.c:134)
+
+ - Fix for valgrind reported error/warning
+ 24 bytes in 1 blocks are definitely lost in loss
+ record 1 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F083B: safe_malloc (safemalloc.c:46)
+ by 0x80C6887: update_header_list (headers.c:575)
+ by 0x809C8BB: state_read_headers (parse_util.c:137)
+ by 0x809C7C8: file_read_headers (parse_util.c:104)
+ by 0x8076770: copy_message_2 (fileio.c:1048)
+
+ - Fix for valgrind reported error/warning
+ 52 bytes in 5 blocks are definitely lost in loss
+ record 6 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F087B: safe_malloc (safemalloc.c:46)
+ by 0x8105706: malloc_string (string.c:130)
+ by 0x81057CC: new_string (string.c:153)
+ by 0x80DB167: make_surface_addr (outheaders.c:235)
+ by 0x8059485: build_address_l (addr_util.c:452)
+
+ - Fix for valgrind reported error/warning
+ 32 bytes in 4 blocks are definitely lost in loss record 5 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F089F: safe_malloc (safemalloc.c:46)
+ by 0x81056BC: malloc_string (string.c:116)
+ by 0x810627F: cat_strings (string.c:434)
+ by 0x80C510B: hdr_text (hdrdecode.c:419)
+ by 0x80C51E6: hdr_to_string (hdrdecode.c:462)
+ by 0x80C5CC3: hdr_decode_from_text (headers.c:36)
+ by 0x80C71C4: give_decoded_header (headers.c:816)
+ by 0x809CB02: state_write_header (parse_util.c:197)
+
+ - Fix for valgrind reported error/warning
+ 32 bytes in 4 blocks are definitely lost in loss record 5 of 26
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F08B3: safe_malloc (safemalloc.c:46)
+ by 0x8104DD1: alloc_simple (streamsched.c:1047)
+
+ - Fix for valgrind reported error/warning
+ 16 bytes in 2 blocks are definitely lost in loss record 1 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F08B3: safe_malloc (safemalloc.c:46)
+ by 0x81056F8: malloc_string (string.c:116)
+ by 0x810582C: new_string (string.c:153)
+ by 0x807B350: enter_helper (in_utils.c:432)
+ by 0x807BECE: optionally_enter2 (in_utils.c:863)
+ by 0x807C01E: optionally_enter (in_utils.c:898)
+
+ - Fix for valgrind reported error/warning
+ 16 bytes in 2 blocks are definitely lost in loss record 1 of 26
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F08CB: safe_malloc (safemalloc.c:46)
+ by 0x80B33D7: cs_stream_from_ascii (cs_binary.c:1508)
+ by 0x8107089: stream_from_string (string.c:799)
+ by 0x807C049: optionally_enter (in_utils.c:909)
+
+ - Fix for valgrind reported error/warning
+ 140 bytes in 1 blocks are definitely lost in loss record 13 of 24
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0996: safe_realloc (safemalloc.c:62)
+ by 0x80E509D: mbx_prepare_read_pop (pop.c:1592)
+
+ - Fix for valgrind reported error/warning
+ 15 bytes in 1 blocks are definitely lost in loss record 1 of 26
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F09A2: safe_realloc (safemalloc.c:62)
+ by 0x80A1357: make_mailcap_arg (mailcap.c:918)
+ by 0x80A1EF8: mailcap_view_command (mailcap.c:1319)
+ by 0x80973A6: prompt_programs_1 (showmsg.c:131)
+ by 0x8097587: prompt_programs_1 (showmsg.c:188)
+ by 0x80975F1: prompt_programs (showmsg.c:211)
+
+ - Fix for valgrind reported error/warning
+ 32 bytes in 2 blocks are definitely lost in loss record 5 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0933: safe_malloc (safemalloc.c:46)
+ by 0x80C6973: update_header_list (headers.c:575)
+ by 0x80C6D3F: read_folder_headers (headers.c:700)
+ by 0x80D5771: prepare_message_access (mbox.c:1351)
+
+ - Fix for valgrind reported error/warning
+ 8 bytes in 1 blocks are definitely lost in loss record 1 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F094F: safe_malloc (safemalloc.c:46)
+ by 0x8105794: malloc_string (string.c:116)
+ by 0x8106CC8: dup_string (string.c:678)
+ by 0x812FEB5: sb_get_line_from_mem (sb_mem.c:69)
+ by 0x8109A89: get_line_from_stringbuffer (stringbuffer.c:177)
+ by 0x8067162: builtinplusplus (builtin++.c:176)
+
+ - Fix for valgrind reported error/warning
+ 55 bytes in 2 blocks are definitely lost in loss record 6 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F099F: safe_malloc (safemalloc.c:46)
+ by 0x80FDE2A: malloc_service_entry (service_list.c:198)
+
+ - Fix for valgrind reported error/warning
+ 3 bytes in 1 blocks are definitely lost in loss record 1 of 25
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F099F: safe_malloc (safemalloc.c:46)
+ by 0x81221FC: imap_got_header_line (imap.c:5794)
+ by 0x8122863: mbx_copy_header_imap (imap.c:5991)
+
+ - Fix for valgrind reported error/warning
+ 4050 bytes in 67 blocks are definitely lost in loss
+ record 21 of 24
+ at 0x4015E8A3: realloc (vg_clientfuncs.c:276)
+ by 0x80F0A6E: safe_realloc (safemalloc.c:62)
+ by 0x80E0025: elm_vmessage (output.c:1229)
+ by 0x80E0881: elm_message (output.c:1460)
+ by 0x8121F12: mbx_copy_envelope_imap (imap.c:5687)
+
+ - Fix for valgrind reported error/warning
+ 9 bytes in 1 blocks are definitely lost in loss record 2 of 30
+ at 0x4015E30F: malloc (vg_clientfuncs.c:103)
+ by 0x80F0B37: safe_strdup (safemalloc.c:78)
+ by 0x80FB31A: probe_imap_capa_lib (shared.c:1010)
+
+ - Fix for valgrind reported error/warning
+ 40 bytes in 1 blocks are definitely lost in loss record 6 of 29
+ at 0x4015E8A3: realloc (vg_clientfuncs.c:276)
+ by 0x80F0A6E: safe_realloc (safemalloc.c:62)
+ by 0x80E0209: elm_vmessage (output.c:1281)
+ by 0x80E0881: elm_message (output.c:1460)
+ by 0x4146ED0A: smtp_common_mailer_backend (smtp.c:1026)
+
+ - Fix for valgrind reported error
+ Invalid read of size 4
+ at 0x80C0994: debug_level_check (debug.c:256)
+ by 0x80F0B22: safe_realloc (safemalloc.c:69)
+ by 0x80C08B1: set_debugging (debug.c:214)
+
+ Changes of Elm2.4ME+ PL101b (25) compared with Elm2.4ME+ PL101a (25)
+ --------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch makes possible to set
+ incoming-mailbox = $USER@imap-sever on
+ elm.rc, fixes crash caused by certain
+ headers on .elm/elmheaders and
+ fixes another crash when displaying EUC
+ mail. Reply-To header on .elm/elmheaders
+ is no longer ignored.
+
+ - "We're setting up Elm 2.4ME+ PL99b (25) for use as an
+ IMAP client to our mailserver, and I ran into a problem
+ when configuring the main elm.rc file.
+
+ I wanted to be able to set the incoming-mailbox variable
+ to be $USER@engmail, so that by default users would be
+ prompted for a password, and mail would be retrieved from
+ their engmail account.
+
+ However, when I set "incoming-mailbox = $USER@engmail"
+ and ran elm, I got:
+
+ Cannot initialize "incoming-mailbox" -
+ error expanding "$USER@engmail".
+
+ I traced the problem to the expand_path() routine in the
+ lib/expand.c file. The environment variable expansion was
+ using '/' as its only delimiter, so that the $USER portion
+ wasn't being split off from the remainder of the path, and
+ the environment variable lookup failed.
+
+ By adding '@' to the possible delimiters, the problem goes
+ away."
+ From: Paul D. McKone <pdmc...@engmail.uwaterloo.ca>
+
+ - Adding X-ELM-OSV, X-Mailer or Content-Name headers to
+ .elm/elmheaders was causing crash (now they are ignored.)
+
+ - Do not ignore reply-to header on .elm/elmheaders.
+ Problem noted by: Rui Aguiar <rui...@it.pt>
+
+ - Fix crash
+ ISO2022 PANIC in cs_iso2022.c:836:state_add_raw
+ >>>Value not in range 0-255
+
+ Changes of Elm2.4ME+ PL101a (25) compared with Elm2.4ME+ PL101 (25)
+ -------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch fixes crash on internal mailcap parser
+ and on header editing screen.
+
+ - Fix (harmless) error message
+ bin/elmregister: [on_current] Bad command letter: s
+ (occurs when upgrading version.)
+ - Fix elmregister message
+ Keeping link .../elmuninstall.1 from old version (was (null))
+
+ - Running of test= on internal mailcap parser was causing
+ segmentation violation
+
+ - Fix crash on header editing screen
Changes of Elm2.4ME+ PL101 (25) compared with Elm2.4ME+ PL100 (25)
------------------------------------------------------------------
Index: elm2.4.ME+.102cvs/Configure
*** elm2.4.ME+.101/Configure 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/Configure 2003-05-25 14:19:56.000000000 +0300
***************
*** 8,14 ****
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.144 2003/03/19 17:48:00 hurtta Exp $
#
: sanity checks
--- 8,14 ----
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.145 2003/05/25 11:19:56 hurtta Exp $
#
: sanity checks
***************
*** 316,321 ****
--- 316,322 ----
d_shared_rev=''
d_dlopen_libs=''
shared_list=''
+ shared_register=''
dlopen_lib='';
rpath_opt=''
soname_opt=''
***************
*** 6404,6409 ****
--- 6405,6450 ----
)
done
+ case "$shared_register" in
+ '')
+ dflt="$shared_list"
+ ;;
+ *)
+ dflt="$shared_register"
+ ;;
+ esac
+ $cat <<EOF
+
+ These shared libraries
+ $shared_list
+ may be registered after installation, by writing to the global elm.rc file
+ varible use-library. Give list which libraries from these should be registered.
+ Give "none" if no libraries should be registered automatically.
+
+ EOF
+
+ rp="Libraries for registeration? [$dflt]"
+ echo $n "$rp $c"
+ . myread
+
+ case "$ans" in
+ none)
+ shared_register=none
+ ;;
+ *)
+ shared_register=
+ for doconfig in $ans ; do
+ if $test -r ../shared_libs/$doconfig/config.res ; then
+ shared_register="$shared_register $doconfig"
+ else
+ echo "Library $doconfig not available"
+ fi
+ done
+ echo "Will register following libraries: $shared_register"
+ echo
+ ;;
+ esac
+
fi
: the "config.over" file can be used to patch configuration changes
***************
*** 6617,6622 ****
--- 6658,6664 ----
d_shared_rev='$d_shared_rev'
d_dlopen_libs='$d_dlopen_libs'
shared_list='$shared_list'
+ shared_register='$shared_register'
d_dynamic_main='$d_dynamic_main'
dynamic_opt='$dynamic_opt'
dlopen_lib="$dlopen_lib"
Index: elm2.4.ME+.102cvs/doc/elmlibregister.1
*** /tmp/2329-very-long-file-name-NULL-comes-in-here 2003-05-28 21:40:26.000000000 +0300
--- elm2.4.ME+.102cvs/doc/elmlibregister.1 2003-05-25 16:57:45.000000000 +0300
***************
*** 0 ****
--- 1,63 ----
+ .if n \{\
+ . ds ct "
+ .\}
+ .if t \{\
+ . ds ct \\(co
+ .\}
+ .TH ELMLIBREGISTER 1L "Elm Version 2.4ME+" "Kari Hurtta"
+ .SH NAME
+ elmlibregister - Registry of elm libraries to use-library line on elm.rc
+ .SH SYNOPSIS
+ .B #LIB#/elmlibregister
+ [
+ .B \-G
+ .B \-d
+ .I "\fIclass\fR=\fIdebugfile\fR:\fIlevel\fR"
+ .B \-I
+ .B \-w
+ target-file
+ ]
+ [ libtags... ]
+ .PP
+ .SH DESCRIPTION
+ .I Elmlibregister\^
+ is a part of the
+ .B Elm 2.4ME+
+ mail system.
+ Elmlibregister checks that libraries given on use-library on elm.rc
+ (or on .elm/elmrc) are loadable.
+ Configure asks which libraries should be registered on
+ on (post-)install time. Elmlibregister command is used to
+ add these libraries to use-library line on global elm.rc.
+ .PP
+ Options are:
+ .TP 1.0i
+ .B " -G"
+ Read global configuration files only (by default user
+ configuration files are read.)
+ .TP
+ .B " -d \fIclass\fR=\fIdebugfile\fR:\fIlevel\fR "
+ Debug - set specified debug level - Output to "$HOME/ELMLIBREGISTER:debug.info"
+ if
+ .I debugfile
+ is not given. Has no effect unless
+ .I elmrc-write
+ was compiled with debugging enabled.
+ .TP
+ .B " -w" target-file
+ Gives file for output.
+ .TP
+ .B " -I"
+ Use system RC file (#ETC#/elm.rc) or individual RC file
+ ($HOME/.elm/elmrc) as target file.
+ .SH AUTHOR
+ Kari Hurtta
+ .SH FILES
+ #ETC#/elm.rc system RC file
+ .br
+ $HOME/.elm/elmrc individual RC file
+ .br
+ .SH BUG REPORTS TO
+ Kari Hurtta hurtt...@ozone.fmi.fi
+ .SH COPYRIGHTS
+ \fB\*(ct\fRCopyright 2003 by Kari Hurtta
Index: elm2.4.ME+.102cvs/doc/Makefile.SH
*** elm2.4.ME+.101/doc/Makefile.SH 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/doc/Makefile.SH 2003-05-28 19:43:07.000000000 +0300
***************
*** 17,23 ****
cat >Makefile <<!GROK!THIS!
#!$make
#
! # $Id: Makefile.SH,v 1.25 2003/03/17 18:42:25 hurtta Exp $
#
# Makefile for the documentation of the ELM mail system
#
--- 17,23 ----
cat >Makefile <<!GROK!THIS!
#!$make
#
! # $Id: Makefile.SH,v 1.28 2003/05/28 16:43:07 hurtta Exp $
#
# Makefile for the documentation of the ELM mail system
#
***************
*** 51,56 ****
--- 51,73 ----
PACKER = $packer
!GROK!THIS!
+
+ case "$d_dlopen_libs" in
+ define) regman="\$(MAN)/elmlibregister\$(MANEXT)"
+ regcat="\$(CATMAN)/elmlibregister\$(CATMANEXT)\$(SUFFIX)"
+ regcatman="catman/elmregister\$(CATMANEXT)\$(SUFFIX)"
+ ;;
+ *) regman=
+ regcat=
+ regcatman=
+ ;;
+ esac
+ cat >>Makefile <<!GROK!THIS!
+ REGMAN = $regman
+ REGCAT = $regcat
+ REGCATMAN = $regcatman
+
+ !GROK!THIS!
if $test "$roff" != none ; then
cat >>Makefile <<!GROK!THIS!
# List of formatted guides (obsolete)
***************
*** 88,116 ****
;;
esac
- cat >>Makefile <<!GROK!THIS!
- all:
- @if \$(TEST) $catmansrc != none; then \$(MAKE) formatted_pages ; else true ; fi
-
- install_s: \$(LIB_LIST)
- @if \$(TEST) $mansrc != none; then \$(MAKE) install_man ; else true ; fi
- @if \$(TEST) $catmansrc != none; then \$(MAKE) install_catman ; else true ; fi
-
- uninstall_s:
- \$(REG) rm \$(LIB_LIST)
- @if \$(TEST) $mansrc != none; then \
- \$(REG) rm \$(MAN_LIST) \$(MAN)/wnewmail\$(MANEXT) \$(MAN)/nfrm\$(MANEXT) \$(MAN)/elmuninstall\$(MANEXT); \
- else \
- true ; \
- fi
- @if \$(TEST) $catmansrc != none; then \
- \$(REG) rm \$(CATMAN_LIST) \$(CATMAN)/wnewmail\$(CATMANEXT)\$(SUFFIX) \$(CATMAN)/nfrm\$(CATMANEXT)\$(SUFFIX) \$(CATMAN)/elmuninstall\$(CATMANEXT)\$(SUFFIX); \
- else \
- true ; \
- fi
-
- !GROK!THIS!
-
cat >>Makefile <<'!NO!SUBS!'
# Other variables
--- 105,110 ----
***************
*** 136,142 ****
$(MAN)/elmunidata$(MANEXT) \
$(MAN)/elmstringconvert$(MANEXT) \
$(MAN)/prlong$(MANEXT) \
! $(MAN)/elmregister$(MANEXT)
# List of installed catman pages (except for wnemail.1 - handled differently)
CATMAN_LIST = $(CATMAN)/answer$(CATMANEXT)$(SUFFIX) \
--- 130,137 ----
$(MAN)/elmunidata$(MANEXT) \
$(MAN)/elmstringconvert$(MANEXT) \
$(MAN)/prlong$(MANEXT) \
! $(MAN)/elmregister$(MANEXT) \
! $(REGMAN)
# List of installed catman pages (except for wnemail.1 - handled differently)
CATMAN_LIST = $(CATMAN)/answer$(CATMANEXT)$(SUFFIX) \
***************
*** 157,163 ****
$(CATMAN)/elmunidata$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/elmstringconvert$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/prlong$(CATMANEXT)$(SUFFIX) \
! $(CATMAN)/elmregister$(CATMANEXT)$(SUFFIX)
# List of formatted pages for catman
FORMATTED_PAGES_LIST = catman/answer$(CATMANEXT)$(SUFFIX) \
--- 152,159 ----
$(CATMAN)/elmunidata$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/elmstringconvert$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/prlong$(CATMANEXT)$(SUFFIX) \
! $(CATMAN)/elmregister$(CATMANEXT)$(SUFFIX) \
! $(REGCAT)
# List of formatted pages for catman
FORMATTED_PAGES_LIST = catman/answer$(CATMANEXT)$(SUFFIX) \
***************
*** 178,184 ****
catman/elmunidata$(CATMANEXT)$(SUFFIX) \
catman/elmstringconvert$(CATMANEXT)$(SUFFIX) \
catman/prlong$(CATMANEXT)$(SUFFIX) \
! catman/elmregister$(CATMANEXT)$(SUFFIX)
# List of files installed in LIB directory
LIB_LIST = $(LIB)/elm-help.0 \
--- 174,181 ----
catman/elmunidata$(CATMANEXT)$(SUFFIX) \
catman/elmstringconvert$(CATMANEXT)$(SUFFIX) \
catman/prlong$(CATMANEXT)$(SUFFIX) \
! catman/elmregister$(CATMANEXT)$(SUFFIX) \
! $(REGCATMAN)
# List of files installed in LIB directory
LIB_LIST = $(LIB)/elm-help.0 \
***************
*** 189,194 ****
--- 186,218 ----
# Targets
+
+ !NO!SUBS!
+
+ cat >>Makefile <<!GROK!THIS!
+ all:
+ @if \$(TEST) $catmansrc != none; then \$(MAKE) formatted_pages ; else true ; fi
+
+ install_s: \$(LIB_LIST)
+ @if \$(TEST) $mansrc != none; then \$(MAKE) install_man ; else true ; fi
+ @if \$(TEST) $catmansrc != none; then \$(MAKE) install_catman ; else true ; fi
+
+ uninstall_s:
+ \$(REG) rm \$(LIB_LIST)
+ @if \$(TEST) $mansrc != none; then \
+ \$(REG) rm \$(MAN_LIST) \$(MAN)/wnewmail\$(MANEXT) \$(MAN)/nfrm\$(MANEXT) \$(MAN)/elmuninstall\$(MANEXT); \
+ else \
+ true ; \
+ fi
+ @if \$(TEST) $catmansrc != none; then \
+ \$(REG) rm \$(CATMAN_LIST) \$(CATMAN)/wnewmail\$(CATMANEXT)\$(SUFFIX) \$(CATMAN)/nfrm\$(CATMANEXT)\$(SUFFIX) \$(CATMAN)/elmuninstall\$(CATMANEXT)\$(SUFFIX); \
+ else \
+ true ; \
+ fi
+
+ !GROK!THIS!
+
+ cat >>Makefile <<'!NO!SUBS!'
# The following are no-ops
lint:
clean:
***************
*** 231,236 ****
--- 255,262 ----
$(SED) $(SUBS) < prlong.1 > prlong.1.subs
elmregister.1.subs: elmregister.1
$(SED) $(SUBS) < elmregister.1 > elmregister.1.subs
+ elmlibregister.1.subs: elmlibregister.1
+ $(SED) $(SUBS) < elmlibregister.1 > elmlibregister.1.subs
formatted_pages: catman $(FORMATTED_PAGES_LIST)
***************
*** 313,318 ****
--- 339,347 ----
$(MAN)/elmregister$(MANEXT): elmregister.1.subs
$(REG) copy -m 444 $? $@
+ $(MAN)/elmlibregister$(MANEXT): elmlibregister.1.subs
+ $(REG) copy -m 444 $? $@
+
$(MAN)/wnewmail$(MANEXT): $(MAN)/newmail$(MANEXT)
$(REG) link $? $@
***************
*** 400,405 ****
--- 429,437 ----
$(CATMAN)/elmregister$(CATMANEXT)$(SUFFIX): catman/elmregister$(CATMANEXT)$(SUFFIX)
$(REG) copy -m 444 $? $@
+ $(CATMAN)/elmlibregister$(CATMANEXT)$(SUFFIX): catman/elmlibregister$(CATMANEXT)$(SUFFIX)
+ $(REG) copy -m 444 $? $@
+
# Dependencies and rules for making catman pages
catman/answer$(CATMANEXT)$(SUFFIX): answer.1.subs
$(MANROFF) $(MANROFF_OPTS) -man $? > catman/answer$(CATMANEXT)
***************
*** 573,578 ****
--- 605,619 ----
true ; \
fi
+ catman/elmlibregister$(CATMANEXT)$(SUFFIX): elmlibregister.1.subs
+ $(MANROFF) $(MANROFF_OPTS) -man $? > catman/elmlibregister$(CATMANEXT)
+ @if $(TEST) "$(PACKED)" = y ; then \
+ $(RM) $@ ; \
+ $(PACKER) catman/elmlibregister$(CATMANEXT) ; \
+ else \
+ true ; \
+ fi
+
# Dependencies and rules for formatting guides
documentation: $(FORMATTED_LIST)
Index: elm2.4.ME+.102cvs/hdrs/elmlib.h
*** elm2.4.ME+.101/hdrs/elmlib.h 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/hdrs/elmlib.h 2003-05-25 14:19:57.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmlib.h,v 1.186 2003/03/17 16:04:00 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.186 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmlib.h,v 1.188 2003/05/25 11:19:57 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.188 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 1091,1097 ****
SESSIONLOCK_REOPEN = 1,
SESSIONLOCK_TRUNCATE = 2,
SESSIONLOCK_CHECK = 3,
! SESSIONLOCK_NONE = 4};
typedef struct folder_type * folder_type_p;
--- 1091,1100 ----
SESSIONLOCK_REOPEN = 1,
SESSIONLOCK_TRUNCATE = 2,
SESSIONLOCK_CHECK = 3,
! SESSIONLOCK_NONE = 4,
! SESSIONLOCK_NONE_CHECKNEW = 0x80 + 4 /* not actually mode */
! };
!
typedef struct folder_type * folder_type_p;
***************
*** 1421,1426 ****
--- 1424,1431 ----
#endif
#ifdef USE_DLOPEN
+ extern void test_and_set_shared P_((char **argv,
+ int will_write)); /* For elmlibregister.c */
extern int use_sharedfunc P_((char **value, int enter));
extern void seed_rand_bits P_((const char *buf, int size,
Index: elm2.4.ME+.102cvs/hdrs/hdr_imp.h
*** elm2.4.ME+.101/hdrs/hdr_imp.h 2002-06-06 18:55:55.000000000 +0300
--- elm2.4.ME+.102cvs/hdrs/hdr_imp.h 2003-04-22 21:34:57.000000000 +0300
***************
*** 28,33 ****
--- 28,39 ----
int demime,
charset_t defcharset,
int replace));
+ int add_replyto_hdr P_((struct mailing_headers * headers,
+ header_ptr X,
+ const char *value,
+ int demime,
+ charset_t defcharset,
+ int replace));
int add_user_hdr P_((struct mailing_headers * headers,
header_ptr X,
const char *value,
Index: elm2.4.ME+.102cvs/hdrs/mbx_imp.h
*** elm2.4.ME+.101/hdrs/mbx_imp.h 2002-06-06 18:55:55.000000000 +0300
--- elm2.4.ME+.102cvs/hdrs/mbx_imp.h 2003-05-09 18:24:37.000000000 +0300
***************
*** 1,7 ****
! /* $Id: mbx_imp.h,v 1.61 2002/06/05 17:34:35 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.61 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! /* $Id: mbx_imp.h,v 1.62 2003/05/09 15:24:37 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.62 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 353,358 ****
--- 353,361 ----
FILE *fh_temp; /* current folder */
FILE *fh_folder; /* current folder */
+ #define FLAG1_CHECKNEW 0x01
+ int flags1; /* Set by sessionlock_folder() */
+
union {
struct SPOOL {
int lock_state;
Index: elm2.4.ME+.102cvs/hdrs/s_elmrc.h
*** elm2.4.ME+.101/hdrs/s_elmrc.h 2002-01-26 13:14:45.000000000 +0200
--- elm2.4.ME+.102cvs/hdrs/s_elmrc.h 2003-05-25 14:19:57.000000000 +0300
***************
*** 11,13 ****
--- 11,14 ----
#define ElmrcSavedAuto 0x9
#define ElmrcNoBothwI 0xa
#define ElmrcSavedAutoWrite 0xb
+ #define ElmrcSavedAutoLIB 0xc
Index: elm2.4.ME+.102cvs/hdrs/s_from.h
*** elm2.4.ME+.101/hdrs/s_from.h 2002-01-26 13:14:45.000000000 +0200
--- elm2.4.ME+.102cvs/hdrs/s_from.h 2003-05-09 19:13:44.000000000 +0300
***************
*** 7,14 ****
#define FromCouldntExpandFilename 0x5
#define FromNotRegularFile 0x6
#define FromNoMail 0x7
! #define FromCouldntOpenFolder 0x8
! #define FromCouldntOpenFolderPlural 0x9
#define FromStringNoMail 0xa
#define FromNoMesgInFolder 0xb
#define FromNoExplainMail 0xc
--- 7,14 ----
#define FromCouldntExpandFilename 0x5
#define FromNotRegularFile 0x6
#define FromNoMail 0x7
! #define FromCouldntOpenX 0x8
! #define FromCouldntOpenFolderOrMailbox 0x9
#define FromStringNoMail 0xa
#define FromNoMesgInFolder 0xb
#define FromNoExplainMail 0xc
***************
*** 38,40 ****
--- 38,43 ----
#define FromReadOrUnread 0x24
#define FromUnknown 0x25
#define FromArgsIngoringDebug 0x26
+ #define FromNotMailbox 0x27
+ #define FromNoMesgInMailbox 0x28
+ #define FromNoExplainMessagesMbox 0x29
Index: elm2.4.ME+.102cvs/hdrs/s_me.h
*** elm2.4.ME+.101/hdrs/s_me.h 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/hdrs/s_me.h 2003-05-25 14:19:57.000000000 +0300
***************
*** 315,317 ****
--- 315,321 ----
#define MeMailcapRunningOK 0x14f
#define MeUnknownTerminalFlag 0x150
#define MeFailLink 0x151
+ #define MeLibraryRegistered 0x152
+ #define MeLibraryUnRegistered 0x153
+ #define MeLibraryAvailable 0x154
+ #define MeLibraryUnavailable 0x155
Index: elm2.4.ME+.102cvs/lib/charset.c
*** elm2.4.ME+.101/lib/charset.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/charset.c 2003-05-17 19:13:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: charset.c,v 1.70 2002/11/10 11:25:31 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.70 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: charset.c,v 1.71 2003/05/17 16:13:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 985,990 ****
--- 985,991 ----
new_vals.MIBenum = 0;
}
+ free(val); val = NULL;
} else if (0 == strcmp(opt,"MIME-subset")) {
reallocation_needed = 1;
Index: elm2.4.ME+.102cvs/lib/cs_iso2022.c
*** elm2.4.ME+.101/lib/cs_iso2022.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/cs_iso2022.c 2003-05-26 18:19:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.31 2002/07/29 17:34:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.31 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.32 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.32 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 2185,2191 ****
if (-1 != x) {
struct iso2022_setid ID;
- int setnum;
char *c = NULL;
if (x < 0 ||
--- 2185,2190 ----
***************
*** 2205,2211 ****
"Bad initial_bank (bank number)",
0);
! setnum=set_initial_bank(&c,ID,output_state,NULL,0,0);
if (c) {
int l = strlen(c);
--- 2204,2210 ----
"Bad initial_bank (bank number)",
0);
! set_initial_bank(&c,ID,output_state,NULL,0,0);
if (c) {
int l = strlen(c);
***************
*** 2282,2288 ****
int char_added = 0;
if (*need_reset) {
- int i;
RESET_ROUTINE(ret,len,alloced,output_state,iso2022_info);
--- 2281,2286 ----
Index: elm2.4.ME+.102cvs/lib/debug.c
*** elm2.4.ME+.101/lib/debug.c 2002-06-06 18:55:56.000000000 +0300
--- elm2.4.ME+.102cvs/lib/debug.c 2003-05-17 19:13:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: debug.c,v 1.18 2002/06/01 12:58:16 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: debug.c,v 1.19 2003/05/17 16:13:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 134,139 ****
--- 134,141 ----
char * match_filename = NULL;
struct class_level_pair C;
+ struct class_level_pair *tmp1;
+
DEBUG_VAR(temp,__FILE__,"");
char * ptr;
***************
*** 208,219 ****
if (home[0])
init_debug(X);
! debug_list = X;
}
! X->match = safe_realloc(X->match,
! (1 + X->match_count) * sizeof (X->match[0]));
! X->match[X->match_count++] = C;
if (!debug_list)
atexit(close_all);
--- 210,237 ----
if (home[0])
init_debug(X);
!
!
! debug_list = X;
}
!
! /* safe_realloc() calls DPRINT and therefore may refere X->match
! before it is assigned .. so we do not use safe_realloc()
! on here ... */
!
! tmp1 = realloc(X->match,
! (1 + X->match_count) * sizeof (X->match[0]));
!
! if (tmp1) {
! X->match = tmp1;
! X->match[X->match_count++] = C;
! } else {
! debug_action_call(&temp,
! "Can't alloc memory for class %s at debug level %d (size %d)\n",
! C.class,C.level,
! (1 + X->match_count) * sizeof (X->match[0]));
! }
if (!debug_list)
atexit(close_all);
Index: elm2.4.ME+.102cvs/lib/expand.c
*** elm2.4.ME+.101/lib/expand.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/lib/expand.c 2003-04-12 11:16:23.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: expand.c,v 1.15 2003/02/17 17:36:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: expand.c,v 1.16 2003/04/12 08:16:23 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.16 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 87,93 ****
int len, p;
char envname_buf[SLEN];
! if ((len = strcspn(src, "/")) == 0)
len = strlen(src);
src += len;
strnfcpy(envname_buf, envname_front, len,
--- 87,93 ----
int len, p;
char envname_buf[SLEN];
! if ((len = strcspn(src, "/@")) == 0)
len = strlen(src);
src += len;
strnfcpy(envname_buf, envname_front, len,
Index: elm2.4.ME+.102cvs/lib/getaddr.c
*** elm2.4.ME+.101/lib/getaddr.c 2002-01-26 13:14:45.000000000 +0200
--- elm2.4.ME+.102cvs/lib/getaddr.c 2003-05-17 19:13:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: getaddr.c,v 1.19 2001/06/06 18:08:59 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: getaddr.c,v 1.20 2003/05/17 16:13:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 672,682 ****
free(ptr->addr);
ptr->addr = NULL;
! free(ptr->fullname);
! ptr->fullname = NULL;
! free(ptr->comment);
! ptr->comment = NULL;
}
free(list);
}
--- 672,680 ----
free(ptr->addr);
ptr->addr = NULL;
! free_string(& (ptr->fullname));
! free_string (& (ptr->comment));
}
free(list);
}
Index: elm2.4.ME+.102cvs/lib/hdrdecode.c
*** elm2.4.ME+.101/lib/hdrdecode.c 2002-01-26 13:14:46.000000000 +0200
--- elm2.4.ME+.102cvs/lib/hdrdecode.c 2003-05-17 19:13:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrdecode.c,v 1.10 2001/08/25 11:56:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrdecode.c,v 1.11 2003/05/17 16:13:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 280,285 ****
--- 280,286 ----
/* Now compine strings */
newresult = cat_strings(ret,ok,1);
free_string(&ret);
+ free_string(&ok);
ret = newresult;
***************
*** 352,357 ****
--- 353,359 ----
/* Now compine strings */
newresult = cat_strings(ret,ok,1);
free_string(&ret);
+ free_string(&ok);
ret = newresult;
last_char = 0;
***************
*** 416,421 ****
--- 418,424 ----
/* Now compine strings */
newresult = cat_strings(ret,ok,1);
free_string(&ret);
+ free_string(&ok);
ret = newresult;
if (nostore) {
Index: elm2.4.ME+.102cvs/lib/headers.c
*** elm2.4.ME+.101/lib/headers.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/headers.c 2003-04-22 21:34:57.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: headers.c,v 1.22 2002/12/10 20:11:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.22 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: headers.c,v 1.24 2003/04/22 18:34:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 416,422 ****
{ "Comments", hdr_decode_from_text, no_add_to_mail_hdr },
{ "Return-path", hdr_decode_from_comment, add_env_from_hdr },
{ "Received", hdr_decode_from_comment, no_add_to_mail_hdr },
! { "Reply-To", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "From", hdr_decode_from_addr, add_from_hdr },
{ "Sender", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Resent-Reply-To", hdr_decode_from_addr, no_add_to_mail_hdr },
--- 416,422 ----
{ "Comments", hdr_decode_from_text, no_add_to_mail_hdr },
{ "Return-path", hdr_decode_from_comment, add_env_from_hdr },
{ "Received", hdr_decode_from_comment, no_add_to_mail_hdr },
! { "Reply-To", hdr_decode_from_addr, add_replyto_hdr },
{ "From", hdr_decode_from_addr, add_from_hdr },
{ "Sender", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Resent-Reply-To", hdr_decode_from_addr, no_add_to_mail_hdr },
***************
*** 473,481 ****
{ "Sensitivity", hdr_decode_from_comment, no_add_to_mail_hdr },
/* Our non-standard headers */
! { "X-ELM-OSV", hdr_decode_from_comment },
! { "X-Mailer", hdr_decode_from_text },
! { "Content-Name", hdr_decode_from_text },
/* Tailer */
{ NULL, hdr_decode_from_raw, no_add_to_mail_hdr }
--- 473,481 ----
{ "Sensitivity", hdr_decode_from_comment, no_add_to_mail_hdr },
/* Our non-standard headers */
! { "X-ELM-OSV", hdr_decode_from_comment, no_add_to_mail_hdr },
! { "X-Mailer", hdr_decode_from_text, no_add_to_mail_hdr },
! { "Content-Name", hdr_decode_from_text, no_add_to_mail_hdr },
/* Tailer */
{ NULL, hdr_decode_from_raw, no_add_to_mail_hdr }
Index: elm2.4.ME+.102cvs/lib/imap.c
*** elm2.4.ME+.101/lib/imap.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/imap.c 2003-05-17 19:13:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: imap.c,v 1.97 2002/11/30 20:34:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.97 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: imap.c,v 1.99 2003/05/17 16:13:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.99 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 4862,4867 ****
--- 4862,4868 ----
folder -> p->fh_temp = NULL;
folder -> p->fh_folder = NULL;
+ folder ->p->flags1 = 0;
folder -> p->a.imap_mbx.Ch = create_connection(&IMAP_connection);
folder -> p->a.imap_mbx.Ch->f = folder; /* Back link */
***************
*** 5699,5706 ****
"mbx_copy_envelope_imap: real_from() failed with generated separator line: %s\n",
tmp));
! if (data)
! free(data);
data = NULL;
goto clean;
--- 5700,5706 ----
"mbx_copy_envelope_imap: real_from() failed with generated separator line: %s\n",
tmp));
! free(data);
data = NULL;
goto clean;
***************
*** 5716,5729 ****
if (!mbx_copy_line_to_temp(folder,data,l)) {
status = 0;
! if (data)
! free(data);
data = NULL;
goto clean;
}
read_state_ptr -> fbytes += l;
read_state_ptr -> linecounter++;
}
read_state_ptr->a.imap_mbx.data_idx = 0;
--- 5716,5731 ----
if (!mbx_copy_line_to_temp(folder,data,l)) {
status = 0;
! free(data);
data = NULL;
goto clean;
}
read_state_ptr -> fbytes += l;
read_state_ptr -> linecounter++;
+
+ free(data);
+ data = NULL;
}
read_state_ptr->a.imap_mbx.data_idx = 0;
***************
*** 5795,5800 ****
--- 5797,5803 ----
memcpy(*buffer,
ref->header + read_state_ptr->a.imap_mbx.data_idx,
*len);
+ (*buffer)[*len] = '\0';
DPRINT(Debug,65,(&Debug,
"imap_got_header_line=1: len=%d, buffer=%.*s",
***************
*** 5928,5933 ****
--- 5931,5942 ----
}
hide:
+ if (buffer1) {
+ DPRINT(Debug,11,(&Debug, " ... Freeing buffer1=%s\n",buffer1));
+ free(buffer1);
+ buffer1 = NULL;
+ }
+
if (!imap_got_header_line(folder,read_state_ptr,&buffer1,&len1,ref)) {
status = 0;
goto clean;
Index: elm2.4.ME+.102cvs/lib/iso2022.c
*** elm2.4.ME+.101/lib/iso2022.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/iso2022.c 2003-05-26 18:19:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.20 2002/07/29 09:00:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.21 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.21 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 1827,1833 ****
left_right = 1;
if (left_right >= 0) {
- enum iso2022_bank bank = bank_unspecified;
for (i= 0; iso2022_banks[i].keyword; i++)
if (0 == strcmp(iso2022_banks[i].keyword,value))
--- 1827,1832 ----
Index: elm2.4.ME+.102cvs/lib/localmbx.c
*** elm2.4.ME+.101/lib/localmbx.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/localmbx.c 2003-05-11 23:42:43.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.57 2002/12/11 17:58:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.57 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.59 2003/05/11 20:42:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.59 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 2036,2041 ****
--- 2036,2043 ----
folder ->p->fh_temp = NULL;
folder ->p->fh_folder = NULL;
+ folder ->p->flags1 = 0;
+
}
static void mbx_init_spool P_((struct folder_info *folder));
***************
*** 2055,2060 ****
--- 2057,2063 ----
bzero((void *)folder -> p,sizeof (struct private_data));
folder ->p->fh_temp = NULL;
folder ->p->fh_folder = NULL;
+ folder ->p->flags1 = 0;
folder -> p -> a.spool.lock_state = OFF;
#ifdef USE_DOTLOCK_LOCKING
***************
*** 3156,3180 ****
read_state_ptr -> linecounter = 0; /* Linecounter of current
message */
entry->offset = read_state_ptr -> fbytes; /* Offset of current message */
- entry->status = VISIBLE | UNREAD; /* Default status of message */
! switch(def_folder_status) {
! case FOLDER_STATUS_READ:
! entry->status = VISIBLE;
! break;
! case FOLDER_STATUS_OLD:
! entry->status = VISIBLE | UNREAD;
! break;
! case FOLDER_STATUS_NEW:
! entry->status = VISIBLE | NEW | UNREAD;
! break;
! default:
! DPRINT(Debug,1,(&Debug,
! "default-folder-status=%d BAD\n",
! def_folder_status));
}
- DPRINT(Debug,11,(&Debug, " status=%x -- def_folder_status=%d\n",
- entry->status,entry->status));
if (!mbx_read_buffered_line(folder,read_state_ptr,
&buffer,&len)) {
--- 3159,3192 ----
read_state_ptr -> linecounter = 0; /* Linecounter of current
message */
entry->offset = read_state_ptr -> fbytes; /* Offset of current message */
!
! if ( FLAG1_CHECKNEW & folder -> p -> flags1 ) {
! /* Really treat as mailbox and not as folder ... */
! entry->status = VISIBLE | NEW | UNREAD; /* Default status of message */
!
! } else {
!
! entry->status = VISIBLE | UNREAD; /* Default status of message */
!
! switch(def_folder_status) {
! case FOLDER_STATUS_READ:
! entry->status = VISIBLE;
! break;
! case FOLDER_STATUS_OLD:
! entry->status = VISIBLE | UNREAD;
! break;
! case FOLDER_STATUS_NEW:
! entry->status = VISIBLE | NEW | UNREAD;
! break;
! default:
! DPRINT(Debug,1,(&Debug,
! "default-folder-status=%d BAD\n",
! def_folder_status));
! }
! DPRINT(Debug,11,(&Debug, " status=%x -- def_folder_status=%d\n",
! entry->status,entry->status));
}
if (!mbx_read_buffered_line(folder,read_state_ptr,
&buffer,&len)) {
Index: elm2.4.ME+.102cvs/lib/mbox.c
*** elm2.4.ME+.101/lib/mbox.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/mbox.c 2003-05-17 19:13:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.43 2002/12/08 14:30:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.43 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.46 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 874,879 ****
--- 874,883 ----
new_folder -> folder_type->init_it(new_folder);
}
+ /* HACK */
+ if (new_folder->p)
+ new_folder->p->flags1 = 0;
+
#if 0
DPRINT(Debug,1,(&Debug,
"New folder %s type %s temp file %s (%s)\n",
***************
*** 991,996 ****
--- 995,1020 ----
folder,folder->cur_folder_sys,folder -> folder_type,
folder->folder_type->type_name));
+ /* HACK */
+
+ if (folder->p)
+ folder->p->flags1 = 0;
+
+ switch (mode) {
+ case SESSIONLOCK_NONE_CHECKNEW:
+
+ if (folder->p)
+ folder->p->flags1 |= FLAG1_CHECKNEW;
+ else {
+ DPRINT(Debug,10,(&Debug,
+ "sessionlock_folder: SESSIONLOCK_NONE_CHECKNEW unsupported\n"));
+
+ }
+
+ mode = SESSIONLOCK_NONE;
+ break;
+ }
+
ret = folder->folder_type->sessionlock_it(folder,mode);
DPRINT(Debug,10,(&Debug,
***************
*** 1342,1348 ****
if (status > 0) {
! header_list_ptr parsed_headers;
DPRINT(Debug,12,(&Debug,
"prepare_message_access: hdr %ld body %ld\n",
--- 1366,1372 ----
if (status > 0) {
! header_list_ptr parsed_headers = NULL;
DPRINT(Debug,12,(&Debug,
"prepare_message_access: hdr %ld body %ld\n",
***************
*** 1356,1362 ****
DPRINT(Debug,10,(&Debug,
"prepare_message_access: parse_header callback failed (%d)\n",
status));
! goto fail2;
}
status = parse_body(folder,read_state_ptr,entry,parsed_headers,counter);
--- 1380,1386 ----
DPRINT(Debug,10,(&Debug,
"prepare_message_access: parse_header callback failed (%d)\n",
status));
! goto fail3;
}
status = parse_body(folder,read_state_ptr,entry,parsed_headers,counter);
***************
*** 1365,1370 ****
--- 1389,1398 ----
"prepare_message_access: parse_body callback failed (%d)\n",
status));
}
+ fail3:
+ if (parsed_headers) {
+ delete_headers(&parsed_headers);
+ }
}
fail2:
Index: elm2.4.ME+.102cvs/lib/outheaders.c
*** elm2.4.ME+.101/lib/outheaders.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/outheaders.c 2003-04-22 21:34:57.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.10 2002/07/04 15:40:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.11 2003/04/22 18:34:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 401,406 ****
--- 401,442 ----
}
#ifdef ANSI_C
+ hdr_add_to_mailing_hdr add_replyto_hdr;
+ #endif
+ int add_replyto_hdr(headers,X,value,demime,defcharset,replace)
+ struct mailing_headers * headers;
+ header_ptr X;
+ CONST char *value;
+ int demime;
+ charset_t defcharset;
+ int replace;
+ {
+ int j;
+
+ struct addr_item * TMP;
+
+ TMP = break_down_address(value,demime,defcharset);
+
+ if (replace)
+ free_expanded_address(&(headers->reply_to));
+
+ for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
+ int pos = add_expanded_addr_(&(headers->reply_to),
+ TMP[j].addr,
+ TMP[j].fullname,
+ TMP[j].comment);
+ struct string *s = make_surface_addr(TMP[j]);
+ add_textual_addr_(&(headers->reply_to),s,pos,1);
+ free_string(&s);
+ }
+
+ free_addr_items(TMP);
+
+ return 1;
+ }
+
+
+ #ifdef ANSI_C
hdr_add_to_mailing_hdr add_env_from_hdr;
#endif
int add_env_from_hdr(headers,X,value,demime,defcharset,replace)
Index: elm2.4.ME+.102cvs/lib/pop.c
*** elm2.4.ME+.101/lib/pop.c 2002-06-06 18:55:57.000000000 +0300
--- elm2.4.ME+.102cvs/lib/pop.c 2003-05-17 19:13:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pop.c,v 1.42 2002/06/01 12:58:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pop.c,v 1.44 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 887,892 ****
--- 887,893 ----
folder ->p->fh_temp = NULL;
folder ->p->fh_folder = NULL;
+ folder ->p->flags1 = 0;
zero_remote_account(&(folder -> p->a.pop_mbx.C));
***************
*** 2530,2536 ****
int i;
for (i = 0; i < rs->a.pop_mbx.rfc822_size_count; i++)
rs->a.pop_mbx.rfc822_size_vector[i] = -1;
! rs->a.pop_mbx.uidl_vector = NULL;
}
rs->a.pop_mbx.rfc822_size_count = 0;
}
--- 2531,2538 ----
int i;
for (i = 0; i < rs->a.pop_mbx.rfc822_size_count; i++)
rs->a.pop_mbx.rfc822_size_vector[i] = -1;
! free(rs->a.pop_mbx.rfc822_size_vector);
! rs->a.pop_mbx.rfc822_size_vector = NULL;
}
rs->a.pop_mbx.rfc822_size_count = 0;
}
Index: elm2.4.ME+.102cvs/lib/rc_handle.c
*** elm2.4.ME+.101/lib/rc_handle.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/rc_handle.c 2003-05-17 19:13:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.11 2002/12/08 14:30:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.12 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
****************************************************************************
***************
*** 1127,1133 ****
fieldname,val,recursive));
}
! for (p = val; (*p || start_val) && !quit_flag; p++) {
char * value = NULL;
/* Quarantee that we do not advance bast of \0 */
--- 1127,1133 ----
fieldname,val,recursive));
}
! for (p = val; !quit_flag && (*p || start_val); p++) {
char * value = NULL;
/* Quarantee that we do not advance bast of \0 */
Index: elm2.4.ME+.102cvs/lib/read_rc.c
*** elm2.4.ME+.101/lib/read_rc.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/lib/read_rc.c 2003-05-17 19:13:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.114 2003/03/19 17:48:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.114 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.115 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.115 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 112,118 ****
int clear_pages = 0; /* flag: act like "page" (more -c)? */
int title_messages = 1; /* flag: title message display? */
! nl_catd elm_msg_cat = 0; /* message catalog */
char username[SLEN] = {0}; /* return address name! */
char home[SLEN] = {0}; /* home directory of user */
--- 112,122 ----
int clear_pages = 0; /* flag: act like "page" (more -c)? */
int title_messages = 1; /* flag: title message display? */
! nl_catd elm_msg_cat = 0; /* message catalog */
! /* WARNING: Elm's version uses 0 as failure
! System uses (nl_catd) -1 as failure !
! */
!
char username[SLEN] = {0}; /* return address name! */
char home[SLEN] = {0}; /* home directory of user */
***************
*** 398,431 ****
static int locale_error = 0;
void locale_init () {
-
#ifdef I_LOCALE
! char *res;
! if (setlocale(LC_ALL, "") == NULL) {
! lib_error(FRM("Elm: Unsupported locale (check $LANG)\n"));
! if (setlocale(LC_CTYPE,"") != NULL) {
! lib_error(FRM("Elm: ... but succeed setting of LC_CTYPE\n"));
! } else {
! lib_error(FRM("Elm: ... check also $LC_CTYPE\n"));
! }
! locale_error = 1;
! }
#endif
! elm_msg_cat = catopen("elm2.4me+", 0);
#ifdef I_LOCALE
! res = setlocale(LC_CTYPE,NULL);
! if (!res) {
! lib_error(FRM("Elm: Unable to get current locale (LC_CTYPE)\n"));
! locale_error = 1;
! } else
! strfcpy(display_locale,res, sizeof display_locale);
#endif
#ifdef HAVE_CODESET
! res = nl_langinfo(CODESET);
if (!res) {
lib_error(FRM("Elm: Unable to get CODESET for current locale\n"));
--- 402,452 ----
static int locale_error = 0;
void locale_init () {
#ifdef I_LOCALE
! char *res;
! #endif
!
! DPRINT(Debug,9,(&Debug,
! "locale_init: called = %d\n",
! locale_init_called));
!
! #ifdef I_LOCALE
! if (setlocale(LC_ALL, "") == NULL) {
! lib_error(FRM("Elm: Unsupported locale (check $LANG)\n"));
! if (setlocale(LC_CTYPE,"") != NULL) {
! lib_error(FRM("Elm: ... but succeed setting of LC_CTYPE\n"));
! } else {
! lib_error(FRM("Elm: ... check also $LC_CTYPE\n"));
! }
! locale_error = 1;
! }
#endif
+
+ /* WARNING: Elm's version uses 0 as failure
+ * System uses (nl_catd) -1 as failure !
+ */
!
! elm_msg_cat = catopen("elm2.4me+", 0);
! if (0 == elm_msg_cat ||
! (nl_catd) -1 == elm_msg_cat) {
! DPRINT(Debug,9,(&Debug,
! "locale_init: catopen elm2.4me+ failed\n"));
! }
! /* NOTE: elm_msg_cat 'leaks' on end of program ... */
#ifdef I_LOCALE
! res = setlocale(LC_CTYPE,NULL);
! if (!res) {
! lib_error(FRM("Elm: Unable to get current locale (LC_CTYPE)\n"));
! locale_error = 1;
! } else
! strfcpy(display_locale,res, sizeof display_locale);
#endif
#ifdef HAVE_CODESET
! res = nl_langinfo(CODESET);
if (!res) {
lib_error(FRM("Elm: Unable to get CODESET for current locale\n"));
Index: elm2.4.ME+.102cvs/lib/safemalloc.c
*** elm2.4.ME+.101/lib/safemalloc.c 2002-01-26 13:14:46.000000000 +0200
--- elm2.4.ME+.102cvs/lib/safemalloc.c 2003-05-26 18:19:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: safemalloc.c,v 1.9 2001/06/14 18:25:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: safemalloc.c,v 1.11 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 90,97 ****
void safe_free(x)
malloc_t x;
{
- int i;
- char *p = x;
DPRINT(Debug,100,(&Debug,
"(safe)free(%p) ",x));
--- 90,95 ----
***************
*** 101,112 ****
"** FREE OF NULL POINTER\n"));
}
- for (i = 0; i < 30 && p && p[i]; i++) {
- DPRINT(Debug,100,(&Debug,
- "%c",
- isascii(p[i]) && isprint(p[i]) ? p[i] : '?'));
- }
-
free(x);
DPRINT(Debug,100,(&Debug,
"\n"));
--- 99,104 ----
Index: elm2.4.ME+.102cvs/lib/savefolder.c
*** elm2.4.ME+.101/lib/savefolder.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/lib/savefolder.c 2003-05-17 19:13:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.71 2003/02/28 10:48:14 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.72 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.72 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 2231,2236 ****
--- 2231,2239 ----
{
(*dir)->type->browser_free_it(*dir);
clear_dir_vector(*dir);
+
+ if ((*dir)->selection)
+ clear_dir_selection(*dir);
if ((*dir)->dirname)
free_string(&((*dir)->dirname));
Index: elm2.4.ME+.102cvs/lib/service_list.c
*** elm2.4.ME+.101/lib/service_list.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/service_list.c 2003-05-17 19:13:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.22 2002/06/30 13:52:06 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.22 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.23 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 910,915 ****
--- 910,918 ----
free((*Y)->option_list);
(*Y)->option_list = NULL;
(*Y)->option_count = 0;
+
+ /* Temporary entry is malloced ... */
+ free(*Y);
}
/* If not temporary, we assume that this entry is on list
and therefore that does not produce dangling pointer
Index: elm2.4.ME+.102cvs/lib/shared.c
*** elm2.4.ME+.101/lib/shared.c 2002-06-06 18:55:58.000000000 +0300
--- elm2.4.ME+.102cvs/lib/shared.c 2003-05-27 21:54:13.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared.c,v 1.42 2002/04/01 17:09:47 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared.c,v 1.47 2003/05/27 18:54:13 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.47 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 778,783 ****
--- 778,853 ----
return ret;
}
+ /* For elmlibregister.c -- if argv is NULL only check current list */
+ void test_and_set_shared (argv, will_write)
+ char **argv;
+ int will_write;
+ {
+ int i;
+
+ /* 1) Load current libraries */
+
+ load_shared_libs();
+
+ if (argv) {
+
+ /* 2) Test explicity argument list ....
+ */
+
+ int j;
+
+ for (j = 0; argv[j]; j++) {
+ struct ImpInfo * I;
+ int idx;
+
+ if (!tag_ok(argv[j])) {
+ lib_error(CATGETS(elm_msg_cat, MeSet,
+ MeInvalidUseLib,
+ "use-library: %s: Invalid name"),
+ argv[j]);
+ continue;
+ }
+
+ I = give_impinfo(argv[j]);
+ idx = I - use_library_list;
+
+ /* Assume valid */
+ use_library_list[idx].valid = 1;
+ load_code(idx); /* Test validity */
+
+ if (use_library_list[idx].valid) {
+ if (will_write)
+ lib_error(CATGETS(elm_msg_cat, MeSet,
+ MeLibraryRegistered,
+ "Library %s registered"),
+ argv[j]);
+ else
+ lib_error(CATGETS(elm_msg_cat, MeSet,
+ MeLibraryAvailable,
+ "Library %s is available"),
+ argv[j]);
+ }
+ }
+ }
+
+ for (i = 0; i < use_library_list_count; i++) {
+ if (!use_library_list[i].valid) {
+ if (will_write)
+ lib_error(CATGETS(elm_msg_cat, MeSet,
+ MeLibraryUnRegistered,
+ "Library %s unregistered"),
+ use_library_list[i].tag);
+ else
+ lib_error(CATGETS(elm_msg_cat, MeSet,
+ MeLibraryUnavailable,
+ "Library %s is unavailable"),
+ use_library_list[i].tag);
+
+
+ }
+ }
+ }
+
struct POP_capa_libs {
char * capa;
char * capa_args;
***************
*** 1147,1152 ****
--- 1217,1230 ----
int * imap_capa_libcount;
{
if (*imap_capa_libs) {
+ int i;
+
+ for (i = 0; i < *imap_capa_libcount; i++) {
+ if ((*imap_capa_libs)[i].capa) {
+ free((*imap_capa_libs)[i].capa);
+ (*imap_capa_libs)[i].capa = NULL;
+ }
+ }
free(*imap_capa_libs);
*imap_capa_libs = NULL;
*imap_capa_libcount = 0;
***************
*** 1323,1328 ****
--- 1401,1410 ----
fprintf(F,"%s:\n",
use_library_list[i].tag);
+ DPRINT(Debug,8,(&Debug, " -- library %s -- %d options\n",
+ use_library_list[i].tag,
+ use_library_list[i].rc_option_count));
+
for (x = 0; x < use_library_list[i].rc_option_count; x++) {
int local_value;
***************
*** 1353,1363 ****
local_value =
use_library_list[i].rc_options[x].flags & FL_LOCAL;
! if (!valid_rc_type(use_library_list[i].rc_options[x].dt_type))
panic("RC PANIC",__FILE__,__LINE__,
"print_local_shared_options",
"Bad config item type",0);
!
use_library_list[i].
rc_options[x].dt_type->
print_value(F,
--- 1435,1452 ----
local_value =
use_library_list[i].rc_options[x].flags & FL_LOCAL;
! if (!valid_rc_type(use_library_list[i].rc_options[x].dt_type)) {
! DPRINT(Debug,1,(&Debug,
! "shlib/option %d -- \"%s\" BAD, flags=%0x (library=%s)\n",
! x,use_library_list[i].rc_options[x].name,
! save_info[x].flags,
! use_library_list[i].tag
! ));
!
panic("RC PANIC",__FILE__,__LINE__,
"print_local_shared_options",
"Bad config item type",0);
! }
use_library_list[i].
rc_options[x].dt_type->
print_value(F,
Index: elm2.4.ME+.102cvs/lib/streamsched.c
*** elm2.4.ME+.101/lib/streamsched.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/lib/streamsched.c 2003-05-17 19:13:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.28 2002/12/10 20:11:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.28 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.29 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 180,185 ****
--- 180,190 ----
close(ss->this_stack[stack_idx].simple->socket);
ss->this_stack[stack_idx].simple->socket = -1;
}
+
+ ss->this_stack[stack_idx].simple->type = NULL;
+
+ free(ss->this_stack[stack_idx].simple);
+ ss->this_stack[stack_idx].simple = NULL;
}
static int ss_StreamNoAction P_((struct streamsched *ss, int stack_idx));
Index: elm2.4.ME+.102cvs/lib/terminal.c
*** elm2.4.ME+.101/lib/terminal.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/lib/terminal.c 2003-05-26 18:19:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.35 2003/02/16 18:30:21 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.36 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 1423,1431 ****
if (-1 != x) {
- int n;
struct iso2022_setid ID;
- char * c = NULL;
if (x < 0 ||
x >= sizeof (iso2022_info->sets) /
--- 1423,1429 ----
***************
*** 1444,1450 ****
"Bad initial_bank (bank number)",
0);
! n = set_initial_bank(&ret,ID,terminal_info,NULL,0,0);
}
}
--- 1442,1448 ----
"Bad initial_bank (bank number)",
0);
! set_initial_bank(&ret,ID,terminal_info,NULL,0,0);
}
}
***************
*** 1573,1579 ****
int size;
int maybe_signal;
{
- int i;
int setpos = -1;
if (ID.bank < 0 || ID.bank >= ISO2022_BANK_NUM)
--- 1571,1576 ----
Index: elm2.4.ME+.102cvs/Makefile-1.SH
*** elm2.4.ME+.101/Makefile-1.SH 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/Makefile-1.SH 2003-05-25 14:19:57.000000000 +0300
***************
*** 27,33 ****
echo "Extracting Makefile-1 (with variable substitutions)"
cat >Makefile-1 <<!GROK!THIS!
#!$make
! # $Id: Makefile-1.SH,v 1.3 2003/03/17 18:55:52 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
--- 27,33 ----
echo "Extracting Makefile-1 (with variable substitutions)"
cat >Makefile-1 <<!GROK!THIS!
#!$make
! # $Id: Makefile-1.SH,v 1.4 2003/05/25 11:19:57 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
***************
*** 55,61 ****
uninstall_s:
$(REG) rm $(LOCALETARG) $(LIB)/elm.map.bin/unidata.bin
! install_s: $(LIB) $(ETC) $(STAGE) $(ETC)/elm.rc $(LOCALETARG) $(LIB)/elm.map.bin/unidata.bin
$(ETC)/elm.rc: $(LIB)/elmrc-write doc/elmrc-info
$(REG) {$(LIB)/elmrc-write} -G -I -C {doc/elmrc-info}
--- 55,62 ----
uninstall_s:
$(REG) rm $(LOCALETARG) $(LIB)/elm.map.bin/unidata.bin
! install_s: $(LIB) $(ETC) $(STAGE) $(ETC)/elm.rc $(LOCALETARG) \
! $(LIB)/elm.map.bin/unidata.bin libreg
$(ETC)/elm.rc: $(LIB)/elmrc-write doc/elmrc-info
$(REG) {$(LIB)/elmrc-write} -G -I -C {doc/elmrc-info}
***************
*** 90,93 ****
$(STAGEP):
$(REG) mkdir $(STAGEP)
! !NO!SUBS!
\ No newline at end of file
--- 91,120 ----
$(STAGEP):
$(REG) mkdir $(STAGEP)
! !NO!SUBS!
!
!
! case "$d_dlopen_libs" in
! define)
! aa=
! if $test "$shared_register" != none ; then
! aa="$shared_register"
! fi
! cat >>Makefile-1 <<!SUBS!
!
! # Register new libraries and unregister removed libraries
! # Also libraries which are not loadable are unregistered
! libreg:
! \$(REG) {\$(LIB)/elmlibregister} -G -I $aa
! !SUBS!
!
! ;;
! *)
!
! cat >>Makefile-1 <<'!NO!SUBS!'
!
! !NO!SUBS!
! libreg:
!
! ;;
! esac
Index: elm2.4.ME+.102cvs/Makefile.SH
*** elm2.4.ME+.101/Makefile.SH 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/Makefile.SH 2003-05-18 09:52:49.000000000 +0300
***************
*** 21,27 ****
echo "Extracting Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.14 2003/03/17 11:36:20 hurtta Exp $
#
# Makefile for the entire ELM mail system
#
--- 21,27 ----
echo "Extracting Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.16 2003/05/18 06:52:49 hurtta Exp $
#
# Makefile for the entire ELM mail system
#
***************
*** 72,77 ****
--- 72,86 ----
uninstall: config.h config.sh installer
bin/elmregister master $(MAKE) $(MJ) $(MFLAGS) uninstall_s
+ # Helper target for testing
+ install_libs: config.h config.sh hdrs/sysdefs.h Makefile installer all
+ bin/elmregister master $(MAKE) $(MJ) $(MFLAGS) install_libs_s
+ bin/elmregister replay
+
+ install_libs_s: config.h config.sh hdrs/sysdefs.h
+ cd lib; $(MAKE) $(MJ) $(MFLAGS) install_s
+ cd shared_libs; $(MAKE) $(MJ) $(MFLAGS) install_s
+
# Targets that are simply executed in each subordinate makefile as is
all install_s uninstall_s lint clean: config.h config.sh hdrs/sysdefs.h Makefile
cd lib; $(MAKE) $(MJ) $(MFLAGS) $@
Index: elm2.4.ME+.102cvs/MANIFEST
*** elm2.4.ME+.101/MANIFEST 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/MANIFEST 2003-05-25 16:57:44.000000000 +0300
***************
*** 352,354 ****
--- 352,357 ----
utils/reghelper.c
hdrs/reghelper.h
doc/elmregister.1
+ utils/elmlibregister.c
+ doc/elmlibregister.1
+ doc/elmlibregister.1
Index: elm2.4.ME+.102cvs/melib/mailcap.c
*** elm2.4.ME+.101/melib/mailcap.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/melib/mailcap.c 2003-05-25 19:06:46.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.4 2003/03/18 20:20:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.8 2003/05/25 16:06:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 60,67 ****
struct agv1 {
enum arg_type { mv_literal,
! mv_filename, mv_type, mv_parameter } type;
!
struct arg {
int arg_len;
--- 60,68 ----
struct agv1 {
enum arg_type { mv_literal,
! mv_filename, mv_type, mv_parameter,
! mv_environ /* Environment variable inside of " */
! } type;
struct arg {
int arg_len;
***************
*** 620,625 ****
--- 621,656 ----
switch (entry_state) {
case mcES_arg:
+ if (mv_environ == arg_type) {
+
+ if(isascii(c) && isalpha(c)) {
+ /* OK */
+
+ } else if ('/' == c ||
+ '"' == c ||
+ ' ' == c ||
+ '\t' == c) {
+
+ /* Variable terminated ...
+ let next condition check it ...
+ */
+
+ arg_type = mv_literal;
+ add_mailcap_vector(vector,vector_count,arg_type,-1);
+
+ } else {
+
+ DPRINT(Debug,2,(&Debug,
+ "mailcap %s, line %d -- character %c unsupported on $\n",
+ mailcaps[mailcap_idx],
+ linenum,c));
+
+ entry_state = mcES_error;
+ break;
+
+ }
+
+ }
if (mv_literal == arg_type) {
/* Check unsupported characters --
***************
*** 630,645 ****
case '\'':
! if ( 0 == is_shell_quoted)
! is_shell_quoted = '\'';
! else if ( '\'' == is_shell_quoted)
is_shell_quoted = 0;
/* Quarantee that there is argument -- even when
'' was given
*/
add_mailcap_vector(vector,vector_count,arg_type,-1);
! break;
case '"':
--- 661,676 ----
case '\'':
! if ( 0 == is_shell_quoted)
! is_shell_quoted = '\'';
! else if ( '\'' == is_shell_quoted)
is_shell_quoted = 0;
/* Quarantee that there is argument -- even when
'' was given
*/
add_mailcap_vector(vector,vector_count,arg_type,-1);
! goto out_1; /* DO not add quote to string */
case '"':
***************
*** 652,659 ****
"" was given
*/
add_mailcap_vector(vector,vector_count,arg_type,-1);
! break;
!
case '#':
case '&':
--- 683,689 ----
"" was given
*/
add_mailcap_vector(vector,vector_count,arg_type,-1);
! goto out_1; /* DO not add quote to string */
case '#':
case '&':
***************
*** 676,681 ****
--- 706,740 ----
break; /* WAS OK */
case '$':
+
+ if ('"' == is_shell_quoted) {
+ /* variables inside of " are OK */
+
+ c = getc(F);
+
+ if (isascii(c) && isalpha(c)) {
+
+ arg_type = mv_environ;
+ add_mailcap_vector(vector,vector_count,arg_type,
+ -1);
+
+ /* c is added later */
+
+ break; /* OK */
+ } else {
+ DPRINT(Debug,2,(&Debug,
+ "mailcap %s, line %d -- shell special $%c unsupported\n",
+ mailcaps[mailcap_idx],
+ linenum,c));
+
+ entry_state = mcES_error;
+ break;
+ }
+
+ }
+
+
+
case '`':
***************
*** 706,711 ****
--- 765,773 ----
} else
add_mailcap_vector(vector,vector_count,
arg_type,c);
+
+ out_1:
+
break;
case mcES_keyword:
***************
*** 774,780 ****
if (mcES_error == entry_state) {
unsupported++;
} else if (mcES_arg == entry_state &&
! mv_literal == arg_type &&
is_shell_quoted) {
DPRINT(Debug,2,(&Debug,
"mailcap %s, line %d -- Shell quote %c not terminated before ;",
--- 836,844 ----
if (mcES_error == entry_state) {
unsupported++;
} else if (mcES_arg == entry_state &&
! (mv_literal == arg_type ||
! mv_environ == arg_type)
! &&
is_shell_quoted) {
DPRINT(Debug,2,(&Debug,
"mailcap %s, line %d -- Shell quote %c not terminated before ;",
***************
*** 879,884 ****
--- 943,950 ----
arg_free(&string);
free_mailcap_vector(&vector,&vector_count);
+ fclose(F);
+
}
mailcaps_readed = 1;
***************
*** 911,916 ****
--- 977,983 ----
switch(subvector[i].type) {
int tmp,l,l2;
CONST char *ma, *mi;
+ char *e;
char buffer[STRING];
case mv_literal:
***************
*** 922,927 ****
--- 989,1012 ----
ret[retlen] = '\0';
break;
+ case mv_environ:
+ e = getenv(subvector[i].arg.arg);
+ if (!e) {
+ DPRINT(Debug,12,(&Debug,
+ "make_mailcap_arg: Environ variable $%s not found, treating as \"\"\n",
+ subvector[i].arg.arg));
+ e = "";
+ }
+ l = strlen(e);
+
+ tmp = retlen + l;
+ ret = safe_realloc(ret,tmp+1);
+
+ memcpy(ret+retlen,e,l);
+ retlen = tmp;
+ ret[retlen] = '\0';
+ break;
+
case mv_filename:
if (fn_seen)
***************
*** 1108,1125 ****
*/
! /* This block is probably no required... */
! rewind(file_handle);
#ifdef _POSIX_VERSION
/* Synzronize underlying file descriptor */
! fflush(file_handle);
#else
! seek(fileno(file_handle),0,0);
#endif
! r = start_run(&RS,flags,argv,
! fn_seen && x->needsterminal ? -1 : fileno(file_handle),
! -1);
if (!r) {
if (raw)
--- 1193,1214 ----
*/
!
! if (file_handle) {
! /* This block is probably no required... */
! rewind(file_handle);
#ifdef _POSIX_VERSION
/* Synzronize underlying file descriptor */
! fflush(file_handle);
#else
! seek(fileno(file_handle),0,0);
#endif
! r = start_run(&RS,flags,argv,
! fn_seen && x->needsterminal ? -1 : fileno(file_handle),
! -1);
! } else
! r = start_run(&RS,flags,argv,-1,-1);
if (!r) {
if (raw)
Index: elm2.4.ME+.102cvs/melib/mime_decode.c
*** elm2.4.ME+.101/melib/mime_decode.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/melib/mime_decode.c 2003-04-25 23:25:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_decode.c,v 1.52 2002/12/08 14:30:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.52 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_decode.c,v 1.53 2003/04/25 20:25:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.53 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 309,318 ****
if (astext && *p == '\r')
store_ch = *p;
else {
if (*p == '\n' && astext && s_out->EOLN_is_CRLF)
state_putc('\r',s_out);
! state_putc(*p,s_out);
}
if (*p == '\n') {
nl = TRUE;
--- 309,321 ----
if (astext && *p == '\r')
store_ch = *p;
else {
+ unsigned char ch;
+
if (*p == '\n' && astext && s_out->EOLN_is_CRLF)
state_putc('\r',s_out);
! ch = *p;
! state_putc(ch,s_out);
}
if (*p == '\n') {
nl = TRUE;
Index: elm2.4.ME+.102cvs/melib/mime_parse.c
*** elm2.4.ME+.101/melib/mime_parse.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.102cvs/melib/mime_parse.c 2003-05-09 08:57:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.37 2002/12/08 14:30:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.38 2003/05/09 05:57:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 421,427 ****
trg->parser_data = NULL;
trg->handler_data = NULL;
! copy_parser_data(& (trg->parser_data), src->parser_data);
if (src->description) {
trg->description = dup_string(src->description);
--- 421,434 ----
trg->parser_data = NULL;
trg->handler_data = NULL;
! if (src->parser_data) {
! copy_parser_data(& (trg->parser_data), src->parser_data);
! } else {
! DPRINT(Debug,3,(&Debug,
! "mime_t_copy(src=%p,trg=%p): src->parser_data == NULL !\n",trg,src));
!
! }
!
if (src->description) {
trg->description = dup_string(src->description);
Index: elm2.4.ME+.102cvs/melib/mpar_leaf.c
*** elm2.4.ME+.101/melib/mpar_leaf.c 2002-03-20 09:04:48.000000000 +0200
--- elm2.4.ME+.102cvs/melib/mpar_leaf.c 2003-05-26 18:19:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mpar_leaf.c,v 1.3 2002/03/19 17:18:07 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mpar_leaf.c,v 1.4 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 10,16 ****
--- 10,18 ----
#include "melib.h"
#include "mpar_imp.h"
+ #if 0
DEBUG_VAR(Debug,__FILE__,"mime");
+ #endif
#if ANSI_C
#define S_(x) static x;
Index: elm2.4.ME+.102cvs/melib/parse_util.c
*** elm2.4.ME+.101/melib/parse_util.c 2002-06-06 18:55:59.000000000 +0300
--- elm2.4.ME+.102cvs/melib/parse_util.c 2003-05-17 19:13:41.000000000 +0300
***************
*** 1,8 ****
! static char rcsid[] = "@(#)$Id: parse_util.c,v 1.20 2002/04/01 17:09:47 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,8 ----
! static char rcsid[] = "@(#)$Id: parse_util.c,v 1.21 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.21 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 246,251 ****
--- 246,252 ----
*/
state_nlputs("\n",s);
}
+ free_string(&buffer);
}
void state_write_headers(s,hdr,filter,flag,demime,defcharset)
Index: elm2.4.ME+.102cvs/nls/C/C/C/s_elmrc.m
*** elm2.4.ME+.101/nls/C/C/C/s_elmrc.m 2002-01-26 13:14:46.000000000 +0200
--- elm2.4.ME+.102cvs/nls/C/C/C/s_elmrc.m 2003-05-25 14:19:57.000000000 +0300
***************
*** 21,23 ****
--- 21,25 ----
10 Can't specify both -w and -I options!
$ #SavedAutoWrite
11 # Saved automatically by ELMRC-WRITE %s\n#\n\n
+ $ #SavedAutoLIB
+ 12 # Saved automatically by ELMLIBREGISTER %s\n#\n\n
Index: elm2.4.ME+.102cvs/nls/C/C/C/s_from.m
*** elm2.4.ME+.101/nls/C/C/C/s_from.m 2002-01-26 13:14:46.000000000 +0200
--- elm2.4.ME+.102cvs/nls/C/C/C/s_from.m 2003-05-09 19:13:44.000000000 +0300
***************
*** 13,22 ****
6 "%s" is not a regular file!\n
$ #NoMail
7 No mail.\n
! $ #CouldntOpenFolder
! 8 Couldn't open folder "%s".\n
! $ #CouldntOpenFolderPlural
! 9 Couldn't open folders "%s" or "%s".\n
$ #StringNoMail
10 %s no mail.\n
$ #NoMesgInFolder
--- 13,22 ----
6 "%s" is not a regular file!\n
$ #NoMail
7 No mail.\n
! $ #CouldntOpenX
! 8 Couldn't open %s "%s".\n
! $ #CouldntOpenFolderOrMailbox
! 9 Couldn't open folder "%s" or mailbox "%s".\n
$ #StringNoMail
10 %s no mail.\n
$ #NoMesgInFolder
***************
*** 88,90 ****
--- 88,96 ----
37 unknown
$ #ArgsIngoringDebug
38 Warning: system created without debugging enabled - request ignored\n
+ $ #NotMailbox
+ 39 WARNING: %s is folder, not mailbox!\n Delivery of new mail to folder when it is open may corrupt it
+ $ #NoMesgInMailbox
+ 40 No messages in that mailbox!\n
+ $ #NoExplainMessagesMbox
+ 41 No %s messages in that mailbox.\n
Index: elm2.4.ME+.102cvs/nls/C/C/C/s_me.m
*** elm2.4.ME+.101/nls/C/C/C/s_me.m 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/nls/C/C/C/s_me.m 2003-05-25 14:19:57.000000000 +0300
***************
*** 635,637 ****
--- 635,645 ----
336 Unknown terminal flag %s (file %s)
$ #FailLink
337 Failed to link %s to %s
+ $ #LibraryRegistered
+ 338 Library %s registered
+ $ #LibraryUnRegistered
+ 339 Library %s unregistered
+ $ #LibraryAvailable
+ 340 Library %s is available
+ $ #LibraryUnavailable
+ 341 Library %s is unavailable
Index: elm2.4.ME+.102cvs/shared_libs/smtp/smtp.c
*** elm2.4.ME+.101/shared_libs/smtp/smtp.c 2002-12-15 12:00:26.000000000 +0200
--- elm2.4.ME+.102cvs/shared_libs/smtp/smtp.c 2003-05-17 19:13:42.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: smtp.c,v 1.39 2002/11/10 11:25:31 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: smtp.c,v 1.40 2003/05/17 16:13:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 1110,1120 ****
--- 1110,1125 ----
lib_error(FRM("Connection to %s server failed"),
((*C)->head->p.p1->SMTP_flags & SMTP_submission) ?
"Submission" : "SMTP");
+
+ free(from); from = NULL;
+
free_mail_send_state(C);
return 0; /* FAIL */
}
smtp_command_reset((*C)->head->p.p1);
+ free(from); from = NULL;
+
if ((*C)->addrs) {
int i;
int fail = 0;
Index: elm2.4.ME+.102cvs/src/addr_util.c
*** elm2.4.ME+.101/src/addr_util.c 2002-06-06 18:55:59.000000000 +0300
--- elm2.4.ME+.102cvs/src/addr_util.c 2003-05-17 19:13:42.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: addr_util.c,v 1.35 2002/06/06 07:46:33 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: addr_util.c,v 1.36 2003/05/17 16:13:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 458,464 ****
expanded->addrs[ptr->pos].comment);
ADD_TEXTUAL(result,temp,pos,1);
! free(temp);
} else {
DPRINT(Debug,1,
(&Debug,
--- 458,464 ----
expanded->addrs[ptr->pos].comment);
ADD_TEXTUAL(result,temp,pos,1);
! free_string(&temp);
} else {
DPRINT(Debug,1,
(&Debug,
Index: elm2.4.ME+.102cvs/src/attach_menu.c
*** elm2.4.ME+.101/src/attach_menu.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/src/attach_menu.c 2003-05-09 08:57:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.49 2003/02/28 09:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.50 2003/05/09 05:57:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.50 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 1896,1912 ****
goto out;
! if (col + strlen(Encoding) +3 >= Width)
! goto out;
! x = Width - strlen(Encoding) -3;
! while (col < x) {
! Writechar(' ');
! col++;
}
- PutLine0(row, x, Encoding);
-
out:
if (is_cur && has_highlighting && ! arrow_cursor)
EndInverse();
--- 1896,1916 ----
goto out;
! if (col + strlen(Encoding) +3 >= Width) {
! if (Width-col-7 < 1)
! goto out;
! PutLineX(row, col+1, FRM("%.*s..."),
! Width-col-7,Encoding);
! } else {
! x = Width - strlen(Encoding) -3;
! while (col < x) {
! Writechar(' ');
! col++;
! }
! PutLine0(row, x, Encoding);
}
out:
if (is_cur && has_highlighting && ! arrow_cursor)
EndInverse();
Index: elm2.4.ME+.102cvs/src/builtin++.c
*** elm2.4.ME+.101/src/builtin++.c 2002-06-06 18:55:59.000000000 +0300
--- elm2.4.ME+.102cvs/src/builtin++.c 2003-05-17 19:13:42.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: builtin++.c,v 1.17 2002/06/01 12:58:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: builtin++.c,v 1.18 2003/05/17 16:13:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 118,123 ****
--- 118,124 ----
/* Current line for outputting and position on it ... */
struct string * buffer = NULL;
+ int ret = '\0';
int X = 0;
struct string * search_pattern = NULL; /* Last seach string */
***************
*** 368,374 ****
case '+':
case PAGEDOWN_MARK:
if (is_end) {
! return (' ');
}
break;
case HOME_MARK:
--- 369,376 ----
case '+':
case PAGEDOWN_MARK:
if (is_end) {
! ret = ' ';
! goto finish;
}
break;
case HOME_MARK:
***************
*** 522,530 ****
quit:
case EOF:
default:
! return (ch == 'q' || ch == 'x' ? 0 : ch);
}
}
}
--- 524,540 ----
quit:
case EOF:
default:
! ret = (ch == 'q' || ch == 'x' ? 0 : ch);
! goto finish;
}
}
+
+ finish:
+ if (buffer)
+ free_string (&buffer);
+ DPRINT(Debug,9,(&Debug,
+ "builtin++ returning %c\n",ret));
+ return ret;
}
Index: elm2.4.ME+.102cvs/src/elm.c
*** elm2.4.ME+.101/src/elm.c 2002-06-06 18:56:00.000000000 +0300
--- elm2.4.ME+.102cvs/src/elm.c 2003-05-17 19:13:42.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.42 2002/04/01 17:09:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.43 2003/05/17 16:13:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.43 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 106,111 ****
--- 106,126 ----
#if DEBUG
init_debugfile("ELM");
+
+ /* HACK ....
+ uSER may want enable debug output for locale_init()
+
+ This gives wrong result if some options value start
+ with "-d"
+ */
+
+ for (i = 1; i < argc; i++) {
+ if ('-' == argv[i][0] &&
+ 'd' == argv[i][1] &&
+ argv[i][2]) {
+ set_debugging(& (argv[i][2]));
+ }
+ }
#endif
locale_init();
Index: elm2.4.ME+.102cvs/src/fileio.c
*** elm2.4.ME+.101/src/fileio.c 2002-06-06 18:56:00.000000000 +0300
--- elm2.4.ME+.102cvs/src/fileio.c 2003-05-17 19:13:42.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: fileio.c,v 1.49 2002/06/01 12:58:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: fileio.c,v 1.50 2003/05/17 16:13:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.50 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 1327,1336 ****
--- 1327,1343 ----
}
}
+
+ if (all_headers)
+ delete_headers(&all_headers);
+
return 1;
fail:
+ if (all_headers)
+ delete_headers(&all_headers);
+
return 0;
}
Index: elm2.4.ME+.102cvs/src/hdrconfg.c
*** elm2.4.ME+.101/src/hdrconfg.c 2002-12-15 12:00:26.000000000 +0200
--- elm2.4.ME+.102cvs/src/hdrconfg.c 2003-04-09 17:22:17.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.25 2002/11/30 20:34:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.27 2003/04/09 14:22:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 1245,1251 ****
}
free_it:
! free(ptr);
return ret_val;
}
--- 1245,1251 ----
}
free_it:
! free_string(ptr);
return ret_val;
}
***************
*** 1407,1413 ****
}
free_it:
! free(ptr);
return ret_val;
}
--- 1407,1413 ----
}
free_it:
! free_string(ptr);
return ret_val;
}
***************
*** 1704,1710 ****
}
free_it:
! free(ptr);
return ret_val;
}
--- 1704,1710 ----
}
free_it:
! free_string(ptr);
return ret_val;
}
Index: elm2.4.ME+.102cvs/src/in_utils.c
*** elm2.4.ME+.101/src/in_utils.c 2002-12-15 12:00:26.000000000 +0200
--- elm2.4.ME+.102cvs/src/in_utils.c 2003-05-17 19:13:42.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.23 2002/12/08 14:30:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.24 2003/05/17 16:13:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 911,916 ****
--- 911,917 ----
}
if (str) {
strfcpy(string,str,size);
+ free(str); str = NULL;
} else
string[0] = '\0';
***************
*** 918,923 ****
--- 919,928 ----
"optionally_enter=%d string=%s\n",
ret,string));
+
+ if (buffer)
+ free_string(&buffer);
+
return(ret);
}
Index: elm2.4.ME+.102cvs/src/newmbox.c
*** elm2.4.ME+.101/src/newmbox.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/src/newmbox.c 2003-05-09 15:46:58.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: newmbox.c,v 1.66 2003/02/16 14:50:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.66 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: newmbox.c,v 1.67 2003/05/09 12:46:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.67 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 836,841 ****
--- 836,842 ----
#else
sleep(5);
#endif
+ Raw_OFF(1); /* Raw(OFF) and reprint error message */
leave(0);
}
Index: elm2.4.ME+.102cvs/src/showmsg.c
*** elm2.4.ME+.101/src/showmsg.c 2002-12-15 12:00:26.000000000 +0200
--- elm2.4.ME+.102cvs/src/showmsg.c 2003-05-26 18:19:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: showmsg.c,v 1.23 2002/12/08 14:30:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: showmsg.c,v 1.25 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 225,232 ****
if (q >= list_len) {
- int i;
- int x = 0;
PutLineX(elm_LINES-1,1,
CATGETS(elm_msg_cat, ElmSet, ElmMailcapQuit,
--- 225,230 ----
***************
*** 370,375 ****
--- 368,382 ----
failure:
if (list) {
+ int i;
+
+ for (i = 0; i < list_len; i++) {
+ if (list[i].printable_command) {
+ free(list[i].printable_command);
+ list[i].printable_command = NULL;
+ }
+ }
+
free(list);
list = NULL;
}
Index: elm2.4.ME+.102cvs/utils/elmlibregister.c
*** /tmp/2329-very-long-file-name-NULL-comes-in-here 2003-05-28 21:40:26.000000000 +0300
--- elm2.4.ME+.102cvs/utils/elmlibregister.c 2003-05-25 14:19:57.000000000 +0300
***************
*** 0 ****
--- 1,404 ----
+ static char rcsid[] = "@(#)$Id: elmlibregister.c,v 1.2 2003/05/25 11:19:57 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************
+ * Some code based on ../src/save_optc.c
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1992 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************/
+
+ #include "elmutil.h"
+ #include "s_me.h"
+ #include "s_elm.h"
+ #include "s_elmrc.h"
+
+ #include "rc_imp.h"
+ #include "save_opts.h"
+
+ #include "reghelper.h"
+
+ DEBUG_VAR(Debug,__FILE__,"util");
+
+ extern char *optarg;
+ extern int optind;
+
+ int register_fd = -1;
+ char * program_name = "elmrc-write";
+
+ int main(argc, argv)
+ int argc;
+ char *argv[];
+ {
+ int err = 0;
+ int global = 0;
+ int c;
+ int write_default = 0;
+ char * targetfile = NULL;
+ FILE * commentfile = NULL;
+
+ int x;
+
+ #if DEBUG
+ init_debugfile("ELMLIBREGISTER");
+ #endif
+ locale_init();
+
+ REGHELPER_INIT(argv[0]);
+
+ while ((c = getopt(argc, argv, "GId:w:C:")) != EOF) {
+
+ switch(c) {
+ case 'G':
+ global++;
+ break;
+
+ case 'I':
+ write_default++;
+ break;
+
+ case 'd':
+ #if DEBUG
+ set_debugging(optarg);
+ #else
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmArgsIngoringDebug,
+ "Warning: system created without debugging enabled - request ignored\n"));
+ #endif
+ break;
+
+ case 'w' :
+ targetfile = optarg;
+ if (0 != access(targetfile,WRITE_ACCESS)) {
+ int errcode = errno;
+
+ if (errcode != ENOENT) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ targetfile, error_description(errcode));
+ err++;
+ goto fail;
+ }
+ }
+ break;
+
+ case 'C':
+ if (0 != access(optarg,READ_ACCESS)) {
+ int errcode = errno;
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotReadable,
+ "File %.50s is not readable: %s"),
+ optarg, error_description(errcode));
+ err++;
+ goto fail;
+ }
+
+ commentfile = fopen(optarg,"r");
+ if (!commentfile) {
+ int errcode = errno;
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotReadable,
+ "File %.50s is not readable: %s"),
+ optarg, error_description(errcode));
+ err++;
+ goto fail;
+
+ }
+ break;
+
+ case '?':
+ err = 1;
+ goto fail;
+ }
+
+ }
+
+ user_init();
+ init_defaults();
+
+ elm_sfprintf(version_buff, sizeof version_buff,
+ FRM("%s PL%s"), VERSION, PATCHLEVEL);
+
+
+ #ifdef DEBUG
+ {
+ int d = panic_dprint("\n\
+ ======================================================\n\
+ Debug output of the ELMLIBREGISTER program (version %s).\n",
+ version_buff);
+
+ if (d >= 50) {
+ #if 0
+ panic_dprint("WARNING: Edit manually out sensitive information from that file!\n");
+
+ lower_prompt("WARNING: Debug file may include passwords -- edit it!");
+ error_sleep(5+sleepmsg);
+ #endif
+ }
+ }
+ #endif
+
+ if (!global)
+ read_rc_file(0);
+
+
+ if (optind < argc) {
+ test_and_set_shared(& argv[optind] , targetfile || write_default);
+ } else {
+ /* NO libraries .. only check current .... */
+ test_and_set_shared( NULL , targetfile || write_default);
+ }
+
+ for (x = 0; x < NUMBER_OF_SAVEABLE_OPTIONS; x++) {
+ if (0 == strcmp(save_info[x].name,"use-library"))
+ save_info[x].flags |= FL_CHANGED | FL_LOCAL;
+ }
+
+ if (!commentfile) {
+ commentfile = fopen(ELMRC_INFO,"r");
+ if (!commentfile)
+ lib_error(CATGETS(elm_msg_cat, ElmrcSet,
+ ElmrcSavingWithoutComments,
+ "Warning: saving without comments! Can't get to %s."),
+ ELMRC_INFO);
+ }
+
+ if (targetfile && write_default) {
+ lib_error(CATGETS(elm_msg_cat, ElmrcSet, ElmrcNoBothwI,
+ "Can't specify both -w and -I options!"));
+ err++;
+ goto fail;
+
+ }
+ if (write_default)
+ targetfile = global ? system_rc_file : user_rc_file;
+
+
+ if (targetfile) {
+ char * tmp = elm_message(FRM("%s.N"),targetfile);
+ int errcode = can_open(tmp,"w");
+ int x;
+ FILE *f;
+
+
+ if (errcode) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ tmp, error_description(errcode));
+
+ err++;
+ free(tmp);
+ goto fail;
+ }
+ f = fopen(tmp,"w");
+ if (!f) {
+ int errcode = errno;
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ tmp, error_description(errcode));
+
+ err++;
+ free(tmp);
+ goto fail;
+ }
+
+ elm_fprintf(f,
+ CATGETS(elm_msg_cat, ElmrcSet, ElmrcSavedAutoLIB,
+ "# Saved automatically by ELMLIBREGISTER %s\n#\n\n"),
+ version_buff);
+
+
+ if (commentfile) {
+ char line_buffer[SLEN];
+ int x;
+ int len;
+ int local_value;
+ int skip = 1;
+
+ while (0 < (len =
+ mail_gets(line_buffer, sizeof line_buffer,
+ commentfile))) {
+
+ int y = 0;
+
+
+ if (line_buffer[len-1] != '\n') {
+ DPRINT(Debug,1,(&Debug,
+ "Too long line (read len=%d): %s\n",
+ len,line_buffer));
+ break;
+ }
+ line_buffer[--len] = '\0';
+ if (0 == len)
+ continue;
+
+ if ('#' == line_buffer[0] || whitespace(line_buffer[0])) {
+
+ if (strncmp(line_buffer, "#$HDR", 5) == 0) {
+ skip = 0;
+ continue;
+ }
+
+ if (skip)
+ continue;
+
+ /* Copy initial comments */
+
+ fprintf(f,"%s\n",line_buffer);
+ continue;
+ }
+ skip = 1;
+
+
+ for (x = 0; x < NUMBER_OF_SAVEABLE_OPTIONS; x++) {
+ y = strcmp(line_buffer, save_info[x].name);
+ if (y <= 0)
+ break;
+ }
+
+ if (x >= NUMBER_OF_SAVEABLE_OPTIONS || y != 0) {
+
+ DPRINT(Debug,15,(&Debug,
+ "Skipping option %s ... \n",
+ line_buffer));
+
+ continue;
+ }
+
+ if (global &&
+ ! (save_info[x].flags & FL_CHANGED) &&
+ ! (save_info[x].flags & FL_SYS)) {
+ DPRINT(Debug,15,(&Debug,
+ "Skipping user option %s ... \n",
+ line_buffer));
+
+ continue;
+ }
+
+ if (!global &&
+ (save_info[x].flags & FL_SYS)) {
+ DPRINT(Debug,15,(&Debug,
+ "Skipping system option %s ... \n",
+ line_buffer));
+
+ continue;
+ }
+
+ fprintf(f,"\n");
+
+ /* Copy comments */
+ while (0 < (len =
+ mail_gets(line_buffer, sizeof line_buffer,
+ commentfile))) {
+ if ('#' != line_buffer[0])
+ break;
+ fputs(line_buffer,f);
+ }
+
+ if (global)
+ local_value = save_info[x].flags & FL_CHANGED;
+ else
+ local_value = save_info[x].flags & FL_LOCAL;
+ if (!valid_rc_type(save_info[x].dt_type))
+ panic("RC PANIC",__FILE__,__LINE__,"main",
+ "Bad config item type",0);
+
+ save_info[x].dt_type->print_value(f,
+ & save_info[x],
+ !local_value);
+
+
+ save_info[x].flags |= FL_SAVED;
+ }
+ }
+
+ for (x = 0; x < NUMBER_OF_SAVEABLE_OPTIONS; x++) {
+ int local_value;
+
+
+ if (save_info[x].flags & FL_SAVED)
+ continue;
+
+ if (global &&
+ ! (save_info[x].flags & FL_CHANGED) &&
+ ! (save_info[x].flags & FL_SYS)) {
+ DPRINT(Debug,15,(&Debug,
+ "Skipping user option %s ... \n",
+ save_info[x].name));
+
+ continue;
+ }
+
+ if (!global &&
+ (save_info[x].flags & FL_SYS)) {
+ DPRINT(Debug,15,(&Debug,
+ "Skipping system option %s ... \n",
+ save_info[x].name));
+
+ continue;
+ }
+
+ fprintf(f,"\n");
+
+ if (global)
+ local_value = save_info[x].flags & FL_CHANGED;
+ else
+ local_value = save_info[x].flags & FL_LOCAL;
+ if (!valid_rc_type(save_info[x].dt_type))
+ panic("RC PANIC",__FILE__,__LINE__,"main",
+ "Bad config item type",0);
+
+ save_info[x].dt_type->print_value(f,
+ & save_info[x],
+ !local_value);
+ }
+
+ print_local_shared_options(f,global);
+
+ if (EOF == fclose(f)) {
+ int errcode = errno;
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ tmp, error_description(errcode));
+
+ err++;
+ free(tmp);
+ goto fail;
+ }
+ if (0 != rename(tmp,targetfile)) {
+ int errcode = errno;
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotRenamed,
+ "Failed to rename temporary file to %.50s: %.30s"),
+ targetfile, error_description(errcode));
+
+ err++;
+ free(tmp);
+ goto fail;
+ }
+
+ log_config(targetfile);
+
+ free(tmp);
+ }
+
+ fail:
+ if (commentfile)
+ fclose(commentfile);
+
+ if (err)
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeProgFailed,
+ "%s failed; exit code=%d"),
+ argv[0],err);
+
+ return err;
+ }
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.102cvs/utils/elmregister.c
*** elm2.4.ME+.101/utils/elmregister.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/utils/elmregister.c 2003-05-26 18:19:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmregister.c,v 1.6 2003/03/17 18:42:25 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmregister.c,v 1.9 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 959,966 ****
char *argv[];
int x;
{
- char buffer[ MAX_PIPE_LOG];
- char *ptr;
int read_pipe;
int t;
--- 959,964 ----
***************
*** 1425,1431 ****
program_name,src,trg);
if (0 == mkdir(trg,0755)) {
- int r = 0;
fprintf(stderr,
"%s: Directory %s created\n",
--- 1423,1428 ----
***************
*** 1937,1943 ****
char buffer[ MAX_PIPE_LOG];
char *ptr;
- int n;
int j;
--- 1934,1939 ----
***************
*** 2012,2018 ****
0 == strcmp("link", argv[x])) {
char buffer[ MAX_PIPE_LOG];
char *ptr;
- int n;
char * translated [2];
char * relative [2];
--- 2008,2013 ----
***************
*** 2355,2361 ****
char buffer[ MAX_PIPE_LOG];
char *ptr;
- int n;
int L = 4;
--- 2350,2355 ----
***************
*** 2431,2437 ****
int *mode;
int *is_dir;
{
- int l;
struct passwd * p = NULL;
struct group * g = NULL;
--- 2425,2430 ----
***************
*** 2445,2452 ****
exit(1); /* FAILURE */
}
- l = strlen(ptr->arg_ptrs[0])+ L + 2;
-
*src = make_rooted(ptr,ptr->arg_ptrs[0],installer_root);
if (ptr->user_ptr && 0 != strcmp(ptr->user_ptr,"-")) {
--- 2438,2443 ----
***************
*** 2573,2579 ****
for (ptr = entry->log; ptr < entry->log + entry->log_count; ptr++) {
char * src = NULL;
- int l = 0;
uid_t id_user = (uid_t)-1;
gid_t id_group = (gid_t)-1;
--- 2564,2569 ----
***************
*** 2792,2803 ****
LI->entries[i].log_count; ptr++) {
switch (ptr->command_letter) {
- char *trg;
case '\0': /* ENTRY DELETED */
break;
case '{':
case 'F':
case 'C':
case 'M':
--- 2782,2793 ----
LI->entries[i].log_count; ptr++) {
switch (ptr->command_letter) {
case '\0': /* ENTRY DELETED */
break;
case '{':
+ case 's':
case 'F':
case 'C':
case 'M':
***************
*** 2825,2831 ****
case 'R':
/* remove ... */
break;
!
default:
fprintf(stderr,
"%s: [on_current] Bad command letter: %c \n",
--- 2815,2822 ----
case 'R':
/* remove ... */
break;
!
!
default:
fprintf(stderr,
"%s: [on_current] Bad command letter: %c \n",
***************
*** 2865,2871 ****
fprintf(stderr,
"%s: (%s) Keeping link %s from old version (was %s)\n",
program_name,source->filename,ptr->arg_ptrs[1],
! ptr->arg_ptrs[2]
);
continue;
}
--- 2856,2862 ----
fprintf(stderr,
"%s: (%s) Keeping link %s from old version (was %s)\n",
program_name,source->filename,ptr->arg_ptrs[1],
! ptr->arg_ptrs[0]
);
continue;
}
***************
*** 3254,3261 ****
char * src = NULL;
char * trg;
- int l = 0;
-
uid_t id_user = (uid_t)-1;
gid_t id_group = (gid_t)-1;
int mode;
--- 3245,3250 ----
***************
*** 3409,3415 ****
{
struct stat X;
struct log_instance * target = NULL;
! int j,i;
int r = 0;
struct log_instance LI_source;
--- 3398,3404 ----
{
struct stat X;
struct log_instance * target = NULL;
! int i;
int r = 0;
struct log_instance LI_source;
***************
*** 3498,3504 ****
}
if (0 != strcmp(installer_root,"/")) {
- char *X;
int i;
int t;
--- 3487,3492 ----
Index: elm2.4.ME+.102cvs/utils/from.c
*** elm2.4.ME+.101/utils/from.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/utils/from.c 2003-05-09 19:13:44.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: from.c,v 1.41 2003/03/17 16:04:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.41 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: from.c,v 1.45 2003/05/09 16:13:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.45 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 246,251 ****
--- 246,252 ----
struct folder_info *folder = NULL;
struct read_folder_state * read_state_ptr = NULL;
CONST char *msg;
+ enum sessionlock_mode m;
/* copy next argument into infile */
***************
*** 286,293 ****
if (access(infile,ACCESS_EXISTS) == -1) {
lib_error(CATGETS(elm_msg_cat,
! FromSet,FromCouldntOpenFolderPlural,
! "Couldn't open folders \"%s\" or \"%s\".\n"),
argv[optind], infile);
continue; /* let's try the next file */
}
--- 287,294 ----
if (access(infile,ACCESS_EXISTS) == -1) {
lib_error(CATGETS(elm_msg_cat,
! FromSet,FromCouldntOpenFolderOrMailbox,
! "Couldn't open folder \"%s\" or mailbox \"%s\".\n"),
argv[optind], infile);
continue; /* let's try the next file */
}
***************
*** 325,333 ****
if (!folder)
continue;
! if (!sessionlock_folder(folder,SESSIONLOCK_NONE)) {
! lib_error(CATGETS(elm_msg_cat,FromSet,FromCouldntOpenFolder,
! "Couldn't open folder \"%s\".\n"), infile);
goto clean;
}
--- 326,351 ----
if (!folder)
continue;
! m = SESSIONLOCK_NONE;
! if ((selct == NEW_MSG) &&
! FOLDER_FILE == get_folder_mode(folder) &&
! FOLDER_STATUS_NEW != def_folder_status) {
!
!
! lib_error(CATGETS(elm_msg_cat,
! FromSet,FromNotMailbox,
! "WARNING: %s is folder, not mailbox!\n Delivery of new mail to folder when it is open may corrupt it.\n"),
! infile);
!
!
! m = SESSIONLOCK_NONE_CHECKNEW;
! }
!
!
! if (!sessionlock_folder(folder,m)) {
! CONST char * X = folder_type(folder);
! lib_error(CATGETS(elm_msg_cat,FromSet,FromCouldntOpenX,
! "Couldn't open %s \"%s\".\n"), X,infile);
goto clean;
}
***************
*** 361,370 ****
"%s no mail.\n"),
whos_mail(infile, realname));
else
! if (!summarize)
! printf(catgets(elm_msg_cat,FromSet,
! FromNoMesgInFolder,
! "No messages in that folder!\n"));
}
else
/* no selected messages then? */
--- 379,395 ----
"%s no mail.\n"),
whos_mail(infile, realname));
else
! if (!summarize) {
! if (get_folder_mode(folder) & FOLDER_MBOX)
! printf(catgets(elm_msg_cat,FromSet,
! FromNoMesgInMailbox,
! "No messages in that mailbox!\n"));
!
! else
! printf(catgets(elm_msg_cat,FromSet,
! FromNoMesgInFolder,
! "No messages in that folder!\n"));
! }
}
else
/* no selected messages then? */
***************
*** 375,385 ****
whos_mail(infile, realname),
explain(selct,NEG));
else
! if (!summarize)
! printf(catgets(elm_msg_cat,
! FromSet,FromNoExplainMessages,
! "No %s messages in that folder.\n"),
! explain(selct,NEG));
}
else
/* there's mail, but we just want a one-liner */
--- 400,417 ----
whos_mail(infile, realname),
explain(selct,NEG));
else
! if (!summarize) {
! if (get_folder_mode(folder) & FOLDER_MBOX)
! printf(catgets(elm_msg_cat,
! FromSet,FromNoExplainMessagesMbox,
! "No %s messages in that mailbox.\n"),
! explain(selct,NEG));
! else
! printf(catgets(elm_msg_cat,
! FromSet,FromNoExplainMessages,
! "No %s messages in that folder.\n"),
! explain(selct,NEG));
! }
}
else
/* there's mail, but we just want a one-liner */
Index: elm2.4.ME+.102cvs/utils/Makefile.SH
*** elm2.4.ME+.101/utils/Makefile.SH 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/utils/Makefile.SH 2003-05-25 20:29:02.000000000 +0300
***************
*** 16,22 ****
echo "Extracting utils/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # @(#)$Id: Makefile.SH,v 1.29 2003/03/17 11:36:21 hurtta Exp $
#
# Makefile for the Elm system utilities
#
--- 16,22 ----
echo "Extracting utils/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # @(#)$Id: Makefile.SH,v 1.31 2003/05/25 17:29:02 hurtta Exp $
#
# Makefile for the Elm system utilities
#
***************
*** 59,66 ****
--- 59,82 ----
*) strobj="../lib/strstr.o"
;;
esac
+ case "$d_dlopen_libs" in
+ define) regshared="\$(BIN)/elmlibregister-shared"
+ regnoshared="\$(LIB)/elmlibregister"
+ regsharedbin="\$(BIN)/elmlibregister"
+ regsharedobj=elmlibregister.o
+ ;;
+ *) regshared=
+ regnoshared=
+ regsharedbin=
+ regsharedobj=
+ ;;
+ esac
cat >>Makefile <<!GROK!THIS!
STROBJ = $strobj
+ REGSHARED = $regshared
+ REGNOSHARED = $regnoshared
+ REGSHAREDBIN = $regsharedbin
+ REGSHAREDOBJ = $regsharedobj
!GROK!THIS!
if $test "$d_shared" = "$define" ; then
***************
*** 78,84 ****
$(BIN)/elmrc-write-shared \
$(BIN)/elmterminal-shared \
$(BIN)/elmunidata-shared \
! $(BIN)/elmstringconvert-shared
# NOTE: No shared version for elmregister!
!NO!SUBS!
--- 94,101 ----
$(BIN)/elmrc-write-shared \
$(BIN)/elmterminal-shared \
$(BIN)/elmunidata-shared \
! $(BIN)/elmstringconvert-shared \
! $(REGSHARED)
# NOTE: No shared version for elmregister!
!NO!SUBS!
***************
*** 122,128 ****
$(LIB)/elmterminal \
$(LIB)/elmunidata \
$(LIB)/elmregister \
! $(LIB)/elmuninstall
# List of programs in bin directory
--- 139,146 ----
$(LIB)/elmterminal \
$(LIB)/elmunidata \
$(LIB)/elmregister \
! $(LIB)/elmuninstall \
! $(REGNOSHARED)
# List of programs in bin directory
***************
*** 144,150 ****
$(BIN)/elmunidata \
$(BIN)/elmstringconvert \
$(BIN)/elmregister \
! $(SHLIST)
# List of programs to $(LINT) - only C programs
LINT_LIST = answer_lint \
--- 162,169 ----
$(BIN)/elmunidata \
$(BIN)/elmstringconvert \
$(BIN)/elmregister \
! $(REGSHAREDBIN) \
! $(SHLIST)
# List of programs to $(LINT) - only C programs
LINT_LIST = answer_lint \
***************
*** 170,176 ****
elmterminal.o \
elmunidata.o \
elmstringconvert.o \
! elmregister.o
# Lists of source and object files for each C program
ANSWER_SRC = answer.c
--- 189,196 ----
elmterminal.o \
elmunidata.o \
elmstringconvert.o \
! elmregister.o \
! $(REGSHAREDOBJ)
# Lists of source and object files for each C program
ANSWER_SRC = answer.c
***************
*** 199,205 ****
ELMUNIDATA_OBJ = elmunidata.o reghelper.o
ELMSCONV_SRC = elmstringconvert.c
ELMSCONV_OBJ = elmstringconvert.o
!
# Standard targets
all: objects $(BINARY_LIST)
--- 219,225 ----
ELMUNIDATA_OBJ = elmunidata.o reghelper.o
ELMSCONV_SRC = elmstringconvert.c
ELMSCONV_OBJ = elmstringconvert.o
! ELMLIBREG_OBJ = elmlibregister.o reghelper.o
# Standard targets
all: objects $(BINARY_LIST)
***************
*** 246,251 ****
--- 266,274 ----
elmstringconvert.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h
elmregister.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h $(INCLDIR)/reghelper.h
reghelper.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h $(INCLDIR)/reghelper.h
+ elmlibregister.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
+ $(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
+ $(INCLDIR)/reghelper.h
checkalias: checkalias.SH ; sh $?
listalias: listalias.SH ; sh $?
***************
*** 323,329 ****
cd ../lib; $(MAKE) strstr.o
$(BIN)/elmregister: elmregister.o reghelper.o ../lib/putenv.o $(STROBJ)
! $(CC) $(LFLAGS) -o $@ elmregister.o reghelper.o ../lib/putenv.o $(STROBJ)
# Rules to make shell scripts in bin directory
$(BIN)/checkalias: checkalias
--- 346,355 ----
cd ../lib; $(MAKE) strstr.o
$(BIN)/elmregister: elmregister.o reghelper.o ../lib/putenv.o $(STROBJ)
! $(CC) $(LFLAGS) -o $@ elmregister.o reghelper.o \
! ../lib/putenv.o $(STROBJ)
! $(BIN)/elmlibregister: $(ELMLIBREG_OBJ) ../lib/libutil.a
! $(CC) $(LFLAGS) -o $@ $(ELMLIBREG_OBJ) ../lib/libutil.a $(LIB2)
# Rules to make shell scripts in bin directory
$(BIN)/checkalias: checkalias
***************
*** 423,434 ****
$(BIN)/prlong-shared: $(PRLONG_OBJ) ../shlib/libelmme-base.so
$(CC) $(LFLAGS) -o $@ $(RPATH) $(PRLONG_OBJ) ../shlib/libelmme-base.so $(LIB2)
! $(BIN)/elmcharset-shared: $(ELMCHARSET_OBJ) ../lib/libutil.a
$(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMCHARSET_OBJ) ../shlib/libelmme-base.so $(LIB2)
! $(BIN)/elmrc-write-shared: $(ELMRCWRITE_OBJ) ../lib/libutil.a
$(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMRCWRITE_OBJ) ../shlib/libelmme-base.so $(LIB2)
$(BIN)/elmterminal-shared: $(ELMTERMINAL_OBJ) ../shlib/libelmme-base.so
$(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMTERMINAL_OBJ) ../shlib/libelmme-base.so $(LIB2)
--- 449,463 ----
$(BIN)/prlong-shared: $(PRLONG_OBJ) ../shlib/libelmme-base.so
$(CC) $(LFLAGS) -o $@ $(RPATH) $(PRLONG_OBJ) ../shlib/libelmme-base.so $(LIB2)
! $(BIN)/elmcharset-shared: $(ELMCHARSET_OBJ) ../shlib/libelmme-base.so
$(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMCHARSET_OBJ) ../shlib/libelmme-base.so $(LIB2)
! $(BIN)/elmrc-write-shared: $(ELMRCWRITE_OBJ) ../shlib/libelmme-base.so
$(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMRCWRITE_OBJ) ../shlib/libelmme-base.so $(LIB2)
+ $(BIN)/elmlibregister-shared: $(ELMLIBREG_OBJ) ../shlib/libelmme-base.so
+ $(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMLIBREG_OBJ) ../shlib/libelmme-base.so $(LIB2)
+
$(BIN)/elmterminal-shared: $(ELMTERMINAL_OBJ) ../shlib/libelmme-base.so
$(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMTERMINAL_OBJ) ../shlib/libelmme-base.so $(LIB2)
***************
*** 481,486 ****
--- 510,519 ----
$(LIB)/elmunidata: $(BIN)/elmunidata-shared
$(REG) copy -m 555 $? $@
+
+ $(LIB)/elmlibregister: $(BIN)/elmlibregister-shared
+ $(REG) copy -m 555 $? $@
+
!NO!SUBS!
else
***************
*** 523,528 ****
--- 556,564 ----
$(LIB)/elmrc-write: $(BIN)/elmrc-write
$(REG) copy -m 555 $? $@
+ $(LIB)/elmlibregister: $(BIN)/elmlibregister
+ $(REG) copy -m 555 $? $@
+
$(LIB)/elmterminal: $(BIN)/elmterminal
$(REG) copy -m 555 $? $@
Index: elm2.4.ME+.102cvs/utils/reghelper.c
*** elm2.4.ME+.101/utils/reghelper.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102cvs/utils/reghelper.c 2003-05-26 18:19:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: reghelper.c,v 1.2 2003/03/17 11:36:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: reghelper.c,v 1.3 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 111,117 ****
int l_target = strlen(target_r);
int l_user = strlen(user);
int l_group = strlen(group);
- int n;
char buffer[ MAX_PIPE_LOG];
char *ptr;
--- 111,116 ----
***************
*** 165,171 ****
n = write(fd,buffer,L);
if (n < 0) {
- int err = errno;
if (EINTR == errno)
goto again;
--- 164,169 ----
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL102a.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL102a.patch.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL102a.patch.gz >
via WWW.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL102a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
This is out of branch patch.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL102 (25) ------------------------------------
Index: elm2.4.ME+.102acvs/hdrs/patchlevel.h
Prereq: 1080000000
*** elm2.4.ME+.102/hdrs/patchlevel.h 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.102acvs/hdrs/patchlevel.h 2003-07-30 11:09:21.000000000 +0300
***************
*** 1,9 ****
! #define PATCHLEVEL "102 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.102
*/
! #define LAST_REPORT_TIME 1080000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "May, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released May, 2003"
--- 1,9 ----
! #define PATCHLEVEL "102a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.102
*/
! #define LAST_REPORT_TIME 1080000200
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Jul, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Jul, 2003"
Index: elm2.4.ME+.102acvs/README.ME+
*** elm2.4.ME+.102/README.ME+ 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.102acvs/README.ME+ 2003-07-30 11:08:22.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.572 2003/05/28 18:02:27 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.573.2.3 2003/07/30 08:08:22 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,49 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+
+ Changes of Elm2.4ME+ PL102a (25) compared with Elm2.4ME+ PL102 (25)
+ ------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch fixes temp file leak
+ when forwarding with mimeforward = YES and
+ connection to wrong port when name have
+ several IP addresses and file
+ .elm/mail.services was used.
+
+ - Raw() was not masking NO_CHARSET from value (but
+ actually Raw is not called with NO_CHARSET flag)
+
+ - pagemultipart option was not handled correctly if
+ subtype of multipart was unknown.
+
+ - If .elm/mail.services was giving port for service
+ (for example POP), and there was several IP addresses for
+ name, wrong port was attempt on connection for other
+ than first address.
+
+ - "Elm leaves a /tmp/elmfwd.xxx file behind when you
+ forward a message"
+ Reported by: Konstantinos Konstantinides - Stream
+ <k...@corp.cirrus.com>
+ > That happened when mimeforward = YES. Changed
+ mime_t_clear() to take attention to unlink flag.
+
+
Changes of Elm2.4ME+ PL102 (25) compared with Elm2.4ME+ PL101 (25)
------------------------------------------------------------------
Index: elm2.4.ME+.102acvs/lib/remote_mbx.c
*** elm2.4.ME+.102/lib/remote_mbx.c 2002-06-06 18:55:58.000000000 +0300
--- elm2.4.ME+.102acvs/lib/remote_mbx.c 2003-07-29 22:27:46.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.42 2002/04/01 17:09:47 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.42.28.1 2003/07/29 19:27:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42.28.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 411,420 ****
for (idx2 = 0; idx2 < se->port_count && 0 == r; idx2++) {
ra->hostaddr.sin.sin_port =
! htons(se->port_list[idx]);
r = connect_one_IN(ra,&cur_socket,&last_error);
if (r > 0)
! *got = se->port_list[idx];
}
} else {
int idx2;
--- 411,420 ----
for (idx2 = 0; idx2 < se->port_count && 0 == r; idx2++) {
ra->hostaddr.sin.sin_port =
! htons(se->port_list[idx2]);
r = connect_one_IN(ra,&cur_socket,&last_error);
if (r > 0)
! *got = se->port_list[idx2];
}
} else {
int idx2;
Index: elm2.4.ME+.102acvs/melib/mime_decode.c
*** elm2.4.ME+.102/melib/mime_decode.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.102acvs/melib/mime_decode.c 2003-07-28 09:10:33.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_decode.c,v 1.53 2003/04/25 20:25:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.53 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_decode.c,v 1.53.4.1 2003/07/28 06:10:33 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.53.4.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 1032,1038 ****
} else
flags |= subflag;
goto done;
! } else if (get_type_flags(p->TYPE) == MIME_TYPE_MULTIPART &&
pagemultipart) {
DPRINT(Debug,11,(&Debug,
"multipart_selector(%p) -- type: %p=%s/%s "
--- 1032,1038 ----
} else
flags |= subflag;
goto done;
! } else if (get_major_type_code(p->TYPE) == MIME_TYPE_MULTIPART &&
pagemultipart) {
DPRINT(Debug,11,(&Debug,
"multipart_selector(%p) -- type: %p=%s/%s "
Index: elm2.4.ME+.102acvs/melib/mime_parse.c
*** elm2.4.ME+.102/melib/mime_parse.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.102acvs/melib/mime_parse.c 2003-07-30 11:23:54.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.38 2003/05/09 05:57:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.38.4.1 2003/07/30 08:23:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38.4.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 27,33 ****
mt->offset = mt->begin_offset = 0;
mt->length = -1;
mt->encoding = ENCODING_7BIT;
- mt->unlink = 0;
mt->TYPE = give_media_type2(MIME_TYPE_TEXT,"plain",0);
if (!mt->TYPE)
mime_panic(__FILE__,__LINE__,"mime_t_clear",
--- 27,32 ----
***************
*** 51,59 ****
free (mt->disposition_opts);
mt->disposition_opts = NULL;
! if (mt->pathname)
free (mt->pathname);
mt->pathname = NULL;
if (mt->dispname)
free_string(& (mt->dispname));
--- 50,81 ----
free (mt->disposition_opts);
mt->disposition_opts = NULL;
! if (mt->pathname) {
! if (mt->unlink) {
! DPRINT(Debug,15,(&Debug,
! "mime_t_clear: %s marked for unlink\n",
! mt->pathname));
!
! if (0 == unlink(mt->pathname)) {
! DPRINT(Debug,14,(&Debug,
! "mime_t_clear: %s unlinked\n",
! mt->pathname));
! }
! }
!
free (mt->pathname);
+
+ } else {
+ if (mt->unlink) {
+ DPRINT(Debug,3,(&Debug,
+ "mime_t_clear: ERROR: Pathname marked for unlink, but no pathname\n"));
+ }
+ }
+
mt->pathname = NULL;
+
+ mt->unlink = 0;
+
if (mt->dispname)
free_string(& (mt->dispname));
Index: elm2.4.ME+.102acvs/src/curses.c
*** elm2.4.ME+.102/src/curses.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.102acvs/src/curses.c 2003-06-13 19:28:45.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: curses.c,v 1.36 2003/02/16 12:58:17 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: curses.c,v 1.37 2003/06/13 16:28:45 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 1596,1602 ****
int do_tite = (state & NO_TITE) == 0;
int do_charset = (state & NO_CHARSET) == 0;
! state = state & ~NO_TITE;
SIGDPRINT(Debug,4,(&Debug,
"curses: Raw: state=%d do_tite=%d do_charset=%d\n",
--- 1596,1602 ----
int do_tite = (state & NO_TITE) == 0;
int do_charset = (state & NO_CHARSET) == 0;
! state = state & ~NO_TITE & ~NO_CHARSET;
SIGDPRINT(Debug,4,(&Debug,
"curses: Raw: state=%d do_tite=%d do_charset=%d\n",
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL107.patcha.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL107a.patch.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL107a.patch.gz >
For apply patch use command=20
patch -p1 < {path...}/elm-2.4ME+PL107a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL107 (25) --------------------------------
Index: elm2.4.ME+.107a-cvs/hdrs/patchlevel.h
Prereq: 1094000000
*** elm2.4.ME+.107/hdrs/patchlevel.h 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.107a-cvs/hdrs/patchlevel.h 2003-09-27 18:48:46.000000000 +0300
***************
*** 1,8 ****
! #define PATCHLEVEL "107 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.107
*/
! #define LAST_REPORT_TIME 1094000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
#define VERS_DATE "Sep, 2003" /* for elm -v option */
#define WHAT_STRING \
--- 1,8 ----
! #define PATCHLEVEL "107a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.107
*/
! #define LAST_REPORT_TIME 1096000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
#define VERS_DATE "Sep, 2003" /* for elm -v option */
#define WHAT_STRING \
Index: elm2.4.ME+.107a-cvs/README.ME+
*** elm2.4.ME+.107/README.ME+ 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.107a-cvs/README.ME+ 2003-09-27 19:47:42.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.638 2003/09/05 19:13:12 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.645 2003/09/27 16:47:42 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,115 ****
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
Changes of Elm2.4ME+ PL107 (25) compared with Elm2.4ME+ PL106 (25)
------------------------------------------------------------------
Note: You must create directory
! charset/MAPPINGS/MICSFT
before applying this patch!
! SUMMARY: This release fixes some charset definations,
! add some maps to distribution and new keyword
! to l)imit command.
!
! - Marked TIS-620 to be ISO-8859-11 on lib/precompiled_sets.c
! - Added some ISO-2022 codes.
! - changed codeset=VISCII to charset=VISCII on lib/precompiled_sets.c
! - changed codeset=DEC-MCS to charset=DEC-MCS on lib/precompiled_sets.c
! - Marked that windows-1250, windows-1253, windows-1254, windows-1256
and windows-1258 are superset of US-ASCII on lib/precompiled_sets.c
! - Marked that windows-1255 is superset of US-ASCII on lib/precompiled_sets.c
(it is not superset of ISO-8859-8).
! - Marked that windows-1257 is superset of US-ASCII on lib/precompiled_sets.c
(it is not superset of ISO-8859-13).
! - Map 0x80 - 0x9f to unicode 0x0080 - 0x009F on
! ISO-8859-1 map (function map_init_latin) on lib/cs_binary.c.
On that range there is no characters, but this way is mapping
! done on http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT
! - Added some files for ConfTool/mapfiles
NOTE: Answer 'y' to following Configure question
! Should Configure ignore existing elm.mimecharsets? [s]
otherwise generated elm.mimecharsets do not include
fixes from ConfTool/mapfiles.
! - Added ISO-2022-LIKE paramater to terminal.info
! - Accept 0x30..0x3F as final byte of ISO 2022 identification
(these are on private use)
! - Added new l)imit keyword:
! header {header_name}: {header_value}
! Note that this is SLOW! Currently this limit
! keyword do not do MIME decoding for headers.
!
! New files:
! charset/MAPPINGS/viscii.txt
! charset/MAPPINGS/dec-mcs.txt
! charset/MAPPINGS/ISO8859/8859-11.TXT
! charset/MAPPINGS/hp-roman8.txt
! charset/MAPPINGS/MICSFT/CP437.TXT
! charset/MAPPINGS/MICSFT/CP1250.TXT
! charset/MAPPINGS/MICSFT/CP1253.TXT
! charset/MAPPINGS/MICSFT/CP1254.TXT
! charset/MAPPINGS/MICSFT/CP1255.TXT
! charset/MAPPINGS/MICSFT/CP1256.TXT
! charset/MAPPINGS/MICSFT/CP1257.TXT
! charset/MAPPINGS/MICSFT/CP1258.TXT
Changes of Elm2.4ME+ PL106 (25) compared with Elm2.4ME+ PL105 (25)
------------------------------------------------------------------
! SUMMARY: This release fixes some compilation and installation
! problems on AIX, some bugs on folder leaving/syncing,
! current pointer handling when new mail was arriving,
! and saving error (introduced on PL105) of assembled
! message. Builtin pager now by default overrides
! $PAGER environment variable.
!
! - Fix compilation error on AIX:
! curses.c:556: error: parse error before '->' token
! curses.c: In function `ScreenSize':
! Problem noted by: Noam G. Nudelman <no...@mail.biu.ac.il>
! ( It still do not work on AIX ?)
- Fix installation error
gmake[2]: *** No rule to make target `libreg',
! needed by `install_s'. Stop.
on case where shared libraries are not used.
! Problem noted by: Noam G. Nudelman <no...@mail.biu.ac.il>
! - On leaving of folder action message was cleared immediately.
! - Current pointer location was not preserved when
! new mail arrived.
! - On syncing mailbox elm did not asked should messages
! to be deleted, if several mailbox was open and on
! last was no messages marked for deletion.
! - Saving of assembled message failed, because content_length
! was miscalculated (PL105 copied also Received: -headers
! from part 1 and these was not calculated.)
! - If builtin++ is selected as default pager, Configure
! now provides option that builtin pager is used even
! when environment variable $PAGER is set. That is now
! also default.
Changes of Elm2.4ME+ PL105 (25) compared with Elm2.4ME+ PL104 (25)
------------------------------------------------------------------
--- 13,133 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
+ ------------------------------------------------------------------
+
+ SUMMARY: This patch corrects page when returning
+ from o)ptions screen and fixes some other
+ minor bugs.
+
+ - Return correct page after returning from
+ o)ptions screen when sorting order is changed.
+ Problem noted by: Ike Stoddard <forw...@oplink.net>
+
+ - Possible fix for error
+ STREAMSCHED PANIC in streamsched.c:1127:ss_noaction_routine
+ when IMAP / TLS connection is closed by server.
+
+ - Handle better "skipped " counter, when there is lot of
+ skipped mails.
+
Changes of Elm2.4ME+ PL107 (25) compared with Elm2.4ME+ PL106 (25)
------------------------------------------------------------------
Note: You must create directory
! charset/MAPPINGS/MICSFT
before applying this patch!
! SUMMARY: This release fixes some charset definations,
! add some maps to distribution and new keyword
! to l)imit command.
!
! - Marked TIS-620 to be ISO-8859-11 on lib/precompiled_sets.c
! - Added some ISO-2022 codes.
! - changed codeset=VISCII to charset=VISCII on lib/precompiled_sets.c
! - changed codeset=DEC-MCS to charset=DEC-MCS on lib/precompiled_sets.c
! - Marked that windows-1250, windows-1253, windows-1254, windows-1256
and windows-1258 are superset of US-ASCII on lib/precompiled_sets.c
! - Marked that windows-1255 is superset of US-ASCII on lib/precompiled_sets.c
(it is not superset of ISO-8859-8).
! - Marked that windows-1257 is superset of US-ASCII on lib/precompiled_sets.c
(it is not superset of ISO-8859-13).
! - Map 0x80 - 0x9f to unicode 0x0080 - 0x009F on
! ISO-8859-1 map (function map_init_latin) on lib/cs_binary.c.
On that range there is no characters, but this way is mapping
! done on http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT
! - Added some files for ConfTool/mapfiles
NOTE: Answer 'y' to following Configure question
! Should Configure ignore existing elm.mimecharsets? [s]
otherwise generated elm.mimecharsets do not include
fixes from ConfTool/mapfiles.
! - Added ISO-2022-LIKE paramater to terminal.info
! - Accept 0x30..0x3F as final byte of ISO 2022 identification
(these are on private use)
! - Added new l)imit keyword:
! header {header_name}: {header_value}
! Note that this is SLOW! Currently this limit
! keyword do not do MIME decoding for headers.
!
! New files:
! charset/MAPPINGS/viscii.txt
! charset/MAPPINGS/dec-mcs.txt
! charset/MAPPINGS/ISO8859/8859-11.TXT
! charset/MAPPINGS/hp-roman8.txt
! charset/MAPPINGS/MICSFT/CP437.TXT
! charset/MAPPINGS/MICSFT/CP1250.TXT
! charset/MAPPINGS/MICSFT/CP1253.TXT
! charset/MAPPINGS/MICSFT/CP1254.TXT
! charset/MAPPINGS/MICSFT/CP1255.TXT
! charset/MAPPINGS/MICSFT/CP1256.TXT
! charset/MAPPINGS/MICSFT/CP1257.TXT
! charset/MAPPINGS/MICSFT/CP1258.TXT
Changes of Elm2.4ME+ PL106 (25) compared with Elm2.4ME+ PL105 (25)
------------------------------------------------------------------
! SUMMARY: This release fixes some compilation and installation
! problems on AIX, some bugs on folder leaving/syncing,
! current pointer handling when new mail was arriving,
! and saving error (introduced on PL105) of assembled
! message. Builtin pager now by default overrides
! $PAGER environment variable.
!
! - Fix compilation error on AIX:
! curses.c:556: error: parse error before '->' token
! curses.c: In function `ScreenSize':
! Problem noted by: Noam G. Nudelman <no...@mail.biu.ac.il>
! ( It still do not work on AIX ?)
- Fix installation error
gmake[2]: *** No rule to make target `libreg',
! needed by `install_s'. Stop.
on case where shared libraries are not used.
! Problem noted by: Noam G. Nudelman <no...@mail.biu.ac.il>
! - On leaving of folder action message was cleared immediately.
! - Current pointer location was not preserved when
! new mail arrived.
! - On syncing mailbox elm did not asked should messages
! to be deleted, if several mailbox was open and on
! last was no messages marked for deletion.
! - Saving of assembled message failed, because content_length
! was miscalculated (PL105 copied also Received: -headers
! from part 1 and these was not calculated.)
! - If builtin++ is selected as default pager, Configure
! now provides option that builtin pager is used even
! when environment variable $PAGER is set. That is now
! also default.
Changes of Elm2.4ME+ PL105 (25) compared with Elm2.4ME+ PL104 (25)
------------------------------------------------------------------
***************
*** 168,176 ****
- Added '|' -command to message assembly mode (uses readmsg
and therefore requires that folder state information
$ELMSTATE is available.) That command naturally do not
! work if message assembly mode is started from view digest
as mailbox -mode (on that mode there is no usefull folder
! state information.)
Changes of Elm2.4ME+ PL104 (25) compared with Elm2.4ME+ PL103 (25)
------------------------------------------------------------------
--- 186,194 ----
- Added '|' -command to message assembly mode (uses readmsg
and therefore requires that folder state information
$ELMSTATE is available.) That command naturally do not
! work if message assembly mode is started from view digest
as mailbox -mode (on that mode there is no usefull folder
! state information.)
Changes of Elm2.4ME+ PL104 (25) compared with Elm2.4ME+ PL103 (25)
------------------------------------------------------------------
***************
*** 8413,8421 ****
term ISO-2022 charset-name
term ISO-2022 charset-definition
! term ISO-2022/DW charset-name
term ISO-2022/DW charset-definition
! term ISO-2022-LIKE charset-name bank-specification
term PRIVATE charset-name d/d d/d d/d
term PRIVATE charset-name [ condition ] d/d d/d d/d
--- 8431,8439 ----
term ISO-2022 charset-name
term ISO-2022 charset-definition
! term ISO-2022/DW charset-name
term ISO-2022/DW charset-definition
! term ISO-2022-LIKE charset-name bank-specification
term PRIVATE charset-name d/d d/d d/d
term PRIVATE charset-name [ condition ] d/d d/d d/d
***************
*** 8451,8463 ****
Read commensts about using of these from doc/terminal.info
! ISO-2022-LIKE indicates that terminal assign private
! codes for charset. That defination do not define iso 2022
! codes for charset, but it is used than these codes are
! defined for charset. For example that may be used on lines
! like
! vt200 ISO-2022-LIKE DEC-MCS left=bank-G0;bank-G0-94=4/2;right=bank-G2;bank-96=3/12
Flag keyword xterm-title specifies that terminal supports
--- 8469,8481 ----
Read commensts about using of these from doc/terminal.info
! ISO-2022-LIKE indicates that terminal assign private
! codes for charset. That defination do not define iso 2022
! codes for charset, but it is used than these codes are
! defined for charset. For example that may be used on lines
! like
! vt200 ISO-2022-LIKE DEC-MCS left=bank-G0;bank-G0-94=4/2;right=bank-G2;bank-96=3/12
Flag keyword xterm-title specifies that terminal supports
Index: elm2.4.ME+.107a-cvs/lib/streamsched.c
*** elm2.4.ME+.107/lib/streamsched.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.107a-cvs/lib/streamsched.c 2003-09-26 19:06:17.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.29 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.31 2003/09/26 16:06:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.31 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 122,128 ****
if (n < 0) {
err = errno;
DPRINT(Debug,8,(&Debug,
! "ss_ReadFromSocket: read error %s (errno %d)\n",
error_description(err),err));
}
--- 122,128 ----
if (n < 0) {
err = errno;
DPRINT(Debug,8,(&Debug,
! "ss_WriteToSocket: read error %s (errno %d)\n",
error_description(err),err));
}
***************
*** 871,880 ****
if (ss->error_state) {
/* Let's hope that read_callback is available ... */
! DPRINT(Debug,4,(&Debug,
! " ... [%s] Signaling on error state: %s\n",
! Ident,ss->error_state));
! call_user_read_callback(ss);
}
}
--- 871,887 ----
if (ss->error_state) {
/* Let's hope that read_callback is available ... */
! if ( ss_noaction_routine == ss->read_act) {
! DPRINT(Debug,4,(&Debug,
! " ... [%s] Can't signal on error state: %s\n",
! Ident,ss->error_state));
!
! } else {
! DPRINT(Debug,4,(&Debug,
! " ... [%s] Signaling on error state: %s\n",
! Ident,ss->error_state));
! call_user_read_callback(ss);
! }
}
}
Index: elm2.4.ME+.107a-cvs/src/elm.c
*** elm2.4.ME+.107/src/elm.c 2003-08-11 11:21:18.000000000 +0300
--- elm2.4.ME+.107a-cvs/src/elm.c 2003-09-14 19:35:19.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.56 2003/08/11 06:53:24 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.57 2003/09/14 16:35:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.57 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 1204,1212 ****
Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmOptions,
"Options"));
! if((i=options(current_mailbox)) > 0)
get_page(current, current_mailbox);
! else if(i < 0)
leave(0, ¤t_mailbox);
redraw++; /* always fix da screen... */
}
--- 1204,1213 ----
Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmOptions,
"Options"));
! if((i=options(current_mailbox)) > 0) {
! current = get_current(current_mailbox);
get_page(current, current_mailbox);
! } else if(i < 0)
leave(0, ¤t_mailbox);
redraw++; /* always fix da screen... */
}
Index: elm2.4.ME+.107a-cvs/src/newmbox.c
*** elm2.4.ME+.107/src/newmbox.c 2003-08-16 09:58:21.000000000 +0300
--- elm2.4.ME+.107a-cvs/src/newmbox.c 2003-09-27 18:38:22.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: newmbox.c,v 1.71 2003/08/14 14:14:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: newmbox.c,v 1.76 2003/09/27 15:38:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 248,254 ****
{
int initialize = mode == COUNT_initialize;
! int width = elm_COLUMNS - 52;
if (initialize) {
counter->truncated_name = NULL;
--- 248,256 ----
{
int initialize = mode == COUNT_initialize;
! int width = elm_COLUMNS - 52
! - ((skipcount >= 10000) ? 1 : 0)
! - ((count >= 10000) ? 1 : 0);
if (initialize) {
counter->truncated_name = NULL;
***************
*** 295,307 ****
PutLineX(counter->count_x, counter->count_y,
FRM("%d (%02d%%) "), count,percent);
! if (skipcount > 0 || percent2 >= 0)
! PutLineX(counter->count_x, counter->count_y+12,
CATGETS(elm_msg_cat, ElmSet,
ElmSkippingInMessage,
" %d (%02d%%) skipped "),
! skipcount,percent2);
!
if (COUNT_finalize == mode) {
CarriageReturn();
--- 297,315 ----
PutLineX(counter->count_x, counter->count_y,
FRM("%d (%02d%%) "), count,percent);
! if (skipcount > 0 || percent2 >= 0) {
! int add = 12 - ((skipcount >= 100) ? 1 : 0)
! - ((skipcount >= 1000) ? 1 : 0)
! + ((count >= 10000) ? 1 : 0);
!
!
! PutLineX(counter->count_x, counter->count_y+add,
CATGETS(elm_msg_cat, ElmSet,
ElmSkippingInMessage,
" %d (%02d%%) skipped "),
! skipcount,percent2);
! }
!
if (COUNT_finalize == mode) {
CarriageReturn();
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
files elm-2.4ME+PL108.patch.gz
and elm-2.4ME+108.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL108.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+108.tar.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+108.tar.gz >
and <URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL108.patch.gz >
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL108.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL107 (25) --------------------------------
Note: You must create directory src/screen before applying this patch!
Undo Elm2.4ME+ PL107a (25) patch before applying this patch.
For apply patch use command
patch -p1 < {path...}/this-file
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Index: elm2.4.ME+.108-cvs/hdrs/patchlevel.h
Prereq: 1094000000
*** elm2.4.ME+.107/hdrs/patchlevel.h 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/patchlevel.h 2003-10-12 11:47:41.000000000 +0300
***************
*** 1,9 ****
! #define PATCHLEVEL "107 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.107
*/
! #define LAST_REPORT_TIME 1094000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Sep, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Sep, 2003"
--- 1,9 ----
! #define PATCHLEVEL "108 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.108
*/
! #define LAST_REPORT_TIME 1097000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Oct, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Oct, 2003"
Index: elm2.4.ME+.108-cvs/README.ME+
--- elm2.4.ME+.108-cvs/README.ME+ 2003-10-12 11:47:40.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.638 2003/09/05 19:13:12 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.654 2003/10/12 08:47:40 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,115 ****
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
--- 13,210 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL108 (25) compared with Elm2.4ME+ PL107 (25)
+ ------------------------------------------------------------------
+
+ Note: You must create directory
+ src/screen
+ before applying this patch!
+
+ Undo Elm2.4ME+ PL107a (25) patch before applying this patch.
+
+ SUMMARY: This release collects PL107a patch, adds
+ invoke e)ditor command to header editing screen,
+ enhances internal mailcap parser and fixes some
+ bugs. New elmrc options
+ internal-mailcap-trusted-programs
+ and internal-mailcap-prompt-trusted are added.
+
+ - Return correct page after returning from
+ o)ptions screen when sorting order is changed.
+ Problem noted by: Ike Stoddard <forw...@oplink.net>
+
+ - Possible fix for error
+ STREAMSCHED PANIC in streamsched.c:1127:ss_noaction_routine
+ when IMAP / TLS connection is closed by server.
+
+ - Handle better "skipped " counter, when there is lot of
+ skipped mails.
+
+ - Cursor movement is changed little
+
+ - Added invoke e)ditor command to header editing screen.
+ Following headers are supported:
+ From:
+ To:
+ CC:
+ Bcc:
+ Reply-To:
+ Subject:
+
+ - Added elmrc variable internal-mailcap-trusted-programs
+ which lists programs for which Mailcap program selection
+ -screen answers 'Yes' by default. In all questions are
+ answered 'Yes' by default, Mailcap program selection -screen
+ is only set if new elmrc variable
+ internal-mailcap-prompt-trusted is set. If program
+ is on internal mailcap is with full path, it should be listed
+ on internal-mailcap-trusted-programs also with full path.
+ Note however that programs given on test= clause on
+ mailcap are executed always without prompting.
+
+ - Internal mailcap parser now support wildcarding of subtype,
+ for example image/*. However these wildcarded entries are
+ treated with lower priority than normal entries. So they
+ normally do not match if there is more specific entry.
+
+ - Avoid divizion be zero when opening non existing
+ (or empty?) mailbox.
+ From: Darren Reed <ava...@caligula.anu.edu.au>
+ ( Divizion by zero seems not be visible on all systems. )
+
+ New elmrc options:
+ internal-mailcap-trusted-programs
+ internal-mailcap-prompt-trusted
+
+ New files:
+ src/screen/def_screen.h
+ src/screen/Makefile.SH
+ src/screen/screen.c
+ src/screen/curs_input.c
+ src/screen/termbuffer.c
+ src/screen/termtitle.c
+ src/screen/termcharset.c
+ src/screen/cur_process.c
+
+ Removed files:
+ src/curses.c
+ hdrs/elm_curses.h
+
+ Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
+ ------------------------------------------------------------------
+
--- 263,271 ----
- Added '|' -command to message assembly mode (uses readmsg
and therefore requires that folder state information
$ELMSTATE is available.) That command naturally do not
! work if message assembly mode is started from view digest
as mailbox -mode (on that mode there is no usefull folder
! state information.)
Changes of Elm2.4ME+ PL104 (25) compared with Elm2.4ME+ PL103 (25)
------------------------------------------------------------------
***************
*** 8413,8421 ****
term ISO-2022 charset-name
term ISO-2022 charset-definition
! term ISO-2022/DW charset-name
term ISO-2022/DW charset-definition
! term ISO-2022-LIKE charset-name bank-specification
term PRIVATE charset-name d/d d/d d/d
term PRIVATE charset-name [ condition ] d/d d/d d/d
--- 8508,8516 ----
term ISO-2022 charset-name
term ISO-2022 charset-definition
! term ISO-2022/DW charset-name
term ISO-2022/DW charset-definition
! term ISO-2022-LIKE charset-name bank-specification
term PRIVATE charset-name d/d d/d d/d
term PRIVATE charset-name [ condition ] d/d d/d d/d
***************
*** 8451,8463 ****
Read commensts about using of these from doc/terminal.info
! ISO-2022-LIKE indicates that terminal assign private
! codes for charset. That defination do not define iso 2022
! codes for charset, but it is used than these codes are
! defined for charset. For example that may be used on lines
! like
! vt200 ISO-2022-LIKE DEC-MCS left=bank-G0;bank-G0-94=4/2;right=bank-G2;bank-96=3/12
Flag keyword xterm-title specifies that terminal supports
--- 8546,8558 ----
Read commensts about using of these from doc/terminal.info
! ISO-2022-LIKE indicates that terminal assign private
! codes for charset. That defination do not define iso 2022
! codes for charset, but it is used than these codes are
! defined for charset. For example that may be used on lines
! like
! vt200 ISO-2022-LIKE DEC-MCS left=bank-G0;bank-G0-94=4/2;right=bank-G2;bank-96=3/12
Flag keyword xterm-title specifies that terminal supports
***************
*** 8924,8929 ****
--- 9019,9026 ----
imap-use-examine IMAP
incoming-mailbox (POP, IMAP)
internal-mailcaps MIME
+ internal-mailcap-trusted-programs MIME
+ internal-mailcap-prompt-trusted MIME
iso646-charsets MIME
keeppassfor PGP
local-fast-lookup -
Index: elm2.4.ME+.108-cvs/doc/elmrc-info
*** elm2.4.ME+.107/doc/elmrc-info 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/doc/elmrc-info 2003-10-11 11:42:10.000000000 +0300
***************
*** 1,4 ****
! #@(#)$Id: elmrc-info,v 1.53 2003/08/04 14:58:56 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
--- 1,4 ----
! #@(#)$Id: elmrc-info,v 1.54 2003/10/11 08:42:10 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
***************
*** 775,781 ****
# List of mailcaps for internal mailcap support (without metmail).
# List may be space or ':' seperated. Separate values may be quoted.
# Set value to "none" to disable internal mailcap support.
! # See also: metamail-mailcaps
metamail-mailcaps
# List of mailcaps for metamail. List may be space or ':' seperated. Separate
--- 775,792 ----
# List of mailcaps for internal mailcap support (without metmail).
# List may be space or ':' seperated. Separate values may be quoted.
# Set value to "none" to disable internal mailcap support.
! # See also: metamail-mailcaps, internal-mailcap-trusted-programs
!
! internal-mailcap-trusted-programs
! # List of programs which are executed by default when using internal
! # mailcap. Programs given on test= are always executed without
! # prompting.
! # See also: internal-mailcap-prompt-trusted, internal-mailcaps
!
! internal-mailcap-prompt-trusted
! # If set, Mailcap program selection -screen is shown even when
! # all programs asked on screen are executed by default
! # See also: internal-mailcap-trusted-programs
metamail-mailcaps
# List of mailcaps for metamail. List may be space or ':' seperated. Separate
Index: elm2.4.ME+.108-cvs/hdrs/defs.h
*** elm2.4.ME+.107/hdrs/defs.h 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/defs.h 2003-10-01 20:34:34.000000000 +0300
***************
*** 1,7 ****
! /* $Id: defs.h,v 1.38 2003/08/04 14:58:56 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* $Id: defs.h,v 1.39 2003/10/01 17:34:34 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 309,316 ****
--- 309,319 ----
/* find tab stops preceding or following a given column position 'a', where
* the column position starts counting from 1, NOT 0!
* The external integer "tabspacing" must be declared to use this. */
+
+ /*
#define prev_tab(a) (((((a-1)/tabspacing))*tabspacing)+1)
#define next_tab(a) (((((a-1)/tabspacing)+1)*tabspacing)+1)
+ */
#define no_ret(s) { register int xyz; /* varname is for lint */ \
for (xyz=strlen(s)-1; xyz >= 0 && \
Index: elm2.4.ME+.108-cvs/hdrs/elm_curses.h
*** elm2.4.ME+.107/hdrs/elm_curses.h 2003-04-24 18:52:20.000000000 +0300
--- /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
***************
*** 1,78 ****
- /* $Id: elm_curses.h,v 1.8 2003/02/16 10:01:26 hurtta Exp $ */
-
- /******************************************************************************
- * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
- *
- * Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
- ******************************************************************************
- * The Elm Mail System
- *
- * Copyright (c) 1988-1992 USENET Community Trust
- * Copyright (c) 1986,1987 Dave Taylor
- ****************************************************************************/
-
- #define OFF 0
- #define ON 1
-
- extern int ClearScreen P_((void)),
- CleartoEOLN P_((void)),
- CleartoEOS P_((void)),
- MoveCursor P_((int, int)),
- StartBold P_((void)),
- EndBold P_((void)),
- StartUnderline P_((void)),
- EndUnderline P_((void)),
- StartHalfbright P_((void)),
- EndHalfbright P_((void)),
- StartInverse P_((void)),
- EndInverse P_((void)),
- RawState P_((void));
-
- /* This must be called before anything else!! */
- extern int InitScreen P_((void));
-
- extern void ScreenSize P_((int *lines, int *columns));
- extern void Write_to_screen P_((
- CONST char *format, CONST char *msg, ...
- ));
- extern void PutLine0 P_((int, int, CONST char *));
- extern void PutLineX P_((int, int, CONST char *, CONST char *, ...));
-
- extern void Writechar P_((int ch));
-
- extern int ReadCh P_((int));
- extern struct charset_state * ReadCh2 P_((int flags));
- extern void SetXYLocation P_((int x, int y));
- extern void CarriageReturn P_((void));
- extern void NewLine P_((void));
- extern void Raw P_((int state));
- extern void transmit_functions P_((int newstate));
- extern void GetXYLocation P_((int *x,int *y));
-
- extern int set_display_charset P_((charset_t set, int silent));
- extern void switch_display_charset P_((int to_display));
- extern charset_t * give_display_charsets P_((charset_t *storage,
- int max));
-
- extern int set_terminal_titles P_((char *title,char *icon));
-
- /* May be called from signal handler
- to_display = 0 -- suspended
- = 1 -- as set
- = 2 -- exiting
- */
- extern void switch_title P_((int to_display));
-
-
-
- extern struct string *curses_printable_clip P_((struct string *S,int *pos,int len,
- int *visible_len,int max_visible));
-
-
- #if POLL_METHOD
- int error_sleep P_((int seconds));
- #endif
- extern int raw_off_called P_((void));
- extern void WriteRaw P_((const char *str));
- extern void FlushBuffer P_((void));
-
--- 0 ----
Index: elm2.4.ME+.108-cvs/hdrs/elm.h
*** elm2.4.ME+.107/hdrs/elm.h 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/elm.h 2003-10-01 20:34:34.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elm.h,v 1.16 2003/07/29 18:46:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.16 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* $Id: elm.h,v 1.17 2003/10/01 17:34:34 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 26,32 ****
*/
#include "elmlib.h"
- #include "elm_curses.h"
/******** static character string containing the version number *******/
--- 26,31 ----
Index: elm2.4.ME+.108-cvs/hdrs/elmlib.h
*** elm2.4.ME+.107/hdrs/elmlib.h 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/elmlib.h 2003-10-11 14:35:49.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmlib.h,v 1.193 2003/08/19 14:34:12 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.193 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmlib.h,v 1.196 2003/10/11 11:35:49 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.196 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 806,811 ****
--- 806,813 ----
extern char metamail_path[SLEN]; /* Metamail path or "none" if no metamail */
extern PATH metamail_mailcaps; /* mailcaps for metamail */
extern PATH internal_mailcaps; /* mailcaps for internal handler */
+ extern PATH internal_mailcap_t_programs; /* Execute program without asking */
+ extern int internal_mailcap_t_prompt; /* ... really? */
extern int metoo; /* flag: copy me on mail to alias? */
extern int mimeforward;
extern int mime_body_keywords; /* flag: if false the body is not parsed for keywords */
***************
*** 1111,1116 ****
--- 1113,1121 ----
/* lib/mbox.c */
+ #define OFF 0
+ #define ON 1
+
typedef struct header_list * header_list_ptr;
enum sessionlock_mode { SESSIONLOCK_NORMAL = 0,
***************
*** 2127,2133 ****
/* WARNING: May return codes > MIME_TYPE_VIDEO if unknow or bad type */
extern enum mime_major_type get_major_type_code P_((media_type_t T));
extern CONST char * get_major_type_name P_((media_type_t T));
!
#define MIME_RFC822 1
#define MIME_MIXED 2
--- 2132,2138 ----
/* WARNING: May return codes > MIME_TYPE_VIDEO if unknow or bad type */
extern enum mime_major_type get_major_type_code P_((media_type_t T));
extern CONST char * get_major_type_name P_((media_type_t T));
! extern CONST char * get_major_type_name2 P_((enum mime_major_type m));
#define MIME_RFC822 1
#define MIME_MIXED 2
***************
*** 2140,2145 ****
--- 2145,2152 ----
extern int get_type_flags P_((media_type_t T));
extern CONST char * get_subtype_name P_((media_type_t T));
+ extern enum mime_major_type give_major_type P_(( const char * major,
+ int create));
extern media_type_t give_media_type P_(( const char * major,
const char * minor,
Index: elm2.4.ME+.108-cvs/hdrs/elmutil.h
*** elm2.4.ME+.107/hdrs/elmutil.h 2002-01-26 13:14:45.000000000 +0200
--- elm2.4.ME+.108-cvs/hdrs/elmutil.h 2003-10-01 20:34:34.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmutil.h,v 1.9 2001/06/16 10:40:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* $Id: elmutil.h,v 1.10 2003/10/01 17:34:34 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 23,29 ****
#include "patchlevel.h"
#include "elmlib.h"
- #include "elm_curses.h"
/******** static character string containing the version number *******/
--- 23,28 ----
Index: elm2.4.ME+.108-cvs/hdrs/hdr_imp.h
*** elm2.4.ME+.107/hdrs/hdr_imp.h 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/hdr_imp.h 2003-10-05 19:07:27.000000000 +0300
***************
*** 28,39 ****
--- 28,63 ----
int demime,
charset_t defcharset,
int replace));
+ int add_to_hdr P_((struct mailing_headers * headers,
+ header_ptr X,
+ const char *value,
+ int demime,
+ charset_t defcharset,
+ int replace));
+ int add_cc_hdr P_((struct mailing_headers * headers,
+ header_ptr X,
+ const char *value,
+ int demime,
+ charset_t defcharset,
+ int replace));
+ int add_bcc_hdr P_((struct mailing_headers * headers,
+ header_ptr X,
+ const char *value,
+ int demime,
+ charset_t defcharset,
+ int replace));
int add_replyto_hdr P_((struct mailing_headers * headers,
header_ptr X,
const char *value,
int demime,
charset_t defcharset,
int replace));
+ int add_subject_hdr P_((struct mailing_headers * headers,
+ header_ptr X,
+ const char *value,
+ int demime,
+ charset_t defcharset,
+ int replace));
int add_user_hdr P_((struct mailing_headers * headers,
header_ptr X,
const char *value,
Index: elm2.4.ME+.108-cvs/hdrs/headers.h
*** elm2.4.ME+.107/hdrs/headers.h 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/headers.h 2003-10-01 20:34:34.000000000 +0300
***************
*** 1,7 ****
! /* $Id: headers.h,v 1.18 2003/07/29 18:46:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* $Id: headers.h,v 1.19 2003/10/01 17:34:34 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 17,28 ****
#include <setjmp.h>
#include "elmlib.h"
- #include "elm_curses.h"
#include "mime.h"
! /*
! #include "me.h"
! */
/******** global variables accessable by all pieces of the program *******/
--- 17,25 ----
#include <setjmp.h>
#include "elmlib.h"
#include "mime.h"
!
/******** global variables accessable by all pieces of the program *******/
Index: elm2.4.ME+.108-cvs/hdrs/me.h
*** elm2.4.ME+.107/hdrs/me.h 2003-08-11 11:21:18.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/me.h 2003-10-05 19:07:27.000000000 +0300
***************
*** 1,7 ****
! /* $Id: me.h,v 1.74 2003/08/10 10:03:35 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.74 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! /* $Id: me.h,v 1.76 2003/10/05 16:07:27 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 653,659 ****
charset_t hdr_charset));
extern void edit_headers P_((struct mailing_headers *headers,
struct mailer_info *mailer_info,
! charset_t hdr_charset));
extern struct string *hdr_to_expval P_((struct expanded_address addrs));
extern void hdr_to_buffer P_((struct expanded_address addrs,
--- 653,660 ----
charset_t hdr_charset));
extern void edit_headers P_((struct mailing_headers *headers,
struct mailer_info *mailer_info,
! charset_t hdr_charset,
! int hdr_encondig_supported));
extern struct string *hdr_to_expval P_((struct expanded_address addrs));
extern void hdr_to_buffer P_((struct expanded_address addrs,
***************
*** 674,679 ****
--- 675,681 ----
/* editmsg.c */
+ extern int have_editor P_((char *editor));
extern int edit_the_message P_((char *filename,
int already_has_text,
struct mailing_headers * headers,
***************
*** 970,975 ****
--- 972,1046 ----
extern int have_partial P_((struct MailboxView *parent_mailbox));
+ /* screen/screen.c */
+
+ extern int InitScreen P_((void));
+ extern void ScreenSize P_((int *lines, int *columns));
+ extern void Writechar P_((int ch));
+ extern void Write_to_screen P_((CONST char *format, CONST char *msg, ...));
+ extern void PutLine0 P_((int x, int y, CONST char *line));
+ extern void PutLineX P_((int line , int col, CONST char *, CONST char *, ...));
+ extern int CleartoEOLN P_((void));
+ extern int CleartoEOS P_((void));
+ extern int RawState P_((void));
+ extern void Raw P_((int state));
+ extern struct charset_state * ReadCh2 P_((int flags));
+ extern int ReadCh P_((int flags));
+ extern void GetXYLocation P_((int *x,int *y));
+ extern int ClearScreen P_((void));
+ extern int MoveCursor P_((int row, int col));
+ extern void CarriageReturn P_((void));
+ extern void NewLine P_((void));
+ extern int StartBold P_((void));
+ extern int EndBold P_((void));
+ extern int StartInverse P_((void));
+ extern int EndInverse P_((void));
+ extern int ClearScreen P_((void));
+ extern int get_tabspacing P_((void));
+ extern int StartUnderline P_((void));
+ extern int EndUnderline P_((void));
+ extern int StartHalfbright P_((void));
+ extern int EndHalfbright P_((void));
+
+ /* screen/curses.c */
+
+ extern void WriteRaw P_((const char *str));
+ extern struct string *curses_printable_clip P_((struct string *S,
+ int *pos,
+ int len,
+ int *visible_len,
+ int max_visible));
+ extern int raw_off_called P_((void));
+ extern void transmit_functions P_((int newstate));
+ extern void InvalidateLocation P_((void));
+
+ /* screen/curs_input.c */
+
+ #if POLL_METHOD
+ extern int error_sleep P_((int seconds));
+ #endif
+
+ /* screen/termcharcharset.c */
+
+ extern charset_t * give_display_charsets P_((charset_t *storage,
+ int max));
+
+ extern int set_display_charset P_((charset_t set,
+ int silent));
+ extern void switch_display_charset P_((int to_display));
+
+
+ /* screen/termtitle.c */
+
+ extern int set_terminal_titles P_((char *title,
+ char *icon));
+ extern void switch_title P_((int to_display));
+
+
+ /* screen/termbuffer.c */
+
+ extern void FlushBuffer P_((void));
+
/*
* Local Variables:
* mode:c
Index: elm2.4.ME+.108-cvs/hdrs/save_opts.h
*** elm2.4.ME+.107/hdrs/save_opts.h 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/save_opts.h 2003-10-11 11:42:10.000000000 +0300
***************
*** 1,7 ****
! /* @(#)$Id: save_opts.h,v 1.71 2003/08/04 14:58:57 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* @(#)$Id: save_opts.h,v 1.72 2003/10/11 08:42:10 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.72 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 309,314 ****
--- 309,318 ----
#endif
{"incoming-mailbox", -1L,ZZZ_DT_STR(raw_defaultfile),
sizeof raw_defaultfile, NULL },
+ {"internal-mailcap-prompt-trusted", -1L,
+ ZZZ_DT_BOL(&internal_mailcap_t_prompt), 0, NULL },
+ {"internal-mailcap-trusted-programs",
+ -1L,ZZZ_DT_PATH(&internal_mailcap_t_programs), 0, NULL},
{"internal-mailcaps", -1L,ZZZ_DT_PATH(&internal_mailcaps), 0, NULL},
{"iso646-charsets", -1L,ZZZ_DT_FUNC(charset_iso646func),0, NULL},
{"keep", -1L,ZZZ_DT_SYN("keepempty"), 0, NULL},
Index: elm2.4.ME+.108-cvs/hdrs/s_elm.h
*** elm2.4.ME+.107/hdrs/s_elm.h 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.108-cvs/hdrs/s_elm.h 2003-10-05 19:07:27.000000000 +0300
***************
*** 1078,1080 ****
--- 1078,1087 ----
#define ElmAssemble 0x851
#define ElmNotCollected 0x852
#define ElmSearchingInMessageDone 0x853
+ #define ElmHdrmenuInstruct1 0x854
+ #define ElmHdrmenuInstruct1NoShell 0x855
+ #define ElmHdrEditComment 0x856
+ #define ElmHdrEditCommentEnc 0x857
+ #define ElmHdrEditCommentNo 0x858
+ #define ElmHdrNotSupported 0x859
+ #define ElmHdrGarbage 0x85a
Index: elm2.4.ME+.108-cvs/lib/headers.c
*** elm2.4.ME+.107/lib/headers.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.108-cvs/lib/headers.c 2003-10-05 19:07:27.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: headers.c,v 1.26 2003/09/02 18:52:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: headers.c,v 1.27 2003/10/05 16:07:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 412,418 ****
static struct header_info header_types[] = {
/* From STD 11 (RFC 822): */
! { "Subject", hdr_decode_from_text, no_add_to_mail_hdr },
{ "Comments", hdr_decode_from_text, no_add_to_mail_hdr },
{ "Return-path", hdr_decode_from_comment, add_env_from_hdr },
{ "Received", hdr_decode_from_comment, no_add_to_mail_hdr },
--- 412,418 ----
static struct header_info header_types[] = {
/* From STD 11 (RFC 822): */
! { "Subject", hdr_decode_from_text, add_subject_hdr },
{ "Comments", hdr_decode_from_text, no_add_to_mail_hdr },
{ "Return-path", hdr_decode_from_comment, add_env_from_hdr },
{ "Received", hdr_decode_from_comment, no_add_to_mail_hdr },
***************
*** 424,434 ****
{ "Resent-Sender", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Date", hdr_decode_from_comment, no_add_to_mail_hdr },
{ "Resent-Date", hdr_decode_from_comment, no_add_to_mail_hdr },
! { "To", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Resent-To", hdr_decode_from_addr, no_add_to_mail_hdr },
! { "cc", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Resent-cc", hdr_decode_from_addr, no_add_to_mail_hdr },
! { "bcc", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Resent-bcc", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Message-ID", hdr_decode_from_comment, no_add_to_mail_hdr },
{ "Resent-Message-ID", hdr_decode_from_comment, no_add_to_mail_hdr },
--- 424,434 ----
{ "Resent-Sender", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Date", hdr_decode_from_comment, no_add_to_mail_hdr },
{ "Resent-Date", hdr_decode_from_comment, no_add_to_mail_hdr },
! { "To", hdr_decode_from_addr, add_to_hdr },
{ "Resent-To", hdr_decode_from_addr, no_add_to_mail_hdr },
! { "cc", hdr_decode_from_addr, add_cc_hdr },
{ "Resent-cc", hdr_decode_from_addr, no_add_to_mail_hdr },
! { "bcc", hdr_decode_from_addr, add_bcc_hdr },
{ "Resent-bcc", hdr_decode_from_addr, no_add_to_mail_hdr },
{ "Message-ID", hdr_decode_from_comment, no_add_to_mail_hdr },
{ "Resent-Message-ID", hdr_decode_from_comment, no_add_to_mail_hdr },
Index: elm2.4.ME+.108-cvs/lib/Makefile.SH
*** elm2.4.ME+.107/lib/Makefile.SH 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/lib/Makefile.SH 2003-10-01 20:34:34.000000000 +0300
***************
*** 46,52 ****
echo "Extracting lib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.85 2003/07/24 16:29:51 hurtta Exp $
#
# Makefile for the ELM mail program.
#
--- 46,52 ----
echo "Extracting lib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.86 2003/10/01 17:34:34 hurtta Exp $
#
# Makefile for the ELM mail program.
#
***************
*** 372,382 ****
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h $(INCLDIR)/elmlib.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 372,382 ----
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/defs.h $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/elmlib.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
Index: elm2.4.ME+.108-cvs/lib/mediatype.c
*** elm2.4.ME+.107/lib/mediatype.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/lib/mediatype.c 2003-10-12 09:42:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mediatype.c,v 1.7 2003/08/04 14:58:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mediatype.c,v 1.10 2003/10/12 06:42:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 136,141 ****
--- 136,153 ----
return major_type_list[T->major_type_index].name;
}
+ CONST char * get_major_type_name2(m)
+ enum mime_major_type m;
+ {
+ if (m < 0 || m >= major_type_count)
+ panic("MEDIA TYPE PANIC",__FILE__,__LINE__,"get_major_type_name2",
+ "Bad major_type_index",0);
+
+ return major_type_list[m].name;
+ }
+
+
+
int get_type_flags(T)
media_type_t T;
{
***************
*** 171,190 ****
return T->subtype;
}
! media_type_t give_media_type(major,minor,create)
const char * major;
- const char * minor;
int create;
{
int i;
for (i = 0; i < major_type_count; i++)
if (0 == istrcmp(major,major_type_list[i].name))
break;
if (i >= major_type_count) {
if (!create)
! return NULL;
if (!MAJOR_TYPE_MALLOCED) {
major_type_list = safe_malloc((major_type_count+1) *
--- 183,205 ----
return T->subtype;
}
! enum mime_major_type give_major_type(major,create)
const char * major;
int create;
{
int i;
+ if (NULL != strchr(major,'/'))
+ panic("MEDIA TYPE PANIC",__FILE__,__LINE__,"give_major_type",
+ "Bad major type",0);
+
for (i = 0; i < major_type_count; i++)
if (0 == istrcmp(major,major_type_list[i].name))
break;
if (i >= major_type_count) {
if (!create)
! return MIME_TYPE_UNKNOWN;
if (!MAJOR_TYPE_MALLOCED) {
major_type_list = safe_malloc((major_type_count+1) *
***************
*** 205,214 ****
i = major_type_count++;
DPRINT(Debug,10,(&Debug,
! "give_media_type: Created major type %d: %s\n",
i,major_type_list[i].name));
}
! return give_media_type2((enum mime_major_type)i,minor,create);
}
media_type_t give_media_type2(major_type_code,minor,create)
--- 220,244 ----
i = major_type_count++;
DPRINT(Debug,10,(&Debug,
! "give_major_type: Created major type %d: %s\n",
i,major_type_list[i].name));
}
!
! return (enum mime_major_type)i;
! }
!
! media_type_t give_media_type(major,minor,create)
! const char * major;
! const char * minor;
! int create;
! {
!
! enum mime_major_type I1 = give_major_type(major,create);
!
! if (MIME_TYPE_UNKNOWN == I1)
! return NULL;
!
! return give_media_type2(I1,minor,create);
}
media_type_t give_media_type2(major_type_code,minor,create)
Index: elm2.4.ME+.108-cvs/lib/outheaders.c
*** elm2.4.ME+.107/lib/outheaders.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.108-cvs/lib/outheaders.c 2003-10-05 19:07:27.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.11 2003/04/22 18:34:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.12 2003/10/05 16:07:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 400,405 ****
--- 400,515 ----
return 1;
}
+
+ #ifdef ANSI_C
+ hdr_add_to_mailing_hdr add_to_hdr;
+ #endif
+ int add_to_hdr(headers,X,value,demime,defcharset,replace)
+ struct mailing_headers * headers;
+ header_ptr X;
+ CONST char *value;
+ int demime;
+ charset_t defcharset;
+ int replace;
+ {
+ int j;
+
+ struct addr_item * TMP;
+
+ TMP = break_down_address(value,demime,defcharset);
+
+ if (replace)
+ free_expanded_address(&(headers->to));
+
+ for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
+ int pos = add_expanded_addr_(&(headers->to),
+ TMP[j].addr,
+ TMP[j].fullname,
+ TMP[j].comment);
+ struct string *s = make_surface_addr(TMP[j]);
+ add_textual_addr_(&(headers->to),s,pos,1);
+ free_string(&s);
+ }
+
+ free_addr_items(TMP);
+
+ return 1;
+ }
+
+
+ #ifdef ANSI_C
+ hdr_add_to_mailing_hdr add_cc_hdr;
+ #endif
+ int add_cc_hdr(headers,X,value,demime,defcharset,replace)
+ struct mailing_headers * headers;
+ header_ptr X;
+ CONST char *value;
+ int demime;
+ charset_t defcharset;
+ int replace;
+ {
+ int j;
+
+ struct addr_item * TMP;
+
+ TMP = break_down_address(value,demime,defcharset);
+
+ if (replace)
+ free_expanded_address(&(headers->cc));
+
+ for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
+ int pos = add_expanded_addr_(&(headers->cc),
+ TMP[j].addr,
+ TMP[j].fullname,
+ TMP[j].comment);
+ struct string *s = make_surface_addr(TMP[j]);
+ add_textual_addr_(&(headers->cc),s,pos,1);
+ free_string(&s);
+ }
+
+ free_addr_items(TMP);
+
+ return 1;
+ }
+
+
+ #ifdef ANSI_C
+ hdr_add_to_mailing_hdr add_bcc_hdr;
+ #endif
+ int add_bcc_hdr(headers,X,value,demime,defcharset,replace)
+ struct mailing_headers * headers;
+ header_ptr X;
+ CONST char *value;
+ int demime;
+ charset_t defcharset;
+ int replace;
+ {
+ int j;
+
+ struct addr_item * TMP;
+
+ TMP = break_down_address(value,demime,defcharset);
+
+ if (replace)
+ free_expanded_address(&(headers->bcc));
+
+ for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
+ int pos = add_expanded_addr_(&(headers->bcc),
+ TMP[j].addr,
+ TMP[j].fullname,
+ TMP[j].comment);
+ struct string *s = make_surface_addr(TMP[j]);
+ add_textual_addr_(&(headers->bcc),s,pos,1);
+ free_string(&s);
+ }
+
+ free_addr_items(TMP);
+
+ return 1;
+ }
+
+
+
#ifdef ANSI_C
hdr_add_to_mailing_hdr add_replyto_hdr;
#endif
***************
*** 471,476 ****
--- 581,609 ----
}
+ /* This replaces always */
+ #ifdef ANSI_C
+ hdr_add_to_mailing_hdr add_subject_hdr;
+ #endif
+
+ int add_subject_hdr(headers,X,value,demime,defcharset,replace)
+ struct mailing_headers * headers;
+ header_ptr X;
+ const char *value;
+ int demime;
+ charset_t defcharset;
+ int replace;
+ {
+ if (headers->subject)
+ free_string( & (headers->subject) );
+
+ headers->subject =
+ hdr_to_string(HDR_TEXT,value,defcharset,demime);
+
+ return 1;
+ }
+
+
#ifdef ANSI_C
hdr_add_to_mailing_hdr add_user_hdr;
***************
*** 485,497 ****
int replace;
{
if (replace) {
int i;
for (i = 0; i < headers->user_header_count; i++) {
! if (headers->user_header[i].value)
! free_string(&(headers->user_header[i].value));
! headers->user_header[i].name = NULL;
}
! headers->user_header_count = 0;
}
headers->user_header = safe_realloc(headers->user_header,
--- 618,648 ----
int replace;
{
if (replace) {
+
+ /* Only replace header with same name */
+
int i;
+ int count = 0;
+
for (i = 0; i < headers->user_header_count; i++) {
!
! if (X == headers->user_header[i].name) {
!
! if (headers->user_header[i].value)
! free_string(&(headers->user_header[i].value));
! headers->user_header[i].name = NULL;
! } else {
! headers->user_header[count] = headers->user_header[i];
!
! if (count != i) {
! headers->user_header[i].value = NULL;
! headers->user_header[i].name = NULL;
! }
! count++;
! }
!
}
! headers->user_header_count = count;
}
headers->user_header = safe_realloc(headers->user_header,
Index: elm2.4.ME+.108-cvs/lib/read_rc.c
*** elm2.4.ME+.107/lib/read_rc.c 2003-08-16 09:58:21.000000000 +0300
--- elm2.4.ME+.108-cvs/lib/read_rc.c 2003-10-11 11:42:11.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.117 2003/08/15 19:54:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.117 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.118 2003/10/11 08:42:11 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.118 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 264,269 ****
--- 264,276 ----
NULL, 0,NULL
};
+ PATH internal_mailcap_t_programs = {
+ 0,
+ NULL, 0, NULL
+ };
+ int internal_mailcap_t_prompt = 0;
+
+
int metoo = 0; /* flag: copy me on mail to alias? */
int mime_body_keywords = TRUE; /* flag: parse body looking for encode */
/* keywords */
Index: elm2.4.ME+.108-cvs/lib/streamsched.c
*** elm2.4.ME+.107/lib/streamsched.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.108-cvs/lib/streamsched.c 2003-09-26 19:06:17.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.29 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.31 2003/09/26 16:06:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.31 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
Index: elm2.4.ME+.108-cvs/Makefile.SH
*** elm2.4.ME+.107/Makefile.SH 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/Makefile.SH 2003-10-01 20:34:33.000000000 +0300
***************
*** 21,27 ****
echo "Extracting Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.17 2003/07/24 16:29:51 hurtta Exp $
#
# Makefile for the entire ELM mail system
#
--- 21,27 ----
echo "Extracting Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.18 2003/10/01 17:34:33 hurtta Exp $
#
# Makefile for the entire ELM mail system
#
***************
*** 87,92 ****
--- 87,93 ----
cd melib; $(MAKE) $(MJ) $(MFLAGS) $@
cd shared_libs; $(MAKE) $(MJ) $(MFLAGS) $@
cd src/messages; $(MAKE) $(MJ) $(MFLAGS) $@
+ cd src/screen; $(MAKE) $(MJ) $(MFLAGS) $@
cd src; $(MAKE) $(MJ) $(MFLAGS) $@
cd utils; $(MAKE) $(MJ) $(MFLAGS) $@
cd doc; $(MAKE) $(MJ) $(MFLAGS) $@
Index: elm2.4.ME+.108-cvs/MANIFEST
*** elm2.4.ME+.107/MANIFEST 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.108-cvs/MANIFEST 2003-10-01 20:34:33.000000000 +0300
***************
*** 41,47 ****
doc/printmail.1
doc/readmsg.1
doc/tmac.n
- hdrs/elm_curses.h
hdrs/defs.h
hdrs/elm.h
hdrs/elmutil.h
--- 41,46 ----
***************
*** 149,155 ****
src/attach_menu.c
src/builtin++.c
src/calendar.c
- src/curses.c
src/date.c
src/delete.c
src/edit.c
--- 148,153 ----
***************
*** 380,382 ****
--- 378,389 ----
charset/MAPPINGS/MICSFT/CP1256.TXT
charset/MAPPINGS/MICSFT/CP1257.TXT
charset/MAPPINGS/MICSFT/CP1258.TXT
+ src/screen/def_screen.h
+ src/screen/Makefile.SH
+ src/screen/screen.c
+ src/screen/curs_input.c
+ src/screen/termbuffer.c
+ src/screen/termtitle.c
+ src/screen/termcharset.c
+ src/screen/cur_process.c
+ src/screen/curses.c
Index: elm2.4.ME+.108-cvs/melib/mailcap.c
*** elm2.4.ME+.107/melib/mailcap.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/melib/mailcap.c 2003-10-11 14:35:49.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.9 2003/08/01 08:22:11 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.10 2003/10/11 11:35:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 465,470 ****
--- 465,471 ----
struct mailcap_entry Entry; /* Temporary storage */
int unsupported = 0;
media_type_t T = NULL;
+ enum mime_major_type T_major = MIME_TYPE_UNKNOWN;
zero_mailcap_entry(&Entry);
arg_zero(&keyword);
***************
*** 538,544 ****
linenum,mailcaps[mailcap_idx]);
unsupported++;
! } else if (mcES_error == entry_state || !T) {
unsupported++;
} else
process_field(mailcaps[mailcap_idx],linenum,
--- 539,546 ----
linenum,mailcaps[mailcap_idx]);
unsupported++;
! } else if (mcES_error == entry_state ||
! !T && T_major == MIME_TYPE_UNKNOWN) {
unsupported++;
} else
process_field(mailcaps[mailcap_idx],linenum,
***************
*** 560,573 ****
entry->type = handle_mailcap_entry;
entry->p.mailcap = mailcap;
! register_mt_handler(T,entry);
! DPRINT(Debug,4,(&Debug,
! "Mailcap entry for %s/%s added (%s:%d)\n",
! get_major_type_name(T),
! get_subtype_name(T),
! mailcaps[mailcap_idx],
! linenum));
} else {
DPRINT(Debug,2,(&Debug,
--- 562,587 ----
entry->type = handle_mailcap_entry;
entry->p.mailcap = mailcap;
! if (T) {
! register_mt_handler(T,entry);
!
! DPRINT(Debug,4,(&Debug,
! "Mailcap entry for %s/%s added (%s:%d)\n",
! get_major_type_name(T),
! get_subtype_name(T),
! mailcaps[mailcap_idx],
! linenum));
! } else {
! register_mt_defhandler(T_major,entry);
!
! DPRINT(Debug,4,(&Debug,
! "Mailcap entry for default %s/* added (%s:%d)\n",
! get_major_type_name2(T_major),
! mailcaps[mailcap_idx],
! linenum));
!
! }
} else {
DPRINT(Debug,2,(&Debug,
***************
*** 578,583 ****
--- 592,598 ----
unsupported = 0;
T = NULL;
+ T_major = MIME_TYPE_UNKNOWN;
arg_free(&keyword);
arg_free(&string);
***************
*** 824,831 ****
c++;
}
! if (!c || 0 == strcmp(c,"*"))
unsupported++; /* Wild cards are not supported */
else
T = give_media_type(keyword.arg,c,1);
}
--- 839,848 ----
c++;
}
! if (!c)
unsupported++; /* Wild cards are not supported */
+ else if (0 == strcmp(c,"*"))
+ T_major = give_major_type(keyword.arg,1);
else
T = give_media_type(keyword.arg,c,1);
}
Index: elm2.4.ME+.108-cvs/melib/Makefile.SH
*** elm2.4.ME+.107/melib/Makefile.SH 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/melib/Makefile.SH 2003-10-01 20:34:34.000000000 +0300
***************
*** 16,22 ****
echo "Extracting melib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.16 2003/08/04 14:58:57 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
--- 16,22 ----
echo "Extracting melib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.17 2003/10/01 17:34:34 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
***************
*** 101,111 ****
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h \
$(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 101,111 ----
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/defs.h $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h \
$(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
Index: elm2.4.ME+.108-cvs/nls/C/C/C/s_elm.m
*** elm2.4.ME+.107/nls/C/C/C/s_elm.m 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.108-cvs/nls/C/C/C/s_elm.m 2003-10-05 19:07:28.000000000 +0300
***************
*** 2259,2261 ****
--- 2259,2276 ----
2130 "%.2s-- %-3d <--- message not collected --->
$ #SearchingInMessageDone
2131 "Searching %d. Done "
+ $ #HdrmenuInstruct1
+ 2132 "Choose header, u)ser defined header, !)shell, invoke e)ditor, or <return>."
+ $ #HdrmenuInstruct1NoShell
+ 2133 "Choose header, u)ser defined header, invoke e)ditor, or <return>."
+ $ #HdrEditComment
+ 2134 "# Headers are automatically converted from %s charset and not need encoded\n"
+ $ #HdrEditCommentEnc
+ 2135 "# MIME enconding of headers is supported\n"
+ $ #HdrEditCommentNo
+ 2136 "# MIME enconding of headers is NOT supported\n"
+ $ #HdrNotSupported
+ 2137 "Editing of %s header is not supported."
+ $ #HdrGarbage
+ 2138 "Garbage on header file"
+
Index: elm2.4.ME+.108-cvs/OBSOLETE
*** elm2.4.ME+.107/OBSOLETE 2002-12-15 12:00:26.000000000 +0200
--- elm2.4.ME+.108-cvs/OBSOLETE 2003-10-01 20:34:33.000000000 +0300
***************
*** 32,34 ****
--- 32,36 ----
src/state.c
src/wildcards.c
src/wordwrap.c
+ src/curses.c
+ hdrs/elm_curses.h
Index: elm2.4.ME+.108-cvs/src/builtin++.c
*** elm2.4.ME+.107/src/builtin++.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/builtin++.c 2003-10-01 20:34:34.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: builtin++.c,v 1.19 2003/07/29 18:46:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: builtin++.c,v 1.20 2003/10/01 17:34:34 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 203,209 ****
switch(ch) {
case 0x0009: /* HT */
Writechar('\t');
! chars = ((chars / tabspacing ) +1) * tabspacing;
break;
case 0x000C: /* FF */
case 0x000B: /* VT */
--- 203,210 ----
switch(ch) {
case 0x0009: /* HT */
Writechar('\t');
! chars = ((chars / get_tabspacing() ) +1) *
! get_tabspacing();
break;
case 0x000C: /* FF */
case 0x000B: /* VT */
Index: elm2.4.ME+.108-cvs/src/curses.c
*** elm2.4.ME+.107/src/curses.c 2003-08-16 09:58:21.000000000 +0300
--- /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
***************
*** 1,2293 ****
- static char rcsid[] = "@(#)$Id: curses.c,v 1.39 2003/08/12 07:52:02 hurtta Exp $";
-
- /*****************************************************************************
- * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
- *
- * Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
- ******************************************************************************
- * The Elm Mail System
- *
- * Copyright (c) 1988-1992 USENET Community Trust
- * Copyright (c) 1986,1987 Dave Taylor
- *
- *****************************************************************************/
-
- /** This library gives programs the ability to easily access the
- termcap information and write screen oriented and raw input
- programs. The routines can be called as needed, except that
- to use the cursor / screen routines there must be a call to
- InitScreen() first.
-
- **/
-
- /** NOTE THE ADDITION OF: the #ifndef ELM stuff around routines that
- we don't use. This is for code size and compile time speed...
- **/
-
- #include "def_elm.h"
- #include "s_elm.h"
- #include <errno.h>
-
- DEBUG_VAR(Debug,__FILE__,"ui");
-
- #ifdef I_CURSES
- #include <curses.h> /* <term.h> requires ... */
- #endif /* I_CURSES */
- #ifdef I_TERM
- #include <term.h> /* Defination for tgetent.h and so on ... */
- #endif /* I_TERM */
-
- #undef lines /* ... But undefine lines macro */
- #undef columns /* ... But undefine columns macro */
-
- #ifdef TERMIOS
- # include <termios.h>
- # ifndef sun
- # include <sys/ioctl.h> /* for TIOCGWINSZ */
- # endif
- #else
- # ifdef TERMIO
- # include <termio.h>
- # else
- # include <sgtty.h>
- # endif
- #endif
-
- #include <errno.h>
-
- #ifdef PTEM
- # include <sys/stream.h>
- # include <sys/ptem.h>
- #endif
-
- #ifdef SHORTNAMES
- # define _clearinverse _clrinv
- # define _cleartoeoln _clrtoeoln
- # define _cleartoeos _clr2eos
- # define _transmit_off xmit_off
- # define _transmit_on xmit_on
- #endif
-
- #ifdef TERMIOS
- struct termios _raw_tty,
- _original_tty;
- #define ttgetattr(fd,where) tcgetattr((fd),(where))
- #define ttsetattr(fd,where) tcsetattr((fd),TCSADRAIN,(where))
- #else /*TERMIOS*/
- # ifdef TERMIO
- struct termio _raw_tty,
- _original_tty;
- #define ttgetattr(fd,where) ioctl((fd),TCGETA,(where))
- #define ttsetattr(fd,where) ioctl((fd),TCSETAW,(where))
- # else
- struct tty_modes {
- struct sgttyb sgttyb;
- struct tchars tchars;
- } _raw_tty, _original_tty;
- static int ttgetattr P_((int,struct tty_modes *)); /* Prototype */
- static int ttsetattr P_((int,struct tty_modes *)); /* Prototype */
- # endif /*TERMIO*/
- #endif /*TERMIOS*/
-
- static int _inraw = 0; /* are we IN rawmode? */
-
- #define DEFAULT_LINES_ON_TERMINAL 24
- #define DEFAULT_COLUMNS_ON_TERMINAL 80
-
- static int _memory_locked = 0; /* are we IN memlock?? */
-
- static VOLATILE int _line = -1; /* initialize to "trash" */
- static VOLATILE int _col = -1;
-
- static int _intransmit = -1; /* are we transmitting keys? */
-
- static
- char *_clearscreen = NULL, *_moveto = NULL, *_up = NULL, *_down = NULL,
- *_right = NULL, *_left = NULL, *_setbold = NULL, *_clearbold = NULL,
- *_setunderline = NULL, *_clearunderline = NULL, *_sethalfbright = NULL,
- *_clearhalfbright = NULL, *_setinverse = NULL, *_clearinverse = NULL,
- *_cleartoeoln = NULL, *_cleartoeos = NULL, *_transmit_on = NULL,
- *_transmit_off = NULL, *_set_memlock = NULL, *_clear_memlock = NULL,
- *_start_termcap = NULL, *_end_termcap = NULL, *_bell = NULL,
-
- *_key_up = NULL, *_key_down = NULL, *_key_left = NULL, *_key_right = NULL,
- *_key_pageup = NULL, *_key_pagedown = NULL, *_key_home = NULL,
- *_key_help = NULL, *_key_find = NULL;
-
- static int _lines, _columns, _automargin, _eatnewlineglitch;
- int tabspacing;
- static int tabexpand = 0; /* Is terminal driver expanding tabs? */
-
- static char _terminal[1024]; /* Storage for terminal entry */
- static char _capabilities[1024]; /* String for cursor motion */
-
- static char *ptr = _capabilities; /* for buffering */
-
- static int cursor_control = 0;
- static int need_moveabsolute = 0;
-
- char *tgetstr(), /* Get termcap capability */
- *tgoto(); /* and the goto stuff */
-
- static int outchar P_((int c));
-
- static char terminal_type[40] = "";
-
- static charset_t target_display_charset = NULL;
- static struct charset_state * last_state = NULL;
- static screen_info_p last_display_state = NULL;
-
- static char *us2s P_((unsigned char *str));
- static char *us2s(str)
- unsigned char *str;
- {
- return (char *)str;
- }
-
-
- static void print_status_1 P_((struct run_state *rs,int sig,int exit_code));
- static void print_status_1(rs,sig,exit_code)
- struct run_state *rs;
- int sig, exit_code;
- {
- redraw:
- if (sig)
- PutLineX(elm_LINES,0,
- CATGETS(elm_msg_cat, ElmSet,
- ElmTerminatedWithSignal,
- "Terminated with signal %d. Press any key to continue: "),
- sig);
- else if (exit_code)
- PutLineX(elm_LINES,0,
- CATGETS(elm_msg_cat, ElmSet,
- ElmExitedWithStatus,
- "Exited with status %d. Press any key to continue: "),
- exit_code);
- else
- PutLineX(elm_LINES,0,
- CATGETS(elm_msg_cat, ElmSet,
- ElmDoneCont,
- "Done. Press any key to continue: "));
- if (ReadCh(REDRAW_MARK) == REDRAW_MARK)
- goto redraw;
- }
-
- static void print_status_cooked P_((struct run_state *rs,int sig,int exit_code));
- static void print_status_cooked(rs,sig,exit_code)
- struct run_state *rs;
- int sig, exit_code;
- {
- Raw(ON | NO_TITE);
-
- print_status_1(rs,sig,exit_code);
-
- Raw(OFF | NO_TITE);
- printf("\n\r");
- }
-
- static void print_status P_((struct run_state *rs,int sig,int exit_code));
- static void print_status(rs,sig,exit_code)
- struct run_state *rs;
- int sig, exit_code;
- {
- if (rs->raw == ON && ( SY_CLRWAIT & rs->options )) {
-
- print_status_1(rs,sig,exit_code);
- }
- }
-
- static void start_run_tty_init P_((void));
- static void start_run_tty_init()
- {
- MoveCursor(elm_LINES,0);
- CleartoEOLN();
- FlushBuffer();
- }
-
-
- static int terminal_fd = 1; /* Standard output, later terminal ... */
-
- static void PutLineS P_((struct string *S));
-
- int InitScreen()
- {
- /* Set up all this fun stuff: returns zero if all okay, or;
- -1 indicating no terminal name associated with this shell,
- -2..-n No termcap for this terminal type known
- */
-
- int tgetent(), /* get termcap entry */
- err;
- char *termenv;
- int fd;
-
- if ((termenv = getenv("TERM")) == NULL) return(-1);
-
- strfcpy(terminal_type, termenv, sizeof terminal_type);
-
- if ((err = tgetent(_terminal, terminal_type)) != 1)
- return(err-2);
-
- _line = 0; /* where are we right now?? */
- _col = 0; /* assume zero, zero... */
-
- fd = open("/dev/tty",O_RDWR);
- if (fd < 0) {
- DPRINT(Debug,4, (&Debug, "Opening of /dev/tty failed\n"));
- } else {
- FlushBuffer();
- terminal_fd = fd;
- DPRINT(Debug,4,(&Debug,
- "/dev/tty is fd %d\n",terminal_fd));
- }
-
-
- /* load in all those pesky values */
- _clearscreen = tgetstr("cl", &ptr);
- _moveto = tgetstr("cm", &ptr);
- _up = tgetstr("up", &ptr);
- _down = tgetstr("do", &ptr);
- _right = tgetstr("nd", &ptr);
- _left = tgetstr("bc", &ptr);
- _bell = tgetstr("bl", &ptr);
-
- _setbold = tgetstr("so", &ptr);
- _clearbold = tgetstr("se", &ptr);
- _setunderline = tgetstr("us", &ptr);
- _clearunderline = tgetstr("ue", &ptr);
- _setinverse = tgetstr("so", &ptr);
- _clearinverse = tgetstr("se", &ptr);
- _sethalfbright = tgetstr("hs", &ptr);
- _clearhalfbright = tgetstr("he", &ptr);
- _cleartoeoln = tgetstr("ce", &ptr);
- _cleartoeos = tgetstr("cd", &ptr);
- _lines = tgetnum("li");
- _columns = tgetnum("co");
- tabspacing = ((tabspacing=tgetnum("it"))<= 0 ? 8 : tabspacing);
- _automargin = tgetflag("am");
- _eatnewlineglitch = tgetflag("xn");
- _transmit_on = tgetstr("ks", &ptr);
- _transmit_off = tgetstr("ke", &ptr);
- _set_memlock = tgetstr("ml", &ptr);
- _clear_memlock = tgetstr("mu", &ptr);
- _start_termcap = tgetstr("ti", &ptr);
- _end_termcap = tgetstr("te", &ptr);
-
- _key_up = tgetstr("ku", &ptr);
- _key_down = tgetstr("kd", &ptr);
- _key_left = tgetstr("kl", &ptr);
- _key_right = tgetstr("kr", &ptr);
- _key_pageup = tgetstr("kP", &ptr);
- _key_pagedown = tgetstr("kN", &ptr);
- _key_home = tgetstr("kh", &ptr);
- _key_help = tgetstr("%1", &ptr);
- _key_find = tgetstr("@0", &ptr);
-
- if (_transmit_on && _transmit_off && _key_up && _key_down) {
- cursor_control = TRUE;
- }
-
- if (_setinverse && _clearinverse) {
- has_highlighting = TRUE;
- }
-
- if (!_left) {
- _left = "\b";
- }
-
- set_start_run_hooks(print_status,RawState,Raw,
- start_run_tty_init,ClearScreen,
- PutLineS, print_status_cooked
- );
-
- return 0;
- }
-
- charset_t * give_display_charsets(storage,max)
- charset_t *storage;
- int max;
- {
- int n = 0,i;
- max--;
-
- storage[n++] = display_charset;
-
- if (system_charset != display_charset &&
- n < max)
- storage[n++] = system_charset;
-
- if (allow_charset_switching)
- terminal_can_switch(terminal_type,storage,&n,max);
- storage[n] = NULL;
-
- SIGDPRINT(Debug,4,(&Debug,
- "Possible sets:"));
- for (i = 0; i < n; i++) {
- SIGDPRINT(Debug,4,(&Debug,
- " %s%c",
- storage[i]->MIME_name ? storage[i]->MIME_name :
- "<no MIME name>",
- i < n-1 ? ',' : '\n'));
- }
-
- return storage;
- }
-
- int set_display_charset(set,silent)
- charset_t set;
- int silent;
- {
- if (!terminal_can_switch_to(terminal_type,set,silent))
- return 0;
-
- target_display_charset = set;
- switch_display_charset(1);
- return 1;
- }
-
- static char * title_string = NULL; /* Malloced */
- static char * icon_string = NULL;
-
- static char * title_quit_string = NULL;
- static char * icon_quit_string = NULL;
-
- static CONST char ELM_EXITING[] = "Elm: exiting";
-
- static char * title_suspended_string = NULL;
- static char * icon_suspended_string = NULL;
-
- static CONST char ELM_SUSPENDED[] = "Elm: suspended";
-
- int set_terminal_titles(title,icon)
- char *title;
- char *icon;
- {
-
- /* These are not set when setting terminal to non-raw mode ..
- but instead only when exiting or suspended (winth ctrl-Z) */
- if(!title_quit_string)
- title_quit_string = catgets(elm_msg_cat, ElmSet, ElmTitleQuit,
- ELM_EXITING);
- if (!icon_quit_string)
- icon_quit_string = catgets(elm_msg_cat, ElmSet, ElmIconQuit,
- ELM_EXITING);
-
- if(!title_suspended_string)
- title_suspended_string = catgets(elm_msg_cat, ElmSet, ElmTitleSusp,
- ELM_SUSPENDED);
- if (!icon_suspended_string)
- icon_suspended_string = catgets(elm_msg_cat, ElmSet, ElmIconSusp,
- ELM_SUSPENDED);
-
-
- DPRINT(Debug,8,(&Debug,
- "Terminal (%s) title=%s icon=%s\n",
- terminal_type,
- title ? title : "<UNCHANGED>",
- icon ? icon : "<UNCHANGED>"));
-
- if (RawState()) {
- char *str = terminal_set_title(terminal_type,title,icon, NULL,0);
- int i;
-
- if (!str) {
- DPRINT(Debug,4,(&Debug,
- "Can't set terminal %s titles to %s and %s\n",
- terminal_type,
- title ? title : "<NULL>",
- icon ? icon : "<NULL>"));
- return 0;
- }
-
- DPRINT(Debug,4,(&Debug,
- "Setting terminal title ("));
- for (i = 0; str[i]; i++) {
- DPRINT(Debug,4,(&Debug,
- "%s%02X",
- i ? " " : "", str[i]));
- }
- DPRINT(Debug,4,(&Debug,
- ") [terminal %s]\n",terminal_type));
-
- for (i = 0; str[i]; i++) {
- outchar(str[i]);
- }
-
- }
-
- if (title)
- title_string = strmcpy(title_string,title);
- if (icon)
- icon_string = strmcpy(title_string,title);
-
-
- return 1;
- }
-
- /* May be called from signal handler
- to_display = 0 -- suspended
- = 1 -- as set
- = 2 -- exiting
- */
-
- void switch_title(to_display)
- int to_display;
- {
- char buffer[1024];
-
- char * str = NULL;
-
-
- switch (to_display) {
- case 0:
- str = terminal_set_title(terminal_type,
- title_suspended_string,
- icon_suspended_string,
- buffer, sizeof buffer);
- break;
- case 1:
- str = terminal_set_title(terminal_type,
- title_string,
- icon_string,
- buffer, sizeof buffer);
- break;
- case 2:
- str = terminal_set_title(terminal_type,
- title_quit_string,
- icon_quit_string,
- buffer, sizeof buffer);
- break;
- }
-
-
- if (str) {
- int i;
-
- SIGDPRINT(Debug,4,(&Debug,
- "Setting terminal title ("));
- for (i = 0; str[i]; i++) {
- SIGDPRINT(Debug,4,(&Debug,
- "%s%02X",
- i ? " " : "", str[i]));
- }
- SIGDPRINT(Debug,4,(&Debug,
- ") [terminal %s]\n",terminal_type));
-
- for (i = 0; str[i]; i++) {
- outchar(str[i]);
- }
-
- }
- }
-
- void switch_display_charset(to_display)
- int to_display;
- {
- char buffer[256];
-
- charset_t t;
- char * str;
-
- if (!target_display_charset)
- target_display_charset = display_charset;
-
-
- if (!last_display_state)
- last_display_state = create_terminal_info();
-
-
- t = to_display ? target_display_charset : system_charset;
-
- if (!t) {
- SIGDPRINT(Debug,4,(&Debug,
- "switch_display_charset: target charset is NULL\n"));
- return;
- }
-
- str = terminal_switch_to(terminal_type,t,&last_display_state,
- buffer, sizeof buffer);
-
- if (str) {
- int i;
-
- SIGDPRINT(Debug,4,(&Debug,
- "Setting display charset to %s (",
- t->MIME_name ? t->MIME_name : "<no MIME name>"));
- for (i = 0; str[i]; i++) {
- SIGDPRINT(Debug,4,(&Debug,
- "%s%02X",
- i ? " " : "", str[i]));
- }
- SIGDPRINT(Debug,4,(&Debug,
- ") [terminal %s]\n",terminal_type));
-
- for (i = 0; str[i]; i++) {
- outchar(str[i]);
- }
-
- display_charset = t;
-
- } else {
- SIGDPRINT(Debug,4,(&Debug,
- "No way to set terminal %s to charset %s\n",
- terminal_type,
- t->MIME_name ? t->MIME_name : "<no MIME name>"));
-
- }
- }
-
- /* NOTE: Is called from signal handler! */
- void transmit_functions(newstate)
- int newstate;
- {
- /** turn function key transmission to ON | OFF **/
-
- if (newstate != _intransmit) {
- _intransmit = newstate;
- if (newstate == ON)
- tputs(_transmit_on, 1, outchar);
- else
- tputs(_transmit_off, 1, outchar);
- FlushBuffer(); /* clear the output buffer */
- }
- }
-
- /****** now into the 'meat' of the routines...the cursor stuff ******/
-
- void ScreenSize(lines, columns)
- int *lines, *columns;
- {
- /** returns the number of lines and columns on the display. **/
-
- #ifdef TIOCGWINSZ
- struct winsize w;
-
- if (ioctl(1,TIOCGWINSZ,&w) != -1) {
- if (w.ws_row > 0)
- _lines = w.ws_row;
- if (w.ws_col > 0)
- _columns = w.ws_col;
- }
- #endif
-
- if (_lines == 0) _lines = DEFAULT_LINES_ON_TERMINAL;
- if (_columns == 0) _columns = DEFAULT_COLUMNS_ON_TERMINAL;
-
-
- /* WARNING: elm_LINES and elm_COLUMNS are inconsistent!
- *
- * elm_LINES == number of lines in screen -1
- * elm_COLUMNS == number of rows in screen
- *
- *
- * Check code in MoveCursor!
- *
- * row == 0 .. elm_LINES
- * col == 0 .. elm_COLUMNS-1
- *
- *
- * Who was this smart programmer!!!!!!!!!!!!!!!!!!!!!
- *
- * - K E H <hur...@ozone.FMI.FI>
- */
-
- *lines = _lines - 1;
- *columns = _columns;
- }
-
- void SetXYLocation(x,y)
- int x,y;
- {
- /* declare where the cursor is on the screen - useful after using
- * a function that moves cursor in predictable fasion but doesn't
- * set the static x and y variables used in this source file -
- * e.g. getpass().
- */
-
- _line = x;
- _col = y;
- }
-
- void GetXYLocation(x,y)
- int *x,*y;
- {
- /* return the current cursor location on the screen */
-
- *x = _line;
- *y = _col;
- }
-
- int ClearScreen()
- {
- /* clear the screen: returns -1 if not capable */
-
- _line = 0; /* clear leaves us at top... */
- _col = 0;
-
- redraw_screen = 0;
- _intransmit = -1; /* Re-set state */
-
- if (!_clearscreen)
- return(-1);
-
- tputs(_clearscreen, 1, outchar);
- FlushBuffer(); /* clear the output buffer */
- return(0);
- }
-
- static void moveabsolute P_((int col, int row));
-
- static int CursorUp(n)
- int n;
- {
- /** move the cursor up 'n' lines **/
- /** Calling function must check that _up is not null before calling **/
-
- if (need_moveabsolute)
- moveabsolute(_col, _line);
-
- _line = (_line-n > 0? _line - n: 0); /* up 'n' lines... */
-
- while (n-- > 0)
- tputs(_up, 1, outchar);
-
- return(0);
- }
-
- static int CursorDown(n)
- int n;
- {
- /** move the cursor down 'n' lines **/
- /** Caller must check that _down is not null before calling **/
-
- if (need_moveabsolute)
- moveabsolute(_col, _line);;
-
- _line = (_line+n <= elm_LINES? _line + n: elm_LINES); /* down 'n' lines... */
-
- while (n-- > 0)
- tputs(_down, 1, outchar);
-
- return(0);
- }
-
-
- static int CursorLeft(n)
- int n;
- {
- /** move the cursor 'n' characters to the left **/
- /** Caller must check that _left is not null before calling **/
-
- if (need_moveabsolute)
- moveabsolute(_col, _line);
-
- _col = (_col - n> 0? _col - n: 0); /* left 'n' chars... */
-
- while (n-- > 0)
- tputs(_left, 1, outchar);
-
- return(0);
- }
-
-
- static int CursorRight(n)
- int n;
- {
- /** move the cursor 'n' characters to the right (nondestructive) **/
- /** Caller must check that _right is not null before calling **/
-
- if (need_moveabsolute)
- moveabsolute(_col, _line);
-
- _col = (_col+n < elm_COLUMNS? _col + n: elm_COLUMNS);
- /* right 'n' chars... */
-
- while (n-- > 0)
- tputs(_right, 1, outchar);
-
- return(0);
- }
-
- static void moveabsolute(col, row)
- int col, row;
- {
-
- char *stuff, *tgoto();
-
- if (need_moveabsolute) {
- SIGDPRINT(Debug,4,(&Debug,
- "Curses: moveabsolute: Syncronizing cursos position (col=%d,row=%d)\n",
- col,row));
- }
-
- stuff = tgoto(_moveto, col, row);
- tputs(stuff, 1, outchar);
-
- if(need_moveabsolute)
- FlushBuffer();
-
- need_moveabsolute = 0;
- }
-
- int MoveCursor(row, col)
- int row, col;
- {
- /** move cursor to the specified row column on the screen.
- 0,0 is the top left! **/
-
- int scrollafter = 0;
-
- /* we don't want to change "rows" or we'll mangle scrolling... */
-
- if (need_moveabsolute)
- moveabsolute(_col, _line);;
-
- if (col < 0)
- col = 0;
- if (col >= elm_COLUMNS)
- col = elm_COLUMNS - 1;
- if (row < 0)
- row = 0;
- if (row > elm_LINES) {
- if (col == 0)
- scrollafter = row - elm_LINES;
- row = elm_LINES;
- }
-
- if (!_moveto)
- return(-1);
-
- if (row == _line) {
- if (col == _col)
- return(0); /* already there! */
-
- else if (abs(col - _col) < 5) { /* within 5 spaces... */
- if (col > _col && _right)
- CursorRight(col - _col);
- else if (col < _col && _left)
- CursorLeft(_col - col);
- else
- moveabsolute(col, row);
- }
- else /* move along to the new x,y loc */
- moveabsolute(col, row);
- }
- else if (_line == row-1 && col == 0) {
- if (_col != 0)
- outchar('\r');
- outchar('\n');
- }
- else if (col == _col && abs(row - _line) < 5) {
- if (row < _line && _up)
- CursorUp(_line - row);
- else if (row > _line && _down)
- CursorDown(row - _line);
- else
- moveabsolute(col, row);
- }
- else
- moveabsolute(col, row);
-
- _line = row; /* to ensure we're really there... */
- _col = col;
-
- if (scrollafter) {
- outchar('\r');
- while (scrollafter--) {
- outchar('\n');
- }
- }
-
- FlushBuffer();
- return(0);
- }
-
- void CarriageReturn()
- {
- /** move the cursor to the beginning of the current line **/
- Writechar('\r');
- }
-
- void NewLine()
- {
- /** move the cursor to the beginning of the next line **/
-
- Writechar('\r');
- Writechar('\n');
- FlushBuffer();
- }
-
- int StartBold()
- {
- /** start boldface/standout mode **/
-
- if (!_setbold)
- return(-1);
-
- tputs(_setbold, 1, outchar);
-
- return(0);
- }
-
- int EndBold()
- {
- /** compliment of startbold **/
-
- if (!_clearbold)
- return(-1);
-
- tputs(_clearbold, 1, outchar);
-
- return(0);
- }
-
- #ifndef ELM
-
- int StartUnderline()
- {
- /** start underline mode **/
-
- if (!_setunderline)
- return(-1);
-
- tputs(_setunderline, 1, outchar);
-
- return(0);
- }
-
-
- int EndUnderline()
- {
- /** the compliment of start underline mode **/
-
- if (!_clearunderline)
- return(-1);
-
- tputs(_clearunderline, 1, outchar);
-
- return(0);
- }
-
- int StartHalfbright()
- {
- /** start half intensity mode **/
-
- if (!_sethalfbright)
- return(-1);
-
- tputs(_sethalfbright, 1, outchar);
-
- return(0);
- }
-
- int EndHalfbright()
- {
- /** compliment of starthalfbright **/
-
- if (!_clearhalfbright)
- return(-1);
-
- tputs(_clearhalfbright, 1, outchar);
-
- return(0);
- }
-
- int StartInverse()
- {
- /** set inverse video mode **/
-
- if (!_setinverse)
- return(-1);
-
- tputs(_setinverse, 1, outchar);
-
- return(0);
- }
-
- int EndInverse()
- {
- /** compliment of startinverse **/
-
- if (!_clearinverse)
- return(-1);
-
- tputs(_clearinverse, 1, outchar);
-
- return(0);
- }
-
- int
- HasMemlock()
- {
- /** returns TRUE iff memory locking is available (a terminal
- feature that allows a specified portion of the screen to
- be "locked" & not cleared/scrolled... **/
-
- return ( _set_memlock && _clear_memlock );
- }
-
- static int _old_LINES;
-
- int
- StartMemlock()
- {
- /** mark the current line as the "last" line of the portion to
- be memory locked (always relative to the top line of the
- screen) Note that this will alter LINES so that it knows
- the top is locked. This means that (plus) the program
- will scroll nicely but (minus) End memlock MUST be called
- whenever we leave the locked-memory part of the program! **/
-
- if (! _set_memlock)
- return(-1);
-
- if (! _memory_locked) {
-
- _old_LINES = elm_LINES;
- elm_LINES -= _line; /* we can't use this for scrolling */
-
- tputs(_set_memlock, 1, outchar);
-
- _memory_locked = TRUE;
- }
-
- return(0);
- }
-
- int
- EndMemlock()
- {
- /** Clear the locked memory condition... **/
-
- if (! _set_memlock)
- return(-1);
-
- if (_memory_locked) {
- elm_LINES = _old_LINES; /* back to old setting */
-
- tputs(_clear_memlock, 1, outchar);
-
- _memory_locked = FALSE;
- }
- return(0);
- }
-
- #endif /* ndef ELM */
-
- VOLATILE static int wrappedlastchar = 0;
-
- static char outchar_write_buffer[2048];
- VOLATILE static char * buffer_ptr = &(outchar_write_buffer[0]);
-
- /* Note that there is several race conditions -- losing of characters possible
- (this may be called from signal handler)
- */
- void FlushBuffer P_((void))
- {
- int len;
-
- while (0 < (len = buffer_ptr-outchar_write_buffer)) {
- int L = write(terminal_fd,outchar_write_buffer,len);
- int err = errno;
-
- if (L < 0 &&
- ((err != EINTR)
- #ifdef EAGAIN
- && (err != EAGAIN)
- #endif
- #ifdef EWOULDBLOCK
- && (err != EWOULDBLOCK)
- #endif
- )) {
- SIGDPRINT(Debug,4,(&Debug,
- "FlushBuffer: Write failed errno=%d\n",err));
- break;
- }
-
- if (L > 0) {
- len = buffer_ptr-outchar_write_buffer;
-
- len -= L;
-
- DPRINT(Debug,9,(&Debug,
- "FlushBuffer: %d bytes writted to %d, %d left\n",
- L,terminal_fd,len));
-
- if (len > 0)
- memmove(outchar_write_buffer,outchar_write_buffer+L,len);
- if (len >= 0)
- buffer_ptr = outchar_write_buffer + len;
- else
- buffer_ptr = outchar_write_buffer;
-
- } else {
- DPRINT(Debug,2,(&Debug,
- "FlushBuffer: Looping...\n"));
- }
- }
- }
-
- /* Note that there is several race conditions -- losing of characters possible
- (this may be called from signal handler)
- */
- static int outchar(c)
- int c;
- {
-
- /** output the given character. From tputs... **/
- /** Note: this CANNOT be a macro! **/
-
- if (buffer_ptr >= outchar_write_buffer + sizeof (outchar_write_buffer))
- FlushBuffer();
-
- if (buffer_ptr < outchar_write_buffer + sizeof (outchar_write_buffer)) {
- VOLATILE char *p = buffer_ptr++;
-
- *p = c;
-
- SIGDPRINT(Debug,40,(&Debug,
- "outchar [%d] = %02X\n",
- p-outchar_write_buffer,*p));
-
- return (unsigned char)c;
- }
- SIGDPRINT(Debug,2,(&Debug,
- "outchar: Buffer full!\n"));
- return EOF;
- }
-
- /* called with value of -1 if just preprosessing needed
- (ie need_moveabsolute)
- */
- static int write_control P_((int ch));
- static int write_control(ch)
- int ch;
- {
- int justwrapped, nt;
-
- if (need_moveabsolute)
- moveabsolute(_col, _line);
-
- justwrapped = 0;
-
- switch (ch) {
- /* if return, just go to left column. */
- case 0x0D: /* CR */
- if (wrappedlastchar)
- justwrapped = 1; /* preserve wrap flag */
- else {
- outchar('\r');
- _col = 0;
- }
- break;
-
- /* if newline and terminal just did a newline without our asking,
- * do nothing, else output a newline and increment the line count */
- case 0x0A: /* LF */
- if (!wrappedlastchar) {
- outchar('\n');
- if (_line < elm_LINES)
- ++_line;
- }
- break;
-
- /* if backspace, move back one space if not already in column 0 */
- case 0x08: /* BS */
- if (_col != 0) {
- tputs(_left, 1, outchar);
- _col--;
- }
- else if (_line > 0) {
- _col = elm_COLUMNS - 1;
- _line--;
- moveabsolute (_col, _line);
- }
- /* else BACKSPACE does nothing */
- break;
-
- /* if bell, ring the bell but don't advance the column */
- case 0x07: /* BEL */
- if (_bell)
- tputs(_bell,1,outchar);
- else
- outchar(ch);
- break;
-
- /* if a tab, output it */
- case 0x09: /* HT */
- /* If terminal driver is expanding tabs, don't trust it ... */
- if (!tabexpand)
- outchar(ch);
- if((nt=next_tab(_col+1)) > prev_tab(elm_COLUMNS))
- _col = elm_COLUMNS-1;
- else
- _col = nt-1;
- if (tabexpand)
- moveabsolute (_col, _line);
- break;
- default: /* Is 'printable' character (or -1) */
- return 1;
- }
-
- wrappedlastchar = justwrapped;
- return 0; /* Need no printing */
- }
-
- static void increment_position P_((int len));
- static void increment_position(len)
- int len;
- {
- int justwrapped;
-
- justwrapped = 0;
-
- if (_col + len > elm_COLUMNS) {
- _col = 0;
- _line = 0;
- moveabsolute (_col, _line);
- panic("CURSES PANIC",__FILE__,__LINE__,"increment_position",
- "column position overflow",0);
- }
-
- /* if we only had one column left, simulate automargins if
- * the terminal doesn't have them */
- if (_col + len == elm_COLUMNS) {
- if (!_automargin || _eatnewlineglitch) {
- outchar('\r');
- outchar('\n');
- }
- if (_line < elm_LINES)
- ++_line;
- _col = 0;
- justwrapped = 1;
- }
- /* if we are here this means we have no interference from the
- * right margin - just increment the column position. */
- else {
- _col += len;
- }
-
- wrappedlastchar = justwrapped;
- }
-
- /* Called by signal handler ... */
-
- void WriteRaw(str)
- CONST char *str;
- {
- CONST char * p;
-
- for (p = str; *p; p++) {
- int ch = *p;
-
- /** write a character to the current screen location. **/
- int need_print = 1;
-
- ch &= 0xFF;
-
- need_print = write_control(ch);
-
- if (need_print) {
- outchar(ch);
- increment_position(1);
- }
- }
-
- FlushBuffer();
- }
-
-
-
- /* This assumes one byte charset */
- void Writechar(ch)
- int ch;
- {
- /** write a character to the current screen location. **/
- int need_print = 1;
-
- ch &= 0xFF;
-
- /* ASCII assumed */
- need_print = write_control(ch);
-
- if (need_print) {
- #ifndef ASCII_CTYPE
- if (display_charset == system_charset) {
- /* if some kind of non-printable character change to a '?' */
-
- if(!isprint((unsigned char)ch))
- ch = '?';
- } else
- #endif
- {
- /* If system (= locale) charset is not display charset
- * need ask from charset system is that character
- * printable -- complex and expensive!
- */
- struct charset_state *st = new_state(display_charset);
- add_streambyte_to_state(st,ch);
-
- if (!state_ready(st) || !state_printable(st))
- ch = '?';
- free_state(&st);
- }
- outchar(ch);
- increment_position(1);
- }
- }
-
- static int preinit_output P_((struct string *S, struct string **buffer,
- charset_t *stored_display));
- static int preinit_output(S,buffer,stored_display)
- struct string *S;
- struct string **buffer;
- charset_t *stored_display;
- {
- int sw = -1;
-
- if (S->string_type == display_charset)
- *buffer = S;
- else if (target_display_charset == display_charset &&
- S->string_type == system_charset) {
- sw = 1; /* Arrange return to back to display charset */
- *buffer = S;
- switch_display_charset(0); /* Print using system charset */
- } else if (allow_charset_switching &&
- 0 != (charset_properties(S->string_type) & CS_printable) &&
- set_display_charset(S->string_type,1)) {
- sw = 2; /* Arrange return to correct display charset */
- *buffer = S;
- } else
- *buffer = convert_string(display_charset,S,0);
-
- return sw;
- }
-
- static void postprocess_output P_((charset_t stored_display, int sw));
-
- static void postprocess_output(stored_display,sw)
- charset_t stored_display;
- int sw;
- {
- if (sw == 2)
- set_display_charset(stored_display,0);
- else if (sw != -1) {
- switch_display_charset(sw);
- }
- }
-
- struct string *curses_printable_clip(S,pos,len,visible_len,max_visible)
- struct string *S;
- int *pos;
- int len;
- int *visible_len;
- int max_visible;
- {
- struct string *buffer = NULL;
- charset_t stored_display = target_display_charset;
- int sw = -1;
-
- struct string *ret1 = NULL;
-
- sw = preinit_output(S,&buffer,&stored_display);
-
- DPRINT(Debug,35,(&Debug,
- "curses_printable_clip: S=%S cs=%s -- using %s\n",
- S,
- S->string_type->MIME_name ?
- S->string_type->MIME_name :
- "<no MIME name>",
- buffer->string_type->MIME_name ?
- buffer->string_type->MIME_name : "<no MIME name>"));
- DPRINT(Debug,35,(&Debug, "curses_printable_clip: len=%d max_visible=%d pos=%d\n",
- len,max_visible,*pos));
-
- if (last_display_state &&
- 0 != (CS_printable_len & charset_properties(buffer->string_type))) {
-
- int l1;
- struct cs_printable_len PRINTABLE_LEN;
-
- PRINTABLE_LEN.max_len = max_visible;
- PRINTABLE_LEN.ret_len = 0;
-
- l1 = estimate_clip_string(buffer,*pos,len,last_display_state,&PRINTABLE_LEN);
-
- DPRINT(Debug,35,(&Debug,
- "curses_printable_clip: l1=%d printable_len { max_len %d ret_len %d }\n",
- l1,PRINTABLE_LEN.max_len,PRINTABLE_LEN.ret_len));
-
-
- if (l1 < 0) {
- ret1 = NULL;
- *visible_len = -1;
- } else {
- *visible_len = PRINTABLE_LEN.ret_len;
- ret1 = clip_from_string(buffer,pos,l1);
- }
- } else {
- if (max_visible < len)
- len = max_visible;
-
- ret1 = clip_from_string(buffer,pos,len);
-
- *visible_len = string_len(ret1);
- }
-
- /* Free if converted */
- if (buffer != S)
- free_string(&buffer);
-
- postprocess_output(stored_display,sw);
-
- if (ret1) {
- DPRINT(Debug,35,(&Debug, "curses_printable_clip=%p=%S visible_len=%d pos=%d\n",
- ret1,ret1,*visible_len,*pos));
- }
- return ret1;
- }
-
-
-
- static void PutLineS(S)
- struct string *S;
- {
- int idx = 0;
- struct string *buffer = NULL;
- charset_t stored_display = target_display_charset;
- int sw = -1;
- int buffer_len;
-
- sw = preinit_output(S,&buffer,&stored_display);
-
-
- buffer_len = string_len(buffer);
-
- DPRINT(Debug,40,(&Debug,
- "PutLineS: S=%S cs=%s -- using %s\n",
- S,
- S->string_type->MIME_name ?
- S->string_type->MIME_name :
- "<no MIME name>",
- buffer->string_type->MIME_name ?
- buffer->string_type->MIME_name : "<no MIME name>"));
-
- while (idx < buffer_len) {
- char * s, *s1;
- uint16 ch;
- int old_idx = idx;
- int need_print;
- int len = 1;
- int q = 0;
- struct cs_printable_len PRINTABLE_LEN;
- struct cs_printable_len *printable_len = NULL;
-
- ch = give_unicode_from_string(buffer,idx);
-
- /* ASCII assumed */
- if (ch <= 31)
- need_print = write_control(ch);
- else
- need_print = write_control(-1); /* HACK for position of cursor */
- if (!need_print) {
- DPRINT(Debug,40,(&Debug,
- "PutLineS: [%d] unicode=%d (control)\n",
- idx,ch));
- idx++;
- continue; /* character 'printed' */
- }
-
- while (len < elm_COLUMNS-_col &&
- len + idx < buffer_len &&
- give_unicode_from_string(buffer,idx + len) > 31)
- len++;
-
- if (last_display_state &&
- 0 != (CS_printable_len & charset_properties(buffer->string_type))) {
-
- PRINTABLE_LEN.max_len = elm_COLUMNS-_col;
- PRINTABLE_LEN.ret_len = 0;
-
- printable_len = &PRINTABLE_LEN;
- }
- s = us2s(streamclip_from_string(buffer,&idx,len,last_display_state,printable_len));
-
- DPRINT(Debug,10,(&Debug,
- "PutLineS: [%d-%d] stream=",
- old_idx,idx-1,s));
-
- for (s1 = s; *s1; s1++) {
- #ifdef DEBUG
- if (isascii(*s1) && isprint(*s1) && '"' != *s1) {
- if (!q) { DPRINT(Debug,10,(&Debug," \"")); q = 1; }
- DPRINT(Debug,10,(&Debug,"%c",*s1));
- } else {
- if (q) { DPRINT(Debug,10,(&Debug,"\"")); q = 0; }
- DPRINT(Debug,10,(&Debug," %02X", (unsigned char)*s1));
- }
- #endif
- }
-
- if (q) { DPRINT(Debug,10,(&Debug,"\"")); q = 0; }
- if (printable_len) {
- DPRINT(Debug,10,(&Debug,
- " printable_len { max_len %d ret_len %d }",
- printable_len->max_len,printable_len->ret_len));
- }
- DPRINT(Debug,10,(&Debug,"\n"));
-
- for (s1 = s; *s1; s1++) {
- outchar(*s1);
- }
-
- if (printable_len)
- increment_position(printable_len->ret_len);
- else
- increment_position(idx-old_idx);
-
- if (idx == old_idx) {
- DPRINT(Debug,10,(&Debug,"No any characters printed...\n"));
- CleartoEOLN();
- Writechar('\r');
- Writechar('\n');
- }
-
- free(s);
- }
-
- /* Free if converted */
- if (buffer != S)
- free_string(&buffer);
-
- postprocess_output(stored_display,sw);
- }
-
- /*VARARGS2*/
-
- void Write_to_screen (
- #if ANSI_C
- CONST char *format, CONST char *msg, ...
- #else
- format, msg, va_alist
- #endif
- )
- #if !ANSI_C
- CONST char *format;
- CONST char *msg;
- va_dcl
- #endif
- {
- va_list vl;
- struct string *text;
-
- Va_start(vl, msg); /* defined in defs.h */
-
- /** This routine writes to the screen at the current location.
- when done, it increments lines & columns accordingly by
- looking for "\n" sequences... **/
-
- text = elm_smessage(0,format,msg,vl);
- PutLineS(text);
- free_string(&text);
-
- va_end(vl);
-
- }
-
- void PutLine0(x, y, line)
- int x,y;
- CONST char *line;
- {
- /** Write a zero argument line at location x,y **/
-
- MoveCursor(x,y);
- while(*line)
- Writechar(*line++);
-
- }
-
- void PutLineX(
- #if ANSI_C
- int x, int y, const char *format, const char *line, ...
- #else
- x, y, format, line, va_alist
- #endif
- )
- #if !ANSI_C
- int x;
- int y;
- CONST char *format;
- CONST char *line;
- va_dcl
- #endif
- {
- va_list vl;
- struct string *text;
-
- Va_start(vl, line); /* defined in defs.h */
-
- MoveCursor(x,y);
-
- text = elm_smessage(0,format,line,vl);
- PutLineS(text);
- free_string(&text);
-
- va_end(vl);
-
- }
-
- int CleartoEOLN()
- {
- /** clear to end of line **/
-
- if (need_moveabsolute)
- moveabsolute(_col, _line);
-
- if (!_cleartoeoln)
- return(-1);
-
- tputs(_cleartoeoln, 1, outchar);
-
- return(0);
- }
-
- int CleartoEOS()
- {
- /** clear to end of screen **/
-
- if (need_moveabsolute)
- moveabsolute(_col, _line);
-
- if (!_cleartoeos)
- return(-1);
-
- tputs(_cleartoeos, 1, outchar);
-
- return(0);
- }
-
-
- int RawState()
- {
- /** returns either 1 or 0, for ON or OFF **/
-
- FlushBuffer();
-
- return( _inraw );
- }
-
- #ifdef ultrix
- force_raw()
- {
- (void) ttsetattr(terminal_fd,&_original_tty);
- _inraw = 0;
- Raw(ON);
- }
- #endif
-
- #if POLL_METHOD
- static void clear_input_buffer P_((void));
- #endif
-
- /* NOTE: Is called from signal handler! */
- void Raw(state)
- int state;
- {
- int do_tite = (state & NO_TITE) == 0;
- int do_charset = (state & NO_CHARSET) == 0;
-
- state = state & ~NO_TITE & ~NO_CHARSET;
-
- SIGDPRINT(Debug,4,(&Debug,
- "curses: Raw: state=%d do_tite=%d do_charset=%d\n",
- state,do_tite,do_charset));
-
- /** state is either ON or OFF, as indicated by call **/
-
- if (state == OFF && _inraw) {
- SIGDPRINT(Debug,4,(&Debug,
- "curses: Raw: Setting Raw state OFF\n"));;
-
- #if POLL_METHOD
- clear_action(terminal_fd);
- clear_input_buffer();
- #endif
-
- if (cursor_control)
- transmit_functions(OFF);
-
- if (do_charset)
- switch_display_charset(0);
- /* We do NOT call switch_title(0) here because
- raw state off may be called because running of program
- */
-
- if (use_tite && _end_termcap && do_tite) {
- tputs(_end_termcap, 1, outchar);
- }
- FlushBuffer();
- (void) ttsetattr(terminal_fd,&_original_tty);
- _inraw = 0;
- }
- else if (state == ON && ! _inraw) {
-
- SIGDPRINT(Debug,4,(&Debug,
- "curses: Raw: Setting Raw state ON\n"));;
-
- (void) ttgetattr(terminal_fd, &_original_tty);
- (void) ttgetattr(terminal_fd, &_raw_tty); /** again! **/
-
- #if !defined(TERMIO) && !defined(TERMIOS)
- _raw_tty.sg_flags &= ~(ECHO); /* echo off */
- _raw_tty.sg_flags |= CBREAK; /* raw on */
-
- #else
- _raw_tty.c_lflag &= ~(ICANON | ECHO); /* noecho raw mode */
-
- _raw_tty.c_cc[VMIN] = '\01'; /* minimum # of chars to queue */
- _raw_tty.c_cc[VTIME] = '\0'; /* minimum time to wait for input */
-
-
- #if defined(OXTABS)
- /* Some systems use OXTABS bit */
- if (_raw_tty.c_oflag & OXTABS) {
- SIGDPRINT(Debug,4,(&Debug,
- "curses: [OXTABS] Terminal driver is expanding tabs...\n"));
- tabexpand = 1;
- } else {
- if (tabexpand)
- SIGDPRINT(Debug,4,(&Debug,
- "curses: [OXTABS] Terminal driver isn't expanding tabs...\n"));
- tabexpand = 0;
- }
- #endif /* defined(OXTABS) */
-
- #if defined(TABDLY) && !defined(OXTABS)
- /* Some systems expands tab when TABDLY is XTABS */
- if ((_raw_tty.c_oflag & TABDLY) ==
- #ifdef XTABS
- XTABS
- #else
- TAB3
- #endif
- ) {
- SIGDPRINT(Debug,4,(&Debug,
- "curses: [TABDLY] Terminal driver is expanding tabs...\n"));
- tabexpand = 1;
- } else {
- if (tabexpand)
- SIGDPRINT(Debug,4,(&Debug,
- "curses: [TABDLY] Terminal driver isn't expanding tabs...\n"));
- tabexpand = 0;
- }
- #endif /* defined(TABDLY) && !defined(OXTABS) */
-
- #if !defined(TABDLY) && !defined(OXTABS)
-
- /* If _POSIX_SOURCE is defined then OXTABS or TABDLY are not
- * defined -- so print warning anyway
- */
- SIGDPRINT(Debug,4,(&Debug,
- "curses: No information is terminal driver expanding tabs!\n"));
- #endif /* !defined(TABDLY) && !defined(OXTABS) */
-
- #endif
- (void) ttsetattr(terminal_fd, &_raw_tty);
- if (use_tite && _start_termcap && do_tite)
- tputs(_start_termcap, 1, outchar);
- _intransmit = -1; /* state unclear */
- _inraw = 1;
-
- if (do_charset) {
- switch_display_charset(1);
- switch_title(1);
- }
- need_moveabsolute = 1;
- }
- }
-
- int raw_off_called() {
- return need_moveabsolute;
- }
-
- #if !defined(TERMIO) && !defined(TERMIOS)
- static int ttgetattr(fd, where)
- int fd;
- struct tty_modes *where;
- {
- if (ioctl(fd, TIOCGETP, &where->sgttyb) < 0)
- return(-1);
- if (ioctl(fd, TIOCGETC, &where->tchars) < 0)
- return(-1);
- return(0);
- }
-
- static int ttsetattr(fd, where)
- int fd;
- struct tty_modes *where;
- {
- if (ioctl(fd, TIOCSETP, &where->sgttyb) < 0)
- return(-1);
- if (ioctl(fd, TIOCSETC, &where->tchars) < 0)
- return(-1);
- return(0);
- }
- #endif
-
- #if POLL_METHOD
- static unsigned char *read_buffer = NULL;
- static int read_buffer_len = 0;
- static int last_read_error = 0;
-
- static int background_read P_((int fd, void *data));
- static int background_read(fd,data)
- int fd;
- void *data;
- {
- int result;
- unsigned char ch;
-
- result = read(fd, &ch, 1);
-
- if (result < 0) {
- int err = errno;
-
- SIGDPRINT(Debug,4,(&Debug,
- "background_read: errno = %d [%s]\n",err,
- error_description(err)));
-
- if((err == EINTR)
- #ifdef EAGAIN
- || (err == EAGAIN)
- #endif
- #ifdef EWOULDBLOCK
- || (err == EWOULDBLOCK)
- #endif
- ) {
- return 1; /* Retry */
- }
-
- last_read_error = err;
- return 0;
- }
-
- if (0 == result) {
- SIGDPRINT(Debug,4,(&Debug,
- "background_read: Got zero bytes...\n"));
- last_read_error = -1;
- return 0;
- }
-
- read_buffer = safe_realloc(read_buffer,read_buffer_len+1);
- SIGDPRINT(Debug,20,(&Debug,
- "background_read(fd=%d)=1 [%d]",fd,read_buffer_len));
- SIGDPRINT(Debug,50,(&Debug,"=%d",ch));
- SIGDPRINT(Debug,20,(&Debug,"\n"));
-
- read_buffer[read_buffer_len++] = ch;
- last_read_error = 0;
-
- return 1;
- }
-
- static void clear_input_buffer()
- {
- SIGDPRINT(Debug,4,(&Debug,
- "Resetting background_read buffer (%d bytes)...\n",
- read_buffer_len));
- read_buffer_len = 0;
- last_read_error = 0;
- }
-
- int error_sleep(seconds)
- int seconds;
- {
- int ret;
- if (read_buffer_len > 0) {
- SIGDPRINT(Debug,5,(&Debug,
- "error_sleep(%d)=1 -- sleep skipped\n",
- seconds));
- return 1;
- }
- SIGDPRINT(Debug,5,(&Debug,
- "error_sleep(%d) ...\n",seconds));
- ret = wait_for_action_or_timeout(background_read,seconds);
- DPRINT(Debug,5,(&Debug,
- "error_sleep=%d\n",ret));
- return ret;
- }
- #endif
-
-
- struct charset_state * ReadCh2(flags)
- int flags;
- {
- int redraw = (flags & READCH_MASK);
- int cursorkeys = (flags & READCH_CURSOR) != 0;
- int nocursor = (flags & READCH_NOCURSOR) != 0 && cursor_control;
- int term_char = (flags & READCH_term_char) != 0;
- int x,y;
-
- unsigned char input_buffer[20];
-
- /*
- * read a character with Raw mode set!
- *
- * EAGAIN & EWOULDBLOCK are recognized just in case
- * O_NONBLOCK happens to be in effect.
- */
-
- /* This is static array so we can initialize it in here ...
- */
- static struct {
- char ** CONST str;
- CONST int result;
- int maybe;
- } keytable[] =
- { { &_key_up, UP_MARK, 0 },
- { &_key_down, DOWN_MARK, 0 },
- { &_key_left, LEFT_MARK, 0 },
- { &_key_right, RIGHT_MARK, 0 },
-
- { &_key_pageup, PAGEUP_MARK, 0 },
- { &_key_pagedown, PAGEDOWN_MARK, 0 },
-
- { &_key_home, HOME_MARK, 0 },
- { &_key_help, HELP_MARK, 0 },
- { &_key_find, FIND_MARK, 0 },
- { NULL, 0, 0 }
- };
-
- int read_p,found_key;
-
- #if POLL_METHOD
- change_action(terminal_fd,0,background_read,no_action_routine,
- no_action_routine,
- NULL);
- #endif
-
- GetXYLocation(&x,&y); /* Background actions may print error messages .. */
-
- if (!last_state) {
- last_state = new_state(system_charset);
- DPRINT(Debug,4,(&Debug,
- "Keyboard input charset is %s\n",
- last_state->charset->MIME_name ?
- last_state->charset->MIME_name :
- "<no MIME name>"));
- }
-
- if (state_ready(last_state)) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: starting reading new character (set %s)\n",
- last_state->charset->MIME_name ?
- last_state->charset->MIME_name :
- "<no MIME name>"));
- reset_state(last_state,0);
- }
- last_state->caller_flags = 0;
-
- reinit_ReadChar:
- read_p = 0;
- found_key = 0;
-
- FlushBuffer();
-
- if (redraw && !RawState()) { /* Check that we have in 'raw' mode */
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Going to Raw mode\n"));
- Raw(ON);
- ClearScreen();
-
- reset_state(last_state,1);
- last_state->caller_flags = redraw;
-
- return last_state;
- }
-
- if (redraw && redraw_screen) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Pending redraw...\n"));
- ClearScreen();
-
- reset_state(last_state,1);
- last_state->caller_flags = redraw;
-
- return last_state;
- }
-
- if ((_intransmit != ON || redraw_screen) &&
- cursorkeys && _transmit_on) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Enabling cursor keys...\n"));
- transmit_functions(ON);
- }
-
- if ((_intransmit != OFF || redraw_screen) &&
- nocursor && _transmit_off) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Disabling cursor keys...\n"));
- transmit_functions(OFF);
- }
-
- if (cursorkeys) {
- int i;
- DPRINT(Debug,8,(&Debug,
- "ReadCh2: Available function keys:"));
-
- for (i = 0; keytable[i].str != 0; i++) {
- char * CONST str = *(keytable[i].str);
- if(str && str[0] != '\0') {
- keytable[i].maybe = 1; /* Initially every function key is possible */
- SIGDPRINT(Debug,8,(&Debug,
- " [%d] %d",i,keytable[i].result));
- }
- }
- DPRINT(Debug,4,(&Debug,
- "\n"));
- }
-
- while (found_key == 0) {
- unsigned char ch;
- #if POLL_METHOD
- if (read_buffer_len < 1 && last_read_error == 0) {
- errno= 0;
- if(!wait_for_action(background_read)) {
- if (errno != 0) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: wait_for_action got error %d (%s)\n",
- errno, error_description(errno)));
- /* Return error: */
- if ((redraw && redraw_screen)
- || InGetPrompt /* GetPrompt wants to see errors! */
- ) {
- DPRINT(Debug,4,(&Debug,
- " ... return error to caller\n"));
- found_key = -1;
- continue;
- }
- if (errno == EINTR
- #ifdef EAGAIN
- || (errno == EAGAIN)
- #endif
- #ifdef EWOULDBLOCK
- || (errno == EWOULDBLOCK)
- #endif
- ) {
- DPRINT(Debug,4,(&Debug,
- " ... retry (ignored)\n"));
- } else
- found_key = -1;
- continue;
- }
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: interrupted (ignored)\n"));
- continue;
- }
- }
- if (read_buffer_len > 0) {
- ch = read_buffer[0];
- if (--read_buffer_len > 0)
- memmove(read_buffer,read_buffer+1,read_buffer_len);
- } else if (last_read_error != 0) {
- if (-1 == last_read_error) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: background_read got zero bytes...\n"));
- found_key = -1;
- continue;
- }
- /* Return error: */
- if ((redraw && redraw_screen)
- || InGetPrompt /* GetPrompt wants to see errors! */
- ) {
- found_key = -1;
- continue;
- }
- if (last_read_error != 0) {
- errno = last_read_error;
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: background_read got error %d (%s)\n",
- last_read_error,
- error_description(last_read_error)));
- found_key = -1;
- }
- continue; /* continue or quit */
- } else {
- DPRINT(Debug,1,(&Debug,
- "ReadCh2: SOFTWARE ERROR !!\n"));
- break;
- }
- #else
- int result;
-
- result = read(terminal_fd, &ch, 1);
-
- if (result < 0) {
- int err = errno;
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: errno = %d [%s]\n",err,
- error_description(err)));
-
- /* Return error: */
- if (redraw && redraw_screen
- || InGetPrompt /* GetPrompt wants to see errors! */
- ) {
- found_key = -1;
- continue;
- }
- if((errno == EINTR)
- #ifdef EAGAIN
- || (errno == EAGAIN)
- #endif
- #ifdef EWOULDBLOCK
- || (errno == EWOULDBLOCK)
- #endif
- ) {
- continue; /* Retry */
- }
- break;
- }
- if (0 == result) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Got zero bytes...\n"));
- found_key = -1;
- continue;
- }
- #endif
-
- #ifdef USE_DLOPEN
- {
- union xxx_rand {
- int ch;
- char bytes[sizeof (int)];
- } A;
- A.ch = ch;
-
- seed_rand_bits(A.bytes, sizeof A,
- 3 /* Assume 3 bits per character ... */);
- }
- #endif
-
-
-
- DPRINT(Debug,50,(&Debug,
- "ReadCh2: Looking char %d (read_p=%d)\n",ch,read_p));
-
- if (term_char) {
- if (backspace == ch)
- found_key = TERMCH_backspace;
- if (kill_line == ch)
- found_key = TERMCH_kill_line;
- if (word_erase == ch)
- found_key = TERMCH_word_erase;
- if (interrupt_char == ch)
- found_key = TERMCH_interrupt_char;
- if (reprint_char == ch)
- found_key = TERMCH_reprint_char;
- if (eof_char == ch)
- found_key = TERMCH_eof_char;
- if (found_key) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: found termchar = %d (char=%02X)\n",
- found_key,ch));
- /* Soft reset state */
- reset_state(last_state,0);
- break;
- }
- }
-
- if (cursorkeys) {
- int match = 0;
- int i;
- for (i = 0; keytable[i].str != NULL; i++) {
- if (keytable[i].maybe) {
- unsigned char * CONST str =
- (unsigned char *) *(keytable[i].str);
- if (str[read_p] == ch) {
- match++;
- if (str[read_p+1] == '\0') {
- found_key = keytable[i].result;
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Found function key = %d (keytable = %d, read_p =%d)\n",
- found_key,i,read_p));
-
- /* Soft reset state */
- reset_state(last_state,0);
- }
- } else {
- keytable[i].maybe = 0;
- }
- }
- }
-
- if (read_p < sizeof input_buffer -1) {
- input_buffer[read_p] = ch;
- input_buffer[read_p+1] = '\0';
- }
-
- if (match == 0) { /* Not in keytable */
- if (read_p == 0)
- found_key = ch; /* Normal key */
- else {
- int i;
-
- /* But maybe escape sequence is valid state change ? */
-
- for (i = 0;
- i <= read_p && i < sizeof input_buffer -1;
- i++) {
-
- if (state_ready(last_state)) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Unsupporting -- function keys and state change sequences overlap? (OR BAD SEQUENCE) \n"));
- goto BAD_sequence;
- }
-
- if (!add_streambyte_to_state(last_state,
- input_buffer[i]))
- goto BAD_sequence;
-
- }
-
- if (state_ready(last_state))
- goto got_key;
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: need more bytes for character...\n"));
- goto reinit_ReadChar;
-
-
- BAD_sequence:
-
- /* Soft reset state */
- reset_state(last_state,0);
-
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Bad escape sequence; ch = %d, read_p = %d\n",
- ch,read_p));
- #ifdef DEBUG
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Sequence was:"));
- for (i = 0; i <= read_p && i < sizeof input_buffer -1; i++) {
- if (isascii(input_buffer[i]) && isprint(input_buffer[i])) {
- DPRINT(Debug,4,(&Debug," %c (0x%02X)",
- input_buffer[i],input_buffer[i]));
- } else {
- DPRINT(Debug,4,(&Debug," 0x%02X", input_buffer[i]));
- }
- }
- if (read_p > sizeof input_buffer -1)
- DPRINT(Debug,4,(&Debug," ..."));
- DPRINT(Debug,4,(&Debug,"\n"));
- #endif
-
- /* Ring a bell */
- Writechar('\007');
- goto reinit_ReadChar;
- }
- } else
- read_p++;
- } else
- found_key = ch;
-
- }
-
- if (found_key <= 0 && redraw && redraw_screen) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Redraw...\n"));
- if(!RawState()) { /* Check that we have in 'raw' mode */
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: Going to Raw mode\n"));
- Raw(ON);
- }
- ClearScreen();
-
- reset_state(last_state,1);
- last_state->caller_flags = redraw;
-
- return last_state;
- }
-
- MoveCursor(x,y);
- DPRINT(Debug,50,(&Debug,
- "ReadCh2: found_key=%d\n",found_key));
-
- if (found_key < 0) {
- reset_state(last_state,1);
- DPRINT(Debug,4,(&Debug,
- "ReadCh2=NULL (state)\n"));
- return NULL;
- } else {
- if (found_key >= 256) {
- reset_state(last_state,1);
- last_state->caller_flags = found_key;
- } else {
- last_state->caller_flags = 0;
- if (!add_streambyte_to_state(last_state,found_key)) {
- /* Ring a bell */
- Writechar('\007');
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: bad sequence...\n"));
- reset_state(last_state,1);
- }
- }
- }
-
- if (!state_ready(last_state) &&
- !last_state->caller_flags) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh2: need more bytes for character...\n"));
- goto reinit_ReadChar;
- }
-
- got_key:
- DPRINT(Debug,4,(&Debug,
- "ReadCh2=%p (state): caller_flags=%d, ready=%d\n",
- last_state,last_state->caller_flags,
- state_ready(last_state)));
- return last_state;
- }
-
-
- int ReadCh(flags)
- int flags;
- {
- int ret = 0;
-
- do {
- struct charset_state *ch = ReadCh2(flags);
-
- if (!ch) {
- ret = EOF;
- DPRINT(Debug,4,(&Debug,
- "ReadCh=EOF (errno=%d)\n",errno));
- } else if (ch -> caller_flags) {
- ret = ch -> caller_flags;
- DPRINT(Debug,4,(&Debug,
- "ReadCh=%d (flags)\n",ret));
- } else
- ret = state_is_onebyte(ch);
- if (!ret) {
- DPRINT(Debug,4,(&Debug,
- "ReadCh: Not a one byte character or zero byte!"));
- /* Ring a bell */
- Writechar('\007');
- } else {
- DPRINT(Debug,4,(&Debug,
- "ReadCh=%d (one byte character)\n",
- ret));
- }
- } while (0 == ret);
- return ret;
- }
-
-
-
-
- /*
- * Local Variables:
- * mode:c
- * c-basic-offset:4
- * End:
- */
-
-
--- 0 ----
Index: elm2.4.ME+.108-cvs/src/edit.c
*** elm2.4.ME+.107/src/edit.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/edit.c 2003-10-01 20:34:34.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: edit.c,v 1.13 2003/08/04 14:58:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: edit.c,v 1.14 2003/10/01 17:34:34 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 127,134 ****
}
Raw(ON);
/* a location not near the next request, so an absolute is used */
! SetXYLocation(0, 40);
return(1);
}
--- 127,135 ----
}
Raw(ON);
+
/* a location not near the next request, so an absolute is used */
! InvalidateLocation();
return(1);
}
Index: elm2.4.ME+.108-cvs/src/editmsg.c
*** elm2.4.ME+.107/src/editmsg.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/editmsg.c 2003-10-11 16:04:54.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.32 2003/07/29 18:46:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.32 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.35 2003/10/11 13:04:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 481,488 ****
return retcode;
}
! static int have_editor P_((char *editor));
! static int have_editor(editor)
char *editor;
{
int return_value = 1;
--- 481,488 ----
return retcode;
}
!
! int have_editor(editor)
char *editor;
{
int return_value = 1;
***************
*** 535,541 ****
/** Invoke the users editor on the filename. Return when done.
**/
! char buffer[SLEN];
int stat, return_value = 0;
int err;
char * filename2 ;
--- 535,541 ----
/** Invoke the users editor on the filename. Return when done.
**/
! char * buffer = NULL;
int stat, return_value = 0;
int err;
char * filename2 ;
***************
*** 551,558 ****
else
filename2 = filename;
- buffer[0] = '\0';
-
if ((already_has_text ||
!have_editor(editor)) &&
0 != strcmp(alternative_editor, "EDITOR") &&
--- 551,556 ----
***************
*** 578,593 ****
"Invoking editor..."));
FlushBuffer();
! if (strlen(buffer) == 0) {
! if (in_string(editor, "%s"))
! elm_sfprintf(buffer, sizeof buffer,
! FRM(editor),
! filename2);
! else
! elm_sfprintf(buffer, sizeof buffer,
! FRM("%s %s"),
! editor, filename2);
! }
if (filename2 != filename) {
char linebuf[1024];
--- 576,588 ----
"Invoking editor..."));
FlushBuffer();
! if (in_string(editor, "%s"))
! buffer = elm_message(FRM(editor),
! filename2);
! else
! buffer = elm_message(FRM("%s %s"),
! editor, filename2);
!
if (filename2 != filename) {
char linebuf[1024];
***************
*** 632,640 ****
}
(void) elm_chown(filename2, userid, groupid);
-
Raw(OFF);
!
if ((stat = system_call(buffer, SY_ENAB_SIGHUP|SY_DUMPSTATE,
mailbox)) == -1) {
err = errno;
--- 627,634 ----
}
(void) elm_chown(filename2, userid, groupid);
Raw(OFF);
!
if ((stat = system_call(buffer, SY_ENAB_SIGHUP|SY_DUMPSTATE,
mailbox)) == -1) {
err = errno;
***************
*** 650,662 ****
sleep_message();
return_value = 1;
}
-
- enforce_newline(filename2);
-
Raw(ON);
-
- MoveCursor(elm_LINES, 0); /* dont know where we are, force last row, col 0 */
if (filename2 != filename) {
char linebuf[1024];
--- 644,653 ----
sleep_message();
return_value = 1;
}
Raw(ON);
+ enforce_newline(filename2);
+
if (filename2 != filename) {
char linebuf[1024];
***************
*** 705,710 ****
--- 696,705 ----
free(filename2);
}
+ if (buffer) {
+ free(buffer); buffer = NULL;
+ }
+
DPRINT(Debug,5,(&Debug,
"edit_the_message=%d\n",return_value));
Index: elm2.4.ME+.108-cvs/src/elm.c
*** elm2.4.ME+.107/src/elm.c 2003-08-11 11:21:18.000000000 +0300
--- elm2.4.ME+.108-cvs/src/elm.c 2003-09-14 19:35:19.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.56 2003/08/11 06:53:24 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.57 2003/09/14 16:35:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.57 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 1204,1212 ****
Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmOptions,
"Options"));
! if((i=options(current_mailbox)) > 0)
get_page(current, current_mailbox);
! else if(i < 0)
leave(0, ¤t_mailbox);
redraw++; /* always fix da screen... */
}
--- 1204,1213 ----
Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmOptions,
"Options"));
! if((i=options(current_mailbox)) > 0) {
! current = get_current(current_mailbox);
get_page(current, current_mailbox);
! } else if(i < 0)
leave(0, ¤t_mailbox);
redraw++; /* always fix da screen... */
}
Index: elm2.4.ME+.108-cvs/src/hdrconfg.c
*** elm2.4.ME+.107/src/hdrconfg.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/hdrconfg.c 2003-10-11 16:25:27.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.29 2003/07/29 18:46:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.33 2003/10/11 13:25:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 32,37 ****
--- 32,42 ----
#include "def_elm.h"
#include "s_elm.h"
+ #include <errno.h>
+ #ifndef ANSI_C
+ extern int errno;
+ #endif
+
DEBUG_VAR(Debug,__FILE__,"header");
static unsigned char *s2us P_((char *str));
***************
*** 427,440 ****
return 0;
}
! void edit_headers(headers,mailer_info,hdr_charset)
struct mailing_headers *headers;
struct mailer_info *mailer_info;
charset_t hdr_charset;
{
int c, do_redraw;
struct hdr_menu_item *h;
int precmd = 0;
/* expand out all of the header values */
/* menu displays expanded values, user edits unexpended versions */
--- 432,723 ----
return 0;
}
! enum mode_xx { mode_plain, mode_phrase, mode_comment };
!
! static void print_edit_string P_((enum mode_xx mode,FILE *F,charset_t edit_charset,
! int encondig_supported,struct string *s));
!
! static void print_edit_string(mode,F,edit_charset,encoding_supported,s)
! enum mode_xx mode;
! FILE *F;
! charset_t edit_charset;
! int encoding_supported;
! struct string *s;
! {
!
! int mime_code = encoding_supported &&
! s->string_type != edit_charset;
!
! char * s1 = NULL;
!
! switch (mode) {
! case mode_phrase:
! s1 = string_to_hdr(HDR_PHRASE,s, edit_charset,mime_code);
! break;
! case mode_comment: putc('(',F);
! s1 = string_to_hdr(HDR_COMMENT,s, edit_charset,mime_code);
! break;
! default:
! s1 = string_to_hdr(HDR_TEXT,s, edit_charset,mime_code);
! break;
! }
!
! fputs(s1,F);
!
! switch (mode) {
! case mode_comment: putc(')',F); break;
! }
!
! free(s1);
!
! }
!
! static void add_addr_header P_((FILE * F,charset_t edit_charset,
! int encoding_supported,char * name,
! struct expanded_address *a));
!
! static void add_addr_header(F,edit_charset,encoding_supported,name,a)
! FILE * F;
! charset_t edit_charset;
! int encoding_supported;
! char * name;
! struct expanded_address *a;
! {
! int i;
! int l = 0;
!
! fprintf(F,"%s: ",name);
!
! for (i = 0; i < a->addrs_len; i++) {
! struct string * f = a->addrs[i].fullname;
! char * ad = a->addrs[i].addr;
! struct string * c = a->addrs[i].comment;
!
! if (f && string_len(f) > 0) {
! print_edit_string (mode_phrase,F,edit_charset,encoding_supported,f);
! putc(' ',F);
! l += string_len(f);
! }
! putc('<',F);
! fputs(ad,F); l += strlen(ad);
! putc('>',F);
! if (c && string_len(c) > 0) {
! putc(' ',F);
! print_edit_string (mode_comment,F,edit_charset,encoding_supported,c);
! l += string_len(c);
! }
!
! if (i < a->addrs_len-1) {
! putc(',',F);
! if (l > 60) {
! putc('\n',F);
! l = 0;
! }
! putc(' ',F);
! }
! }
! putc('\n',F);
!
! }
!
! static void add_string_header P_((FILE * F,charset_t edit_charset,
! int encoding_supported,char * name,
! struct string *s));
!
! static void add_string_header(F,edit_charset,encoding_supported,name,s)
! FILE * F;
! charset_t edit_charset;
! int encoding_supported;
! char * name;
! struct string *s;
! {
! fprintf(F,"%s: ",name);
! print_edit_string (mode_plain,F,edit_charset,encoding_supported,s);
! putc('\n',F);
!
! }
!
!
! static void edit_headers_on_editor P_((struct mailing_headers *headers,
! char *editor, int encoding_supported));
! static void edit_headers_on_editor(headers,editor, encoding_supported)
! struct mailing_headers *headers;
! char *editor;
! int encoding_supported;
! {
! charset_t edit_charset = system_charset;
! FILE * F = NULL;
!
! char * filename = elm_message(FRM("%s%sHDR%d"),
! temp_dir, temp_file, getpid());
! char * buffer = NULL;
! char buffer1[32*1024];
! int stat;
! int c;
!
! if (in_string(editor, "%s"))
! buffer = elm_message(FRM(editor),
! filename);
! else
! buffer = elm_message(FRM("%s %s"),
! editor, filename);
!
!
! F = safeopen_rdwr(filename);
! if (!F)
! goto fail1;
!
! PutLineX(elm_LINES, 0, CATGETS(elm_msg_cat, ElmSet, ElmInvokeEditor,
! "Invoking editor..."));
! FlushBuffer();
!
!
! /* FIX: Following prints with display_charset and
! not with edit_charset (system_charset)
! */
!
!
! elm_fprintf(F,
! CATGETS(elm_msg_cat, ElmSet, ElmHdrEditComment,
! "# Headers are automatically converted from %s charset and not need encoded\n"),
! edit_charset->MIME_name ? edit_charset->MIME_name : "<no MIME name>");
!
! if (encoding_supported) {
! elm_fprintf(F,
! CATGETS(elm_msg_cat, ElmSet, ElmHdrEditCommentEnc,
! "# MIME enconding of headers is supported\n"));
!
! } else {
! elm_fprintf(F,
! CATGETS(elm_msg_cat, ElmSet, ElmHdrEditCommentNo,
! "# MIME enconding of headers is NOT supported\n"));
!
! }
!
!
! add_addr_header(F,edit_charset,encoding_supported,
! "From", & headers->from);
! add_addr_header(F,edit_charset,encoding_supported,
! "To", & headers->to);
! add_addr_header(F,edit_charset,encoding_supported,
! "Cc", & headers->cc);
! add_addr_header(F,edit_charset,encoding_supported,
! "Bcc", & headers->bcc);
! add_addr_header(F,edit_charset,encoding_supported,
! "Reply-To", & headers->reply_to);
! add_string_header(F,edit_charset,encoding_supported,
! "Subject", headers->subject);
!
! fclose(F);
!
! (void) elm_chown(filename, userid, groupid);
!
! Raw(OFF);
! /* FIX: SY_DUMPSTATE should perhaps be supported? */
! if ((stat = system_call(buffer, SY_ENAB_SIGHUP,
! NULL)) == -1) {
! int err = errno;
!
! Raw(ON);
! DPRINT(Debug,1,(&Debug,
! "System call failed with stat %d (edit_the_message)\n",
! stat));
! DPRINT(Debug,1,(&Debug,
! "** %s **\n", error_description(err)));
! ClearLine(elm_LINES-1);
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCantInvokeEditor,
! "Can't invoke editor '%s' for composition."),
! editor);
! sleep_message();
!
! goto fail2;
! }
! Raw(ON);
!
! F = fopen(filename,"r");
! if (!F) {
! /* In than point opening should have succeed */
! int err = errno;
! lib_error(FRM("%s: %s"),filename,err);
!
! goto fail1;
! }
!
! /* Skip comment block */
!
! while ('#' == (c = getc(F))) {
!
! while ('\n' != (c = getc(F))) {
! if (EOF == c)
! break;
! }
! }
!
! if (EOF != c)
! ungetc(c,F);
!
!
! /* Read headers */
! while (0 < read_header_line(F,buffer1,sizeof buffer1,0)) {
!
! header_ptr header_name;
! char *k;
!
! if ('#' == buffer[0])
! continue;
!
! k = strchr(buffer1,':');
! if (!k)
! break;
! *k = '\0';
! k++;
!
! while (whitespace(*k))
! k++;
!
! header_name = find_header(buffer1,1);
!
! if (!add_to_mailing_header(headers,header_name,k,
! encoding_supported,
! edit_charset,1 /* REPLACE */ )) {
!
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmHdrNotSupported,
! "Editing of %s header is not supported."),
! buffer1);
! }
! }
!
! if (!feof(F))
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmHdrGarbage,
! "Garbage on header file"));
!
! fclose(F);
!
! fail2:
! unlink(filename);
!
! fail1:
!
! free(filename); filename = NULL;
! free(buffer); buffer = NULL;
!
! }
!
! void edit_headers(headers,mailer_info,hdr_charset, hdr_encoding_supported)
struct mailing_headers *headers;
struct mailer_info *mailer_info;
charset_t hdr_charset;
+ int hdr_encoding_supported;
{
int c, do_redraw;
struct hdr_menu_item *h;
int precmd = 0;
+
+
+ int editor_available =
+ strcmp(editor, "builtin") != 0 &&
+ strcmp(editor, "none") != 0;
+
/* expand out all of the header values */
/* menu displays expanded values, user edits unexpended versions */
***************
*** 471,488 ****
}
/* display the instructions */
#ifdef ALLOW_SUBSHELL
! print_format_center(INSTRUCT_LINE,
! CATGETS(elm_msg_cat, ElmSet,
! ElmHdrmenuInstruct,
! "Choose header, u)ser defined header, !)shell, or <return>."));
#else
! print_format_center(INSTRUCT_LINE,
! CATGETS(elm_msg_cat, ElmSet,
! ElmHdrmenuInstructNoShell,
! "Choose header, u)ser defined header, or <return>."));
#endif
/* prompt for command */
PutLineX(INPUT_LINE, 0,
CATGETS(elm_msg_cat, ElmSet,
--- 754,788 ----
}
/* display the instructions */
+ if (user_level > 0 && editor_available) {
+
#ifdef ALLOW_SUBSHELL
! print_format_center(INSTRUCT_LINE,
! CATGETS(elm_msg_cat, ElmSet,
! ElmHdrmenuInstruct1,
! "Choose header, u)ser defined header, !)shell, invoke e)ditor, or <return>."));
#else
! print_format_center(INSTRUCT_LINE,
! CATGETS(elm_msg_cat, ElmSet,
! ElmHdrmenuInstruct1NoShell,
! "Choose header, u)ser defined header, invoke e)ditor, or <return>."));
#endif
+ } else {
+
+ #ifdef ALLOW_SUBSHELL
+ print_format_center(INSTRUCT_LINE,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmHdrmenuInstruct,
+ "Choose header, u)ser defined header, !)shell, or <return>."));
+ #else
+ print_format_center(INSTRUCT_LINE,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmHdrmenuInstructNoShell,
+ "Choose header, u)ser defined header, or <return>."));
+ #endif
+
+ }
/* prompt for command */
PutLineX(INPUT_LINE, 0,
CATGETS(elm_msg_cat, ElmSet,
***************
*** 523,529 ****
case ctrl('L'):
do_redraw = TRUE;
break;
!
default:
for (h = hmenu_item_list ; h->menucmd > 0 ; ++h) {
if (h->menucmd == c) {
--- 823,839 ----
case ctrl('L'):
do_redraw = TRUE;
break;
!
! case 'e':
! editor_available &= have_editor(editor);
!
! if (editor_available)
! edit_headers_on_editor(headers,editor, hdr_encoding_supported);
!
! do_redraw = TRUE;
! break;
!
!
default:
for (h = hmenu_item_list ; h->menucmd > 0 ; ++h) {
if (h->menucmd == c) {
Index: elm2.4.ME+.108-cvs/src/in_utils.c
*** elm2.4.ME+.107/src/in_utils.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/in_utils.c 2003-10-01 20:34:34.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.27 2003/08/01 08:22:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.28 2003/10/01 17:34:34 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.28 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 657,663 ****
GetXYLocation(&line, &col);
if (!passwd &&
! ((col / tabspacing ) +1) * tabspacing
>= elm_COLUMNS) {
buffer = info->give_buffer(info,em_next);
if (!buffer)
--- 657,663 ----
GetXYLocation(&line, &col);
if (!passwd &&
! ((col / get_tabspacing() ) +1) * get_tabspacing()
>= elm_COLUMNS) {
buffer = info->give_buffer(info,em_next);
if (!buffer)
Index: elm2.4.ME+.108-cvs/src/mailmsg2.c
*** elm2.4.ME+.107/src/mailmsg2.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/mailmsg2.c 2003-10-05 19:07:28.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.69 2003/07/29 18:46:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.69 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.70 2003/10/05 16:07:28 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.70 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 64,71 ****
struct mailer_info *mailer_info,
charset_t hdr_charset,
struct MailboxView *mailbox
! /* for system_call() */
!
)); /* Prototype */
static void mail_sent P_((union any_fd fd, char * title, struct run_state *rs,
--- 64,71 ----
struct mailer_info *mailer_info,
charset_t hdr_charset,
struct MailboxView *mailbox
! /* for system_call() */,
! int encode_hdr
)); /* Prototype */
static void mail_sent P_((union any_fd fd, char * title, struct run_state *rs,
***************
*** 498,504 ****
mailer_info,
MIME_info.hdr_charset,
mailbox
! /* needed for system_call() */);
/* Empty ... */
if (-2 == code && !attachments.attachment_count) {
return need_redraw;
--- 498,505 ----
mailer_info,
MIME_info.hdr_charset,
mailbox
! /* needed for system_call() */,
! MIME_info.encode_hdr);
/* Empty ... */
if (-2 == code && !attachments.attachment_count) {
return need_redraw;
***************
*** 1043,1049 ****
dsn, headers, attachments,
file_set,
mailer_info,
! hdr_charset, mailbox
)
char *filename; /* pathname to mail mssg composition file */
int *form_p; /* pointer to form message state */
--- 1044,1051 ----
dsn, headers, attachments,
file_set,
mailer_info,
! hdr_charset, mailbox,
! encode_hdr
)
char *filename; /* pathname to mail mssg composition file */
int *form_p; /* pointer to form message state */
***************
*** 1055,1064 ****
int *dsn;
struct mailing_headers *headers;
struct Attachments *attachments;
! charset_t file_set; /* charset oof file (filename) */
struct mailer_info *mailer_info;
charset_t hdr_charset;
struct MailboxView *mailbox; /* needed for system_call() */
{
char *prompt_mssg = NULL; /* message to display prompting for cmd */
char prompt_menu[SLEN], /* menu of available commands */
--- 1057,1067 ----
int *dsn;
struct mailing_headers *headers;
struct Attachments *attachments;
! charset_t file_set; /* charset of file (filename) */
struct mailer_info *mailer_info;
charset_t hdr_charset;
struct MailboxView *mailbox; /* needed for system_call() */
+ int encode_hdr;
{
char *prompt_mssg = NULL; /* message to display prompting for cmd */
char prompt_menu[SLEN], /* menu of available commands */
***************
*** 1376,1382 ****
if (did_prompt)
Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmVfyMenuHeaders,"Headers"));
! edit_headers(headers,mailer_info,hdr_charset);
*need_redraw_p = TRUE;
do_redraw = 1;
break;
--- 1379,1385 ----
if (did_prompt)
Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmVfyMenuHeaders,"Headers"));
! edit_headers(headers,mailer_info,hdr_charset,encode_hdr);
*need_redraw_p = TRUE;
do_redraw = 1;
break;
Index: elm2.4.ME+.108-cvs/src/Makefile.SH
*** elm2.4.ME+.107/src/Makefile.SH 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/Makefile.SH 2003-10-01 20:34:34.000000000 +0300
***************
*** 31,37 ****
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.45 2003/08/04 14:58:58 hurtta Exp $
#
# Makefile for the ELM mail program.
#
--- 31,37 ----
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.46 2003/10/01 17:34:34 hurtta Exp $
#
# Makefile for the ELM mail program.
#
***************
*** 112,118 ****
browser.c \
builtin++.c \
calendar.c \
- curses.c \
date.c \
delete.c \
digest.c \
--- 112,117 ----
***************
*** 175,181 ****
browser.o \
builtin++.o \
calendar.o \
- curses.o \
date.o \
delete.o \
digest.o \
--- 174,179 ----
***************
*** 229,237 ****
--- 227,237 ----
# Standard targets
all: Makefile $(BIN)/elm $(SHLIST)
cd messages; $(MAKE) $(MJ) $(MFLAGS) $@
+ cd screen; $(MAKE) $(MJ) $(MFLAGS) $@
install_s: Makefile $(DEST) $(DEST)/elm
cd messages; $(MAKE) $(MJ) $(MFLAGS) $@
+ cd screen; $(MAKE) $(MJ) $(MFLAGS) $@
$(DEST):
$(REG) mkdir $(DEST)
***************
*** 248,253 ****
--- 248,257 ----
messages/libmessages.a:
cd messages; $(MAKE) $(MJ) $(MFLAGS) all
+ screen/libscreen.a:
+ cd screen; $(MAKE) $(MJ) $(MFLAGS) all
+
+
!NO!SUBS!
if $test "X$etc" != "X$lib" ; then
***************
*** 279,284 ****
--- 283,289 ----
clean:
$(RM) $(ELM_OBJ) $(BIN)/elm $(SHLIST)
cd messages; $(MAKE) $(MJ) $(MFLAGS) $@
+ cd screen; $(MAKE) $(MJ) $(MFLAGS) $@
# Dependencies and rules
***************
*** 289,299 ****
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 294,304 ----
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/defs.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
***************
*** 318,324 ****
browser.o: def_elm.h $(INCLDIR)/s_elm.h
builtin++.o: def_elm.h
calendar.o: def_elm.h
- curses.o: def_elm.h $(INCLDIR)/s_elm.h
date.o: def_elm.h
delete.o: def_elm.h $(INCLDIR)/s_elm.h
digest.o: def_elm.h $(INCLDIR)/s_elm.h
--- 323,328 ----
***************
*** 370,377 ****
utils.o: def_elm.h $(INCLDIR)/s_elm.h
# Dependencies and rules for compiling C programs
! $(BIN)/elm: $& $(ELM_OBJ) ../melib/libme.a ../lib/libutil.a messages/libmessages.a
! $(CC) $(LFLAGS) -o $@ $(ELM_OBJ) messages/libmessages.a ../melib/libme.a ../lib/libutil.a $(LIBS) $(LIB2)
# Dependencies and rules for installing C programs
--- 374,381 ----
utils.o: def_elm.h $(INCLDIR)/s_elm.h
# Dependencies and rules for compiling C programs
! $(BIN)/elm: $& $(ELM_OBJ) ../melib/libme.a ../lib/libutil.a messages/libmessages.a screen/libscreen.a
! $(CC) $(LFLAGS) -o $@ $(ELM_OBJ) messages/libmessages.a screen/libscreen.a ../melib/libme.a ../lib/libutil.a $(LIBS) $(LIB2)
# Dependencies and rules for installing C programs
***************
*** 382,389 ****
cat >>Makefile <<'!NO!SUBS!'
! $(BIN)/elm-shared: $& $(ELM_OBJ) ../melib/libme.a ../shlib/libelmme-base.so messages/libmessages.a
! $(CC) $(LFLAGS) -o $@ $(RPATH) $(ELM_OBJ) messages/libmessages.a ../melib/libme.a ../shlib/libelmme-base.so $(LIBS) $(LIB2)
$(DEST)/elm: $(BIN)/elm-shared
--- 386,393 ----
cat >>Makefile <<'!NO!SUBS!'
! $(BIN)/elm-shared: $& $(ELM_OBJ) ../melib/libme.a ../shlib/libelmme-base.so messages/libmessages.a screen/libscreen.a
! $(CC) $(LFLAGS) -o $@ $(RPATH) $(ELM_OBJ) messages/libmessages.a screen/libscreen.a ../melib/libme.a ../shlib/libelmme-base.so $(LIBS) $(LIB2)
$(DEST)/elm: $(BIN)/elm-shared
Index: elm2.4.ME+.108-cvs/src/messages/Makefile.SH
*** elm2.4.ME+.107/src/messages/Makefile.SH 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/messages/Makefile.SH 2003-10-01 20:34:34.000000000 +0300
***************
*** 17,23 ****
echo "Extracting src/messages/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.4 2003/08/04 14:58:58 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
--- 17,23 ----
echo "Extracting src/messages/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.5 2003/10/01 17:34:34 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
***************
*** 69,75 ****
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 69,75 ----
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
Index: elm2.4.ME+.108-cvs/src/mime.c
*** elm2.4.ME+.107/src/mime.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/mime.c 2003-10-05 19:07:28.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime.c,v 1.27 2003/07/29 18:46:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime.c,v 1.28 2003/10/05 16:07:28 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.28 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 56,61 ****
--- 56,62 ----
mime_info->encoding_top = ENCODING_7BIT;
mime_info->type_opts_top = NULL;
mime_info->hdr_charset = text_charset;
+
/* FIXME: is this correct?
... we also should avoid ISO2022 charsets on here
*/
***************
*** 1022,1029 ****
fputc('\n',dest); /* filler */
X->start_loc = ftell(dest);
! /* encoding rules are different for text and no text
! * for text we must do \n -> \r\n before base64 encoding */
{
--- 1023,1030 ----
fputc('\n',dest); /* filler */
X->start_loc = ftell(dest);
! /* Encoding rules are different for text and non-text.
! * For text we must do \n -> \r\n before base64 encoding */
{
Index: elm2.4.ME+.108-cvs/src/newmbox.c
*** elm2.4.ME+.107/src/newmbox.c 2003-08-16 09:58:21.000000000 +0300
--- elm2.4.ME+.108-cvs/src/newmbox.c 2003-10-11 20:04:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: newmbox.c,v 1.71 2003/08/14 14:14:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: newmbox.c,v 1.78 2003/10/11 17:04:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.78 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
***************
*** 748,755 ****
f += skipbytes;
! percent = (int)(f * 100.0 /
! storage->current_folder->mailfile_size);
/* calculation with integers overflow on big folders! */
/* Should be 100% now ... */
--- 756,766 ----
f += skipbytes;
! if (storage->current_folder->mailfile_size >0)
! percent = (int)(f * 100.0 /
! storage->current_folder->mailfile_size);
! else
! percent = 100;
/* calculation with integers overflow on big folders! */
/* Should be 100% now ... */
Index: elm2.4.ME+.108-cvs/src/screen/cur_process.c
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/cur_process.c 2003-10-01 20:34:34.000000000 +0300
***************
*** 0 ****
--- 1,70 ----
+ static char rcsid[] = "@(#)$Id: cur_process.c,v 1.2 2003/10/01 17:34:34 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+ #include "def_screen.h"
+ #include "s_elm.h"
+
+
+ static void print_status_1 P_((struct run_state *rs,int sig,int exit_code));
+ static void print_status_1(rs,sig,exit_code)
+ struct run_state *rs;
+ int sig, exit_code;
+ {
+ redraw:
+ if (sig)
+ PutLineX(elm_LINES,0,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmTerminatedWithSignal,
+ "Terminated with signal %d. Press any key to continue: "),
+ sig);
+ else if (exit_code)
+ PutLineX(elm_LINES,0,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmExitedWithStatus,
+ "Exited with status %d. Press any key to continue: "),
+ exit_code);
+ else
+ PutLineX(elm_LINES,0,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmDoneCont,
+ "Done. Press any key to continue: "));
+ if (ReadCh(REDRAW_MARK) == REDRAW_MARK)
+ goto redraw;
+ }
+
+
+ void print_status_cooked(rs,sig,exit_code)
+ struct run_state *rs;
+ int sig, exit_code;
+ {
+ Raw(ON | NO_TITE);
+
+ print_status_1(rs,sig,exit_code);
+
+ Raw(OFF | NO_TITE);
+ printf("\n\r");
+ }
+
+
+ void print_status(rs,sig,exit_code)
+ struct run_state *rs;
+ int sig, exit_code;
+ {
+ if (rs->raw == ON && ( SY_CLRWAIT & rs->options )) {
+
+ print_status_1(rs,sig,exit_code);
+ }
+ }
+
+
+ void start_run_tty_init()
+ {
+ MoveCursor(elm_LINES,0);
+ CleartoEOLN();
+ FlushBuffer();
+ }
Index: elm2.4.ME+.108-cvs/src/screen/curses.c
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/curses.c 2003-10-12 09:42:38.000000000 +0300
***************
*** 0 ****
--- 1,1411 ----
+ static char rcsid[] = "@(#)$Id: curses.c,v 1.3 2003/10/12 06:42:38 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
+ *
+ * Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************
+ *
+ * Some code copied from ../curses.c. It have following copyright:
+ *
+ * Copyright (c) 1988-1992 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************/
+
+
+ #include "def_screen.h"
+
+ DEBUG_VAR(Debug,__FILE__,"screen");
+
+ #ifdef I_CURSES
+ #include <curses.h> /* <term.h> requires ... */
+ #endif /* I_CURSES */
+ #ifdef I_TERM
+ #include <term.h> /* Defination for tgetent.h and so on ... */
+ #undef lines /* ... But undefine lines macro */
+ #undef columns /* ... But undefine columns macro */
+ #endif /* I_TERM */
+
+ #ifdef TERMIOS
+ # include <termios.h>
+ # ifndef sun
+ # include <sys/ioctl.h> /* for TIOCGWINSZ */
+ # endif
+ #else
+ # ifdef TERMIO
+ # include <termio.h>
+ # else
+ # include <sgtty.h>
+ # endif
+ #endif
+
+ #include <errno.h>
+
+
+
+ /* Lose 'const' */
+ static char * cs2s P_((const char *str));
+ static char * cs2s(str)
+ CONST char *str;
+ {
+
+ return (char *)str;
+ }
+
+ static struct pg_modes {
+ int mode;
+ char * on;
+ char * off;
+
+ CONST char *set_on;
+ CONST char *set_off;
+
+ } set_modes[] = {
+
+ /* Possible incorrect -- was originally _setbold, _clearbold */
+ { pg_BOLD, NULL, NULL,
+ "so" /* Start standout mode */ ,
+ "se" /* End standout mode */ },
+
+ { pg_UNDERLINE, NULL, NULL,
+ "us" /* Start underlining */ ,
+ "ue" /* End underlining */ },
+
+
+ { pg_HALFBRIGHT, NULL, NULL,
+ "hs" /* ... not listed ... */ ,
+ "he" /* ... not listed ... */ },
+
+ { pg_INVERSE, NULL, NULL,
+ "so" /* Start standout mode */ ,
+ "se" /* End standout mode */ }
+ };
+
+ static
+ char *_clearscreen = NULL, *_moveto = NULL, *_up = NULL, *_down = NULL,
+ *_right = NULL, *_left = NULL,
+ *_cleartoeoln = NULL, *_cleartoeos = NULL, *_set_memlock = NULL,
+ *_clear_memlock = NULL,
+ *_start_termcap = NULL, *_end_termcap = NULL, *_bell = NULL;
+
+ char *_transmit_on = NULL, *_transmit_off = NULL;
+
+ char *_key_up = NULL, *_key_down = NULL, *_key_left = NULL, *_key_right = NULL,
+ *_key_pageup = NULL, *_key_pagedown = NULL, *_key_home = NULL,
+ *_key_help = NULL, *_key_find = NULL;
+
+ /* Some additional capacities not used in ../src/curses.c */
+
+ static
+ char *_up_many = NULL, *_down_many = NULL, *_left_many = NULL,
+ *_right_many = NULL;
+
+
+ #if 0 /* SCROLL */
+ static char *_set_scroll_region = NULL, *_scroll_down = NULL;
+
+ static char *_scroll_up = NULL, *_scroll_up_many = NULL;
+ #endif
+
+ static int _lines, _columns, _automargin, _eatnewlineglitch;
+
+ int _intransmit = -1; /* are we transmitting keys? */
+
+ char terminal_type[40] = "";
+ static char _terminal[1024]; /* Storage for terminal entry */
+ static char _capabilities[1024]; /* String for cursor motion */
+
+ static char *ptr = _capabilities; /* for buffering */
+
+ static VOLATILE int _line = -1; /* initialize to "trash" */
+ static VOLATILE int _col = -1;
+
+ int cursor_control = 0;
+ int cur_tabspacing = 8; /* Default? */
+
+ /* find tab stops preceding or following a given column position 'a', where
+ * the column position starts counting from 1, NOT 0!
+ */
+ #define prev_tab(a) (((((a-1)/cur_tabspacing))*cur_tabspacing)+1)
+ #define next_tab(a) (((((a-1)/cur_tabspacing)+1)*cur_tabspacing)+1)
+
+
+ #define DEFAULT_LINES_ON_TERMINAL 24
+ #define DEFAULT_COLUMNS_ON_TERMINAL 80
+
+
+ static char *us2s P_((unsigned char *str));
+ static char *us2s(str)
+ unsigned char *str;
+ {
+ return (char *)str;
+ }
+
+ int cur_InitScreen()
+ {
+ int i;
+ /* Set up all this fun stuff: returns zero if all okay, or;
+ -1 indicating no terminal name associated with this shell,
+ -2..-n No termcap for this terminal type known
+ */
+
+ int tgetent(), /* get termcap entry */
+ err;
+ char *termenv;
+ int fd;
+
+ if ((termenv = getenv("TERM")) == NULL) return(-1);
+
+ strfcpy(terminal_type, termenv, sizeof terminal_type);
+
+ if ((err = tgetent(_terminal, terminal_type)) != 1)
+ return(err-2);
+
+ /* _line, _col are asusmed to be trash -- do not
+ set them to zero now ...
+ */
+
+ fd = open("/dev/tty",O_RDWR);
+ if (fd < 0) {
+ DPRINT(Debug,4, (&Debug, "Opening of /dev/tty failed\n"));
+ } else {
+ FlushBuffer();
+ terminal_fd = fd;
+ DPRINT(Debug,4,(&Debug,
+ "/dev/tty is fd %d\n",terminal_fd));
+ }
+
+
+ /* load in all those pesky values */
+ _clearscreen = tgetstr("cl", &ptr); /* Clear screen and cursor home */
+ _moveto = tgetstr("cm", &ptr); /* Cursor move to row %1 and column %2
+ (on screen) */
+ _up = tgetstr("up", &ptr); /* Cursor up one line */
+ _down = tgetstr("do", &ptr); /* Cursor down one line */
+ _right = tgetstr("nd", &ptr); /* Cursor right one character */
+ _left = tgetstr("bc", &ptr); /* backspace, if not ^H */
+ _bell = tgetstr("bl", &ptr); /* Audio bell */
+
+
+ for (i =0 ; i < (sizeof set_modes) / sizeof (set_modes[0]); i++) {
+ set_modes[i].on = tgetstr(cs2s(set_modes[i].set_on),&ptr);
+ set_modes[i].off = tgetstr(cs2s(set_modes[i].set_off),&ptr);
+
+ switch(set_modes[i].mode) {
+
+ case pg_INVERSE:
+ if (set_modes[i].on && set_modes[i].off) {
+ has_highlighting = TRUE;
+ }
+ break;
+ }
+
+ }
+
+ _cleartoeoln = tgetstr("ce", &ptr); /* Clear to end of line */
+ _cleartoeos = tgetstr("cd", &ptr); /* Clear to end of screen */
+ _lines = tgetnum("li"); /* Number of lines */
+ _columns = tgetnum("co"); /* Number of columns */
+ cur_tabspacing = ((cur_tabspacing=tgetnum("it"))<= 0 ? 8 : cur_tabspacing);
+ /* Difference between tab positions */
+ _automargin = tgetflag("am"); /* Automatic margins which means automatic
+ line wrap */
+ _eatnewlineglitch = tgetflag("xn"); /* Newline/wraparound glitch */
+ _transmit_on = tgetstr("ks", &ptr); /* Turn keypad on */
+ _transmit_off = tgetstr("ke", &ptr); /* turn keypad off */
+ _set_memlock = tgetstr("ml", &ptr); /* ... not listed ... */
+ _clear_memlock = tgetstr("mu", &ptr); /* ... not listed ... */
+ _start_termcap = tgetstr("ti", &ptr); /* Begin program that uses cursor motion */
+ _end_termcap = tgetstr("te", &ptr); /* End program that uses cursor motion */
+
+
+ _key_up = tgetstr("ku", &ptr); /* Cursor up key */
+ _key_down = tgetstr("kd", &ptr); /* Cursor down key */
+ _key_left = tgetstr("kl", &ptr); /* Cursor left key */
+ _key_right = tgetstr("kr", &ptr); /* Cursor right key */
+ _key_pageup = tgetstr("kP", &ptr); /* Key for previous page */
+ _key_pagedown = tgetstr("kN", &ptr); /* Key for next page */
+ _key_home = tgetstr("kh", &ptr); /* Cursor home key */
+ _key_help = tgetstr("%1", &ptr); /* help key */
+ _key_find = tgetstr("@0", &ptr); /* find key */
+
+ /* Linux termcap lists following ....
+
+ mb Start blinking
+ md Start bold mode
+ me End all mode like so, us, mb, md and mr
+ mh Start half bright mode
+ mr Start reverse mode
+ us Start underlining
+ so Start standout mode
+
+ */
+
+
+ /* following strings are not copied from ../src/curses.c */
+
+ _up_many = tgetstr("UP", &ptr); /* Cursor up %1 lines */
+ _down_many = tgetstr("DO", &ptr); /* Cursor down %1 lines */
+ _left_many = tgetstr("LE", &ptr); /* Cursor left %1 lines */
+ _right_many = tgetstr("RI", &ptr); /* Cursor right %1 lines */
+
+ #if 0 /* SCROLL */
+ _set_scroll_region = tgetstr("cs", &ptr); /* Scroll region from
+ line %1 to %2 */
+ _scroll_down = tgetstr("sr", &ptr); /* Reverse scroll */
+
+ _scroll_up = tgetstr("sf", &ptr); /* Normal scroll one line
+ -- aka 'cursor down' */
+ _scroll_up_many = tgetstr("SF", &ptr); /* Normal scroll n line
+ -- aka 'cursor down' */
+
+ #endif
+
+ if (_transmit_on && _transmit_off && _key_up && _key_down) {
+ cursor_control = TRUE;
+ }
+
+
+ if (!_left) {
+ _left = "\b";
+ }
+
+ if (_lines == 0) _lines = DEFAULT_LINES_ON_TERMINAL;
+ if (_columns == 0) _columns = DEFAULT_COLUMNS_ON_TERMINAL;
+
+ return 0;
+ }
+
+ /* DO NOT return lines-1 (as ScreenSize() did) */
+
+ void cur_ScreenSize(lines, columns)
+ int *lines, *columns;
+ {
+ /** returns the number of lines and columns on the display. **/
+
+ #ifdef TIOCGWINSZ
+ struct winsize w;
+
+ if (ioctl(1,TIOCGWINSZ,&w) != -1) {
+ if (w.ws_row > 0)
+ _lines = w.ws_row;
+ if (w.ws_col > 0)
+ _columns = w.ws_col;
+ }
+ #endif
+
+ if (_lines == 0) _lines = DEFAULT_LINES_ON_TERMINAL;
+ if (_columns == 0) _columns = DEFAULT_COLUMNS_ON_TERMINAL;
+
+
+
+ *lines = _lines; /* This do not return lines-1
+ as ScreenSize() did
+ */
+ *columns = _columns;
+ }
+
+ void cur_GetXYLocation(x,y)
+ int *x,*y;
+ {
+ /* return the current cursor location on the screen */
+
+ *x = _line;
+ *y = _col;
+ }
+
+ static int need_moveabsolute = 0;
+
+ void InvalidateLocation()
+ {
+ need_moveabsolute = 1;
+ _line = 0;
+ _col = 0;
+ }
+
+ int cur_ClearScreen()
+ {
+ /* clear the screen: returns -1 if not capable */
+
+ _line = 0; /* clear leaves us at top... */
+ _col = 0;
+
+ redraw_screen = 0;
+ _intransmit = -1; /* Re-set state */
+
+ if (!_clearscreen)
+ return(-1);
+
+ tputs(_clearscreen, 1, outchar);
+ FlushBuffer(); /* clear the output buffer */
+ return(0);
+ }
+
+ static void moveabsolute P_((int col, int row));
+
+ void cur_CursorUp(n)
+ int n;
+ {
+ /** move the cursor up 'n' lines **/
+ /** Calling function must check that _up is not null before calling **/
+
+ if (need_moveabsolute)
+ moveabsolute(_col, _line);
+
+ _line = (_line-n > 0? _line - n: 0); /* up 'n' lines... */
+
+ if (n > 1 && _up_many) {
+ char *stuff, *tgoto();
+
+ stuff = tgoto(_up_many,0,n);
+ tputs(stuff, 1, outchar);
+
+ } else while (n-- > 0)
+ tputs(_up, 1, outchar);
+
+ }
+
+ void cur_CursorDown(n)
+ int n;
+ {
+ /** move the cursor down 'n' lines **/
+ /** Caller must check that _down is not null before calling **/
+
+ if (need_moveabsolute)
+ moveabsolute(_col, _line);;
+
+ _line = (_line+n < _lines? _line + n: _lines-1); /* down 'n' lines... */
+
+ if (n > 1 && _down_many) {
+ char *stuff, *tgoto();
+
+ stuff = tgoto(_down_many,0,n);
+ tputs(stuff, 1, outchar);
+
+ } else while (n-- > 0)
+ tputs(_down, 1, outchar);
+ }
+
+
+ void cur_CursorLeft(n)
+ int n;
+ {
+ /** move the cursor 'n' characters to the left **/
+ /** Caller must check that _left is not null before calling **/
+
+ if (need_moveabsolute)
+ moveabsolute(_col, _line);
+
+ _col = (_col - n> 0? _col - n: 0); /* left 'n' chars... */
+
+ if (n > 1 && _left_many) {
+ char *stuff, *tgoto();
+
+ stuff = tgoto(_left_many,0,n);
+ tputs(stuff, 1, outchar);
+
+ } else while (n-- > 0)
+ tputs(_left, 1, outchar);
+
+ }
+
+ static int cur_CursorRight(n)
+ int n;
+ {
+ /** move the cursor 'n' characters to the right (nondestructive) **/
+ /** Caller must check that _right is not null before calling **/
+
+ if (need_moveabsolute)
+ moveabsolute(_col, _line);
+
+ /* NOTE: if _col == _columns then it is outside of columns */
+
+ _col = (_col+n < _columns? _col + n: _columns);
+ /* right 'n' chars... */
+
+ if (n > 1 && _right_many) {
+ char *stuff, *tgoto();
+
+ stuff = tgoto(_right_many,0,n);
+ tputs(stuff, 1, outchar);
+
+ } else while (n-- > 0)
+ tputs(_right, 1, outchar);
+
+ return(0);
+ }
+
+ static void moveabsolute(col, row)
+ int col, row;
+ {
+
+ char *stuff, *tgoto();
+
+ if (need_moveabsolute) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "Curses: moveabsolute: Syncronizing cursos position (col=%d,row=%d)\n",
+ col,row));
+ }
+
+ stuff = tgoto(_moveto, col, row);
+ tputs(stuff, 1, outchar);
+
+ if(need_moveabsolute)
+ FlushBuffer();
+
+ need_moveabsolute = 0;
+ }
+
+ int cur_MoveCursor(row, col)
+ int row, col;
+ {
+ /** move cursor to the specified row column on the screen.
+ 0,0 is the top left! **/
+
+ int scrollafter = 0;
+
+ /* we don't want to change "rows" or we'll mangle scrolling... */
+
+ if (need_moveabsolute)
+ moveabsolute(_col, _line);;
+
+ if (col < 0)
+ col = 0;
+ if (col >= _columns)
+ col = _columns - 1;
+ if (row < 0)
+ row = 0;
+ if (row >= _lines) {
+ if (col == 0)
+ scrollafter = row - _lines +1;
+ row = _lines -1;
+ }
+
+ if (!_moveto)
+ return(-1);
+
+ if (row == _line) {
+ if (col == _col)
+ return(0); /* already there! */
+
+ else if (col == 0)
+ outchar('\r');
+
+ else if (abs(col - _col) < 5 /* within 5 spaces... */ ||
+ _left_many && _right_many
+ ) {
+ if (col > _col && _right)
+ cur_CursorRight(col - _col);
+ else if (col < _col && _left)
+ cur_CursorLeft(_col - col);
+ else
+ moveabsolute(col, row);
+ }
+ else /* move along to the new x,y loc */
+ moveabsolute(col, row);
+ }
+ else if (_line == row-1 && col == 0) {
+ if (_col != 0)
+ outchar('\r');
+ outchar('\n');
+ }
+ else if (col == _col && (abs(row - _line) < 5 ||
+ _up_many && _down_many
+ )) {
+ if (row < _line && _up)
+ cur_CursorUp(_line - row);
+ else if (row > _line && _down)
+ cur_CursorDown(row - _line);
+ else
+ moveabsolute(col, row);
+ }
+ else
+ moveabsolute(col, row);
+
+ _line = row; /* to ensure we're really there... */
+ _col = col;
+
+ if (scrollafter) {
+ DPRINT(Debug,49, (&Debug, " scrollafter=%d\n",scrollafter));
+
+ outchar('\r');
+
+ while (scrollafter--) {
+ outchar('\n');
+ }
+ }
+
+ FlushBuffer();
+ return(0);
+ }
+
+ void cur_changemode(mode,set,reset)
+ int *mode;
+ int set;
+ int reset;
+ {
+ int i;
+
+ for (i =0 ; i < (sizeof set_modes) / sizeof (set_modes[0]); i++) {
+
+ if ((set & set_modes[i].mode) && set_modes[i].on) {
+ tputs(set_modes[i].on, 1, outchar);
+ *mode |= set_modes[i].mode;
+ }
+
+ if ((reset & set_modes[i].mode) && set_modes[i].off) {
+ tputs(set_modes[i].off, 1, outchar);
+ *mode &= ~(set_modes[i].mode);
+ }
+
+ }
+
+ }
+
+ /* ----------------------------------------------------------- */
+
+ VOLATILE static int wrappedlastchar = 0;
+ static int tabexpand = 0; /* Is terminal driver expanding tabs? */
+ /* KESKEN */
+
+ /* called with value of -1 if just preprosessing needed
+ (ie need_moveabsolute)
+ */
+ static int write_control P_((int ch));
+ static int write_control(ch)
+ int ch;
+ {
+ int justwrapped, nt;
+
+ if (need_moveabsolute)
+ moveabsolute(_col, _line);
+
+ justwrapped = 0;
+
+ switch (ch) {
+ /* if return, just go to left column. */
+ case 0x0D: /* CR */
+ if (wrappedlastchar)
+ justwrapped = 1; /* preserve wrap flag */
+ else {
+ outchar('\r');
+ _col = 0;
+ }
+ break;
+
+ /* if newline and terminal just did a newline without our asking,
+ * do nothing, else output a newline and increment the line count */
+ case 0x0A: /* LF */
+ if (!wrappedlastchar) {
+ outchar('\n');
+ if (_line < _lines-1)
+ ++_line;
+ }
+ break;
+
+ /* if backspace, move back one space if not already in column 0 */
+ case 0x08: /* BS */
+ if (_col != 0) {
+ tputs(_left, 1, outchar);
+ _col--;
+ }
+ else if (_line > 0) {
+ _col = _columns - 1;
+ _line--;
+ moveabsolute (_col, _line);
+ }
+ /* else BACKSPACE does nothing */
+ break;
+
+ /* if bell, ring the bell but don't advance the column */
+ case 0x07: /* BEL */
+ if (_bell)
+ tputs(_bell,1,outchar);
+ else
+ outchar(ch);
+ break;
+
+ /* if a tab, output it */
+ case 0x09: /* HT */
+ /* If terminal driver is expanding tabs, don't trust it ... */
+ if (!tabexpand)
+ outchar(ch);
+ if((nt=next_tab(_col+1)) > prev_tab(_columns))
+ _col = _columns-1;
+ else
+ _col = nt-1;
+ if (tabexpand)
+ moveabsolute (_col, _line);
+ break;
+ default: /* Is 'printable' character (or -1) */
+ return 1;
+ }
+
+ wrappedlastchar = justwrapped;
+ return 0; /* Need no printing */
+ }
+
+ static void increment_position P_((int len));
+ static void increment_position(len)
+ int len;
+ {
+ int justwrapped;
+
+ justwrapped = 0;
+
+ if (_col + len > _columns) {
+ _col = 0;
+ _line = 0;
+ moveabsolute (_col, _line);
+ panic("CURSES PANIC",__FILE__,__LINE__,"increment_position",
+ "column position overflow",0);
+ }
+
+ /* if we only had one column left, simulate automargins if
+ * the terminal doesn't have them */
+ if (_col + len == _columns) {
+ if (!_automargin || _eatnewlineglitch) {
+ outchar('\r');
+ outchar('\n');
+ }
+ if (_line < _lines-1)
+ ++_line;
+ _col = 0;
+ justwrapped = 1;
+ }
+ /* if we are here this means we have no interference from the
+ * right margin - just increment the column position. */
+ else {
+ _col += len;
+ }
+
+ wrappedlastchar = justwrapped;
+ }
+
+ /* Called by signal handler ... */
+
+ void WriteRaw(str)
+ CONST char *str;
+ {
+ CONST char * p;
+
+
+ /* If WriteRaw() is called, then screen must be redraw
+ later ...
+ */
+ redraw_screen = 1;
+
+ for (p = str; *p; p++) {
+ int ch = *p;
+
+ /** write a character to the current screen location. **/
+ int need_print = 1;
+
+ ch &= 0xFF;
+
+ need_print = write_control(ch);
+
+ if (need_print) {
+ outchar(ch);
+ increment_position(1);
+ }
+ }
+
+ FlushBuffer();
+ }
+
+
+
+ /* This assumes one byte charset */
+ void cur_Writechar(ch)
+ int ch;
+ {
+ /** write a character to the current screen location. **/
+ int need_print = 1;
+
+ ch &= 0xFF;
+
+ /* ASCII assumed */
+ need_print = write_control(ch);
+
+ if (need_print) {
+ #ifndef ASCII_CTYPE
+ if (display_charset == system_charset) {
+ /* if some kind of non-printable character change to a '?' */
+
+ if(!isprint((unsigned char)ch))
+ ch = '?';
+ } else
+ #endif
+ {
+ /* If system (= locale) charset is not display charset
+ * need ask from charset system is that character
+ * printable -- complex and expensive!
+ */
+ struct charset_state *st = new_state(display_charset);
+ add_streambyte_to_state(st,ch);
+
+ if (!state_ready(st) || !state_printable(st))
+ ch = '?';
+ free_state(&st);
+ }
+ outchar(ch);
+ increment_position(1);
+ }
+ }
+
+
+ static int preinit_output P_((struct string *S, struct string **buffer,
+ charset_t *stored_display));
+ static int preinit_output(S,buffer,stored_display)
+ struct string *S;
+ struct string **buffer;
+ charset_t *stored_display;
+ {
+ int sw = -1;
+
+ if (S->string_type == display_charset)
+ *buffer = S;
+ else if (target_display_charset == display_charset &&
+ S->string_type == system_charset) {
+ sw = 1; /* Arrange return to back to display charset */
+ *buffer = S;
+ switch_display_charset(0); /* Print using system charset */
+ } else if (allow_charset_switching &&
+ 0 != (charset_properties(S->string_type) & CS_printable) &&
+ set_display_charset(S->string_type,1)) {
+ sw = 2; /* Arrange return to correct display charset */
+ *buffer = S;
+ } else
+ *buffer = convert_string(display_charset,S,0);
+
+ return sw;
+ }
+
+ static void postprocess_output P_((charset_t stored_display, int sw));
+
+ static void postprocess_output(stored_display,sw)
+ charset_t stored_display;
+ int sw;
+ {
+ if (sw == 2)
+ set_display_charset(stored_display,0);
+ else if (sw != -1) {
+ switch_display_charset(sw);
+ }
+ }
+
+ struct string *curses_printable_clip(S,pos,len,visible_len,max_visible)
+ struct string *S;
+ int *pos;
+ int len;
+ int *visible_len;
+ int max_visible;
+ {
+ struct string *buffer = NULL;
+ charset_t stored_display = target_display_charset;
+ int sw = -1;
+
+ struct string *ret1 = NULL;
+
+ sw = preinit_output(S,&buffer,&stored_display);
+
+ DPRINT(Debug,35,(&Debug,
+ "curses_printable_clip: S=%S cs=%s -- using %s\n",
+ S,
+ S->string_type->MIME_name ?
+ S->string_type->MIME_name :
+ "<no MIME name>",
+ buffer->string_type->MIME_name ?
+ buffer->string_type->MIME_name : "<no MIME name>"));
+ DPRINT(Debug,35,(&Debug, "curses_printable_clip: len=%d max_visible=%d pos=%d\n",
+ len,max_visible,*pos));
+
+ if (last_display_state &&
+ 0 != (CS_printable_len & charset_properties(buffer->string_type))) {
+
+ int l1;
+ struct cs_printable_len PRINTABLE_LEN;
+
+ PRINTABLE_LEN.max_len = max_visible;
+ PRINTABLE_LEN.ret_len = 0;
+
+ l1 = estimate_clip_string(buffer,*pos,len,last_display_state,&PRINTABLE_LEN);
+
+ DPRINT(Debug,35,(&Debug,
+ "curses_printable_clip: l1=%d printable_len { max_len %d ret_len %d }\n",
+ l1,PRINTABLE_LEN.max_len,PRINTABLE_LEN.ret_len));
+
+
+ if (l1 < 0) {
+ ret1 = NULL;
+ *visible_len = -1;
+ } else {
+ *visible_len = PRINTABLE_LEN.ret_len;
+ ret1 = clip_from_string(buffer,pos,l1);
+ }
+ } else {
+ if (max_visible < len)
+ len = max_visible;
+
+ ret1 = clip_from_string(buffer,pos,len);
+
+ *visible_len = string_len(ret1);
+ }
+
+ /* Free if converted */
+ if (buffer != S)
+ free_string(&buffer);
+
+ postprocess_output(stored_display,sw);
+
+ if (ret1) {
+ DPRINT(Debug,35,(&Debug, "curses_printable_clip=%p=%S visible_len=%d pos=%d\n",
+ ret1,ret1,*visible_len,*pos));
+ }
+ return ret1;
+ }
+
+ void cur_PutLineS(S)
+ struct string *S;
+ {
+ int idx = 0;
+ struct string *buffer = NULL;
+ charset_t stored_display = target_display_charset;
+ int sw = -1;
+ int buffer_len;
+
+
+
+
+ sw = preinit_output(S,&buffer,&stored_display);
+
+ buffer_len = string_len(buffer);
+
+ DPRINT(Debug,40,(&Debug,
+ "PutLineS: S=%S cs=%s -- using %s\n",
+ S,
+ S->string_type->MIME_name ?
+ S->string_type->MIME_name :
+ "<no MIME name>",
+ buffer->string_type->MIME_name ?
+ buffer->string_type->MIME_name : "<no MIME name>"));
+
+ while (idx < buffer_len) {
+ char * s, *s1;
+ uint16 ch;
+ int old_idx = idx;
+ int need_print;
+ int len = 1;
+ int q = 0;
+ struct cs_printable_len PRINTABLE_LEN;
+ struct cs_printable_len *printable_len = NULL;
+
+ ch = give_unicode_from_string(buffer,idx);
+
+ /* ASCII assumed */
+ if (ch <= 31)
+ need_print = write_control(ch);
+ else
+ need_print = write_control(-1); /* HACK for position of cursor */
+ if (!need_print) {
+ DPRINT(Debug,40,(&Debug,
+ "PutLineS: [%d] unicode=%d (control)\n",
+ idx,ch));
+ idx++;
+ continue; /* character 'printed' */
+ }
+
+ while (len < _columns-_col &&
+ len + idx < buffer_len &&
+ give_unicode_from_string(buffer,idx + len) > 31)
+ len++;
+
+ if (last_display_state &&
+ 0 != (CS_printable_len &
+ charset_properties(buffer->string_type))) {
+
+ PRINTABLE_LEN.max_len = _columns-_col;
+ PRINTABLE_LEN.ret_len = 0;
+
+ printable_len = &PRINTABLE_LEN;
+ }
+ s = us2s(streamclip_from_string(buffer,&idx,len,
+ last_display_state,printable_len));
+
+ DPRINT(Debug,10,(&Debug,
+ "PutLineS: [%d-%d] stream=",
+ old_idx,idx-1,s));
+
+ for (s1 = s; *s1; s1++) {
+ #ifdef DEBUG
+ if (isascii(*s1) && isprint(*s1) && '"' != *s1) {
+ if (!q) { DPRINT(Debug,10,(&Debug," \"")); q = 1; }
+ DPRINT(Debug,10,(&Debug,"%c",*s1));
+ } else {
+ if (q) { DPRINT(Debug,10,(&Debug,"\"")); q = 0; }
+ DPRINT(Debug,10,(&Debug," %02X", (unsigned char)*s1));
+ }
+ #endif
+ }
+
+ if (q) { DPRINT(Debug,10,(&Debug,"\"")); q = 0; }
+ if (printable_len) {
+ DPRINT(Debug,10,(&Debug,
+ " printable_len { max_len %d ret_len %d }",
+ printable_len->max_len,printable_len->ret_len));
+ }
+ DPRINT(Debug,10,(&Debug,"\n"));
+
+ for (s1 = s; *s1; s1++) {
+ outchar(*s1);
+ }
+
+ if (printable_len)
+ increment_position(printable_len->ret_len);
+ else
+ increment_position(idx-old_idx);
+
+ if (idx == old_idx) {
+ DPRINT(Debug,10,(&Debug,"No any characters printed...\n"));
+ CleartoEOLN();
+ cur_Writechar('\r');
+ cur_Writechar('\n');
+ }
+
+ free(s);
+ }
+
+ /* Free if converted */
+ if (buffer != S)
+ free_string(&buffer);
+
+ postprocess_output(stored_display,sw);
+ }
+
+ /*VARARGS2*/
+
+ void cur_Write_to_screen (
+ #if ANSI_C
+ CONST char *format, CONST char *msg, ...
+ #else
+ format, msg, va_alist
+ #endif
+ )
+ #if !ANSI_C
+ CONST char *format;
+ CONST char *msg;
+ va_dcl
+ #endif
+ {
+ va_list vl;
+ struct string *text;
+
+ Va_start(vl, msg); /* defined in defs.h */
+
+ /** This routine writes to the screen at the current location.
+ when done, it increments lines & columns accordingly by
+ looking for "\n" sequences... **/
+
+ text = elm_smessage(0,format,msg,vl);
+ cur_PutLineS(text);
+ free_string(&text);
+
+ va_end(vl);
+
+ }
+
+ void cur_PutLine0(x, y, line)
+ int x,y;
+ CONST char *line;
+ {
+ /** Write a zero argument line at location x,y **/
+
+ cur_MoveCursor(x,y);
+ while(*line)
+ cur_Writechar(*line++);
+ }
+
+ void cur_PutLineX(
+ #if ANSI_C
+ int x, int y, const char *format, const char *line, ...
+ #else
+ x, y, format, line, va_alist
+ #endif
+ )
+ #if !ANSI_C
+ int x;
+ int y;
+ CONST char *format;
+ CONST char *line;
+ va_dcl
+ #endif
+ {
+ va_list vl;
+ struct string *text;
+
+ Va_start(vl, line); /* defined in defs.h */
+
+ cur_MoveCursor(x,y);
+
+ text = elm_smessage(0,format,line,vl);
+ cur_PutLineS(text);
+ free_string(&text);
+
+ va_end(vl);
+
+ }
+
+ int cur_CleartoEOLN()
+ {
+ /** clear to end of line **/
+
+ if (need_moveabsolute)
+ moveabsolute(_col, _line);
+
+ if (!_cleartoeoln)
+ return(-1);
+
+ tputs(_cleartoeoln, 1, outchar);
+
+ return(0);
+ }
+
+
+ int cur_CleartoEOS()
+ {
+ /** clear to end of screen **/
+
+ if (need_moveabsolute)
+ moveabsolute(_col, _line);
+
+ if (!_cleartoeos)
+ return(-1);
+
+ tputs(_cleartoeos, 1, outchar);
+
+ return(0);
+ }
+
+ static int _inraw = 0; /* are we IN rawmode? */
+
+ int cur_RawState()
+ {
+ /** returns either 1 or 0, for ON or OFF **/
+
+ FlushBuffer();
+
+ return( _inraw );
+ }
+
+ #ifdef PTEM
+ # include <sys/stream.h>
+ # include <sys/ptem.h>
+ #endif
+
+ #ifdef TERMIOS
+ struct termios _raw_tty,
+ _original_tty;
+ #define ttgetattr(fd,where) tcgetattr((fd),(where))
+ #define ttsetattr(fd,where) tcsetattr((fd),TCSADRAIN,(where))
+ #else /*TERMIOS*/
+ # ifdef TERMIO
+ struct termio _raw_tty,
+ _original_tty;
+ #define ttgetattr(fd,where) ioctl((fd),TCGETA,(where))
+ #define ttsetattr(fd,where) ioctl((fd),TCSETAW,(where))
+ # else
+ struct tty_modes {
+ struct sgttyb sgttyb;
+ struct tchars tchars;
+ } _raw_tty, _original_tty;
+ static int ttgetattr P_((int,struct tty_modes *)); /* Prototype */
+ static int ttsetattr P_((int,struct tty_modes *)); /* Prototype */
+ # endif /*TERMIO*/
+ #endif /*TERMIOS*/
+
+ /* NOTE: Is called from signal handler! */
+ void cur_Raw(state)
+ int state;
+ {
+ int do_tite = (state & NO_TITE) == 0;
+ int do_charset = (state & NO_CHARSET) == 0;
+
+ state = state & ~NO_TITE & ~NO_CHARSET;
+
+ SIGDPRINT(Debug,4,(&Debug,
+ "curses: Raw: state=%d do_tite=%d do_charset=%d\n",
+ state,do_tite,do_charset));
+
+ /** state is either ON or OFF, as indicated by call **/
+
+ if (state == OFF && _inraw) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "curses: Raw: Setting Raw state OFF\n"));;
+
+ #if POLL_METHOD
+ clear_action(terminal_fd);
+ clear_input_buffer();
+ #endif
+
+ if (cursor_control)
+ transmit_functions(OFF);
+
+ if (do_charset)
+ switch_display_charset(0);
+ /* We do NOT call switch_title(0) here because
+ raw state off may be called because running of program
+ */
+
+ if (use_tite && _end_termcap && do_tite) {
+ tputs(_end_termcap, 1, outchar);
+ }
+ FlushBuffer();
+ (void) ttsetattr(terminal_fd,&_original_tty);
+ _inraw = 0;
+ }
+ else if (state == ON && ! _inraw) {
+
+ SIGDPRINT(Debug,4,(&Debug,
+ "curses: Raw: Setting Raw state ON\n"));;
+
+ (void) ttgetattr(terminal_fd, &_original_tty);
+ (void) ttgetattr(terminal_fd, &_raw_tty); /** again! **/
+
+ #if !defined(TERMIO) && !defined(TERMIOS)
+ _raw_tty.sg_flags &= ~(ECHO); /* echo off */
+ _raw_tty.sg_flags |= CBREAK; /* raw on */
+
+ #else
+ _raw_tty.c_lflag &= ~(ICANON | ECHO); /* noecho raw mode */
+
+ _raw_tty.c_cc[VMIN] = '\01'; /* minimum # of chars to queue */
+ _raw_tty.c_cc[VTIME] = '\0'; /* minimum time to wait for input */
+
+
+ #if defined(OXTABS)
+ /* Some systems use OXTABS bit */
+ if (_raw_tty.c_oflag & OXTABS) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "curses: [OXTABS] Terminal driver is expanding tabs...\n"));
+ tabexpand = 1;
+ } else {
+ if (tabexpand)
+ SIGDPRINT(Debug,4,(&Debug,
+ "curses: [OXTABS] Terminal driver isn't expanding tabs...\n"));
+ tabexpand = 0;
+ }
+ #endif /* defined(OXTABS) */
+
+ #if defined(TABDLY) && !defined(OXTABS)
+ /* Some systems expands tab when TABDLY is XTABS */
+ if ((_raw_tty.c_oflag & TABDLY) ==
+ #ifdef XTABS
+ XTABS
+ #else
+ TAB3
+ #endif
+ ) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "curses: [TABDLY] Terminal driver is expanding tabs...\n"));
+ tabexpand = 1;
+ } else {
+ if (tabexpand)
+ SIGDPRINT(Debug,4,(&Debug,
+ "curses: [TABDLY] Terminal driver isn't expanding tabs...\n"));
+ tabexpand = 0;
+ }
+ #endif /* defined(TABDLY) && !defined(OXTABS) */
+
+ #if !defined(TABDLY) && !defined(OXTABS)
+
+ /* If _POSIX_SOURCE is defined then OXTABS or TABDLY are not
+ * defined -- so print warning anyway
+ */
+ SIGDPRINT(Debug,4,(&Debug,
+ "curses: No information is terminal driver expanding tabs!\n"));
+ #endif /* !defined(TABDLY) && !defined(OXTABS) */
+
+ #endif
+ (void) ttsetattr(terminal_fd, &_raw_tty);
+ if (use_tite && _start_termcap && do_tite)
+ tputs(_start_termcap, 1, outchar);
+ _intransmit = -1; /* state unclear */
+ _inraw = 1;
+
+ if (do_charset) {
+ switch_display_charset(1);
+ switch_title(1);
+ }
+ need_moveabsolute = 1;
+ }
+ }
+
+
+ /* NOTE: Is called from signal handler! */
+ void transmit_functions(newstate)
+ int newstate;
+ {
+ /** turn function key transmission to ON | OFF **/
+
+ if (newstate != _intransmit) {
+ _intransmit = newstate;
+ if (newstate == ON)
+ tputs(_transmit_on, 1, outchar);
+ else
+ tputs(_transmit_off, 1, outchar);
+ FlushBuffer(); /* clear the output buffer */
+ }
+ }
+
+
+ #ifdef ultrix
+ force_raw()
+ {
+ (void) ttsetattr(terminal_fd,&_original_tty);
+ _inraw = 0;
+ Raw(ON);
+ }
+ #endif
+
+
+ int raw_off_called() {
+ return need_moveabsolute;
+ }
+
+ #if !defined(TERMIO) && !defined(TERMIOS)
+ static int ttgetattr P_((int fd,
+ struct tty_modes *where));
+ static int ttgetattr(fd, where)
+ int fd;
+ struct tty_modes *where;
+ {
+ if (ioctl(fd, TIOCGETP, &where->sgttyb) < 0)
+ return(-1);
+ if (ioctl(fd, TIOCGETC, &where->tchars) < 0)
+ return(-1);
+ return(0);
+ }
+
+ static int ttsetattr P_((int fd,
+ struct tty_modes *where));
+ static int ttsetattr(fd, where)
+ int fd;
+ struct tty_modes *where;
+ {
+ if (ioctl(fd, TIOCSETP, &where->sgttyb) < 0)
+ return(-1);
+ if (ioctl(fd, TIOCSETC, &where->tchars) < 0)
+ return(-1);
+ return(0);
+ }
+ #endif
+
+ /* ----- following are copied from ../src/curses.c as documentation
+ only ... they was not used on ELM ... also these termcap entries
+ seems not documented at least on Linux ....
+ */
+
+
+ #if 0
+
+ static int _memory_locked = 0; /* are we IN memlock?? */
+
+ int
+ HasMemlock()
+ {
+ /** returns TRUE iff memory locking is available (a terminal
+ feature that allows a specified portion of the screen to
+ be "locked" & not cleared/scrolled... **/
+
+ return ( _set_memlock && _clear_memlock );
+ }
+
+ static int _old_LINES;
+
+ int
+ StartMemlock()
+ {
+ /** mark the current line as the "last" line of the portion to
+ be memory locked (always relative to the top line of the
+ screen) Note that this will alter LINES so that it knows
+ the top is locked. This means that (plus) the program
+ will scroll nicely but (minus) End memlock MUST be called
+ whenever we leave the locked-memory part of the program! **/
+
+ if (! _set_memlock)
+ return(-1);
+
+ if (! _memory_locked) {
+
+ _old_LINES = elm_LINES;
+ elm_LINES -= _line; /* we can't use this for scrolling */
+
+ tputs(_set_memlock, 1, outchar);
+
+ _memory_locked = TRUE;
+ }
+
+ return(0);
+ }
+
+ int
+ EndMemlock()
+ {
+ /** Clear the locked memory condition... **/
+
+ if (! _set_memlock)
+ return(-1);
+
+ if (_memory_locked) {
+ elm_LINES = _old_LINES; /* back to old setting */
+
+ tputs(_clear_memlock, 1, outchar);
+
+ _memory_locked = FALSE;
+ }
+ return(0);
+ }
+
+ #endif /* ndef ELM */
+
+ /* ----------------------------------------------------------------------- */
+
+ #if 0 /* SCROLL */
+ static void set_scrolling_region P_((int line1, int line2));
+ static void set_scrolling_region(line1,line2)
+ int line1;
+ int line2;
+ {
+ char *stuff, *tgoto();
+
+ stuff = tgoto(_set_scroll_region,line1,line2);
+ tputs(stuff, 1, outchar);
+ }
+
+ void limit_position(row,col)
+ int *row;
+ int *col;
+ {
+ if (*row < 0)
+ *row = 0;
+ if (*col < 0)
+ *col = 0;
+ if (*col >= _columns)
+ *col = _columns - 1;
+
+ if (*row >= _lines) {
+ *row = _lines -1;
+ *col = _columns - 1;
+ }
+ }
+ #endif
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
+
+
Index: elm2.4.ME+.108-cvs/src/screen/curs_input.c
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/curs_input.c 2003-10-01 20:34:34.000000000 +0300
***************
*** 0 ****
--- 1,578 ----
+ static char rcsid[] = "@(#)$Id: curs_input.c,v 1.2 2003/10/01 17:34:34 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
+ *
+ * Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************
+ *
+ * Some code copied from ../src/curses.c. It have following copyright:
+ *
+ * Copyright (c) 1988-1992 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************/
+
+
+ #include "def_screen.h"
+
+ DEBUG_VAR(Debug,__FILE__,"screen");
+
+ #include <errno.h>
+
+
+ #if POLL_METHOD
+ static unsigned char *read_buffer = NULL;
+ static int read_buffer_len = 0;
+ static int last_read_error = 0;
+
+ static int background_read P_((int fd, void *data));
+ static int background_read(fd,data)
+ int fd;
+ void *data;
+ {
+ int result;
+ unsigned char ch;
+
+ result = read(fd, &ch, 1);
+
+ if (result < 0) {
+ int err = errno;
+
+ SIGDPRINT(Debug,4,(&Debug,
+ "background_read: errno = %d [%s]\n",err,
+ error_description(err)));
+
+ if((err == EINTR)
+ #ifdef EAGAIN
+ || (err == EAGAIN)
+ #endif
+ #ifdef EWOULDBLOCK
+ || (err == EWOULDBLOCK)
+ #endif
+ ) {
+ return 1; /* Retry */
+ }
+
+ last_read_error = err;
+ return 0;
+ }
+
+ if (0 == result) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "background_read: Got zero bytes...\n"));
+ last_read_error = -1;
+ return 0;
+ }
+
+ read_buffer = safe_realloc(read_buffer,read_buffer_len+1);
+ SIGDPRINT(Debug,20,(&Debug,
+ "background_read(fd=%d)=1 [%d]",fd,read_buffer_len));
+ SIGDPRINT(Debug,50,(&Debug,"=%d",ch));
+ SIGDPRINT(Debug,20,(&Debug,"\n"));
+
+ read_buffer[read_buffer_len++] = ch;
+ last_read_error = 0;
+
+ return 1;
+ }
+
+
+ void clear_input_buffer()
+ {
+ SIGDPRINT(Debug,4,(&Debug,
+ "Resetting background_read buffer (%d bytes)...\n",
+ read_buffer_len));
+ read_buffer_len = 0;
+ last_read_error = 0;
+ }
+
+ int error_sleep(seconds)
+ int seconds;
+ {
+ int ret;
+ if (read_buffer_len > 0) {
+ SIGDPRINT(Debug,5,(&Debug,
+ "error_sleep(%d)=1 -- sleep skipped\n",
+ seconds));
+ return 1;
+ }
+ SIGDPRINT(Debug,5,(&Debug,
+ "error_sleep(%d) ...\n",seconds));
+ ret = wait_for_action_or_timeout(background_read,seconds);
+ DPRINT(Debug,5,(&Debug,
+ "error_sleep=%d\n",ret));
+ return ret;
+ }
+ #endif
+
+
+ int cur_ReadCh(flags,break_flag)
+ int flags;
+ int break_flag;
+ {
+ int ret = 0;
+
+ do {
+ struct charset_state *ch = cur_ReadCh2(flags,break_flag);
+
+ if (!ch) {
+ ret = EOF;
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh=EOF (errno=%d)\n",errno));
+ } else if (ch -> caller_flags) {
+ ret = ch -> caller_flags;
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh=%d (flags)\n",ret));
+ } else
+ ret = state_is_onebyte(ch);
+ if (!ret) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh: Not a one byte character or zero byte!"));
+ /* Ring a bell */
+ Writechar('\007');
+ } else {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh=%d (one byte character)\n",
+ ret));
+ }
+ } while (0 == ret);
+ return ret;
+ }
+
+
+ struct charset_state * cur_ReadCh2(flags,break_flag)
+ int flags;
+ int break_flag;
+ {
+ int redraw = (flags & READCH_MASK);
+ int cursorkeys = (flags & READCH_CURSOR) != 0;
+ int nocursor = (flags & READCH_NOCURSOR) != 0 && cursor_control;
+ int term_char = (flags & READCH_term_char) != 0;
+ int x,y;
+
+ unsigned char input_buffer[20];
+
+ /*
+ * read a character with Raw mode set!
+ *
+ * EAGAIN & EWOULDBLOCK are recognized just in case
+ * O_NONBLOCK happens to be in effect.
+ */
+
+ /* This is static array so we can initialize it in here ...
+ */
+ static struct {
+ char ** CONST str;
+ CONST int result;
+ int maybe;
+ } keytable[] =
+ { { &_key_up, UP_MARK, 0 },
+ { &_key_down, DOWN_MARK, 0 },
+ { &_key_left, LEFT_MARK, 0 },
+ { &_key_right, RIGHT_MARK, 0 },
+
+ { &_key_pageup, PAGEUP_MARK, 0 },
+ { &_key_pagedown, PAGEDOWN_MARK, 0 },
+
+ { &_key_home, HOME_MARK, 0 },
+ { &_key_help, HELP_MARK, 0 },
+ { &_key_find, FIND_MARK, 0 },
+ { NULL, 0, 0 }
+ };
+
+ int read_p,found_key;
+
+ #if POLL_METHOD
+ change_action(terminal_fd,0,background_read,no_action_routine,
+ no_action_routine,
+ NULL);
+ #endif
+
+ cur_GetXYLocation(&x,&y); /* Background actions may print error messages .. */
+
+ if (!last_state) {
+ last_state = new_state(system_charset);
+ DPRINT(Debug,4,(&Debug,
+ "Keyboard input charset is %s\n",
+ last_state->charset->MIME_name ?
+ last_state->charset->MIME_name :
+ "<no MIME name>"));
+ }
+
+ if (state_ready(last_state)) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: starting reading new character (set %s)\n",
+ last_state->charset->MIME_name ?
+ last_state->charset->MIME_name :
+ "<no MIME name>"));
+ reset_state(last_state,0);
+ }
+ last_state->caller_flags = 0;
+
+ reinit_ReadChar:
+ read_p = 0;
+ found_key = 0;
+
+ FlushBuffer();
+
+ if (redraw && !cur_RawState()) { /* Check that we have in 'raw' mode */
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Going to Raw mode\n"));
+ cur_Raw(ON);
+ cur_ClearScreen();
+
+ reset_state(last_state,1);
+ last_state->caller_flags = redraw;
+
+ return last_state;
+ }
+
+ if (redraw && redraw_screen) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Pending redraw...\n"));
+ cur_ClearScreen();
+
+ reset_state(last_state,1);
+ last_state->caller_flags = redraw;
+
+ return last_state;
+ }
+
+ if ((_intransmit != ON || redraw_screen) &&
+ cursorkeys && _transmit_on) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Enabling cursor keys...\n"));
+ transmit_functions(ON);
+ }
+
+ if ((_intransmit != OFF || redraw_screen) &&
+ nocursor && _transmit_off) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Disabling cursor keys...\n"));
+ transmit_functions(OFF);
+ }
+
+ if (cursorkeys) {
+ int i;
+ DPRINT(Debug,8,(&Debug,
+ "ReadCh2: Available function keys:"));
+
+ for (i = 0; keytable[i].str != 0; i++) {
+ char * CONST str = *(keytable[i].str);
+ if(str && str[0] != '\0') {
+ keytable[i].maybe = 1; /* Initially every function key is possible */
+ SIGDPRINT(Debug,8,(&Debug,
+ " [%d] %d",i,keytable[i].result));
+ }
+ }
+ DPRINT(Debug,4,(&Debug,
+ "\n"));
+ }
+
+ while (found_key == 0) {
+ unsigned char ch;
+ #if POLL_METHOD
+ if (read_buffer_len < 1 && last_read_error == 0) {
+ errno= 0;
+ if(!wait_for_action(background_read)) {
+ if (errno != 0) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: wait_for_action got error %d (%s)\n",
+ errno, error_description(errno)));
+ /* Return error: */
+ if ((redraw && redraw_screen)
+ || break_flag /* GetPrompt wants to see errors! */
+ ) {
+ DPRINT(Debug,4,(&Debug,
+ " ... return error to caller\n"));
+ found_key = -1;
+ continue;
+ }
+ if (errno == EINTR
+ #ifdef EAGAIN
+ || (errno == EAGAIN)
+ #endif
+ #ifdef EWOULDBLOCK
+ || (errno == EWOULDBLOCK)
+ #endif
+ ) {
+ DPRINT(Debug,4,(&Debug,
+ " ... retry (ignored)\n"));
+ } else
+ found_key = -1;
+ continue;
+ }
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: interrupted (ignored)\n"));
+ continue;
+ }
+ }
+ if (read_buffer_len > 0) {
+ ch = read_buffer[0];
+ if (--read_buffer_len > 0)
+ memmove(read_buffer,read_buffer+1,read_buffer_len);
+ } else if (last_read_error != 0) {
+ if (-1 == last_read_error) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: background_read got zero bytes...\n"));
+ found_key = -1;
+ continue;
+ }
+ /* Return error: */
+ if ((redraw && redraw_screen)
+ || break_flag /* GetPrompt wants to see errors! */
+ ) {
+ found_key = -1;
+ continue;
+ }
+ if (last_read_error != 0) {
+ errno = last_read_error;
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: background_read got error %d (%s)\n",
+ last_read_error,
+ error_description(last_read_error)));
+ found_key = -1;
+ }
+ continue; /* continue or quit */
+ } else {
+ DPRINT(Debug,1,(&Debug,
+ "ReadCh2: SOFTWARE ERROR !!\n"));
+ break;
+ }
+ #else
+ int result;
+
+ result = read(terminal_fd, &ch, 1);
+
+ if (result < 0) {
+ int err = errno;
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: errno = %d [%s]\n",err,
+ error_description(err)));
+
+ /* Return error: */
+ if (redraw && redraw_screen
+ || break_flag /* GetPrompt wants to see errors! */
+ ) {
+ found_key = -1;
+ continue;
+ }
+ if((errno == EINTR)
+ #ifdef EAGAIN
+ || (errno == EAGAIN)
+ #endif
+ #ifdef EWOULDBLOCK
+ || (errno == EWOULDBLOCK)
+ #endif
+ ) {
+ continue; /* Retry */
+ }
+ break;
+ }
+ if (0 == result) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Got zero bytes...\n"));
+ found_key = -1;
+ continue;
+ }
+ #endif
+
+ #ifdef USE_DLOPEN
+ {
+ union xxx_rand {
+ int ch;
+ char bytes[sizeof (int)];
+ } A;
+ A.ch = ch;
+
+ seed_rand_bits(A.bytes, sizeof A,
+ 3 /* Assume 3 bits per character ... */);
+ }
+ #endif
+
+
+
+ DPRINT(Debug,50,(&Debug,
+ "ReadCh2: Looking char %d (read_p=%d)\n",ch,read_p));
+
+ if (term_char) {
+ if (backspace == ch)
+ found_key = TERMCH_backspace;
+ if (kill_line == ch)
+ found_key = TERMCH_kill_line;
+ if (word_erase == ch)
+ found_key = TERMCH_word_erase;
+ if (interrupt_char == ch)
+ found_key = TERMCH_interrupt_char;
+ if (reprint_char == ch)
+ found_key = TERMCH_reprint_char;
+ if (eof_char == ch)
+ found_key = TERMCH_eof_char;
+ if (found_key) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: found termchar = %d (char=%02X)\n",
+ found_key,ch));
+ /* Soft reset state */
+ reset_state(last_state,0);
+ break;
+ }
+ }
+
+ if (cursorkeys) {
+ int match = 0;
+ int i;
+ for (i = 0; keytable[i].str != NULL; i++) {
+ if (keytable[i].maybe) {
+ unsigned char * CONST str =
+ (unsigned char *) *(keytable[i].str);
+ if (str[read_p] == ch) {
+ match++;
+ if (str[read_p+1] == '\0') {
+ found_key = keytable[i].result;
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Found function key = %d (keytable = %d, read_p =%d)\n",
+ found_key,i,read_p));
+
+ /* Soft reset state */
+ reset_state(last_state,0);
+ }
+ } else {
+ keytable[i].maybe = 0;
+ }
+ }
+ }
+
+ if (read_p < sizeof input_buffer -1) {
+ input_buffer[read_p] = ch;
+ input_buffer[read_p+1] = '\0';
+ }
+
+ if (match == 0) { /* Not in keytable */
+ if (read_p == 0)
+ found_key = ch; /* Normal key */
+ else {
+ int i;
+
+ /* But maybe escape sequence is valid state change ? */
+
+ for (i = 0;
+ i <= read_p && i < sizeof input_buffer -1;
+ i++) {
+
+ if (state_ready(last_state)) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Unsupporting -- function keys and state change sequences overlap? (OR BAD SEQUENCE) \n"));
+ goto BAD_sequence;
+ }
+
+ if (!add_streambyte_to_state(last_state,
+ input_buffer[i]))
+ goto BAD_sequence;
+
+ }
+
+ if (state_ready(last_state))
+ goto got_key;
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: need more bytes for character...\n"));
+ goto reinit_ReadChar;
+
+
+ BAD_sequence:
+
+ /* Soft reset state */
+ reset_state(last_state,0);
+
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Bad escape sequence; ch = %d, read_p = %d\n",
+ ch,read_p));
+ #ifdef DEBUG
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Sequence was:"));
+ for (i = 0; i <= read_p && i < sizeof input_buffer -1; i++) {
+ if (isascii(input_buffer[i]) && isprint(input_buffer[i])) {
+ DPRINT(Debug,4,(&Debug," %c (0x%02X)",
+ input_buffer[i],input_buffer[i]));
+ } else {
+ DPRINT(Debug,4,(&Debug," 0x%02X", input_buffer[i]));
+ }
+ }
+ if (read_p > sizeof input_buffer -1)
+ DPRINT(Debug,4,(&Debug," ..."));
+ DPRINT(Debug,4,(&Debug,"\n"));
+ #endif
+
+ /* Ring a bell */
+ cur_Writechar('\007');
+ goto reinit_ReadChar;
+ }
+ } else
+ read_p++;
+ } else
+ found_key = ch;
+
+ }
+
+ if (found_key <= 0 && redraw && redraw_screen) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Redraw...\n"));
+ if(!cur_RawState()) { /* Check that we have in 'raw' mode */
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: Going to Raw mode\n"));
+ cur_Raw(ON);
+ }
+ cur_ClearScreen();
+
+ reset_state(last_state,1);
+ last_state->caller_flags = redraw;
+
+ return last_state;
+ }
+
+ cur_MoveCursor(x,y);
+ DPRINT(Debug,50,(&Debug,
+ "ReadCh2: found_key=%d\n",found_key));
+
+ if (found_key < 0) {
+ reset_state(last_state,1);
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2=NULL (state)\n"));
+ return NULL;
+ } else {
+ if (found_key >= 256) {
+ reset_state(last_state,1);
+ last_state->caller_flags = found_key;
+ } else {
+ last_state->caller_flags = 0;
+ if (!add_streambyte_to_state(last_state,found_key)) {
+ /* Ring a bell */
+ Writechar('\007');
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: bad sequence...\n"));
+ reset_state(last_state,1);
+ }
+ }
+ }
+
+ if (!state_ready(last_state) &&
+ !last_state->caller_flags) {
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2: need more bytes for character...\n"));
+ goto reinit_ReadChar;
+ }
+
+ got_key:
+ DPRINT(Debug,4,(&Debug,
+ "ReadCh2=%p (state): caller_flags=%d, ready=%d\n",
+ last_state,last_state->caller_flags,
+ state_ready(last_state)));
+ return last_state;
+ }
+
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.108-cvs/src/screen/def_screen.h
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/def_screen.h 2003-10-01 20:34:35.000000000 +0300
***************
*** 0 ****
--- 1,95 ----
+ /* $Id: def_screen.h,v 1.2 2003/10/01 17:34:35 hurtta Exp $ */
+
+ #include "headers.h"
+ #include "me.h"
+
+
+ extern int InGetPrompt; /* set if in GetPrompt() in read() */
+ /* HACK */
+
+ #define pg_BOLD 0x01
+ #define pg_UNDERLINE 0x02
+ #define pg_HALFBRIGHT 0x04
+ #define pg_INVERSE 0x08
+
+
+ /* curses.c */
+
+
+ extern int cur_tabspacing; /* Default? */
+
+ extern int cur_InitScreen P_((void));
+
+ extern int terminal_fd;
+ extern int outchar P_((int c));
+
+ extern charset_t target_display_charset;
+ extern struct charset_state * last_state;
+ extern screen_info_p last_display_state;
+
+ extern char terminal_type[];
+
+ /* DO NOT return lines-1 (as ScreenSize() did) */
+
+ extern void cur_ScreenSize P_((int *lines, int *columns));
+ extern void cur_GetXYLocation P_((int *line, int *col));
+ extern int cur_ClearScreen P_((void));
+ extern void cur_CursorUp P_((int n));
+ extern void cur_CursorDown P_((int n));
+ extern void cur_CursorLeft P_((int n));
+ extern int cur_MoveCursor P_((int row, int col));
+
+ extern void cur_changemode P_((int *mode, int set, int reset));
+
+ /* This assumes one byte charset */
+ extern void cur_Writechar P_((int ch));
+
+ extern void cur_PutLineS P_((struct string *S));
+
+ extern void cur_Write_to_screen P_((const char *format,
+ const char *msg, ...));
+
+ extern void cur_PutLine0 P_((int x, int y, const char *line));
+ extern void cur_PutLineX P_((int x, int y, const char *format,
+ const char *line, ...));
+ extern int cur_CleartoEOLN P_((void));
+ extern int cur_CleartoEOS P_((void));
+
+ extern int cur_RawState P_((void));
+
+ /* NOTE: Is called from signal handler! */
+ extern void cur_Raw P_((int state));
+
+ void limit_position P_((int *row, int *col));
+
+ extern void transmit_functions P_((int newstate));
+
+
+ #if POLL_METHOD
+ extern void clear_input_buffer P_((void));
+ #endif
+
+ extern int cur_ReadCh P_((int flags, int break_flag));
+ extern struct charset_state * cur_ReadCh2 P_((int flags,
+ int break_flag));
+
+ extern int cursor_control;
+ extern int _intransmit; /* are we transmitting keys? */
+ extern char *_key_up, *_key_down, *_key_left, *_key_right,
+ *_key_pageup, *_key_pagedown, *_key_home,
+ *_key_help, *_key_find;
+ extern char *_transmit_on, *_transmit_off;
+
+ /* cur_process.c */
+
+
+ extern void print_status P_((struct run_state *rs,int sig,int exit_code));
+ extern void start_run_tty_init P_((void));
+ extern void print_status_cooked P_((struct run_state *rs,int sig,
+ int exit_code));
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.108-cvs/src/screen/Makefile.SH
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/Makefile.SH 2003-10-01 20:34:34.000000000 +0300
***************
*** 0 ****
--- 1,89 ----
+ case $CONFIG in
+ '')
+ if test ! -f config.sh; then
+ ln ../config.sh . || \
+ ln ../../config.sh . || \
+ ln ../../../config.sh . || \
+ ln ../../../../config.sh . || \
+ (echo "Can't find config.sh."; exit 1)
+ fi
+ . ./config.sh
+ ;;
+ esac
+ case "$0" in
+ */*) cd `expr X$0 : 'X\(.*\)/'` ;;
+ esac
+
+ echo "Extracting src/screen/Makefile (with variable substitutions)"
+ cat >Makefile <<!GROK!THIS!
+ #!$make
+ # $Id: Makefile.SH,v 1.2 2003/10/01 17:34:34 hurtta Exp $
+ # Makefile for the ELM mail program.
+ #
+ # Variables
+ # Variables established by Configure
+ AR = ar
+ CC = $cc
+ CCFLAGS = $ccflags $picflag $xencf
+ CHMOD = $chmod
+ LINT = $lint
+ OPTIMIZE = $optimize
+ RANLIB = $ranlib
+ RM = $rm -f
+ TOUCH = $touch
+ TAGS = ctags
+
+ !GROK!THIS!
+
+ cat >>Makefile <<'!NO!SUBS!'
+ # Other general variables
+ CFLAGS = -I$(INCLDIR) $(CCFLAGS) $(OPTIMIZE) $(DEBUG)
+ INCLDIR = ../../hdrs
+ LINTFLAGS = -I$(INCLDIR)
+ SHELL = /bin/sh
+
+ OBJ = screen.o curses.o curs_input.o termbuffer.o \
+ termtitle.o termcharset.o cur_process.o
+
+ all: Makefile libscreen.a
+
+ install_s: Makefile libscreen.a
+
+ uninstall_s:
+
+ clean:
+ $(RM) $(OBJ) libscreen.a
+
+ Makefile: Makefile.SH ../../config.sh
+ @echo "You must run 'sh Configure -S' or 'sh Configure'"
+ exit 1
+
+ libscreen.a: $(OBJ)
+ $(AR) r $@ $?
+ $(RANLIB) $@
+
+ # Dependencies of header files upon other header files they include
+ .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/headers.h def_screen.h
+
+ $(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
+ $(CHMOD) u+w $@
+ $(TOUCH) $@
+
+ $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
+ $(CHMOD) u+w $@
+ $(TOUCH) $@
+
+ def_screen.h: $(INCLDIR)/headers.h $(INCLDIR)/me.h
+ $(CHMOD) u+w $@
+ $(TOUCH) $@
+
+ # Dependencies of C object files
+
+ screen.o: def_screen.h
+ curses.o: def_screen.h
+ curs_input.o: def_screen.h
+ termbuffer.o: def_screen.h
+ termtitle.o: def_screen.h
+ termcharset.o: def_screen.h
+ cur_process.o: def_screen.h $(INCLDIR)/s_elm.h
+ !NO!SUBS!
Index: elm2.4.ME+.108-cvs/src/screen/screen.c
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/screen.c 2003-10-12 09:42:38.000000000 +0300
***************
*** 0 ****
--- 1,345 ----
+ static char rcsid[] = "@(#)$Id: screen.c,v 1.4 2003/10/12 06:42:38 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ ******************************************************************************
+ * Some code copied from ../curses.c. It have following copyright:
+ *
+ * Copyright (c) 1988-1992 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
+ *
+ * However on that code there is no practically Elm 2.4 code (from where that
+ * copyright is) left. Only function names are same.
+ *****************************************************************************/
+
+
+
+ #include "def_screen.h"
+
+ DEBUG_VAR(Debug,__FILE__,"screen");
+
+ static void PutLineS P_((struct string *S));
+
+ static void PutLineS(S)
+ struct string *S;
+ {
+
+ DPRINT(Debug,49, (&Debug, "PutLineS(\"%S\")\n",S));
+
+ cur_PutLineS(S);
+ }
+
+
+ int InitScreen()
+ {
+ int r;
+
+ DPRINT(Debug,49, (&Debug, "InitScreen()\n"));
+
+ r = cur_InitScreen();
+
+ set_start_run_hooks(print_status,RawState,Raw,
+ start_run_tty_init,ClearScreen,
+ PutLineS, print_status_cooked
+ );
+
+ return r;
+ }
+
+
+ /* This assumes one byte charset */
+ void Writechar(ch)
+ int ch;
+ {
+ DPRINT(Debug,49, (&Debug, "Writechar('%c')\n",ch));
+
+ cur_Writechar(ch);
+ }
+
+ /*VARARGS2*/
+
+ void Write_to_screen (
+ #if ANSI_C
+ CONST char *format, CONST char *msg, ...
+ #else
+ format, msg, va_alist
+ #endif
+ )
+ #if !ANSI_C
+ CONST char *format;
+ CONST char *msg;
+ va_dcl
+ #endif
+ {
+ va_list vl;
+ struct string *text;
+
+ DPRINT(Debug,49, (&Debug, "Write_to_screen(format=\"%s\",...)\n",format));
+
+ Va_start(vl, msg); /* defined in defs.h */
+
+ /** This routine writes to the screen at the current location.
+ when done, it increments lines & columns accordingly by
+ looking for "\n" sequences... **/
+
+ text = elm_smessage(0,format,msg,vl);
+ PutLineS(text);
+ free_string(&text);
+
+ va_end(vl);
+
+ }
+
+ void PutLine0(x, y, line)
+ int x,y;
+ CONST char *line;
+ {
+ DPRINT(Debug,49, (&Debug, "PutLine0(%d,%d,\"%s\")\n",x,y,line));
+
+ cur_PutLine0(x,y,line);
+ }
+
+
+ void PutLineX(
+ #if ANSI_C
+ int x, int y, const char *format, const char *line, ...
+ #else
+ x, y, format, line, va_alist
+ #endif
+ )
+ #if !ANSI_C
+ int x;
+ int y;
+ CONST char *format;
+ CONST char *line;
+ va_dcl
+ #endif
+ {
+ va_list vl;
+ struct string *text;
+
+ DPRINT(Debug,49, (&Debug, "PutLineX(%d,%d,format=\"%s\",...)\n",x,y,format));
+
+ Va_start(vl, line); /* defined in defs.h */
+
+ MoveCursor(x,y);
+
+ text = elm_smessage(0,format,line,vl);
+ PutLineS(text);
+ free_string(&text);
+
+ va_end(vl);
+
+ }
+
+
+ int CleartoEOLN()
+ {
+ int r;
+
+ DPRINT(Debug,49, (&Debug, "CleartoEOLN()\n"));
+ r = cur_CleartoEOLN();
+
+ return r;
+ }
+
+ int CleartoEOS()
+ {
+ int r;
+
+ DPRINT(Debug,49, (&Debug, "CleartoEOS()\n"));
+ r = cur_CleartoEOS();
+
+ return r;
+ }
+
+ int RawState()
+ {
+ int r;
+
+ DPRINT(Debug,49, (&Debug, "RawState()\n"));
+
+ r = cur_RawState();
+
+ return r;
+ }
+
+ void Raw(state)
+ int state;
+ {
+ DPRINT(Debug,49, (&Debug, "Raw(%d)\n",state));
+
+ cur_Raw(state);
+ }
+
+ struct charset_state * ReadCh2(flags)
+ int flags;
+ {
+ struct charset_state *st;
+
+ DPRINT(Debug,49, (&Debug, "ReadCh2(%d)\n",flags));
+
+ st = cur_ReadCh2(flags,InGetPrompt);
+
+ return st;
+ }
+
+ int ReadCh(flags)
+ int flags;
+ {
+ int c;
+
+ DPRINT(Debug,49, (&Debug, "ReadCh(%d)\n",flags));
+
+ c = cur_ReadCh(flags,InGetPrompt);
+
+ return c;
+ }
+
+ void ScreenSize(lines, columns)
+ int *lines, *columns;
+ {
+
+ DPRINT(Debug,49, (&Debug, "ScreenSize(*,*)\n"));
+
+ /* cur_ScreenSize DO NOT return lines-1 (as ScreenSize() did) */
+
+ cur_ScreenSize(lines,columns);
+
+ ((*lines)--);
+
+ }
+
+ void GetXYLocation(x,y)
+ int *x,*y;
+ {
+ DPRINT(Debug,49, (&Debug, "GetXYLocation(*,*)\n"));
+
+ cur_GetXYLocation(x,y);
+ }
+
+ int ClearScreen()
+ {
+ int r;
+
+ DPRINT(Debug,49, (&Debug, "ClearScreen()\n"));
+
+ r = cur_ClearScreen();
+
+ return r;
+ }
+
+ int MoveCursor(row, col)
+ int row, col;
+ {
+ int r;
+
+ DPRINT(Debug,49, (&Debug, "MoveCursor(%d,%d)\n",row,col));
+
+ r = cur_MoveCursor(row, col);
+
+ return r;
+ }
+
+ void CarriageReturn()
+ {
+
+ DPRINT(Debug,49, (&Debug, "CarriageReturn()\n"));
+ /** move the cursor to the beginning of the current line **/
+ Writechar('\r');
+ }
+
+ void NewLine()
+ {
+ DPRINT(Debug,49, (&Debug, "NewLine()\n"));
+ /** move the cursor to the beginning of the next line **/
+
+ Writechar('\r');
+ Writechar('\n');
+ FlushBuffer();
+ }
+
+ int modes = 0;
+
+ int StartBold()
+ {
+ DPRINT(Debug,49, (&Debug, "StartBold()\n"));
+ cur_changemode(&modes, pg_BOLD,0);
+
+ return 0;
+ }
+
+ int EndBold()
+ {
+ DPRINT(Debug,49, (&Debug, "EndBold()\n"));
+ /** compliment of startbold **/
+
+ cur_changemode(&modes, 0, pg_BOLD);
+
+ return 0;
+ }
+
+ int StartInverse() {
+
+ DPRINT(Debug,49, (&Debug, "StartInverse()\n"));
+ cur_changemode(&modes, pg_INVERSE,0);
+
+ return 0;
+ }
+
+ int EndInverse() {
+
+ DPRINT(Debug,49, (&Debug, "EndInverse()\n"));
+ cur_changemode(&modes, 0, pg_INVERSE);
+
+ return 0;
+ }
+
+
+ int StartUnderline() {
+
+ DPRINT(Debug,49, (&Debug, "StartUnderline()\n"));
+ cur_changemode(&modes, pg_UNDERLINE,0);
+
+ return 0;
+ }
+
+ int EndUnderline() {
+
+ DPRINT(Debug,49, (&Debug, "EndUnderline()\n"));
+ cur_changemode(&modes, 0, pg_UNDERLINE);
+
+ return 0;
+ }
+
+ int StartHalfbright() {
+
+ DPRINT(Debug,49, (&Debug, "StartHalfbright()\n"));
+ cur_changemode(&modes, pg_HALFBRIGHT,0);
+
+ return 0;
+ }
+
+ int EndHalfbright() {
+
+ DPRINT(Debug,49, (&Debug, "EndHalfbright()\n"));
+ cur_changemode(&modes, 0, pg_HALFBRIGHT);
+
+ return 0;
+ }
+
+ int get_tabspacing()
+ {
+ DPRINT(Debug,49, (&Debug, "get_tabspacing()\n"));
+ return cur_tabspacing;
+ }
+
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.108-cvs/src/screen/termbuffer.c
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/termbuffer.c 2003-10-01 20:34:35.000000000 +0300
***************
*** 0 ****
--- 1,106 ----
+ static char rcsid[] = "@(#)$Id: termbuffer.c,v 1.2 2003/10/01 17:34:35 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+ #include "def_screen.h"
+ #include <errno.h>
+
+ DEBUG_VAR(Debug,__FILE__,"screen");
+
+ int terminal_fd = 1; /* Standard output, later terminal ... */
+
+ static char outchar_write_buffer[2048];
+ VOLATILE static char * buffer_ptr = &(outchar_write_buffer[0]);
+
+ /* Note that there is several race conditions -- losing of characters possible
+ (this may be called from signal handler)
+ */
+ void FlushBuffer P_((void))
+ {
+ int len;
+
+ while (0 < (len = buffer_ptr-outchar_write_buffer)) {
+ int L = write(terminal_fd,outchar_write_buffer,len);
+ int err = errno;
+
+ if (L < 0 &&
+ ((err != EINTR)
+ #ifdef EAGAIN
+ && (err != EAGAIN)
+ #endif
+ #ifdef EWOULDBLOCK
+ && (err != EWOULDBLOCK)
+ #endif
+ )) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "FlushBuffer: Write failed errno=%d\n",err));
+ break;
+ }
+
+ if (L > 0) {
+ len = buffer_ptr-outchar_write_buffer;
+
+ len -= L;
+
+ DPRINT(Debug,9,(&Debug,
+ "FlushBuffer: %d bytes writted to %d, %d left\n",
+ L,terminal_fd,len));
+
+ if (len > 0)
+ memmove(outchar_write_buffer,outchar_write_buffer+L,len);
+ if (len >= 0)
+ buffer_ptr = outchar_write_buffer + len;
+ else
+ buffer_ptr = outchar_write_buffer;
+
+ } else {
+ DPRINT(Debug,2,(&Debug,
+ "FlushBuffer: Looping...\n"));
+ }
+ }
+ }
+
+ /* Note that there is several race conditions -- losing of characters possible
+ (this may be called from signal handler)
+ */
+ int outchar(c)
+ int c;
+ {
+
+ if (buffer_ptr >= outchar_write_buffer + sizeof (outchar_write_buffer))
+ FlushBuffer();
+
+ if (buffer_ptr < outchar_write_buffer + sizeof (outchar_write_buffer)) {
+ VOLATILE char *p = buffer_ptr++;
+
+ *p = c;
+
+ if (c >= ' ' && c < 127) { /* ASCII Assumed */
+ SIGDPRINT(Debug,40,(&Debug,
+ "outchar [%d] = %02X '%c'\n",
+ p-outchar_write_buffer,(unsigned char) *p,c));
+
+ } else {
+ SIGDPRINT(Debug,40,(&Debug,
+ "outchar [%d] = %02X\n",
+ p-outchar_write_buffer,(unsigned char) *p));
+ }
+
+ return (unsigned char)c;
+ }
+ SIGDPRINT(Debug,2,(&Debug,
+ "outchar: Buffer full!\n"));
+ return EOF;
+ }
+
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.108-cvs/src/screen/termcharset.c
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/termcharset.c 2003-10-01 20:34:35.000000000 +0300
***************
*** 0 ****
--- 1,122 ----
+ static char rcsid[] = "@(#)$Id: termcharset.c,v 1.2 2003/10/01 17:34:35 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+ #include "def_screen.h"
+
+ DEBUG_VAR(Debug,__FILE__,"elmpage");
+
+ charset_t target_display_charset = NULL;
+ struct charset_state * last_state = NULL;
+ screen_info_p last_display_state = NULL;
+
+
+ charset_t * give_display_charsets(storage,max)
+ charset_t *storage;
+ int max;
+ {
+ int n = 0,i;
+ max--;
+
+ storage[n++] = display_charset;
+
+ if (system_charset != display_charset &&
+ n < max)
+ storage[n++] = system_charset;
+
+ if (allow_charset_switching)
+ terminal_can_switch(terminal_type,storage,&n,max);
+ storage[n] = NULL;
+
+ SIGDPRINT(Debug,4,(&Debug,
+ "Possible sets:"));
+ for (i = 0; i < n; i++) {
+ SIGDPRINT(Debug,4,(&Debug,
+ " %s%c",
+ storage[i]->MIME_name ? storage[i]->MIME_name :
+ "<no MIME name>",
+ i < n-1 ? ',' : '\n'));
+ }
+
+ return storage;
+ }
+
+
+ int set_display_charset(set,silent)
+ charset_t set;
+ int silent;
+ {
+ if (!terminal_can_switch_to(terminal_type,set,silent))
+ return 0;
+
+ target_display_charset = set;
+ switch_display_charset(1);
+ return 1;
+ }
+
+ void switch_display_charset(to_display)
+ int to_display;
+ {
+ char buffer[256];
+
+ charset_t t;
+ char * str;
+
+ if (!target_display_charset)
+ target_display_charset = display_charset;
+
+
+ if (!last_display_state)
+ last_display_state = create_terminal_info();
+
+
+ t = to_display ? target_display_charset : system_charset;
+
+ if (!t) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "switch_display_charset: target charset is NULL\n"));
+ return;
+ }
+
+ str = terminal_switch_to(terminal_type,t,&last_display_state,
+ buffer, sizeof buffer);
+
+ if (str) {
+ int i;
+
+ SIGDPRINT(Debug,4,(&Debug,
+ "Setting display charset to %s (",
+ t->MIME_name ? t->MIME_name : "<no MIME name>"));
+ for (i = 0; str[i]; i++) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "%s%02X",
+ i ? " " : "", str[i]));
+ }
+ SIGDPRINT(Debug,4,(&Debug,
+ ") [terminal %s]\n",terminal_type));
+
+ for (i = 0; str[i]; i++) {
+ outchar(str[i]);
+ }
+
+ display_charset = t;
+
+ } else {
+ SIGDPRINT(Debug,4,(&Debug,
+ "No way to set terminal %s to charset %s\n",
+ terminal_type,
+ t->MIME_name ? t->MIME_name : "<no MIME name>"));
+
+ }
+ }
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.108-cvs/src/screen/termtitle.c
*** /tmp/4773-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-10-12 12:40:39.000000000 +0300
--- elm2.4.ME+.108-cvs/src/screen/termtitle.c 2003-10-01 20:34:35.000000000 +0300
***************
*** 0 ****
--- 1,158 ----
+ static char rcsid[] = "@(#)$Id: termtitle.c,v 1.2 2003/10/01 17:34:35 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+ #include "def_screen.h"
+ #include "s_elm.h"
+
+ #include <errno.h>
+
+ DEBUG_VAR(Debug,__FILE__,"elmpage");
+
+
+ static char * title_string = NULL; /* Malloced */
+ static char * icon_string = NULL;
+
+ static char * title_quit_string = NULL;
+ static char * icon_quit_string = NULL;
+
+ static CONST char ELM_EXITING[] = "Elm: exiting";
+
+ static char * title_suspended_string = NULL;
+ static char * icon_suspended_string = NULL;
+
+ static CONST char ELM_SUSPENDED[] = "Elm: suspended";
+
+ int set_terminal_titles(title,icon)
+ char *title;
+ char *icon;
+ {
+
+ /* These are not set when setting terminal to non-raw mode ..
+ but instead only when exiting or suspended (winth ctrl-Z) */
+ if(!title_quit_string)
+ title_quit_string = catgets(elm_msg_cat, ElmSet, ElmTitleQuit,
+ ELM_EXITING);
+ if (!icon_quit_string)
+ icon_quit_string = catgets(elm_msg_cat, ElmSet, ElmIconQuit,
+ ELM_EXITING);
+
+ if(!title_suspended_string)
+ title_suspended_string = catgets(elm_msg_cat, ElmSet, ElmTitleSusp,
+ ELM_SUSPENDED);
+ if (!icon_suspended_string)
+ icon_suspended_string = catgets(elm_msg_cat, ElmSet, ElmIconSusp,
+ ELM_SUSPENDED);
+
+
+ DPRINT(Debug,8,(&Debug,
+ "Terminal (%s) title=%s icon=%s\n",
+ terminal_type,
+ title ? title : "<UNCHANGED>",
+ icon ? icon : "<UNCHANGED>"));
+
+ if (RawState()) {
+ char *str = terminal_set_title(terminal_type,title,icon, NULL,0);
+ int i;
+
+ if (!str) {
+ DPRINT(Debug,4,(&Debug,
+ "Can't set terminal %s titles to %s and %s\n",
+ terminal_type,
+ title ? title : "<NULL>",
+ icon ? icon : "<NULL>"));
+ return 0;
+ }
+
+ DPRINT(Debug,4,(&Debug,
+ "Setting terminal title ("));
+ for (i = 0; str[i]; i++) {
+ DPRINT(Debug,4,(&Debug,
+ "%s%02X",
+ i ? " " : "", str[i]));
+ }
+ DPRINT(Debug,4,(&Debug,
+ ") [terminal %s]\n",terminal_type));
+
+ for (i = 0; str[i]; i++) {
+ outchar(str[i]);
+ }
+
+ }
+
+ if (title)
+ title_string = strmcpy(title_string,title);
+ if (icon)
+ icon_string = strmcpy(title_string,title);
+
+
+ return 1;
+ }
+
+ /* May be called from signal handler
+ to_display = 0 -- suspended
+ = 1 -- as set
+ = 2 -- exiting
+ */
+
+ void switch_title(to_display)
+ int to_display;
+ {
+ char buffer[1024];
+
+ char * str = NULL;
+
+
+ switch (to_display) {
+ case 0:
+ str = terminal_set_title(terminal_type,
+ title_suspended_string,
+ icon_suspended_string,
+ buffer, sizeof buffer);
+ break;
+ case 1:
+ str = terminal_set_title(terminal_type,
+ title_string,
+ icon_string,
+ buffer, sizeof buffer);
+ break;
+ case 2:
+ str = terminal_set_title(terminal_type,
+ title_quit_string,
+ icon_quit_string,
+ buffer, sizeof buffer);
+ break;
+ }
+
+
+ if (str) {
+ int i;
+
+ SIGDPRINT(Debug,4,(&Debug,
+ "Setting terminal title ("));
+ for (i = 0; str[i]; i++) {
+ SIGDPRINT(Debug,4,(&Debug,
+ "%s%02X",
+ i ? " " : "", str[i]));
+ }
+ SIGDPRINT(Debug,4,(&Debug,
+ ") [terminal %s]\n",terminal_type));
+
+ for (i = 0; str[i]; i++) {
+ outchar(str[i]);
+ }
+
+ }
+ }
+
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.108-cvs/src/showmsg.c
*** elm2.4.ME+.107/src/showmsg.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/showmsg.c 2003-10-11 11:42:11.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: showmsg.c,v 1.27 2003/07/29 18:46:21 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: showmsg.c,v 1.28 2003/10/11 08:42:11 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.28 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 131,139 ****
--- 131,153 ----
structure);
if (cmd) {
+
+ char ** trusted_programs =
+ give_dt_path_as_elems(&internal_mailcap_t_programs,
+ "internal-mailcap-trusted-programs");
+
+ int IS_OK = 0;
+
int i;
char *x;
+ if (trusted_programs) {
+ for (i = 0; trusted_programs[i]; i++) {
+ if (0 == strcmp(cmd,
+ trusted_programs[i]))
+ IS_OK++;
+ }
+ }
*list = safe_realloc(*list,
sizeof ((*list)[0]) * (*list_len +1));
***************
*** 152,157 ****
--- 166,176 ----
(*list)[*list_len].printable_command = cmd;
(*list)[*list_len].selected = 0;
(*list)[*list_len].col = elm_COLUMNS-7;
+
+ if (IS_OK) {
+ (*list)[*list_len].selected = 1;
+ (*list)[*list_len].structure->handler_data->use_entry = 1;
+ }
i = (*list_len)++;
***************
*** 205,210 ****
--- 224,230 ----
int list_len = 0;
int offset = 0;
+
update_prompt(&list,&list_len,&offset,-1);
prompt_programs_1(structure,&list,&list_len,&offset);
***************
*** 213,220 ****
--- 233,251 ----
int q = 0;
int ch;
+ /* Check if all programs was trusted ... */
+
+ while (q < list_len &&
+ list[q].selected &&
+ list[q].structure &&
+ list[q].structure->handler_data &&
+ list[q].structure->handler_data->use_entry)
+ q++;
r = FALSE;
+ if (q >= list_len && !internal_mailcap_t_prompt)
+ goto out;
+
PutLineX(elm_LINES-1,1,
CATGETS(elm_msg_cat, ElmSet, ElmMailcapQuit,
"Answer questions, use m)etamail or q)uit menu: "));
***************
*** 364,369 ****
--- 395,402 ----
} while(ch);
}
+
+ out:
failure:
if (list) {
Index: elm2.4.ME+.108-cvs/src/syscall.c
*** elm2.4.ME+.107/src/syscall.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108-cvs/src/syscall.c 2003-10-01 20:34:34.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: syscall.c,v 1.26 2003/08/04 14:58:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: syscall.c,v 1.27 2003/10/01 17:34:34 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 360,366 ****
mailbox);
redraw2:
! SetXYLocation(0, 40); /* a location not near the next request, so an absolute is used */
PutLineX(elm_LINES, 0,
CATGETS(elm_msg_cat, ElmSet,
ElmPressAnyKeyToReturn,
--- 360,366 ----
mailbox);
redraw2:
! InvalidateLocation(); /* a location not near the next request, so an absolute is used */
PutLineX(elm_LINES, 0,
CATGETS(elm_msg_cat, ElmSet,
ElmPressAnyKeyToReturn,
Index: elm2.4.ME+.108-cvs/utils/Makefile.SH
*** elm2.4.ME+.107/utils/Makefile.SH 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.108-cvs/utils/Makefile.SH 2003-10-01 20:34:36.000000000 +0300
***************
*** 16,22 ****
echo "Extracting utils/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # @(#)$Id: Makefile.SH,v 1.31 2003/05/25 17:29:02 hurtta Exp $
#
# Makefile for the Elm system utilities
#
--- 16,22 ----
echo "Extracting utils/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # @(#)$Id: Makefile.SH,v 1.32 2003/10/01 17:34:36 hurtta Exp $
#
# Makefile for the Elm system utilities
#
***************
*** 373,383 ****
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elmutil.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/elm_curses.h $(INCLDIR)/defs.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 373,383 ----
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elmutil.h: $(INCLDIR)/defs.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h
$(CHMOD) u+w $@
$(TOUCH) $@
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL108a.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL108a.patch.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL108a.patch.gz >
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL108a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
[ This is out of branch patch. ]
SUMMARY: This patch makes some fixes for elmregister,
and elm's search command ('/').
- elmregister was not fixing protections on
replay phase
- 'sh Configure -cfile' was not working, only
'sh Configure -c file' read 'file'.
- "I type in the same text string to search again, it goes
to the next matched line, but the surrounding lines are
from the original match hit (the screen is not being
updated)." ( about / -command)
Problem noted by: From: Bruce Momjian <ro...@candle.pha.pa.us>
- "The pgp message "[End of raw data]" is confused
as a file inclusion when it appears in a reply.
The following patch changes the message to
"[ End of raw data]", which doesn't get confused."
From: Bruce Momjian <ro...@candle.pha.pa.us>
[ Patch little modified. ]
- "With older elm versions, using '/', it remembered the
old search string, so I could do '/', <ENTER> to find
the next occurance of a single string. The new code
doesn't do that."
Reported by: Bruce Momjian <ro...@candle.pha.pa.us>
> Returned variables to static (and avoiding freeing
them on end of function)
- Moved most of informative messages of elmregister from
stderr to stdout.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL108 (25) --------------------------------
For apply patch use command
patch -p1 < {path...}/this-file
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Index: elm2.4.ME+.108a-cvs/hdrs/patchlevel.h
Prereq: 1097000000
*** elm2.4.ME+.108/hdrs/patchlevel.h 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.108a-cvs/hdrs/patchlevel.h 2003-10-22 19:55:23.000000000 +0300
***************
*** 1,8 ****
! #define PATCHLEVEL "108 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.108
*/
! #define LAST_REPORT_TIME 1097000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
#define VERS_DATE "Oct, 2003" /* for elm -v option */
#define WHAT_STRING \
--- 1,8 ----
! #define PATCHLEVEL "108a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.108
*/
! #define LAST_REPORT_TIME 1098000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
#define VERS_DATE "Oct, 2003" /* for elm -v option */
#define WHAT_STRING \
Index: elm2.4.ME+.108a-cvs/README.ME+
*** elm2.4.ME+.108/README.ME+ 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.108a-cvs/README.ME+ 2003-10-22 20:51:47.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.654 2003/10/12 08:47:40 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.664 2003/10/22 17:51:47 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,56 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
+ ------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch makes some fixes for elmregister,
+ and elm's search command ('/').
+
+ - elmregister was not fixing protections on
+ replay phase
+
+ - 'sh Configure -cfile' was not working, only
+ 'sh Configure -c file' read 'file'.
+
+ - "I type in the same text string to search again, it goes
+ to the next matched line, but the surrounding lines are
+ from the original match hit (the screen is not being
+ updated)." ( about / -command)
+ Problem noted by: From: Bruce Momjian <ro...@candle.pha.pa.us>
+
+ - "The pgp message "[End of raw data]" is confused
+ as a file inclusion when it appears in a reply.
+ The following patch changes the message to
+ "[ End of raw data]", which doesn't get confused."
+ From: Bruce Momjian <ro...@candle.pha.pa.us>
+ [ Patch little modified. ]
+
+ - "With older elm versions, using '/', it remembered the
+ old search string, so I could do '/', <ENTER> to find
+ the next occurance of a single string. The new code
+ doesn't do that."
+ Reported by: Bruce Momjian <ro...@candle.pha.pa.us>
+ > Returned variables to static (and avoiding freeing
+ them on end of function)
+
+ - Moved most of informative messages of elmregister from
+ stderr to stdout.
+
Changes of Elm2.4ME+ PL108 (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
***************
*** 67,76 ****
treated with lower priority than normal entries. So they
normally do not match if there is more specific entry.
! - Avoid divizion be zero when opening non existing
(or empty?) mailbox.
From: Darren Reed <ava...@caligula.anu.edu.au>
! ( Divizion by zero seems not be visible on all systems. )
New elmrc options:
internal-mailcap-trusted-programs
--- 105,114 ----
treated with lower priority than normal entries. So they
normally do not match if there is more specific entry.
! - Avoid division be zero when opening non existing
(or empty?) mailbox.
From: Darren Reed <ava...@caligula.anu.edu.au>
! ( Division by zero seems not be visible on all systems. )
New elmrc options:
internal-mailcap-trusted-programs
***************
*** 93,98 ****
--- 131,138 ----
Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
+ [ This is out of branch patch. ]
+
SUMMARY: This patch corrects page when returning
from o)ptions screen and fixes some other
minor bugs.
***************
*** 2227,2232 ****
--- 2267,2274 ----
Changes of Elm2.4ME+ PL97a (25) compared with Elm2.4ME+ PL97 (25)
----------------------------------------------------------------
+ [ This is out of branch patch. ]
+
- Fix state_printf panic "Embedded newlines are not supported"
on case when there is on ~/.elm/elmheaders
`backticked` command which produces output which does not
***************
*** 2584,2589 ****
--- 2626,2633 ----
Changes of Elm2.4ME+ PL95c (25) compared with Elm2.4ME+ PL95b (25)
------------------------------------------------------------------
+ [ This is out of branch patch. ]
+
- Do not use commands "mail" or "mailx" as mailer.
- Allow specify "none" as mailer on configuration time
(that requires that mailer is given on global elm.rc
Index: elm2.4.ME+.108a-cvs/Configure
*** elm2.4.ME+.108/Configure 2003-08-16 09:58:21.000000000 +0300
--- elm2.4.ME+.108a-cvs/Configure 2003-10-19 18:09:58.000000000 +0300
***************
*** 8,14 ****
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.148 2003/08/15 20:03:45 hurtta Exp $
#
: sanity checks
--- 8,14 ----
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.149 2003/10/19 15:09:58 hurtta Exp $
#
: sanity checks
***************
*** 86,92 ****
echo "Extra library suffix: $libsuffix"
;;
-c*)
! config="`expr \"$1\" : '-s\(.*\)'`"
shift
case "$config" in
"")
--- 86,92 ----
echo "Extra library suffix: $libsuffix"
;;
-c*)
! config="`expr \"$1\" : '-c\(.*\)'`"
shift
case "$config" in
"")
Index: elm2.4.ME+.108a-cvs/melib/pgp_decode.c
*** elm2.4.ME+.108/melib/pgp_decode.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108a-cvs/melib/pgp_decode.c 2003-10-20 19:41:09.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.33 2003/08/04 14:58:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.34 2003/10/20 16:41:09 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.34 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 816,826 ****
if (was_binary)
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpInternalSkipping,
! "[Internal error while calling pgp, skipping...]\n"));
else {
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpInternalRawdata,
! "[Internal error while calling pgp, raw data follows]\n"));
fail:
--- 816,826 ----
if (was_binary)
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpInternalSkipping,
! "[ Internal error while calling pgp, skipping... ]\n"));
else {
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpInternalRawdata,
! "[ Internal error while calling pgp, raw data follows ]\n"));
fail:
***************
*** 842,848 ****
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpRawEnd,
! "[End of raw data]\n"));
}
return;
}
--- 842,848 ----
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpRawEnd,
! "[ End of raw data. ]\n"));
}
return;
}
Index: elm2.4.ME+.108a-cvs/nls/C/C/C/s_me.m
*** elm2.4.ME+.108/nls/C/C/C/s_me.m 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.108a-cvs/nls/C/C/C/s_me.m 2003-10-20 19:41:09.000000000 +0300
***************
*** 120,126 ****
$ #PgpBefore
63 [ There is text before PGP section. ]\n
$ #PgpRawEnd
! 64 [End of raw data]\n
$ #FailedSeekEnvelope
65 Failed to seek beginning of mail envelope (%ld)
$ #FailedSeekHeaders
--- 120,126 ----
$ #PgpBefore
63 [ There is text before PGP section. ]\n
$ #PgpRawEnd
! 64 [ End of raw data. ]\n
$ #FailedSeekEnvelope
65 Failed to seek beginning of mail envelope (%ld)
$ #FailedSeekHeaders
Index: elm2.4.ME+.108a-cvs/src/elm.c
*** elm2.4.ME+.108/src/elm.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.108a-cvs/src/elm.c 2003-10-19 17:38:00.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.57 2003/09/14 16:35:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.57 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.58 2003/10/19 14:38:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.58 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 775,780 ****
--- 775,781 ----
ViewDigest(mailbox);
+ current = get_current(mailbox);
(void)get_page(current, mailbox);
(*redraw)++;
***************
*** 1151,1156 ****
--- 1152,1158 ----
ViewPartial(current_mailbox);
+ current = get_current(current_mailbox);
(void)get_page(current, current_mailbox);
redraw++;
***************
*** 1683,1690 ****
* commands to a function. */
int i;
! int current = ifmain(get_current((mailbox)),
! alias_current);
#define SET_CURRENT(x) { if (inalias) alias_current = (x); \
else set_current((mailbox),(x)); }
--- 1685,1693 ----
* commands to a function. */
int i;
! #define GET_CURRENT ifmain(get_current((mailbox)), alias_current)
!
! int current = GET_CURRENT;
#define SET_CURRENT(x) { if (inalias) alias_current = (x); \
else set_current((mailbox),(x)); }
***************
*** 1717,1725 ****
}
! if (x)
nucurr = get_page(current, (mailbox));
! else {
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmPatternNotFound,
"pattern not found!"));
--- 1720,1729 ----
}
! if (x) {
! current = GET_CURRENT;
nucurr = get_page(current, (mailbox));
! } else {
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmPatternNotFound,
"pattern not found!"));
***************
*** 1948,1955 ****
items);
clear_error();
if (limit((mailbox)) != 0) {
! get_page(current, (mailbox));
! (*redraw)++;
} else {
(*nufoot)++;
}
--- 1952,1960 ----
items);
clear_error();
if (limit((mailbox)) != 0) {
! current = GET_CURRENT;
! get_page(current, (mailbox));
! (*redraw)++;
} else {
(*nufoot)++;
}
Index: elm2.4.ME+.108a-cvs/src/pattern.c
*** elm2.4.ME+.108/src/pattern.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.108a-cvs/src/pattern.c 2003-10-20 20:16:25.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pattern.c,v 1.25 2003/09/03 09:16:30 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pattern.c,v 1.26 2003/10/20 17:16:25 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 275,288 ****
int i;
! struct string * pattern = NULL;
! struct string * alt_pattern = NULL;
int ret = 0 ;
int anywhere = FALSE;
int matched;
struct string * buffer = NULL;
struct string *buffer1 = NULL;
int val;
buffer = format_string(CATGETS(elm_msg_cat, ElmSet,
--- 275,295 ----
int i;
! /* Elm 2.4 remebers old entered patterns, so we need to keep
! that static. This leaks these malloced areas on end of program */
!
! static struct string * pattern = NULL;
! static struct string * alt_pattern = NULL;
int ret = 0 ;
int anywhere = FALSE;
int matched;
struct string * buffer = NULL;
struct string *buffer1 = NULL;
+
+ struct string * SEARCH = NULL; /* SHARED: point either to
+ pattern or alt_pattern */
+
int val;
buffer = format_string(CATGETS(elm_msg_cat, ElmSet,
***************
*** 322,329 ****
}
anywhere = TRUE;
! pattern = alt_pattern;
! alt_pattern = NULL;
}
if (0 == val) {
--- 329,335 ----
}
anywhere = TRUE;
! SEARCH = alt_pattern;
}
if (0 == val) {
***************
*** 332,346 ****
ret = 0;
goto out;
}
}
! if (pattern) {
if (inalias) {
for (i = alias_current; i < alias_message_count; i++) {
! matched = name_matches(i, pattern) || alias_matches(i, pattern);
if (! matched && anywhere) { /* Look only if no match yet */
! matched = comment_matches(i, pattern) ||
! address_matches(i, pattern);
}
if (matched) {
if (!alias_selected ||
--- 338,355 ----
ret = 0;
goto out;
}
+
+ anywhere = FALSE;
+ SEARCH = pattern;
}
! if (SEARCH) {
if (inalias) {
for (i = alias_current; i < alias_message_count; i++) {
! matched = name_matches(i, SEARCH) || alias_matches(i, SEARCH);
if (! matched && anywhere) { /* Look only if no match yet */
! matched = comment_matches(i, SEARCH) ||
! address_matches(i, SEARCH);
}
if (matched) {
if (!alias_selected ||
***************
*** 354,360 ****
}
else {
if (anywhere) {
! ret = match_in_message(pattern, mailbox);
}
else {
int current = get_current(mailbox);
--- 363,369 ----
}
else {
if (anywhere) {
! ret = match_in_message(SEARCH, mailbox);
}
else {
int current = get_current(mailbox);
***************
*** 364,371 ****
for (i = current; i < mc; i++) {
struct header_rec *hdr = give_header(mailbox,i);
! if (hdr && (from_matches(hdr, pattern) ||
! subject_matches(hdr, pattern))) {
if (!selected || (selected &&
hdr->status & VISIBLE)) {
current = ++i;
--- 373,380 ----
for (i = current; i < mc; i++) {
struct header_rec *hdr = give_header(mailbox,i);
! if (hdr && (from_matches(hdr, SEARCH) ||
! subject_matches(hdr, SEARCH))) {
if (!selected || (selected &&
hdr->status & VISIBLE)) {
current = ++i;
***************
*** 380,396 ****
}
out:
- if (pattern)
- free_string(&pattern);
- if (alt_pattern)
- free_string(&alt_pattern);
- if (buffer)
- free_string(&buffer);
- if (buffer1)
- free_string(&buffer1);
-
! return(ret);
}
int from_matches(mss, pattern)
--- 389,408 ----
}
out:
! /* NOTE:
! We do not free pattern and alt_pattern -- they are static
! and should have remembered, so that behauviour matches
! to Elm 2.4
! */
!
! if (buffer)
! free_string(&buffer);
! if (buffer1)
! free_string(&buffer1);
!
!
! return(ret);
}
int from_matches(mss, pattern)
Index: elm2.4.ME+.108a-cvs/utils/elmregister.c
*** elm2.4.ME+.108/utils/elmregister.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.108a-cvs/utils/elmregister.c 2003-10-21 22:05:44.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmregister.c,v 1.9 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmregister.c,v 1.13 2003/10/21 19:05:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 110,115 ****
--- 110,117 ----
}
command = argv[x];
+ fflush(stdout);
+
pid = fork(); /* BRANCH child process */
if (0 == pid) {
***************
*** 136,142 ****
close(filedes[0]); /* read end */
! fprintf(stderr,"%s: Running %s ...\n",
program_name,command);
execvp(command,argv+x);
--- 138,144 ----
close(filedes[0]); /* read end */
! fprintf(stdout,"%s: Running %s ...\n",
program_name,command);
execvp(command,argv+x);
***************
*** 183,189 ****
*x = '\0';
if (0 == mkdir(Z,0755)) {
! fprintf(stderr,
"%s: parent directory %s created (of %s)\n",
program_name,Z,y);
}
--- 185,191 ----
*x = '\0';
if (0 == mkdir(Z,0755)) {
! fprintf(stdout,
"%s: parent directory %s created (of %s)\n",
program_name,Z,y);
}
***************
*** 311,317 ****
add_bytes(F,buffer1,&ptr);
if (buffer1[0] != c) {
! fprintf(stderr,"%s: Character %c not buffered (readinf from pipe or file)\n",
program_name,c);
exit(1);
}
--- 313,319 ----
add_bytes(F,buffer1,&ptr);
if (buffer1[0] != c) {
! fprintf(stderr,"%s: Character %c not buffered (reading from pipe or file)\n",
program_name,c);
exit(1);
}
***************
*** 809,815 ****
if (!y) {
y++;
! fprintf(stderr,
"%s: Trimming unlinked files from %s\n",
program_name,target->filename);
}
--- 811,817 ----
if (!y) {
y++;
! fprintf(stdout,
"%s: Trimming unlinked files from %s\n",
program_name,target->filename);
}
***************
*** 830,836 ****
&count);
if (count > 0) {
! fprintf(stderr,
"%s: (%s) File %s is removed -- removing from log\n",
program_name,translated,ptr2->arg_ptrs[j]);
*remove_count += count;
--- 832,838 ----
&count);
if (count > 0) {
! fprintf(stdout,
"%s: (%s) File %s is removed -- removing from log\n",
program_name,translated,ptr2->arg_ptrs[j]);
*remove_count += count;
***************
*** 877,883 ****
return;
}
! fprintf(stderr,"%s: Rewriting %s\n",program_name,target->filename);
for (i = 0; i < target->entries_count; i++) {
char buffer[ MAX_PIPE_LOG];
--- 879,885 ----
return;
}
! fprintf(stdout,"%s: Rewriting %s\n",program_name,target->filename);
for (i = 0; i < target->entries_count; i++) {
char buffer[ MAX_PIPE_LOG];
***************
*** 1009,1015 ****
#ifdef S_ISDIR
! S_ISDIR(X.st_mode)
#else
! S_IFDIR != (buf.st_mode & S_IFMT)
#endif
) {
fprintf(stderr,"%s: -R %s invalid (not a directory)\n",
--- 1011,1017 ----
#ifdef S_ISDIR
! S_ISDIR(X.st_mode)
#else
! S_IFDIR != (X.st_mode & S_IFMT)
#endif
) {
fprintf(stderr,"%s: -R %s invalid (not a directory)\n",
***************
*** 1056,1062 ****
make_package_dir(Z,installer_root);
if (0 == mkdir(Z,0755)) {
! fprintf(stderr,
"%s: Directory %s created\n",
program_name,Z);
} else if (errno != EEXIST) {
--- 1058,1064 ----
make_package_dir(Z,installer_root);
if (0 == mkdir(Z,0755)) {
! fprintf(stdout,
"%s: Directory %s created\n",
program_name,Z);
} else if (errno != EEXIST) {
***************
*** 1080,1086 ****
}
! fprintf(stderr,"%s: Creating %s\n",program_name,LI.filename);
LI.file = fdopen(t,"r+");
if (! LI.file) {
--- 1082,1088 ----
}
! fprintf(stdout,"%s: Creating %s\n",program_name,LI.filename);
LI.file = fdopen(t,"r+");
if (! LI.file) {
***************
*** 1370,1376 ****
}
! fprintf(stderr,"%s: File %s installed\n",program_name,target);
fclose(S);
free(tempname);
--- 1372,1378 ----
}
! fprintf(stdout,"%s: File %s installed\n",program_name,target);
fclose(S);
free(tempname);
***************
*** 1418,1430 ****
exit(1); /* FAILURE */
}
! fprintf(stderr,
"%s: Copying directory %s -> %s:\n",
program_name,src,trg);
if (0 == mkdir(trg,0755)) {
! fprintf(stderr,
"%s: Directory %s created\n",
program_name,trg);
} else if (errno != EEXIST) {
--- 1420,1432 ----
exit(1); /* FAILURE */
}
! fprintf(stdout,
"%s: Copying directory %s -> %s:\n",
program_name,src,trg);
if (0 == mkdir(trg,0755)) {
! fprintf(stdout,
"%s: Directory %s created\n",
program_name,trg);
} else if (errno != EEXIST) {
***************
*** 1643,1648 ****
--- 1645,1651 ----
exit(1); /* FAILURE */
}
+ fflush(stdout);
pid = fork();
if (-1 == pid) {
***************
*** 1660,1669 ****
*x = '\0';
! fprintf(stderr,
"%s: Copying %s to %s(/%s) with %s -r\n",
program_name,src,trg,x+1,ELMREGISTER_CP);
! fflush(stderr);
execlp(ELMREGISTER_CP,ELMREGISTER_CP,"-r",
src,trg,NULL);
--- 1663,1672 ----
*x = '\0';
! fprintf(stdout,
"%s: Copying %s to %s(/%s) with %s -r\n",
program_name,src,trg,x+1,ELMREGISTER_CP);
! fflush(stdout);
execlp(ELMREGISTER_CP,ELMREGISTER_CP,"-r",
src,trg,NULL);
***************
*** 1919,1925 ****
strncpy(X,rel_path,l+2);
X[l] = '/';
! fprintf(stderr,"%s: Adding / to -R %s: %s\n",
argv[0],rel_path,X);
rel_path = X;
}
--- 1922,1928 ----
strncpy(X,rel_path,l+2);
X[l] = '/';
! fprintf(stdout,"%s: Adding / to -R %s: %s\n",
argv[0],rel_path,X);
rel_path = X;
}
***************
*** 1974,1980 ****
for (j = 0; j < i; j++) {
if (0 == unlink(translated[j])) {
! fprintf(stderr,
"%s: File %s removed\n",
program_name,translated[j]);
}
--- 1977,1983 ----
for (j = 0; j < i; j++) {
if (0 == unlink(translated[j])) {
! fprintf(stdout,
"%s: File %s removed\n",
program_name,translated[j]);
}
***************
*** 2064,2070 ****
goto fail3;
}
! fprintf(stderr,"%s: Link %s installed\n",program_name,translated[1]);
ptr = buffer;
--- 2067,2073 ----
goto fail3;
}
! fprintf(stdout,"%s: Link %s installed\n",program_name,translated[1]);
ptr = buffer;
***************
*** 2245,2251 ****
r = chown(target_f,id_user,id_group);
}
! fprintf(stderr,
"%s: Directory %s created%s\n",
program_name,target_f,
r == -1 ? " (failed to set owner)" : "");
--- 2248,2254 ----
r = chown(target_f,id_user,id_group);
}
! fprintf(stdout,
"%s: Directory %s created%s\n",
program_name,target_f,
r == -1 ? " (failed to set owner)" : "");
***************
*** 2453,2459 ****
if (ptr->group_ptr && 0 != strcmp(ptr->group_ptr,"-")) {
g = getgrnam(ptr->group_ptr);
! if (!p)
fprintf(stderr,
"%s: [pick_one] '%c' Group %s not found\n",
program_name,ptr->command_letter,
--- 2456,2462 ----
if (ptr->group_ptr && 0 != strcmp(ptr->group_ptr,"-")) {
g = getgrnam(ptr->group_ptr);
! if (!g)
fprintf(stderr,
"%s: [pick_one] '%c' Group %s not found\n",
program_name,ptr->command_letter,
***************
*** 2589,2595 ****
char * translated = make_absolute(ptr,ptr->arg_ptrs[i]);
if (0 == unlink(translated)) {
! fprintf(stderr,
"%s: File %s removed\n",
program_name,translated);
}
--- 2592,2598 ----
char * translated = make_absolute(ptr,ptr->arg_ptrs[i]);
if (0 == unlink(translated)) {
! fprintf(stdout,
"%s: File %s removed\n",
program_name,translated);
}
***************
*** 2612,2618 ****
break;
case 'C':
! fprintf(stderr,
"%s: Config file %s (%s) not copied\n",
program_name,ptr->arg_ptrs[0],src);
break;
--- 2615,2621 ----
break;
case 'C':
! fprintf(stdout,
"%s: Config file %s (%s) not copied\n",
program_name,ptr->arg_ptrs[0],src);
break;
***************
*** 2644,2650 ****
goto fail3;
}
! fprintf(stderr,"%s: Link %s installed\n",program_name,file2);
/* NOTE: NULLs buffer and arg_ptrs from ptr */
move_record(target,last,ptr);
--- 2647,2653 ----
goto fail3;
}
! fprintf(stdout,"%s: Link %s installed\n",program_name,file2);
/* NOTE: NULLs buffer and arg_ptrs from ptr */
move_record(target,last,ptr);
***************
*** 2684,2690 ****
if (0 == mkdir(trg,mode)) {
int r = chown(trg,id_user,id_group);
! fprintf(stderr,
"%s: Directory %s created%s\n",
program_name,trg,
r == -1 ? " (failed to set owner)" : "");
--- 2687,2693 ----
if (0 == mkdir(trg,mode)) {
int r = chown(trg,id_user,id_group);
! fprintf(r == -1 ? stderr : stdout,
"%s: Directory %s created%s\n",
program_name,trg,
r == -1 ? " (failed to set owner)" : "");
***************
*** 2853,2859 ****
if (!on_current(source,ptr->arg_ptrs[1])) {
if ('M' != ptr->command_letter)
! fprintf(stderr,
"%s: (%s) Keeping link %s from old version (was %s)\n",
program_name,source->filename,ptr->arg_ptrs[1],
ptr->arg_ptrs[0]
--- 2856,2862 ----
if (!on_current(source,ptr->arg_ptrs[1])) {
if ('M' != ptr->command_letter)
! fprintf(stdout,
"%s: (%s) Keeping link %s from old version (was %s)\n",
program_name,source->filename,ptr->arg_ptrs[1],
ptr->arg_ptrs[0]
***************
*** 2873,2879 ****
if (!on_current(source,ptr->arg_ptrs[0])) {
if ('M' != ptr->command_letter)
! fprintf(stderr,
"%s: (%s) Keeping file %s is from old version\n",
program_name,source->filename,ptr->arg_ptrs[0]);
continue;
--- 2876,2882 ----
if (!on_current(source,ptr->arg_ptrs[0])) {
if ('M' != ptr->command_letter)
! fprintf(stdout,
"%s: (%s) Keeping file %s is from old version\n",
program_name,source->filename,ptr->arg_ptrs[0]);
continue;
***************
*** 2952,2958 ****
) {
if (0 == rmdir(ab)) {
! fprintf(stderr,
"%s: Stage directory %s uninstalled\n",
program_name,ab);
ok = 1;
--- 2955,2961 ----
) {
if (0 == rmdir(ab)) {
! fprintf(stdout,
"%s: Stage directory %s uninstalled\n",
program_name,ab);
ok = 1;
***************
*** 2960,2966 ****
} else {
if (0 == unlink(ab)) {
! fprintf(stderr,
"%s: Stage file %s uninstalled\n",
program_name,ab);
ok = 1;
--- 2963,2969 ----
} else {
if (0 == unlink(ab)) {
! fprintf(stdout,
"%s: Stage file %s uninstalled\n",
program_name,ab);
ok = 1;
***************
*** 2973,2979 ****
}
} else {
! fprintf(stderr,
"%s: Ignoring entry %s -- not in stage area (%s)\n",
program_name,ab,stage_dir);
ok = 1; /* JUST CLEAN */
--- 2976,2982 ----
}
} else {
! fprintf(stdout,
"%s: Ignoring entry %s -- not in stage area (%s)\n",
program_name,ab,stage_dir);
ok = 1; /* JUST CLEAN */
***************
*** 3033,3039 ****
char *ab = make_absolute(ptr,ptr->arg_ptrs[1]);
if (0 == unlink(ab)) {
! fprintf(stderr,
"%s: Link %s uninstalled\n",
program_name,ab);
ok = 1;
--- 3036,3042 ----
char *ab = make_absolute(ptr,ptr->arg_ptrs[1]);
if (0 == unlink(ab)) {
! fprintf(stdout,
"%s: Link %s uninstalled\n",
program_name,ab);
ok = 1;
***************
*** 3057,3063 ****
char *ab = make_absolute(ptr,ptr->arg_ptrs[0]);
if (0 == rmdir(ab)) {
! fprintf(stderr,
"%s: Directory %s uninstalled\n",
program_name,ab);
ok = 1;
--- 3060,3066 ----
char *ab = make_absolute(ptr,ptr->arg_ptrs[0]);
if (0 == rmdir(ab)) {
! fprintf(stdout,
"%s: Directory %s uninstalled\n",
program_name,ab);
ok = 1;
***************
*** 3080,3093 ****
char *ab = make_absolute(ptr,ptr->arg_ptrs[0]);
if (0 == unlink(ab)) {
! fprintf(stderr,
"%s: File %s uninstalled\n",
program_name,ab);
ok = 1;
} else if (ENOENT == errno)
ok = 1;
else {
! fprintf(stderr,
"%s: Can't unlink %s\n",
program_name,ab);
exit_stat = 1;
--- 3083,3096 ----
char *ab = make_absolute(ptr,ptr->arg_ptrs[0]);
if (0 == unlink(ab)) {
! fprintf(stdout,
"%s: File %s uninstalled\n",
program_name,ab);
ok = 1;
} else if (ENOENT == errno)
ok = 1;
else {
! fprintf(stdout,
"%s: Can't unlink %s\n",
program_name,ab);
exit_stat = 1;
***************
*** 3103,3116 ****
char *ab = make_absolute(ptr,ptr->arg_ptrs[0]);
if (0 == unlink(ab)) {
! fprintf(stderr,
"%s: Config file %s uninstalled\n",
program_name,ab);
ok = 1;
} else if (ENOENT == errno)
ok = 1;
else {
! fprintf(stderr,
"%s: Can't unlink %s\n",
program_name,ab);
exit_stat = 1;
--- 3106,3119 ----
char *ab = make_absolute(ptr,ptr->arg_ptrs[0]);
if (0 == unlink(ab)) {
! fprintf(stdout,
"%s: Config file %s uninstalled\n",
program_name,ab);
ok = 1;
} else if (ENOENT == errno)
ok = 1;
else {
! fprintf(stdout,
"%s: Can't unlink %s\n",
program_name,ab);
exit_stat = 1;
***************
*** 3320,3337 ****
}
translated[i] = NULL;
! fprintf(stderr,
"%s: Executing",program_name);
for (j = 0; j < i; j++)
! fprintf(stderr," %s",
ptr->arg_ptrs[j]);
! fprintf(stderr,
"\n%s: As",program_name);
for (j = 0; j < i; j++)
! fprintf(stderr," %s",
translated[j]);
! fprintf(stderr,"\n");
! fflush(stderr);
pipefd = create_pipe(i,translated,0,&pid,"/");
--- 3323,3340 ----
}
translated[i] = NULL;
! fprintf(stdout,
"%s: Executing",program_name);
for (j = 0; j < i; j++)
! fprintf(stdout," %s",
ptr->arg_ptrs[j]);
! fprintf(stdout,
"\n%s: As",program_name);
for (j = 0; j < i; j++)
! fprintf(stdout," %s",
translated[j]);
! fprintf(stdout,"\n");
! fflush(stdout);
pipefd = create_pipe(i,translated,0,&pid,"/");
***************
*** 3387,3392 ****
--- 3390,3557 ----
}
}
+ /* Fixing permissions */
+ for (ptr = entry->log;
+ ptr < entry->log + entry->log_count;
+ ptr++) {
+
+ switch (ptr->command_letter) {
+ char *X;
+ struct passwd * p;
+ struct group * g;
+ struct stat X1;
+ int mode;
+ uid_t user;
+ gid_t group;
+
+
+ case 'M':
+ case 'F':
+ case 'C':
+
+ p = NULL;
+ g = NULL;
+ mode = -1;
+ user = (uid_t)-1;
+ group = (gid_t)-1;
+
+ if (!ptr->arg_ptrs || !ptr->arg_ptrs[0]) {
+
+ fprintf(stderr,
+ "%s: [replay_list] '%c' no arg 0 \n",
+ program_name,ptr->command_letter);
+ exit(1); /* FAILURE */
+ }
+ X = make_rooted(ptr,ptr->arg_ptrs[0],"/");
+
+ if (ptr->user_ptr && 0 != strcmp(ptr->user_ptr,"-")) {
+ p = getpwnam(ptr->user_ptr);
+
+ if (!p)
+ fprintf(stderr,
+ "%s: [replay_list] '%c' User %s not found\n",
+ program_name,ptr->command_letter,
+ ptr->user_ptr);
+ else {
+ user = p->pw_uid;
+ group = p->pw_gid;
+ }
+ }
+
+ if (ptr->group_ptr && 0 != strcmp(ptr->group_ptr,"-")) {
+ g = getgrnam(ptr->group_ptr);
+
+ if (!g)
+ fprintf(stderr,
+ "%s: [replay_list] '%c' Group %s not found\n",
+ program_name,ptr->command_letter,
+ ptr->group_ptr);
+ else
+ group = g->gr_gid;
+
+ }
+
+ if (ptr->mode_ptr && 0 != strcmp(ptr->mode_ptr,"-") &&
+ 0 != strcmp(ptr->mode_ptr,"0")) {
+ char * x;
+ mode = strtol(ptr->mode_ptr,&x,8);
+
+ if (*x || 0 == mode)
+ mode = -1;
+ }
+
+ if (stat(X,&X1) < 0) {
+ fprintf(stderr,
+ "%s: (note) %s : %s not accessible\n",
+ program_name,
+ ptr->arg_ptrs[0],X);
+
+ Exit_status = 1; /* FAILURE */
+
+ goto failure1;
+ }
+
+
+ if (
+ #ifdef S_ISDIR
+ S_ISDIR(X1.st_mode)
+ #else
+ S_IFDIR == (X1.st_mode & S_IFMT)
+ #endif
+ ) {
+
+ if (ptr->command_letter != 'M') {
+ fprintf(stderr,
+ "%s: (note) %s : %s is directory when should not\n",
+ program_name,
+ ptr->arg_ptrs[0],X);
+
+ Exit_status = 1; /* FAILURE */
+
+ goto failure1;
+ }
+
+ } else {
+ if (ptr->command_letter == 'M') {
+ fprintf(stderr,
+ "%s: (note) %s : %s is not a directory\n",
+ program_name,
+ ptr->arg_ptrs[0],X);
+
+ Exit_status = 1; /* FAILURE */
+ goto failure1;
+ }
+ }
+
+ if (user != (uid_t)-1 || group != (gid_t)-1) {
+ if (X1.st_uid != user || X1.st_gid != group) {
+ if (-1 == chown(X,user,group)) {
+ fprintf(stderr,"%s: Failed to set owner/group of %s\n",
+ program_name,X);
+ Exit_status = 1; /* FAILURE */
+ goto failure1;
+ }
+ } else {
+ fprintf(stdout,"%s: Fixed owner/group of %s\n",
+ program_name,X);
+ }
+
+ /* Recheck mode */
+ if (stat(X,&X1) < 0) {
+ fprintf(stderr,
+ "%s: (note) %s : %s not accessible\n",
+ program_name,
+ ptr->arg_ptrs[0],X);
+
+ Exit_status = 1; /* FAILURE */
+
+ goto failure1;
+ }
+ }
+
+ if (mode > 0) {
+
+ if ((X1.st_mode & 0777) != mode) {
+ if (-1 == chmod(X,mode)) {
+ fprintf(stderr,"%s: Failed to set mode of %s\n",
+ program_name,X);
+ Exit_status = 1; /* FAILURE */
+ } else {
+ fprintf(stdout,"%s: Mode of %s fixed\n",
+ program_name,X);
+ }
+ }
+
+ }
+
+ failure1:
+ free(X); X = 0;
+ break;
+ default:
+ break;
+ }
+ }
+
return Exit_status;
}
***************
*** 3490,3503 ****
int i;
int t;
! fprintf (stderr,
"%s: Copying ELM files from %s to / \n",
program_name,installer_root);
LI_target.filename = filelist;
if (0 == mkdir(ETCHOME,0755)) {
! fprintf(stderr,
"%s: Directory %s created\n",
program_name,ETCHOME);
} else if (errno != EEXIST) {
--- 3655,3668 ----
int i;
int t;
! fprintf (stdout,
"%s: Copying ELM files from %s to / \n",
program_name,installer_root);
LI_target.filename = filelist;
if (0 == mkdir(ETCHOME,0755)) {
! fprintf(stdout,
"%s: Directory %s created\n",
program_name,ETCHOME);
} else if (errno != EEXIST) {
***************
*** 3568,3574 ****
last = & LI_source.entries[LI_source.entries_count-1];
}
! /* EXECUTE commands */
r = replay_list(&LI_source.entries[LI_source.entries_count-1],
&LI_source,target,last);
--- 3733,3739 ----
last = & LI_source.entries[LI_source.entries_count-1];
}
! /* EXECUTE commands and fix permissions */
r = replay_list(&LI_source.entries[LI_source.entries_count-1],
&LI_source,target,last);
***************
*** 3766,3771 ****
--- 3931,3940 ----
program_name = argv[0];
+ #if defined(ANSI_C) || defined(SETLINEBUF)
+ setlinebuf(stdout);
+ #endif
+
#if 0
if (register_pipe)
fprintf(stderr,"%s: $ELM_INSTALLER=%s\n",program_name,register_pipe);
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
files elm-2.4ME+PL109.patch.gz
and elm-2.4ME+109.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL109.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+109.tar.gz >
via WWW.
Page <URL: http://personal.inet.fi/atk/elmme/ > is not up
of date (450 Write error: No space left on device).
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL109.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Undo Elm2.4ME+ PL108a (25) patch before applying this patch.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL108 (25) --------------------------------
Index: elm2.4.ME+.109-cvs/hdrs/patchlevel.h
Prereq: 1097000000
*** elm2.4.ME+.108/hdrs/patchlevel.h 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/patchlevel.h 2003-11-15 17:23:31.000000000 +0200
***************
*** 1,9 ****
! #define PATCHLEVEL "108 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.108
*/
! #define LAST_REPORT_TIME 1097000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Oct, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Oct, 2003"
--- 1,9 ----
! #define PATCHLEVEL "109 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.109
*/
! #define LAST_REPORT_TIME 1099000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Nov, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Nov, 2003"
Index: elm2.4.ME+.109-cvs/README.ME+
--- elm2.4.ME+.109-cvs/README.ME+ 2003-11-15 17:25:17.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.654 2003/10/12 08:47:40 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.670 2003/11/15 15:25:17 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,165 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL109 (25) compared with Elm2.4ME+ PL108 (25)
+ ------------------------------------------------------------------
+
+ Undo Elm2.4ME+ PL108a (25) patch before applying this patch.
+
+ SUMMARY: This release collects Elm2.4ME+ PL108a (25)
+ patch, adds elmrc variable "prompt-after-metamail",
+ changes iconv:auto-charset elmrc option
+ to also apply to defined but unknown charsets,
+ makes some changes to elm tools, adds binary
+ mmappable file for charset tables for types
+ ascii and one-byte-map and adds O)verride
+ charset command. On elm tools there is new
+ command "elmbindata".
+
+ - "I would like to suggest a small change in elm.
+
+ I use lynx as a HTML browser.
+ When I exit from the lynx, I get the message:
+
+ Press any key to return to index.
+
+ and the only possible action is returning to the
+ list of mail messages. This message seems to be unnecessary."
+ Requested by: Witold Witkowski <yawi...@cyf-kr.edu.pl>
+ - Renamed "promptafter" elmrc variable to
+ "prompt-after-pager". Added elmrc variable
+ "prompt-after-metamail" Elmrc variable "promptafter"
+ effects now both "prompt-after-pager" and
+ "prompt-after-metamail".
+ - iconv:auto-charset is now applied to charsets on
+ lib/precompiled_sets.c if that charset is marked as
+ unknown (ie. defination of predefined unknown
+ charset is ignored.)
+
+ NOTE: By default iconv:auto-charset is OFF. So that
+ change to be effective, use
+ iconv:auto-charset = ON
+ on elm.rc. This makes unknow charset to be
+ type "iconv" if iconv() is able to handle it.
+
+ WARNING: Some care should be taken so that system or
+ display charset does not result to have type
+ "iconv".
+
+ Look shared_libs/iconv/READ.ME+
+
+ - Use post_init_check() even when -G (global)
+ flag is given on tools of elm.
+
+ - Text form map files for charset types ascii and
+ one-byte-map from elm.map.txt directory (and elsewhere)
+ are stored to binary file elm.map.bin/unidata.bin.
+ File is then readed or mmapped (similar than
+ elm.map.bin/bindata.bin). File is generated with new
+ tool elmbindata.
+
+ - Added O)verride charset command to override charset=
+ parameter of current or tagged mails.
+
+ New elmrc options:
+ prompt-after-pager
+ prompt-after-metamail
+ bindata
+
+ New tools:
+ elmbindata
+
+ New files:
+ lib/bindata.c
+ lib/mmaputil.c
+ hdrs/mmaputil.h
+ hdrs/bindata.h
+ utils/elmbindata.c
+ utils/charmapcopy.c
+ utils/charmapcopy.h
+ doc/elmbindata.1
+
+ Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
+ ------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+
Changes of Elm2.4ME+ PL108 (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
***************
*** 67,76 ****
treated with lower priority than normal entries. So they
normally do not match if there is more specific entry.
! - Avoid divizion be zero when opening non existing
(or empty?) mailbox.
From: Darren Reed <ava...@caligula.anu.edu.au>
! ( Divizion by zero seems not be visible on all systems. )
New elmrc options:
internal-mailcap-trusted-programs
--- 214,223 ----
treated with lower priority than normal entries. So they
normally do not match if there is more specific entry.
! - Avoid division be zero when opening non existing
(or empty?) mailbox.
From: Darren Reed <ava...@caligula.anu.edu.au>
! ( Division by zero seems not be visible on all systems. )
New elmrc options:
internal-mailcap-trusted-programs
***************
*** 93,98 ****
--- 240,247 ----
Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
+ [ This is out of branch patch. ]
+
SUMMARY: This patch corrects page when returning
from o)ptions screen and fixes some other
minor bugs.
***************
*** 2227,2232 ****
--- 2376,2383 ----
Changes of Elm2.4ME+ PL97a (25) compared with Elm2.4ME+ PL97 (25)
----------------------------------------------------------------
+ [ This is out of branch patch. ]
+
- Fix state_printf panic "Embedded newlines are not supported"
on case when there is on ~/.elm/elmheaders
`backticked` command which produces output which does not
***************
*** 2584,2589 ****
--- 2735,2742 ----
Changes of Elm2.4ME+ PL95c (25) compared with Elm2.4ME+ PL95b (25)
------------------------------------------------------------------
+ [ This is out of branch patch. ]
+
- Do not use commands "mail" or "mailx" as mailer.
- Allow specify "none" as mailer on configuration time
(that requires that mailer is given on global elm.rc
***************
*** 8763,8769 ****
Otherwise debug output is appended to {debugfile}.
If {class} is not given, it defaults to all classes.
! Posisble classes are printed to {debugfile}. Value 0
for {level} can be used to get just possible values
of {class}.
--- 8916,8922 ----
Otherwise debug output is appended to {debugfile}.
If {class} is not given, it defaults to all classes.
! Posible classes are printed to {debugfile}. Value 0
for {level} can be used to get just possible values
of {class}.
***************
*** 8938,8947 ****
p private (encrypted) message
f Includes message fragment
(message/partial)
New commands for Elm 2.4ME+ (compared with Elm 2.4)
! -------------------------------------------------
Subject (main) menu:
--- 9091,9101 ----
p private (encrypted) message
f Includes message fragment
(message/partial)
+ o Charset of message is overrided
New commands for Elm 2.4ME+ (compared with Elm 2.4)
! ---------------------------------------------------
Subject (main) menu:
***************
*** 8986,8991 ****
--- 9140,9150 ----
copy PL82 Changed default to ON
+ promptafter PL109 Renamed to prompt-after-pager.
+ promptafter effects now both
+ prompt-after-pager and
+ prompt-after-metamail.
+
New elmrc variables for Elm 2.4ME+ (compared with Elm 2.4)
--------------------------------------------------------
***************
*** 8996,9001 ****
--- 9155,9161 ----
auto-attachment MIME
auto-iso-8859 MIME
background-wait-time -
+ bindata -
browser-wildcard-matching -
charset-convert-ok MIME
convert-comment-to-fullname -
***************
*** 9155,9166 ****
is not possible it should be refused (but if it is not detected
result of conversion will be practically empty.)
- - All referenced one-byte-map maps are parsed and read to memory.
- This may cause quite big memory consumption if you have given
- mapping to a lot of charsets and you have many users running elm.
- That mapping information should be shared between processes to
- reduce memory consuption.
-
- All refrences iso2022 maps are parsed and read to memory.
This may cause quite big memory consumption specially because
eastern (multibyte) sets tend to be lot of characters. That
--- 9315,9320 ----
***************
*** 9211,9223 ****
close, indeed the problem was NOT related to 'newmail' but an
AIX bug.
! IBM has release a patch, and the 'aixterm' in AIX 4.3.3 must be
! update with fileset X11.apps.aixterm.4.3.3.26 (PTF U473920) is
! solved to problem."
From: Noam G. Nudelman <no...@mail.biu.ac.il>
- File /usr/share/locale/fi/charset gives charset name utf-8 on
! Linux Mandrake 7.2. This causes that Configure generates mapping
fi utf-8
to elm.mimecharsets. However that seems to have
incorrect mapping. You may want change this to
--- 9365,9378 ----
close, indeed the problem was NOT related to 'newmail' but an
AIX bug.
! IBM has release a patch, and the 'aixterm' in AIX 4.3.3 must
! be update with fileset X11.apps.aixterm.4.3.3.26 (PTF
! U473920) is solved to problem."
From: Noam G. Nudelman <no...@mail.biu.ac.il>
- File /usr/share/locale/fi/charset gives charset name utf-8 on
! Linux Mandrake 7.2. This causes that Configure generates
! mapping
fi utf-8
to elm.mimecharsets. However that seems to have
incorrect mapping. You may want change this to
Index: elm2.4.ME+.109-cvs/shared_libs/iconv/README.ME+
*** elm2.4.ME+.108/shared_libs/iconv/README.ME+ 2002-01-26 13:14:47.000000000 +0200
--- elm2.4.ME+.109-cvs/shared_libs/iconv/README.ME+ 2003-11-15 15:29:45.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/shared_libs/iconv/README.ME+,v 1.5 2001/10/31 18:23:34 hurtta Exp $
Shared library
==============
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/shared_libs/iconv/README.ME+,v 1.6 2003/11/15 13:29:45 hurtta Exp $
Shared library
==============
***************
*** 61,67 ****
Files libdir/elm.rc and ~/.elm/.elmrc
can be used specify some libelmme-iconv.so parameters.
! These is ince such parameter
auto-charset
--- 61,67 ----
Files libdir/elm.rc and ~/.elm/.elmrc
can be used specify some libelmme-iconv.so parameters.
! These is one such parameter
auto-charset
***************
*** 69,74 ****
--- 69,78 ----
define charset, if librray knows conversion from that charset name
to Unicode (namely UCS-2BE (or UCS-2) charset).
+ auto-charset is also applied to charsets on lib/precompiled_sets.c
+ if that charset is marked as unknown (ie. defination of predefined
+ unknown charsets are ignored.)
+
Section of these paramaters names to be prefixed with library
tag (ie. "iconv:"). Shared library specific parameters go after
other parameters on config file. For example
Index: elm2.4.ME+.109-cvs/Configure
*** elm2.4.ME+.108/Configure 2003-08-16 09:58:21.000000000 +0300
--- elm2.4.ME+.109-cvs/Configure 2003-10-19 18:09:58.000000000 +0300
***************
*** 8,14 ****
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.148 2003/08/15 20:03:45 hurtta Exp $
#
: sanity checks
--- 8,14 ----
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.149 2003/10/19 15:09:58 hurtta Exp $
#
: sanity checks
***************
*** 86,92 ****
echo "Extra library suffix: $libsuffix"
;;
-c*)
! config="`expr \"$1\" : '-s\(.*\)'`"
shift
case "$config" in
"")
--- 86,92 ----
echo "Extra library suffix: $libsuffix"
;;
-c*)
! config="`expr \"$1\" : '-c\(.*\)'`"
shift
case "$config" in
"")
Index: elm2.4.ME+.109-cvs/doc/elmbindata.1
*** /tmp/5164-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-11-15 18:08:47.000000000 +0200
--- elm2.4.ME+.109-cvs/doc/elmbindata.1 2003-11-09 18:13:36.000000000 +0200
***************
*** 0 ****
--- 1,92 ----
+ .if n \{\
+ . ds ct "
+ .\}
+ .if t \{\
+ . ds ct \\(co
+ .\}
+ .TH ELMBINDATA 1L "Elm Version 2.4ME+" "Kari Hurtta"
+ .SH NAME
+ elmbindata -
+ .SH SYNOPSIS
+ .B #LIB#/elmbindata
+ [
+ .B \-B
+ .B \-b
+ bindata.bin
+ .B \-d
+ .I "\fIclass\fR=\fIdebugfile\fR:\fIlevel\fR"
+ .B \-I
+ .B \-w
+ target-file
+ .B \-T
+ text-target-directory
+ .B \-S
+ map-source-directory
+ ]
+ .SH DESCRIPTION
+ .I Elmbindata\^
+ is a part of the
+ .B Elm 2.4ME+
+ mail system.
+ .PP
+ Text form map files for charset types ascii and
+ one-byte-map from elm.map.txt directory (and elsewhere)
+ are stored to binary file elm.map.bin/unidata.bin.
+ File is then readed or mmapped (similar than
+ elm.map.bin/bindata.bin). File is generated with
+ elmbindata tool.
+ .PP
+ Options are:
+ .TP 1.0i
+ .B " -G"
+ Read global configuration files only (by default user
+ configuration files are read.)
+ .TP
+ .B " -d \fIclass\fR=\fIdebugfile\fR:\fIlevel\fR "
+ Debug - set specified debug level -
+ Output to "$HOME/ELMBINDATA:debug.info"
+ if
+ .I debugfile
+ is not given. Has no effect unless
+ .I elmmbindata
+ was compiled with debugging enabled.
+ .TP
+ .B " -w" target-file
+ Gives file for output.
+ .TP
+ .B " -T" text-target-directory
+ Gives directory for output of textual (un)dump of binary
+ mapping tables.
+ .B " -I"
+ Use system (or user) bindata file as target file.
+ .TP
+ .B " -B"
+ Use system (or user) bindata file as source file.
+ .TP
+ .B " -b" bindata.bin
+ Use given bindata file as (binary) source file.
+ .TP
+ .B " -S" map-source-directory
+ Specifies directory from where missing map files are directory
+ to elm.map.txt directory (actually given on map-text-dir elm.rc
+ option.)
+ .TP
+ If eitger -B or -b is given, then bindata is generated
+ from textual mapping files.
+ .SH AUTHOR
+ Kari Hurtta
+ .SH FILES
+ #ETC#/elm.rc system RC file
+ .br
+ #ETC#/elm.mimecharsets system charsets file
+ .br
+ $HOME/.elm/elmrc individual RC file
+ .br
+ $HOME/.elm/mime.charsets individual charsets file
+ .br
+ #LIB#/elm.map.bin/bindata.bin Default location for system bindata file
+ .br
+ .SH BUG REPORTS TO
+ Kari Hurtta hurtt...@ozone.fmi.fi
+ .SH COPYRIGHTS
+ \fB\*(ct\fRCopyright 2003 by Kari Hurtta
Index: elm2.4.ME+.109-cvs/doc/elmcharset.1
*** elm2.4.ME+.108/doc/elmcharset.1 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.109-cvs/doc/elmcharset.1 2003-11-09 18:13:36.000000000 +0200
***************
*** 57,62 ****
--- 57,63 ----
option.)
.TP
.B " -w" target-file
+ .TP
Gives file for output.
.B " -M"
Produce MBenum listing instead
***************
*** 74,77 ****
.SH BUG REPORTS TO
Kari Hurtta hurtt...@ozone.fmi.fi
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1999-2002 by Kari Hurtta
--- 75,78 ----
.SH BUG REPORTS TO
Kari Hurtta hurtt...@ozone.fmi.fi
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1999-2003 by Kari Hurtta
Index: elm2.4.ME+.109-cvs/doc/elm-help.0
*** elm2.4.ME+.108/doc/elm-help.0 2002-01-26 13:15:57.000000000 +0200
--- elm2.4.ME+.109-cvs/doc/elm-help.0 2003-11-11 18:18:03.000000000 +0200
***************
*** 43,48 ****
--- 43,50 ----
^N Next unread message, displaying current
if unread, then increment
o Change ELM options
+ O Override charset of current message or
+ tagged messages
p Print current message or tagged messages
P Print text of current message or
tagged messages
Index: elm2.4.ME+.109-cvs/doc/elmrc-info
*** elm2.4.ME+.108/doc/elmrc-info 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/doc/elmrc-info 2003-11-09 18:13:36.000000000 +0200
***************
*** 1,4 ****
! #@(#)$Id: elmrc-info,v 1.54 2003/10/11 08:42:10 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
--- 1,4 ----
! #@(#)$Id: elmrc-info,v 1.56 2003/11/09 16:13:36 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
***************
*** 301,307 ****
pager
# program to use for displaying messages ('builtin' is recommended)
! promptafter
# prompt for a command after the external pager exits?
browser-wildcard-matching
--- 301,310 ----
pager
# program to use for displaying messages ('builtin' is recommended)
! prompt-after-metamail
! # prompt after the metamail exits?
!
! prompt-after-pager
# prompt for a command after the external pager exits?
browser-wildcard-matching
***************
*** 755,761 ****
map-bin-dir
# Default directory for map files (binary) (normally $lib/elm.map.bin)
! # See also: unidata, map-text-dir
unidata
# Binary unidata file, filename can be
--- 758,764 ----
map-bin-dir
# Default directory for map files (binary) (normally $lib/elm.map.bin)
! # See also: unidata, bindata, map-text-dir
unidata
# Binary unidata file, filename can be
***************
*** 768,773 ****
--- 771,791 ----
# directory
# See also: map-bin-dir
+ bindata
+ # Binary charset map file. Includes type=ascii and type=one-byte-map maps
+ # from map-text-dir (and elsewhere). If that variable is set both
+ # on global elm.rc and user's elm.rc then both files may be readed
+ # or mmapped.
+ # Filaname can be
+ # filename File is read from directory
+ # given on map-bin-dir directory
+ # (normally $lib/elm.map.bin)
+ # {rc}/filename File is readed from .elm subdirectory
+ # of user's home
+ # ~/filename File is readed from user's home
+ # directory
+ # See also: map-bin-dir
+
use-library
# Specify tags for shared libraries, which should be loaded
Index: elm2.4.ME+.109-cvs/doc/elmunidata.1
*** elm2.4.ME+.108/doc/elmunidata.1 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.109-cvs/doc/elmunidata.1 2003-11-09 18:13:36.000000000 +0200
***************
*** 47,59 ****
Gives file for output.
.TP
.B " -T" text-target-file
! Gives file for outpu of textual (un)dump of unicode data.
.TP
.B " -I"
Use system unidata file as target file.
.TP
! .B " -I"
Use system unidata file as source file.
.SH AUTHOR
Kari Hurtta
.SH FILES
--- 47,62 ----
Gives file for output.
.TP
.B " -T" text-target-file
! Gives file for output of textual (un)dump of unicode data.
.TP
.B " -I"
Use system unidata file as target file.
.TP
! .B " -B"
Use system unidata file as source file.
+ .TP
+ .B " -b" unidata.bin
+ Use given unidata file as (binary) source file.
.SH AUTHOR
Kari Hurtta
.SH FILES
Index: elm2.4.ME+.109-cvs/doc/Makefile.SH
*** elm2.4.ME+.108/doc/Makefile.SH 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.109-cvs/doc/Makefile.SH 2003-11-09 18:13:35.000000000 +0200
***************
*** 17,23 ****
cat >Makefile <<!GROK!THIS!
#!$make
#
! # $Id: Makefile.SH,v 1.28 2003/05/28 16:43:07 hurtta Exp $
#
# Makefile for the documentation of the ELM mail system
#
--- 17,23 ----
cat >Makefile <<!GROK!THIS!
#!$make
#
! # $Id: Makefile.SH,v 1.29 2003/11/09 16:13:35 hurtta Exp $
#
# Makefile for the documentation of the ELM mail system
#
***************
*** 128,133 ****
--- 128,134 ----
$(MAN)/elmrc-write$(MANEXT) \
$(MAN)/elmterminal$(MANEXT) \
$(MAN)/elmunidata$(MANEXT) \
+ $(MAN)/elmbindata$(MANEXT) \
$(MAN)/elmstringconvert$(MANEXT) \
$(MAN)/prlong$(MANEXT) \
$(MAN)/elmregister$(MANEXT) \
***************
*** 150,155 ****
--- 151,157 ----
$(CATMAN)/elmrc-write$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/elmterminal$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/elmunidata$(CATMANEXT)$(SUFFIX) \
+ $(CATMAN)/elmbindata$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/elmstringconvert$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/prlong$(CATMANEXT)$(SUFFIX) \
$(CATMAN)/elmregister$(CATMANEXT)$(SUFFIX) \
***************
*** 172,177 ****
--- 174,180 ----
catman/elmrc-write$(CATMANEXT)$(SUFFIX) \
catman/elmterminal$(CATMANEXT)$(SUFFIX) \
catman/elmunidata$(CATMANEXT)$(SUFFIX) \
+ catman/elmbindata$(CATMANEXT)$(SUFFIX) \
catman/elmstringconvert$(CATMANEXT)$(SUFFIX) \
catman/prlong$(CATMANEXT)$(SUFFIX) \
catman/elmregister$(CATMANEXT)$(SUFFIX) \
***************
*** 233,238 ****
--- 236,243 ----
$(SED) $(SUBS) < elmterminal.1 > elmterminal.1.subs
elmunidata.1.subs: elmunidata.1
$(SED) $(SUBS) < elmunidata.1 > elmunidata.1.subs
+ elmbindata.1.subs: elmbindata.1
+ $(SED) $(SUBS) < elmbindata.1 > elmbindata.1.subs
fastmail.1.subs: fastmail.1
$(SED) $(SUBS) < fastmail.1 > fastmail.1.subs
frm.1.subs: frm.1
***************
*** 300,305 ****
--- 305,313 ----
$(MAN)/elmunidata$(MANEXT): elmunidata.1.subs
$(REG) copy -m 444 $? $@
+ $(MAN)/elmbindata$(MANEXT): elmbindata.1.subs
+ $(REG) copy -m 444 $? $@
+
$(MAN)/fastmail$(MANEXT): fastmail.1.subs
$(REG) copy -m 444 $? $@
***************
*** 383,388 ****
--- 391,399 ----
$(CATMAN)/elmunidata$(CATMANEXT)$(SUFFIX): catman/elmunidata$(CATMANEXT)$(SUFFIX)
$(REG) copy -m 444 $? $@
+ $(CATMAN)/elmbindata$(CATMANEXT)$(SUFFIX): catman/elmbindata$(CATMANEXT)$(SUFFIX)
+ $(REG) copy -m 444 $? $@
+
$(CATMAN)/elmterminal$(CATMANEXT)$(SUFFIX): catman/elmterminal$(CATMANEXT)$(SUFFIX)
$(REG) copy -m 444 $? $@
***************
*** 496,501 ****
--- 507,521 ----
true ; \
fi
+ catman/elmbindata$(CATMANEXT)$(SUFFIX): elmbindata.1.subs
+ $(MANROFF) $(MANROFF_OPTS) -man $? > catman/elmbindata$(CATMANEXT)
+ @if $(TEST) "$(PACKED)" = y ; then \
+ $(RM) $@ ; \
+ $(PACKER) catman/elmbindata$(CATMANEXT) ; \
+ else \
+ true ; \
+ fi
+
catman/elmterminal$(CATMANEXT)$(SUFFIX): elmterminal.1.subs
$(MANROFF) $(MANROFF_OPTS) -man $? > catman/elmterminal$(CATMANEXT)
Index: elm2.4.ME+.109-cvs/hdrs/bindata.h
*** /tmp/5164-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-11-15 18:08:47.000000000 +0200
--- elm2.4.ME+.109-cvs/hdrs/bindata.h 2003-11-09 18:13:36.000000000 +0200
***************
*** 0 ****
--- 1,47 ----
+ /* $Id: bindata.h,v 1.2 2003/11/09 16:13:36 hurtta Exp $ */
+
+ #ifdef ANSI_C
+ struct bindata_mapped_data; /* Needed for prototype */
+ #endif
+
+ /* bindata.c */
+
+ extern void free_bindata P_((struct bindata_mapped_data * v));
+ extern int write_bindata P_((struct bindata_mapped_data *v,
+ const char *filename));
+ extern int get_bindata P_((struct bindata_mapped_data **ptr,
+ const char *filename));
+
+ extern struct bindata_mapped_data * malloc_bindata P_((int cscount));
+ extern int add_bindata_map P_((struct bindata_mapped_data * v,
+ uint16 bytevector[256],
+ unsigned char revvector[MAP_REV_MAP_DIV],
+ const char *filename));
+ extern void trim_bindata P_((struct bindata_mapped_data * v));
+
+ extern int write_bindata_text P_((struct bindata_mapped_data *v,
+ CONST char * dir,
+ char ***filelist));
+
+ extern struct bindata_mapped_data * default_bindata P_((void));
+
+ extern struct bindata_map * give_mapping P_((struct bindata_mapped_data *v,
+ const char *mapname));
+
+ extern uint16 lookup_binmap P_((unsigned int ch,
+ struct bindata_map *map,
+ int *found));
+ extern unsigned char lookup_binmap_rev P_((struct bindata_map *map,
+ unsigned int val,
+ int * found));
+
+ /* cs_binary.c */
+
+ extern struct bindata_mapped_data *generate_bindata P_((void));
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.109-cvs/hdrs/cs_imp.h
*** elm2.4.ME+.108/hdrs/cs_imp.h 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/cs_imp.h 2003-11-15 17:50:22.000000000 +0200
***************
*** 1,5 ****
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,5 ----
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 189,209 ****
#define ISO2022_SET_COUNT 10
extern struct map_info {
struct charset_type *map_type;
char *map_name;
int map_initialized;
map_init_map *map_init_it;
union {
! int dummy;
! struct map_ascii_upper ascii;
! struct bytemap bytemap;
! uint16 iso646[12];
! struct utfmap utfmap;
!
! /* Indexes to iso2022_map_list[] */
! int setlist[ISO2022_SET_COUNT];
} b;
} map_ascii, map_latin1, map_koi8r, map_cp1251, map_invariant, map_utf8,
map_utf7, map_cp1252, map_koi8u, map_885915,
map_ISO2022_ascii, map_ISO2022_ascii_latin1,
--- 189,241 ----
#define ISO2022_SET_COUNT 10
+ struct iso2022_m {
+ /* Indexes to iso2022_map_list[] */
+ int setlist[ISO2022_SET_COUNT];
+ };
+
+ struct iso646_m {
+ uint16 iso646[12];
+ };
+
+ typedef uint16 cs_map_bindataXX P_((unsigned int ch,
+ struct map_info *map,
+ int *found));
+
+
+ typedef unsigned char cs_map_bindataXX_rev P_((struct map_info *map,
+ unsigned int val,
+ int *found));
+
+ struct bindata_ops {
+ cs_map_bindataXX * map_it;
+ cs_map_bindataXX_rev * map_rev_it;
+ };
+
+
extern struct map_info {
struct charset_type *map_type;
char *map_name;
int map_initialized;
map_init_map *map_init_it;
union {
! void * dummy;
! struct map_ascii_upper * ascii;
! struct bytemap * bytemap;
! struct iso646_m * iso646;
! struct utfmap * utfmap;
! struct iso2022_m * setlist;
} b;
+ union {
+ void * dummy;
+ struct bindata_map * bindata;
+ } c;
+
+ union {
+ void * dummy;
+ struct bindata_ops * binary_ops;
+ } d;
+
} map_ascii, map_latin1, map_koi8r, map_cp1251, map_invariant, map_utf8,
map_utf7, map_cp1252, map_koi8u, map_885915,
map_ISO2022_ascii, map_ISO2022_ascii_latin1,
***************
*** 316,324 ****
extern int compress_unicode P_((uint16 *words, int *len));
extern struct charset_state * new_state_1 P_((charset_t set));
! extern FILE * open_mapname P_((const char *name, char **fn,
! int *index
! ));
extern struct charcode_info precompiled_sets[];
extern CONST int precompiled_size;
--- 348,355 ----
extern int compress_unicode P_((uint16 *words, int *len));
extern struct charset_state * new_state_1 P_((charset_t set));
! extern FILE * open_mapname P_((const char *name, char **fn));
! extern int is_on_mapdir P_((CONST char *name));
extern struct charcode_info precompiled_sets[];
extern CONST int precompiled_size;
***************
*** 370,376 ****
void read_map_format_a P_((const char *name, struct map_info *map_info,
struct iso2022_mapinfo *iso2022_map_info,
! FILE *F, int index_number,
set_map_callmap * pass_caller,
int field_count,
enum field_type *vector,
--- 401,407 ----
void read_map_format_a P_((const char *name, struct map_info *map_info,
struct iso2022_mapinfo *iso2022_map_info,
! FILE *F,
set_map_callmap * pass_caller,
int field_count,
enum field_type *vector,
***************
*** 445,450 ****
--- 476,485 ----
int setcount,
struct setlist *old_info));
+ /* bindata.c */
+
+ extern struct bindata_mapped_data * default_bindata P_((void));
+
/*
* Local Variables:
* mode:c
Index: elm2.4.ME+.109-cvs/hdrs/defs.h
*** elm2.4.ME+.108/hdrs/defs.h 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/defs.h 2003-11-10 22:37:46.000000000 +0200
***************
*** 1,7 ****
! /* $Id: defs.h,v 1.39 2003/10/01 17:34:34 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* $Id: defs.h,v 1.40 2003/11/10 20:37:46 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 488,494 ****
mime_t mime_rec; /** MIME information for this message **/
/* == charset_t, but it is not yet declared ... */
! struct charcode_info * header_charset; /* charset for headers ... */
struct mbx_hdr_info * mbx_info;
--- 488,495 ----
mime_t mime_rec; /** MIME information for this message **/
/* == charset_t, but it is not yet declared ... */
! struct charcode_info * header_charset; /* charset for headers ... */
! struct charcode_info * override_charset; /* For O)verride command */
struct mbx_hdr_info * mbx_info;
Index: elm2.4.ME+.109-cvs/hdrs/elmlib.h
*** elm2.4.ME+.108/hdrs/elmlib.h 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/elmlib.h 2003-11-09 18:13:36.000000000 +0200
***************
*** 1,7 ****
! /* $Id: elmlib.h,v 1.196 2003/10/11 11:35:49 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.196 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmlib.h,v 1.198 2003/11/09 16:13:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.198 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 645,650 ****
--- 645,651 ----
extern int init_defaults P_((void));
#define READ_FLAG_UNIDATA_INIT 1 /* Called from elmunidata routine */
+ #define READ_FLAG_BINDATA_INIT 2 /* Called from elmbindata routine */
extern int read_rc_file P_((int flags));
extern void post_init_check P_((int flag)); /* read_rc_file calls this */
***************
*** 668,673 ****
--- 669,678 ----
extern char unidata_path[SLEN]; /* $lib/elm.map.bin */
extern char raw_unidata_path[SLEN]; /* $lib/elm.map.bin */
+ extern char bindata_path[SLEN]; /* $lib/elm.map.bin */
+ extern char bindata_path_global[SLEN]; /* Used before user elm.rc is read */
+ extern char raw_bindata_path[SLEN]; /* $lib/elm.map.bin */
+
extern char user_rc_file[SLEN]; /* .elm/elmrc */
extern char user_text_file[SLEN]; /* .elm/aliases.text */
extern char user_data_file[SLEN]; /* .elm/aliases */
***************
*** 840,845 ****
--- 845,851 ----
extern char printout[SLEN]; /* how to print messages */
extern char raw_printout[SLEN]; /* unexpanded how to print messages */
extern int prompt_after_pager; /* flag: prompt after pager exits */
+ extern int prompt_after_metamail; /* flag: prompt after metamail exits */
extern int quote_forward; /* flag: fwd'd msgs quoted like replies */
extern int readdatapercentinc; /* data percent increment during new mbox read */
extern int readmsginc; /* msg cnt increment during new mbox read */
Index: elm2.4.ME+.109-cvs/hdrs/elmutil.h
*** elm2.4.ME+.108/hdrs/elmutil.h 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/elmutil.h 2003-11-09 18:13:36.000000000 +0200
***************
*** 1,7 ****
! /* $Id: elmutil.h,v 1.10 2003/10/01 17:34:34 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* $Id: elmutil.h,v 1.11 2003/11/09 16:13:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 31,37 ****
/******** and another string for the copyright notice ********/
static char copyright[] = {
! "@(#) (C) Copyright 1986,1987, Dave Taylor\n@(#) (C) Copyright 1988-1992, The Usenet Community Trust\n" };
/******** global variables accessable by all pieces of the program *******/
--- 31,39 ----
/******** and another string for the copyright notice ********/
static char copyright[] = {
! "@(#) (C) Copyright 1986,1987, Dave Taylor\n@(#)\n\
! @(#) (C) Copyright 1988-1992, The Usenet Community Trust\n\
! @(#) (C) Copyright 1996-2003, Kari Hurtta\n" };
/******** global variables accessable by all pieces of the program *******/
Index: elm2.4.ME+.109-cvs/hdrs/me.h
*** elm2.4.ME+.108/hdrs/me.h 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/me.h 2003-11-10 22:37:46.000000000 +0200
***************
*** 1,7 ****
! /* $Id: me.h,v 1.76 2003/10/05 16:07:27 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! /* $Id: me.h,v 1.77 2003/11/10 20:37:46 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.77 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 747,752 ****
--- 747,754 ----
/* showmsg.c */
+ extern void OverrideCharset P_((struct MailboxView *mailbox));
+
extern int show_msg P_((struct header_rec *current_header,
FILE *infile, int current, int message_count));
Index: elm2.4.ME+.109-cvs/hdrs/melib.h
*** elm2.4.ME+.108/hdrs/melib.h 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/melib.h 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! /* $Id: melib.h,v 1.38 2003/08/04 14:58:56 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! /* $Id: melib.h,v 1.40 2003/11/11 16:18:04 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 26,32 ****
charset_t defcharset,
struct header_rec *mss));
! extern int pgp_selector P_((mime_t *p));
extern void pgp_SG_decoder P_((mime_t *body, mime_t *sign,
in_state_t *state_in,
--- 26,32 ----
charset_t defcharset,
struct header_rec *mss));
! extern int pgp_selector P_((mime_t *p, struct header_rec * hdr));
extern void pgp_SG_decoder P_((mime_t *body, mime_t *sign,
in_state_t *state_in,
***************
*** 100,106 ****
extern int is_rfc1522 P_((char *));
! extern int set_filter P_((mime_t *, out_state_t *, charset_t));
extern FILE *arrange_decoded P_((mime_t *ptr,in_state_t *state_in,
out_state_t *state_out,
in_state_t *newstate2,
--- 100,108 ----
extern int is_rfc1522 P_((char *));
! extern int set_filter P_((mime_t *ptr, out_state_t *stat,
! charset_t default_content_charset,
! charset_t override_charset));
extern FILE *arrange_decoded P_((mime_t *ptr,in_state_t *state_in,
out_state_t *state_out,
in_state_t *newstate2,
***************
*** 208,220 ****
extern void mime_selector_free P_((struct mime_selected_handler **p));
! extern int mime_classify_media P_((mime_t *p));
! extern int mime_classify_subparts P_((mime_t *ptr));
extern int mime_classify_best_alternative P_((mime_t *ptr,
! mime_t **ret));
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
! typedef int mime_run_selector P_((mime_t *p));
typedef mime_run_selector *mime_run_selector_t;
typedef void encrypted_decoder P_((mime_t *init, mime_t *data,
--- 210,223 ----
extern void mime_selector_free P_((struct mime_selected_handler **p));
! extern int mime_classify_media P_((mime_t *p,struct header_rec * hdr));
! extern int mime_classify_subparts P_((mime_t *ptr, struct header_rec * hdr));
extern int mime_classify_best_alternative P_((mime_t *ptr,
! mime_t **ret,
! struct header_rec * hdr));
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
! typedef int mime_run_selector P_((mime_t *p,struct header_rec * hdr));
typedef mime_run_selector *mime_run_selector_t;
typedef void encrypted_decoder P_((mime_t *init, mime_t *data,
***************
*** 332,338 ****
out_state_t *s_out,
charset_t defcharset,
struct header_rec *mss));
! extern int partial_selector P_((mime_t *p));
/* --------------- */
--- 335,341 ----
out_state_t *s_out,
charset_t defcharset,
struct header_rec *mss));
! extern int partial_selector P_((mime_t *p, struct header_rec * hdr));
/* --------------- */
Index: elm2.4.ME+.109-cvs/hdrs/mmaputil.h
*** /tmp/5164-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-11-15 18:08:47.000000000 +0200
--- elm2.4.ME+.109-cvs/hdrs/mmaputil.h 2003-11-09 18:13:36.000000000 +0200
***************
*** 0 ****
--- 1,18 ----
+ /* $Id: mmaputil.h,v 1.2 2003/11/09 16:13:36 hurtta Exp $ */
+
+ extern uint16 SWAP P_((int b));
+ extern uint16 pages P_((size_t len, int pagesize));
+
+ extern int write_range P_((int fd, off_t offset, size_t length,
+ unsigned char *ptr));
+
+ extern int read_range P_((int fd, off_t offset, size_t length,
+ unsigned char *ptr));
+
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.109-cvs/hdrs/save_opts.h
*** elm2.4.ME+.108/hdrs/save_opts.h 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/save_opts.h 2003-11-09 18:13:36.000000000 +0200
***************
*** 1,7 ****
! /* @(#)$Id: save_opts.h,v 1.72 2003/10/11 08:42:10 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.72 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* @(#)$Id: save_opts.h,v 1.74 2003/11/09 16:13:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.74 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 171,177 ****
static char *SIGS[]= {"remotesignature","localsignature",NULL};
static char *ALWAYS[]= {"alwayskeep", "!alwaysstore",NULL};
! static char *MAILCAPS[] = { "internal-mailcaps", "metamail-mailcaps", NULL};
static char * USERLEVELS[] = { "beginner", "intermediate", "expert", NULL };
static enumerate_list USERLEVEL = {3, &(USERLEVELS[0]) };
--- 171,179 ----
static char *SIGS[]= {"remotesignature","localsignature",NULL};
static char *ALWAYS[]= {"alwayskeep", "!alwaysstore",NULL};
! static char *MAILCAPS[] = { "internal-mailcaps", "metamail-mailcaps", NULL};
! static char *PROMPTAFTER[] = { "prompt-after-metamail",
! "prompt-after-pager", NULL};
static char * USERLEVELS[] = { "beginner", "intermediate", "expert", NULL };
static enumerate_list USERLEVEL = {3, &(USERLEVELS[0]) };
***************
*** 237,242 ****
--- 239,247 ----
#ifdef BACKGROUD_PROCESSES
{ "background-wait-time",-1L,ZZZ_DT_NUM(&background_wait_time), 0, NULL },
#endif
+ {"bindata", -1L,ZZZ_DT_STR(raw_bindata_path),
+ sizeof raw_bindata_path, NULL },
+
/* {"bounce", -1L,ZZZ_DT_SYN("bounceback"), 0, NULL},
{"bounceback", -1L,ZZZ_DT_NUM(&bounceback), 0, NULL},
*/
***************
*** 389,395 ****
sizeof prefixchars, NULL},
{"print", -1L,ZZZ_DT_STR(raw_printout), sizeof raw_printout, NULL},
{"printmail", -1L,ZZZ_DT_SYN("print"), 0, NULL},
! {"promptafter", -1L,ZZZ_DT_BOL(&prompt_after_pager), 0, NULL},
{"question", -1L,ZZZ_DT_SYN("ask"), 0, NULL},
{"quoteforward", -1L,ZZZ_DT_BOL("e_forward), 0, NULL},
{"readdatapercentinc", -1L,ZZZ_DT_NUM(&readdatapercentinc), 0, NULL},
--- 394,402 ----
sizeof prefixchars, NULL},
{"print", -1L,ZZZ_DT_STR(raw_printout), sizeof raw_printout, NULL},
{"printmail", -1L,ZZZ_DT_SYN("print"), 0, NULL},
! {"prompt-after-metamail",-1L,ZZZ_DT_BOL(&prompt_after_metamail), 0, NULL},
! {"prompt-after-pager", -1L,ZZZ_DT_BOL(&prompt_after_pager), 0, NULL},
! {"promptafter", -1L,ZZZ_DT_MLT(PROMPTAFTER), 0, NULL },
{"question", -1L,ZZZ_DT_SYN("ask"), 0, NULL},
{"quoteforward", -1L,ZZZ_DT_BOL("e_forward), 0, NULL},
{"readdatapercentinc", -1L,ZZZ_DT_NUM(&readdatapercentinc), 0, NULL},
Index: elm2.4.ME+.109-cvs/hdrs/s_elm.h
*** elm2.4.ME+.108/hdrs/s_elm.h 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/s_elm.h 2003-11-10 22:37:46.000000000 +0200
***************
*** 989,995 ****
#define ElmUnknownIMAPCharset 0x7f8
#define ElmUnknownDef1Charset 0x7f9
#define ElmFailedReopenFolder 0x7fa
! #define ElmNoBinMapDir 0x7fb
#define ElmNoUnicodeData 0x7fc
#define ElmUnidataSetting 0x7fd
#define ElmMailServInfoSavedIn 0x7fe
--- 989,995 ----
#define ElmUnknownIMAPCharset 0x7f8
#define ElmUnknownDef1Charset 0x7f9
#define ElmFailedReopenFolder 0x7fa
! #define ElmNoBinMapDirX 0x7fb
#define ElmNoUnicodeData 0x7fc
#define ElmUnidataSetting 0x7fd
#define ElmMailServInfoSavedIn 0x7fe
***************
*** 1085,1087 ****
--- 1085,1097 ----
#define ElmHdrEditCommentNo 0x858
#define ElmHdrNotSupported 0x859
#define ElmHdrGarbage 0x85a
+ #define ElmBinaryMapData 0x85c
+ #define ElmOverrideCharset 0x85d
+ #define ElmNoMailToOverride 0x85e
+ #define ElmOverrideTagged 0x85f
+ #define ElmOverrideTaggedOne 0x860
+ #define ElmOverrideCurrentOver 0x861
+ #define ElmOverrideCurrent 0x862
+ #define ElmOverrideCSprompt 0x863
+ #define ElmUnknowCharset 0x864
+ #define ElmCharsetBadOverride 0x865
Index: elm2.4.ME+.109-cvs/hdrs/s_me.h
*** elm2.4.ME+.108/hdrs/s_me.h 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/hdrs/s_me.h 2003-11-10 22:37:46.000000000 +0200
***************
*** 325,327 ****
--- 325,331 ----
#define MeCorrupted 0x159
#define MeFragmentedSender 0x15a
#define MeAssembleCommand 0x15b
+ #define MeCreateDir 0x15c
+ #define MeCantCreateDir 0x15d
+ #define MeDecodeCharsetOverride 0x15e
+ #define MeDecodeUseOtoOverride 0x15f
Index: elm2.4.ME+.109-cvs/hdrs/unidata.h
*** elm2.4.ME+.108/hdrs/unidata.h 2002-01-26 13:15:58.000000000 +0200
--- elm2.4.ME+.109-cvs/hdrs/unidata.h 2003-11-09 18:13:36.000000000 +0200
***************
*** 1,7 ****
! /* $Id: unidata.h,v 1.5 2002/01/23 15:49:59 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! /* $Id: unidata.h,v 1.6 2003/11/09 16:13:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 9,32 ****
/* unidata.c --------------------------------------------------- */
- extern uint16 SWAP P_((int b));
- extern uint16 pages P_((size_t len, int pagesize));
- extern int read_range P_((int fd, off_t offset, size_t length,
- unsigned char *ptr));
- extern int write_range P_((int fd, off_t offset, size_t length,
- unsigned char *ptr));
#ifdef ANSI_C
! struct mapped_data; /* Needed for prototype */
#endif
! extern int get_unidata P_((struct mapped_data ** ptr, CONST char *filename));
! extern int read_unidata_text P_((struct mapped_data **ptr,
CONST char *filename, FILE *logfile,
int silent_gaps));
! extern void free_unidata P_((struct mapped_data * v));
! extern int write_unidata P_((struct mapped_data *v,CONST char *filename));
! extern int write_unidata_text P_((struct mapped_data *v, FILE *f));
/* UNICODE character types */
--- 9,26 ----
/* unidata.c --------------------------------------------------- */
#ifdef ANSI_C
! struct unidata_mapped_data; /* Needed for prototype */
#endif
! extern int get_unidata P_((struct unidata_mapped_data ** ptr, CONST char *filename));
! extern int read_unidata_text P_((struct unidata_mapped_data **ptr,
CONST char *filename, FILE *logfile,
int silent_gaps));
! extern void free_unidata P_((struct unidata_mapped_data * v));
! extern int write_unidata P_((struct unidata_mapped_data *v,CONST char *filename));
! extern int write_unidata_text P_((struct unidata_mapped_data *v, FILE *f));
/* UNICODE character types */
***************
*** 105,118 ****
uint16 decomp_len; /* decomposition length */
};
! /* Note: size == 0 if not unicode decompression wanted
! size : on bytes (sizeof)
Returns 0 = failure (not valid character)
1 = succeed
-1 = database bad
*/
! extern int unicode_lookup_character P_((struct mapped_data *v,
unsigned int unicode,
struct character_information *info,
uint16 unicode_out[],
--- 99,112 ----
uint16 decomp_len; /* decomposition length */
};
! /* Note: buffer_len == 0 if not unicode decompression wanted
! buffer_len : number of unicode characters
Returns 0 = failure (not valid character)
1 = succeed
-1 = database bad
*/
! extern int unicode_lookup_character P_((struct unidata_mapped_data *v,
unsigned int unicode,
struct character_information *info,
uint16 unicode_out[],
***************
*** 159,165 ****
= -1 incomplete input
*/
! int unicode_compress_input P_((struct mapped_data *v,
uint16 *unicode_res,
uint16 unicode_inp[],
int len,
--- 153,159 ----
= -1 incomplete input
*/
! int unicode_compress_input P_((struct unidata_mapped_data *v,
uint16 *unicode_res,
uint16 unicode_inp[],
int len,
***************
*** 167,171 ****
/* unicode.c --------------------------------------------------- */
! extern struct mapped_data * default_unidata P_((void));
--- 161,165 ----
/* unicode.c --------------------------------------------------- */
! extern struct unidata_mapped_data * default_unidata P_((void));
Index: elm2.4.ME+.109-cvs/lib/bindata.c
*** /tmp/5164-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-11-15 18:08:47.000000000 +0200
--- elm2.4.ME+.109-cvs/lib/bindata.c 2003-11-15 17:51:20.000000000 +0200
***************
*** 0 ****
--- 1,1179 ----
+ static char rcsid[] = "@(#)$Id: bindata.c,v 1.3 2003/11/15 15:51:20 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+ #include "headers.h"
+ #include "mmaputil.h"
+ #include "cs_imp.h"
+ #include "s_me.h"
+ #include "bindata.h"
+
+ #include <errno.h>
+ #ifndef ANSI_C
+ extern int errno;
+ #endif
+
+ DEBUG_VAR(Debug,__FILE__,"charset");
+
+ static unsigned char * us_str P_((char *str));
+ static unsigned char * us_str(str)
+ char *str;
+ {
+ return (unsigned char *)str;
+ }
+
+ #ifdef MMAP
+ #include <sys/mman.h>
+
+ #ifndef MAP_FAILED
+ #define MAP_FAILED (void *)(-1)
+ #endif
+
+ #endif
+
+ #define TEXT_MAGIC "ELMME+\n"
+ /* TEXT_MAGIC is 8 bytes (including \0) */
+
+ struct bindata_header_1 {
+ uint8 text_magic[sizeof TEXT_MAGIC];
+ uint16 magic;
+ uint16 header_size;
+ uint16 page_size;
+ uint16 map_rev_map_div; /* MAP_REV_MAP_DIV */
+
+ uint16 csets_size;
+ uint16 csets_pagecount;
+ };
+
+ #define MAP_FILENAME_SIZE 32
+
+ struct csets_1 { /* both type 'binary' and 'ascii_set' is used same record */
+ uint8 filename[MAP_FILENAME_SIZE]; /* filename on elm.map.txt
+ zero filled */
+ uint16 map[256]; /* charset byte to unicode */
+ uint8 revmap[MAP_REV_MAP_DIV]; /* unicode to charset byte mapping */
+ };
+
+
+ #define BINDATA_magic 0xFB01
+
+ enum bindata_format { bindata_bad = 0, bindata_format_1 = BINDATA_magic };
+
+ struct bindata_format_1 {
+ int byte_swapped;
+ int mmapped;
+
+ struct bindata_header_1 *header;
+ size_t header_length;
+
+ struct csets_1 *csets;
+ size_t csets_length;
+ off_t csets_offset;
+ int csets_count;
+ };
+
+
+ /* This macro requires ANSI C preprocessor */
+ #if __STDC__
+ #define SYSCALL(x) { int ret_=x; int err_=errno;\
+ if (ret_ == -1) \
+ DPRINT(Debug,1,(&Debug,"bindata: syscall %s failed: errno=%d (%s)\n", \
+ #x,err_,error_description(err_))); }
+ #else
+ #define SYSCALL(x) x
+ #endif
+
+ static void free_bindata_1 P_((struct bindata_format_1 *v));
+ static void free_bindata_1(v)
+ struct bindata_format_1 *v;
+ {
+ if (!v->mmapped) { /* malloced */
+ if (v->header_length)
+ free(v->header);
+ if (v->csets_length)
+ free(v->csets);
+ } else {
+ #ifdef MMAP
+ if (v->header_length)
+ SYSCALL(munmap((void *)v->header,v->header_length));
+ if (v->csets_length)
+ SYSCALL(munmap((void *)v->csets,v->csets_length));
+ #else
+ panic("BINDATA PANIC",__FILE__,__LINE__,"free_bindata_1",
+ "bindata: Internal error -- mmap not available",0);
+ #endif
+ v->mmapped = 0;
+ }
+ v->header = NULL;
+ v->csets = NULL;
+
+ v->header_length = 0;
+ v->csets_length = 0;
+ }
+
+ /* Allocate maximun needed space */
+ static void malloc_bindata_1 P_((struct bindata_format_1 *v, int cscount));
+ static void malloc_bindata_1(v,cscount)
+ struct bindata_format_1 *v;
+ int cscount;
+ {
+ #ifdef MMAP
+ uint16 pagesize = getpagesize();
+ #else
+ uint16 pagesize = 512;
+ #endif
+ uint16 header_pages, csets_pages;
+
+ v->byte_swapped = 0; /* generated -- not swapped */
+ v->mmapped = 0; /* malloced -- not mapped */
+
+ v->header_length = sizeof (struct bindata_header_1);
+ v->header = safe_malloc(v->header_length);
+ header_pages = pages(v->header_length,pagesize);
+
+
+ v->csets_length = cscount * sizeof (struct csets_1);
+ v->csets = safe_malloc(v->csets_length);
+ csets_pages = pages(v->csets_length,pagesize);
+ v->csets_count = 0;
+ v->csets_offset = pagesize * (off_t) header_pages;
+
+ strfcpy((char *)v->header->text_magic,
+ TEXT_MAGIC,sizeof v->header->text_magic);
+ v->header->magic = bindata_format_1;
+ v->header->header_size = sizeof (struct bindata_header_1);
+ v->header->page_size = pagesize;
+ v->header->map_rev_map_div = MAP_REV_MAP_DIV;
+ v->header->csets_size = sizeof (struct csets_1);
+ v->header->csets_pagecount = csets_pages;
+ }
+
+ #define READ_VALUE(x,byte_swapped) (byte_swapped ? SWAP(x) : x)
+
+ static void dump_header P_((struct bindata_format_1 *v,
+ int byte_swapped,
+ CONST char *filename));
+
+ static int write_bindata_1 P_((struct bindata_format_1 *v, int fd,
+ CONST char *filename));
+ static int write_bindata_1(v, fd, filename)
+ struct bindata_format_1 *v;
+ int fd;
+ CONST char *filename;
+ {
+ uint16 pagesize = READ_VALUE(v->header->page_size,v->byte_swapped);
+ uint16 csets_pages = READ_VALUE(v->header->csets_pagecount,
+ v->byte_swapped);
+
+ if (!write_range(fd,0,v->header_length,(unsigned char*)v->header)) {
+ int err = errno;
+
+ DPRINT(Debug,1,(&Debug,
+ "bindata: write_range failed: errno=%d (%s)\n", \
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ filename, error_description(err));
+
+ return 0;
+ }
+
+ if (!write_range(fd,v->csets_offset,v->csets_length,
+ (unsigned char *)(v->csets))) {
+ int err = errno;
+
+ DPRINT(Debug,1,(&Debug,
+ "bindata: write_range failed: errno=%d (%s)\n", \
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ filename, error_description(err));
+
+ return 0;
+ }
+
+ if (v->csets_length < csets_pages * (size_t) pagesize) {
+ /* Be sure that file is big enough */
+
+ if (!write_range(fd,
+ v->csets_offset +
+ csets_pages * (off_t) pagesize -1,
+ 1, us_str(" "))) {
+ int err = errno;
+
+ DPRINT(Debug,1,(&Debug,
+ "bindata: write_range failed: errno=%d (%s)\n", \
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ filename, error_description(err));
+ return 0;
+ }
+ }
+ dump_header(v,v->byte_swapped,filename);
+ return 1;
+ }
+
+ static void dump_header(v,byte_swapped,filename)
+ struct bindata_format_1 *v;
+ int byte_swapped;
+ CONST char *filename;
+ {
+ if (v->header) {
+ DPRINT(Debug,40,(&Debug,"============ Header dump: %-15s =======\n",
+ filename));
+ DPRINT(Debug,40,(&Debug,"BYTE SWAPPED = %d\n",byte_swapped));
+ DPRINT(Debug,40,(&Debug,
+ "magic %04X header_size %04X page_size %04X\n",
+ READ_VALUE(v->header->magic,v->byte_swapped),
+ READ_VALUE(v->header->header_size,v->byte_swapped),
+ READ_VALUE(v->header->page_size,v->byte_swapped)));
+ DPRINT(Debug,40,(&Debug,
+ "map_rev_map_div %04X csets_size %04X\n",
+ READ_VALUE(v->header->map_rev_map_div,v->byte_swapped),
+ READ_VALUE(v->header->csets_size,v->byte_swapped)));
+ DPRINT(Debug,40,(&Debug,
+ "csets_pagecount %04X\n",
+ READ_VALUE(v->header->csets_pagecount,v->byte_swapped)));
+ DPRINT(Debug,40,(&Debug,"============ End dump: %-15s =======\n",
+ filename));
+ }
+
+ }
+
+
+ static int calculate_sizes P_((struct bindata_format_1 *v,
+ CONST char *filename));
+
+ static int calculate_sizes (v,filename)
+ struct bindata_format_1 *v;
+ CONST char *filename;
+ {
+ uint16 pagesize = READ_VALUE(v->header->page_size,v->byte_swapped);
+ uint16 header_pages, csets_pages;
+
+ if (READ_VALUE(v->header->header_size,v->byte_swapped) !=
+ sizeof (struct bindata_header_1) ||
+ READ_VALUE(v->header->csets_size,v->byte_swapped) !=
+ sizeof (struct csets_1)) {
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeCorruptedMapfile,
+ "Mapfile %.30s is corrupted"),
+ filename);
+ DPRINT(Debug,1,(&Debug,"calculate_sizes failed #1 -- sizeof check\n"));
+ return 0;
+ }
+
+ if (READ_VALUE(v->header->map_rev_map_div,v->byte_swapped) !=
+ MAP_REV_MAP_DIV) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeCorruptedMapfile,
+ "Mapfile %.30s is corrupted"),
+ filename);
+ DPRINT(Debug,1,(&Debug,"calculate_sizes failed #2 -- MAP_REV_MAP_DIV\n"));
+ return 0;
+
+ }
+
+ header_pages = pages(v->header_length,pagesize);
+ v->csets_offset = pagesize * (off_t) header_pages;
+ csets_pages = READ_VALUE(v->header->csets_pagecount,v->byte_swapped);
+
+ v->csets_length = pagesize * (off_t) csets_pages;
+ /* May give too big value */
+ v->csets_count = v->csets_length / sizeof (struct csets_1);
+
+ return 1;
+ }
+
+ static void debug_output P_((struct bindata_format_1 *v,
+ int status, int pagesize, char *str,
+ CONST char *filename));
+ static void debug_output(v,status,pagesize,str,filename)
+ struct bindata_format_1 *v;
+ int status;
+ int pagesize;
+ char *str;
+ CONST char *filename;
+ {
+ DPRINT(Debug,1,(&Debug,
+ "%s: %s: status=%d, csets_count=%d, pagesize=%d\n",
+ filename,str,status,v->csets_count, pagesize));
+ DPRINT(Debug,1,(&Debug,
+ "%s: %s: header_length=%d, csets_length=%d,\n",
+ filename,str,v->header_length,v->csets_length));
+
+ if (v->header) {
+ DPRINT(Debug,5,(&Debug,
+ "%s: %s: swapped=%d, page_size=%d, csets_pages=%d\n",
+ filename,str,v->byte_swapped,
+ READ_VALUE(v->header->page_size,
+ v->byte_swapped),
+ READ_VALUE(v->header->csets_pagecount,
+ v->byte_swapped)));
+ }
+ }
+
+
+ static int read_bindata_1 P_((struct bindata_format_1 *v, int fd,
+ int byte_swapped, CONST char *filename));
+ static int read_bindata_1(v, fd, byte_swapped, filename)
+ struct bindata_format_1 *v;
+ int fd;
+ int byte_swapped;
+ CONST char *filename;
+ {
+ int status = 0;
+ uint16 pagesize;
+
+ v->byte_swapped = byte_swapped;
+ v->mmapped = 0;
+
+ v->header_length = sizeof (struct bindata_header_1);
+ v->header = safe_malloc(v->header_length);
+
+ if (!read_range(fd,0,v->header_length,(unsigned char*)v->header)) {
+ int err = errno;
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileUnreadable,
+ "File %.50s is unreadable: %s"),
+ filename, error_description(err));
+
+ status = 0;
+ goto fail_1;
+ }
+
+ pagesize = READ_VALUE(v->header->page_size,v->byte_swapped);
+
+ dump_header(v,byte_swapped,filename);
+ if (!calculate_sizes(v,filename)) {
+ status = 0;
+ goto fail_1;
+ }
+
+ v->csets = safe_malloc(v->csets_length);
+ if (!read_range(fd,v->csets_offset,v->csets_length,
+ (unsigned char *)(v->csets))) {
+ int err = errno;
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileUnreadable,
+ "File %.50s is unreadable: %s"),
+ filename, error_description(err));
+
+ status = 0;
+ goto fail_2;
+ }
+
+ status = 1;
+
+ if (!status) {
+
+ fail_2:
+ free(v->csets);
+ v->csets = NULL;
+ v->csets_length = 0;
+
+ fail_1:
+ free(v->header);
+ v->header = NULL;
+ v->header_length = 0;
+
+ }
+
+ debug_output(v,status,pagesize,"read",filename);
+
+ return status;
+ }
+
+
+ static int mmap_bindata_1 P_((struct bindata_format_1 *v, int fd,
+ int byte_swapped, CONST char *filename));
+ static int mmap_bindata_1(v, fd, byte_swapped, filename)
+ struct bindata_format_1 *v;
+ int fd;
+ int byte_swapped;
+ CONST char *filename;
+ {
+ int status = 0;
+ #ifdef MMAP
+ uint16 real_pagesize = getpagesize();
+ uint16 pagesize = 0;
+ void * result;
+
+ v->byte_swapped = byte_swapped;
+ v->mmapped = 1;
+
+ v->header_length = sizeof (struct bindata_header_1);
+ result = mmap(0,v->header_length,PROT_READ,MAP_SHARED,fd,0);
+ if (result == MAP_FAILED) {
+ int err = errno;
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFailedMMap,
+ "Failed to mmap %.50s: %30s"),
+ filename, error_description(err));
+
+ v->header = NULL;
+ v->header_length = 0;
+ status = 0;
+ goto fail_1;
+ }
+
+ v->header = result;
+ pagesize = READ_VALUE(v->header->page_size,v->byte_swapped);
+
+ if (pagesize < real_pagesize || pagesize % real_pagesize != 0) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeIncompatiblePagesize,
+ "Pagesize of %.50s (%d) incompatible with system pagesize (%d)"),
+ filename, pagesize,real_pagesize);
+ status = 0;
+ goto fail_2;
+ }
+
+ dump_header(v,byte_swapped,filename);
+ if (!calculate_sizes(v,filename)) {
+ status = 0;
+ goto fail_2;
+ }
+
+ result = mmap(0,v->csets_length,PROT_READ,MAP_SHARED,fd,
+ v->csets_offset);
+ if (result == MAP_FAILED) {
+ int err = errno;
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFailedMMap,
+ "Failed to mmap %.50s: %30s"),
+ filename, error_description(err));
+
+ v->csets = NULL;
+ v->csets_length = 0;
+ status = 0;
+ goto fail_2;
+ }
+ v->csets = result;
+
+
+ status = 1;
+
+ if (!status) {
+
+ fail_2:
+ SYSCALL(munmap((void *)v->header,v->header_length));
+ v->header = NULL;
+ v->header_length = 0;
+ }
+
+ fail_1:
+
+
+ debug_output(v,status,pagesize,"mmap",filename);
+ #endif
+
+ return status;
+ }
+
+ static void trim_bindata_1 P_((struct bindata_format_1 *v));
+ static void trim_bindata_1(v)
+ struct bindata_format_1 *v;
+ {
+ /* If malloced, truncate according of usage */
+ if (!v->mmapped && !v->byte_swapped) {
+ uint16 pagesize = v->header->page_size;
+
+ int n = v->csets_count;
+ if (n < 1) n = 1;
+
+ v->csets_length = n * sizeof (struct csets_1);
+ v->header->csets_pagecount = pages(v->csets_length,pagesize);
+ v->csets = safe_realloc(v->csets,v->csets_length);
+
+ }
+
+ /* zero fill unused area */
+ if (v->csets_count * sizeof (struct csets_1) < v->csets_length) {
+
+ /* bzero is defined on hdrs/defs.h
+ * notice pointer arithmetic
+ */
+ bzero((void *)(v->csets + v->csets_count),
+ v->csets_length - v->csets_count * sizeof (struct csets_1));
+ }
+ }
+
+
+ struct bindata_mapped_data {
+ enum bindata_format format;
+ union {
+ struct bindata_format_1 f1;
+ } v;
+ };
+
+ void free_bindata(v)
+ struct bindata_mapped_data * v;
+ {
+ switch(v->format) {
+ case bindata_format_1: free_bindata_1(&(v->v.f1));
+ break;
+ }
+ v->format = bindata_bad;
+ free(v);
+ }
+
+
+ int write_bindata(v,filename)
+ struct bindata_mapped_data *v;
+ CONST char *filename;
+ {
+ char *tmpname;
+ int fd, err;
+ int status = 0;
+
+ if (0 != access(filename,WRITE_ACCESS)) {
+ int err = errno;
+
+ DPRINT(Debug,1,(&Debug,
+ "bindata: access failed: errno=%d (%s)\n", \
+ err,error_description(err)));
+
+ if (err != ENOENT) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ filename, error_description(err));
+
+ return 0;
+ }
+ }
+
+ tmpname = safe_strdup(filename);
+ tmpname = strmcat(tmpname,".N");
+
+ err = can_open(tmpname,"w");
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "bindata: can_open failed: code=%d (%s)\n", \
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ tmpname, error_description(err));
+
+ status = 0;
+ goto fail;
+ }
+
+ fd = open(tmpname,O_WRONLY|O_CREAT|O_EXCL,0644);
+ if (-1 == fd) {
+ int err = errno;
+
+ DPRINT(Debug,1,(&Debug,
+ "bindata: open failed: errno=%d (%s)\n", \
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ tmpname, error_description(err));
+ status = 0;
+ goto fail;
+ }
+
+ switch(v->format) {
+ case bindata_format_1:
+ status = write_bindata_1(&(v->v.f1),fd,tmpname);
+ break;
+ }
+
+ if (-1 == close(fd)) {
+ int err = errno;
+
+ DPRINT(Debug,1,(&Debug,
+ "bindata: close failed: errno=%d (%s)\n", \
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ tmpname, error_description(err));
+ status = 0;
+ goto fail;
+ }
+
+ if (status) {
+ if (-1 == rename(tmpname,filename)) {
+ int err = errno;
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotRenamed,
+ "Failed to rename temporary file to %.50s: %.30s"),
+ filename, error_description(err));
+ status = 0;
+ goto fail;
+ }
+ }
+
+ fail:
+ if (tmpname)
+ free(tmpname);
+ return status;
+ }
+
+
+
+ int get_bindata(ptr,filename)
+ struct bindata_mapped_data **ptr;
+ CONST char *filename;
+ {
+ struct bindata_mapped_data * res = *ptr;
+ int status = 0;
+
+ int fd, err;
+ uint8 text_magic[sizeof TEXT_MAGIC];
+ uint16 magic;
+ int n;
+
+ err = can_open(filename,"r");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileUnreadable,
+ "File %.50s is unreadable: %s"),
+ filename, error_description(err));
+ return 0;
+ }
+
+ fd = open(filename,O_RDONLY);
+ if (-1 == fd) {
+ int err = errno;
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileUnreadable,
+ "File %.50s is unreadable: %s"),
+ filename, error_description(err));
+ return 0;
+ }
+
+ n = read(fd,text_magic, sizeof text_magic);
+ if (n != 8) { /* text_magic is assumed to be 8 bytes or
+ there is error
+ */
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeCorruptedMapfile,
+ "Mapfile %.30s is corrupted"),
+ filename);
+ close(fd);
+ DPRINT(Debug,1,(&Debug,"get_bindata failed #1 -- text_magic read\n"));
+ return 0;
+ }
+
+ if (0 != memcmp(text_magic,TEXT_MAGIC,8)) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeCorruptedMapfile,
+ "Mapfile %.30s is corrupted"),
+ filename);
+ close(fd);
+ DPRINT(Debug,1,(&Debug,
+ "get_bindata failed #1 -- text_magic is wrong: %.8s\n",
+ text_magic));
+ return 0;
+ }
+
+ n = read(fd,(void *)&magic, sizeof magic);
+ if (n != 2) { /* magic is assumed to be 2 bytes or
+ * there is 'Configure' error...
+ */
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeCorruptedMapfile,
+ "Mapfile %.30s is corrupted"),
+ filename);
+ close(fd);
+ DPRINT(Debug,1,(&Debug,"get_bindata failed #1 -- magic read\n"));
+ return 0;
+ }
+
+ if (res)
+ free_bindata(res);
+ res = NULL;
+
+ res = safe_malloc(sizeof (struct bindata_mapped_data));
+ res->format = bindata_bad;
+
+
+ if (bindata_format_1 == magic) {
+ res->format = bindata_format_1;
+ if (!mmap_bindata_1(&(res->v.f1),fd,0,filename) &&
+ !read_bindata_1(&(res->v.f1),fd,0,filename)) {
+ status = 0;
+ } else
+ status = 1;
+ } else if (bindata_format_1 == SWAP(magic)) {
+ res->format = bindata_format_1;
+ if (!mmap_bindata_1(&(res->v.f1),fd,1,filename) &&
+ !read_bindata_1(&(res->v.f1),fd,1,filename)) {
+ status = 0;
+ } else
+ status = 1;
+ } else {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeCorruptedMapfile,
+ "Mapfile %.30s is corrupted"),
+ filename);
+ DPRINT(Debug,1,(&Debug, "get_bindata failed #2 -- magic check\n"));
+ status = 0;
+ }
+
+ if (!status) {
+ if (res)
+ free(res);
+ res = NULL;
+ }
+ close(fd);
+
+ *ptr = res;
+ return status;
+ }
+
+ static char * u8s_to_cs P_((uint8 *s));
+ static char * u8s_to_cs(s)
+ uint8 *s;
+ {
+ return (char *)s;
+ }
+
+
+
+ static int add_bindata_1_map P_((struct bindata_format_1 *v,
+ uint16 bytevector[256],
+ unsigned char revvector[MAP_REV_MAP_DIV],
+ const char *filename));
+
+ static int add_bindata_1_map(v,bytevector,revvector,filename)
+ struct bindata_format_1 *v;
+ uint16 bytevector[256];
+ unsigned char revvector[MAP_REV_MAP_DIV];
+ const char *filename;
+ {
+ int status = 0,i;
+ struct csets_1 *y;
+ int L;
+
+ if (v->mmapped || v->byte_swapped) {
+ DPRINT(Debug,1,(&Debug,"add_bindata_1_map failed #1 -- not malloced\n"));
+ return 0;
+ }
+
+ if (strlen(filename) >= sizeof (y->filename)) {
+ DPRINT(Debug,1,(&Debug,"add_bindata_1_map failed #2 -- too long filename\n"));
+ return 0;
+ }
+
+
+ L = (v->csets_count+1) * sizeof (v->csets[0]);
+ if (v->csets_length < L) {
+ uint16 pagesize = v->header->page_size;
+ v->csets_length = L;
+ v->header->csets_pagecount = pages(v->csets_length,pagesize);
+ v->csets = safe_realloc(v->csets, v->csets_length);
+ }
+
+ y = & (v->csets[v->csets_count] );
+
+ /* strncpy will \0 fill remainig space if needed
+ There is \0 on end because strlen(filename) < sizeof (y->filename)
+ */
+ strncpy(u8s_to_cs(y->filename),filename,sizeof (y->filename));
+
+
+ for (i = 0; i < 256; i++)
+ y->map[i] = bytevector[i];
+ for (i = 0; i < MAP_REV_MAP_DIV; i++)
+ y->revmap[i] = revvector[i];
+
+ v->csets_count++;
+ status = 1;
+
+ return status;
+
+ }
+
+ int add_bindata_map(v,bytevector,revvector,filename)
+ struct bindata_mapped_data * v;
+ uint16 bytevector[256];
+ unsigned char revvector[MAP_REV_MAP_DIV];
+ const char *filename;
+ {
+ int r = 0;
+
+ switch(v->format) {
+ case bindata_format_1:
+ r = add_bindata_1_map(&(v->v.f1),
+ bytevector,revvector,filename);
+ break;
+ }
+
+ return r;
+ }
+
+ struct bindata_mapped_data * malloc_bindata(cscount)
+ int cscount;
+ {
+ struct bindata_mapped_data *v = safe_malloc(sizeof (*v));
+
+ v->format = bindata_format_1;
+ malloc_bindata_1(&(v->v.f1),cscount);
+
+ return v;
+ }
+
+
+ void trim_bindata(v)
+ struct bindata_mapped_data * v;
+ {
+
+ switch(v->format) {
+ case bindata_format_1:
+ trim_bindata_1(&(v->v.f1));
+ break;
+ }
+ }
+
+
+ static int write_bindata_text_1 P_((struct bindata_format_1 *v,
+ const char *dir, char ***filelist));
+ static int write_bindata_text_1(v, dir, filelist)
+ struct bindata_format_1 *v;
+ CONST char *dir;
+ char ***filelist;
+ {
+ int status = 0;
+ char **list = NULL;
+ int m,Y = 0;;
+
+ if (!v->csets_count)
+ goto fail1;
+
+ list = safe_malloc((v->csets_count +1) * sizeof (list[0]));
+
+ for (m = 0; m < v->csets_count; m++) {
+
+ char * name = NULL;
+ FILE *F;
+ int i;
+ int err;
+
+ if (! v->csets[m].filename[0])
+ continue;
+
+ name = elm_message(FRM("%s/%s"),
+ dir,v->csets[m].filename);
+
+ err = can_open(name,"w");
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "bindata: can_open failed: code=%d (%s)\n", \
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ name, error_description(err));
+
+ status = 0;
+ goto fail;
+ }
+
+ F = fopen(name,"w");
+ if (!F) {
+ int err = errno;
+ DPRINT(Debug,1,(&Debug,
+ "bindata: fopen failed: code=%d (%s)\n",
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ name, error_description(err));
+
+ status = 0;
+ goto fail;
+ }
+
+ fprintf(F,"# %s\n",v->csets[m].filename);
+
+ for (i = 0; i < 256; i++) {
+ uint16 x = READ_VALUE(v->csets[m].map[i],v->byte_swapped);
+
+ if (MAPPING_NONE == x) {
+ fprintf(F,
+ "0x%02X\t\t# NO VALUE\n",
+ i);
+ } else {
+ fprintf(F,
+ "0x%02X\t0x%04X\t#\n",
+ i,x);
+ }
+ }
+
+
+ if (EOF == fflush(F)) {
+ int err = errno;
+ DPRINT(Debug,1,(&Debug,
+ "bindata: fflush failed: code=%d (%s)\n", \
+ err,error_description(err)));
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ name, error_description(err));
+
+ status = 0;
+ }
+
+ fclose(F);
+
+ list[Y++] = name;
+ name = NULL;
+
+ fail:
+ if (name)
+ free(name);
+ }
+
+ fail1:
+ list[Y] = NULL;
+
+ *filelist = list;
+ return status;
+ }
+
+
+ int write_bindata_text(v,dir,filelist)
+ struct bindata_mapped_data *v;
+ CONST char * dir;
+ char ***filelist;
+ {
+ int status = 0;
+ char ** list = NULL;
+
+ switch(v->format) {
+ case bindata_format_1:
+ status = write_bindata_text_1(&(v->v.f1),dir,&list);
+ break;
+ }
+
+ *filelist = list;
+ return status;
+ }
+
+ struct bindata_map_1 {
+ struct bindata_format_1 *header;
+ int cset_number;
+ };
+
+ struct bindata_map {
+ enum bindata_format format;
+ union {
+ struct bindata_map_1 f1;
+ } v;
+ };
+
+ struct bindata_map * give_mapping_1 P_((struct bindata_format_1 *v,
+ const char *mapname));
+ struct bindata_map * give_mapping_1(v, mapname)
+ struct bindata_format_1 *v;
+ CONST char *mapname;
+ {
+ struct bindata_map *ret = NULL;
+ int m;
+
+ for (m = 0; m < v->csets_count; m++) {
+ if (0 == strcmp(u8s_to_cs(v->csets[m].filename),
+ mapname))
+ break;
+ }
+ if (m >= v->csets_count)
+ return NULL;
+
+ ret = safe_malloc(sizeof (*ret));
+ /* bzero is defined on hdrs/defs.h
+ */
+
+ bzero(ret, sizeof (*ret));
+
+ ret->format = bindata_format_1;
+ ret->v.f1.header = v;
+ ret->v.f1.cset_number = m;
+
+ return ret;
+ }
+
+ struct bindata_map * give_mapping(v,mapname)
+ struct bindata_mapped_data *v;
+ const char *mapname;
+ {
+ struct bindata_map *ret = NULL;
+
+ switch(v->format) {
+ case bindata_format_1:
+ ret = give_mapping_1(&(v->v.f1),mapname);
+ break;
+ }
+
+
+ return ret;
+ }
+
+
+ static unsigned char lookup_binmap_rev_1 P_((struct bindata_map_1 *map,
+ unsigned int val,
+ int * found));
+ static unsigned char lookup_binmap_rev_1(map,val,found)
+ struct bindata_map_1 *map;
+ unsigned int val;
+ int * found;
+ {
+ unsigned char c;
+ int i;
+
+ int byte_swapped = map->header->byte_swapped;
+ struct csets_1 * cset = & (map->header->csets[map->cset_number]);
+
+ /* map is two byte,
+ revmap is one byte
+ */
+
+ *found = 0;
+ c = cset->revmap[val % MAP_REV_MAP_DIV];
+
+ /* Check case no collision */
+ if (READ_VALUE(cset->map[c],byte_swapped) == val) {
+ *found = 1;
+ return c;
+ }
+
+ if (!c)
+ return 0;
+
+ /* Do scan on case of collision */
+ for (i = 0; i < 256; i++) {
+ if (val == READ_VALUE(cset->map[i],byte_swapped)) {
+ *found = 1;
+ return i;
+ }
+ }
+ return 0; /* Not found */
+ }
+
+ static uint16 lookup_binmap_1 P_((unsigned int ch,
+ struct bindata_map_1 *map,
+ int *found));
+ static uint16 lookup_binmap_1(ch,map,found)
+ unsigned int ch;
+ struct bindata_map_1 *map;
+ int *found;
+ {
+ uint16 val;
+
+ int byte_swapped = map->header->byte_swapped;
+ struct csets_1 * cset = & (map->header->csets[map->cset_number]);
+
+ /* map is two byte,
+ revmap is one byte
+ */
+
+ val = READ_VALUE(cset->map[ch],byte_swapped);
+ if (val != MAPPING_NONE) {
+ *found = 1;
+ return val;
+ }
+
+ return 0x003F; /* '?' */
+ }
+
+ unsigned char lookup_binmap_rev(map,val,found)
+ struct bindata_map *map;
+ unsigned int val;
+ int * found;
+ {
+ *found = 0;
+
+ switch(map->format) {
+ case bindata_format_1:
+ return lookup_binmap_rev_1(& (map->v.f1),val,found);
+ }
+
+ return 0;
+ }
+
+ uint16 lookup_binmap(ch,map,found)
+ unsigned int ch;
+ struct bindata_map *map;
+ int *found;
+ {
+ *found = 0;
+
+ switch(map->format) {
+ case bindata_format_1:
+ return lookup_binmap_1(ch,& (map->v.f1),found);
+ }
+
+ return 0x003F; /* '?' */
+ }
+
+ /* ---------------------------------------------------------------------- */
+
+ struct bindata_mapped_data * default_bindata()
+ {
+ static struct bindata_mapped_data * res = NULL;
+ static struct bindata_mapped_data * res_global = NULL;
+
+ if (! bindata_path[0]) {
+ DPRINT(Debug,4,(&Debug,
+ "BINDATA path not expanded yet.\n"));
+
+ if (bindata_path_global[0] &&
+ strcmp(bindata_path_global,"none") && !res_global) {
+ static int tried = 0;
+
+ if (!tried) {
+ DPRINT(Debug,4,(&Debug,
+ "Loading (global) BINDATA information ... (file %s)\n",
+ bindata_path_global));
+ if (!get_bindata(&res_global,bindata_path_global)) {
+ DPRINT(Debug,4,(&Debug,
+ "... loading of BINDATA information failed\n"));
+ }
+ tried = 1;
+ }
+ return res_global;
+ }
+
+ if (res_global) {
+ DPRINT(Debug,4,(&Debug,
+ " ... using global.\n"));
+ }
+ return res_global;
+ }
+
+ if (0 != strcmp(bindata_path,"none") && !res) {
+ static int tried = 0;
+
+ if (0 == strcmp(bindata_path,bindata_path_global) && res_global) {
+
+ DPRINT(Debug,4,(&Debug,
+ "Using global as user BINDATA ... (file %s)\n",
+ bindata_path));
+
+ res = res_global;
+ } else if (!tried) {
+ DPRINT(Debug,4,(&Debug,
+ "Loading (user) BINDATA information ... (file %s)\n",
+ bindata_path));
+ if (!get_bindata(&res,bindata_path)) {
+ DPRINT(Debug,4,(&Debug,
+ "... loading of BINDATA information failed\n"));
+ }
+ tried = 1;
+ }
+ }
+ return res;
+ }
+
+
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.109-cvs/lib/charset.c
*** elm2.4.ME+.108/lib/charset.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.109-cvs/lib/charset.c 2003-11-09 18:13:37.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: charset.c,v 1.71 2003/05/17 16:13:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: charset.c,v 1.72 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.72 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 298,303 ****
--- 298,304 ----
int do_cs = 0;
struct charset_type * cs_type = NULL;
struct map_info * cs_map = NULL;
+ uint16 MIBenum = 0;
union compare_info D;
D.name = name;
***************
*** 310,316 ****
--- 311,339 ----
ret = ASCII_SET;
}
+ if (ret && &cs_unknown == ret->charset_type) {
+ DPRINT(Debug,9,(&Debug, "MIME_name_to_charset(%s), found=%p as unknown\n",
+ name,ret));
+
+ #ifdef USE_DLOPEN
+ if (!noautodef &&
+ cs_auto_charset(name,&cs_type,&cs_map)) {
+ DPRINT(Debug,9,(&Debug,
+ "MIME_name_to_charset: Using autocreate instead... (MIBenum=%d)\n",
+ (int) ret->MIBenum));
+ do_cs = 1;
+ create = 1;
+
+ ret-> flags &= ~SET_valid; /* Invalidate result so that
+ autocreated set is found instead
+ */
+ MIBenum = ret->MIBenum;
+ goto create_new;
+ }
+ #endif
+ }
+
if (ret) {
DPRINT(Debug,9,(&Debug, "MIME_name_to_charset(%s), found=%p",
name,ret));
***************
*** 395,400 ****
--- 418,424 ----
return NULL;
}
+ create_new:
new.flags = SET_nodata|SET_valid;
new.map_info = NULL;
new.MIME_name = safe_strdup(name);
***************
*** 411,417 ****
new.subtype = NULL;
}
new.iso2022_info = NULL;
! new.MIBenum = 0;
new.codeset = NULL;
ret = add_set(new);
--- 435,441 ----
new.subtype = NULL;
}
new.iso2022_info = NULL;
! new.MIBenum = MIBenum;
new.codeset = NULL;
ret = add_set(new);
Index: elm2.4.ME+.109-cvs/lib/cs_binary.c
*** elm2.4.ME+.108/lib/cs_binary.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109-cvs/lib/cs_binary.c 2003-11-12 20:20:10.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: cs_binary.c,v 1.37 2003/08/31 11:26:15 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: cs_binary.c,v 1.40 2003/11/12 18:20:10 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 28,33 ****
--- 28,34 ----
#include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
+ #include "bindata.h"
DEBUG_VAR(Debug,__FILE__,"charset");
***************
*** 43,48 ****
--- 44,99 ----
return (unsigned char *)str;
}
+ /* bindata ---------------------------------------------------------------- */
+
+ static uint16 lookup_binmap_0 P_((unsigned int ch,
+ struct map_info *map,
+ int *found));
+
+ static uint16 lookup_binmap_0(ch,map,found)
+ unsigned int ch;
+ struct map_info *map;
+ int *found;
+ {
+
+ *found = 0;
+
+ if (&cs_ascii != map->map_type &&
+ &cs_onebyte != map->map_type)
+ panic("STRING PANIC",__FILE__,__LINE__,"lookup_binmap_0",
+ "Bad maptype",0);
+
+ return lookup_binmap(ch,map->c.bindata,found);
+ }
+
+ static unsigned char lookup_binmap_rev_0 P_((struct map_info *map,
+ unsigned int val,
+ int *found));
+
+ static unsigned char lookup_binmap_rev_0(map,val,found)
+ struct map_info *map;
+ unsigned int val;
+ int *found;
+ {
+
+ *found = 0;
+
+ if (&cs_ascii != map->map_type &&
+ &cs_onebyte != map->map_type)
+ panic("STRING PANIC",__FILE__,__LINE__,"lookup_binmap_rev_0",
+ "Bad maptype",0);
+
+ return lookup_binmap_rev(map->c.bindata,val,found);
+ }
+
+ static struct bindata_ops bindata_ops = {
+ lookup_binmap_0,
+ lookup_binmap_rev_0
+ };
+
+
+ /* ascii ------------------------------------------------------------------ */
+
static void map_ascii_init_rev P_((struct map_info *map));
static void map_ascii_init_rev(map)
struct map_info *map;
***************
*** 51,68 ****
int col = 0;
for (i = 0; i < MAP_REV_MAP_DIV; i++)
! map->b.ascii.map_ascii_rev[i] = 0;
for (i = 0; i < 128; i++)
! map->b.ascii.map_ascii_rev[i] = i;
for (i = 0; i < 128; i++) {
unsigned char c = i + 128;
! uint16 val = map->b.ascii.map_ascii_upper[i];
if (val != MAPPING_NONE) {
! if (map->b.ascii.map_ascii_rev[val % MAP_REV_MAP_DIV])
col++;
! map->b.ascii.map_ascii_rev[val % MAP_REV_MAP_DIV] = c;
}
}
--- 102,119 ----
int col = 0;
for (i = 0; i < MAP_REV_MAP_DIV; i++)
! map->b.ascii->map_ascii_rev[i] = 0;
for (i = 0; i < 128; i++)
! map->b.ascii->map_ascii_rev[i] = i;
for (i = 0; i < 128; i++) {
unsigned char c = i + 128;
! uint16 val = map->b.ascii->map_ascii_upper[i];
if (val != MAPPING_NONE) {
! if (map->b.ascii->map_ascii_rev[val % MAP_REV_MAP_DIV])
col++;
! map->b.ascii->map_ascii_rev[val % MAP_REV_MAP_DIV] = c;
}
}
***************
*** 73,79 ****
}
}
! unsigned char cs_map_ascii_rev(map,val,found)
struct map_info *map;
unsigned int val;
int *found;
--- 124,133 ----
}
}
! static unsigned char cs_map_ascii_rev_0 P_((struct map_info *map,
! unsigned int val,
! int *found));
! static unsigned char cs_map_ascii_rev_0(map,val,found)
struct map_info *map;
unsigned int val;
int *found;
***************
*** 83,105 ****
*found = 0;
- if (val < 128) {
- *found = 1;
- return val;
- }
-
if (&cs_ascii != map->map_type)
! panic("STRING PANIC",__FILE__,__LINE__,"cs_map_ascii_rev",
"Bad maptype",0);
! c = map->b.ascii.map_ascii_rev[val % MAP_REV_MAP_DIV];
if (!c)
return 0x3F; /* '?' */
/* Can't be < 128, because val >= 128 here */
if (c < 128)
return 0x3F; /* '?' */
/* Check case no collision */
! if (map->b.ascii.map_ascii_upper[c - 128] == val) {
*found = 1;
return c;
}
--- 137,154 ----
*found = 0;
if (&cs_ascii != map->map_type)
! panic("STRING PANIC",__FILE__,__LINE__,"cs_map_ascii_rev_0",
"Bad maptype",0);
! c = map->b.ascii->map_ascii_rev[val % MAP_REV_MAP_DIV];
if (!c)
return 0x3F; /* '?' */
/* Can't be < 128, because val >= 128 here */
if (c < 128)
return 0x3F; /* '?' */
/* Check case no collision */
! if (map->b.ascii->map_ascii_upper[c - 128] == val) {
*found = 1;
return c;
}
***************
*** 107,113 ****
/* Do scan on case of collision */
for (i = 0; i < 128; i++) {
unsigned char c = i + 128;
! if (val == map->b.ascii.map_ascii_upper[i]) {
*found = 1;
return c;
}
--- 156,162 ----
/* Do scan on case of collision */
for (i = 0; i < 128; i++) {
unsigned char c = i + 128;
! if (val == map->b.ascii->map_ascii_upper[i]) {
*found = 1;
return c;
}
***************
*** 115,120 ****
--- 164,238 ----
return 0x3F; /* '?' */ /* Not found */
}
+ static uint16 cs_unicode_ascii_helper_0 P_((unsigned int ch,
+ struct map_info *map,
+ int *found));
+ static uint16 cs_unicode_ascii_helper_0(ch,map,found)
+ unsigned int ch;
+ struct map_info *map;
+ int *found;
+ {
+ uint16 val;
+
+ if (&cs_ascii != map->map_type || ch > 255)
+ panic("STRING PANIC",__FILE__,__LINE__,"cs_unicode_ascii_helper_0",
+ "Bad maptype or value",0);
+
+ val = map->b.ascii->map_ascii_upper[ch-128];
+ if (val != MAPPING_NONE) {
+ *found = 1;
+ return val;
+ }
+ return 0x003F; /* '?' */
+ }
+
+ static struct bindata_ops ascii_ops = {
+ cs_unicode_ascii_helper_0,
+ cs_map_ascii_rev_0
+ };
+
+ uint16 cs_unicode_ascii_helper_1(ch,map,found)
+ unsigned int ch;
+ struct map_info *map;
+ int *found;
+ {
+ if (ch <= 127) {
+ *found = 1;
+ return ch;
+ }
+
+ if (!map->map_initialized)
+ map->map_init_it(map);
+
+ if (&cs_ascii != map->map_type || ch > 255)
+ panic("STRING PANIC",__FILE__,__LINE__,"cs_unicode_ascii_helper_1",
+ "Bad maptype or value",0);
+
+ return map->d.binary_ops->map_it(ch,map,found);
+ }
+
+ unsigned char cs_map_ascii_rev(map,val,found)
+ struct map_info *map;
+ unsigned int val;
+ int *found;
+ {
+ unsigned char c;
+ int i;
+
+ *found = 0;
+
+ if (val < 128) {
+ *found = 1;
+ return val;
+ }
+
+ if (&cs_ascii != map->map_type)
+ panic("STRING PANIC",__FILE__,__LINE__,"cs_map_ascii_rev",
+ "Bad maptype",0);
+
+ return map->d.binary_ops->map_rev_it(map,val,found);
+ }
+
static void map_init_bad P_((struct map_info *map));
static void map_init_bad(map)
struct map_info *map;
***************
*** 161,171 ****
return 1;
}
! map_info -> b.ascii.map_ascii_upper[l1-128] = l2;
return 1;
}
static struct map_info * open_asciimap P_((const char *name));
static struct map_info * open_asciimap(name)
--- 279,321 ----
return 1;
}
! map_info -> b.ascii->map_ascii_upper[l1-128] = l2;
return 1;
}
+ static void add_text_to_asciimap P_((CONST char *name,
+ struct map_info *map,
+ FILE *F, char *fn));
+ static void add_text_to_asciimap(name,map,F,fn)
+ CONST char *name;
+ struct map_info *map;
+ FILE *F;
+ char *fn;
+ {
+ static enum field_type vector[3] = {
+ val_byte, val_unicode, val_comment
+ };
+ int l;
+
+ if (map -> map_type != &cs_ascii)
+ panic("STRING PANIC",__FILE__,__LINE__,"add_text_to_asciimap",
+ "map bad",0);
+
+ if (!map -> b.ascii)
+ map -> b.ascii = safe_malloc(sizeof (* (map -> b.ascii)));
+
+ for (l = 0; l < 128; l++)
+ map -> b.ascii->map_ascii_upper[l] = MAPPING_NONE;
+
+ read_map_format_a(name,map,NULL,
+ F,
+ set_asciimap_value,
+ 3,vector,fn);
+
+ map_ascii_init_rev(map);
+ }
+
static struct map_info * open_asciimap P_((const char *name));
static struct map_info * open_asciimap(name)
***************
*** 173,204 ****
{
struct map_info *ret = NULL;
char *fn = NULL;
! int Index = -1;
! FILE * F = open_mapname(name,&fn,&Index);
if (F) {
- static enum field_type vector[3] = {
- val_byte, val_unicode, val_comment
- };
- int l;
! ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_ascii;
ret -> map_name = safe_strdup(name);
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! for (l = 0; l < 128; l++)
! ret -> b.ascii.map_ascii_upper[l] = MAPPING_NONE;
- read_map_format_a(name,ret,NULL,
- F,Index,
- set_asciimap_value,
- 3,vector,fn);
-
- map_ascii_init_rev(ret);
fclose(F);
}
if (fn)
free(fn);
return ret;
--- 323,373 ----
{
struct map_info *ret = NULL;
char *fn = NULL;
! FILE *F = NULL;
! struct bindata_mapped_data * F1 = default_bindata();
!
! if (F1) {
! struct bindata_map * X = give_mapping(F1,name);
!
! if (X) {
! ret = safe_malloc(sizeof (*ret));
! ret -> map_type = &cs_ascii;
! ret -> map_name = safe_strdup(name);
! ret -> b.ascii = NULL;
! ret -> c.bindata = X;
! ret -> d.binary_ops = &bindata_ops;
!
! ret -> map_initialized = 1;
! ret -> map_init_it = map_init_bad;
+ DPRINT(Debug,5,(&Debug,
+ "Map %s -- using bindata\n",ret->map_name));
+
+ return ret;
+ }
+ }
+
+ F = open_mapname(name,&fn);
if (F) {
! ret = safe_malloc(sizeof (*ret));
ret -> map_type = &cs_ascii;
ret -> map_name = safe_strdup(name);
+ ret -> b.ascii = safe_malloc(sizeof (* (ret -> b.ascii)));
+ ret -> c.dummy = NULL;
+ ret -> d.binary_ops = &ascii_ops;
+
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! add_text_to_asciimap(name,ret,F,fn);
fclose(F);
+
+ DPRINT(Debug,5,(&Debug,
+ "Map %s -- using text data\n",ret->map_name));
}
+
if (fn)
free(fn);
return ret;
***************
*** 214,221 ****
{
int i;
for (i = 0; i < 128; i++) {
! map->b.ascii.map_ascii_upper[i] = MAPPING_NONE;
}
map_ascii_init_rev(map);
map->map_initialized = 1;
--- 383,391 ----
{
int i;
+ map -> b.ascii = safe_malloc(sizeof (* (map -> b.ascii)));
for (i = 0; i < 128; i++) {
! map->b.ascii->map_ascii_upper[i] = MAPPING_NONE;
}
map_ascii_init_rev(map);
map->map_initialized = 1;
***************
*** 226,232 ****
struct map_info map_ascii = {
! &cs_ascii, "US-ASCII", 0, map_init_us_ascii, 0 };
/* ISO-8859-1 ------------------------------------------------------------ */
--- 396,402 ----
struct map_info map_ascii = {
! &cs_ascii, "US-ASCII", 0, map_init_us_ascii, NULL, NULL, &ascii_ops };
/* ISO-8859-1 ------------------------------------------------------------ */
***************
*** 236,243 ****
{
int i;
for (i = 0; i < 128; i++) {
! map->b.ascii.map_ascii_upper[i] = i + 128;
}
map_ascii_init_rev(map);
--- 406,414 ----
{
int i;
+ map -> b.ascii = safe_malloc(sizeof (* (map -> b.ascii)));
for (i = 0; i < 128; i++) {
! map->b.ascii->map_ascii_upper[i] = i + 128;
}
map_ascii_init_rev(map);
***************
*** 248,254 ****
}
struct map_info map_latin1 = {
! &cs_ascii, "ISO-8859-1", 0, map_init_latin1, 0 };
/* KOI8-R ------------------------------------------------------------ */
--- 419,425 ----
}
struct map_info map_latin1 = {
! &cs_ascii, "ISO-8859-1", 0, map_init_latin1, NULL, NULL, &ascii_ops };
/* KOI8-R ------------------------------------------------------------ */
***************
*** 281,288 ****
{
int i;
for (i = 0; i < 128; i++) {
! map->b.ascii.map_ascii_upper[i] = koi82unicode[i];
}
map_ascii_init_rev(map);
--- 452,460 ----
{
int i;
+ map -> b.ascii = safe_malloc(sizeof (* (map -> b.ascii)));
for (i = 0; i < 128; i++) {
! map->b.ascii->map_ascii_upper[i] = koi82unicode[i];
}
map_ascii_init_rev(map);
***************
*** 293,299 ****
}
struct map_info map_koi8r = {
! &cs_ascii, "KOI8-R", 0, map_init_koi8r, 0 };
/* KOI8-U ------------------------------------------------------------ */
--- 465,471 ----
}
struct map_info map_koi8r = {
! &cs_ascii, "KOI8-R", 0, map_init_koi8r, NULL, NULL, &ascii_ops };
/* KOI8-U ------------------------------------------------------------ */
***************
*** 328,341 ****
struct charshort *replace;
int i;
/* Initialize with koi8r */
for (i = 0; i < 128; i++) {
! map->b.ascii.map_ascii_upper[i] = koi82unicode[i];
}
/* replace the few koi8-u specific additions: */
for (replace = koi8u_additions; replace->byte; replace++)
! map->b.ascii.map_ascii_upper[replace->byte-128] =
replace->unicode;
map_ascii_init_rev(map);
--- 500,514 ----
struct charshort *replace;
int i;
+ map -> b.ascii = safe_malloc(sizeof (* (map -> b.ascii)));
/* Initialize with koi8r */
for (i = 0; i < 128; i++) {
! map->b.ascii->map_ascii_upper[i] = koi82unicode[i];
}
/* replace the few koi8-u specific additions: */
for (replace = koi8u_additions; replace->byte; replace++)
! map->b.ascii->map_ascii_upper[replace->byte-128] =
replace->unicode;
map_ascii_init_rev(map);
***************
*** 346,352 ****
}
struct map_info map_koi8u = {
! &cs_ascii, "KOI8-U", 0, map_init_koi8u, 0 };
/* CP1251 ------------------------------------------------------------ */
--- 519,525 ----
}
struct map_info map_koi8u = {
! &cs_ascii, "KOI8-U", 0, map_init_koi8u, NULL, NULL, &ascii_ops };
/* CP1251 ------------------------------------------------------------ */
***************
*** 377,384 ****
{
int i;
for (i = 0; i < 128; i++) {
! map->b.ascii.map_ascii_upper[i] = cp12512unicode[i];
}
map_ascii_init_rev(map);
--- 550,558 ----
{
int i;
+ map -> b.ascii = safe_malloc(sizeof (* (map -> b.ascii)));
for (i = 0; i < 128; i++) {
! map->b.ascii->map_ascii_upper[i] = cp12512unicode[i];
}
map_ascii_init_rev(map);
***************
*** 389,395 ****
}
struct map_info map_cp1251 = {
! &cs_ascii, "CP1251", 0, map_init_cp1251, 0 };
/* CP1252 ------------------------------------------------------------ */
--- 563,569 ----
}
struct map_info map_cp1251 = {
! &cs_ascii, "CP1251", 0, map_init_cp1251, NULL, NULL, &ascii_ops };
/* CP1252 ------------------------------------------------------------ */
***************
*** 429,436 ****
{
int i;
for (i = 0; i < 128; i++) {
! map->b.ascii.map_ascii_upper[i] = cp12522unicode[i];
}
map_ascii_init_rev(map);
--- 603,611 ----
{
int i;
+ map -> b.ascii = safe_malloc(sizeof (* (map -> b.ascii)));
for (i = 0; i < 128; i++) {
! map->b.ascii->map_ascii_upper[i] = cp12522unicode[i];
}
map_ascii_init_rev(map);
***************
*** 440,446 ****
"Map %s initialized\n",map->map_name));
}
! struct map_info map_cp1252 = { &cs_ascii, "CP1252", 0, map_init_cp1252, 0 };
/* ISO-8859-15 ---------------------------------------------------------- */
--- 615,622 ----
"Map %s initialized\n",map->map_name));
}
! struct map_info map_cp1252 = { &cs_ascii, "CP1252", 0,
! map_init_cp1252, NULL, NULL, &ascii_ops };
/* ISO-8859-15 ---------------------------------------------------------- */
***************
*** 470,477 ****
{
int i;
for (i = 0; i < 128; i++) {
! map->b.ascii.map_ascii_upper[i] = iso8859152unicode[i];
}
map_ascii_init_rev(map);
--- 646,654 ----
{
int i;
+ map -> b.ascii = safe_malloc(sizeof (* (map -> b.ascii)));
for (i = 0; i < 128; i++) {
! map->b.ascii->map_ascii_upper[i] = iso8859152unicode[i];
}
map_ascii_init_rev(map);
***************
*** 482,488 ****
}
! struct map_info map_885915 = { &cs_ascii, "ISO-8859-15", 0, map_init_885915, 0 };
/* bytemap --------------------------------------------------------------- */
--- 659,666 ----
}
! struct map_info map_885915 = { &cs_ascii, "ISO-8859-15", 0, map_init_885915,
! NULL, NULL, &ascii_ops };
/* bytemap --------------------------------------------------------------- */
***************
*** 494,507 ****
int col = 0;
for (i = 0; i < MAP_REV_MAP_DIV; i++)
! map->b.bytemap.map_bytemap_rev[i] = 0;
for (i = 0; i < 256; i++) {
! uint16 val = map->b.bytemap.map[i];
if (val != MAPPING_NONE) {
! if (map->b.bytemap.map_bytemap_rev[val % MAP_REV_MAP_DIV])
col++;
! map->b.bytemap.map_bytemap_rev[val % MAP_REV_MAP_DIV] = i;
}
}
--- 672,685 ----
int col = 0;
for (i = 0; i < MAP_REV_MAP_DIV; i++)
! map->b.bytemap->map_bytemap_rev[i] = 0;
for (i = 0; i < 256; i++) {
! uint16 val = map->b.bytemap->map[i];
if (val != MAPPING_NONE) {
! if (map->b.bytemap->map_bytemap_rev[val % MAP_REV_MAP_DIV])
col++;
! map->b.bytemap->map_bytemap_rev[val % MAP_REV_MAP_DIV] = i;
}
}
***************
*** 512,518 ****
}
}
! unsigned char cs_map_bytemap_rev(map,val,found)
struct map_info *map;
unsigned int val;
int * found;
--- 690,699 ----
}
}
! static unsigned char cs_map_bytemap_rev_0 P_((struct map_info *map,
! unsigned int val,
! int * found));
! static unsigned char cs_map_bytemap_rev_0(map,val,found)
struct map_info *map;
unsigned int val;
int * found;
***************
*** 521,534 ****
int i;
if (&cs_onebyte != map->map_type)
! panic("STRING PANIC",__FILE__,__LINE__," cs_map_bytemap_rev",
"Bad maptype",0);
*found = 0;
! c = map->b.bytemap.map_bytemap_rev[val % MAP_REV_MAP_DIV];
/* Check case no collision */
! if (map->b.bytemap.map[c] == val) {
*found = 1;
return c;
}
--- 702,715 ----
int i;
if (&cs_onebyte != map->map_type)
! panic("STRING PANIC",__FILE__,__LINE__," cs_map_bytemap_rev_0",
"Bad maptype",0);
*found = 0;
! c = map->b.bytemap->map_bytemap_rev[val % MAP_REV_MAP_DIV];
/* Check case no collision */
! if (map->b.bytemap->map[c] == val) {
*found = 1;
return c;
}
***************
*** 538,544 ****
/* Do scan on case of collision */
for (i = 0; i < 256; i++) {
! if (val == map->b.bytemap.map[i]) {
*found = 1;
return i;
}
--- 719,725 ----
/* Do scan on case of collision */
for (i = 0; i < 256; i++) {
! if (val == map->b.bytemap->map[i]) {
*found = 1;
return i;
}
***************
*** 546,551 ****
--- 727,790 ----
return 0; /* Not found */
}
+ static uint16 cs_unicode_bytemap_helper_0 P_((unsigned int ch,
+ struct map_info *map,
+ int *found));
+ static uint16 cs_unicode_bytemap_helper_0(ch,map,found)
+ unsigned int ch;
+ struct map_info *map;
+ int *found;
+ {
+ uint16 val;
+
+ if (&cs_onebyte != map->map_type || ch > 255)
+ panic("STRING PANIC",__FILE__,__LINE__,"cs_unicode_bytemap_helper_0",
+ "Bad maptype or value",0);
+
+ val = map->b.bytemap->map[ch];
+ if (val != MAPPING_NONE) {
+ *found = 1;
+ return val;
+ }
+
+ return 0x003F; /* '?' */
+ }
+
+
+ static struct bindata_ops bytemap_ops = {
+ cs_unicode_bytemap_helper_0,
+ cs_map_bytemap_rev_0
+ };
+
+ uint16 cs_unicode_bytemap_helper_1(ch,map,found)
+ unsigned int ch;
+ struct map_info *map;
+ int *found;
+ {
+
+ if (&cs_onebyte != map->map_type || ch > 255)
+ panic("STRING PANIC",__FILE__,__LINE__,"cs_unicode_bytemap_helper_1",
+ "Bad maptype or value",0);
+
+ return map->d.binary_ops->map_it(ch,map,found);
+ }
+
+ unsigned char cs_map_bytemap_rev(map,val,found)
+ struct map_info *map;
+ unsigned int val;
+ int * found;
+ {
+ unsigned char c;
+ int i;
+
+ if (&cs_onebyte != map->map_type)
+ panic("STRING PANIC",__FILE__,__LINE__," cs_map_bytemap_rev",
+ "Bad maptype",0);
+
+ return map->d.binary_ops->map_rev_it(map,val,found);
+ }
+
+
#if ANSI_C
static set_map_callmap set_bytemap_value;
#endif
***************
*** 574,623 ****
return 0;
}
! map_info -> b.bytemap.map[l1] = l2;
return 1;
}
static struct map_info * open_bytemap P_((const char *name));
static struct map_info * open_bytemap(name)
CONST char *name;
{
struct map_info *ret = NULL;
char *fn = NULL;
! int Index = -1;
! FILE * F = open_mapname(name,&fn,&Index);
if (F) {
- static enum field_type vector[3] = {
- val_byte, val_unicode, val_comment
- };
- int l;
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_onebyte;
ret -> map_name = safe_strdup(name);
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! /* We assume that values < 32 are same control characters
! * on all sets -- after all MIME requires that on all
! * character sets characters CR and LF are on same position
! */
! for (l = 0; l < 32; l++)
! ret -> b.bytemap.map[l] = l;
!
! for (l = 32; l < 256; l++)
! ret -> b.bytemap.map[l] = MAPPING_NONE;
- read_map_format_a(name,ret,NULL,
- F,Index,
- set_bytemap_value,
- 3,vector,fn);
-
- map_bytemap_init_rev(ret);
fclose(F);
}
if (fn)
free(fn);
return ret;
--- 813,917 ----
return 0;
}
! map_info -> b.bytemap->map[l1] = l2;
return 1;
}
+ static void add_text_to_bytemap P_((CONST char *name,
+ struct map_info *map,
+ FILE *F, char *fn));
+ static void add_text_to_bytemap(name,map,F,fn)
+ CONST char *name;
+ struct map_info *map;
+ FILE *F;
+ char *fn;
+ {
+ static enum field_type vector[3] = {
+ val_byte, val_unicode, val_comment
+ };
+ int l;
+
+
+ if (map -> map_type != &cs_onebyte)
+ panic("STRING PANIC",__FILE__,__LINE__,"add_text_to_bytemap",
+ "map bad",0);
+
+ if (!map -> b.bytemap)
+ map -> b.bytemap = safe_malloc(sizeof (* (map -> b.bytemap)));
+
+
+ /* We assume that values < 32 are same control characters
+ * on all sets -- after all MIME requires that on all
+ * character sets characters CR and LF are on same position
+ */
+ for (l = 0; l < 32; l++)
+ map -> b.bytemap->map[l] = l;
+
+ for (l = 32; l < 256; l++)
+ map -> b.bytemap->map[l] = MAPPING_NONE;
+
+ read_map_format_a(name,map,NULL,
+ F,
+ set_bytemap_value,
+ 3,vector,fn);
+
+ map_bytemap_init_rev(map);
+ }
+
+
static struct map_info * open_bytemap P_((const char *name));
static struct map_info * open_bytemap(name)
CONST char *name;
{
struct map_info *ret = NULL;
char *fn = NULL;
!
! FILE *F = NULL;
! struct bindata_mapped_data * F1 = default_bindata();
!
! if (F1) {
! struct bindata_map * X = give_mapping(F1,name);
!
! if (X) {
! ret = safe_malloc(sizeof (*ret));
! ret -> map_type = &cs_onebyte;
! ret -> map_name = safe_strdup(name);
! ret -> b.bytemap = NULL;
! ret -> c.bindata = X;
! ret -> d.binary_ops = &bindata_ops;
!
! ret -> map_initialized = 1;
! ret -> map_init_it = map_init_bad;
!
! DPRINT(Debug,5,(&Debug,
! "Map %s -- using bindata\n",ret->map_name));
!
! return ret;
! }
! }
!
! F = open_mapname(name,&fn);
if (F) {
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_onebyte;
ret -> map_name = safe_strdup(name);
+ ret -> b.bytemap = safe_malloc(sizeof (* (ret -> b.bytemap)));
+ ret -> c.dummy = NULL;
+ ret -> d.binary_ops = &bytemap_ops;
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! add_text_to_bytemap(name,ret,F,fn);
fclose(F);
+
+ DPRINT(Debug,5,(&Debug,
+ "Map %s -- using text data\n",ret->map_name));
}
+
if (fn)
free(fn);
return ret;
***************
*** 670,676 ****
/* ISO 646 variant part */
for (i = 0; i < 12; i++) {
! if (map->b.iso646[i] == val) {
*found = 1;
return variant_vector[i];
}
--- 964,970 ----
/* ISO 646 variant part */
for (i = 0; i < 12; i++) {
! if (map->b.iso646->iso646[i] == val) {
*found = 1;
return variant_vector[i];
}
***************
*** 702,708 ****
map->map_init_it(map);
/* ISO 646 variant part */
! return map->b.iso646[idx];
}
return MAPPING_NONE;
}
--- 996,1002 ----
map->map_init_it(map);
/* ISO 646 variant part */
! return map->b.iso646->iso646[idx];
}
return MAPPING_NONE;
}
***************
*** 714,721 ****
struct map_info *map;
{
int i;
for (i = 0; i < 12; i++)
! map->b.iso646[i] = MAPPING_NONE;
map->map_initialized = 1;
--- 1008,1017 ----
struct map_info *map;
{
int i;
+
+ map -> b.iso646 = safe_malloc(sizeof (* (map -> b.iso646)));
for (i = 0; i < 12; i++)
! map->b.iso646->iso646[i] = MAPPING_NONE;
map->map_initialized = 1;
***************
*** 725,734 ****
struct map_info map_invariant = { &cs_iso646, "INVARIANT", 0,
! map_init_invariant, 0 };
/* ----------------------------------------------------------------------- */
static void cs_init_binary P_((struct string *str));
static void cs_init_binary(str)
struct string *str;
--- 1021,1149 ----
struct map_info map_invariant = { &cs_iso646, "INVARIANT", 0,
! map_init_invariant, NULL, NULL, NULL };
/* ----------------------------------------------------------------------- */
+ /* Used by generate_bindata and cs_find_ascii */
+ static struct map_info **asciimaps = NULL;
+ static int asciimap_count = 0;
+
+ /* Used by generate_bindata and cs_find_bytemap */
+ static struct map_info **bytemaps = NULL;
+ static int bytemap_count = 0;
+
+
+
+
+ struct bindata_mapped_data *generate_bindata()
+ {
+ struct bindata_mapped_data *r;
+
+ int c = asciimap_count + bytemap_count;
+ int i;
+
+ r = malloc_bindata(c);
+
+ for (i = 0; i < asciimap_count; i++) {
+ if (is_on_mapdir(asciimaps[i]->map_name)) {
+
+ /* MAP do not have necessary b.ascii structure
+ if bindata is on use, because we want regenerate it
+ we need parse textual map
+ */
+
+ if (!asciimaps[i]->b.ascii) {
+ char *fn = NULL;
+ FILE * F = open_mapname(asciimaps[i]->map_name,&fn);
+ if (F) {
+
+ add_text_to_asciimap(asciimaps[i]->map_name,
+ asciimaps[i],F,fn);
+
+ fclose(F);
+ }
+
+ if (fn)
+ free(fn);
+ }
+
+ if (asciimaps[i]->b.ascii) {
+ uint16 vector[256];
+
+ int x;
+ for (x = 0; x < 128; x++)
+ vector[x] = x;
+ for (x = 128; x < 256; x++)
+ vector[x] = asciimaps[i]->b.ascii->map_ascii_upper[x-128];
+
+ DPRINT(Debug,4,(&Debug,
+ "... Adding ascii/upper map %s\n",
+ asciimaps[i]->map_name));
+
+ if (!add_bindata_map(r,vector,
+ asciimaps[i]->b.ascii->map_ascii_rev,
+ asciimaps[i]->map_name)) {
+ DPRINT(Debug,4,(&Debug,
+ "Ascii/upper map %s can't be added to binary table\n",
+ asciimaps[i]->map_name));
+ }
+ }
+ }
+ }
+
+
+ for (i = 0; i < bytemap_count; i++) {
+
+ if (is_on_mapdir(bytemaps[i]->map_name)) {
+
+ /* MAP do not have necessary b.bytemap structure
+ if bindata is on use, because we want regenerate it
+ we need parse textual map
+ */
+
+ if (!bytemaps[i]->b.bytemap) {
+ char *fn = NULL;
+ FILE * F = open_mapname(bytemaps[i]->map_name,&fn);
+ if (F) {
+
+ add_text_to_bytemap(bytemaps[i]->map_name,
+ bytemaps[i],F,fn);
+
+ fclose(F);
+ }
+
+ if (fn)
+ free(fn);
+ }
+
+ if (bytemaps[i]->b.bytemap) {
+
+ DPRINT(Debug,4,(&Debug,
+ "... Adding single byte map %s\n",
+ bytemaps[i]->map_name));
+
+
+ if (!add_bindata_map(r,
+ bytemaps[i]->b.bytemap->map,
+ bytemaps[i]->b.bytemap->map_bytemap_rev,
+ bytemaps[i]->map_name)) {
+ DPRINT(Debug,4,(&Debug,
+ "Single byte map %s can't be added to binary table\n",
+ bytemaps[i]->map_name));
+ }
+ }
+ }
+ }
+
+ trim_bindata(r);
+
+ return r;
+ }
+
+
+ /* ======================================================================== */
+
static void cs_init_binary P_((struct string *str));
static void cs_init_binary(str)
struct string *str;
***************
*** 892,917 ****
}
}
- uint16 cs_unicode_bytemap_helper_1(ch,map,found)
- unsigned int ch;
- struct map_info *map;
- int *found;
- {
- uint16 val;
-
- if (&cs_onebyte != map->map_type || ch > 255)
- panic("STRING PANIC",__FILE__,__LINE__,"cs_unicode_bytemap_helper_1",
- "Bad maptype or value",0);
-
- val = map->b.bytemap.map[ch];
- if (val != MAPPING_NONE) {
- *found = 1;
- return val;
- }
-
- return 0x003F; /* '?' */
- }
-
static uint16 cs_unicode_bytemap_helper P_((unsigned int ch,
charset_t set, int *found));
--- 1307,1312 ----
***************
*** 976,1008 ****
return cs_unicode_bytemap_helper(ch,st->charset,found);
}
- uint16 cs_unicode_ascii_helper_1(ch,map,found)
- unsigned int ch;
- struct map_info *map;
- int *found;
- {
- uint16 val;
-
- if (ch <= 127) {
- *found = 1;
- return ch;
- }
-
- if (!map->map_initialized)
- map->map_init_it(map);
-
- if (&cs_ascii != map->map_type || ch > 255)
- panic("STRING PANIC",__FILE__,__LINE__,"cs_unicode_ascii_helper_1",
- "Bad maptype or value",0);
-
- val = map->b.ascii.map_ascii_upper[ch-128];
- if (val != MAPPING_NONE) {
- *found = 1;
- return val;
- }
- return 0x003F; /* '?' */
- }
-
static uint16 cs_unicode_ascii_helper P_((unsigned int ch,
charset_t set, int *found));
static uint16 cs_unicode_ascii_helper(ch,set, found)
--- 1371,1376 ----
***************
*** 1923,1932 ****
for (i = 0; i < str->p->len; i++) {
unsigned char ch = str->p->a.bytes[i];
- uint16 val = str->string_type->map_info->b.bytemap.map[ch];
! /* Note that also MAPPING_NONE > 127 */
! if (val > 127)
return 0;
}
return 1;
--- 2291,2303 ----
for (i = 0; i < str->p->len; i++) {
unsigned char ch = str->p->a.bytes[i];
! int found;
! uint16 val = val =
! cs_unicode_bytemap_helper_1(ch,str->string_type->map_info,
! &found);
!
! if (!found || val > 127)
return 0;
}
return 1;
***************
*** 2301,2312 ****
else if (str->p->a.bytes[i] > 127 &&
str->string_type->map_info) {
unsigned char ch = str->p->a.bytes[i];
! uint16 val;
! if (!str->string_type->map_info->map_initialized)
! str->string_type->map_info->map_init_it(str->string_type->map_info);
! val = str->string_type->map_info->b.ascii.map_ascii_upper[ch-128];
! if (val == MAPPING_NONE ||
unicode_ch(val,UOP_noctrl) == 0)
str->p->a.bytes[i] = 32;
}
--- 2672,2681 ----
else if (str->p->a.bytes[i] > 127 &&
str->string_type->map_info) {
unsigned char ch = str->p->a.bytes[i];
! int found;
! uint16 val = cs_unicode_ascii_helper_1(ch,str->string_type->map_info,&found);
! if (!found ||
unicode_ch(val,UOP_noctrl) == 0)
str->p->a.bytes[i] = 32;
}
***************
*** 2336,2344 ****
if (str->string_type->map_info) {
unsigned char ch = str->p->a.bytes[i];
! uint16 val = str->string_type->map_info->b.bytemap.map[ch];
! if (val == MAPPING_NONE ||
unicode_ch(val,UOP_noctrl) == 0)
str->p->a.bytes[i] = rep;
}
--- 2705,2714 ----
if (str->string_type->map_info) {
unsigned char ch = str->p->a.bytes[i];
! int found;
! uint16 val = cs_unicode_bytemap_helper_1(ch,str->string_type->map_info,&found);
! if (!found ||
unicode_ch(val,UOP_noctrl) == 0)
str->p->a.bytes[i] = rep;
}
***************
*** 2372,2380 ****
static struct map_info * cs_find_bytemap(map_name)
CONST char * map_name;
{
- static struct map_info **bytemaps = NULL;
- static int bytemap_count = 0;
-
int i;
struct map_info *ret;
--- 2742,2747 ----
***************
*** 2396,2403 ****
static struct map_info * cs_find_ascii(map_name)
CONST char * map_name;
{
- static struct map_info **asciimaps = NULL;
- static int asciimap_count = 0;
struct map_info *ret;
--- 2763,2768 ----
***************
*** 2491,2497 ****
for (i = 0; i < dyn_map_count; i++) {
int j;
for (j = 0; j < 12; j++)
! if (vector[j] != dyn_maps[i]->b.iso646[j])
break;
if (12 == j)
ret = dyn_maps[i];
--- 2856,2862 ----
for (i = 0; i < dyn_map_count; i++) {
int j;
for (j = 0; j < 12; j++)
! if (vector[j] != dyn_maps[i]->b.iso646->iso646[j])
break;
if (12 == j)
ret = dyn_maps[i];
***************
*** 2502,2512 ****
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_iso646;
ret -> map_name = safe_strdup(map_name);
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
for (i = 0; i < 12; i++)
! ret->b.iso646[i] = vector[i];
dyn_maps = safe_realloc(dyn_maps,
(dyn_map_count + 1) *
--- 2867,2878 ----
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_iso646;
ret -> map_name = safe_strdup(map_name);
+ ret -> b.iso646 = safe_malloc(sizeof (* (ret -> b.iso646)));
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
for (i = 0; i < 12; i++)
! ret->b.iso646->iso646[i] = vector[i];
dyn_maps = safe_realloc(dyn_maps,
(dyn_map_count + 1) *
***************
*** 2736,2743 ****
}
static int cs_iso2022_info_set_unknown P_((struct charcode_info *new_vals,
! struct setlist *new_setlist,
! int setcount));
static int cs_iso2022_info_set_unknown(new_vals, new_setlist,setcount)
struct charcode_info *new_vals;
struct setlist *new_setlist;
--- 3102,3109 ----
}
static int cs_iso2022_info_set_unknown P_((struct charcode_info *new_vals,
! struct setlist *new_setlist,
! int setcount));
static int cs_iso2022_info_set_unknown(new_vals, new_setlist,setcount)
struct charcode_info *new_vals;
struct setlist *new_setlist;
Index: elm2.4.ME+.109-cvs/lib/cs_iso2022.c
*** elm2.4.ME+.108/lib/cs_iso2022.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.109-cvs/lib/cs_iso2022.c 2003-11-09 18:13:37.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.32 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.32 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.33 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 73,85 ****
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_iso2022;
ret -> map_name = safe_strdup(map_name);
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
for (i = 0;
! i < sizeof (ret->b.setlist) / sizeof (ret->b.setlist[0]);
i++) {
! ret->b.setlist[i] = i < count ? setlist[i] : -1;
}
return ret;
--- 73,87 ----
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_iso2022;
ret -> map_name = safe_strdup(map_name);
+ ret -> b.setlist = safe_malloc(sizeof (* (ret -> b.setlist)));
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
for (i = 0;
! i < sizeof (ret->b.setlist->setlist) /
! sizeof (ret->b.setlist->setlist[0]);
i++) {
! ret->b.setlist->setlist[i] = i < count ? setlist[i] : -1;
}
return ret;
***************
*** 119,131 ****
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_euc;
ret -> map_name = safe_strdup(map_name);
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
for (i = 0;
! i < sizeof (ret->b.setlist) / sizeof (ret->b.setlist[0]);
i++) {
! ret->b.setlist[i] = i < count ? setlist[i] : -1;
}
return ret;
--- 121,135 ----
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_euc;
ret -> map_name = safe_strdup(map_name);
+ ret -> b.setlist = safe_malloc(sizeof (* (ret -> b.setlist)));
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
for (i = 0;
! i < sizeof (ret->b.setlist->setlist) /
! sizeof (ret->b.setlist->setlist[0]);
i++) {
! ret->b.setlist->setlist[i] = i < count ? setlist[i] : -1;
}
return ret;
***************
*** 147,153 ****
for (count = 0; p[count]; count++) {
int i;
if (count >=
! sizeof (map->b.setlist) / sizeof (map->b.setlist[0]))
panic("STRING PANIC",__FILE__,__LINE__,"find_with_list",
"Too many maps",0);
--- 151,158 ----
for (count = 0; p[count]; count++) {
int i;
if (count >=
! sizeof (map->b.setlist->setlist) /
! sizeof (map->b.setlist->setlist[0]))
panic("STRING PANIC",__FILE__,__LINE__,"find_with_list",
"Too many maps",0);
***************
*** 161,175 ****
if (!iso2022_map_list[i].map)
panic("STRING PANIC",__FILE__,__LINE__,"find_with_list",
"No map for set",0);
! map->b.setlist[count] = i;
! DPRINT(Debug,61,(&Debug," %d",map->b.setlist[count]));
}
DPRINT(Debug,61,(&Debug,"\n"));
! while (count < sizeof (map->b.setlist) / sizeof (map->b.setlist[0]))
! map->b.setlist[count++] = -1;
}
/* ASCII -------------------------------------------------------------- */
--- 166,181 ----
if (!iso2022_map_list[i].map)
panic("STRING PANIC",__FILE__,__LINE__,"find_with_list",
"No map for set",0);
! map->b.setlist->setlist[count] = i;
! DPRINT(Debug,61,(&Debug," %d",map->b.setlist->setlist[count]));
}
DPRINT(Debug,61,(&Debug,"\n"));
! while (count < sizeof (map->b.setlist->setlist) /
! sizeof (map->b.setlist->setlist[0]))
! map->b.setlist->setlist[count++] = -1;
}
/* ASCII -------------------------------------------------------------- */
***************
*** 180,185 ****
--- 186,193 ----
{
struct iso2022_setid *XX[2] = { NULL, NULL };
+ map -> b.setlist = safe_malloc(sizeof (* (map -> b.setlist)));
+
XX[0] = ASCII_BANK;
find_with_list(XX,map);
***************
*** 209,214 ****
--- 217,224 ----
struct iso2022_setid *XX[3] = { NULL, NULL,
NULL };
+ map -> b.setlist = safe_malloc(sizeof (* (map -> b.setlist)));
+
XX[0] = ASCII_BANK;
XX[1] = LATIN1_BANK;
***************
*** 445,455 ****
iso2022_info->sets[X1->parts[i].set_index]) {
X1->parts[i].iso2022_map_index =
! give_iso2022_index(map->b.setlist,
! sizeof (map->b.setlist) /
! sizeof (map->b.setlist[0]),
iso2022_info->sets[X1->parts[i].
! set_index]);
} else
panic("ISO2022 PANIC",__FILE__,__LINE__,
"fill_iso2022_map_index",
--- 455,465 ----
iso2022_info->sets[X1->parts[i].set_index]) {
X1->parts[i].iso2022_map_index =
! give_iso2022_index(map->b.setlist->setlist,
! sizeof (map->b.setlist->setlist) /
! sizeof (map->b.setlist->setlist[0]),
iso2022_info->sets[X1->parts[i].
! set_index]);
} else
panic("ISO2022 PANIC",__FILE__,__LINE__,
"fill_iso2022_map_index",
***************
*** 1351,1359 ****
if (!map->map_initialized)
map->map_init_it(map);
! for (s = 0; s < sizeof (map->b.setlist) / sizeof (map->b.setlist[0]);
s++) {
! int iso2022_map_index = map->b.setlist[s];
if (-1 != iso2022_map_index &&
map_unicode_to_ISO2022_word_1(unicode,type,iso2022_map_index,
--- 1361,1370 ----
if (!map->map_initialized)
map->map_init_it(map);
! for (s = 0; s < sizeof (map->b.setlist->setlist) /
! sizeof (map->b.setlist->setlist[0]);
s++) {
! int iso2022_map_index = map->b.setlist->setlist[s];
if (-1 != iso2022_map_index &&
map_unicode_to_ISO2022_word_1(unicode,type,iso2022_map_index,
***************
*** 4105,4114 ****
st->charset->map_info->map_init_it(st->charset->map_info);
iso2022_map_index =
! give_iso2022_index(st->charset->map_info->b.setlist,
! sizeof (st->charset->map_info->b.setlist) /
sizeof (st->charset->map_info->
! b.setlist[0]),
st->charset->iso2022_info->
sets[X->banks[X->bank].iso2022_info_index]);
--- 4116,4126 ----
st->charset->map_info->map_init_it(st->charset->map_info);
iso2022_map_index =
! give_iso2022_index(st->charset->map_info->b.setlist->setlist,
! sizeof (st->charset->map_info->b.setlist->
! setlist) /
sizeof (st->charset->map_info->
! b.setlist->setlist[0]),
st->charset->iso2022_info->
sets[X->banks[X->bank].iso2022_info_index]);
Index: elm2.4.ME+.109-cvs/lib/cs_utf.c
*** elm2.4.ME+.108/lib/cs_utf.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.109-cvs/lib/cs_utf.c 2003-11-09 18:13:37.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: cs_utf.c,v 1.23 2002/06/28 18:33:11 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: cs_utf.c,v 1.24 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 73,83 ****
if (!map->map_initialized)
map->map_init_it(map);
! for (i = 0; i < map->b.utfmap.elem_count; i++) {
! if (ch >= map->b.utfmap.elems[i].start &&
! ch <= map->b.utfmap.elems[i].end) {
! return ( ch - map->b.utfmap.elems[i].start ) +
! map->b.utfmap.elems[i].unicodeval;
}
}
}
--- 73,83 ----
if (!map->map_initialized)
map->map_init_it(map);
! for (i = 0; i < map->b.utfmap->elem_count; i++) {
! if (ch >= map->b.utfmap->elems[i].start &&
! ch <= map->b.utfmap->elems[i].end) {
! return ( ch - map->b.utfmap->elems[i].start ) +
! map->b.utfmap->elems[i].unicodeval;
}
}
}
***************
*** 102,115 ****
if (!map->map_initialized)
map->map_init_it(map);
! for (i = 0; i < map->b.utfmap.elem_count; i++) {
! int n = map->b.utfmap.elems[i].end -
! map->b.utfmap.elems[i].start;
! if (val >= map->b.utfmap.elems[i].unicodeval &&
! val <= map->b.utfmap.elems[i].unicodeval+n) {
*found = 1;
! return ( val - map->b.utfmap.elems[i].unicodeval ) +
! map->b.utfmap.elems[i].start;
}
}
}
--- 102,115 ----
if (!map->map_initialized)
map->map_init_it(map);
! for (i = 0; i < map->b.utfmap->elem_count; i++) {
! int n = map->b.utfmap->elems[i].end -
! map->b.utfmap->elems[i].start;
! if (val >= map->b.utfmap->elems[i].unicodeval &&
! val <= map->b.utfmap->elems[i].unicodeval+n) {
*found = 1;
! return ( val - map->b.utfmap->elems[i].unicodeval ) +
! map->b.utfmap->elems[i].start;
}
}
}
***************
*** 121,128 ****
static void map_init_utfX(map)
struct map_info *map;
{
! map->b.utfmap.elem_count = sizeof (utfXelems) / sizeof (utfXelems[0]);
! map->b.utfmap.elems = utfXelems;
map->map_initialized = 1;
DPRINT(Debug,5,(&Debug,
--- 121,130 ----
static void map_init_utfX(map)
struct map_info *map;
{
! map->b.utfmap = safe_malloc(sizeof (* (map -> b.utfmap)));
! map->b.utfmap->elem_count =
! sizeof (utfXelems) / sizeof (utfXelems[0]);
! map->b.utfmap->elems = utfXelems;
map->map_initialized = 1;
DPRINT(Debug,5,(&Debug,
***************
*** 169,175 ****
}
}
! F = open_mapname(name,&fn,NULL);
if (!F) {
if (fn)
free(fn);
--- 171,177 ----
}
}
! F = open_mapname(name,&fn);
if (!F) {
if (fn)
free(fn);
***************
*** 258,267 ****
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_utf8;
ret -> map_name = safe_strdup(map_name);
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! ret -> b.utfmap.elem_count = elemcount;
! ret -> b.utfmap.elems = elems;
}
return ret;
--- 260,270 ----
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_utf8;
ret -> map_name = safe_strdup(map_name);
+ ret -> b.utfmap = safe_malloc(sizeof (* (ret -> b.utfmap)));
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! ret -> b.utfmap->elem_count = elemcount;
! ret -> b.utfmap->elems = elems;
}
return ret;
***************
*** 279,288 ****
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_utf7;
ret -> map_name = safe_strdup(map_name);
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! ret -> b.utfmap.elem_count = elemcount;
! ret -> b.utfmap.elems = elems;
}
return ret;
--- 282,292 ----
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_utf7;
ret -> map_name = safe_strdup(map_name);
+ ret -> b.utfmap = safe_malloc(sizeof (* (ret -> b.utfmap)));
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! ret -> b.utfmap->elem_count = elemcount;
! ret -> b.utfmap->elems = elems;
}
return ret;
***************
*** 301,310 ****
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_imap;
ret -> map_name = safe_strdup(map_name);
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! ret -> b.utfmap.elem_count = elemcount;
! ret -> b.utfmap.elems = elems;
}
return ret;
--- 305,315 ----
ret = safe_malloc(sizeof (struct map_info));
ret -> map_type = &cs_imap;
ret -> map_name = safe_strdup(map_name);
+ ret -> b.utfmap = safe_malloc(sizeof (* (ret -> b.utfmap)));
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! ret -> b.utfmap->elem_count = elemcount;
! ret -> b.utfmap->elems = elems;
}
return ret;
Index: elm2.4.ME+.109-cvs/lib/iso2022_map.c
*** elm2.4.ME+.108/lib/iso2022_map.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.109-cvs/lib/iso2022_map.c 2003-11-09 18:13:37.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: iso2022_map.c,v 1.6 2002/07/28 08:55:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: iso2022_map.c,v 1.7 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 35,87 ****
}
! /* NOT yet used */
! static struct map_list {
! char * name;
!
! } * map_list = NULL;
! static int map_list_count = 0;
!
! static int add_to_index P_((const char *name));
! static int add_to_index(name)
CONST char *name;
{
! int i;
! int ret = -1;
!
! for (i = 0; i < map_list_count; i++)
! if (0 == strcmp(name,map_list[i].name)) {
! ret = i;
! goto ok;
! }
!
! map_list = safe_realloc(map_list,
! (map_list_count+1) * sizeof (map_list[0]));
!
! map_list[map_list_count].name = safe_strdup(name);
!
! ret = map_list_count++;
!
! ok:
!
! DPRINT(Debug,8,(&Debug,
! "Map %s general index=%d\n",name,ret));
!
! return ret;
}
! FILE * open_mapname(name,fn,index)
CONST char *name;
char **fn;
- int *index;
{
int err = 0;
int map_dir = 0;
- int TMP_INDEX = -1;
if ('\0' == *name)
return NULL;
! if (NULL == strpbrk(name,"/$\\;{}()")) {
if (0 != access(map_txtdir,ACCESS_EXISTS)) {
int err = errno;
lib_error(CATGETS(elm_msg_cat, MeSet,MeNoTxtMapDir,
--- 35,56 ----
}
! int is_on_mapdir(name)
CONST char *name;
{
! return NULL == strpbrk(name,"/$\\;{}()");
}
! FILE * open_mapname(name,fn)
CONST char *name;
char **fn;
{
int err = 0;
int map_dir = 0;
if ('\0' == *name)
return NULL;
! if (is_on_mapdir(name)) {
if (0 != access(map_txtdir,ACCESS_EXISTS)) {
int err = errno;
lib_error(CATGETS(elm_msg_cat, MeSet,MeNoTxtMapDir,
***************
*** 108,119 ****
if (ENOENT == err && map_dir) {
FILE *F = copy_cb(name,*fn);
if (F) {
-
- if (index) {
- TMP_INDEX = add_to_index(name);
- *index = TMP_INDEX;
- }
-
return F;
}
}
--- 77,82 ----
***************
*** 133,143 ****
return NULL;
}
- if (index) {
- if (map_dir)
- TMP_INDEX = add_to_index(name);
- *index = TMP_INDEX;
- }
return F;
}
return NULL;
--- 96,101 ----
***************
*** 202,208 ****
#define MAX_ERROR 5
void read_map_format_a(name,map_info,iso2022_map_info,
! F,index_number,pass_caller,
field_count, vector,
fn
)
--- 160,166 ----
#define MAX_ERROR 5
void read_map_format_a(name,map_info,iso2022_map_info,
! F,pass_caller,
field_count, vector,
fn
)
***************
*** 210,216 ****
struct map_info *map_info;
struct iso2022_mapinfo *iso2022_map_info;
FILE *F;
- int index_number;
set_map_callmap * pass_caller;
int field_count;
enum field_type *vector;
--- 168,173 ----
***************
*** 303,310 ****
DPRINT(Debug,9,(&Debug,
! "map %d: %s: line %d -- %d fields:\n",
! index_number,name, lineno,count+1));
for (i = 0; i <= count && i < field_count; i++) {
DPRINT(Debug,9,(&Debug," ... field %d: %s\n",
i,col[i].N));
--- 260,267 ----
DPRINT(Debug,9,(&Debug,
! "%s: line %d -- %d fields:\n",
! name, lineno,count+1));
for (i = 0; i <= count && i < field_count; i++) {
DPRINT(Debug,9,(&Debug," ... field %d: %s\n",
i,col[i].N));
***************
*** 332,339 ****
if (count <= i) {
DPRINT(Debug,12,(&Debug,
! "map %d: %s: line %s... no field %d\n",
! index_number,name, buffer, i));
}
if (col[i].N == NULL ||
--- 289,296 ----
if (count <= i) {
DPRINT(Debug,12,(&Debug,
! "%s: line %s... no field %d\n",
! name, buffer, i));
}
if (col[i].N == NULL ||
***************
*** 341,348 ****
'#' == col[i].N[0]) {
DPRINT(Debug,9,(&Debug,
! "map %d: %s: line %s... no mapping\n",
! index_number,name, buffer));
goto no_mapping;
}
--- 298,305 ----
'#' == col[i].N[0]) {
DPRINT(Debug,9,(&Debug,
! "%s: line %s... no mapping\n",
! name, buffer));
goto no_mapping;
}
***************
*** 437,444 ****
ok ++;
} else {
DPRINT(Debug,12,(&Debug,
! "map %d: %s: line %s... no intresting values l1=%ld l2=%ld\n",
! index_number,name, buffer,l1,l2));
}
}
--- 394,401 ----
ok ++;
} else {
DPRINT(Debug,12,(&Debug,
! "%s: line %s... no intresting values l1=%ld l2=%ld\n",
! name, buffer,l1,l2));
}
}
***************
*** 450,457 ****
ok_iso2022++;
} else {
DPRINT(Debug,12,(&Debug,
! "map %d: %s: line %s... no intresting values l1=%ld l2=%ld\n",
! index_number,name, buffer,l1,l2));
}
} else if (96 == iso2022_map_info->vlen &&
( iso2022_94 == iso2022_map_info->type ||
--- 407,414 ----
ok_iso2022++;
} else {
DPRINT(Debug,12,(&Debug,
! "%s: line %s... no intresting values l1=%ld l2=%ld\n",
! name, buffer,l1,l2));
}
} else if (96 == iso2022_map_info->vlen &&
( iso2022_94 == iso2022_map_info->type ||
***************
*** 469,476 ****
ok_iso2022++;
} else {
DPRINT(Debug,12,(&Debug,
! "map %d: %s: line %s... no intresting values l1=%ld l2=%ld\n",
! index_number,name, buffer,l1,l2));
}
} else if (96*96 == iso2022_map_info->vlen &&
( iso2022_94x94 == iso2022_map_info->type ||
--- 426,433 ----
ok_iso2022++;
} else {
DPRINT(Debug,12,(&Debug,
! "%s: line %s... no intresting values l1=%ld l2=%ld\n",
! name, buffer,l1,l2));
}
} else if (96*96 == iso2022_map_info->vlen &&
( iso2022_94x94 == iso2022_map_info->type ||
***************
*** 483,490 ****
ok_iso2022++;
} else {
DPRINT(Debug,12,(&Debug,
! "map %d: %s: line %s... no intresting values lmb=%ld l2=%ld\n",
! index_number,name, buffer,lmb,l2));
}
} else {
panic("ISO2022 PANIC",__FILE__,__LINE__,"read_map_format_a",
--- 440,447 ----
ok_iso2022++;
} else {
DPRINT(Debug,12,(&Debug,
! "%s: line %s... no intresting values lmb=%ld l2=%ld\n",
! name, buffer,lmb,l2));
}
} else {
panic("ISO2022 PANIC",__FILE__,__LINE__,"read_map_format_a",
***************
*** 500,507 ****
col = NULL;
DPRINT(Debug,8,(&Debug,
! "map %d: %s: %d / %d items read\n",
! index_number,name,
ok,ok_iso2022));
}
--- 457,464 ----
col = NULL;
DPRINT(Debug,8,(&Debug,
! "%s: %d / %d items read\n",
! name,
ok,ok_iso2022));
}
***************
*** 596,602 ****
{
struct iso2022_mapinfo * ret = NULL;
char *fn = NULL;
- int Index = -1;
FILE * F;
if ( (code & PF_RANGE) &&
--- 553,558 ----
***************
*** 608,614 ****
}
! F = open_mapname(filename,&fn,&Index);
if (F) {
int i;
--- 564,570 ----
}
! F = open_mapname(filename,&fn);
if (F) {
int i;
***************
*** 642,653 ****
};
if (ret->vlen > 256)
! read_map_format_a(filename,NULL,ret,F,Index,
NULL_set_map_callmap,
4,vector_MB3,fn);
else
! read_map_format_a(filename,NULL,ret,F,Index,
NULL_set_map_callmap,
4,vector_BYTE3,fn);
--- 598,609 ----
};
if (ret->vlen > 256)
! read_map_format_a(filename,NULL,ret,F,
NULL_set_map_callmap,
4,vector_MB3,fn);
else
! read_map_format_a(filename,NULL,ret,F,
NULL_set_map_callmap,
4,vector_BYTE3,fn);
***************
*** 659,665 ****
val_byte, val_unicode, val_comment
};
! read_map_format_a(filename,NULL,ret,F,Index,
NULL_set_map_callmap,
3,vector_BYTE2,fn);
--- 615,621 ----
val_byte, val_unicode, val_comment
};
! read_map_format_a(filename,NULL,ret,F,
NULL_set_map_callmap,
3,vector_BYTE2,fn);
***************
*** 676,687 ****
};
if (ret->vlen > 256)
! read_map_format_a(filename,NULL,ret,F,Index,
NULL_set_map_callmap,
3,vector_MB2,fn);
else
! read_map_format_a(filename,NULL,ret,F,Index,
NULL_set_map_callmap,
3,vector_BYTE2,fn);
}
--- 632,643 ----
};
if (ret->vlen > 256)
! read_map_format_a(filename,NULL,ret,F,
NULL_set_map_callmap,
3,vector_MB2,fn);
else
! read_map_format_a(filename,NULL,ret,F,
NULL_set_map_callmap,
3,vector_BYTE2,fn);
}
Index: elm2.4.ME+.109-cvs/lib/MAGIC
*** elm2.4.ME+.108/lib/MAGIC 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/lib/MAGIC 2003-11-09 18:13:36.000000000 +0200
***************
*** 16,21 ****
--- 16,22 ----
#define SORTDATATYPE_magic 0xFC03
#define RF_magic 0xFA00
#define UNIDATA_magic 0xFB00
+ #define BINDATA_magic 0xFB01
#define HEADER_magic 0xFC00
#define MAIL_HDR_magic 0xFC01
#define EXP_ADDR_magic 0xFC02
Index: elm2.4.ME+.109-cvs/lib/Makefile.SH
*** elm2.4.ME+.108/lib/Makefile.SH 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/lib/Makefile.SH 2003-11-09 18:13:37.000000000 +0200
***************
*** 46,52 ****
echo "Extracting lib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.86 2003/10/01 17:34:34 hurtta Exp $
#
# Makefile for the ELM mail program.
#
--- 46,52 ----
echo "Extracting lib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.87 2003/11/09 16:13:37 hurtta Exp $
#
# Makefile for the ELM mail program.
#
***************
*** 140,145 ****
--- 140,147 ----
# Lists
LIB_SRC = add_site.c \
atonum.c \
+ bindata.c \
+ mmaputil.c \
mk_aliases.c \
aliasdb.c \
mk_lockname.c \
***************
*** 236,241 ****
--- 238,245 ----
LIB_OBJ = add_site.o \
atonum.o \
+ bindata.o \
+ mmaputil.o \
mk_aliases.o \
aliasdb.o \
mk_lockname.o \
***************
*** 388,393 ****
--- 392,400 ----
# --- Dependencies of C object files
add_site.o: $(INCLDIR)/headers.h
atonum.o: $(INCLDIR)/headers.h
+ bindata.o: $(INCLDIR)/headers.h $(INCLDIR)/mmaputil.h \
+ $(INCLDIR)/cs_imp.h $(INCLDIR)/s_me.h $(INCLDIR)/bindata.h
+ mmaputil.o: $(INCLDIR)/headers.h $(INCLDIR)/mmaputil.h
dynarray.o: $(INCLDIR)/headers.h
mk_aliases.o: $(INCLDIR)/headers.h $(INCLDIR)/ndbz.h $(INCLDIR)/s_newalias.h
aliasdb.o: $(INCLDIR)/headers.h $(INCLDIR)/ndbz.h
***************
*** 398,406 ****
charset.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/shared_imp.h
precompiled_sets.o: $(INCLDIR)/cs_imp.h $(INCLDIR)/elmlib.h $(INCLDIR)/defs.h
-
charset_input.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! cs_binary.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
cs_fallback.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
cs_utf.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
cs_iso2022.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h $(INCLDIR)/cs_terminal.h
--- 405,413 ----
charset.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/shared_imp.h
precompiled_sets.o: $(INCLDIR)/cs_imp.h $(INCLDIR)/elmlib.h $(INCLDIR)/defs.h
charset_input.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! cs_binary.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
! $(INCLDIR)/bindata.h
cs_fallback.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
cs_utf.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
cs_iso2022.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h $(INCLDIR)/cs_terminal.h
***************
*** 457,464 ****
rc_handle.o: $(INCLDIR)/headers.h $(INCLDIR)/save_opts.h \
$(INCLDIR)/s_elm.h $(INCLDIR)/rc_imp.h $(INCLDIR)/shared_imp.h
read_rc.o: $(INCLDIR)/headers.h $(INCLDIR)/save_opts.h \
! $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h $(INCLDIR)/rc_imp.h $(INCLDIR)/unidata.h
! realfrom.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h
remote_mbx.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/shared_imp.h $(INCLDIR)/ss_imp.h
qstrings.o: $(INCLDIR)/headers.h
--- 464,472 ----
rc_handle.o: $(INCLDIR)/headers.h $(INCLDIR)/save_opts.h \
$(INCLDIR)/s_elm.h $(INCLDIR)/rc_imp.h $(INCLDIR)/shared_imp.h
read_rc.o: $(INCLDIR)/headers.h $(INCLDIR)/save_opts.h \
! $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h $(INCLDIR)/rc_imp.h \
! $(INCLDIR)/unidata.h
! realfrom.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h
remote_mbx.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/shared_imp.h $(INCLDIR)/ss_imp.h
qstrings.o: $(INCLDIR)/headers.h
***************
*** 490,496 ****
strtokq.o: $(INCLDIR)/headers.h
syscall.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h
terminal.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h $(INCLDIR)/cs_terminal.h
! unicode.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/unidata.h
unidata.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/unidata.h
write_hdr.o: $(INCLDIR)/headers.h
--- 498,504 ----
strtokq.o: $(INCLDIR)/headers.h
syscall.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h
terminal.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h $(INCLDIR)/cs_terminal.h
! unicode.o: $(INCLDIR)/headers.h $(INCLDIR)/mmaputil.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/unidata.h
unidata.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/unidata.h
write_hdr.o: $(INCLDIR)/headers.h
Index: elm2.4.ME+.109-cvs/lib/mbox.c
*** elm2.4.ME+.108/lib/mbox.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/lib/mbox.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.48 2003/08/04 14:58:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.48 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.49 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 2052,2057 ****
--- 2052,2058 ----
else if (hdr->pgp & PGP_SIGNED_MESSAGE) mybuffer[1] = 'S';
else if (hdr->pgp & PGP_PUBLIC_KEY) mybuffer[1] = 'K';
#endif /* USE_PGP */
+ else if (hdr->override_charset) mybuffer[1] = 'o';
}
DPRINT(Debug,11,(&Debug, "show_message_status=%s\n", mybuffer));
Index: elm2.4.ME+.109-cvs/lib/mmaputil.c
*** /tmp/5164-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-11-15 18:08:47.000000000 +0200
--- elm2.4.ME+.109-cvs/lib/mmaputil.c 2003-11-09 18:13:37.000000000 +0200
***************
*** 0 ****
--- 1,128 ----
+ static char rcsid[] = "@(#)$Id: mmaputil.c,v 1.2 2003/11/09 16:13:37 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+ #include "headers.h"
+ #include "mmaputil.h"
+ #include <errno.h>
+ #ifndef ANSI_C
+ extern int errno;
+ #endif
+
+ DEBUG_VAR(Debug,__FILE__,"charset");
+
+ uint16 SWAP (b)
+ int b;
+ {
+ union {
+ uint16 a;
+ unsigned char c[2];
+ } d;
+ unsigned char tmp;
+ d.a = b;
+
+ if (sizeof d.a != 2) {
+ panic("MMAP PANIC",__FILE__,__LINE__,"SWAP",
+ "sizeof uint16 !=2 -- 'Configure' error!",0);
+ }
+ tmp = d.c[0]; d.c[0] = d.c[1]; d.c[1] = tmp;
+ return d.a;
+ }
+
+
+ uint16 pages(len,pagesize)
+ size_t len;
+ int pagesize;
+ {
+ uint16 result = len / pagesize;
+
+ if (len % pagesize != 0)
+ result++;
+ return result;
+ }
+
+ int write_range(fd,offset,length,ptr)
+ int fd;
+ off_t offset;
+ size_t length;
+ unsigned char *ptr;
+ {
+ int status = 1;
+
+ if (-1 == lseek(fd,offset,SEEK_SET)) {
+ int err = errno;
+ status = 0;
+
+ DPRINT(Debug,5,(&Debug,"unidata: lseek failed: errno=%d (%s)\n", \
+ err,error_description(err)));
+
+ goto fail;
+ }
+
+ while (length > 0) {
+ int n = write(fd,ptr,length);
+
+ if (-1 == n) {
+ int err = errno;
+ status = 0;
+
+ DPRINT(Debug,5,(&Debug,"unidata: write failed: errno=%d (%s)\n", \
+ err,error_description(err)));
+
+ goto fail;
+ }
+ length -= n;
+ ptr += n;
+ }
+
+ fail:
+ return status;
+ }
+
+
+ int read_range(fd,offset,length,ptr)
+ int fd;
+ off_t offset;
+ size_t length;
+ unsigned char *ptr;
+ {
+ int status = 1;
+ if (-1 == lseek(fd,offset,SEEK_SET)) {
+ status = 0;
+ goto fail;
+ }
+
+ while (length > 0) {
+ int n = read(fd,ptr,length);
+
+ if (-1 == n) {
+ status = 0;
+ goto fail;
+ }
+ if (0 == n) {
+ errno = EINVAL; /* Simulate error */
+ status = 0;
+ goto fail;
+ }
+
+ length -= n;
+ ptr += n;
+ }
+
+ fail:
+ return status;
+ }
+
+
+ /* KESKEN */
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.109-cvs/lib/read_rc.c
*** elm2.4.ME+.108/lib/read_rc.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/lib/read_rc.c 2003-11-10 17:15:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.118 2003/10/11 08:42:11 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.118 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.121 2003/11/10 15:15:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.121 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 93,98 ****
--- 93,102 ----
char unidata_path[SLEN] = {0}; /* init_defaults */
char raw_unidata_path[SLEN] = "unidata.bin"; /* init_defaults */
+ char bindata_path_global[SLEN] = {0}; /* Used before user elm.rc is read */
+ char bindata_path[SLEN] = {0}; /* init_defaults */
+ char raw_bindata_path[SLEN] = "bindata.bin"; /* init_defaults */
+
char user_rc_file[SLEN] = ELMRCFILE; /* user_init fixes */
***************
*** 306,312 ****
char printout[SLEN] = {0}; /* how to print messages */
char raw_printout[SLEN] = DEFAULT_PRINTOUT;
/* unexpanded how to print messages */
! int prompt_after_pager = 1; /* flag: prompt after pager exits */
int quote_forward = 0; /* flag: fwd'd msgs quoted like replies */
int readdatapercentinc = 5; /* data percent increment during new mbox read */
int readmsginc = 100; /* increment of msg cnt when reading*/
--- 310,317 ----
char printout[SLEN] = {0}; /* how to print messages */
char raw_printout[SLEN] = DEFAULT_PRINTOUT;
/* unexpanded how to print messages */
! int prompt_after_pager = 1; /* flag: prompt after pager exits */
! int prompt_after_metamail = 1; /* flag: prompt after metamail exits */
int quote_forward = 0; /* flag: fwd'd msgs quoted like replies */
int readdatapercentinc = 5; /* data percent increment during new mbox read */
int readmsginc = 100; /* increment of msg cnt when reading*/
***************
*** 407,412 ****
--- 412,454 ----
}
}
+ static void expand_map_bin P_((char *descr, char *dest, char *src,
+ unsigned destlen));
+ static void expand_map_bin(descr, dest, src, destlen)
+ char *descr, *dest, *src;
+ unsigned destlen;
+ {
+ if (strcmp(src,"none") == 0 || src[0] == '\0') {
+
+ strfcpy(dest,"none",destlen);
+
+ } else if (NULL == strpbrk(src,"/$\\;{}()")) {
+ if (0 != access(map_bindir,ACCESS_EXISTS)) {
+ int err = errno;
+ lib_error(CATGETS(elm_msg_cat, ElmSet,ElmNoBinMapDirX,
+ "%s: no map-bin-dir exist: %s: %s"),
+ descr,
+ map_bindir,error_description(err));
+
+ /* No error counter incrementging because
+ map-bin-dir can be modified only on system
+ elm.rc
+ */
+ }
+ elm_sfprintf(dest,destlen,
+ FRM("%s/%s"),
+ map_bindir,src);
+
+ } else
+ do_expand_meta(descr, dest, src, destlen);
+
+
+ DPRINT(Debug,10,(&Debug, "%s expanded: %s => %s (destlen %d)\n",
+ descr,src,dest,destlen));
+
+
+ }
+
/* sets locale and elm_msg_cat */
static int locale_init_called = 0;
static int locale_error = 0;
***************
*** 1139,1148 ****
do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
sizeof(map_txtdir));
! /* Also map-bin-dir may be referenced on future ... */
do_expand_meta("map-bin-dir", map_bindir, raw_map_bindir,
sizeof(map_bindir));
if ((cp = getenv("MAILCAPS")) == NULL) {
--- 1181,1193 ----
do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
sizeof(map_txtdir));
! /* Also map-bin-dir used by expand_map_bin() ... */
do_expand_meta("map-bin-dir", map_bindir, raw_map_bindir,
sizeof(map_bindir));
+ /* Also bindata ... notice temorary variable */
+ expand_map_bin("bindata", bindata_path_global, raw_bindata_path,
+ sizeof(bindata_path));
if ((cp = getenv("MAILCAPS")) == NULL) {
***************
*** 1302,1307 ****
--- 1347,1354 ----
}
+
+
int read_rc_file(flag)
int flag;
{
***************
*** 1324,1329 ****
--- 1371,1389 ----
fclose(file);
}
+
+ /* load_locale_map may refer to map-text-dir ... */
+ do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
+ sizeof(map_txtdir));
+
+ /* Also map-bin-dir used by expand_map_bin() ... */
+ do_expand_meta("map-bin-dir", map_bindir, raw_map_bindir,
+ sizeof(map_bindir));
+
+ /* Also bindata ... */
+ expand_map_bin("bindata", bindata_path, raw_bindata_path,
+ sizeof(bindata_path));
+
parse_iso2022_map(user_iso2022_sets,&errors, ml_user);
user_locale_map = load_locale_map(user_mime_charsets,&errors);
user_terminal_map = load_terminal_map(user_terminal_info,&errors);
***************
*** 1478,1509 ****
do_expand_meta("sent_mail", sent_mail, raw_sentmail,
sizeof(sent_mail));
- if (strcmp(raw_unidata_path,"none") == 0 ||
- raw_unidata_path[0] == '\0') {
-
- strfcpy(raw_unidata_path,"none",sizeof raw_unidata_path);
- strfcpy(unidata_path,"none",sizeof unidata_path);
-
- } else if (NULL == strpbrk(raw_unidata_path,"/$\\;{}()")) {
- if (0 != access(map_bindir,ACCESS_EXISTS)) {
- int err = errno;
- lib_error(CATGETS(elm_msg_cat, ElmSet,ElmNoBinMapDir,
- "Unidata: no map-bin-dir exist: %s: %s"),
- map_bindir,error_description(err));
-
- /* No error counter incrementging because
- map-bin-dir can be modified only on system
- elm.rc
- */
- }
- elm_sfprintf(unidata_path,sizeof unidata_path,
- FRM("%s/%s"),
- map_bindir,raw_unidata_path);
-
- } else
- do_expand_meta("unidata", unidata_path, raw_unidata_path,
- sizeof(unidata_path));
map_system_charset(display_locale,display_codeset);
--- 1538,1551 ----
do_expand_meta("sent_mail", sent_mail, raw_sentmail,
sizeof(sent_mail));
+
+
+ expand_map_bin("unidata", unidata_path, raw_unidata_path,
+ sizeof(unidata_path));
+
+ expand_map_bin("bindata", bindata_path, raw_bindata_path,
+ sizeof(bindata_path));
map_system_charset(display_locale,display_codeset);
***************
*** 1717,1722 ****
--- 1759,1783 ----
}
+ if (0 != strcmp(bindata_path,"none") &&
+ 0 != strcmp(bindata_path_global,bindata_path)) {
+
+ if (0 == (flag & READ_FLAG_BINDATA_INIT)
+ &&
+ !default_bindata()) {
+
+ lib_error(CATGETS(elm_msg_cat, ElmSet,ElmBinaryMapData,
+ "No binary map data available: bindata: %s"),
+ raw_bindata_path);
+
+ errors++;
+
+ strfcpy(raw_bindata_path,"none",sizeof raw_bindata_path);
+ strfcpy(bindata_path,"none",sizeof bindata_path);
+
+ }
+ }
+
if (strcmp(raw_metamail_path,"none") == 0 ||
raw_metamail_path[0] == '\0') {
strfcpy(raw_metamail_path,"none", sizeof raw_metamail_path);
Index: elm2.4.ME+.109-cvs/lib/unicode.c
*** elm2.4.ME+.108/lib/unicode.c 2002-01-26 13:15:59.000000000 +0200
--- elm2.4.ME+.109-cvs/lib/unicode.c 2003-11-09 18:13:37.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: unicode.c,v 1.14 2002/01/23 17:09:35 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: unicode.c,v 1.15 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 27,33 ****
unsigned int ch;
enum unicode_op op;
{
! struct mapped_data * XX = default_unidata();
if (XX) {
static int flip = 0;
--- 27,33 ----
unsigned int ch;
enum unicode_op op;
{
! struct unidata_mapped_data * XX = default_unidata();
if (XX) {
static int flip = 0;
***************
*** 176,182 ****
uint16 *words;
int *len;
{
! struct mapped_data * XX = default_unidata();
if (XX) {
int have_comp = 0;
--- 176,182 ----
uint16 *words;
int *len;
{
! struct unidata_mapped_data * XX = default_unidata();
if (XX) {
int have_comp = 0;
***************
*** 258,266 ****
/* ---------------------------------------------------------------------- */
! struct mapped_data * default_unidata()
{
! static struct mapped_data * res = NULL;
if (0 != strcmp(unidata_path,"none") && !res) {
static int tried = 0;
--- 258,266 ----
/* ---------------------------------------------------------------------- */
! struct unidata_mapped_data * default_unidata()
{
! static struct unidata_mapped_data * res = NULL;
if (0 != strcmp(unidata_path,"none") && !res) {
static int tried = 0;
Index: elm2.4.ME+.109-cvs/lib/unidata.c
*** elm2.4.ME+.108/lib/unidata.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.109-cvs/lib/unidata.c 2003-11-09 18:13:37.000000000 +0200
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.24 2002/11/10 11:25:31 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
#include "headers.h"
#include "s_me.h"
#include "unidata.h"
#include <errno.h>
--- 1,13 ----
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.25 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
#include "headers.h"
+ #include "mmaputil.h"
#include "s_me.h"
#include "unidata.h"
#include <errno.h>
***************
*** 92,125 ****
#define UNIDATA_magic 0xFB00
- uint16 SWAP (b)
- int b;
- {
- union {
- uint16 a;
- unsigned char c[2];
- } d;
- unsigned char tmp;
- d.a = b;
-
- if (sizeof d.a != 2) {
- panic("UNIDATA PANIC",__FILE__,__LINE__,"SWAP",
- "sizeof uint16 !=2 -- 'Configure' error!",0);
- }
- tmp = d.c[0]; d.c[0] = d.c[1]; d.c[1] = tmp;
- return d.a;
- }
-
- uint16 pages(len,pagesize)
- size_t len;
- int pagesize;
- {
- uint16 result = len / pagesize;
-
- if (len % pagesize != 0)
- result++;
- return result;
- }
enum unidata_format { unidata_bad = 0, unidata_format_1 = UNIDATA_magic };
--- 93,98 ----
***************
*** 299,375 ****
#define READ_VALUE(x,byte_swapped) (byte_swapped ? SWAP(x) : x)
- int write_range(fd,offset,length,ptr)
- int fd;
- off_t offset;
- size_t length;
- unsigned char *ptr;
- {
- int status = 1;
-
- if (-1 == lseek(fd,offset,SEEK_SET)) {
- int err = errno;
- status = 0;
-
- DPRINT(Debug,5,(&Debug,"unidata: lseek failed: errno=%d (%s)\n", \
- err,error_description(err)));
-
- goto fail;
- }
-
- while (length > 0) {
- int n = write(fd,ptr,length);
-
- if (-1 == n) {
- int err = errno;
- status = 0;
-
- DPRINT(Debug,5,(&Debug,"unidata: write failed: errno=%d (%s)\n", \
- err,error_description(err)));
-
- goto fail;
- }
- length -= n;
- ptr += n;
- }
-
- fail:
- return status;
- }
-
- int read_range(fd,offset,length,ptr)
- int fd;
- off_t offset;
- size_t length;
- unsigned char *ptr;
- {
- int status = 1;
- if (-1 == lseek(fd,offset,SEEK_SET)) {
- status = 0;
- goto fail;
- }
-
- while (length > 0) {
- int n = read(fd,ptr,length);
-
- if (-1 == n) {
- status = 0;
- goto fail;
- }
- if (0 == n) {
- errno = EINVAL; /* Simulate error */
- status = 0;
- goto fail;
- }
-
- length -= n;
- ptr += n;
- }
-
- fail:
- return status;
- }
-
static void dump_header P_((struct unidata_format_1 *v,
int byte_swapped,
CONST char *filename));
--- 272,277 ----
***************
*** 533,544 ****
}
static int calculate_sizes P_((struct unidata_format_1 *v,
- int byte_swapped,
CONST char *filename));
! static int calculate_sizes (v,byte_swapped,filename)
struct unidata_format_1 *v;
- int byte_swapped;
CONST char *filename;
{
uint16 pagesize = READ_VALUE(v->header->page_size,v->byte_swapped);
--- 435,444 ----
}
static int calculate_sizes P_((struct unidata_format_1 *v,
CONST char *filename));
! static int calculate_sizes (v,filename)
struct unidata_format_1 *v;
CONST char *filename;
{
uint16 pagesize = READ_VALUE(v->header->page_size,v->byte_swapped);
***************
*** 555,561 ****
lib_error(CATGETS(elm_msg_cat, MeSet, MeCorruptedMapfile,
"Mapfile %.30s is corrupted"),
filename);
! DPRINT(Debug,1,(&Debug,"calculate_sized failed #1 -- sizeof check\n"));
return 0;
}
--- 455,461 ----
lib_error(CATGETS(elm_msg_cat, MeSet, MeCorruptedMapfile,
"Mapfile %.30s is corrupted"),
filename);
! DPRINT(Debug,1,(&Debug,"calculate_sizes failed #1 -- sizeof check\n"));
return 0;
}
***************
*** 677,683 ****
pagesize = READ_VALUE(v->header->page_size,v->byte_swapped);
dump_header(v,byte_swapped,filename);
! if (!calculate_sizes(v,byte_swapped,filename)) {
status = 0;
goto fail_1;
}
--- 577,583 ----
pagesize = READ_VALUE(v->header->page_size,v->byte_swapped);
dump_header(v,byte_swapped,filename);
! if (!calculate_sizes(v,filename)) {
status = 0;
goto fail_1;
}
***************
*** 831,837 ****
}
dump_header(v,byte_swapped,filename);
! if (!calculate_sizes(v,byte_swapped,filename)) {
status = 0;
goto fail_2;
}
--- 731,737 ----
}
dump_header(v,byte_swapped,filename);
! if (!calculate_sizes(v,filename)) {
status = 0;
goto fail_2;
}
***************
*** 1063,1069 ****
}
}
! struct mapped_data {
enum unidata_format format;
union {
struct unidata_format_1 f1;
--- 963,969 ----
}
}
! struct unidata_mapped_data {
enum unidata_format format;
union {
struct unidata_format_1 f1;
***************
*** 1071,1077 ****
};
void free_unidata(v)
! struct mapped_data * v;
{
switch(v->format) {
case unidata_format_1: free_unidata_1(&(v->v.f1));
--- 971,977 ----
};
void free_unidata(v)
! struct unidata_mapped_data * v;
{
switch(v->format) {
case unidata_format_1: free_unidata_1(&(v->v.f1));
***************
*** 1082,1088 ****
}
int write_unidata(v,filename)
! struct mapped_data *v;
CONST char *filename;
{
char *tmpname;
--- 982,988 ----
}
int write_unidata(v,filename)
! struct unidata_mapped_data *v;
CONST char *filename;
{
char *tmpname;
***************
*** 1176,1185 ****
int get_unidata(ptr,filename)
! struct mapped_data **ptr;
CONST char *filename;
{
! struct mapped_data * res = *ptr;
int status = 0;
int fd, err;
--- 1076,1085 ----
int get_unidata(ptr,filename)
! struct unidata_mapped_data **ptr;
CONST char *filename;
{
! struct unidata_mapped_data * res = *ptr;
int status = 0;
int fd, err;
***************
*** 1244,1250 ****
free_unidata(res);
res = NULL;
! res = safe_malloc(sizeof (struct mapped_data));
res->format = unidata_bad;
--- 1144,1150 ----
free_unidata(res);
res = NULL;
! res = safe_malloc(sizeof (struct unidata_mapped_data));
res->format = unidata_bad;
***************
*** 1621,1627 ****
}
int write_unidata_text(v,f)
! struct mapped_data *v;
FILE *f;
{
int status = 0;
--- 1521,1527 ----
}
int write_unidata_text(v,f)
! struct unidata_mapped_data *v;
FILE *f;
{
int status = 0;
***************
*** 2057,2063 ****
return 0;
if (0 != (p1->flags & FLAGS_have_decimal) && p1->decimal != p2->decimal)
return 0;
! if (0 != (p1->flags & FLAGS_have_decomp) && p1->decimal != p2->decomp)
return 0;
if (0 != (p1->flags & FLAGS_have_upper) && p1->upper != p2->upper)
return 0;
--- 1957,1963 ----
return 0;
if (0 != (p1->flags & FLAGS_have_decimal) && p1->decimal != p2->decimal)
return 0;
! if (0 != (p1->flags & FLAGS_have_decomp) && p1->decomp != p2->decomp)
return 0;
if (0 != (p1->flags & FLAGS_have_upper) && p1->upper != p2->upper)
return 0;
***************
*** 2220,2231 ****
}
int read_unidata_text(ptr,filename,logfile, silent_gaps)
! struct mapped_data **ptr;
CONST char *filename;
FILE *logfile;
int silent_gaps;
{
! struct mapped_data * res = *ptr;
int status = 0;
FILE *f = fopen(filename,"r");
int last_processed = -1;
--- 2120,2131 ----
}
int read_unidata_text(ptr,filename,logfile, silent_gaps)
! struct unidata_mapped_data **ptr;
CONST char *filename;
FILE *logfile;
int silent_gaps;
{
! struct unidata_mapped_data * res = *ptr;
int status = 0;
FILE *f = fopen(filename,"r");
int last_processed = -1;
***************
*** 2245,2251 ****
free_unidata(res);
res = NULL;
! res = safe_malloc(sizeof (struct mapped_data));
res->format = unidata_format_1;
/* malloc maximally needed area */
--- 2145,2151 ----
free_unidata(res);
res = NULL;
! res = safe_malloc(sizeof (struct unidata_mapped_data));
res->format = unidata_format_1;
/* malloc maximally needed area */
***************
*** 2492,2504 ****
unsigned int unicode,
struct character_information *info,
uint16 unicode_out[],
! int size));
! static int unicode_lookup_character_1(v,unicode,info,unicode_out,size)
struct unidata_format_1 *v;
unsigned int unicode;
struct character_information *info;
uint16 unicode_out[];
! int size; /* size : on bytes (sizeof) */
{
int status = -1;
--- 2392,2404 ----
unsigned int unicode,
struct character_information *info,
uint16 unicode_out[],
! int buffer_len));
! static int unicode_lookup_character_1(v,unicode,info,unicode_out,buffer_len)
struct unidata_format_1 *v;
unsigned int unicode;
struct character_information *info;
uint16 unicode_out[];
! int buffer_len;
{
int status = -1;
***************
*** 2510,2519 ****
info -> title = 0;
info -> decomp_len = 0;
! if (size > 0) { /* Pre-init buffer */
int i;
unicode_out[0] = unicode;
! for (i = 1; i < size; i++)
unicode_out[i] = 0;
}
--- 2410,2419 ----
info -> title = 0;
info -> decomp_len = 0;
! if (buffer_len > 0) { /* Pre-init buffer */
int i;
unicode_out[0] = unicode;
! for (i = 1; i < buffer_len; i++)
unicode_out[i] = 0;
}
***************
*** 2561,2572 ****
uint8 len_byte = D->len_byte;
if (storage + len_byte <= v->decomp_storage_count) {
! if (size > 0) {
int i;
for (i = 0;
i < len_byte &&
! i < size/sizeof unicode_out[i];
i++)
unicode_out[i] =
READ_VALUE(v->decomp_storage[storage+i],
--- 2461,2472 ----
uint8 len_byte = D->len_byte;
if (storage + len_byte <= v->decomp_storage_count) {
! if (buffer_len > 0) {
int i;
for (i = 0;
i < len_byte &&
! i < buffer_len;
i++)
unicode_out[i] =
READ_VALUE(v->decomp_storage[storage+i],
***************
*** 2613,2638 ****
}
! /* Note: size == 0 if not unicode decompression wanted
! size : on bytes (sizeof)
Returns 0 = failure (not valid character)
1 = succeed
-1 = database bad
*/
! int unicode_lookup_character(v,unicode,info, unicode_out, size)
! struct mapped_data *v;
unsigned int unicode;
struct character_information *info;
uint16 unicode_out[];
! int size;
{
int status = -1;
switch(v->format) {
case unidata_format_1:
status = unicode_lookup_character_1(&(v->v.f1),unicode,info,
! unicode_out, size);
break;
}
--- 2513,2538 ----
}
! /* Note: buffer_len == 0 if not unicode decompression wanted
! buffer_len : on bytes (sizeof)
Returns 0 = failure (not valid character)
1 = succeed
-1 = database bad
*/
! int unicode_lookup_character(v,unicode,info, unicode_out, buffer_len)
! struct unidata_mapped_data *v;
unsigned int unicode;
struct character_information *info;
uint16 unicode_out[];
! int buffer_len;
{
int status = -1;
switch(v->format) {
case unidata_format_1:
status = unicode_lookup_character_1(&(v->v.f1),unicode,info,
! unicode_out, buffer_len);
break;
}
***************
*** 2645,2651 ****
= -1 incomplete input
*/
int unicode_compress_input(v,unicode_res,unicode_inp,len,comp_type)
! struct mapped_data *v;
uint16 *unicode_res;
uint16 unicode_inp[];
int len;
--- 2545,2551 ----
= -1 incomplete input
*/
int unicode_compress_input(v,unicode_res,unicode_inp,len,comp_type)
! struct unidata_mapped_data *v;
uint16 *unicode_res;
uint16 unicode_inp[];
int len;
Index: elm2.4.ME+.109-cvs/Makefile-1.SH
*** elm2.4.ME+.108/Makefile-1.SH 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109-cvs/Makefile-1.SH 2003-11-09 18:13:35.000000000 +0200
***************
*** 27,33 ****
echo "Extracting Makefile-1 (with variable substitutions)"
cat >Makefile-1 <<!GROK!THIS!
#!$make
! # $Id: Makefile-1.SH,v 1.9 2003/08/26 17:07:29 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
--- 27,33 ----
echo "Extracting Makefile-1 (with variable substitutions)"
cat >Makefile-1 <<!GROK!THIS!
#!$make
! # $Id: Makefile-1.SH,v 1.10 2003/11/09 16:13:35 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
***************
*** 56,72 ****
$(REG) rm $(LOCALETARG) $(LIB)/elm.map.bin/unidata.bin
install_s: $(LIB) $(ETC) $(STAGE) $(ETC)/elm.rc $(LOCALETARG) \
! $(LIB)/elm.map.bin/unidata.bin libreg
$(ETC)/elm.rc: $(LIB)/elmrc-write doc/elmrc-info
$(REG) {$(LIB)/elmrc-write} -G -I -C {doc/elmrc-info}
$(REG) $(CHMOD) u=rw,go=r {$@}
! $(LIB)/elm.map.bin/unidata.bin: $(LIB) $(LIB)/elm.map.bin charset/UNIDATA/UNIDATA2.TXT $(LIB)/elmunidata
$(REG) {$(LIB)/elmunidata} -I -s {charset/UNIDATA/UNIDATA2.TXT}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(REG) true {charset/UNIDATA/README.TXT}
$(ETC)/elm.mimecharsets: $(BIN)/elm.mimecharsets $(LIB)/elmcharset ConfTool/killsets $(LIB)/elm.map.txt
$(REG) {$(LIB)/elmcharset} -G -I {ConfTool/killsets} -w {$@} \
-S {charset/MAPPINGS/ISO8859} -S {charset/MAPPINGS} \
--- 56,82 ----
$(REG) rm $(LOCALETARG) $(LIB)/elm.map.bin/unidata.bin
install_s: $(LIB) $(ETC) $(STAGE) $(ETC)/elm.rc $(LOCALETARG) \
! $(LIB)/elm.map.bin/unidata.bin $(LIB)/elm.map.bin/bindata.bin \
! libreg
$(ETC)/elm.rc: $(LIB)/elmrc-write doc/elmrc-info
$(REG) {$(LIB)/elmrc-write} -G -I -C {doc/elmrc-info}
$(REG) $(CHMOD) u=rw,go=r {$@}
! $(LIB)/elm.map.bin/unidata.bin: $(LIB) $(LIB)/elm.map.bin \
! charset/UNIDATA/UNIDATA2.TXT $(LIB)/elmunidata
$(REG) {$(LIB)/elmunidata} -I -s {charset/UNIDATA/UNIDATA2.TXT}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(REG) true {charset/UNIDATA/README.TXT}
+ $(LIB)/elm.map.bin/bindata.bin: $(LIB) $(LIB)/elm.map.bin $(LIB)/elmbindata \
+ $(ETC)/elm.mimecharsets
+ $(REG) {$(LIB)/elmbindata} -G -I \
+ -S {charset/MAPPINGS/ISO8859} -S {charset/MAPPINGS} \
+ -S {charset/MAPPINGS/MICSFT}
+ $(REG) $(CHMOD) u=rw,go=r {$@}
+
+
$(ETC)/elm.mimecharsets: $(BIN)/elm.mimecharsets $(LIB)/elmcharset ConfTool/killsets $(LIB)/elm.map.txt
$(REG) {$(LIB)/elmcharset} -G -I {ConfTool/killsets} -w {$@} \
-S {charset/MAPPINGS/ISO8859} -S {charset/MAPPINGS} \
Index: elm2.4.ME+.109-cvs/MANIFEST
*** elm2.4.ME+.108/MANIFEST 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/MANIFEST 2003-11-09 18:13:35.000000000 +0200
***************
*** 387,389 ****
--- 387,397 ----
src/screen/termcharset.c
src/screen/cur_process.c
src/screen/curses.c
+ lib/bindata.c
+ lib/mmaputil.c
+ hdrs/mmaputil.h
+ hdrs/bindata.h
+ utils/elmbindata.c
+ utils/charmapcopy.c
+ utils/charmapcopy.h
+ doc/elmbindata.1
Index: elm2.4.ME+.109-cvs/melib/mime_decode.c
*** elm2.4.ME+.108/melib/mime_decode.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/melib/mime_decode.c 2003-11-15 17:51:21.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_decode.c,v 1.56 2003/08/04 14:58:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_decode.c,v 1.60 2003/11/15 15:51:21 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.60 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 438,445 ****
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector signed_selector)
! static int signed_selector(p)
mime_t *p;
{
int flags = 0;
mime_t *z;
--- 438,446 ----
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector signed_selector)
! static int signed_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int flags = 0;
mime_t *z;
***************
*** 450,456 ****
mime_parser_subparts(p->parser_data) > 0 &&
( z = mime_parser_index(p->parser_data,0)) &&
! 0 <= ( subflag = mime_classify_media(z) )
) {
--- 451,457 ----
mime_parser_subparts(p->parser_data) > 0 &&
( z = mime_parser_index(p->parser_data,0)) &&
! 0 <= ( subflag = mime_classify_media(z,hdr) )
) {
***************
*** 639,646 ****
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector encrypted_selector)
! static int encrypted_selector(p)
mime_t *p;
{
int flags = 0;
--- 640,648 ----
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector encrypted_selector)
! static int encrypted_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int flags = 0;
***************
*** 792,806 ****
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector alternative_selector)
! static int alternative_selector(p)
mime_t *p;
{
int flags = 0;
mime_t * z = NULL;
if (p->parser_data &&
mime_parser_subparts(p->parser_data) > 0 &&
! 0 <= ( flags = mime_classify_best_alternative(p,&z))) {
if (MIME_selector_magic != p->handler_data->magic)
--- 794,809 ----
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector alternative_selector)
! static int alternative_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int flags = 0;
mime_t * z = NULL;
if (p->parser_data &&
mime_parser_subparts(p->parser_data) > 0 &&
! 0 <= ( flags = mime_classify_best_alternative(p,&z,hdr))) {
if (MIME_selector_magic != p->handler_data->magic)
***************
*** 816,822 ****
if (!pagealternative) {
DPRINT(Debug,11,(&Debug,
"alternative_selector: pagealternative is not set, we must able to handle all parts ...\n"));
! flags = mime_classify_subparts(p);
}
DPRINT(Debug,11,(&Debug,
--- 819,825 ----
if (!pagealternative) {
DPRINT(Debug,11,(&Debug,
"alternative_selector: pagealternative is not set, we must able to handle all parts ...\n"));
! flags = mime_classify_subparts(p,hdr);
}
DPRINT(Debug,11,(&Debug,
***************
*** 1008,1022 ****
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector multipart_selector)
! static int multipart_selector(p)
mime_t *p;
{
int flags = 0;
int Flags = get_type_flags(p->TYPE);
int subflag = -1;
! if ((0 <= ( subflag = mime_classify_subparts(p))) &&
((Flags & MIME_MIXED) ||
(Flags & MIME_DIGEST)) ) {
--- 1011,1026 ----
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector multipart_selector)
! static int multipart_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int flags = 0;
int Flags = get_type_flags(p->TYPE);
int subflag = -1;
! if ((0 <= ( subflag = mime_classify_subparts(p,hdr))) &&
((Flags & MIME_MIXED) ||
(Flags & MIME_DIGEST)) ) {
***************
*** 1304,1317 ****
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector rfc822_selector)
! static int rfc822_selector(p)
mime_t *p;
{
int flags = 0;
int subflag = -1;
! if (0 <= ( subflag = mime_classify_subparts(p))) {
DPRINT(Debug,11,(&Debug,
"rfc822_selector(%p) -- type: %p=%s/%s\n",
p,
--- 1308,1324 ----
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector rfc822_selector)
! static int rfc822_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int flags = 0;
int subflag = -1;
! if (0 <= ( subflag = mime_classify_subparts(p,
! hdr /* Correct? */
! ))) {
DPRINT(Debug,11,(&Debug,
"rfc822_selector(%p) -- type: %p=%s/%s\n",
p,
***************
*** 1564,1573 ****
return 1;
}
! int set_filter (ptr, state, default_content_charset)
mime_t *ptr;
out_state_t *state;
charset_t default_content_charset;
{
int code;
charset_t tmp;
--- 1571,1581 ----
return 1;
}
! int set_filter (ptr, state, default_content_charset,override_charset)
mime_t *ptr;
out_state_t *state;
charset_t default_content_charset;
+ charset_t override_charset; /* IF set, ignore charset= -paramater */
{
int code;
charset_t tmp;
***************
*** 1582,1660 ****
state -> filter = NULL; /* So that messages can be printed .. */
- if (0 == (code = mime_get_charset (&tmp, ptr->type_opts,
- state->display_charset,
- default_content_charset
- ))) {
! /* Don't show this part (or copy to reply buffer) ... */
!
state_printf(state,
CATGETS(elm_msg_cat, MeSet,
! MeDecodeCharsetSkipping,
! "[ Charset %.15s unsupported, skipping... ]\n"),
! tmp->MIME_name ? tmp->MIME_name : "<none>");
!
! if (state->displaying)
! state_printf(state,
! CATGETS(elm_msg_cat, MeSet, MeDecodeUseVtoView,
! "[ Use 'v' to view or save this part. ]\n"));
!
! state -> filter = tmp;
- DPRINT(Debug,40,(&Debug,
- "set_filter=0 filter=%p '%s' (type=%p)\n",
- state -> filter,
- state -> filter->MIME_name ?
- state -> filter->MIME_name : "<none>",
- state -> filter->charset_type));
-
- return 0;
} else {
! if (code < 0) {
! DPRINT(Debug,40,(&Debug,
! " code=%d charset_convert_ok=%d\n",
! code,charset_convert_ok));
! if (code == -3) { /* Converted without lossage */
! if (!charset_convert_ok)
state_printf(state,
CATGETS(elm_msg_cat, MeSet,
! MeDecodeCharsetConvertNoLoss,
! "[ Charset %.15s converted... ]\n"),
tmp->MIME_name ? tmp->MIME_name :
"<none>");
-
- } else {
- state_printf(state,
- CATGETS(elm_msg_cat, MeSet,
- MeDecodeCharsetConvert,
- "[ Charset %.15s unsupported, converting... ]\n"),
- tmp->MIME_name ? tmp->MIME_name :
- "<none>");
-
- if (state->displaying) {
- /* state_nlputs or state_printf is needed for EOLN_is_CRLF
- conversions */
! state_printf(state,
! CATGETS(elm_msg_cat, MeSet, MeDecodeUseAlsoV,
! "[ You can also use 'v' to view or save this part. ]\n"));
! state_nlputs("\n",state);
}
}
}
- state -> filter = tmp;
-
- DPRINT(Debug,40,(&Debug,
- "set_filter=1 filter=%p '%s' (type=%p)\n",
- state -> filter,
- state -> filter->MIME_name ?
- state -> filter->MIME_name : "<none>",
- state -> filter->charset_type));
- return 1;
}
}
/* Prototype */
--- 1590,1692 ----
state -> filter = NULL; /* So that messages can be printed .. */
! code = mime_get_charset (&tmp, ptr->type_opts,
! state->display_charset,
! default_content_charset
! );
!
! if (override_charset && override_charset != tmp) {
!
state_printf(state,
CATGETS(elm_msg_cat, MeSet,
! MeDecodeCharsetOverride,
! "[ Charset %.15s ignored, treated as %.15s ]\n"),
! tmp->MIME_name ? tmp->MIME_name : "<none>",
! override_charset->MIME_name ?
! override_charset->MIME_name : "<none>");
!
! state_nlputs("\n",state);
!
! state -> filter = override_charset;
} else {
! if (0 == code) {
!
! /* Don't show this part (or copy to reply buffer) ... */
!
! state_printf(state,
! CATGETS(elm_msg_cat, MeSet,
! MeDecodeCharsetSkipping,
! "[ Charset %.15s unsupported, skipping... ]\n"),
! tmp->MIME_name ? tmp->MIME_name : "<none>");
!
! if (state->displaying) {
! state_printf(state,
! CATGETS(elm_msg_cat, MeSet, MeDecodeUseVtoView,
! "[ Use 'v' to view or save this part. ]\n"));
! state_printf(state,
! CATGETS(elm_msg_cat, MeSet, MeDecodeUseOtoOverride,
! "[ You can also use 'O' to override charset information. ]\n"));
! }
! state -> filter = tmp;
!
! DPRINT(Debug,40,(&Debug,
! "set_filter=0 filter=%p '%s' (type=%p)\n",
! state -> filter,
! state -> filter->MIME_name ?
! state -> filter->MIME_name : "<none>",
! state -> filter->charset_type));
!
! return 0;
! } else {
! if (code < 0) {
!
! DPRINT(Debug,40,(&Debug,
! " code=%d charset_convert_ok=%d\n",
! code,charset_convert_ok));
!
! if (code == -3) { /* Converted without lossage */
! if (!charset_convert_ok)
! state_printf(state,
! CATGETS(elm_msg_cat, MeSet,
! MeDecodeCharsetConvertNoLoss,
! "[ Charset %.15s converted... ]\n"),
! tmp->MIME_name ? tmp->MIME_name :
! "<none>");
!
! } else {
state_printf(state,
CATGETS(elm_msg_cat, MeSet,
! MeDecodeCharsetConvert,
! "[ Charset %.15s unsupported, converting... ]\n"),
tmp->MIME_name ? tmp->MIME_name :
"<none>");
! if (state->displaying) {
! /* state_nlputs or state_printf is needed for EOLN_is_CRLF
! conversions */
!
! state_printf(state,
! CATGETS(elm_msg_cat, MeSet, MeDecodeUseAlsoV,
! "[ You can also use 'v' to view or save this part. ]\n"));
! state_nlputs("\n",state);
! }
}
}
+ state -> filter = tmp;
}
}
+
+ DPRINT(Debug,40,(&Debug,
+ "set_filter=1 filter=%p '%s' (type=%p)\n",
+ state -> filter,
+ state -> filter->MIME_name ?
+ state -> filter->MIME_name : "<none>",
+ state -> filter->charset_type));
+ return 1;
}
/* Prototype */
***************
*** 1663,1670 ****
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector text_selector)
! static int text_selector(p)
mime_t *p;
{
int flags = NOTPLAIN_need_metamail;
--- 1695,1703 ----
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector text_selector)
! static int text_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int flags = NOTPLAIN_need_metamail;
***************
*** 1675,1680 ****
--- 1708,1725 ----
charset_t buf1;
charset_t disp_vector[2];
+ /* If charset is overrided, do not use metamail ... */
+ if (hdr && hdr->override_charset) {
+ DPRINT(Debug,11,(&Debug,
+ "text_selector(%p) -- override charset %s\n",
+ hdr->override_charset->MIME_name ?
+ hdr->override_charset->MIME_name :
+ "<no MIME name>"));
+ flags = 0;
+ goto done;
+ }
+
+
disp_vector[0] = display_charset;
disp_vector[1] = NULL;
***************
*** 1759,1765 ****
in_state_ftell(state_in)));
}
! if (set_filter(ptr,state_out,default_mimetext_charset)) {
if (!run_decoder(ptr,state_in, state_out)) {
state_printf(state_out,
CATGETS(elm_msg_cat, MeSet, MeDecodeEncodingSkipping,
--- 1804,1811 ----
in_state_ftell(state_in)));
}
! if (set_filter(ptr,state_out,default_mimetext_charset,
! mss ? mss->override_charset : NULL)) {
if (!run_decoder(ptr,state_in, state_out)) {
state_printf(state_out,
CATGETS(elm_msg_cat, MeSet, MeDecodeEncodingSkipping,
***************
*** 2030,2036 ****
if (NULL != (tmpfp =
arrange_decoded(ptr,state_in,state_out,&newstate2,NULL))) {
! if (set_filter(ptr,state_out,NULL)) {
int len, crypted = 0;
int count = 0;
getkey(OFF);
--- 2076,2083 ----
if (NULL != (tmpfp =
arrange_decoded(ptr,state_in,state_out,&newstate2,NULL))) {
! if (set_filter(ptr,state_out,NULL,
! mss ? mss->override_charset : NULL)) {
int len, crypted = 0;
int count = 0;
getkey(OFF);
***************
*** 2086,2093 ****
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector text_unsupported_selector)
! static int text_unsupported_selector(p)
mime_t *p;
{
int flags = NOTPLAIN_is_fallback;
--- 2133,2141 ----
/* Returns -1 on failure otherwise same mask than mime_classify_media() */
S_(mime_run_selector text_unsupported_selector)
! static int text_unsupported_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int flags = NOTPLAIN_is_fallback;
Index: elm2.4.ME+.109-cvs/melib/mime_parse.c
*** elm2.4.ME+.108/melib/mime_parse.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/melib/mime_parse.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.41 2003/08/04 14:58:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.41 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.42 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 602,608 ****
}
! x = mime_classify_media(ptr);
if (x) {
ptr->mime_flags = x; /* TODO? -- should this check only NOTPLAIN_need_metamail ??*/
--- 602,609 ----
}
! x = mime_classify_media(ptr,
! NULL /* ???? */);
if (x) {
ptr->mime_flags = x; /* TODO? -- should this check only NOTPLAIN_need_metamail ??*/
***************
*** 769,775 ****
/* mime_classify_media sets hdr->mime_rec.mime_flags !!! */
int old = hdr->mime_rec.mime_flags;
! int tmp = mime_classify_media(&(hdr->mime_rec));
if (tmp >= 0) {
if (tmp != old) {
--- 770,776 ----
/* mime_classify_media sets hdr->mime_rec.mime_flags !!! */
int old = hdr->mime_rec.mime_flags;
! int tmp = mime_classify_media(&(hdr->mime_rec),hdr);
if (tmp >= 0) {
if (tmp != old) {
Index: elm2.4.ME+.109-cvs/melib/mime_selector.c
*** elm2.4.ME+.108/melib/mime_selector.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/melib/mime_selector.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_selector.c,v 1.4 2003/08/04 14:58:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_selector.c,v 1.5 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 70,77 ****
}
#endif
! int mime_classify_media(p)
mime_t *p;
{
int Flags;
struct media_type_handle * H = NULL;
--- 70,78 ----
}
#endif
! int mime_classify_media(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int Flags;
struct media_type_handle * H = NULL;
***************
*** 159,165 ****
H,
is_default));
! r = H->p.pager->selector(p);
if (r >= 0) {
--- 160,166 ----
H,
is_default));
! r = H->p.pager->selector(p,hdr);
if (r >= 0) {
***************
*** 280,287 ****
NOTPLAIN_canuse_mailcap 0x04
*/
! int mime_classify_subparts(ptr)
mime_t *ptr;
{
int i;
int count;
--- 281,289 ----
NOTPLAIN_canuse_mailcap 0x04
*/
! int mime_classify_subparts(ptr,hdr)
mime_t *ptr;
+ struct header_rec * hdr;
{
int i;
int count;
***************
*** 304,310 ****
"Bad magic number (subpart)");
if (att->disposition == DISP_INLINE) {
! int f = mime_classify_media(att);
if (f < 0) {
DPRINT(Debug,9,(&Debug,
--- 306,312 ----
"Bad magic number (subpart)");
if (att->disposition == DISP_INLINE) {
! int f = mime_classify_media(att, hdr);
if (f < 0) {
DPRINT(Debug,9,(&Debug,
***************
*** 379,387 ****
return r;
}
! int mime_classify_best_alternative(ptr, ret)
mime_t *ptr;
mime_t **ret;
{
mime_t * r = NULL;
--- 381,390 ----
return r;
}
! int mime_classify_best_alternative(ptr, ret,hdr)
mime_t *ptr;
mime_t **ret;
+ struct header_rec * hdr;
{
mime_t * r = NULL;
***************
*** 420,426 ****
because it does not make sense inside on multipart/alternative
*/
! f = mime_classify_media(att);
if (f < 0) {
DPRINT(Debug,11,(&Debug,
"mime_classify_best_alternative -- Failed: %p=%s/%s (f=%d)\n",
--- 423,429 ----
because it does not make sense inside on multipart/alternative
*/
! f = mime_classify_media(att,hdr);
if (f < 0) {
DPRINT(Debug,11,(&Debug,
"mime_classify_best_alternative -- Failed: %p=%s/%s (f=%d)\n",
Index: elm2.4.ME+.109-cvs/melib/partial.c
*** elm2.4.ME+.108/melib/partial.c 2003-08-11 11:21:18.000000000 +0300
--- elm2.4.ME+.109-cvs/melib/partial.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: partial.c,v 1.5 2003/08/10 06:23:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: partial.c,v 1.6 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 92,99 ****
CT_decoder partial_decode;
#endif
! int partial_selector(p)
mime_t *p;
{
char id[100];
char number[100];
--- 92,100 ----
CT_decoder partial_decode;
#endif
! int partial_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
char id[100];
char number[100];
Index: elm2.4.ME+.109-cvs/melib/pgp_decode.c
*** elm2.4.ME+.108/melib/pgp_decode.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/melib/pgp_decode.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.33 2003/08/04 14:58:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.36 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 461,468 ****
#if ANSI_C
mime_run_selector pgp_selector;
#endif
! int pgp_selector(p)
mime_t *p;
{
int flags = 0;
--- 461,469 ----
#if ANSI_C
mime_run_selector pgp_selector;
#endif
! int pgp_selector(p,hdr)
mime_t *p;
+ struct header_rec * hdr;
{
int flags = 0;
***************
*** 653,659 ****
CATGETS(elm_msg_cat, MeSet, MePgpBefore,
"[ There is text before PGP section. ]\n"));
! if (set_filter(m,s_out,NULL)) { /* Character set filtering */
do {
state_add_prefix(s_out);
--- 654,662 ----
CATGETS(elm_msg_cat, MeSet, MePgpBefore,
"[ There is text before PGP section. ]\n"));
! if (set_filter(m,s_out,NULL,
! mss ? mss->override_charset : NULL)
! ) { /* Character set filtering */
do {
state_add_prefix(s_out);
***************
*** 816,826 ****
if (was_binary)
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpInternalSkipping,
! "[Internal error while calling pgp, skipping...]\n"));
else {
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpInternalRawdata,
! "[Internal error while calling pgp, raw data follows]\n"));
fail:
--- 819,829 ----
if (was_binary)
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpInternalSkipping,
! "[ Internal error while calling pgp, skipping... ]\n"));
else {
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpInternalRawdata,
! "[ Internal error while calling pgp, raw data follows ]\n"));
fail:
***************
*** 842,848 ****
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpRawEnd,
! "[End of raw data]\n"));
}
return;
}
--- 845,851 ----
state_printf(s_out,
CATGETS(elm_msg_cat, MeSet, MePgpRawEnd,
! "[ End of raw data. ]\n"));
}
return;
}
Index: elm2.4.ME+.109-cvs/nls/C/C/C/s_elm.m
*** elm2.4.ME+.108/nls/C/C/C/s_elm.m 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/nls/C/C/C/s_elm.m 2003-11-10 22:37:46.000000000 +0200
***************
*** 2077,2084 ****
2041 "default-nomime-charset %s is unsupported"
$ #FailedReopenFolder
2042 "Failed to reopen %S folder"
! $ #NoBinMapDir
! 2043 "Unidata: no map-bin-dir exist: %s: %s"
$ #NoUnicodeData
2044 "No Unicode data available: unidata: %s"
$ #UnidataSetting
--- 2077,2084 ----
2041 "default-nomime-charset %s is unsupported"
$ #FailedReopenFolder
2042 "Failed to reopen %S folder"
! $ #NoBinMapDirX
! 2043 "%sq: no map-bin-dir exist: %s: %s"
$ #NoUnicodeData
2044 "No Unicode data available: unidata: %s"
$ #UnidataSetting
***************
*** 2273,2276 ****
2137 "Editing of %s header is not supported."
$ #HdrGarbage
2138 "Garbage on header file"
!
--- 2273,2297 ----
2137 "Editing of %s header is not supported."
$ #HdrGarbage
2138 "Garbage on header file"
! $ #BinaryMapData
! 2140 "No binary map data available: bindata: %s"
! $ #OverrideCharset
! 2141 "Override charset"
! $ #NoMailToOverride
! 2142 "No mail to override!"
! $quote
! $ #OverrideTagged
! 2143 Override charset of %d tagged messages. Use "none" to cancel override.
! $ #OverrideTaggedOne
! 2144 Override charset of tagged message. Use "none" to cancel override.
! $ #OverrideCurrentOver
! 2145 Override charset of current message. Use "none" to cancel override.
! $ #OverrideCurrent
! 2146 Override charset of current message.
! $quote "
! $ #OverrideCSprompt
! 2147 "Override charset: "
! $ #UnknowCharset
! 2148 "Charset %s is unknown."
! $ #CharsetBadOverride
! 2149 "Can't use charset %s for override."
Index: elm2.4.ME+.109-cvs/nls/C/C/C/s_me.m
*** elm2.4.ME+.108/nls/C/C/C/s_me.m 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/nls/C/C/C/s_me.m 2003-11-10 22:37:46.000000000 +0200
***************
*** 120,126 ****
$ #PgpBefore
63 [ There is text before PGP section. ]\n
$ #PgpRawEnd
! 64 [End of raw data]\n
$ #FailedSeekEnvelope
65 Failed to seek beginning of mail envelope (%ld)
$ #FailedSeekHeaders
--- 120,126 ----
$ #PgpBefore
63 [ There is text before PGP section. ]\n
$ #PgpRawEnd
! 64 [ End of raw data. ]\n
$ #FailedSeekEnvelope
65 Failed to seek beginning of mail envelope (%ld)
$ #FailedSeekHeaders
***************
*** 655,657 ****
--- 655,665 ----
346 Fragmented message have several different sender addresses
$ #AssembleCommand
347 [ Command 'A' assembles fragmented messages. ]\n
+ $ #CreateDir
+ 348 Directory %s created
+ $ #CantCreateDir
+ 349 Can't create directory %s
+ $ #DecodeCharsetOverride
+ 350 [ Charset %.15s ignored, treated as %.15s ]\n
+ $ #DecodeUseOtoOverride
+ 351 [ You can also use 'O' to override charset information. ]
Index: elm2.4.ME+.109-cvs/shared_libs/iconv/iconv.c
*** elm2.4.ME+.108/shared_libs/iconv/iconv.c 2002-12-15 12:00:25.000000000 +0200
--- elm2.4.ME+.109-cvs/shared_libs/iconv/iconv.c 2003-11-09 18:13:37.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: iconv.c,v 1.9 2002/11/10 11:25:31 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: iconv.c,v 1.10 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 954,960 ****
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! ret -> b.dummy = 0;
genmaps = safe_realloc(genmaps,
(genmap_count + 1) *
--- 954,962 ----
ret -> map_initialized = 1;
ret -> map_init_it = map_init_bad;
! ret -> b.dummy = NULL;
! ret -> c.dummy = NULL;
! ret -> d.dummy = NULL;
genmaps = safe_realloc(genmaps,
(genmap_count + 1) *
Index: elm2.4.ME+.109-cvs/src/attach_menu.c
*** elm2.4.ME+.108/src/attach_menu.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/src/attach_menu.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.53 2003/08/04 14:58:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.53 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.54 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 695,701 ****
mime_parser_parse() need not to be called
... however classification is not copied!!
*/
! mime_classify_media(&(tmp.mime_rec));
is_need_meta = need_meta(&tmp);
--- 695,701 ----
mime_parser_parse() need not to be called
... however classification is not copied!!
*/
! mime_classify_media(&(tmp.mime_rec),&tmp);
is_need_meta = need_meta(&tmp);
Index: elm2.4.ME+.109-cvs/src/elm.c
*** elm2.4.ME+.108/src/elm.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/src/elm.c 2003-11-10 22:37:46.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.57 2003/09/14 16:35:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.57 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.59 2003/11/10 20:37:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.59 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 579,584 ****
--- 579,601 ----
}
break;
+ case 'O' : {
+ int current = get_current(mailbox);
+
+ Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
+ ElmOverrideCharset,
+ "Override charset"));
+ FlushBuffer();
+
+ if (current < 1)
+ lib_error(CATGETS(elm_msg_cat, ElmSet,
+ ElmNoMailToOverride,
+ "No mail to override!"));
+ else
+ OverrideCharset(mailbox);
+
+ }
+ break;
case 'P' : {
int current = get_current(mailbox);
***************
*** 775,780 ****
--- 792,798 ----
ViewDigest(mailbox);
+ current = get_current(mailbox);
(void)get_page(current, mailbox);
(*redraw)++;
***************
*** 1151,1156 ****
--- 1169,1175 ----
ViewPartial(current_mailbox);
+ current = get_current(current_mailbox);
(void)get_page(current, current_mailbox);
redraw++;
***************
*** 1683,1690 ****
* commands to a function. */
int i;
! int current = ifmain(get_current((mailbox)),
! alias_current);
#define SET_CURRENT(x) { if (inalias) alias_current = (x); \
else set_current((mailbox),(x)); }
--- 1702,1710 ----
* commands to a function. */
int i;
! #define GET_CURRENT ifmain(get_current((mailbox)), alias_current)
!
! int current = GET_CURRENT;
#define SET_CURRENT(x) { if (inalias) alias_current = (x); \
else set_current((mailbox),(x)); }
***************
*** 1717,1725 ****
}
! if (x)
nucurr = get_page(current, (mailbox));
! else {
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmPatternNotFound,
"pattern not found!"));
--- 1737,1746 ----
}
! if (x) {
! current = GET_CURRENT;
nucurr = get_page(current, (mailbox));
! } else {
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmPatternNotFound,
"pattern not found!"));
***************
*** 1948,1955 ****
items);
clear_error();
if (limit((mailbox)) != 0) {
! get_page(current, (mailbox));
! (*redraw)++;
} else {
(*nufoot)++;
}
--- 1969,1977 ----
items);
clear_error();
if (limit((mailbox)) != 0) {
! current = GET_CURRENT;
! get_page(current, (mailbox));
! (*redraw)++;
} else {
(*nufoot)++;
}
Index: elm2.4.ME+.109-cvs/src/messages/digest.c
*** elm2.4.ME+.108/src/messages/digest.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/src/messages/digest.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: digest.c,v 1.6 2003/08/04 20:15:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: digest.c,v 1.7 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 504,510 ****
read_mailcaps();
if (h->mime_rec.parser_data) {
! int tmp = mime_classify_media(&(h->mime_rec));
if (tmp >= 0)
h->mime_parsed = 1;
}
--- 504,510 ----
read_mailcaps();
if (h->mime_rec.parser_data) {
! int tmp = mime_classify_media(&(h->mime_rec),h);
if (tmp >= 0)
h->mime_parsed = 1;
}
***************
*** 623,629 ****
mime_t_copy(& h->mime_rec, part);
if (h->mime_rec.parser_data) {
! int tmp = mime_classify_media(&(h->mime_rec));
if (tmp >= 0)
h->mime_parsed = 1;
}
--- 623,629 ----
mime_t_copy(& h->mime_rec, part);
if (h->mime_rec.parser_data) {
! int tmp = mime_classify_media(&(h->mime_rec),h);
if (tmp >= 0)
h->mime_parsed = 1;
}
Index: elm2.4.ME+.109-cvs/src/messages/header_alloc.c
*** elm2.4.ME+.108/src/messages/header_alloc.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109-cvs/src/messages/header_alloc.c 2003-11-10 22:37:46.000000000 +0200
***************
*** 1,8 ****
! static char rcsid[] = "@(#)$Id: header_alloc.c,v 1.5 2003/08/04 14:58:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,8 ----
! static char rcsid[] = "@(#)$Id: header_alloc.c,v 1.6 2003/11/10 20:37:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 63,68 ****
--- 63,70 ----
h->have_from = 0;
h->body_parsed = 0;
h->mime_parsed = 0;
+ h->header_charset = NULL;
+ h->override_charset = NULL;
free_partial_vector(h);
}
***************
*** 108,113 ****
--- 110,117 ----
h->have_from = 0;
h->body_parsed = 0;
h->mime_parsed = 0;
+ h->header_charset = NULL;
+ h->override_charset = NULL;
h->partial_vector = NULL;
h->partial_len = 0;
}
Index: elm2.4.ME+.109-cvs/src/messages/partial.c
*** elm2.4.ME+.108/src/messages/partial.c 2003-08-16 09:58:21.000000000 +0300
--- elm2.4.ME+.109-cvs/src/messages/partial.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: partial.c,v 1.11 2003/08/16 06:51:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: partial.c,v 1.12 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 1175,1181 ****
if (mime_parser_parse(&(vec[i].hdr->mime_rec),
vec[i].hdr->header_charset,vec[i].F)) {
! int tmp = mime_classify_media(&(vec[i].hdr->mime_rec));
if (tmp >= 0) {
vec[i].hdr->mime_parsed = 1;
--- 1175,1183 ----
if (mime_parser_parse(&(vec[i].hdr->mime_rec),
vec[i].hdr->header_charset,vec[i].F)) {
! int tmp = mime_classify_media(&(vec[i].hdr->mime_rec),
! vec[i].hdr
! );
if (tmp >= 0) {
vec[i].hdr->mime_parsed = 1;
Index: elm2.4.ME+.109-cvs/src/pattern.c
*** elm2.4.ME+.108/src/pattern.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109-cvs/src/pattern.c 2003-11-15 12:20:01.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pattern.c,v 1.25 2003/09/03 09:16:30 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pattern.c,v 1.27 2003/11/15 10:20:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 275,288 ****
int i;
! struct string * pattern = NULL;
! struct string * alt_pattern = NULL;
int ret = 0 ;
int anywhere = FALSE;
int matched;
struct string * buffer = NULL;
struct string *buffer1 = NULL;
int val;
buffer = format_string(CATGETS(elm_msg_cat, ElmSet,
--- 275,295 ----
int i;
! /* Elm 2.4 remebers old entered patterns, so we need to keep
! that static. This leaks these malloced areas on end of program */
!
! static struct string * pattern = NULL;
! static struct string * alt_pattern = NULL;
int ret = 0 ;
int anywhere = FALSE;
int matched;
struct string * buffer = NULL;
***************
*** 697,708 ****
lib_transient(CATGETS(elm_msg_cat, ElmSet, ElmSearchingFolderPattern,
"Searching folder for pattern..."));
!
!
! /* TODO: Match should be done agaist situation where
! MIME encoding is *undone*
! */
!
mc = get_message_count(mailbox);
while (message_number < mc) {
--- 709,715 ----
lib_transient(CATGETS(elm_msg_cat, ElmSet, ElmSearchingFolderPattern,
"Searching folder for pattern..."));
!
mc = get_message_count(mailbox);
while (message_number < mc) {
Index: elm2.4.ME+.109-cvs/src/showmsg.c
*** elm2.4.ME+.108/src/showmsg.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/src/showmsg.c 2003-11-11 18:18:04.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: showmsg.c,v 1.28 2003/10/11 08:42:11 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.28 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: showmsg.c,v 1.31 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.31 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 28,33 ****
--- 28,174 ----
VOLATILE int pipe_abort = FALSE; /* not used anymore, but won't compile without it */
+
+ void OverrideCharset(mailbox)
+ struct MailboxView *mailbox;
+ {
+ int oldstat = 0, tagged = 0;
+ int current = get_current(mailbox);
+ struct header_rec * chdr = give_header(mailbox,current-1);
+
+ char override_charset[40];
+ int code;
+ charset_t res = NULL;
+ int mc,i;
+
+ if (chdr)
+ oldstat = chdr->status; /* remember */
+
+ mc = get_message_count(mailbox);
+ for (i=0; i < mc; i++) {
+ struct header_rec * hdr = give_header(mailbox,i);
+ if (hdr && ison(hdr->status, TAGGED)) {
+ tagged++;
+ }
+ }
+
+ if (!tagged && chdr && chdr->override_charset &&
+ chdr->override_charset->MIME_name)
+ strfcpy(override_charset,chdr->override_charset->MIME_name,
+ sizeof override_charset);
+ else if (display_charset->MIME_name)
+ strfcpy(override_charset,display_charset->MIME_name,
+ sizeof override_charset);
+ else
+ strfcpy(override_charset,"none", sizeof override_charset);
+
+ redraw:
+ if (tagged > 1)
+ print_format_center(elm_LINES-2,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmOverrideTagged,
+ "Override charset of %d tagged messages. Use \"none\" to cancel override."),
+ tagged);
+ else if (1 == tagged)
+ print_format_center(elm_LINES-2,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmOverrideTaggedOne,
+ "Override charset of tagged message. Use \"none\" to cancel override."));
+ else if (chdr && chdr->override_charset)
+ print_format_center(elm_LINES-2,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmOverrideCurrentOver,
+ "Override charset of current message. Use \"none\" to cancel override."));
+ else
+ print_format_center(elm_LINES-2,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmOverrideCurrent,
+ "Override charset of current message."));
+
+ PutLineX(elm_LINES-1,0,CATGETS(elm_msg_cat, ElmSet, ElmOverrideCSprompt,
+ "Override charset: "));
+
+ code = optionally_enter(override_charset,-1,-1,OE_REDRAW_MARK,
+ sizeof override_charset);
+
+ switch(code) {
+ case REDRAW_MARK:
+ goto redraw;
+ case -1: /* Interrupt */
+ return;
+ case 1: /* EOF */
+ return;
+ case 0:
+ /* OK */
+ break;
+ default:
+ DPRINT(Debug,9,(&Debug, "optionally enter returned %d (unexpected)n",
+ code));
+ return;
+ }
+
+ if (! override_charset[0])
+ return;
+
+ if (0 == strcmp(override_charset,"none"))
+ res = NULL;
+ else {
+ int j;
+
+ res = MIME_name_to_charset(override_charset,0);
+
+ if (!res) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmUnknowCharset,
+ "Charset %s is unknown."),
+ override_charset);
+
+ goto redraw;
+ }
+
+ j = charset_properties(res);
+
+ if (! (j & CS_printable) ||
+ ! (j & CS_mapping)) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCharsetBadOverride,
+ "Can't use charset %s for override."),
+ override_charset);
+ goto redraw;
+ }
+
+
+ }
+
+
+ if (tagged == 0) {
+
+ tagged = 1;
+ if (chdr)
+ setit(chdr->status, TAGGED);
+ }
+
+ mc = get_message_count(mailbox);
+ for (i=0; i < mc; i++) { /* get each tagged msg */
+ struct header_rec * hdr = give_header(mailbox,i);
+ if (hdr && ison(hdr->status, TAGGED)) {
+ hdr->override_charset = res;
+
+ /* If charset is overrided, it effects classification */
+ if (hdr->mime_parsed)
+ mime_classify_media(&(hdr->mime_rec),hdr);
+
+ clearit(hdr->status, TAGGED);
+ show_new_status(i,mailbox); /* update screen, if needed */
+
+
+ }
+ }
+
+ if (chdr)
+ chdr->status = oldstat; /* BACK! */
+
+ }
+
+
/* Returns 0 on quit */
struct prompt_list {
***************
*** 532,546 ****
ClearScreen();
printf ("Executing metamail...\n");
system_call(Cmd, SY_ENAB_SIGINT|SY_ENV_METAMAIL, NULL);
- Raw(ON | NO_TITE); /* Raw on but don't switch screen */
(void) unlink (fname);
! PutLineX(elm_LINES,0,
! CATGETS(elm_msg_cat, ElmSet,
! ElmPressAnyKeyIndex,
! "Press any key to return to index."));
! (void) ReadCh(0);
! printf("\r\n");
! Raw(OFF | NO_TITE); /* Raw off so raw on takes effect */
Raw(ON); /* Finally raw on and switch screen */
return(0);
} else {
--- 673,691 ----
ClearScreen();
printf ("Executing metamail...\n");
system_call(Cmd, SY_ENAB_SIGINT|SY_ENV_METAMAIL, NULL);
(void) unlink (fname);
!
! if (prompt_after_metamail) {
! Raw(ON | NO_TITE); /* Raw on but don't switch screen */
! PutLineX(elm_LINES,0,
! CATGETS(elm_msg_cat, ElmSet,
! ElmPressAnyKeyIndex,
! "Press any key to return to index."));
! (void) ReadCh(0);
! printf("\r\n");
! Raw(OFF | NO_TITE); /* Raw off so raw on takes effect */
! }
!
Raw(ON); /* Finally raw on and switch screen */
return(0);
} else {
Index: elm2.4.ME+.109-cvs/utils/charmapcopy.c
*** /tmp/5164-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-11-15 18:08:47.000000000 +0200
--- elm2.4.ME+.109-cvs/utils/charmapcopy.c 2003-11-15 17:50:22.000000000 +0200
***************
*** 0 ****
--- 1,100 ----
+ static char rcsid[] = "@(#)$Id: charmapcopy.c,v 1.3 2003/11/15 15:50:22 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+ #include "defs.h"
+ #include "elmlib.h"
+ #include "s_elm.h"
+ #include "s_me.h"
+ #include "reghelper.h"
+ #include "charmapcopy.h"
+
+ char ** copydirs = NULL;
+ int copydir_count = 0;
+
+ #include <errno.h>
+ extern int errno;
+
+ FILE *charmap_copy(name,pathname)
+ const char *name;
+ const char *pathname;
+ {
+ int i;
+ FILE *F = NULL;
+ FILE *res = NULL;
+ int fd,c;
+
+
+ for (i = 0; i < copydir_count; i++) {
+ char * n = elm_message(FRM("%s/%s"),copydirs[i],name);
+
+ F = fopen(n,"r");
+
+ if (F) {
+ lib_transient(CATGETS(elm_msg_cat, MeSet,MeCopyingMapfile,
+ "Copying mapfile %s: %s => %s"),
+ name,n,pathname);
+ log_config((char *)pathname);
+ }
+ free(n);
+ if (F)
+ break;
+ }
+ if (!F) {
+ lib_transient(FRM("*** Copying mapfile %s => %s -- file %s not found?"),
+ name,pathname,name);
+ return NULL;
+ }
+
+ fd = open(pathname, O_RDWR | O_CREAT | O_EXCL, 0444);
+ if (fd < 0) {
+ int errcode;
+
+ error1:
+ errcode = errno;
+
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
+ "File %.50s is not writeable: %s"),
+ pathname, error_description(errcode));
+
+ fclose(F);
+ return NULL;
+ }
+
+
+ res = fdopen(fd,"w+");
+ if (!res)
+ goto error1;
+
+ while (EOF != (c = getc(F))) {
+ if (putc(c,res) == EOF) {
+ int err = errno;
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorTryingToWrite,
+ "Error %s encountered trying to write to %s."),
+ error_description(err),pathname);
+ fclose(F);
+ fclose(res);
+ return NULL;
+ }
+ }
+
+
+
+ if (ferror(res)) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorReading,
+ "Error reading from %.50s"),
+ name);
+ fclose(F);
+ fclose(res);
+ return NULL;
+ }
+
+ fclose(F);
+
+ rewind(res);
+ return res;
+ }
Index: elm2.4.ME+.109-cvs/utils/charmapcopy.h
*** /tmp/5164-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-11-15 18:08:47.000000000 +0200
--- elm2.4.ME+.109-cvs/utils/charmapcopy.h 2003-11-09 18:13:38.000000000 +0200
***************
*** 0 ****
--- 1,14 ----
+ /* $Id: charmapcopy.h,v 1.2 2003/11/09 16:13:38 hurtta Exp $ */
+
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+
+ extern FILE *charmap_copy P_((const char *name, const char *pathname));
+ extern char ** copydirs;
+ extern int copydir_count;
+
Index: elm2.4.ME+.109-cvs/utils/elmbindata.c
*** /tmp/5164-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2003-11-15 18:08:47.000000000 +0200
--- elm2.4.ME+.109-cvs/utils/elmbindata.c 2003-11-15 17:51:21.000000000 +0200
***************
*** 0 ****
--- 1,188 ----
+ static char rcsid[] = "@(#)$Id: elmbindata.c,v 1.3 2003/11/15 15:51:21 hurtta Exp $";
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ *****************************************************************************/
+
+ #include "elmutil.h"
+ #include "s_me.h"
+ #include "s_elm.h"
+ #include "cs_imp.h"
+
+ #include "bindata.h"
+
+ #include "reghelper.h"
+
+ DEBUG_VAR(Debug,__FILE__,"util");
+
+ int register_fd = -1;
+ char * program_name = "elmbindata";
+
+ #include "charmapcopy.h"
+
+ extern char *optarg;
+ extern int optind;
+
+
+ int main(argc, argv)
+ int argc;
+ char *argv[];
+ {
+ struct bindata_mapped_data * bindata = NULL;
+ char * target_file = NULL;
+ char * text_target_dir = NULL;
+
+ char **filelist = NULL;
+ int err = 0;
+
+ int c;
+ int global = 0;
+
+ #if DEBUG
+ init_debugfile("ELMBINDATA");
+ #endif
+ locale_init();
+
+ REGHELPER_INIT(argv[0]);
+
+ user_init();
+ init_defaults();
+
+ while ((c = getopt(argc, argv, "Gw:d:b:BIT:S:")) != EOF) {
+ switch(c) {
+ case 'G':
+ global++;
+ break;
+ case 'w':
+ target_file = optarg;
+ break;
+ case 'I':
+ target_file = bindata_path;
+ break;
+ case 'S':
+ copydirs = safe_realloc(copydirs,(copydir_count+1) * sizeof (*copydirs));
+ copydirs[copydir_count++] = optarg;
+ break;
+ case 'd' :
+ #if DEBUG
+ set_debugging(optarg);
+ #else
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmArgsIngoringDebug,
+ "Warning: system created without debugging enabled - request ignored\n"));
+ #endif
+ break;
+ case 'B':
+ bindata = default_bindata();
+ if (!bindata) {
+ err = 1;
+ goto fail;
+ }
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileLoaded,
+ "%s loaded"),
+ raw_bindata_path);
+ break;
+ case 'b':
+ if (!get_bindata(&bindata,optarg)) {
+ err = 1;
+ goto fail;
+ }
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeFileLoaded,
+ "%s loaded"),
+ optarg);
+ break;
+ case 'T':
+ text_target_dir = optarg;
+ if (0 == mkdir(text_target_dir,0700)) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeCreateDir,
+ "Directory %s created"),
+ text_target_dir);
+
+ if (register_fd != -1)
+ log_it("M",text_target_dir,"-","-",0700);
+
+ } else if (EEXIST != errno) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeCantCreateDir,
+ "Can't create directory %s"),
+ text_target_dir);
+ err = 1;
+ goto fail;
+ }
+
+ break;
+ case '?':
+ exit(1);
+ }
+ }
+
+
+ elm_sfprintf(version_buff, sizeof version_buff,
+ FRM("%s PL%s"), VERSION, PATCHLEVEL);
+
+
+ #ifdef DEBUG
+ {
+ int d = panic_dprint("\n\
+ ======================================================\n\
+ Debug output of the ELMBINDATA program (version %s).\n",
+ version_buff);
+
+ if (d >= 50) {
+ #if 0
+ panic_dprint("WARNING: Edit manually out sensitive information from that file!\n");
+
+ lower_prompt("WARNING: Debug file may include passwords -- edit it!");
+ error_sleep(5+sleepmsg);
+ #endif
+ }
+ }
+ #endif
+
+ if (copydir_count)
+ set_charmap_copy_callback(charmap_copy);
+
+ if (!global)
+ read_rc_file(READ_FLAG_BINDATA_INIT);
+ else
+ post_init_check(READ_FLAG_BINDATA_INIT);
+
+ if (!bindata)
+ bindata = generate_bindata();
+
+ if (target_file && bindata) {
+ if (!write_bindata(bindata,target_file))
+ exit(1);
+ log_config(target_file);
+ }
+
+ if (text_target_dir && bindata) {
+ int i;
+ if (!write_bindata_text(bindata,text_target_dir, &filelist))
+ exit(1);
+
+ if (!filelist)
+ exit(1);
+
+ for (i = 0; filelist[i]; i++) {
+ log_config(filelist[i]);
+ free(filelist[i]);
+ }
+ free(filelist);
+ }
+
+ fail:
+
+ if (err)
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeProgFailed,
+ "%s failed; exit code=%d"),
+ argv[0],err);
+ return err;
+ }
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.109-cvs/utils/elmcharset.c
*** elm2.4.ME+.108/utils/elmcharset.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/elmcharset.c 2003-11-09 18:13:38.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmcharset.c,v 1.26 2003/03/17 16:04:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmcharset.c,v 1.27 2003/11/09 16:13:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 21,110 ****
char * program_name = "elmcharset";
int register_fd = -1;
!
! static char ** copydirs = NULL;
! static int copydir_count = 0;
!
! static FILE *charmap_copy P_((const char *name, const char *pathname));
! static FILE *charmap_copy(name,pathname)
! const char *name;
! const char *pathname;
! {
! int i;
! FILE *F = NULL;
! FILE *res = NULL;
! int fd,c;
!
!
! for (i = 0; i < copydir_count; i++) {
! char * n = elm_message(FRM("%s/%s"),copydirs[i],name);
!
! F = fopen(n,"r");
!
! if (F) {
! lib_transient(CATGETS(elm_msg_cat, MeSet,MeCopyingMapfile,
! "Copying mapfile %s: %s => %s"),
! name,n,pathname);
! log_config((char *)pathname);
! }
! free(n);
! if (F)
! break;
! }
! if (!F) {
! lib_transient(FRM("*** Copying mapfile %s => %s -- file %s not found?"),
! name,pathname,name);
! return NULL;
! }
!
! fd = open(pathname, O_RDWR | O_CREAT | O_EXCL, 0444);
! if (fd < 0) {
! int errcode;
!
! error1:
! errcode = errno;
!
! lib_error(CATGETS(elm_msg_cat, MeSet, MeFileNotWriteable,
! "File %.50s is not writeable: %s"),
! pathname, error_description(errcode));
!
! fclose(F);
! return NULL;
! }
!
!
! res = fdopen(fd,"w+");
! if (!res)
! goto error1;
!
! while (EOF != (c = getc(F))) {
! if (putc(c,res) == EOF) {
! int err = errno;
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorTryingToWrite,
! "Error %s encountered trying to write to %s."),
! error_description(err),pathname);
! fclose(F);
! fclose(res);
! return NULL;
! }
! }
!
!
!
! if (ferror(res)) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorReading,
! "Error reading from %.50s"),
! name);
! fclose(F);
! fclose(res);
! return NULL;
! }
!
! fclose(F);
!
! rewind(res);
! return res;
! }
int main(argc, argv)
int argc;
--- 21,27 ----
char * program_name = "elmcharset";
int register_fd = -1;
! #include "charmapcopy.h"
int main(argc, argv)
int argc;
***************
*** 257,262 ****
--- 174,182 ----
if (!global)
read_rc_file(0);
+ else
+ post_init_check(0);
+
if (optind < argc) {
int errcount = 0;
Index: elm2.4.ME+.109-cvs/utils/elmlibregister.c
*** elm2.4.ME+.108/utils/elmlibregister.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/elmlibregister.c 2003-11-09 18:13:38.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmlibregister.c,v 1.2 2003/05/25 11:19:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmlibregister.c,v 1.3 2003/11/09 16:13:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 143,148 ****
--- 143,150 ----
if (!global)
read_rc_file(0);
+ else
+ post_init_check(0);
if (optind < argc) {
Index: elm2.4.ME+.109-cvs/utils/elmrc-write.c
*** elm2.4.ME+.108/utils/elmrc-write.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/elmrc-write.c 2003-11-09 18:13:38.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmrc-write.c,v 1.10 2003/03/17 16:04:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmrc-write.c,v 1.11 2003/11/09 16:13:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 141,146 ****
--- 141,148 ----
if (!global)
read_rc_file(0);
+ else
+ post_init_check(0);
if (optind < argc) {
FILE * F;
Index: elm2.4.ME+.109-cvs/utils/elmregister.c
*** elm2.4.ME+.108/utils/elmregister.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/elmregister.c 2003-10-21 22:05:44.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmregister.c,v 1.9 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmregister.c,v 1.13 2003/10/21 19:05:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
! fprintf(stderr,
"%s: Directory %s created\n",
program_name,Z);
} else if (errno != EEXIST) {
--- 1058,1064 ----
make_package_dir(Z,installer_root);
if (0 == mkdir(Z,0755)) {
! fprintf(stdout,
"%s: Directory %s created\n",
program_name,Z);
} else if (errno != EEXIST) {
***************
*** 1080,1086 ****
}
! fprintf(stderr,"%s: Creating %s\n",program_name,LI.filename);
LI.file = fdopen(t,"r+");
if (! LI.file) {
--- 1082,1088 ----
}
! fprintf(stdout,"%s: Creating %s\n",program_name,LI.filename);
LI.file = fdopen(t,"r+");
if (! LI.file) {
***************
*** 1370,1376 ****
}
! fprintf(stderr,"%s: File %s installed\n",program_name,target);
fclose(S);
free(tempname);
--- 1372,1378 ----
}
! fprintf(stdout,"%s: File %s installed\n",program_name,target);
fclose(S);
free(tempname);
***************
*** 1418,1430 ****
exit(1); /* FAILURE */
}
! fprintf(stderr,
"%s: Copying directory %s -> %s:\n",
program_name,src,trg);
if (0 == mkdir(trg,0755)) {
! fprintf(stderr,
"%s: Directory %s created\n",
program_name,trg);
} else if (errno != EEXIST) {
--- 1420,1432 ----
exit(1); /* FAILURE */
}
! fprintf(stdout,
"%s: Copying directory %s -> %s:\n",
program_name,src,trg);
if (0 == mkdir(trg,0755)) {
! fprintf(stdout,
"%s: Directory %s created\n",
! fprintf(stderr,
"%s: (%s) Keeping link %s from old version (was %s)\n",
program_name,source->filename,ptr->arg_ptrs[1],
ptr->arg_ptrs[0]
--- 2856,2862 ----
if (!on_current(source,ptr->arg_ptrs[1])) {
if ('M' != ptr->command_letter)
! fprintf(stdout,
"%s: (%s) Keeping link %s from old version (was %s)\n",
program_name,source->filename,ptr->arg_ptrs[1],
ptr->arg_ptrs[0]
***************
*** 2873,2879 ****
if (!on_current(source,ptr->arg_ptrs[0])) {
if ('M' != ptr->command_letter)
! fprintf(stderr,
"%s: (%s) Keeping file %s is from old version\n",
program_name,source->filename,ptr->arg_ptrs[0]);
continue;
--- 2876,2882 ----
if (!on_current(source,ptr->arg_ptrs[0])) {
if ('M' != ptr->command_letter)
! fprintf(stdout,
"%s: (%s) Keeping file %s is from old version\n",
program_name,source->filename,ptr->arg_ptrs[0]);
continue;
***************
! fprintf(stderr," %s",
translated[j]);
! fprintf(stderr,"\n");
! fflush(stderr);
pipefd = create_pipe(i,translated,0,&pid,"/");
--- 3323,3340 ----
}
translated[i] = NULL;
! fprintf(stdout,
"%s: Executing",program_name);
for (j = 0; j < i; j++)
! fprintf(stdout," %s",
ptr->arg_ptrs[j]);
! fprintf(stdout,
"\n%s: As",program_name);
for (j = 0; j < i; j++)
! fprintf(stdout," %s",
translated[j]);
+ }
+ }
+
+ if (ptr->group_ptr && 0 != strcmp(ptr->group_ptr,"-")) {
+ g = getgrnam(ptr->group_ptr);
+
+ if (!g)
+ fprintf(stderr,
+ "%s: [replay_list] '%c' Group %s not found\n",
+ program_name,ptr->command_letter,
+ ptr->group_ptr);
+ else
+ group = g->gr_gid;
+
+ }
+
+ if (ptr->mode_ptr && 0 != strcmp(ptr->mode_ptr,"-") &&
+ 0 != strcmp(ptr->mode_ptr,"0")) {
+ char * x;
+ mode = strtol(ptr->mode_ptr,&x,8);
+
+ if (*x || 0 == mode)
+ mode = -1;
+ }
+
+ if (stat(X,&X1) < 0) {
+ fprintf(stderr,
+ "%s: (note) %s : %s not accessible\n",
+ program_name,
+ ptr->arg_ptrs[0],X);
+
+ Exit_status = 1; /* FAILURE */
+
+ goto failure1;
+ }
+
+
+ if (
+ #ifdef S_ISDIR
+ S_ISDIR(X1.st_mode)
+ #else
+ S_IFDIR == (X1.st_mode & S_IFMT)
+ #endif
+ ) {
+
+ if (ptr->command_letter != 'M') {
+ fprintf(stderr,
+ "%s: (note) %s : %s is directory when should not\n",
+ program_name,
+ ptr->arg_ptrs[0],X);
+
+ Exit_status = 1; /* FAILURE */
+
+ goto failure1;
+ }
+
+ } else {
+ if (ptr->command_letter == 'M') {
+ fprintf(stderr,
+ "%s: (note) %s : %s is not a directory\n",
+ program_name,
+ ptr->arg_ptrs[0],X);
+
+ Exit_status = 1; /* FAILURE */
+ goto failure1;
+ }
+ }
+
+ if (user != (uid_t)-1 || group != (gid_t)-1) {
+ if (X1.st_uid != user || X1.st_gid != group) {
+ if (-1 == chown(X,user,group)) {
+ fprintf(stderr,"%s: Failed to set owner/group of %s\n",
+ program_name,X);
+ Exit_status = 1; /* FAILURE */
+ goto failure1;
+ }
+ } else {
+ fprintf(stdout,"%s: Fixed owner/group of %s\n",
+ program_name,X);
+ }
+
+ /* Recheck mode */
+ if (stat(X,&X1) < 0) {
+ fprintf(stderr,
+ "%s: (note) %s : %s not accessible\n",
+ program_name,
+ ptr->arg_ptrs[0],X);
+
+ Exit_status = 1; /* FAILURE */
+
+ goto failure1;
+ }
+ }
+
+ if (mode > 0) {
+
+ if ((X1.st_mode & 0777) != mode) {
+ if (-1 == chmod(X,mode)) {
+ fprintf(stderr,"%s: Failed to set mode of %s\n",
+ program_name,X);
+ Exit_status = 1; /* FAILURE */
+ } else {
+ fprintf(stdout,"%s: Mode of %s fixed\n",
+ program_name,X);
+ }
+ }
+
+ }
+
+ failure1:
+ free(X); X = 0;
+ break;
+ default:
+ break;
+ }
+ }
+
return Exit_status;
}
***************
*** 3490,3503 ****
int i;
int t;
! fprintf (stderr,
"%s: Copying ELM files from %s to / \n",
program_name,installer_root);
LI_target.filename = filelist;
if (0 == mkdir(ETCHOME,0755)) {
! fprintf(stderr,
"%s: Directory %s created\n",
program_name,ETCHOME);
} else if (errno != EEXIST) {
--- 3655,3668 ----
int i;
int t;
! fprintf (stdout,
"%s: Copying ELM files from %s to / \n",
program_name,installer_root);
LI_target.filename = filelist;
if (0 == mkdir(ETCHOME,0755)) {
! fprintf(stdout,
"%s: Directory %s created\n",
program_name,ETCHOME);
} else if (errno != EEXIST) {
***************
*** 3568,3574 ****
last = & LI_source.entries[LI_source.entries_count-1];
}
! /* EXECUTE commands */
r = replay_list(&LI_source.entries[LI_source.entries_count-1],
&LI_source,target,last);
--- 3733,3739 ----
last = & LI_source.entries[LI_source.entries_count-1];
}
! /* EXECUTE commands and fix permissions */
r = replay_list(&LI_source.entries[LI_source.entries_count-1],
&LI_source,target,last);
***************
*** 3766,3771 ****
--- 3931,3940 ----
program_name = argv[0];
+ #if defined(ANSI_C) || defined(SETLINEBUF)
+ setlinebuf(stdout);
+ #endif
+
#if 0
if (register_pipe)
fprintf(stderr,"%s: $ELM_INSTALLER=%s\n",program_name,register_pipe);
Index: elm2.4.ME+.109-cvs/utils/elmstringconvert.c
*** elm2.4.ME+.108/utils/elmstringconvert.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/elmstringconvert.c 2003-11-09 18:13:38.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmstringconvert.c,v 1.5 2003/03/17 16:04:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmstringconvert.c,v 1.6 2003/11/09 16:13:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 261,266 ****
--- 261,268 ----
if (!global)
read_rc_file(0);
+ else
+ post_init_check(0);
if (!source_charset)
source_charset = system_charset;
Index: elm2.4.ME+.109-cvs/utils/elmterminal.c
*** elm2.4.ME+.108/utils/elmterminal.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/elmterminal.c 2003-11-09 18:13:38.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmterminal.c,v 1.10 2003/03/17 16:04:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmterminal.c,v 1.11 2003/11/09 16:13:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 96,101 ****
--- 96,103 ----
if (!global)
read_rc_file(0);
+ else
+ post_init_check(0);
if (optind < argc) {
int errcount = 0;
Index: elm2.4.ME+.109-cvs/utils/elmunidata.c
*** elm2.4.ME+.108/utils/elmunidata.c 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/elmunidata.c 2003-11-09 18:13:38.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmunidata.c,v 1.15 2003/03/17 16:04:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmunidata.c,v 1.16 2003/11/09 16:13:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.16 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 15,21 ****
#include "reghelper.h"
int register_fd = -1;
! char * program_name = "elmrc-write";
extern char *optarg;
extern int optind;
--- 15,21 ----
#include "reghelper.h"
int register_fd = -1;
! char * program_name = "elmunidata";
extern char *optarg;
extern int optind;
***************
*** 24,104 ****
int argc;
char *argv[];
{
! struct mapped_data * unidata = NULL;
! char * target_file = NULL;
! FILE * text_target_file = NULL;
! FILE * logfile = NULL;
! int err = 0;
! int silent_gaps = 0;
!
! int c;
#if DEBUG
! init_debugfile("ELMUNIDATA");
#endif
! locale_init();
!
! REGHELPER_INIT(argv[0]);
!
! user_init();
! init_defaults();
! read_rc_file(READ_FLAG_UNIDATA_INIT);
!
! while ((c = getopt(argc, argv, "w:l:sd:b:BIT:")) != EOF) {
! switch(c) {
! case 'w':
! target_file = optarg;
! break;
! case 'I':
! target_file = unidata_path;
! break;
! case 'l':
! logfile = fopen(optarg,"w");
break;
case 's':
silent_gaps = 1;
break;
! case 'd' :
#if DEBUG
! set_debugging(optarg);
#else
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmArgsIngoringDebug,
! "Warning: system created without debugging enabled - request ignored\n"));
#endif
! break;
! case 'B':
! unidata = default_unidata();
! if (!unidata) {
! err = 1;
! goto fail;
}
- lib_error(CATGETS(elm_msg_cat, MeSet, MeFileLoaded,
- "%s loaded"),
- raw_unidata_path);
- break;
- case 'b':
- if (!get_unidata(&unidata,optarg)) {
- err = 1;
- goto fail;
- }
- lib_error(CATGETS(elm_msg_cat, MeSet, MeFileLoaded,
- "%s loaded"),
- optarg);
- break;
- case 'T':
- text_target_file = fopen(optarg,"w");
- if (text_target_file)
- log_config(optarg);
- break;
- case '?':
- exit(1);
}
- }
elm_sfprintf(version_buff, sizeof version_buff,
FRM("%s PL%s"), VERSION, PATCHLEVEL);
!
#ifdef DEBUG
{
int d = panic_dprint("\n\
--- 24,104 ----
int argc;
char *argv[];
{
! struct unidata_mapped_data * unidata = NULL;
! char * target_file = NULL;
! FILE * text_target_file = NULL;
! FILE * logfile = NULL;
! int err = 0;
! int silent_gaps = 0;
!
! int c;
#if DEBUG
! init_debugfile("ELMUNIDATA");
#endif
! locale_init();
!
! REGHELPER_INIT(argv[0]);
!
! user_init();
! init_defaults();
! read_rc_file(READ_FLAG_UNIDATA_INIT);
!
! while ((c = getopt(argc, argv, "w:l:sd:b:BIT:")) != EOF) {
! switch(c) {
! case 'w':
! target_file = optarg;
! break;
! case 'I':
! target_file = unidata_path;
! break;
! case 'l':
! logfile = fopen(optarg,"w");
break;
case 's':
silent_gaps = 1;
break;
! case 'd' :
#if DEBUG
! set_debugging(optarg);
#else
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmArgsIngoringDebug,
! "Warning: system created without debugging enabled - request ignored\n"));
#endif
! break;
! case 'B':
! unidata = default_unidata();
! if (!unidata) {
! err = 1;
! goto fail;
! }
! lib_error(CATGETS(elm_msg_cat, MeSet, MeFileLoaded,
! "%s loaded"),
! raw_unidata_path);
! break;
! case 'b':
! if (!get_unidata(&unidata,optarg)) {
! err = 1;
! goto fail;
! }
! lib_error(CATGETS(elm_msg_cat, MeSet, MeFileLoaded,
! "%s loaded"),
! optarg);
! break;
! case 'T':
! text_target_file = fopen(optarg,"w");
! if (text_target_file)
! log_config(optarg);
! break;
! case '?':
! exit(1);
}
}
elm_sfprintf(version_buff, sizeof version_buff,
FRM("%s PL%s"), VERSION, PATCHLEVEL);
!
#ifdef DEBUG
{
int d = panic_dprint("\n\
***************
*** 118,171 ****
#endif
! if (optind < argc) {
! if (!read_unidata_text(&unidata,argv[optind],logfile,
! silent_gaps)) {
!
! err = 1;
! goto fail;
! }
! if (logfile) {
! fprintf(logfile,catgets(elm_msg_cat, MeSet, MeFileParsed,
! "%s parsed"),
argv[optind]);
! putc('\n',logfile);
! }
! lib_error(CATGETS(elm_msg_cat, MeSet, MeFileParsed,
! "%s parsed"),
! argv[optind]);
! }
!
! if (target_file && unidata) {
! if (!write_unidata(unidata,target_file))
! exit(1);
! log_config(target_file);
! }
!
! if (text_target_file && unidata) {
! if (!write_unidata_text(unidata,text_target_file))
! exit(1);
! }
!
! if (text_target_file)
! fclose(text_target_file);
!
fail:
!
! if (logfile) {
! if (err) {
! fprintf(logfile,catgets(elm_msg_cat, MeSet, MeProgFailed,
! "%s failed; exit code=%d"),
argv[0],err);
! putc('\n',logfile);
! }
! fclose(logfile);
! }
! if (err)
! lib_error(CATGETS(elm_msg_cat, MeSet, MeProgFailed,
! "%s failed; exit code=%d"),
! argv[0],err);
! return err;
}
/*
--- 118,171 ----
#endif
! if (optind < argc) {
! if (!read_unidata_text(&unidata,argv[optind],logfile,
! silent_gaps)) {
!
! err = 1;
! goto fail;
! }
! if (logfile) {
! fprintf(logfile,catgets(elm_msg_cat, MeSet, MeFileParsed,
! "%s parsed"),
! argv[optind]);
! putc('\n',logfile);
! }
! lib_error(CATGETS(elm_msg_cat, MeSet, MeFileParsed,
! "%s parsed"),
argv[optind]);
! }
!
! if (target_file && unidata) {
! if (!write_unidata(unidata,target_file))
! exit(1);
! log_config(target_file);
! }
!
! if (text_target_file && unidata) {
! if (!write_unidata_text(unidata,text_target_file))
! exit(1);
! }
!
! if (text_target_file)
! fclose(text_target_file);
!
fail:
!
! if (logfile) {
! if (err) {
! fprintf(logfile,catgets(elm_msg_cat, MeSet, MeProgFailed,
! "%s failed; exit code=%d"),
! argv[0],err);
! putc('\n',logfile);
! }
! fclose(logfile);
! }
! if (err)
! lib_error(CATGETS(elm_msg_cat, MeSet, MeProgFailed,
! "%s failed; exit code=%d"),
argv[0],err);
! return err;
}
/*
Index: elm2.4.ME+.109-cvs/utils/Makefile.SH
*** elm2.4.ME+.108/utils/Makefile.SH 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/Makefile.SH 2003-11-15 17:50:22.000000000 +0200
***************
*** 16,22 ****
echo "Extracting utils/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # @(#)$Id: Makefile.SH,v 1.32 2003/10/01 17:34:36 hurtta Exp $
#
# Makefile for the Elm system utilities
#
--- 16,22 ----
echo "Extracting utils/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # @(#)$Id: Makefile.SH,v 1.34 2003/11/15 15:50:22 hurtta Exp $
#
# Makefile for the Elm system utilities
#
***************
*** 94,99 ****
--- 94,100 ----
$(BIN)/elmrc-write-shared \
$(BIN)/elmterminal-shared \
$(BIN)/elmunidata-shared \
+ $(BIN)/elmbindata-shared \
$(BIN)/elmstringconvert-shared \
$(REGSHARED)
***************
*** 138,143 ****
--- 139,145 ----
$(LIB)/elmrc-write \
$(LIB)/elmterminal \
$(LIB)/elmunidata \
+ $(LIB)/elmbindata \
$(LIB)/elmregister \
$(LIB)/elmuninstall \
$(REGNOSHARED)
***************
*** 160,165 ****
--- 162,168 ----
$(BIN)/elmrc-write \
$(BIN)/elmterminal \
$(BIN)/elmunidata \
+ $(BIN)/elmbindata \
$(BIN)/elmstringconvert \
$(BIN)/elmregister \
$(REGSHAREDBIN) \
***************
*** 188,193 ****
--- 191,197 ----
elmrc-write.o \
elmterminal.o \
elmunidata.o \
+ elmbindata.o \
elmstringconvert.o \
elmregister.o \
$(REGSHAREDOBJ)
***************
*** 210,222 ****
READMSG_SRC = readmsg.c
READMSG_OBJ = readmsg.o
ELMCHARSET_SRC = elmcharset.c
! ELMCHARSET_OBJ = elmcharset.o reghelper.o
ELMRCWRITE_SRC = elmrc-write.c
ELMRCWRITE_OBJ = elmrc-write.o reghelper.o
ELMTERMINAL_SRC = elmterminal.c
ELMTERMINAL_OBJ = elmterminal.o reghelper.o
ELMUNIDATA_SRC = elmunidata.c
ELMUNIDATA_OBJ = elmunidata.o reghelper.o
ELMSCONV_SRC = elmstringconvert.c
ELMSCONV_OBJ = elmstringconvert.o
ELMLIBREG_OBJ = elmlibregister.o reghelper.o
--- 214,228 ----
READMSG_SRC = readmsg.c
READMSG_OBJ = readmsg.o
ELMCHARSET_SRC = elmcharset.c
! ELMCHARSET_OBJ = elmcharset.o reghelper.o charmapcopy.o
ELMRCWRITE_SRC = elmrc-write.c
ELMRCWRITE_OBJ = elmrc-write.o reghelper.o
ELMTERMINAL_SRC = elmterminal.c
ELMTERMINAL_OBJ = elmterminal.o reghelper.o
ELMUNIDATA_SRC = elmunidata.c
ELMUNIDATA_OBJ = elmunidata.o reghelper.o
+ ELMBINDATA_SRC = elmbindata.c
+ ELMBINDATA_OBJ = elmbindata.o reghelper.o charmapcopy.o
ELMSCONV_SRC = elmstringconvert.c
ELMSCONV_OBJ = elmstringconvert.o
ELMLIBREG_OBJ = elmlibregister.o reghelper.o
***************
*** 255,261 ****
prlong.o: $(INCLDIR)/elmutil.h $(INCLDIR)/defs.h
readmsg.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_readmsg.h
elmcharset.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/cs_imp.h $(INCLDIR)/reghelper.h
elmrc-write.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
$(INCLDIR)/reghelper.h
--- 261,267 ----
prlong.o: $(INCLDIR)/elmutil.h $(INCLDIR)/defs.h
readmsg.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_readmsg.h
elmcharset.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/cs_imp.h $(INCLDIR)/reghelper.h charmapcopy.h
elmrc-write.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
$(INCLDIR)/reghelper.h
***************
*** 263,271 ****
$(INCLDIR)/reghelper.h
elmunidata.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/unidata.h $(INCLDIR)/reghelper.h
elmstringconvert.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h
elmregister.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h $(INCLDIR)/reghelper.h
! reghelper.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h $(INCLDIR)/reghelper.h
elmlibregister.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
$(INCLDIR)/reghelper.h
--- 269,283 ----
$(INCLDIR)/reghelper.h
elmunidata.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/unidata.h $(INCLDIR)/reghelper.h
+ elmbindata.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
+ $(INCLDIR)/bindata.h $(INCLDIR)/reghelper.h $(INCLDIR)/cs_imp.h \
+ charmapcopy.o
elmstringconvert.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h
elmregister.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h $(INCLDIR)/reghelper.h
! reghelper.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h \
! $(INCLDIR)/reghelper.h
! charmapcopy.o: charmapcopy.h $(INCLDIR)/s_elm.h $(INCLDIR)/elmlib.h \
! $(INCLDIR)/defs.h $(INCLDIR)/s_me.h $(INCLDIR)/reghelper.h
elmlibregister.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
$(INCLDIR)/reghelper.h
***************
*** 337,342 ****
--- 349,357 ----
$(BIN)/elmunidata: $(ELMUNIDATA_OBJ) ../lib/libutil.a
$(CC) $(LFLAGS) -o $@ $(ELMUNIDATA_OBJ) ../lib/libutil.a $(LIB2)
+ $(BIN)/elmbindata: $(ELMBINDATA_OBJ) ../lib/libutil.a
+ $(CC) $(LFLAGS) -o $@ $(ELMBINDATA_OBJ) ../lib/libutil.a $(LIB2)
+
$(BIN)/elmstringconvert: $(ELMSCONV_OBJ) ../lib/libutil.a
$(CC) $(LFLAGS) -o $@ $(ELMSCONV_OBJ) ../lib/libutil.a $(LIB2)
***************
*** 464,469 ****
--- 479,487 ----
$(BIN)/elmunidata-shared: $(ELMUNIDATA_OBJ) ../shlib/libelmme-base.so
$(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMUNIDATA_OBJ) ../shlib/libelmme-base.so $(LIB2)
+ $(BIN)/elmbindata-shared: $(ELMBINDATA_OBJ) ../shlib/libelmme-base.so
+ $(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMBINDATA_OBJ) ../shlib/libelmme-base.so $(LIB2)
+
$(BIN)/elmstringconvert-shared: $(ELMSCONV_OBJ) ../shlib/libelmme-base.so
$(CC) $(LFLAGS) -o $@ $(RPATH) $(ELMSCONV_OBJ) ../shlib/libelmme-base.so $(LIB2)
***************
*** 510,515 ****
--- 528,536 ----
$(LIB)/elmunidata: $(BIN)/elmunidata-shared
$(REG) copy -m 555 $? $@
+ $(LIB)/elmbindata: $(BIN)/elmbindata-shared
+ $(REG) copy -m 555 $? $@
+
$(LIB)/elmlibregister: $(BIN)/elmlibregister-shared
$(REG) copy -m 555 $? $@
***************
*** 565,570 ****
--- 586,594 ----
$(LIB)/elmunidata: $(BIN)/elmunidata
$(REG) copy -m 555 $? $@
+ $(LIB)/elmbindata: $(BIN)/elmbindata
+ $(REG) copy -m 555 $? $@
+
!NO!SUBS!
fi
Index: elm2.4.ME+.109-cvs/utils/reghelper.c
*** elm2.4.ME+.108/utils/reghelper.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.109-cvs/utils/reghelper.c 2003-11-09 20:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: reghelper.c,v 1.3 2003/05/26 15:19:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: reghelper.c,v 1.4 2003/11/09 18:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 96,101 ****
--- 96,105 ----
void log_config(file)
char *file;
{
+ /* Skip '/' on front ... */
+ while ('/' == file[0])
+ file++;
+
if (register_fd != -1)
log_it("C",file,"-","-",0);
}
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
files elm-2.4ME+PL109S.patch.gz
and elm-2.4ME+109S.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL109S.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+109S.tar.gz >
via WWW.
Page <URL: http://personal.inet.fi/atk/elmme/ > is not up
of date.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL109S.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL109 (25) --------------------------------
Index: elm2.4.ME+.109S-cvs/hdrs/patchlevel.h
Prereq: 1099000000
*** elm2.4.ME+.109/hdrs/patchlevel.h 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109S-cvs/hdrs/patchlevel.h 2003-11-29 11:07:44.000000000 +0200
***************
*** 1,8 ****
! #define PATCHLEVEL "109 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.109
*/
! #define LAST_REPORT_TIME 1099000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
#define VERS_DATE "Nov, 2003" /* for elm -v option */
#define WHAT_STRING \
--- 1,8 ----
! #define PATCHLEVEL "109S (25)"
/* Used by Configure:
SHAREDTAG: .1.0.109
*/
! #define LAST_REPORT_TIME 1100000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
#define VERS_DATE "Nov, 2003" /* for elm -v option */
#define WHAT_STRING \
Index: elm2.4.ME+.109S-cvs/README.ME+
*** elm2.4.ME+.109/README.ME+ 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109S-cvs/README.ME+ 2003-11-29 11:07:43.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.670 2003/11/15 15:25:17 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.670.4.1 2003/11/29 09:07:43 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,63 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL109S (25) compared with Elm2.4ME+ PL109 (25)
+ ------------------------------------------------------------------
+
+ Fix potential security problem on systems where Elm ME+
+ is setgid mail and system do not support Posix saved IDs.
+ Check output of 'elm -vvv' if your system have problems:
+
+ Have Posix saved IDs: Yes (egid 12)
+
+ If this is 'No' and egid is other than your gid, there is
+ possibility that Elm ME+ can read or write some files
+ which are readable or writable by group mail, when it should
+ not access them. Note that these fixes can not be complete.
+ There is race condition at least. Closing that race condition
+ requires that Elm ME+ drop privileges temporary. For that
+ Elm ME+ uses Posix saved IDs.
+
+ - SECURITY: Add can_open() test to load_locale_map()
+ - SECURITY: Add can_open() test to copy1()
+ - SECURITY: Add can_open() test to parse_iso2022_map()
+ - SECURITY: Add can_open() test to do_newalias()
+ - SECURITY: Add can_open() test to dbz_fresh()
+ - SECURITY: Add can_open() test to dbz_again()
+ - SECURITY: Add can_open() test to dbz_open()
+ - SECURITY: Add can_open() test to latebase()
+ - SECURITY: Add can_open() test to read_rc_file()
+ - SECURITY: Add can_open() test to parse_service_entries()
+ - SECURITY: Add can_open() test to load_terminal_map()
+ - SECURITY: Add can_open() test to read_mailcaps()
+ - SECURITY: Add can_open() test to add_to_alias_text()
+ - SECURITY: Add can_open() test to delete_from_alias_text()
+ - SECURITY: Add can_open() test to mime_guess_content_type()
+ - SECURITY: Add can_open() test to edit_the_message()
+ - SECURITY: Add can_open() test to read_editor()
+ - SECURITY: Add can_open() test to append()
+ - SECURITY: Add can_open() test to check_form_file()
+ - SECURITY: Add can_open() test to format_form()
+ - SECURITY: Add can_open() test to edit_headers_on_editor()
+ - SECURITY: Add can_open() test to mail()
+ - SECURITY: Add can_open() test to save_options()
+
+ - Add can_open() test to load_folder_state_file()
+ - Add can_open() test to read_unidata_text()
+ - Add can_open() test to display_file()
+
Changes of Elm2.4ME+ PL109 (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
Index: elm2.4.ME+.109S-cvs/lib/charset.c
*** elm2.4.ME+.109/lib/charset.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109S-cvs/lib/charset.c 2003-11-26 19:16:54.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: charset.c,v 1.72 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.72 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: charset.c,v 1.73 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.73 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 1388,1398 ****
{
struct locale_map_item *result;
int result_len = 0;
! FILE * f = fopen(filename,"r");
int max_result = 0;
int c,l1;
char buf[LONG_STRING];
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 1388,1407 ----
{
struct locale_map_item *result;
int result_len = 0;
! FILE * f;
int max_result = 0;
int c,l1;
char buf[LONG_STRING];
+ int err = can_open(filename,"r");
+ if(err) {
+ DPRINT(Debug,2,(&Debug,
+ "load_locale_map: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return NULL;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.109S-cvs/lib/file_util.c
*** elm2.4.ME+.109/lib/file_util.c 2002-01-26 13:14:46.000000000 +0200
--- elm2.4.ME+.109S-cvs/lib/file_util.c 2003-11-26 19:16:54.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.6 2001/06/06 18:08:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.7 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 274,279 ****
--- 274,294 ----
DPRINT(Debug,1,(&Debug,
"Copy: to='%s'\n", to));
+ if (!isspool) {
+ int err = can_open(to, "w");
+
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Error: could not open %s for writing (copy -- can_open)\n",
+ to));
+
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotOpenFile,
+ "Could not open file %s."),
+ to);
+ return(1);
+ }
+ }
+
if ((to_file = fopen(to, "w")) == NULL) {
DPRINT(Debug,1,(&Debug,
"Error: could not open %s for writing (copy)\n",
Index: elm2.4.ME+.109S-cvs/lib/iso2022.c
*** elm2.4.ME+.109/lib/iso2022.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109S-cvs/lib/iso2022.c 2003-11-26 19:16:54.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.26 2003/08/24 17:04:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.27 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 482,491 ****
int max_count = 0;
int new_max;
int count = 0;
! FILE * f = fopen(filename,"r");
char buf[LONG_STRING];
int c, l1;
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 482,500 ----
int max_count = 0;
int new_max;
int count = 0;
! FILE * f;
char buf[LONG_STRING];
int c, l1;
+ int err = can_open(filename,"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "parse_iso2022_map=0: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return 0;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.109S-cvs/lib/ldstate.c
*** elm2.4.ME+.109/lib/ldstate.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109S-cvs/lib/ldstate.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: ldstate.c,v 1.7 2003/07/24 16:29:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: ldstate.c,v 1.8 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 114,119 ****
--- 114,120 ----
char buf[SLEN], *state_fname;
int status, i, Len,j;
FILE *fp;
+ int err;
/* clear out the folder status record */
clear_ldstate(fst);
***************
*** 121,126 ****
--- 122,135 ----
/* see if we can find a state file */
if ((state_fname = getenv(FOLDER_STATE_ENV)) == NULL)
return 0;
+
+ /* This test should not needed,
+ setgid Elm ME+ do not call this function
+ */
+ err = can_open(state_fname, "r");
+ if (err)
+ return 0;
+
if ((fp = fopen(state_fname, "r")) == NULL)
return 0;
Index: elm2.4.ME+.109S-cvs/lib/localmbx.c
*** elm2.4.ME+.109/lib/localmbx.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109S-cvs/lib/localmbx.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.60 2003/07/24 16:29:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.60 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.61 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.61 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 4242,4247 ****
--- 4242,4248 ----
KEEP_STATE keep_state_ptr;
{
int status = 0,err;
+
keep_state_ptr -> a.file.temp_keep_file =
elm_message(FRM("%s%s%d"),temp_dir, temp_file, getpid());
Index: elm2.4.ME+.109S-cvs/lib/mk_aliases.c
*** elm2.4.ME+.109/lib/mk_aliases.c 2002-01-26 13:14:46.000000000 +0200
--- elm2.4.ME+.109S-cvs/lib/mk_aliases.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mk_aliases.c,v 1.8 2001/03/13 19:46:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mk_aliases.c,v 1.9 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 39,45 ****
int buff_loaded; /* for file input overlap... */
int err_flag; /* if errors, don't save! */
int al_count; /* how many aliases so far? */
- char msg_buff[SLEN]; /* buffer for error messages */
DBZ *aliases_hash; /* current alias file */
char *buffer; /* alias line buffer */
long buffer_size; /* size of alias buffer */
--- 39,44 ----
***************
*** 566,572 ****
char *inputname, *dataname;
int fromelm, textwarn;
{
! FILE *in, *data;
/*
* try and allocate a big buffer (larger than a 64k segment...
--- 565,573 ----
char *inputname, *dataname;
int fromelm, textwarn;
{
! FILE *in, *data;
!
! int err;
/*
* try and allocate a big buffer (larger than a 64k segment...
***************
*** 587,603 ****
dbz_incore(TRUE);
}
if ((in = fopen(inputname,"r")) == NULL) {
! if ( textwarn )
! {
! lib_error(CATGETS(elm_msg_cat,
! NewaliasSet, NewaliasNoOpenIn,
! "Couldn't open %s for input!"),
! inputname);
! }
! else {
! *msg_buff = '\0';
! }
free(buffer);
return(-1);
}
--- 588,614 ----
dbz_incore(TRUE);
}
+ err = can_open(inputname,"r");
+ if (err) {
+ if ( textwarn ) {
+ lib_error(CATGETS(elm_msg_cat,
+ NewaliasSet, NewaliasNoOpenIn,
+ "Couldn't open %s for input!"),
+ inputname);
+ }
+
+ free(buffer);
+ return(-1);
+ }
+
if ((in = fopen(inputname,"r")) == NULL) {
! if ( textwarn ) {
! lib_error(CATGETS(elm_msg_cat,
! NewaliasSet, NewaliasNoOpenIn,
! "Couldn't open %s for input!"),
! inputname);
! }
!
free(buffer);
return(-1);
}
***************
*** 611,616 ****
--- 622,636 ----
return(-1);
}
+ err = can_open(dataname, "w");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat,
+ NewaliasSet, NewaliasNoOpenOut,
+ "Couldn't open %s for output!"), dataname);
+ free(buffer);
+ return(-1);
+ }
+
if ((data = fopen(dataname, "w")) == NULL) {
lib_error(CATGETS(elm_msg_cat,
NewaliasSet, NewaliasNoOpenOut,
***************
*** 700,702 ****
--- 720,729 ----
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
+
Index: elm2.4.ME+.109S-cvs/lib/ndbz.c
*** elm2.4.ME+.109/lib/ndbz.c 2002-01-26 13:14:45.000000000 +0200
--- elm2.4.ME+.109S-cvs/lib/ndbz.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: ndbz.c,v 1.4 2001/06/06 18:09:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: ndbz.c,v 1.5 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 246,255 ****
int fs; /* field-separator character in base file */
of_t tagmask; /* 0 default, 1 no tags */
{
! register char *fn;
struct dbzconfig c;
! register of_t m;
! register FILE *f;
if (size != 0 && size < 2) {
DPRINT(Debug,5,(&Debug,
--- 246,256 ----
int fs; /* field-separator character in base file */
of_t tagmask; /* 0 default, 1 no tags */
{
! char *fn;
struct dbzconfig c;
! of_t m;
! FILE *f;
! int err;
if (size != 0 && size < 2) {
DPRINT(Debug,5,(&Debug,
***************
*** 289,294 ****
--- 290,305 ----
fn = enstring(name, dir);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ free((malloc_t)fn);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_fresh: unable to write config (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "w");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 310,315 ****
--- 321,335 ----
fn = enstring(name, pag);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ free((malloc_t)fn);
+ DPRINT(Debug,5,(&Debug,
+ "dbz_fresh: unable to create/truncate .pag file (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "w");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 394,411 ****
char *name; /* base name; .dir and .pag must exist */
char *oldname; /* base name; all must exist */
{
! register char *fn;
struct dbzconfig c;
! register int i;
! register long top;
! register FILE *f;
! register int newtable;
! register of_t newsize;
/* pick up the old configuration */
fn = enstring(oldname, dir);
if (fn == NULL)
return (DBZ *)NULL;
f = fopen(fn, "r");
free((malloc_t)fn);
if (f == NULL) {
--- 414,442 ----
char *name; /* base name; .dir and .pag must exist */
char *oldname; /* base name; all must exist */
{
! char *fn;
struct dbzconfig c;
! int i;
! long top;
! FILE *f;
! int newtable;
! of_t newsize;
! int err;
/* pick up the old configuration */
fn = enstring(oldname, dir);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "r");
+ if (err) {
+ free((malloc_t)fn);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_again: cannot open old .dir file (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "r");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 446,451 ****
--- 477,491 ----
fn = enstring(name, dir);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ free((malloc_t)fn);
+ DPRINT(Debug,5,(&Debug,
+ "dbz_again: unable to write new .dir (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "w");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 465,470 ****
--- 505,519 ----
fn = enstring(name, pag);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ free((malloc_t)fn);
+ DPRINT(Debug,5,(&Debug,
+ "dbz_again: unable to create/truncate .pag file (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "w");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 489,499 ****
char *name;
int mode, flags;
{
! register int i;
! register size_t s;
! register DBZ *db;
! register char *dirfname;
! register char *pagfname;
if ((db = (DBZ *) calloc(sizeof(DBZ), 1)) == NULL) {
DPRINT(Debug,5,(&Debug,
--- 538,549 ----
char *name;
int mode, flags;
{
! int i;
! size_t s;
! DBZ *db;
! char *dirfname;
! char *pagfname;
! int err;
if ((db = (DBZ *) calloc(sizeof(DBZ), 1)) == NULL) {
DPRINT(Debug,5,(&Debug,
***************
*** 507,512 ****
--- 557,577 ----
return (DBZ *)NULL;
}
+ if (mode == O_RDONLY)
+ err = can_open(dirfname, "r");
+ else
+ err = can_open(dirfname, "r+");
+ if (err) {
+ free((malloc_t)dirfname);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: can't open .dir file (can_open)\n"));
+ free((malloc_t)db);
+
+ errno = err;
+ return (DBZ *)NULL;
+ }
+
if (mode == O_RDONLY) {
db->dbz_dirf = fopen(dirfname, "r");
db->dbz_dirronly = 1;
***************
*** 528,533 ****
--- 593,614 ----
free((malloc_t)db);
return (DBZ *)NULL;
}
+
+ if (mode == O_RDONLY)
+ err = can_open(pagfname, "rb");
+ else
+ err = can_open(pagfname, "r+b");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: .pag open failed (can_open)\n"));
+ (void) fclose(db->dbz_dirf);
+ free((malloc_t)pagfname);
+ free((malloc_t)db);
+
+ errno = err;
+ return (DBZ *)NULL;
+ }
+
if (mode == O_RDONLY) {
db->dbz_pagf = fopen(pagfname, "rb");
db->dbz_pagronly = 1;
***************
*** 558,568 ****
--- 639,659 ----
db->dbz_pagpos = -1;
/* don't free pagfname, need it below */
+ err = can_open(name, "r");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: basefile open failed (can_open)\n"));
+
+ goto fail1;
+ }
+
/* open the base file */
db->dbz_basef = fopen(name, "r");
if (db->dbz_basef == NULL) {
DPRINT(Debug,5,(&Debug,
"dbz_open: basefile open failed\n"));
+
+ fail1:
db->dbz_basefname = enstring(name, "");
if (db->dbz_basefname == NULL) {
(void) fclose(db->dbz_pagf);
***************
*** 843,855 ****
latebase(db)
register DBZ *db;
{
! register FILE *it;
if (db->dbz_basefname == NULL) {
DPRINT(Debug,5,(&Debug,
"latebase: name foulup\n"));
return (FILE *)NULL;
}
it = fopen(db->dbz_basefname, "r");
if (it == NULL) {
DPRINT(Debug,5,(&Debug,
--- 934,955 ----
latebase(db)
register DBZ *db;
{
! FILE *it;
! int err;
if (db->dbz_basefname == NULL) {
DPRINT(Debug,5,(&Debug,
"latebase: name foulup\n"));
return (FILE *)NULL;
}
+
+ err = can_open(db->dbz_basefname, "r");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "latebase: still can't open base (can_open)\n"));
+ return (FILE *)NULL;
+ }
+
it = fopen(db->dbz_basefname, "r");
if (it == NULL) {
DPRINT(Debug,5,(&Debug,
Index: elm2.4.ME+.109S-cvs/lib/read_rc.c
*** elm2.4.ME+.109/lib/read_rc.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109S-cvs/lib/read_rc.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.121 2003/11/10 15:15:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.121 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.122 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.122 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 1355,1377 ****
/** this routine does all the actual work of reading in the
.rc file... **/
! FILE *file;
!
errors = 0;
/* Look for the elmrc file */
! if ((file = fopen(user_rc_file, "r")) == NULL) {
DPRINT(Debug,2,(&Debug,
! "Warning:User has no \"%s\" file\n\n",
user_rc_file));
! }
! if (file != NULL) {
! do_rc(file, LOCAL_RC, ELMRCFILE);
! fclose(file);
}
-
/* load_locale_map may refer to map-text-dir ... */
do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
sizeof(map_txtdir));
--- 1355,1388 ----
/** this routine does all the actual work of reading in the
.rc file... **/
! int err;
!
errors = 0;
+
/* Look for the elmrc file */
! err = can_open(user_rc_file, "r");
! if (err) {
DPRINT(Debug,2,(&Debug,
! "Warning:User has no \"%s\" file (can_open)\n\n",
user_rc_file));
!
! } else {
! FILE *file = NULL;
! if ((file = fopen(user_rc_file, "r")) == NULL) {
! DPRINT(Debug,2,(&Debug,
! "Warning:Open \"%s\" failed\n\n",
! user_rc_file));
!
! }
!
! if (file != NULL) {
! do_rc(file, LOCAL_RC, ELMRCFILE);
! fclose(file);
! }
}
/* load_locale_map may refer to map-text-dir ... */
do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
sizeof(map_txtdir));
Index: elm2.4.ME+.109S-cvs/lib/service_list.c
*** elm2.4.ME+.109/lib/service_list.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.109S-cvs/lib/service_list.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.23 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.24 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 928,937 ****
/* hostname service options */
int max_count = 0;
int count = 0;
! FILE * f = fopen(filename,"r");
char buf[LONG_STRING];
int c, l1;
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 928,949 ----
/* hostname service options */
int max_count = 0;
int count = 0;
! FILE * f;
char buf[LONG_STRING];
int c, l1;
+ if (!system) {
+ int err = can_open(filename,"r");
+
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "parse_service_entries=0: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return 0;
+ }
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.109S-cvs/lib/terminal.c
*** elm2.4.ME+.109/lib/terminal.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109S-cvs/lib/terminal.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.37 2003/08/19 14:34:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.38 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 411,421 ****
{
struct terminal_map_item *result;
int result_len = 0;
! FILE * f = fopen(filename,"r");
int max_result = 0;
int c;
char buf[LONG_STRING];
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s\n",
--- 411,429 ----
{
struct terminal_map_item *result;
int result_len = 0;
! FILE * f;
int max_result = 0;
int c;
char buf[LONG_STRING];
+ int err = can_open(filename,"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return NULL;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s\n",
Index: elm2.4.ME+.109S-cvs/lib/unidata.c
*** elm2.4.ME+.109/lib/unidata.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109S-cvs/lib/unidata.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.25 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.26 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 2127,2137 ****
{
struct unidata_mapped_data * res = *ptr;
int status = 0;
! FILE *f = fopen(filename,"r");
int last_processed = -1;
int line_number = 1;
int unassigned_cell = -1;
char composition_buffer[160];
if (!f) {
int err = errno;
--- 2127,2153 ----
{
struct unidata_mapped_data * res = *ptr;
int status = 0;
! FILE *f;
int last_processed = -1;
int line_number = 1;
int unassigned_cell = -1;
char composition_buffer[160];
+
+
+ /* This should not have readed by setgid Elm ME+
+ so this test is not necessary */
+ int err = can_open(filename,"r");
+
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeUnidataCantOpen,
+ "Can't open UNIDATA2.TXT: %.50s: %.25s"),
+ filename,error_description(err));
+ return 0;
+ }
+
+
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
Index: elm2.4.ME+.109S-cvs/melib/mailcap.c
*** elm2.4.ME+.109/melib/mailcap.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109S-cvs/melib/mailcap.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.10 2003/10/11 11:35:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.11 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 466,476 ****
int unsupported = 0;
media_type_t T = NULL;
enum mime_major_type T_major = MIME_TYPE_UNKNOWN;
!
zero_mailcap_entry(&Entry);
arg_zero(&keyword);
arg_zero(&string);
F = fopen(mailcaps[mailcap_idx],"r");
if (!F) {
int err = errno;
--- 466,486 ----
int unsupported = 0;
media_type_t T = NULL;
enum mime_major_type T_major = MIME_TYPE_UNKNOWN;
!
! int err;
!
zero_mailcap_entry(&Entry);
arg_zero(&keyword);
arg_zero(&string);
+ err = can_open(mailcaps[mailcap_idx],"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "Failed to open mailcap %s: (errno=%d) %s (can_open)\n",
+ mailcaps[mailcap_idx],err,error_description(err)));
+ continue;
+ }
+
F = fopen(mailcaps[mailcap_idx],"r");
if (!F) {
int err = errno;
Index: elm2.4.ME+.109S-cvs/src/alias.c
*** elm2.4.ME+.109/src/alias.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109S-cvs/src/alias.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: alias.c,v 1.25 2003/08/31 10:53:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: alias.c,v 1.26 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 721,726 ****
--- 721,742 ----
strfcpy(fname,user_text_file,sizeof fname);
save_file_stats(fname);
+
+ err = can_open(fname, "a");
+ if (err) {
+ DPRINT(Debug,2,
+ (&Debug,
+ "Failure attempting to add alias to file %s within %s (can_open)",
+ fname, "add_to_alias_text"));
+ DPRINT(Debug,2,
+ (&Debug, "** %s **\n", error_description(err)));
+ lib_error(CATGETS(elm_msg_cat, AliasesSet, AliasesCouldntOpenAdd,
+ "Couldn't open %s to add new alias!"),
+ fname);
+ return(1);
+ }
+
+
if ((file = fopen(fname, "a")) == NULL) {
err = errno;
DPRINT(Debug,2,
***************
*** 801,832 ****
save_file_stats(fname);
if ((file = fopen(fname, "r")) == NULL) {
! err = errno;
! DPRINT(Debug,2,
! (&Debug,
! "Failure attempting to delete alias from file %s within %s",
! fname, "delete_from_alias_text"));
! DPRINT(Debug,2,
! (&Debug, "** %s **\n", error_description(err)));
! lib_error(CATGETS(elm_msg_cat, AliasesSet, AliasesCouldntOpenDelete,
! "Couldn't open %s to delete alias!"),
! fname);
! return(1);
}
if ((tmp_file = fopen(tmpfname, "w")) == NULL) {
! err = errno;
! DPRINT(Debug,2,
! (&Debug,
! "Failure attempting to open temp file %s within %s",
! tmpfname, "delete_from_alias_text"));
! DPRINT(Debug,2,
! (&Debug, "** %s **\n", error_description(err)));
! lib_error(CATGETS(elm_msg_cat, AliasesSet, AliasesCouldntOpenTemp,
! "Couldn't open temp file %s to delete alias!"),
! tmpfname);
! return(1);
}
while (mail_gets(line_in_file, sizeof(line_in_file), file) != 0)
--- 817,883 ----
save_file_stats(fname);
+ err = can_open(fname, "r");
+ if (err) {
+ DPRINT(Debug,2,
+ (&Debug,
+ "Failure attempting to delete alias from file %s within %s (can_open)",
+ fname, "delete_from_alias_text"));
+ DPRINT(Debug,2,
+ (&Debug, "** %s **\n", error_description(err)));
+ lib_error(CATGETS(elm_msg_cat, AliasesSet, AliasesCouldntOpenDelete,
+ "Couldn't open %s to delete alias!"),
+ fname);
+ return(1);
+
+ }
+
if ((file = fopen(fname, "r")) == NULL) {
! err = errno;
! DPRINT(Debug,2,
! (&Debug,
! "Failure attempting to delete alias from file %s within %s",
! fname, "delete_from_alias_text"));
! DPRINT(Debug,2,
! (&Debug, "** %s **\n", error_description(err)));
! lib_error(CATGETS(elm_msg_cat, AliasesSet, AliasesCouldntOpenDelete,
! "Couldn't open %s to delete alias!"),
! fname);
! return(1);
! }
!
!
! err = can_open(tmpfname, "w");
! if (err) {
! err = errno;
! DPRINT(Debug,2,
! (&Debug,
! "Failure attempting to open temp file %s within %s (can_open)",
! tmpfname, "delete_from_alias_text"));
! DPRINT(Debug,2,
! (&Debug, "** %s **\n", error_description(err)));
! lib_error(CATGETS(elm_msg_cat, AliasesSet, AliasesCouldntOpenTemp,
! "Couldn't open temp file %s to delete alias!"),
! tmpfname);
!
! fclose(file);
! return(1);
}
if ((tmp_file = fopen(tmpfname, "w")) == NULL) {
! err = errno;
! DPRINT(Debug,2,
! (&Debug,
! "Failure attempting to open temp file %s within %s",
! tmpfname, "delete_from_alias_text"));
! DPRINT(Debug,2,
! (&Debug, "** %s **\n", error_description(err)));
! lib_error(CATGETS(elm_msg_cat, AliasesSet, AliasesCouldntOpenTemp,
! "Couldn't open temp file %s to delete alias!"),
! tmpfname);
!
! fclose(file);
! return(1);
}
while (mail_gets(line_in_file, sizeof(line_in_file), file) != 0)
Index: elm2.4.ME+.109S-cvs/src/attach_menu.c
*** elm2.4.ME+.109/src/attach_menu.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109S-cvs/src/attach_menu.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.54 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.55 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.55 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 1574,1579 ****
--- 1574,1584 ----
p,i));
if (i == 0) {
+
+ int err = can_open(user_mime_types, "r");
+ if (err)
+ continue;
+
/* First try the user's mime.types file */
fp = fopen (user_mime_types, "r");
Index: elm2.4.ME+.109S-cvs/src/editmsg.c
*** elm2.4.ME+.109/src/editmsg.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109S-cvs/src/editmsg.c 2003-11-29 11:31:22.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.35 2003/10/11 13:04:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.36.2.3 2003/11/29 09:31:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36.2.3 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 588,600 ****
char linebuf[1024];
FILE *tmpfp = safeopen_rdwr(filename2);
! FILE *f= fopen(filename,"r");
if (!f || !tmpfp) {
! if (!tmpfp)
! free(tmpfp);
! if (!f)
! free(f);
return_value = 1;
goto fail;
}
--- 588,612 ----
char linebuf[1024];
FILE *tmpfp = safeopen_rdwr(filename2);
! FILE *f;
!
! int err = can_open(filename,"r");
!
! if (err) {
! if (tmpfp)
! fclose(tmpfp);
!
! return_value = 1;
! goto fail;
! }
!
! f = fopen(filename,"r");
if (!f || !tmpfp) {
! if (tmpfp)
! fclose(tmpfp);
! if (f)
! fclose(f);
return_value = 1;
goto fail;
}
***************
*** 651,663 ****
if (filename2 != filename) {
char linebuf[1024];
! FILE *tmpfp = fopen(filename,"w");
! FILE *f= fopen(filename2,"r");
if (!f || !tmpfp) {
! if (!tmpfp)
free(tmpfp);
! if (!f)
free(f);
return_value = 1;
goto fail;
--- 663,685 ----
if (filename2 != filename) {
char linebuf[1024];
! FILE *tmpfp;
! FILE *f;
! int err = can_open(filename,"w");
! int err2 = can_open(filename2,"r");
!
! if (err || err2) {
! return_value = 1;
! goto fail;
! }
!
! tmpfp = fopen(filename,"w");
! f= fopen(filename2,"r");
if (!f || !tmpfp) {
! if (tmpfp)
free(tmpfp);
! if (f)
free(f);
return_value = 1;
goto fail;
***************
*** 1207,1218 ****
--- 1229,1249 ----
{
char buffer[LONG_STRING];
int i,len;
+ int err = can_open(I->builtin->filename, "r");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCantOpenFile,
+ "Can't open %s!"),
+ I->builtin->filename, error_description(err));
+ return 0;
+ }
+
if (I->builtin->edit_fd) {
fclose(I->builtin->edit_fd);
I->builtin->edit_fd = NULL;
}
+
if ((I->builtin->edit_fd = fopen(I->builtin->filename,
"r")) == NULL) {
int err = errno;
Index: elm2.4.ME+.109S-cvs/src/elm.c
*** elm2.4.ME+.109/src/elm.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109S-cvs/src/elm.c 2003-11-23 20:12:43.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.59 2003/11/10 20:37:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.59 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.60 2003/11/23 18:12:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.60 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 993,998 ****
--- 993,999 ----
}
send_msg_argv(to_whom, batch_subject, MAIL_EDIT_MSG,
(batch_only ? NO : allow_forms), current_mailbox);
+
leave(0, ¤t_mailbox);
} else if (check_only) {
do_check_only(to_whom);
Index: elm2.4.ME+.109S-cvs/src/file_util.c
*** elm2.4.ME+.109/src/file_util.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109S-cvs/src/file_util.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.19 2003/07/29 18:46:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.20 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 65,70 ****
--- 65,80 ----
char buffer[VERY_LONG_STRING];
int len;
+ int err = can_open(filename, "r");
+
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Error: could not open %s for reading (append) -- can_open\n",
+ filename));
+ return(1);
+
+ }
+
if ((my_fd = fopen(filename, "r")) == NULL) {
DPRINT(Debug,1,(&Debug,
"Error: could not open %s for reading (append)\n", filename));
Index: elm2.4.ME+.109S-cvs/src/forms.c
*** elm2.4.ME+.109/src/forms.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109S-cvs/src/forms.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: forms.c,v 1.17 2003/07/29 18:46:19 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: forms.c,v 1.18 2003/11/26 17:16:55 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 63,74 ****
FILE *form;
char buffer[SLEN];
! register int field_count = 0;
if ((form = fopen(filename, "r")) == NULL) {
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
"Error %s trying to open %s to check fields!"),
! error_description(errno), filename);
return -1;
}
--- 63,84 ----
FILE *form;
char buffer[SLEN];
! int field_count = 0;
!
! int err = can_open(filename, "r");
! if (err) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
! "Error %s trying to open %s to check fields!"),
! error_description(err), filename);
! return -1;
! }
!
if ((form = fopen(filename, "r")) == NULL) {
+ int err = errno;
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
"Error %s trying to open %s to check fields!"),
! error_description(err), filename);
return -1;
}
***************
*** 99,104 ****
--- 109,122 ----
/** first off, let's open the files... **/
+ err = can_open(filename, "r");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet,
+ ElmCantReadMessageToValidate,
+ "Can't read the message to validate the form!"));
+ return -1;
+ }
+
if ((form = fopen(filename, "r")) == NULL) {
err = errno;
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCantReadMessageToValidate,
Index: elm2.4.ME+.109S-cvs/src/hdrconfg.c
*** elm2.4.ME+.109/src/hdrconfg.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109S-cvs/src/hdrconfg.c 2003-11-26 19:16:56.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.33 2003/10/11 13:25:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.34 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.34 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 554,559 ****
--- 554,560 ----
char buffer1[32*1024];
int stat;
int c;
+ int err;
if (in_string(editor, "%s"))
buffer = elm_message(FRM(editor),
***************
*** 576,582 ****
not with edit_charset (system_charset)
*/
-
elm_fprintf(F,
CATGETS(elm_msg_cat, ElmSet, ElmHdrEditComment,
"# Headers are automatically converted from %s charset and not need encoded\n"),
--- 577,582 ----
***************
*** 594,600 ****
}
-
add_addr_header(F,edit_charset,encoding_supported,
"From", & headers->from);
add_addr_header(F,edit_charset,encoding_supported,
--- 594,599 ----
***************
*** 634,639 ****
--- 633,645 ----
}
Raw(ON);
+ err = can_open(filename,"r");
+ if (err) {
+ lib_error(FRM("%s: %s"),filename,err);
+
+ goto fail1;
+ }
+
F = fopen(filename,"r");
if (!F) {
/* In than point opening should have succeed */
Index: elm2.4.ME+.109S-cvs/src/help.c
*** elm2.4.ME+.109/src/help.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109S-cvs/src/help.c 2003-11-26 19:16:56.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: help.c,v 1.13 2003/07/29 18:46:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: help.c,v 1.14 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 381,391 ****
static int display_file(file)
char *file;
{
! /*** Display file to screen ***/
!
! FILE *fileptr;
! int lines=0;
! char buffer[SLEN];
if ((fileptr = fopen(file,"r")) == NULL) {
DPRINT(Debug,1,
--- 381,403 ----
static int display_file(file)
char *file;
{
! /*** Display file to screen ***/
!
! FILE *fileptr;
! int lines=0;
! char buffer[SLEN];
!
! /* This routine is used to print helpfiles, which
! are not user writable directory, sho that is not actually
! problem */
! int err = can_open(file,"r");
!
! if (err) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmHelpCouldntOpenFile,
! "Couldn't open file %s."),
! file);
! return(FALSE);
! }
if ((fileptr = fopen(file,"r")) == NULL) {
DPRINT(Debug,1,
Index: elm2.4.ME+.109S-cvs/src/mailmsg2.c
*** elm2.4.ME+.109/src/mailmsg2.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109S-cvs/src/mailmsg2.c 2003-11-26 19:16:56.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.70 2003/10/05 16:07:28 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.70 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.71 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 248,253 ****
--- 248,266 ----
/** if there is an included file, copy it into the temp file **/
if (*included_file) {
FILE *input;
+
+ int err = can_open(included_file,"r");
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Can't open included file %s (cam_open). Failed with error %s (mail)\n",
+ included_file, error_description(errno)));
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotOpenFile,
+ "Could not open file %s."),
+ included_file);
+
+ return(need_redraw);
+ }
+
if ((input = fopen(included_file,"r")) == NULL) {
DPRINT(Debug,1,(&Debug,
"Can't open included file %s. Failed with error %s (mail)\n",
***************
*** 483,488 ****
--- 496,502 ----
do { /* So we can return here if check_for_multipart() fails
* - K E H <hurtt...@ozone.FMI.FI> */
+
code = 0;
reask_verify = 0;
***************
*** 513,518 ****
--- 527,544 ----
me_retcode = 1;
}
+ err = can_open(cur_editfile,"r+");
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Attempt to open file %s for reading failed with error %s (mail) -- can_open\n",
+ cur_editfile, error_description(err)));
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotOpenReply,
+ "Could not open reply file (%s)."),
+ error_description(err));
+
+ return need_redraw;
+ }
+
if ((reply = fopen(cur_editfile,"r+")) == NULL) {
err = errno;
DPRINT(Debug,1,(&Debug,
Index: elm2.4.ME+.109S-cvs/src/save_opts.c
*** elm2.4.ME+.109/src/save_opts.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109S-cvs/src/save_opts.c 2003-11-26 19:16:56.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: save_opts.c,v 1.23 2003/07/29 18:46:21 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: save_opts.c,v 1.24 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 65,71 ****
FILE *newelmrc;
char oldfname[SLEN], newfname[SLEN];
!
strfcpy(newfname,user_rc_file,sizeof newfname);
elm_sfprintf(oldfname, sizeof oldfname,
FRM("%s/%s"),
--- 65,72 ----
FILE *newelmrc;
char oldfname[SLEN], newfname[SLEN];
! int err;
!
strfcpy(newfname,user_rc_file,sizeof newfname);
elm_sfprintf(oldfname, sizeof oldfname,
FRM("%s/%s"),
***************
*** 92,97 ****
--- 93,106 ----
/** next, open the new .elm/elmrc file... **/
+ err = can_open(newfname, "w");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmrcSet, ElmrcCantSaveConfig,
+ "Can't save configuration! Can't write to %s [%s]."),
+ newfname, error_description(errno));
+ return;
+ }
+
if ((newelmrc = fopen(newfname, "w")) == NULL) {
lib_error(CATGETS(elm_msg_cat, ElmrcSet, ElmrcCantSaveConfig,
"Can't save configuration! Can't write to %s [%s]."),
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL109a.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL109a.patch.gz >
via WWW.
Page <URL: http://personal.inet.fi/atk/elmme/ > is not up of date.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL109a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
SUMMARY: This patch address panic when imap server disconnects
during password prompt, fixes initialization of
internal-mailcaps and mailcaps elmrc options and
fixes some cases where error message was not visible
because of exiting of Elm ME+. Also security fixes of
Elm2.4ME+ PL109S (25) are included to this patch.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL109 (25) --------------------------------
Index: elm2.4.ME+.109a-cvs/hdrs/patchlevel.h
Prereq: 1099000000
*** elm2.4.ME+.109/hdrs/patchlevel.h 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109a-cvs/hdrs/patchlevel.h 2003-11-29 20:54:15.000000000 +0200
***************
*** 1,8 ****
! #define PATCHLEVEL "109 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.109
*/
! #define LAST_REPORT_TIME 1099000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
#define VERS_DATE "Nov, 2003" /* for elm -v option */
#define WHAT_STRING \
--- 1,8 ----
! #define PATCHLEVEL "109a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.109
*/
! #define LAST_REPORT_TIME 1100000200
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
#define VERS_DATE "Nov, 2003" /* for elm -v option */
#define WHAT_STRING \
Index: elm2.4.ME+.109a-cvs/README.ME+
--- elm2.4.ME+.109a-cvs/README.ME+ 2003-11-30 10:08:18.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.670 2003/11/15 15:25:17 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.670.6.4 2003/11/30 08:08:18 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,139 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+
+ Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
+ -------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
+
+ SUMMARY: This patch address panic when imap server disconnects
+ during password prompt, fixes initialization of
+ internal-mailcaps and mailcaps elmrc options and
+ fixes some cases where error message was not visible
+ because of exiting of Elm ME+. Also security fixes of
+ Elm2.4ME+ PL109S (25) are included to this patch (it
+ is agaist Elm2.4ME+ PL109 (25))
+
+
+ - Changed some Raw(OFF) to Raw_OFF() on leaving routines
+ of src/utils.c
+
+ - Try fix
+ MBX PANIC in imap.c:2578:end_imap_command
+ when IMAP / TLS connection is closed by server.
+
+ - Initialization of internal-mailcaps and
+ metamail-mailcaps did not worked correctly.
+ Moved initialization before reading of global
+ elm.rc.
+ Problem noted by: Xavi Serrano <xser...@ac.upc.es>
+
+ - On def_prompt_handler() final newline should be
+ printed to terminal as prompt is printed (instead
+ of stderr.)
+
+ Fix potential security problems on systems where Elm ME+
+
+ Changes of Elm2.4ME+ PL109S (25) compared with Elm2.4ME+ PL109 (25)
+ ------------------------------------------------------------------
+
+
Changes of Elm2.4ME+ PL109 (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
Index: elm2.4.ME+.109a-cvs/lib/charset.c
*** elm2.4.ME+.109/lib/charset.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109a-cvs/lib/charset.c 2003-11-26 19:16:54.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: charset.c,v 1.72 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.72 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: charset.c,v 1.73 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.73 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 1388,1398 ****
{
struct locale_map_item *result;
int result_len = 0;
! FILE * f = fopen(filename,"r");
int max_result = 0;
int c,l1;
char buf[LONG_STRING];
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 1388,1407 ----
{
struct locale_map_item *result;
int result_len = 0;
! FILE * f;
int max_result = 0;
int c,l1;
char buf[LONG_STRING];
+ int err = can_open(filename,"r");
+ if(err) {
+ DPRINT(Debug,2,(&Debug,
+ "load_locale_map: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return NULL;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.109a-cvs/lib/file_util.c
*** elm2.4.ME+.109/lib/file_util.c 2002-01-26 13:14:46.000000000 +0200
--- elm2.4.ME+.109a-cvs/lib/file_util.c 2003-11-26 19:16:54.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.6 2001/06/06 18:08:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.7 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 274,279 ****
--- 274,294 ----
DPRINT(Debug,1,(&Debug,
"Copy: to='%s'\n", to));
+ if (!isspool) {
+ int err = can_open(to, "w");
+
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Error: could not open %s for writing (copy -- can_open)\n",
+ to));
+
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotOpenFile,
+ "Could not open file %s."),
+ to);
+ return(1);
+ }
+ }
+
if ((to_file = fopen(to, "w")) == NULL) {
DPRINT(Debug,1,(&Debug,
"Error: could not open %s for writing (copy)\n",
Index: elm2.4.ME+.109a-cvs/lib/imap.c
*** elm2.4.ME+.109/lib/imap.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109a-cvs/lib/imap.c 2003-11-29 17:55:38.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: imap.c,v 1.100 2003/07/24 16:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.100 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: imap.c,v 1.101 2003/11/29 15:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.101 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 2273,2282 ****
--- 2273,2284 ----
"No imap connection",0);
if (Ma->current_NOOP_tag &&
+ Ma->imap_state != IMAP_closing &&
Ma->imap_state != IMAP_error) {
DPRINT(Debug,3,(&Debug,
"imap_idle_wait_1: Waiting for idle NOOP complete...\n"));
while(Ma->current_NOOP_tag &&
+ Ma->imap_state != IMAP_closing &&
Ma->imap_state != IMAP_error &&
con->C.stream) {
WaitStreamFor(con->C.stream,SS_read_act);
***************
*** 2574,2579 ****
--- 2576,2593 ----
con->C.username ? con->C.username : "<NULL>",
con->C.host ? con->C.host : "<NULL>"));
+ if (IMAP_error == con->a.imap_con->imap_state) {
+ DPRINT(Debug,12,(&Debug,
+ "end_imap_command: On error state\n"));
+ return;
+ }
+
+ if (IMAP_closing == con->a.imap_con->imap_state) {
+ DPRINT(Debug,12,(&Debug,
+ "end_imap_command: Is closing\n"));
+ return;
+ }
+
if (con->a.imap_con->imap_state != IMAP_command)
panic("MBX PANIC",__FILE__,__LINE__,
"end_imap_command","wrong state",0);
Index: elm2.4.ME+.109a-cvs/lib/iso2022.c
*** elm2.4.ME+.109/lib/iso2022.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109a-cvs/lib/iso2022.c 2003-11-26 19:16:54.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.26 2003/08/24 17:04:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.27 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 482,491 ****
int max_count = 0;
int new_max;
int count = 0;
! FILE * f = fopen(filename,"r");
char buf[LONG_STRING];
int c, l1;
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 482,500 ----
int max_count = 0;
int new_max;
int count = 0;
! FILE * f;
char buf[LONG_STRING];
int c, l1;
+ int err = can_open(filename,"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "parse_iso2022_map=0: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return 0;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.109a-cvs/lib/ldstate.c
*** elm2.4.ME+.109/lib/ldstate.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109a-cvs/lib/ldstate.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: ldstate.c,v 1.7 2003/07/24 16:29:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: ldstate.c,v 1.8 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 114,119 ****
--- 114,120 ----
char buf[SLEN], *state_fname;
int status, i, Len,j;
FILE *fp;
+ int err;
/* clear out the folder status record */
clear_ldstate(fst);
***************
*** 121,126 ****
--- 122,135 ----
/* see if we can find a state file */
if ((state_fname = getenv(FOLDER_STATE_ENV)) == NULL)
return 0;
+
+ /* This test should not needed,
+ setgid Elm ME+ do not call this function
+ */
+ err = can_open(state_fname, "r");
+ if (err)
+ return 0;
+
if ((fp = fopen(state_fname, "r")) == NULL)
return 0;
Index: elm2.4.ME+.109a-cvs/lib/localmbx.c
*** elm2.4.ME+.109/lib/localmbx.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109a-cvs/lib/localmbx.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.60 2003/07/24 16:29:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.60 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.61 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.61 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 4242,4247 ****
--- 4242,4248 ----
KEEP_STATE keep_state_ptr;
{
int status = 0,err;
+
keep_state_ptr -> a.file.temp_keep_file =
elm_message(FRM("%s%s%d"),temp_dir, temp_file, getpid());
Index: elm2.4.ME+.109a-cvs/lib/mk_aliases.c
*** elm2.4.ME+.109/lib/mk_aliases.c 2002-01-26 13:14:46.000000000 +0200
--- elm2.4.ME+.109a-cvs/lib/mk_aliases.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mk_aliases.c,v 1.8 2001/03/13 19:46:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mk_aliases.c,v 1.9 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
+ err = can_open(inputname,"r");
+ if (err) {
+ if ( textwarn ) {
+ lib_error(CATGETS(elm_msg_cat,
+ NewaliasSet, NewaliasNoOpenIn,
+ "Couldn't open %s for input!"),
+ inputname);
+ }
+
+ free(buffer);
+ return(-1);
+ }
+
if ((in = fopen(inputname,"r")) == NULL) {
! if ( textwarn ) {
! lib_error(CATGETS(elm_msg_cat,
! NewaliasSet, NewaliasNoOpenIn,
! "Couldn't open %s for input!"),
! inputname);
! }
!
free(buffer);
return(-1);
}
***************
*** 611,616 ****
--- 622,636 ----
return(-1);
}
+ err = can_open(dataname, "w");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat,
+ NewaliasSet, NewaliasNoOpenOut,
+ "Couldn't open %s for output!"), dataname);
+ free(buffer);
+ return(-1);
+ }
+
if ((data = fopen(dataname, "w")) == NULL) {
lib_error(CATGETS(elm_msg_cat,
NewaliasSet, NewaliasNoOpenOut,
***************
*** 700,702 ****
--- 720,729 ----
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
+
Index: elm2.4.ME+.109a-cvs/lib/ndbz.c
*** elm2.4.ME+.109/lib/ndbz.c 2002-01-26 13:14:45.000000000 +0200
--- elm2.4.ME+.109a-cvs/lib/ndbz.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: ndbz.c,v 1.4 2001/06/06 18:09:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: ndbz.c,v 1.5 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
+ err = can_open(fn, "w");
+ if (err) {
+ free((malloc_t)fn);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_fresh: unable to write config (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "w");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 310,315 ****
--- 321,335 ----
fn = enstring(name, pag);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ err = can_open(fn, "r");
+ if (err) {
+ free((malloc_t)fn);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_again: cannot open old .dir file (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "r");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 446,451 ****
--- 477,491 ----
fn = enstring(name, dir);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ free((malloc_t)fn);
+ DPRINT(Debug,5,(&Debug,
+ "dbz_again: unable to write new .dir (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "w");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 465,470 ****
--- 505,519 ----
fn = enstring(name, pag);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ err = can_open(dirfname, "r+");
+ if (err) {
+ free((malloc_t)dirfname);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: can't open .dir file (can_open)\n"));
+ free((malloc_t)db);
+
+ errno = err;
+ return (DBZ *)NULL;
+ }
+
if (mode == O_RDONLY) {
db->dbz_dirf = fopen(dirfname, "r");
db->dbz_dirronly = 1;
***************
*** 528,533 ****
--- 593,614 ----
free((malloc_t)db);
return (DBZ *)NULL;
}
+
+ if (mode == O_RDONLY)
+ err = can_open(pagfname, "rb");
+ else
+ err = can_open(pagfname, "r+b");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: .pag open failed (can_open)\n"));
+ (void) fclose(db->dbz_dirf);
+ free((malloc_t)pagfname);
+ free((malloc_t)db);
+
+ errno = err;
+ return (DBZ *)NULL;
+ }
+
if (mode == O_RDONLY) {
db->dbz_pagf = fopen(pagfname, "rb");
db->dbz_pagronly = 1;
***************
*** 558,568 ****
--- 639,659 ----
db->dbz_pagpos = -1;
/* don't free pagfname, need it below */
+ err = can_open(name, "r");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: basefile open failed (can_open)\n"));
+
+ goto fail1;
+ }
+
/* open the base file */
db->dbz_basef = fopen(name, "r");
if (db->dbz_basef == NULL) {
DPRINT(Debug,5,(&Debug,
"dbz_open: basefile open failed\n"));
+
+ err = can_open(db->dbz_basefname, "r");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "latebase: still can't open base (can_open)\n"));
+ return (FILE *)NULL;
+ }
+
it = fopen(db->dbz_basefname, "r");
if (it == NULL) {
DPRINT(Debug,5,(&Debug,
Index: elm2.4.ME+.109a-cvs/lib/output.c
*** elm2.4.ME+.109/lib/output.c 2002-06-06 18:55:57.000000000 +0300
--- elm2.4.ME+.109a-cvs/lib/output.c 2003-11-23 19:10:30.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: output.c,v 1.29 2002/06/01 12:58:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: output.c,v 1.30 2003/11/23 17:10:30 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.30 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 70,76 ****
if (x && (y = strchr(x,'\n')))
*y = '\0';
if (ret > 0 && l && str[l-1] != '\n')
! ret += fprintf(stderr,"\n");
}
fclose(f);
if (!x)
--- 70,76 ----
if (x && (y = strchr(x,'\n')))
*y = '\0';
if (ret > 0 && l && str[l-1] != '\n')
! ret += fprintf(f,"\n");
}
fclose(f);
if (!x)
Index: elm2.4.ME+.109a-cvs/lib/read_rc.c
*** elm2.4.ME+.109/lib/read_rc.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109a-cvs/lib/read_rc.c 2003-11-29 20:43:15.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.121 2003/11/10 15:15:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.121 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.123 2003/11/29 18:43:15 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.123 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 1101,1106 ****
--- 1101,1167 ----
do_expand_env("editor", editor, raw_editor, sizeof(editor));
}
+
+ if ((cp = getenv("MAILCAPS")) == NULL) {
+ /* RFC 1524:
+
+ For UNIX, a path search of mailcap files is specified. The default
+ path search is specified as including at least the following:
+
+ $HOME/.mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap
+
+ */
+ char *X[] = { "/etc/mailcap", "/usr/etc/mailcap",
+ "/usr/local/etc/mailcap", NULL };
+ char *G = elm_message(FRM("%s/.mailcap"),home);
+ char **X1;
+
+ /* Fake recursive call -- expand_dt_path ignores non-existiant
+ entries.
+ */
+ DPRINT(Debug,9,(&Debug,
+ "Adding default entry to metamail-mailcaps: %s\n",
+ G));
+ expand_dt_path(&metamail_mailcaps,"metamail-mailcaps",
+ G,2);
+ for (X1 = X; *X1; X1++) {
+ DPRINT(Debug,9,(&Debug,
+ "Adding default entry to metamail-mailcap: %s\n",
+ *X1));
+ expand_dt_path(&metamail_mailcaps,"metamail-mailcaps",
+ *X1,2);
+ }
+
+
+ DPRINT(Debug,9,(&Debug,
+ "Adding default entry to internal-mailcaps: %s\n",
+ G));
+ expand_dt_path(&internal_mailcaps,"internal-mailcaps",
+ G,2);
+ for (X1 = X; *X1; X1++) {
+ DPRINT(Debug,9,(&Debug,
+ "Adding default entry to internal-mailcap: %s\n",
+ *X1));
+ expand_dt_path(&internal_mailcaps,"internal-mailcaps",
+ *X1,2);
+ }
+
+ free(G);
+ } else {
+ DPRINT(Debug,9,(&Debug,
+ "Adding unexpanded entry to metamail-mailcaps: $MAILCAPS\n"
+ ));
+
+ metamail_mailcaps.unexpanded = safe_strdup("$MAILCAPS");
+
+
+ DPRINT(Debug,9,(&Debug,
+ "Adding unexpanded entry to internal-mailcaps: $MAILCAPS\n"
+ ));
+
+ internal_mailcaps.unexpanded = safe_strdup("$MAILCAPS");
+ }
+
elm_sfprintf(raw_folders, sizeof raw_folders, FRM("~/%s"),
default_folders);
do_expand_env("folders", folders, raw_folders, sizeof(folders));
***************
*** 1189,1255 ****
expand_map_bin("bindata", bindata_path_global, raw_bindata_path,
sizeof(bindata_path));
-
- if ((cp = getenv("MAILCAPS")) == NULL) {
- /* RFC 1524:
-
- For UNIX, a path search of mailcap files is specified. The default
- path search is specified as including at least the following:
-
- $HOME/.mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap
-
- */
- char *X[] = { "/etc/mailcap", "/usr/etc/mailcap",
- "/usr/local/etc/mailcap", NULL };
- char *G = elm_message(FRM("%s/.mailcap"),home);
- char **X1;
-
- /* Fake recursive call -- expand_dt_path ignores non-existiant
- entries.
- */
- DPRINT(Debug,9,(&Debug,
- "Adding default entry to metamail-mailcaps: %s\n",
- G));
- expand_dt_path(&metamail_mailcaps,"metamail-mailcaps",
- G,2);
- for (X1 = X; *X1; X1++) {
- DPRINT(Debug,9,(&Debug,
- "Adding default entry to metamail-mailcap: %s\n",
- *X1));
- expand_dt_path(&metamail_mailcaps,"metamail-mailcaps",
- *X1,2);
- }
-
-
- DPRINT(Debug,9,(&Debug,
- "Adding default entry to internal-mailcaps: %s\n",
- G));
- expand_dt_path(&internal_mailcaps,"internal-mailcaps",
- G,2);
- for (X1 = X; *X1; X1++) {
- DPRINT(Debug,9,(&Debug,
- "Adding default entry to internal-mailcap: %s\n",
- *X1));
- expand_dt_path(&internal_mailcaps,"internal-mailcaps",
- *X1,2);
- }
-
- free(G);
- } else {
- DPRINT(Debug,9,(&Debug,
- "Adding unexpanded entry to metamail-mailcaps: $MAILCAPS\n"
- ));
-
- metamail_mailcaps.unexpanded = safe_strdup("$MAILCAPS");
-
-
- DPRINT(Debug,9,(&Debug,
- "Adding unexpanded entry to internal-mailcaps: $MAILCAPS\n"
- ));
-
- internal_mailcaps.unexpanded = safe_strdup("$MAILCAPS");
- }
-
parse_iso2022_map(system_iso2022_sets,&errors,ml_system);
system_locale_map = load_locale_map(system_mime_charsets,&errors);
system_terminal_map = load_terminal_map(system_terminal_info,&errors);
--- 1250,1255 ----
***************
*** 1355,1377 ****
/** this routine does all the actual work of reading in the
.rc file... **/
! FILE *file;
!
errors = 0;
/* Look for the elmrc file */
! if ((file = fopen(user_rc_file, "r")) == NULL) {
DPRINT(Debug,2,(&Debug,
! "Warning:User has no \"%s\" file\n\n",
user_rc_file));
! }
! if (file != NULL) {
! do_rc(file, LOCAL_RC, ELMRCFILE);
! fclose(file);
}
-
/* load_locale_map may refer to map-text-dir ... */
do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
sizeof(map_txtdir));
--- 1355,1388 ----
/** this routine does all the actual work of reading in the
.rc file... **/
! int err;
!
errors = 0;
+
/* Look for the elmrc file */
! err = can_open(user_rc_file, "r");
! if (err) {
DPRINT(Debug,2,(&Debug,
! "Warning:User has no \"%s\" file (can_open)\n\n",
user_rc_file));
!
! } else {
! FILE *file = NULL;
! if ((file = fopen(user_rc_file, "r")) == NULL) {
! DPRINT(Debug,2,(&Debug,
! "Warning:Open \"%s\" failed\n\n",
! user_rc_file));
!
! }
!
! if (file != NULL) {
! do_rc(file, LOCAL_RC, ELMRCFILE);
! fclose(file);
! }
}
/* load_locale_map may refer to map-text-dir ... */
do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
sizeof(map_txtdir));
Index: elm2.4.ME+.109a-cvs/lib/service_list.c
*** elm2.4.ME+.109/lib/service_list.c 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.109a-cvs/lib/service_list.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.23 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.24 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 928,937 ****
/* hostname service options */
int max_count = 0;
int count = 0;
! FILE * f = fopen(filename,"r");
char buf[LONG_STRING];
int c, l1;
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 928,949 ----
/* hostname service options */
int max_count = 0;
int count = 0;
! FILE * f;
char buf[LONG_STRING];
int c, l1;
+ if (!system) {
+ int err = can_open(filename,"r");
+
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "parse_service_entries=0: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return 0;
+ }
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.109a-cvs/lib/terminal.c
*** elm2.4.ME+.109/lib/terminal.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109a-cvs/lib/terminal.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.37 2003/08/19 14:34:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.38 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 411,421 ****
{
struct terminal_map_item *result;
int result_len = 0;
! FILE * f = fopen(filename,"r");
int max_result = 0;
int c;
char buf[LONG_STRING];
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s\n",
--- 411,429 ----
{
struct terminal_map_item *result;
int result_len = 0;
! FILE * f;
int max_result = 0;
int c;
char buf[LONG_STRING];
+ int err = can_open(filename,"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return NULL;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s\n",
Index: elm2.4.ME+.109a-cvs/lib/unidata.c
*** elm2.4.ME+.109/lib/unidata.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109a-cvs/lib/unidata.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.25 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.26 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 2127,2137 ****
{
struct unidata_mapped_data * res = *ptr;
int status = 0;
! FILE *f = fopen(filename,"r");
int last_processed = -1;
int line_number = 1;
int unassigned_cell = -1;
char composition_buffer[160];
if (!f) {
int err = errno;
--- 2127,2153 ----
{
struct unidata_mapped_data * res = *ptr;
int status = 0;
! FILE *f;
int last_processed = -1;
int line_number = 1;
int unassigned_cell = -1;
char composition_buffer[160];
+
+
+ /* This should not have readed by setgid Elm ME+
+ so this test is not necessary */
+ int err = can_open(filename,"r");
+
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeUnidataCantOpen,
+ "Can't open UNIDATA2.TXT: %.50s: %.25s"),
+ filename,error_description(err));
+ return 0;
+ }
+
+
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
Index: elm2.4.ME+.109a-cvs/melib/mailcap.c
*** elm2.4.ME+.109/melib/mailcap.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109a-cvs/melib/mailcap.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.10 2003/10/11 11:35:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.11 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 466,476 ****
int unsupported = 0;
media_type_t T = NULL;
enum mime_major_type T_major = MIME_TYPE_UNKNOWN;
!
zero_mailcap_entry(&Entry);
arg_zero(&keyword);
arg_zero(&string);
F = fopen(mailcaps[mailcap_idx],"r");
if (!F) {
int err = errno;
--- 466,486 ----
int unsupported = 0;
media_type_t T = NULL;
enum mime_major_type T_major = MIME_TYPE_UNKNOWN;
!
! int err;
!
zero_mailcap_entry(&Entry);
arg_zero(&keyword);
arg_zero(&string);
+ err = can_open(mailcaps[mailcap_idx],"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "Failed to open mailcap %s: (errno=%d) %s (can_open)\n",
+ mailcaps[mailcap_idx],err,error_description(err)));
+ continue;
+ }
+
F = fopen(mailcaps[mailcap_idx],"r");
if (!F) {
int err = errno;
Index: elm2.4.ME+.109a-cvs/src/alias.c
*** elm2.4.ME+.109/src/alias.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/alias.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: alias.c,v 1.25 2003/08/31 10:53:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: alias.c,v 1.26 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 721,726 ****
--- 721,742 ----
strfcpy(fname,user_text_file,sizeof fname);
save_file_stats(fname);
+
+ err = can_open(fname, "a");
+ if (err) {
+ err = can_open(fname, "r");
+ if (err) {
Index: elm2.4.ME+.109a-cvs/src/attach_menu.c
*** elm2.4.ME+.109/src/attach_menu.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109a-cvs/src/attach_menu.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.54 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.55 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.55 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 1574,1579 ****
--- 1574,1584 ----
p,i));
if (i == 0) {
+
+ int err = can_open(user_mime_types, "r");
+ if (err)
+ continue;
+
/* First try the user's mime.types file */
fp = fopen (user_mime_types, "r");
Index: elm2.4.ME+.109a-cvs/src/editmsg.c
*** elm2.4.ME+.109/src/editmsg.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/editmsg.c 2003-11-29 14:51:36.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.35 2003/10/11 13:04:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.37 2003/11/29 12:51:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 588,600 ****
char linebuf[1024];
FILE *tmpfp = safeopen_rdwr(filename2);
! FILE *f= fopen(filename,"r");
if (!f || !tmpfp) {
! if (!tmpfp)
! free(tmpfp);
! if (!f)
! free(f);
return_value = 1;
goto fail;
}
--- 588,612 ----
char linebuf[1024];
FILE *tmpfp = safeopen_rdwr(filename2);
! FILE *f;
!
! int err = can_open(filename,"r");
!
! if (err) {
! if (tmpfp)
! fclose(tmpfp);
!
! return_value = 1;
! goto fail;
! }
!
! f = fopen(filename,"r");
if (!f || !tmpfp) {
! if (tmpfp)
! fclose(tmpfp);
! if (f)
! fclose(f);
return_value = 1;
goto fail;
}
***************
*** 651,663 ****
if (filename2 != filename) {
char linebuf[1024];
! FILE *tmpfp = fopen(filename,"w");
! FILE *f= fopen(filename2,"r");
if (!f || !tmpfp) {
! if (!tmpfp)
free(tmpfp);
! if (!f)
free(f);
return_value = 1;
goto fail;
--- 663,685 ----
if (filename2 != filename) {
char linebuf[1024];
! FILE *tmpfp;
! FILE *f;
! int err = can_open(filename,"w");
! int err2 = can_open(filename2,"r");
!
! if (err || err2) {
! return_value = 1;
! goto fail;
! }
!
! tmpfp = fopen(filename,"w");
! f= fopen(filename2,"r");
if (!f || !tmpfp) {
! if (tmpfp)
free(tmpfp);
! if (f)
free(f);
return_value = 1;
goto fail;
***************
*** 1207,1218 ****
--- 1229,1249 ----
{
char buffer[LONG_STRING];
int i,len;
+ int err = can_open(I->builtin->filename, "r");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCantOpenFile,
+ "Can't open %s!"),
+ I->builtin->filename, error_description(err));
+ return 0;
+ }
+
if (I->builtin->edit_fd) {
fclose(I->builtin->edit_fd);
I->builtin->edit_fd = NULL;
}
+
if ((I->builtin->edit_fd = fopen(I->builtin->filename,
"r")) == NULL) {
int err = errno;
Index: elm2.4.ME+.109a-cvs/src/elm.c
*** elm2.4.ME+.109/src/elm.c 2003-11-15 18:19:06.000000000 +0200
--- elm2.4.ME+.109a-cvs/src/elm.c 2003-11-23 20:12:43.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.59 2003/11/10 20:37:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.59 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.60 2003/11/23 18:12:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.60 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 993,998 ****
--- 993,999 ----
}
send_msg_argv(to_whom, batch_subject, MAIL_EDIT_MSG,
(batch_only ? NO : allow_forms), current_mailbox);
+
leave(0, ¤t_mailbox);
} else if (check_only) {
do_check_only(to_whom);
Index: elm2.4.ME+.109a-cvs/src/file_util.c
*** elm2.4.ME+.109/src/file_util.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/file_util.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.19 2003/07/29 18:46:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.20 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 65,70 ****
--- 65,80 ----
char buffer[VERY_LONG_STRING];
int len;
+ int err = can_open(filename, "r");
+
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Error: could not open %s for reading (append) -- can_open\n",
+ filename));
+ return(1);
+
+ }
+
if ((my_fd = fopen(filename, "r")) == NULL) {
DPRINT(Debug,1,(&Debug,
"Error: could not open %s for reading (append)\n", filename));
Index: elm2.4.ME+.109a-cvs/src/forms.c
*** elm2.4.ME+.109/src/forms.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/forms.c 2003-11-26 19:16:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: forms.c,v 1.17 2003/07/29 18:46:19 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: forms.c,v 1.18 2003/11/26 17:16:55 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 63,74 ****
FILE *form;
char buffer[SLEN];
! register int field_count = 0;
if ((form = fopen(filename, "r")) == NULL) {
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
"Error %s trying to open %s to check fields!"),
! error_description(errno), filename);
return -1;
}
--- 63,84 ----
FILE *form;
char buffer[SLEN];
! int field_count = 0;
!
! int err = can_open(filename, "r");
! if (err) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
! "Error %s trying to open %s to check fields!"),
! error_description(err), filename);
! return -1;
! }
!
if ((form = fopen(filename, "r")) == NULL) {
+ int err = errno;
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
"Error %s trying to open %s to check fields!"),
! error_description(err), filename);
return -1;
}
***************
*** 99,104 ****
--- 109,122 ----
/** first off, let's open the files... **/
+ err = can_open(filename, "r");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet,
+ ElmCantReadMessageToValidate,
+ "Can't read the message to validate the form!"));
+ return -1;
+ }
+
if ((form = fopen(filename, "r")) == NULL) {
err = errno;
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCantReadMessageToValidate,
Index: elm2.4.ME+.109a-cvs/src/hdrconfg.c
*** elm2.4.ME+.109/src/hdrconfg.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/hdrconfg.c 2003-11-26 19:16:56.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.33 2003/10/11 13:25:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.34 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.34 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 554,559 ****
--- 554,560 ----
char buffer1[32*1024];
int stat;
int c;
+ int err;
if (in_string(editor, "%s"))
buffer = elm_message(FRM(editor),
***************
*** 576,582 ****
not with edit_charset (system_charset)
*/
-
elm_fprintf(F,
CATGETS(elm_msg_cat, ElmSet, ElmHdrEditComment,
"# Headers are automatically converted from %s charset and not need encoded\n"),
--- 577,582 ----
***************
*** 594,600 ****
}
-
add_addr_header(F,edit_charset,encoding_supported,
"From", & headers->from);
add_addr_header(F,edit_charset,encoding_supported,
--- 594,599 ----
***************
*** 634,639 ****
--- 633,645 ----
}
Raw(ON);
+ err = can_open(filename,"r");
+ if (err) {
+ lib_error(FRM("%s: %s"),filename,err);
+
+ goto fail1;
+ }
+
F = fopen(filename,"r");
if (!F) {
/* In than point opening should have succeed */
Index: elm2.4.ME+.109a-cvs/src/help.c
*** elm2.4.ME+.109/src/help.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/help.c 2003-11-26 19:16:56.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: help.c,v 1.13 2003/07/29 18:46:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: help.c,v 1.14 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 381,391 ****
static int display_file(file)
char *file;
{
! /*** Display file to screen ***/
!
! FILE *fileptr;
! int lines=0;
! char buffer[SLEN];
if ((fileptr = fopen(file,"r")) == NULL) {
DPRINT(Debug,1,
--- 381,403 ----
static int display_file(file)
char *file;
{
! /*** Display file to screen ***/
!
! FILE *fileptr;
! int lines=0;
! char buffer[SLEN];
!
! /* This routine is used to print helpfiles, which
! are not user writable directory, sho that is not actually
! problem */
! int err = can_open(file,"r");
!
! if (err) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmHelpCouldntOpenFile,
! "Couldn't open file %s."),
! file);
! return(FALSE);
! }
if ((fileptr = fopen(file,"r")) == NULL) {
DPRINT(Debug,1,
Index: elm2.4.ME+.109a-cvs/src/mailmsg2.c
*** elm2.4.ME+.109/src/mailmsg2.c 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/mailmsg2.c 2003-11-26 19:16:56.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.70 2003/10/05 16:07:28 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.70 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.71 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 248,253 ****
--- 248,266 ----
/** if there is an included file, copy it into the temp file **/
if (*included_file) {
FILE *input;
+
+ int err = can_open(included_file,"r");
+ if (err) {
+ err = can_open(cur_editfile,"r+");
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Attempt to open file %s for reading failed with error %s (mail) -- can_open\n",
+ cur_editfile, error_description(err)));
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotOpenReply,
+ "Could not open reply file (%s)."),
+ error_description(err));
+
+ return need_redraw;
+ }
+
if ((reply = fopen(cur_editfile,"r+")) == NULL) {
err = errno;
DPRINT(Debug,1,(&Debug,
Index: elm2.4.ME+.109a-cvs/src/save_opts.c
*** elm2.4.ME+.109/src/save_opts.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/save_opts.c 2003-11-26 19:16:56.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: save_opts.c,v 1.23 2003/07/29 18:46:21 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: save_opts.c,v 1.24 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 65,71 ****
FILE *newelmrc;
char oldfname[SLEN], newfname[SLEN];
!
strfcpy(newfname,user_rc_file,sizeof newfname);
elm_sfprintf(oldfname, sizeof oldfname,
FRM("%s/%s"),
--- 65,72 ----
FILE *newelmrc;
char oldfname[SLEN], newfname[SLEN];
! int err;
!
strfcpy(newfname,user_rc_file,sizeof newfname);
elm_sfprintf(oldfname, sizeof oldfname,
FRM("%s/%s"),
***************
*** 92,97 ****
--- 93,106 ----
/** next, open the new .elm/elmrc file... **/
+ err = can_open(newfname, "w");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmrcSet, ElmrcCantSaveConfig,
+ "Can't save configuration! Can't write to %s [%s]."),
+ newfname, error_description(errno));
+ return;
+ }
+
if ((newelmrc = fopen(newfname, "w")) == NULL) {
lib_error(CATGETS(elm_msg_cat, ElmrcSet, ElmrcCantSaveConfig,
"Can't save configuration! Can't write to %s [%s]."),
Index: elm2.4.ME+.109a-cvs/src/utils.c
*** elm2.4.ME+.109/src/utils.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.109a-cvs/src/utils.c 2003-11-23 20:12:43.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: utils.c,v 1.25 2003/07/29 18:46:21 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: utils.c,v 1.26 2003/11/23 18:12:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 88,98 ****
if (interrupt) {
ClearScreen();
} else {
MoveCursor(elm_LINES,0);
NewLine();
}
! Raw(OFF);
}
/* Tjis routine is called by panic() */
--- 88,101 ----
if (interrupt) {
ClearScreen();
+ Raw(OFF);
} else {
MoveCursor(elm_LINES,0);
NewLine();
+
+ Raw_OFF(0);
}
!
}
/* Tjis routine is called by panic() */
***************
*** 219,227 ****
close_cached_connections();
if(do_cursor) {
! MoveCursor(elm_LINES,0);
! NewLine();
! Raw(OFF);
}
exit(1);
--- 222,228 ----
close_cached_connections();
if(do_cursor) {
! Raw_OFF(1);
}
exit(1);
***************
*** 253,262 ****
SIGDPRINT(Debug,2,
(&Debug,
"\nLeaving mailer from signal handler (leave)\n"));
! else
SIGDPRINT(Debug,2, (&Debug,
"\nLeaving mailer normally (leave)\n"));
!
/* Set terminal title to "Elm: exiting" ... can be called from
signal handler
--- 254,263 ----
SIGDPRINT(Debug,2,
(&Debug,
"\nLeaving mailer from signal handler (leave)\n"));
! else {
SIGDPRINT(Debug,2, (&Debug,
"\nLeaving mailer normally (leave)\n"));
! }
/* Set terminal title to "Elm: exiting" ... can be called from
signal handler
***************
*** 331,339 ****
unlink(cur_editfile);
if (do_cursor) {
! MoveCursor(elm_LINES,0);
! NewLine();
! Raw(OFF);
}
if (*mailbox) {
--- 332,338 ----
unlink(cur_editfile);
if (do_cursor) {
! Raw_OFF(1);
}
if (*mailbox) {
***************
*** 404,412 ****
close_cached_connections();
if (do_cursor) {
! MoveCursor(elm_LINES,0);
! NewLine();
! Raw(OFF);
}
exit(0);
--- 403,409 ----
close_cached_connections();
if (do_cursor) {
! Raw_OFF(1);
}
exit(0);
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL109b.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL109b.patch.gz >
via WWW.
Page <URL: http://personal.inet.fi/atk/elmme/ > is not up of date.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL109b.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
SUMMARY: This patch fixes segmentation violation on
l)imit command and problem where user alias
file was not opened, if system alias file existed.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL109a (25) --------------------------------
Index: elm2.4.ME+.109b-cvs/hdrs/patchlevel.h
Prereq: 1100000200
*** elm2.4.ME+.109a/hdrs/patchlevel.h 2003-12-14 12:39:21.000000000 +0200
--- elm2.4.ME+.109b-cvs/hdrs/patchlevel.h 2003-12-14 12:00:11.000000000 +0200
***************
*** 1,9 ****
! #define PATCHLEVEL "109a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.109
*/
! #define LAST_REPORT_TIME 1100000200
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Nov, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Nov, 2003"
--- 1,9 ----
! #define PATCHLEVEL "109b (25)"
/* Used by Configure:
SHAREDTAG: .1.0.109
*/
! #define LAST_REPORT_TIME 1100000400
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Dec, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Dec, 2003"
Index: elm2.4.ME+.109b-cvs/README.ME+
*** elm2.4.ME+.109a/README.ME+ 2003-12-14 12:39:21.000000000 +0200
--- elm2.4.ME+.109b-cvs/README.ME+ 2003-12-14 12:00:11.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.670.6.4 2003/11/30 08:08:18 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.670.6.7 2003/12/14 10:00:11 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 14,19 ****
--- 14,35 ----
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
+ -------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch fixes segmentation violation on
+ l)imit command and problem where user alias
+ was not opened, if system alais file existed.
+
+ - Fix segmentation violation on l)mit command
+ "header subject" (ie. without ':').
+
+ - User alias file was not opened, if system alias file
+ existed. Fixed short circuit evalution.
+
+
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
-------------------------------------------------------------------
***************
*** 23,30 ****
SUMMARY: This patch address panic when imap server disconnects
during password prompt, fixes initialization of
! internal-mailcaps and mailcaps elmrc options and
! fixes some cases where error message was not visible
because of exiting of Elm ME+. Also security fixes of
Elm2.4ME+ PL109S (25) are included to this patch (it
is agaist Elm2.4ME+ PL109 (25))
--- 39,46 ----
SUMMARY: This patch address panic when imap server disconnects
during password prompt, fixes initialization of
! internal-mailcaps and metamail-mailcaps elmrc options
! and fixes some cases where error message was not visible
because of exiting of Elm ME+. Also security fixes of
Elm2.4ME+ PL109S (25) are included to this patch (it
is agaist Elm2.4ME+ PL109 (25))
Index: elm2.4.ME+.109b-cvs/src/alias.c
*** elm2.4.ME+.109a/src/alias.c 2003-12-14 12:39:21.000000000 +0200
--- elm2.4.ME+.109b-cvs/src/alias.c 2003-12-14 12:00:11.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: alias.c,v 1.26 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: alias.c,v 1.26.6.1 2003/12/14 10:00:11 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26.6.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 95,100 ****
--- 95,103 ----
*
* Also, parse the data files into memory if needed
*/
+
+ int A,B;
+
if (first_time) {
a_group_name = catgets(elm_msg_cat, AliasesSet, AliasesGroup,
" Group");
***************
*** 141,147 ****
first_time = FALSE;
}
! if(open_system_aliases() || open_user_aliases()) {
DPRINT(Debug,4,
(&Debug,
"Reading alias data files...\n"));
--- 144,159 ----
first_time = FALSE;
}
! /* Do not use
!
! open_system_aliases() || open_user_aliases()
!
! we want open both files!
! */
!
! A = open_system_aliases();
! B = open_user_aliases();
! if (A || B) {
DPRINT(Debug,4,
(&Debug,
"Reading alias data files...\n"));
Index: elm2.4.ME+.109b-cvs/src/limit.c
*** elm2.4.ME+.109a/src/limit.c 2003-09-05 23:33:17.000000000 +0300
--- elm2.4.ME+.109b-cvs/src/limit.c 2003-12-06 17:05:38.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: limit.c,v 1.20 2003/09/03 09:16:29 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: limit.c,v 1.20.18.1 2003/12/06 15:05:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20.18.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 426,432 ****
walk;
walk = walk->next_this_header) {
! if (in_string(shift_lower(walk->body),value))
match++;
}
delete_headers(&all_headers);
--- 426,435 ----
walk;
walk = walk->next_this_header) {
!
! if (!value)
! /* perhaps: match++ */ ;
! else if (in_string(shift_lower(walk->body),value))
match++;
}
delete_headers(&all_headers);
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
files elm-2.4ME+PL110.patch.gz
and elm-2.4ME+110.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL110.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+110.tar.gz >
via WWW.
Page <URL: http://personal.inet.fi/atk/elmme/ > is not up
of date.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL110.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Undo Elm2.4ME+ PL109a (25) and Elm2.4ME+ PL109b (25) patches before
applying this patch.
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL109 (25) --------------------------------
To apply this patch, use
patch -p1 < this_file
on top level directory of Elm 2.4ME+ distribution
(ie. where file README.ME+ exists.)
Index: elm2.4.ME+.110-cvs/hdrs/patchlevel.h
Prereq: 1099000000
*** elm2.4.ME+.109/hdrs/patchlevel.h Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/hdrs/patchlevel.h Wed Dec 17 18:37:19 2003
***************
*** 1,9 ****
! #define PATCHLEVEL "109 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.109
*/
! #define LAST_REPORT_TIME 1099000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Nov, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Nov, 2003"
--- 1,9 ----
! #define PATCHLEVEL "110 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.110
*/
! #define LAST_REPORT_TIME 1103000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Dec, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Dec, 2003"
Index: elm2.4.ME+.110-cvs/README.ME+
*** elm2.4.ME+.109/README.ME+ Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/README.ME+ Wed Dec 17 16:32:02 2003
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.670 2003/11/15 15:25:17 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.685 2003/12/17 14:32:02 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 12,17 ****
--- 12,260 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+
+ Changes of Elm2.4ME+ PL110 (25) compared with Elm2.4ME+ PL109 (25)
+ ------------------------------------------------------------------
+
+ Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
+ Undo Elm2.4ME+ PL109a (25) and Elm2.4ME+ PL109b (25) patches
+ before applying this patch.
+
+ SUMMARY: This release collects patches PL109a and PL109b.
+ Security fixes introduced in PL109S are included.
+ Bogus charset initialization error caused by
+ missing global elm.mimecharsets file is fixed.
+ Some enchancements to l)imit command are
+ introduced. This release also fixes extra
+ "[Keeping all messages.]" messages introduced
+ on PL109a fix. File MIME.txt compares Elm ME+
+ to MIME conformace criteria.
+
+ - This file states "But anyway, Elm will never be MIME
+ Conformant." Added file MIME.txt which enumerates RFC
+ 2049 requirements and look which reuirements are not
+ followed and on what conditions.
+
+ - Change some Raw(OFF) to Raw_OFF() on leaving routines
+ of src/utils.c
+ > Also clear "[Keeping all messages.]" messages
+ after leaving folder so that these are not
+ printed because of Raw_OFF();
+
+ - Try fix
+ MBX PANIC in imap.c:2578:end_imap_command
+ when IMAP / TLS connection is closed by server.
+
+ - Initialization of internal-mailcaps and
+ metamail-mailcaps did not worked correctly.
+ Moved initialization before reading of global
+ elm.rc.
+ Problem noted by: Xavi Serrano <xser...@ac.upc.es>
+
+ - On def_prompt_handler() final newline should be
+ printed to terminal as prompt is printed (instead
+ of stderr.)
+
+ - Fix segmentation violation on l)mit command
+ "header subject" (ie. without ':'). This is now
+ interpreted to be all mails which have given header
+ name.
+
+ - l)imit command "aabbc: yyy" work now as
+ "header aabbc: yyy"
+
+ - User alias file was not opened, if system alias file
+ existed.
+ - Avoid error message like following
+ Elm: Unable to map en_US locale (LC_CTYPE) to MIME charset.
+ Codeset name ISO-8859-15 was unknown. Treating ISO-8859-15 as MIME name.
+ Check /usr/local/test/lib/elm.mimecharsets or .../.elm/mime.charsets
+ Problem with locale (system character set)! Elm ME+ will behave erratically.
+ on case where elm.mimecharsets is not installed. Codeset
+ match was not used if either file elm.mimecharsets or
+ mime.charsets existed.
+
+ New files:
+ MIME.txt
+
+ Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
+ -------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch fixes segmentation violation on
+ l)imit command and problem where user alias
+ was not opened, if system alias file existed.
+
+ - Fix segmentation violation on l)mit command
+ "header subject" (ie. without ':').
+
+ - User alias file was not opened, if system alias file
+ existed. Fixed short circuit evalution.
+
+
+ Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
+ -------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
+
+ SUMMARY: This patch address panic when imap server disconnects
+ during password prompt, fixes initialization of
+ internal-mailcaps and metamail-mailcaps elmrc options
+ and fixes some cases where error message was not visible
+ because of exiting of Elm ME+. Also security fixes of
+ Elm2.4ME+ PL109S (25) are included to this patch (it
+ is agaist Elm2.4ME+ PL109 (25))
+
+
+ - Changed some Raw(OFF) to Raw_OFF() on leaving routines
+ of src/utils.c
+
+ - Try fix
+ MBX PANIC in imap.c:2578:end_imap_command
+ when IMAP / TLS connection is closed by server.
+
+
+ Changes of Elm2.4ME+ PL109S (25) compared with Elm2.4ME+ PL109 (25)
+ ------------------------------------------------------------------
+
+ - SECURITY: Add can_open() test to mail()
+ - SECURITY: Add can_open() test to save_options()
+
+ - Add can_open() test to load_folder_state_file()
+ - Add can_open() test to read_unidata_text()
+ - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109 (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
Index: elm2.4.ME+.110-cvs/lib/charset.c
*** elm2.4.ME+.109/lib/charset.c Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/lib/charset.c Wed Nov 26 19:16:54 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: charset.c,v 1.72 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.72 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: charset.c,v 1.73 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.73 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 1388,1398 ****
{
struct locale_map_item *result;
int result_len = 0;
! FILE * f = fopen(filename,"r");
int max_result = 0;
int c,l1;
char buf[LONG_STRING];
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 1388,1407 ----
{
struct locale_map_item *result;
int result_len = 0;
! FILE * f;
int max_result = 0;
int c,l1;
char buf[LONG_STRING];
+ int err = can_open(filename,"r");
+ if(err) {
+ DPRINT(Debug,2,(&Debug,
+ "load_locale_map: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return NULL;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.110-cvs/lib/file_util.c
*** elm2.4.ME+.109/lib/file_util.c Sat Jan 26 13:14:46 2002
--- elm2.4.ME+.110-cvs/lib/file_util.c Wed Nov 26 19:16:54 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.6 2001/06/06 18:08:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.7 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 274,279 ****
--- 274,294 ----
DPRINT(Debug,1,(&Debug,
"Copy: to='%s'\n", to));
+ if (!isspool) {
+ int err = can_open(to, "w");
+
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Error: could not open %s for writing (copy -- can_open)\n",
+ to));
+
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotOpenFile,
+ "Could not open file %s."),
+ to);
+ return(1);
+ }
+ }
+
if ((to_file = fopen(to, "w")) == NULL) {
DPRINT(Debug,1,(&Debug,
"Error: could not open %s for writing (copy)\n",
Index: elm2.4.ME+.110-cvs/lib/imap.c
*** elm2.4.ME+.109/lib/imap.c Tue Aug 5 10:27:06 2003
--- elm2.4.ME+.110-cvs/lib/imap.c Sat Nov 29 17:55:38 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: imap.c,v 1.100 2003/07/24 16:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.100 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: imap.c,v 1.101 2003/11/29 15:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.101 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 2273,2282 ****
--- 2273,2284 ----
"No imap connection",0);
if (Ma->current_NOOP_tag &&
+ Ma->imap_state != IMAP_closing &&
Ma->imap_state != IMAP_error) {
DPRINT(Debug,3,(&Debug,
"imap_idle_wait_1: Waiting for idle NOOP complete...\n"));
while(Ma->current_NOOP_tag &&
+ Ma->imap_state != IMAP_closing &&
Ma->imap_state != IMAP_error &&
con->C.stream) {
WaitStreamFor(con->C.stream,SS_read_act);
***************
*** 2573,2578 ****
--- 2575,2592 ----
con,
con->C.username ? con->C.username : "<NULL>",
con->C.host ? con->C.host : "<NULL>"));
+
+ if (IMAP_error == con->a.imap_con->imap_state) {
+ DPRINT(Debug,12,(&Debug,
+ "end_imap_command: On error state\n"));
+ return;
+ }
+
+ if (IMAP_closing == con->a.imap_con->imap_state) {
+ DPRINT(Debug,12,(&Debug,
+ "end_imap_command: Is closing\n"));
+ return;
+ }
if (con->a.imap_con->imap_state != IMAP_command)
panic("MBX PANIC",__FILE__,__LINE__,
Index: elm2.4.ME+.110-cvs/lib/iso2022.c
*** elm2.4.ME+.109/lib/iso2022.c Fri Sep 5 23:33:17 2003
--- elm2.4.ME+.110-cvs/lib/iso2022.c Wed Nov 26 19:16:54 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.26 2003/08/24 17:04:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.27 2003/11/26 17:16:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 482,491 ****
int max_count = 0;
int new_max;
int count = 0;
! FILE * f = fopen(filename,"r");
char buf[LONG_STRING];
int c, l1;
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 482,500 ----
int max_count = 0;
int new_max;
int count = 0;
! FILE * f;
char buf[LONG_STRING];
int c, l1;
+ int err = can_open(filename,"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "parse_iso2022_map=0: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return 0;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.110-cvs/lib/ldstate.c
*** elm2.4.ME+.109/lib/ldstate.c Tue Aug 5 10:27:06 2003
--- elm2.4.ME+.110-cvs/lib/ldstate.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: ldstate.c,v 1.7 2003/07/24 16:29:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: ldstate.c,v 1.8 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 114,119 ****
--- 114,120 ----
char buf[SLEN], *state_fname;
int status, i, Len,j;
FILE *fp;
+ int err;
/* clear out the folder status record */
clear_ldstate(fst);
***************
*** 121,126 ****
--- 122,135 ----
/* see if we can find a state file */
if ((state_fname = getenv(FOLDER_STATE_ENV)) == NULL)
return 0;
+
+ /* This test should not needed,
+ setgid Elm ME+ do not call this function
+ */
+ err = can_open(state_fname, "r");
+ if (err)
+ return 0;
+
if ((fp = fopen(state_fname, "r")) == NULL)
return 0;
Index: elm2.4.ME+.110-cvs/lib/localmbx.c
*** elm2.4.ME+.109/lib/localmbx.c Tue Aug 5 10:27:06 2003
--- elm2.4.ME+.110-cvs/lib/localmbx.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.60 2003/07/24 16:29:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.60 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.61 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.61 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 4242,4247 ****
--- 4242,4248 ----
KEEP_STATE keep_state_ptr;
{
int status = 0,err;
+
keep_state_ptr -> a.file.temp_keep_file =
elm_message(FRM("%s%s%d"),temp_dir, temp_file, getpid());
Index: elm2.4.ME+.110-cvs/lib/mk_aliases.c
*** elm2.4.ME+.109/lib/mk_aliases.c Sat Jan 26 13:14:46 2002
--- elm2.4.ME+.110-cvs/lib/mk_aliases.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mk_aliases.c,v 1.8 2001/03/13 19:46:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mk_aliases.c,v 1.9 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
+ err = can_open(inputname,"r");
+ if (err) {
+ if ( textwarn ) {
+ lib_error(CATGETS(elm_msg_cat,
+ NewaliasSet, NewaliasNoOpenIn,
+ "Couldn't open %s for input!"),
+ inputname);
+ }
+
+ free(buffer);
+ return(-1);
+ }
+
if ((in = fopen(inputname,"r")) == NULL) {
! if ( textwarn ) {
! lib_error(CATGETS(elm_msg_cat,
! NewaliasSet, NewaliasNoOpenIn,
! "Couldn't open %s for input!"),
! inputname);
! }
!
free(buffer);
return(-1);
}
***************
*** 611,616 ****
--- 622,636 ----
return(-1);
}
+ err = can_open(dataname, "w");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat,
+ NewaliasSet, NewaliasNoOpenOut,
+ "Couldn't open %s for output!"), dataname);
+ free(buffer);
+ return(-1);
+ }
+
if ((data = fopen(dataname, "w")) == NULL) {
lib_error(CATGETS(elm_msg_cat,
NewaliasSet, NewaliasNoOpenOut,
***************
*** 699,702 ****
--- 719,729 ----
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * End:
+ */
Index: elm2.4.ME+.110-cvs/lib/ndbz.c
*** elm2.4.ME+.109/lib/ndbz.c Sat Jan 26 13:14:45 2002
--- elm2.4.ME+.110-cvs/lib/ndbz.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: ndbz.c,v 1.4 2001/06/06 18:09:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: ndbz.c,v 1.5 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
+ err = can_open(fn, "w");
+ if (err) {
+ free((malloc_t)fn);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_fresh: unable to write config (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "w");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 310,315 ****
--- 321,335 ----
fn = enstring(name, pag);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ err = can_open(fn, "r");
+ if (err) {
+ free((malloc_t)fn);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_again: cannot open old .dir file (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "r");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 446,451 ****
--- 477,491 ----
fn = enstring(name, dir);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ free((malloc_t)fn);
+ DPRINT(Debug,5,(&Debug,
+ "dbz_again: unable to write new .dir (can_open)\n"));
+ return (DBZ *)NULL;
+ }
+
f = fopen(fn, "w");
free((malloc_t)fn);
if (f == NULL) {
***************
*** 465,470 ****
--- 505,519 ----
fn = enstring(name, pag);
if (fn == NULL)
return (DBZ *)NULL;
+
+ err = can_open(fn, "w");
+ if (err) {
+ err = can_open(dirfname, "r+");
+ if (err) {
+ free((malloc_t)dirfname);
+
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: can't open .dir file (can_open)\n"));
+ free((malloc_t)db);
+
+ errno = err;
+ return (DBZ *)NULL;
+ }
+
if (mode == O_RDONLY) {
db->dbz_dirf = fopen(dirfname, "r");
db->dbz_dirronly = 1;
***************
*** 528,533 ****
--- 593,614 ----
free((malloc_t)db);
return (DBZ *)NULL;
}
+
+ if (mode == O_RDONLY)
+ err = can_open(pagfname, "rb");
+ else
+ err = can_open(pagfname, "r+b");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: .pag open failed (can_open)\n"));
+ (void) fclose(db->dbz_dirf);
+ free((malloc_t)pagfname);
+ free((malloc_t)db);
+
+ errno = err;
+ return (DBZ *)NULL;
+ }
+
if (mode == O_RDONLY) {
db->dbz_pagf = fopen(pagfname, "rb");
db->dbz_pagronly = 1;
***************
*** 558,568 ****
--- 639,659 ----
db->dbz_pagpos = -1;
/* don't free pagfname, need it below */
+ err = can_open(name, "r");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "dbz_open: basefile open failed (can_open)\n"));
+
+ goto fail1;
+ }
+
/* open the base file */
db->dbz_basef = fopen(name, "r");
if (db->dbz_basef == NULL) {
DPRINT(Debug,5,(&Debug,
"dbz_open: basefile open failed\n"));
+
+ err = can_open(db->dbz_basefname, "r");
+ if (err) {
+ DPRINT(Debug,5,(&Debug,
+ "latebase: still can't open base (can_open)\n"));
+ return (FILE *)NULL;
+ }
+
it = fopen(db->dbz_basefname, "r");
if (it == NULL) {
DPRINT(Debug,5,(&Debug,
Index: elm2.4.ME+.110-cvs/lib/output.c
*** elm2.4.ME+.109/lib/output.c Thu Jun 6 18:55:57 2002
--- elm2.4.ME+.110-cvs/lib/output.c Sun Nov 23 19:10:30 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: output.c,v 1.29 2002/06/01 12:58:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: output.c,v 1.30 2003/11/23 17:10:30 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.30 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 70,76 ****
if (x && (y = strchr(x,'\n')))
*y = '\0';
if (ret > 0 && l && str[l-1] != '\n')
! ret += fprintf(stderr,"\n");
}
fclose(f);
if (!x)
--- 70,76 ----
if (x && (y = strchr(x,'\n')))
*y = '\0';
if (ret > 0 && l && str[l-1] != '\n')
! ret += fprintf(f,"\n");
}
fclose(f);
if (!x)
Index: elm2.4.ME+.110-cvs/lib/read_rc.c
*** elm2.4.ME+.109/lib/read_rc.c Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/lib/read_rc.c Tue Dec 16 21:35:43 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.121 2003/11/10 15:15:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.121 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.124 2003/12/16 19:35:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.124 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 670,676 ****
} else {
int val;
char buffer[STRING];
!
if (0 == strcmp(lc_ctype,"C"))
system_charset = MIME_name_to_charset("US-ASCII",
CHARSET_create);
--- 670,687 ----
} else {
int val;
char buffer[STRING];
!
! if (d_matches[match_codeset]) {
! system_charset = d_matches[match_codeset];
! DPRINT(Debug,3,(&Debug,
! "map_display_charset: using match codeset: \"%s\" (codeset \"%s\") as %s\n",
! lc_ctype,codeset,
! system_charset->MIME_name ?
! system_charset->MIME_name :
! "<no MIME name>"));
! return;
! }
!
if (0 == strcmp(lc_ctype,"C"))
system_charset = MIME_name_to_charset("US-ASCII",
CHARSET_create);
***************
*** 1101,1106 ****
--- 1112,1178 ----
expand_map_bin("bindata", bindata_path_global, raw_bindata_path,
--- 1261,1266 ----
***************
*** 1355,1376 ****
/** this routine does all the actual work of reading in the
.rc file... **/
! FILE *file;
!
errors = 0;
/* Look for the elmrc file */
! if ((file = fopen(user_rc_file, "r")) == NULL) {
DPRINT(Debug,2,(&Debug,
! "Warning:User has no \"%s\" file\n\n",
user_rc_file));
! }
! if (file != NULL) {
! do_rc(file, LOCAL_RC, ELMRCFILE);
! fclose(file);
}
-
/* load_locale_map may refer to map-text-dir ... */
do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
--- 1366,1398 ----
/** this routine does all the actual work of reading in the
.rc file... **/
! int err;
!
errors = 0;
+
/* Look for the elmrc file */
! err = can_open(user_rc_file, "r");
! if (err) {
DPRINT(Debug,2,(&Debug,
! "Warning:User has no \"%s\" file (can_open)\n\n",
user_rc_file));
!
! } else {
! FILE *file = NULL;
! if ((file = fopen(user_rc_file, "r")) == NULL) {
! DPRINT(Debug,2,(&Debug,
! "Warning:Open \"%s\" failed\n\n",
! user_rc_file));
!
! }
!
! if (file != NULL) {
! do_rc(file, LOCAL_RC, ELMRCFILE);
! fclose(file);
! }
}
/* load_locale_map may refer to map-text-dir ... */
do_expand_meta("map-text-dir", map_txtdir, raw_map_txtdir,
Index: elm2.4.ME+.110-cvs/lib/service_list.c
*** elm2.4.ME+.109/lib/service_list.c Wed May 28 21:49:27 2003
--- elm2.4.ME+.110-cvs/lib/service_list.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.23 2003/05/17 16:13:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.24 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 928,937 ****
/* hostname service options */
int max_count = 0;
int count = 0;
! FILE * f = fopen(filename,"r");
char buf[LONG_STRING];
int c, l1;
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
--- 928,949 ----
/* hostname service options */
int max_count = 0;
int count = 0;
! FILE * f;
char buf[LONG_STRING];
int c, l1;
+ if (!system) {
+ int err = can_open(filename,"r");
+
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "parse_service_entries=0: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return 0;
+ }
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,
Index: elm2.4.ME+.110-cvs/lib/terminal.c
*** elm2.4.ME+.109/lib/terminal.c Fri Sep 5 23:33:17 2003
--- elm2.4.ME+.110-cvs/lib/terminal.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.37 2003/08/19 14:34:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.38 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 411,421 ****
{
struct terminal_map_item *result;
int result_len = 0;
! FILE * f = fopen(filename,"r");
int max_result = 0;
int c;
char buf[LONG_STRING];
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s\n",
--- 411,429 ----
{
struct terminal_map_item *result;
int result_len = 0;
! FILE * f;
int max_result = 0;
int c;
char buf[LONG_STRING];
+ int err = can_open(filename,"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s (can_open)\n",
+ filename,error_description(err)));
+ return NULL;
+ }
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
DPRINT(Debug,2,(&Debug,"load_terminal_map: %s: %s\n",
Index: elm2.4.ME+.110-cvs/lib/unidata.c
*** elm2.4.ME+.109/lib/unidata.c Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/lib/unidata.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.25 2003/11/09 16:13:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.26 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 2127,2137 ****
{
struct unidata_mapped_data * res = *ptr;
int status = 0;
! FILE *f = fopen(filename,"r");
int last_processed = -1;
int line_number = 1;
int unassigned_cell = -1;
char composition_buffer[160];
if (!f) {
int err = errno;
--- 2127,2153 ----
{
struct unidata_mapped_data * res = *ptr;
int status = 0;
! FILE *f;
int last_processed = -1;
int line_number = 1;
int unassigned_cell = -1;
char composition_buffer[160];
+
+
+ /* This should not have readed by setgid Elm ME+
+ so this test is not necessary */
+ int err = can_open(filename,"r");
+
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeUnidataCantOpen,
+ "Can't open UNIDATA2.TXT: %.50s: %.25s"),
+ filename,error_description(err));
+ return 0;
+ }
+
+
+
+ f = fopen(filename,"r");
if (!f) {
int err = errno;
Index: elm2.4.ME+.110-cvs/MANIFEST
*** elm2.4.ME+.109/MANIFEST Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/MANIFEST Sun Nov 23 18:27:36 2003
***************
*** 395,397 ****
--- 395,398 ----
utils/charmapcopy.c
utils/charmapcopy.h
doc/elmbindata.1
+ MIME.txt
Index: elm2.4.ME+.110-cvs/melib/mailcap.c
*** elm2.4.ME+.109/melib/mailcap.c Sun Oct 12 12:48:03 2003
--- elm2.4.ME+.110-cvs/melib/mailcap.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.10 2003/10/11 11:35:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailcap.c,v 1.11 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 466,475 ****
int unsupported = 0;
media_type_t T = NULL;
enum mime_major_type T_major = MIME_TYPE_UNKNOWN;
!
zero_mailcap_entry(&Entry);
arg_zero(&keyword);
arg_zero(&string);
F = fopen(mailcaps[mailcap_idx],"r");
if (!F) {
--- 466,485 ----
int unsupported = 0;
media_type_t T = NULL;
enum mime_major_type T_major = MIME_TYPE_UNKNOWN;
!
! int err;
!
zero_mailcap_entry(&Entry);
arg_zero(&keyword);
arg_zero(&string);
+
+ err = can_open(mailcaps[mailcap_idx],"r");
+ if (err) {
+ DPRINT(Debug,2,(&Debug,
+ "Failed to open mailcap %s: (errno=%d) %s (can_open)\n",
+ mailcaps[mailcap_idx],err,error_description(err)));
+ continue;
+ }
F = fopen(mailcaps[mailcap_idx],"r");
if (!F) {
Index: elm2.4.ME+.110-cvs/MIME.txt
*** /tmp/5525-very-long-file-name-NULL-comes-in-here Wed Dec 17 20:04:44 2003
--- elm2.4.ME+.110-cvs/MIME.txt Sat Dec 6 15:41:15 2003
***************
*** 0 ****
--- 1,469 ----
+
+ MIME Conformance ?
+ ==================
+
+ README.ME+ states:
+
+ > But anyway, Elm will never be MIME Conformant
+
+ But lets look what RFC 2049 (Multipurpose Internet Mail Extensions
+ (MIME) Part Five: Conformance Criteria and Examples) says. Text
+ from RFC 2049 is quoted with ###.
+
+ ELM ME+ refers to Elm 2.4ME+ PL109 (25).
+
+ ### A mail user agent that is MIME-conformant MUST:
+
+ ### (1) Always generate a "MIME-Version: 1.0" header field in
+ ### any message it creates.
+
+ ELM ME+ do not add MIME-Version: 1.0
+ on following situation:
+
+ 1) If Elm ME+ is mailing of form
+
+ Content-Type: mailform
+
+ That is not MIME message, but some obsolete format
+ (it is uncluear can be that format invoked)
+
+ ### (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.
+
+ ELM ME+ do not recognize these content-transfer-encodings
+ if message have not MIME-Version header and elmrc option
+ "require-mime-version-for-body-encoding" have value ON
+ (default ON).
+
+ ### 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.
+
+ ELM ME+ do not encode non-7bit text data,
+ on following situation:
+
+ 1) If elmrc option "noencoding" have value "pass-8bit"
+ or "pass-binary".
+
+ Default value is "pass-7bit".
+
+ Also ELM ME+ do not encode, if to it is told that underlying
+ transport supports 8bit or binary.
+
+ ### (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.
+
+ ELM ME+ provides way to save part on message encoded form if
+ content-transfer-encoding is unrecognized.
+
+ ELM ME+ provides way to save application/octet-stream on
+ decoded form if content-transfer-encoding is recognized and
+ supported.
+
+ However if metamail is available and elmrc option "metamail"
+ is not value "none", mail with unknown content-transfer-encoding
+ is passed to metamail. So behauviour depends of metamail.
+
+ ### (4) Recognize and interpret the Content-Type header field,
+ ### and avoid showing users raw data with a Content-Type
+ ### field other than text.
+
+ ELM ME+ do not recognize these content-type header
+ if message have not MIME-Version header and elmrc option
+ "require-mime-version-for-body-encoding" have value ON
+ (default ON).
+
+
+ If metamail is available and elmrc option "metamail"
+ is not value "none", mail with unknown content-type
+ is passed to metamail. So behauviour depends of metamail.
+
+ 1) Metamail may display raw data
+
+ If metamail is not used, Elm ME+ provides way to save
+ part with unknown content-type on (content-transfer-encoding)
+ decoded form. Raw data is not shown if external programs
+ are not used for iterpretation of data.
+
+ Elm ME+ provides limited internal mailcap parser. If mailcap
+ specifies program for content-type and Elm ME+ is able to
+ support line on mailcap, Elm ME+ provides possibility to pass
+ data on (content-transfer-encoding) decoded form to that
+ external program. So on that case it depends on external program.
+
+ ### 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.
+
+ Elm ME+ provides is able to send text/plain messages and
+ provides charset -paramater if it is not US-ASCII.
+
+ ### (5) Ignore any content type parameters whose names they do
+ ### not recognize.
+
+ Elm ME+ ignores unknown content type paramaters.
+
+ If metamail is called, behauviour depends of metamail.
+
+ ### (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."
+
+ Elm ME+ displays text/plain mail with the character set
+ "US-ASCII." (at least if underlining system supports US-ASCII
+ -- on other hand ELM ME+ do not support environments
+ where that is not true -- systems with some ISO 646 set other
+ than US-ASCII are perhaps exception.)
+
+ It is possible define or redefine charset names of configuration
+ file. With sufficient broken redefination of charset US-ASCII,
+ it is possible that Elm ME+ is do not have able to display
+ text/plain mail with the character set "US-ASCII."
+
+ If system supports some other ISO 646 set than US-ASCII, Elm ME+
+ is not able to print all US-ASCII characters.
+
+ User have possibility with 'O' (Override charset) command
+ change charset of charset. That may change behauviour. In that
+ case also charset paramater of mail is ignored.
+
+ ### -- Recognize other character sets at least to the
+ ### extent of being able to inform the user about what
+ ### character set the message uses.
+
+ Elm ME+ prints character set's name or value of charset
+ parameter if it is unknown or unsupported.
+
+ ### -- 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.
+
+ ELME ME+ should be able to work environment, where display and
+ system supports only some ISO 646 sets. On these systems
+ all US-ASCII characters are not printable.
+
+ If ELM ME+ do no able to display US-ASCII, it probably
+ also do not have able to display ascii parts of these
+ charsets.
+
+ If elmrc page-known-charsets is OFF (default ON) and metamail is
+ available and elmrc option "metamail" is not value "none", mail
+ with other than system or display charset is passed to metamail.
+ So behauviour depends of metamail on that case.
+
+ 1) Metamail usually pages text directly to terminal without
+ taking account of charset.
+
+ If metamail is not used:
+
+ Assuming that underlining system supports US-ASCII, ELM ME+
+ usually regognize "ISO-8859-*" character sets and display
+ ascii part of them.
+
+ There is defination for existing "ISO-8859-*" character sets
+ so that these treated as superset of US-ASCII. It is possible
+ define or redefine charset names of configuration file. With
+ sufficient broken defination or redefination of some ISO-8859-*
+ set that this is not true.
+
+ If "ISO-8859-*" character sets is not defined and elmrc
+ option "auto-iso-8859" is ON (default ON), given charset is
+ automatically defined to be superset of OS-ASCII.
+
+ If charset is not defined or is defined to unknown, metamail is
+ available and elmrc option "metamail" is not value "none", mail
+ is passed to metamail. So behauviour depends of metamail on that
+ case.
+
+ User have possibility with 'O' (Override charset) command
+ change charset of mail. That may change behauviour. In that
+ case also charset paramater of mail is ignored.
+
+ ### -- 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.
+
+ Elm ME+ provides limited internal mailcap parser. If mailcap
+ specifies program for content-type and Elm ME+ is able to
+ support line on mailcap, Elm ME+ provides possibility to pass
+ data to external program. But that case perhaps is not
+ unrecognized subtype (if wildcars is not used on mailcap.)
+
+ If metamail is available and elmrc option "metamail" is not value
+ "none", mail with unrecognized subtypes of text is passed to
+ metamail. So behauviour depends of metamail on that
+ case.
+
+ Otherwise Elm ME+ handles unrecognized subtypes of text
+ as "text/plain".
+
+ ### -- Treat material in an unknown character set as if
+ ### it were "application/octet-stream".
+
+ If metamail is available and elmrc option "metamail" is not value
+ "none", mail with unknown charset is passed to metamail. So behauviour
+ depends of metamail on that case.
+
+ 1) Metamail usually pages text directly to terminal without
+ taking account of charset.
+
+ If metamail is not used:
+
+ ELM ME+ provides way to save text on decoded form. Text is not
+ displayed.
+
+ User have possibility with 'O' (Override charset) command
+ change charset of mail. That may change behauviour. In that
+ case also charset paramater of mail is ignored.
+
+ ### Image, audio, and video:
+
+ ### -- At a minumum provide facilities to treat any
+ ### unrecognized subtypes as if they were
+ ### "application/octet-stream".
+
+ ELM ME+ provides way to save both unrecognized subtypes
+ of Image, audio, and video and application/octet-stream on
+ decoded form if content-transfer-encoding is recognized and
+ supported.
+
+ ### 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.
+
+ Elm ME+ provides way to save subtypes on decoded form if
+ content-transfer-encoding is recognized and supported.
+
+ ### 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.
+
+ Elm ME+ recognizes multipart/mixed. Handling of message depends
+ are all subparts supported or not.
+
+ If subparts are unrecognized and elmrc option "pagemultipart"
+ is OFF (default OFF), metamail is available and elmrc option
+ "metamail" is not value "none", mail on that case is passed to
+ metamail. So behauviour depends of metamail on that case.
+
+ On some conditions subparts is passed to external program using
+ ELM ME+'s internal mailcap parser.
+
+
+ ### -- Recognize the "alternative" subtype, and avoid
+ ### showing the user redundant parts of
+ ### multipart/alternative mail.
+
+ Elm ME+ recognizes multipart/alternative. Handling of message
+ depends are all or some subparts supported or not. Elm ME+
+ may either itself show multipart/alternative message or pass
+ it to metamail (and perhaps on some conditions to external
+ program via using it's internal mailcap parser.)
+
+ When Elm ME+ handles itself multipart/alternative, it shows
+ only one subpart from it.
+
+ Also if metamail is called, it shows only one subpart from
+ multipart/alternative.
+
+ ### -- 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.
+
+ Elm ME+ recognizes multipart/mixed. Handling of message depends
+ are all subparts supported or not.
+
+ Elm ME+ treats "message/rfc822" as default media type for
+ subtypes instead of "text/plain". Othervise "multipart/digest"
+ is basically handled same way than "multipart/mixed".
+
+ ### -- Treat any unrecognized subtypes as if they were
+ ### "mixed".
+
+ If elmrc option "pagemultipart" is OFF (default OFF), metamail
+ is available and elmrc option "metamail" is not value "none",
+ mail on that case is passed to metamail.
+
+ On some conditions mail is passed to external program via using
+ it's internal mailcap parser.
+
+ Otherwise mail is treated as "multipart/mixed."
+
+ ### 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.
+
+ Elm ME+ recognizes message/rfc822. Handling of message depends
+ are all subparts of recurssive structure supported or not.
+
+ ### -- Treat any unrecognized subtypes as if they were
+ ### "application/octet-stream".
+
+ Elm ME+ recognizes multipart/mixed. Handling of message depends
+ are all subparts supported or not.
+
+ If subparts are unrecognized and elmrc option "pagemultipart"
+ is OFF (default OFF), metamail is available and elmrc option
+ "metamail" is not value "none", mail on that case is passed to
+ metamail. So behauviour depends of metamail on that case.
+
+ On some conditions subparts is passed to external program using
+ ELM ME+'s internal mailcap parser.
+
+ ### (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.
+
+ ELM ME+ provides way to save unrecognized subtypes on decoded form
+ if content-transfer-encoding is recognized and supported.
+
+ If content-type is unrecognized and elmrc option "pagemultipart"
+ is OFF (default OFF), metamail is available and elmrc option
+ "metamail" is not value "none", mail on that case is passed to
+ metamail. So behauviour depends of metamail on that case.
+
+ On some conditions part is passed to external program using
+ ELM ME+'s internal mailcap parser.
+
+ Elm ME+ do not offer the user to name a program to which the
+ decoded data should be passed as input. Except via mailcap
+ mechanism.
+
+ ### (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.
+
+ 1) If Elm ME+ is mailing of form
+
+ Content-Type: mailform
+
+ it may include other than US-ASCII text and it is
+ non-MIME message (it is uncluear can be that format
+ invoked.)
+
+ ### 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.
+
+ (Seems irrelevant.)
+
+ ### (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
+ ### "?=" 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.
+
+ 1) This is not done if Elm ME+ is mailing of form
+
+ Content-Type: mailform
+
+ (it is uncluear can be that format invoked.)
+
+ 2) This is not done, if elmrc option "nohdrencoding"
+ have value ON (default OFF.)
+
+ Otherwise it is believed, that this is ensured.
+
+ ### (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.
+
+ 1) This is not done if X-ELM-OSV: -header includes paramater
+ no-hdr-encoding=1. That paramater and header is added by
+ Elm ME+ on mailing, if elmrc option "nohdrencoding"
+ have value ON (default OFF.)
+
+ ( Actually header reads as
+ X-ELM-OSV: (Our standard violations)
+ )
+
+ 2) That is not done if message have not MIME-Version header
+ and elmrc option "require-mime-version-for-hdr-encoding"
+ have value ON (default OFF.)
+
+ Otherwise it is believed that this is done. However that
+ requires quite complete parser for mail headers so that
+ "*text" and "*ctext" are regognized correctly and that
+ decoding is not tried on other places.
+
+ ### The program must be
+ ### able to display the unencoded text if the character set
+ ### is "US-ASCII".
+
+ It is possible define or redefine charset names of configuration
+ file. With sufficient broken redefination of charset US-ASCII,
+ this is not done.
+
+ Otherwise this is done.
+
+ ### 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.
+
+ There is defination for existing "ISO-8859-*" character sets
+ so that these treated as superset of US-ASCII. It is possible
+ define or redefine charset names of configuration file. With
+ sufficient broken defination or redefination of some ISO-8859-*
+ set that this is not true.
+
+ If "ISO-8859-*" character sets is not defined and elmrc
+ option "auto-iso-8859" is ON (default ON), given charset is
+ automatically defined to be superset of OS-ASCII.
+
Index: elm2.4.ME+.110-cvs/src/alias.c
*** elm2.4.ME+.109/src/alias.c Fri Sep 5 23:33:17 2003
--- elm2.4.ME+.110-cvs/src/alias.c Sun Dec 14 11:55:42 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: alias.c,v 1.25 2003/08/31 10:53:57 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: alias.c,v 1.27 2003/12/14 09:55:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 95,100 ****
--- 95,103 ----
*
* Also, parse the data files into memory if needed
*/
+
***************
*** 721,726 ****
--- 733,754 ----
strfcpy(fname,user_text_file,sizeof fname);
save_file_stats(fname);
+
+ err = can_open(fname, "a");
+ if (err) {
--- 829,895 ----
save_file_stats(fname);
+ err = can_open(fname, "r");
+ if (err) {
Index: elm2.4.ME+.110-cvs/src/attach_menu.c
*** elm2.4.ME+.109/src/attach_menu.c Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/src/attach_menu.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.54 2003/11/11 16:18:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.55 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.55 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 1574,1579 ****
--- 1574,1584 ----
p,i));
if (i == 0) {
+
+ int err = can_open(user_mime_types, "r");
+ if (err)
+ continue;
+
/* First try the user's mime.types file */
fp = fopen (user_mime_types, "r");
Index: elm2.4.ME+.110-cvs/src/editmsg.c
*** elm2.4.ME+.109/src/editmsg.c Sun Oct 12 12:48:03 2003
--- elm2.4.ME+.110-cvs/src/editmsg.c Sat Nov 29 14:51:36 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.35 2003/10/11 13:04:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.37 2003/11/29 12:51:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 588,600 ****
char linebuf[1024];
FILE *tmpfp = safeopen_rdwr(filename2);
! FILE *f= fopen(filename,"r");
if (!f || !tmpfp) {
! if (!tmpfp)
! free(tmpfp);
! if (!f)
! free(f);
return_value = 1;
goto fail;
}
--- 588,612 ----
char linebuf[1024];
FILE *tmpfp = safeopen_rdwr(filename2);
! FILE *f;
!
! int err = can_open(filename,"r");
!
! if (err) {
! if (tmpfp)
! fclose(tmpfp);
!
! return_value = 1;
! goto fail;
! }
!
! f = fopen(filename,"r");
if (!f || !tmpfp) {
! if (tmpfp)
! fclose(tmpfp);
! if (f)
! fclose(f);
return_value = 1;
goto fail;
}
***************
*** 651,663 ****
if (filename2 != filename) {
char linebuf[1024];
! FILE *tmpfp = fopen(filename,"w");
! FILE *f= fopen(filename2,"r");
if (!f || !tmpfp) {
! if (!tmpfp)
free(tmpfp);
! if (!f)
free(f);
return_value = 1;
goto fail;
--- 663,685 ----
if (filename2 != filename) {
char linebuf[1024];
! FILE *tmpfp;
! FILE *f;
! int err = can_open(filename,"w");
! int err2 = can_open(filename2,"r");
!
! if (err || err2) {
! return_value = 1;
! goto fail;
! }
!
! tmpfp = fopen(filename,"w");
! f= fopen(filename2,"r");
if (!f || !tmpfp) {
! if (tmpfp)
free(tmpfp);
! if (f)
free(f);
return_value = 1;
goto fail;
***************
*** 1207,1218 ****
--- 1229,1249 ----
{
char buffer[LONG_STRING];
int i,len;
+ int err = can_open(I->builtin->filename, "r");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCantOpenFile,
+ "Can't open %s!"),
+ I->builtin->filename, error_description(err));
+ return 0;
+ }
+
if (I->builtin->edit_fd) {
fclose(I->builtin->edit_fd);
I->builtin->edit_fd = NULL;
}
+
if ((I->builtin->edit_fd = fopen(I->builtin->filename,
"r")) == NULL) {
int err = errno;
Index: elm2.4.ME+.110-cvs/src/elm.c
*** elm2.4.ME+.109/src/elm.c Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/src/elm.c Sun Nov 23 20:12:43 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.59 2003/11/10 20:37:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.59 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.60 2003/11/23 18:12:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.60 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 993,998 ****
--- 993,999 ----
}
send_msg_argv(to_whom, batch_subject, MAIL_EDIT_MSG,
(batch_only ? NO : allow_forms), current_mailbox);
+
leave(0, ¤t_mailbox);
} else if (check_only) {
do_check_only(to_whom);
Index: elm2.4.ME+.110-cvs/src/file_util.c
*** elm2.4.ME+.109/src/file_util.c Tue Aug 5 10:27:06 2003
--- elm2.4.ME+.110-cvs/src/file_util.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.19 2003/07/29 18:46:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.20 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 65,70 ****
--- 65,80 ----
char buffer[VERY_LONG_STRING];
int len;
+ int err = can_open(filename, "r");
+
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Error: could not open %s for reading (append) -- can_open\n",
+ filename));
+ return(1);
+
+ }
+
if ((my_fd = fopen(filename, "r")) == NULL) {
DPRINT(Debug,1,(&Debug,
"Error: could not open %s for reading (append)\n", filename));
Index: elm2.4.ME+.110-cvs/src/forms.c
*** elm2.4.ME+.109/src/forms.c Tue Aug 5 10:27:06 2003
--- elm2.4.ME+.110-cvs/src/forms.c Wed Nov 26 19:16:55 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: forms.c,v 1.17 2003/07/29 18:46:19 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: forms.c,v 1.18 2003/11/26 17:16:55 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 63,74 ****
FILE *form;
char buffer[SLEN];
! register int field_count = 0;
if ((form = fopen(filename, "r")) == NULL) {
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
"Error %s trying to open %s to check fields!"),
! error_description(errno), filename);
return -1;
}
--- 63,84 ----
FILE *form;
char buffer[SLEN];
! int field_count = 0;
!
! int err = can_open(filename, "r");
! if (err) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
! "Error %s trying to open %s to check fields!"),
! error_description(err), filename);
! return -1;
! }
!
if ((form = fopen(filename, "r")) == NULL) {
+ int err = errno;
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmErrorOpeningCheckFields,
"Error %s trying to open %s to check fields!"),
! error_description(err), filename);
return -1;
}
***************
*** 98,103 ****
--- 108,121 ----
DPRINT(Debug,4, (&Debug, "Formatting form file '%s'\n", filename));
/** first off, let's open the files... **/
+
+ err = can_open(filename, "r");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet,
+ ElmCantReadMessageToValidate,
+ "Can't read the message to validate the form!"));
+ return -1;
+ }
if ((form = fopen(filename, "r")) == NULL) {
err = errno;
Index: elm2.4.ME+.110-cvs/src/hdrconfg.c
*** elm2.4.ME+.109/src/hdrconfg.c Sun Oct 12 12:48:03 2003
--- elm2.4.ME+.110-cvs/src/hdrconfg.c Wed Nov 26 19:16:56 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.33 2003/10/11 13:25:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.34 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.34 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 554,559 ****
--- 554,560 ----
char buffer1[32*1024];
int stat;
int c;
+ int err;
if (in_string(editor, "%s"))
buffer = elm_message(FRM(editor),
***************
*** 576,582 ****
not with edit_charset (system_charset)
*/
-
elm_fprintf(F,
CATGETS(elm_msg_cat, ElmSet, ElmHdrEditComment,
"# Headers are automatically converted from %s charset and not need encoded\n"),
--- 577,582 ----
***************
*** 594,600 ****
}
-
add_addr_header(F,edit_charset,encoding_supported,
"From", & headers->from);
add_addr_header(F,edit_charset,encoding_supported,
--- 594,599 ----
***************
*** 633,638 ****
--- 632,644 ----
goto fail2;
}
Raw(ON);
+
+ err = can_open(filename,"r");
+ if (err) {
+ lib_error(FRM("%s: %s"),filename,err);
+
+ goto fail1;
+ }
F = fopen(filename,"r");
if (!F) {
Index: elm2.4.ME+.110-cvs/src/help.c
*** elm2.4.ME+.109/src/help.c Tue Aug 5 10:27:06 2003
--- elm2.4.ME+.110-cvs/src/help.c Wed Nov 26 19:16:56 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: help.c,v 1.13 2003/07/29 18:46:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: help.c,v 1.14 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 381,391 ****
static int display_file(file)
char *file;
{
! /*** Display file to screen ***/
!
! FILE *fileptr;
! int lines=0;
! char buffer[SLEN];
if ((fileptr = fopen(file,"r")) == NULL) {
DPRINT(Debug,1,
--- 381,403 ----
static int display_file(file)
char *file;
{
! /*** Display file to screen ***/
!
! FILE *fileptr;
! int lines=0;
! char buffer[SLEN];
!
! /* This routine is used to print helpfiles, which
! are not user writable directory, sho that is not actually
! problem */
! int err = can_open(file,"r");
!
! if (err) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmHelpCouldntOpenFile,
! "Couldn't open file %s."),
! file);
! return(FALSE);
! }
if ((fileptr = fopen(file,"r")) == NULL) {
DPRINT(Debug,1,
Index: elm2.4.ME+.110-cvs/src/leavembox.c
*** elm2.4.ME+.109/src/leavembox.c Sat Aug 16 09:58:21 2003
--- elm2.4.ME+.110-cvs/src/leavembox.c Fri Dec 12 22:19:39 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.38 2003/08/15 12:06:07 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.39 2003/12/12 20:19:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 1151,1156 ****
--- 1151,1160 ----
goto cleanup;
}
return_value = 1;
+
+
+ /* Clear action message */
+ lib_error(FRM(""));
cleanup:
if (recv_writeptr) /* If not done ealrier ... */
Index: elm2.4.ME+.110-cvs/src/limit.c
*** elm2.4.ME+.109/src/limit.c Fri Sep 5 23:33:17 2003
--- elm2.4.ME+.110-cvs/src/limit.c Sun Dec 14 16:05:12 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: limit.c,v 1.20 2003/09/03 09:16:29 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: limit.c,v 1.23 2003/12/14 14:05:12 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 267,274 ****
limit_by_string_subject(temp,get_selected(mailbox)||(complx&&iter!=0),
mailbox);
free_string(&temp);
! }
! else {
if ((p = index(c, ' ')) != NULL)
*p = '\0';
lib_error(CATGETS(elm_msg_cat, ElmSet,
--- 267,282 ----
limit_by_string_subject(temp,get_selected(mailbox)||(complx&&iter!=0),
mailbox);
free_string(&temp);
! } else if ((p = index(c, ':')) != NULL &&
! isspace(p[1])) {
!
! *p = '\0';
!
! limit_by_header(c, buf2,
! get_selected(mailbox)||(complx&&iter!=0),
! mailbox);
!
! } else {
if ((p = index(c, ' ')) != NULL)
*p = '\0';
lib_error(CATGETS(elm_msg_cat, ElmSet,
***************
*** 426,432 ****
walk;
walk = walk->next_this_header) {
! if (in_string(shift_lower(walk->body),value))
match++;
}
delete_headers(&all_headers);
--- 434,442 ----
walk;
walk = walk->next_this_header) {
! if (!value)
! match++;
! else if (in_string(shift_lower(walk->body),value))
match++;
}
delete_headers(&all_headers);
Index: elm2.4.ME+.110-cvs/src/mailmsg2.c
*** elm2.4.ME+.109/src/mailmsg2.c Sun Oct 12 12:48:03 2003
--- elm2.4.ME+.110-cvs/src/mailmsg2.c Wed Nov 26 19:16:56 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.70 2003/10/05 16:07:28 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.70 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.71 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.71 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 248,253 ****
--- 248,266 ----
/** if there is an included file, copy it into the temp file **/
if (*included_file) {
FILE *input;
+
+ int err = can_open(included_file,"r");
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Can't open included file %s (cam_open). Failed with error %s (mail)\n",
+ included_file, error_description(errno)));
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotOpenFile,
+ "Could not open file %s."),
+ included_file);
+
+ return(need_redraw);
+ }
+
if ((input = fopen(included_file,"r")) == NULL) {
DPRINT(Debug,1,(&Debug,
"Can't open included file %s. Failed with error %s (mail)\n",
***************
*** 483,488 ****
--- 496,502 ----
do { /* So we can return here if check_for_multipart() fails
* - K E H <hurtt...@ozone.FMI.FI> */
+
code = 0;
reask_verify = 0;
***************
*** 511,516 ****
--- 525,542 ----
/* so we can mark the reply flag */
if (0 == code)
me_retcode = 1;
+ }
+
+ err = can_open(cur_editfile,"r+");
+ if (err) {
+ DPRINT(Debug,1,(&Debug,
+ "Attempt to open file %s for reading failed with error %s (mail) -- can_open\n",
+ cur_editfile, error_description(err)));
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotOpenReply,
+ "Could not open reply file (%s)."),
+ error_description(err));
+
+ return need_redraw;
}
if ((reply = fopen(cur_editfile,"r+")) == NULL) {
Index: elm2.4.ME+.110-cvs/src/messages/header_alloc.c
*** elm2.4.ME+.109/src/messages/header_alloc.c Sat Nov 15 18:19:06 2003
--- elm2.4.ME+.110-cvs/src/messages/header_alloc.c Sat Dec 13 12:14:11 2003
***************
*** 1,8 ****
! static char rcsid[] = "@(#)$Id: header_alloc.c,v 1.6 2003/11/10 20:37:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
--- 1,8 ----
! static char rcsid[] = "@(#)$Id: header_alloc.c,v 1.7 2003/12/13 10:14:11 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************
***************
*** 19,24 ****
--- 19,66 ----
#include "me.h"
DEBUG_VAR(Debug,__FILE__,"messages");
+
+
+ void realloc_headers(storage,current_count)
+ struct current_storage *storage;
+ int current_count;
+ {
+
+ /* Code (indirectly) copied from src/newmbox.c
+ function read_headers()
+ */
+
+ if (current_count >= storage->max_headers) {
+ struct header_rec **new_headers;
+ int new_max;
+
+ new_max = storage->max_headers + KLICK;
+ if (storage->max_headers == 0) {
+ new_headers = (struct header_rec **)
+ safe_malloc(new_max * sizeof(struct header_rec *));
+ } else {
+ new_headers = (struct header_rec **)
+ safe_realloc((char *) storage->headers,
+ new_max * sizeof(struct header_rec *));
+ }
+ storage->headers = new_headers;
+ while (storage->max_headers < new_max)
+ storage->headers[storage->max_headers++] = NULL;
+ }
+ }
+
+ void alloc_header(storage,current_count)
+ struct current_storage *storage;
+ int current_count;
+ {
+ if (storage->headers[current_count] == NULL) {
+ struct header_rec *h = safe_malloc(sizeof(*h));
+
+ header_zero(h);
+ storage->headers[current_count] = h;
+ }
+ }
+
static time_t now = 0;
Index: elm2.4.ME+.110-cvs/src/messages/messages.c
*** elm2.4.ME+.109/src/messages/messages.c Sat Aug 16 09:58:21 2003
--- elm2.4.ME+.110-cvs/src/messages/messages.c Sat Dec 13 12:15:08 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: messages.c,v 1.8 2003/08/14 14:14:23 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: messages.c,v 1.9 2003/12/13 10:15:08 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 11,53 ****
DEBUG_VAR(Debug,__FILE__,"messages");
struct MailboxView * current_mailbox = NULL;
-
- void realloc_headers(storage,current_count)
- struct current_storage *storage;
- int current_count;
- {
- if (current_count >= storage->max_headers) {
- struct header_rec **new_headers;
- int new_max;
-
- new_max = storage->max_headers + KLICK;
- if (storage->max_headers == 0) {
- new_headers = (struct header_rec **)
- safe_malloc(new_max * sizeof(struct header_rec *));
- } else {
- new_headers = (struct header_rec **)
- safe_realloc((char *) storage->headers,
- new_max * sizeof(struct header_rec *));
- }
- storage->headers = new_headers;
- while (storage->max_headers < new_max)
- storage->headers[storage->max_headers++] = NULL;
- }
- }
-
- void alloc_header(storage,current_count)
- struct current_storage *storage;
- int current_count;
- {
- if (storage->headers[current_count] == NULL) {
- struct header_rec *h = safe_malloc(sizeof(*h));
-
- header_zero(h);
- storage->headers[current_count] = h;
- }
- }
-
-
#define MAILBOXVIEW_magic 0xFC00
--- 11,16 ----
Index: elm2.4.ME+.110-cvs/src/save_opts.c
*** elm2.4.ME+.109/src/save_opts.c Tue Aug 5 10:27:06 2003
--- elm2.4.ME+.110-cvs/src/save_opts.c Wed Nov 26 19:16:56 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: save_opts.c,v 1.23 2003/07/29 18:46:21 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: save_opts.c,v 1.24 2003/11/26 17:16:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 65,71 ****
FILE *newelmrc;
char oldfname[SLEN], newfname[SLEN];
!
strfcpy(newfname,user_rc_file,sizeof newfname);
elm_sfprintf(oldfname, sizeof oldfname,
FRM("%s/%s"),
--- 65,72 ----
FILE *newelmrc;
char oldfname[SLEN], newfname[SLEN];
! int err;
!
strfcpy(newfname,user_rc_file,sizeof newfname);
elm_sfprintf(oldfname, sizeof oldfname,
FRM("%s/%s"),
***************
*** 92,97 ****
--- 93,106 ----
/** next, open the new .elm/elmrc file... **/
+ err = can_open(newfname, "w");
+ if (err) {
+ lib_error(CATGETS(elm_msg_cat, ElmrcSet, ElmrcCantSaveConfig,
+ "Can't save configuration! Can't write to %s [%s]."),
+ newfname, error_description(errno));
+ return;
+ }
+
if ((newelmrc = fopen(newfname, "w")) == NULL) {
lib_error(CATGETS(elm_msg_cat, ElmrcSet, ElmrcCantSaveConfig,
"Can't save configuration! Can't write to %s [%s]."),
Index: elm2.4.ME+.110-cvs/src/utils.c
*** elm2.4.ME+.109/src/utils.c Tue Aug 5 10:27:06 2003
--- elm2.4.ME+.110-cvs/src/utils.c Sun Nov 23 20:12:43 2003
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: utils.c,v 1.25 2003/07/29 18:46:21 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: utils.c,v 1.26 2003/11/23 18:12:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
/* Set terminal title to "Elm: exiting" ... can be called from
signal handler
--- 254,263 ----
SIGDPRINT(Debug,2,
(&Debug,
"\nLeaving mailer from signal handler (leave)\n"));
! else {
SIGDPRINT(Debug,2, (&Debug,
"\nLeaving mailer normally (leave)\n"));
! }
/* Set terminal title to "Elm: exiting" ... can be called from
signal handler
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL110a.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL110.patch.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL110a.patch.gz >
via WWW.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL110a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL110 (25) --------------------------------
Index: elm2.4.ME+.110a-cvs/hdrs/patchlevel.h
Prereq: 1103000000
*** elm2.4.ME+.110/hdrs/patchlevel.h 2003-12-17 20:22:19.000000000 +0200
--- elm2.4.ME+.110a-cvs/hdrs/patchlevel.h 2004-01-02 15:41:09.000000000 +0200
***************
*** 1,9 ****
! #define PATCHLEVEL "110 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.110
*/
! #define LAST_REPORT_TIME 1103000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Dec, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Dec, 2003"
--- 1,9 ----
! #define PATCHLEVEL "110a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.110
*/
! #define LAST_REPORT_TIME 1104500000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Jan, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Jan, 2004"
Index: elm2.4.ME+.110a-cvs/README.ME+
*** elm2.4.ME+.110/README.ME+ 2003-12-17 20:22:19.000000000 +0200
--- elm2.4.ME+.110a-cvs/README.ME+ 2004-01-02 13:33:08.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.685 2003/12/17 14:32:02 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.695 2004/01/02 11:33:08 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,51 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL110a (25) compared with Elm2.4ME+ PL110 (25)
+ ------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch fixes case, where output of pgp/gpg was
+ not shown sometimes (on non-MIME messages),
+ case where O)verride charset was ignored when
+ displaying attachment (via MIME structure Menu
+ -menu), and case where To: address was not shown
+ on message list when showto elmrc option was set.
+
+
+ - Fix incorrect test on copy_pgp() -- length test should be
+ applied to original data -- not a output of pgp (or gpg).
+
+ - Add similar handling of interrupted read to copy_pgp()
+ than is on pgp_decode()
+
+ - Handle raw mode of terminal and status pg pgp/gpg on
+ copy_pgp() wame way than on pgp_decode()
+
+ - Make O)verride charset also be effective, when viewing
+ attachment via MIME structure Menu -menu.
+
+ - Elm was not displaying To: -address on some situations
+ when showto was set, but acted instead as recipient was
+ sender (or as mail was directed to user.)
+ Possibly reported by: Sivasankar Chander <si...@dias.ath.cx>
+
+ ( Perhaps showto should ignore case where sender is
+ recipient? )
+
Changes of Elm2.4ME+ PL110 (25) compared with Elm2.4ME+ PL109 (25)
------------------------------------------------------------------
***************
*** 20,139 ****
Undo Elm2.4ME+ PL109a (25) and Elm2.4ME+ PL109b (25) patches
before applying this patch.
! SUMMARY: This release collects patches PL109a and PL109b.
Security fixes introduced in PL109S are included.
! Bogus charset initialization error caused by
! missing global elm.mimecharsets file is fixed.
! Some enchancements to l)imit command are
! introduced. This release also fixes extra
"[Keeping all messages.]" messages introduced
on PL109a fix. File MIME.txt compares Elm ME+
to MIME conformace criteria.
! - This file states "But anyway, Elm will never be MIME
Conformant." Added file MIME.txt which enumerates RFC
2049 requirements and look which reuirements are not
followed and on what conditions.
- Change some Raw(OFF) to Raw_OFF() on leaving routines
! of src/utils.c
! > Also clear "[Keeping all messages.]" messages
! after leaving folder so that these are not
! printed because of Raw_OFF();
! - Try fix
! MBX PANIC in imap.c:2578:end_imap_command
when IMAP / TLS connection is closed by server.
! - Initialization of internal-mailcaps and
metamail-mailcaps did not worked correctly.
! Moved initialization before reading of global
! elm.rc.
Problem noted by: Xavi Serrano <xser...@ac.upc.es>
! - On def_prompt_handler() final newline should be
! printed to terminal as prompt is printed (instead
! of stderr.)
!
! - Fix segmentation violation on l)mit command
! "header subject" (ie. without ':'). This is now
! interpreted to be all mails which have given header
! name.
! - l)imit command "aabbc: yyy" work now as
! "header aabbc: yyy"
! - User alias file was not opened, if system alias file
existed.
! Fix potential security problems on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
!
! - Avoid error message like following
! Elm: Unable to map en_US locale (LC_CTYPE) to MIME charset.
! Codeset name ISO-8859-15 was unknown. Treating ISO-8859-15 as MIME name.
! Check /usr/local/test/lib/elm.mimecharsets or .../.elm/mime.charsets
! Problem with locale (system character set)! Elm ME+ will behave erratically.
on case where elm.mimecharsets is not installed. Codeset
! match was not used if either file elm.mimecharsets or
! mime.charsets existed.
!
New files:
! MIME.txt
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
[ This is out of branch patch. ]
! SUMMARY: This patch fixes segmentation violation on
! l)imit command and problem where user alias
! was not opened, if system alias file existed.
! - Fix segmentation violation on l)mit command
! "header subject" (ie. without ':').
! - User alias file was not opened, if system alias file
! existed. Fixed short circuit evalution.
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
--- 53,172 ----
Undo Elm2.4ME+ PL109a (25) and Elm2.4ME+ PL109b (25) patches
before applying this patch.
! SUMMARY: This release collects patches PL109a and PL109b.
Security fixes introduced in PL109S are included.
! Bogus charset initialization error caused by
! missing global elm.mimecharsets file is fixed.
! Some enchancements to l)imit command are
! introduced. This release also fixes extra
"[Keeping all messages.]" messages introduced
on PL109a fix. File MIME.txt compares Elm ME+
to MIME conformace criteria.
! - This file states "But anyway, Elm will never be MIME
Conformant." Added file MIME.txt which enumerates RFC
2049 requirements and look which reuirements are not
followed and on what conditions.
- Change some Raw(OFF) to Raw_OFF() on leaving routines
! of src/utils.c
! > Also clear "[Keeping all messages.]" messages
! after leaving folder so that these are not
! printed because of Raw_OFF();
! - Try fix
! MBX PANIC in imap.c:2578:end_imap_command
when IMAP / TLS connection is closed by server.
! - Initialization of internal-mailcaps and
metamail-mailcaps did not worked correctly.
! Moved initialization before reading of global
! elm.rc.
Problem noted by: Xavi Serrano <xser...@ac.upc.es>
! - On def_prompt_handler() final newline should be
! printed to terminal as prompt is printed (instead
! of stderr.)
!
! - Fix segmentation violation on l)mit command
! "header subject" (ie. without ':'). This is now
! interpreted to be all mails which have given header
! name.
! - l)imit command "aabbc: yyy" work now as
! "header aabbc: yyy"
! - User alias file was not opened, if system alias file
existed.
! Fix potential security problems on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
!
! - Avoid error message like following
! Elm: Unable to map en_US locale (LC_CTYPE) to MIME charset.
! Codeset name ISO-8859-15 was unknown. Treating ISO-8859-15 as MIME name.
! Check /usr/local/test/lib/elm.mimecharsets or .../.elm/mime.charsets
! Problem with locale (system character set)! Elm ME+ will behave erratically.
on case where elm.mimecharsets is not installed. Codeset
! match was not used if either file elm.mimecharsets or
! mime.charsets existed.
!
New files:
! MIME.txt
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
[ This is out of branch patch. ]
! SUMMARY: This patch fixes segmentation violation on
! l)imit command and problem where user alias
! was not opened, if system alias file existed.
! - Fix segmentation violation on l)mit command
! "header subject" (ie. without ':').
! - User alias file was not opened, if system alias file
! existed. Fixed short circuit evalution.
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
***************
*** 143,260 ****
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
! SUMMARY: This patch address panic when imap server disconnects
! during password prompt, fixes initialization of
! internal-mailcaps and metamail-mailcaps elmrc options
! and fixes some cases where error message was not visible
! because of exiting of Elm ME+. Also security fixes of
Elm2.4ME+ PL109S (25) are included to this patch (it
! is agaist Elm2.4ME+ PL109 (25))
!
- Changed some Raw(OFF) to Raw_OFF() on leaving routines
! of src/utils.c
! - Try fix
! MBX PANIC in imap.c:2578:end_imap_command
when IMAP / TLS connection is closed by server.
! - Initialization of internal-mailcaps and
metamail-mailcaps did not worked correctly.
! Moved initialization before reading of global
! elm.rc.
Problem noted by: Xavi Serrano <xser...@ac.upc.es>
! - On def_prompt_handler() final newline should be
! printed to terminal as prompt is printed (instead
! of stderr.)
!
! Fix potential security problems on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109S (25) compared with Elm2.4ME+ PL109 (25)
------------------------------------------------------------------
! Fix potential security problem on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109 (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
--- 176,293 ----
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
! SUMMARY: This patch address panic when imap server disconnects
! during password prompt, fixes initialization of
! internal-mailcaps and metamail-mailcaps elmrc options
! and fixes some cases where error message was not visible
! because of exiting of Elm ME+. Also security fixes of
Elm2.4ME+ PL109S (25) are included to this patch (it
! is agaist Elm2.4ME+ PL109 (25))
!
- Changed some Raw(OFF) to Raw_OFF() on leaving routines
! of src/utils.c
! - Try fix
! MBX PANIC in imap.c:2578:end_imap_command
when IMAP / TLS connection is closed by server.
! - Initialization of internal-mailcaps and
metamail-mailcaps did not worked correctly.
! Moved initialization before reading of global
! elm.rc.
Problem noted by: Xavi Serrano <xser...@ac.upc.es>
! - On def_prompt_handler() final newline should be
! printed to terminal as prompt is printed (instead
! of stderr.)
!
! Fix potential security problems on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109S (25) compared with Elm2.4ME+ PL109 (25)
------------------------------------------------------------------
! Fix potential security problem on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109 (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
***************
*** 9425,9431 ****
internal-mailcap-trusted-programs MIME
internal-mailcap-prompt-trusted MIME
iso646-charsets MIME
! keeppassfor PGP
local-fast-lookup -
local-fs-charset -
lock-in-copy -
--- 9458,9464 ----
internal-mailcap-trusted-programs MIME
internal-mailcap-prompt-trusted MIME
iso646-charsets MIME
! keeppassfor PGP (new on Elm 2.4 PL24ME)
local-fast-lookup -
local-fs-charset -
lock-in-copy -
***************
*** 9437,9449 ****
metamail-mailcaps MIME
menu-display-host -
mimebodykeywords MIME
! mimeforward MIME
! noencoding MIME
nohdrencoding MIME
noheaderfwd -
pagealternative MIME
page-known-charsets MIME
! pagemultipart MIME
pagesigned MIME
pgp2 PGP
pgp5 PGP
--- 9470,9482 ----
metamail-mailcaps MIME
menu-display-host -
mimebodykeywords MIME
! mimeforward MIME (new on Elm 2.4 PL24ME)
! noencoding MIME (new on Elm 2.4 PL24ME)
nohdrencoding MIME
noheaderfwd -
pagealternative MIME
page-known-charsets MIME
! pagemultipart MIME (new on Elm 2.4 PL24ME)
pagesigned MIME
pgp2 PGP
pgp5 PGP
***************
*** 9458,9468 ****
require-mime-version-for-hdr-encoding MIME
show-header-errors (MIME)
showpgppreamble PGP
sort-thread-max-time -
text-charset MIME
unidata MIME / SYSTEM
use-library -
! usepgppass PGP
utf7-encode-optional MIME
Obsolete elmrc variables
--- 9491,9502 ----
require-mime-version-for-hdr-encoding MIME
show-header-errors (MIME)
showpgppreamble PGP
+ showto - (new on Elm 2.4 PL24ME)
sort-thread-max-time -
text-charset MIME
unidata MIME / SYSTEM
use-library -
! usepgppass PGP (new on Elm 2.4 PL24ME)
utf7-encode-optional MIME
Obsolete elmrc variables
Index: elm2.4.ME+.110a-cvs/doc/elm.1
*** elm2.4.ME+.110/doc/elm.1 2003-08-11 11:21:18.000000000 +0300
--- elm2.4.ME+.110a-cvs/doc/elm.1 2003-12-31 15:50:16.000000000 +0200
***************
*** 258,264 ****
.SH BUG REPORTS TO
Kari Hurtta hurtt...@ozone.fmi.fi
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1996-2003 by Kari Hurtta
.br
Based on Elm 2.4, \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
--- 258,264 ----
.SH BUG REPORTS TO
Kari Hurtta hurtt...@ozone.fmi.fi
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1996-2004 by Kari Hurtta
.br
Based on Elm 2.4, \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
Index: elm2.4.ME+.110a-cvs/lib/dispaddr.c
*** elm2.4.ME+.110/lib/dispaddr.c 2002-06-06 18:55:56.000000000 +0300
--- elm2.4.ME+.110a-cvs/lib/dispaddr.c 2004-01-02 12:37:01.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: dispaddr.c,v 1.14 2002/06/01 12:58:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: dispaddr.c,v 1.15 2004/01/02 10:37:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 75,88 ****
break;
for (ptr = h->to; ptr && ptr->addr && ptr->fullname; ptr++)
! if (okay_address_l(ptr, h->from))
okay_to = 0;
!
for (ptr = h->cc; ptr && ptr->addr && ptr->fullname; ptr++)
! if (!okay_address_l(ptr, h->from))
okay_cc = 0;
!
DPRINT(Debug,6,(&Debug,
"DisplayAddress: okay_to=%d, okay_cc=%d, I have sender=%s (%s)\n",
--- 75,95 ----
break;
for (ptr = h->to; ptr && ptr->addr && ptr->fullname; ptr++)
! if (!okay_address_l(ptr, h->from)) {
! DPRINT(Debug,6,(&Debug,
! "DisplayAddress: Sender is recipient (To): %s\n",
! ptr->addr));
!
okay_to = 0;
! }
for (ptr = h->cc; ptr && ptr->addr && ptr->fullname; ptr++)
! if (!okay_address_l(ptr, h->from)) {
! DPRINT(Debug,6,(&Debug,
! "DisplayAddress: Sender is recipient (Cc): %s\n",
! ptr->addr));
okay_cc = 0;
! }
DPRINT(Debug,6,(&Debug,
"DisplayAddress: okay_to=%d, okay_cc=%d, I have sender=%s (%s)\n",
***************
*** 134,140 ****
remove_control(*f);
DPRINT(Debug,6,(&Debug,
! "DisplayAddress=%d, *f=%S\n",using_to,*f));
return(using_to);
}
--- 141,148 ----
remove_control(*f);
DPRINT(Debug,6,(&Debug,
! "DisplayAddress=%d, *f=%S, showto=%d\n",
! using_to,*f,showto));
return(using_to);
}
Index: elm2.4.ME+.110a-cvs/src/args.c
*** elm2.4.ME+.110/src/args.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.110a-cvs/src/args.c 2003-12-31 15:50:16.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: args.c,v 1.56 2003/07/29 18:46:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: args.c,v 1.57 2003/12/31 13:50:16 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.57 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 295,301 ****
printf("\n\tBased on Elm 2.4 PL24 - PL25\n\n");
if (i < 3) {
! printf("\t(C) Copyright 1996-2003 Kari Hurtta\n");
printf("\tBased on Elm 2.4, (C) Copyright 1988-1992 USENET Community Trust\n");
printf("\tBased on Elm 2.0, (C) Copyright 1986,1987 Dave Taylor\n");
}
--- 295,301 ----
printf("\n\tBased on Elm 2.4 PL24 - PL25\n\n");
if (i < 3) {
! printf("\t(C) Copyright 1996-2004 Kari Hurtta\n");
printf("\tBased on Elm 2.4, (C) Copyright 1988-1992 USENET Community Trust\n");
printf("\tBased on Elm 2.0, (C) Copyright 1986,1987 Dave Taylor\n");
}
Index: elm2.4.ME+.110a-cvs/src/attach_menu.c
*** elm2.4.ME+.110/src/attach_menu.c 2003-12-17 20:22:20.000000000 +0200
--- elm2.4.ME+.110a-cvs/src/attach_menu.c 2004-01-02 10:29:05.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.55 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.55 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.56 2004/01/02 08:29:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 616,621 ****
--- 616,623 ----
*/
tmp.header_charset = display_charset;
+ if (hdr)
+ tmp.override_charset = hdr->override_charset;
#ifdef USE_PGP
tmp.pgp = 0;
Index: elm2.4.ME+.110a-cvs/src/fileio.c
*** elm2.4.ME+.110/src/fileio.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.110a-cvs/src/fileio.c 2004-01-01 20:56:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: fileio.c,v 1.52 2003/08/04 14:58:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.52 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: fileio.c,v 1.54 2004/01/01 18:56:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 52,59 ****
enum pgp_version v = pgp2;
enum pgp_version version;
int armor_header = 0;
! int raw = RawState ();
DPRINT(PgpDebug,5,(&PgpDebug,
"copy_pgp called: Need read %d bytes\n",
--- 52,60 ----
enum pgp_version v = pgp2;
enum pgp_version version;
int armor_header = 0;
+ int ret = 1;
! int raw = sr_call_RawState ();
DPRINT(PgpDebug,5,(&PgpDebug,
"copy_pgp called: Need read %d bytes\n",
***************
*** 255,260 ****
--- 256,270 ----
DPRINT(PgpDebug,5,(&PgpDebug,
"copy_pgp: Passed %d bytes to PGP.\n",
body_bytes));
+
+
+ if (body_bytes != current_header->content_length) {
+ DPRINT(PgpDebug,1,(&PgpDebug,
+ "copy_pgp: ERROR: read bytes %d != content-length %d\n",
+ body_bytes,current_header->content_length));
+ ret = 0;
+ }
+
body_bytes = 0;
if (current_header->pgp & PGP_MESSAGE)
***************
*** 269,275 ****
else
state_printf(dest_file,CATGETS(elm_msg_cat, MeSet, MePgpStart,
"-- Start of PGP section.\n"));
!
while (0 < (buf_len = mail_gets(buffer, VERY_LONG_STRING, fpin))) {
body_bytes += buf_len;
--- 279,286 ----
else
state_printf(dest_file,CATGETS(elm_msg_cat, MeSet, MePgpStart,
"-- Start of PGP section.\n"));
!
! retry:
while (0 < (buf_len = mail_gets(buffer, VERY_LONG_STRING, fpin))) {
body_bytes += buf_len;
***************
*** 288,301 ****
goto fail;
}
}
fclose(fpin); fpin = NULL;
if (0 == code)
code = wait_end(&RS,&stat);
! PressAnyKeyToContinue();
if (raw)
! Raw (ON);
if (current_header->pgp & PGP_MESSAGE)
state_printf(dest_file,
--- 299,331 ----
goto fail;
}
}
+
+
+ if (ferror(fpin) && EINTR == errno) {
+ clearerr(fpin);
+ DPRINT(PgpDebug,5,(&PgpDebug,
+ "Reading of result interrupted (EINTR) -- retrying\n"));
+
+ if (0 == code) {
+ code = run_already_done(&RS,&stat);
+ if (0 != code) {
+ DPRINT(PgpDebug,5,(&PgpDebug,
+ "now pgp/gpg is completing\n"));
+ }
+ }
+
+ goto retry;
+ }
+
fclose(fpin); fpin = NULL;
if (0 == code)
code = wait_end(&RS,&stat);
! call_print_status_cooked(&RS,code < 0 ? -code : 0,stat);
!
if (raw)
! sr_call_Raw (ON);
if (current_header->pgp & PGP_MESSAGE)
state_printf(dest_file,
***************
*** 323,338 ****
", PGP failed!") : ".");
DPRINT(PgpDebug,5,(&PgpDebug,
! "copy_pgp: Read %d bytes from PGP.\n",
! body_bytes));
! if (body_bytes != current_header->content_length) {
! DPRINT(PgpDebug,1,(&PgpDebug,
! "copy_pgp: ERROR: read bytes %d != content-length %d\n",
! body_bytes,current_header->content_length));
! return 0;
! }
! return 1;
fail:
if (fpout)
--- 353,363 ----
", PGP failed!") : ".");
DPRINT(PgpDebug,5,(&PgpDebug,
! "copy_pgp=%d: Read %d bytes from PGP.\n",
! ret,body_bytes));
!
! return ret;
fail:
if (fpout)
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL110a.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL110a.patch.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL110a.patch.gz >
via WWW.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL110a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL110 (25) --------------------------------
Index: elm2.4.ME+.110a-cvs/hdrs/patchlevel.h
Prereq: 1103000000
*** elm2.4.ME+.110/hdrs/patchlevel.h 2003-12-17 20:22:19.000000000 +0200
--- elm2.4.ME+.110a-cvs/hdrs/patchlevel.h 2004-01-02 15:41:09.000000000 +0200
***************
*** 1,9 ****
! #define PATCHLEVEL "110 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.110
*/
! #define LAST_REPORT_TIME 1103000000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Dec, 2003" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Dec, 2003"
--- 1,9 ----
! #define PATCHLEVEL "110a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.110
*/
! #define LAST_REPORT_TIME 1104500000
#define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@ozone.FMI.FI>"
! #define VERS_DATE "Jan, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Jan, 2004"
Index: elm2.4.ME+.110a-cvs/README.ME+
*** elm2.4.ME+.110/README.ME+ 2003-12-17 20:22:19.000000000 +0200
--- elm2.4.ME+.110a-cvs/README.ME+ 2004-01-02 13:33:08.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.685 2003/12/17 14:32:02 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.695 2004/01/02 11:33:08 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,51 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL110a (25) compared with Elm2.4ME+ PL110 (25)
+ ------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch fixes case, where output of pgp/gpg was
+ not shown sometimes (on non-MIME messages),
+ case where O)verride charset was ignored when
+ displaying attachment (via MIME structure Menu
+ -menu), and case where To: address was not shown
+ on message list when showto elmrc option was set.
+
+
+ - Fix incorrect test on copy_pgp() -- length test should be
+ applied to original data -- not a output of pgp (or gpg).
+
+ - Add similar handling of interrupted read to copy_pgp()
+ than is on pgp_decode()
+
+ - Handle raw mode of terminal and status pg pgp/gpg on
+ copy_pgp() wame way than on pgp_decode()
+
+ - Make O)verride charset also be effective, when viewing
+ attachment via MIME structure Menu -menu.
+
+ - Elm was not displaying To: -address on some situations
+ when showto was set, but acted instead as recipient was
+ sender (or as mail was directed to user.)
+ Possibly reported by: Sivasankar Chander <si...@dias.ath.cx>
+
+ ( Perhaps showto should ignore case where sender is
+ recipient? )
+
Changes of Elm2.4ME+ PL110 (25) compared with Elm2.4ME+ PL109 (25)
------------------------------------------------------------------
***************
*** 20,139 ****
Undo Elm2.4ME+ PL109a (25) and Elm2.4ME+ PL109b (25) patches
before applying this patch.
! SUMMARY: This release collects patches PL109a and PL109b.
Security fixes introduced in PL109S are included.
! Bogus charset initialization error caused by
! missing global elm.mimecharsets file is fixed.
! Some enchancements to l)imit command are
! introduced. This release also fixes extra
"[Keeping all messages.]" messages introduced
on PL109a fix. File MIME.txt compares Elm ME+
to MIME conformace criteria.
! - This file states "But anyway, Elm will never be MIME
Conformant." Added file MIME.txt which enumerates RFC
2049 requirements and look which reuirements are not
followed and on what conditions.
- Change some Raw(OFF) to Raw_OFF() on leaving routines
! of src/utils.c
! > Also clear "[Keeping all messages.]" messages
! after leaving folder so that these are not
! printed because of Raw_OFF();
! - Try fix
! MBX PANIC in imap.c:2578:end_imap_command
when IMAP / TLS connection is closed by server.
! - Initialization of internal-mailcaps and
metamail-mailcaps did not worked correctly.
! Moved initialization before reading of global
! elm.rc.
Problem noted by: Xavi Serrano <xser...@ac.upc.es>
! Problem with locale (system character set)! Elm ME+ will behave erratically.
on case where elm.mimecharsets is not installed. Codeset
! match was not used if either file elm.mimecharsets or
! mime.charsets existed.
!
New files:
! MIME.txt
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
[ This is out of branch patch. ]
! SUMMARY: This patch fixes segmentation violation on
! l)imit command and problem where user alias
! was not opened, if system alias file existed.
! - Fix segmentation violation on l)mit command
! "header subject" (ie. without ':').
! - User alias file was not opened, if system alias file
! existed. Fixed short circuit evalution.
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
--- 53,172 ----
Undo Elm2.4ME+ PL109a (25) and Elm2.4ME+ PL109b (25) patches
before applying this patch.
! SUMMARY: This release collects patches PL109a and PL109b.
Security fixes introduced in PL109S are included.
! Bogus charset initialization error caused by
! missing global elm.mimecharsets file is fixed.
! Some enchancements to l)imit command are
! introduced. This release also fixes extra
"[Keeping all messages.]" messages introduced
on PL109a fix. File MIME.txt compares Elm ME+
to MIME conformace criteria.
! - This file states "But anyway, Elm will never be MIME
Conformant." Added file MIME.txt which enumerates RFC
2049 requirements and look which reuirements are not
followed and on what conditions.
- Change some Raw(OFF) to Raw_OFF() on leaving routines
! of src/utils.c
! > Also clear "[Keeping all messages.]" messages
! after leaving folder so that these are not
! printed because of Raw_OFF();
! - Try fix
! MBX PANIC in imap.c:2578:end_imap_command
when IMAP / TLS connection is closed by server.
! - Initialization of internal-mailcaps and
metamail-mailcaps did not worked correctly.
! Moved initialization before reading of global
! elm.rc.
Problem noted by: Xavi Serrano <xser...@ac.upc.es>
! Problem with locale (system character set)! Elm ME+ will behave erratically.
on case where elm.mimecharsets is not installed. Codeset
! match was not used if either file elm.mimecharsets or
! mime.charsets existed.
!
New files:
! MIME.txt
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
[ This is out of branch patch. ]
! SUMMARY: This patch fixes segmentation violation on
! l)imit command and problem where user alias
! was not opened, if system alias file existed.
! - Fix segmentation violation on l)mit command
! "header subject" (ie. without ':').
! - User alias file was not opened, if system alias file
! existed. Fixed short circuit evalution.
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
***************
*** 143,260 ****
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
! SUMMARY: This patch address panic when imap server disconnects
! during password prompt, fixes initialization of
! internal-mailcaps and metamail-mailcaps elmrc options
! and fixes some cases where error message was not visible
! because of exiting of Elm ME+. Also security fixes of
Elm2.4ME+ PL109S (25) are included to this patch (it
! is agaist Elm2.4ME+ PL109 (25))
!
- Changed some Raw(OFF) to Raw_OFF() on leaving routines
! of src/utils.c
! - Try fix
! MBX PANIC in imap.c:2578:end_imap_command
when IMAP / TLS connection is closed by server.
! - Initialization of internal-mailcaps and
metamail-mailcaps did not worked correctly.
! Moved initialization before reading of global
! elm.rc.
Problem noted by: Xavi Serrano <xser...@ac.upc.es>
! - On def_prompt_handler() final newline should be
! printed to terminal as prompt is printed (instead
! of stderr.)
!
! Fix potential security problems on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109S (25) compared with Elm2.4ME+ PL109 (25)
------------------------------------------------------------------
! Fix potential security problem on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109 (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
--- 176,293 ----
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
! SUMMARY: This patch address panic when imap server disconnects
! during password prompt, fixes initialization of
! internal-mailcaps and metamail-mailcaps elmrc options
! and fixes some cases where error message was not visible
! because of exiting of Elm ME+. Also security fixes of
Elm2.4ME+ PL109S (25) are included to this patch (it
! is agaist Elm2.4ME+ PL109 (25))
!
- Changed some Raw(OFF) to Raw_OFF() on leaving routines
! of src/utils.c
! - Try fix
! MBX PANIC in imap.c:2578:end_imap_command
when IMAP / TLS connection is closed by server.
! - Initialization of internal-mailcaps and
metamail-mailcaps did not worked correctly.
! Moved initialization before reading of global
! elm.rc.
Problem noted by: Xavi Serrano <xser...@ac.upc.es>
! - On def_prompt_handler() final newline should be
! printed to terminal as prompt is printed (instead
! of stderr.)
!
! Fix potential security problems on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109S (25) compared with Elm2.4ME+ PL109 (25)
------------------------------------------------------------------
! Fix potential security problem on systems where Elm ME+
! is setgid mail and system do not support Posix saved IDs.
! Check output of 'elm -vvv' if your system have problems:
!
! Have Posix saved IDs: Yes (egid 12)
!
! If this is 'No' and egid is other than your gid, there is
! possibility that Elm ME+ can read or write some files
! which are readable or writable by group mail, when it should
! not access them. Note that these fixes can not be complete.
! There is race condition at least. Closing that race condition
! requires that Elm ME+ drop privileges temporary. For that
! Elm ME+ uses Posix saved IDs.
!
! - SECURITY: Add can_open() test to load_locale_map()
! - SECURITY: Add can_open() test to copy1()
! - SECURITY: Add can_open() test to parse_iso2022_map()
! - SECURITY: Add can_open() test to do_newalias()
! - SECURITY: Add can_open() test to dbz_fresh()
! - SECURITY: Add can_open() test to dbz_again()
! - SECURITY: Add can_open() test to dbz_open()
! - SECURITY: Add can_open() test to latebase()
! - SECURITY: Add can_open() test to read_rc_file()
! - SECURITY: Add can_open() test to parse_service_entries()
! - SECURITY: Add can_open() test to load_terminal_map()
! - SECURITY: Add can_open() test to read_mailcaps()
! - SECURITY: Add can_open() test to add_to_alias_text()
! - SECURITY: Add can_open() test to delete_from_alias_text()
! - SECURITY: Add can_open() test to mime_guess_content_type()
! - SECURITY: Add can_open() test to edit_the_message()
! - SECURITY: Add can_open() test to read_editor()
! - SECURITY: Add can_open() test to append()
! - SECURITY: Add can_open() test to check_form_file()
! - SECURITY: Add can_open() test to format_form()
! - SECURITY: Add can_open() test to edit_headers_on_editor()
! - SECURITY: Add can_open() test to mail()
! - SECURITY: Add can_open() test to save_options()
!
! - Add can_open() test to load_folder_state_file()
! - Add can_open() test to read_unidata_text()
! - Add can_open() test to display_file()
Changes of Elm2.4ME+ PL109 (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
*** 258,264 ****
.SH BUG REPORTS TO
Kari Hurtta hurtt...@ozone.fmi.fi
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1996-2003 by Kari Hurtta
.br
Based on Elm 2.4, \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
--- 258,264 ----
.SH BUG REPORTS TO
Kari Hurtta hurtt...@ozone.fmi.fi
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1996-2004 by Kari Hurtta
.br
Based on Elm 2.4, \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
Index: elm2.4.ME+.110a-cvs/lib/dispaddr.c
*** elm2.4.ME+.110/lib/dispaddr.c 2002-06-06 18:55:56.000000000 +0300
--- elm2.4.ME+.110a-cvs/lib/dispaddr.c 2004-01-02 12:37:01.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: dispaddr.c,v 1.14 2002/06/01 12:58:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: dispaddr.c,v 1.15 2004/01/02 10:37:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
"DisplayAddress: okay_to=%d, okay_cc=%d, I have sender=%s (%s)\n",
***************
*** 134,140 ****
remove_control(*f);
DPRINT(Debug,6,(&Debug,
! "DisplayAddress=%d, *f=%S\n",using_to,*f));
return(using_to);
}
--- 141,148 ----
remove_control(*f);
DPRINT(Debug,6,(&Debug,
! "DisplayAddress=%d, *f=%S, showto=%d\n",
! using_to,*f,showto));
return(using_to);
}
Index: elm2.4.ME+.110a-cvs/src/args.c
*** elm2.4.ME+.110/src/args.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.110a-cvs/src/args.c 2003-12-31 15:50:16.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: args.c,v 1.56 2003/07/29 18:46:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: args.c,v 1.57 2003/12/31 13:50:16 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.57 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
***************
*** 295,301 ****
printf("\n\tBased on Elm 2.4 PL24 - PL25\n\n");
if (i < 3) {
! printf("\t(C) Copyright 1996-2003 Kari Hurtta\n");
printf("\tBased on Elm 2.4, (C) Copyright 1988-1992 USENET Community Trust\n");
printf("\tBased on Elm 2.0, (C) Copyright 1986,1987 Dave Taylor\n");
}
--- 295,301 ----
printf("\n\tBased on Elm 2.4 PL24 - PL25\n\n");
if (i < 3) {
! printf("\t(C) Copyright 1996-2004 Kari Hurtta\n");
printf("\tBased on Elm 2.4, (C) Copyright 1988-1992 USENET Community Trust\n");
printf("\tBased on Elm 2.0, (C) Copyright 1986,1987 Dave Taylor\n");
}
Index: elm2.4.ME+.110a-cvs/src/attach_menu.c
*** elm2.4.ME+.110/src/attach_menu.c 2003-12-17 20:22:20.000000000 +0200
--- elm2.4.ME+.110a-cvs/src/attach_menu.c 2004-01-02 10:29:05.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.55 2003/11/26 17:16:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.55 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.56 2004/01/02 08:29:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
*
***************
*** 616,621 ****
--- 616,623 ----
*/
tmp.header_charset = display_charset;
+ if (hdr)
+ tmp.override_charset = hdr->override_charset;
#ifdef USE_PGP
tmp.pgp = 0;
Index: elm2.4.ME+.110a-cvs/src/fileio.c
*** elm2.4.ME+.110/src/fileio.c 2003-08-05 10:27:06.000000000 +0300
--- elm2.4.ME+.110a-cvs/src/fileio.c 2004-01-01 20:56:55.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: fileio.c,v 1.52 2003/08/04 14:58:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.52 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: fileio.c,v 1.54 2004/01/01 18:56:55 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@ozone.FMI.FI>
+ ret = 0;
+ }
+
body_bytes = 0;
if (current_header->pgp & PGP_MESSAGE)
***************
*** 269,275 ****
else
state_printf(dest_file,CATGETS(elm_msg_cat, MeSet, MePgpStart,
"-- Start of PGP section.\n"));
!
while (0 < (buf_len = mail_gets(buffer, VERY_LONG_STRING, fpin))) {
body_bytes += buf_len;
--- 279,286 ----
else
state_printf(dest_file,CATGETS(elm_msg_cat, MeSet, MePgpStart,
"-- Start of PGP section.\n"));
!
! retry:
while (0 < (buf_len = mail_gets(buffer, VERY_LONG_STRING, fpin))) {
body_bytes += buf_len;
***************
*** 288,301 ****
goto fail;
}
}
fclose(fpin); fpin = NULL;
if (0 == code)
code = wait_end(&RS,&stat);
! PressAnyKeyToContinue();
if (raw)
! Raw (ON);
if (current_header->pgp & PGP_MESSAGE)
state_printf(dest_file,
--- 299,331 ----
goto fail;
}
}
+
+
+ if (ferror(fpin) && EINTR == errno) {
+ clearerr(fpin);
+ DPRINT(PgpDebug,5,(&PgpDebug,
+ "Reading of result interrupted (EINTR) -- retrying\n"));
+
+ if (0 == code) {
+ code = run_already_done(&RS,&stat);
+ if (0 != code) {
+ DPRINT(PgpDebug,5,(&PgpDebug,
+ "now pgp/gpg is completing\n"));
+ }
+ }
+
Elm 2.4ME+ PL111a (25) patch
Is available on ftp.ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL111a.patch.gz
for a moment (*).
Probably will be available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
file elm-2.4ME+PL111a.patch.gz
Is available with
<URL: http://elmme-mailer.org/elm-2.4ME+PL111a.patch.gz >
via WWW (**).
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL111a.patch.gz >
via WWW.
(*) NOTE:
Seems that anonymous ftp (and ftp.ozone.fmi.fi) will be removed.
Then ftp://ftp.ozone.fmi.fi/KEH/ is not available.
Page http://www.ozone.fmi.fi/KEH/ probably remain.
Also ozone.fmi.fi will retire.
(**) http://elmme-mailer.org/ goes to http://www.ozone.FMI.FI/KEH/.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL111a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Undo Elm2.4ME+ PL110a (25) patch before applying this patch.
SUMMARY: This patch fixes crash caused by 'U' command
on aliases menu.
Bug reporting E-mail address is changed.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL11a (25) --------------------------------
Index: elm2.4.ME+.111a-cvs/hdrs/patchlevel.h
Prereq: 1106000000
*** elm2.4.ME+.111/hdrs/patchlevel.h 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/hdrs/patchlevel.h 2004-02-07 15:56:23.000000000 +0200
***************
*** 1,9 ****
! #define PATCHLEVEL "111 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.111
*/
! #define LAST_REPORT_TIME 1106000000
! #define BUG_REPORT_ADDR "Kari Hurtta <hurtt...@posti.FMI.FI>"
! #define VERS_DATE "Jan, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Jan, 2004"
--- 1,9 ----
! #define PATCHLEVEL "111a (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.111a
*/
! #define LAST_REPORT_TIME 1107000000
! #define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "Feb, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Feb, 2004"
Index: elm2.4.ME+.111a-cvs/README.ME+
*** elm2.4.ME+.111/README.ME+ 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/README.ME+ 2004-02-07 17:56:06.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.699 2004/01/24 11:05:54 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.703 2004/02/07 15:56:06 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 14,19 ****
--- 14,35 ----
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
+ ------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ SUMMARY: This patch fixes crash caused by 'U' command
+ on aliases menu.
+
+ - Fix for src/Makefile
+
+ - Fix crash if 'U' is pressed on aliases menu:
+ SIGNAL PANIC in signals.c:102:segv_signal
+
+ - Changed bug reporting address to e...@elmme-mailer.org
+ (that is directed to hurtt...@posti.FMI.FI)
+
Changes of Elm2.4ME+ PL111 (25) compared with Elm2.4ME+ PL110 (25)
------------------------------------------------------------------
Index: elm2.4.ME+.111a-cvs/doc/answer.1
*** elm2.4.ME+.111/doc/answer.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/answer.1 2004-02-07 15:56:22.000000000 +0200
***************
*** 104,110 ****
.br
/tmp/snd.$$ edit buffer for outgoing mail
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2002 by Kari Hurtta
.br
--- 104,110 ----
.br
/tmp/snd.$$ edit buffer for outgoing mail
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2002 by Kari Hurtta
.br
Index: elm2.4.ME+.111a-cvs/doc/chkalias.1
*** elm2.4.ME+.111/doc/chkalias.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/chkalias.1 2004-02-07 15:56:22.000000000 +0200
***************
*** 35,41 ****
the system administrator to keep in mind when creating the
system alias file.
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
--- 35,41 ----
the system administrator to keep in mind when creating the
system alias file.
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
Index: elm2.4.ME+.111a-cvs/doc/elm.1
*** elm2.4.ME+.111/doc/elm.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elm.1 2004-02-07 15:56:22.000000000 +0200
***************
*** 256,262 ****
.br
$HOME/ELM:debug.info Debug output if turned on
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2004 by Kari Hurtta
.br
--- 256,262 ----
.br
$HOME/ELM:debug.info Debug output if turned on
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2004 by Kari Hurtta
.br
Index: elm2.4.ME+.111a-cvs/doc/elmalias.1
*** elm2.4.ME+.111/doc/elmalias.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elmalias.1 2004-02-07 15:56:22.000000000 +0200
***************
*** 402,408 ****
the system administrator to keep in mind when creating the
system alias file.
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
--- 402,408 ----
the system administrator to keep in mind when creating the
system alias file.
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
Index: elm2.4.ME+.111a-cvs/doc/elmbindata.1
*** elm2.4.ME+.111/doc/elmbindata.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elmbindata.1 2004-02-07 15:56:22.000000000 +0200
***************
*** 87,92 ****
#LIB#/elm.map.bin/bindata.bin Default location for system bindata file
.br
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2003 by Kari Hurtta
--- 87,92 ----
#LIB#/elm.map.bin/bindata.bin Default location for system bindata file
.br
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2003 by Kari Hurtta
Index: elm2.4.ME+.111a-cvs/doc/elmcharset.1
*** elm2.4.ME+.111/doc/elmcharset.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elmcharset.1 2004-02-07 15:56:22.000000000 +0200
***************
*** 73,78 ****
$HOME/.elm/mime.charsets individual charsets file
.br
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1999-2003 by Kari Hurtta
--- 73,78 ----
$HOME/.elm/mime.charsets individual charsets file
.br
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1999-2003 by Kari Hurtta
Index: elm2.4.ME+.111a-cvs/doc/elmlibregister.1
*** elm2.4.ME+.111/doc/elmlibregister.1 2003-05-28 21:49:27.000000000 +0300
--- elm2.4.ME+.111a-cvs/doc/elmlibregister.1 2004-02-07 15:56:22.000000000 +0200
***************
*** 58,63 ****
$HOME/.elm/elmrc individual RC file
.br
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@ozone.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2003 by Kari Hurtta
--- 58,63 ----
$HOME/.elm/elmrc individual RC file
.br
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2003 by Kari Hurtta
Index: elm2.4.ME+.111a-cvs/doc/elmrc-write.1
*** elm2.4.ME+.111/doc/elmrc-write.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elmrc-write.1 2004-02-07 15:56:22.000000000 +0200
***************
*** 54,60 ****
$HOME/.elm/elmrc individual RC file
.br
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2001,2002 by Kari Hurtta
--- 54,60 ----
$HOME/.elm/elmrc individual RC file
.br
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2001,2002 by Kari Hurtta
Index: elm2.4.ME+.111a-cvs/doc/elmregister.1
*** elm2.4.ME+.111/doc/elmregister.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elmregister.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 103,108 ****
.SH FILES
#ETC#/elm.filelist List of installed files
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2003 by Kari Hurtta
--- 103,108 ----
.SH FILES
#ETC#/elm.filelist List of installed files
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2003 by Kari Hurtta
Index: elm2.4.ME+.111a-cvs/doc/elmstringconvert.1
*** elm2.4.ME+.111/doc/elmstringconvert.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elmstringconvert.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 75,80 ****
$HOME/.elm/mime.charsets individual charsets file
.br
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2002,2003 by Kari Hurtta
--- 75,80 ----
$HOME/.elm/mime.charsets individual charsets file
.br
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2002,2003 by Kari Hurtta
Index: elm2.4.ME+.111a-cvs/doc/elmterminal.1
*** elm2.4.ME+.111/doc/elmterminal.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elmterminal.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 54,59 ****
$HOME/.elm/terminal.info individual terminal info file
.br
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2000-2002 by Kari Hurtta
--- 54,59 ----
$HOME/.elm/terminal.info individual terminal info file
.br
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2000-2002 by Kari Hurtta
Index: elm2.4.ME+.111a-cvs/doc/elmunidata.1
*** elm2.4.ME+.111/doc/elmunidata.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/elmunidata.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 67,72 ****
#LIB#/elm.map.bin/unidata.bin Default location for system unidata file
.br
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2001,2002 by Kari Hurtta
--- 67,72 ----
#LIB#/elm.map.bin/unidata.bin Default location for system unidata file
.br
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 2001,2002 by Kari Hurtta
Index: elm2.4.ME+.111a-cvs/doc/fastmail.1
*** elm2.4.ME+.111/doc/fastmail.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/fastmail.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 130,136 ****
.SH SEE\ ALSO
sendmail(1), rmail(1), elm(1L)
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2002 by Kari Hurtta
.br
--- 130,136 ----
.SH SEE\ ALSO
sendmail(1), rmail(1), elm(1L)
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2002 by Kari Hurtta
.br
Index: elm2.4.ME+.111a-cvs/doc/frm.1
*** elm2.4.ME+.111/doc/frm.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/frm.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 143,149 ****
.br
$HOME/mime.charsets locale to MIME charsets mapping information
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2002 by Kari Hurtta
.br
--- 143,149 ----
.br
$HOME/mime.charsets locale to MIME charsets mapping information
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2002 by Kari Hurtta
.br
Index: elm2.4.ME+.111a-cvs/doc/listalias.1
*** elm2.4.ME+.111/doc/listalias.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/listalias.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 43,49 ****
Since the program uses a pipe to egrep, how expressions are evaluated is
a function of \fIthat\fR program, not this one!
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
--- 43,49 ----
Since the program uses a pipe to egrep, how expressions are evaluated is
a function of \fIthat\fR program, not this one!
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
Index: elm2.4.ME+.111a-cvs/doc/messages.1
*** elm2.4.ME+.111/doc/messages.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/messages.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 30,36 ****
.SH BUGS
Don't be foolish...
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
--- 30,36 ----
.SH BUGS
Don't be foolish...
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
Index: elm2.4.ME+.111a-cvs/doc/newalias.1
*** elm2.4.ME+.111/doc/newalias.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/newalias.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 95,101 ****
.I elm
system.
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
--- 95,101 ----
.I elm
system.
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
Index: elm2.4.ME+.111a-cvs/doc/newmail.1
*** elm2.4.ME+.111/doc/newmail.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/newmail.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 153,159 ****
.SH SEE ALSO
notify in sh(1) or csh(1)
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
--- 153,159 ----
.SH SEE ALSO
notify in sh(1) or csh(1)
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
Index: elm2.4.ME+.111a-cvs/doc/printmail.1
*** elm2.4.ME+.111/doc/printmail.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/printmail.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 37,43 ****
.SH SEE ALSO
readmsg(1L)
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
--- 37,43 ----
.SH SEE ALSO
readmsg(1L)
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
Index: elm2.4.ME+.111a-cvs/doc/prlong.1
*** elm2.4.ME+.111/doc/prlong.1 2003-04-24 18:52:20.000000000 +0300
--- elm2.4.ME+.111a-cvs/doc/prlong.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 32,34 ****
--- 32,36 ----
seperator is a single space. The default output leader is an empty
string for the first output line, and a single tab for all subsequent
lines.
+ .SH BUG REPORTS TO
+ Kari Hurtta e...@elmme-mailer.org
Index: elm2.4.ME+.111a-cvs/doc/readmsg.1
*** elm2.4.ME+.111/doc/readmsg.1 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/doc/readmsg.1 2004-02-07 15:56:23.000000000 +0200
***************
*** 197,203 ****
.I elm
with the current folder, and in mailbox order for all other cases.
.SH BUG REPORTS TO
! Kari Hurtta hurtt...@posti.fmi.fi
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
--- 197,203 ----
.I elm
with the current folder, and in mailbox order for all other cases.
.SH BUG REPORTS TO
! Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
Index: elm2.4.ME+.111a-cvs/lib/mmaputil.c
*** elm2.4.ME+.111/lib/mmaputil.c 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/lib/mmaputil.c 2004-01-31 14:29:24.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mmaputil.c,v 1.3 2004/01/24 11:05:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mmaputil.c,v 1.4 2004/01/31 12:29:24 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 117,125 ****
return status;
}
-
- /* KESKEN */
-
/*
* Local Variables:
* mode:c
--- 117,122 ----
Index: elm2.4.ME+.111a-cvs/src/elm.c
*** elm2.4.ME+.111/src/elm.c 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/src/elm.c 2004-02-07 15:56:23.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.63 2004/01/24 11:06:03 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.63 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.64 2004/02/07 13:56:23 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.64 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 739,744 ****
--- 739,757 ----
}
break;
+ case 'U' : {
+ if (get_message_count(mailbox) < 1) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet,
+ ElmNoItemToMarkUnread,
+ "No %s to mark as unread!"),
+ items);
+
+ }
+ else
+ unread_msg(TRUE, (mailbox));
+ }
+ break;
+
case 'v' : {
struct header_rec *hdr;
FILE *F;
***************
*** 2026,2044 ****
meta_match(TAGGED, mailbox, aview);
break;
- case 'U' : if (ifmain(get_message_count(mailbox),
- get_alias_count(aview))
- < 1) {
- lib_error(CATGETS(elm_msg_cat, ElmSet,
- ElmNoItemToMarkUnread,
- "No %s to mark as unread!"),
- items);
-
- }
- else
- unread_msg(TRUE, (mailbox));
- break;
-
case 'u' : if (ifmain(get_message_count(mailbox),
get_alias_count(aview))
< 1) {
--- 2039,2044 ----
Index: elm2.4.ME+.111a-cvs/src/Makefile.SH
*** elm2.4.ME+.111/src/Makefile.SH 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111a-cvs/src/Makefile.SH 2004-01-31 21:42:55.000000000 +0200
***************
*** 31,37 ****
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.48 2004/01/05 15:05:32 hurtta Exp $
#
# Makefile for the ELM mail program.
#
--- 31,37 ----
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.49 2004/01/31 19:42:55 hurtta Exp $
#
# Makefile for the ELM mail program.
#
***************
*** 251,257 ****
screen/libscreen.a:
cd screen; $(MAKE) $(MJ) $(MFLAGS) all
! screen/libaliases.a:
cd aliases; $(MAKE) $(MJ) $(MFLAGS) all
--- 251,257 ----
screen/libscreen.a:
cd screen; $(MAKE) $(MJ) $(MFLAGS) all
! aliases/libaliases.a:
cd aliases; $(MAKE) $(MJ) $(MFLAGS) all
Elm 2.4ME+ PL111b (25) patch
Is available on ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL111b.patch.gz
for a moment (*). Name ftp.ozone.fmi.fi
will point to service which no have anonymous ftp
before ozone.fmi.fi retires.
Probably will be available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
file elm-2.4ME+PL111b.patch.gz
Is available with
<URL: http://elmme-mailer.org/elm-2.4ME+PL111b.patch.gz >
via WWW (**).
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL111b.patch.gz >
via WWW.
(*) NOTE:
Seems that anonymous ftp (and ftp.ozone.fmi.fi) will be removed.
Then ftp://ftp.ozone.fmi.fi/KEH/ is not available.
Page http://www.ozone.fmi.fi/KEH/ probably remain.
Also ozone.fmi.fi will retire.
(**) http://elmme-mailer.org/ goes to http://www.ozone.FMI.FI/KEH/.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL111b.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL111b (25) --------------------------------
Index: elm2.4.ME+.111b-cvs/hdrs/patchlevel.h
Prereq: 1107000000
*** elm2.4.ME+.111a/hdrs/patchlevel.h 2004-02-19 22:06:03.000000000 +0200
--- elm2.4.ME+.111b-cvs/hdrs/patchlevel.h 2004-02-19 21:38:34.000000000 +0200
***************
*** 1,8 ****
! #define PATCHLEVEL "111a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.111a
*/
! #define LAST_REPORT_TIME 1107000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
#define VERS_DATE "Feb, 2004" /* for elm -v option */
#define WHAT_STRING \
--- 1,8 ----
! #define PATCHLEVEL "111b (25)"
/* Used by Configure:
SHAREDTAG: .1.0.111a
*/
! #define LAST_REPORT_TIME 1108000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
#define VERS_DATE "Feb, 2004" /* for elm -v option */
#define WHAT_STRING \
Index: elm2.4.ME+.111b-cvs/README.ME+
*** elm2.4.ME+.111a/README.ME+ 2004-02-19 22:06:03.000000000 +0200
--- elm2.4.ME+.111b-cvs/README.ME+ 2004-02-19 21:38:34.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.703 2004/02/07 15:56:06 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.704 2004/02/19 19:38:34 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 14,21 ****
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
! ------------------------------------------------------------------
[ This is out of branch patch. ]
--- 14,30 ----
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL111b (25) compared with Elm2.4ME+ PL111a (25)
+ --------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+
+ - Fix crash on parse failure on command
+ "View digest as mailbox".
+
Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
! -------------------------------------------------------------------
[ This is out of branch patch. ]
Index: elm2.4.ME+.111b-cvs/melib/mime_parse.c
*** elm2.4.ME+.111a/melib/mime_parse.c 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111b-cvs/melib/mime_parse.c 2004-02-19 21:38:34.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.43 2004/01/24 11:06:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.43 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.44 2004/02/19 19:38:34 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 210,215 ****
--- 210,221 ----
mt->TYPE = give_media_type(c,subtype,1);
+ if (! mt->TYPE) {
+ DPRINT(Debug,1,(&Debug,
+ "mime_get_content(): str=\"%s\" FAILED!\n", str));
+ return;
+ }
+
DPRINT(Debug,9,(&Debug,
"mime_get_content(): %p -- type=\"%s\", subtype=\"%s\", opts=\"%s\"\n",
mt->TYPE,
Index: elm2.4.ME+.111b-cvs/melib/mime_selector.c
*** elm2.4.ME+.111a/melib/mime_selector.c 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111b-cvs/melib/mime_selector.c 2004-02-19 21:38:34.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_selector.c,v 1.6 2004/01/24 11:06:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_selector.c,v 1.7 2004/02/19 19:38:34 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 85,90 ****
--- 85,98 ----
panic("MIME PANIC",__FILE__,__LINE__,"mime_classify_media",
"Bad magic number",0);
+ if (! p->TYPE) {
+ DPRINT(Debug,1,(&Debug,
+ "mime_classify_media(%p) NOT PARSED\n",
+ p));
+ submask = NOTPLAIN_need_metamail;
+ goto bad_encoding;
+ }
+
melib_register_decoders();
DPRINT(Debug,11,(&Debug,
Index: elm2.4.ME+.111b-cvs/melib/mpar_multipart.c
*** elm2.4.ME+.111a/melib/mpar_multipart.c 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.111b-cvs/melib/mpar_multipart.c 2004-02-19 21:38:34.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mpar_multipart.c,v 1.7 2004/01/24 11:06:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mpar_multipart.c,v 1.8 2004/02/19 19:38:34 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
***************
*** 208,213 ****
--- 208,221 ----
delete_headers(&headers);
+
+ if (!D->p.multipart->parts[i].TYPE) {
+ DPRINT(Debug,1,(&Debug,
+ "mpar_multipart_parse -- parse failure\n"));
+ ret = 0;
+ break;
+ }
+
DPRINT(Debug,9,(&Debug,
"mpar_multipart_parse: (reading) [%d] content-type=%s/%s; flags=%d\n",
i,
***************
*** 257,262 ****
--- 265,277 ----
if (D->p.multipart->parts[i].magic != MIME_magic)
mime_panic(__FILE__,__LINE__,"multipart_parse",
"Bad magic number (array elem)");
+
+ if (!D->p.multipart->parts[i].TYPE) {
+ DPRINT(Debug,9,(&Debug,
+ "mpar_multipart_parse: (parsing) [%d] FAILED\n",
+ i));
+ continue;
+ }
DPRINT(Debug,9,(&Debug,
"mpar_multipart_parse: (parsing) [%d] content-type=%s/%s; flags=%d\n",
Is available on ozone.FMI.FI (1)
via anonymous ftp
directory KEH/
files elm-2.4ME+PL113a.patch.gz
for a moment (2).
Probably will be available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
file elm-2.4ME+PL113a.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL113a.patch.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL113a.patch.gz >
via WWW.
(1) Was ftp.ozone.fmi.fi but name ftp.ozone.fmi.fi
will probably point to service which no have anonymous ftp
before ozone.fmi.fi retires. So use ozone.fmi.fi
for a moment instead of ftp.ozone.fmi.fi.
(2) It is currently unknown what will be done for ftp.ozone.fmi.fi
and www.ozone.fmi.fi.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL113a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
SUMMARY: This patch fixes (again) compilation
problem on AIX and fixes null pointer
dereference problem on "elm -c xxx" command.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL113 (25) --------------------------------
Index: elm2.4.ME+.113a-cvs/hdrs/patchlevel.h
Prereq: 1110000000
*** elm2.4.ME+.113/hdrs/patchlevel.h 2004-03-16 21:17:43.000000000 +0200
--- elm2.4.ME+.113a-cvs/hdrs/patchlevel.h 2004-03-25 20:45:42.000000000 +0200
***************
*** 1,8 ****
! #define PATCHLEVEL "113 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.113
*/
! #define LAST_REPORT_TIME 1110000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
#define VERS_DATE "Mar, 2004" /* for elm -v option */
#define WHAT_STRING \
--- 1,8 ----
! #define PATCHLEVEL "113a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.113
*/
! #define LAST_REPORT_TIME 1111000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
#define VERS_DATE "Mar, 2004" /* for elm -v option */
#define WHAT_STRING \
Index: elm2.4.ME+.113a-cvs/README.ME+
*** elm2.4.ME+.113/README.ME+ 2004-03-16 21:17:43.000000000 +0200
--- elm2.4.ME+.113a-cvs/README.ME+ 2004-03-26 17:06:30.000000000 +0200
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.715 2004/03/16 18:49:49 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.715.4.2 2004/03/26 15:06:30 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,27 ****
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
Changes of Elm2.4ME+ PL113 (25) compared with Elm2.4ME+ PL112 (25)
------------------------------------------------------------------
! SUMMARY: This release changes base64 decode algorithm,
! adds decoder from X-uuencoded content-transfer-encoding
! and adds handling of resizing to many screen.
! - Reimplemented base64_decode() from routine
! of kehlist (first occured on kehlist 1.1.2 9 Jun 1999
Author: Kari E. Hurtta <Kari....@Fmi.FI>)
[ Well, basically same decoding routine is on
--- 13,58 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+
+ Changes of Elm2.4ME+ PL113a (25) compared with Elm2.4ME+ PL113 (25)
+ -------------------------------------------------------------------
+
+ [ This is out of branch patch. ]
+
+ - "I tried to compile elm2.4.ME+.113 on AIX 5.1 (maintenance
+ level 05) or on AIX 5.2 (maintenance level 02)
+ with gcc version 3.3.2 and got stuck with:
+
+ gmake[1]: Entering directory `noam/elm2.4.ME+.113/src/screen'
+ gcc -I../../hdrs -fpcc-struct-return -fPIC -O -c
+ -o curses.o curses.c
+ curses.c:282: error: parse error before '->' token"
+ Problem reported by: oam G. Nudelman <no...@mail.biu.ac.il>
+ > Fix again compilation problem fixed on PL106 but
+ re-introduced on PL108.
+
+ - "When running 'elm -c alias_name' with Elm 2.4ME+ PL113 on AIX, I get:
+
+ ALIAS VIEW PANIC in aliases.c:340:update_aview
+ >>>bad aliasview magic"
+ Reported by: Noam G. Nudelman <no...@mail.biu.ac.il>
+ - On linux "elm -c xxx" crashes with:
+ SIGNAL PANIC in signals.c:102:segv_signal
+ >>>
+
+ Segment Violation signal!
+ > Moved initialization of aliasview to earlier.
+
+
Changes of Elm2.4ME+ PL113 (25) compared with Elm2.4ME+ PL112 (25)
------------------------------------------------------------------
! SUMMARY: This release changes base64 decode algorithm,
! adds decoder from X-uuencoded content-transfer-encoding
! and adds handling of resizing to many screen.
! - Reimplemented base64_decode() from routine
! of kehlist (first occured on kehlist 1.1.2 9 Jun 1999
Author: Kari E. Hurtta <Kari....@Fmi.FI>)
[ Well, basically same decoding routine is on
Index: elm2.4.ME+.113a-cvs/src/init.c
*** elm2.4.ME+.113/src/init.c 2004-03-16 21:17:43.000000000 +0200
--- elm2.4.ME+.113a-cvs/src/init.c 2004-03-25 20:45:42.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: init.c,v 1.47 2004/03/15 18:09:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.47 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: init.c,v 1.47.4.1 2004/03/25 18:45:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.47.4.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 332,337 ****
--- 332,340 ----
exit(1);
}
}
+
+ *main_aliases = new_aliasview();
+ add_files_to_aview(*main_aliases);
if (check_only) {
DPRINT(Debug,5,
***************
*** 588,596 ****
post_process_charset_options();
- *main_aliases = new_aliasview();
- add_files_to_aview(*main_aliases);
-
if (! mail_only) {
int LINES, COLUMNS;
--- 591,596 ----
Index: elm2.4.ME+.113a-cvs/src/screen/curses.c
*** elm2.4.ME+.113/src/screen/curses.c 2004-03-16 21:17:43.000000000 +0200
--- elm2.4.ME+.113a-cvs/src/screen/curses.c 2004-03-25 20:45:42.000000000 +0200
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: curses.c,v 1.5 2004/03/14 17:05:59 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: curses.c,v 1.5.4.1 2004/03/25 18:45:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.4.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 23,31 ****
#endif /* I_CURSES */
#ifdef I_TERM
#include <term.h> /* Defination for tgetent.h and so on ... */
#undef lines /* ... But undefine lines macro */
#undef columns /* ... But undefine columns macro */
- #endif /* I_TERM */
#ifdef TERMIOS
# include <termios.h>
--- 23,32 ----
#endif /* I_CURSES */
#ifdef I_TERM
#include <term.h> /* Defination for tgetent.h and so on ... */
+ #endif /* I_TERM */
+
#undef lines /* ... But undefine lines macro */
#undef columns /* ... But undefine columns macro */
#ifdef TERMIOS
# include <termios.h>
Is available on ozone.FMI.FI (1)
via anonymous ftp
directory KEH/
files elm-2.4ME+PL115.patch.gz
and elm-2.4ME+115.tar.gz
for a moment (2).
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
files elm-2.4ME+PL115.patch.gz
and elm-2.4ME+115.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL115.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+115.tar.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL115.patch.gz >
and <URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+115.tar.gz >
via WWW.
(1) Was ftp.ozone.fmi.fi but name ftp.ozone.fmi.fi
will probably point to service which no have anonymous ftp
before ozone.fmi.fi retires. So use ozone.fmi.fi
for a moment instead of ftp.ozone.fmi.fi.
(2) NOTE:
It is currently unknown what will be done for ftp.ozone.fmi.fi
and www.ozone.fmi.fi.
Also ozone.fmi.fi will retire.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL115.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Undo Elm2.4ME+ PL113a (25) patch before applying this patch.
SUMMARY: This release changes temporary folder
location on some situations, fixes crash
on c)hange command on alias menu, adds
elmrc options "local-sessionlock-dir" and
"local-sessionlock-use-home", and changes
SIGWINCH handling when waiting for editor.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL114 (25) --------------------------------
For apply patch use command
patch -p1 < this-file
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Index: elm2.4.ME+.115-cvs/hdrs/patchlevel.h
Prereq: 1112000000
*** elm2.4.ME+.114/hdrs/patchlevel.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/hdrs/patchlevel.h 2004-04-12 22:00:04.000000000 +0300
***************
*** 1,8 ****
! #define PATCHLEVEL "114 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.114
*/
! #define LAST_REPORT_TIME 1112000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
#define VERS_DATE "Apr, 2004" /* for elm -v option */
#define WHAT_STRING \
--- 1,8 ----
! #define PATCHLEVEL "115 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.115
*/
! #define LAST_REPORT_TIME 1113000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
#define VERS_DATE "Apr, 2004" /* for elm -v option */
#define WHAT_STRING \
Index: elm2.4.ME+.115-cvs/README.ME+
*** elm2.4.ME+.114/README.ME+ 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/README.ME+ 2004-04-12 22:27:31.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.726 2004/03/30 16:33:06 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.733 2004/04/12 19:27:31 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,22 ****
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
Changes of Elm2.4ME+ PL114 (25) compared with Elm2.4ME+ PL113 (25)
------------------------------------------------------------------
! Undo Elm2.4ME+ PL114a (25) patch before applying this patch.
SUMMARY: This release collects PL113a patch, adds
hack for hidding certain management mail
--- 13,92 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL115 (25) compared with Elm2.4ME+ PL114 (25)
+ ------------------------------------------------------------------
+
+ SuMMARY: This release changes temporary folder
+ location on some situations, fixs crash
+ on c)hange command on alias menu, adds
+ elmrc options "local-sessionlock-dir" and
+ "local-sessionlock-use-home", and changes
+ SIGWICH handling when waiting of editor.
+
+ - If opened local mailbox is on somewhere other
+ location than on spool directory, use "tmpdir" setting
+ from elm.rc for location of temporary file
+ "mbox.{mailbox}-{username}" instead default_temp.
+
+ NOTE: "tmpdir" was already used for temporary file
+ "mbox.{username}@{popserver}" when reading
+ pop mailbox and for temporary file
+ "mbox.{username}@{imapserver}:{folder}" when
+ reading imap folder of mailbox.
+
+ - If opened local mailbox is on spool directory, use
+ (new) "local-sessionlock-dir" setting from elm.rc for
+ location of temporary file "mbox.{mailbox}" instead
+ default_temp.
+
+ - Added new elmrc option "local-sessionlock-dir".
+
+ - "There are two behaviors that I need changed. One
+ is the location of the temporary mbox-USERNAME file.
+ Because our homedirs are nfs mounted to whatever machine
+ we sit down at, having the temporary mbox-USERNAME file
+ located in /tmp (or anywhere else local to the machine
+ we are currently using) is not adequate protection from
+ launching two invocations of elm on two different
+ workstations and having both try and update the same
+ inbox. This usually results in an error message about
+ the mailbox being corrupted when we return
+ to our primary workstation.
+
+ To solve this it works better for us if the mbox-USERNAME
+ file resides in our homedirs. I found no way to set this
+ using the Configure script (can't use $HOME), so I did it
+ by modifying imap.c, localmbx.c, and remote_mbx.c. Also,
+ we prefer that these files be dot files (.mbox-USERNAME) so
+ I also modified sysdefs.SH."
+ Problem noted by: J.C. Webber III <j...@pico.apple.com>
+ > Added new elmrc option "local-sessionlock-use-home".
+ Possible values are "never", "spool", "always" and
+ "non-spool". If this is set to "always", local mailbox
+ opened use home for temporary file. Temporary file
+ is renamed to ".mbox.{mailbox}-{username}" or
+ ".mbox.{mailbox}". If this is set to "spool",
+ temporary file for local mailboxes opened from spool
+ directory are put to home directory. If this is set
+ to "non-spool", temporary file for local mailboxes
+ opened from non-spool directory are put to home directory.
+ Value "never" do not relocate temporary file.
+
+ - Fix crash when changing alias...
+
+ - set SIGWINCH to SIG_DFL only on child (on system_call())
+ so that Elm will call menu_context_resize() when it is
+ waiting child to complete ...
+
+
+ New elmrc options:
+ local-sessionlock-dir
+ local-sessionlock-use-home
+
Changes of Elm2.4ME+ PL114 (25) compared with Elm2.4ME+ PL113 (25)
------------------------------------------------------------------
! Undo Elm2.4ME+ PL113a (25) patch before applying this patch.
SUMMARY: This release collects PL113a patch, adds
hack for hidding certain management mail
***************
*** 3844,3850 ****
with map definition of charset)
NOTE: elmrc options compactcharsets or iso646-charsets
! should newer be set explicit. If you need to redefine
some charset, give definition on file .elm/mime.charsets.
- Quoted username if it contains some special characters.
--- 3914,3920 ----
with map definition of charset)
NOTE: elmrc options compactcharsets or iso646-charsets
! should never be set explicit. If you need to redefine
some charset, give definition on file .elm/mime.charsets.
- Quoted username if it contains some special characters.
***************
*** 9820,9830 ****
--- 9890,9903 ----
keeppassfor PGP (new on Elm 2.4 PL24ME)
local-fast-lookup -
local-fs-charset -
+ local-sessionlock-dir -
+ local-sessionlock-use-home -
lock-in-copy -
lock-folder -
mailer -
map-bin-dir MIME / SYSTEM
map-text-dir MIME / SYSTEM
+ message-hide-hack -
metamail MIME
metamail-mailcaps MIME
menu-display-host -
***************
*** 9855,9860 ****
--- 9928,9935 ----
text-charset MIME
unidata MIME / SYSTEM
use-library -
+ use-base-library -
+ use-connect-library -
usepgppass PGP (new on Elm 2.4 PL24ME)
utf7-encode-optional MIME
Index: elm2.4.ME+.115-cvs/doc/elmrc-info
*** elm2.4.ME+.114/doc/elmrc-info 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/doc/elmrc-info 2004-04-04 19:42:27.000000000 +0300
***************
*** 1,4 ****
! #@(#)$Id: elmrc-info,v 1.59 2004/03/28 13:37:38 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
--- 1,4 ----
! #@(#)$Id: elmrc-info,v 1.61 2004/04/04 16:42:27 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
***************
*** 90,95 ****
--- 90,97 ----
tmpdir
# where to place temporary files, default directory is "/tmp"
+ #
+ # See also: local-sessionlock-dir
receivedmail
# where to save received messages to, default file is "=received"
***************
*** 460,465 ****
--- 462,489 ----
# See also: allow-charset-switching, local-fast-lookup, displaycharset,
# text-charset, page-known-charsets
+ local-sessionlock-dir
+ # If opened local mailbox is on spool directory, this setting tells
+ # to where put temporary file mbox.{mailbox}. ( If opened local
+ # mailbox is not on spool directory, location of temporary file
+ # mbox.{mailbox}-{username} is given on tmpdir variable )
+ #
+ # See also: tmpdir, local-sessionlock-use-home
+
+ local-sessionlock-use-home
+ # This variable controls to where put temporary file when local
+ # mailbox is opened.
+ #
+ # Possible values are:
+ # never Temporray file is put according of
+ # local-sessionlock-dir and tempdir
+ # spool Temporary file for mailbox on spool
+ # is put to home directory
+ # always Temporary file for mailbox is put
+ # to home directory
+ # non-spool Temporary file for mailbox on not in spool
+ # is put to home directory
+
dsn-success
# If TRUE, success Delivery-Status-Notifications are asked by default.
Index: elm2.4.ME+.115-cvs/hdrs/elmlib.h
*** elm2.4.ME+.114/hdrs/elmlib.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/hdrs/elmlib.h 2004-04-04 09:17:17.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmlib.h,v 1.206 2004/03/28 13:37:38 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.206 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmlib.h,v 1.207 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.207 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 811,816 ****
--- 811,821 ----
extern int local_fast_lookup; /* flag: directory listing not needed
for lookup */
+ extern char local_sessionlock_dir[SLEN];
+ extern int local_sessionlock_use_home; /* 0 == newer,
+ 1 == spool
+ 2 == always
+ 3 == non-spool */
extern char raw_local_fs_charset[SLEN]; /* filesystem charset */
extern charset_t local_fs_charset; /* filesystem charset */
extern char local_signature[SLEN];/* local msg signature file */
Index: elm2.4.ME+.115-cvs/hdrs/mbx_imp.h
*** elm2.4.ME+.114/hdrs/mbx_imp.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/hdrs/mbx_imp.h 2004-04-04 09:17:17.000000000 +0300
***************
*** 1,7 ****
! /* $Id: mbx_imp.h,v 1.65 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.65 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: mbx_imp.h,v 1.66 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.66 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 224,229 ****
--- 224,233 ----
extern void zero_remote_account P_((struct remote_account *ra));
extern void free_remote_account P_((struct remote_account *ra));
+ extern void set_remote_tempmbox P_((struct folder_info *fh,
+ struct remote_account *X,
+ char *imap_folder));
+
struct imap_token {
enum token_type { imap_atom, imap_number,
imap_continue, imap_notag,
Index: elm2.4.ME+.115-cvs/hdrs/save_opts.h
*** elm2.4.ME+.114/hdrs/save_opts.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/hdrs/save_opts.h 2004-04-04 19:42:27.000000000 +0300
***************
*** 1,7 ****
! /* @(#)$Id: save_opts.h,v 1.80 2004/03/28 13:37:38 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.80 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* @(#)$Id: save_opts.h,v 1.82 2004/04/04 16:42:27 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.82 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 122,127 ****
--- 122,128 ----
#define ZZZ_DT_MLT(A) DT_MLT,0, { weed: A }, null_option_func
#define ZZZ_DT_SYN(A) DT_SYN,0, { str: A }, null_option_func
#define ZZZ_DT_NUM(A) DT_NUM,0, { num: A }, null_option_func
+ #define ZZZ_DT_NUM_(x,A) DT_NUM,x, { num: A }, null_option_func
#define ZZZ_DT_LONG(A) DT_NUM,0, { l_num: A },null_option_func
#ifdef USE_PGP
#define ZZZ_DT_PGPVER(A) DT_PGPVER,0, { pgpver: A },null_option_func
***************
*** 163,168 ****
--- 164,170 ----
#define ZZZ_DT_MLT(A) DT_MLT,0,(char *)A, null_option_func
#define ZZZ_DT_SYN(A) DT_SYN,0,A, null_option_func
#define ZZZ_DT_NUM(A) DT_NUM,0,(char *)A, null_option_func
+ #define ZZZ_DT_NUM_(x,A) DT_NUM,x,(char *)A, null_option_func
#define ZZZ_DT_LONG(A) DT_NUM,0,(char *)A, null_option_func
#ifdef USE_PGP
#define ZZZ_DT_PGPVER(A) DT_PGPVER,0,(char *)A,null_option_func
***************
*** 234,239 ****
--- 236,245 ----
static char * hide_hacks[] = { "none", "FOLDER INTERNAL DATA", NULL };
static enumerate_list HIDE_HACK = { 2, &(hide_hacks[0]) };
+ static char * LSL_list[] = { "never", "spool", "always", "non-spool", NULL };
+ static enumerate_list local_sessionlock_list = { 4, &(LSL_list[0]) };
+
+
ZZZ_SAVE_TYPE save_info_data[] = {
{"add-in-reply-to-phrase", -1L,ZZZ_DT_BOL(&add_irt_phrase), 0, NULL},
{"add-sender", -1L,ZZZ_DT_BOL_(FL_SYS,&add_sender_header),
***************
*** 356,361 ****
--- 362,372 ----
{"local-fast-lookup", -1L,ZZZ_DT_BOL(&local_fast_lookup), 0, NULL},
{"local-fs-charset", -1L,ZZZ_DT_STR(raw_local_fs_charset),
sizeof raw_local_fs_charset, NULL},
+ {"local-sessionlock-dir", -1L, ZZZ_DT_STR_(FL_SYS,local_sessionlock_dir),
+ sizeof local_sessionlock_dir, NULL},
+ {"local-sessionlock-use-home", -1L, ZZZ_DT_NUM_(FL_SYS,
+ &local_sessionlock_use_home),
+ 0, &local_sessionlock_list },
{"localsignature", -1L,ZZZ_DT_STR(raw_local_signature),
sizeof raw_local_signature, NULL},
#ifdef SYSCALL_LOCKING
Index: elm2.4.ME+.115-cvs/hdrs/sysdefs.SH
*** elm2.4.ME+.114/hdrs/sysdefs.SH 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/hdrs/sysdefs.SH 2004-04-04 09:17:17.000000000 +0300
***************
*** 22,30 ****
echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
! /* $Id: sysdefs.SH,v 1.22 2004/03/27 18:31:37 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.22 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 22,30 ----
echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
! /* $Id: sysdefs.SH,v 1.23 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 66,77 ****
#define HOSTDOMFILE "$etc/domain"
- /** where to put the output of the elm -d command... (in home dir) **/
-
#define default_temp "$tmpdir/"
#define temp_file "snd."
#define temp_form_file "form."
! #define temp_mbox "mbox."
#define temp_print "print."
#define temp_edit "elm-edit"
/* #define temp_uuname "uuname." */
--- 66,75 ----
#define HOSTDOMFILE "$etc/domain"
#define default_temp "$tmpdir/"
#define temp_file "snd."
#define temp_form_file "form."
! /* #define temp_mbox "mbox." */
#define temp_print "print."
#define temp_edit "elm-edit"
/* #define temp_uuname "uuname." */
Index: elm2.4.ME+.115-cvs/lib/imap.c
*** elm2.4.ME+.114/lib/imap.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/lib/imap.c 2004-04-04 09:17:17.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: imap.c,v 1.103 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.103 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: imap.c,v 1.104 2004/04/04 06:17:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.104 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 4227,4238 ****
Y = str;
else
Y++;
! elm_sfprintf(res-> cur_tempfolder,
! sizeof res -> cur_tempfolder,
! FRM("%s%s%s@%s:%s"),
! temp_dir,temp_mbox,
! dir->a.imap_browser.Ch->C.username,
! dir->a.imap_browser.Ch->C.host,Y);
if (dir->a.imap_browser.Ch->state == CON_logged) {
--- 4227,4238 ----
Y = str;
else
Y++;
!
! /* IMAP temporary mailboxs are always put to
! temp_dir */
! set_remote_tempmbox(res,
! & (dir->a.imap_browser.Ch->C),
! Y);
if (dir->a.imap_browser.Ch->state == CON_logged) {
Index: elm2.4.ME+.115-cvs/lib/localmbx.c
*** elm2.4.ME+.114/lib/localmbx.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/lib/localmbx.c 2004-04-04 09:17:17.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.63 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.63 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.64 2004/04/04 06:17:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.64 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 2101,2112 ****
int tempfn_size;
{
/** create in tempfn the name of the temp file corresponding to
! mailfile mbox.
**/
char *cp,*ptr;
struct stat buf; /* stat command */
int in_spool = 0;
if (stat(mbox,&buf) < 0) {
DPRINT(Debug,8,(&Debug,
--- 2101,2117 ----
int tempfn_size;
{
/** create in tempfn the name of the temp file corresponding to
! mailfile mbox. Used to session lock also.
**/
char *cp,*ptr;
struct stat buf; /* stat command */
int in_spool = 0;
+ char *Y = NULL, *Y1 = "";
+
+ char * prefix = "mbox.";
+
+ int L;
if (stat(mbox,&buf) < 0) {
DPRINT(Debug,8,(&Debug,
***************
*** 2117,2135 ****
in_spool = in_directory(&buf,mbox,mailhome);
DPRINT(Debug,11,(&Debug,
! "mk_temp_mail_fn: in_spool=%d, mbox=%s\n",
! in_spool,mbox));
!
! if (strlen(default_temp) + strlen(temp_mbox) > tempfn_size-1) {
DPRINT(Debug,1,(&Debug,
"mk_temp_mail_fn: Too long path!\n"));
strfcpy(tempfn,"TEMP_MBOX", tempfn_size);
return;
}
elm_sfprintf(tempfn, tempfn_size,
! FRM("%s%s"), default_temp, temp_mbox);
!
if((cp = rindex(mbox, '/')) != NULL) {
cp++;
if (strcmp(cp, "mbox") == 0 || strcmp(cp, "mailbox") == 0 ||
--- 2122,2180 ----
in_spool = in_directory(&buf,mbox,mailhome);
DPRINT(Debug,11,(&Debug,
! "mk_temp_mail_fn: in_spool=%d, mbox=%s, local_sessionlock_use_home=%d\n",
! in_spool,mbox,local_sessionlock_use_home));
!
! /* We need not use default_temp or local_sessionlock_dir
! if file is not on spool area
! */
!
!
! switch (local_sessionlock_use_home) {
! case 0: /* newer */
! default:
! Y = in_spool ? local_sessionlock_dir : temp_dir;
! break;
! case 1: /* spool */
! Y = in_spool ? home : temp_dir;
! prefix = in_spool ? ".mbox." : "mbox.";
! break;
! case 2: /* always */
! Y = home;
! prefix = ".mbox.";
! break;
! case 3: /* non-spool */
! Y = in_spool ? local_sessionlock_dir : home;
! prefix = in_spool ? "mbox." : ".mbox.";
! break;
! }
!
! L = strlen(Y);
!
! DPRINT(Debug,11,(&Debug,
! " => temp dir=%s prefix=%s\n",Y,prefix));
!
! if (strlen(Y) + strlen(prefix) > tempfn_size-2) {
DPRINT(Debug,1,(&Debug,
"mk_temp_mail_fn: Too long path!\n"));
strfcpy(tempfn,"TEMP_MBOX", tempfn_size);
return;
}
+
+ if (L < 1) {
+ DPRINT(Debug,1,(&Debug,
+ "mk_temp_mail_fn: Dir empty!!\n"));
+ strfcpy(tempfn,"TEMP_MBOX", tempfn_size);
+ return;
+ }
+
+ if (Y[L-1] != '/')
+ Y1 = "/";
elm_sfprintf(tempfn, tempfn_size,
! FRM("%s%s%s"), Y, Y1, prefix);
!
!
if((cp = rindex(mbox, '/')) != NULL) {
cp++;
if (strcmp(cp, "mbox") == 0 || strcmp(cp, "mailbox") == 0 ||
Index: elm2.4.ME+.115-cvs/lib/read_rc.c
*** elm2.4.ME+.114/lib/read_rc.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/lib/read_rc.c 2004-04-04 09:17:18.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.132 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.132 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.133 2004/04/04 06:17:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.133 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 235,240 ****
--- 235,246 ----
int local_fast_lookup = 0; /* flag: directory listing not needed
for lookup */
+ char local_sessionlock_dir[SLEN] = default_temp;
+ int local_sessionlock_use_home; /* 0 == newer,
+ 1 == spool
+ 2 == always
+ 3 == non-spool
+ */
char raw_local_fs_charset[SLEN] = "SYSTEM"; /* filesystem charset */
charset_t local_fs_charset = NULL; /* filesystem charset */
***************
*** 2018,2028 ****
}
}
- #if 0
- if (x == 0) {
- } else
- prev_type = x;
- #endif
}
}
--- 2024,2029 ----
Index: elm2.4.ME+.115-cvs/lib/remote_mbx.c
*** elm2.4.ME+.114/lib/remote_mbx.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115-cvs/lib/remote_mbx.c 2004-04-04 09:17:18.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.48 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.48 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.49 2004/04/04 06:17:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 626,631 ****
--- 626,665 ----
return ret;
}
+ void set_remote_tempmbox P_((struct folder_info *fh,
+ struct remote_account *X,
+ char *imap_folder));
+ void set_remote_tempmbox(fh,X,imap_folder)
+ struct folder_info *fh;
+ struct remote_account *X;
+ char *imap_folder;
+ {
+ char * prefix = "mbox.";
+
+ /* In here we can use temp_dir instead of default_temp because
+ * that file does not act as session lock ...
+ */
+
+ if (imap_folder)
+
+ elm_sfprintf(fh-> cur_tempfolder,
+ sizeof fh -> cur_tempfolder,
+ FRM("%s%s%s@%s:%s"),
+ temp_dir,prefix,
+ X->username,
+ X->host,imap_folder);
+ else
+ elm_sfprintf(fh-> cur_tempfolder,
+ sizeof fh -> cur_tempfolder,
+ FRM("%s%s%s@%s"),
+ temp_dir,prefix,
+ X->username,X->host);
+
+ DPRINT(Debug,12,(&Debug,
+ "set_remote_tempmbox: cur_tempfolder=%s\n",
+ fh-> cur_tempfolder));
+ }
+
/* May free X (if succeed) or copy */
int make_remote_mbox(fh,X,se,rest,rewrite)
struct folder_info *fh;
***************
*** 759,765 ****
lib_error(CATGETS(elm_msg_cat, MeSet,MeUnknownRemoteMailboxType,
"Remote mailbox type of %S unknown"),
fh->cur_folder_disp);
! status = 0;
}
}
--- 793,799 ----
lib_error(CATGETS(elm_msg_cat, MeSet,MeUnknownRemoteMailboxType,
"Remote mailbox type of %S unknown"),
fh->cur_folder_disp);
! status = NULL;
}
}
***************
*** 771,788 ****
char *Y = strrchr(imap_only,'/');
if (!Y)
Y = imap_only;
! elm_sfprintf(fh-> cur_tempfolder,
! sizeof fh -> cur_tempfolder,
! FRM("%s%s%s@%s:%s"),
! temp_dir,temp_mbox,
! status->username,
! status->host,Y+1);
} else
! elm_sfprintf(fh-> cur_tempfolder,
! sizeof fh -> cur_tempfolder,
! FRM("%s%s%s@%s"),
! temp_dir,temp_mbox,
! status->username,status->host);
}
fail:
--- 805,816 ----
char *Y = strrchr(imap_only,'/');
if (!Y)
Y = imap_only;
!
! set_remote_tempmbox(fh,status,Y+1);
!
} else
! set_remote_tempmbox(fh,status,NULL);
!
}
fail:
Index: elm2.4.ME+.115-cvs/src/alias.c
*** elm2.4.ME+.114/src/alias.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115-cvs/src/alias.c 2004-04-07 20:42:58.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: alias.c,v 1.34 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.34 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: alias.c,v 1.35 2004/04/07 17:42:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 472,484 ****
lib_error(CATGETS(elm_msg_cat, AliasesSet,
AliasesNoAddressSpec,
"No address specified!"));
- free(buffer);
return(0);
}
} while (check_address(address1) == -1);
clear_error(); /* Just in case */
- free(buffer);
}
if (!is_group && strchr(address1,',') != NULL)
--- 472,482 ----
Index: elm2.4.ME+.115-cvs/src/syscall.c
*** elm2.4.ME+.114/src/syscall.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115-cvs/src/syscall.c 2004-04-12 21:40:52.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: syscall.c,v 1.32 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.32 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: syscall.c,v 1.33 2004/04/12 18:40:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 176,182 ****
VOLATILE int iteration;
/* figure out what shell we are using here */
S__ status;
! register SIGHAND_TYPE (*istat)(), (*qstat)(), (*wstat)();
#ifdef SIGTSTP
register SIGHAND_TYPE (*oldstop)(), (*oldstart)();
#endif
--- 176,182 ----
VOLATILE int iteration;
/* figure out what shell we are using here */
S__ status;
! register SIGHAND_TYPE (*istat)(), (*qstat)();
#ifdef SIGTSTP
register SIGHAND_TYPE (*oldstop)(), (*oldstart)();
#endif
***************
*** 219,227 ****
istat = signal(SIGINT, SIG_IGN);
qstat = signal(SIGQUIT, SIG_IGN);
! #ifdef SIGWINCH
! wstat = signal(SIGWINCH, SIG_DFL);
! #endif
#ifdef SIGTSTP
oldstop = signal(SIGTSTP, SIG_DFL);
oldstart = signal(SIGCONT, SIG_DFL);
--- 219,229 ----
istat = signal(SIGINT, SIG_IGN);
qstat = signal(SIGQUIT, SIG_IGN);
!
! /* set SIGWINCH to SIG_DFL only on chlid
! so that Elm will call menu_context_resize()
! when it is waiting child to complete ...
! */
#ifdef SIGTSTP
oldstop = signal(SIGTSTP, SIG_DFL);
oldstart = signal(SIGCONT, SIG_DFL);
***************
*** 275,280 ****
--- 277,291 ----
_exit(127);
}
+ #ifdef SIGWINCH
+ /* set SIGWINCH to SIG_DFL only on chlid
+ so that Elm will call menu_context_resize()
+ when it is waiting child to complete ...
+ */
+
+ signal(SIGWINCH, SIG_DFL);
+ #endif
+
set_child_signals(options);
set_child_env(options);
***************
*** 313,321 ****
(void) signal(SIGINT, istat);
(void) signal(SIGQUIT, qstat);
- #ifdef SIGWINCH
- (void) signal(SIGWINCH, wstat);
- #endif
#ifdef SIGTSTP
(void) signal(SIGTSTP, oldstop);
(void) signal(SIGCONT, oldstart);
--- 324,329 ----
Elm 2.4ME+ PL115a (25) -patch
Is available on ozone.FMI.FI (1)
via anonymous ftp
directory KEH/
file elm-2.4ME+PL115a.patch.gz
for a moment (2).
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
file elm-2.4ME+PL115.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL115.patch.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL115.patch.gz >
via WWW.
(1) Was ftp.ozone.fmi.fi but name ftp.ozone.fmi.fi
will probably point to service which no have anonymous ftp
before ozone.fmi.fi retires. So use ozone.fmi.fi
for a moment instead of ftp.ozone.fmi.fi.
(2) NOTE:
It is currently unknown what will be done for ftp.ozone.fmi.fi
and www.ozone.fmi.fi.
Also ozone.fmi.fi will retire.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL115.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
SUMMARY: This patch fixes handling of unexpected return
value of nl_langinfo(CODESET) on AIX, fixes
value check of "internal-mailcaps" and
"metamail-mailcaps" elmrc variables and
fixes some prompts on situation where leaving
of folder fails.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL115 (25) --------------------------------
For apply patch use command
patch -p1 < this-file
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Index: elm2.4.ME+.115a-cvs/hdrs/patchlevel.h
Prereq: 1113000000
*** elm2.4.ME+.115/hdrs/patchlevel.h 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.115a-cvs/hdrs/patchlevel.h 2004-04-23 19:44:32.000000000 +0300
***************
*** 1,8 ****
! #define PATCHLEVEL "115 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.115
*/
! #define LAST_REPORT_TIME 1113000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
#define VERS_DATE "Apr, 2004" /* for elm -v option */
#define WHAT_STRING \
--- 1,8 ----
! #define PATCHLEVEL "115a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.115
*/
! #define LAST_REPORT_TIME 1114000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
#define VERS_DATE "Apr, 2004" /* for elm -v option */
#define WHAT_STRING \
Index: elm2.4.ME+.115a-cvs/README.ME+
*** elm2.4.ME+.115/README.ME+ 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.115a-cvs/README.ME+ 2004-04-24 15:30:01.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.733 2004/04/12 19:27:31 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.746 2004/04/24 12:30:01 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,30 ****
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
Changes of Elm2.4ME+ PL115 (25) compared with Elm2.4ME+ PL114 (25)
------------------------------------------------------------------
! SuMMARY: This release changes temporary folder
! location on some situations, fixs crash
on c)hange command on alias menu, adds
elmrc options "local-sessionlock-dir" and
"local-sessionlock-use-home", and changes
! SIGWICH handling when waiting of editor.
! - If opened local mailbox is on somewhere other
! location than on spool directory, use "tmpdir" setting
from elm.rc for location of temporary file
"mbox.{mailbox}-{username}" instead default_temp.
--- 13,75 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL115a (25) compared with Elm2.4ME+ PL115 (25)
+ -------------------------------------------------------------------
+
+ [ This patch is branch from the main line. ]
+
+ SUMMARY: This patch fixes handling of unexpected return
+ value of nl_langinfo(CODESET) on AIX, fixes
+ value check of "internal-mailcaps" and
+ "metamail-mailcaps" elmrc variables and
+ fixes some prompts on situation where leaving
+ of folder fails.
+
+ - " When installing ELM (on AIX 5L), I get the following message:
+
+ | Elm: Unable to map en_US locale (LC_CTYPE) to MIME charset.
+ | Codeset name ISO8859-1 was unknown. Treating ISO8859-1 as MIME name.
+ | Check /usr/local/lib/elm/elm.mimecharsets or
+ | noam/.elm/mime.charsets
+ | WARNING: Locale en_US (charset ISO8859-1) is unsupported, will cause problems!
+ | Problem with locale (system character set)! Elm ME+ will
+ | behave erratically."
+ Problem noted by: Noam G. Nudelman <no...@mail.biu.ac.il>
+
+ - dt_PATH_print_value() was not printing always empty values
+ correctly.
+
+ - fix test on expand_dt_path(). Specially non-file
+ values on "internal-mailcaps" and "metamail-mailcaps" was
+ not giving error message.
+
+ - Prompt "Failed to leave folder: Try to change again ?
+ [P]anic" did not worked. Added new routine prompt_letter()
+
+ - Changed prompt "Failed to leave folder: Try to quit again ?"
+
+ - Changed prompt ""received" folder not available, continue? (y/n) n"
+ - Also changed default answer to be yes on that prompt
+ (that is usefull only when received folder is remote,
+ but that error may occur also is somebody is set
+ receivedmail = /invalid
+ )
+
+ - Fix some possible compilation problems with traditional
+ C compilers (as opposed to ANSI C ompilers)
+
Changes of Elm2.4ME+ PL115 (25) compared with Elm2.4ME+ PL114 (25)
------------------------------------------------------------------
! SUMMARY: This release changes temporary folder
! location on some situations, fixes crash
on c)hange command on alias menu, adds
elmrc options "local-sessionlock-dir" and
"local-sessionlock-use-home", and changes
! SIGWINCH handling when waiting for editor.
! - If opened local mailbox is on somewhere else
! than on spool directory, use "tmpdir" setting
from elm.rc for location of temporary file
"mbox.{mailbox}-{username}" instead default_temp.
***************
*** 78,84 ****
so that Elm will call menu_context_resize() when it is
waiting child to complete ...
-
New elmrc options:
local-sessionlock-dir
local-sessionlock-use-home
--- 123,128 ----
***************
*** 169,175 ****
Changes of Elm2.4ME+ PL113a (25) compared with Elm2.4ME+ PL113 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
- "I tried to compile elm2.4.ME+.113 on AIX 5.1 (maintenance
level 05) or on AIX 5.2 (maintenance level 02)
--- 213,219 ----
Changes of Elm2.4ME+ PL113a (25) compared with Elm2.4ME+ PL113 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "I tried to compile elm2.4.ME+.113 on AIX 5.1 (maintenance
level 05) or on AIX 5.2 (maintenance level 02)
***************
*** 338,344 ****
Changes of Elm2.4ME+ PL111b (25) compared with Elm2.4ME+ PL111a (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix crash on parse failure on command
"View digest as mailbox".
--- 382,388 ----
Changes of Elm2.4ME+ PL111b (25) compared with Elm2.4ME+ PL111a (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix crash on parse failure on command
"View digest as mailbox".
***************
*** 346,352 ****
Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes crash caused by 'U' command
on aliases menu.
--- 390,396 ----
Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes crash caused by 'U' command
on aliases menu.
***************
*** 429,435 ****
Changes of Elm2.4ME+ PL110a (25) compared with Elm2.4ME+ PL110 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes case, where output of pgp/gpg was
not shown sometimes (on non-MIME messages),
--- 473,479 ----
Changes of Elm2.4ME+ PL110a (25) compared with Elm2.4ME+ PL110 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes case, where output of pgp/gpg was
not shown sometimes (on non-MIME messages),
***************
*** 569,575 ****
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes segmentation violation on
l)imit command and problem where user alias
--- 613,619 ----
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes segmentation violation on
l)imit command and problem where user alias
***************
*** 585,591 ****
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
--- 629,635 ----
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
***************
*** 814,820 ****
Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch makes some fixes for elmregister,
and elm's search command ('/').
--- 858,864 ----
Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch makes some fixes for elmregister,
and elm's search command ('/').
***************
*** 929,935 ****
Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch corrects page when returning
from o)ptions screen and fixes some other
--- 973,979 ----
Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch corrects page when returning
from o)ptions screen and fixes some other
***************
*** 1242,1248 ****
Changes of Elm2.4ME+ PL102a (25) compared with Elm2.4ME+ PL102 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes temp file leak
when forwarding with mimeforward = YES and
--- 1286,1292 ----
Changes of Elm2.4ME+ PL102a (25) compared with Elm2.4ME+ PL102 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes temp file leak
when forwarding with mimeforward = YES and
***************
*** 1571,1577 ****
Changes of Elm2.4ME+ PL101c (25) compared with Elm2.4ME+ PL101b (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes segmentation fault, when
when viewing attachment with unxepected
--- 1615,1621 ----
Changes of Elm2.4ME+ PL101c (25) compared with Elm2.4ME+ PL101b (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes segmentation fault, when
when viewing attachment with unxepected
***************
*** 1784,1790 ****
Changes of Elm2.4ME+ PL101b (25) compared with Elm2.4ME+ PL101a (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch makes possible to set
incoming-mailbox = $USER@imap-sever on
--- 1828,1834 ----
Changes of Elm2.4ME+ PL101b (25) compared with Elm2.4ME+ PL101a (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch makes possible to set
incoming-mailbox = $USER@imap-sever on
***************
*** 1832,1838 ****
Changes of Elm2.4ME+ PL101a (25) compared with Elm2.4ME+ PL101 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes crash on internal mailcap parser
and on header editing screen.
--- 1876,1882 ----
Changes of Elm2.4ME+ PL101a (25) compared with Elm2.4ME+ PL101 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes crash on internal mailcap parser
and on header editing screen.
***************
*** 2014,2020 ****
Changes of Elm2.4ME+ PL100a (25) compared with Elm2.4ME+ PL100 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Configure did not generated mapping for iso_8859_1
locale (on SunOS).
--- 2058,2064 ----
Changes of Elm2.4ME+ PL100a (25) compared with Elm2.4ME+ PL100 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Configure did not generated mapping for iso_8859_1
locale (on SunOS).
***************
*** 2341,2347 ****
Changes of Elm2.4ME+ PL99f (25) compared with Elm2.4ME+ PL99e (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix panic on header editing screen on In-Reply-To:
STRING PANIC in cs_binary.c:1043:cs_give_unicode_from_ascii
--- 2385,2391 ----
Changes of Elm2.4ME+ PL99f (25) compared with Elm2.4ME+ PL99e (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix panic on header editing screen on In-Reply-To:
STRING PANIC in cs_binary.c:1043:cs_give_unicode_from_ascii
***************
*** 2366,2372 ****
Changes of Elm2.4ME+ PL99e (25) compared with Elm2.4ME+ PL99d (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Trying send pgp2 (signed or encrypted) message
was causing crash.
--- 2410,2416 ----
Changes of Elm2.4ME+ PL99e (25) compared with Elm2.4ME+ PL99d (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Trying send pgp2 (signed or encrypted) message
was causing crash.
***************
*** 2394,2400 ****
Changes of Elm2.4ME+ PL99d (25) compared with Elm2.4ME+ PL99c (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- "I'm working on updating the Debian elm-me+ package; a
number of patches have accumulated over the years, and
--- 2438,2444 ----
Changes of Elm2.4ME+ PL99d (25) compared with Elm2.4ME+ PL99c (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "I'm working on updating the Debian elm-me+ package; a
number of patches have accumulated over the years, and
***************
*** 2475,2481 ****
Changes of Elm2.4ME+ PL99c (25) compared with Elm2.4ME+ PL99b (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Handling of multipart/signed and
multipart/encrypted was broken Elm2.4ME+ PL98 (25)
--- 2519,2525 ----
Changes of Elm2.4ME+ PL99c (25) compared with Elm2.4ME+ PL99b (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Handling of multipart/signed and
multipart/encrypted was broken Elm2.4ME+ PL98 (25)
***************
*** 2484,2490 ****
Changes of Elm2.4ME+ PL99b (25) compared with Elm2.4ME+ PL99a (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix panic with ISO-2022-JP text with message
STRING PANIC in cs_iso2022.c:1757:add_char_stream
--- 2528,2534 ----
Changes of Elm2.4ME+ PL99b (25) compared with Elm2.4ME+ PL99a (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix panic with ISO-2022-JP text with message
STRING PANIC in cs_iso2022.c:1757:add_char_stream
***************
*** 2495,2501 ****
Changes of Elm2.4ME+ PL99a (25) compared with Elm2.4ME+ PL99 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- There should not be Return-Path header visible
on Pre-Send screen on Beginner user level.
--- 2539,2545 ----
Changes of Elm2.4ME+ PL99a (25) compared with Elm2.4ME+ PL99 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- There should not be Return-Path header visible
on Pre-Send screen on Beginner user level.
***************
*** 2744,2750 ****
Changes of Elm2.4ME+ PL98c (25) compared with Elm2.4ME+ PL98b (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- copy_message_2() lost header name when folding happeded
immediately after header name (that specially was visible
--- 2788,2794 ----
Changes of Elm2.4ME+ PL98c (25) compared with Elm2.4ME+ PL98b (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- copy_message_2() lost header name when folding happeded
immediately after header name (that specially was visible
***************
*** 2767,2773 ****
Changes of Elm2.4ME+ PL98b (25) compared with Elm2.4ME+ PL98a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Our non-standard headers was ignored:
* X-ELM-OSV: hdr-charset=xxxx was ignored
--- 2811,2817 ----
Changes of Elm2.4ME+ PL98b (25) compared with Elm2.4ME+ PL98a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Our non-standard headers was ignored:
* X-ELM-OSV: hdr-charset=xxxx was ignored
***************
*** 2776,2782 ****
Changes of Elm2.4ME+ PL98a (25) compared with Elm2.4ME+ PL98 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- "since a number of releases frm doesn't detect status
new correctly for me (Linux 2.4.18, elm2.4.ME+.98)."
--- 2820,2826 ----
Changes of Elm2.4ME+ PL98a (25) compared with Elm2.4ME+ PL98 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "since a number of releases frm doesn't detect status
new correctly for me (Linux 2.4.18, elm2.4.ME+.98)."
***************
*** 2969,2975 ****
Changes of Elm2.4ME+ PL97d (25) compared with Elm2.4ME+ PL97c (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- If there libintl.so (from GNU gettext) installed
--- 3013,3019 ----
Changes of Elm2.4ME+ PL97d (25) compared with Elm2.4ME+ PL97c (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- If there libintl.so (from GNU gettext) installed
***************
*** 3002,3008 ****
Changes of Elm2.4ME+ PL97c (25) compared with Elm2.4ME+ PL97b (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Wrong answer to question "Any additional libraries"
causes failure on "Trying locate terminfo routines"
--- 3046,3052 ----
Changes of Elm2.4ME+ PL97c (25) compared with Elm2.4ME+ PL97b (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Wrong answer to question "Any additional libraries"
causes failure on "Trying locate terminfo routines"
***************
*** 3052,3058 ****
Changes of Elm2.4ME+ PL97b (25) compared with Elm2.4ME+ PL97a (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- binary flag was incorrectly set true (result on change
on Elm2.4ME+ PL97 (25)). That caused that EOLN mail headers
--- 3096,3102 ----
Changes of Elm2.4ME+ PL97b (25) compared with Elm2.4ME+ PL97a (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- binary flag was incorrectly set true (result on change
on Elm2.4ME+ PL97 (25)). That caused that EOLN mail headers
***************
*** 3065,3071 ****
Changes of Elm2.4ME+ PL97a (25) compared with Elm2.4ME+ PL97 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix state_printf panic "Embedded newlines are not supported"
on case when there is on ~/.elm/elmheaders
--- 3109,3115 ----
Changes of Elm2.4ME+ PL97a (25) compared with Elm2.4ME+ PL97 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix state_printf panic "Embedded newlines are not supported"
on case when there is on ~/.elm/elmheaders
***************
*** 3195,3201 ****
Changes of Elm2.4ME+ PL96b (25) compared with Elm2.4ME+ PL96a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Test whatever make sets $(MAKE)
--- 3239,3245 ----
Changes of Elm2.4ME+ PL96b (25) compared with Elm2.4ME+ PL96a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Test whatever make sets $(MAKE)
***************
*** 3225,3231 ****
Changes of Elm2.4ME+ PL96a (25) compared with Elm2.4ME+ PL96 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- Metamail can not cope with CRLF
Problem noted by: Konstantinos Konstantinides <k...@corp.cirrus.com>
--- 3269,3275 ----
Changes of Elm2.4ME+ PL96a (25) compared with Elm2.4ME+ PL96 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Metamail can not cope with CRLF
Problem noted by: Konstantinos Konstantinides <k...@corp.cirrus.com>
***************
*** 3424,3430 ****
Changes of Elm2.4ME+ PL95c (25) compared with Elm2.4ME+ PL95b (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Do not use commands "mail" or "mailx" as mailer.
- Allow specify "none" as mailer on configuration time
--- 3468,3474 ----
Changes of Elm2.4ME+ PL95c (25) compared with Elm2.4ME+ PL95b (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Do not use commands "mail" or "mailx" as mailer.
- Allow specify "none" as mailer on configuration time
***************
*** 3440,3446 ****
Changes of Elm2.4ME+ PL95b (25) compared with Elm2.4ME+ PL95a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- "Using PL95 with the two patches you send me, I encountered the
following problem when searching for a string in a mail message:
--- 3484,3490 ----
Changes of Elm2.4ME+ PL95b (25) compared with Elm2.4ME+ PL95a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Using PL95 with the two patches you send me, I encountered the
following problem when searching for a string in a mail message:
***************
*** 3458,3464 ****
Changes of Elm2.4ME+ PL95a (25) compared with Elm2.4ME+ PL95 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- "Following please find the error when trying to
compile elm2.4.ME+.95 on AIX 4.3.3 (maintenance level 09):
--- 3502,3508 ----
Changes of Elm2.4ME+ PL95a (25) compared with Elm2.4ME+ PL95 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Following please find the error when trying to
compile elm2.4.ME+.95 on AIX 4.3.3 (maintenance level 09):
***************
*** 3766,3772 ****
Changes of Elm2.4ME+ PL94a (25) compared with Elm2.4ME+ PL94 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- When sending mail, saving copy of mail to folder
failed when
--- 3810,3816 ----
Changes of Elm2.4ME+ PL94a (25) compared with Elm2.4ME+ PL94 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- When sending mail, saving copy of mail to folder
failed when
***************
*** 3970,3976 ****
Changes of Elm2.4ME+ PL92a (25) compared with Elm2.4ME+ PL92 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- "Until I did this I could not get it to build correctly on
solaris 8 (even if I didn't want to use the sharedlibs --
--- 4014,4020 ----
Changes of Elm2.4ME+ PL92a (25) compared with Elm2.4ME+ PL92 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Until I did this I could not get it to build correctly on
solaris 8 (even if I didn't want to use the sharedlibs --
***************
*** 4206,4212 ****
Changes of Elm2.4ME+ PL90a (25) compared with Elm2.4ME+ PL90
------------------------------------------------------------
! [ This is out of branch patch. ]
- "Running Elm 2.4ME+86, if I displayed the first 80% of
a message using the built-in text browser, pressing
--- 4250,4256 ----
Changes of Elm2.4ME+ PL90a (25) compared with Elm2.4ME+ PL90
------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Running Elm 2.4ME+86, if I displayed the first 80% of
a message using the built-in text browser, pressing
***************
*** 4346,4352 ****
Changes of Elm2.4ME+ PL88a (25) compared with Elm2.4ME+ PL88 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- In newmail.c and from.c utilities header_charset
was not set.
--- 4390,4396 ----
Changes of Elm2.4ME+ PL88a (25) compared with Elm2.4ME+ PL88 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- In newmail.c and from.c utilities header_charset
was not set.
***************
*** 4614,4620 ****
Changes of Elm2.4ME+ PL84a (25) compared with Elm2.4ME+ PL84 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- 'struct string * ret' was incorrectly static on
browser_descend_imap(). That caused Elm to crash,
--- 4658,4664 ----
Changes of Elm2.4ME+ PL84a (25) compared with Elm2.4ME+ PL84 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- 'struct string * ret' was incorrectly static on
browser_descend_imap(). That caused Elm to crash,
***************
*** 5357,5363 ****
Changes of Elm2.4ME+ PL76a (25) compared with Elm2.4ME+ PL76 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- On PL73 [encode] was producing (by mistake)
text/X-ELM-encode instead of application/X-ELM-encode as
--- 5401,5407 ----
Changes of Elm2.4ME+ PL76a (25) compared with Elm2.4ME+ PL76 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- On PL73 [encode] was producing (by mistake)
text/X-ELM-encode instead of application/X-ELM-encode as
***************
*** 6716,6722 ****
Changes of Elm2.4ME+ PL53Y (25) compared with Elm2.4ME+ PL53 (25)
---------------------------------------------------------------
! [ This is out of branch patch. ]
- Test that year >= 0 instead of year > 0 on
cvt_yearstr_to_yearnum(). That affects if
--- 6760,6766 ----
Changes of Elm2.4ME+ PL53Y (25) compared with Elm2.4ME+ PL53 (25)
---------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Test that year >= 0 instead of year > 0 on
cvt_yearstr_to_yearnum(). That affects if
***************
*** 6868,6874 ****
Changes of Elm2.4ME+ PL50s (25) compared with Elm2.4ME+ PL50 (25)
--------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix incorrect bound checking on putc_so_string()
(state.c)
--- 6912,6918 ----
Changes of Elm2.4ME+ PL50s (25) compared with Elm2.4ME+ PL50 (25)
--------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix incorrect bound checking on putc_so_string()
(state.c)
***************
*** 7509,7515 ****
Changes of Elm2.4ME+ PL31H (25) compared with Elm2.4ME+ PL31 (25)
---------------------------------------------------------------
! [ This is out of branch patch. ]
- Incorrect Content-length: -header was causing corruption
of folders.
--- 7553,7559 ----
Changes of Elm2.4ME+ PL31H (25) compared with Elm2.4ME+ PL31 (25)
---------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Incorrect Content-length: -header was causing corruption
of folders.
Index: elm2.4.ME+.115a-cvs/hdrs/mbx_imp.h
*** elm2.4.ME+.115/hdrs/mbx_imp.h 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.115a-cvs/hdrs/mbx_imp.h 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! /* $Id: mbx_imp.h,v 1.66 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.66 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: mbx_imp.h,v 1.67 2004/04/24 12:30:02 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.67 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 749,758 ****
#define STFLAG_is_submission 0x0400
#define STFLAG_is_smtp 0x0800
! extern const struct service_type * IMAP_SERVICE;
! extern const struct service_type * POP_SERVICE;
! extern const struct service_type * SUBMISSION_SERVICE;
! extern const struct service_type * SMTP_SERVICE;
extern struct service_entry {
int flags;
--- 749,758 ----
#define STFLAG_is_submission 0x0400
#define STFLAG_is_smtp 0x0800
! extern CONST struct service_type * IMAP_SERVICE;
! extern CONST struct service_type * POP_SERVICE;
! extern CONST struct service_type * SUBMISSION_SERVICE;
! extern CONST struct service_type * SMTP_SERVICE;
extern struct service_entry {
int flags;
Index: elm2.4.ME+.115a-cvs/hdrs/me.h
*** elm2.4.ME+.115/hdrs/me.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/hdrs/me.h 2004-04-24 10:35:47.000000000 +0300
***************
*** 1,7 ****
! /* $Id: me.h,v 1.87 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.87 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: me.h,v 1.88 2004/04/24 07:35:47 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.88 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 119,124 ****
--- 119,135 ----
int *redraw,
struct menu_context *page));
+ #define PROMPT_center 1
+ #define PROMTP_yesno 2
+ #define PROMPT_redraw_mark 4
+ #define PROMTP_ctrlL 8
+
+ extern int prompt_letter P_((int line, char *letters, int def,
+ int flags,
+ struct menu_context *page,
+ const char * format, const char *msg, ...));
+
+
#define OE_APPEND_CURRENT (1<<0)
#define OE_PASSWD (1<<1)
#define OE_REDRAW_MARK (1<<2)
Index: elm2.4.ME+.115a-cvs/hdrs/s_elm.h
*** elm2.4.ME+.115/hdrs/s_elm.h 2004-03-16 21:17:43.000000000 +0200
--- elm2.4.ME+.115a-cvs/hdrs/s_elm.h 2004-04-24 10:53:35.000000000 +0300
***************
*** 1097,1099 ****
--- 1097,1100 ----
#define ElmCharsetBadOverride 0x865
#define ElmObsoleteInElmrc 0x866
#define ElmPgpRcvSure 0x867
+ #define ElmFailedLeaveChange 0x868
Index: elm2.4.ME+.115a-cvs/lib/bindata.c
*** elm2.4.ME+.115/lib/bindata.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/bindata.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: bindata.c,v 1.4 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: bindata.c,v 1.5 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 744,750 ****
struct bindata_format_1 *v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! const char *filename;
{
int status = 0,i;
struct csets_1 *y;
--- 744,750 ----
struct bindata_format_1 *v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! CONST char *filename;
{
int status = 0,i;
struct csets_1 *y;
***************
*** 793,799 ****
struct bindata_mapped_data * v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! const char *filename;
{
int r = 0;
--- 793,799 ----
struct bindata_mapped_data * v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! CONST char *filename;
{
int r = 0;
***************
*** 988,994 ****
/* bzero is defined on hdrs/defs.h
*/
! bzero(ret, sizeof (*ret));
ret->format = bindata_format_1;
ret->v.f1.header = v;
--- 988,994 ----
/* bzero is defined on hdrs/defs.h
*/
! bzero((void *)ret, sizeof (*ret));
ret->format = bindata_format_1;
ret->v.f1.header = v;
***************
*** 999,1005 ****
struct bindata_map * give_mapping(v,mapname)
struct bindata_mapped_data *v;
! const char *mapname;
{
struct bindata_map *ret = NULL;
--- 999,1005 ----
struct bindata_map * give_mapping(v,mapname)
struct bindata_mapped_data *v;
! CONST char *mapname;
{
struct bindata_map *ret = NULL;
Index: elm2.4.ME+.115a-cvs/lib/cs_iso2022.c
*** elm2.4.ME+.115/lib/cs_iso2022.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/cs_iso2022.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.35 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.36 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 1078,1084 ****
S_(cs_add_intdata_to_string cs_add_intdata_to_iso2022_gen)
static void cs_add_intdata_to_iso2022_gen(str,data)
struct string *str;
! const struct string *data;
{
int i;
struct mb_data * X1 = str->p->a.data;
--- 1078,1084 ----
S_(cs_add_intdata_to_string cs_add_intdata_to_iso2022_gen)
static void cs_add_intdata_to_iso2022_gen(str,data)
struct string *str;
! CONST struct string *data;
{
int i;
struct mb_data * X1 = str->p->a.data;
***************
*** 1229,1235 ****
S_(cs_give_unicode_from_string cs_give_unicode_from_iso2022_gen)
static uint16 cs_give_unicode_from_iso2022_gen(str,pos,found)
! const struct string *str;
int pos;
int *found;
{
--- 1229,1235 ----
S_(cs_give_unicode_from_string cs_give_unicode_from_iso2022_gen)
static uint16 cs_give_unicode_from_iso2022_gen(str,pos,found)
! CONST struct string *str;
int pos;
int *found;
{
***************
*** 1421,1427 ****
static void cs_add_unicodedata_to_iso2022_gen(str,len,data)
struct string *str;
int len;
! const uint16 *data;
{
int i;
--- 1421,1427 ----
static void cs_add_unicodedata_to_iso2022_gen(str,len,data)
struct string *str;
int len;
! CONST uint16 *data;
{
int i;
***************
*** 3436,3442 ****
S_(cs_clip_from_string cs_clip_from_iso2022_gen)
static void cs_clip_from_iso2022_gen(ret,str,pos,len)
struct string *ret;
! const struct string *str;
int *pos;
int len;
{
--- 3436,3442 ----
S_(cs_clip_from_string cs_clip_from_iso2022_gen)
static void cs_clip_from_iso2022_gen(ret,str,pos,len)
struct string *ret;
! CONST struct string *str;
int *pos;
int len;
{
***************
*** 3544,3550 ****
static int cs_add_streambytes_to_iso2022_gen(str,count,data)
struct string *str;
int count;
! const unsigned char *data;
{
int i = 0;
struct state_iso2022 * X ;
--- 3544,3550 ----
static int cs_add_streambytes_to_iso2022_gen(str,count,data)
struct string *str;
int count;
! CONST unsigned char *data;
{
int i = 0;
struct state_iso2022 * X ;
Index: elm2.4.ME+.115a-cvs/lib/headers.c
*** elm2.4.ME+.115/lib/headers.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/headers.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: headers.c,v 1.29 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: headers.c,v 1.30 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.30 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 400,406 ****
static int no_add_to_mail_hdr(headers,X,value,demime,defcharset,replace)
struct mailing_headers * headers;
header_ptr X;
! const char *value;
int demime;
charset_t defcharset;
int replace;
--- 400,406 ----
static int no_add_to_mail_hdr(headers,X,value,demime,defcharset,replace)
struct mailing_headers * headers;
header_ptr X;
! CONST char *value;
int demime;
charset_t defcharset;
int replace;
Index: elm2.4.ME+.115a-cvs/lib/localmbx.c
*** elm2.4.ME+.115/lib/localmbx.c 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/localmbx.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.64 2004/04/04 06:17:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.64 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.65 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.65 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 1607,1613 ****
can_remove = buf.st_mtime < now - 10 * 60;
DPRINT(Debug,1,(&Debug,
" (modified %1.1f minutes ago)\n",
! (now - buf.st_mtime) / 60.0));
}
if (stat2_code == 0) {
DPRINT(Debug,1,(&Debug,
--- 1607,1613 ----
can_remove = buf.st_mtime < now - 10 * 60;
DPRINT(Debug,1,(&Debug,
" (modified %1.1f minutes ago)\n",
! (double)(now - buf.st_mtime) / 60.0));
}
if (stat2_code == 0) {
DPRINT(Debug,1,(&Debug,
***************
*** 1617,1623 ****
can_remove = 0;
DPRINT(Debug,1,(&Debug,
" (read %1.1f minutes ago)\n",
! (now - buf2.st_atime) / 60.0));
}
DPRINT(Debug,2,(&Debug,
"mbx_dotlock_file: can remove = %d \n",
--- 1617,1623 ----
can_remove = 0;
DPRINT(Debug,1,(&Debug,
" (read %1.1f minutes ago)\n",
! (double)(now - buf2.st_atime) / 60.0));
}
DPRINT(Debug,2,(&Debug,
"mbx_dotlock_file: can remove = %d \n",
Index: elm2.4.ME+.115a-cvs/lib/mbox.c
*** elm2.4.ME+.115/lib/mbox.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/mbox.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.51 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.51 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.52 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.52 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 144,150 ****
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct read_folder_state));
(*ptr) -> magic = RF_magic;
(*ptr) -> fbytes = 0;
--- 144,150 ----
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct read_folder_state));
(*ptr) -> magic = RF_magic;
(*ptr) -> fbytes = 0;
***************
*** 166,172 ****
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct read_folder_state));
free(*ptr);
*ptr = NULL;
--- 166,172 ----
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct read_folder_state));
free(*ptr);
*ptr = NULL;
***************
*** 839,845 ****
new_folder = safe_malloc(sizeof (struct folder_info));
/* defined in hdrs/defs.h */
! bzero(new_folder,sizeof (struct folder_info));
new_folder -> p = NULL;
new_folder -> cur_folder_sys = NULL;
--- 839,845 ----
new_folder = safe_malloc(sizeof (struct folder_info));
/* defined in hdrs/defs.h */
! bzero((void *)new_folder,sizeof (struct folder_info));
new_folder -> p = NULL;
new_folder -> cur_folder_sys = NULL;
Index: elm2.4.ME+.115a-cvs/lib/mediatype.c
*** elm2.4.ME+.115/lib/mediatype.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/mediatype.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mediatype.c,v 1.12 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mediatype.c,v 1.13 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 184,190 ****
}
enum mime_major_type give_major_type(major,create)
! const char * major;
int create;
{
int i;
--- 184,190 ----
}
enum mime_major_type give_major_type(major,create)
! CONST char * major;
int create;
{
int i;
***************
*** 228,235 ****
}
media_type_t give_media_type(major,minor,create)
! const char * major;
! const char * minor;
int create;
{
--- 228,235 ----
}
media_type_t give_media_type(major,minor,create)
! CONST char * major;
! CONST char * minor;
int create;
{
***************
*** 243,249 ****
media_type_t give_media_type2(major_type_code,minor,create)
enum mime_major_type major_type_code;
! const char * minor;
int create;
{
struct media_type * p;
--- 243,249 ----
media_type_t give_media_type2(major_type_code,minor,create)
enum mime_major_type major_type_code;
! CONST char * minor;
int create;
{
struct media_type * p;
Index: elm2.4.ME+.115a-cvs/lib/outheaders.c
*** elm2.4.ME+.115/lib/outheaders.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/outheaders.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.14 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.15 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 38,44 ****
struct mailing_headers *hdrs;
{
/* bzero is defined hdrs/defs.h */
! bzero(hdrs,sizeof (*hdrs));
hdrs->magic = MAIL_HDR_magic;
--- 38,44 ----
struct mailing_headers *hdrs;
{
/* bzero is defined hdrs/defs.h */
! bzero((void *)hdrs,sizeof (*hdrs));
hdrs->magic = MAIL_HDR_magic;
***************
*** 114,120 ****
/* Make sure that dangling pointters are catched */
/* bzero is defined hdrs/defs.h */
! bzero(hdrs,sizeof (*hdrs));
}
--- 114,120 ----
/* Make sure that dangling pointters are catched */
/* bzero is defined hdrs/defs.h */
! bzero((void *)hdrs,sizeof (*hdrs));
}
***************
*** 166,172 ****
struct expanded_address *x;
{
/* bzero is defined hdrs/defs.h */
! bzero(x,sizeof (*x));
x->magic = EXP_ADDR_magic;
x->addrs = NULL;
--- 166,172 ----
struct expanded_address *x;
{
/* bzero is defined hdrs/defs.h */
! bzero((void *)x,sizeof (*x));
x->magic = EXP_ADDR_magic;
x->addrs = NULL;
***************
*** 589,595 ****
int add_subject_hdr(headers,X,value,demime,defcharset,replace)
struct mailing_headers * headers;
header_ptr X;
! const char *value;
int demime;
charset_t defcharset;
int replace;
--- 589,595 ----
int add_subject_hdr(headers,X,value,demime,defcharset,replace)
struct mailing_headers * headers;
header_ptr X;
! CONST char *value;
int demime;
charset_t defcharset;
int replace;
***************
*** 612,618 ****
int add_user_hdr(headers,X,value,demime,defcharset,replace)
struct mailing_headers * headers;
header_ptr X;
! const char *value;
int demime;
charset_t defcharset;
int replace;
--- 612,618 ----
int add_user_hdr(headers,X,value,demime,defcharset,replace)
struct mailing_headers * headers;
header_ptr X;
! CONST char *value;
int demime;
charset_t defcharset;
int replace;
Index: elm2.4.ME+.115a-cvs/lib/rc_handle.c
*** elm2.4.ME+.115/lib/rc_handle.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/rc_handle.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.17 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.22 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.22 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
***************
*** 16,22 ****
--- 16,24 ----
#include "headers.h"
#include "rc_imp.h"
#include "save_opts.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
#include "s_elm.h"
DEBUG_VAR(Debug,__FILE__,"config");
***************
*** 1374,1380 ****
}
! if (is_dir &&
#ifdef S_ISREG
!S_ISREG(S.st_mode)
#else
--- 1376,1382 ----
}
! if (is_file &&
#ifdef S_ISREG
!S_ISREG(S.st_mode)
#else
***************
*** 1586,1596 ****
if (comment)
fprintf(F, "### ");
for (i = 0; i < r->val.path->nlen; i++) {
! if (0 == i)
! fprintf(F, "%s = ",r->name);
! else {
if (len + strlen(r->val.path->list[i]) > 70) {
fprintf(F, "\n");
if (comment)
--- 1588,1598 ----
if (comment)
fprintf(F, "### ");
+
+ fprintf(F, "%s = ",r->name);
for (i = 0; i < r->val.path->nlen; i++) {
! if (i > 0) {
if (len + strlen(r->val.path->list[i]) > 70) {
fprintf(F, "\n");
if (comment)
Index: elm2.4.ME+.115a-cvs/lib/read_rc.c
*** elm2.4.ME+.115/lib/read_rc.c 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/read_rc.c 2004-04-18 21:03:04.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.133 2004/04/04 06:17:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.133 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.134 2004/04/18 18:03:04 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.134 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 692,698 ****
return;
}
! if (0 == strcmp(lc_ctype,"C"))
system_charset = MIME_name_to_charset("US-ASCII",
CHARSET_create);
else if (0 == istrcmp(lc_ctype,"ASCII") ||
--- 692,736 ----
return;
}
! /* 1) ------ guess based on codeset ------------------------ */
!
! if (codeset[0] &&
! 0 == strincmp(codeset,"ISO-8859-",9) &&
! 0 < (val = atoi(codeset+9))) {
! elm_sfprintf(buffer, sizeof buffer,
! FRM("ISO-8859-%d"),
! val);
! system_charset = MIME_name_to_charset(buffer,
! CHARSET_create);
! } else if (codeset[0] &&
! 0 == strincmp(codeset,"ISO_8859-",9) &&
! 0 < (val = atoi(codeset+9))) {
! elm_sfprintf(buffer, sizeof buffer,
! FRM("ISO-8859-%d"),
! val);
! system_charset = MIME_name_to_charset(buffer,
! CHARSET_create);
! } else if (codeset[0] &&
! 0 == strincmp(codeset,"ISO8859-",8) &&
! 0 < (val = atoi(codeset+8))) {
! elm_sfprintf(buffer, sizeof buffer,
! FRM("ISO-8859-%d"),
! val);
! system_charset = MIME_name_to_charset(buffer,
! CHARSET_create);
! } else if (codeset[0] &&
! 0 == strincmp(codeset,"ISO8859",7) &&
! isascii(codeset[7]) && isdigit(codeset[7]) &&
! '\0' == codeset[8]) {
! elm_sfprintf(buffer, sizeof buffer,
! FRM("ISO-8859-%c"),
! codeset[7]);
! system_charset = MIME_name_to_charset(buffer,
! CHARSET_create);
!
! /* 2) ------ guess based on lc_ctype ------------------------ */
!
! } else if (0 == strcmp(lc_ctype,"C"))
system_charset = MIME_name_to_charset("US-ASCII",
CHARSET_create);
else if (0 == istrcmp(lc_ctype,"ASCII") ||
***************
*** 717,722 ****
--- 755,763 ----
FRM("ISO-8859-%d"),
val);
system_charset = MIME_name_to_charset(buffer,CHARSET_create);
+
+ /* 3) ------ guess based on charset part of locale ------------------------ */
+
} else if (charset && (0 == istrcmp(charset,"ASCII") ||
0 == istrcmp(charset,"US-ASCII")))
system_charset = MIME_name_to_charset("US-ASCII",
Index: elm2.4.ME+.115a-cvs/lib/remote_mbx.c
*** elm2.4.ME+.115/lib/remote_mbx.c 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/remote_mbx.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.49 2004/04/04 06:17:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.50 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.50 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 9,15 ****
--- 9,17 ----
#include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
#include "s_me.h"
#include "s_elm.h"
***************
*** 179,185 ****
struct remote_account *ra;
{
/* bzero is defined hdrs/defs.h */
! bzero (ra, sizeof (struct remote_account));
ra->hostaddr.sa.sa_family = AF_UNSPEC;
ra->service_idx = 0;
--- 181,187 ----
struct remote_account *ra;
{
/* bzero is defined hdrs/defs.h */
! bzero ((void *)ra, sizeof (struct remote_account));
ra->hostaddr.sa.sa_family = AF_UNSPEC;
ra->service_idx = 0;
Index: elm2.4.ME+.115a-cvs/lib/savefolder.c
*** elm2.4.ME+.115/lib/savefolder.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/savefolder.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.75 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.75 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.76 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 1357,1363 ****
int real_prepare_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! const char *filename;
{
int ret = 0;
int err = 0;
--- 1357,1363 ----
int real_prepare_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! CONST char *filename;
{
int ret = 0;
int err = 0;
***************
*** 1471,1477 ****
int real_end_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! const char *filename;
{
int ret = 0;
--- 1471,1477 ----
int real_end_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! CONST char *filename;
{
int ret = 0;
***************
*** 1505,1511 ****
int real_sync_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! const char *filename;
{
int ret = 0;
--- 1505,1511 ----
int real_sync_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! CONST char *filename;
{
int ret = 0;
***************
*** 2216,2222 ****
dir->selection = safe_malloc(sizeof (struct name_vector));
/* bzero is defined hdrs/defs.h */
! bzero(dir->selection,sizeof (struct name_vector));
dir->selection->sys_name = sys_name;
dir->selection->disp_name = disp_name;
dir->selection->flags = flags;
--- 2216,2222 ----
dir->selection = safe_malloc(sizeof (struct name_vector));
/* bzero is defined hdrs/defs.h */
! bzero((void *)dir->selection,sizeof (struct name_vector));
dir->selection->sys_name = sys_name;
dir->selection->disp_name = disp_name;
dir->selection->flags = flags;
***************
*** 2350,2356 ****
struct folder_browser * dir;
dir = safe_malloc(sizeof (struct folder_browser));
! bzero(dir,sizeof (struct folder_browser)); /* defined hdrs/defs.h */
dir->sys_dir = NULL;
dir->dirname = NULL;
--- 2350,2356 ----
struct folder_browser * dir;
dir = safe_malloc(sizeof (struct folder_browser));
! bzero((void *)dir,sizeof (struct folder_browser)); /* defined hdrs/defs.h */
dir->sys_dir = NULL;
dir->dirname = NULL;
***************
*** 2401,2407 ****
dir->type->browser_free_it(dir);
/* Assurance for clean start */
! bzero(&(dir->a), sizeof (dir->a));
dir->type = new_type;
dir->type->browser_zero_it(dir);
--- 2401,2407 ----
dir->type->browser_free_it(dir);
/* Assurance for clean start */
! bzero((void *)&(dir->a), sizeof (dir->a));
dir->type = new_type;
dir->type->browser_zero_it(dir);
***************
*** 3756,3762 ****
(*ptr) = safe_malloc(sizeof (struct browser_write_state));
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct browser_write_state));
(*ptr)->magic = WS_magic;
}
--- 3756,3762 ----
(*ptr) = safe_malloc(sizeof (struct browser_write_state));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct browser_write_state));
(*ptr)->magic = WS_magic;
}
***************
*** 3767,3773 ****
{
if (*ptr) {
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct browser_write_state));
free(*ptr);
*ptr = NULL;
--- 3767,3773 ----
{
if (*ptr) {
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct browser_write_state));
free(*ptr);
*ptr = NULL;
Index: elm2.4.ME+.115a-cvs/lib/service_list.c
*** elm2.4.ME+.115/lib/service_list.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/service_list.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.26 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.27 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 9,15 ****
--- 9,17 ----
#include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
#include "s_me.h"
#include "s_elm.h"
***************
*** 66,75 ****
};
! const struct service_type * IMAP_SERVICE = & SERVICE_TYPES[1];
! const struct service_type * POP_SERVICE = & SERVICE_TYPES[2];
! const struct service_type * SUBMISSION_SERVICE = & SERVICE_TYPES[3];
! const struct service_type * SMTP_SERVICE = & SERVICE_TYPES[4];
static void zero_service_entry P_((struct service_entry *entry,
--- 68,77 ----
};
! CONST struct service_type * IMAP_SERVICE = & SERVICE_TYPES[1];
! CONST struct service_type * POP_SERVICE = & SERVICE_TYPES[2];
! CONST struct service_type * SUBMISSION_SERVICE = & SERVICE_TYPES[3];
! CONST struct service_type * SMTP_SERVICE = & SERVICE_TYPES[4];
static void zero_service_entry P_((struct service_entry *entry,
***************
*** 171,183 ****
static int add_option_type_to_entry(entry,Y,prefix)
struct service_entry *entry;
struct SE_option_type * Y;
! const char * prefix;
{
entry->option_list =
safe_realloc(entry->option_list,
(entry->option_count+1) *
sizeof (entry->option_list[0]));
! bzero( &(entry->option_list[entry->option_count]),
sizeof (entry->option_list[0]));
entry->option_list[entry->option_count].type = Y;
--- 173,185 ----
static int add_option_type_to_entry(entry,Y,prefix)
struct service_entry *entry;
struct SE_option_type * Y;
! CONST char * prefix;
{
entry->option_list =
safe_realloc(entry->option_list,
(entry->option_count+1) *
sizeof (entry->option_list[0]));
! bzero((void *) &(entry->option_list[entry->option_count]),
sizeof (entry->option_list[0]));
entry->option_list[entry->option_count].type = Y;
Index: elm2.4.ME+.115a-cvs/lib/shared_all.c
*** elm2.4.ME+.115/lib/shared_all.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/shared_all.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared_all.c,v 1.2 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared_all.c,v 1.3 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 78,85 ****
if (reg_code1(i,k)) {
i->regs[reg_idx].valid = 0; /* remove form use-library */
! mark_changed(shared_lib_lists[j]);
! mark_changed(&use_shared_all);
shared_lib_lists[j]->libraries_loaded = 0;
--- 78,85 ----
if (reg_code1(i,k)) {
i->regs[reg_idx].valid = 0; /* remove form use-library */
! mark_changed((void *)shared_lib_lists[j]);
! mark_changed((void *)&use_shared_all);
shared_lib_lists[j]->libraries_loaded = 0;
***************
*** 196,202 ****
if (reg_code1(I,m)) {
found++;
! mark_changed(shared_lib_lists[k]);
shared_lib_lists[k]->libraries_loaded = 0;
} else {
--- 196,202 ----
if (reg_code1(I,m)) {
found++;
! mark_changed((void *)shared_lib_lists[k]);
shared_lib_lists[k]->libraries_loaded = 0;
} else {
Index: elm2.4.ME+.115a-cvs/lib/shared.c
*** elm2.4.ME+.115/lib/shared.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/shared.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared.c,v 1.54 2004/03/28 18:08:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared.c,v 1.55 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.55 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 91,97 ****
static wants_rand_bits_f no_wants_rand_bits;
static void no_wants_rand_bits (buf,size,entropy_bits)
! const char *buf;
int size;
int entropy_bits;
{
--- 91,97 ----
static wants_rand_bits_f no_wants_rand_bits;
static void no_wants_rand_bits (buf,size,entropy_bits)
! CONST char *buf;
int size;
int entropy_bits;
{
***************
*** 113,119 ****
library_list[i] = safe_malloc(sizeof (* library_list[i]) );
! bzero(library_list[i], sizeof (* library_list[i]));
library_list[i]->valid = 0;
library_list[i]->tag = safe_strdup(tag);
--- 113,119 ----
library_list[i] = safe_malloc(sizeof (* library_list[i]) );
! bzero((void *)library_list[i], sizeof (* library_list[i]));
library_list[i]->valid = 0;
library_list[i]->tag = safe_strdup(tag);
***************
*** 808,814 ****
}
struct SE_option_type * get_option_type(prefix)
! const char *prefix;
{
int i;
int idx1 = locate_and_load_library(prefix);
--- 808,814 ----
}
struct SE_option_type * get_option_type(prefix)
! CONST char *prefix;
{
int i;
int idx1 = locate_and_load_library(prefix);
Index: elm2.4.ME+.115a-cvs/lib/shared_connect.c
*** elm2.4.ME+.115/lib/shared_connect.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/shared_connect.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared_connect.c,v 1.2 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared_connect.c,v 1.3 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 449,456 ****
void probe_pop_capa_lib(pop_capa_libs,pop_capa_libcount,capa,capa_args)
struct POP_capa_libs * *pop_capa_libs;
int * pop_capa_libcount;
! const char *capa;
! const char *capa_args;
{
int i;
--- 449,456 ----
void probe_pop_capa_lib(pop_capa_libs,pop_capa_libcount,capa,capa_args)
struct POP_capa_libs * *pop_capa_libs;
int * pop_capa_libcount;
! CONST char *capa;
! CONST char *capa_args;
{
int i;
***************
*** 622,628 ****
void probe_imap_capa_lib(imap_capa_libs,imap_capa_libcount,capa)
struct IMAP_capa_libs * *imap_capa_libs;
int * imap_capa_libcount;
! const char *capa;
{
int i;
--- 622,628 ----
void probe_imap_capa_lib(imap_capa_libs,imap_capa_libcount,capa)
struct IMAP_capa_libs * *imap_capa_libs;
int * imap_capa_libcount;
! CONST char *capa;
{
int i;
Index: elm2.4.ME+.115a-cvs/lib/streamsched.c
*** elm2.4.ME+.115/lib/streamsched.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/streamsched.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.33 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.34 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.34 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 10,16 ****
--- 10,18 ----
#include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
DEBUG_VAR(Debug,__FILE__,"net");
Index: elm2.4.ME+.115a-cvs/lib/string.c
*** elm2.4.ME+.115/lib/string.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/lib/string.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: string.c,v 1.38 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: string.c,v 1.39 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 838,844 ****
/* result is malloced */
void bytestream_from_string(str,res,reslen)
! const struct string *str;
char **res;
int *reslen;
{
--- 838,844 ----
/* result is malloced */
void bytestream_from_string(str,res,reslen)
! CONST struct string *str;
char **res;
int *reslen;
{
Index: elm2.4.ME+.115a-cvs/melib/mimewalk.c
*** elm2.4.ME+.115/melib/mimewalk.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/melib/mimewalk.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mimewalk.c,v 1.5 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mimewalk.c,v 1.6 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 24,30 ****
ret = safe_malloc(sizeof(*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = WALKHANDLER_magic;
ret->handler_type = t;
--- 24,30 ----
ret = safe_malloc(sizeof(*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = WALKHANDLER_magic;
ret->handler_type = t;
Index: elm2.4.ME+.115a-cvs/melib/pgp_decode.c
*** elm2.4.ME+.115/melib/pgp_decode.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/melib/pgp_decode.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.38 2004/03/27 18:31:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.39 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 290,296 ****
array[1] = pgp_child_out[0];
array[2] = -1;
! rs->ext_init_data = &array;
rs->ext_init = close_them;
env[0] = NULL;
--- 290,296 ----
array[1] = pgp_child_out[0];
array[2] = -1;
! rs->ext_init_data = array;
rs->ext_init = close_them;
env[0] = NULL;
Index: elm2.4.ME+.115a-cvs/nls/C/C/C/s_elm.m
*** elm2.4.ME+.115/nls/C/C/C/s_elm.m 2004-03-16 21:17:43.000000000 +0200
--- elm2.4.ME+.115a-cvs/nls/C/C/C/s_elm.m 2004-04-24 11:20:52.000000000 +0300
***************
*** 1915,1922 ****
1042 Skip recipients
$ #BadValueInElmrc
1043 Value of "%s" in line %d in "%s" file is bad
$ #FailedLeaveFolderQuit
! 1045 Failed to leave folder: Try to quit again ([P]anic) ? %c%c
$ #NoItemToMarkUnread
1047 No %S to mark as unread!
$quote "
--- 1915,1924 ----
1042 Skip recipients
$ #BadValueInElmrc
1043 Value of "%s" in line %d in "%s" file is bad
+ $quote "
$ #FailedLeaveFolderQuit
! 1045 "Failed to leave folder: Try to quit again ? ([P]anic/%c/%c) "
! $quote
$ #NoItemToMarkUnread
1047 No %S to mark as unread!
$quote "
***************
*** 2055,2061 ****
2031 save copy
$quote '
$ #NoReceived
! 2032 '"received" folder not available, continue? (%c/%c) '
$quote "
$ #FileSpecify1
2033 "\n\r\n\rYou must specify a file to "
--- 2057,2063 ----
2031 save copy
$quote '
$ #NoReceived
! 2032 '"received" folder not available, continue leaving folder? ([P]anic/%c/%c) '
$quote "
$ #FileSpecify1
2033 "\n\r\n\rYou must specify a file to "
***************
*** 2301,2303 ****
--- 2303,2307 ----
$quote "
$ #PgpRcvSure
2151 "The recv'd message was PGP encoded, are you sure? "
+ $ #FailedLeaveChange
+ 2152 "Failed to leave folder: Try to change again ? ([P]anic/%c/%c) "
Index: elm2.4.ME+.115a-cvs/src/browser.c
*** elm2.4.ME+.115/src/browser.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/browser.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: browser.c,v 1.29 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: browser.c,v 1.30 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.30 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 1281,1287 ****
struct string **buffer;
int * redraw;
enum word_sel w;
! string * prev_fold;
struct AliasView *aview;
CONST char *format;
CONST char *msg;
--- 1281,1287 ----
struct string **buffer;
int * redraw;
enum word_sel w;
! struct string * prev_fold;
struct AliasView *aview;
CONST char *format;
CONST char *msg;
Index: elm2.4.ME+.115a-cvs/src/in_utils.c
*** elm2.4.ME+.115/src/in_utils.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/in_utils.c 2004-04-24 10:35:47.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.35 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.36 2004/04/24 07:35:47 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 46,51 ****
--- 46,187 ----
#define erase_a_char() { Writechar(BACKSPACE); Writechar(' '); \
Writechar(BACKSPACE); FlushBuffer(); }
+ int prompt_letter(
+ #if ANSI_C
+ int line, char *letters, int def,
+ int flags,
+ struct menu_context *page,
+ const char * format, const char *msg, ...
+ #else
+ line, letters, def, flags, page, format, msg, va_alist
+ #endif
+ )
+ #if !ANSI_C
+ int line;
+ char *letters;
+ int def;
+ int flags;
+ struct menu_context *page;
+ CONST char * format;
+ CONST char *msg;
+ va_dcl
+ #endif
+ {
+ struct string *question = NULL;
+
+ int ch;
+ int center = flags & PROMPT_center;
+ int yesno = flags & PROMTP_yesno;
+ int mark = flags & PROMPT_redraw_mark;
+ int ctrlL = flags & PROMTP_ctrlL;
+ int cols = 0;
+
+
+ va_list vl;
+
+ Va_start(vl, msg); /* defined in defs.h */
+ question = elm_smessage(0,format,msg,vl);
+ va_end(vl);
+
+ do {
+ int LINES, COLUMNS;
+ int l;
+ char *x;
+
+ menu_get_sizes(page,&LINES, &COLUMNS);
+
+ /* FIXME: Not correct */
+ l = string_len(question);
+ cols = COLUMNS - ( l + 5 ); /* 5 for "Yes." + 1 */
+ if (cols < 0) {
+ cols = 0;
+ }
+
+
+ MoveCursor(line, (center || (cols < 2)) ? 0 : cols-2);
+ CleartoEOLN();
+
+ PutLineX(line, center ? cols/2 : cols,
+ FRM("%S%c%c"), question, def, BACKSPACE);
+ FlushBuffer();
+
+ ch = menu_ReadCh(page, REDRAW_MARK);
+ if (ch == REDRAW_MARK) {
+ if (mark)
+ break;
+ continue;
+ }
+
+ if (PROMTP_ctrlL && ch == ('L'&31)) {
+ break;
+ }
+
+ if (ch == EOF)
+ break;
+
+ /* Look first letters without lowercasing */
+ for (x = letters; *x; x++) {
+
+ if (ch == *x) {
+ Writechar(ch);
+ goto out;
+ }
+ }
+
+ if(ch == '\n' || ch == '\r')
+ ch = def;
+ else {
+ #ifdef ASCII_CTYPE
+ if (isascii(ch))
+ #endif
+ ch = tolower(ch);
+ }
+
+ for (x = letters; *x; x++) {
+
+ if (ch == *x) {
+ Writechar(ch);
+ goto out;
+ }
+ }
+
+ if(ch == *def_ans_yes && yesno) {
+ Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmYesWord, "Yes."));
+ break;
+ } else if (ch == *def_ans_no && yesno) {
+ Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmNoWord, "No."));
+ break;
+ }
+
+ Writechar('?');
+ FlushBuffer();
+ #if POLL_METHOD
+ wait_for_timeout(1);
+ #else
+ sleep(1);
+ #endif
+
+ } while (EOF != ch);
+
+
+ out:
+ FlushBuffer();
+
+ if (EOF != ch && REDRAW_MARK != ch && ('L'&31) != ch) {
+ if (sleepmsg > 0) {
+ #if POLL_METHOD
+ wait_for_timeout((sleepmsg + 1) / 2);
+ #else
+ sleep((sleepmsg + 1) / 2);
+ #endif
+ }
+ MoveCursor(line, (center || (cols < 2)) ? 0 : cols-2);
+ CleartoEOLN();
+ }
+
+ return ch;
+ }
+
int want_to(question, dflt, where, clear_and_center, page)
char *question;
int dflt;
***************
*** 60,66 ****
**/
int ch, cols;
int LINES, COLUMNS;
!
redraw:
menu_get_sizes(page,&LINES, &COLUMNS);
--- 196,202 ----
**/
int ch, cols;
int LINES, COLUMNS;
!
redraw:
menu_get_sizes(page,&LINES, &COLUMNS);
***************
*** 88,114 ****
ch = tolower(ch);
while (!( ch == *def_ans_yes || ch == *def_ans_no || ch == '\n' || ch == '\r')) {
! ch = menu_ReadCh(page,REDRAW_MARK);
! if (ch == REDRAW_MARK)
! goto redraw;
! if (ch == EOF) {
! leave(0, ¤t_mailbox,¤t_aliaslist); /* ???? global reference */
! }
#ifdef ASCII_CTYPE
! if (isascii(ch))
#endif
! ch = tolower(ch);
}
if(ch == '\n' || ch == '\r')
ch = dflt;
if(ch == *def_ans_yes)
! Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmYesWord, "Yes."));
else if (ch == *def_ans_no)
! Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmNoWord, "No."));
else {
DPRINT(Debug,3,(&Debug,"want_to [%s]=%c\n",question,ch));
! return(ch); /* Don't write anything, just return */
}
FlushBuffer();
if (sleepmsg > 0) {
--- 224,250 ----
ch = tolower(ch);
while (!( ch == *def_ans_yes || ch == *def_ans_no || ch == '\n' || ch == '\r')) {
! ch = menu_ReadCh(page,REDRAW_MARK);
! if (ch == REDRAW_MARK)
! goto redraw;
! if (ch == EOF) {
! leave(0, ¤t_mailbox,¤t_aliaslist); /* ???? global reference */
! }
#ifdef ASCII_CTYPE
! if (isascii(ch))
#endif
! ch = tolower(ch);
}
if(ch == '\n' || ch == '\r')
ch = dflt;
if(ch == *def_ans_yes)
! Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmYesWord, "Yes."));
else if (ch == *def_ans_no)
! Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmNoWord, "No."));
else {
DPRINT(Debug,3,(&Debug,"want_to [%s]=%c\n",question,ch));
! return(ch); /* Don't write anything, just return */
}
FlushBuffer();
if (sleepmsg > 0) {
***************
*** 858,868 ****
int optionally_enter2 (
#if ANSI_C
struct menu_context *page,
! struct string **buffer,
! int x, int y, int flags,
! const char * format, const char *msg, ...
#else
! page, buffer, x, y, flags, format, msg, va_alist
#endif
)
#if !ANSI_C
--- 994,1004 ----
int optionally_enter2 (
#if ANSI_C
struct menu_context *page,
! struct string **buffer,
! int x, int y, int flags,
! const char * format, const char *msg, ...
#else
! page, buffer, x, y, flags, format, msg, va_alist
#endif
)
#if !ANSI_C
Index: elm2.4.ME+.115a-cvs/src/leavembox.c
*** elm2.4.ME+.115/src/leavembox.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/leavembox.c 2004-04-24 11:20:52.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.44 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.45 2004/04/24 08:20:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.45 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 734,748 ****
if (need_handle) {
if (!can_store) {
! char answer = '\0';
! char * buffer = elm_message(CATGETS(elm_msg_cat, ElmSet,
! ElmNoReceived,
! "\"received\" folder not available, continue? (%c/%c) "),
*def_ans_yes, *def_ans_no);
! answer = want_to(buffer, *def_ans_no, LINES-4, 0,
! page);
if (answer != *def_ans_yes) {
return_value = -2; /* failure */
--- 734,762 ----
if (need_handle) {
if (!can_store) {
! int answer = '\0';
! again1:
! menu_get_sizes(page, &LINES, &COLUMNS);
!
! /* NOTICE: prompt_letter may return EOF */
! answer = prompt_letter(LINES-4,"P",*def_ans_yes,
! PROMPT_center|PROMTP_yesno|
! PROMPT_redraw_mark|PROMTP_ctrlL,
! page,
! CATGETS(elm_msg_cat, ElmSet,
! ElmNoReceived,
! "\"received\" folder not available, continue leaving folder? ([P]anic/%c/%c) "),
*def_ans_yes, *def_ans_no);
!
! if (answer == ('L'&31) || answer == REDRAW_MARK) {
! menu_ClearScreen(page);
! goto again1;
! }
!
! if (answer == 'P' || answer == EOF)
! emergency_exit(0);
if (answer != *def_ans_yes) {
return_value = -2; /* failure */
Index: elm2.4.ME+.115a-cvs/src/messages/digest.c
*** elm2.4.ME+.115/src/messages/digest.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/messages/digest.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: digest.c,v 1.9 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: digest.c,v 1.10 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 39,45 ****
mbx->u.digest = safe_malloc(sizeof (* (mbx->u.digest)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.digest, sizeof (* (mbx->u.digest)));
mbx->u.digest->the_digest = NULL;
mbx->u.digest->digest_count = 0;
--- 39,45 ----
mbx->u.digest = safe_malloc(sizeof (* (mbx->u.digest)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.digest, sizeof (* (mbx->u.digest)));
mbx->u.digest->the_digest = NULL;
mbx->u.digest->digest_count = 0;
Index: elm2.4.ME+.115a-cvs/src/messages/messages.c
*** elm2.4.ME+.115/src/messages/messages.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/messages/messages.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: messages.c,v 1.12 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: messages.c,v 1.13 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 23,29 ****
ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = MAILBOXVIEW_magic;
ret->mailbox_type = t;
--- 23,29 ----
ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = MAILBOXVIEW_magic;
ret->mailbox_type = t;
Index: elm2.4.ME+.115a-cvs/src/messages/partial.c
*** elm2.4.ME+.115/src/messages/partial.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/messages/partial.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: partial.c,v 1.14 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: partial.c,v 1.15 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 27,33 ****
mbx->u.partial = safe_malloc(sizeof (* (mbx->u.partial)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.partial, sizeof (* (mbx->u.partial)));
mbx->u.partial->parent_mailbox = NULL;
--- 27,33 ----
mbx->u.partial = safe_malloc(sizeof (* (mbx->u.partial)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.partial, sizeof (* (mbx->u.partial)));
mbx->u.partial->parent_mailbox = NULL;
Index: elm2.4.ME+.115a-cvs/src/messages/storage.c
*** elm2.4.ME+.115/src/messages/storage.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/messages/storage.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: storage.c,v 1.6 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: storage.c,v 1.7 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 30,36 ****
mbx->u.storage = safe_malloc(sizeof (* (mbx->u.storage)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.storage, sizeof (* (mbx->u.storage)));
mbx->u.storage->the_mailbox = NULL;
mbx->u.storage->mailbox_count = 0;
--- 30,36 ----
mbx->u.storage = safe_malloc(sizeof (* (mbx->u.storage)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.storage, sizeof (* (mbx->u.storage)));
mbx->u.storage->the_mailbox = NULL;
mbx->u.storage->mailbox_count = 0;
Index: elm2.4.ME+.115a-cvs/src/out_utils.c
*** elm2.4.ME+.115/src/out_utils.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/out_utils.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: out_utils.c,v 1.23 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: out_utils.c,v 1.25 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 203,217 ****
char buffer[200];
int oldstate = RawState();
int LINES, COLUMNS;
- struct menu_context *cpage;
! cpage = Raw(ON);
!
! menu_get_sizes(default_context,&LINES, &COLUMNS);
buffer[0] = '\0';
redraw:
PutLine0(LINES-3, 0,str);
CleartoEOS();
show_last_error();
--- 203,216 ----
char buffer[200];
int oldstate = RawState();
int LINES, COLUMNS;
! struct menu_context *cpage = Raw(ON);
buffer[0] = '\0';
redraw:
+ menu_get_sizes(cpage,&LINES, &COLUMNS);
+
PutLine0(LINES-3, 0,str);
CleartoEOS();
show_last_error();
***************
*** 300,306 ****
#endif
)
#if !ANSI_C
- int lineY;
CONST char *format;
CONST char *line;
va_dcl
--- 299,304 ----
Index: elm2.4.ME+.115a-cvs/src/quit.c
*** elm2.4.ME+.115/src/quit.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/quit.c 2004-04-24 11:20:52.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: quit.c,v 1.36 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: quit.c,v 1.39 2004/04/24 08:20:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 43,50 ****
int status;
int LINES, COLUMNS;
- menu_get_sizes(page, &LINES, &COLUMNS);
-
status = leave_mbox(FALSE, TRUE, prompt, NULL, *mailbox,
header_page, page);
if ( status == -1)
--- 43,48 ----
***************
*** 65,98 ****
return;
again1:
! PutLineX(LINES-1,2,
! CATGETS(elm_msg_cat, ElmSet, ElmFailedLeaveFolderQuit,
! "Failed to leave folder: Try to quit again ? %c%c"),
! *def_ans_no,BACKSPACE);
! CleartoEOLN();
!
! do {
! ans = menu_ReadCh(page,REDRAW_MARK);
! if (ans == REDRAW_MARK)
! goto again1;
! if (ans == ('L'&31)) {
! menu_ClearScreen(page);
! goto again1;
! }
! ans = tolower(ans);
!
! if (ans == *def_ans_no || '\r' == ans || '\n' == ans) {
! Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmNoWord,
! "No."));
! return;
! }
! if (ans == *def_ans_yes) {
! Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmYesWord,
! "Yes."));
! clear_error();
! goto requit;
! }
! } while(1);
}
}
leave(0, mailbox,aview);
--- 63,96 ----
return;
again1:
! menu_get_sizes(page, &LINES, &COLUMNS);
!
! /* NOTICE: prompt_letter may return EOF */
! ans = prompt_letter(LINES-1,"P",*def_ans_no,
! PROMPT_center|PROMTP_yesno|
! PROMPT_redraw_mark|PROMTP_ctrlL,
! page,
! CATGETS(elm_msg_cat, ElmSet, ElmFailedLeaveFolderQuit,
! "Failed to leave folder: Try to quit again ? ([P]anic/%c/%c) "),
! *def_ans_yes, *def_ans_no);
!
! if (ans == ('L'&31) || ans == REDRAW_MARK) {
! menu_ClearScreen(page);
! goto again1;
! }
!
! if (ans == *def_ans_no)
! return;
!
! if (ans == *def_ans_yes) {
! clear_error();
! goto requit;
! }
!
! if (ans == 'P' || ans == EOF)
! emergency_exit(0);
!
! return;
}
}
leave(0, mailbox,aview);
***************
*** 294,303 ****
sleep_message();
again1:
! /* TODO -- CATGETS */
! ans = want_to("Failed to leave folder: Try to change again ? [P]anic",
! *def_ans_no,LINES-1,1,page);
! if (ans == ('L'&31)) {
redraw = 1;
menu_ClearScreen(page);
goto again1;
--- 292,310 ----
sleep_message();
again1:
! menu_get_sizes(page, &LINES, &COLUMNS);
!
! /* NOTICE: prompt_letter may return EOF */
! ans = prompt_letter(LINES-1,"P",*def_ans_no,
! PROMPT_center|PROMTP_yesno|
! PROMPT_redraw_mark|PROMTP_ctrlL,
! page,
! CATGETS(elm_msg_cat, ElmSet, ElmFailedLeaveChange,
! "Failed to leave folder: Try to change again ? ([P]anic/%c/%c) "),
! *def_ans_yes, *def_ans_no);
!
!
! if (ans == ('L'&31) || ans == REDRAW_MARK) {
redraw = 1;
menu_ClearScreen(page);
goto again1;
***************
*** 312,318 ****
clear_error();
goto rechange;
}
! if (ans == 'P')
emergency_exit(0);
if (new_folder) {
--- 319,325 ----
clear_error();
goto rechange;
}
! if (ans == 'P' || ans == EOF)
emergency_exit(0);
if (new_folder) {
Index: elm2.4.ME+.115a-cvs/src/screen/context.c
*** elm2.4.ME+.115/src/screen/context.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.115a-cvs/src/screen/context.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: context.c,v 1.3 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: context.c,v 1.4 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 41,47 ****
struct menu_context *ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = MENU_CONTEXT_magic;
--- 41,47 ----
struct menu_context *ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = MENU_CONTEXT_magic;
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha0.patch.gz
and elm-ME+2.5.alpha0.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha0.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha0.tar.gz >
via WWW.
Before applying patch catenate parts 1 - 5 first.
That part (part 0) do not include patch. Patch
is on parts 1 - 5.
This patch is agaist Elm 2.4ME+ PL115 (25)
Changes on Elm ME+ 2.5 PLx compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------
Note: You must create directory
2.4
before applying this patch!
SUMMARY: Elm ME+ 2.5 is based on Elm 2.4ME+ and incorporates
some code from Elm 2.5. This release incorporates
some header file changes and new elmrc options.
New elmrc options are incomingfolders, allow-setuid,
askstore, askkeep, askdelete, replycopy, askreplycopy,
showreply, confirmtagsave, editflush, fwdattribution,
printhdrs, savebyalias, showmlists and tochars.
- Moved Overview to 2.4/Overview
- Moved ANNOUNCE.ME to 2.4/ANNOUNCE.ME
- Moved ChangeLog.ME to 2.4/ChangeLog.ME
- Moved Patchlist to 2.4/Patchlist
- Moved Changes to 2.4/Changes
- Moved Instruct to 2.4/Instruct
- Moved NOTICE to 2.4/NOTICE (copyright file)
- Moved README to 2.4/README
- Copied Elm 2.5 PL7 NOTICE to NOTICE (copyright file)
- Change from Elm 2.5:
Added hdrs/elm_defs.h
Added hdrs/elm_globals.h
Removed hdrs/headers.h
Removed hdrs/defs.h
Removed hdrs/elm.h
NOTE however that there is:
hdrs/elmlib.h
hdrs/defs_major.h
hdrs/me.h
src/def_elm.h
so result is quite different.
- Change from Elm 2.5:
added incomingfolders to the elmrc [A1]
added allow-setuid to the global elm.rc [A2]
added askstore,askkeep,askdelete to elmrc [A3]
autocopy expanded into replycopy and askreplycopy (in
elmrc) [A4]
added showreply to elmrc [A5] (!)
added confirmtagsave to elmrc [A6] [A13]
added editflush to elmrc [A7]
added fwdattribution to elmrc [A8]
added printhdrs to elmrc [A11] (!!)
added savebyalias to elmrc
added showmlists to elmrc (!3)
added tochars to elmrc (!4)
(!) Elm 2.4ME+ is displaying 'r', that makes posible to
set it off.
(!!) Note that this option is only used with
p)rint comand which is normally disabled.
This is not used with P)rint text command.
(!3) mlists config file is not supported. Instead
this option just show List-Id header from mail.
(!4) This is five character instead of four as on
Elm 2.5.
- Change from Elm 2.5:
attribution and fwdattribution may include [A9] [A12]
\t for tabulator
\n for newline
%F form sender (From header)
%D for send date
%I for message-id
%S for subject
%)F for sender's name
%>F for sender's address
%% for %
Added -w option to readmsg [A10]
Folder name may now include ... [A14] (!) (!2)
%h For 3 letter month
%y For 2 digit year
%Y For 4 digit year
%m For 2 digit month
%j For 3 digit day number of year
%d For 2 digit day number of month
%% For %
Also environment variable names may occur
also on other places than begining path name
components. (!2)
Environment variables may use ${variable} syntax. (!2)
(!) But these do not work if % is first charater!
On that case % refers to folder directory (ie.
same than '=' and '+'.)
(!2) This same expansion is used on many elmrc variables,
so somewhere this may cause surprises. However
%s should work on variables as earlier. Also $$
is expanded. Other $ -syntaxes may cause error,
because they are now tried to expand instead that
thay are passed to shell. For example on 'printout'
-command.
- Change from Elm 2.5:
Added command 'M' to message menu
- Changes from Elm2.4ME+ PL115a (25)
- Reimplemeted elmrc "alternatives" as type PATH and
removed special elmrc type for alternatives.
(from Elm 2.4ME+ PL116)
- Reimplemeted elmrc "weedout" as type PATH and
removed special elmrc type for weedout.
If first element on list is "*clear-weed-list*",
then builtin weedout list is not used.
(from Elm 2.4ME+ PL116)
- Added RFC 2919 List-ID -header to array on
lib/headers.c
- Fix missing space between pharse and < >
on result of hdr_decode_from_phrase() on
lib/headers.c
- RFC 2919 List-ID is now parsed and information
shown when showmlists is set on elmrc
New files:
hdrs/elm_defs.h
hdrs/elm_globals.h
NOTICE
Removed files:
hdrs/headers.h
hdrs/defs.h
hdrs/elm.h
Renamed files:
Overview => 2.4/Overview
ANNOUNCE.ME => 2.4/ANNOUNCE.ME
ChangeLog.ME => 2.4/ChangeLog.ME
Patchlist => 2.4/Patchlist
Changes => 2.4/Changes
Instruct => 2.4/Instruct
NOTICE => 2.4/NOTICE
README => 2.4/README
New elmrc options:
incomingfolders
allow-setuid
askstore
askkeep
askdelete
replycopy
askreplycopy
showreply
confirmtagsave
editflush
fwdattribution
printhdrs
savebyalias
showmlists
tochars
Correspond quotes from Elm 2.5 PL7 Changes file:
[A1] added incomingfolders to the elmrc. This is a list of
folders that will automatically be opened with "magic
mode" on. (inspired by a patch from Cristophe Kalt
<ka...@ensta.fr>)
[A2] New "allow_setuid" setting. This must be enabled in the
global elmrc in order for Elm to operate setuid. This
prevents naive setuid installation without being too
heavy handed.
[A3] askstore can be used to separately prompt to move read
messages to =received when you leave your mailbox.
I see its main use for people who don't want to use
=received but still like confirmation of deletion. (from
Keith Neufeld <neu...@pvi.org> )
[A4] autocopy expanded into replycopy and askreplycopy (in
elmrc). replycopy determines whether the default should
be yes or no, and askreplycopy determines whether it
should happen automatically. (from Keith Neufeld
<neu...@pvi.org> )
[A5] Added the "replied" code. You must set showreply=ON in
your elmrc for this to work.
[A6] Added a change from Keith Neufeld <neu...@pvi.org> to
make the confirm for saving tagged messages a user
configurable option (confirmtagsave in elmrc).
[A7] Flush the edit buffer after an edit and now make it a
user config thing (editflush in elmrc).
[A8] add a "fwdattribution" elmrc variable that enhances the
handling of forwarded messages. If undefined (the
default), the current behaviour is preserved (standard
attribution and prefix added on edited messages). If
this variable is defined, the prefix is never added, and
instead of the standard attribution the inclusion is
bracketed like:
[A9] Added some extra attribution code (inspired by a patch from
ser...@ghost.sm.dsi.unimi.it (Piero Serini)). The attribution string
may now contain:
%F who the message is from (this is the same as %s)
%D date the message was created (the from message)
%I message ID
%S message subject
[A10] "readmsg" now accepts "-w" to specify header weeding.
The default works like: readmsg -w 'Subject: From:
To: Cc: Apparently- Date:' The list entries are
left-anchored "patmatch" patterns.
[A11] Added "printhdrs" elmrc option that allows header
weeding to be specified when printing. The value
of this option becomes the "-w" arg to "readmsg".
[A12] Add %)F and %>F to attribution, for from name and
from address (from Paul Close <p...@lunch.engr.sgi.com>)
[A13] Added Wayne Davison's patch to confirm on saving
tagged messages.
[A14] Added patch to allow embedded date in folder names
(from Mike Kenney <mi...@wavelet.apl.washington.edu>).
This allows:
%h month name ( 3 letter abbreviation )
%y last 2 digits of year
%m month number
%d day of the month
%j day of the year
This patch also allows environment vars to be enclosed
in {}.
/ Kari Hurtta
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha0.patch.gz
and elm-ME+2.5.alpha0.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha0.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha0.tar.gz >
via WWW.
Before applying patch catenate part 1 - 5 first.
This patch is agaist Elm 2.4ME+ PL115 (25) --------- [ part 1/5 ] ---------
NOTICE: Create 2.4 directory before applying this patch!
For applying thich patch use (on directory where Configure is)
mkdir 2.4
patch -p1 < {this-file}
Then check that removed files do not exists or are empty
ls -la `cat OBSOLETE `
If that lists non-empty files, patch failed.
Then remove emty files with command
rm `cat OBSOLETE `
Index: elmME+.2.5.alpha0-cvs/hdrs/patchlevel.h
Prereq: 1113000000
*** elm2.4.ME+.115/hdrs/patchlevel.h 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/patchlevel.h 2004-05-16 11:11:16.000000000 +0300
***************
*** 1,12 ****
! #define PATCHLEVEL "115 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.115
*/
! #define LAST_REPORT_TIME 1113000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "Apr, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Apr, 2004"
/*
* Local Variables:
--- 1,12 ----
! #define PATCHLEVEL "alpha0"
/* Used by Configure:
! SHAREDTAG: .1.1.0
*/
! #define LAST_REPORT_TIME 1116000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "May, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version ME+ 2.5, USENET supported version"
/*
* Local Variables:
Index: elmME+.2.5.alpha0-cvs/2.4/README
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/2.4/README 2004-04-17 12:03:44.000000000 +0300
***************
*** 0 ****
--- 1,279 ----
+ This README is for the 2.4 version.
+ Look file README.ME+ for the 2.4ME+ version.
+
+ ------------------------------------------------------------------
+ This is the 2.4 (USENET) version of the Elm Mail System
+
+ See the NOTICE and Instruct files for further details.
+
+ It is IMPERATIVE that all users rerun newalias after installing
+ Elm 2.4 when upgrading from a previous version. Elm's behavior
+ with aliases could be unpredictable if this step is not performed.
+
+ Where to find more info on Elm:
+ Much discussion on Elm including interim bug fixes, work arounds
+ and future plans occurs in the Usenet news group comp.mail.elm. Also
+ a monthly status report on Elm is posted there. This status report
+ lists the archive sites that have the patches to Elm as well as the
+ latest version.
+
+ Patches to Elm are posted to comp.mail.elm and comp.sources.bugs as
+ soon as they are released. They are posted to comp.sources.unix shortly
+ thereafter, to allow time for feedback of problems in the patches.
+ Patches should be available from the archive sites, or from the
+ archive server. Mail archive...@DSI.COM for details on how to
+ use the archive server program. Ask it for help.
+
+ In addition, ftp.uu.net maintains a mirror of the Elm release files
+ in /networking/mail/elm. Patches are available in that directory
+ shortly after release. Other sites also keep mirrors of the Elm
+ distribution. There are sites in Europe, Australia, Taiwan and the UK
+ in addition to several in the US. Send the message
+
+ send elm elm.ftp
+
+ to archive...@dsi.com for a current list of ftp mirror sites.
+
+
+ Limitations/Problems you might encounter in compiling and installing Elm:
+
+ From comp.mail.elm, d...@ssec.wisc.edu (DaviD W. Sanderson) writes:
+ >... whoever wrote the default termcap
+ >and/or terminfo descriptions for xterm included in the ti/te strings
+ >the special escape sequences to make xterm switch between the normal
+ >and alternate screen buffers. These sequences are:
+ >
+ > \E[?47h - use alternate screen buffer
+ > \E[?47l - use normal screen buffer
+ >...
+ >The elm code is just fine as it is. If you change it so that it
+ >doesn't ever send ti/te, you'll just break elm for somebody else. Fix
+ >your termcap/terminfo definition instead.
+
+ On some Unix 5.3.2 systems, if only a runtime version of the
+ O/S has been installed, not all the include files exist for compiling
+ curses.c. The ptem.h include file contains the window sizing structure
+ on this version. Either comment out the window sizing code, or install
+ the remaining include files from the development system.
+
+ If you run a nonstandard configuration of Mail, such as Xenix
+ running smail, Configure can get confused as to where to place items.
+ Be sure and check the config.sh file for the correct placement before
+ continuing. If changes are necessary, rerun Configure and fix the
+ file before exiting.
+
+ On SCO Xenix, if you are all mail is from user anonymous,
+ this is because the mail delivery agent should be
+ /usr/lib/mail/execmail instead of /usr/bin/rmail or /bin/rmail.
+
+ On Next's NeXTStep 3.0, use the compile flags
+ -bsd -fwritable-strings, specify the include file directory
+ as /usr/include/bsd, and change, at the 'edit the config.sh'
+ file prompt, the value of d_memcpy to undef and sigtype to int.
+ (From: Jess Anderson)
+
+ From: Manuel Alberto Ricart <alb...@parsec.mixcom.com>,
+ for Next's version 1.0 it is necessary to answer -bsd for the
+ Any additional cc flags? question and -lsys_s for the
+ Any additional libraries? question within Configure.
+ At "If you need to edit config.sh, do it as a shell escape here:"
+ Change d_voidsig from 'define' to 'undef'
+ Change passcat from 'cat /etc/passwd' to 'nidump passwd /'
+ if you're not using YP/NIS, and don't have more than two levels
+ of NetInfo hierarchy. (Consult a NeXTpert otherwise!)
+
+ on Next's 2.0/2.1 systems: same as above, except
+ For "Any additional libraries?" just hit RETURN
+ For "What is the full name of your C library?" specify /lib/libsys_s.a
+ Also for additional linker ld flags, recommend -object.
+ This will make the binaries as small as possible. Otherwise
+ if the smallest binary will be 16K or more.
+
+ On IBM RISC 6000 AIX, 3.2 or newer, to compile Elm during
+ Configure, -U__STR__ is no longer needed. Elm should now compile with
+ no changes.
+
+ On IBM RISC 6000 AIX, prior to 3.2, you might get string
+ function errors on the compile. The solution is to do the following:
+ > Look at /usr/lpp/bos/bsdsport. It tells you
+ > to add following lines to /etc/xlc.cfg
+ >
+ > * BSD 4.3 c compiler stanza
+ > bsdcc: use = DEFLT
+ > crt = /lib/crt0.o
+ > mcrt = /lib/mcrt0.o
+ > gcrt = /lib/gcrt0.o
+ > libraries = -lbsd, -lc
+ > proflibs = -L/lib/profiled,-L/usr/lib/profiled
+ > options = -H512,-T512, -qlanglvl=extended, -qnoro, -D_BSD, -D_NONSTD_TYPES, -D_NO_PROTO, -D_BSD_INCLUDES, -bnodelcsect, -U__STR__, -U__MATH__
+ >
+ > And then link bsdcc to xlc and use bsdcc instead of cc.
+ >
+ > --
+ > Mika Koistinen ------- Opinions are my own-- ----- WARNING:
+ > Myll{rintie 57 F 62 | Internet: mmko...@luotsi.uku.fi | Effect has no code
+ > 70780 KUOPIO | Bitnet: mmkoisti@FINKUO | in function main
+ > FINLAND | tel 358-71-162805 |
+ >
+
+ Also on IBM RS/6000 AIX (Possibly only prior to 3.2)
+ > If you want elm to make use of the NLS options documented for
+ > sendmail (using sendmail.nl) you have to use the UNDOCUMENTED -x flag
+ > on sendmail. See article in comp.unix.aix
+ >
+ > Since Configure doesn't ask for additional sendmail flags you
+ > have to add -x in the smflags entry in hdrs/sysdefs.SH (hdrs/sysdefs.h)
+ >
+ > I guess that this should go into the FAQ entry on IBM AIX.
+ >
+ > --
+ > Bjorn Brox, CORENA A/S, P.O. Box 448, 3601 Kongsberg, NORWAY
+ > E-mail : br...@dms.corena.no , Phone : +47 3 73 66 11 , Fax : +47 3 73 52 62
+
+ From: gor...@mcil.comm.mot.com (Gordon Berkley)
+ On HP/Apollo Domain OS:
+ Apollo TAR is screwey in creating directories.
+ Need to create directories before un-taring
+ DIRS="utils test src nls nls/C nls/C/C nls/C/C/C nls/gencat \
+ lib hdrs filter doc"
+ for dir in $DIRS
+ do
+ mkdir $dir
+ done
+
+
+ On some systems, especially those based on the AT&T Port to
+ 286's the -O flag of the compiler produces improper code causing
+ segmentation violations. If this happens, recompile the code without
+ the -O flag. This has been seen with Microport SysV/AT type systems.
+
+ The Configuration script has been known to exercise an old bug
+ on HP-UX's version of /bin/sh. This shows up as part of the variable
+ setting section showing up on your screen, and configure aborting on errors.
+ If this happens, try using ksh instead of sh as in:
+ ksh Configure
+ this will usually solve the problem.
+
+ The Configuration script has been known to exceed the default
+ stack size in Unix 286 sh's. If Configure does not run correctly on
+ this type of machine increase the stack size and rerun it. On
+ Microport SysV/AT machines, Configure might run correctly under ksh.
+ Obtain ksh from Microport (available to current version owners without
+ additional charge) and rerun Configure using it. Xenix 286 users may
+ have the same problem, but they can work around it by changing the
+ stack size within the shell as reported a Xenix 286 Elm user:
+ > I had the same problems as everyone else is reporting on Microports *nix under
+ > SCO XENIX 2.2.1.
+ >
+ > The solution is simple, up the stack size for /bin/sh. I used
+ >
+ > # mv /bin/sh /bin/sh.old
+ > # cp /bin/sh.old /bin/sh
+ > # fixhdr -F 8000 /bin/sh
+ >
+ > This may seem a bit over the top, but I put it back after!
+ >
+ > # mv /bin/sh /bin/sh.rm
+ > # mv /bin/sh.old /bin/sh
+ >
+ > Then wait till nobody is using /bin/sh.rm then
+ >
+ > # rm /bin/sh.rm
+ >
+ > That way you preserve your old shell, ( i.e. you don't break it ), but you
+ > get to use Configure without bus errors etc.
+ >
+ > I hope that of use
+ >
+ > Keith
+ > --
+ > UUCP ..!uunet!mcvax!ukc!slxsys!g4lzv!keith | Keith Brazington
+ > Smart mail ke...@g4lzv.co.uk | 5b Northgate Rochester Kent UK
+ > Ampanet [44.131.8.1] and [44.131.8.3] | +44 634 811594 Voice
+ > Packet G4LZV @ GB7UWS -- G4LZV USENET BB --| +44 634 401210 Data v22,v22bis
+ You might have to try values from 7000 to 8800.
+
+ Also on Microport SysV/AT Machines, the C compiler produces
+ improper code for one of the arithmetic calls. To fix this problem it
+ is necessary to reduce the complexity of the statement, as reported by
+ one of our testers here is the symptom and his patch. Being this is a
+ compiler bug on only one system, we make the information available, but
+ not incorporate it in the main release. Note, this may effect other
+ areas of Elm, and in the future, Microport may even fix this problem.
+ > I finally tracked down the bug that was causing the lengthy delays when
+ > the first message was displayed. The Microport 80286 C compiler was
+ > generating bad code for the computation of padding in showmsg.c. The
+ > compiler generated scratch variables in the expression were being
+ > located at weird offsets in the stack segment. This caused the program
+ > to stall while the kernel attempted to grow the stack segment to a size
+ > that was large enough to contain the scratch variables. This explains
+ > why it only happened the first time a message was displayed. Here is a
+ > patch that fixes the problem:
+ >
+ > *** showmsg.c.dist Fri Mar 17 21:08:37 1989
+ > --- showmsg.c Sat Mar 18 06:14:04 1989
+ > ***************
+ > *** 280,289
+ > atoi(current_header->year), current_header->time);
+ >
+ > /* truncate or pad title2 portion on the right
+ > ! * so that line fits exactly */
+ > ! padding =
+ > ! COLUMNS -
+ > ! (strlen(title1) + (buf_len=strlen(title2)) + strlen(title3));
+ >
+ > sprintf(titlebuf, "%s%-*.*s%s\n", title1, buf_len+padding,
+ > buf_len+padding, title2, title3);
+ >
+ > --- 280,292 -----
+ > atoi(current_header->year), current_header->time);
+ >
+ > /* truncate or pad title2 portion on the right
+ > ! * so that line fits exactly, expression has been
+ > ! * simplified to avoid bug in Microport 80286
+ > ! * C compiler */
+ > ! padding = COLUMNS;
+ > ! padding -= strlen(title1);
+ > ! padding -= (buf_len = strlen(title2));
+ > ! padding -= strlen(title3);
+ >
+ > sprintf(titlebuf, "%s%-*.*s%s\n", title1, buf_len+padding,
+ > buf_len+padding, title2, title3);
+ >
+ > --
+ > John A. Limpert
+ > UUCP: jo...@n3dmc.UUCP, jo...@n3dmc.UU.NET, uunet!n3dmc!johnl
+
+
+ Some versions of GNUmake are slightly incompatible with
+ standard make. If you plan on using GNUmake instead of standard make,
+ you might need to change instances of:
+ -$(MAKEFLAGS)
+ to:
+ $(MAKEFLAGS)
+ in all Makefiles that contain that construct.
+ [ NOTE: Changed on Elm 2.4ME+ PL100 ]
+
+ On some systems (at least MIPS RiscOs 4.52, and CDC EP/IX 1.4.x) there
+ is an stdlib.h with ANSI Constructs, but the normally supplied Compiler
+ did not handle ANSI-C. If you use the bundled compiler (cc2.11 or cc2.20),
+ you should edit config.h after configuring, and remove the define for
+ I_STDLIB. With gcc or the separate ANSI C Compiler there should be no problem.
+
+ On many systems with the Microsoft UNIX C Compilers, compiling with
+ optimization breaks the code. One symptom is that aliases do not
+ work. On those machines do not compile any of Elm with optimizations.
+ To accomplish that, set all occurrences of "OPTIMIZE" in the makefiles
+ to "-Od" - then it works. From: mrb...@btoy1.UUCP (Thomas Bullinger)
+
+ SCO uses the Microsoft C compiler in its products. For releases of the
+ SCO Development system prior to 3.2v4.2 or ODT 3.0, it is probably wise
+ to disable optimization. Elm 2.4 has however been tested with -Oe
+ optimization under SCO Unix 3.2v4.2 and ODT 3.0 development systems.
+ This level of optimization can safely be specified in Configure when
+ you are asked for compiler flags. From: lar...@sco.com (Larry Philps)
+
+ Syd Weinstein
+ Elm Coordinator
+ e...@DSI.COM
+ (dsinc!elm)
Index: elmME+.2.5.alpha0-cvs/README
*** elm2.4.ME+.115/README 2002-12-15 12:00:25.000000000 +0200
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,279 ****
- This README is for the 2.4 version.
- Look file README.ME+ for the 2.4ME+ version.
-
- ------------------------------------------------------------------
- This is the 2.4 (USENET) version of the Elm Mail System
-
- See the NOTICE and Instruct files for further details.
-
- It is IMPERATIVE that all users rerun newalias after installing
- Elm 2.4 when upgrading from a previous version. Elm's behavior
- with aliases could be unpredictable if this step is not performed.
-
- Where to find more info on Elm:
- Much discussion on Elm including interim bug fixes, work arounds
- and future plans occurs in the Usenet news group comp.mail.elm. Also
- a monthly status report on Elm is posted there. This status report
- lists the archive sites that have the patches to Elm as well as the
- latest version.
-
- Patches to Elm are posted to comp.mail.elm and comp.sources.bugs as
- soon as they are released. They are posted to comp.sources.unix shortly
- thereafter, to allow time for feedback of problems in the patches.
- Patches should be available from the archive sites, or from the
- archive server. Mail archive...@DSI.COM for details on how to
- use the archive server program. Ask it for help.
-
- In addition, ftp.uu.net maintains a mirror of the Elm release files
- in /networking/mail/elm. Patches are available in that directory
- shortly after release. Other sites also keep mirrors of the Elm
- distribution. There are sites in Europe, Australia, Taiwan and the UK
- in addition to several in the US. Send the message
-
- send elm elm.ftp
-
- to archive...@dsi.com for a current list of ftp mirror sites.
-
-
- Limitations/Problems you might encounter in compiling and installing Elm:
-
- From comp.mail.elm, d...@ssec.wisc.edu (DaviD W. Sanderson) writes:
- >... whoever wrote the default termcap
- >and/or terminfo descriptions for xterm included in the ti/te strings
- >the special escape sequences to make xterm switch between the normal
- >and alternate screen buffers. These sequences are:
- >
- > \E[?47h - use alternate screen buffer
- > \E[?47l - use normal screen buffer
- >...
- >The elm code is just fine as it is. If you change it so that it
- >doesn't ever send ti/te, you'll just break elm for somebody else. Fix
- >your termcap/terminfo definition instead.
-
- On some Unix 5.3.2 systems, if only a runtime version of the
- O/S has been installed, not all the include files exist for compiling
- curses.c. The ptem.h include file contains the window sizing structure
- on this version. Either comment out the window sizing code, or install
- the remaining include files from the development system.
-
- If you run a nonstandard configuration of Mail, such as Xenix
- running smail, Configure can get confused as to where to place items.
- Be sure and check the config.sh file for the correct placement before
- continuing. If changes are necessary, rerun Configure and fix the
- file before exiting.
-
- On SCO Xenix, if you are all mail is from user anonymous,
- this is because the mail delivery agent should be
- /usr/lib/mail/execmail instead of /usr/bin/rmail or /bin/rmail.
-
- On Next's NeXTStep 3.0, use the compile flags
- -bsd -fwritable-strings, specify the include file directory
- as /usr/include/bsd, and change, at the 'edit the config.sh'
- file prompt, the value of d_memcpy to undef and sigtype to int.
- (From: Jess Anderson)
-
- From: Manuel Alberto Ricart <alb...@parsec.mixcom.com>,
- for Next's version 1.0 it is necessary to answer -bsd for the
- Any additional cc flags? question and -lsys_s for the
- Any additional libraries? question within Configure.
- At "If you need to edit config.sh, do it as a shell escape here:"
- Change d_voidsig from 'define' to 'undef'
- Change passcat from 'cat /etc/passwd' to 'nidump passwd /'
- if you're not using YP/NIS, and don't have more than two levels
- of NetInfo hierarchy. (Consult a NeXTpert otherwise!)
-
- on Next's 2.0/2.1 systems: same as above, except
- For "Any additional libraries?" just hit RETURN
- For "What is the full name of your C library?" specify /lib/libsys_s.a
- Also for additional linker ld flags, recommend -object.
- This will make the binaries as small as possible. Otherwise
- if the smallest binary will be 16K or more.
-
- On IBM RISC 6000 AIX, 3.2 or newer, to compile Elm during
- Configure, -U__STR__ is no longer needed. Elm should now compile with
- no changes.
-
- On IBM RISC 6000 AIX, prior to 3.2, you might get string
- function errors on the compile. The solution is to do the following:
- > Look at /usr/lpp/bos/bsdsport. It tells you
- > to add following lines to /etc/xlc.cfg
- >
- > * BSD 4.3 c compiler stanza
- > bsdcc: use = DEFLT
- > crt = /lib/crt0.o
- > mcrt = /lib/mcrt0.o
- > gcrt = /lib/gcrt0.o
- > libraries = -lbsd, -lc
- > proflibs = -L/lib/profiled,-L/usr/lib/profiled
- > options = -H512,-T512, -qlanglvl=extended, -qnoro, -D_BSD, -D_NONSTD_TYPES, -D_NO_PROTO, -D_BSD_INCLUDES, -bnodelcsect, -U__STR__, -U__MATH__
- >
- > And then link bsdcc to xlc and use bsdcc instead of cc.
- >
- > --
- > Mika Koistinen ------- Opinions are my own-- ----- WARNING:
- > Myll{rintie 57 F 62 | Internet: mmko...@luotsi.uku.fi | Effect has no code
- > 70780 KUOPIO | Bitnet: mmkoisti@FINKUO | in function main
- > FINLAND | tel 358-71-162805 |
- >
-
- Also on IBM RS/6000 AIX (Possibly only prior to 3.2)
- > If you want elm to make use of the NLS options documented for
- > sendmail (using sendmail.nl) you have to use the UNDOCUMENTED -x flag
- > on sendmail. See article in comp.unix.aix
- >
- > Since Configure doesn't ask for additional sendmail flags you
- > have to add -x in the smflags entry in hdrs/sysdefs.SH (hdrs/sysdefs.h)
- >
- > I guess that this should go into the FAQ entry on IBM AIX.
- >
- > --
- > Bjorn Brox, CORENA A/S, P.O. Box 448, 3601 Kongsberg, NORWAY
- > E-mail : br...@dms.corena.no , Phone : +47 3 73 66 11 , Fax : +47 3 73 52 62
-
- From: gor...@mcil.comm.mot.com (Gordon Berkley)
- On HP/Apollo Domain OS:
- Apollo TAR is screwey in creating directories.
- Need to create directories before un-taring
- DIRS="utils test src nls nls/C nls/C/C nls/C/C/C nls/gencat \
- lib hdrs filter doc"
- for dir in $DIRS
- do
- mkdir $dir
- done
-
-
- On some systems, especially those based on the AT&T Port to
- 286's the -O flag of the compiler produces improper code causing
- segmentation violations. If this happens, recompile the code without
- the -O flag. This has been seen with Microport SysV/AT type systems.
-
- The Configuration script has been known to exercise an old bug
- on HP-UX's version of /bin/sh. This shows up as part of the variable
- setting section showing up on your screen, and configure aborting on errors.
- If this happens, try using ksh instead of sh as in:
- ksh Configure
- this will usually solve the problem.
-
- The Configuration script has been known to exceed the default
- stack size in Unix 286 sh's. If Configure does not run correctly on
- this type of machine increase the stack size and rerun it. On
- Microport SysV/AT machines, Configure might run correctly under ksh.
- Obtain ksh from Microport (available to current version owners without
- additional charge) and rerun Configure using it. Xenix 286 users may
- have the same problem, but they can work around it by changing the
- stack size within the shell as reported a Xenix 286 Elm user:
- > I had the same problems as everyone else is reporting on Microports *nix under
- > SCO XENIX 2.2.1.
- >
- > The solution is simple, up the stack size for /bin/sh. I used
- >
- > # mv /bin/sh /bin/sh.old
- > # cp /bin/sh.old /bin/sh
- > # fixhdr -F 8000 /bin/sh
- >
- > This may seem a bit over the top, but I put it back after!
- >
- > # mv /bin/sh /bin/sh.rm
- > # mv /bin/sh.old /bin/sh
- >
- > Then wait till nobody is using /bin/sh.rm then
- >
- > # rm /bin/sh.rm
- >
- > That way you preserve your old shell, ( i.e. you don't break it ), but you
- > get to use Configure without bus errors etc.
- >
- > I hope that of use
- >
- > Keith
- > --
- > UUCP ..!uunet!mcvax!ukc!slxsys!g4lzv!keith | Keith Brazington
- > Smart mail ke...@g4lzv.co.uk | 5b Northgate Rochester Kent UK
- > Ampanet [44.131.8.1] and [44.131.8.3] | +44 634 811594 Voice
- > Packet G4LZV @ GB7UWS -- G4LZV USENET BB --| +44 634 401210 Data v22,v22bis
- You might have to try values from 7000 to 8800.
-
- Also on Microport SysV/AT Machines, the C compiler produces
- improper code for one of the arithmetic calls. To fix this problem it
- is necessary to reduce the complexity of the statement, as reported by
- one of our testers here is the symptom and his patch. Being this is a
- compiler bug on only one system, we make the information available, but
- not incorporate it in the main release. Note, this may effect other
- areas of Elm, and in the future, Microport may even fix this problem.
- > I finally tracked down the bug that was causing the lengthy delays when
- > the first message was displayed. The Microport 80286 C compiler was
- > generating bad code for the computation of padding in showmsg.c. The
- > compiler generated scratch variables in the expression were being
- > located at weird offsets in the stack segment. This caused the program
- > to stall while the kernel attempted to grow the stack segment to a size
- > that was large enough to contain the scratch variables. This explains
- > why it only happened the first time a message was displayed. Here is a
- > patch that fixes the problem:
- >
- > *** showmsg.c.dist Fri Mar 17 21:08:37 1989
- > --- showmsg.c Sat Mar 18 06:14:04 1989
- > ***************
- > *** 280,289
- > atoi(current_header->year), current_header->time);
- >
- > /* truncate or pad title2 portion on the right
- > ! * so that line fits exactly */
- > ! padding =
- > ! COLUMNS -
- > ! (strlen(title1) + (buf_len=strlen(title2)) + strlen(title3));
- >
- > sprintf(titlebuf, "%s%-*.*s%s\n", title1, buf_len+padding,
- > buf_len+padding, title2, title3);
- >
- > --- 280,292 -----
- > atoi(current_header->year), current_header->time);
- >
- > /* truncate or pad title2 portion on the right
- > ! * so that line fits exactly, expression has been
- > ! * simplified to avoid bug in Microport 80286
- > ! * C compiler */
- > ! padding = COLUMNS;
- > ! padding -= strlen(title1);
- > ! padding -= (buf_len = strlen(title2));
- > ! padding -= strlen(title3);
- >
- > sprintf(titlebuf, "%s%-*.*s%s\n", title1, buf_len+padding,
- > buf_len+padding, title2, title3);
- >
- > --
- > John A. Limpert
- > UUCP: jo...@n3dmc.UUCP, jo...@n3dmc.UU.NET, uunet!n3dmc!johnl
-
-
- Some versions of GNUmake are slightly incompatible with
- standard make. If you plan on using GNUmake instead of standard make,
- you might need to change instances of:
- -$(MAKEFLAGS)
- to:
- $(MAKEFLAGS)
- in all Makefiles that contain that construct.
- [ NOTE: Changed on Elm 2.4ME+ PL100 ]
-
- On some systems (at least MIPS RiscOs 4.52, and CDC EP/IX 1.4.x) there
- is an stdlib.h with ANSI Constructs, but the normally supplied Compiler
- did not handle ANSI-C. If you use the bundled compiler (cc2.11 or cc2.20),
- you should edit config.h after configuring, and remove the define for
- I_STDLIB. With gcc or the separate ANSI C Compiler there should be no problem.
-
- On many systems with the Microsoft UNIX C Compilers, compiling with
- optimization breaks the code. One symptom is that aliases do not
- work. On those machines do not compile any of Elm with optimizations.
- To accomplish that, set all occurrences of "OPTIMIZE" in the makefiles
- to "-Od" - then it works. From: mrb...@btoy1.UUCP (Thomas Bullinger)
-
- SCO uses the Microsoft C compiler in its products. For releases of the
- SCO Development system prior to 3.2v4.2 or ODT 3.0, it is probably wise
- to disable optimization. Elm 2.4 has however been tested with -Oe
- optimization under SCO Unix 3.2v4.2 and ODT 3.0 development systems.
- This level of optimization can safely be specified in Configure when
- you are asked for compiler flags. From: lar...@sco.com (Larry Philps)
-
- Syd Weinstein
- Elm Coordinator
- e...@DSI.COM
- (dsinc!elm)
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/README.ME+
--- elmME+.2.5.alpha0-cvs/README.ME+ 2004-05-16 16:18:29.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.733 2004/04/12 19:27:31 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.736.4.28 2004/05/16 13:18:29 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,30 ****
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
Changes of Elm2.4ME+ PL115 (25) compared with Elm2.4ME+ PL114 (25)
------------------------------------------------------------------
! SuMMARY: This release changes temporary folder
! location on some situations, fixs crash
on c)hange command on alias menu, adds
elmrc options "local-sessionlock-dir" and
"local-sessionlock-use-home", and changes
! SIGWICH handling when waiting of editor.
! - If opened local mailbox is on somewhere other
! location than on spool directory, use "tmpdir" setting
from elm.rc for location of temporary file
"mbox.{mailbox}-{username}" instead default_temp.
--- 13,330 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Version ElmME+ 2.5.x is based on version Elm2.4ME+ PLx (25)
+ and incorporates code from of Elm 2.5.
+
+ ===================================================================
+ * Changelog of ElmME+ 2.5
+
+ Changes on Elm ME+ 2.5 PLx compared with Elm2.4ME+ PL115 (25)
+ -------------------------------------------------------------
+
+ Note: You must create directory
+ 2.4
+ before applying this patch!
+
+ SUMMARY: Elm ME+ 2.5 is based on Elm 2.4ME+ and incorporates
+ some code from Elm 2.5. This release incorporates
+ some header file changes and new elmrc options.
+ New elmrc options are incomingfolders, allow-setuid,
+ askstore, askkeep, askdelete, replycopy, askreplycopy,
+ showreply, confirmtagsave, editflush, fwdattribution,
+ printhdrs, savebyalias, showmlists and tochars.
+
+ - Moved Overview to 2.4/Overview
+ - Moved ANNOUNCE.ME to 2.4/ANNOUNCE.ME
+ - Moved ChangeLog.ME to 2.4/ChangeLog.ME
+ - Moved Patchlist to 2.4/Patchlist
+ - Moved Changes to 2.4/Changes
+ - Moved Instruct to 2.4/Instruct
+ - Moved NOTICE to 2.4/NOTICE (copyright file)
+ - Moved README to 2.4/README
+
+ - Copied Elm 2.5 PL7 NOTICE to NOTICE (copyright file)
+
+ - Change from Elm 2.5:
+ Added hdrs/elm_defs.h
+ Added hdrs/elm_globals.h
+ Removed hdrs/headers.h
+ Removed hdrs/defs.h
+ Removed hdrs/elm.h
+ NOTE however that there is:
+ hdrs/elmlib.h
+ hdrs/defs_major.h
+ hdrs/me.h
+ src/def_elm.h
+ so result is quite different.
+
+ - Change from Elm 2.5:
+ added incomingfolders to the elmrc [A1]
+ added allow-setuid to the global elm.rc [A2]
+ added askstore,askkeep,askdelete to elmrc [A3]
+ autocopy expanded into replycopy and askreplycopy (in
+ elmrc) [A4]
+ added showreply to elmrc [A5] (!)
+ added confirmtagsave to elmrc [A6] [A13]
+ added editflush to elmrc [A7]
+ added fwdattribution to elmrc [A8]
+ added printhdrs to elmrc [A11] (!!)
+ added savebyalias to elmrc
+ added showmlists to elmrc (!3)
+ added tochars to elmrc (!4)
+
+ (!) Elm 2.4ME+ is displaying 'r', that makes posible to
+ set it off.
+
+ (!!) Note that this option is only used with
+ p)rint comand which is normally disabled.
+ This is not used with P)rint text command.
+
+ (!3) mlists config file is not supported. Instead
+ this option just show List-Id header from mail.
+
+ (!4) This is five character instead of four as on
+ Elm 2.5.
+
+ - Change from Elm 2.5:
+ attribution and fwdattribution may include [A9] [A12]
+ \t for tabulator
+ \n for newline
+ %F form sender (From header)
+ %D for send date
+ %I for message-id
+ %S for subject
+ %)F for sender's name
+ %>F for sender's address
+ %% for %
+ Added -w option to readmsg [A10]
+ Folder name may now include ... [A14] (!) (!2)
+ %h For 3 letter month
+ %y For 2 digit year
+ %Y For 4 digit year
+ %m For 2 digit month
+ %j For 3 digit day number of year
+ %d For 2 digit day number of month
+ %% For %
+ Also environment variable names may occur
+ also on other places than begining path name
+ components. (!2)
+ Environment variables may use ${variable} syntax. (!2)
+
+ (!) But these do not work if % is first charater!
+ On that case % refers to folder directory (ie.
+ same than '=' and '+'.)
+
+ (!2) This same expansion is used on many elmrc variables,
+ so somewhere this may cause surprises. However
+ %s should work on variables as earlier. Also $$
+ is expanded. Other $ -syntaxes may cause error,
+ because they are now tried to expand instead that
+ thay are passed to shell. For example on 'printout'
+ -command.
+
+ - Change from Elm 2.5:
+ Added command 'M' to message menu
+
+
+ - Changes from Elm2.4ME+ PL115a (25)
+
+ - Reimplemeted elmrc "alternatives" as type PATH and
+ removed special elmrc type for alternatives.
+ (from Elm 2.4ME+ PL116)
+
+ - Reimplemeted elmrc "weedout" as type PATH and
+ removed special elmrc type for weedout.
+ If first element on list is "*clear-weed-list*",
+ then builtin weedout list is not used.
+ (from Elm 2.4ME+ PL116)
+
+ - Added RFC 2919 List-ID -header to array on
+ lib/headers.c
+ - Fix missing space between pharse and < >
+ on result of hdr_decode_from_phrase() on
+ lib/headers.c
+
+ - RFC 2919 List-ID is now parsed and information
+ shown when showmlists is set on elmrc
+
+ New files:
+ hdrs/elm_defs.h
+ hdrs/elm_globals.h
+ NOTICE
+
+ Removed files:
+ hdrs/headers.h
+ hdrs/defs.h
+ hdrs/elm.h
+
+ Renamed files:
+ Overview => 2.4/Overview
+ ANNOUNCE.ME => 2.4/ANNOUNCE.ME
+ ChangeLog.ME => 2.4/ChangeLog.ME
+ Patchlist => 2.4/Patchlist
+ Changes => 2.4/Changes
+ Instruct => 2.4/Instruct
+ NOTICE => 2.4/NOTICE
+ README => 2.4/README
+
+ New elmrc options:
+ incomingfolders
+ allow-setuid
+ askstore
+ askkeep
+ askdelete
+ replycopy
+ askreplycopy
+ showreply
+ confirmtagsave
+ editflush
+ fwdattribution
+ printhdrs
+ savebyalias
+ showmlists
+ tochars
+
+ Correspond quotes from Elm 2.5 PL7 Changes file:
+
+ [A1] added incomingfolders to the elmrc. This is a list of
+ folders that will automatically be opened with "magic
+ mode" on. (inspired by a patch from Cristophe Kalt
+ <ka...@ensta.fr>)
+
+ [A2] New "allow_setuid" setting. This must be enabled in the
+ global elmrc in order for Elm to operate setuid. This
+ prevents naive setuid installation without being too
+ heavy handed.
+
+ [A3] askstore can be used to separately prompt to move read
+ messages to =received when you leave your mailbox.
+ I see its main use for people who don't want to use
+ =received but still like confirmation of deletion. (from
+ Keith Neufeld <neu...@pvi.org> )
+
+ [A4] autocopy expanded into replycopy and askreplycopy (in
+ elmrc). replycopy determines whether the default should
+ be yes or no, and askreplycopy determines whether it
+ should happen automatically. (from Keith Neufeld
+ <neu...@pvi.org> )
+
+ [A5] Added the "replied" code. You must set showreply=ON in
+ your elmrc for this to work.
+
+ [A6] Added a change from Keith Neufeld <neu...@pvi.org> to
+ make the confirm for saving tagged messages a user
+ configurable option (confirmtagsave in elmrc).
+
+ [A7] Flush the edit buffer after an edit and now make it a
+ user config thing (editflush in elmrc).
+
+ [A8] add a "fwdattribution" elmrc variable that enhances the
+ handling of forwarded messages. If undefined (the
+ default), the current behaviour is preserved (standard
+ attribution and prefix added on edited messages). If
+ this variable is defined, the prefix is never added, and
+ instead of the standard attribution the inclusion is
+ bracketed like:
+
+ [A9] Added some extra attribution code (inspired by a patch from
+ ser...@ghost.sm.dsi.unimi.it (Piero Serini)). The attribution string
+ may now contain:
+
+ %F who the message is from (this is the same as %s)
+ %D date the message was created (the from message)
+ %I message ID
+ %S message subject
+
+ [A10] "readmsg" now accepts "-w" to specify header weeding.
+ The default works like: readmsg -w 'Subject: From:
+ To: Cc: Apparently- Date:' The list entries are
+ left-anchored "patmatch" patterns.
+
+ [A11] Added "printhdrs" elmrc option that allows header
+ weeding to be specified when printing. The value
+ of this option becomes the "-w" arg to "readmsg".
+
+ [A12] Add %)F and %>F to attribution, for from name and
+ from address (from Paul Close <p...@lunch.engr.sgi.com>)
+
+ [A13] Added Wayne Davison's patch to confirm on saving
+ tagged messages.
+
+ [A14] Added patch to allow embedded date in folder names
+ (from Mike Kenney <mi...@wavelet.apl.washington.edu>).
+ This allows:
+
+ %h month name ( 3 letter abbreviation )
+ %y last 2 digits of year
+ %m month number
+ %d day of the month
+ %j day of the year
+
+ This patch also allows environment vars to be enclosed
+ in {}.
+
+
+ ===================================================================
+ * Changelog of Elm 2.4ME+
+
+
Changes of Elm2.4ME+ PL115 (25) compared with Elm2.4ME+ PL114 (25)
------------------------------------------------------------------
! SUMMARY: This release changes temporary folder
! location on some situations, fixes crash
on c)hange command on alias menu, adds
elmrc options "local-sessionlock-dir" and
"local-sessionlock-use-home", and changes
! SIGWINCH handling when waiting for editor.
! - If opened local mailbox is on somewhere else
! than on spool directory, use "tmpdir" setting
from elm.rc for location of temporary file
"mbox.{mailbox}-{username}" instead default_temp.
***************
*** 78,84 ****
so that Elm will call menu_context_resize() when it is
waiting child to complete ...
-
New elmrc options:
local-sessionlock-dir
local-sessionlock-use-home
--- 378,383 ----
***************
*** 169,175 ****
Changes of Elm2.4ME+ PL113a (25) compared with Elm2.4ME+ PL113 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
- "I tried to compile elm2.4.ME+.113 on AIX 5.1 (maintenance
level 05) or on AIX 5.2 (maintenance level 02)
--- 468,474 ----
Changes of Elm2.4ME+ PL113a (25) compared with Elm2.4ME+ PL113 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "I tried to compile elm2.4.ME+.113 on AIX 5.1 (maintenance
level 05) or on AIX 5.2 (maintenance level 02)
***************
*** 338,344 ****
Changes of Elm2.4ME+ PL111b (25) compared with Elm2.4ME+ PL111a (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix crash on parse failure on command
"View digest as mailbox".
--- 637,643 ----
Changes of Elm2.4ME+ PL111b (25) compared with Elm2.4ME+ PL111a (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix crash on parse failure on command
"View digest as mailbox".
***************
*** 346,352 ****
Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes crash caused by 'U' command
on aliases menu.
--- 645,651 ----
Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes crash caused by 'U' command
on aliases menu.
***************
*** 429,435 ****
Changes of Elm2.4ME+ PL110a (25) compared with Elm2.4ME+ PL110 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes case, where output of pgp/gpg was
not shown sometimes (on non-MIME messages),
--- 728,734 ----
Changes of Elm2.4ME+ PL110a (25) compared with Elm2.4ME+ PL110 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes case, where output of pgp/gpg was
not shown sometimes (on non-MIME messages),
***************
*** 569,575 ****
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes segmentation violation on
l)imit command and problem where user alias
--- 868,874 ----
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes segmentation violation on
l)imit command and problem where user alias
***************
*** 585,591 ****
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
--- 884,890 ----
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
***************
*** 814,820 ****
Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch makes some fixes for elmregister,
and elm's search command ('/').
--- 1113,1119 ----
Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch makes some fixes for elmregister,
and elm's search command ('/').
***************
*** 929,935 ****
Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch corrects page when returning
from o)ptions screen and fixes some other
--- 1228,1234 ----
Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch corrects page when returning
from o)ptions screen and fixes some other
***************
*** 1242,1248 ****
Changes of Elm2.4ME+ PL102a (25) compared with Elm2.4ME+ PL102 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes temp file leak
when forwarding with mimeforward = YES and
--- 1541,1547 ----
Changes of Elm2.4ME+ PL102a (25) compared with Elm2.4ME+ PL102 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes temp file leak
when forwarding with mimeforward = YES and
***************
*** 1571,1577 ****
Changes of Elm2.4ME+ PL101c (25) compared with Elm2.4ME+ PL101b (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes segmentation fault, when
when viewing attachment with unxepected
--- 1870,1876 ----
Changes of Elm2.4ME+ PL101c (25) compared with Elm2.4ME+ PL101b (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes segmentation fault, when
when viewing attachment with unxepected
***************
*** 1784,1790 ****
Changes of Elm2.4ME+ PL101b (25) compared with Elm2.4ME+ PL101a (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch makes possible to set
incoming-mailbox = $USER@imap-sever on
--- 2083,2089 ----
Changes of Elm2.4ME+ PL101b (25) compared with Elm2.4ME+ PL101a (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch makes possible to set
incoming-mailbox = $USER@imap-sever on
***************
*** 1832,1838 ****
Changes of Elm2.4ME+ PL101a (25) compared with Elm2.4ME+ PL101 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes crash on internal mailcap parser
and on header editing screen.
--- 2131,2137 ----
Changes of Elm2.4ME+ PL101a (25) compared with Elm2.4ME+ PL101 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes crash on internal mailcap parser
and on header editing screen.
***************
*** 2014,2020 ****
Changes of Elm2.4ME+ PL100a (25) compared with Elm2.4ME+ PL100 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Configure did not generated mapping for iso_8859_1
locale (on SunOS).
--- 2313,2319 ----
Changes of Elm2.4ME+ PL100a (25) compared with Elm2.4ME+ PL100 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Configure did not generated mapping for iso_8859_1
locale (on SunOS).
***************
*** 2341,2347 ****
Changes of Elm2.4ME+ PL99f (25) compared with Elm2.4ME+ PL99e (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix panic on header editing screen on In-Reply-To:
STRING PANIC in cs_binary.c:1043:cs_give_unicode_from_ascii
--- 2640,2646 ----
Changes of Elm2.4ME+ PL99f (25) compared with Elm2.4ME+ PL99e (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix panic on header editing screen on In-Reply-To:
STRING PANIC in cs_binary.c:1043:cs_give_unicode_from_ascii
***************
*** 2366,2372 ****
Changes of Elm2.4ME+ PL99e (25) compared with Elm2.4ME+ PL99d (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Trying send pgp2 (signed or encrypted) message
was causing crash.
--- 2665,2671 ----
Changes of Elm2.4ME+ PL99e (25) compared with Elm2.4ME+ PL99d (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Trying send pgp2 (signed or encrypted) message
was causing crash.
***************
*** 2394,2400 ****
Changes of Elm2.4ME+ PL99d (25) compared with Elm2.4ME+ PL99c (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- "I'm working on updating the Debian elm-me+ package; a
number of patches have accumulated over the years, and
--- 2693,2699 ----
Changes of Elm2.4ME+ PL99d (25) compared with Elm2.4ME+ PL99c (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "I'm working on updating the Debian elm-me+ package; a
number of patches have accumulated over the years, and
***************
*** 2475,2481 ****
Changes of Elm2.4ME+ PL99c (25) compared with Elm2.4ME+ PL99b (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Handling of multipart/signed and
multipart/encrypted was broken Elm2.4ME+ PL98 (25)
--- 2774,2780 ----
Changes of Elm2.4ME+ PL99c (25) compared with Elm2.4ME+ PL99b (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Handling of multipart/signed and
multipart/encrypted was broken Elm2.4ME+ PL98 (25)
***************
*** 2484,2490 ****
Changes of Elm2.4ME+ PL99b (25) compared with Elm2.4ME+ PL99a (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix panic with ISO-2022-JP text with message
STRING PANIC in cs_iso2022.c:1757:add_char_stream
--- 2783,2789 ----
Changes of Elm2.4ME+ PL99b (25) compared with Elm2.4ME+ PL99a (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix panic with ISO-2022-JP text with message
STRING PANIC in cs_iso2022.c:1757:add_char_stream
***************
*** 2495,2501 ****
Changes of Elm2.4ME+ PL99a (25) compared with Elm2.4ME+ PL99 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- There should not be Return-Path header visible
on Pre-Send screen on Beginner user level.
--- 2794,2800 ----
Changes of Elm2.4ME+ PL99a (25) compared with Elm2.4ME+ PL99 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- There should not be Return-Path header visible
on Pre-Send screen on Beginner user level.
***************
*** 2744,2750 ****
Changes of Elm2.4ME+ PL98c (25) compared with Elm2.4ME+ PL98b (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- copy_message_2() lost header name when folding happeded
immediately after header name (that specially was visible
--- 3043,3049 ----
Changes of Elm2.4ME+ PL98c (25) compared with Elm2.4ME+ PL98b (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- copy_message_2() lost header name when folding happeded
immediately after header name (that specially was visible
***************
*** 2767,2773 ****
Changes of Elm2.4ME+ PL98b (25) compared with Elm2.4ME+ PL98a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Our non-standard headers was ignored:
* X-ELM-OSV: hdr-charset=xxxx was ignored
--- 3066,3072 ----
Changes of Elm2.4ME+ PL98b (25) compared with Elm2.4ME+ PL98a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Our non-standard headers was ignored:
* X-ELM-OSV: hdr-charset=xxxx was ignored
***************
*** 2776,2782 ****
Changes of Elm2.4ME+ PL98a (25) compared with Elm2.4ME+ PL98 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- "since a number of releases frm doesn't detect status
new correctly for me (Linux 2.4.18, elm2.4.ME+.98)."
--- 3075,3081 ----
Changes of Elm2.4ME+ PL98a (25) compared with Elm2.4ME+ PL98 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "since a number of releases frm doesn't detect status
new correctly for me (Linux 2.4.18, elm2.4.ME+.98)."
***************
*** 2969,2975 ****
Changes of Elm2.4ME+ PL97d (25) compared with Elm2.4ME+ PL97c (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- If there libintl.so (from GNU gettext) installed
--- 3268,3274 ----
Changes of Elm2.4ME+ PL97d (25) compared with Elm2.4ME+ PL97c (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- If there libintl.so (from GNU gettext) installed
***************
*** 3002,3008 ****
Changes of Elm2.4ME+ PL97c (25) compared with Elm2.4ME+ PL97b (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Wrong answer to question "Any additional libraries"
causes failure on "Trying locate terminfo routines"
--- 3301,3307 ----
Changes of Elm2.4ME+ PL97c (25) compared with Elm2.4ME+ PL97b (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Wrong answer to question "Any additional libraries"
causes failure on "Trying locate terminfo routines"
***************
*** 3052,3058 ****
Changes of Elm2.4ME+ PL97b (25) compared with Elm2.4ME+ PL97a (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- binary flag was incorrectly set true (result on change
on Elm2.4ME+ PL97 (25)). That caused that EOLN mail headers
--- 3351,3357 ----
Changes of Elm2.4ME+ PL97b (25) compared with Elm2.4ME+ PL97a (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- binary flag was incorrectly set true (result on change
on Elm2.4ME+ PL97 (25)). That caused that EOLN mail headers
***************
*** 3065,3071 ****
Changes of Elm2.4ME+ PL97a (25) compared with Elm2.4ME+ PL97 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix state_printf panic "Embedded newlines are not supported"
on case when there is on ~/.elm/elmheaders
--- 3364,3370 ----
Changes of Elm2.4ME+ PL97a (25) compared with Elm2.4ME+ PL97 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix state_printf panic "Embedded newlines are not supported"
on case when there is on ~/.elm/elmheaders
***************
*** 3195,3201 ****
Changes of Elm2.4ME+ PL96b (25) compared with Elm2.4ME+ PL96a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Test whatever make sets $(MAKE)
--- 3494,3500 ----
Changes of Elm2.4ME+ PL96b (25) compared with Elm2.4ME+ PL96a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Test whatever make sets $(MAKE)
***************
*** 3225,3231 ****
Changes of Elm2.4ME+ PL96a (25) compared with Elm2.4ME+ PL96 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- Metamail can not cope with CRLF
Problem noted by: Konstantinos Konstantinides <k...@corp.cirrus.com>
--- 3524,3530 ----
Changes of Elm2.4ME+ PL96a (25) compared with Elm2.4ME+ PL96 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Metamail can not cope with CRLF
Problem noted by: Konstantinos Konstantinides <k...@corp.cirrus.com>
***************
*** 3424,3430 ****
Changes of Elm2.4ME+ PL95c (25) compared with Elm2.4ME+ PL95b (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Do not use commands "mail" or "mailx" as mailer.
- Allow specify "none" as mailer on configuration time
--- 3723,3729 ----
Changes of Elm2.4ME+ PL95c (25) compared with Elm2.4ME+ PL95b (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Do not use commands "mail" or "mailx" as mailer.
- Allow specify "none" as mailer on configuration time
***************
*** 3440,3446 ****
Changes of Elm2.4ME+ PL95b (25) compared with Elm2.4ME+ PL95a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- "Using PL95 with the two patches you send me, I encountered the
following problem when searching for a string in a mail message:
--- 3739,3745 ----
Changes of Elm2.4ME+ PL95b (25) compared with Elm2.4ME+ PL95a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Using PL95 with the two patches you send me, I encountered the
following problem when searching for a string in a mail message:
***************
*** 3458,3464 ****
Changes of Elm2.4ME+ PL95a (25) compared with Elm2.4ME+ PL95 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- "Following please find the error when trying to
compile elm2.4.ME+.95 on AIX 4.3.3 (maintenance level 09):
--- 3757,3763 ----
Changes of Elm2.4ME+ PL95a (25) compared with Elm2.4ME+ PL95 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Following please find the error when trying to
compile elm2.4.ME+.95 on AIX 4.3.3 (maintenance level 09):
***************
*** 3766,3772 ****
Changes of Elm2.4ME+ PL94a (25) compared with Elm2.4ME+ PL94 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- When sending mail, saving copy of mail to folder
failed when
--- 4065,4071 ----
Changes of Elm2.4ME+ PL94a (25) compared with Elm2.4ME+ PL94 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- When sending mail, saving copy of mail to folder
failed when
***************
*** 3970,3976 ****
Changes of Elm2.4ME+ PL92a (25) compared with Elm2.4ME+ PL92 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- "Until I did this I could not get it to build correctly on
solaris 8 (even if I didn't want to use the sharedlibs --
--- 4269,4275 ----
Changes of Elm2.4ME+ PL92a (25) compared with Elm2.4ME+ PL92 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Until I did this I could not get it to build correctly on
solaris 8 (even if I didn't want to use the sharedlibs --
***************
*** 4206,4212 ****
Changes of Elm2.4ME+ PL90a (25) compared with Elm2.4ME+ PL90
------------------------------------------------------------
! [ This is out of branch patch. ]
- "Running Elm 2.4ME+86, if I displayed the first 80% of
a message using the built-in text browser, pressing
--- 4505,4511 ----
Changes of Elm2.4ME+ PL90a (25) compared with Elm2.4ME+ PL90
------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Running Elm 2.4ME+86, if I displayed the first 80% of
a message using the built-in text browser, pressing
***************
*** 4346,4352 ****
Changes of Elm2.4ME+ PL88a (25) compared with Elm2.4ME+ PL88 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- In newmail.c and from.c utilities header_charset
was not set.
--- 4645,4651 ----
Changes of Elm2.4ME+ PL88a (25) compared with Elm2.4ME+ PL88 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- In newmail.c and from.c utilities header_charset
was not set.
***************
*** 4614,4620 ****
Changes of Elm2.4ME+ PL84a (25) compared with Elm2.4ME+ PL84 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- 'struct string * ret' was incorrectly static on
browser_descend_imap(). That caused Elm to crash,
--- 4913,4919 ----
Changes of Elm2.4ME+ PL84a (25) compared with Elm2.4ME+ PL84 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- 'struct string * ret' was incorrectly static on
browser_descend_imap(). That caused Elm to crash,
***************
*** 5357,5363 ****
Changes of Elm2.4ME+ PL76a (25) compared with Elm2.4ME+ PL76 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- On PL73 [encode] was producing (by mistake)
text/X-ELM-encode instead of application/X-ELM-encode as
--- 5656,5662 ----
Changes of Elm2.4ME+ PL76a (25) compared with Elm2.4ME+ PL76 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- On PL73 [encode] was producing (by mistake)
text/X-ELM-encode instead of application/X-ELM-encode as
***************
*** 6716,6722 ****
Changes of Elm2.4ME+ PL53Y (25) compared with Elm2.4ME+ PL53 (25)
---------------------------------------------------------------
! [ This is out of branch patch. ]
- Test that year >= 0 instead of year > 0 on
cvt_yearstr_to_yearnum(). That affects if
--- 7015,7021 ----
Changes of Elm2.4ME+ PL53Y (25) compared with Elm2.4ME+ PL53 (25)
---------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Test that year >= 0 instead of year > 0 on
cvt_yearstr_to_yearnum(). That affects if
***************
*** 6868,6874 ****
Changes of Elm2.4ME+ PL50s (25) compared with Elm2.4ME+ PL50 (25)
--------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix incorrect bound checking on putc_so_string()
(state.c)
--- 7167,7173 ----
Changes of Elm2.4ME+ PL50s (25) compared with Elm2.4ME+ PL50 (25)
--------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix incorrect bound checking on putc_so_string()
(state.c)
***************
*** 7509,7515 ****
Changes of Elm2.4ME+ PL31H (25) compared with Elm2.4ME+ PL31 (25)
---------------------------------------------------------------
! [ This is out of branch patch. ]
- Incorrect Content-length: -header was causing corruption
of folders.
--- 7808,7814 ----
Changes of Elm2.4ME+ PL31H (25) compared with Elm2.4ME+ PL31 (25)
---------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Incorrect Content-length: -header was causing corruption
of folders.
***************
*** 8752,8757 ****
--- 9051,9058 ----
New elmrc options:
metamail
+ =======================================================================
+
Changes of Elm2.4 PL24 ME8b+ compared with version Elm2.4 PL24 ME8b
-----------------------------------------------------------------
Index: elmME+.2.5.alpha0-cvs/2.4/ANNOUNCE.ME
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/2.4/ANNOUNCE.ME 2004-04-17 12:03:43.000000000 +0300
***************
*** 0 ****
--- 1,287 ----
+
+ This ANNOUNCE.ME is for ME patches of the 2.4 version.
+
+ Look file README.ME+ for the 2.4ME+ version.
+
+ --------------------------------------------------------------------
+
+ ELM 2.4 PL24 ME8
+
+ This is an announcement for Patchlevel ME8 for Elm 2.4pl24.
+
+ The most current version of this document is available via the web:
+ http://www.cs.hmc.edu/~me/elm/announce.html. You can also visit the "ME" home
+ page at http://www.cs.hmc.edu/~me/elm/me.html.
+ NOTE THAT THIS ADDRESS HAS CHANGED FROM THE PREVIOUS ANNOUNCEMENT!
+
+ What's new:
+
+ * Anonymous remailer support (plus chaining, PGP encryption & MIME support)
+ * mime.types file when guessing the content-type of an attachment.
+ * Forwarded messages can be attached as MESSAGE/RFC822 data
+ * Supports extraction of PGP public keys directly
+ * Support for application/pgp type inside multipart/mixed and message/rfc822
+ messages
+
+ Changes from ME7a:
+
+ * Replying to MULTIPART messages now works correctly.
+ * MESSAGE/RFC822 is now properly supported.
+ * BINARY encoding is better supported.
+ * Fixed bugs with BASE64 and QUOTED-PRINTABLE encodings.
+ * Enhanced attachment menu
+ * Improved interface for PGP encrypting messages
+
+ Where to get it:
+
+ * ftp://cs.hmc.edu/pub/me/elm-2.4pl24me8.tar.Z
+ * ftp://cs.hmc.edu/pub/me/elm-2.4pl24me8.tar.gz
+ * ftp://cs.hmc.edu/pub/me/elm-2.4pl24me8.diffs.Z
+ * ftp://cs.hmc.edu/pub/me/elm-2.4pl24me7a-8.diffs.Z
+
+ -OR-
+
+ * ftp://uiarchive.cso.uiuc.edu/pub/packages/mail/elm/me/elm-2.4pl24me8.tar.Z
+ * ftp://uiarchive.cso.uiuc.edu/pub/packages/mail/elm/me/elm-2.4pl24me8.tar.gz
+ * ftp://uiarchive.cso.uiuc.edu/pub/packages/mail/elm/me/elm-2.4pl24me8.diffs.Z
+ * ftp://uiarchive.cso.uiuc.edu/pub/packages/mail/elm/me/elm-2.4pl24me7a-8.diffs.Z
+
+ -------------------------------------------------------------------------------
+
+ STATUS
+
+ These patches are not an official release of Elm, and are not supported by the
+ Elm Development Group. Features included in this patch may or may not be
+ included in the next official release of Elm. I can say for certain that the
+ PGP portion will not. I am hoping that my MIME patches will be included in the
+ 2.5 release, but that is still an open question. Should the 2.5 release appear
+ without these patches, I plan on "porting" them and using 2.5 as the base.
+ -------------------------------------------------------------------------------
+ And now on to the interesting stuff...
+
+ PGP SUPPORT
+
+ [This work was inspired by pgpelm which was started by Mic the Missing and
+ furthur developed by Ken Cox (ke...@viewlogic.com). This version is a complete
+ rewrite of that system but looks very similar.]
+
+ Features include: mark on folder menu showing PGP encrypted messages and public
+ key blocks, encryption/signing of outgoing messages, decrypting/signature
+ check, mailing public key blocks, and extracting public key blocks from
+ messages. Special feature allows you to have ELM keep track of your PGP
+ passphrase so you only need to enter it a minimal number of times.
+
+ I have written a primer for using PGP with this version of ELM which can be
+ found at http://www.cs.hmc.edu/~me/elm/pgp.html. It contains everything you
+ need to know about how to use PGP with ELM.
+
+ MIME SUPPORT
+
+ With this version of Elm, the need for metamail is much less since it can now
+ handle the MIME encodings and multipart/* messages internally. The only case in
+ which metamail is called is when there is a content-type which Elm does not
+ understand (eg. image/*, audio/*). In most cases you will probably only receive
+ this as attachments anyway, so you might still not require metamail.
+
+ * Incoming Attachments
+
+ Access to individual portions of a MIME mulitpart message can be accessed
+ via the "Attachments" menu (type 'v' in the index menu). This brings up a
+ menu listing the attachments for the current message. You then have the
+ option of viewing or saving the attachment.
+
+ * Outgoing Attachments
+
+ In addition to using the "[include ..." construct when editing your
+ message, there is now an "Attachments" menu accesible from the "Send" menu
+ (it is abbreviated to "a)tt" because of space problems). Simply type "a"
+ to get into the Attachments menu. You may then add/delete/edit/modify
+ attachments. When possible, Elm will attempt to guess the correct
+ Content-Type (based on file extension, see the "mime.types" section below)
+ and Content-Transfer-Encoding.
+
+ * Automatic encoding for outgoing messages.
+
+ If Elm finds 8bit or control characters in text files to be attached, it
+ will automatically encode them QUOTED-PRINTABLE if Elm has been compiled
+ without the 8BITMIME option (meaning that your MTA isn't 8bit clean). This
+ behavior can be overriden with the "noencoding" elmrc option (see below)
+ in cases where your sendmail is 8bit clean, but doesn't support the
+ -B8BITMIME option.
+
+ * mime.types file
+
+ Elm now mime.types file which maps filename extensions to Content-Type
+ field when sending attachments via the new attachment menu. The format of
+ these files is as follows:
+
+ <extension> <content-type>
+
+ A hash character ('#') may be used as a comment, but it must be in the
+ first column of a line.
+
+ Here is an example of mime.types file:
+
+ # This is a commented line
+ html text/html
+ tgz application/octet-stream; type=tar; conversions="x-gzip"
+
+ Note that the content-type field is not limited to just the type/subtype
+ part; in can also include suplementary information.
+
+ Elm first looks to see if the user has a ~/.elm/mime.types file. If there
+ is no match, Elm will then try to read the system types file (typically
+ /usr/local/lib/elm.mimetypes). Failing that, Elm has a few builtin types
+ that it understands.
+
+ You might want to pick up a copy of my mime.types file as a starting point
+ for either your personal or system file at
+ http://www.cs.hmc.edu/~me/elm/mime.types.
+
+ REMAILER SUPPORT
+
+ This version of Elm has the ability to prepare messages for use with anonymous
+ remailers (if you don't know what that is, read alt.privacy.anon-server for
+ more information).
+
+ Elm gets its information about anonymous servers by either fingering
+ "remail...@kiwi.cs.berkeley.edu" or by reading ~/.elm/remailers (if this
+ file exists, it overrides the "finger" so you can still use this feature even
+ if you are not directly net connected.)
+
+ To send an anonymous message, first compose your message as you normally would,
+ entering the name of the person who should ultimately receive the message as
+ the To: address. Then, at the "send" menu, you can type "r" to get into the
+ "remailer" menu.
+
+ There are several options in this menu: remail, chain, path and encrypt.
+ The "remail" option indicates whether or not the current message will be
+ remailed.
+
+ "chain" indicates how many servers this message should be sent through (the
+ higher chain is, the more secure, but the tradeoff is how long until the
+ receiver gets the message).
+
+ "path" is where you can specify which servers you would like this message to go
+ through (this overrides "chain"). You can specify a semi-colon (";") separated
+ list of server "nicknames" here.
+
+ "encrypt" means that Elm should encrypt your messages with the PGP public key
+ of server you are remailing through (note that if chain > 1 or there is more
+ that one server in "path", Elm will do the "right" thing and call PGP multiple
+ times for each hop).
+
+ Once the desired options are set, you can quit the menu and send the message.
+ What you see next will vary... If you are a PGP user and set encrypt=TRUE in
+ the remailer menu, you will see the call(s) to pgp flash across your screen.
+ Otherwise you will most likely just see the "Mail sent." message.
+
+ If you have MIME defined, it should be possible for you to include attachments
+ in your anonymous mail in the normal manner. Most servers these days support
+ the "hash" option which Elm makes use of to pass the proper MIME headers.
+
+ NEW ELMRC OPTIONS
+
+ * usepgppass = [ ON | OFF ]
+ Default: usepgppass = OFF
+ o OFF: Elm does not keep your passphrase in memory. You must enter it
+ each time you want to decrypt a pgp mail.
+ o ON: Elm keep your passphrase in memory for "keeppassfor" seconds.
+ * keeppassfor = <number>
+ Default: keeppassfor = 0
+ o keeppassfor>=0: Elm will keep your passphrase in memory for seconds
+ after entering the passphrase.
+ o keeppassfor<0: Elm will keep your passphrase in memory without
+ clearing it from memory.
+ * noencoding = <level>
+ Default: noencoding = 0
+
+ This control makes it possible to send raw 8bit or binary data when the
+ MTA doesn't support 8BITMIME and the -B8BITMIME option or BINARYMIME and
+ the -BBINARYMIME option.
+
+ Possible values:
+ o 0 : Always convert 8BIT and BINARY data to QUOTED-PRINTABLE if the
+ MTA doesn't support the -B8BITMIME and -BBINARYMIME options.
+ o 1 : Allow 8bit without -B8BITMIME, but binary data is encoded
+ o 2+: Allow binary without -BBINARYMIME and and 8bit without
+ -B8BITMIME
+ It is STRONGLY recommended that it be left set to 0 unless you know what
+ you are doing!!
+ * showto = [ ON | OFF ]
+ Default: showto = OFF
+ o ON: Elm should show you who the message is addressed to rather than
+ who it is from if the message is not addressed to you.
+ o OFF: normal behavior
+ * pagemultipart = [ ON | OFF ]
+ Default: pagemultipart = ON
+ o ON: Use the internal MIME support to display MULTIPART messages
+ rather than calling metamail
+ o OFF: display MULTIPART messages with metamail
+ * mimeforward = [ ON | OFF ]
+ Default: mimeforward = OFF
+ o ON: When forwarding a message, Elm will attach as a MIME body part of
+ type MESSAGE/RFC822.
+ o OFF: Elm will include the forwarded message in your message, just
+ like it always has.
+
+ BUILTIN++ PAGER
+
+ This pager looks a lot like more, but has some of the movement features of
+ less, most notably, paging backwards through your messages. Press '?' inside of
+ the pager for a list of valid keystroke commands.
+
+ TAGS
+
+ Use the keyword "tagged" in the "Delete messages with pattern" (invoked by ^D
+ in the index menu) to delete all tagged messages.
+
+ You can now use the keyword "all" to tag all visible messages.
+
+ LIMIT FUNCTIONALITY
+
+ * Simple compound statements can be made using '|' (OR) and '&' (AND).
+ * The "Cc:" field is now availible for search.
+ * New keyword "tagged" for narrowing to only the currently tagged messages.
+
+ MISCELLANEOUS
+
+ '*' may be used as a wildcard in the "alternatives" list in the elmrc file. For
+ instance, "me@*.hmc.edu" would me to match the user "me" in all hosts from the
+ "hmc.edu" domain.
+
+ Elm will keep track of the messages which you have replied to with an 'r' mark
+ in the index menu.
+
+ Forwarded messages are encapsulated instead of quoted like replies:
+
+ ----- Forwarded message from Joe User -----
+ [...]
+ ----- End of forwarded message from Joe User -----
+
+ You can effect an automatic Bcc: line by setting the address(es) in the "BCC"
+ environment variable. Note that this is non-standard, but provided as a means
+ of accomplishing the task.
+
+ BUGS
+
+ A list of known bugs can be found at
+ http://www.cs.hmc.edu/~elkins/elm/bugs.html.
+
+ AUTHOR
+
+ Michael Elkins <elk...@aero.org>
+ Home Page: http://www.cs.hmc.edu/~me/index.html
+
+ If you are interested in knowing what my future plans are, you can browse my
+ "TO DO" list at http://www.cs.hmc.edu/~me/elm/todo.html
+
+ THANKS
+
+ Kari Hurrta <Kari....@fmi.fi> has contributed a great deal to the MIME
+ support (and fixed lots of my stupid bugs ;-)
+
+ I would also like to thank everyone who took the time to report bugs or suggest
+ improvements!
+ -------------------------------------------------------------------------------
+ Last updated Sept 21, 1995.
Index: elmME+.2.5.alpha0-cvs/2.4/ChangeLog.ME
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/2.4/ChangeLog.ME 2004-04-17 12:03:43.000000000 +0300
***************
*** 0 ****
--- 1,812 ----
+
+ This ChangeLog.ME is for ME patches of the 2.4 version.
+
+ Look file README.ME+ for changes of the 2.4ME+ version.
+
+ -------------------------------------------------------------------------
+
+ -----------------
+ Changes from ME8a
+ -----------------
+ When checking to see if the subject line should be centered when displaying
+ a mail message, the weedlist check should be for "subject:", not "subject".
+ This case is more general.
+
+ control-F in the main menu now causes Elm to forget your passphrase. Useful
+ for when you screw up so you don't have to exit Elm before using PGP
+ again.
+
+ Added a "metoo" argument in pgp_encrypt to decide whether or not the
+ +encrypttoself=on flag should be passed to pgp. This was needed so that
+ the value of auto_cc can be overidden when remailing.
+
+ Added support for decoding of RFC1522 style encoded headers. This should
+ work in the index menu, the pager, and when replying (the "attribution").
+
+ metapager will now recover if pgp fails by displaying the message "as is"
+ in the case where the message is only signed.
+
+ Simplified "pager" check in metapager since there are two pagers now.
+
+ Fixed problem in copy_message where the rfc822 newline at the end of the
+ headers was missing.
+
+ Fixed bug in menu2.c:generic_menu (used by the remailer) which caused
+ Elm to segfault when not compiled with gcc.
+ From: Andrey A. Chernov <ac...@astral.msk.su>
+
+ Fixed problem where trailing MMDF separator was still being printed.
+
+ The default filename for the Content-Disposition header was not getting
+ set if the included file did not have an extension.
+
+ text/plain => application/pgp conversion is now NOT done for public key
+ blocks.
+
+ Configure now figures out where "finger" is instead of hardcoding a path
+ in remailer.c
+
+ Hopefully fixed definition for sleep() in defs.h.
+
+ Fixed bug where elm would segfault when typing ^E when there are no messages
+ in the mailbox.
+
+ Fixed bug where a leading space could be inserted before the real name when
+ looking up a PGP public key from the return address.
+
+ Fixed some of the movement commands in builtin++ so that they work now.
+
+ Convert application/x-pgp-* => application/pgp to decode messages generated
+ by pgpelm.
+
+ Fixed problem where if the signature was added after editing the message,
+ it would be written over the message right after the content length. Fixed
+ by seeking to the end of the file after writing the content length field.
+
+ ----------------
+ Changes from ME8
+ ----------------
+ Fixed bug in conversion of text/plain => application/pgp in newmbox.c which
+ was causing Elm to segfault. (Thanks to Kari....@fmi.fi)
+
+ Fixed bug where builtin++ segfaults when viewing zero length messages.
+
+ -----------------------
+ Changes from ME8alpha19
+ -----------------------
+ Fixed bug where external pager did not work with non-MIME messages when
+ USE_PGP is defined.
+
+ Cleaned up mime_pgp_decode so that it does not need to look at the
+ header_rec for the current message any longer.
+
+ Do text/plain => application/pgp conversion in newmbox.c if PGP type data
+ is discovered in the message. This supports those who are sending PGP
+ messages but are not compliant with what Elm expects.
+
+ Added the control-E (extract public key) command to showmsg_c.c.
+
+ Security fix from Olaf Kirch <ok...@monad.swb.de> which forces Elm to write
+ the temp spool mailbox in the user's home directory instead of /tmp. This
+ prevents exploitation of symlinks to create a .rhosts in the user's
+ directory.
+
+ Fixed bug in show_status where flags from the previous message were not
+ being properly cleared with USE_PGP was defined and MIME was not.
+
+ -----------------------
+ Changes from ME8alpha18
+ -----------------------
+ added application_decode for support of APPLICATION/* types. Calls
+ null_decode if the subtype is unknown.
+
+ rfc822_decode now matches the headers against the weedlist when printing
+ out. You can view all the headers for a message by pressing 'h' while
+ viewing a message just as you normally would.
+
+ added mime_pgp_decode for inline decoding of application/pgp parts.
+ application/pgp at the top level is still handled by metapager since some
+ people will be configured without MIME. I might eventually require that
+ to use PGP, you must also define MIME, but not yet!
+
+ Status header was printed in the wrong place with BINARY encoding.
+ From: Kari....@fmi.fi
+
+ Added the DONT_ADD_FROM and NEEDS_LONE_PERIOD_ESCAPE checks to write_encoded,
+ and other MIME text parts.
+ From: Kari....@fmi.fi
+
+ Added a "type_opts" field in mime_send_t.
+
+ mime_write_header now just writes the MIME headers. The code to add the
+ boundary for multipart messages and the charset for text/plain was moved into
+ mailmsg2.c.
+
+ Changed pgp code to set MIME fields to use add_parameter and type_opts instead
+ of directly writing to subtype.
+
+ Made some changes in the Content-Type for PGP messages to be more compliant
+ with the unofficial standard.
+
+ -----------------------
+ Changes from ME8alpha17
+ -----------------------
+ MIME header code in write_header_info() was moved to
+ mime_write_header in mime_encode.c. This was done to greatly simplify the
+ code, and to make it possible for me to send MIME messages with the
+ remailer code. This will also make it possible for me to have PGP
+ encrypted MIME messages in the future.
+
+ Content-Length headers are generated regardless of whether or not MIME
+ is defined.
+
+ Lots of changes to the remailer code to make it work with MIME.
+
+ -----------------------
+ Changes from ME8alpha16
+ -----------------------
+ Removed Content-Length header from attachments included by the "[include ...]"
+ statement.
+
+ Made the existing global variables that set the toplevel Content-Length header
+ a part of mime_send_t. This has the side effect that if MIME is not
+ defined, no Content-Length header will be added on outgoing messages.
+
+ Commented out the code which reads the content-length header from attachments
+ in mime_parse.c. It should now ignore that header and figure out the length
+ in multipart_parse().
+
+ -----------------------
+ Changes from ME8alpha15
+ -----------------------
+ New option "mimeforward" controls whether or not forwarded messages are
+ sent as MESSAGE/RFC822 MIME messages, or are sent in the old non-MIME
+ way.
+
+ - Fixes for my mistakes in alpha15.
+ - text_unsupported_decode() added for printing warning message about
+ unsupported text subtypes.
+ From: Kari....@fmi.fi
+
+ Changed disposition handing such that a message saying that the user should
+ type 'v' to view an attachment which is declared something other than
+ "inline".
+
+ -----------------------
+ Changes from ME8alpha14
+ -----------------------
+ Make sure that arguments to fseek(), etc., are type long.
+ From: Kari....@fmi.fi
+
+ Added some general access commands for attachments in the attach_menu.c
+ routines.
+ From: Kari....@fmi.fi
+
+ The disposition is now displayed in the little mini-header. This looks nicer
+ than the previous message about "[Content-Disposition: attachment, skipping]".
+
+ select_CT_decoder now returns text_decode for all TEXT types. My reasoning
+ here is that since the MIME spec says that all unknown subtypes of TEXT
+ should be treated as TEXT/PLAIN so long as the charset is understood, then
+ all TEXT can be treated in this manner.
+
+ Made sure that the pgp field of header_rec gets set to zero when initializing
+ in attach_viewer and also in newmbox.c.
+
+ Removed lots of unused variables.
+
+ Added some parentheses in places to make "gcc -Wparentheses" happy.
+
+ -----------------------
+ Changes from ME8alpha13
+ -----------------------
+ Forgot to initialize usepass=FALSE in pgp_decrypt_init. This caused elm
+ to hang when trying to decode a signed message while pgp was waiting for
+ the passphrase...
+
+ The attachment menu should now work properly for viewing message/rfc822
+ messages with the builtin pager.
+
+ When attaching a message/rfc822 with the "forward" command, you should
+ now be able to perform all the actions in attach_menu() as for a "normal"
+ attachment.
+
+ -----------------------
+ Changes from ME8alpha12
+ -----------------------
+ Tried to fix MIME_NOTPLAIN code again. This time MESSAGE/RFC822 will not
+ have it set, which MULTIPART will if pagemultipart=OFF.
+
+ Fixed attach_menu so that Elm does not segfault when you try to do an
+ operation on an attachment when there are no attachments defined.
+
+ Removed the MIME_NOTPLAIN flag and made it a one-bit flag in mime_t instead.
+ Removed PGP flags from defs.h and use a 3-bit field in header_rec instead.
+ These two now ensure that the "status" field of header_rec is always less
+ than 65536 so that 16bit integer machines will not have troubles.
+
+ Elm now pays attention to what the MIME-Version header says and passes any
+ messages with an unknown MIME-Version header value to metamail, or displays
+ an error if $NOMETAMAIL is set.
+ From: Kari....@fmi.fi
+
+ -----------------------
+ Changes from ME8alpha11
+ -----------------------
+ pgp_call() now uses the expanded_* address lists so that aliases are
+ expanded before trying to look up the ids with PGP.
+
+ Fixed calls in mailmsg2.c with wrong number of arguments (botched job
+ including Kari Hurtta's patch).
+ From: Kari....@fmi.fi
+
+ Reordered the preMIME code in newmbox.c to make it a little more efficient.
+
+ Fixed bug in write_header_info() where a spurious newline was being printed
+ after the Content-Type header for TEXT. This was causing the remaining
+ fields not to be a part of the message header.
+
+ Removed check for old-style RFCXXX Mime-Version header. I don't believe
+ anybody uses that anymore since RFC1341 has been out so long.
+
+ pgp_status needed to be reset when the user aborts sending a message,
+ otherwise you can't encrypt another message until you successfully send
+ another message.
+
+ MIME_NOTPLAIN is not set for multipart messages if "pagemultipart" is TRUE.
+
+ Cleaned up code for deciding if metamail mail should be called to display
+ a message in showmsg.c. Created a need routine, need_meta(), for this
+ purpose.
+
+ -----------------------
+ Changes from ME8alpha10
+ -----------------------
+ Fixes to remove some global MIME variables used for composing.
+ From: Kari....@fmi.fi
+
+ Added a redraw command to the attachment menu.
+
+ Fixed the code in newmbox.c where MIME_NOTPLAIN was not set for non-TEXT
+ content-types. Also, check for "plain" should be "text" for old-style
+ pre-MIME content-type headers.
+
+ Added a print command to the attachment menu.
+
+ Made the remailer support a Configure option.
+
+ ----------------------
+ Changes from ME8alpha9
+ ----------------------
+ Use Elm's error routines in the attachment menu.
+ Protected iscntrl() more calling isascii() before it in builtin++.
+ From: Kari Hurtta <Kari....@fmi.fi>
+
+ Added bit of code lost from old showmsg.c which centers the subject line
+ after the title line in the case where "subject" is in the weedlist.
+
+ Viewing attachments with metamail while in send mode now works. It required
+ different arguments to be passed to metamail.
+
+ -----------------------
+ Changes from ME8alpha8a
+ -----------------------
+ mime_t_clear() now sets the defaults of TEXT/PLAIN, ENCODING_7BIT, DISP_INLINE,
+ when called.
+
+ More fixes from Kari Hurtta <kari....@fmi.fi>
+
+ Removed padding bitfield from struct mimeinfo since it isn't needed.
+
+ Added +clearsig=ON when adding a PGP signature to a message.
+
+ Added prototypes for the functions defined in pgp.c.
+
+ Elm will now allow you to edit the list of usernames to encrypt to when
+ using PGP. This fixes the problem where sometimes the return address
+ doesn't match the address on the key. However, it still requires that
+ the user know this.
+
+ Implemented Kari Hurtta's suggestion of using a "state" variable for the
+ MIME output when decoding messages. This will make it easier to add new
+ extensions for output. The state information is defined in hdrs/state.h
+
+ The user interface for the attachment menu now is more consistent with
+ the mailbox menu. (Kari....@fmi.fi)
+
+ User is now asked for confirmation upon deleting an attachment from the
+ attachment menu if "ask=ON" in the elmrc.
+
+ Fixed replying to messages with PGP signatures. They were getting sucked
+ into the new MIME code and getting skipped as an unknown type.
+
+ Added new procedure to allow for extraction of PGP public keys directly
+ instead of relying on metamail.
+
+ If Elm can't find a PGP key that it is looking for, it now tells the user
+ which key instead of just that there was an error.
+
+ The user is now allowed to re-edit the filename in attach_modify() if the
+ file was not found. This also allows a user to change the file associated
+ with an attachment.
+
+ Fixed very old bug of MMDF separators being printed when displaying a
+ message.
+
+ ----------------------
+ Changes from ME8alpha8
+ ----------------------
+ Fixed problem where you couldn't edit the default filename in attach_save().
+
+ ----------------------
+ Changes from ME8alpha7
+ ----------------------
+ Use safe_malloc() and safe_realloc() instead. (Kari Hurtta)
+
+ Fixed bug where no EOLN token was printed after the Content-Type header
+ when type_opts was NULL in attach_generate_message().
+
+ Reorganized struct mimeinfo so that bitfields are next to each other and
+ added padding to make them 1 byte long total.
+
+ -----------------------
+ Changes from ME8alpha6+
+ -----------------------
+ Reduced memory usage in "struct mimeinfo" by using bitfields or pointers
+ instead of predefined strings when possible. Also removed the "comments"
+ fields.
+
+ New routine lib/strmcpy.c for doing malloc/realloc and strcpy in one shot.
+ Helps out with the above objective.
+
+ The attachment menu now defaults to disposition "inline" when sending
+ mail.
+
+ Reorganized the screen in the attachment "configuration" menu.
+
+ Removed code for adding "name=" field to APPLICATION/OCTET-STREAM types.
+ Uses Kari's code for Content-Disposition "filename" instead. attach_menu()
+ still supports both for getting default filename when saving an
+ attachment.
+
+ Removed MIME_MULTIPART flag. Use MIME_TYPE_MULTIPART with "type" instead.
+
+ Removed "encoding" field from "header_rec". Use "encoding" in "mimeinfo"
+ instead (this was already mostly true, but there were a few cases left
+ over from the early support for encoding...)
+
+ ----------------------
+ Changes from ME8alpha6
+ ----------------------
+ Incorporated changes from Kari Hurtta <Kari....@FMI.FI>.
+ Big changes are the use of Content-Disposition and routines to better parse
+ rfc822 headers. Also fixed multi-line MIME header problem in newmbox.c
+
+ ----------------------
+ Changes from ME8alpha5
+ ----------------------
+ Fixed places where "/tmp" was hardcoded for temporary files instead of using
+ "temp_dir" in the ME extensions.
+
+ Fixed more isspace() problems with "signed char".
+
+ Made some formatting improvements in multipart_decode().
+
+ Fixed bug where multi-line Content-Type headers were not properly parsed in
+ newmbox.c.
+
+ Added builtin++2.c which contains a tempfile based pager which may become
+ part of the "official" distribution. For right now it is "experimental".
+
+ ----------------------
+ Changes from ME8alpha4
+ ----------------------
+ Fixed attach_modify() to use ->type and ->subtype like the rest of the
+ attachment routines.
+
+ Viewing an attachment while sending didn't work because it read from
+ mailfile... Now it can view external files as well.
+
+ Fixed problem with signed char and iscntrl() in AddLineToCache().
+ This fixes the problem with umlaut characters in some sets.
+ From: g...@netapp.com.
+
+ Modified mime_generate_boundary() to use mime_count as a counter so that
+ subsequent calls will generate different values.
+
+ Elm will now read ~/.elm/mime.types and $libdir/elm.mimetypes (system
+ mime.types file), if they exist, to map filename extensions to
+ Content-Type values when sending attachments. The format of this file
+ is:
+ <suffix> <content-type>
+ There must be no line breaks in the Content-Type field.
+ Example:
+ tar application/octet-stream; type=tar
+ for .tar files.
+ NOTE: data which is declared "application/octet-stream" will automatically
+ get the option "name=<default_filename>" added to it, so there is no
+ need to put it in the definition.
+
+ Modified attach_info() so that it uses BASE64 encoding for "application"
+ types that have 8bit or control chars in them.
+ Also, "image" automatically defaults to BASE64 without reading the file.
+
+ attach_save() now uses the "name=<default_filename>" field of "application"
+ types as the default filename.
+
+ Added '+' as a synonym for NEXT_PAGE in builtin++ per popular request.
+
+ attach_generate_msg() no longer puts Content-Length headers on parts that
+ it generates.
+
+ ----------------------
+ Changes from ME8alpha3
+ ----------------------
+ Added support for multi-line Content-Type: headers in read_headers() and
+ mime_read_headers().
+
+ me.h now contains prototypes for functions defined by this set of patches.
+
+ Fixed some problems with using PGP and remailers.
+
+ Fixed parsing of options in the Content-Type header so that semicolons
+ inside quotes are protected.
+
+ If MIME is defined, forwarded messages will be an attachment of type
+ MESSAGE/RFC822.
+
+ Fixed problem with viewing MULTIPART or MESSAGE/RFC822 attachments from
+ the attachment menu.
+
+ Replaced MIME_BOUNDARY with a function (mime_generate_boundary()) that
+ sets the global variable "mime_boundary" to generate unique multipart
+ boundaries. This is important now that Elm will be sending out
+ MESSAGE/RFC822 data which Elm might have originally generated...
+
+ ----------------------
+ Changes from ME8alpha2
+ ----------------------
+ Added a second line for menu items in verify_transmission() since adding
+ the "r)emailer" option didn't fit on the first line.
+
+ Modified the PGP code a little for more flexibility. You can now specify
+ a string of "ids" to encrypt with in pgp_call().
+
+ ---------------------
+ Changes from ME8alpha
+ ---------------------
+ The menus from attach.c and attach_send.c were combined into a single
+ menu in attach_menu.c which servers both purposes. The difference is
+ whether or not the user is allowed to modify the given attachments.
+
+ The rest of attach_send.c was renamed as mime_encode.c.
+
+ -----------------
+ Changes from ME7a
+ -----------------
+
+ Added a check in quoted_printable_decode() to make sure that the index
+ into outbuf[] does not run off the end and cause problems.
+
+ attach_edit() didn't return TRUE after editing in one spot, which causes
+ problems on some platforms, namely Solaris.
+ From: Martin Walter <ma...@ruf.uni-freiburg.de>
+
+ base64_decode() was broken because it would fread() a data chunk, and
+ wasn't always a multiple of 4 bytes, causing the decoding to break.
+
+ Changed char => unsigned char in most places in *_encode() to fix problems
+ with ISO characters >127.
+
+ Added message about PGP support for the 'elm -v' command in args.c.
+
+ Support for anonymous remailers. [ALPHA]
+
+ Major rewrite of the MIME handling code. MULTIPART and MESSAGE/RFC822
+ messages are parsed the first time they are accessed (eg. viewed/replied)
+ and then are ready to use without parsing after that. See mime_parse.c
+ and mime_decode.c for details.
+
+ From: Kari Hurtta <Kari....@fmi.fi>
+ Put a loop around verify_transmission() so that Elm will no longer just
+ be lame when an error occurs in [include ...] statements. (Way cool! -Ed)
+
+ Don't allow user read or writes files as attachmentds which he don't heve
+ access. Notice that elm is (usually) setgid mail.
+
+ Consider if MTA supports 8BITMIME also when encoding attachments.
+
+ Now mail is encoded with quoted-printable if it includes control characters.
+ 8BITMIME doesn't help in this case.
+
+ Attachments are checked for 8bit characters, then content-transfer-encoding
+ 7bit is not allowed.
+
+ If any of subpart (also attachments) have content-tarnsfer-encoding 8bit
+ or binary it propagates to content-transfer-encoding of top multipart -type.
+
+ Now taken note of MIME's canonical encoding model:
+ - End of line in text -subtypes when they have encoded with BASE64
+ must be encoded as CR LF.
+ - Also CR and LF must be encoded in quoted-printable-encoding if
+ type have binary data (ie. not line oriented).
+ - Done mapping CR LF -> LF when decoding text -subtypes.
+
+ These content-transfer-encoding checks for attachments are also done
+ for [include ...] keywords when sending.
+
+ Now [include ...] also don't need metamail's help (they use same routines
+ than attachments menu).
+
+ Added configuration file option 'noencoding' (see elmrc-info for details
+ on what this does).
+
+ ----------------
+ Changes from ME7
+ ----------------
+
+ Forgot to kill the newline from the PGP output before putting it in to the
+ builtin++ pager. This resulted in messages being displayed double-spaced.
+ Ick!
+
+ ----------------
+ Changes from ME6
+ ----------------
+
+ attach_send.c needs <sys/stat.h> on some machines.
+
+ Fixed initialization of arrays in attach_send.c because CC isn't quite
+ ANSI compliant. You can only initialize static arrays.
+ From: Guy Harris <g...@netapp.com>
+
+ Added support for sendmail 8.7 which has support for 8BIT content
+ encoding. Uses the -B8BITMIME option.
+ From: Kari Hurtta <hur...@dionysos.fmi.fi>
+
+ Fixed problem where QUOTED-PRINTABLE messages were not decoded when
+ replying if USE_PGP was not defined.
+ From: Kari Hurtta <hur...@dionysos.fmi.fi>
+
+ [keyword ...] constructs are no longer broken when using MIME and the
+ message is to be encoded QUOTED-PRINTABLE.
+ From: Kari Hurtta <hur...@dionysos.fmi.fi>
+
+ Made the QUOTED-PRINTABLE encoding routine more compliant with the
+ standard.
+ From: Kari Hurtta <hur...@dionysos.fmi.fi>
+
+ Added patch to mark messages NEW in all folders (not just the SPOOL)
+ if there is no status: line.
+ NOTE: This will probably go away when 2.5 is released. Instead, they
+ will use some sort of "magic" flag to accomplish the same thing.
+
+ Added check to make sure that we don't run off the end of outbuf[] in
+ base64_decode() in mime.c.
+ From: Kurt....@rus.uni-stuttgart.de
+
+ Fixed type casting problem with BSD 4.4 derivatives in mime.c.
+ From: Andrey A. Chernov <ac...@astral.msk.su>
+
+ KOI8-R added as a valid compat charset.
+ From: Andrey A. Chernov <ac...@astral.msk.su>
+
+ builtin++ now wraps the line at the number of columns on the screen, not
+ one character before. NewLine() apparently "does the right thing" and
+ doesn't print an extra line if the last character is in the last column.
+ From: Kari Hurtta <Kari....@fmi.fi>
+
+ The arrow keys now do what they did before instead of controlling the
+ bultin++ pager.
+
+ builtin++ always clears the screen before displaying the next (or
+ previous) page.
+
+ The length of a line in the cache for builtin++ is increased to 150
+ chars because the old value of 128 didn't work with hpterms with a
+ width of 134 chars.
+
+ Fixed problem where Elm would SIGBUS if you tried to use the
+ attachments menu in an empty folder.
+ From: Kari Hurtta <Kari....@fmi.fi>
+
+ buf[STRING] was too short in AttachmentMenu() and caused certain Elm to
+ bomb out on certain messages which had header lines which were too
+ long.
+
+ AddLineToCache() can now handle multiline input. This meant that
+ calls to it from metapager had to remove the trailing newlines.
+
+ Changed the MIME mini-header format in metapager().
+
+ attach_edit() looks more like header_edit() now. Makes the interface
+ more consistent.
+
+ lib/getrealname.c needed <ctype.h> on older BSD systems.
+
+ Fixed nasty bug where the blank line in between the headers and the body
+ of a NEW message would get deleted when resync'ing in the spool folder.
+
+ Fixed infinite loop in Configure when run with the -d option.
+
+ ----------------
+ Changes from ME5
+ ----------------
+
+ Added the DoAll() call so that the keyword "all" can be used when tagging
+ or deleting.
+
+ Decoupled PGP and MIME support such that you don't need MIME to use PGP.
+
+ Added lots of error checking code in metapager.c.
+ From: g...@netapp.com (Guy Harris).
+
+ Fixed bug in quoted_printable_decode() where I did not convert read
+ characters to base16.
+
+ Added hex() function to protect index_hex from bad values.
+
+ metapager() prompts for a command if necessary after running the external
+ pager, just as Elm used to do.
+
+ Fixed the From: line in write_header_info() where I broke it before.
+
+ Fixed bug where the MIME multipart boundary would be written after the
+ MMDF separator when copy=ON and the message was being copied to the user's
+ desired folder.
+
+ Added an "Attachments" menu in verify_transmission() for including
+ attachments. This works in addition to the current method of using
+ "[include ..."
+
+ Elm now directly supports writing of BASE64 and QUOTED-PRINTABLE
+ encodings.
+
+ Changed the return value of match_address() to be zero, since it
+ returns an int, and NULL is not always an int.
+ From: Michael Shields <shi...@tembel.org>
+
+ AttachViewer() now uses notplain() to determine whether or not
+ metamail is needed to view the message.
+ From: Guy Harris <g...@netapp.com>
+
+ needs_mmdecode() now takes the integer version of the encoding rather
+ than a string. This avoids parsing the string twice.
+ From: Guy Harris <g...@netapp.com>
+
+ Elm now checks outgoing messages to see if there are any non-printable
+ characters, and if so encodes the message QUOTED-PRINTABLE.
+
+ Cleaned up PGP code by moving more code to pgp.c so that other files
+ require less modification (ie. the diffs will be simpler).
+
+ Fixed showmsg.c so that it passes anything that doesn't require metamail
+ to the metapager. This fixed the problem where messages with no
+ Mime-Version header but had a Content-Type header wouldn't get displayed.
+ From: Guy Harris <g...@netapp.com>
+
+ Fixed bug in dispaddr.c so that if a message is from the user, it will
+ always use the TO address to display.
+
+ Moved get_real_name() to its own file in lib so it can be used by
+ dispaddr.c.
+
+ Modified get_real_name() so that if it sees an address like
+ "<elk...@aero.org>" it will return "elk...@aero.org" instead of a zero
+ length string.
+
+ ----------------
+ Changes from ME4
+ ----------------
+
+ Introduced the "metapager". It replaces most of the code in showmsg.c.
+ It also takes care of all the MIME and PGP functions the bultin++ pager
+ used to perform, so that the user doesn't have to use builtin++ in those
+ cases.
+
+ PGP decrypting function was rewritten using pipes so no temp files are
+ required!
+
+ The attachment handling code was modified to handle multiline content-type
+ headers generate by such mailers as zmailer. It also looks through each
+ modifier in the line intead of just assuming that the boundary field will
+ be the first.
+ From: g...@netapp.com (Guy Harris)
+
+ The "command" status line in the builtin++ pager now floats around instead
+ of always being on the bottom. This was done to facilitate the ^L in
+ the pager so it didn't look stupid.
+
+ Moved the MIME QUOTED-PRINTABLE and BASE64 decoding code to mime.c so it
+ can be shared.
+
+ Fixed copy_message() so that it will automatically decode MIME B64 and QP
+ encodings. This means that replies to these types of messages do what the
+ user will expect.
+
+ ----------------
+ Changes from ME3
+ ----------------
+
+ Fixed problems in builtin++.c and pgp.c where I used the return value
+ from sprintf() as a char* when in SYSV systems it returns an int.
+ This caused Elm to seg fault while decrypting messages.
+
+ Configure now asks about PGP support and automatically sets up
+ config.h. Thanks to Ken Cox (ke...@viewlogic.com) for additional help.
+
+ PGP messages are now automatically decrypted when replying if
+ usepgppass = ON.
+
+ Back to using the application/pgp format content-type. Use
+ format=keys-only for send a public key block.
+
+ PGPCall() now uses the pgp option +encrypttoself=on instead of tacking
+ the username on the end of the TO list.
+
+ Fixed problem where any messages after sending a PGP public key had
+ the key text included before the included message text.
+
+ Use rename() if availible instead of copying the file in PGPCall().
+ Otherwise use link(), unlink(). This should be a little more
+ efficient.
+
+ pgp is now called with the -w (wipe) option when encrypting.
+
+ builtin++ can now handle text which is QUOTED-PRINTABLE or BASE64
+ encoded.
+
+ Fixed bug where the last line of messages was not being printed.
+
+ Elm will no longer seg fault if you hit return without entering your
+ PGP passphrase.
+
+ Discovered the +batchmode option for pgp. This makes dealing with
+ incorrect passphrases much easier!
+
+ Fixed bug in builtin++ where the last line of pgp messages would be
+ printed more than once while at the end of the message under certain
+ circumstances.
+
+ Changed notplain() in mime.c to support message/* content-type.
+
+ Cleaned up the multipart handling by removing the boundary string from
+ header_rec to conserve memory. This is now handled by builtin++ and
+ AttachMenu().
+
+ builtin++ can now handle multipart/digest correctly.
+
+ SaveAttach() no longer needs to call metamail to decode QUOTED-PRINTABLE
+ or BASE64 encodings.
+
+ -----------------
+ Changes from ME2a
+ -----------------
+
+ Elm will now keep track of your PGP passphrase for your RSA secret key.
+ To use this feature, add the line "usepgppass = ON" to your .elmrc.
+ There is also a timeout feature which will cause Elm to "forget" your
+ passphrase after so many seconds if you don't use it. The default is
+ 300 seconds, but this can be changes by setting the variable
+ "keeppassfor" in your .elmrc.
+
+ The builtin++ pager was completely rewritten (again) so that it can now
+ handle normal messages, MIME multipart messages, automatic decryption
+ and automatic signature checking for PGP messages. It also seems to be
+ lacking some of the memory allocation bugs that the previous pager had.
+
+ Fixed a bug in DynamicArray() which causes DestroyDynamicArray() to
+ seg fault if exactly max+n elements were allocated. (w...@recco.de)
+
+ ----------------
+ Changes from ME2
+ ----------------
+
+ It is now possible to delete all "tagged" messages by entering "tagged"
+ as the pattern to match after typing <control>-d (^D).
+
+ fixed a bug in the limit command where you could not "un"limit the
+ display of headers. Thanks to g...@netapp.com (Guy Harris) for
+ pointing it out!
+
+ fixed a bug in is_multipart() where the "boundary" token match was
+ case-sensitive.
Index: elmME+.2.5.alpha0-cvs/2.4/Changes
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/2.4/Changes 2004-04-17 12:03:44.000000000 +0300
***************
*** 0 ****
--- 1,101 ----
+
+ This Changes is for the 2.4 version.
+
+ Look file README.ME+ for changes of the 2.4ME+ version.
+
+ --------------------------------------------------------------------------
+ This file describes major changes made to the Elm source distribution
+ between Releases 2.3 and 2.4. Please remember that Elm is a volunteer
+ project, we did what we had time for, and perhaps, what interested us.
+ If you have a suggestion, or a fix, submit it, and better yet,
+ volunteer to implement it.
+
+ Syd Weinstein Sat Oct 3 16:55:49 EDT 1992
+
+ Drop all routing options and let the smart Mail Transport Agent route mail.
+
+ Completely new alias subsystem.
+
+ Support for NLS, LOCALE and message catalogs.
+
+ Quoted string support to allow for X.400 type addresses.
+
+ Support for MIME via metamail
+
+ Support for Content-Length and Content-type
+
+ Enhanced Configure Script
+
+ Added -f flag to filter for alternate rules file
+
+ Add sender to filter
+
+ implements a -q flag to filter to quiet any logging of filtering actions.
+
+ More intelligent make install target include better support for man pages
+
+ User definable Options Screen
+
+ System Wide Elmrc File (Allows binary distribution of Elm)
+
+ implement a ucb mail like metoo option in elm.
+
+ Split the common routines to a lib directory
+
+ Allow using ~ for home directory in filter rules file
+
+ Changed save_message to fork/setgid in order to save
+ message with user's group id instead of mail group id.
+
+ Change filter command to not look at $MAIL as it may be
+ run from sendmail on some systems and $MAIL is set from the
+ environment of the sender of the mail. Result was delivery
+ of mail to the mailbox of the author of the mail instead of
+ the intended user.
+
+ new locking method - allow both fcntl and flock in Filter and Elm
+
+ Detect when there are too many filter rules and exit gracefully.
+
+ Reimplemented readmsg utility. Obsoleted "readmsg_file" and
+ introduced "temp_state" file and "ELMSTATE" environment parameter.
+ This allows readmsg to understand the current 'sorted' order of the
+ Elm display, when run while Elm is running.
+
+ Change date parsing, now uses Numeric TZ and sorting is now TZ aware.
+
+ Add resize support, only at the top level, and no minimum size enforcement.
+
+ add an option, -i, to use the mentioned file as an inclusion, i.e. the
+ edit session starts out with that file as its text. Allows Elm to be
+ used as a mailer from news readers.
+
+ Change in method of reading/writing files to allow for nulls in the
+ file and better catching of errors on writes such as file system full.
+
+ Add ti/te framing for Sun console
+
+ add change to folder based on alias (where messages to that folder would
+ be stored)
+
+ allow the user to save to the 'most-recently-used-folder'
+
+ Disable stop processing while writing back spool to avoid
+ stop causing a corrupted/long locked spool file
+
+ Changes to allow clearing the weed-out list yet not totally
+ invalidating all the existing elmrc files.
+
+ Add - to allow fastmail to read from stdin
+
+ Make frm's exit status more meaningful, add much new functionality,
+ including the ability to recognize when a message is old, new, or
+ unread, and when mail is really "To" somebody else.
+
+ Change newmail to not keep files open to prevent systems with read
+ locks from appending to the file. Add print_prefix to force printing
+ the prefix if specified and only one folder being monitored.
+
+ And many bug fixes.
+
+ ************************************************************************
Index: elmME+.2.5.alpha0-cvs/2.4/Instruct
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/2.4/Instruct 2004-04-17 12:03:44.000000000 +0300
***************
*** 0 ****
--- 1,128 ----
+ Instructions
+ ------------
+
+ Last Update: $Date: 2004/04/17 09:03:44 $
+
+
+ This file contains instructions on how to create and install
+ the entire ELM mail system. It should be read BEFORE any attempts
+ are made at actually creating and/or installing any of the software
+ contained herein!
+
+ There is actually really one step needed - unpack all the shar
+ files and then;
+
+ $ cd <where-ever you're keeping the Elm sources>
+
+ $ sh Configure
+
+ Answer the questions of that program, then let it create the
+ localized Makefiles and system definition files for you. When it's
+ done you can double check the configuration (or customize it further)
+ by reading the Configuration Guide and then rerunning Configure.
+ There are lots of neat features that are unique to this mailer - it's
+ worth a quick perusal at least!
+
+ Once you're happy with the localized files, you then need to
+ create the documentation (so there's a bit of a catch-22 that you need
+ to format the Configuration guide before you are happy with the
+ localization but can't do that until you're happy with the
+ localization...oh well).
+
+ $
+
+ $ make documentation
+
+ When that's done, or even if it fails (don't worry too much about
+ it), do the following:
+
+ $ make all > MAKELOG 2>&1 &
+ $ tail -f MAKELOG
+
+ (if you're in "csh", substitute: "make all >& MAKELOG &")
+
+ This will take a fair while, so it's recommended that you go and eat
+ lunch or play a game for a while!! (alternatively, spend lots of money
+ on a really FAST machine and blink your eyes a few times...)
+
+ Assuming there are no errors during compilation (we'll have to assume
+ that for the moment) you should now be able to list the directory "bin"
+ and find the following files:
+
+ answer elmalias frm newalias prlong
+ checkalias fastmail listalias newmail readmsg
+ elm filter messages printmail
+
+ next, you can install all the software on your system by;
+
+ $ make install
+
+ Note: On some systems the mailer runs as setgid mail to have the
+ ability to WRITE to the mail directory (for lock files). If this is
+ true, you will have to be root to install Elm (or some other user that
+ can have the makefile set the setgid bit on the required executables).
+ If you have a different scheme at your site, feel free to set it up to
+ use that instead.
+
+ Finally, we're just about done! The final checks can be made
+ by the following commands:
+
+ $ elm -z
+
+ should say "no mail" if nothing's in your incoming mailbox or should
+ start up the Elm program if there is, and
+
+ $ elm -f test/test.mail
+
+ should read in EIGHT messages from various people. While here, try to
+ A)lias, A)lias current message for each of the eight messages to
+ confirm that the reply/address system is working okay. Now Q)uit
+ without having marked anything for deletion...answer the questions
+ accordingly.
+
+ If you get this far you're in wonderful shape! In fact, you're done!
+
+ Congratulations! You've just installed one of the best electronic mail
+ systems available today on your machine (if I say so myself!)
+
+ IF UPGRADING FROM AN EARLIER VERSION OF ELM, even 2.4 beta, it will
+ be necessary for all users alias files, as well as the systems alias
+ file, be upgraded to the new format. Also some error checking of
+ alias files has been added. All users should run the newalias command.
+
+ HANDY HINTS: If you want to create a print of the entire set of
+ sources, including this file, use the command:
+
+ $ make listing
+
+ Also, if you have a number of machines on a network, you can rlogin
+ to the remote machine and then do a remote install (after checking
+ to ensure that the networking copy method in the Makefile under the
+ target "remote-install" is correct) by typing:
+
+ $ make -f <remote Makefile> REMOTE=<remote file system> rmt-install
+
+ (for example, if we had installed the system on machine "machx" and
+ wanted to install it on "machy", with the Makefile in /src/Elm on
+ "machx", we could type from "machy";
+ $ make -f machx:/src/Elm/Makefile REMOTE=machx: rmt-install
+ to have it install the system on machine y!)
+
+ That's it!
+ ----------
+
+ This document and the entire mail system is
+
+ (C) Copyright 1988-1992 by the Usenet Community Trust
+ (C) Copyright 1986,1987 by Dave Taylor
+
+ Elm is now in the public trust. Bug reports, comments, suggestions,
+ etc. should be sent to:
+
+ Elm group's address: e...@DSI.COM
+ dsinc!elm
+
+ Mail address: Syd Weinstein
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
Index: elmME+.2.5.alpha0-cvs/2.4/NOTICE
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/2.4/NOTICE 2004-04-17 12:03:44.000000000 +0300
***************
*** 0 ****
--- 1,74 ----
+
+ The Elm(tm) Mail System General Public License
+
+
+ (C) Copyright 1988-1992, USENET Community Trust
+ (C) Copyright 1986,1987, by Dave Taylor
+
+
+ COPYING POLICIES
+
+ Permission is hereby granted for copying and distribution of copies of
+ the Elm source files, and that of any part thereof, subject to the following
+ license conditions:
+
+ 1. You may, without additional permission from the authors, distribute
+ Elm or components of Elm, with or without additions developed by
+ you or by others at no charge. You may also distribute Elm along
+ with any other product for sale, provided that the cost of the
+ bundled package is the same regardless of whether Elm is included,
+ and provided that those interested only in Elm must be notified
+ that it is a product freely available from the Elm Development Group.
+
+ 2. You may, without additional permission from the authors, distribute
+ copies of the Elm Documentation, with or without additions developed by
+ you or by others at no charge or at a charge that covers the cost of
+ reproducing the copies, provided that the Elm copyright notice is
+ retained.
+
+ 3. Furthermore, if you distribute Elm software or parts of Elm, with
+ or without additions developed by you or others, then you must
+ either make available the source to all portions of the Elm system
+ (exclusive of any additions made by you or by others) upon request,
+ or instead you may notify anyone requesting source that it is
+ freely available from the Elm Development Group.
+
+ 4. In addition, you may not omit any of the copyright notices
+ on either the source files, the executable file, or the
+ documentation, and
+
+ 5. Also, you may not omit transmission of this License agreement with
+ whatever portions of Elm that are distributed.
+
+ 6. Lastly, any users of this software must be notified that it is
+ without warrantee or guarantee of any nature, express or implied,
+ nor is there any fitness for use represented.
+
+ Software is a malleable thing - especially UNIX - and the authors can in no
+ way guarantee that using this program will not cause grievous damage to your
+ system. Of course this isn't anticipated, but if it does happen, the authors
+ cannot be held liable for any damages either directly or indirectly caused
+ by this event.
+
+ Modification of the system is encouraged, providing that the portions of
+ the system that are from the original still carry the appropriate copyright
+ notices and that the changed sections are clearly delimited as such. The
+ authors requests copies of any changes made to ensure that the various versions
+ stay reasonably in sync with each other. Please send all revisions to
+ e...@DSI.COM.
+
+ NOTE that it is not permitted to copy, sublicense, distribute or transfer any
+ of the Elm software except as expressly indicated herein. Any attempts to
+ do otherwise will be considered a violation of this license and your rights
+ to the Elm software will be voided.
+
+
+ Comments on the system and/or this licensing agreement is encouraged. Send
+ electronic mail to "tay...@intuitive.com". This license was written with
+ help from Scott McGregor. Thanks Scott!
+
+ ----
+ Elm is a trademark of Dave Taylor.
+
+ NOTE: Elm is now in the public trust. Comments, suggestions, bug reports and the
+ like should be sent to Syd Weinstein; e...@DSI.COM (dsinc!elm)
Index: elmME+.2.5.alpha0-cvs/2.4/Overview
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/2.4/Overview 2004-04-17 12:03:44.000000000 +0300
***************
*** 0 ****
--- 1,124 ----
+ An Overview of the Elm Mail System
+ ----------------------------------
+
+ Introduction
+
+ This file discusses the functionality of the Elm mail system
+ and explains some of the motivation behind the various features.
+
+ 1. What is Elm?
+
+ Currently on UNIX, there seems to be a preponderance of line-oriented
+ software. This is most unfortunate as most of the software on UNIX tends to
+ be pretty darn hard to use! I believe that there is more than a slight
+ correlation between the two, and, since I was myself having problems using
+ "mailx" with high-volume mail, I created a new mail system.
+
+ In the lingo of the mail guru, Elm is a "User Agent" system,
+ it's designed to run with "sendmail" or "/bin/rmail" or any
+ other UNIX Mail Transport Agent (according to what's on your system)
+ and is a full replacement of programs like "/bin/mail" and "mailx".
+ The system is more than just a single program, however, and includes
+ programs like "frm" to list a 'table of contents' of your mail, and
+ "printmail" to quickly paginate mail files (to allow 'clean'
+ printouts).
+
+ 2. What's New about Elm?
+
+ The most significant difference between Elm and earlier mail
+ systems is that Elm is screen-oriented. Upon further use, however,
+ users will find that Elm is also quite a bit easier to use, and quite a
+ bit more "intelligent" about sending mail and so on. For example, say
+ you're on "usenet" and receive a message from someone on the Internet.
+ The sender also "cc'd" another person on Internet. With Elm you can
+ simply G)roup reply and it will build the correct return addresses.
+
+ There are lots of subtleties like that in the program, most of
+ which you'll probably find when you need them.
+
+ 3. What systems does it work on?
+
+ The Elm development group uses almost every UNIX system out
+ there between all of its volunteers. Elm runs on USL System V, BSD,
+ SunOS, Apollo, UTS, Pyramid and Xenix and should run on almost any UNIX
+ systems without any modifications (if there turn out to be
+ modifications, please notify the Elm Development Group as soon as
+ possible).
+
+ 4. Does it obey existing mail standards?
+
+ Yes! That's another of the basic reasons the program was
+ originally written! To ensure that the date field, the "From:" line
+ and so on were all added in the correct format. The program is 100%
+ correct according to the RFC-822 electronic mail header protocol
+ guide.
+
+ 5. What were the main motivating factors for Dave to write Elm?
+
+ The first two I've already mentioned, but here's a (somewhat
+ partial) list;
+
+ - To have a mail system that exploited the CRT instead of
+ assuming I'm on a teletype.
+
+ - To have a mailer that was 100% correct when dealing with
+ network mail (i.e. RFC-822).
+
+ - To create a system that needed no documentation for the
+ casual user, but was still powerful enough and sophisticated
+ enough for a mail expert.
+
+ - To write a "significant" piece of software as a learning
+ experience (I admit it!)
+
+ - To find out how reasonable it is to try to modify a program
+ to meet the expectations of the users, rather than vice-versa.
+
+ - To basically correct some of the dumb things that the current
+ mailers do, like letting you send mail to addresses that it
+ could trivially figure out are going to result in 'dead.letter'
+
+ - To tie in intimately with the pathalias program output, and
+ allow users to specify machine!user or user@machine and have
+ the COMPUTER do the work of figuring out addresses...
+ (Note: As of 2.4, this has been removed from Elm, as routing
+ mail transports are now readily available for all UNIX systems).
+
+ 6. Is it reliable?
+
+ The mailer, in various incarnations, has logged literally
+ thousands upon thousands of hours without any problems that aren't
+ now corrected. As new problems arise they're dealt with in as
+ rapid a manner as possible...
+
+ 7. Disclaimers
+
+ The author of this program will deny all liability for any
+ damages, either real or imagined, due to the execution of this program
+ or anything related to either the software or the system. Furthermore,
+ the entire system and all source within, including the presentation
+ screens and commands, are legally copyrighted by the author, and while
+ they can be used, and abused, for public domain systems, it will be in
+ violation of the law if used in systems or programs sold for profit.
+
+ By installing the mailer or even extracting it from the network,
+ you are agreeing to the above disclaimer.
+
+ 8. Finally
+
+ I think it's a good program, and I can cite at least 75 people
+ who would (begrudgingly, I'm sure) agree. You should most certainly
+ install the program and try it!!
+
+
+ -- Dave Taylor
+ tay...@intuitive.com
+ -- Syd Weinstein, Coordinator
+ Elm Development Group
+ e...@dsi.com
+
+ Original: March 13th, 1986
+ Modified: October 3th, 1992
+ Syd Weinstein, Coordinator
+ Elm Development Group
+ e...@dsi.com
Index: elmME+.2.5.alpha0-cvs/2.4/Patchlist
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/2.4/Patchlist 2004-04-17 12:03:44.000000000 +0300
***************
*** 0 ****
--- 1,1612 ----
+
+ This Patchset is for the 2.4 version.
+
+ Look file ChangeLog.ME for changes of ME version.
+ Look file README.ME+ for changes of the 2.4ME+ version.
+
+ =========================================================
+ Patch Set - Patches 24: Tue Sep 20 14:01:13 EDT 1994
+ Elm 2.4PL23 -> Elm 2.4PL24
+
+ Remove autoreply/arepdaem, its a security hole
+ From: Syd
+
+ Fix where buffer was not getting null terminated during its
+ construction, so the strcat failed (due to garbage data existing in the
+ array at malloc() time).
+ From: l...@yallara.cs.rmit.oz.au (Luke Mewburn)
+
+ Fix ANSI prototype stripping macro
+ From: "Tom Moore" <tmo...@fievel.DaytonOH.NCR.COM>
+
+ fixed ReadCh() to recover from EINTR and EAGAIN instead
+ of just returning an unexpected EOF.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Replaced the get_tz_mins() routine in lib/get_tz.c with a portable
+ version that requires no configuration. Rewrote the test case in
+ lib/get_tz.c, and also wrote in support to simplify configuration
+ tests. Dropped TZMINS_USE_XXXX configuration parameter. Simplified
+ timezone determination in Configure. The new get_tz_mins() introduces
+ two side effects. First it steps on the static data returned by
+ localtime(). Second, it uses a routine in lib/date_util.c, which
+ requires debug initializations. Rewrote get_arpa_date() to work around
+ the first issue. Rather than doing the same for lib/strftime.c, just
+ removed the timezone stuff with a conditional compile. Elm does not
+ use it. Added debugging initializations to util/fastmail.c.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ I made the following changes to elm 2.4pl23 module pmalloc.c after testing on
+ a DEC Alpha running OSF1 v1.3. The difficulty is that the Alpha hardware
+ requires certain alignment for some operations which was not supplied by
+ pmalloc (8 byte for addresses instead of 4 byte). I made a simple minded
+ change to pmalloc.c to force alignment of the allocated data block to be
+ adequate on DEC Alpha OSF1.
+ From: j...@lime.rsmas.miami.edu (Jim Brown)
+
+ detect whether atol() is a macro
+ From: Mitch DSouza <m.ds...@mrc-applied-psychology.cambridge.ac.uk>
+
+ Recognize the "#$HDR" magic cookie as the header to place in the
+ user's elmrc file rather than hardwiring a minimally helpful
+ string into the binary.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Fix Elm looping if an EOF is received.
+ From: Gregory Neil Shapiro <gsha...@WPI.EDU>
+
+ There is a bug in the alias-system of elm-2.4.23 that did not appear in
+ elm-2.4.21. When searching for a string in the alias-table with the '//'
+ command, elm sometimes gets a segmentation fault. With help of a debugger,
+ I found that the function shift_lower gets a NULL argument. A fix is
+ appended, but maybe the problem lies elsewhere.
+ From: Sjaak Schilperoort <J.W.Schi...@research.ptt.nl>
+
+ The latest Linux shared library (4.5.8) "catches" a double fclose()
+ by generating a SIGSEGV. :-/
+ From: fin!ch...@dg-rtp.dg.com (Chip Salzenberg)
+
+ Fix a line of debug output that is too long
+ From: "C.R. Ritson" <C.R.R...@newcastle.ac.uk>
+
+ Here are some more of fixes to correctly call fflush() and unlock() in sequence.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ I had to put in some changes to builtin+ to allow it to display
+ 8-bit letters as they should when the message has been sent
+ through a real 8-bit channel like ESMTP with 8bit MIME Content-
+ Transfer-Encoding.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Tune the Ultrix fix for ispell
+ From: Bill Gianopoulos <w...@sccux1.msd.ray.com>
+
+ Solaris 2.3 can return EACCES or EEXIST for lockfile already existing.
+ From: xc...@uxa.ecn.bgu.edu (Chad Adams)
+
+ Below are the changes required to compile/link elm 2.4 pl23 under
+ QNX 4.2 with the Watcom 9.5 compiler (very picky).
+ From: "Brian Campbell" <brianc@quantum>
+
+ In utils/from.c there was a conditionalized declaration of
+ getpwuid() which was triggered by the environment being non-
+ POSIX instead of non-STDC.
+ From: Jukka Antero Ukkonen <ukk...@csc.fi>
+
+ There was a typo in src/curses.c. An include read out like
+ "# include <vararg.h>" though the file name should have been
+ varargs.h.
+ From: Jukka Antero Ukkonen <ukk...@csc.fi>
+
+ Just a minor fix to an impossible character comparison.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ I found a few months old patch I have not sent you before (I guess).
+ It avoids unknowingly confusing some too rigidly and simple mindedly
+ coded mailers with weird settings like
+
+ charset=us-ascii and textencoding=8bit
+
+ This patch will force 7bit encoding with charset=us-ascii.
+ E.g. older versions of pine will dump core on 8bit & us-ascii.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ I had to add a region of conditional compilation around "defs.h"
+ to make Configure work correctly with the TZNAME_USE_xxxx stuff.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ The "copy_message" function in src/fileio.c incorrectly computes the
+ size of the message. The "bytes_seen" variable currently counts all
+ bytes in the message ***including the message header*** when it should
+ only be counting the bytes in the actual body of the message.
+ From: Thomas Dwyer III <tom...@mtu.edu>
+
+ Extra } in edit_mailbox removed.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Add an fflush to detect over quota on file saves.
+ From: Larry Schwimmer <ros...@cyclone.Stanford.EDU>
+
+ Block sigwinch when in the external pager.
+ From: j...@yog-sothoth.dcrt.nih.gov (James W. Adams)
+
+ Work around null from names by looking to see whether the second or
+ third field is a valid month and using that to determine if there
+ is an address.
+ From: al...@samwise.dccs.upenn.edu (Alex Garthwaite)
+
+ Fix up Solaris and SVR4 timeout signal handling
+ From: Syd
+
+ Add extern declaration of strerror to avoid compiler warning.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Moved #defines for SETJMP & LONGJMP from src/editmsg.c to hdrs/defs.h and
+ used them instead of (set|long)jmp directly. This makes the usage consistent
+ and Solaris 2.3 behaves correctly w.r.t stop/continue.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+
+
+
+
+
+ =========================================================
+ Patch Set - Patches 23a through 23d: Sun Sep 19 19:48:31 EDT 1993
+ Elm 2.4PL22 -> Elm 2.4PL23
+
+ Write options to elmrc even if their values are empty strings.
+ Rationalize code that reads and writes weedouts and alternates.
+ From: chip%f...@myrddin.sybus.com
+
+ Correct problem in fetch_alias() with alias record fixup that caused
+ core dump on machines with pointers larger than int. This problem
+ was reported on comp.mail.elm by Richard Eckman and Jim Brown. Simplify
+ get_one_alias() by having it use fetch_alias().
+
+ break_down_tolist() tried to blindly split address lists at "," which
+ caused bogus results with addreses that had a comma inside a comment
+ or quoted text, such as "user@domain (Last, First)". This patch steps
+ through the address in quanta of RFC-822 tokens when searching for a
+ delimiting comma. It also adds "rfc822_toklen()" to the library to
+ get that length.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ This fixes a bug in the MIME code. Include_Part() uses expand_env()
+ to expand the include file name, but since expand_env() is destructive
+ [it uses strtok()] the file name gets corrupted, and the "Content-Name"
+ header can contain a bogus value. The easy fix would be a one-line
+ hack to Include_Part to use a temporary buffer. This patch does not
+ implement the easy fix. *Every* place expand_env() is used, its side
+ effects cause problems. I think the right fix is to make expand_env()
+ non-destructive (i.e. have it duplicate the input to a temporary buffer
+ and work from there). The attached patch modifies expand_env() in
+ that manner, and eliminates all of the `copy to a temporary buffer'
+ calls that precede it throughout elm.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ I have been repetedly crashing elm 2.4.22 until I discovered that a
+ test for failing to open the system elmrc file is mising. This could
+ usefully be added in read_rc.c. Version info and patch follows:
+ From: "C.R. Ritson" <C.R.R...@newcastle.ac.uk>
+
+ Greatly simplified "lib/striparens.c" to use new rfc822_toklen() routine.
+ This cut more than 50% out of the object size. Also added _TEST case.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ When resyncing aliases from elm, and there was aliases to delete,
+ the alias.pag file could be corrupted since file_offset wasn't set to zero.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ A long-standing bug of handling replies to VMS systems.
+ Original "From: " -line is of format:
+ From: "NAME \"Real Name\"" <USERNAME@vms-system>
+ (PMDF mailer)
+ Anyway, parse_arpa_who() strips quotes too cleanly
+ resulting data:
+ NAME \"Real Name\
+ which, when put into parenthesis, becomes:
+ (NAME \"Real Name\)
+ which in its turn lacks closing `)'
+ Patch of lib/parsarpwho.c fixes that.
+ strtokq() started one position too late to search for next double-quote (") char.
+ Another one-off (chops off trailing comment character, quote or not..) in src/reply.c
+ From: Matti Aarnio <m...@utu.fi>
+
+ Three changes to expand_env() in src/read_rc.c: make it non-destructive,
+ have it return an error code instead of bailing out, and add a buffer
+ size argument to avoid overwritting the destination. The first is to
+ avoid all of the gymnastics Elm needed to go through (and occasionally
+ forgot to go through) to protect the value handed to expand_env().
+ The second is because expand_env() was originally written to support
+ "elmrc" and bailing out was a reasonable thing to do there -- but not
+ in the other places where it has since been used. The third is just
+ a matter of practicing safe source code.
+
+ This patch changes all invocations to expand_env() to eliminate making
+ temporary copies (now that the routine is non-destructive) and to pass
+ in a destination length. Since expand_env() no longer bails out on
+ error, a do_expand_env() routine was added to src/read_rc.c handle
+ this. Moreover, the error message now gives some indication of what
+ the problem is rather than just saying "can't expand".
+
+ Gratitous change to src/editmsg.c renaming filename variables to
+ clarify the purpose.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ [ Patch description ]
+ Update the example elmrc and move a couple out of order variable
+ descriptions.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Handle reply-to in batch mode.
+ From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
+
+ In fastmail, if environment variable $REPLYTO is set, use it as
+ default Reply-To. Also, eliminate unnecessary strlen() calls.
+ From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
+
+ Support aliases both on 64 bit and 32 bit machines at the same time.
+ From: Dan Mosedale <mose...@genome.stanford.edu>
+
+ Spaces in weedout strings wasn't preserved ("From " became "From").
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Added text about how the weedout list works w.r.t From: and From_
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ default_weedlist() can't use pmalloc, because weedout() calls free when
+ it encounters *clear-weed-list*.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ The NLS messages for elm -h output didn't have the -i or -t options.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ The message CannotInitErrorExpanding was called CantExpandEnvVar in s_elm.m.
+ Change it for consistency.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Since it was not intended that varargs.h and stdarg.h were
+ included simultaneously there may be colliding definitions
+ on some systems if you use a standard C compiler. If both
+ of these headers are included the compiler has no way to
+ know which definitions to use.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ "*clear-weed-list*" in elmrc was wiped out when one saved the options in elm.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ When STDC is used on Convex the feof() function is defined as
+ a true library routine in the header files and moreover the
+ library routine also leaks royally. It returns always 1!!
+ So we have to use a macro. Convex naturally does not provide
+ you with one though if you are using a STDC compiler. So we
+ have to include one.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Removed bogus string lockfile.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ The last character of a form field gets zapped if more characters than
+ the field expects are entered.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Patch for Elm 2.4 PL22 to correct handling of SIGWINCH signals on
+ DecStations with Ultrix 4.2.
+ The problem was that elm running in an xterm exits silently when the
+ window is resize. This was caused by incorrect signal handling for BSD.
+ From: vo...@isa.de
+
+ Implement new timezone handling. New file lib/get_tz.c with new timezone
+ routines. Added new TZMINS_USE_xxxxxx and TZNAME_USE_xxxxxx configuration
+ definitions. Obsoleted TZNAME, ALTCHECK, and TZ_MINUTESWEST configuration
+ definitions. Updated Configure. Modified lib/getarpdate.c and
+ lib/strftime.c to use new timezone routines.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Add proper casts to free() calls to suppress warnings.
+ Properly cast return types.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Added -d option to elmalias.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Elm tries to replace the system toupper() and tolower() on current
+ BSD systems, which is unnecessary. Even worse, the replacements
+ collide during linking with routines in isctype.o. This patch adds
+ a Configure test to determine whether replacements are really needed
+ (BROKE_CTYPE definition). The <ctype.h> header file is now included
+ globally through hdrs/defs.h and the BROKE_CTYPE patchup is handled
+ there. Inclusion of <ctype.h> was removed from *all* the individual
+ files, and the toupper() and tolower() routines in lib/opt_utils.c
+ were dropped.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Fix signal type for 386bsd
+ From: Scott Mace <sm...@freefall.cdrom.com>
+
+ When an environment variable was given as the tmpdir definition the src
+ and dest overlapped in expand_env. This made elm produce a garbage
+ expansion because expand_env cannot cope with overlapping src and
+ dest. I added a new variable raw_temp_dir to keep src and dest not to
+ overlap.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ I compiled elm 2.4.22 with Purify 2 and fixed some memory leaks and
+ some reads of unitialized memory.
+ From: vo...@isa.de
+
+ A change to answer:s mail command to be like those of elm and filter.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Elm was failing to write an empty "alternatives" list to elmrc.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Usage message for elmalias changed.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Correct typo and use hard spaces within quotes in *clear-weed-list* note.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ fix where checkalias doesn't fully expand multi-database aliases
+ From: Steve Wolf <wo...@atl.hp.com>
+
+ The macro ctrl(c) did not work correctly for a DEL character
+ neither did it make the backward mapping from a control char
+ to the letter that is normally used with an up-arrow prefix
+ to represent the control character.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Don't declare _exit() if <unistd.h> already did it.
+ From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
+
+ Test ANSI_C, not __STDC__ (which is not set on e.g. AIX).
+ From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
+
+ The ANSI version of varargs is "stdarg", not "stdargs".
+ From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
+
+ Added some documentation for textencoding variable.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ more purify found errors
+ From: vo...@isa.de
+
+ Add missing parens
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Fix problem where deleting to previous line caused duplication due to the
+ file being opened for append (in append mode, all writes are to the end of
+ file regardless of the file pointer).
+ From: p...@lunch.asd.sgi.com (Paul Close)
+
+ have Writechar() backspace over the left edge of the screen to the end
+ of the previous line if the current line is not the first line on the
+ screen.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Call to expand_env for pager should be call to do_expand_env.
+ temp_dir not initialized.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Try splitting chown into two calls to set group on systems where
+ chown of owner is restricted.
+ From: Syd
+
+ strtokq was called with the wrong number of parameters.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Add ability for elmalias to determine HOME if missing from the environment.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Changed a few buffers from LONG_STRING (512) to VERY_LONG_STRING
+ to avoid long header lines overflowing the allocated space. At
+ least 1024 bytes should be allowed in any header line/field.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Here's some more patch stuff for undersize buffers for header lines.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Fix a code portability problem with Convex.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ I found a few places more where the code was missing a call
+ to fflush() before it called unlock() and fclose()/exit()
+ right after unlocking the mail drop.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Erroneous Content-Length:s that ended up beyond the end of the folder
+ wasn't checked for, so the rest of the folder became one big message.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ expand() didn't read the global rc file if the user elmrc didn't exist or
+ didn't have an entry for maildir.
+ From: Jan....@sa.erisoft.se (Jan Djarv)
+
+ Conform textencoding addition to style standard.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Although it doesnt solve the limit/resync problem of new
+ messages, allow them to be accessed anyway.
+ From: aus...@solan.unit.no
+
+
+
+ =========================================================
+ Patch Set - Patches 22 through 22: Sun Jun 6 14:09:37 EDT 1993
+ Elm 2.4PL21 -> Elm 2.4PL22
+
+
+ If I have two aliases of the same name the duplicate is caught *but
+ still written to the data file*!!!
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ test firstname == lastname and if true zero out firstname before
+ writing to the aliases.text file. Let me check out the source. Now if
+ you try to change a SYSTEM alias it lets you know and asks to verify
+ that you are going to superceed that alias.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ fix @aliasname sort problem
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Move first name to lastname if lastname blank.
+ this is the only real way for now. I think that the dbz stuff, sorting,
+ and other things all hope to see a lastname.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ In some cases, with certain editors, the user can create an
+ aliases.text file in which the last line is terminated with an EOF but
+ doesn't have a '\n'. Currently, elm with complain that the line is
+ too long.
+ From: "William F. Pemberton" <wf...@holmes.acc.virginia.edu>
+
+ The test in delete did not take into account for mixed case.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Fix builtin editor so you can run "readmsg" with "~<".
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Have real_from() ignore bogus timezones in From_ lines
+ rather than bailing out with an error.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ According to the SVID (version 3) the function crypt is
+
+ char * crypt( const char *, const char * )
+
+ However, it is declared as
+
+ unsigned char crypt();
+
+ on line 179 of src/encode.c. The "unsigned" keyword causes the compile
+ to fail on SVID3 compliant systems. Upon inspection, it appeared that
+ the declaration was not even required if CRYPT was not defined, so
+ changed it to be conditionally compiled.
+ From: Larry Philps <lar...@sco.COM>
+
+ len_next_part() was botching quote-delimited strings.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ guide fixes:
+ Update for quotes
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Added safe_malloc(), safe_realloc(), and safe_strdup(). They
+ will be used in the new elmalias utility.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Initialize safe_malloc() failure trap just to play it safe. Although
+ Elm doesn't currently use these routines, do this just in case somebody
+ someday adds a call to a library routine that does use them.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Added fetch_alias() and next_addr_in_list() routines for use in
+ new elmalias utility.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Modified to use new safe_malloc() routines.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Added new utilities "elmalias" and "prlong". Modified "checkalias"
+ and "listalias" to use them.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Added elmalias.1 man page. Updated Users.guide to mention elmalias.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Added references to elmalias(1L).
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Fix year handling bug in date(1) time formats.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ I have now added a parameter which controls whether want_to clears the
+ line and centers the question or behaves like it did before. I also
+ added a 0 at the end of the parameter list to all the other calls to
+ want_to where a centered question on a clean line is not desirable.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ The builtin editor couldn't back up to a line that had a character
+ at the wrapcolumn position.
+ Added tab handling to the builtin editor.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ None of i, q, x, >, and ^L are recognized by the single character help
+ on the options screen. <return> causes the options screen to scroll
+ because all non-printing characters are echoed by the error message.
+ Options and alias help files didn't list all commands.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ If a To: or Cc: line is split in a comment, that is between ( and ),
+ get_and_expand_everyone won't parse that correctly.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Check for EINTR if getchar() returns EOF. Happens after a resume from an
+ interactive stop.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The setting of relop to the default (EQ) was in the wrong place,
+ causing the wrong relation to be inserted in the rule.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Removed a malloc of a struct condition_rec that is never used.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The USR2 signal lost messages on some OS:es and did an unnecessary resync
+ on others.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The primary editor didn't change at once when you entered a new value in
+ the option screen.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The wrong NLS message was used in the option screen for the "A(l)ias Sorting".
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The "window is too small..." message gets printed on the wrong screen. The
+ message also needs \r\n at the end.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Added check if headers_per_page is zero in get_page().
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ want_to() wrote "No." when user pressed return even if the default answer
+ wasn't == *def_ans_no.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The onoff macro assumes a boolean option only has values 1 or 0.
+ This is not true for forms option (may be 2 == MAYBE).
+
+ This is known bug EB51 BTW. I'm looking at the list now and there are some
+ bugs that I think are simple, and I'll try to fix some of them.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Fix to don't use address from reply-to field if it is empty.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ This can not happen according to RFC822. It requires at least one address if the
+ reply-to is present, so this bug (EB48) isn't really a bug. But one can
+ always try to be nice :-).
+
+ nameof() didn't check that the character after the common string was /, thus
+ (if Mail is the folderdir) Maildir/x was made to be =dir/x.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Added function enforce_newline to enforce newline (what else :-) at
+ end of message.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ These patches makes 'T' (since it was free) do a Tag and Move command in the
+ index and alias page, and in the builtin pager.
+ In the alias help in src/alias.c, there is a tolower done on the character
+ one wants help for. This is clearly wrong.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ On AIX, __STDC__ is not defined but it does use unistd.h, etc. In
+ hdrs/def.h, ANS_C already gets defined if __STDC__ or _AIX. But this
+ variable then needs to be used in src/init.c and hdrs/filter.h in place
+ of the current test for __STDC__.
+ From: rst...@elegant.com (Robert Story)
+
+ the posix macros to interpret the result of the stat-call.
+ From: vo...@isa.de (Gerald Vogt)
+
+ In GetPrompt(), when timeout = 0 make sure we check the return of
+ ReadCh() for EINTR on non-POSIX (BSDish) systems.
+ From: t...@osf.org
+
+ I noticed when I was sorting a mailbox by subject, that 2 messages with
+ the following subjects
+
+ Subject: Re: Reading news
+ Subject: Reading news
+
+ they were sorted as shown above even though the "Re:" message was
+ "Sent" after the original. It turns out that the routine skip_re has a
+ bug. If the actual subject (the part after the "Re: ") starts with the
+ characters "re" skip_re will erroneously not strip the "Re:" part at
+ all. The following patch fixes that behaviour.
+ From: Larry Philps <lar...@sco.COM>
+
+ Give up and add an Ultrix specific patch. There is a bug in Ispell under
+ ultrix. The problem is that when ispell returns, the terminal is no
+ longer in raw mode. (Ispell isn't restoring the terminal parameters)
+ From: Scott Ames <sc...@cwis.unomaha.edu>
+
+ For many embedded X.400 addresses in the format
+ "/.../.../.../.../"@admd.country NLEN was simply too short and part of
+ the address never made it to the reply address. In my opinion 512 bytes
+ should be enough. So make it LONG_STRING.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ I found a small screen corruption problem with elm. If you select 'c' for
+ change mailbox and then back out by just typing <Return> at the prompt for the
+ new mailbox, the prompt 'Command: ' seems to be reprinted on the wrong line
+ leaving the previous prompt and the 'Change Mailbox' string in place.
+
+ Further investiagtion tracked the problem to the softkey programming. When a
+ newline (LF) character is sent to the terminal in the sofkey's "send" string,
+ the terminal still performs a linefeed just as if the linefeed were sent at any
+ other time. The particlar set of softkeys for change mode has four such
+ newlines and this is enought to cause the screen to scroll up one line. This
+ in turn causes the prompt to appear on the wrong line.
+
+ I have fixed this by replacing the newlines with carriage returns instead. I
+ checked and this still performs the desired action without actually scrolling
+ the screen.
+ From: Steve Fosdick <ste...@aom.bt.co.uk>
+
+ Lets try it again. In the file newmbox.c you check whether a mail is
+ metamail. You also check whether a mail has a sun-attachment but elm doesn't
+ recognize whether it has other attachment from for example the NeXT.
+ From: r...@IS.TWI.TUDelft.NL (Rob Kooper)
+
+ For convex, #if-defed memcpy, memset and sleep.
+ From: r...@oso.chalmers.se (Rafal Maszkowski)
+
+ SunOS 4.1.3 uses the BSD convention for signal handling in system
+ calls like read. The system call resumes when the signal handler
+ returns unless the SA_INTERRUPT flag is set. Thus to make elm resize
+ it's window after a SIGWINCH this flag must be set.
+ From: vo...@isa.de (Gerald Vogt)
+
+ readmsg treated a line with From_ preceeded by whitespace as a valid
+ message delimiter.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ frm treated a line with From_ preceeded by whitespace as a valid
+ message delimiter.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ newmail treated a line with From_ preceeded by whitespace as a valid
+ message delimiter.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The message OptionExitHelp in s_elm.m is called OptionReturnHelp in header and
+ source files. Change it to keep consistency.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ There was a mismatch between OptionPrintHelp and the message in src/options.c
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ It's very non-portable, and fairly dangerous, to ass_u_me that you
+ know what's inside a FILE. So don't #define clearerr().
+ From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
+
+ Use strerror() with ANSI compilers.
+ From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
+
+ I'm using Elm 2.4.21 under Linux. Linux has no Bourne shell. Each
+ user installs her favorite shell as /bin/sh. I use Bash 1.12.
+
+ Elm invokes the mail transport (MTA) like so:
+
+ ( ( MTA destination; rm -f tempfile ) & ) < tempfile &
+
+ This form of command doesn't work with my Bash, in which any command
+ which is backgrounded ("&") gets its stdin attached to /dev/null.
+
+ The below patch arranges for Elm to call the MTA thusly:
+
+ ( MTA destination <tempfile; rm -f tempfile ) &
+ From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
+
+ Use pointer arithmetic for aliases on crays
+ From: Quentin Van Abbe <rxx...@argolis.osf.rmit.OZ.AU>
+
+ NLS message ElmOptionBorderMenu should be ElmOptionBorderHelp in one place.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Try and get getarpdate to work on AIX
+ From: "William F. Pemberton" <wf...@holmes.acc.virginia.edu>
+
+ If there are local user names (account names) in the alias, they don't
+ get fully expanded with a GCOS field like they do when you type an
+ account name on the To line.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Jan's removal of tolower in alias.c breaks help for 'I'. This fixes
+ that and makes the help messages for characters that have printable
+ synonyms on the alias and options screens consistent with the help files.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Fix problem where "<space>From" was recognized as a valid "From_" line.
+ From: decwrl!decvax!gatech!WLK.COM!chip (Chip Rosenthal)
+
+ created a new elmrc variable named "readmsginc". This specifies an
+ increment by which the message count is updated. If this variable is
+ set to, say, 25, then the message count will only be updated every 25
+ messages, displaying 0, 25, 50, 75, and so forth. The default value
+ of 1 will cause Elm to behave exactly as it currently does in PL21.
+ From: Eric Peterson <epet...@encore.com>
+
+ On the DEC Alpha, OSF/1 the following change made things happy.
+ From: da...@opus.csd.uwm.edu (Dave Rasmussen)
+
+ Prevent overwriting appended message.
+ From: Jason Molenda <mol...@sequent.com>
+
+ Add sleepmsg to elmrc to control sleep timing for transient messages
+ From: Syd
+
+ When compiled on a POSIX host PL22 failed checking whether the file is
+ readable and a regular file or not. There was one `!' missing in the
+ `if (S_ISREG(mode))' test which should read `if (! S_ISREG(mode))'.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Fix wrong message being displayed and then overwritten
+ for long aliases.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ The recent feature addition for the "readmsginc" variable did not modify
+ the output statement that is used when MMDF is defined. The following
+ patch makes the variable work on MMDF systems.
+ From: Larry Philps <lar...@sco.COM>
+
+ A MIME body-part must end with a newline even when there was no newline
+ at the end of the actual body or the body is null. Otherwise the next
+ mime boundary may not be recognized. The same goes with the closing
+ boundary too.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Moved the new numeric variables to the Numeric Variables section and
+ applied the quoting/highlight policy to them.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ When frm checked for file access on a POSIX system there
+ was a test `&& S_ISREG(mode)' instead of `&& ! S_ISREG(mode)'
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ A couple of calls to want_to() had typos. Here is the patch.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ document new tidy feature
+ From: da...@devteq.co.uk (Dave Thomas)
+
+ This is a trivial patch to 'from.c' to tidy up the output is
+ the cases where the 'from' part is longer that 20 characters.
+ It adds the new '-t' (for tidy) option:
+ From: da...@devteq.co.uk (Dave Thomas)
+
+ fix elmalias bug
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Fix bug where text following "<" within double-quote delimited comment
+ is taken as an address.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ fix want-to patch collision
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ It looks like there was some earlier patch that re-introduced
+ some lock problems from the past time of 2.4beta.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ While looking into the feasibility of adding `limit sender' as requested
+ on Usenet, I noticed that the limit code was replicated for each of
+ the supported conditions. The following patch simplifies limit_selection()
+ by sharing the common code between all conditions.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ In the Makefile listalias was given only a+x permission
+ though it should have been a+rx.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Total rewrite of verify_transmission(). The existing code was a monsterous
+ mess and rife with bugs (couldn't forget zero-length messages in send-only
+ mode, prompts were being setup wrong, perms on Canceled.mail not done right,
+ etc. etc. etc.) Previously, the work had been split among two places,
+ the main code in mail() and the menu in verify_transmission(), and Elm kept
+ bouncing back and forth between the two. Now, all work is performed in
+ verify_transmission() and it simply returns a send-it/forget-it status.
+ Modified "Canceled.mail" handling so that the files it creates are in
+ an mbox format (i.e. now includes headers as well as message body).
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ With this patch build_address() should treat local mailing
+ lists and other aliases known by the transport agent as valid
+ addresses.
+ I also conditionalized printing the "Expands to: " message
+ in check_only mode to be done only when there is an expanded
+ address to print. Build_address will inform anyway about an
+ alias that does not exist.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Move the actual file saving code out of "save_copy()" into a seperate
+ routine called "append_copy_to_file()" to make it globally available.
+ In particular the "Canceled.mail" handling is going to be rewritten
+ to use it.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Dave Thomas forgot to update the NLS message file when he added the tidy
+ option to frm. While I was at it, I did a little cleanup to keep things
+ alphabetized.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ check for missing replyfile
+ From: r...@lorien.gatech.edu (Roy Mongiovi)
+
+ Elm either failed to expand a group alias or crashed in strlen
+ (called from do_expand_group()).
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Cosmetic addition to previous verify_transmission() changes. The
+ merged code highlighted the fact that i)spell displayed a message
+ and then immediately cleared the screen (erasing that message) before
+ invoking ispell. This patch drops the clear screen.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Make it use the message catalog already defined
+ From: Super Y.S.T. <tab...@matsumoto.dcl.co.jp>
+
+
+
+
+
+
+ =========================================================
+ Patch Set - Patches 21 through 21: Mon Feb 8 13:41:36 EST 1993
+ Elm 2.4PL20 -> Elm 2.4PL21
+
+ Do not assume that "char c" can represent EOF.
+ From: ch...@tct.com (Chip Salzenberg)
+
+ exitprog.c makes a reference to a null character pointer, savecopy.c
+ tries to reference an uninitialized variable, and the previous patch to
+ src/lock.c to get rid of an uninitialized variable compiler message
+ needed to be put in filter/lock.c as well.
+ From: w...@grouper.mkt.csd.harris.com (W. David Higgins)
+
+ Just a small bugfix for the '#' (Debug Message) screen. The columns of the
+ various flags don't all line up properly:
+ From: Gary Bartlett <ga...@abekrd.co.uk>
+
+ Significant changes to provide consistent Date and From_ header
+ cracking. Overhauled date utilities and moved into library. Moved
+ real_from() into library. Modified frm, newmail, and readmsg utilities
+ to use library version of real_from(). Moved get_word() from Elm
+ source into library. Added new library routines atonum() and strfcpy().
+ Fixed trailing backslash bug in len_next().
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ add c)hange alias command to alias helpfile
+ if a deleted alias is changed, undelete it. Also added the 'N'
+ flag to changed aliases to help remind the user. Documented it.
+ Note: if they mark the alias for deletion AFTER making the change it
+ WILL be deleted. (and marked accordingly)
+ modified alias mode title string to indicate when a resync was
+ needed.
+ allow editing alias file when none exist.
+ Now aliases are check for illegal characters (and WS) and
+ addresses are check for illegal WS when they are being entered. If
+ anything illegal is found and message is printed and they keep entering
+ the item until they get it right.
+ I fixed a couple of places where int should be long to match
+ the declared type of alias_rec.length
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ fix which file name is used on confirm messages
+ From: vo...@isa.de (Gerald Vogt)
+
+ There is a mismatch between the number of args and the format string in
+ src/pattern.c.
+ In nls/C/C/C/s_filter.m there is a , after OutOfMemory.
+ This is my fault, and although it doesn't seem to affect things, there is no
+ need for it.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Elm switches screens prematurely when calling metamail. It switches
+ before writing the "Press any key..." message, thus losing metamail output.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ read_headers() in src/newmbox.c assumes that Mime-Version preceeds
+ Content-Type in the headers. I removed that assumption.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ On a resync, the temp file was being reopened in *append*
+ mode, thus the fseek that tried to back up the file pointer had no
+ effect.
+ From: Larry Philps <lar...@sco.COM>
+
+ alter the message on aborts to report the temp file name to the user
+ From: The Postmaster <sys...@central1.lancaster.ac.uk>
+
+ During 'make uninstall', an error occurs with the make for doc/,
+ due to a wrongly-extended "if" statement in the Makefile.
+ From: Allan Kugel <hico2!hico3!al...@tsdiag.ocpt.ccur.com>
+
+ Nits and typos in the NLS messages and corresponding default messages.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Fix one of the aliases.dir to be aliases.pag.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Some systems don't have SIGBUS, make it optional.
+ From: Syd
+
+ When SY_ENV_SHELL is set for syscall() it ends up touching SHELL in
+ the parent's environment if vfork is used, so change to fork.
+ From: ta...@uunet.uu.net (David C Lawrence)
+
+ Adds a new integer parameter builtinlines.
+ if (builtinlines < 0) and (the length of the message < LINES on
+ screen + builtinlines) use internal.
+ if (builtinlines > 0) and (length of message < builtinlines)
+ use internal pager.
+ if (builtinlines = 0) or none of the above conditions hold, use the
+ external pager if defined.
+ From: "John P. Rouillard" <rou...@ra.cs.umb.edu>
+
+ I implemented a change to filter's default verbose message format
+ including %x %X style date and time along with username
+ From: ma...@drd.com (Mark Lawrence)
+
+ Filter turns spaces in quoted strings into _ and then back again. This destroys
+ any _ that where there in the first place. This patch removes that.
+ Also fixed a minor bug where 'filter -r' wrote out the wrong thing if the
+ relation in a rule was '~'.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The following minor patch for leavembox.c is useful for BSD systems
+ which implement correct (per SVID & POSIX) struct utimbuf. Where the
+ source previously tested just '#ifdef BSD' it now tests '#if
+ defined(BSD) && !defined(UTIMBUF)'. This suppresses a compile-time
+ warning on ConvexOS due to the prototype of utime.
+ From: rwr...@dhostwo.convex.com (Randy Wright)
+
+ Correct MMDF syntax problems and newmail botches.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ When elm exits because a spool mailbox is used, it should do a Raw(OFF) so
+ that the error message get's printed on the right screen.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ It seams that SCO Unix nedds 1 pair of () extra to get
+ the new newmail.c code to work.
+ From: Jan S{ll <jan%uni...@Mail.SWIP.net>
+
+ fixed the behaviour of the tool nfrm or frm -snew to be inconsistent
+ with elm itself. In from.c it never recognized the file in the MAIL
+ environment variable to be a SPOOL file as you say in the source.
+ From: Erick Otto <eo...@hvlpa.ns-nl.att.com>
+
+ There is a small bug in this routine in Chip's PL21 patch. The code
+ calls atonum to convert the 4 digit timezone field. However this field
+ is actually of the form HHMM, not a decimal number, so for example
+ -0500 was being converted to -500 rather than the correct -300.
+ From: Larry Philps <lar...@sco.COM>
+
+ Corrections to PL21 Alpha docs and consistent punctuation use in help files.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ When newmail stats/reads the mailbox it updates the access times. This
+ causes problems for users that run both newmail and xbiff since xbiff
+ just looks at the access times of the mailbox. Added code to newmail
+ that borrows some code from src/leavembox.c for updating mailbox access
+ times.
+ From: a...@redwood.cray.com (Chris Jackman)
+
+ More utime portability problems with convex
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Adresses with double quoted strings that contains comma was parsed
+ wrongly by break_down_tolist() and figure_out_addressee().
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Fix where we remove the extra hostbangs and on which fields we do
+ it to include bcc and cc as well as to, and to do it in the file
+ copies as well as the command line.
+ From: Syd via code change request from d...@neptune.att.com
+ A Raw(OFF) was missing so when in mail only mode and one
+ does f)orget, the "Message saved" ends up on wrong screen.
+ Also added \r\n to end of messages to make output look nicer.
+
+ When composing mail in the builtin editor, it wrapped on /.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ xrealloc name conflicts with some os having a routine called xrealloc,
+ renamed it elm_xrealloc.
+ From: Syd
+
+ added the RFC822 fields Comments, In-Reply-To and References.
+ to fastmail.
+ From: Greg Smith <sm...@heliotrope.bucknell.edu>
+
+ Fix src/alias.c for which seek is being used, FILE * requires fseek
+ From: Syd via prompt from mfv...@netcom.com (Michael Vargo)
+
+ Add cast to silence compiler warning.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Make alias names consistently handled as lower case.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Fix to copy_file to ignore unescaped from if content_length not yet reached.
+ Fixes to NLS messages match number of newlines between default messages
+ and NLS messages. Also an extra ) was removed.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+
+
+
+
+
+
+
+ =========================================================
+ Patch Set - Patches 18 through 20: Thu Dec 24 18:53:52 EST 1992
+ Elm 2.4PL17 -> Elm 2.4PL20
+
+ Fix unintended change where forwarding without editing started adding
+ prefix chars
+ From: Syd
+
+ Here are the doc changes for my additions to the alias system and
+ the new switches to listalias.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Add a c)hange alias, -u and -t options to listalias to list only user
+ and only system aliases respectively.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Fix formatting and typograpical problems
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Always pass three parameters to header_cmp().
+ From: ch...@tct.com (Chip Salzenberg)
+
+ Fixed where when doing ! or | and ti/te is enabled, one doesn't see the
+ "Press any key to return to ELM:" message. because the screens are
+ switched before the message is printed.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Quote from the filter of phrase to prevent RFC-822 parsing problems
+ From: Syd via request from Ian Stewartson <iste...@dlvax2.datlog.co.uk>
+
+ EDITOROPTS and DEFEDITOR appear to be unused but here is
+ a patch to make use of $editoropts.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Fix confirm prompts to follow Elm style in confirm append/create
+ From: Syd
+
+ Fix messages and nls messages to match. Plus use want_to
+ where appropriate.
+ From: Syd, via prompting from Jan Djarv <Jan....@sa.erisoft.se>
+
+ Add Ignore of CONT signals on exit for Ultrix
+ From: Syd via prompt from Bob Mason
+
+ Add lstat call for proper detection of symlink in leavembox.c
+ From: Syd via prompt from Bryan Curnutt
+
+ Make copy_sans_escape expand tabs to prevent subject displays from getting messed up
+ From: Syd via request from p...@Cayman.COM (Paul Fox)
+
+
+
+
+ =========================================================
+ Patch Set - Patches 13 through 17: Fri Dec 11 20:52:23 EST 1992
+ Elm 2.4PL13 -> Elm 2.4PL17
+
+ Attempt to fix where Elm was issuing the final error message on the
+ cursor screen instead of the regular screen on terminals where the
+ ti/te code swaps the screen.
+ From: Syd
+
+ Internal fix to use correct errno on some error messages.
+ From: Syd
+
+ Add decode option to copy_message
+ From: bjo...@stud.cs.uit.no (Bjoern Stabell)
+
+ Fix Configure for ls that return 0 status even if file
+ is not found, re packing man pages.
+ From: a...@redwood.cray.com (Chris Jackman)
+
+ Fix Configure not getting mailgrp correct on symlinks.
+ From: a...@redwood.cray.com (Chris Jackman)
+
+ Add missing -n flag to doc makefile.
+ From: g...@dogmatix.inmos.co.uk
+
+ Always init fcntlerr and flockerr in src/lock.c to avoid compiler
+ warnings.
+ From: Syd via prompt from w...@grouper.mkt.csd.harris.com (W. David Higgins)
+
+ Traditional C used 'unsigned preserving' rules when an integral data
+ value is widened to integer and ANSI C changed the rules to 'value
+ preserving'. This is one of the few things that the ANSI X3J11 committee
+ did that might break existing programs. Casting to (int)
+ From: Bo.Asbjorn.Muldbak <b...@jutland.ColumbiaSC.NCR.COM>
+
+ When ELM is reporting "appending to <foldername>" I never get to see
+ but a flash of light, before the message line has been replaced by a
+ dummy "Messages saved" string. And if you happen to have mistyped the
+ foldername or the leading '=', you never see the foldername.
+
+ This fix will change file.c to show either
+
+ Message <what> to <foldername>
+
+ or
+ <#> messages <what> to <foldername>
+ From: Bo.Asbjorn.Muldbak <b...@jutland.ColumbiaSC.NCR.COM>
+
+ This implements the use of SIGUSR1 and SIGUSR2 as discussed on the
+ mailing list recently, and adds them to the documentation.
+ From: s...@lokkur.dexter.mi.us (Steve Simmons)
+
+ Attempt to patch posix_signal for SunOS problem.
+ From: A lot of the Elm group
+
+ Change canceled mail message to indicate full path name as
+ AFS users don't have home and elm's home the same.
+ From: Syd
+
+ Fix doc/Makefile.SH to have an else clause on all if's so that
+ if's that return an error code on a not taken if and a null else
+ clause don't exit the makefile
+ From: Syd via requests from many
+
+ General changes for apollo portability
+ From: gor...@mcil.comm.mot.com (Gordon Berkley)
+
+ Fix typos in edit.c
+ From: Bo.Asbjorn.Muldbak <b...@jutland.ColumbiaSC.NCR.COM>
+
+ If sigset() and sigrelse() are available, release signal before
+ using longjmp() to leave signal handler.
+ From: ch...@tct.com (Chip Salzenberg)
+
+ Anytime elm wants to re-run newalias, selected is set to 0.
+ (removing any limit in effect)
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Allow for use from restricted shell by putting SHELL=/bin/sh in the
+ environment of spawned mail transport program.
+ From: ch...@tct.com (Chip Salzenberg)
+
+ fix Obvious typos.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ List_folder knew only about '=' but nothing about the rest
+ of [+=%] as one would have expected.
+ From: Jukka Antero Ukkonen <ukk...@venus.csc.fi>
+
+ Fix where the user creates a first new alias, then deletes it, the
+ alias stays on screen, but the file really will be empty if it was the
+ last alias, so the retry to delete gives 'cannot open ...file' messages
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Make Elm complain about spaces that are not after commas in
+ alias and address lists
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Make verb and pronoun agree.
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ in do_get_alias(). abuf[] was under dimensioned.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Remove the old packed manual page before trying to pack the new one.
+ From: Tom Moore <tmo...@fievel.DaytonOH.NCR.COM>
+
+ Fix double inclusion of sys/types.h
+ From: Tom Moore <tmo...@wnas.DaytonOH.NCR.COM>
+
+ Fix building editor wrap problem
+ From: Syd via prompting from vo...@isa.de (Gerald Vogt)
+
+
+
+
+ =========================================================
+ Patch Set - Patches 12 and 13: Sat Nov 21 21:03:26 EST 1992
+ Elm 2.4PL11 -> Elm 2.4PL13
+
+ Handle the case where a system does
+ > #define jmp_buf sigjmp_buf
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Fix segmentation violation on restricted alias page jump.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Fix bug where alias records were not sorting by both last and
+ first names.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Fix when expanding the macro '%S', the subject line is scanned for a
+ 'Re:', and if nothing is found, a '"Re: ' is added. But when a 'Re:'
+ *is* found, then nothing is added, not even the '"'.
+ From: Sigmund Austigard <aus...@solan.unit.no>
+
+ I was playing with the metamail stuff and Sun's Openwindows Mailtool
+ and discovered that I was able to 'display' messages generated with
+ Mailtool in elm using metamail. This marks the Sun Attachments as
+ needing metamail.
+ From: Lutz Brunke <bru...@dkrz-hamburg.dbp.de>
+
+ Change the way Configure and doc/Makefile.SH deal with installing
+ man pages.
+ From: Tom Moore <tmo...@wnas.DaytonOH.NCR.COM>
+
+ Add support for a "config.changes" file to override Configure decisions.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Allow SCO MMDF to use the mmdf library for mailer via execmail.
+ From: Larry Philps <lar...@sco.com>
+
+ Add on initial display or display where the entire screen is being
+ drawn, we should not output the trailing blanks that clear the old
+ value.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ This mod fixes overlapping prototypes for strchr and index on
+ Convex.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ According to the MIME BNF, quoted strings are allowed in the value portion
+ of a parameter.
+ From: c...@alias.com (C. Harald Koch)
+
+ The fastmail utility appears to work incorrectly when multiple addresses are
+ supplied. Spaces were inserted between addresses rather than commas.
+ From: lit...@carina.hks.com (Jim Littlefield)
+
+
+
+ =========================================================
+ Patch Set - Patch 11: Tues Nov 17 1992
+ Elm 2.4PL10 -> Elm 2.4PL11
+
+ Quickie fix to handle a botched edit of a test line in Configure
+
+
+
+
+ =========================================================
+ Patch Set - Patches 9 and 10 : Sat Nov 14 21:34:44 EST 1992
+ Elm 2.4PL8 -> Elm 2.4PL10
+
+ I think that the code in 'newmbox.c' which handles bad 'Content-length'
+ entries is incomplete. The file-ptr for the mail file is
+ backed up, but the file-ptr of the temp file WAS LEFT UNMODIFIED !
+ From langesw.ssw.de!root Wed Nov 11 14:28:57 1992
+
+ When elm copies the temp mailbox back to the mail spool to resync or
+ quit, it changes to the mailgroup before attempting to diddle in the
+ mail spool, but when it copies the temp mailbox back to the mail spool
+ after editing, it forgets to change to mailgroup. This patch appears
+ to work, but I haven't exhaustively checked for some path that leaves
+ the gid set
+ wrong. From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ There's an error in two messages in s_aliases.m which causes elm2.4
+ to core dump when resyncronize aliases. (%s/%s) should be (%c/%c).
+
+ This bug doesn't show up unless you use message catalogs, since the default
+ message in a_quit.c is correct.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Fix how nls emulation lib gencat links prev pointers
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ The alias message_count isn't set to zero if the last alias has
+ been deleted from the alias table. As no aliases are reread from
+ the aliases database the message_count is left as it was before.
+
+ Fixed that the function do_newalias() sometimes returns without freeing
+ the buffer allocated before. The patch adds these free calls.
+
+ When you erroneously type a number in your folder elm asks you for
+ a new current message number. But now if you erase this one number
+ and leave the string empty elm will set the new current message to
+ the second message on our sun4! The patch adds a check for an empty
+ string and returns the current number if no number was entered.
+ From: vo...@isa.de (Gerald Vogt)
+
+ The situation is that the .elm/aliases file is missing, but
+ .elm/aliases.dir and .elm/aliases.pag exist (isn't serendipity
+ wonderful?). The ndbz functions tolerate this and just put a NULL
+ pointer in the db structure for the data file FILE pointer. However,
+ get_one_alias() in listalias and elm doesn't account for the db_open()
+ succeeding but the dbz_basef field being NULL, so it passes the NULL
+ pointer to fread(). Detect null and return 0
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Clear the screen before displaying MIME:
+ From: mar...@rhi.hi.is (Marius Olafsson)
+
+ Add regexp processing to filter.
+ Add execc operator
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+
+
+
+ =========================================================
+ Patch Set - Patches 7 and 8 : Sat Nov 7 15:54:44 EST 1992
+ Elm 2.4PL6 -> Elm 2.4PL8
+
+ Add some tolerance for incorrect Content-Length header (fixes bug where
+ Elm would combine two messages if content-length header was incorrect.
+ Still has problem if incorrect content-length exactly matches multiple
+ messages)
+ From: Syd
+
+ Change Makefile in doc to use -f as some shells don't have -x in test
+ From: Syd
+
+ The first is that when doing a summary, macros are expanded when printing the
+ rule. IMHO they should be printed as with the -r option (i.e. %t is
+ printed as "<time>" and so on).
+
+ The second one is that the summary printed "applied n time" regardless of
+ the value of n, not "applied n times" when n > 1.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ There is no need to write out the MIME-Version header in subparts
+ From: Klaus Steinberger <Klaus.St...@Physik.Uni-Muenchen.DE>
+
+ fix null dereferences from patch 5
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Fix where elm duplicates the entry's from the global elm.rc.
+ It will however still copy the global weedout headers to your local
+ elmrc if they where not already in it.
+ From: ja...@fwi.uva.nl (Jan Wortelboer)
+
+ another typo (2.4.6 Ref.guide)
+ From: David.W...@gagme.chi.il.us (David W. Tamkin)
+
+ comments should be allowed anywhere in the alias file.
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Symbol change for AIX370
+ From: u...@watson.ibm.com
+
+ Fix redefinition complaint by SCO 3.2v2.0.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ Enhanced printing support. Added "-I" to readmsg to
+ suppress spurious diagnostic messages.
+ From: ch...@chinacat.unicom.com (Chip Rosenthal)
+
+ These small typos stopped me from making forms, so here is a patch.
+ From: andrew.m...@rd.eng.bbc.co.uk (Andrew McParland)
+
+ Add a hack to not use ti/te on list folders and do print
+ From: Syd
+
+ New header parsing routine header_cmp to allow for linear
+ white space around the : in headers
+ From: Syd
+
+
+
+ =========================================================
+ Patch Set - Patch 6 : Mon Nov 2 15:52:00 EST 1992
+ Elm 2.4PL5 -> Elm 2.4PL6
+
+ Things I found in doc/Ref.guide looking over patches 4 & 5:
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ More changes to folder creation confirmation
+ From: Larry Philps <lar...@sco.COM>
+
+ fix a bug in the forms reply caused by the Cc: buffer not being
+ cleared. If one has sent mail just prior to replying to the form and
+ specified a Cc: address, the form reply is also sent to those Cc:
+ address(es).
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ Add missing MAKE variable in doc/Makefile.SH
+ From: Syd
+
+ it invokes metamail (the pseudo is because "text" isn't a legal Content-Type).
+ in src/mime.c notplain() tries to check for text but fails because it should
+ look for "text\n" not "text".
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ Use copy_message in mime shows to get encode processing
+ From: bjo...@stud.cs.uit.no (Bjoern Stabell)
+
+ Corrections to Unix date parsing and time zone storage
+ From: eo...@hvlpa.att.com
+
+ Prevent index underflow when wildchar is in first three chars of string
+ From: Syd via note from g...@dogmatix.inmos.co.uk
+
+
+ =========================================================
+ Patch Set - Patches 4 and 5 : Sat Oct 24 22:48:00 EDT 1992
+ Elm 2.4PL3 -> Elm 2.4PL5
+
+ Fixes SysV style forwarding
+ From: Baruch Cochavy <bcoc...@ilux39.intel.com>
+
+ fix newmail attempting to close a file descriptor even if the corresponding
+ open failed.
+ From: "Peter A. Bigot" <p...@cs.arizona.edu>
+
+ In our global elm.rc I keep the four options as below
+
+ confirmappend = OFF Don't confirm every append to any file.
+ confirmcreate = ON Confirm creation of every new file.
+ confirmfiles = ON Confirm append to non folder files though.
+ confirmfolders = ON In case someone does not want to be asked
+ every time when creating a new file try
+ to confirm creation of folders though.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ changes found by using codecenter on Elm 2.4.3
+ From: Graham Hudspith <g...@inmos.co.uk>
+
+ There is now an additional elmrc option "displaycharset", which
+ sets the charset supported on your terminal. This is to prevent
+ elm from calling out to metamail too often.
+ Plus a slight documentation update for MIME composition (added examples)
+ From: Klaus Steinberger <Klaus.St...@Physik.Uni-Muenchen.DE>
+
+ More typos
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ I think all these are typos
+ From: dwo...@pffft.sps.mot.com (Dave Wolfe)
+
+ remove the 25 (MAXRULES) limitation.
+ Basically it mallocs rules in hunks of RULESINC (25) as it goes along.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ fixed a bug were elm didn't call metamail on messages with a characterset,
+ which could be displayed by elm itself, but message is encoded with QP
+ or BASE64
+ From: Klaus Steinberger <Klaus.St...@Physik.Uni-Muenchen.DE>
+
+ Here are the patches to support POSIX sigaction().
+ From: t...@osf.org
+
+
+ =========================================================
+ Patch Set - Patch 3: Mon Oct 19 13:10:28 EDT 1992
+ Elm 2.4PL2 -> Elm 2.4PL3
+
+ Fix spelling of name
+ From: Larry Philps <lar...@sco.COM>
+
+ corrected typos
+ From: David.W...@gagme.chi.il.us (David W. Tamkin)
+
+ Here's another; now the copyright notices on the man pages don't seem
+ to have an ego problem. The various guides are just fine.
+ From: Steve Simmons <s...@wotan.iti.org>
+
+ setting the debug level to 5 or higher caused a core dump due to a possible
+ dereference of a NULL pointer
+ From: "Peter A. Bigot" <p...@cs.arizona.edu>
+
+ rewrite the Configure prompt for metamail
+ From: Steve Simmons <s...@iti.org>
+
+ Correct reversed usage of $d_utimbuf.
+ From: ch...@tct.com (Chip Salzenberg)
+
+ Fix warnings from my ANSI C compiler because the declaration of
+ edit_interrupt did not match the prototype for the second argument of
+ a call to signal.
+ From: Larry Philps <lar...@sco.COM>
+
+ TEXT_SORT was supported, but UNRECOGNIZED
+ From: l...@dmicvx.dmi.min.dk (Lennart Sorth)
+
+ Force text arithmetic into unsigned for those systems
+ with signed chars
+ From: Marius Olafsson <mar...@rhi.hi.is>
+
+ Change lock file name to add user name on filter locking of mail spool
+ From: Peter Brouwer <p...@idca.tds.philips.nl>
+
+ Fix messages to work with 4.3bsd /bin/sh
+ From: w8...@TACOM-EMH1.Army.Mil (Keith Petersen - MACA WSMR)
+
+ Add flags to read_rc to support command line overrides of the option.
+ From: Jan Djarv <Jan....@sa.erisoft.se>
+
+ adds the function bytemap() and the macros MAPIN and MAPOUT from the file
+ lib/ndbz.c in the file src/alias.c.
+ This fixes the byte order independence in aliases.
+
+ prevent elm from exiting when resyncing the empty incoming mailbox.
+ From: vo...@isa.de (Gerald Vogt)
+
+ patch to make elm use (or in my case, not use) termcap/terminfo ti/te.
+ From: Graham Hudspith <g...@inmos.co.uk>
+
+ =========================================================
+ Patch Set - Patches 1 and 2: Sat Oct 10 22:14:59 EDT 1992
+ Elm 2.4PL0 -> Elm 2.4PL2
+
+ Switch to wrapper for flock and fcntl locking.
+ Change order to fcntl first, other order blocked.
+ From: Jukka Ukkonen <ukk...@csc.fi>
+
+ Fix some compiler warnings that I receive compiling Elm on my SVR4
+ machine.
+ From: Tom Moore <tmo...@fievel.DaytonOH.NCR.COM>
+
+ Add AIX to src/curses.c for define of window size in different include
+ file.
+ From: Syd via note from Tom Kovar
+
+ get_return() assumes that message_count reflects the number of
+ messages in the current folder, but the message_count it's seeing
+ from the alias subsystem is actually the *alias* count.
+ toggle the main state before and after calling get_return().
+ From: cl...@sfn.ORG (R. Cliff Young)
+
+ Add missing setlocale and getopen to newalias and listalias.
+ From: Syd
+
+ Touchups on config guide
+ From: David Barr <ba...@pop.psu.edu>
+
+ Fix segv in wildcards if SHELL= has no / character in path
+ From: Syd
+
+ 1. If firstname && lastname is null then copy aliasname into the
+ personal name field (inside the ()'s) when creating an alias
+ from the menu using the 'n' command.
+
+ 2. Now if for some reason and alias has a null personal name field
+ (the person hand edited aliases.text) the blank () is not printed
+ as part of the address. This actually cured another problem, where
+ the To: field on the screen (when you hit 'm' on the alias menu)
+ used to be blank, now the address shows up....
+ From: "Robert L. Howard" <robert...@matd.gatech.edu>
+
+ Updated AIX 3.2 section of README file
+ From: Syd
+
+ fixed a bug in the .lp macro in doc/tmac.n. The lp macros is always
+ called with a unit specified for the second argument, however, the
+ macro added a "n" unit specifier to that argument. The following patch
+ fixes this problem.
+
+ The various .guide books use the troff .tl macro liberally, but often the
+ extra ' characters needed at the end of the lines to explicitly specify
+ the trailing nulls fields were left off. The following patch fixes the
+ erroneous lines.
+ From: Larry Philps <lar...@sco.COM>
+
+ While installing elm2.4 on a Sun4 running SunOS4.1.2, the Configure script
+ doesn't recognize F_SETLK because it searches in /usr/include/sys/fcntl.h
+ which includes /usr/include/sys/fcntlcom.h (where F_SETLK is).
+ From: d...@ulysse.enst.fr (Philippe Dax)
+
+ change dbm name to dbz to avoid conflicts with partial call
+ ins from shared libraries, and from mixing code with yp code.
+ From: Syd via prompt from Jess Anderson
+
Index: elmME+.2.5.alpha0-cvs/ANNOUNCE.ME
*** elm2.4.ME+.115/ANNOUNCE.ME 2002-01-26 13:14:44.000000000 +0200
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,287 ****
-
- This ANNOUNCE.ME is for ME patches of the 2.4 version.
-
- Look file README.ME+ for the 2.4ME+ version.
-
- --------------------------------------------------------------------
-
- ELM 2.4 PL24 ME8
-
- This is an announcement for Patchlevel ME8 for Elm 2.4pl24.
-
- The most current version of this document is available via the web:
- http://www.cs.hmc.edu/~me/elm/announce.html. You can also visit the "ME" home
- page at http://www.cs.hmc.edu/~me/elm/me.html.
- NOTE THAT THIS ADDRESS HAS CHANGED FROM THE PREVIOUS ANNOUNCEMENT!
-
- What's new:
-
- * Anonymous remailer support (plus chaining, PGP encryption & MIME support)
- * mime.types file when guessing the content-type of an attachment.
- * Forwarded messages can be attached as MESSAGE/RFC822 data
- * Supports extraction of PGP public keys directly
- * Support for application/pgp type inside multipart/mixed and message/rfc822
- messages
-
- Changes from ME7a:
-
- * Replying to MULTIPART messages now works correctly.
- * MESSAGE/RFC822 is now properly supported.
- * BINARY encoding is better supported.
- * Fixed bugs with BASE64 and QUOTED-PRINTABLE encodings.
- * Enhanced attachment menu
- * Improved interface for PGP encrypting messages
-
- Where to get it:
-
- * ftp://cs.hmc.edu/pub/me/elm-2.4pl24me8.tar.Z
- * ftp://cs.hmc.edu/pub/me/elm-2.4pl24me8.tar.gz
- * ftp://cs.hmc.edu/pub/me/elm-2.4pl24me8.diffs.Z
- * ftp://cs.hmc.edu/pub/me/elm-2.4pl24me7a-8.diffs.Z
-
- -OR-
-
- * ftp://uiarchive.cso.uiuc.edu/pub/packages/mail/elm/me/elm-2.4pl24me8.tar.Z
- * ftp://uiarchive.cso.uiuc.edu/pub/packages/mail/elm/me/elm-2.4pl24me8.tar.gz
- * ftp://uiarchive.cso.uiuc.edu/pub/packages/mail/elm/me/elm-2.4pl24me8.diffs.Z
- * ftp://uiarchive.cso.uiuc.edu/pub/packages/mail/elm/me/elm-2.4pl24me7a-8.diffs.Z
-
- -------------------------------------------------------------------------------
-
- STATUS
-
- These patches are not an official release of Elm, and are not supported by the
- Elm Development Group. Features included in this patch may or may not be
- included in the next official release of Elm. I can say for certain that the
- PGP portion will not. I am hoping that my MIME patches will be included in the
- 2.5 release, but that is still an open question. Should the 2.5 release appear
- without these patches, I plan on "porting" them and using 2.5 as the base.
- -------------------------------------------------------------------------------
- And now on to the interesting stuff...
-
- PGP SUPPORT
-
- [This work was inspired by pgpelm which was started by Mic the Missing and
- furthur developed by Ken Cox (ke...@viewlogic.com). This version is a complete
- rewrite of that system but looks very similar.]
-
- Features include: mark on folder menu showing PGP encrypted messages and public
- key blocks, encryption/signing of outgoing messages, decrypting/signature
- check, mailing public key blocks, and extracting public key blocks from
- messages. Special feature allows you to have ELM keep track of your PGP
- passphrase so you only need to enter it a minimal number of times.
-
- I have written a primer for using PGP with this version of ELM which can be
- found at http://www.cs.hmc.edu/~me/elm/pgp.html. It contains everything you
- need to know about how to use PGP with ELM.
-
- MIME SUPPORT
-
- With this version of Elm, the need for metamail is much less since it can now
- handle the MIME encodings and multipart/* messages internally. The only case in
- which metamail is called is when there is a content-type which Elm does not
- understand (eg. image/*, audio/*). In most cases you will probably only receive
- this as attachments anyway, so you might still not require metamail.
-
- * Incoming Attachments
-
- Access to individual portions of a MIME mulitpart message can be accessed
- via the "Attachments" menu (type 'v' in the index menu). This brings up a
- menu listing the attachments for the current message. You then have the
- option of viewing or saving the attachment.
-
- * Outgoing Attachments
-
- In addition to using the "[include ..." construct when editing your
- message, there is now an "Attachments" menu accesible from the "Send" menu
- (it is abbreviated to "a)tt" because of space problems). Simply type "a"
- to get into the Attachments menu. You may then add/delete/edit/modify
- attachments. When possible, Elm will attempt to guess the correct
- Content-Type (based on file extension, see the "mime.types" section below)
- and Content-Transfer-Encoding.
-
- * Automatic encoding for outgoing messages.
-
- If Elm finds 8bit or control characters in text files to be attached, it
- will automatically encode them QUOTED-PRINTABLE if Elm has been compiled
- without the 8BITMIME option (meaning that your MTA isn't 8bit clean). This
- behavior can be overriden with the "noencoding" elmrc option (see below)
- in cases where your sendmail is 8bit clean, but doesn't support the
- -B8BITMIME option.
-
- * mime.types file
-
- Elm now mime.types file which maps filename extensions to Content-Type
- field when sending attachments via the new attachment menu. The format of
- these files is as follows:
-
- <extension> <content-type>
-
- A hash character ('#') may be used as a comment, but it must be in the
- first column of a line.
-
- Here is an example of mime.types file:
-
- # This is a commented line
- html text/html
- tgz application/octet-stream; type=tar; conversions="x-gzip"
-
- Note that the content-type field is not limited to just the type/subtype
- part; in can also include suplementary information.
-
- Elm first looks to see if the user has a ~/.elm/mime.types file. If there
- is no match, Elm will then try to read the system types file (typically
- /usr/local/lib/elm.mimetypes). Failing that, Elm has a few builtin types
- that it understands.
-
- You might want to pick up a copy of my mime.types file as a starting point
- for either your personal or system file at
- http://www.cs.hmc.edu/~me/elm/mime.types.
-
- REMAILER SUPPORT
-
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha0.patch.gz
and elm-ME+2.5.alpha0.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha0.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha0.tar.gz >
via WWW.
Before applying patch catenate part 1 - 5 first.
This patch is agaist Elm 2.4ME+ PL115 (25) --------- [ part 2/5 ] ---------
- This version of Elm has the ability to prepare messages for use with anonymous
- remailers (if you don't know what that is, read alt.privacy.anon-server for
- more information).
-
- Elm gets its information about anonymous servers by either fingering
- "remail...@kiwi.cs.berkeley.edu" or by reading ~/.elm/remailers (if this
- file exists, it overrides the "finger" so you can still use this feature even
- if you are not directly net connected.)
-
- To send an anonymous message, first compose your message as you normally would,
- entering the name of the person who should ultimately receive the message as
- the To: address. Then, at the "send" menu, you can type "r" to get into the
- "remailer" menu.
-
- There are several options in this menu: remail, chain, path and encrypt.
- The "remail" option indicates whether or not the current message will be
- remailed.
-
- "chain" indicates how many servers this message should be sent through (the
- higher chain is, the more secure, but the tradeoff is how long until the
- receiver gets the message).
-
- "path" is where you can specify which servers you would like this message to go
- through (this overrides "chain"). You can specify a semi-colon (";") separated
- list of server "nicknames" here.
-
- "encrypt" means that Elm should encrypt your messages with the PGP public key
- of server you are remailing through (note that if chain > 1 or there is more
- that one server in "path", Elm will do the "right" thing and call PGP multiple
- times for each hop).
-
- Once the desired options are set, you can quit the menu and send the message.
- What you see next will vary... If you are a PGP user and set encrypt=TRUE in
- the remailer menu, you will see the call(s) to pgp flash across your screen.
- Otherwise you will most likely just see the "Mail sent." message.
-
- If you have MIME defined, it should be possible for you to include attachments
- in your anonymous mail in the normal manner. Most servers these days support
- the "hash" option which Elm makes use of to pass the proper MIME headers.
-
- NEW ELMRC OPTIONS
-
- * usepgppass = [ ON | OFF ]
- Default: usepgppass = OFF
- o OFF: Elm does not keep your passphrase in memory. You must enter it
- each time you want to decrypt a pgp mail.
- o ON: Elm keep your passphrase in memory for "keeppassfor" seconds.
- * keeppassfor = <number>
- Default: keeppassfor = 0
- o keeppassfor>=0: Elm will keep your passphrase in memory for seconds
- after entering the passphrase.
- o keeppassfor<0: Elm will keep your passphrase in memory without
- clearing it from memory.
- * noencoding = <level>
- Default: noencoding = 0
-
- This control makes it possible to send raw 8bit or binary data when the
- MTA doesn't support 8BITMIME and the -B8BITMIME option or BINARYMIME and
- the -BBINARYMIME option.
-
- Possible values:
- o 0 : Always convert 8BIT and BINARY data to QUOTED-PRINTABLE if the
- MTA doesn't support the -B8BITMIME and -BBINARYMIME options.
- o 1 : Allow 8bit without -B8BITMIME, but binary data is encoded
- o 2+: Allow binary without -BBINARYMIME and and 8bit without
- -B8BITMIME
- It is STRONGLY recommended that it be left set to 0 unless you know what
- you are doing!!
- * showto = [ ON | OFF ]
- Default: showto = OFF
- o ON: Elm should show you who the message is addressed to rather than
- who it is from if the message is not addressed to you.
- o OFF: normal behavior
- * pagemultipart = [ ON | OFF ]
- Default: pagemultipart = ON
- o ON: Use the internal MIME support to display MULTIPART messages
- rather than calling metamail
- o OFF: display MULTIPART messages with metamail
- * mimeforward = [ ON | OFF ]
- Default: mimeforward = OFF
- o ON: When forwarding a message, Elm will attach as a MIME body part of
- type MESSAGE/RFC822.
- o OFF: Elm will include the forwarded message in your message, just
- like it always has.
-
- BUILTIN++ PAGER
-
- This pager looks a lot like more, but has some of the movement features of
- less, most notably, paging backwards through your messages. Press '?' inside of
- the pager for a list of valid keystroke commands.
-
- TAGS
-
- Use the keyword "tagged" in the "Delete messages with pattern" (invoked by ^D
- in the index menu) to delete all tagged messages.
-
- You can now use the keyword "all" to tag all visible messages.
-
- LIMIT FUNCTIONALITY
-
- * Simple compound statements can be made using '|' (OR) and '&' (AND).
- * The "Cc:" field is now availible for search.
- * New keyword "tagged" for narrowing to only the currently tagged messages.
-
- MISCELLANEOUS
-
- '*' may be used as a wildcard in the "alternatives" list in the elmrc file. For
- instance, "me@*.hmc.edu" would me to match the user "me" in all hosts from the
- "hmc.edu" domain.
-
- Elm will keep track of the messages which you have replied to with an 'r' mark
- in the index menu.
-
- Forwarded messages are encapsulated instead of quoted like replies:
-
- ----- Forwarded message from Joe User -----
- [...]
- ----- End of forwarded message from Joe User -----
-
- You can effect an automatic Bcc: line by setting the address(es) in the "BCC"
- environment variable. Note that this is non-standard, but provided as a means
- of accomplishing the task.
-
- BUGS
-
- A list of known bugs can be found at
- http://www.cs.hmc.edu/~elkins/elm/bugs.html.
-
- AUTHOR
-
- Michael Elkins <elk...@aero.org>
- Home Page: http://www.cs.hmc.edu/~me/index.html
-
- If you are interested in knowing what my future plans are, you can browse my
- "TO DO" list at http://www.cs.hmc.edu/~me/elm/todo.html
-
- THANKS
-
- Kari Hurrta <Kari....@fmi.fi> has contributed a great deal to the MIME
- support (and fixed lots of my stupid bugs ;-)
-
- I would also like to thank everyone who took the time to report bugs or suggest
- improvements!
- -------------------------------------------------------------------------------
- Last updated Sept 21, 1995.
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/ChangeLog.ME
*** elm2.4.ME+.115/ChangeLog.ME 2002-01-26 13:14:44.000000000 +0200
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,812 ****
-
- This ChangeLog.ME is for ME patches of the 2.4 version.
-
- Look file README.ME+ for changes of the 2.4ME+ version.
-
- -------------------------------------------------------------------------
-
- -----------------
- Changes from ME8a
- -----------------
- When checking to see if the subject line should be centered when displaying
- a mail message, the weedlist check should be for "subject:", not "subject".
- This case is more general.
-
- control-F in the main menu now causes Elm to forget your passphrase. Useful
- for when you screw up so you don't have to exit Elm before using PGP
- again.
-
- Added a "metoo" argument in pgp_encrypt to decide whether or not the
- +encrypttoself=on flag should be passed to pgp. This was needed so that
- the value of auto_cc can be overidden when remailing.
-
- Added support for decoding of RFC1522 style encoded headers. This should
- work in the index menu, the pager, and when replying (the "attribution").
-
- metapager will now recover if pgp fails by displaying the message "as is"
- in the case where the message is only signed.
-
- Simplified "pager" check in metapager since there are two pagers now.
-
- Fixed problem in copy_message where the rfc822 newline at the end of the
- headers was missing.
-
- Fixed bug in menu2.c:generic_menu (used by the remailer) which caused
- Elm to segfault when not compiled with gcc.
- From: Andrey A. Chernov <ac...@astral.msk.su>
-
- Fixed problem where trailing MMDF separator was still being printed.
-
- The default filename for the Content-Disposition header was not getting
- set if the included file did not have an extension.
-
- text/plain => application/pgp conversion is now NOT done for public key
- blocks.
-
- Configure now figures out where "finger" is instead of hardcoding a path
- in remailer.c
-
- Hopefully fixed definition for sleep() in defs.h.
-
- Fixed bug where elm would segfault when typing ^E when there are no messages
- in the mailbox.
-
- Fixed bug where a leading space could be inserted before the real name when
- looking up a PGP public key from the return address.
-
- Fixed some of the movement commands in builtin++ so that they work now.
-
- Convert application/x-pgp-* => application/pgp to decode messages generated
- by pgpelm.
-
- Fixed problem where if the signature was added after editing the message,
- it would be written over the message right after the content length. Fixed
- by seeking to the end of the file after writing the content length field.
-
- ----------------
- Changes from ME8
- ----------------
- Fixed bug in conversion of text/plain => application/pgp in newmbox.c which
- was causing Elm to segfault. (Thanks to Kari....@fmi.fi)
-
- Fixed bug where builtin++ segfaults when viewing zero length messages.
-
- -----------------------
- Changes from ME8alpha19
- -----------------------
- Fixed bug where external pager did not work with non-MIME messages when
- USE_PGP is defined.
-
- Cleaned up mime_pgp_decode so that it does not need to look at the
- header_rec for the current message any longer.
-
- Do text/plain => application/pgp conversion in newmbox.c if PGP type data
- is discovered in the message. This supports those who are sending PGP
- messages but are not compliant with what Elm expects.
-
- Added the control-E (extract public key) command to showmsg_c.c.
-
- Security fix from Olaf Kirch <ok...@monad.swb.de> which forces Elm to write
- the temp spool mailbox in the user's home directory instead of /tmp. This
- prevents exploitation of symlinks to create a .rhosts in the user's
- directory.
-
- Fixed bug in show_status where flags from the previous message were not
- being properly cleared with USE_PGP was defined and MIME was not.
-
- -----------------------
- Changes from ME8alpha18
- -----------------------
- added application_decode for support of APPLICATION/* types. Calls
- null_decode if the subtype is unknown.
-
- rfc822_decode now matches the headers against the weedlist when printing
- out. You can view all the headers for a message by pressing 'h' while
- viewing a message just as you normally would.
-
- added mime_pgp_decode for inline decoding of application/pgp parts.
- application/pgp at the top level is still handled by metapager since some
- people will be configured without MIME. I might eventually require that
- to use PGP, you must also define MIME, but not yet!
-
- Status header was printed in the wrong place with BINARY encoding.
- From: Kari....@fmi.fi
-
- Added the DONT_ADD_FROM and NEEDS_LONE_PERIOD_ESCAPE checks to write_encoded,
- and other MIME text parts.
- From: Kari....@fmi.fi
-
- Added a "type_opts" field in mime_send_t.
-
- mime_write_header now just writes the MIME headers. The code to add the
- boundary for multipart messages and the charset for text/plain was moved into
- mailmsg2.c.
-
- Changed pgp code to set MIME fields to use add_parameter and type_opts instead
- of directly writing to subtype.
-
- Made some changes in the Content-Type for PGP messages to be more compliant
- with the unofficial standard.
-
- -----------------------
- Changes from ME8alpha17
- -----------------------
- MIME header code in write_header_info() was moved to
- mime_write_header in mime_encode.c. This was done to greatly simplify the
- code, and to make it possible for me to send MIME messages with the
- remailer code. This will also make it possible for me to have PGP
- encrypted MIME messages in the future.
-
- Content-Length headers are generated regardless of whether or not MIME
- is defined.
-
- Lots of changes to the remailer code to make it work with MIME.
-
- -----------------------
- Changes from ME8alpha16
- -----------------------
- Removed Content-Length header from attachments included by the "[include ...]"
- statement.
-
- Made the existing global variables that set the toplevel Content-Length header
- a part of mime_send_t. This has the side effect that if MIME is not
- defined, no Content-Length header will be added on outgoing messages.
-
- Commented out the code which reads the content-length header from attachments
- in mime_parse.c. It should now ignore that header and figure out the length
- in multipart_parse().
-
- -----------------------
- Changes from ME8alpha15
- -----------------------
- New option "mimeforward" controls whether or not forwarded messages are
- sent as MESSAGE/RFC822 MIME messages, or are sent in the old non-MIME
- way.
-
- - Fixes for my mistakes in alpha15.
- - text_unsupported_decode() added for printing warning message about
- unsupported text subtypes.
- From: Kari....@fmi.fi
-
- Changed disposition handing such that a message saying that the user should
- type 'v' to view an attachment which is declared something other than
- "inline".
-
- -----------------------
- Changes from ME8alpha14
- -----------------------
- Make sure that arguments to fseek(), etc., are type long.
- From: Kari....@fmi.fi
-
- Added some general access commands for attachments in the attach_menu.c
- routines.
- From: Kari....@fmi.fi
-
- The disposition is now displayed in the little mini-header. This looks nicer
- than the previous message about "[Content-Disposition: attachment, skipping]".
-
- select_CT_decoder now returns text_decode for all TEXT types. My reasoning
- here is that since the MIME spec says that all unknown subtypes of TEXT
- should be treated as TEXT/PLAIN so long as the charset is understood, then
- all TEXT can be treated in this manner.
-
- Made sure that the pgp field of header_rec gets set to zero when initializing
- in attach_viewer and also in newmbox.c.
-
- Removed lots of unused variables.
-
- Added some parentheses in places to make "gcc -Wparentheses" happy.
-
- -----------------------
- Changes from ME8alpha13
- -----------------------
- Forgot to initialize usepass=FALSE in pgp_decrypt_init. This caused elm
- to hang when trying to decode a signed message while pgp was waiting for
- the passphrase...
-
- The attachment menu should now work properly for viewing message/rfc822
- messages with the builtin pager.
-
- When attaching a message/rfc822 with the "forward" command, you should
- now be able to perform all the actions in attach_menu() as for a "normal"
- attachment.
-
- -----------------------
- Changes from ME8alpha12
- -----------------------
- Tried to fix MIME_NOTPLAIN code again. This time MESSAGE/RFC822 will not
- have it set, which MULTIPART will if pagemultipart=OFF.
-
- Fixed attach_menu so that Elm does not segfault when you try to do an
- operation on an attachment when there are no attachments defined.
-
- Removed the MIME_NOTPLAIN flag and made it a one-bit flag in mime_t instead.
- Removed PGP flags from defs.h and use a 3-bit field in header_rec instead.
- These two now ensure that the "status" field of header_rec is always less
- than 65536 so that 16bit integer machines will not have troubles.
-
- Elm now pays attention to what the MIME-Version header says and passes any
- messages with an unknown MIME-Version header value to metamail, or displays
- an error if $NOMETAMAIL is set.
- From: Kari....@fmi.fi
-
- -----------------------
- Changes from ME8alpha11
- -----------------------
- pgp_call() now uses the expanded_* address lists so that aliases are
- expanded before trying to look up the ids with PGP.
-
- Fixed calls in mailmsg2.c with wrong number of arguments (botched job
- including Kari Hurtta's patch).
- From: Kari....@fmi.fi
-
- Reordered the preMIME code in newmbox.c to make it a little more efficient.
-
- Fixed bug in write_header_info() where a spurious newline was being printed
- after the Content-Type header for TEXT. This was causing the remaining
- fields not to be a part of the message header.
-
- Removed check for old-style RFCXXX Mime-Version header. I don't believe
- anybody uses that anymore since RFC1341 has been out so long.
-
- pgp_status needed to be reset when the user aborts sending a message,
- otherwise you can't encrypt another message until you successfully send
- another message.
-
- MIME_NOTPLAIN is not set for multipart messages if "pagemultipart" is TRUE.
-
- Cleaned up code for deciding if metamail mail should be called to display
- a message in showmsg.c. Created a need routine, need_meta(), for this
- purpose.
-
- -----------------------
- Changes from ME8alpha10
- -----------------------
- Fixes to remove some global MIME variables used for composing.
- From: Kari....@fmi.fi
-
- Added a redraw command to the attachment menu.
-
- Fixed the code in newmbox.c where MIME_NOTPLAIN was not set for non-TEXT
- content-types. Also, check for "plain" should be "text" for old-style
- pre-MIME content-type headers.
-
- Added a print command to the attachment menu.
-
- Made the remailer support a Configure option.
-
- ----------------------
- Changes from ME8alpha9
- ----------------------
- Use Elm's error routines in the attachment menu.
- Protected iscntrl() more calling isascii() before it in builtin++.
- From: Kari Hurtta <Kari....@fmi.fi>
-
- Added bit of code lost from old showmsg.c which centers the subject line
- after the title line in the case where "subject" is in the weedlist.
-
- Viewing attachments with metamail while in send mode now works. It required
- different arguments to be passed to metamail.
-
- -----------------------
- Changes from ME8alpha8a
- -----------------------
- mime_t_clear() now sets the defaults of TEXT/PLAIN, ENCODING_7BIT, DISP_INLINE,
- when called.
-
- More fixes from Kari Hurtta <kari....@fmi.fi>
-
- Removed padding bitfield from struct mimeinfo since it isn't needed.
-
- Added +clearsig=ON when adding a PGP signature to a message.
-
- Added prototypes for the functions defined in pgp.c.
-
- Elm will now allow you to edit the list of usernames to encrypt to when
- using PGP. This fixes the problem where sometimes the return address
- doesn't match the address on the key. However, it still requires that
- the user know this.
-
- Implemented Kari Hurtta's suggestion of using a "state" variable for the
- MIME output when decoding messages. This will make it easier to add new
- extensions for output. The state information is defined in hdrs/state.h
-
- The user interface for the attachment menu now is more consistent with
- the mailbox menu. (Kari....@fmi.fi)
-
- User is now asked for confirmation upon deleting an attachment from the
- attachment menu if "ask=ON" in the elmrc.
-
- Fixed replying to messages with PGP signatures. They were getting sucked
- into the new MIME code and getting skipped as an unknown type.
-
- Added new procedure to allow for extraction of PGP public keys directly
- instead of relying on metamail.
-
- If Elm can't find a PGP key that it is looking for, it now tells the user
- which key instead of just that there was an error.
-
- The user is now allowed to re-edit the filename in attach_modify() if the
- file was not found. This also allows a user to change the file associated
- with an attachment.
-
- Fixed very old bug of MMDF separators being printed when displaying a
- message.
-
- ----------------------
- Changes from ME8alpha8
- ----------------------
- Fixed problem where you couldn't edit the default filename in attach_save().
-
- ----------------------
- Changes from ME8alpha7
- ----------------------
- Use safe_malloc() and safe_realloc() instead. (Kari Hurtta)
-
- Fixed bug where no EOLN token was printed after the Content-Type header
- when type_opts was NULL in attach_generate_message().
-
- Reorganized struct mimeinfo so that bitfields are next to each other and
- added padding to make them 1 byte long total.
-
- -----------------------
- Changes from ME8alpha6+
- -----------------------
- Reduced memory usage in "struct mimeinfo" by using bitfields or pointers
- instead of predefined strings when possible. Also removed the "comments"
- fields.
-
- New routine lib/strmcpy.c for doing malloc/realloc and strcpy in one shot.
- Helps out with the above objective.
-
- The attachment menu now defaults to disposition "inline" when sending
- mail.
-
- Reorganized the screen in the attachment "configuration" menu.
-
- Removed code for adding "name=" field to APPLICATION/OCTET-STREAM types.
- Uses Kari's code for Content-Disposition "filename" instead. attach_menu()
- still supports both for getting default filename when saving an
- attachment.
-
- Removed MIME_MULTIPART flag. Use MIME_TYPE_MULTIPART with "type" instead.
-
- Removed "encoding" field from "header_rec". Use "encoding" in "mimeinfo"
- instead (this was already mostly true, but there were a few cases left
- over from the early support for encoding...)
-
- ----------------------
- Changes from ME8alpha6
- ----------------------
- Incorporated changes from Kari Hurtta <Kari....@FMI.FI>.
- Big changes are the use of Content-Disposition and routines to better parse
- rfc822 headers. Also fixed multi-line MIME header problem in newmbox.c
-
- ----------------------
- Changes from ME8alpha5
- ----------------------
- Fixed places where "/tmp" was hardcoded for temporary files instead of using
- "temp_dir" in the ME extensions.
-
- Fixed more isspace() problems with "signed char".
-
- Made some formatting improvements in multipart_decode().
-
- Fixed bug where multi-line Content-Type headers were not properly parsed in
- newmbox.c.
-
- Added builtin++2.c which contains a tempfile based pager which may become
- part of the "official" distribution. For right now it is "experimental".
-
- ----------------------
- Changes from ME8alpha4
- ----------------------
- Fixed attach_modify() to use ->type and ->subtype like the rest of the
- attachment routines.
-
- Viewing an attachment while sending didn't work because it read from
- mailfile... Now it can view external files as well.
-
- Fixed problem with signed char and iscntrl() in AddLineToCache().
- This fixes the problem with umlaut characters in some sets.
- From: g...@netapp.com.
-
- Modified mime_generate_boundary() to use mime_count as a counter so that
- subsequent calls will generate different values.
-
- Elm will now read ~/.elm/mime.types and $libdir/elm.mimetypes (system
- mime.types file), if they exist, to map filename extensions to
- Content-Type values when sending attachments. The format of this file
- is:
- <suffix> <content-type>
- There must be no line breaks in the Content-Type field.
- Example:
- tar application/octet-stream; type=tar
- for .tar files.
- NOTE: data which is declared "application/octet-stream" will automatically
- get the option "name=<default_filename>" added to it, so there is no
- need to put it in the definition.
-
- Modified attach_info() so that it uses BASE64 encoding for "application"
- types that have 8bit or control chars in them.
- Also, "image" automatically defaults to BASE64 without reading the file.
-
- attach_save() now uses the "name=<default_filename>" field of "application"
- types as the default filename.
-
- Added '+' as a synonym for NEXT_PAGE in builtin++ per popular request.
-
- attach_generate_msg() no longer puts Content-Length headers on parts that
- it generates.
-
- ----------------------
- Changes from ME8alpha3
- ----------------------
- Added support for multi-line Content-Type: headers in read_headers() and
- mime_read_headers().
-
- me.h now contains prototypes for functions defined by this set of patches.
-
- Fixed some problems with using PGP and remailers.
-
- Fixed parsing of options in the Content-Type header so that semicolons
- inside quotes are protected.
-
- If MIME is defined, forwarded messages will be an attachment of type
- MESSAGE/RFC822.
-
- Fixed problem with viewing MULTIPART or MESSAGE/RFC822 attachments from
- the attachment menu.
-
- Replaced MIME_BOUNDARY with a function (mime_generate_boundary()) that
- sets the global variable "mime_boundary" to generate unique multipart
- boundaries. This is important now that Elm will be sending out
- MESSAGE/RFC822 data which Elm might have originally generated...
-
- ----------------------
- Changes from ME8alpha2
- ----------------------
- Added a second line for menu items in verify_transmission() since adding
- the "r)emailer" option didn't fit on the first line.
-
- Modified the PGP code a little for more flexibility. You can now specify
- a string of "ids" to encrypt with in pgp_call().
-
- ---------------------
- Changes from ME8alpha
- ---------------------
- The menus from attach.c and attach_send.c were combined into a single
- menu in attach_menu.c which servers both purposes. The difference is
- whether or not the user is allowed to modify the given attachments.
-
- The rest of attach_send.c was renamed as mime_encode.c.
-
- -----------------
- Changes from ME7a
- -----------------
-
- Added a check in quoted_printable_decode() to make sure that the index
- into outbuf[] does not run off the end and cause problems.
-
- attach_edit() didn't return TRUE after editing in one spot, which causes
- problems on some platforms, namely Solaris.
- From: Martin Walter <ma...@ruf.uni-freiburg.de>
-
- base64_decode() was broken because it would fread() a data chunk, and
- wasn't always a multiple of 4 bytes, causing the decoding to break.
-
- Changed char => unsigned char in most places in *_encode() to fix problems
- with ISO characters >127.
-
- Added message about PGP support for the 'elm -v' command in args.c.
-
- Support for anonymous remailers. [ALPHA]
-
- Major rewrite of the MIME handling code. MULTIPART and MESSAGE/RFC822
- messages are parsed the first time they are accessed (eg. viewed/replied)
- and then are ready to use without parsing after that. See mime_parse.c
- and mime_decode.c for details.
-
- From: Kari Hurtta <Kari....@fmi.fi>
- Put a loop around verify_transmission() so that Elm will no longer just
- be lame when an error occurs in [include ...] statements. (Way cool! -Ed)
-
- Don't allow user read or writes files as attachmentds which he don't heve
- access. Notice that elm is (usually) setgid mail.
-
- Consider if MTA supports 8BITMIME also when encoding attachments.
-
- Now mail is encoded with quoted-printable if it includes control characters.
- 8BITMIME doesn't help in this case.
-
- Attachments are checked for 8bit characters, then content-transfer-encoding
- 7bit is not allowed.
-
- If any of subpart (also attachments) have content-tarnsfer-encoding 8bit
- or binary it propagates to content-transfer-encoding of top multipart -type.
-
- Now taken note of MIME's canonical encoding model:
- - End of line in text -subtypes when they have encoded with BASE64
- must be encoded as CR LF.
- - Also CR and LF must be encoded in quoted-printable-encoding if
- type have binary data (ie. not line oriented).
- - Done mapping CR LF -> LF when decoding text -subtypes.
-
- These content-transfer-encoding checks for attachments are also done
- for [include ...] keywords when sending.
-
- Now [include ...] also don't need metamail's help (they use same routines
- than attachments menu).
-
- Added configuration file option 'noencoding' (see elmrc-info for details
- on what this does).
-
- ----------------
- Changes from ME7
- ----------------
-
- Forgot to kill the newline from the PGP output before putting it in to the
- builtin++ pager. This resulted in messages being displayed double-spaced.
- Ick!
-
- ----------------
- Changes from ME6
- ----------------
-
- attach_send.c needs <sys/stat.h> on some machines.
-
- Fixed initialization of arrays in attach_send.c because CC isn't quite
- ANSI compliant. You can only initialize static arrays.
- From: Guy Harris <g...@netapp.com>
-
- Added support for sendmail 8.7 which has support for 8BIT content
- encoding. Uses the -B8BITMIME option.
- From: Kari Hurtta <hur...@dionysos.fmi.fi>
-
- Fixed problem where QUOTED-PRINTABLE messages were not decoded when
- replying if USE_PGP was not defined.
- From: Kari Hurtta <hur...@dionysos.fmi.fi>
-
- [keyword ...] constructs are no longer broken when using MIME and the
- message is to be encoded QUOTED-PRINTABLE.
- From: Kari Hurtta <hur...@dionysos.fmi.fi>
-
- Made the QUOTED-PRINTABLE encoding routine more compliant with the
- standard.
- From: Kari Hurtta <hur...@dionysos.fmi.fi>
-
- Added patch to mark messages NEW in all folders (not just the SPOOL)
- if there is no status: line.
- NOTE: This will probably go away when 2.5 is released. Instead, they
- will use some sort of "magic" flag to accomplish the same thing.
-
- Added check to make sure that we don't run off the end of outbuf[] in
- base64_decode() in mime.c.
- From: Kurt....@rus.uni-stuttgart.de
-
- Fixed type casting problem with BSD 4.4 derivatives in mime.c.
- From: Andrey A. Chernov <ac...@astral.msk.su>
-
- KOI8-R added as a valid compat charset.
- From: Andrey A. Chernov <ac...@astral.msk.su>
-
- builtin++ now wraps the line at the number of columns on the screen, not
- one character before. NewLine() apparently "does the right thing" and
- doesn't print an extra line if the last character is in the last column.
- From: Kari Hurtta <Kari....@fmi.fi>
-
- The arrow keys now do what they did before instead of controlling the
- bultin++ pager.
-
- builtin++ always clears the screen before displaying the next (or
- previous) page.
-
- The length of a line in the cache for builtin++ is increased to 150
- chars because the old value of 128 didn't work with hpterms with a
- width of 134 chars.
-
- Fixed problem where Elm would SIGBUS if you tried to use the
- attachments menu in an empty folder.
- From: Kari Hurtta <Kari....@fmi.fi>
-
- buf[STRING] was too short in AttachmentMenu() and caused certain Elm to
- bomb out on certain messages which had header lines which were too
- long.
-
- AddLineToCache() can now handle multiline input. This meant that
- calls to it from metapager had to remove the trailing newlines.
-
- Changed the MIME mini-header format in metapager().
-
- attach_edit() looks more like header_edit() now. Makes the interface
- more consistent.
-
- lib/getrealname.c needed <ctype.h> on older BSD systems.
-
- Fixed nasty bug where the blank line in between the headers and the body
- of a NEW message would get deleted when resync'ing in the spool folder.
-
- Fixed infinite loop in Configure when run with the -d option.
-
- ----------------
- Changes from ME5
- ----------------
-
- Added the DoAll() call so that the keyword "all" can be used when tagging
- or deleting.
-
- Decoupled PGP and MIME support such that you don't need MIME to use PGP.
-
- Added lots of error checking code in metapager.c.
- From: g...@netapp.com (Guy Harris).
-
- Fixed bug in quoted_printable_decode() where I did not convert read
- characters to base16.
-
- Added hex() function to protect index_hex from bad values.
-
- metapager() prompts for a command if necessary after running the external
- pager, just as Elm used to do.
-
- Fixed the From: line in write_header_info() where I broke it before.
-
- Fixed bug where the MIME multipart boundary would be written after the
- MMDF separator when copy=ON and the message was being copied to the user's
- desired folder.
-
- Added an "Attachments" menu in verify_transmission() for including
- attachments. This works in addition to the current method of using
- "[include ..."
-
- Elm now directly supports writing of BASE64 and QUOTED-PRINTABLE
- encodings.
-
- Changed the return value of match_address() to be zero, since it
- returns an int, and NULL is not always an int.
- From: Michael Shields <shi...@tembel.org>
-
- AttachViewer() now uses notplain() to determine whether or not
- metamail is needed to view the message.
- From: Guy Harris <g...@netapp.com>
-
- needs_mmdecode() now takes the integer version of the encoding rather
- than a string. This avoids parsing the string twice.
- From: Guy Harris <g...@netapp.com>
-
- Elm now checks outgoing messages to see if there are any non-printable
- characters, and if so encodes the message QUOTED-PRINTABLE.
-
- Cleaned up PGP code by moving more code to pgp.c so that other files
- require less modification (ie. the diffs will be simpler).
-
- Fixed showmsg.c so that it passes anything that doesn't require metamail
- to the metapager. This fixed the problem where messages with no
- Mime-Version header but had a Content-Type header wouldn't get displayed.
- From: Guy Harris <g...@netapp.com>
-
- Fixed bug in dispaddr.c so that if a message is from the user, it will
- always use the TO address to display.
-
- Moved get_real_name() to its own file in lib so it can be used by
- dispaddr.c.
-
- Modified get_real_name() so that if it sees an address like
- "<elk...@aero.org>" it will return "elk...@aero.org" instead of a zero
- length string.
-
- ----------------
- Changes from ME4
- ----------------
-
- Introduced the "metapager". It replaces most of the code in showmsg.c.
- It also takes care of all the MIME and PGP functions the bultin++ pager
- used to perform, so that the user doesn't have to use builtin++ in those
- cases.
-
- PGP decrypting function was rewritten using pipes so no temp files are
- required!
-
- The attachment handling code was modified to handle multiline content-type
- headers generate by such mailers as zmailer. It also looks through each
- modifier in the line intead of just assuming that the boundary field will
- be the first.
- From: g...@netapp.com (Guy Harris)
-
- The "command" status line in the builtin++ pager now floats around instead
- of always being on the bottom. This was done to facilitate the ^L in
- the pager so it didn't look stupid.
-
- Moved the MIME QUOTED-PRINTABLE and BASE64 decoding code to mime.c so it
- can be shared.
-
- Fixed copy_message() so that it will automatically decode MIME B64 and QP
- encodings. This means that replies to these types of messages do what the
- user will expect.
-
- ----------------
- Changes from ME3
- ----------------
-
- Fixed problems in builtin++.c and pgp.c where I used the return value
- from sprintf() as a char* when in SYSV systems it returns an int.
- This caused Elm to seg fault while decrypting messages.
-
- Configure now asks about PGP support and automatically sets up
- config.h. Thanks to Ken Cox (ke...@viewlogic.com) for additional help.
-
- PGP messages are now automatically decrypted when replying if
- usepgppass = ON.
-
- Back to using the application/pgp format content-type. Use
- format=keys-only for send a public key block.
-
- PGPCall() now uses the pgp option +encrypttoself=on instead of tacking
- the username on the end of the TO list.
-
- Fixed problem where any messages after sending a PGP public key had
- the key text included before the included message text.
-
- Use rename() if availible instead of copying the file in PGPCall().
- Otherwise use link(), unlink(). This should be a little more
- efficient.
-
- pgp is now called with the -w (wipe) option when encrypting.
-
- builtin++ can now handle text which is QUOTED-PRINTABLE or BASE64
- encoded.
-
- Fixed bug where the last line of messages was not being printed.
-
- Elm will no longer seg fault if you hit return without entering your
- PGP passphrase.
-
- Discovered the +batchmode option for pgp. This makes dealing with
- incorrect passphrases much easier!
-
- Fixed bug in builtin++ where the last line of pgp messages would be
- printed more than once while at the end of the message under certain
- circumstances.
-
- Changed notplain() in mime.c to support message/* content-type.
-
- Cleaned up the multipart handling by removing the boundary string from
- header_rec to conserve memory. This is now handled by builtin++ and
- AttachMenu().
-
- builtin++ can now handle multipart/digest correctly.
-
- SaveAttach() no longer needs to call metamail to decode QUOTED-PRINTABLE
- or BASE64 encodings.
-
- -----------------
- Changes from ME2a
- -----------------
-
- Elm will now keep track of your PGP passphrase for your RSA secret key.
- To use this feature, add the line "usepgppass = ON" to your .elmrc.
- There is also a timeout feature which will cause Elm to "forget" your
- passphrase after so many seconds if you don't use it. The default is
- 300 seconds, but this can be changes by setting the variable
- "keeppassfor" in your .elmrc.
-
- The builtin++ pager was completely rewritten (again) so that it can now
- handle normal messages, MIME multipart messages, automatic decryption
- and automatic signature checking for PGP messages. It also seems to be
- lacking some of the memory allocation bugs that the previous pager had.
-
- Fixed a bug in DynamicArray() which causes DestroyDynamicArray() to
- seg fault if exactly max+n elements were allocated. (w...@recco.de)
-
- ----------------
- Changes from ME2
- ----------------
-
- It is now possible to delete all "tagged" messages by entering "tagged"
- as the pattern to match after typing <control>-d (^D).
-
- fixed a bug in the limit command where you could not "un"limit the
- display of headers. Thanks to g...@netapp.com (Guy Harris) for
- pointing it out!
-
- fixed a bug in is_multipart() where the "boundary" token match was
- case-sensitive.
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/Changes
*** elm2.4.ME+.115/Changes 2002-01-26 13:14:44.000000000 +0200
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,101 ****
-
- This Changes is for the 2.4 version.
-
- Look file README.ME+ for changes of the 2.4ME+ version.
-
- --------------------------------------------------------------------------
- This file describes major changes made to the Elm source distribution
- between Releases 2.3 and 2.4. Please remember that Elm is a volunteer
- project, we did what we had time for, and perhaps, what interested us.
- If you have a suggestion, or a fix, submit it, and better yet,
- volunteer to implement it.
-
- Syd Weinstein Sat Oct 3 16:55:49 EDT 1992
-
- Drop all routing options and let the smart Mail Transport Agent route mail.
-
- Completely new alias subsystem.
-
- Support for NLS, LOCALE and message catalogs.
-
- Quoted string support to allow for X.400 type addresses.
-
- Support for MIME via metamail
-
- Support for Content-Length and Content-type
-
- Enhanced Configure Script
-
- Added -f flag to filter for alternate rules file
-
- Add sender to filter
-
- implements a -q flag to filter to quiet any logging of filtering actions.
-
- More intelligent make install target include better support for man pages
-
- User definable Options Screen
-
- System Wide Elmrc File (Allows binary distribution of Elm)
-
- implement a ucb mail like metoo option in elm.
-
- Split the common routines to a lib directory
-
- Allow using ~ for home directory in filter rules file
-
- Changed save_message to fork/setgid in order to save
- message with user's group id instead of mail group id.
-
- Change filter command to not look at $MAIL as it may be
- run from sendmail on some systems and $MAIL is set from the
- environment of the sender of the mail. Result was delivery
- of mail to the mailbox of the author of the mail instead of
- the intended user.
-
- new locking method - allow both fcntl and flock in Filter and Elm
-
- Detect when there are too many filter rules and exit gracefully.
-
- Reimplemented readmsg utility. Obsoleted "readmsg_file" and
- introduced "temp_state" file and "ELMSTATE" environment parameter.
- This allows readmsg to understand the current 'sorted' order of the
- Elm display, when run while Elm is running.
-
- Change date parsing, now uses Numeric TZ and sorting is now TZ aware.
-
- Add resize support, only at the top level, and no minimum size enforcement.
-
- add an option, -i, to use the mentioned file as an inclusion, i.e. the
- edit session starts out with that file as its text. Allows Elm to be
- used as a mailer from news readers.
-
- Change in method of reading/writing files to allow for nulls in the
- file and better catching of errors on writes such as file system full.
-
- Add ti/te framing for Sun console
-
- add change to folder based on alias (where messages to that folder would
- be stored)
-
- allow the user to save to the 'most-recently-used-folder'
-
- Disable stop processing while writing back spool to avoid
- stop causing a corrupted/long locked spool file
-
- Changes to allow clearing the weed-out list yet not totally
- invalidating all the existing elmrc files.
-
- Add - to allow fastmail to read from stdin
-
- Make frm's exit status more meaningful, add much new functionality,
- including the ability to recognize when a message is old, new, or
- unread, and when mail is really "To" somebody else.
-
- Change newmail to not keep files open to prevent systems with read
- locks from appending to the file. Add print_prefix to force printing
- the prefix if specified and only one folder being monitored.
-
- And many bug fixes.
-
- ************************************************************************
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/Configure
*** elm2.4.ME+.115/Configure 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/Configure 2004-05-16 15:26:42.000000000 +0300
***************
*** 8,14 ****
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.150 2004/03/27 18:31:35 hurtta Exp $
#
: sanity checks
--- 8,14 ----
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.150.8.6 2004/05/16 12:26:42 hurtta Exp $
#
: sanity checks
***************
*** 552,558 ****
locale_dir=''
CONFIG=''
: set package name
! package=elm2.4me+
echo " "
echo "Beginning of configuration questions for $package kit."
--- 552,558 ----
locale_dir=''
CONFIG=''
: set package name
! package=elmme+2.5
echo " "
echo "Beginning of configuration questions for $package kit."
***************
*** 777,782 ****
--- 777,783 ----
echo $n "$rp $c"
. myread
+ save_package="$package"
if test "$config" != "" ; then
echo "Fetching default answers from your old $config file..."
. ../$config
***************
*** 800,805 ****
--- 801,819 ----
esac
fi
+ if test "$save_package" != "$package" ; then
+
+ echo
+ echo "WARNING! Saved configuration is for $package and not for $save_package"
+ echo
+ sleep 5
+
+ # FIX paths
+ stage_dir="`echo \"$stage_dir\" | sed \"s/$package/$save_package/\"`"
+
+ package="$save_package"
+ fi
+
cat <<EOH
If you want Configure to search programs from some unusual directory first,
***************
*** 6351,6357 ****
cp ../lib/get_tz.c try.c 2>/dev/null \
|| $echo "Oh no! I cannot find the \"lib/get_tz.c\" file."
! cat >headers.h <<EOF
#$i_time I_TIME
#$i_systime I_SYSTIME
#include <stdio.h>
--- 6365,6371 ----
cp ../lib/get_tz.c try.c 2>/dev/null \
|| $echo "Oh no! I cannot find the \"lib/get_tz.c\" file."
! cat >elm_defs.h <<EOF
#$i_time I_TIME
#$i_systime I_SYSTIME
#include <stdio.h>
***************
*** 6798,6803 ****
--- 6812,6824 ----
done
: config.sh is needed by ConfTool/GenCharmap
+ : Also config.h and hdrs/sysdefs.h
+
+ (
+ . config.sh
+ ( . config.h.SH )
+ ( cd hdrs ; . sysdefs.SH )
+ )
$cat <<EOF
Index: elmME+.2.5.alpha0-cvs/ConfTool/Makefile
*** elm2.4.ME+.115/ConfTool/Makefile 2002-01-26 13:14:44.000000000 +0200
--- elmME+.2.5.alpha0-cvs/ConfTool/Makefile 2004-04-18 19:55:35.000000000 +0300
***************
*** 4,12 ****
validcharset: validcharset.o precompiled_sets.o istrcmp.o
$(CC) $(CFLAGS) -o $@ validcharset.o precompiled_sets.o istrcmp.o
! validcharset.o: ../hdrs/defs.h ../hdrs/elmlib.h ../hdrs/cs_imp.h
! precompiled_sets.o: ../hdrs/defs.h ../hdrs/elmlib.h ../hdrs/cs_imp.h
istrcmp.o: ../hdrs/headers.h
--- 4,12 ----
validcharset: validcharset.o precompiled_sets.o istrcmp.o
$(CC) $(CFLAGS) -o $@ validcharset.o precompiled_sets.o istrcmp.o
! validcharset.o: ../hdrs/elm_defs.h ../hdrs/elmlib.h ../hdrs/cs_imp.h
! precompiled_sets.o: ../hdrs/elm_defs.h ../hdrs/elmlib.h ../hdrs/cs_imp.h
istrcmp.o: ../hdrs/headers.h
Index: elmME+.2.5.alpha0-cvs/ConfTool/validcharset.c
*** elm2.4.ME+.115/ConfTool/validcharset.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/ConfTool/validcharset.c 2004-04-18 19:55:35.000000000 +0300
***************
*** 1,7 ****
#include <stdio.h>
! #include "defs.h"
! #include "elmlib.h"
#include "cs_imp.h"
struct charset_type cs_ascii;
--- 1,6 ----
#include <stdio.h>
! #include "elm_defs.h"
#include "cs_imp.h"
struct charset_type cs_ascii;
Index: elmME+.2.5.alpha0-cvs/doc/answer.1
*** elm2.4.ME+.115/doc/answer.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/answer.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ANSWER 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
answer - phone message transcription system
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ANSWER 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
answer - phone message transcription system
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/chkalias.1
*** elm2.4.ME+.115/doc/chkalias.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/chkalias.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH CHECKALIAS 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
checkalias - check to see if an alias is defined.
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH CHECKALIAS 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
checkalias - check to see if an alias is defined.
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elm.1
*** elm2.4.ME+.115/doc/elm.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elm.1 2004-05-16 16:50:00.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELM 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elm - an interactive mail system
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELM 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elm - an interactive mail system
.SH SYNOPSIS
***************
*** 260,265 ****
--- 260,267 ----
.SH COPYRIGHTS
\fB\*(ct\fRCopyright 1996-2004 by Kari Hurtta
.br
+ Based on Elm 2.5, \fB\*(ct\fRCopyright 1988-1995 by The USENET Community Trust
+ .br
Based on Elm 2.4, \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor
Index: elmME+.2.5.alpha0-cvs/doc/elmalias.1
*** elm2.4.ME+.115/doc/elmalias.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmalias.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMALIAS 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmalias - expand and display Elm address aliases
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMALIAS 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmalias - expand and display Elm address aliases
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elmbindata.1
*** elm2.4.ME+.115/doc/elmbindata.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmbindata.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMBINDATA 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmbindata -
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMBINDATA 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmbindata -
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elmcharset.1
*** elm2.4.ME+.115/doc/elmcharset.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmcharset.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMCHARSET 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmcharset -
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMCHARSET 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmcharset -
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elm-help.0
*** elm2.4.ME+.115/doc/elm-help.0 2003-11-15 18:19:06.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elm-help.0 2004-05-16 08:54:27.000000000 +0300
***************
*** 1,5 ****
! Command Elm 2.4ME+ Action
<RETURN>,<SPACE> Display current message
| Pipe current message or tagged messages to
--- 1,5 ----
! Command Elm ME+ 2.5 Action
<RETURN>,<SPACE> Display current message
| Pipe current message or tagged messages to
***************
*** 37,42 ****
--- 37,43 ----
k, <UP> Advance to previous undeleted message
l Limit messages by specified criteria
^L Redraw screen
+ M Toggle the display of mailing list info
m Mail a message
n Next message, displaying current,
then increment
Index: elmME+.2.5.alpha0-cvs/doc/elmlibregister.1
*** elm2.4.ME+.115/doc/elmlibregister.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmlibregister.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMLIBREGISTER 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmlibregister - Registry of elm libraries to use-library line on elm.rc
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMLIBREGISTER 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmlibregister - Registry of elm libraries to use-library line on elm.rc
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elmrc-info
*** elm2.4.ME+.115/doc/elmrc-info 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/doc/elmrc-info 2004-05-15 23:11:35.000000000 +0300
***************
*** 1,5 ****
! #@(#)$Id: elmrc-info,v 1.61 2004/04/04 16:42:27 hurtta Exp $
! # Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
#
--- 1,5 ----
! #@(#)$Id: elmrc-info,v 1.61.2.12 2004/05/15 20:11:35 hurtta Exp $
! # Elm Version ME+ 2.5
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
#
***************
*** 114,124 ****
escape
# the character to use in the builtin editor for entering commands
extra-mailbox-dir
! # Folders on that directory is considered to be mailboxes
# (ie. it is prepared that to they is arrived new mail when
# they are open). This directory must be different than
# folders or maildir directory (ie. ~/Mail).
send-mime-plain-text
# When set, Text/Plain with charset US-ASCII is sent with MIME headers.
--- 114,135 ----
escape
# the character to use in the builtin editor for entering commands
+ editflush
+ # Flush the input buffer after returning from an external editor?
+
extra-mailbox-dir
! # Folders on that directory is considered to be spool mailboxes
# (ie. it is prepared that to they is arrived new mail when
# they are open). This directory must be different than
# folders or maildir directory (ie. ~/Mail).
+ #
+ # See also: incomingfolders
+
+ incomingfolders
+ # List of folders which are incoming folders. Incoming folders are
+ # handled like your spool mailbox.
+ #
+ # See also: extra-mailbox-dir
send-mime-plain-text
# When set, Text/Plain with charset US-ASCII is sent with MIME headers.
***************
*** 138,157 ****
# What is maximum time in days between mails so that
# they can considered to be same thread (when subject is same)
aliassortby
# how to sort the alias list, "Name" by default
print
# how to print a message ('%s' is the filename)
attribution
! # attribution string for replies ('%s' is the author of original message)
prefix
# prefix sequence for indenting included message text in outgoing messages...
weedout
# what headers I DON'T want to see, ever.
bounceback
# threshold for bouncing copies of remote uucp messages...
--- 149,200 ----
# What is maximum time in days between mails so that
# they can considered to be same thread (when subject is same)
+ showmlists
+ # Should mailing list info be displayed for messages at startup?
+ # The "M" command toggles this on and off.
+
+ tochars
+ # When "showmlists" is off, a single-character mark is displayed
+ # to indicate who the message is to. This five-character string
+ # defines the values to use for the mark. The five characters are:
+ # - Mark for mail to you and nobody else.
+ # - Mark for mail to you and other recipients.
+ # - Mark for mail to multiple recipients, and you are on the CC list.
+ # - Mark for mail not addressed directly to you (e.g. mailing lists)
+ # - Mark for mail which have List-Id header (ie. mailing list identification)
+ # An underscore "_" in this list will display as a blank.
+ # the default value is _TC*L
+ #
+
+
+
aliassortby
# how to sort the alias list, "Name" by default
print
# how to print a message ('%s' is the filename)
+ printhdrs
+ # List of headers to select and weed when printing messages.
+ #
+ # NOTE: This is used with p)rint -command (disabled)
+ # and not with P)rint text command
+
attribution
! # Attribution string for replies. "%F" is the author of original message.
!
! fwdattribution
! # Attribution for forwarded messages. "%F" is original author.
! # Something like: "--- %[begin|end] forwarded message from %F ---"
prefix
# prefix sequence for indenting included message text in outgoing messages...
weedout
# what headers I DON'T want to see, ever.
+ #
+ # If first element on list is "*clear-weed-list*" then builtin
+ # weedout list is not used.
bounceback
# threshold for bouncing copies of remote uucp messages...
***************
*** 163,168 ****
--- 206,218 ----
autocopy
# automatically copy message being replied to into buffer?
+ askreplycopy
+ # When replying to a message, ask "Copy message?" into editing buffer?
+ # If OFF, then the "replycopy" action is taken without asking.
+
+ replycopy
+ # Should the default for the "Copy message?" question be "yes"?
+
copy
# save a copy of all outbound messages?
***************
*** 251,256 ****
--- 301,309 ----
titles
# display message title when displaying pages of message?
+ savebyalias
+ # Save messages, incoming and outbound, by alias of sender/recipient?
+
savename
# save messages, incoming and outbound, by login name of sender/recipient?
***************
*** 274,279 ****
--- 327,335 ----
pointnew
# start up by pointing to the first new message received, if possible?
+ showreply
+ # Should messages to which you've replied be shown with an "r" mark?
+
set-window-title
# Enables automatic updating of window's tile and incon name when
# folder is changed. File ~/.elm/terminal.info or global elm.terminalinfo
***************
*** 376,381 ****
--- 432,452 ----
# auto-answered(OFF) with the default answers when we resync or
# change folders?
+ askdelete
+ # Should the "Delete messages?" question be asked when you exit, resync,
+ # or change folders? If OFF, then the "alwaysdelete" action is taken
+ # without asking.
+
+ askkeep
+ # Should the "Keep unread messages in incoming mailbox?" question be
+ # asked when you exit, resync, or change folders? If OFF, then the
+ # "alwayskeep" action is taken without asking.
+
+ askstore
+ # Should the "Move read messages to received folder?" question be asked
+ # when you exit, resync, or change folders? If OFF, then the "alwaysstore"
+ # action is taken without asking.
+
askcc
# would you like to be asked for Carbon-Copies information each msg?
***************
*** 537,542 ****
--- 608,617 ----
# This is used only for folders in the user's mail directory and
# does not affect ordinary files.
+ confirmtagsave
+ # Should Elm ask for confirmation before saving tagged messages to a
+ # folder when the cursor is on an untagged message?
+
convert-comment-to-fullname
# Elm 2.4ME+ PL55 parses addresses like:
# fullname <address>
***************
*** 860,862 ****
--- 935,940 ----
# (for example $MAILCAPS). Value of variables is splitted only from ':'
# (quotes and spaces are not treated specially.)
# See also: internal-mailcaps
+
+ allow-setuid
+ # If set, running Elm as setuid is not prevented.
Index: elmME+.2.5.alpha0-cvs/doc/elmrc-write.1
*** elm2.4.ME+.115/doc/elmrc-write.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmrc-write.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMRC-WRITE 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmrc-write -
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMRC-WRITE 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmrc-write -
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elmregister.1
*** elm2.4.ME+.115/doc/elmregister.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmregister.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMREGISTER 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmregister - Elm 2.4ME+ installation and uninstallation engine
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMREGISTER 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmregister - Elm 2.4ME+ installation and uninstallation engine
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elmstringconvert.1
*** elm2.4.ME+.115/doc/elmstringconvert.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmstringconvert.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMSTRINGCONVERT 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmstringconvert - Convert strings (lines) from one charset to another
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMSTRINGCONVERT 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmstringconvert - Convert strings (lines) from one charset to another
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elmterminal.1
*** elm2.4.ME+.115/doc/elmterminal.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmterminal.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMTERMINAL 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmterminal -
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMTERMINAL 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmterminal -
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/elmunidata.1
*** elm2.4.ME+.115/doc/elmunidata.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/elmunidata.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH ELMUNIDATA 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
elmunidata -
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH ELMUNIDATA 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
elmunidata -
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/fastmail.1
*** elm2.4.ME+.115/doc/fastmail.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/fastmail.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH FASTMAIL 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
fastmail - quick batch mail interface to a single address
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH FASTMAIL 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
fastmail - quick batch mail interface to a single address
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/frm.1
*** elm2.4.ME+.115/doc/frm.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/frm.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH FRM 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
frm,nfrm \- list from and subject of selected messages in mailbox or folder
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH FRM 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
frm,nfrm \- list from and subject of selected messages in mailbox or folder
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/listalias.1
*** elm2.4.ME+.115/doc/listalias.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/listalias.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH LISTALIAS 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
listalias - list user and system aliases
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH LISTALIAS 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
listalias - list user and system aliases
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/messages.1
*** elm2.4.ME+.115/doc/messages.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/messages.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH MESSAGES 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
messages - quick count of messages in mailbox or folder
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH MESSAGES 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
messages - quick count of messages in mailbox or folder
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/newalias.1
*** elm2.4.ME+.115/doc/newalias.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/newalias.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH NEWALIAS 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
newalias - install new elm aliases for user and/or system
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH NEWALIAS 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
newalias - install new elm aliases for user and/or system
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/newmail.1
*** elm2.4.ME+.115/doc/newmail.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/newmail.1 2004-05-16 17:10:19.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH NEWMAIL 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
newmail,wnewmail - programs to asynchronously notify of new mail
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH NEWMAIL 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
newmail,wnewmail - programs to asynchronously notify of new mail
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/printmail.1
*** elm2.4.ME+.115/doc/printmail.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/printmail.1 2004-05-16 17:10:20.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH PRINTMAIL 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
printmail - format mail in a readable fashion for printing
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH PRINTMAIL 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
printmail - format mail in a readable fashion for printing
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/prlong.1
*** elm2.4.ME+.115/doc/prlong.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/prlong.1 2004-05-16 17:10:20.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH PRLONG 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
prlong - Format large amounts of output, folding across multiple lines.
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH PRLONG 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
prlong - Format large amounts of output, folding across multiple lines.
.SH SYNOPSIS
Index: elmME+.2.5.alpha0-cvs/doc/readmsg.1
*** elm2.4.ME+.115/doc/readmsg.1 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/doc/readmsg.1 2004-05-16 17:10:20.000000000 +0300
***************
*** 4,10 ****
.if t \{\
. ds ct \\(co
.\}
! .TH READMSG 1L "Elm Version 2.4ME+" "Kari Hurtta"
.SH NAME
readmsg - extract messages from a mail folder
.SH SYNOPSIS
--- 4,10 ----
.if t \{\
. ds ct \\(co
.\}
! .TH READMSG 1L "Elm Version ME+ 2.5" "Kari Hurtta"
.SH NAME
readmsg - extract messages from a mail folder
.SH SYNOPSIS
***************
*** 76,81 ****
--- 76,86 ----
.I folder
can be a filename or a specification such as ``=sentmail''.
.P
+ The
+ .B \-w
+ flag tailors the list of mail headers that are weeded and displayed.
+ Header weeding is discussed below.
+ .P
The \fB-h\fR flag instructs the program to include the entire header
of the matched message or messages when displaying their
text. (default is to display the From: Date: and Subject: lines
***************
*** 127,132 ****
--- 132,174 ----
the
.I elm
message index screen.
+ .P
+ Normally,
+ .I readmsg
+ selects and displays certain headers from the message. By default,
+ the list of selected headers includes:
+ .P
+ .RS
+ .nf
+ \(bu The ``Subject:'' header.
+ \(bu The ``From:'' header.
+ \(bu The ``To:'' header.
+ \(bu The ``Cc:'' header.
+ \(bu The ``Date:'' header.
+ \(bu Any header starting with ``Apparently-''.
+ .fi
+ .RE
+ .P
+ The header weeding may be changed with the
+ .B \-w
+ option. The argument to this option is a list of header names,
+ separated by whitespace or commas.
+ .I readmsg
+ compares each header to the ones in this list, and if a match is found
+ the header is displayed. The list entries can contain partial header
+ names. For instance, an entry of ``From'' would match both the
+ ``From\s-1<SPACE>\s0'' line at the top of the message, as well as any
+ ``From:'' header. Matching is case insensitive. An underscore (``_'')
+ may be used to represent a space, so specifying ``From_'' will select
+ the ``From\s-1<SPACE>\s0'' line but not the ``From:'' header. A list
+ entry may be preceded by an exclamation point to suppress the header.
+ Thus, a specification of ``!From_\0From'' means about the same thing
+ as ``From:''. When no header weeding options are specified, the
+ default action corresponds to:
+ .P
+ .ft CW
+ readmsg -w "Subject: From: To: Cc: Apparently- Date:"
+ .ft 1
.SH "EXAMPLES"
First off, to use this from within \fBvi\fR to include the text of the
current message, you could use the command:
***************
*** 199,205 ****
.SH BUG REPORTS TO
Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1996-2001 by Kari Hurtta
.br
Based on Elm 2.4, \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
--- 241,249 ----
.SH BUG REPORTS TO
Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1996-2004 by Kari Hurtta
! .br
! Based on Elm 2.5, \fB\*(ct\fRCopyright 1988-1995 by The USENET Community Trust
.br
Based on Elm 2.4, \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
.br
Index: elmME+.2.5.alpha0-cvs/hdrs/defs.h
*** elm2.4.ME+.115/hdrs/defs.h 2004-03-30 19:38:43.000000000 +0300
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,731 ****
- /* $Id: defs.h,v 1.45 2004/03/27 18:31:35 hurtta Exp $ */
-
- /******************************************************************************
- * The Elm (ME+) Mail System - $Revision: 1.45 $ $State: Exp $
- *
- * Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
- * (was hurtt...@ozone.FMI.FI)
- ******************************************************************************
- * The Elm Mail System
- *
- * Copyright (c) 1988-1992 USENET Community Trust
- * Copyright (c) 1986,1987 Dave Taylor
- *****************************************************************************/
-
- /** define file for ELM mail system. **/
-
- #include "defs_major.h"
-
- #ifdef USE_FCNTL_LOCKING
- # define SYSCALL_LOCKING
- #else
- # ifdef USE_FLOCK_LOCKING
- # define SYSCALL_LOCKING
- # endif
- #endif
-
-
- /*
- #undef const
- #undef volatile
- */
-
- #define KLICK 25
-
- #define SHORT 10 /* super short strings! */
- #define NLEN 48 /* name length for aliases */
- #define WLEN 20
- #define STRING 128 /* reasonable string length for most.. */
- #define LONG_STRING 512 /* even longer string for group expansion */
- #define VERY_LONG_STRING 2560 /* huge string for group alias expansion */
- #define MAX_LINE_LEN 5120 /* even bigger string for "filter" prog.. */
-
- #define BREAK '\0' /* default interrupt */
- #define BACKSPACE '\b' /* backspace character */
- #define TAB '\t' /* tab character */
- #define RETURN '\r' /* carriage return char */
- #define LINE_FEED '\n' /* line feed character */
- #define FORMFEED '\f' /* form feed (^L) char */
- #define COMMA ',' /* comma character */
- #define SPACE ' ' /* space character */
- #define DOT '.' /* period/dot character */
- #define BANG '!' /* exclaimation mark! */
- #define AT_SIGN '@' /* at-sign character */
- #define PERCENT '%' /* percent sign char. */
- #define COLON ':' /* the colon .. */
- #define BACKQUOTE '`' /* backquote character */
- #define TILDE_ESCAPE '~' /* escape character~ */
- #define ESCAPE '\033' /* the escape */
-
-
- #define NO_OP_COMMAND '\0' /* no-op for timeouts */
-
- #define READCH_MASK 0x0FFF /* Mask flags off */
- #define READCH_CURSOR 0x1000 /* Return cursor keys */
- #define READCH_NOCURSOR 0x2000 /* Disable cursor keys */
- #define READCH_term_char 0x4000 /* Return term chars */
- #define READCH_resize 0x8000 /* Check resize .... */
-
- #define REDRAW_MARK 257 /* Artificial "char" for redrawing */
- #define UP_MARK 258 /* Artificial UP key */
- #define LEFT_MARK 259 /* Artificial LEFT key */
- #define RIGHT_MARK 260 /* Artificial RIGHT key */
- #define DOWN_MARK 261 /* Artificial DOWN key */
- #define PAGEUP_MARK 262 /* Artificial PAGE UP key */
- #define PAGEDOWN_MARK 263 /* Artificial PAGE DOWN key */
- #define HELP_MARK 264 /* Artificial HELP key */
- #define HOME_MARK 265 /* Artificial HOME key */
- #define FIND_MARK 266 /* Artificial FIND key */
- #define SPACE_MARK 267 /* used by builtinplus */
- #define RESIZE_MARK 268 /* Used ny menu_context */
-
- #define TERMCH_backspace 300 /* term_char: backspace */
- #define TERMCH_kill_line 301
- #define TERMCH_word_erase 302
- #define TERMCH_interrupt_char 303
- #define TERMCH_reprint_char 304
- #define TERMCH_eof_char 305
-
- #define STANDARD_INPUT 0 /* file number of stdin */
-
- #ifndef TRUE
- #define TRUE 1
- #define FALSE 0
- #endif
-
- #define NO 0
- #define YES 1
- #define NO_TITE 2 /* ti/te or in flag */
- #define NO_CHARSET 4 /* charset switch flag */
- #define RAW_FROM_SIGNAL 8 /* From signal handler */
-
- #define MAYBE 2 /* a definite define, eh? */
- #define FORM 3 /* <nevermind> */
- #define PREFORMATTED 4 /* forwarded form... */
-
- #define SAME_PAGE 1 /* redraw current only */
- #define NEW_PAGE 2 /* redraw message list */
- #define ILLEGAL_PAGE 0 /* error in page list, punt */
-
- #define PAD 0 /* for printing name of */
- #define FULL 1 /* the sort we're using */
-
- #define OUTGOING 0 /* defines for lock file */
- #define INCOMING 1 /* creation..see lock() */
-
- /* options to the copy_message() procedure */
- #define CM_REMOVE_HEADER (1<<0) /* skip header of message */
- #define CM_UPDATE_STATUS (1<<2) /* Update Status: Header */
- #define CM_REMAIL (1<<4) /* Add Sender: and Orig-To: headers */
- #define CM_DECODE (1<<5) /* Decode MIME, PGP and elm */
- #define CM_FILT_HDR (1<<6) /* Filter headers (for forwarding) */
- #define CM_DISPLAYING (1<<7) /* Pass to MIME code */
- #define CM_REMOVE_ENVELOPE (1<<8) /* Remove envelope */
- #define CM_CRLF (1<<9) /* Use CRLF */
- #define CM_LF (1<<10) /* Force CRLF -> LF */
-
- /* Options for mail() procedure */
- #define MAIL_COPY_MSG (1<<0)
- #define MAIL_EDIT_MSG (1<<1)
- #define MAIL_ISFORM (1<<2)
- #define MAIL_REPLYING (1<<3)
- #define MAIL_FORWARDING (1<<4)
- #define MAIL_HAVE_ATTACHMENTS (1<<5) /* Flag for verify transmission */
- #define MAIL_HAVE_PGP_ENCODED (1<<6) /* Falg for verify transmission */
-
- /* xxx_ACCESS moved to down after including of unistd.h */
-
- #define BIG_NUM 999999 /* big number! */
- #define BIGGER_NUM 9999999 /* bigger number! */
-
- #define START_ENCODE "[encode]"
- #define END_ENCODE "[clear]"
-
- #define DONT_SAVE "[no save]"
- #define DONT_SAVE2 "[nosave]"
-
-
- /* They are used to support Grab_the_file in save() */
- #define FLOCKING_OK 0
- #define FLOCKING_RETRY 1
- #define FLOCKING_FAIL -1
-
- #define FOLDER_STATUS_READ 0
- #define FOLDER_STATUS_OLD 1
- #define FOLDER_STATUS_NEW 2
-
- #define alias_file ".aliases"
- #define group_file ".groups"
- #define system_file ".systems"
-
- #define default_folders "Mail"
- #define default_recvdmail "=received"
- #define default_sentmail "=sent"
-
- /* environment variable with name of folder state dump file */
- #define FOLDER_STATE_ENV "ELMSTATE"
-
- /** some defines for the 'userlevel' variable... **/
-
- #define RANK_AMATEUR 0
- #define AMATEUR 1
- #define OKAY_AT_IT 2
- #define GOOD_AT_IT 3
- #define EXPERT 4
- #define SUPER_AT_IT 5
-
- /** some defines for the "status" field of the header and alias record **/
-
- #define ACTION 1 /* bit masks, of course */
- #define CONFIDENTIAL 2
- #define DELETED 4
- #define EXPIRED 8
- #define FORM_LETTER 16
- #define NEW 32
- #define PRIVATE_MAIL 64
- #define TAGGED 128
- #define URGENT 256
- #define VISIBLE 512
- #define UNREAD 1024
- #define REPLIED 2048
- #define MIME_MESSAGE 4096 /* indicates existence of MIME Header */
- #define PRE_MIME_CONTENT 8192
- #define MIME_UNSUPPORTED 16384
- #define NOHDRENCODING 32768
- /* Don't add values bigger than 2^15 == 32768 */
-
- #ifdef USE_PGP
- #define PGP_MESSAGE 1
- #define PGP_SIGNED_MESSAGE 2
- #define PGP_PUBLIC_KEY 4
- #endif
-
- /** some defines for the "type" field of the alias record **/
-
- #define SYSTEM 1 /* bit masks, of course */
- #define USER 2
- #define PERSON 4
- #define GROUP 8
- #define DUPLICATE 16 /* system aliases only */
-
- /** some defines to aid in the limiting of alias displays **/
-
- #define BY_NAME 64
- #define BY_ALIAS 128
-
- #define UNDELETE 0 /* purely for ^U function... */
-
- /** values for headers exit_disposition field */
- #define UNSET 0
- #define KEEP 1
- #define STORE 2
- #define DELETE 3
- #define HIDE 4
-
- /** some months... **/
-
- #define JANUARY 0 /* months of the year */
- #define FEBRUARY 1
- #define MARCH 2
- #define APRIL 3
- #define MAY 4
- #define JUNE 5
- #define JULY 6
- #define AUGUST 7
- #define SEPTEMBER 8
- #define OCTOBER 9
- #define NOVEMBER 10
- #define DECEMBER 11
-
- #define equal(s,w) (strcmp(s,w) == 0)
- #define min(a,b) (a) < (b) ? (a) : (b)
- /*
- * Control character mapping like "c - 'A' + 1" does not work
- * correctly for a DEL. Neither does it allow mapping from
- * a control character to the letter that is normally used with
- * an up-arrow prefix to represent the control char.
- * The correct mapping should be done like this...
- */
- #define ctrl(c) (((c) + '@') & 0x7f)
-
- #define plural(n) n == 1 ? "" : "s"
- #define lastch(s) s[strlen(s)-1]
-
- #ifdef MEMCPY
-
- # ifdef I_MEMORY
- # include <memory.h>
- # else /* I_MEMORY */
- # ifndef ANSI_C /* ANSI puts these in string.h */
- #if defined(__convexc__)
- extern void *memcpy(), *memset();
- #else
- extern char *memcpy(), *memset();
- #endif
- extern int memcmp();
- # endif /* ANSI_C */
- # endif /* I_MEMORY */
-
- #define bcopy(s1,s2,l) memcpy(s2,s1,l)
- #define bcmp(s1,s2,l) memcmp(s1,s2,l)
- #define bzero(s,l) memset(s,0,l)
- #endif /* MEMCPY */
-
- #ifdef I_TIME
- # include <time.h>
- #endif
- #ifdef I_SYSTIME
- # include <sys/time.h>
- #endif
-
- #ifndef _POSIX_SOURCE
- extern struct tm *localtime();
- extern time_t time();
- #endif
-
-
- #if defined(SELECT) || defined(I_SYS_SELECT)
- #define POLL_METHOD 1
- #if defined(I_SYS_SELECT)
- #include <sys/select.h>
- #endif
- #else
- #if defined(POLL)
- #include <poll.h>
- #define POLL_METHOD 2
- #else
- #undef POLL_METHOD
- #endif
- #endif
-
-
- #ifdef I_SOCKET
- #include <sys/socket.h>
- #endif
- #ifdef I_NETDB
- #include <netdb.h>
- #if defined(SOCK_STREAM) && defined (POLL_METHOD)
- #define REMOTE_MBX
- #endif
- #endif
-
- /* find tab stops preceding or following a given column position 'a', where
- * the column position starts counting from 1, NOT 0!
- * The external integer "tabspacing" must be declared to use this. */
-
- /*
- #define prev_tab(a) (((((a-1)/tabspacing))*tabspacing)+1)
- #define next_tab(a) (((((a-1)/tabspacing)+1)*tabspacing)+1)
- */
-
- #define no_ret(s) { register int xyz; /* varname is for lint */ \
- for (xyz=strlen(s)-1; xyz >= 0 && \
- (s[xyz] == '\r' || s[xyz] == '\n'); ) \
- s[xyz--] = '\0'; \
- }
-
- #define first_word(s,w) (strncmp(s,w, strlen(w)) == 0)
- #define first_word_nc(s,w) (strincmp(s,w, strlen(w)) == 0)
- #define ClearLine(n) MoveCursor(n,0); CleartoEOLN()
- #define whitespace(c) (c == ' ' || c == '\t')
- #define ok_rc_char(c) (isalnum(c) || c == '-' || c == '_')
- #define ok_alias_char(c) (isalnum(c) || c == '-' || c == '_' || c == '.')
- #define onoff(n) (n == 0 ? "OFF" : "ON")
-
- /** The next function is so certain commands can be processed from the showmsg
- routine without rewriting the main menu in between... **/
-
- #define special(c) (c == 'j' || c == 'k')
-
- /** and a couple for dealing with status flags... **/
-
- #define ison(n,mask) (n & mask)
- #define isoff(n,mask) (!ison(n, mask))
-
- #define setit(n,mask) n |= mask
- #define clearit(n, mask) n &= ~mask
-
- /** a few for the usage of function keys... **/
-
- #define f_key1 1
- #define f_key2 2
- #define f_key3 3
- #define f_key4 4
- #define f_key5 5
- #define f_key6 6
- #define f_key7 7
- #define f_key8 8
-
- #define MAIN 0
- #define ALIAS 1
- #define YESNO 2
- #define CHANGE 3
- #define READ 4
-
- #define MAIN_HELP 0
- #define OPTIONS_HELP 1
- #define ALIAS_HELP 2
- #define PAGER_HELP 3
-
-
- /** some possible sort styles... **/
-
- #define REVERSE - /* for reverse sorting */
- #define SENT_DATE 1 /* the date message was sent */
- #define RECEIVED_DATE 2 /* the date message was received */
- #define SENDER 3 /* the name/address of sender */
- #define SIZE 4 /* the # of lines of the message */
- #define SUBJECT 5 /* the subject of the message */
- #define STATUS 6 /* the status (deleted, etc) */
- #define MAILBOX_ORDER 7 /* the order it is in the file */
- #define THREAD 8 /* thread order (date sent/subject */
-
- /** some possible sort styles...for aliases **/
-
- #define ALIAS_SORT 1 /* the name of the alias */
- #define NAME_SORT 2 /* the actual name for the alias */
- #define TEXT_SORT 3 /* the order of aliases.text */
- #define LAST_ALIAS_SORT TEXT_SORT
-
- /* some stuff for our own malloc call - pmalloc */
-
- #define PMALLOC_THRESHOLD 256 /* if greater, then just use malloc */
- #define PMALLOC_BUFFER_SIZE 2048 /* internal [memory] buffer size... */
-
- /* Flags for classify_header in parse_util.c */
-
- #define HDR_TEXT 1
- #define HDR_STRUCTURED 2
- #define HDR_PHRASE 4
- #define HDR_COMMENT 8 /* inside of comment -- for rfc1522_encode_text */
-
- /** the following macro is as suggested by Larry McVoy. Thanks! **/
-
- #if 0
- # ifdef DEBUG
- # define dprint(n,x) do { \
- if (debug >= n && debugfile) { \
- fprintf x ; \
- fflush(debugfile); \
- } \
- } while(0)
- # else
- # define dprint(n,x)
- # endif
- #endif
-
- /* Values for dsn flag */
- #define DSN_FULL 1
- #define DSN_HDRS 2
- #define DSN_SUCCESS 4
- #define DSN_FAILURE 8
- #define DSN_DELAY 16
- #define DSN_NEVER 32
-
- /* some random structs... */
-
- #define NOTPLAIN_need_metamail 0x01
- #define NOTPLAIN_need_mailcap 0x02
- #define NOTPLAIN_canuse_mailcap 0x04
- #define NOTPLAIN_is_fallback 0x08
-
- #define MIME_magic 0xFD00
- typedef struct mimeinfo {
- unsigned short magic; /* MIME_magic */
- unsigned int disposition : 2; /* DISP_INLINE or DISP_ATTACH or
- DISP_AUTOATTACH
- */
-
- unsigned int mime_flags : 4; /* NOTPLAIN_need_metamail 0x01
- NOTPLAIN_need_mailcap 0x02
- NOTPLAIN_canuse_mailcap 0x04
- NOTPLAIN_is_fallback 0x08
- */
-
- unsigned int unlink : 1; /* used to mark that the file should be
- * unlinked after sending the attachment
- */
-
- struct media_type * TYPE;
- char *type_opts;
- char *disposition_opts;
- struct string *description;
-
- int encoding; /* Notice: ENCODING_ILLEGAL == -1, ENCODING_* in mime.h */
- long length;
- long begin_offset; /* the beginning of the attachment (includes headers) */
- long offset; /* where the real data starts */
-
- struct mime_parser_data * parser_data;
-
- struct mime_selected_handler * handler_data;
-
- /* These next fields are only used when sending multipart messages. */
- char * pathname;
- struct string * dispname;
-
- } mime_t;
-
- struct header_rec {
- int lines; /** # of lines in the message **/
- int status; /** Urgent, Deleted, Expired? **/
- int index_number_X; /** relative loc in file... **/
- int encrypted; /** whether msg has encryption **/
- int exit_disposition; /** whether to keep, store, delete **/
- int status_chgd; /** whether became read or old, etc. **/
- long content_length; /** content_length in bytes from message header **/
- long offset; /** offset in bytes of message **/
- time_t received_time; /** when elm received here **/
- char env_from[STRING]; /* sender from "From " */
- struct addr_item *from; /** who sent the message? **/
- struct addr_item *to; /** who it was sent to **/
- struct addr_item *cc;
- char messageid[STRING]; /** the Message-ID: value **/
- char time_zone[12]; /** incl. tz **/
- time_t time_sent; /** gmt when sent for sorting **/
- time_t thread_time; /** time sent of the "thread" (for sorting) **/
- char time_menu[SHORT]; /** just the month..day for menu **/
- time_t tz_offset; /** offset to gmt of time sent **/
- struct string *subject; /** The subject of the mail **/
- char mailx_status[WLEN];/** mailx status flags (RO...) **/
- mime_t mime_rec; /** MIME information for this message **/
-
- /* == charset_t, but it is not yet declared ... */
- struct charcode_info * header_charset; /* charset for headers ... */
- struct charcode_info * override_charset; /* For O)verride command */
-
- struct mbx_hdr_info * mbx_info;
-
- struct partial_vector * partial_vector;
- int partial_len;
-
- #ifdef USE_PGP
- unsigned int pgp : 3;
- #endif
- unsigned int binary :1; /* Binary message -- headers are terminated
- * with \r\n
- */
- unsigned int have_from :1; /* Body have unescaped "From " */
- unsigned int body_parsed :1; /* Whatever body of message is read */
- unsigned int mime_parsed :1; /* Whatever mime structure is parsed */
- };
-
- #if ANSI_C
- # include <stdarg.h>
- # define Va_start(a,b) va_start(a,b)
- #else
- # include <varargs.h>
- # define Va_start(a,b) va_start(a)
- #endif
-
- /* inttypes.h includes stdarg.h, so it conflicts with varargs.h
- *
- * varargs.h does not work in 64 bit IRIXes...
- */
-
- /* inttypes.h can't be used if it conflicts with sys/types.h
- *
- * unfortunately sys/types.h does not define uint16_t (in IRIX 5.3),
- * but including of inttypes.h causes compilation error!
- */
-
- #if defined(I_INTTYPES) && ANSI_C && !defined(NO_INTTYPES)
-
- #include <inttypes.h>
-
- /* For support 64 bit IRIXes also */
- #define int32 int32_t
- #define uint16 uint16_t
- #define uint8 uint8_t
-
- #else /* I_INTTYPES */
-
- #ifdef __alpha
-
- #define int32 int
- #define uint16 unsigned short /* is this correct? */
- #define uint8 unsigned char /* is this correct? */
- #else
-
- #define int32 long
- #define uint16 unsigned short
- #define uint8 unsigned char
- #endif
-
- #endif /* I_INTTYPES */
-
- struct alias_disk_rec {
- int32 status; /* DELETED, TAGGED, VISIBLE, ... */
- int32 alias; /* alias name */
- int32 last_name; /* actual personal (last) name */
- int32 name; /* actual personal name (first last) */
- int32 comment; /* comment, doesn't show in headers */
- int32 address; /* non expanded address */
- int32 type; /* mask-- sys/user, person/group */
- int32 length; /* length of alias data on file */
- };
-
- struct alias_rec {
- int status; /* DELETED, TAGGED, VISIBLE, ... */
- char *alias; /* alias name */
- char *last_name; /* actual personal (last) name */
- char *name; /* actual personal name (first last) */
- char *comment; /* comment, doesn't show in headers */
- char *address; /* non expanded address */
- int type; /* mask-- sys/user, person/group */
- long length; /* length of alias data on file */
- };
-
- struct addr_rec {
- char address[NLEN]; /* machine!user you get mail as */
- struct addr_rec *next; /* linked list pointer to next */
- };
-
-
- #ifdef SHORTNAMES /* map long names to shorter ones */
- # include <shortname.h>
- #endif
-
- /** Let's make sure that we're not going to have any annoying problems with
- int pointer sizes versus char pointer sizes by guaranteeing that every-
- thing vital is predefined... (Thanks go to Detlev Droege for this one)
- **/
-
- #ifdef __convex__
- /*
- * Nice work Convex people! Thanks a million!
- * When STDC is used feof() is defined as a true library routine
- * in the header files and moreover the library routine also leaks
- * royally. (It returns always 1!!) Consequently this macro is
- * unavoidable.)
- */
- # ifndef feof
- # define feof(p) ((p)->_flag&_IOEOF)
- # endif
- #endif
-
- /* Defined in unistd.h ... */
- #ifdef F_OK
- #define EXECUTE_ACCESS X_OK
- #define WRITE_ACCESS W_OK
- #define READ_ACCESS R_OK
- #define ACCESS_EXISTS F_OK
- #define EDIT_ACCESS (W_OK|R_OK)
- #else
- #define EXECUTE_ACCESS 1 /* These five are */
- #define WRITE_ACCESS 2 /* for the calls */
- #define READ_ACCESS 4 /* to access() */
- #define ACCESS_EXISTS 0 /* <etc> */
- #define EDIT_ACCESS 6 /* (this is r+w access) */
- #endif
-
- #ifdef I_LOCALE
- #include <locale.h>
- #endif
-
- #ifdef I_NL_TYPES
- #include <nl_types.h>
- #else
- #include "elm_nl_types.h"
- #endif
-
- #ifdef POSIX_SIGNALS
- #define signal posix_signal
- #ifdef ANSI_C
- extern SIGHAND_TYPE (*posix_signal(int, SIGHAND_TYPE (*)(int)))(int);
- #else /* ANSI_C */
- extern SIGHAND_TYPE (*posix_signal())();
- #endif /* ANSI_C */
- #else /* POSIX_SIGNALS */
- #ifdef SIGSET
- #define signal sigset
- #ifdef _AIX
- extern SIGHAND_TYPE (*sigset(int sig, SIGHAND_TYPE (*func)(int)))(int);
- #endif
- #endif /* SIGSET */
- #endif /* POSIX_SIGNALS */
-
- #if defined(POSIX_SIGNALS) && !defined(__386BSD__)
- # define JMP_BUF sigjmp_buf
- # define SETJMP(env) sigsetjmp((env), 1)
- # define LONGJMP(env,val) siglongjmp((env), (val))
- #else
- # define JMP_BUF jmp_buf
- # define SETJMP(env) setjmp(env)
- # define LONGJMP(env,val) longjmp((env), (val))
- #endif
-
- #if defined(POSIX_SIGNALS) && defined(HASWAITPID)
- #define BACKGROUD_PROCESSES /* Only with POSIX signals */
- #endif
-
- /*
- * Some of the old BSD ctype conversion macros corrupted characters.
- * We will substitute our own versions if required.
- */
- #include <ctype.h>
- #ifdef BROKE_CTYPE
- # undef toupper
- # define toupper(c) (islower(c) ? ((c) - 'a' + 'A') : (c))
- # undef tolower
- # define tolower(c) (isupper(c) ? ((c) - 'A' + 'a') : (c))
- #endif
-
- /*
- * if the seek constants arent set in an include file
- * lets define them ourselves
- */
- #ifndef SEEK_SET
- #define SEEK_SET 0 /* Set file pointer to "offset" */
- #define SEEK_CUR 1 /* Set file pointer to current plus "offset" */
- #define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
- #endif
-
-
- /*
- * The "safe_malloc_fail_handler" vector points to a routine that is invoked
- * if one of the safe_malloc() routines fails. At startup, this will point
- * to the default handler that prints a diagnostic message and aborts. The
- * vector may be changed to install a different error handler.
- */
-
- char *ctime();
- char *error_description();
- char *expand_system();
- char *format_long();
- char *get_alias_address();
- char *get_arpa_date();
- char *get_ctime_date();
- char *get_date();
- char *get_token();
- char *getlogin();
- char *level_name();
- char *shift_lower();
- char *strip_commas();
- char *strip_parens();
- char *qstrpbrk();
- char *strfcpy();
- char *strtok();
- char *tail_of_string();
- char *tgetstr();
- char *pmalloc();
- char *header_cmp();
- char *safe_strdup();
-
- FILE *safeopen();
- FILE *safeopen_rdwr();
- FILE *open_end_update();
-
- malloc_t safe_malloc();
- malloc_t safe_realloc();
-
- long times();
- long ulimit();
-
- /*
- * Local Variables:
- * mode:c
- * c-basic-offset:4
- * buffer-file-coding-system: iso-8859-1
- * End:
- */
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/hdrs/defs_major.h
*** elm2.4.ME+.115/hdrs/defs_major.h 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/defs_major.h 2004-04-18 19:55:35.000000000 +0300
***************
*** 1,7 ****
! /* $Id: defs_major.h,v 1.5 2004/03/27 18:31:35 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: defs_major.h,v 1.5.8.2 2004/04/18 16:55:35 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 24,30 ****
#include "../config.h"
#include "sysdefs.h" /* system/configurable defines */
! # define VERSION "2.4ME+" /* Version number... */
#if defined(__STDC__) || defined(_AIX)
# define ANSI_C 1
--- 24,30 ----
#include "../config.h"
#include "sysdefs.h" /* system/configurable defines */
! # define VERSION "ME+ 2.5" /* Version number... */
#if defined(__STDC__) || defined(_AIX)
# define ANSI_C 1
***************
*** 40,45 ****
--- 40,46 ----
#define P_(x) ()
#endif
+ /* FIXME: Change MALLOCVOID to ANSI_C */
#ifdef MALLOCVOID
typedef void * malloc_t;
#else
***************
*** 73,81 ****
--- 74,84 ----
#include <sys/wait.h>
#endif
+ /* FIXME: Change I_UNISTD to ANSI_C */
#ifdef I_UNISTD
#include <unistd.h>
#else
+ char *getlogin();
unsigned sleep();
char *index(), *rindex(); /* names will be traslated by define in config.h */
char *strcpy(), *strcat(), *strncpy(); /* more in string.h in ANSI */
Index: elmME+.2.5.alpha0-cvs/hdrs/elm_defs.h
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/elm_defs.h 2004-05-15 23:11:35.000000000 +0300
***************
*** 0 ****
--- 1,620 ----
+ /* $Id: elm_defs.h,v 1.1.2.4 2004/05/15 20:11:35 hurtta Exp $ */
+
+ /******************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.1.2.4 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@posti.FMI.FI>
+ ******************************************************************************
+ * Based on Elm 2.4 hdrs/defs.h. That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1992 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Based on Elm 2.5 hdrs/elm_defs.h. That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1998 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************/
+
+ /** define file for ELM mail system. **/
+
+ #include "defs_major.h"
+
+ #include <errno.h>
+
+ #ifndef TRUE
+ #define TRUE 1
+ #define FALSE 0
+ #endif
+
+ #define KLICK 32 /* increment for alias and mssg lists */
+
+ #define SHORT 10 /* super short strings! */
+ /* FIXME: remove!! */
+
+ #define TLEN 10 /* super short (tiny) strings */
+ /* FIXME: not used yet */
+
+ #define WLEN 20 /* small words */
+ #define NLEN 48 /* name length for aliases */
+ #define STRING 128 /* reasonable string length for most.. */
+ #define LONG_STRING 512 /* even longer string for group expansion */
+ #define VERY_LONG_STRING 2560 /* huge string for group alias expansion */
+ #define MAX_LINE_LEN 5120 /* even bigger string for "filter" prog.. */
+
+ #define TILDE_ESCAPE '~' /* escape character~ */
+
+ #define alias_file ".aliases"
+ #define group_file ".groups"
+ #define system_file ".systems"
+
+ #define default_folders "Mail"
+ #define default_recvdmail "=received"
+ #define default_sentmail "=sent"
+ #define DEFAULT_TO_CHARS " TC*L"
+
+ #if 0 /* XXX not used yet */
+ #define streq(p, q) (strcmp((p), (q)) == 0)
+
+ /* use these ONLY where "d" is a constant string value */
+ #define strbegConst(s, d) (strncmp((s), (d), sizeof(d)-1) == 0)
+ #define stribegConst(s, d) (strincmp((s), (d), sizeof(d)-1) == 0)
+ #endif
+
+ #if 0 /* XXX not used yet */
+ /*
+ * The macros implement speeded up constant string comparisons.
+ * They are useful alternatives when a string is subject to
+ * multiple comparisons. The comparison target (the "d" value)
+ * *must* be a constant string, and the first character of this
+ * string *must* be upper case (or non-alphabetic).
+ *
+ * To use them, "FAST_COMP_DECLARE" must appear in variable declarations
+ * at the top of the procedure. Then "fast_comp_load" must be invoked
+ * to preload the first character of the string.
+ */
+ #define FAST_COMP_DECLARE int FAST_COMP_ch
+ #define fast_comp_load(c) FAST_COMP_ch = toupper(c)
+ #define fast_strbegConst(s, d) strbegConst(s, d)
+ #define fast_stribegConst(s, d) (FAST_COMP_ch == (d)[0] \
+ && strincmp((s), (d), sizeof(d)-1) == 0)
+ #define fast_header_cmp(s, d, result) (FAST_COMP_ch == (d)[0] \
+ && header_ncmp((s), (d), sizeof(d)-1, (result), sizeof(result)-1))
+ #endif
+
+ /*****************************************************************************
+ *
+ * System portability definitions, header inclusions, and brokeness unbotching.
+ *
+ ****************************************************************************/
+
+
+ #if 0 /* XXXX not implemented yet */
+ #ifdef HAS_SETEGID
+ #define SETGID(s) setegid(s)
+ #else
+ #define SETGID(s) setgid(s)
+ #endif
+ #endif
+
+ /* inttypes.h includes stdarg.h, so it conflicts with varargs.h
+ *
+ * varargs.h does not work in 64 bit IRIXes...
+ */
+
+ #if ANSI_C
+ # include <stdarg.h>
+ # define Va_start(a,b) va_start(a,b)
+ #else
+ # include <varargs.h>
+ # define Va_start(a,b) va_start(a)
+ #endif
+
+ /* inttypes.h can't be used if it conflicts with sys/types.h
+ *
+ * unfortunately sys/types.h does not define uint16_t (in IRIX 5.3),
+ * but including of inttypes.h causes compilation error!
+ */
+
+ #if defined(I_INTTYPES) && ANSI_C && !defined(NO_INTTYPES)
+
+ #include <inttypes.h>
+
+ /* For support 64 bit IRIXes also */
+ #define int32 int32_t
+ #define uint16 uint16_t
+ #define uint8 uint8_t
+
+ #else /* I_INTTYPES */
+
+ #ifdef __alpha
+
+ #define int32 int
+ #define uint16 unsigned short /* is this correct? */
+ #define uint8 unsigned char /* is this correct? */
+ #else
+
+ #define int32 long
+ #define uint16 unsigned short
+ #define uint8 unsigned char
+ #endif
+
+ #endif /* I_INTTYPES */
+
+ #ifdef CRAY
+ /* avoid conflict with typedef'd word */
+ #define word wrd
+ #endif /* CRAY */
+
+
+ #ifdef __convex__
+ /*
+ * Nice work Convex people! Thanks a million!
+ * When STDC is used feof() is defined as a true library routine
+ * in the header files and moreover the library routine also leaks
+ * royally. (It returns always 1!!) Consequently this macro is
+ * unavoidable.)
+ */
+ # ifndef feof
+ # define feof(p) ((p)->_flag&_IOEOF)
+ # endif
+ #endif
+
+ #if 0 /* XXX not used yet */
+ /*
+ * Ultrix's fflush returns EOF and sets error flag if the stream is read-only.
+ */
+ #if defined(ULTRIX_FFLUSH_BUG) && defined(ANSI_C)
+ # define fflush(fp) \
+ ((((fp)->_flag & (_IOREAD | _IORW)) == _IOREAD) ? 0 : fflush(fp))
+ #endif
+ #endif
+
+ #ifdef SHORTNAMES /* map long names to shorter ones */
+ # include <shortname.h>
+ #endif
+
+ #ifdef MEMCPY
+
+ # ifdef I_MEMORY
+ # include <memory.h>
+ # else /* I_MEMORY */
+ # ifndef ANSI_C /* ANSI puts these in string.h */
+ #if defined(__convexc__)
+ extern void *memcpy(), *memset();
+ #else
+ extern char *memcpy(), *memset();
+ #endif
+ extern int memcmp();
+ # endif /* ANSI_C */
+ # endif /* I_MEMORY */
+
+ #define bcopy(s1,s2,l) memcpy(s2,s1,l)
+ #define bcmp(s1,s2,l) memcmp(s1,s2,l)
+ #define bzero(s,l) memset(s,0,l)
+ #endif /* MEMCPY */
+
+ /*
+ * Some of the old BSD ctype conversion macros corrupted characters.
+ * We will substitute our own versions if required.
+ */
+ #include <ctype.h>
+ #ifdef BROKE_CTYPE
+ # undef toupper
+ # define toupper(c) (islower(c) ? ((c) - 'a' + 'A') : (c))
+ # undef tolower
+ # define tolower(c) (isupper(c) ? ((c) - 'A' + 'a') : (c))
+ #endif
+
+ /* things normally found in <unistd.h> */
+
+ #ifndef F_OK
+ # define F_OK 0
+ # define X_OK 1
+ # define W_OK 2
+ # define R_OK 4
+ #endif
+ #ifndef SEEK_SET
+ #define SEEK_SET 0 /* Set file pointer to "offset" */
+ #define SEEK_CUR 1 /* Set file pointer to current plus "offset" */
+ #define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
+ #endif
+ #ifndef STDIN_FILENO
+ # define STDIN_FILENO 0
+ # define STDOUT_FILENO 1
+ # define STDERR_FILENO 2
+ #endif
+
+ /* Elm likes to use these happy names instead */
+ #define ACCESS_EXISTS F_OK
+ #define EXECUTE_ACCESS X_OK
+ #define WRITE_ACCESS W_OK
+ #define READ_ACCESS R_OK
+ #define EDIT_ACCESS (R_OK|W_OK)
+
+ #if defined(POSIX_SIGNALS) && defined(HASWAITPID)
+ #define BACKGROUD_PROCESSES /* Only with POSIX signals */
+ #endif
+
+ /* <ulimit.h> is XPG3 ... but not POSIX nor ANSI */
+ extern long ulimit P_((int, ...));
+
+ #ifdef POSIX_SIGNALS
+ # define signal posix_signal
+ extern SIGHAND_TYPE
+ (*posix_signal P_((int, SIGHAND_TYPE (*)(int)))) P_((int));
+ #else
+ # ifdef SIGSET
+ # define signal sigset
+ # ifdef _AIX
+ extern SIGHAND_TYPE (*sigset(int sig, SIGHAND_TYPE (*func)(int)))(int);
+ # endif
+ # endif
+ #endif
+
+ #include <setjmp.h>
+
+ #if defined(POSIX_SIGNALS) && !defined(__386BSD__)
+ # define JMP_BUF sigjmp_buf
+ # define SETJMP(env) sigsetjmp((env), 1)
+ # define LONGJMP(env,val) siglongjmp((env), (val))
+ #else
+ # define JMP_BUF jmp_buf
+ # define SETJMP(env) setjmp(env)
+ # define LONGJMP(env,val) longjmp((env), (val))
+ #endif
+
+ #ifdef I_LOCALE
+ #include <locale.h>
+ #endif
+
+ #ifdef I_NL_TYPES
+ #include <nl_types.h>
+ #else
+ #include "elm_nl_types.h"
+ #endif
+
+ /* FOO - I wonder if we should be including <time.h> in this header */
+ char *ctime P_((const time_t *));
+
+
+ /*****************************************************************************
+ *
+ * data structures
+ *
+ ****************************************************************************/
+
+ /** "status" values for the header and alias record **/
+
+ #define ACTION (1<<0)
+ #define CONFIDENTIAL (1<<1)
+ #define DELETED (1<<2)
+ #define EXPIRED (1<<3)
+ #define FORM_LETTER (1<<4)
+ #define NEW (1<<5)
+ #define PRIVATE_MAIL (1<<6)
+ #define TAGGED (1<<7)
+ #define URGENT (1<<8)
+ #define VISIBLE (1<<9)
+ #define UNREAD (1<<10)
+ #define REPLIED_TO (1<<11)
+ #define MIME_MESSAGE (1<<12) /* indicates existence of MIME Header */
+ #define PRE_MIME_CONTENT (1<<13)
+ #define MIME_UNSUPPORTED (1<<14)
+ #define NOHDRENCODING (1<<15)
+ /* Don't add values bigger than 2^15 == 32768 */
+
+ #ifdef USE_PGP
+ #define PGP_MESSAGE (1<<0)
+ #define PGP_SIGNED_MESSAGE (1<<1)
+ #define PGP_PUBLIC_KEY (1<<2)
+ #endif
+
+ /** "exit_disposition" values */
+
+ #define UNSET 0
+ #define KEEP 1
+ #define STORE 2
+ #define DELETE 3
+ #define HIDE 4
+
+ /* Values for dsn flag */
+ #define DSN_FULL 1
+ #define DSN_HDRS 2
+ #define DSN_SUCCESS 4
+ #define DSN_FAILURE 8
+ #define DSN_DELAY 16
+ #define DSN_NEVER 32
+
+ /* message sorting selections */
+
+ #define REVERSE - /* for reverse sorting */
+ #define SENT_DATE 1 /* the date message was sent */
+ #define RECEIVED_DATE 2 /* the date message was received */
+ #define SENDER 3 /* the name/address of sender */
+ #define SIZE 4 /* the # of lines of the message */
+ #define SUBJECT 5 /* the subject of the message */
+ #define STATUS 6 /* the status (deleted, etc) */
+ #define MAILBOX_ORDER 7 /* the order it is in the file */
+ #define THREAD 8 /* thread order (date sent/subject */
+
+ /* alias sorting selections */
+
+ #define ALIAS_SORT 1 /* the name of the alias */
+ #define NAME_SORT 2 /* the actual name for the alias */
+ #define TEXT_SORT 3 /* the order of aliases.text */
+ #define LAST_ALIAS_SORT TEXT_SORT
+
+ /* Content-Disposition */
+ #define DISP_INLINE 0
+ #define DISP_ATTACH 1
+ #define DISP_AUTOATTACH 2
+
+ #define NO 0
+ #define YES 1
+ #define MAYBE 2 /* a definite define, eh? */
+
+ #define NO_TITE 2 /* ti/te or in flag */
+ #define NO_CHARSET 4 /* charset switch flag */
+ #define RAW_FROM_SIGNAL 8 /* From signal handler */
+
+ /* some random structs... */
+
+ #define NOTPLAIN_need_metamail 0x01
+ #define NOTPLAIN_need_mailcap 0x02
+ #define NOTPLAIN_canuse_mailcap 0x04
+ #define NOTPLAIN_is_fallback 0x08
+
+ /** and a couple for dealing with status flags... **/
+
+ #define ison(n, mask) (((n) & (mask)) != 0)
+ #define isoff(n, mask) (((n) & (mask)) == 0)
+ #define setit(n, mask) (n) |= (mask)
+ #define clearit(n, mask) (n) &= ~(mask)
+
+ #define MIME_magic 0xFD00
+ typedef struct mimeinfo {
+ unsigned short magic; /* MIME_magic */
+ unsigned int disposition : 2; /* DISP_INLINE or DISP_ATTACH or
+ DISP_AUTOATTACH
+ */
+
+ unsigned int mime_flags : 4; /* NOTPLAIN_need_metamail 0x01
+ NOTPLAIN_need_mailcap 0x02
+ NOTPLAIN_canuse_mailcap 0x04
+ NOTPLAIN_is_fallback 0x08
+ */
+
+ unsigned int unlink : 1; /* used to mark that the file should be
+ * unlinked after sending the attachment
+ */
+
+ struct media_type * TYPE;
+ char *type_opts;
+ char *disposition_opts;
+ struct string *description;
+
+ int encoding; /* Notice: ENCODING_ILLEGAL == -1, ENCODING_* in mime.h */
+ long length;
+ long begin_offset; /* the beginning of the attachment (includes headers) */
+ long offset; /* where the real data starts */
+
+ struct mime_parser_data * parser_data;
+
+ struct mime_selected_handler * handler_data;
+
+ /* These next fields are only used when sending multipart messages. */
+ char * pathname;
+ struct string * dispname;
+
+ } mime_t;
+
+ struct header_rec {
+ int lines; /** # of lines in the message **/
+ int status; /** Urgent, Deleted, Expired? **/
+ int index_number_X; /** relative loc in file... **/
+ int encrypted; /** whether msg has encryption **/
+ int exit_disposition; /** whether to keep, store, delete **/
+ int status_chgd; /** whether became read or old, etc. **/
+ long content_length; /** content_length in bytes from message header **/
+ long offset; /** offset in bytes of message **/
+ time_t received_time; /** when elm received here **/
+ char env_from[STRING]; /* sender from "From " */
+
+ struct addr_item *from; /** who sent the message? **/
+ struct addr_item *to; /** who it was sent to **/
+ struct addr_item *cc;
+ char messageid[STRING]; /** the Message-ID: value **/
+ char time_zone[12]; /** incl. tz **/
+ time_t time_sent; /** gmt when sent for sorting **/
+ time_t thread_time; /** time sent of the "thread" (for sorting) **/
+ char time_menu[SHORT]; /** just the month..day for menu **/
+ time_t tz_offset; /** offset to gmt of time sent **/
+ struct string *subject; /** The subject of the mail **/
+
+ struct string *list_phrase; /* phrase from List-ID */
+ char *list_id; /* id from LIST-ID */
+
+ char mailx_status[WLEN];/** mailx status flags (RO...) **/
+ mime_t mime_rec; /** MIME information for this message **/
+
+
+ /* == charset_t, but it is not yet declared ... */
+ struct charcode_info * header_charset; /* charset for headers ... */
+ struct charcode_info * override_charset; /* For O)verride command */
+
+ struct mbx_hdr_info * mbx_info;
+
+ struct partial_vector * partial_vector;
+ int partial_len;
+
+ #ifdef USE_PGP
+ unsigned int pgp : 3;
+ #endif
+ unsigned int binary :1; /* Binary message -- headers are terminated
+ * with \r\n
+ */
+ unsigned int have_from :1; /* Body have unescaped "From " */
+ unsigned int body_parsed :1; /* Whatever body of message is read */
+ unsigned int mime_parsed :1; /* Whatever mime structure is parsed */
+ };
+
+ /** some defines for the "type" field of the alias record **/
+
+ #define SYSTEM 1 /* bit masks, of course */
+ #define USER 2
+ #define PERSON 4
+ #define GROUP 8
+ #define DUPLICATE 16 /* system aliases only */
+
+ struct alias_disk_rec {
+ int32 status; /* DELETED, TAGGED, VISIBLE, ... */
+ int32 alias; /* alias name */
+ int32 last_name; /* actual personal (last) name */
+ int32 name; /* actual personal name (first last) */
+ int32 comment; /* comment, doesn't show in headers */
+ int32 address; /* non expanded address */
+ int32 type; /* mask-- sys/user, person/group */
+ int32 length; /* length of alias data on file */
+ };
+
+ struct alias_rec {
+ int status; /* DELETED, TAGGED, VISIBLE, ... */
+ char *alias; /* alias name */
+ char *last_name; /* actual personal (last) name */
+ char *name; /* actual personal name (first last) */
+ char *comment; /* comment, doesn't show in headers */
+ char *address; /* non expanded address */
+ int type; /* mask-- sys/user, person/group */
+ long length; /* length of alias data on file */
+ };
+
+ /*****************************************************************************
+ *
+ * Data common to many programs in the Elm package.
+ *
+ ****************************************************************************/
+
+ #ifdef INTERN
+ # define INIT(X) =X
+ # define EXTERN
+
+ static char ident[] = WHAT_STRING;
+ static char copyright[] = "\
+ @(#) (C) Copyright 1986,1987, Dave Taylor\n\
+ @(#) (C) Copyright 1988-1995, The Usenet Community Trust\
+ @(#) (C) Copyright 1996-2004, Kari Hurtta\n";
+
+ #else
+ # define INIT(X)
+ # define EXTERN extern
+ #endif
+
+
+ /* some stuff for our own malloc call - pmalloc */
+
+ #define PMALLOC_THRESHOLD 256 /* if greater, then just use malloc */
+ #define PMALLOC_BUFFER_SIZE 2048 /* internal [memory] buffer size... */
+
+ #define ok_alias_char(c) (isalnum(c) || c == '-' || c == '_' || c == '.')
+ #define ok_rc_char(c) (isalnum(c) || c == '-' || c == '_')
+ #define whitespace(c) (c == ' ' || c == '\t')
+ #define first_word(s,w) (strncmp(s,w, strlen(w)) == 0)
+ #define first_word_nc(s,w) (strincmp(s,w, strlen(w)) == 0)
+
+ #define no_ret(s) { register int xyz; /* varname is for lint */ \
+ for (xyz=strlen(s)-1; xyz >= 0 && \
+ (s[xyz] == '\r' || s[xyz] == '\n'); ) \
+ s[xyz--] = '\0'; \
+ }
+
+ #define equal(s,w) (strcmp(s,w) == 0)
+
+ /* environment variable with name of folder state dump file */
+ #define FOLDER_STATE_ENV "ELMSTATE"
+
+ #define FOLDER_STATUS_READ 0
+ #define FOLDER_STATUS_OLD 1
+ #define FOLDER_STATUS_NEW 2
+
+ /* They are used to support Grab_the_file in save() */
+ #define FLOCKING_OK 0
+ #define FLOCKING_RETRY 1
+ #define FLOCKING_FAIL -1
+
+ #define OUTGOING 0 /* defines for lock file */
+ #define INCOMING 1 /* creation..see lock() */
+
+ #define FORMFEED '\f' /* form feed (^L) char */
+
+ #define NONULL(x) (x ? x : "")
+
+ /* ----------------------------------------------------------------- */
+
+ #ifdef USE_FCNTL_LOCKING
+ # define SYSCALL_LOCKING
+ #else
+ # ifdef USE_FLOCK_LOCKING
+ # define SYSCALL_LOCKING
+ # endif
+ #endif
+
+
+ #ifdef I_TIME
+ # include <time.h>
+ #endif
+ #ifdef I_SYSTIME
+ # include <sys/time.h>
+ #endif
+
+ #ifndef _POSIX_SOURCE
+ extern struct tm *localtime();
+ extern time_t time();
+ #endif
+
+
+ #if defined(SELECT) || defined(I_SYS_SELECT)
+ #define POLL_METHOD 1
+ #if defined(I_SYS_SELECT)
+ #include <sys/select.h>
+ #endif
+ #else
+ #if defined(POLL)
+ #include <poll.h>
+ #define POLL_METHOD 2
+ #else
+ #undef POLL_METHOD
+ #endif
+ #endif
+
+ #ifdef I_SOCKET
+ #include <sys/socket.h>
+ #endif
+ #ifdef I_NETDB
+ #include <netdb.h>
+ #if defined(SOCK_STREAM) && defined (POLL_METHOD)
+ #define REMOTE_MBX
+ #endif
+ #endif
+
+
+ /*****************************************************************************
+ *
+ * declarations for routines in lib/libutil.a
+ *
+ ****************************************************************************/
+
+ #include "elmlib.h"
+
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * buffer-file-coding-system: iso-8859-1
+ * End:
+ */
Index: elmME+.2.5.alpha0-cvs/hdrs/elm_globals.h
*** /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/elm_globals.h 2004-05-13 19:26:18.000000000 +0300
***************
*** 0 ****
--- 1,289 ----
+ /* $Id: elm_globals.h,v 1.1.2.2 2004/05/13 16:26:18 hurtta Exp $ */
+
+ /*****************************************************************************
+ * The Elm (ME+) Mail System - $Revision: 1.1.2.2 $ $State: Exp $
+ *
+ * Author: Kari Hurtta <hurtt...@posti.FMI.FI>
+ ******************************************************************************
+ * Based on Elm 2.4 hdrs/defs.h and hdrs/headers.h.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1992 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Based on Elm 2.5 hdrs/elm_globals.h. That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************/
+
+ /*
+ * All source files in the Elm package should include this right
+ * after "elm_defs.h". This header should not be used by the
+ * library or utility files.
+ */
+
+ #define BACKSPACE '\b' /* backspace character */
+ #define TAB '\t' /* tab character */
+ #define RETURN '\r' /* carriage return char */
+ #define LINE_FEED '\n' /* line feed character */
+ #define ESCAPE '\033' /* the escape */
+
+ #define COMMA ',' /* comma character */
+ /* XXX remove */
+
+ #define SPACE ' ' /* space character */
+ /* XXX remove */
+
+ #define COLON ':' /* the colon .. */
+ /* XXX remove */
+
+ #define NO_OP_COMMAND '\0' /* no-op for timeouts */
+ /* XXX ? ? ? ? */
+
+ #define STANDARD_INPUT 0 /* file number of stdin */
+ /* XXX remove */
+
+ #define FORM 3 /* <nevermind> */
+ #define PREFORMATTED 4 /* forwarded form... */
+
+ #define SAME_PAGE 1 /* redraw current only */
+ #define NEW_PAGE 2 /* redraw message list */
+ #define ILLEGAL_PAGE 0 /* error in page list, punt */
+
+ #define PAD 0 /* for printing name of */
+ /* XXX remove */
+ #define FULL 1 /* the sort we're using */
+ /* XXX remove */
+
+
+ /* special cookies that may appear in the user's message text */
+
+ #define DONT_SAVE "[no save]"
+ #define DONT_SAVE2 "[nosave]"
+
+ /* options to the copy_message() procedure */
+ #define CM_REMOVE_HEADER (1<<0) /* skip header of message */
+ #define CM_UPDATE_STATUS (1<<2) /* Update Status: Header */
+ #define CM_REMAIL (1<<4) /* Add Sender: and Orig-To: headers */
+ #define CM_DECODE (1<<5) /* Decode MIME, PGP and elm */
+ #define CM_FILT_HDR (1<<6) /* Filter headers (for forwarding) */
+ #define CM_DISPLAYING (1<<7) /* Pass to MIME code */
+ #define CM_REMOVE_ENVELOPE (1<<8) /* Remove envelope */
+ #define CM_CRLF (1<<9) /* Use CRLF */
+ #define CM_LF (1<<10) /* Force CRLF -> LF */
+ #define CM_FORWARDING (1<<11) /* text is a message that we are */
+ /* forwarding */
+ #define CM_ATTRIBUTION (1<<12) /* add attribution strings that */
+ /* format this as an included mssg */
+
+
+ #if 0 /* NOT USED -- */
+ #define CM_REMOTE (1<<1) /* append remote from hostname to */
+ /* first line */
+ #define CM_MMDF_HEAD (1<<3) /* strip mmdf message seperator */
+
+ #define CM_FORWARDING (1<<XX) /* text is a message that we are */
+ /* forwarding */
+ #define CM_ATTRIBUTION (1<<XX) /* add attribution strings that */
+ /* format this as an included mssg */
+
+ #endif
+
+ #if 0 /* XXX not used yet */
+ /* options to the leave() procedure */
+ #define LEAVE_NORMAL 000 /* normal program termination */
+ #define LEAVE_ERROR 001 /* exit due to program error */
+ #define LEAVE_KEEP_EDITTMP 010 /* ...preserve composition file */
+ #define LEAVE_KEEP_TEMPFOLDER 020 /* ...preserve temp folder */
+ #define LEAVE_KEEP_LOCK 040 /* ...preserve folder locks */
+ #define LEAVE_EMERGENCY 071 /* emergency exit */
+ #define LEAVE_EXIT_STATUS(mode) ((mode) & 07)
+
+ #endif
+
+
+ #define UNDELETE 0 /* purely for ^U function... */
+ /* XXX remove */
+
+ #if 0 /* XXX not used yet */
+ /* options to the meta_match() procedure */
+ #define MATCH_TAG 0 /* tag matching entries */
+ #define MATCH_DELETE 1 /* delete matching entries */
+ #define MATCH_UNDELETE 2 /* undelete matching entries */
+ #endif
+
+ /****************************************************************************/
+
+ /* map character (e.g. 'A') to its control equivalent (e.g. '^A') */
+ #define ctrl(c) (((c) + '@') & 0x7f)
+
+ #if 0 /* XXX -- not used */
+ /* calculate next tabstop from position (col) */
+ /* leftmost col is zero, assumes 8-position tabstops */
+ #define tabstop(col) (((col) & ~07) + 010)
+ #endif
+
+ /* FIXME: .... remove these ... */
+ #define MAIN_HELP 0
+ #define OPTIONS_HELP 1
+ #define ALIAS_HELP 2
+ #define PAGER_HELP 3
+
+ #if 0 /* softkeys not used */
+ #define MAIN 0
+ #define ALIAS 1
+ #define YESNO 2
+ #define CHANGE 3
+ #define READ 4
+ #endif
+
+
+ #define onoff(n) (n == 0 ? "OFF" : "ON")
+
+ #define ClearLine(n) MoveCursor(n,0); CleartoEOLN()
+ #define plural(n) n == 1 ? "" : "s"
+
+ /** some months... **/
+
+ #define JANUARY 0 /* months of the year */
+ #define FEBRUARY 1
+ #define MARCH 2
+ #define APRIL 3
+ #define MAY 4
+ #define JUNE 5
+ #define JULY 6
+ #define AUGUST 7
+ #define SEPTEMBER 8
+ #define OCTOBER 9
+ #define NOVEMBER 10
+ #define DECEMBER 11
+
+
+ /** some defines for the 'userlevel' variable... **/
+
+ #define RANK_AMATEUR 0
+ #define AMATEUR 1
+ #define OKAY_AT_IT 2
+ #define GOOD_AT_IT 3
+ #define EXPERT 4
+ #define SUPER_AT_IT 5
+
+ /* Options for mail() procedure */
+ #define MAIL_COPY_MSG (1<<0)
+ #define MAIL_EDIT_MSG (1<<1)
+ #define MAIL_ISFORM (1<<2)
+ #define MAIL_REPLYING (1<<3)
+ #define MAIL_FORWARDING (1<<4)
+ #define MAIL_HAVE_ATTACHMENTS (1<<5) /* Flag for verify transmission */
+ #define MAIL_HAVE_PGP_ENCODED (1<<6) /* Falg for verify transmission */
+
+
+ #if 0 /* XXXX not used */
+
+ /*
+ * "opmode" global - current operation mode settings.
+ */
+
+ #define OPMODE_READ 010 /* running in folder read mode */
+ #define OPMODE_READ_NONEMPTY 011 /* ...only read if non-empty */
+ #define OPMODE_SEND 020 /* running in send-only mode */
+ #define OPMODE_SEND_BATCH 021 /* ...performing batch send */
+
+ #define OPMODE_IS_READMODE(op) (((op) & OPMODE_READ) != 0)
+ #define OPMODE_IS_SENDMODE(op) (((op) & OPMODE_SEND) != 0)
+ #define OPMODE_IS_INTERACTIVE(op) ((op) != OPMODE_SEND_BATCH)
+ /*
+ * "opmode" global - current operation mode settings.
+ */
+
+ #define OPMODE_READ 010 /* running in folder read mode */
+ #define OPMODE_READ_NONEMPTY 011 /* ...only read if non-empty */
+ #define OPMODE_SEND 020 /* running in send-only mode */
+ #define OPMODE_SEND_BATCH 021 /* ...performing batch send */
+
+ #define OPMODE_IS_READMODE(op) (((op) & OPMODE_READ) != 0)
+ #define OPMODE_IS_SENDMODE(op) (((op) & OPMODE_SEND) != 0)
+ #define OPMODE_IS_INTERACTIVE(op) ((op) != OPMODE_SEND_BATCH)
+
+
+ #endif
+
+
+
+ /******** global variables accessable by all pieces of the program *******/
+
+ EXTERN int check_size; /* don't start mailer if no mail */
+ EXTERN int inalias; /* TRUE if in the alias menu */
+ EXTERN int last_current INIT(-1); /* previous current message */
+ EXTERN int last_header_page INIT(-1); /* last header page */
+ EXTERN int headers_per_page; /* number of headers/page */
+ EXTERN int original_umask; /* original umask, for restore before subshell */
+ EXTERN int sendmail_verbose; /* Allow extended debugging on sendmail */
+ EXTERN int nucurr; /* change list or just the current pointer **/
+ EXTERN char cur_editfile[SLEN]; /* editor buffer */
+
+ EXTERN char batch_subject[SLEN]; /* subject buffer for batchmail */
+ EXTERN char included_file[SLEN]; /* name of file to place in edit buf */
+
+ EXTERN char version_buff[NLEN]; /* version buffer */
+
+ EXTERN char *def_ans_yes; /* default yes answer - single char, lc*/
+ EXTERN char *def_ans_no; /* default no answer - single char, lc */
+ EXTERN char *nls_deleted; /* [deleted] */
+ EXTERN char *nls_form; /* Form */
+ EXTERN char *nls_message; /* Message */
+ EXTERN char *nls_to; /* To */
+ EXTERN char *nls_from; /* From */
+ EXTERN char *nls_page; /* Page */
+ EXTERN char *change_word; /* change */
+ EXTERN char *save_word; /* save */
+ EXTERN char *copy_word; /* copy */
+ EXTERN char *cap_save_word; /* Save */
+ EXTERN char *cap_copy_word; /* Copy */
+ EXTERN char *saved_word; /* saved */
+ EXTERN char *copied_word; /* copied */
+
+ EXTERN int write_elmrc; /* flag: write elmrc in starting */
+
+ EXTERN int mail_only; /* flag: send mail then leave? */
+ EXTERN int check_only; /* flag: check aliases and leave? */
+ EXTERN int batch_only; /* flag: send without prompting? */
+
+ EXTERN long size_of_pathfd; /** size of pathfile, 0 if none **/
+
+ EXTERN FILE *pathfd; /* path alias file */
+ EXTERN FILE *domainfd; /* domains file */
+
+ EXTERN int system_data INIT(-1); /* fileno of system data file */
+ EXTERN int user_data INIT(-1); /* fileno of user data file */
+
+ EXTERN JMP_BUF GetPromptBuf; /* setjmp buffer */
+ EXTERN int InGetPrompt; /* set if in GetPrompt() in read() */
+
+ #ifdef USE_PGP
+ EXTERN int pgp_status;
+ EXTERN int pgp_keeppassfor; /* how long to keep it before expiring */
+ #endif
+
+ EXTERN int me_retcode;
+
+ EXTERN short mime_count; /* A counter used so that each call to
+ * mime_generate_boundary() returns a unique value.
+ */
+
+ /*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:4
+ * buffer-file-coding-system: iso-8859-1
+ * End:
+ */
+
+
+
+
Index: elmME+.2.5.alpha0-cvs/hdrs/elm.h
*** elm2.4.ME+.115/hdrs/elm.h 2004-03-30 19:38:43.000000000 +0300
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,129 ****
- /* $Id: elm.h,v 1.22 2004/03/27 18:31:35 hurtta Exp $ */
-
- /******************************************************************************
- * The Elm (ME+) Mail System - $Revision: 1.22 $ $State: Exp $
- *
- * Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
- * (was hurtt...@ozone.FMI.FI)
- ******************************************************************************
- * The Elm Mail System
- *
- * Copyright (c) 1988-1992 USENET Community Trust
- * Copyright (c) 1986,1987 Dave Taylor
- *****************************************************************************/
-
- /** Main header file for ELM mail system. **/
-
-
- #include <stdio.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <signal.h>
-
- #include "defs.h"
- #include <setjmp.h>
- /*
- #include "melib.h"
- */
-
- #include "elmlib.h"
-
- /******** static character string containing the version number *******/
-
- static char ident[] = { WHAT_STRING };
-
- /******** and another string for the copyright notice ********/
-
- static char copyright[] = {
- "@(#) (C) Copyright 1986,1987, Dave Taylor\n\
- @(#) (C) Copyright 1988-1992, The Usenet Community Trust\n\
- @(#) (C) Copyright 1996-2004, Kari Hurtta\n" };
-
- /******** global variables accessable by all pieces of the program *******/
-
-
- int check_size = 0; /* don't start mailer if no mail */
-
-
- int inalias = 0; /* TRUE if in the alias menu */
- int last_current = -1; /* previous current message */
- int last_header_page = -1; /* last header page */
- int headers_per_page = 0; /* number of headers/page */
- int original_umask = 0; /* original umask, for restore before subshell */
- int sendmail_verbose = 0; /* Extended mail debugging */
-
- int nucurr = 0; /* change list or just the current pointer... */
- char cur_editfile[SLEN] = {0}; /* editor buffer */
-
- char batch_subject[SLEN] = {0}; /* subject buffer for batchmail */
- char included_file[SLEN] = {0}; /* prepared file to include in the edit buf */
-
- char version_buff[NLEN] = {0}; /* version buffer */
-
- char *def_ans_yes; /* default yes answer - single char, lc */
- char *def_ans_no; /* default no answer - single char, lc */
- char *nls_deleted; /* [deleted] */
- char *nls_form; /* Form */
- char *nls_message; /* Message */
- char *nls_to; /* To */
- char *nls_from; /* From */
- char *nls_page; /* Page */
- char *change_word; /* change */
- char *save_word; /* save */
- char *copy_word; /* copy */
- char *cap_save_word; /* Save */
- char *cap_copy_word; /* Copy */
- char *saved_word; /* saved */
- char *copied_word; /* copied */
-
- char backspace, /* the current backspace char */
-
- kill_line, /* the current kill-line char */
- word_erase, /* the current word-erase char */
- interrupt_char, /* the current interrupt char */
- reprint_char, /* the current reprint-line char */
- eof_char; /* the current end-of-file char */
-
- int has_highlighting = FALSE; /* highlighting available? */
-
-
- int write_elmrc = 0; /* flag: write elmrc in starting */
-
-
-
-
-
-
- int mail_only = 0; /* flag: send mail then leave? */
- int check_only = 0; /* flag: check aliases then leave? */
- int batch_only = 0; /* flag: send without prompting? */
-
- long size_of_pathfd; /** size of pathfile, 0 if none **/
-
- FILE *pathfd; /* path alias file */
- FILE *domainfd; /* domain file */
-
- int system_data = -1; /* fileno of system data file */
- int user_data = -1; /* fileno of user data file */
-
- JMP_BUF GetPromptBuf; /* setjmp buffer */
- int InGetPrompt; /* set if in GetPrompt() in read() */
-
- #ifdef USE_PGP
-
- int pgp_status=0; /* var to keep track of pgp internals */
-
- #endif
- int me_retcode;
-
- short mime_count = 0; /* A counter used so that each call to
- * mime_generate_boundary() returns a unique value.
- */
-
- /*
- * Local Variables:
- * mode:c
- * c-basic-offset:4
- * buffer-file-coding-system: iso-8859-1
- * End:
- */
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/hdrs/elmlib.h
*** elm2.4.ME+.115/hdrs/elmlib.h 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/elmlib.h 2004-05-15 23:11:36.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmlib.h,v 1.207 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.207 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmlib.h,v 1.207.4.14 2004/05/15 20:11:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.207.4.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 725,736 ****
From: -header
*/
extern char alternative_editor[SLEN];/* the 'other' editor */
! extern struct addr_rec *alternative_addresses; /* how else do we get mail? */
extern int always_del; /* flag: always delete marked msgs? */
extern int always_keep; /* flag: always keep unread msgs? */
extern int always_store; /* flag: always store read mail? */
extern int arrow_cursor; /* flag: use "->" regardless? */
- extern int question_me; /* flag: ask questions as we leave? */
extern int prompt_for_cc; /* flag: prompt user for 'cc' value? */
#ifdef USE_PGP
extern int pgp_askpgpsig; /* Should pgp ask userid to sign messages with? */
--- 725,741 ----
From: -header
*/
extern char alternative_editor[SLEN];/* the 'other' editor */
! extern PATH alternative_addresses; /* how else do we get mail? */
extern int always_del; /* flag: always delete marked msgs? */
extern int always_keep; /* flag: always keep unread msgs? */
extern int always_store; /* flag: always store read mail? */
+
+ extern int ask_delete; /* confirm delete on resync? */
+ extern int ask_keep; /* ask to keep unread msgs? */
+ extern int ask_reply_copy; /* ask to copy mssg into reply? */
+ extern int ask_store; /* ask to store read mail? */
+
extern int arrow_cursor; /* flag: use "->" regardless? */
extern int prompt_for_cc; /* flag: prompt user for 'cc' value? */
#ifdef USE_PGP
extern int pgp_askpgpsig; /* Should pgp ask userid to sign messages with? */
***************
*** 742,753 ****
PGP_NUM };
extern enum pgp_version send_pgp_version; /* preferred pgp version*/
#endif
! extern char attribution[SLEN]; /* attribution string for replies */
extern int auto_attachment; /* 0 = none,
1 = application,
2 = non-text
*/
! extern int auto_copy; /* flag: auto copy source into reply? */
extern int auto_iso_8859; /* flag: Should ISO-8859-X charsets defined
on demand ? */
#ifdef BACKGROUD_PROCESSES
--- 747,759 ----
PGP_NUM };
extern enum pgp_version send_pgp_version; /* preferred pgp version*/
#endif
! extern char attribution[SLEN]; /* attribution string for replies */
! extern char fwdattribution[SLEN]; /* attribution string for forwarded mssgs */
extern int auto_attachment; /* 0 = none,
1 = application,
2 = non-text
*/
! extern int reply_copy; /* flag: copy message into reply */
extern int auto_iso_8859; /* flag: Should ISO-8859-X charsets defined
on demand ? */
#ifdef BACKGROUD_PROCESSES
***************
*** 757,762 ****
--- 763,769 ----
#endif
extern int allow_charset_switching; /* flag: allow changing charset of terminal
if terminal supports it */
+ extern int allow_setuid;
/* extern int bounceback; */ /* flag: bounce copy off remote? */
extern int browser_wildcards; /* flag: do wildcard match? */
extern int builtin_lines; /* int use builtin pager? */
***************
*** 776,781 ****
--- 783,790 ----
extern int confirm_create; /* flag: confirm create new folder? */
extern int confirm_files; /* flag: confirm files for append? */
extern int confirm_folders; /* flag: confirm folders for create? */
+ extern int confirm_tag_save; /* flag: confirm saving of tagged messages */
+ extern int edit_flush; /* flag: flush input after extern edit? */
extern int convert_comment; /* flag: convert comment to fullname ? */
extern int convert_utf_header; /* flag: convert utf-8 mime encoded words to utf-7 when sending? */
extern int auto_copy_sent; /* flag: automatically copy sent mail? */
***************
*** 806,812 ****
extern int menu_display_host; /* flag: Display host on mailbox menu* */
extern int keep_empty_files; /* flag: keep empty files?? */
#ifdef USE_PGP
! extern int pgp_keeppass; /* should Elm keep the passphrase? */
#endif
extern int local_fast_lookup; /* flag: directory listing not needed
--- 815,821 ----
extern int menu_display_host; /* flag: Display host on mailbox menu* */
extern int keep_empty_files; /* flag: keep empty files?? */
#ifdef USE_PGP
! extern int pgp_keeppassfor; /* should Elm keep the passphrase? */
#endif
extern int local_fast_lookup; /* flag: directory listing not needed
***************
*** 837,842 ****
--- 846,852 ----
extern PATH metamail_mailcaps; /* mailcaps for metamail */
extern PATH internal_mailcaps; /* mailcaps for internal handler */
extern PATH internal_mailcap_t_programs; /* Execute program without asking */
+ extern PATH incomingfolders; /* treate as mailbox */
extern int internal_mailcap_t_prompt; /* ... really? */
extern int metoo; /* flag: copy me on mail to alias? */
extern int mimeforward;
***************
*** 869,874 ****
--- 879,885 ----
extern char prefixchars[SLEN]; /* prefix char(s) for msgs */
extern char printout[SLEN]; /* how to print messages */
extern char raw_printout[SLEN]; /* unexpanded how to print messages */
+ extern char printhdrs[SLEN]; /* headers to select and weed on printing */
extern int prompt_after_pager; /* flag: prompt after pager exits */
extern int prompt_after_metamail; /* flag: prompt after metamail exits */
extern int quote_forward; /* flag: fwd'd msgs quoted like replies */
***************
*** 882,887 ****
--- 893,899 ----
extern int req_mime_hdrencoding;
extern int resolve_mode; /* flag: resolve before moving mode? */
extern int save_by_name; /* flag: save mail by login name? */
+ extern int save_by_alias; /* save mail by alias of login name? */
extern char sent_mail[SLEN]; /* name of file to save copies to */
extern int set_window_title; /* flag: set (xterm?) window title and
icon name */
***************
*** 892,897 ****
--- 904,911 ----
extern int pgp_noarmor; /* Should Elm display text before PGP armor */
#endif
extern int showto;
+ extern int show_mlists; /* show mailing list info? */
+ extern int show_reply; /* flag: show 'r' for replied mail */
extern int show_header_errors; /* flag: should some header reported? */
extern int sig_dashes; /* flag: put dashes above signature? */
extern int sleepmsg; /* time to sleep for messages being overwritten on screen */
***************
*** 900,905 ****
--- 914,920 ----
extern long elm_timeout; /* seconds for main level timeout */
extern int sort_thread_max_time; /* Number of days which can considered
be same thread */
+ extern char to_chars[SLEN]; /* chars to indicate who mail is to */
extern char temp_dir[SLEN]; /* name of temp directory */
extern char raw_temp_dir[SLEN]; /* unexpanded name of temp directory */
#ifdef USE_PGP
***************
*** 912,919 ****
extern char v_editor[SLEN]; /* "~v" editor... */
extern int elm_filter; /* flag: weed out header lines? */
extern int send_mime_plain; /* Send text/plain US-ASCII as MIME? */
! extern char *weedlist[MAX_IN_WEEDLIST];
! extern int weedcount; /* how many headers to check? */
#ifdef REMOTE_MBX
extern char raw_imap_charset[SLEN]; /* IMAP foldername charset */
extern int imap_fast_lookup; /* flag: skip directory listing */
--- 927,934 ----
extern char v_editor[SLEN]; /* "~v" editor... */
extern int elm_filter; /* flag: weed out header lines? */
extern int send_mime_plain; /* Send text/plain US-ASCII as MIME? */
! extern PATH weedlist;
!
#ifdef REMOTE_MBX
extern char raw_imap_charset[SLEN]; /* IMAP foldername charset */
extern int imap_fast_lookup; /* flag: skip directory listing */
***************
*** 1255,1261 ****
extern void unfold_header P_((char *buffer, int *len,
struct header_rec *current_header));
-
extern char *show_message_status P_((struct header_rec *hdr));
extern int copy_body_folder P_((struct folder_info *folder,
--- 1270,1275 ----
***************
*** 1378,1383 ****
--- 1392,1402 ----
/* lib/hdrdecode.c */
+ #define HDR_TEXT 1
+ #define HDR_STRUCTURED 2
+ #define HDR_PHRASE 4
+ #define HDR_COMMENT 8 /* inside of comment -- for rfc1522_encode_text */
+
extern char * blstrpbrk P_((char *string, CONST char *set));
extern struct string * hdr_to_string P_((int class,CONST char *buffer,
charset_t defcharset, int demime));
***************
*** 2030,2035 ****
--- 2049,2059 ----
#define ENCODING_EXPERIMENTAL 6
#define ENCODING_UUENCODED 7
+ #define HAVE_8BIT 1
+ #define HAVE_CTRL 4
+ #define HAVE_BINARY 8
+
+
struct id_phrase {
char * id;
struct string * text;
***************
*** 2248,2253 ****
--- 2272,2282 ----
extern void free_string_tokenized P_((struct string_token **ptr));
+ /* pmalloc.c */
+
+ extern char *pmalloc P_((int size));
+
+
/*
* Local Variables:
* mode:c
Index: elmME+.2.5.alpha0-cvs/hdrs/elmutil.h
*** elm2.4.ME+.115/hdrs/elmutil.h 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/elmutil.h 2004-04-18 19:55:36.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmutil.h,v 1.13 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: elmutil.h,v 1.13.8.1 2004/04/18 16:55:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 14,40 ****
/** Main header file for ELM utilities. **/
-
- #include <stdio.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <signal.h>
-
- #include "defs.h"
-
#include "patchlevel.h"
! #include "elmlib.h"
!
! /******** static character string containing the version number *******/
!
! static char ident[] = { WHAT_STRING };
- /******** and another string for the copyright notice ********/
- static char copyright[] = {
- "@(#) (C) Copyright 1986,1987, Dave Taylor\n@(#)\n\
- @(#) (C) Copyright 1988-1992, The Usenet Community Trust\n\
- @(#) (C) Copyright 1996-2003, Kari Hurtta\n" };
/******** global variables accessable by all pieces of the program *******/
--- 14,24 ----
/** Main header file for ELM utilities. **/
#include "patchlevel.h"
! #define INTERN
! #include "elm_defs.h"
/******** global variables accessable by all pieces of the program *******/
Index: elmME+.2.5.alpha0-cvs/hdrs/headers.h
*** elm2.4.ME+.115/hdrs/headers.h 2004-03-30 19:38:43.000000000 +0300
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,172 ****
- /* $Id: headers.h,v 1.24 2004/03/27 18:31:36 hurtta Exp $ */
-
- /******************************************************************************
- * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
- *
- * Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
- * (was hurtt...@ozone.FMI.FI)
- ******************************************************************************
- * The Elm Mail System
- *
- * Copyright (c) 1988-1992 USENET Community Trust
- * Copyright (c) 1986,1987 Dave Taylor
- *****************************************************************************/
-
- /** This is the header file for ELM mail system. **/
-
- #include "defs.h"
- #include <setjmp.h>
-
- #include "elmlib.h"
-
- #include "mime.h"
-
- /******** global variables accessable by all pieces of the program *******/
-
-
- extern int check_size; /* don't start mailer if no mail */
-
-
- extern int inalias; /* TRUE if in the alias menu */
- extern int last_current; /* previous current message */
- extern int last_header_page; /* last header page */
- extern int headers_per_page; /* number of headers/page */
- extern int original_umask; /* original umask, for restore before subshell */
- extern int sendmail_verbose; /* Allow extended debugging on sendmail */
- extern int nucurr; /** change list or just the current pointer **/
-
-
-
- extern char cur_editfile[SLEN]; /* editor buffer */
- extern char defaultfile[SLEN]; /* name of default folder */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- extern char batch_subject[SLEN];/* subject buffer for batchmail */
- extern char included_file[SLEN];/* name of file to place in edit buf */
-
-
-
-
- extern char version_buff[NLEN]; /* version buffer */
-
-
-
-
- extern char *def_ans_yes; /* default yes answer - single char, lc */
- extern char *def_ans_no; /* default no answer - single char, lc */
- extern char *nls_deleted; /* [deleted] */
- extern char *nls_form; /* Form */
- extern char *nls_message; /* Message */
- extern char *nls_to; /* To */
- extern char *nls_from; /* From */
- extern char *nls_page; /* Page */
- extern char *change_word; /* change */
- extern char *save_word; /* save */
- extern char *copy_word; /* copy */
- extern char *cap_save_word; /* Save */
- extern char *cap_copy_word; /* Copy */
- extern char *saved_word; /* saved */
- extern char *copied_word; /* copied */
-
- extern char backspace, /* the current backspace char */
-
- kill_line, /* the current kill_line char */
- word_erase, /* the current word-erase char */
- interrupt_char, /* the current interrupt char */
- reprint_char, /* the current reprint-line char */
- eof_char; /* the current end-of-file char */
-
- extern int has_highlighting; /* highlighting available? */
-
-
-
-
-
-
-
-
-
-
- extern int write_elmrc; /* flag: write elmrc in starting */
-
-
-
-
-
-
-
-
-
-
-
- extern int mail_only; /* flag: send mail then leave? */
- extern int check_only; /* flag: check aliases and leave? */
- extern int batch_only; /* flag: send without prompting? */
-
-
- extern long size_of_pathfd; /** size of pathfile, 0 if none **/
-
-
- extern FILE *pathfd; /* path alias file */
- extern FILE *domainfd; /* domains file */
-
-
-
-
-
- extern int system_data; /* fileno of system data file */
- extern int user_data; /* fileno of user data file */
-
-
-
-
-
-
-
-
- #ifdef USE_PGP
-
- extern int pgp_status;
-
- extern int pgp_keeppassfor; /* how long to keep it before expiring */
-
-
-
- #endif
-
- extern int me_retcode;
- extern char *mime_types[];
-
- /*
- * Local Variables:
- * mode:c
- * c-basic-offset:4
- * buffer-file-coding-system: iso-8859-1
- * End:
- */
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/hdrs/mbx_imp.h
*** elm2.4.ME+.115/hdrs/mbx_imp.h 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/mbx_imp.h 2004-04-25 17:52:37.000000000 +0300
***************
*** 1,7 ****
! /* $Id: mbx_imp.h,v 1.66 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.66 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: mbx_imp.h,v 1.66.4.1 2004/04/25 14:52:37 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.66.4.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 749,758 ****
#define STFLAG_is_submission 0x0400
#define STFLAG_is_smtp 0x0800
! extern const struct service_type * IMAP_SERVICE;
! extern const struct service_type * POP_SERVICE;
! extern const struct service_type * SUBMISSION_SERVICE;
! extern const struct service_type * SMTP_SERVICE;
extern struct service_entry {
int flags;
--- 749,758 ----
#define STFLAG_is_submission 0x0400
#define STFLAG_is_smtp 0x0800
! extern CONST struct service_type * IMAP_SERVICE;
! extern CONST struct service_type * POP_SERVICE;
! extern CONST struct service_type * SUBMISSION_SERVICE;
! extern CONST struct service_type * SMTP_SERVICE;
extern struct service_entry {
int flags;
Index: elmME+.2.5.alpha0-cvs/hdrs/me.h
*** elm2.4.ME+.115/hdrs/me.h 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/me.h 2004-05-16 12:54:13.000000000 +0300
***************
*** 1,7 ****
! /* $Id: me.h,v 1.87 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.87 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: me.h,v 1.87.8.8 2004/05/16 09:54:13 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.87.8.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 119,124 ****
--- 119,135 ----
int *redraw,
struct menu_context *page));
+ #define PROMPT_center 1
+ #define PROMPT_yesno 2
+ #define PROMPT_redraw_mark 4
+ #define PROMTP_ctrlL 8
+
+ extern int prompt_letter P_((int line, char *letters, int def,
+ int flags,
+ struct menu_context *page,
+ const char * format, const char *msg, ...));
+
+
#define OE_APPEND_CURRENT (1<<0)
#define OE_PASSWD (1<<1)
#define OE_REDRAW_MARK (1<<2)
***************
*** 264,269 ****
--- 275,284 ----
extern void install_aliases P_((struct AliasView *aview,
int *header_page));
+ extern char *address_to_alias P_((char *address,
+ struct AliasView *aview));
+
+
/* a_edit.c */
int edit_aliases_text P_((struct AliasView *aview, int *header_page,
***************
*** 367,373 ****
/* strings.c */
-
extern char **argv_from_to P_((char *to));
extern void split_word P_((
char *buffer, char *first, char *rest));
--- 382,387 ----
***************
*** 377,382 ****
--- 391,399 ----
extern char *argv_zero P_((const char *string));
+ extern char *get_token P_((char *source, char *keys,
+ int depth));
+
/* string2.c */
***************
*** 507,512 ****
--- 524,530 ----
struct run_state; /* Needed for prototype */
#endif
+ extern struct string * gen_From_buffer P_((const struct header_rec * current_header));
extern int mail P_((struct header_rec *current_header,
int options, int form,
***************
*** 592,598 ****
mime_send_t *mime_info,
FILE * conv_file,
struct MailboxView *mailbox,
! struct menu_context *page));
extern int append_copy_to_file P_((struct mailing_headers * headers,
struct folder_browser *cf,
--- 610,617 ----
mime_send_t *mime_info,
FILE * conv_file,
struct MailboxView *mailbox,
! struct menu_context *page,
! struct AliasView *aview));
extern int append_copy_to_file P_((struct mailing_headers * headers,
struct folder_browser *cf,
***************
*** 737,742 ****
--- 756,764 ----
extern int options P_((struct MailboxView *mailbox,
struct AliasView *aview));
+ extern char * level_name P_((int n));
+
+
/* hdrconfig.c */
extern void show_presend_headers P_((struct mailing_headers *headers,
***************
*** 1112,1120 ****
--- 1134,1178 ----
extern int InitScreen P_((struct menu_context **page));
extern void ScreenSize P_((int *lines, int *columns));
+ extern int has_highlighting; /* highlighting available? */
+
/* -1 == no changes */
extern void set_root_menu(int lines, int columns);
+ #define READCH_MASK 0x0FFF /* Mask flags off */
+ #define READCH_CURSOR 0x1000 /* Return cursor keys */
+ #define READCH_NOCURSOR 0x2000 /* Disable cursor keys */
+ #define READCH_term_char 0x4000 /* Return term chars */
+ #define READCH_resize 0x8000 /* Check resize .... */
+
+ #define REDRAW_MARK 257 /* Artificial "char" for redrawing */
+ #define UP_MARK 258 /* Artificial UP key */
+ #define LEFT_MARK 259 /* Artificial LEFT key */
+ #define RIGHT_MARK 260 /* Artificial RIGHT key */
+ #define DOWN_MARK 261 /* Artificial DOWN key */
+ #define PAGEUP_MARK 262 /* Artificial PAGE UP key */
+ #define PAGEDOWN_MARK 263 /* Artificial PAGE DOWN key */
+ #define HELP_MARK 264 /* Artificial HELP key */
+ #define HOME_MARK 265 /* Artificial HOME key */
+ #define FIND_MARK 266 /* Artificial FIND key */
+ #define SPACE_MARK 267 /* used by builtinplus */
+ #define RESIZE_MARK 268 /* Used ny menu_context */
+
+ #define TERMCH_backspace 300 /* term_char: backspace */
+ #define TERMCH_kill_line 301
+ #define TERMCH_word_erase 302
+ #define TERMCH_interrupt_char 303
+ #define TERMCH_reprint_char 304
+ #define TERMCH_eof_char 305
+
+ extern char backspace, /* the current backspace char */
+
+ kill_line, /* the current kill_line char */
+ word_erase, /* the current word-erase char */
+ interrupt_char, /* the current interrupt char */
+ reprint_char, /* the current reprint-line char */
+ eof_char; /* the current end-of-file char */
+
/* ------------------------------------------------------- */
extern struct menu_context * default_context;
***************
*** 1147,1152 ****
--- 1205,1211 ----
extern struct menu_context * Raw P_((int state));
extern struct charset_state * ReadCh2 P_((int flags));
extern int ReadCh P_((int flags));
+ extern void FlushInput P_((void));
extern void GetXYLocation P_((int *x,int *y));
extern int ClearScreen P_((void));
extern int MoveCursor P_((int row, int col));
***************
*** 1249,1254 ****
--- 1308,1318 ----
/* menu_common/ */
+ /** some defines to aid in the limiting of alias displays **/
+
+ #define BY_NAME 64
+ #define BY_ALIAS 128
+
struct menu_common {
unsigned short magic;
struct mcommon_type * mtype;
***************
*** 1271,1277 ****
/* bit field:
ACTION, CONFIDENTIAL, DELETED, EXPIRED, FORM_LETTER, NEW,
! PRIVATE_MAIL, TAGGED, URGENT, VISIBLE, UNREAD, REPLIED,
MIME_MESSAGE, PRE_MIME_CONTENT, MIME_UNSUPPORTED, NOHDRENCODING
*/
extern int mcommon_setf_status P_((struct menu_common *m, int idx, int stat));
--- 1335,1341 ----
/* bit field:
ACTION, CONFIDENTIAL, DELETED, EXPIRED, FORM_LETTER, NEW,
! PRIVATE_MAIL, TAGGED, URGENT, VISIBLE, UNREAD, REPLIED_TO,
MIME_MESSAGE, PRE_MIME_CONTENT, MIME_UNSUPPORTED, NOHDRENCODING
*/
extern int mcommon_setf_status P_((struct menu_common *m, int idx, int stat));
Index: elmME+.2.5.alpha0-cvs/hdrs/melib.h
*** elm2.4.ME+.115/hdrs/melib.h 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/melib.h 2004-04-18 19:55:36.000000000 +0300
***************
*** 1,7 ****
! /* $Id: melib.h,v 1.43 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.43 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: melib.h,v 1.43.8.1 2004/04/18 16:55:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.43.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 345,350 ****
--- 345,360 ----
struct header_rec *mss));
extern int partial_selector P_((mime_t *p, struct header_rec * hdr));
+ /* --- --- */
+
+ #define DISPOSITION(x) (x == DISP_INLINE ? "inline" : "attachment")
+ #define ENCODING(x) (x >= 0 ? mime_encode_names[x] : "<ILLEGAL>")
+ extern char *mime_encode_names[]; /* defined in mime.c */
+
+ /* special cookies that may appear in the user's message text */
+ #define START_ENCODE "[encode]"
+ #define END_ENCODE "[clear]"
+
/* --------------- */
/* mime_decode.c uses this ... */
Index: elmME+.2.5.alpha0-cvs/hdrs/mime.h
*** elm2.4.ME+.115/hdrs/mime.h 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/mime.h 2004-04-18 19:55:36.000000000 +0300
***************
*** 1,5 ****
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,5 ----
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 13,35 ****
#define MIME_HEADER "MIME-Version: 1.0"
#define MIME_INCLUDE "[include"
- /* These are for figuring out what the encoding on outgoing messages should
- * be.
- */
- #define HAVE_8BIT 1
- #define HAVE_CTRL 4
- #define HAVE_BINARY 8
-
- /* Content-Disposition */
- #define DISP_INLINE 0
- #define DISP_ATTACH 1
- #define DISP_AUTOATTACH 2
-
- #define DISPOSITION(x) (x == DISP_INLINE ? "inline" : "attachment")
- #define NONULL(x) (x ? x : "")
- #define ENCODING(x) (x >= 0 ? mime_encode_names[x] : "<ILLEGAL>")
- extern char *mime_encode_names[]; /* defined in mime.c */
-
struct mime_send_part {
/* Information for text parts */
int encoding_part ;
--- 13,18 ----
Index: elmME+.2.5.alpha0-cvs/hdrs/rc_imp.h
*** elm2.4.ME+.115/hdrs/rc_imp.h 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/rc_imp.h 2004-05-01 23:07:50.000000000 +0300
***************
*** 1,7 ****
! /* $Id: rc_imp.h,v 1.10 2004/03/28 13:37:38 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: rc_imp.h,v 1.10.8.2 2004/05/01 20:07:50 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 36,42 ****
rc_get_value * get_value;
} rc_DT_SYN, rc_DT_STR, rc_DT_NUM, rc_DT_BOL,
! rc_DT_CHR, rc_DT_WEE, rc_DT_ALT, rc_DT_SRT,
rc_DT_MLT, rc_DT_ASR, rc_DT_PRM, rc_DT_FUNC,
rc_DT_LONG, rc_DT_PATH, rc_DT_OBS;
--- 36,42 ----
rc_get_value * get_value;
} rc_DT_SYN, rc_DT_STR, rc_DT_NUM, rc_DT_BOL,
! rc_DT_CHR, rc_DT_SRT,
rc_DT_MLT, rc_DT_ASR, rc_DT_PRM, rc_DT_FUNC,
rc_DT_LONG, rc_DT_PATH, rc_DT_OBS;
***************
*** 54,60 ****
#define DT_NUM &rc_DT_NUM /* number */
#define DT_BOL &rc_DT_BOL /* ON/OFF (boolean) */
#define DT_WEE &rc_DT_WEE /* weed list */
- #define DT_ALT &rc_DT_ALT /* alternate addresses list */
#define DT_SRT &rc_DT_SRT /* sort-by code */
#define DT_MLT &rc_DT_MLT /* multiple destinations for data */
#define DT_ASR &rc_DT_ASR /* sort-by code */
--- 54,59 ----
***************
*** 73,80 ****
extern int is_it_on P_((char *word));
extern void weedout P_((char *string));
extern char * mode_to_str P_((int mode));
- extern void alternatives P_((char *));
-
extern int expand_dt_path P_((struct dt_path_info *ptr, char *fieldname,
char *val, int recursive));
--- 72,77 ----
Index: elmME+.2.5.alpha0-cvs/hdrs/save_opts.h
*** elm2.4.ME+.115/hdrs/save_opts.h 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/save_opts.h 2004-05-15 23:11:36.000000000 +0300
***************
*** 1,15 ****
! /* @(#)$Id: save_opts.h,v 1.82 2004/04/04 16:42:27 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.82 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/*
--- 1,25 ----
! /* @(#)$Id: save_opts.h,v 1.82.2.14 2004/05/15 20:11:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.82.2.14 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 hdrs/save_opts.h. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from hdrs/save_opts.h.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/*
***************
*** 48,54 ****
#define PATH_sep_comma 64
#define PATH_sep_colon 128
#define PATH_quote_single 256
!
struct dt_path_info {
int flags;
--- 58,64 ----
#define PATH_sep_comma 64
#define PATH_sep_colon 128
#define PATH_quote_single 256
! #define PATH_convert_underline 512
struct dt_path_info {
int flags;
***************
*** 84,93 ****
long *l_num;
int *bol;
char *chr;
- char **weed;
- struct addr_rec **alts;
int *sort;
struct dt_path_info *path;
#ifdef USE_PGP
enum pgp_version *pgpver;
#endif
--- 94,102 ----
long *l_num;
int *bol;
char *chr;
int *sort;
struct dt_path_info *path;
+ char **mlt;
#ifdef USE_PGP
enum pgp_version *pgpver;
#endif
***************
*** 116,125 ****
#define ZZZ_DT_SRT(A) DT_SRT,0, { sort: A }, null_option_func
#define ZZZ_DT_STR(A) DT_STR,0, { str: A }, null_option_func
#define ZZZ_DT_STR_(x,A) DT_STR,x, { str: A }, null_option_func
- #define ZZZ_DT_ALT(A) DT_ALT,0, { alts: A }, null_option_func
#define ZZZ_DT_BOL(A) DT_BOL,0, { bol: A }, null_option_func
#define ZZZ_DT_BOL_(x,A) DT_BOL,x, { bol: A }, null_option_func
! #define ZZZ_DT_MLT(A) DT_MLT,0, { weed: A }, null_option_func
#define ZZZ_DT_SYN(A) DT_SYN,0, { str: A }, null_option_func
#define ZZZ_DT_NUM(A) DT_NUM,0, { num: A }, null_option_func
#define ZZZ_DT_NUM_(x,A) DT_NUM,x, { num: A }, null_option_func
--- 125,133 ----
#define ZZZ_DT_SRT(A) DT_SRT,0, { sort: A }, null_option_func
#define ZZZ_DT_STR(A) DT_STR,0, { str: A }, null_option_func
#define ZZZ_DT_STR_(x,A) DT_STR,x, { str: A }, null_option_func
#define ZZZ_DT_BOL(A) DT_BOL,0, { bol: A }, null_option_func
#define ZZZ_DT_BOL_(x,A) DT_BOL,x, { bol: A }, null_option_func
! #define ZZZ_DT_MLT(A) DT_MLT,0, { mlt: A }, null_option_func
#define ZZZ_DT_SYN(A) DT_SYN,0, { str: A }, null_option_func
#define ZZZ_DT_NUM(A) DT_NUM,0, { num: A }, null_option_func
#define ZZZ_DT_NUM_(x,A) DT_NUM,x, { num: A }, null_option_func
***************
*** 131,137 ****
#define ZZZ_DT_FUNC_(x,A) DT_FUNC,x, { str: NULL }, A
#define ZZZ_DT_CHR(A) &rc_DT_CHR,0, { chr: A }, null_option_func
#define ZZZ_DT_PRM(A) DT_PRM,0, { num: A }, null_option_func
- #define ZZZ_DT_WEE(A) DT_WEE,0, { weed: A }, null_option_func
#define ZZZ_DT_PATH(A) &rc_DT_PATH,0, { path: A }, null_option_func
#define ZZZ_DT_OBS0 &rc_DT_OBS,0, { str: NULL }, null_option_func
#define ZZZ_DT_SHARED(A) &rc_DT_SHARED,0, { shared: A }, null_option_func
--- 139,144 ----
***************
*** 158,164 ****
#define ZZZ_DT_SRT(A) DT_SRT, 0,(char *)A, null_option_func
#define ZZZ_DT_STR(A) DT_STR, 0,A, null_option_func
#define ZZZ_DT_STR_(x,A) DT_STR,x,A, null_option_func
- #define ZZZ_DT_ALT(A) DT_ALT, 0,(char *)A, null_option_func
#define ZZZ_DT_BOL(A) DT_BOL, 0,(char *)A, null_option_func
#define ZZZ_DT_BOL_(x,A) DT_BOL,x,(char *)A, null_option_func
#define ZZZ_DT_MLT(A) DT_MLT,0,(char *)A, null_option_func
--- 165,170 ----
***************
*** 173,179 ****
#define ZZZ_DT_FUNC_(x,A) DT_FUNC,x,NULL, A
#define ZZZ_DT_CHR(A) &rc_DT_CHR,0,(char *)A, null_option_func
#define ZZZ_DT_PRM(A) DT_PRM,0,(char *)A, null_option_func
- #define ZZZ_DT_WEE(A) DT_WEE,0,(char *)A, null_option_func
#define ZZZ_DT_PATH(A) &rc_DT_PATH,0, (char *)A, null_option_func
#define ZZZ_DT_OBS0 &rc_DT_OBS,0, NULL , null_option_func
#define ZZZ_DT_SHARED(A) &rc_DT_SHARED,0, (char *)A, null_option_func
--- 179,184 ----
***************
*** 195,201 ****
of the old parameter names was dropped.
*/
static char *SIGS[]= {"remotesignature","localsignature",NULL};
! static char *ALWAYS[]= {"alwayskeep", "!alwaysstore",NULL};
static char *MAILCAPS[] = { "internal-mailcaps", "metamail-mailcaps", NULL};
static char *PROMPTAFTER[] = { "prompt-after-metamail",
--- 200,209 ----
of the old parameter names was dropped.
*/
static char *SIGS[]= {"remotesignature","localsignature",NULL};
! static char *ALWAYSLEAVE[]= {"alwayskeep", "!alwaysstore",NULL};
!
! static char *ASK[] ={"askdelete","askkeep","askstore", NULL};
! static char *AUTOCOPY[] ={"!askreplycopy","replycopy",NULL};
static char *MAILCAPS[] = { "internal-mailcaps", "metamail-mailcaps", NULL};
static char *PROMPTAFTER[] = { "prompt-after-metamail",
***************
*** 247,265 ****
{"aliassortby", -1L,ZZZ_DT_ASR(&alias_sortby), 0, NULL},
{"allow-charset-switching", -1L,ZZZ_DT_BOL(&allow_charset_switching), 0,
NULL},
{"alteditor", -1L,ZZZ_DT_STR(alternative_editor),
sizeof alternative_editor, NULL},
! {"alternatives", -1L,ZZZ_DT_ALT(&alternative_addresses), 0, NULL},
{"alwaysdelete", -1L,ZZZ_DT_BOL(&always_del), 0, NULL},
{"alwayskeep", -1L,ZZZ_DT_BOL(&always_keep), 0, NULL},
! {"alwaysleave", -1L,ZZZ_DT_MLT(ALWAYS), 0, NULL},
{"alwaysstore", -1L,ZZZ_DT_BOL(&always_store), 0, NULL},
{"arrow", -1L,ZZZ_DT_BOL_(FL_OR,&arrow_cursor), 0, NULL},
! {"ask", -1L,ZZZ_DT_BOL(&question_me), 0, NULL},
{"askcc", -1L,ZZZ_DT_BOL(&prompt_for_cc), 0, NULL},
#ifdef USE_PGP
{"askpgpsig", -1L,ZZZ_DT_BOL(&pgp_askpgpsig), 0, NULL},
#endif
{"attachment-dir", -1L,ZZZ_DT_STR(raw_attachment_dir),
sizeof raw_attachment_dir, NULL},
{"attribution", -1L,ZZZ_DT_STR(attribution),
--- 255,279 ----
{"aliassortby", -1L,ZZZ_DT_ASR(&alias_sortby), 0, NULL},
{"allow-charset-switching", -1L,ZZZ_DT_BOL(&allow_charset_switching), 0,
NULL},
+ {"allow-setuid", -1L,ZZZ_DT_BOL_(FL_SYS,&allow_setuid), 0, NULL },
+
{"alteditor", -1L,ZZZ_DT_STR(alternative_editor),
sizeof alternative_editor, NULL},
! {"alternatives", -1L,ZZZ_DT_PATH(&alternative_addresses), 0, NULL},
{"alwaysdelete", -1L,ZZZ_DT_BOL(&always_del), 0, NULL},
{"alwayskeep", -1L,ZZZ_DT_BOL(&always_keep), 0, NULL},
! {"alwaysleave", -1L,ZZZ_DT_MLT(ALWAYSLEAVE), 0, NULL},
{"alwaysstore", -1L,ZZZ_DT_BOL(&always_store), 0, NULL},
{"arrow", -1L,ZZZ_DT_BOL_(FL_OR,&arrow_cursor), 0, NULL},
! {"ask", -1L,ZZZ_DT_MLT(ASK), 0, NULL},
{"askcc", -1L,ZZZ_DT_BOL(&prompt_for_cc), 0, NULL},
+ {"askdelete", -1L,ZZZ_DT_BOL(&ask_delete), 0, NULL },
+ {"askkeep", -1L,ZZZ_DT_BOL(&ask_keep), 0, NULL },
#ifdef USE_PGP
{"askpgpsig", -1L,ZZZ_DT_BOL(&pgp_askpgpsig), 0, NULL},
#endif
+ {"askreplycopy", -1L,ZZZ_DT_BOL(&ask_reply_copy), 0, NULL },
+ {"askstore", -1L,ZZZ_DT_BOL(&ask_store), 0, NULL },
{"attachment-dir", -1L,ZZZ_DT_STR(raw_attachment_dir),
sizeof raw_attachment_dir, NULL},
{"attribution", -1L,ZZZ_DT_STR(attribution),
***************
*** 268,274 ****
sizeof auto_attachment, &AUTO_ATTACH_VALUE},
{"auto-cc", -1L,ZZZ_DT_SYN("copy"), 0, NULL},
{"auto-iso-8859", -1L,ZZZ_DT_BOL(&auto_iso_8859), 0, NULL},
! {"autocopy", -1L,ZZZ_DT_BOL(&auto_copy), 0, NULL},
#ifdef BACKGROUD_PROCESSES
{ "background-wait-time",-1L,ZZZ_DT_NUM(&background_wait_time), 0, NULL },
#endif
--- 282,288 ----
sizeof auto_attachment, &AUTO_ATTACH_VALUE},
{"auto-cc", -1L,ZZZ_DT_SYN("copy"), 0, NULL},
{"auto-iso-8859", -1L,ZZZ_DT_BOL(&auto_iso_8859), 0, NULL},
! {"autocopy", -1L,ZZZ_DT_MLT(AUTOCOPY), 0, NULL},
#ifdef BACKGROUD_PROCESSES
{ "background-wait-time",-1L,ZZZ_DT_NUM(&background_wait_time), 0, NULL },
#endif
***************
*** 292,297 ****
--- 306,312 ----
{"confirmcreate", -1L,ZZZ_DT_BOL(&confirm_create), 0, NULL},
{"confirmfiles", -1L,ZZZ_DT_BOL(&confirm_files), 0, NULL},
{"confirmfolders", -1L,ZZZ_DT_BOL(&confirm_folders), 0, NULL},
+ {"confirmtagsave", -1L,ZZZ_DT_BOL(&confirm_tag_save), 0, NULL},
{"convert-comment-to-fullname",-1L,ZZZ_DT_BOL(&convert_comment), 0, NULL},
{"convert-utf-header",-1L,ZZZ_DT_BOL(&convert_utf_header), 0, NULL},
{"copy", -1L,ZZZ_DT_BOL(&auto_copy_sent), 0, NULL},
***************
*** 306,311 ****
--- 321,327 ----
sizeof raw_display_charset, NULL},
{"dsn-success", -1L,ZZZ_DT_BOL(&DSN_success), 0, NULL },
{"easyeditor", -1L,ZZZ_DT_STR(e_editor), sizeof e_editor, NULL},
+ {"editflush", -1L,ZZZ_DT_BOL(&edit_flush), 0, NULL },
{"editor", -1L,ZZZ_DT_STR(raw_editor), sizeof raw_editor, NULL},
{"env-from-source", -1L,ZZZ_DT_NUM(&env_from_source),
sizeof env_from_source, &ENV_FROM_SOURCE},
***************
*** 319,324 ****
--- 335,341 ----
{"fragment-handling", -1L,ZZZ_DT_NUM(&fragment_handling), 0, &FRAGMENTH },
{"fullname", -1L,ZZZ_DT_STR(full_username),
sizeof full_username, NULL},
+ {"fwdattribution", -1L,ZZZ_DT_STR(fwdattribution), sizeof fwdattribution, NULL },
#ifdef USE_PGP
{"gpg", -1L,ZZZ_DT_STR(raw_gpg_path),
sizeof raw_gpg_path, NULL},
***************
*** 340,352 ****
{"imap-fast-lookup", -1L,ZZZ_DT_BOL(&imap_fast_lookup), 0, NULL},
{"imap-max-download-size", -1L, ZZZ_DT_NUM(&imap_max_dl_size), 0, NULL},
{"imap-naming-convention",-1L,ZZZ_DT_BOL(&IMAP_name_convention), 0, NULL},
! {"imap-show-error", -1L,ZZZ_DT_BOL(&IMAP_show_error), 0, NULL},
! {"imap-show-greeting", -1L,ZZZ_DT_BOL(&IMAP_show_greeting), 0, NULL},
! {"imap-show-warning", -1L,ZZZ_DT_BOL(&IMAP_show_warning), 0, NULL},
{"imap-use-examine", -1L,ZZZ_DT_BOL(&IMAP_use_examine), 0, NULL},
#endif
{"incoming-mailbox", -1L,ZZZ_DT_STR(raw_defaultfile),
sizeof raw_defaultfile, NULL },
{"internal-mailcap-prompt-trusted", -1L,
ZZZ_DT_BOL(&internal_mailcap_t_prompt), 0, NULL },
{"internal-mailcap-trusted-programs",
--- 357,370 ----
{"imap-fast-lookup", -1L,ZZZ_DT_BOL(&imap_fast_lookup), 0, NULL},
{"imap-max-download-size", -1L, ZZZ_DT_NUM(&imap_max_dl_size), 0, NULL},
{"imap-naming-convention",-1L,ZZZ_DT_BOL(&IMAP_name_convention), 0, NULL},
! {"imap-show-error", -1L,ZZZ_DT_BOL(&IMAP_show_error), 0, NULL},
! {"imap-show-greeting", -1L,ZZZ_DT_BOL(&IMAP_show_greeting), 0, NULL},
! {"imap-show-warning", -1L,ZZZ_DT_BOL(&IMAP_show_warning), 0, NULL},
{"imap-use-examine", -1L,ZZZ_DT_BOL(&IMAP_use_examine), 0, NULL},
#endif
{"incoming-mailbox", -1L,ZZZ_DT_STR(raw_defaultfile),
sizeof raw_defaultfile, NULL },
+ {"incomingfolders", -1L,ZZZ_DT_PATH(&incomingfolders), 0, NULL},
{"internal-mailcap-prompt-trusted", -1L,
ZZZ_DT_BOL(&internal_mailcap_t_prompt), 0, NULL },
{"internal-mailcap-trusted-programs",
***************
*** 432,437 ****
--- 450,457 ----
{"prefix", -1L,ZZZ_DT_STR_(FL_NOSPC,prefixchars),
sizeof prefixchars, NULL},
{"print", -1L,ZZZ_DT_STR(raw_printout), sizeof raw_printout, NULL},
+ {"printhdrs", -1L,ZZZ_DT_STR(printhdrs),
+ sizeof printhdrs, NULL },
{"printmail", -1L,ZZZ_DT_SYN("print"), 0, NULL},
{"prompt-after-metamail",-1L,ZZZ_DT_BOL(&prompt_after_metamail), 0, NULL},
{"prompt-after-pager", -1L,ZZZ_DT_BOL(&prompt_after_pager), 0, NULL},
***************
*** 444,454 ****
--- 464,476 ----
sizeof raw_recvdmail, NULL},
{"remotesignature", -1L,ZZZ_DT_STR(raw_remote_signature),
sizeof raw_remote_signature, NULL},
+ {"replycopy", -1L,ZZZ_DT_BOL(&reply_copy), 0, NULL},
{"require-mime-version-for-body-encoding",
-1L,ZZZ_DT_BOL(&req_mime_bodyencoding), 0, NULL},
{"require-mime-version-for-hdr-encoding",
-1L,ZZZ_DT_BOL(&req_mime_hdrencoding), 0, NULL},
{"resolve", -1L,ZZZ_DT_BOL(&resolve_mode), 0, NULL},
+ {"savebyalias", -1L,ZZZ_DT_BOL(&save_by_alias), 0, NULL },
{"savebyname", -1L,ZZZ_DT_SYN("savename"), 0, NULL},
{"savemail", -1L,ZZZ_DT_SYN("sentmail"), 0, NULL},
{"savename", -1L,ZZZ_DT_BOL(&save_by_name), 0, NULL},
***************
*** 461,469 ****
--- 483,493 ----
sizeof set_window_title, NULL },
{"shell", -1L,ZZZ_DT_STR(raw_shell), sizeof raw_shell, NULL},
{"show-header-errors", -1L,ZZZ_DT_BOL(&show_header_errors), 0, NULL},
+ {"showmlists", -1L,ZZZ_DT_BOL(&show_mlists), 0, NULL },
#ifdef USE_PGP
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha0.patch.gz
and elm-ME+2.5.alpha0.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha0.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha0.tar.gz >
via WWW.
Before applying patch catenate part 1 - 5 first.
This patch is agaist Elm 2.4ME+ PL115 (25) --------- [ part 3/5 ] ---------
{"showpgppreamble", -1L,ZZZ_DT_BOL(&pgp_noarmor), 0, NULL},
#endif
+ {"showreply", -1L,ZZZ_DT_BOL(&show_reply), 0, NULL},
{"showto", -1L,ZZZ_DT_BOL(&showto), 0, NULL},
{"sigdashes", -1L,ZZZ_DT_BOL(&sig_dashes), 0, NULL},
{"signature", -1L,ZZZ_DT_MLT(SIGS), 0, NULL},
***************
*** 480,485 ****
--- 504,511 ----
{"titles", -1L,ZZZ_DT_BOL(&title_messages), 0, NULL},
{"tmpdir", -1L,ZZZ_DT_STR(raw_temp_dir),
sizeof raw_temp_dir, NULL},
+ {"tochars", -1L,ZZZ_DT_STR_(FL_NOSPC,to_chars),
+ sizeof to_chars, NULL},
{"unidata", -1L,ZZZ_DT_STR(raw_unidata_path),
sizeof raw_unidata_path, NULL },
#ifdef USE_DLOPEN
***************
*** 496,502 ****
{"utf7-encode-optional", -1L,ZZZ_DT_BOL(&utf7_encode_optional), 0, NULL},
{"visualeditor", -1L,ZZZ_DT_STR(v_editor), sizeof v_editor, NULL},
{"weed", -1L,ZZZ_DT_BOL(&elm_filter), 0, NULL},
! {"weedout", -1L,ZZZ_DT_WEE(weedlist), 0, NULL},
};
int NUMBER_OF_SAVEABLE_OPTIONS=(sizeof(save_info_data)/sizeof(ZZZ_SAVE_TYPE));
save_info_recs *save_info = (save_info_recs *) save_info_data;
--- 522,528 ----
{"utf7-encode-optional", -1L,ZZZ_DT_BOL(&utf7_encode_optional), 0, NULL},
{"visualeditor", -1L,ZZZ_DT_STR(v_editor), sizeof v_editor, NULL},
{"weed", -1L,ZZZ_DT_BOL(&elm_filter), 0, NULL},
! {"weedout", -1L,ZZZ_DT_PATH(&weedlist), 0, NULL},
};
int NUMBER_OF_SAVEABLE_OPTIONS=(sizeof(save_info_data)/sizeof(ZZZ_SAVE_TYPE));
save_info_recs *save_info = (save_info_recs *) save_info_data;
Index: elmME+.2.5.alpha0-cvs/hdrs/s_elm.h
*** elm2.4.ME+.115/hdrs/s_elm.h 2004-03-16 21:17:43.000000000 +0200
--- elmME+.2.5.alpha0-cvs/hdrs/s_elm.h 2004-05-16 08:52:18.000000000 +0300
***************
*** 476,484 ****
#define ElmBadLineElmrc 0x230
#define ElmBatchNoticeFoldersDir 0x231
#define ElmNoticeFoldersDir 0x232
- #define ElmTooManyWeedHeaders 0x233
- #define ElmTooManyWeedPmalloc 0x234
- #define ElmNoMemDefaultWeed 0x235
#define ElmCannotInitErrorExpanding 0x236
#define ElmCouldntMakeTempFileName 0x237
#define ElmCouldntOpenForWriting 0x238
--- 476,481 ----
***************
*** 1097,1099 ****
--- 1094,1103 ----
#define ElmCharsetBadOverride 0x865
#define ElmObsoleteInElmrc 0x866
#define ElmPgpRcvSure 0x867
+ #define ElmFailedLeaveChange 0x868
+ #define ElmInstalledSetuid 0x869
+ #define ElmCopyMessageIntoReplyYN 0x86a
+ #define ElmSavecmdSaveMarked 0x86b
+ #define ElmMlistOff 0x86c
+ #define ElmMlistOn 0x86d
+ #define ElmHelpToggleMailingList 0x86e
Index: elmME+.2.5.alpha0-cvs/hdrs/sysdefs.SH
*** elm2.4.ME+.115/hdrs/sysdefs.SH 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/hdrs/sysdefs.SH 2004-04-18 19:55:36.000000000 +0300
***************
*** 22,30 ****
echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
! /* $Id: sysdefs.SH,v 1.23 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 22,30 ----
echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
! /* $Id: sysdefs.SH,v 1.23.4.1 2004/04/18 16:55:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23.4.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 123,132 ****
#define MSG_SEPARATOR "\001\001\001\001\n" /* mmdf message seperator */
- #ifdef CRAY
- /* avoid conflict with typedef'd word */
- #define word wrd
- #endif /* CRAY */
#ifndef STRSTR
char *strstr();
--- 123,128 ----
Index: elmME+.2.5.alpha0-cvs/Instruct
*** elm2.4.ME+.115/Instruct 2002-01-26 13:14:44.000000000 +0200
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,128 ****
- Instructions
- ------------
-
- Last Update: $Date: 1998/10/15 15:36:38 $
-
-
- This file contains instructions on how to create and install
- the entire ELM mail system. It should be read BEFORE any attempts
- are made at actually creating and/or installing any of the software
- contained herein!
-
- There is actually really one step needed - unpack all the shar
- files and then;
-
- $ cd <where-ever you're keeping the Elm sources>
-
- $ sh Configure
-
- Answer the questions of that program, then let it create the
- localized Makefiles and system definition files for you. When it's
- done you can double check the configuration (or customize it further)
- by reading the Configuration Guide and then rerunning Configure.
- There are lots of neat features that are unique to this mailer - it's
- worth a quick perusal at least!
-
- Once you're happy with the localized files, you then need to
- create the documentation (so there's a bit of a catch-22 that you need
- to format the Configuration guide before you are happy with the
- localization but can't do that until you're happy with the
- localization...oh well).
-
- $
-
- $ make documentation
-
- When that's done, or even if it fails (don't worry too much about
- it), do the following:
-
- $ make all > MAKELOG 2>&1 &
- $ tail -f MAKELOG
-
- (if you're in "csh", substitute: "make all >& MAKELOG &")
-
- This will take a fair while, so it's recommended that you go and eat
- lunch or play a game for a while!! (alternatively, spend lots of money
- on a really FAST machine and blink your eyes a few times...)
-
- Assuming there are no errors during compilation (we'll have to assume
- that for the moment) you should now be able to list the directory "bin"
- and find the following files:
-
- answer elmalias frm newalias prlong
- checkalias fastmail listalias newmail readmsg
- elm filter messages printmail
-
- next, you can install all the software on your system by;
-
- $ make install
-
- Note: On some systems the mailer runs as setgid mail to have the
- ability to WRITE to the mail directory (for lock files). If this is
- true, you will have to be root to install Elm (or some other user that
- can have the makefile set the setgid bit on the required executables).
- If you have a different scheme at your site, feel free to set it up to
- use that instead.
-
- Finally, we're just about done! The final checks can be made
- by the following commands:
-
- $ elm -z
-
- should say "no mail" if nothing's in your incoming mailbox or should
- start up the Elm program if there is, and
-
- $ elm -f test/test.mail
-
- should read in EIGHT messages from various people. While here, try to
- A)lias, A)lias current message for each of the eight messages to
- confirm that the reply/address system is working okay. Now Q)uit
- without having marked anything for deletion...answer the questions
- accordingly.
-
- If you get this far you're in wonderful shape! In fact, you're done!
-
- Congratulations! You've just installed one of the best electronic mail
- systems available today on your machine (if I say so myself!)
-
- IF UPGRADING FROM AN EARLIER VERSION OF ELM, even 2.4 beta, it will
- be necessary for all users alias files, as well as the systems alias
- file, be upgraded to the new format. Also some error checking of
- alias files has been added. All users should run the newalias command.
-
- HANDY HINTS: If you want to create a print of the entire set of
- sources, including this file, use the command:
-
- $ make listing
-
- Also, if you have a number of machines on a network, you can rlogin
- to the remote machine and then do a remote install (after checking
- to ensure that the networking copy method in the Makefile under the
- target "remote-install" is correct) by typing:
-
- $ make -f <remote Makefile> REMOTE=<remote file system> rmt-install
-
- (for example, if we had installed the system on machine "machx" and
- wanted to install it on "machy", with the Makefile in /src/Elm on
- "machx", we could type from "machy";
- $ make -f machx:/src/Elm/Makefile REMOTE=machx: rmt-install
- to have it install the system on machine y!)
-
- That's it!
- ----------
-
- This document and the entire mail system is
-
- (C) Copyright 1988-1992 by the Usenet Community Trust
- (C) Copyright 1986,1987 by Dave Taylor
-
- Elm is now in the public trust. Bug reports, comments, suggestions,
- etc. should be sent to:
-
- Elm group's address: e...@DSI.COM
- dsinc!elm
-
- Mail address: Syd Weinstein
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/lib/add_site.c
*** elm2.4.ME+.115/lib/add_site.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/add_site.c 2004-04-18 19:55:36.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: add_site.c,v 1.5 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: add_site.c,v 1.5.8.1 2004/04/18 16:55:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 12,18 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
int add_site(buffer, site, lastsite, size)
char *buffer, *site, *lastsite;
--- 12,18 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
int add_site(buffer, site, lastsite, size)
char *buffer, *site, *lastsite;
Index: elmME+.2.5.alpha0-cvs/lib/aliasdb.c
*** elm2.4.ME+.115/lib/aliasdb.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/aliasdb.c 2004-04-18 19:55:36.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: aliasdb.c,v 1.8 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: aliasdb.c,v 1.8.8.1 2004/04/18 16:55:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 21,27 ****
**/
! #include "headers.h"
#include "ndbz.h"
#ifdef BSD_TYPE
--- 21,27 ----
**/
! #include "elm_defs.h"
#include "ndbz.h"
#ifdef BSD_TYPE
Index: elmME+.2.5.alpha0-cvs/lib/atonum.c
*** elm2.4.ME+.115/lib/atonum.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/atonum.c 2004-04-18 19:55:36.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: atonum.c,v 1.6 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: atonum.c,v 1.6.8.1 2004/04/18 16:55:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 11,17 ****
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include "headers.h"
/*
* This is similar to atoi(), but it complains if the string
--- 11,18 ----
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include "elm_defs.h"
!
/*
* This is similar to atoi(), but it complains if the string
Index: elmME+.2.5.alpha0-cvs/lib/bindata.c
*** elm2.4.ME+.115/lib/bindata.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/bindata.c 2004-04-25 17:52:37.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: bindata.c,v 1.4 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
! #include "headers.h"
#include "mmaputil.h"
#include "cs_imp.h"
#include "s_me.h"
--- 1,13 ----
! static char rcsid[] = "@(#)$Id: bindata.c,v 1.4.8.2 2004/04/25 14:52:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
! #include "elm_defs.h"
!
#include "mmaputil.h"
#include "cs_imp.h"
#include "s_me.h"
***************
*** 744,750 ****
struct bindata_format_1 *v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! const char *filename;
{
int status = 0,i;
struct csets_1 *y;
--- 745,751 ----
struct bindata_format_1 *v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! CONST char *filename;
{
int status = 0,i;
struct csets_1 *y;
***************
*** 793,799 ****
struct bindata_mapped_data * v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! const char *filename;
{
int r = 0;
--- 794,800 ----
struct bindata_mapped_data * v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! CONST char *filename;
{
int r = 0;
***************
*** 988,994 ****
/* bzero is defined on hdrs/defs.h
*/
! bzero(ret, sizeof (*ret));
ret->format = bindata_format_1;
ret->v.f1.header = v;
--- 989,995 ----
/* bzero is defined on hdrs/defs.h
*/
! bzero((void *)ret, sizeof (*ret));
ret->format = bindata_format_1;
ret->v.f1.header = v;
***************
*** 999,1005 ****
struct bindata_map * give_mapping(v,mapname)
struct bindata_mapped_data *v;
! const char *mapname;
{
struct bindata_map *ret = NULL;
--- 1000,1006 ----
struct bindata_map * give_mapping(v,mapname)
struct bindata_mapped_data *v;
! CONST char *mapname;
{
struct bindata_map *ret = NULL;
Index: elmME+.2.5.alpha0-cvs/lib/can_access.c
*** elm2.4.ME+.115/lib/can_access.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/can_access.c 2004-04-18 19:55:36.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: can_access.c,v 1.10 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: can_access.c,v 1.10.8.1 2004/04/18 16:55:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 23,29 ****
* - K E H <hur...@ozone.FMI.FI>
*/
! #include "headers.h"
#include <errno.h>
#ifndef ANSI_C
extern int errno; /* system error number */
--- 23,29 ----
* - K E H <hur...@ozone.FMI.FI>
*/
! #include "elm_defs.h"
#include <errno.h>
#ifndef ANSI_C
extern int errno; /* system error number */
Index: elmME+.2.5.alpha0-cvs/lib/can_open.c
*** elm2.4.ME+.115/lib/can_open.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/can_open.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: can_open.c,v 1.12 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@poasti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: can_open.c,v 1.12.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@poasti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 16,22 ****
**/
! #include "headers.h"
#include <errno.h>
#ifndef ANSI_C
extern int errno; /* system error number */
--- 16,22 ----
**/
! #include "elm_defs.h"
#include <errno.h>
#ifndef ANSI_C
extern int errno; /* system error number */
Index: elmME+.2.5.alpha0-cvs/lib/charset.c
*** elm2.4.ME+.115/lib/charset.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/charset.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: charset.c,v 1.76 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: charset.c,v 1.76.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 10,16 ****
* written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
#ifdef USE_DLOPEN
--- 10,16 ----
* written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
#ifdef USE_DLOPEN
Index: elmME+.2.5.alpha0-cvs/lib/charset_input.c
*** elm2.4.ME+.115/lib/charset_input.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/charset_input.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: charset_input.c,v 1.6 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: charset_input.c,v 1.6.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/chloc.c
*** elm2.4.ME+.115/lib/chloc.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/chloc.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: chloc.c,v 1.5 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: chloc.c,v 1.5.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 16,22 ****
**/
! #include "headers.h"
/* Is this really needed? This does same than strchr or index, except
* that return type is different.
--- 16,22 ----
**/
! #include "elm_defs.h"
/* Is this really needed? This does same than strchr or index, except
* that return type is different.
Index: elmME+.2.5.alpha0-cvs/lib/cs_binary.c
*** elm2.4.ME+.115/lib/cs_binary.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/cs_binary.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: cs_binary.c,v 1.42 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: cs_binary.c,v 1.42.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
***************
*** 25,31 ****
*
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
#include "bindata.h"
--- 25,31 ----
*
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
#include "bindata.h"
Index: elmME+.2.5.alpha0-cvs/lib/cs_fallback.c
*** elm2.4.ME+.115/lib/cs_fallback.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/cs_fallback.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: cs_fallback.c,v 1.6 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: cs_fallback.c,v 1.6.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/cs_iso2022.c
*** elm2.4.ME+.115/lib/cs_iso2022.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/cs_iso2022.c 2004-04-25 17:52:37.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.35 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
#include "cs_terminal.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.35.8.2 2004/04/25 14:52:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
#include "cs_terminal.h"
Index: elmME+.2.5.alpha0-cvs/lib/cs_utf.c
*** elm2.4.ME+.115/lib/cs_utf.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/cs_utf.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: cs_utf.c,v 1.27 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: cs_utf.c,v 1.27.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/date_util.c
*** elm2.4.ME+.115/lib/date_util.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/date_util.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: date_util.c,v 1.7 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: date_util.c,v 1.7.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 11,17 ****
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"misc");
--- 11,17 ----
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"misc");
Index: elmME+.2.5.alpha0-cvs/lib/debug.c
*** elm2.4.ME+.115/lib/debug.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/debug.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: debug.c,v 1.21 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.21 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_elm.h"
#include "patchlevel.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: debug.c,v 1.21.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.21.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_elm.h"
#include "patchlevel.h"
Index: elmME+.2.5.alpha0-cvs/lib/dispaddr.c
*** elm2.4.ME+.115/lib/dispaddr.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/dispaddr.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: dispaddr.c,v 1.17 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: dispaddr.c,v 1.17.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 9,15 ****
* Initially written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"addr");
--- 9,15 ----
* Initially written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"addr");
Index: elmME+.2.5.alpha0-cvs/lib/dynarray.c
*** elm2.4.ME+.115/lib/dynarray.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/dynarray.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "$Id: dynarray.c,v 1.5 2004/03/27 18:31:38 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
*
* Initially written by: Michael Elkins <elk...@aero.org>, 1995/06/01
--- 1,7 ----
! static char rcsid[] = "$Id: dynarray.c,v 1.5.8.1 2004/04/18 16:55:37 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
*
* Initially written by: Michael Elkins <elk...@aero.org>, 1995/06/01
***************
*** 9,15 ****
/** routines for handling of dynamic arrays **/
! #include "headers.h"
void ** DynamicArray (p, record_size, max, n)
void **p;
--- 9,15 ----
/** routines for handling of dynamic arrays **/
! #include "elm_defs.h"
void ** DynamicArray (p, record_size, max, n)
void **p;
Index: elmME+.2.5.alpha0-cvs/lib/errno.c
*** elm2.4.ME+.115/lib/errno.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/errno.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: errno.c,v 1.6 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: errno.c,v 1.6.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 21,28 ****
**/
! #include "headers.h"
! #include "me.h"
#ifndef STRERROR
#ifdef ERRLST
--- 21,27 ----
**/
! #include "elm_defs.h"
#ifndef STRERROR
#ifdef ERRLST
Index: elmME+.2.5.alpha0-cvs/lib/expand.c
*** elm2.4.ME+.115/lib/expand.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/expand.c 2004-05-16 10:42:23.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: expand.c,v 1.18 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** This is a library routine for the various utilities that allows
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: expand.c,v 1.18.8.5 2004/05/16 07:42:23 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18.8.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 lib/expand.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/read.rc:
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** This is a library routine for the various utilities that allows
***************
*** 19,26 ****
**/
! #include <stdio.h>
! #include "headers.h"
#include "s_elmrc.h"
DEBUG_VAR(Debug,__FILE__,"config");
--- 29,35 ----
**/
! #include "elm_defs.h"
#include "s_elmrc.h"
DEBUG_VAR(Debug,__FILE__,"config");
***************
*** 46,51 ****
--- 55,69 ----
return 1;
}
+ static char *monthnames[12] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+ };
+
+ static char *daynames[7] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ };
+
/* Returns 0 if no expansion done
1 if expansion done
-1 on failure
***************
*** 57,65 ****
{
CONST char *src0 = src;
char *dest0 = dest;
- int check_for_env = TRUE;
int ret = 0; /* assume success */
if (destlen < 1) {
DPRINT(Debug,1,(&Debug,
"expand_path()=-1, src=%s, destlen=%d\n",
--- 75,95 ----
{
CONST char *src0 = src;
char *dest0 = dest;
int ret = 0; /* assume success */
+ time_t now;
+ struct tm *tm;
+
+
+ time(&now);
+ tm = localtime(&now);
+ if (!tm) {
+ DPRINT(Debug,1,(&Debug,
+ "expand_path()=-1, localtime failed\n"));
+ return -1;
+
+ }
+
if (destlen < 1) {
DPRINT(Debug,1,(&Debug,
"expand_path()=-1, src=%s, destlen=%d\n",
***************
*** 75,84 ****
while (destlen > 0 && *src != '\0') {
! /*
! * Check for "$NAME" at the start of every path component.
! */
! if (check_for_env && *src == '$') {
/*
* Get the environment parameter name into "envname_buf"
* and advance "src" to the next path component.
--- 105,117 ----
while (destlen > 0 && *src != '\0') {
! switch(*src) {
!
! /*
! ** Environment variable expansion
! */
! case '$': {
!
/*
* Get the environment parameter name into "envname_buf"
* and advance "src" to the next path component.
***************
*** 88,96 ****
int len, p;
char envname_buf[SLEN];
! if ((len = strcspn(src, "/@")) == 0)
! len = strlen(src);
! src += len;
strnfcpy(envname_buf, envname_front, len,
sizeof(envname_buf),NULL);
--- 121,146 ----
int len, p;
char envname_buf[SLEN];
! if ('{' == *src) {
! envname_front = ++src;
! if ((len = strcspn(src, "}")) == 0) {
! DPRINT(Debug,5,(&Debug,"Bad variable\n"));
!
! strnfcpy(dest, "${", 2, destlen,&p);
! dest += p;
! destlen -= p;
!
! continue;
! }
!
! src += len +1;
! } else {
!
! if ((len = strcspn(src, "/@%")) == 0)
! len = strlen(src);
! src += len;
! }
!
strnfcpy(envname_buf, envname_front, len,
sizeof(envname_buf),NULL);
***************
*** 99,105 ****
* parameter is undefined then copy over unchanged and set
* a fail return status.
*/
! if ((expval = getenv(envname_buf)) == NULL) {
*dest++ = '$';
--destlen;
expval = envname_buf;
--- 149,164 ----
* parameter is undefined then copy over unchanged and set
* a fail return status.
*/
!
! if (1 == len && '$' == envname_buf[0]) {
! static char buffer1[20];
!
! /* Handle $$ as pid */
! elm_sfprintf(buffer1,sizeof buffer1,
! FRM("%d"), getpid());
!
! expval = buffer1;
! } else if ((expval = getenv(envname_buf)) == NULL) {
*dest++ = '$';
--destlen;
expval = envname_buf;
***************
*** 115,130 ****
strnfcpy(dest, expval, len, destlen,&p);
dest += p;
destlen -= p;
! check_for_env = FALSE;
if (0 == ret)
ret = 1;
! } else {
- check_for_env = (*src == '/');
*dest++ = *src++;
--destlen;
!
}
}
--- 174,264 ----
strnfcpy(dest, expval, len, destlen,&p);
dest += p;
destlen -= p;
!
if (0 == ret)
ret = 1;
!
! }
! break;
!
! case '%': {
! src++;
!
! /*
! ** Handle date expansion
! */
! switch(*src) {
! int p;
!
! case 'h': /* Month name */
!
! strnfcpy(dest, monthnames[tm->tm_mon], 3, destlen,&p);
! dest += p;
! destlen -= p;
!
! break;
! case 'a': /* Day of the week */
!
! strnfcpy(dest, daynames[tm->tm_wday], 3, destlen,&p);
! dest += p;
! destlen -= p;
!
! break;
! case 'y': /* Last 2 digits of the year */
! p = elm_sfprintf(dest,destlen,FRM("%02d"),
! tm->tm_year % 100);
! dest += p;
! destlen -= p;
! break;
! case 'Y': /* Last 4 digits of the year */
! p = elm_sfprintf(dest,destlen,FRM("%04d"),
! tm->tm_year+1900);
! dest += p;
! destlen -= p;
! break;
! case 'm': /* Month number (1-12) */
! p = elm_sfprintf(dest,destlen,FRM("%02d"),
! tm->tm_mon+1);
! dest += p;
! destlen -= p;
! break;
! case 'd': /* Day of the month */
! p = elm_sfprintf(dest,destlen,FRM("%02d"),
! tm->tm_mday);
! dest += p;
! destlen -= p;
! break;
! case 'j': /* Julian day */
! p = elm_sfprintf(dest,destlen,FRM("%03d"),
! tm->tm_yday+1);
! dest += p;
! destlen -= p;
! break;
! case '%':
! if (destlen > 0)
! *dest++ = '%';
! else
! ret = -1;
! break;
! default:
! if (destlen > 1) {
! destlen -= 2;
! *dest++ = '%';
! *dest++ = *src;
! }
! else
! ret = -1;
! break;
! }
! src++;
! }
! break;
! default:
*dest++ = *src++;
--destlen;
! break;
}
}
***************
*** 235,246 ****
}
/*
! * expand_env() - Perform environment expansion on a pathname. Also
! * replaces "~" at the front of the path with the user's home directory.
! * Environment expansion occurs at the path component boundaries, e.g.
! * "/foo/$BAR/baz" is subject to expansion but "/foo/zzz$BAR/baz" is not.
! * Returns 0 if expansion successful, -1 if an error occurs (result too
! * long, cannot get home directory, or environment expansion failed).
*/
int expand_env(dest, src, destlen)
char *dest; /* pointer to space to hold the result */
--- 369,415 ----
}
/*
! ** Copy a string from the source buffer (src) to the destination buffer
! ** (dst) performing various expansions along the way:
! **
! ** Source string --> Destination string
! ** ------------- ------------------
! **
! ** $VAR value of $VAR from
! ** the environment
! **
! ** ${VAR} same as above.
! **
! ** ~/ user's home directory
! **
! ** %h current month name
! ** (3 letter abbreviation)
! **
! ** %y current year (modulo 100)
! **
! ** %Y current year
! **
! ** %m current month number (01-12)
! **
! ** %j day of the year (001-366)
! **
! ** %d day of the month (01-31)
! **
! ** %% % character
! **
! ** Returns: 0 if successful, -1 if error occurs
! **
! ** Example:
! **
! ** JUNK = bar in the current environment:
! ** Current date = 1/1/95
! **
! ** ~/$JUNK/mail.%h%y --> /usr/whoever/bar/mail.Jan95
! **
! ** if you want to embed "$JUNK" within a string, use '{}':
! **
! ** ~/${JUNK}xx/mail.%h%y --> /usr/whoever/barxx/mail.Jan95
! **
*/
int expand_env(dest, src, destlen)
char *dest; /* pointer to space to hold the result */
Index: elmME+.2.5.alpha0-cvs/lib/expires.c
*** elm2.4.ME+.115/lib/expires.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/expires.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,4 ****
! static char rcsid[] = "@(#)$Id: expires.c,v 1.3 2004/03/27 18:31:38 hurtta Exp $";
/*****************************************************************************
* This code is reimpleted. Original code was following copyright:
--- 1,4 ----
! static char rcsid[] = "@(#)$Id: expires.c,v 1.3.8.1 2004/04/18 16:55:37 hurtta Exp $";
/*****************************************************************************
* This code is reimpleted. Original code was following copyright:
***************
*** 13,20 ****
current message if it is true...
**/
! #include "headers.h"
! #include "me.h"
DEBUG_VAR(Debug,__FILE__,"misc");
--- 13,19 ----
current message if it is true...
**/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"misc");
Index: elmME+.2.5.alpha0-cvs/lib/file_util.c
*** elm2.4.ME+.115/lib/file_util.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/file_util.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.9 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: file_util.c,v 1.9.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 14,20 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "s_elm.h"
#include <errno.h>
--- 14,20 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "s_elm.h"
#include <errno.h>
Index: elmME+.2.5.alpha0-cvs/lib/forwarded.c
*** elm2.4.ME+.115/lib/forwarded.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/forwarded.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: forwarded.c,v 1.6 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: forwarded.c,v 1.6.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 15,21 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"mbox");
--- 15,21 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"mbox");
Index: elmME+.2.5.alpha0-cvs/lib/gcos_name.c
*** elm2.4.ME+.115/lib/gcos_name.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/gcos_name.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: gcos_name.c,v 1.9 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: gcos_name.c,v 1.9.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 12,18 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
char * gcos_name(gcos_field, logname)
CONST char *logname, *gcos_field;
--- 12,18 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
char * gcos_name(gcos_field, logname)
CONST char *logname, *gcos_field;
Index: elmME+.2.5.alpha0-cvs/lib/getaddr.c
*** elm2.4.ME+.115/lib/getaddr.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/getaddr.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,14 ****
! static char rcsid[] = "@(#)$Id: getaddr.c,v 1.22 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.22 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
* Content partially moved from melib/parse_util.c
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"addr");
--- 1,14 ----
! static char rcsid[] = "@(#)$Id: getaddr.c,v 1.22.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.22.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
* Content partially moved from melib/parse_util.c
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"addr");
Index: elmME+.2.5.alpha0-cvs/lib/getaddrfrm.c
*** elm2.4.ME+.115/lib/getaddrfrm.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/getaddrfrm.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: getaddrfrm.c,v 1.8 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Reimplemented by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: getaddrfrm.c,v 1.8.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8.8.1 $ $State: Exp $
*
* Reimplemented by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 14,20 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"addr");
--- 14,20 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"addr");
Index: elmME+.2.5.alpha0-cvs/lib/getarpdate.c
*** elm2.4.ME+.115/lib/getarpdate.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/getarpdate.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: getarpdate.c,v 1.8 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: getarpdate.c,v 1.8.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 12,18 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
CONST char *arpa_dayname[8] = { "Sun", "Mon", "Tue", "Wed", "Thu",
"Fri", "Sat", "" };
--- 12,18 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
CONST char *arpa_dayname[8] = { "Sun", "Mon", "Tue", "Wed", "Thu",
"Fri", "Sat", "" };
Index: elmME+.2.5.alpha0-cvs/lib/getfullnam.c
*** elm2.4.ME+.115/lib/getfullnam.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/getfullnam.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: getfullnam.c,v 1.6 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: getfullnam.c,v 1.6.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 16,22 ****
**/
! #include "headers.h"
#ifdef PWDINSYS
# include <sys/pwd.h>
#else
--- 16,22 ----
**/
! #include "elm_defs.h"
#ifdef PWDINSYS
# include <sys/pwd.h>
#else
Index: elmME+.2.5.alpha0-cvs/lib/get_tz.c
*** elm2.4.ME+.115/lib/get_tz.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/get_tz.c 2004-04-18 19:55:37.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: get_tz.c,v 1.11 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: get_tz.c,v 1.11.8.1 2004/04/18 16:55:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 11,17 ****
* Copyright (c) 1992, 1993 USENET Community Trust
*****************************************************************************/
! #include "headers.h"
#ifdef _CONFIGURE
/*
--- 11,17 ----
* Copyright (c) 1992, 1993 USENET Community Trust
*****************************************************************************/
! #include "elm_defs.h"
#ifdef _CONFIGURE
/*
Index: elmME+.2.5.alpha0-cvs/lib/getword.c
*** elm2.4.ME+.115/lib/getword.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/getword.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: getword.c,v 1.5 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: getword.c,v 1.5.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 11,18 ****
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include <stdio.h>
! #include "headers.h"
int get_word(buffer, start, word, wordlen)
CONST char *buffer;
--- 11,17 ----
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include "elm_defs.h"
int get_word(buffer, start, word, wordlen)
CONST char *buffer;
Index: elmME+.2.5.alpha0-cvs/lib/hdrdecode.c
*** elm2.4.ME+.115/lib/hdrdecode.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/hdrdecode.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrdecode.c,v 1.13 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrdecode.c,v 1.13.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
***************
*** 9,15 ****
* written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
DEBUG_VAR(Debug,__FILE__,"mime");
--- 9,15 ----
* written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
DEBUG_VAR(Debug,__FILE__,"mime");
Index: elmME+.2.5.alpha0-cvs/lib/hdrencode.c
*** elm2.4.ME+.115/lib/hdrencode.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/hdrencode.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrencode.c,v 1.11 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrencode.c,v 1.11.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*
***************
*** 9,15 ****
* written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
DEBUG_VAR(Debug,__FILE__,"mime");
--- 9,15 ----
* written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
DEBUG_VAR(Debug,__FILE__,"mime");
Index: elmME+.2.5.alpha0-cvs/lib/header_cmp.c
*** elm2.4.ME+.115/lib/header_cmp.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/header_cmp.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: header_cmp.c,v 1.4 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: header_cmp.c,v 1.4.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 21,27 ****
**/
! #include "headers.h"
char * header_cmp(header, prefix, suffix)
char *header, *prefix, *suffix;
--- 21,27 ----
**/
! #include "elm_defs.h"
char * header_cmp(header, prefix, suffix)
char *header, *prefix, *suffix;
Index: elmME+.2.5.alpha0-cvs/lib/headers.c
*** elm2.4.ME+.115/lib/headers.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/headers.c 2004-05-15 23:11:36.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: headers.c,v 1.29 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "hdr_imp.h"
#include "s_me.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: headers.c,v 1.29.8.3 2004/05/15 20:11:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29.8.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "hdr_imp.h"
#include "s_me.h"
***************
*** 158,163 ****
--- 158,167 ----
} else if ('<' == tokens[i][0]) {
int j;
+ /* Add missing space wetween phrase and < > */
+ if (i > 0)
+ add_ascii_to_string(result,us_str(" "));
+
R = new_string(defcharset);
add_ascii_to_string(R,us_str(tokens[i]));
***************
*** 400,406 ****
static int no_add_to_mail_hdr(headers,X,value,demime,defcharset,replace)
struct mailing_headers * headers;
header_ptr X;
! const char *value;
int demime;
charset_t defcharset;
int replace;
--- 404,410 ----
static int no_add_to_mail_hdr(headers,X,value,demime,defcharset,replace)
struct mailing_headers * headers;
header_ptr X;
! CONST char *value;
int demime;
charset_t defcharset;
int replace;
***************
*** 448,453 ****
--- 452,460 ----
{ "Content-Disposition", hdr_decode_from_comment, no_add_to_mail_hdr },
/* From RFC 1864 */
{ "Content-MD5", hdr_decode_from_raw, no_add_to_mail_hdr },
+
+ /* From RFC 2919 */
+ { "List-Id", hdr_decode_from_phrase, no_add_to_mail_hdr },
/* mailbox format */
{ "Content-Length", hdr_decode_from_raw, no_add_to_mail_hdr },
Index: elmME+.2.5.alpha0-cvs/lib/id_phrase.c
*** elm2.4.ME+.115/lib/id_phrase.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/id_phrase.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: id_phrase.c,v 1.5 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"header");
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: id_phrase.c,v 1.5.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"header");
Index: elmME+.2.5.alpha0-cvs/lib/imap.c
*** elm2.4.ME+.115/lib/imap.c 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/imap.c 2004-05-01 10:41:05.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: imap.c,v 1.104 2004/04/04 06:17:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.104 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
#include "s_me.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: imap.c,v 1.104.4.2 2004/05/01 07:41:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.104.4.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "ss_imp.h"
#include "mbx_imp.h"
#include "s_me.h"
***************
*** 178,184 ****
long mask_imap;
} IMAP_flags[] = {
{ "\\Seen", 0, IMAP_Seen },
! { "\\Answered", REPLIED, IMAP_Answered },
{ "\\Flagged", TAGGED, IMAP_Flagged },
{ "\\Deleted", DELETED, IMAP_Deleted },
{ "\\Draft", 0, IMAP_Draft },
--- 178,184 ----
long mask_imap;
} IMAP_flags[] = {
{ "\\Seen", 0, IMAP_Seen },
! { "\\Answered", REPLIED_TO, IMAP_Answered },
{ "\\Flagged", TAGGED, IMAP_Flagged },
{ "\\Deleted", DELETED, IMAP_Deleted },
{ "\\Draft", 0, IMAP_Draft },
Index: elmME+.2.5.alpha0-cvs/lib/in_string.c
*** elm2.4.ME+.115/lib/in_string.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/in_string.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: in_string.c,v 1.4 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: in_string.c,v 1.4.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 16,22 ****
**/
! #include "headers.h"
/* Is that needed? This is almost same as strstr (except return type).
* - K E H <hur...@ozone.FMI.FI>
--- 16,22 ----
**/
! #include "elm_defs.h"
/* Is that needed? This is almost same as strstr (except return type).
* - K E H <hur...@ozone.FMI.FI>
Index: elmME+.2.5.alpha0-cvs/lib/iso2022.c
*** elm2.4.ME+.115/lib/iso2022.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/iso2022.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.29 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: iso2022.c,v 1.29.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/iso2022_map.c
*** elm2.4.ME+.115/lib/iso2022_map.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/iso2022_map.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: iso2022_map.c,v 1.9 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: iso2022_map.c,v 1.9.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/istrcmp.c
*** elm2.4.ME+.115/lib/istrcmp.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/istrcmp.c 2004-04-18 19:55:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: istrcmp.c,v 1.7 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: istrcmp.c,v 1.7.8.1 2004/04/18 16:55:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 16,23 ****
**/
! #include "headers.h"
! #include "me.h"
/* This is same than strcasecmp. - K E H <hur...@ozone.FMI.FI> */
int istrcmp(s1,s2)
--- 16,22 ----
**/
! #include "elm_defs.h"
/* This is same than strcasecmp. - K E H <hur...@ozone.FMI.FI> */
int istrcmp(s1,s2)
Index: elmME+.2.5.alpha0-cvs/lib/ldstate.c
*** elm2.4.ME+.115/lib/ldstate.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/ldstate.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: ldstate.c,v 1.11 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: ldstate.c,v 1.11.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 11,17 ****
* Copyright (c) 1992 USENET Community Trust
*****************************************************************************/
! #include "headers.h"
/*
* Retrieve Elm folder state.
--- 11,17 ----
* Copyright (c) 1992 USENET Community Trust
*****************************************************************************/
! #include "elm_defs.h"
/*
* Retrieve Elm folder state.
Index: elmME+.2.5.alpha0-cvs/lib/len_next.c
*** elm2.4.ME+.115/lib/len_next.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/len_next.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: len_next.c,v 1.6 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: len_next.c,v 1.6.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 29,35 ****
**/
! #include "headers.h"
int len_next_part(str)
CONST char *str;
--- 29,35 ----
**/
! #include "elm_defs.h"
int len_next_part(str)
CONST char *str;
Index: elmME+.2.5.alpha0-cvs/lib/localmbx.c
*** elm2.4.ME+.115/lib/localmbx.c 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/localmbx.c 2004-05-01 10:41:05.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.64 2004/04/04 06:17:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.64 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.64.4.3 2004/05/01 07:41:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.64.4.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 15,21 ****
*****************************************************************************/
! #include "headers.h"
#include "mbx_imp.h"
#include "s_me.h"
#include "s_elm.h"
--- 15,21 ----
*****************************************************************************/
! #include "elm_defs.h"
#include "mbx_imp.h"
#include "s_me.h"
#include "s_elm.h"
***************
" (read %1.1f minutes ago)\n",
! (double)(now - buf2.st_atime) / 60.0));
}
DPRINT(Debug,2,(&Debug,
"mbx_dotlock_file: can remove = %d \n",
***************
*** 4898,4904 ****
putc('O',keep_state_ptr->a.file.keep_file);
count ++;
}
! if (ison(entry->status, REPLIED)) {
putc('r',keep_state_ptr->a.file.keep_file);
count ++;
}
--- 4898,4904 ----
putc('O',keep_state_ptr->a.file.keep_file);
count ++;
}
! if (ison(entry->status, REPLIED_TO)) {
putc('r',keep_state_ptr->a.file.keep_file);
count ++;
}
Index: elmME+.2.5.alpha0-cvs/lib/mailer.c
*** elm2.4.ME+.115/lib/mailer.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/mailer.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: mailer.c,v 1.46 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_elm.h"
#include "mailer_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: mailer.c,v 1.46.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_elm.h"
#include "mailer_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/mail_gets.c
*** elm2.4.ME+.115/lib/mail_gets.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/mail_gets.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mail_gets.c,v 1.8 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mail_gets.c,v 1.8.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 17,23 ****
**/
! #include "headers.h"
int mail_gets(buffer, size, mailfile)
char *buffer;
--- 17,23 ----
**/
! #include "elm_defs.h"
int mail_gets(buffer, size, mailfile)
char *buffer;
Index: elmME+.2.5.alpha0-cvs/lib/Makefile.SH
*** elm2.4.ME+.115/lib/Makefile.SH 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/Makefile.SH 2004-04-18 19:55:36.000000000 +0300
***************
*** 46,52 ****
echo "Extracting lib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.89 2004/03/28 13:37:39 hurtta Exp $
#
# Makefile for the ELM mail program.
#
--- 46,52 ----
echo "Extracting lib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.89.8.1 2004/04/18 16:55:36 hurtta Exp $
#
# Makefile for the ELM mail program.
#
***************
*** 370,387 ****
# Dependencies and rules
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/elm.h \
! $(INCLDIR)/headers.h $(INCLDIR)/shared_imp.h
! $(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/defs.h $(INCLDIR)/melib.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/elmlib.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 370,384 ----
# Dependencies and rules
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/elm_defs.h $(INCLDIR)/shared_imp.h \
! $(INCLDIR)/defs_major.h
! $(INCLDIR)/elm_defs.h: $(INCLDIR)/defs_major.h $(INCLDIR)/elm_nl_types.h \
! $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/defs_major.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
***************
*** 393,519 ****
# Simple files ...
putenv.o: $(INCLDIR)/defs_major.h
strstr.o: $(INCLDIR)/defs_major.h
# --- Dependencies of C object files
! add_site.o: $(INCLDIR)/headers.h
! atonum.o: $(INCLDIR)/headers.h
! bindata.o: $(INCLDIR)/headers.h $(INCLDIR)/mmaputil.h \
$(INCLDIR)/cs_imp.h $(INCLDIR)/s_me.h $(INCLDIR)/bindata.h
! mmaputil.o: $(INCLDIR)/headers.h $(INCLDIR)/mmaputil.h
! dynarray.o: $(INCLDIR)/headers.h
! mk_aliases.o: $(INCLDIR)/headers.h $(INCLDIR)/ndbz.h $(INCLDIR)/s_newalias.h
! aliasdb.o: $(INCLDIR)/headers.h $(INCLDIR)/ndbz.h
! mk_lockname.o: $(INCLDIR)/headers.h
! can_access.o: $(INCLDIR)/headers.h
! can_open.o: $(INCLDIR)/headers.h
! chloc.o: $(INCLDIR)/headers.h
! charset.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/shared_imp.h
! precompiled_sets.o: $(INCLDIR)/cs_imp.h $(INCLDIR)/elmlib.h $(INCLDIR)/defs.h
! charset_input.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! cs_binary.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/bindata.h
! cs_fallback.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! cs_utf.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! cs_iso2022.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h $(INCLDIR)/cs_terminal.h
! date_util.o: $(INCLDIR)/headers.h
! debug.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/patchlevel.h
! dispaddr.o: $(INCLDIR)/headers.h
! errno.o: $(INCLDIR)/headers.h
! expand.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elmrc.h
! expires.o: $(INCLDIR)/headers.h
! forwarded.o: $(INCLDIR)/headers.h
! file_util.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h
! gcos_name.o: $(INCLDIR)/headers.h
! get_tz.o: $(INCLDIR)/headers.h
! getaddr.o: $(INCLDIR)/headers.h
! getaddrfrm.o: $(INCLDIR)/headers.h
! getarpdate.o: $(INCLDIR)/headers.h
! getfullnam.o: $(INCLDIR)/headers.h
! getword.o: $(INCLDIR)/headers.h
! hdrdecode.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h
! hdrencode.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h
! header_cmp.o: $(INCLDIR)/headers.h
! headers.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/hdr_imp.h
! in_string.o: $(INCLDIR)/headers.h
! iso2022.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! iso2022_map.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! imap.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/ss_imp.h
! istrcmp.o: $(INCLDIR)/headers.h
! ldstate.o: $(INCLDIR)/headers.h
! len_next.o: $(INCLDIR)/headers.h
! localmbx.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h
! mail_gets.o: $(INCLDIR)/headers.h
! mailer.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/mailer_imp.h $(INCLDIR)/shared_imp.h
! mediatype.o: $(INCLDIR)/headers.h
! mbox.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/shared_imp.h
! mgets.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h
! move_left.o: $(INCLDIR)/headers.h
! msgcat.o: $(INCLDIR)/msgcat.h $(INCLDIR)/headers.h
! ndbz.o: $(INCLDIR)/headers.h $(INCLDIR)/ndbz.h
! okay_addr.o: $(INCLDIR)/headers.h
! opt_utils.o: $(INCLDIR)/headers.h $(INCLDIR)/s_error.h
! outheaders.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/hdr_imp.h
! id_phrase.o: $(INCLDIR)/headers.h
! output.o: $(INCLDIR)/headers.h
! panic.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h
! parsarpdat.o: $(INCLDIR)/headers.h
! pmalloc.o: $(INCLDIR)/defs.h $(INCLDIR)/s_elm.h
! pop.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/ss_imp.h
! posixsig.o: $(INCLDIR)/headers.h
! rc_handle.o: $(INCLDIR)/headers.h $(INCLDIR)/save_opts.h \
$(INCLDIR)/s_elm.h $(INCLDIR)/rc_imp.h $(INCLDIR)/shared_imp.h
! read_rc.o: $(INCLDIR)/headers.h $(INCLDIR)/save_opts.h \
$(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h $(INCLDIR)/rc_imp.h \
$(INCLDIR)/unidata.h $(INCLDIR)/cs_imp.h
! realfrom.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h
! remote_mbx.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/shared_imp.h $(INCLDIR)/ss_imp.h
! qstrings.o: $(INCLDIR)/headers.h
! reverse.o: $(INCLDIR)/headers.h
! rfc822tlen.o: $(INCLDIR)/headers.h
! stringtok.o: $(INCLDIR)/headers.h
! safemalloc.o: $(INCLDIR)/headers.h
! savefolder.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/mbx_imp.h
! shared.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/shared_imp.h $(INCLDIR)/mbx_imp.h $(INCLDIR)/save_opts.h \
$(INCLDIR)/rc_imp.h $(INCLDIR)/cs_imp.h $(INCLDIR)/ss_imp.h \
$(INCLDIR)/mailer_imp.h
! shared_connect.o: $(INCLDIR)/headers.h \
$(INCLDIR)/shared_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/ss_imp.h $(INCLDIR)/mailer_imp.h
! shared_base.o: $(INCLDIR)/headers.h \
$(INCLDIR)/shared_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/cs_imp.h
! shared_all.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h \
$(INCLDIR)/shared_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/cs_imp.h
! sb_file.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/sb_imp.h
! sb_mem.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/sb_imp.h
! schedule.o: $(INCLDIR)/headers.h
! service_list.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/shared_imp.h $(INCLDIR)/ss_imp.h
! shiftlower.o: $(INCLDIR)/headers.h
! state.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h
! streamsched.o: $(INCLDIR)/headers.h $(INCLDIR)/ss_imp.h $(INCLDIR)/mbx_imp.h \
$(INCLDIR)/shared_imp.h
! strfcpy.o: $(INCLDIR)/headers.h
! string.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/shared_imp.h
! stringbuffer.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/sb_imp.h
! strmcpy.o: $(INCLDIR)/headers.h
! strincmp.o: $(INCLDIR)/headers.h
! striparens.o: $(INCLDIR)/headers.h
! strtokq.o: $(INCLDIR)/headers.h
! syscall.o: $(INCLDIR)/headers.h $(INCLDIR)/s_elm.h
! terminal.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h $(INCLDIR)/cs_terminal.h
! unicode.o: $(INCLDIR)/headers.h $(INCLDIR)/mmaputil.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/unidata.h
! unidata.o: $(INCLDIR)/headers.h $(INCLDIR)/s_me.h $(INCLDIR)/unidata.h
! write_hdr.o: $(INCLDIR)/headers.h
!NO!SUBS!
if $test "$d_shared" = "$define" ; then
--- 390,517 ----
# Simple files ...
putenv.o: $(INCLDIR)/defs_major.h
strstr.o: $(INCLDIR)/defs_major.h
+ safeopen.o: $(INCLDIR)/defs_major.h
# --- Dependencies of C object files
! add_site.o: $(INCLDIR)/elm_defs.h
! atonum.o: $(INCLDIR)/elm_defs.h
! bindata.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/mmaputil.h \
$(INCLDIR)/cs_imp.h $(INCLDIR)/s_me.h $(INCLDIR)/bindata.h
! mmaputil.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/mmaputil.h
! dynarray.o: $(INCLDIR)/elm_defs.h
! mk_aliases.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/ndbz.h $(INCLDIR)/s_newalias.h
! aliasdb.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/ndbz.h
! mk_lockname.o: $(INCLDIR)/elm_defs.h
! can_access.o: $(INCLDIR)/elm_defs.h
! can_open.o: $(INCLDIR)/elm_defs.h
! chloc.o: $(INCLDIR)/elm_defs.h
! charset.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/shared_imp.h
! precompiled_sets.o: $(INCLDIR)/cs_imp.h $(INCLDIR)/elmlib.h $(INCLDIR)/elm_defs.h
! charset_input.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! cs_binary.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/bindata.h
! cs_fallback.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! cs_utf.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! cs_iso2022.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h $(INCLDIR)/cs_terminal.h
! date_util.o: $(INCLDIR)/elm_defs.h
! debug.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h $(INCLDIR)/patchlevel.h
! dispaddr.o: $(INCLDIR)/elm_defs.h
! errno.o: $(INCLDIR)/elm_defs.h
! expand.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elmrc.h
! expires.o: $(INCLDIR)/elm_defs.h
! forwarded.o: $(INCLDIR)/elm_defs.h
! file_util.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h
! gcos_name.o: $(INCLDIR)/elm_defs.h
! get_tz.o: $(INCLDIR)/elm_defs.h
! getaddr.o: $(INCLDIR)/elm_defs.h
! getaddrfrm.o: $(INCLDIR)/elm_defs.h
! getarpdate.o: $(INCLDIR)/elm_defs.h
! getfullnam.o: $(INCLDIR)/elm_defs.h
! getword.o: $(INCLDIR)/elm_defs.h
! hdrdecode.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h
! hdrencode.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h
! header_cmp.o: $(INCLDIR)/elm_defs.h
! headers.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/hdr_imp.h
! in_string.o: $(INCLDIR)/elm_defs.h
! iso2022.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! iso2022_map.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h
! imap.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/ss_imp.h
! istrcmp.o: $(INCLDIR)/elm_defs.h
! ldstate.o: $(INCLDIR)/elm_defs.h
! len_next.o: $(INCLDIR)/elm_defs.h
! localmbx.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h
! mail_gets.o: $(INCLDIR)/elm_defs.h
! mailer.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/mailer_imp.h $(INCLDIR)/shared_imp.h
! mediatype.o: $(INCLDIR)/elm_defs.h
! mbox.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/shared_imp.h
! move_left.o: $(INCLDIR)/elm_defs.h
! msgcat.o: $(INCLDIR)/msgcat.h $(INCLDIR)/elm_defs.h
! ndbz.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/ndbz.h
! okay_addr.o: $(INCLDIR)/elm_defs.h
! opt_utils.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_error.h
! outheaders.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/hdr_imp.h
! id_phrase.o: $(INCLDIR)/elm_defs.h
! output.o: $(INCLDIR)/elm_defs.h
! panic.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h
! parsarpdat.o: $(INCLDIR)/elm_defs.h
! pmalloc.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h
! pop.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/ss_imp.h
! posixsig.o: $(INCLDIR)/elm_defs.h
! rc_handle.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/save_opts.h \
$(INCLDIR)/s_elm.h $(INCLDIR)/rc_imp.h $(INCLDIR)/shared_imp.h
! read_rc.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/save_opts.h \
$(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h $(INCLDIR)/rc_imp.h \
$(INCLDIR)/unidata.h $(INCLDIR)/cs_imp.h
! realfrom.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h
! remote_mbx.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/shared_imp.h $(INCLDIR)/ss_imp.h
! qstrings.o: $(INCLDIR)/elm_defs.h
! reverse.o: $(INCLDIR)/elm_defs.h
! rfc822tlen.o: $(INCLDIR)/elm_defs.h
! stringtok.o: $(INCLDIR)/elm_defs.h
! safemalloc.o: $(INCLDIR)/elm_defs.h
! savefolder.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/mbx_imp.h
! shared.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h \
$(INCLDIR)/shared_imp.h $(INCLDIR)/mbx_imp.h $(INCLDIR)/save_opts.h \
$(INCLDIR)/rc_imp.h $(INCLDIR)/cs_imp.h $(INCLDIR)/ss_imp.h \
$(INCLDIR)/mailer_imp.h
! shared_connect.o: $(INCLDIR)/elm_defs.h \
$(INCLDIR)/shared_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/ss_imp.h $(INCLDIR)/mailer_imp.h
! shared_base.o: $(INCLDIR)/elm_defs.h \
$(INCLDIR)/shared_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/cs_imp.h
! shared_all.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h \
$(INCLDIR)/shared_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/cs_imp.h
! sb_file.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/sb_imp.h
! sb_mem.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/sb_imp.h
! schedule.o: $(INCLDIR)/elm_defs.h
! service_list.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h $(INCLDIR)/s_me.h \
$(INCLDIR)/mbx_imp.h $(INCLDIR)/shared_imp.h $(INCLDIR)/ss_imp.h
! shiftlower.o: $(INCLDIR)/elm_defs.h
! state.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h
! streamsched.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/ss_imp.h $(INCLDIR)/mbx_imp.h \
$(INCLDIR)/shared_imp.h
! strfcpy.o: $(INCLDIR)/elm_defs.h
! strftime.o: $(INCLDIR)/elm_defs.h
! string.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/shared_imp.h
! stringbuffer.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/sb_imp.h
! strmcpy.o: $(INCLDIR)/elm_defs.h
! strincmp.o: $(INCLDIR)/elm_defs.h
! striparens.o: $(INCLDIR)/elm_defs.h
! strtokq.o: $(INCLDIR)/elm_defs.h
! syscall.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_elm.h
! terminal.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h $(INCLDIR)/cs_terminal.h
! unicode.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/cs_imp.h \
$(INCLDIR)/unidata.h
! unidata.o: $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/unidata.h
! write_hdr.o: $(INCLDIR)/elm_defs.h
!NO!SUBS!
if $test "$d_shared" = "$define" ; then
Index: elmME+.2.5.alpha0-cvs/lib/mbox.c
*** elm2.4.ME+.115/lib/mbox.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/mbox.c 2004-05-01 10:41:05.000000000 +0300
***************
*** 1,21 ****
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.51 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.51 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
! * Based on code ../src/newmbox.c and ../src/lock.c.,
! * show_message_status() is based on show_status() on ../src/screen.c.
* That code was following copyright:
*
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
#include "mbx_imp.h"
#ifdef USE_DLOPEN
#include "shared_imp.h"
--- 1,29 ----
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.51.8.4 2004/05/01 07:41:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.51.8.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
! * Based on Elm 2.4 code src/newmbox.c and src/lock.c,
! * show_message_status() is based on show_status() on src/screen.c.
* That code was following copyright:
*
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/screen.c (show_message_status()):
+ * That code was following copyright:
+ *
+ * The Elm Mail System - $Revision: 1.51.8.4 $ $State: Exp $
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
#include "mbx_imp.h"
#ifdef USE_DLOPEN
#include "shared_imp.h"
***************
*** 144,150 ****
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct read_folder_state));
(*ptr) -> magic = RF_magic;
(*ptr) -> fbytes = 0;
--- 152,158 ----
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct read_folder_state));
(*ptr) -> magic = RF_magic;
(*ptr) -> fbytes = 0;
***************
*** 166,172 ****
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct read_folder_state));
free(*ptr);
*ptr = NULL;
--- 174,180 ----
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct read_folder_state));
free(*ptr);
*ptr = NULL;
***************
*** 605,610 ****
--- 613,619 ----
**/
struct stat bufX, *buf = NULL; /* stat command */
+ char ** inf = NULL;
if (in_mail)
*in_mail = in_none;
***************
*** 661,666 ****
--- 670,691 ----
}
}
+ inf = give_dt_path_as_elems(&incomingfolders,"incomingfolders");
+ if (inf) {
+ int i;
+
+ for (i = 0; inf[i]; i++) {
+ if (strcmp(filename,inf[i]) == 0) {
+
+ DPRINT(Debug,8,(&Debug,
+ "get_folder_type=SPOOL (on incomingfolders list)\n"));
+ return(SPOOL);
+
+ }
+ }
+ }
+
+
/* if file name == default mailbox, its a spool file also
* even if its not in the spool directory. (SVR4)
*/
***************
*** 839,845 ****
new_folder = safe_malloc(sizeof (struct folder_info));
/* defined in hdrs/defs.h */
! bzero(new_folder,sizeof (struct folder_info));
new_folder -> p = NULL;
new_folder -> cur_folder_sys = NULL;
--- 864,870 ----
new_folder = safe_malloc(sizeof (struct folder_info));
/* defined in hdrs/defs.h */
! bzero((void *)new_folder,sizeof (struct folder_info));
new_folder -> p = NULL;
new_folder -> cur_folder_sys = NULL;
***************
*** 2013,2019 ****
else if (hdr->status & EXPIRED) mybuffer[0] = 'E';
else if (hdr->status & NEW) mybuffer[0] = 'N';
else if (hdr->status & UNREAD) mybuffer[0] = 'O';
! else if (hdr->status & REPLIED) mybuffer[0] = 'r';
}
/** and the second... **/
--- 2038,2045 ----
else if (hdr->status & EXPIRED) mybuffer[0] = 'E';
else if (hdr->status & NEW) mybuffer[0] = 'N';
else if (hdr->status & UNREAD) mybuffer[0] = 'O';
! else if ((show_reply) &&
! (hdr->status & REPLIED_TO)) mybuffer[0] = 'r';
}
/** and the second... **/
Index: elmME+.2.5.alpha0-cvs/lib/mediatype.c
*** elm2.4.ME+.115/lib/mediatype.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/mediatype.c 2004-04-25 17:52:38.000000000 +0300
***************
*** 1,13 ****
! static char rcsid[] = "@(#)$Id: mediatype.c,v 1.12 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"config");
--- 1,13 ----
! static char rcsid[] = "@(#)$Id: mediatype.c,v 1.12.8.2 2004/04/25 14:52:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"config");
***************
Index: elmME+.2.5.alpha0-cvs/lib/mk_aliases.c
*** elm2.4.ME+.115/lib/mk_aliases.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/mk_aliases.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mk_aliases.c,v 1.11 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mk_aliases.c,v 1.11.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 27,33 ****
**/
! #include "headers.h"
#include "s_newalias.h"
#include "ndbz.h"
--- 27,33 ----
**/
! #include "elm_defs.h"
#include "s_newalias.h"
#include "ndbz.h"
Index: elmME+.2.5.alpha0-cvs/lib/mk_lockname.c
*** elm2.4.ME+.115/lib/mk_lockname.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/mk_lockname.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mk_lockname.c,v 1.5 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mk_lockname.c,v 1.5.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 12,21 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include <stdio.h>
! #include <fcntl.h>
! #include <errno.h>
! #include "headers.h"
static char lock_name[SLEN];
--- 12,18 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
static char lock_name[SLEN];
Index: elmME+.2.5.alpha0-cvs/lib/mmaputil.c
*** elm2.4.ME+.115/lib/mmaputil.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/mmaputil.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: mmaputil.c,v 1.5 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "mmaputil.h"
#include <errno.h>
#ifndef ANSI_C
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: mmaputil.c,v 1.5.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "mmaputil.h"
#include <errno.h>
#ifndef ANSI_C
Index: elmME+.2.5.alpha0-cvs/lib/move_left.c
*** elm2.4.ME+.115/lib/move_left.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/move_left.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: move_left.c,v 1.4 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: move_left.c,v 1.4.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 16,22 ****
**/
! #include "headers.h"
void move_left(string, chars)
--- 16,22 ----
**/
! #include "elm_defs.h"
void move_left(string, chars)
Index: elmME+.2.5.alpha0-cvs/lib/msgcat.c
*** elm2.4.ME+.115/lib/msgcat.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/msgcat.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,5 ****
!
! static char rcsid[] = "@(#)$Id: msgcat.c,v 1.4 2004/03/27 18:31:39 hurtta Exp $";
/* -*- c++ -*- */
--- 1,4 ----
! static char rcsid[] = "@(#)$Id: msgcat.c,v 1.4.8.1 2004/04/18 16:55:39 hurtta Exp $";
/* -*- c++ -*- */
***************
*** 50,56 ****
* to add an error handling routine.
*/
! #include "headers.h"
/*
#include "nl_types.h"
--- 49,55 ----
* to add an error handling routine.
*/
! #include "elm_defs.h"
/*
#include "nl_types.h"
Index: elmME+.2.5.alpha0-cvs/lib/ndbz.c
*** elm2.4.ME+.115/lib/ndbz.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/ndbz.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: ndbz.c,v 1.7 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: ndbz.c,v 1.7.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 44,50 ****
*/
! #include "headers.h"
#include <errno.h>
#ifndef ANSI_C
extern int errno;
--- 44,50 ----
*/
! #include "elm_defs.h"
#include <errno.h>
#ifndef ANSI_C
extern int errno;
Index: elmME+.2.5.alpha0-cvs/lib/okay_addr.c
*** elm2.4.ME+.115/lib/okay_addr.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/okay_addr.c 2004-05-01 23:07:50.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: okay_addr.c,v 1.17 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Reimplemented by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: okay_addr.c,v 1.17.8.3 2004/05/01 20:07:50 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17.8.3 $ $State: Exp $
*
* Reimplemented by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 18,24 ****
**/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"addr");
--- 18,24 ----
**/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"addr");
***************
*** 93,99 ****
int addr_is_user(addr)
char *addr;
{
! struct addr_rec *alternatives;
char our_address[SLEN];
char deqbuffer[SLEN];
--- 93,99 ----
int addr_is_user(addr)
char *addr;
{
! char **alternatives;
char our_address[SLEN];
char deqbuffer[SLEN];
***************
*** 181,231 ****
}
}
! alternatives = alternative_addresses;
! while (alternatives != NULL) {
! char * host_part2 = qstrpbrk(alternatives->address,"@");
! if (host_part2) {
! char * buffer2 =
! safe_malloc(host_part2 - alternatives->address +1);
! strncpy(buffer2,alternatives->address,
! host_part2 - alternatives->address);
! buffer2[host_part2 - alternatives->address] = '\0';
! DPRINT(Debug,27,(&Debug,
! "addr_is_user: %s: user part=%s, host part=%s\n",
! alternatives->address,buffer2,host_part2+1));
! if ((0 == strcmp(buffer,buffer2) ||
! 0 == strcmp(buffer1,buffer2)
! ) &&
! 0 == istrcmp(host_part2+1,host_part+1)) {
! DPRINT(Debug,25,(&Debug,
! "addr_is_user(\"%s\")=TRUE: matches alternative\n",
! addr));
! free(buffer2);
! free(buffer);
! free(buffer1); buffer1 = NULL;
! return(TRUE);
}
- free(buffer2);
}
- alternatives = alternatives->next;
}
free(buffer);
free(buffer1); buffer1 = NULL;
!
}
!
! alternatives = alternative_addresses;
! while (alternatives != NULL) {
! if (0 == strcmp(addr,alternatives->address)) {
! DPRINT(Debug,25,(&Debug,
! "addr_is_user(\"%s\")=TRUE: matches alternative address\n",
! addr));
! return(TRUE);
}
- alternatives = alternatives->next;
}
DPRINT(Debug,25,(&Debug,
"addr_is_user(\"%s\")=FALSE\n",addr));
--- 181,243 ----
}
}
! alternatives = give_dt_path_as_elems(&alternative_addresses,
! "alternatives");
! if (alternatives) {
!
! int i;
!
! for (i = 0; alternatives[i]; i++) {
! char * host_part2 = qstrpbrk(alternatives[i],"@");
!
! if (host_part2) {
! int LEN = host_part2 - alternatives[i];
! char * buffer2 = safe_malloc(LEN+1);
!
! strncpy(buffer2,alternatives[i], LEN);
! buffer2[LEN] = '\0';
! DPRINT(Debug,27,(&Debug,
! "addr_is_user: %s: user part=%s, host part=%s\n",
! alternatives[i],buffer2,host_part2+1));
! if ((0 == strcmp(buffer,buffer2) ||
! 0 == strcmp(buffer1,buffer2)
! ) &&
! 0 == istrcmp(host_part2+1,host_part+1)) {
! DPRINT(Debug,25,(&Debug,
! "addr_is_user(\"%s\")=TRUE: matches alternative\n",
! addr));
! free(buffer2);
! free(buffer);
! free(buffer1); buffer1 = NULL;
! return(TRUE);
! }
! free(buffer2);
}
}
}
free(buffer);
free(buffer1); buffer1 = NULL;
!
}
!
! alternatives = give_dt_path_as_elems(&alternative_addresses,
! "alternatives");
! if (alternatives) {
!
! int i;
!
! for (i = 0; alternatives[i]; i++) {
!
! if (0 == strcmp(addr,alternatives[i])) {
! DPRINT(Debug,25,(&Debug,
! "addr_is_user(\"%s\")=TRUE: matches alternative address\n",
! addr));
! return(TRUE);
! }
}
}
DPRINT(Debug,25,(&Debug,
"addr_is_user(\"%s\")=FALSE\n",addr));
Index: elmME+.2.5.alpha0-cvs/lib/opt_utils.c
*** elm2.4.ME+.115/lib/opt_utils.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/opt_utils.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: opt_utils.c,v 1.8 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: opt_utils.c,v 1.8.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 18,24 ****
**/
! #include "headers.h"
#include "s_error.h"
#ifdef PWDINSYS
--- 18,24 ----
**/
! #include "elm_defs.h"
#include "s_error.h"
#ifdef PWDINSYS
Index: elmME+.2.5.alpha0-cvs/lib/outheaders.c
*** elm2.4.ME+.115/lib/outheaders.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/outheaders.c 2004-04-25 17:52:38.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.14 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "hdr_imp.h"
#include "s_me.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.14.8.2 2004/04/25 14:52:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "hdr_imp.h"
#include "s_me.h"
Index: elmME+.2.5.alpha0-cvs/lib/output.c
*** elm2.4.ME+.115/lib/output.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/output.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: output.c,v 1.32 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.32 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"ui");
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: output.c,v 1.32.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.32.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"ui");
Index: elmME+.2.5.alpha0-cvs/lib/panic.c
*** elm2.4.ME+.115/lib/panic.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/panic.c 2004-04-18 19:55:39.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: panic.c,v 1.12 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
static void def_panic_prepare P_((CONST int interrupt,
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: panic.c,v 1.12.8.1 2004/04/18 16:55:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
static void def_panic_prepare P_((CONST int interrupt,
Index: elmME+.2.5.alpha0-cvs/lib/parsarpdat.c
*** elm2.4.ME+.115/lib/parsarpdat.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/parsarpdat.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: parsarpdat.c,v 1.9 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: parsarpdat.c,v 1.9.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 12,18 ****
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"header");
--- 12,18 ----
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"header");
Index: elmME+.2.5.alpha0-cvs/lib/pmalloc.c
*** elm2.4.ME+.115/lib/pmalloc.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/pmalloc.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pmalloc.c,v 1.8 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pmalloc.c,v 1.8.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 21,27 ****
**/
#include <stdio.h>
! #include "headers.h"
#include "s_elm.h"
DEBUG_VAR(Debug,__FILE__,"mem");
--- 21,27 ----
**/
#include <stdio.h>
! #include "elm_defs.h"
#include "s_elm.h"
DEBUG_VAR(Debug,__FILE__,"mem");
Index: elmME+.2.5.alpha0-cvs/lib/pop.c
*** elm2.4.ME+.115/lib/pop.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/pop.c 2004-05-01 10:41:05.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: pop.c,v 1.46 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
#include "s_me.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: pop.c,v 1.46.8.2 2004/05/01 07:41:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "ss_imp.h"
#include "mbx_imp.h"
#include "s_me.h"
***************
*** 127,133 ****
} else {
putc('O',F);
}
! if (ison(root->status, REPLIED)) {
putc('r',F);
}
fprintf(F," %s\n",root->uidl);
--- 127,133 ----
} else {
putc('O',F);
}
! if (ison(root->status, REPLIED_TO)) {
putc('r',F);
}
fprintf(F," %s\n",root->uidl);
***************
*** 225,231 ****
status |= NEW;
break;
case 'r':
! status |= REPLIED;
break;
}
}
--- 225,231 ----
status |= NEW;
break;
case 'r':
! status |= REPLIED_TO;
break;
}
}
Index: elmME+.2.5.alpha0-cvs/lib/posixsig.c
*** elm2.4.ME+.115/lib/posixsig.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/posixsig.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: posixsig.c,v 1.10 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: posixsig.c,v 1.10.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 16,22 ****
**/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"signal");
--- 16,22 ----
**/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"signal");
Index: elmME+.2.5.alpha0-cvs/lib/precompiled_sets.c
*** elm2.4.ME+.115/lib/precompiled_sets.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/precompiled_sets.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,13 ****
! static char rcsid[] = "@(#)$Id: precompiled_sets.c,v 1.23 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "defs.h"
! #include "elmlib.h"
#include "cs_imp.h"
#define INVARIANT &precompiled_sets[0]
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: precompiled_sets.c,v 1.23.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "cs_imp.h"
#define INVARIANT &precompiled_sets[0]
Index: elmME+.2.5.alpha0-cvs/lib/qstrings.c
*** elm2.4.ME+.115/lib/qstrings.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/qstrings.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: qstrings.c,v 1.6 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: qstrings.c,v 1.6.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 17,23 ****
**/
! #include "headers.h"
char *qstrpbrk(source, keys)
char *source, *keys;
--- 17,23 ----
**/
! #include "elm_defs.h"
char *qstrpbrk(source, keys)
char *source, *keys;
Index: elmME+.2.5.alpha0-cvs/lib/rc_handle.c
*** elm2.4.ME+.115/lib/rc_handle.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/rc_handle.c 2004-05-01 23:07:50.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.17 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.17.8.6 2004/05/01 20:07:50 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17.8.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
***************
*** 13,22 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
#include "rc_imp.h"
#include "save_opts.h"
#include "shared_imp.h"
#include "s_elm.h"
DEBUG_VAR(Debug,__FILE__,"config");
--- 13,24 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
#include "rc_imp.h"
#include "save_opts.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
#include "s_elm.h"
DEBUG_VAR(Debug,__FILE__,"config");
***************
*** 31,38 ****
&rc_DT_NUM == T ||
&rc_DT_BOL == T ||
&rc_DT_CHR == T ||
- &rc_DT_WEE == T ||
- &rc_DT_ALT == T ||
&rc_DT_SRT == T ||
&rc_DT_MLT == T ||
&rc_DT_ASR == T ||
--- 33,38 ----
***************
*** 422,597 ****
struct rc_type rc_DT_CHR = { dt_CHR_parse_line, BAD_parse_cline,
dt_CHR_print_value, dt_CHR_get_value };
- #ifdef ANSI_C
- static rc_parse_line dt_WEE_parse_line;
- #endif
- static int dt_WEE_parse_line(r,lcl,value,lineno,filename, e_val, negate)
- struct rc_save_info_rec *r;
- int lcl;
- char *value;
- int lineno;
- char *filename;
- int e_val;
- int negate;
- {
- if (negate) {
- lib_error(CATGETS(elm_msg_cat, ElmSet, ElmBadNegate,
- "!%s is not supported in line %d in \"%s\" file"),
- r->name,lineno,filename);
- return 0;
- }
-
- weedout(value);
- return 1;
- }
-
- #ifdef ANSI_C
- static rc_parse_cline dt_WEE_parse_cline;
- #endif
- static int dt_WEE_parse_cline(r,lcl,value,lineno,filename)
- struct rc_save_info_rec *r;
- int lcl;
- char *value;
- int lineno;
- char *filename;
- {
- weedout(value);
- return 1;
- }
-
- #if ANSI_C
- static rc_print_value dt_WEE_print_value;
- #endif
- static void dt_WEE_print_value(F,r,comment)
- FILE *F;
- struct rc_save_info_rec *r;
- int comment;
- {
- int len, i;
-
- if (comment)
- fprintf(F, "### ");
- fprintf(F, "%s =", r->name);
- len = strlen(r->name) + 6;
-
- i = 0;
- while (i < weedcount
- && istrcmp(weedlist[i], "*end-of-defaults*"))
- i++;
- while (i < weedcount
- && !istrcmp(weedlist[i], "*end-of-defaults*"))
- i++;
- if (i == 1) {
- /* end-of-defaults in the first position means
- ** that there are no defaults, i.e.
- ** a clear-weed-list has been done.
- */
- fprintf(F, " \"*clear-weed-list*\"");
- len += 20;
- }
-
- while (i <= weedcount) {
- char *w;
-
- w = (i < weedcount) ? weedlist[i]
- : "*end-of-user-headers*";
- if (strlen(w) + len > 72) {
- if (!comment)
- fprintf(F, "\n\t");
- else
- fprintf(F, "\n###\t");
- len = 8;
- }
- else {
- fprintf(F, " ");
- ++len;
- }
- fprintf(F, "\"%s\"", w);
- len += strlen(w) + 3;
- i++;
- }
- fprintf(F, "\n");
- }
-
- struct rc_type rc_DT_WEE = { dt_WEE_parse_line, dt_WEE_parse_cline,
- dt_WEE_print_value, NO_get_value };
-
- #ifdef ANSI_C
- static rc_parse_line dt_ALT_parse_line;
- #endif
- static int dt_ALT_parse_line(r,lcl,value,lineno,filename, e_val, negate)
- struct rc_save_info_rec *r;
- int lcl;
- char *value;
- int lineno;
- char *filename;
- int e_val;
- int negate;
- {
- if (negate) {
- lib_error(CATGETS(elm_msg_cat, ElmSet, ElmBadNegate,
- "!%s is not supported in line %d in \"%s\" file"),
- r->name,lineno,filename);
- return 0;
- }
-
- alternatives(value);
- return 1;
- }
-
- #ifdef ANSI_C
- static rc_parse_cline dt_ALT_parse_cline;
- #endif
- static int dt_ALT_parse_cline(r,lcl,value,lineno,filename)
- struct rc_save_info_rec *r;
- int lcl;
- char *value;
- int lineno;
- char *filename;
- {
- alternatives(value);
- return 1;
- }
-
- #if ANSI_C
- static rc_print_value dt_ALT_print_value;
- #endif
- static void dt_ALT_print_value(F,r,comment)
- FILE *F;
- struct rc_save_info_rec *r;
- int comment;
- {
- struct addr_rec *alts = *(r ->val.alts);
- int len=0;
-
- if (comment)
- fprintf(F, "### ");
- fprintf(F, "%s =", r->name);
- len = strlen(r->name) + 6;
- for ( ;alts; alts = alts->next) {
- if (strlen(alts->address) + len > 72) {
- if (!comment)
- fprintf(F, "\n\t");
- else
- fprintf(F, "\n###\t");
- len = 8;
- }
- else {
- fprintf(F, " ");
- ++len;
- }
- fprintf(F, "%s", alts->address);
- len += strlen(alts->address);
- }
- fprintf(F,"\n");
-
-
- }
-
- struct rc_type rc_DT_ALT = { dt_ALT_parse_line, dt_ALT_parse_cline,
- dt_ALT_print_value, NO_get_value };
-
-
static struct {
char *kw;
int sv;
--- 422,427 ----
***************
*** 720,726 ****
return 0;
}
! for (s = r->val.weed; *s; ++s) {
if (!do_set(lcl, *s, value, filename))
ok = 0;
}
--- 550,556 ----
return 0;
}
! for (s = r->val.mlt; *s; ++s) {
if (!do_set(lcl, *s, value, filename))
ok = 0;
}
***************
*** 1117,1122 ****
--- 947,954 ----
int is_sep_colon = ptr->flags & PATH_sep_colon;
int is_sep_space = 0 == recursive;
int is_quote_single = (ptr->flags & PATH_quote_single) && 0 == recursive;
+ int convert_underline = (ptr->flags & PATH_convert_underline)
+ && 0 == recursive;
char *p;
char * start_val = NULL;
***************
*** 1234,1239 ****
--- 1066,1079 ----
memcpy(value,start_val,Len);
value[Len] = '\0';
+ if (convert_underline) {
+ int i;
+
+ for (i = 0; i < Len; i++)
+ if ('_' == value[i])
+ value[i] = ' ';
+ }
+
start_val = NULL;
goto expand_value;
}
***************
*** 1263,1269 ****
int Len = p - start_val;
/* Split on quote */
! q = '"';
DPRINT(Debug,11,(&Debug,
"expand_dt_path (clip len=%d)=%.*s\n",
--- 1103,1109 ----
int Len = p - start_val;
/* Split on quote */
! q = '\'';
DPRINT(Debug,11,(&Debug,
"expand_dt_path (clip len=%d)=%.*s\n",
***************
*** 1285,1292 ****
expand_value:
if (is_expand) {
char buffer[1024];
! int v = expand_path(buffer,value,sizeof buffer);
if (v < 0) {
lib_error(CATGETS(elm_msg_cat, ElmSet,
--- 1125,1152 ----
expand_value:
if (is_expand) {
char buffer[1024];
+ int v;
! if (is_file || is_dir) {
!
! /* HACK -- we can't use expand_meta() because
! it do not return 1 when value is changed
! */
! if ('=' == value[0]) {
!
! char * t = safe_strdup(folders);
! int l = strlen(t);
!
! if (l > 0 && t[l-1] != '/' && value[1] != '/')
! t = strmcat(t,"/");
!
! t = strmcat(t,value+1);
! free(value);
! value = t;
! }
! }
!
! v = expand_path(buffer,value,sizeof buffer);
if (v < 0) {
lib_error(CATGETS(elm_msg_cat, ElmSet,
***************
*** 1313,1322 ****
value = strmcpy(value,buffer);
}
}
!
if (is_file || is_dir) {
struct stat S;
if ('/' != value[0]) {
if (0 == recursive) {
DPRINT(Debug,9,(&Debug,
--- 1173,1184 ----
value = strmcpy(value,buffer);
}
}
!
if (is_file || is_dir) {
struct stat S;
+
if ('/' != value[0]) {
+
if (0 == recursive) {
DPRINT(Debug,9,(&Debug,
***************
*** 1374,1380 ****
}
! if (is_dir &&
#ifdef S_ISREG
!S_ISREG(S.st_mode)
#else
--- 1236,1242 ----
}
! if (is_file &&
#ifdef S_ISREG
!S_ISREG(S.st_mode)
#else
***************
*** 1452,1457 ****
--- 1314,1320 ----
{
char *res,*p;
int sep;
+ int quote;
int i,L = 1;
if (!ptr->list && ptr->unexpanded)
***************
*** 1466,1483 ****
else if (ptr->flags & PATH_sep_colon) sep = ':';
else sep = ' ';
res = safe_malloc(L);
for (i = 0, p = res; i < ptr->nlen;i++) {
int l = strlen(ptr->list[i]);
! if (p+l+1 >= res+L)
panic("RC PANIC",__FILE__,__LINE__,"give_dt_path_as_str",
"Overflow",0);
if (i > 0)
*p++ = sep;
memcpy(p,ptr->list[i],l);
p += l;
}
*p = '\0';
--- 1329,1361 ----
else if (ptr->flags & PATH_sep_colon) sep = ':';
else sep = ' ';
+ if (ptr->flags & PATH_quote) quote = '"';
+ else if (ptr->flags & PATH_quote_single) quote = '\'';
+ else quote = 0;
+
+ if (quote)
+ L += ptr->nlen * 2;
+
res = safe_malloc(L);
for (i = 0, p = res; i < ptr->nlen;i++) {
int l = strlen(ptr->list[i]);
! if (p+l+1 + (quote ? 2 : 0) >= res+L)
panic("RC PANIC",__FILE__,__LINE__,"give_dt_path_as_str",
"Overflow",0);
if (i > 0)
*p++ = sep;
+
+ if (quote)
+ *p++ = quote;
+
memcpy(p,ptr->list[i],l);
p += l;
+
+ if (quote)
+ *p++ = quote;
+
}
*p = '\0';
***************
*** 1586,1596 ****
if (comment)
fprintf(F, "### ");
for (i = 0; i < r->val.path->nlen; i++) {
! if (0 == i)
! fprintf(F, "%s = ",r->name);
! else {
if (len + strlen(r->val.path->list[i]) > 70) {
fprintf(F, "\n");
if (comment)
--- 1464,1474 ----
if (comment)
fprintf(F, "### ");
+
+ fprintf(F, "%s = ",r->name);
for (i = 0; i < r->val.path->nlen; i++) {
! if (i > 0) {
if (len + strlen(r->val.path->list[i]) > 70) {
fprintf(F, "\n");
if (comment)
***************
*** 1603,1609 ****
}
if (r->val.path->flags & PATH_quote)
elm_fprintf(F,FRM("Q"),r->val.path->list[i]);
! else
fputs(r->val.path->list[i],F);
len += strlen(r->val.path->list[i]) + 1;
}
--- 1481,1491 ----
}
if (r->val.path->flags & PATH_quote)
elm_fprintf(F,FRM("Q"),r->val.path->list[i]);
! else if (r->val.path->flags & PATH_quote_single) {
! fputc('\'',F);
! fputs(r->val.path->list[i],F);
! fputc('\'',F);
! } else
fputs(r->val.path->list[i],F);
len += strlen(r->val.path->list[i]) + 1;
}
Index: elmME+.2.5.alpha0-cvs/lib/read_rc.c
*** elm2.4.ME+.115/lib/read_rc.c 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/read_rc.c 2004-05-15 23:11:36.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.133 2004/04/04 06:17:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.133 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.133.4.15 2004/05/15 20:11:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.133.4.15 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 14,20 ****
*****************************************************************************/
#define SAVE_OPTS
! #include "headers.h"
#include "rc_imp.h"
#include "save_opts.h"
#include "s_elm.h"
--- 14,20 ----
*****************************************************************************/
#define SAVE_OPTS
! #include "elm_defs.h"
#include "rc_imp.h"
#include "save_opts.h"
#include "s_elm.h"
***************
*** 48,55 ****
# endif
#define ASSIGNMENT 0
- #define WEEDOUT 1
- #define ALTERNATIVES 2
#define SYSTEM_RC 0
#define LOCAL_RC 1
--- 48,53 ----
***************
*** 88,102 ****
char system_mail_services[SLEN] = SYSTEM_MAIL_SERVICES;
char hostdomfile[SLEN] = HOSTDOMFILE;
char system_mime_charsets[SLEN] = SYSTEM_MIME_CHARSETS;
! char map_txtdir[SLEN] = {0}; /* init_defaults */
char raw_map_txtdir[SLEN] = "{lib}/elm.map.txt";
! char map_bindir[SLEN] = {0}; /* init_defaults */
char raw_map_bindir[SLEN] = "{lib}/elm.map.bin";
! char unidata_path[SLEN] = {0}; /* init_defaults */
char raw_unidata_path[SLEN] = "unidata.bin"; /* init_defaults */
! char bindata_path_global[SLEN] = {0}; /* Used before user elm.rc is read */
! char bindata_path[SLEN] = {0}; /* init_defaults */
char raw_bindata_path[SLEN] = "bindata.bin"; /* init_defaults */
--- 86,100 ----
char system_mail_services[SLEN] = SYSTEM_MAIL_SERVICES;
char hostdomfile[SLEN] = HOSTDOMFILE;
char system_mime_charsets[SLEN] = SYSTEM_MIME_CHARSETS;
! char map_txtdir[SLEN]; /* init_defaults */
char raw_map_txtdir[SLEN] = "{lib}/elm.map.txt";
! char map_bindir[SLEN]; /* init_defaults */
char raw_map_bindir[SLEN] = "{lib}/elm.map.bin";
! char unidata_path[SLEN]; /* init_defaults */
char raw_unidata_path[SLEN] = "unidata.bin"; /* init_defaults */
! char bindata_path_global[SLEN]; /* Used before user elm.rc is read */
! char bindata_path[SLEN]; /* init_defaults */
char raw_bindata_path[SLEN] = "bindata.bin"; /* init_defaults */
***************
*** 111,199 ****
char user_terminal_info[SLEN] = USER_TERMINAL_INFO; /* user_init fixes */
char user_mail_services[SLEN] = USER_MAIL_SERVICES; /* user_init fixes */
! char defaultfile[SLEN] = {0}; /* name of default folder */
char raw_defaultfile[SLEN] = "$MAIL"; /* init_defaults fixes */
! char calendar_file[SLEN] = {0}; /* name of file for clndr */
! char raw_calendar_file[SLEN] = {0}; /* unexpanded name of file for clndr */
! int clear_pages = 0; /* flag: act like "page" (more -c)? */
int title_messages = 1; /* flag: title message display? */
! nl_catd elm_msg_cat = 0; /* message catalog */
/* WARNING: Elm's version uses 0 as failure
System uses (nl_catd) -1 as failure !
*/
! char username[SLEN] = {0}; /* return address name! */
! char home[SLEN] = {0}; /* home directory of user */
int userid = -1; /* uid for current user */
int groupid = -1; /* groupid for current user */
int mailgroupid; /* groupid for current user */
! int have_saved_ids = 0; /* sysconf _SC_SAVED_IDS */
/* ------------- Variables in elmrc ------------------------------- */
! int add_irt_phrase = 0; /* In-reply-to: Add phare to in-reply-to ?
True = Do not follow RFC 2822
*/
int add_sender_header = 1; /* If set add Sender: header if user specifies
From: -header
*/
! int allow_charset_switching=0; /* flag: allow changing charset of */
/* terminal if terminal supports */
int alias_sortby = NAME_SORT; /* how to sort aliases... */
char alternative_editor[SLEN] = "EDITOR"; /* alternative editor... */
! struct addr_rec *alternative_addresses; /* how else do we get mail? */
! int always_del = 0; /* flag: always delete marked msgs? */
int always_keep = 1; /* flag: always keep unread msgs? */
! int always_store = 0; /* flag: always store read msgs? */
! int arrow_cursor = 0; /* flag: use "->" cursor regardless?*/
! int question_me = 1; /* flag: ask questions as we leave? */
int prompt_for_cc = 1; /* flag: ask user for "cc:" value? */
#ifdef USE_PGP
! int pgp_askpgpsig=0; /* Should pgp ask userid to sign messages with? */
! int pgp_sign_type=0; /* 0 = application/pgp
1 = text/plain
2 = text/x-pgp
*/
enum pgp_version send_pgp_version = pgp_none; /* preferred pgp version*/
#endif
! char attribution[SLEN] = {0}; /* attribution string for replies */
int auto_attachment = 1; /* 0 = none,
1 = application,
2 = non-text
*/
! int auto_copy = 0; /* flag: automatically copy source? */
int auto_iso_8859 = 1; /* flag: Should ISO-8859-X charsets defined
on demand ? */
#ifdef BACKGROUD_PROCESSES
int background_wait_time = 2; /* If > 0 background mailer after */
/* this number of seconds */
#endif
! /* int bounceback = 0; */ /* flag: bounce copy off remote? */
int browser_wildcards = 1; /* flag: do wildcard match? */
int builtin_lines= -3; /* int: if < 0 use builtin if message*/
/* shorter than LINES+builtin_lines */
/* else use pager. If > 0 use builtin*/
/* if message has fewer than # of lines*/
! int charset_convert_ok = 0; /* flag: no warning about conversion? */
char raw_text_charset[SLEN] = "DISPLAY"; /* name of character set */
! charset_t text_charset = NULL; /* pointer of character set */
char raw_default_mimetext_charset[SLEN] = "US-ASCII";
/* name of character set */
! charset_t default_mimetext_charset = NULL; /* pointer to character set */
char raw_default_nomime_charset[SLEN] = "SYSTEM"; /* name of character set */
! charset_t default_nomime_charset = NULL; /* pointer to character set */
int def_folder_status = FOLDER_STATUS_OLD; /* 0 = Read
1 = Old
2 = New
*/
! char config_options[SLEN] = {0};/* which options are in o)ptions */
! int confirm_append = 0; /* flag: confirm append to folder? */
! int confirm_create = 0; /* flag: confirm create new folder? */
! int confirm_files = 0; /* flag: confirm files for append? */
! int confirm_folders = 0; /* flag: confirm folders for create?*/
int convert_comment = 1; /* flag: convert comment to fullname ? */
int convert_utf_header = 1; /* flag: convert utf-8 mime encoded words to utf-7 when sending? */
--- 109,211 ----
char user_terminal_info[SLEN] = USER_TERMINAL_INFO; /* user_init fixes */
char user_mail_services[SLEN] = USER_MAIL_SERVICES; /* user_init fixes */
! char defaultfile[SLEN]; /* name of default folder */
char raw_defaultfile[SLEN] = "$MAIL"; /* init_defaults fixes */
! char calendar_file[SLEN]; /* name of file for clndr */
! char raw_calendar_file[SLEN]; /* unexpanded name of file for clndr */
! int clear_pages; /* flag: act like "page" (more -c)? */
int title_messages = 1; /* flag: title message display? */
! nl_catd elm_msg_cat; /* message catalog */
/* WARNING: Elm's version uses 0 as failure
System uses (nl_catd) -1 as failure !
*/
! char username[SLEN]; /* return address name! */
! char home[SLEN]; /* home directory of user */
int userid = -1; /* uid for current user */
int groupid = -1; /* groupid for current user */
int mailgroupid; /* groupid for current user */
! int have_saved_ids; /* sysconf _SC_SAVED_IDS */
/* ------------- Variables in elmrc ------------------------------- */
! int add_irt_phrase; /* In-reply-to: Add phare to in-reply-to ?
True = Do not follow RFC 2822
*/
int add_sender_header = 1; /* If set add Sender: header if user specifies
From: -header
*/
! int allow_charset_switching; /* flag: allow changing charset of */
/* terminal if terminal supports */
+ int allow_setuid;
int alias_sortby = NAME_SORT; /* how to sort aliases... */
char alternative_editor[SLEN] = "EDITOR"; /* alternative editor... */
! PATH alternative_addresses = { /* how else do we get mail? */
! PATH_sep_comma|PATH_quote|PATH_quote_single,
! NULL, 0,NULL
! };
!
! int always_del; /* flag: always delete marked msgs? */
int always_keep = 1; /* flag: always keep unread msgs? */
! int always_store; /* flag: always store read msgs? */
!
! int ask_delete = 1; /* confirm delete on resync? */
! int ask_keep = 1; /* ask to keep unread msgs? */
! int ask_reply_copy = 1; /* ask to copy mssg into reply? */
! int ask_store = 1; /* ask to store read mail? */
!
! int arrow_cursor; /* flag: use "->" cursor regardless?*/
!
int prompt_for_cc = 1; /* flag: ask user for "cc:" value? */
#ifdef USE_PGP
! int pgp_askpgpsig; /* Should pgp ask userid to sign messages with? */
! int pgp_sign_type; /* 0 = application/pgp
1 = text/plain
2 = text/x-pgp
*/
enum pgp_version send_pgp_version = pgp_none; /* preferred pgp version*/
#endif
! char attribution[SLEN]; /* attribution string for replies */
! char fwdattribution[SLEN]; /* attribution string for forwarded mssgs */
int auto_attachment = 1; /* 0 = none,
1 = application,
2 = non-text
*/
! int reply_copy = 1; /* flag: copy message into reply */
int auto_iso_8859 = 1; /* flag: Should ISO-8859-X charsets defined
on demand ? */
#ifdef BACKGROUD_PROCESSES
int background_wait_time = 2; /* If > 0 background mailer after */
/* this number of seconds */
#endif
! /* int bounceback; */ /* flag: bounce copy off remote? */
int browser_wildcards = 1; /* flag: do wildcard match? */
int builtin_lines= -3; /* int: if < 0 use builtin if message*/
/* shorter than LINES+builtin_lines */
/* else use pager. If > 0 use builtin*/
/* if message has fewer than # of lines*/
! int charset_convert_ok; /* flag: no warning about conversion? */
char raw_text_charset[SLEN] = "DISPLAY"; /* name of character set */
! charset_t text_charset; /* pointer of character set */
char raw_default_mimetext_charset[SLEN] = "US-ASCII";
/* name of character set */
! charset_t default_mimetext_charset; /* pointer to character set */
char raw_default_nomime_charset[SLEN] = "SYSTEM"; /* name of character set */
! charset_t default_nomime_charset; /* pointer to character set */
int def_folder_status = FOLDER_STATUS_OLD; /* 0 = Read
1 = Old
2 = New
*/
! char config_options[SLEN];/* which options are in o)ptions */
! int confirm_append; /* flag: confirm append to folder? */
! int confirm_create; /* flag: confirm create new folder? */
! int confirm_files; /* flag: confirm files for append? */
! int confirm_folders; /* flag: confirm folders for create?*/
! int confirm_tag_save = 1; /* flag: confirm saving of tagged messages */
! int edit_flush = 1; /* flag: flush input after extern edit? */
int convert_comment = 1; /* flag: convert comment to fullname ? */
int convert_utf_header = 1; /* flag: convert utf-8 mime encoded words to utf-7 when sending? */
***************
*** 201,239 ****
char display_locale[SLEN] = "NONE"; /* LC_CTYPE locale (character set) */
char display_codeset[SLEN] = ""; /* nl_langinfo(CODESET) for current locale (character set) */
! charset_t wanted_display_charset = NULL;
char raw_display_charset[SLEN] = "SYSTEM";
/* the wanted display charset set */
! int DSN_success = 0; /* flag: Ask successfull DSNes */
! char e_editor[SLEN] = {0}; /* "~e" editor... */
! char editor[SLEN] = {0}; /* editor for outgoing mail*/
! int env_from_source = 0; /* 0 == forward-from,
1 == from,
2 == return-path
*/
! char raw_editor[SLEN] = {0}; /* unexpanded editor for outgoing mail*/
char escape_char = TILDE_ESCAPE;/* '~' or something else.. */
! int force_name = 0; /* flag: save by name forced? */
int fragment_handling = 1; /* 0 == none,
1 == manual,
2 == auto */
int allow_forms = NO; /* flag: are AT&T Mail forms okay? */
! char full_username[SLEN] = {0}; /* Full username - gecos */
! int phrase_display_mode = 0; /* 0 == plain, 1 = quoted */
! char hostdomain[SLEN] = {0}; /* name of domain we're in */
! char hostfullname[SLEN] = {0}; /* name of FQDN we're in */
! char hostname[SLEN] = {0}; /* name of machine we're on */
#ifdef DISP_HOST
int menu_display_host = TRUE; /* flag: Display host on mailbox menu* */
#else
int menu_display_host = FALSE; /* flag: Display host on mailbox menu? */
#endif
! int keep_empty_files = 0; /* flag: leave empty folder files? */
#ifdef USE_PGP
int pgp_keeppassfor = 300; /* 5 minutes */
#endif
! int local_fast_lookup = 0; /* flag: directory listing not needed
for lookup */
char local_sessionlock_dir[SLEN] = default_temp;
int local_sessionlock_use_home; /* 0 == newer,
--- 213,251 ----
char display_locale[SLEN] = "NONE"; /* LC_CTYPE locale (character set) */
char display_codeset[SLEN] = ""; /* nl_langinfo(CODESET) for current locale (character set) */
! charset_t wanted_display_charset;
char raw_display_charset[SLEN] = "SYSTEM";
/* the wanted display charset set */
! int DSN_success; /* flag: Ask successfull DSNes */
! char e_editor[SLEN]; /* "~e" editor... */
! char editor[SLEN]; /* editor for outgoing mail*/
! int env_from_source; /* 0 == forward-from,
1 == from,
2 == return-path
*/
! char raw_editor[SLEN]; /* unexpanded editor for outgoing mail*/
char escape_char = TILDE_ESCAPE;/* '~' or something else.. */
! int force_name; /* flag: save by name forced? */
int fragment_handling = 1; /* 0 == none,
1 == manual,
2 == auto */
int allow_forms = NO; /* flag: are AT&T Mail forms okay? */
! char full_username[SLEN]; /* Full username - gecos */
! int phrase_display_mode; /* 0 == plain, 1 = quoted */
! char hostdomain[SLEN]; /* name of domain we're in */
! char hostfullname[SLEN]; /* name of FQDN we're in */
! char hostname[SLEN]; /* name of machine we're on */
#ifdef DISP_HOST
int menu_display_host = TRUE; /* flag: Display host on mailbox menu* */
#else
int menu_display_host = FALSE; /* flag: Display host on mailbox menu? */
#endif
! int keep_empty_files; /* flag: leave empty folder files? */
#ifdef USE_PGP
int pgp_keeppassfor = 300; /* 5 minutes */
#endif
! int local_fast_lookup; /* flag: directory listing not needed
for lookup */
char local_sessionlock_dir[SLEN] = default_temp;
int local_sessionlock_use_home; /* 0 == newer,
***************
*** 242,269 ****
3 == non-spool
*/
char raw_local_fs_charset[SLEN] = "SYSTEM"; /* filesystem charset */
! charset_t local_fs_charset = NULL; /* filesystem charset */
! char local_signature[SLEN] = {0}; /* local msg signature file */
! char raw_local_signature[SLEN] = {0}; /* unexpanded local msg */
/* signature file */
#ifdef SYSCALL_LOCKING
int lockfolders = 1; /* Lock folder when open */
int lock_in_copy = 1; /* Lock folder when copied to it */
#else
! int lockfolders = 0; /* Lock folder when open */
! int lock_in_copy = 0; /* Lock folder when copied to it */
#endif
! char folders[SLEN] = {0}; /* folder home directory */
! char raw_folders[SLEN] = {0}; /* unexpanded folder home directory */
! char extra_mailbox_dir[SLEN] = {0};
! char raw_extra_mailbox_dir[SLEN] = {0};
! char raw_attachment_dir[SLEN] = {0};
! char attachment_dir[SLEN] = {0}; /* {doc} -prefix */
int mail_permissions = 0600; /* int: permissions for mailbox files */
int mini_menu = 1; /* flag: menu specified? */
! int message_hide_hack = 0; /* 0 == none */
/* 1 = FOLDER INTERNAL DATA */
char raw_metamail_path[SLEN] = METAMAIL_PATH;
char metamail_path[SLEN] = "metamail"; /* Metamail path or "none" */
--- 254,281 ----
3 == non-spool
*/
char raw_local_fs_charset[SLEN] = "SYSTEM"; /* filesystem charset */
! charset_t local_fs_charset; /* filesystem charset */
! char local_signature[SLEN]; /* local msg signature file */
! char raw_local_signature[SLEN]; /* unexpanded local msg */
/* signature file */
#ifdef SYSCALL_LOCKING
int lockfolders = 1; /* Lock folder when open */
int lock_in_copy = 1; /* Lock folder when copied to it */
#else
! int lockfolders; /* Lock folder when open */
! int lock_in_copy; /* Lock folder when copied to it */
#endif
! char folders[SLEN]; /* folder home directory */
! char raw_folders[SLEN]; /* unexpanded folder home directory */
! char extra_mailbox_dir[SLEN];
! char raw_extra_mailbox_dir[SLEN];
! char raw_attachment_dir[SLEN];
! char attachment_dir[SLEN]; /* {doc} -prefix */
int mail_permissions = 0600; /* int: permissions for mailbox files */
int mini_menu = 1; /* flag: menu specified? */
! int message_hide_hack; /* 0 == none */
/* 1 = FOLDER INTERNAL DATA */
char raw_metamail_path[SLEN] = METAMAIL_PATH;
char metamail_path[SLEN] = "metamail"; /* Metamail path or "none" */
***************
*** 282,310 ****
0,
NULL, 0, NULL
};
! int internal_mailcap_t_prompt = 0;
! int metoo = 0; /* flag: copy me on mail to alias? */
int mime_body_keywords = TRUE; /* flag: parse body looking for encode */
/* keywords */
int mimeforward = FALSE; /* flag: Forward as Message/rfc822 */
! int move_when_paged = 0; /* flag: move when '+' or '-' used? */
int names_only = 1; /* flag: display user names only? */
! int allow_no_encoding = 0; /* 1: Allow 8bit without -B8BITMIME */
/* 2: Allow binary without -BBINARYMIME and */
/* and 8bit without -B8BITMIME */
! int allow_no_hdrencoding = 0; /* TRUE, if header encoding is */
/* not required */
int noheader = 1; /* flag: copy + header to file? */
! int noheaderfwd = 0; /* flag: copy + header to file(fwd)? */
int pagealternative=1; /* Page if alternative have one know*/
/* subtype ? */
int page_known_charsets=1; /* Page if charset is not unknown? */
! int pagemultipart=0; /* Page unknown mime subparts? */
! int pagesigned=0; /* Page unknown signed protocols? */
! char pager[SLEN] = {0}; /* what pager to use */
! char raw_pager[SLEN] = {0}; /* unexpanded what pager to use */
#ifdef USE_PGP
char pgp2_path[SLEN] = "none"; /* Pgp path or "none" if no pgp */
char raw_pgp2_path[SLEN] = PGP2_PATH;
--- 294,326 ----
0,
NULL, 0, NULL
};
! int internal_mailcap_t_prompt;
+ PATH incomingfolders = { /* treate as mailbox */
+ PATH_file|PATH_expand|PATH_sep_comma,
+ NULL, 0, NULL
+ };
! int metoo; /* flag: copy me on mail to alias? */
int mime_body_keywords = TRUE; /* flag: parse body looking for encode */
/* keywords */
int mimeforward = FALSE; /* flag: Forward as Message/rfc822 */
! int move_when_paged; /* flag: move when '+' or '-' used? */
int names_only = 1; /* flag: display user names only? */
! int allow_no_encoding; /* 1: Allow 8bit without -B8BITMIME */
/* 2: Allow binary without -BBINARYMIME and */
/* and 8bit without -B8BITMIME */
! int allow_no_hdrencoding; /* TRUE, if header encoding is */
/* not required */
int noheader = 1; /* flag: copy + header to file? */
! int noheaderfwd; /* flag: copy + header to file(fwd)? */
int pagealternative=1; /* Page if alternative have one know*/
/* subtype ? */
int page_known_charsets=1; /* Page if charset is not unknown? */
! int pagemultipart; /* Page unknown mime subparts? */
! int pagesigned; /* Page unknown signed protocols? */
! char pager[SLEN]; /* what pager to use */
! char raw_pager[SLEN]; /* unexpanded what pager to use */
#ifdef USE_PGP
char pgp2_path[SLEN] = "none"; /* Pgp path or "none" if no pgp */
char raw_pgp2_path[SLEN] = PGP2_PATH;
***************
*** 314,351 ****
char raw_gpg_path[SLEN] = GPG_PATH;
#endif
int point_to_new = 1; /* flag: start pointing at new msg? */
! char allowed_precedences[SLEN] = {0}; /* list of precedences user */
/* may specify */
char prefixchars[SLEN] = "> "; /* prefix char(s) for msgs */
! char printout[SLEN] = {0}; /* how to print messages */
char raw_printout[SLEN] = DEFAULT_PRINTOUT;
/* unexpanded how to print messages */
int prompt_after_pager = 1; /* flag: prompt after pager exits */
int prompt_after_metamail = 1; /* flag: prompt after metamail exits */
! int quote_forward = 0; /* flag: fwd'd msgs quoted like replies */
int readdatapercentinc = 5; /* data percent increment during new mbox read */
int readmsginc = 100; /* increment of msg cnt when reading*/
/* new mbox */
! char recvd_mail[SLEN] = {0}; /* folder for storing received mail */
! char raw_recvdmail[SLEN] = {0}; /* unexpanded recvd_mail name */
! char remote_signature[SLEN] = {0}; /* remote msg signature file */
! char raw_remote_signature[SLEN] = {0}; /* unexpanded remote msg */
/* signature file */
int req_mime_bodyencoding = 1; /* */
! int req_mime_hdrencoding = 0; /* */
int resolve_mode = 1; /* flag: delete saved mail? */
int save_by_name = 1; /* flag: save mail by login name? */
! char sent_mail[SLEN] = {0}; /* name of file to save copies to */
int send_mime_plain = 1; /* flag: send plain text as MIME? */
! char raw_sentmail[SLEN] = {0}; /* unexpanded name of file to save to*/
! char shell[SLEN] = {0}; /* current system shell */
! char raw_shell[SLEN] = {0}; /* unexpanded current system shell */
! int set_window_title = 0; /* flag: set (xterm?) window title and
icon name */
#ifdef USE_PGP
int pgp_noarmor=1; /* Should Elm display text before PGP armor */
#endif
! int showto = 0; /* */
int show_header_errors = 1; /* flag: should some header reported? */
int sig_dashes = 1; /* flag: include dashes above sigs? */
int sleepmsg = 2; /* time to sleep for messages being */
--- 330,371 ----
char raw_gpg_path[SLEN] = GPG_PATH;
#endif
int point_to_new = 1; /* flag: start pointing at new msg? */
! char allowed_precedences[SLEN]; /* list of precedences user */
/* may specify */
char prefixchars[SLEN] = "> "; /* prefix char(s) for msgs */
! char printout[SLEN]; /* how to print messages */
char raw_printout[SLEN] = DEFAULT_PRINTOUT;
/* unexpanded how to print messages */
+ char printhdrs[SLEN];
int prompt_after_pager = 1; /* flag: prompt after pager exits */
int prompt_after_metamail = 1; /* flag: prompt after metamail exits */
! int quote_forward; /* flag: fwd'd msgs quoted like replies */
int readdatapercentinc = 5; /* data percent increment during new mbox read */
int readmsginc = 100; /* increment of msg cnt when reading*/
/* new mbox */
! char recvd_mail[SLEN]; /* folder for storing received mail */
! char raw_recvdmail[SLEN]; /* unexpanded recvd_mail name */
! char remote_signature[SLEN]; /* remote msg signature file */
! char raw_remote_signature[SLEN]; /* unexpanded remote msg */
/* signature file */
int req_mime_bodyencoding = 1; /* */
! int req_mime_hdrencoding; /* */
int resolve_mode = 1; /* flag: delete saved mail? */
int save_by_name = 1; /* flag: save mail by login name? */
! int save_by_alias = 1; /* save mail by alias of login name? */
! char sent_mail[SLEN]; /* name of file to save copies to */
int send_mime_plain = 1; /* flag: send plain text as MIME? */
! char raw_sentmail[SLEN]; /* unexpanded name of file to save to*/
! char shell[SLEN]; /* current system shell */
! char raw_shell[SLEN]; /* unexpanded current system shell */
! int set_window_title; /* flag: set (xterm?) window title and
icon name */
#ifdef USE_PGP
int pgp_noarmor=1; /* Should Elm display text before PGP armor */
#endif
! int showto; /* */
! int show_reply = 1; /* flag: show 'r' for replied mail */
! int show_mlists; /* show mailing list info? */
int show_header_errors = 1; /* flag: should some header reported? */
int sig_dashes = 1; /* flag: include dashes above sigs? */
int sleepmsg = 2; /* time to sleep for messages being */
***************
*** 355,378 ****
long elm_timeout = 600L; /* timeout (secs) on main prompt */
int sort_thread_max_time = 30; /* Number of days which can considered
be same thread */
! char temp_dir[SLEN] = {0}; /* name of temp directory */
! char raw_temp_dir[SLEN] = {0}; /* unexpanded name of temp directory*/
#ifdef USE_PGP
! int pgp_keeppass=0; /* should Elm keep the passphrase in*/
/* memory? */
#endif
! int user_level = 0; /* flag: how good is the user? */
int use_tite = 1; /* flag: use termcap/terminfo ti/te?*/
int utf7_encode_optional = 1; /* flag: Should utf7 optional direct
characters to be encoded? */
! char v_editor[SLEN] = {0}; /* "~v" editor... */
int elm_filter = 1; /* flag: weed out header lines? */
! char *weedlist[MAX_IN_WEEDLIST] = {0}; /* */
! int weedcount; /* */
#ifdef REMOTE_MBX
char raw_imap_charset[SLEN] = "SYSTEM"; /* IMAP foldername charset */
! int imap_fast_lookup = 0; /* flag: skip some directory listing */
int imap_max_dl_size = 4*1024; /* Maximum size of message to be
* downloaded
*/
--- 375,402 ----
long elm_timeout = 600L; /* timeout (secs) on main prompt */
int sort_thread_max_time = 30; /* Number of days which can considered
be same thread */
! char to_chars[SLEN] = DEFAULT_TO_CHARS; /* chars to indicate who mail is to */
! char temp_dir[SLEN]; /* name of temp directory */
! char raw_temp_dir[SLEN]; /* unexpanded name of temp directory*/
#ifdef USE_PGP
! int pgp_keeppass; /* should Elm keep the passphrase in*/
/* memory? */
#endif
! int user_level; /* flag: how good is the user? */
int use_tite = 1; /* flag: use termcap/terminfo ti/te?*/
int utf7_encode_optional = 1; /* flag: Should utf7 optional direct
characters to be encoded? */
! char v_editor[SLEN]; /* "~v" editor... */
int elm_filter = 1; /* flag: weed out header lines? */
! PATH weedlist = {
! PATH_sep_comma|PATH_quote|PATH_convert_underline,
! NULL, 0,NULL
! };
!
#ifdef REMOTE_MBX
char raw_imap_charset[SLEN] = "SYSTEM"; /* IMAP foldername charset */
! int imap_fast_lookup; /* flag: skip some directory listing */
int imap_max_dl_size = 4*1024; /* Maximum size of message to be
* downloaded
*/
***************
*** 692,698 ****
return;
}
! if (0 == strcmp(lc_ctype,"C"))
system_charset = MIME_name_to_charset("US-ASCII",
CHARSET_create);
else if (0 == istrcmp(lc_ctype,"ASCII") ||
--- 716,760 ----
--- 779,787 ----
FRM("ISO-8859-%d"),
val);
system_charset = MIME_name_to_charset(buffer,CHARSET_create);
+
+ /* 3) ------ guess based on charset part of locale ------------------------ */
+
} else if (charset && (0 == istrcmp(charset,"ASCII") ||
0 == istrcmp(charset,"US-ASCII")))
system_charset = MIME_name_to_charset("US-ASCII",
***************
*** 888,895 ****
#endif
#endif
- static void default_weedlist P_((void));
-
static int figure_domain P_((void));
static int figure_domain()
{
--- 953,958 ----
***************
*** 1013,1019 ****
*/
- default_weedlist();
errors = 0;
/*
--- 1076,1081 ----
***************
*** 1081,1087 ****
strfcpy(raw_defaultfile, "$MAIL", sizeof raw_defaultfile);
strfcpy(defaultfile, cp, sizeof defaultfile);
}
- alternative_addresses = NULL; /* none yet! */
raw_local_signature[0] = raw_remote_signature[0] =
local_signature[0] = remote_signature[0] =
--- 1143,1148 ----
***************
*** 2141,2286 ****
return eval_option(save_info,NUMBER_OF_SAVEABLE_OPTIONS,
lcl,word1,word2,filename);
}
-
- void weedout(string)
- char *string;
- {
- /** This routine is called with a list of headers to weed out. **/
! char *strptr, *header, *p;
! int Len;
! int finished;
!
! finished = FALSE;
! strptr = string;
! while (!finished && (header = strtokq(strptr, "\t ,", TRUE)) != NULL) {
! strptr = NULL;
!
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha0.patch.gz
and elm-ME+2.5.alpha0.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha0.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha0.tar.gz >
via WWW.
Before applying patch catenate part 1 - 5 first.
This patch is agaist Elm 2.4ME+ PL115 (25) --------- [ part 4/5 ] ---------
! if (!*header)
! continue;
!
! for (p = header; *p; ++p) {
! if (*p == '_')
! *p = ' ';
! }
! if (! istrcmp(header, "*end-of-user-headers*"))
! break;
! if (! istrcmp(header, "*end-of-defaults*"))
! finished = TRUE;
! if (! istrcmp(header, "*clear-weed-list*")) {
! while (weedcount)
! free(weedlist[--weedcount]);
! header = "*end-of-defaults*";
! }
!
! if (matches_weedlist(header))
! continue;
!
! if (weedcount > MAX_IN_WEEDLIST) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmTooManyWeedHeaders,
! "Too many weed headers! Leaving..."));
! exit(1);
! }
! Len = strlen(header) + 1;
! if ((p = malloc(Len)) == NULL) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmTooManyWeedPmalloc,
! "Too many weed headers! Out of memory! Leaving..."));
! exit(1);
! }
! strfcpy(p, header, Len);
! weedlist[weedcount++] = p;
! }
! }
! void alternatives(string)
! char *string;
! {
! /** This routine is called with a list of alternative addresses
! that you may receive mail from (forwarded) **/
! char *strptr, *address;
! struct addr_rec *current_record, *previous_record;
! previous_record = alternative_addresses; /* start 'er up! */
! /* move to the END of the alternative addresses list */
! if (previous_record != NULL)
! while (previous_record->next != NULL)
! previous_record = previous_record->next;
!
! strptr = (char *) string;
!
! while ((address = strtok(strptr, "\t ,\"'")) != NULL) {
! if (previous_record == NULL) {
! previous_record = (struct addr_rec *) pmalloc(sizeof
! *alternative_addresses);
!
! strfcpy(previous_record->address, address,
! sizeof previous_record->address);
! previous_record->next = NULL;
! alternative_addresses = previous_record;
! }
! else {
! current_record = (struct addr_rec *) pmalloc(sizeof
! *alternative_addresses);
!
! strfcpy(current_record->address, address,
! sizeof current_record->address);
! current_record->next = NULL;
! previous_record->next = current_record;
! previous_record = current_record;
! }
! strptr = (char *) NULL;
}
- }
! static void default_weedlist()
! {
! /** Install the default headers to weed out! Many gracious
! thanks to John Lebovitz for this dynamic method of
! allocation!
! **/
!
! static char *default_list[] = { ">From", "In-Reply-To:",
! "References:", "Newsgroups:", "Received:",
! "Apparently-To:", "Message-Id:", "Content-Type:",
! "Content-Length", "MIME-Version",
! "Content-Transfer-Encoding",
! "From", "X-Mailer:", "Status:",
! "X-ELM-",
! "X-UIDL", /* Generated by some POP deamons */
! "Return-Path",
! "*end-of-defaults*", NULL
! };
!
! for (weedcount = 0; default_list[weedcount] != (char *) 0;weedcount++){
! int Len = strlen(default_list[weedcount]) + 1;
! if ((weedlist[weedcount] =
! malloc(Len)) == NULL) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmNoMemDefaultWeed,
! "Not enough memory for default weedlist. Leaving."));
! (*safe_malloc_fail_handler)("default_weedlist", Len);
! return;
! }
! strfcpy(weedlist[weedcount], default_list[weedcount], Len);
}
- }
-
- int matches_weedlist(buffer)
- char *buffer;
- {
- /** returns true iff the first 'n' characters of 'buffer'
- match an entry of the weedlist **/
-
- register int i;
-
- for (i=0;i < weedcount; i++)
- if (strincmp(buffer, weedlist[i], strlen(weedlist[i])) == 0)
- return(1);
-
return(0);
}
--- 2202,2256 ----
return eval_option(save_info,NUMBER_OF_SAVEABLE_OPTIONS,
lcl,word1,word2,filename);
}
! static CONST char WEED_NO_DEFAULT[] = "*clear-weed-list*";
!
! int matches_weedlist(buffer)
! char *buffer;
! {
! /** returns true iff the first 'n' characters of 'buffer'
! match an entry of the weedlist **/
!
! int i;
! static char *default_list[] =
! { ">From", "In-Reply-To:",
! "References:", "Newsgroups:", "Received:",
! "Apparently-To:", "Message-Id:", "Content-Type:",
! "Content-Length", "MIME-Version",
! "Content-Transfer-Encoding",
! "From", "X-Mailer:", "Status:",
! "X-ELM-",
! "X-UIDL", /* Generated by some POP deamons */
! "Return-Path",
! "*end-of-defaults*", NULL
! };
! char **list = give_dt_path_as_elems(&weedlist,"weedout");
! /* If fist elem is "*clear-weed-list*" then default list is not
! used
! */
! if (!list || !list[0] ||
! 0 != strcmp(list[0],WEED_NO_DEFAULT)) {
!
! for (i = 0; default_list[i]; i++) {
! if (strincmp(buffer, default_list[i], strlen(default_list[i])) == 0)
! return(1);
! }
!
}
! if (list) {
! for (i=0;list[i]; i++) {
! if (strincmp(buffer, list[i], strlen(list[i])) == 0)
! return(1);
! }
}
return(0);
}
Index: elmME+.2.5.alpha0-cvs/lib/realfrom.c
*** elm2.4.ME+.115/lib/realfrom.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/realfrom.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: realfrom.c,v 1.12 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: realfrom.c,v 1.12.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 11,17 ****
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"addr");
--- 11,17 ----
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"addr");
Index: elmME+.2.5.alpha0-cvs/lib/remote_mbx.c
*** elm2.4.ME+.115/lib/remote_mbx.c 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/remote_mbx.c 2004-04-25 17:52:38.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.49 2004/04/04 06:17:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
#include "shared_imp.h"
#include "s_me.h"
#include "s_elm.h"
--- 1,17 ----
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.49.4.2 2004/04/25 14:52:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49.4.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "ss_imp.h"
#include "mbx_imp.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
#include "s_me.h"
#include "s_elm.h"
***************
*** 179,185 ****
struct remote_account *ra;
{
/* bzero is defined hdrs/defs.h */
! bzero (ra, sizeof (struct remote_account));
ra->hostaddr.sa.sa_family = AF_UNSPEC;
ra->service_idx = 0;
--- 181,187 ----
struct remote_account *ra;
{
/* bzero is defined hdrs/defs.h */
! bzero ((void *)ra, sizeof (struct remote_account));
ra->hostaddr.sa.sa_family = AF_UNSPEC;
ra->service_idx = 0;
Index: elmME+.2.5.alpha0-cvs/lib/reverse.c
*** elm2.4.ME+.115/lib/reverse.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/reverse.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: reverse.c,v 1.4 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: reverse.c,v 1.4.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 12,18 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
void reverse(string)
char *string;
--- 12,18 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
void reverse(string)
char *string;
Index: elmME+.2.5.alpha0-cvs/lib/rfc822tlen.c
*** elm2.4.ME+.115/lib/rfc822tlen.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/rfc822tlen.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: rfc822tlen.c,v 1.6 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: rfc822tlen.c,v 1.6.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 11,17 ****
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include <headers.h>
/*
* rfc822_toklen(str) - Returns length of RFC-822 token that starts at "str".
--- 11,17 ----
* Copyright (c) 1993 USENET Community Trust
*****************************************************************************/
! #include "elm_defs.h"
/*
* rfc822_toklen(str) - Returns length of RFC-822 token that starts at "str".
Index: elmME+.2.5.alpha0-cvs/lib/safemalloc.c
*** elm2.4.ME+.115/lib/safemalloc.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/safemalloc.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: safemalloc.c,v 1.13 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: safemalloc.c,v 1.13.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 11,17 ****
* Copyright (c) 1992 USENET Community Trust
*****************************************************************************/
! #include "headers.h"
/*
* These routines perform dynamic memory allocation with error checking.
--- 11,17 ----
* Copyright (c) 1992 USENET Community Trust
*****************************************************************************/
! #include "elm_defs.h"
/*
* These routines perform dynamic memory allocation with error checking.
Index: elmME+.2.5.alpha0-cvs/lib/safeopen.c
*** elm2.4.ME+.115/lib/safeopen.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/safeopen.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "$Id: safeopen.c,v 1.4 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "$Id: safeopen.c,v 1.4.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 9,20 ****
* Initially written by: Zoltan Hidvegi <hz...@cs.elte.hu>
*****************************************************************************/
! #include <stdio.h>
! #include <fcntl.h>
! #include <unistd.h>
!
! #include "headers.h"
! #include "me.h"
FILE *safeopen(name)
char *name;
--- 9,15 ----
* Initially written by: Zoltan Hidvegi <hz...@cs.elte.hu>
*****************************************************************************/
! #include "defs_major.h"
FILE *safeopen(name)
char *name;
Index: elmME+.2.5.alpha0-cvs/lib/savefolder.c
*** elm2.4.ME+.115/lib/savefolder.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/savefolder.c 2004-04-25 17:52:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.75 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.75 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.75.8.2 2004/04/25 14:52:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.75.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 16,22 ****
*
*****************************************************************************/
! #include "headers.h"
#include "mbx_imp.h"
#include "s_me.h"
--- 16,22 ----
*
*****************************************************************************/
! #include "elm_defs.h"
#include "mbx_imp.h"
#include "s_me.h"
***************
*** 1357,1363 ****
int real_prepare_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! const char *filename;
{
int ret = 0;
int err = 0;
--- 1357,1363 ----
int real_prepare_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! CONST char *filename;
{
int ret = 0;
int err = 0;
***************
*** 1471,1477 ****
int real_end_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! const char *filename;
{
int ret = 0;
--- 1471,1477 ----
int real_end_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! CONST char *filename;
{
int ret = 0;
***************
*** 1505,1511 ****
int real_sync_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! const char *filename;
{
int ret = 0;
--- 1505,1511 ----
int real_sync_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! CONST char *filename;
{
int ret = 0;
***************
*** 2216,2222 ****
dir->selection = safe_malloc(sizeof (struct name_vector));
/* bzero is defined hdrs/defs.h */
! bzero(dir->selection,sizeof (struct name_vector));
dir->selection->sys_name = sys_name;
dir->selection->disp_name = disp_name;
dir->selection->flags = flags;
--- 2216,2222 ----
dir->selection = safe_malloc(sizeof (struct name_vector));
/* bzero is defined hdrs/defs.h */
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct browser_write_state));
(*ptr)->magic = WS_magic;
}
--- 3756,3762 ----
(*ptr) = safe_malloc(sizeof (struct browser_write_state));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct browser_write_state));
(*ptr)->magic = WS_magic;
}
***************
*** 3767,3773 ****
{
if (*ptr) {
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct browser_write_state));
free(*ptr);
*ptr = NULL;
--- 3767,3773 ----
{
if (*ptr) {
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct browser_write_state));
free(*ptr);
*ptr = NULL;
Index: elmME+.2.5.alpha0-cvs/lib/sb_file.c
*** elm2.4.ME+.115/lib/sb_file.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/sb_file.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: sb_file.c,v 1.10 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "sb_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: sb_file.c,v 1.10.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "sb_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/sb_mem.c
*** elm2.4.ME+.115/lib/sb_mem.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/sb_mem.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: sb_mem.c,v 1.5 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "sb_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: sb_mem.c,v 1.5.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "sb_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/schedule.c
*** elm2.4.ME+.115/lib/schedule.c 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/schedule.c 2004-04-18 19:55:40.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: schedule.c,v 1.18 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"net");
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: schedule.c,v 1.18.8.1 2004/04/18 16:55:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"net");
Index: elmME+.2.5.alpha0-cvs/lib/service_list.c
*** elm2.4.ME+.115/lib/service_list.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/service_list.c 2004-04-25 17:52:38.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.26 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
#include "shared_imp.h"
#include "s_me.h"
#include "s_elm.h"
--- 1,17 ----
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.26.8.2 2004/04/25 14:52:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "ss_imp.h"
#include "mbx_imp.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
#include "s_me.h"
#include "s_elm.h"
***************
Index: elmME+.2.5.alpha0-cvs/lib/shared_all.c
*** elm2.4.ME+.115/lib/shared_all.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/shared_all.c 2004-04-25 17:52:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared_all.c,v 1.2 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared_all.c,v 1.2.8.2 2004/04/25 14:52:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 11,17 ****
* that file does not need to be guarded with #ifdef
*/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"dl");
--- 11,17 ----
* that file does not need to be guarded with #ifdef
*/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"dl");
Index: elmME+.2.5.alpha0-cvs/lib/shared_base.c
*** elm2.4.ME+.115/lib/shared_base.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/shared_base.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared_base.c,v 1.2 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared_base.c,v 1.2.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 11,17 ****
* that file does not need to be guarded with #ifdef
*/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"dl");
--- 11,17 ----
* that file does not need to be guarded with #ifdef
*/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"dl");
Index: elmME+.2.5.alpha0-cvs/lib/shared.c
*** elm2.4.ME+.115/lib/shared.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/shared.c 2004-04-25 17:52:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared.c,v 1.54 2004/03/28 18:08:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared.c,v 1.54.8.2 2004/04/25 14:52:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 11,17 ****
* that file does not need to be guarded with #ifdef
*/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"dl");
--- 11,17 ----
* that file does not need to be guarded with #ifdef
*/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"dl");
Index: elmME+.2.5.alpha0-cvs/lib/shared_connect.c
*** elm2.4.ME+.115/lib/shared_connect.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/shared_connect.c 2004-04-25 17:52:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared_connect.c,v 1.2 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared_connect.c,v 1.2.8.2 2004/04/25 14:52:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 11,17 ****
* that file does not need to be guarded with #ifdef
*/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"dl");
--- 11,17 ----
* that file does not need to be guarded with #ifdef
*/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"dl");
Index: elmME+.2.5.alpha0-cvs/lib/shiftlower.c
*** elm2.4.ME+.115/lib/shiftlower.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/shiftlower.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shiftlower.c,v 1.7 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shiftlower.c,v 1.7.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 12,18 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"mem");
--- 12,18 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"mem");
Index: elmME+.2.5.alpha0-cvs/lib/state.c
*** elm2.4.ME+.115/lib/state.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/state.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: state.c,v 1.10 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: state.c,v 1.10.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 9,15 ****
* Initially written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"misc");
DEBUG_VAR(DebugIO,__FILE__,"stateio");
--- 9,15 ----
* Initially written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"misc");
DEBUG_VAR(DebugIO,__FILE__,"stateio");
Index: elmME+.2.5.alpha0-cvs/lib/streamsched.c
*** elm2.4.ME+.115/lib/streamsched.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/streamsched.c 2004-04-25 17:52:39.000000000 +0300
***************
*** 1,16 ****
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.33 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
!
! #include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
#include "shared_imp.h"
DEBUG_VAR(Debug,__FILE__,"net");
--- 1,17 ----
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.33.8.2 2004/04/25 14:52:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "ss_imp.h"
#include "mbx_imp.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
DEBUG_VAR(Debug,__FILE__,"net");
Index: elmME+.2.5.alpha0-cvs/lib/strfcpy.c
*** elm2.4.ME+.115/lib/strfcpy.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/strfcpy.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: strfcpy.c,v 1.9 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: strfcpy.c,v 1.9.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 22,28 ****
* if strlen(src)<len. We don't bother.
*/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"mem");
--- 22,28 ----
* if strlen(src)<len. We don't bother.
*/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"mem");
Index: elmME+.2.5.alpha0-cvs/lib/strftime.c
*** elm2.4.ME+.115/lib/strftime.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/strftime.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: strftime.c,v 1.7 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: strftime.c,v 1.7.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 52,58 ****
* February 1994
*/
! #include "headers.h"
#ifndef BSD_TYPE
extern void tzset P_((void));
--- 52,58 ----
* February 1994
*/
! #include "elm_defs.h"
#ifndef BSD_TYPE
extern void tzset P_((void));
Index: elmME+.2.5.alpha0-cvs/lib/strincmp.c
*** elm2.4.ME+.115/lib/strincmp.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/strincmp.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: strincmp.c,v 1.8 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: strincmp.c,v 1.8.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 15,21 ****
/** compare strings ignoring case - length limited
**/
! #include "headers.h"
/* Is this needed? This is same than strncasecmp
* - K E H <hur...@ozone.FMI.FI>
--- 15,21 ----
/** compare strings ignoring case - length limited
**/
! #include "elm_defs.h"
/* Is this needed? This is same than strncasecmp
* - K E H <hur...@ozone.FMI.FI>
Index: elmME+.2.5.alpha0-cvs/lib/stringbuffer.c
*** elm2.4.ME+.115/lib/stringbuffer.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/stringbuffer.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: stringbuffer.c,v 1.9 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "sb_imp.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: stringbuffer.c,v 1.9.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "sb_imp.h"
Index: elmME+.2.5.alpha0-cvs/lib/string.c
*** elm2.4.ME+.115/lib/string.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/string.c 2004-04-25 17:52:39.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: string.c,v 1.38 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
#ifdef USE_DLOPEN
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: string.c,v 1.38.8.2 2004/04/25 14:52:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38.8.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
#ifdef USE_DLOPEN
***************
*** 838,844 ****
/* result is malloced */
void bytestream_from_string(str,res,reslen)
! const struct string *str;
char **res;
int *reslen;
{
--- 838,844 ----
/* result is malloced */
void bytestream_from_string(str,res,reslen)
! CONST struct string *str;
char **res;
int *reslen;
{
Index: elmME+.2.5.alpha0-cvs/lib/stringtok.c
*** elm2.4.ME+.115/lib/stringtok.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/stringtok.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: stringtok.c,v 1.4 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
/*
string_tokenize()
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: stringtok.c,v 1.4.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
/*
string_tokenize()
Index: elmME+.2.5.alpha0-cvs/lib/striparens.c
*** elm2.4.ME+.115/lib/striparens.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/striparens.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: striparens.c,v 1.6 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: striparens.c,v 1.6.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 22,28 ****
* that will be overwritten on the next call to either routine.
*/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"addr");
--- 22,28 ----
* that will be overwritten on the next call to either routine.
*/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"addr");
Index: elmME+.2.5.alpha0-cvs/lib/strmcpy.c
*** elm2.4.ME+.115/lib/strmcpy.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/strmcpy.c 2004-04-18 19:55:41.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: strmcpy.c,v 1.5 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: strmcpy.c,v 1.5.8.1 2004/04/18 16:55:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 9,15 ****
* Initially written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "headers.h"
char * strmcpy (dest, src)
char *dest;
--- 9,15 ----
* Initially written by: Michael Elkins <elk...@aero.org>, 1995
*****************************************************************************/
! #include "elm_defs.h"
char * strmcpy (dest, src)
char *dest;
Index: elmME+.2.5.alpha0-cvs/lib/strtokq.c
*** elm2.4.ME+.115/lib/strtokq.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/strtokq.c 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: strtokq.c,v 1.5 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: strtokq.c,v 1.5.8.1 2004/04/18 16:55:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 17,23 ****
* if flag is non-null. Quotes and backslahes can be escaped with backslash.
*/
! #include "headers.h"
/* Why there is ' -- it is not quote character in mail.
* - K E H <hur...@ozone.FMI.FI>
--- 17,23 ----
* if flag is non-null. Quotes and backslahes can be escaped with backslash.
*/
! #include "elm_defs.h"
/* Why there is ' -- it is not quote character in mail.
* - K E H <hur...@ozone.FMI.FI>
Index: elmME+.2.5.alpha0-cvs/lib/syscall.c
*** elm2.4.ME+.115/lib/syscall.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/syscall.c 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: syscall.c,v 1.12 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: syscall.c,v 1.12.8.1 2004/04/18 16:55:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 15,21 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
#include "s_elm.h"
DEBUG_VAR(Debug,__FILE__,"mailer");
--- 15,21 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "elm_defs.h"
#include "s_elm.h"
DEBUG_VAR(Debug,__FILE__,"mailer");
Index: elmME+.2.5.alpha0-cvs/lib/terminal.c
*** elm2.4.ME+.115/lib/terminal.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/terminal.c 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.40 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
#include "cs_terminal.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: terminal.c,v 1.40.8.1 2004/04/18 16:55:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
#include "cs_terminal.h"
Index: elmME+.2.5.alpha0-cvs/lib/unicode.c
*** elm2.4.ME+.115/lib/unicode.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/unicode.c 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: unicode.c,v 1.18 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "s_me.h"
#include "cs_imp.h"
#include "unidata.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: unicode.c,v 1.18.8.1 2004/04/18 16:55:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_me.h"
#include "cs_imp.h"
#include "unidata.h"
Index: elmME+.2.5.alpha0-cvs/lib/unidata.c
*** elm2.4.ME+.115/lib/unidata.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/unidata.c 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.28 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.28 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
#include "mmaputil.h"
#include "s_me.h"
#include "unidata.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: unidata.c,v 1.28.8.1 2004/04/18 16:55:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.28.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "mmaputil.h"
#include "s_me.h"
#include "unidata.h"
Index: elmME+.2.5.alpha0-cvs/lib/write_hdr.c
*** elm2.4.ME+.115/lib/write_hdr.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/lib/write_hdr.c 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,12 ****
! static char rcsid[] = "@(#)$Id: write_hdr.c,v 1.4 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "headers.h"
DEBUG_VAR(Debug,__FILE__,"header");
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: write_hdr.c,v 1.4.8.1 2004/04/18 16:55:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
DEBUG_VAR(Debug,__FILE__,"header");
Index: elmME+.2.5.alpha0-cvs/MANIFEST
*** elm2.4.ME+.115/MANIFEST 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/MANIFEST 2004-04-18 19:55:34.000000000 +0300
***************
*** 1,17 ****
README.ME+
! ANNOUNCE.ME
! ChangeLog.ME
! Changes
Configure
! Instruct
MANIFEST
ConfTool/Substitute
ConfTool/CharMap
Makefile.SH
NOTICE
! Overview
! Patchlist
! README
config.h.SH
doc/Alias.guide
doc/Config.guid
--- 1,18 ----
README.ME+
! 2.4/ANNOUNCE.ME
! 2.4/ChangeLog.ME
! 2.4/Changes
Configure
! 2.4/Instruct
MANIFEST
ConfTool/Substitute
ConfTool/CharMap
Makefile.SH
+ 2.4/NOTICE
NOTICE
! 2.4/Overview
! 2.4/Patchlist
! 2.4/README
config.h.SH
doc/Alias.guide
doc/Config.guid
***************
*** 41,50 ****
doc/printmail.1
doc/readmsg.1
doc/tmac.n
- hdrs/defs.h
- hdrs/elm.h
hdrs/elmutil.h
- hdrs/headers.h
hdrs/me.h
hdrs/menu.h
hdrs/menu2.h
--- 42,48 ----
***************
*** 419,421 ****
--- 417,421 ----
lib/shared_base.c
lib/shared_connect.c
lib/shared_all.c
+ hdrs/elm_defs.h
+ hdrs/elm_globals.h
Index: elmME+.2.5.alpha0-cvs/melib/def_melib.h
*** elm2.4.ME+.115/melib/def_melib.h 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/melib/def_melib.h 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,6 ****
! /* $Id: def_melib.h,v 1.3 2004/03/27 18:31:42 hurtta Exp $ */
! #include "headers.h"
#include "melib.h"
--- 1,6 ----
! /* $Id: def_melib.h,v 1.3.8.1 2004/04/18 16:55:42 hurtta Exp $ */
! #include "elm_defs.h"
#include "melib.h"
Index: elmME+.2.5.alpha0-cvs/melib/Makefile.SH
*** elm2.4.ME+.115/melib/Makefile.SH 2003-10-12 12:48:03.000000000 +0300
--- elmME+.2.5.alpha0-cvs/melib/Makefile.SH 2004-04-18 19:55:42.000000000 +0300
***************
*** 16,22 ****
echo "Extracting melib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.17 2003/10/01 17:34:34 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
--- 16,22 ----
echo "Extracting melib/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.17.44.1 2004/04/18 16:55:42 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
***************
*** 95,116 ****
# Dependencies and rules
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/elm.h $(INCLDIR)/headers.h def_melib.h
! $(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/defs.h $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h \
! $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! def_melib.h: $(INCLDIR)/headers.h $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 95,117 ----
# Dependencies and rules
# Dependencies of header files upon other header files they include
! .PRECIOUS: def_melib.h $(INCLDIR)/elm_defs.h \
! $(INCLDIR)/shared_imp.h $(INCLDIR)/defs_major.h
! $(INCLDIR)/elm_defs.h: $(INCLDIR)/defs_major.h $(INCLDIR)/elm_nl_types.h \
! $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/defs_major.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/shared_imp.h: ../shared_libs/include/shared.h
$(CHMOD) u+w $@
$(TOUCH) $@
! def_melib.h: $(INCLDIR)/elm_defs.h $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
***************
*** 118,124 ****
# Dependencies of C object files
pgp_decode.o: def_melib.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h
parse_util.o: def_melib.h $(INCLDIR)/s_me.h
! mailcap.o: def_melib.h $(INCLDIR)/melib.h
mime_parse.o: def_melib.h $(INCLDIR)/s_me.h
mime_decode.o: def_melib.h $(INCLDIR)/s_me.h
mime_selector.o: def_melib.h $(INCLDIR)/s_me.h
--- 119,125 ----
# Dependencies of C object files
pgp_decode.o: def_melib.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h
parse_util.o: def_melib.h $(INCLDIR)/s_me.h
! mailcap.o: def_melib.h
mime_parse.o: def_melib.h $(INCLDIR)/s_me.h
mime_decode.o: def_melib.h $(INCLDIR)/s_me.h
mime_selector.o: def_melib.h $(INCLDIR)/s_me.h
Index: elmME+.2.5.alpha0-cvs/melib/mimewalk.c
*** elm2.4.ME+.115/melib/mimewalk.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/melib/mimewalk.c 2004-04-25 17:52:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mimewalk.c,v 1.5 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mimewalk.c,v 1.5.8.1 2004/04/25 14:52:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 24,30 ****
ret = safe_malloc(sizeof(*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = WALKHANDLER_magic;
ret->handler_type = t;
--- 24,30 ----
ret = safe_malloc(sizeof(*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = WALKHANDLER_magic;
ret->handler_type = t;
Index: elmME+.2.5.alpha0-cvs/melib/pgp_decode.c
*** elm2.4.ME+.115/melib/pgp_decode.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/melib/pgp_decode.c 2004-04-25 17:52:39.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.38 2004/03/27 18:31:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.38.8.1 2004/04/25 14:52:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 290,296 ****
array[1] = pgp_child_out[0];
array[2] = -1;
! rs->ext_init_data = &array;
rs->ext_init = close_them;
env[0] = NULL;
--- 290,296 ----
array[1] = pgp_child_out[0];
array[2] = -1;
! rs->ext_init_data = array;
rs->ext_init = close_them;
env[0] = NULL;
Index: elmME+.2.5.alpha0-cvs/nls/C/C/C/s_elm.m
*** elm2.4.ME+.115/nls/C/C/C/s_elm.m 2004-03-16 21:17:43.000000000 +0200
--- elmME+.2.5.alpha0-cvs/nls/C/C/C/s_elm.m 2004-05-16 08:52:18.000000000 +0300
***************
*** 1013,1024 ****
562 \n\rNotice:\n\r\
ELM requires the use of a folders directory to store your mail folders in.\n\r\
Shall I create the directory %s for you (%c/%c/q)? %c%c
- $ #TooManyWeedHeaders
- 563 Too many weed headers! Leaving...
- $ #TooManyWeedPmalloc
- 564 Too many weed headers! Out of memory! Leaving...
- $ #NoMemDefaultWeed
- 565 Not enough memory for default weedlist. Leaving.
$ #CannotInitErrorExpanding
566 Cannot initialize "%s" - error expanding "%s".
$ #CouldntMakeTempFileName
--- 1013,1018 ----
***************
*** 1915,1922 ****
1042 Skip recipients
$ #BadValueInElmrc
1043 Value of "%s" in line %d in "%s" file is bad
$ #FailedLeaveFolderQuit
! 1045 Failed to leave folder: Try to quit again ([P]anic) ? %c%c
$ #NoItemToMarkUnread
1047 No %S to mark as unread!
$quote "
--- 1909,1918 ----
1042 Skip recipients
$ #BadValueInElmrc
1043 Value of "%s" in line %d in "%s" file is bad
+ $quote "
$ #FailedLeaveFolderQuit
! 1045 "Failed to leave folder: Try to quit again ? ([P]anic/%c/%c) "
! $quote
$ #NoItemToMarkUnread
1047 No %S to mark as unread!
$quote "
***************
*** 1954,1962 ****
$ #HelpTextPrint
1063 P = Print the text of current message or the tagged messages.
$ #Forwarded1
! 1964 ----- Forwarded message from %S -----\n\n
$ #Forwarded2
! 1965 ----- Forwarded message (env-from %s) -----\n\n
$ #Forwarded3
1966 ----- End of forwarded message from %S -----\n
$ #Forwarded4
--- 1950,1958 ----
$ #HelpTextPrint
1063 P = Print the text of current message or the tagged messages.
$ #Forwarded1
! 1964 ----- Forwarded message from %S -----\n
$ #Forwarded2
! 1965 ----- Forwarded message (env-from %s) -----\n
$ #Forwarded3
1966 ----- End of forwarded message from %S -----\n
$ #Forwarded4
***************
*** 2055,2061 ****
2031 save copy
$quote '
$ #NoReceived
! 2032 '"received" folder not available, continue? (%c/%c) '
$quote "
$ #FileSpecify1
2033 "\n\r\n\rYou must specify a file to "
--- 2051,2057 ----
2031 save copy
$quote '
$ #NoReceived
! 2032 '"received" folder not available, continue leaving folder? ([P]anic/%c/%c) '
$quote "
$ #FileSpecify1
2033 "\n\r\n\rYou must specify a file to "
***************
*** 2301,2303 ****
--- 2297,2319 ----
$quote "
$ #PgpRcvSure
2151 "The recv'd message was PGP encoded, are you sure? "
+ $ #FailedLeaveChange
+ 2152 "Failed to leave folder: Try to change again ? ([P]anic/%c/%c) "
+ $quote
+ $ #InstalledSetuid
+ 2153 \n\
+ This version of Elm has been installed setuid=%d. This is dangerous!\n\
+ Elm is NOT designed to run in this mode, and to do so can introduce\n\
+ grave security hazards. See the description of "allow_setuid" in the\n\
+ Elm Reference Guide for further information.\n\n
+ $quote "
+ $ #CopyMessageIntoReplyYN
+ 2154 "Copy message into reply? (%c/%c) "
+ $ #SavecmdSaveMarked
+ 2155 "Save marked messages? (%c/%c) "
+ $ #MlistOff
+ 2156 "[Mlists Off]"
+ $ #MlistOn
+ 2157 "[Mlists On]"
+ $ #HelpToggleMailingList
+ 2158 "M = Toggle display of mailing list information."
Index: elmME+.2.5.alpha0-cvs/nls/C/C/C/s_readmsg.m
*** elm2.4.ME+.115/nls/C/C/C/s_readmsg.m 2002-01-26 13:14:46.000000000 +0200
--- elmME+.2.5.alpha0-cvs/nls/C/C/C/s_readmsg.m 2004-05-14 20:24:35.000000000 +0300
***************
*** 1,6 ****
$set 19 #Readmsg
$ #Usage
! 1 Usage: %s [-anhp] [-f Folder] {MessageNum ... | pattern | *}\n
$ #StateFileCorrupt
2 %s: Elm folder state file appears to be corrupt!\n
$ #CannotExpandFolderName
--- 1,6 ----
$set 19 #Readmsg
$ #Usage
! 1 Usage: %s [-anhp] [-f Folder] [-w weedlist] {MessageNum ... | pattern | *}\n
$ #StateFileCorrupt
2 %s: Elm folder state file appears to be corrupt!\n
$ #CannotExpandFolderName
Index: elmME+.2.5.alpha0-cvs/nls/gencat/gencat.c
*** elm2.4.ME+.115/nls/gencat/gencat.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/nls/gencat/gencat.c 2004-04-22 22:50:17.000000000 +0300
***************
*** 50,56 ****
#include <sys/file.h>
#include <sys/stat.h>
#include "gencat.h"
! #include "headers.h"
/*
* The spec says the syntax is "gencat catfile msgfile...".
--- 50,56 ----
#include <sys/file.h>
#include <sys/stat.h>
#include "gencat.h"
! #include "elm_defs.h"
/*
* The spec says the syntax is "gencat catfile msgfile...".
Index: elmME+.2.5.alpha0-cvs/NOTICE
*** elm2.4.ME+.115/NOTICE 2002-01-26 13:14:44.000000000 +0200
--- elmME+.2.5.alpha0-cvs/NOTICE 2004-04-17 12:03:42.000000000 +0300
***************
*** 2,8 ****
The Elm(tm) Mail System General Public License
! (C) Copyright 1988-1992, USENET Community Trust
(C) Copyright 1986,1987, by Dave Taylor
--- 2,8 ----
The Elm(tm) Mail System General Public License
! (C) Copyright 1988-1996, USENET Community Trust
(C) Copyright 1986,1987, by Dave Taylor
***************
*** 55,68 ****
notices and that the changed sections are clearly delimited as such. The
authors requests copies of any changes made to ensure that the various versions
stay reasonably in sync with each other. Please send all revisions to
! e...@DSI.COM.
NOTE that it is not permitted to copy, sublicense, distribute or transfer any
of the Elm software except as expressly indicated herein. Any attempts to
do otherwise will be considered a violation of this license and your rights
to the Elm software will be voided.
-
Comments on the system and/or this licensing agreement is encouraged. Send
electronic mail to "tay...@intuitive.com". This license was written with
help from Scott McGregor. Thanks Scott!
--- 55,67 ----
notices and that the changed sections are clearly delimited as such. The
authors requests copies of any changes made to ensure that the various versions
stay reasonably in sync with each other. Please send all revisions to
NOTE that it is not permitted to copy, sublicense, distribute or transfer any
of the Elm software except as expressly indicated herein. Any attempts to
do otherwise will be considered a violation of this license and your rights
to the Elm software will be voided.
Comments on the system and/or this licensing agreement is encouraged. Send
electronic mail to "tay...@intuitive.com". This license was written with
help from Scott McGregor. Thanks Scott!
***************
*** 71,74 ****
Elm is a trademark of Dave Taylor.
NOTE: Elm is now in the public trust. Comments, suggestions, bug reports and the
! like should be sent to Syd Weinstein; e...@DSI.COM (dsinc!elm)
--- 70,73 ----
Elm is a trademark of Dave Taylor.
NOTE: Elm is now in the public trust. Comments, suggestions, bug reports and the
! like should be sent to Bill Pemberton; fl...@virginia.edu
Index: elmME+.2.5.alpha0-cvs/OBSOLETE
*** elm2.4.ME+.115/OBSOLETE 2004-01-24 13:51:43.000000000 +0200
--- elmME+.2.5.alpha0-cvs/OBSOLETE 2004-05-16 16:19:52.000000000 +0300
***************
*** 35,37 ****
--- 35,47 ----
src/curses.c
hdrs/elm_curses.h
src/find_alias.c
+ hdrs/headers.h
+ hdrs/defs.h
+ hdrs/elm.h
+ Overview
+ ANNOUNCE.ME
+ ChangeLog.ME
+ Patchlist
+ Changes
+ Instruct
+ README
Index: elmME+.2.5.alpha0-cvs/Overview
*** elm2.4.ME+.115/Overview 2002-01-26 13:14:44.000000000 +0200
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,124 ****
- An Overview of the Elm Mail System
- ----------------------------------
-
- Introduction
-
- This file discusses the functionality of the Elm mail system
- and explains some of the motivation behind the various features.
-
- 1. What is Elm?
-
- Currently on UNIX, there seems to be a preponderance of line-oriented
- software. This is most unfortunate as most of the software on UNIX tends to
- be pretty darn hard to use! I believe that there is more than a slight
- correlation between the two, and, since I was myself having problems using
- "mailx" with high-volume mail, I created a new mail system.
-
- In the lingo of the mail guru, Elm is a "User Agent" system,
- it's designed to run with "sendmail" or "/bin/rmail" or any
- other UNIX Mail Transport Agent (according to what's on your system)
- and is a full replacement of programs like "/bin/mail" and "mailx".
- The system is more than just a single program, however, and includes
- programs like "frm" to list a 'table of contents' of your mail, and
- "printmail" to quickly paginate mail files (to allow 'clean'
- printouts).
-
- 2. What's New about Elm?
-
- The most significant difference between Elm and earlier mail
- systems is that Elm is screen-oriented. Upon further use, however,
- users will find that Elm is also quite a bit easier to use, and quite a
- bit more "intelligent" about sending mail and so on. For example, say
- you're on "usenet" and receive a message from someone on the Internet.
- The sender also "cc'd" another person on Internet. With Elm you can
- simply G)roup reply and it will build the correct return addresses.
-
- There are lots of subtleties like that in the program, most of
- which you'll probably find when you need them.
-
- 3. What systems does it work on?
-
- The Elm development group uses almost every UNIX system out
- there between all of its volunteers. Elm runs on USL System V, BSD,
- SunOS, Apollo, UTS, Pyramid and Xenix and should run on almost any UNIX
- systems without any modifications (if there turn out to be
- modifications, please notify the Elm Development Group as soon as
- possible).
-
- 4. Does it obey existing mail standards?
-
- Yes! That's another of the basic reasons the program was
- originally written! To ensure that the date field, the "From:" line
- and so on were all added in the correct format. The program is 100%
- correct according to the RFC-822 electronic mail header protocol
- guide.
-
- 5. What were the main motivating factors for Dave to write Elm?
-
- The first two I've already mentioned, but here's a (somewhat
- partial) list;
-
- - To have a mail system that exploited the CRT instead of
- assuming I'm on a teletype.
-
- - To have a mailer that was 100% correct when dealing with
- network mail (i.e. RFC-822).
-
- - To create a system that needed no documentation for the
- casual user, but was still powerful enough and sophisticated
- enough for a mail expert.
-
- - To write a "significant" piece of software as a learning
- experience (I admit it!)
-
- - To find out how reasonable it is to try to modify a program
- to meet the expectations of the users, rather than vice-versa.
-
- - To basically correct some of the dumb things that the current
- mailers do, like letting you send mail to addresses that it
- could trivially figure out are going to result in 'dead.letter'
-
- - To tie in intimately with the pathalias program output, and
- allow users to specify machine!user or user@machine and have
- the COMPUTER do the work of figuring out addresses...
- (Note: As of 2.4, this has been removed from Elm, as routing
- mail transports are now readily available for all UNIX systems).
-
- 6. Is it reliable?
-
- The mailer, in various incarnations, has logged literally
- thousands upon thousands of hours without any problems that aren't
- now corrected. As new problems arise they're dealt with in as
- rapid a manner as possible...
-
- 7. Disclaimers
-
- The author of this program will deny all liability for any
- damages, either real or imagined, due to the execution of this program
- or anything related to either the software or the system. Furthermore,
- the entire system and all source within, including the presentation
- screens and commands, are legally copyrighted by the author, and while
- they can be used, and abused, for public domain systems, it will be in
- violation of the law if used in systems or programs sold for profit.
-
- By installing the mailer or even extracting it from the network,
- you are agreeing to the above disclaimer.
-
- 8. Finally
-
- I think it's a good program, and I can cite at least 75 people
- who would (begrudgingly, I'm sure) agree. You should most certainly
- install the program and try it!!
-
-
- -- Dave Taylor
- tay...@intuitive.com
- -- Syd Weinstein, Coordinator
- Elm Development Group
- e...@dsi.com
-
- Original: March 13th, 1986
- Modified: October 3th, 1992
- Syd Weinstein, Coordinator
- Elm Development Group
- e...@dsi.com
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/Patchlist
*** elm2.4.ME+.115/Patchlist 2002-01-26 13:14:44.000000000 +0200
--- /tmp/28792-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-05-16 17:21:51.000000000 +0300
***************
*** 1,1612 ****
-
- This Patchset is for the 2.4 version.
-
- Look file ChangeLog.ME for changes of ME version.
- Look file README.ME+ for changes of the 2.4ME+ version.
-
- =========================================================
- Patch Set - Patches 24: Tue Sep 20 14:01:13 EDT 1994
- Elm 2.4PL23 -> Elm 2.4PL24
-
- Remove autoreply/arepdaem, its a security hole
- From: Syd
-
- Fix where buffer was not getting null terminated during its
- construction, so the strcat failed (due to garbage data existing in the
- array at malloc() time).
- From: l...@yallara.cs.rmit.oz.au (Luke Mewburn)
-
- Fix ANSI prototype stripping macro
- From: "Tom Moore" <tmo...@fievel.DaytonOH.NCR.COM>
-
- fixed ReadCh() to recover from EINTR and EAGAIN instead
- of just returning an unexpected EOF.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Replaced the get_tz_mins() routine in lib/get_tz.c with a portable
- version that requires no configuration. Rewrote the test case in
- lib/get_tz.c, and also wrote in support to simplify configuration
- tests. Dropped TZMINS_USE_XXXX configuration parameter. Simplified
- timezone determination in Configure. The new get_tz_mins() introduces
- two side effects. First it steps on the static data returned by
- localtime(). Second, it uses a routine in lib/date_util.c, which
- requires debug initializations. Rewrote get_arpa_date() to work around
- the first issue. Rather than doing the same for lib/strftime.c, just
- removed the timezone stuff with a conditional compile. Elm does not
- use it. Added debugging initializations to util/fastmail.c.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- I made the following changes to elm 2.4pl23 module pmalloc.c after testing on
- a DEC Alpha running OSF1 v1.3. The difficulty is that the Alpha hardware
- requires certain alignment for some operations which was not supplied by
- pmalloc (8 byte for addresses instead of 4 byte). I made a simple minded
- change to pmalloc.c to force alignment of the allocated data block to be
- adequate on DEC Alpha OSF1.
- From: j...@lime.rsmas.miami.edu (Jim Brown)
-
- detect whether atol() is a macro
- From: Mitch DSouza <m.ds...@mrc-applied-psychology.cambridge.ac.uk>
-
- Recognize the "#$HDR" magic cookie as the header to place in the
- user's elmrc file rather than hardwiring a minimally helpful
- string into the binary.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Fix Elm looping if an EOF is received.
- From: Gregory Neil Shapiro <gsha...@WPI.EDU>
-
- There is a bug in the alias-system of elm-2.4.23 that did not appear in
- elm-2.4.21. When searching for a string in the alias-table with the '//'
- command, elm sometimes gets a segmentation fault. With help of a debugger,
- I found that the function shift_lower gets a NULL argument. A fix is
- appended, but maybe the problem lies elsewhere.
- From: Sjaak Schilperoort <J.W.Schi...@research.ptt.nl>
-
- The latest Linux shared library (4.5.8) "catches" a double fclose()
- by generating a SIGSEGV. :-/
- From: fin!ch...@dg-rtp.dg.com (Chip Salzenberg)
-
- Fix a line of debug output that is too long
- From: "C.R. Ritson" <C.R.R...@newcastle.ac.uk>
-
- Here are some more of fixes to correctly call fflush() and unlock() in sequence.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- I had to put in some changes to builtin+ to allow it to display
- 8-bit letters as they should when the message has been sent
- through a real 8-bit channel like ESMTP with 8bit MIME Content-
- Transfer-Encoding.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Tune the Ultrix fix for ispell
- From: Bill Gianopoulos <w...@sccux1.msd.ray.com>
-
- Solaris 2.3 can return EACCES or EEXIST for lockfile already existing.
- From: xc...@uxa.ecn.bgu.edu (Chad Adams)
-
- Below are the changes required to compile/link elm 2.4 pl23 under
- QNX 4.2 with the Watcom 9.5 compiler (very picky).
- From: "Brian Campbell" <brianc@quantum>
-
- In utils/from.c there was a conditionalized declaration of
- getpwuid() which was triggered by the environment being non-
- POSIX instead of non-STDC.
- From: Jukka Antero Ukkonen <ukk...@csc.fi>
-
- There was a typo in src/curses.c. An include read out like
- "# include <vararg.h>" though the file name should have been
- varargs.h.
- From: Jukka Antero Ukkonen <ukk...@csc.fi>
-
- Just a minor fix to an impossible character comparison.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- I found a few months old patch I have not sent you before (I guess).
- It avoids unknowingly confusing some too rigidly and simple mindedly
- coded mailers with weird settings like
-
- charset=us-ascii and textencoding=8bit
-
- This patch will force 7bit encoding with charset=us-ascii.
- E.g. older versions of pine will dump core on 8bit & us-ascii.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- I had to add a region of conditional compilation around "defs.h"
- to make Configure work correctly with the TZNAME_USE_xxxx stuff.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- The "copy_message" function in src/fileio.c incorrectly computes the
- size of the message. The "bytes_seen" variable currently counts all
- bytes in the message ***including the message header*** when it should
- only be counting the bytes in the actual body of the message.
- From: Thomas Dwyer III <tom...@mtu.edu>
-
- Extra } in edit_mailbox removed.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Add an fflush to detect over quota on file saves.
- From: Larry Schwimmer <ros...@cyclone.Stanford.EDU>
-
- Block sigwinch when in the external pager.
- From: j...@yog-sothoth.dcrt.nih.gov (James W. Adams)
-
- Work around null from names by looking to see whether the second or
- third field is a valid month and using that to determine if there
- is an address.
- From: al...@samwise.dccs.upenn.edu (Alex Garthwaite)
-
- Fix up Solaris and SVR4 timeout signal handling
- From: Syd
-
- Add extern declaration of strerror to avoid compiler warning.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Moved #defines for SETJMP & LONGJMP from src/editmsg.c to hdrs/defs.h and
- used them instead of (set|long)jmp directly. This makes the usage consistent
- and Solaris 2.3 behaves correctly w.r.t stop/continue.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
-
-
-
-
-
- =========================================================
- Patch Set - Patches 23a through 23d: Sun Sep 19 19:48:31 EDT 1993
- Elm 2.4PL22 -> Elm 2.4PL23
-
- Write options to elmrc even if their values are empty strings.
- Rationalize code that reads and writes weedouts and alternates.
- From: chip%f...@myrddin.sybus.com
-
- Correct problem in fetch_alias() with alias record fixup that caused
- core dump on machines with pointers larger than int. This problem
- was reported on comp.mail.elm by Richard Eckman and Jim Brown. Simplify
- get_one_alias() by having it use fetch_alias().
-
- break_down_tolist() tried to blindly split address lists at "," which
- caused bogus results with addreses that had a comma inside a comment
- or quoted text, such as "user@domain (Last, First)". This patch steps
- through the address in quanta of RFC-822 tokens when searching for a
- delimiting comma. It also adds "rfc822_toklen()" to the library to
- get that length.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- This fixes a bug in the MIME code. Include_Part() uses expand_env()
- to expand the include file name, but since expand_env() is destructive
- [it uses strtok()] the file name gets corrupted, and the "Content-Name"
- header can contain a bogus value. The easy fix would be a one-line
- hack to Include_Part to use a temporary buffer. This patch does not
- implement the easy fix. *Every* place expand_env() is used, its side
- effects cause problems. I think the right fix is to make expand_env()
- non-destructive (i.e. have it duplicate the input to a temporary buffer
- and work from there). The attached patch modifies expand_env() in
- that manner, and eliminates all of the `copy to a temporary buffer'
- calls that precede it throughout elm.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- I have been repetedly crashing elm 2.4.22 until I discovered that a
- test for failing to open the system elmrc file is mising. This could
- usefully be added in read_rc.c. Version info and patch follows:
- From: "C.R. Ritson" <C.R.R...@newcastle.ac.uk>
-
- Greatly simplified "lib/striparens.c" to use new rfc822_toklen() routine.
- This cut more than 50% out of the object size. Also added _TEST case.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- When resyncing aliases from elm, and there was aliases to delete,
- the alias.pag file could be corrupted since file_offset wasn't set to zero.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- A long-standing bug of handling replies to VMS systems.
- Original "From: " -line is of format:
- From: "NAME \"Real Name\"" <USERNAME@vms-system>
- (PMDF mailer)
- Anyway, parse_arpa_who() strips quotes too cleanly
- resulting data:
- NAME \"Real Name\
- which, when put into parenthesis, becomes:
- (NAME \"Real Name\)
- which in its turn lacks closing `)'
- Patch of lib/parsarpwho.c fixes that.
- strtokq() started one position too late to search for next double-quote (") char.
- Another one-off (chops off trailing comment character, quote or not..) in src/reply.c
- From: Matti Aarnio <m...@utu.fi>
-
- Three changes to expand_env() in src/read_rc.c: make it non-destructive,
- have it return an error code instead of bailing out, and add a buffer
- size argument to avoid overwritting the destination. The first is to
- avoid all of the gymnastics Elm needed to go through (and occasionally
- forgot to go through) to protect the value handed to expand_env().
- The second is because expand_env() was originally written to support
- "elmrc" and bailing out was a reasonable thing to do there -- but not
- in the other places where it has since been used. The third is just
- a matter of practicing safe source code.
-
- This patch changes all invocations to expand_env() to eliminate making
- temporary copies (now that the routine is non-destructive) and to pass
- in a destination length. Since expand_env() no longer bails out on
- error, a do_expand_env() routine was added to src/read_rc.c handle
- this. Moreover, the error message now gives some indication of what
- the problem is rather than just saying "can't expand".
-
- Gratitous change to src/editmsg.c renaming filename variables to
- clarify the purpose.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- [ Patch description ]
- Update the example elmrc and move a couple out of order variable
- descriptions.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Handle reply-to in batch mode.
- From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
-
- In fastmail, if environment variable $REPLYTO is set, use it as
- default Reply-To. Also, eliminate unnecessary strlen() calls.
- From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
-
- Support aliases both on 64 bit and 32 bit machines at the same time.
- From: Dan Mosedale <mose...@genome.stanford.edu>
-
- Spaces in weedout strings wasn't preserved ("From " became "From").
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Added text about how the weedout list works w.r.t From: and From_
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- default_weedlist() can't use pmalloc, because weedout() calls free when
- it encounters *clear-weed-list*.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- The NLS messages for elm -h output didn't have the -i or -t options.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- The message CannotInitErrorExpanding was called CantExpandEnvVar in s_elm.m.
- Change it for consistency.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Since it was not intended that varargs.h and stdarg.h were
- included simultaneously there may be colliding definitions
- on some systems if you use a standard C compiler. If both
- of these headers are included the compiler has no way to
- know which definitions to use.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- "*clear-weed-list*" in elmrc was wiped out when one saved the options in elm.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- When STDC is used on Convex the feof() function is defined as
- a true library routine in the header files and moreover the
- library routine also leaks royally. It returns always 1!!
- So we have to use a macro. Convex naturally does not provide
- you with one though if you are using a STDC compiler. So we
- have to include one.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Removed bogus string lockfile.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- The last character of a form field gets zapped if more characters than
- the field expects are entered.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Patch for Elm 2.4 PL22 to correct handling of SIGWINCH signals on
- DecStations with Ultrix 4.2.
- The problem was that elm running in an xterm exits silently when the
- window is resize. This was caused by incorrect signal handling for BSD.
- From: vo...@isa.de
-
- Implement new timezone handling. New file lib/get_tz.c with new timezone
- routines. Added new TZMINS_USE_xxxxxx and TZNAME_USE_xxxxxx configuration
- definitions. Obsoleted TZNAME, ALTCHECK, and TZ_MINUTESWEST configuration
- definitions. Updated Configure. Modified lib/getarpdate.c and
- lib/strftime.c to use new timezone routines.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Add proper casts to free() calls to suppress warnings.
- Properly cast return types.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Added -d option to elmalias.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Elm tries to replace the system toupper() and tolower() on current
- BSD systems, which is unnecessary. Even worse, the replacements
- collide during linking with routines in isctype.o. This patch adds
- a Configure test to determine whether replacements are really needed
- (BROKE_CTYPE definition). The <ctype.h> header file is now included
- globally through hdrs/defs.h and the BROKE_CTYPE patchup is handled
- there. Inclusion of <ctype.h> was removed from *all* the individual
- files, and the toupper() and tolower() routines in lib/opt_utils.c
- were dropped.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Fix signal type for 386bsd
- From: Scott Mace <sm...@freefall.cdrom.com>
-
- When an environment variable was given as the tmpdir definition the src
- and dest overlapped in expand_env. This made elm produce a garbage
- expansion because expand_env cannot cope with overlapping src and
- dest. I added a new variable raw_temp_dir to keep src and dest not to
- overlap.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- I compiled elm 2.4.22 with Purify 2 and fixed some memory leaks and
- some reads of unitialized memory.
- From: vo...@isa.de
-
- A change to answer:s mail command to be like those of elm and filter.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Elm was failing to write an empty "alternatives" list to elmrc.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Usage message for elmalias changed.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Correct typo and use hard spaces within quotes in *clear-weed-list* note.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- fix where checkalias doesn't fully expand multi-database aliases
- From: Steve Wolf <wo...@atl.hp.com>
-
- The macro ctrl(c) did not work correctly for a DEL character
- neither did it make the backward mapping from a control char
- to the letter that is normally used with an up-arrow prefix
- to represent the control character.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Don't declare _exit() if <unistd.h> already did it.
- From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
-
- Test ANSI_C, not __STDC__ (which is not set on e.g. AIX).
- From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
-
- The ANSI version of varargs is "stdarg", not "stdargs".
- From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
-
- Added some documentation for textencoding variable.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- more purify found errors
- From: vo...@isa.de
-
- Add missing parens
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Fix problem where deleting to previous line caused duplication due to the
- file being opened for append (in append mode, all writes are to the end of
- file regardless of the file pointer).
- From: p...@lunch.asd.sgi.com (Paul Close)
-
- have Writechar() backspace over the left edge of the screen to the end
- of the previous line if the current line is not the first line on the
- screen.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Call to expand_env for pager should be call to do_expand_env.
- temp_dir not initialized.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Try splitting chown into two calls to set group on systems where
- chown of owner is restricted.
- From: Syd
-
- strtokq was called with the wrong number of parameters.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Add ability for elmalias to determine HOME if missing from the environment.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Changed a few buffers from LONG_STRING (512) to VERY_LONG_STRING
- to avoid long header lines overflowing the allocated space. At
- least 1024 bytes should be allowed in any header line/field.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Here's some more patch stuff for undersize buffers for header lines.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Fix a code portability problem with Convex.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- I found a few places more where the code was missing a call
- to fflush() before it called unlock() and fclose()/exit()
- right after unlocking the mail drop.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Erroneous Content-Length:s that ended up beyond the end of the folder
- wasn't checked for, so the rest of the folder became one big message.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- expand() didn't read the global rc file if the user elmrc didn't exist or
- didn't have an entry for maildir.
- From: Jan....@sa.erisoft.se (Jan Djarv)
-
- Conform textencoding addition to style standard.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Although it doesnt solve the limit/resync problem of new
- messages, allow them to be accessed anyway.
- From: aus...@solan.unit.no
-
-
-
- =========================================================
- Patch Set - Patches 22 through 22: Sun Jun 6 14:09:37 EDT 1993
- Elm 2.4PL21 -> Elm 2.4PL22
-
-
- If I have two aliases of the same name the duplicate is caught *but
- still written to the data file*!!!
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- test firstname == lastname and if true zero out firstname before
- writing to the aliases.text file. Let me check out the source. Now if
- you try to change a SYSTEM alias it lets you know and asks to verify
- that you are going to superceed that alias.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- fix @aliasname sort problem
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Move first name to lastname if lastname blank.
- this is the only real way for now. I think that the dbz stuff, sorting,
- and other things all hope to see a lastname.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- In some cases, with certain editors, the user can create an
- aliases.text file in which the last line is terminated with an EOF but
- doesn't have a '\n'. Currently, elm with complain that the line is
- too long.
- From: "William F. Pemberton" <wf...@holmes.acc.virginia.edu>
-
- The test in delete did not take into account for mixed case.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Fix builtin editor so you can run "readmsg" with "~<".
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Have real_from() ignore bogus timezones in From_ lines
- rather than bailing out with an error.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- According to the SVID (version 3) the function crypt is
-
- char * crypt( const char *, const char * )
-
- However, it is declared as
-
- unsigned char crypt();
-
- on line 179 of src/encode.c. The "unsigned" keyword causes the compile
- to fail on SVID3 compliant systems. Upon inspection, it appeared that
- the declaration was not even required if CRYPT was not defined, so
- changed it to be conditionally compiled.
- From: Larry Philps <lar...@sco.COM>
-
- len_next_part() was botching quote-delimited strings.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- guide fixes:
- Update for quotes
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Added safe_malloc(), safe_realloc(), and safe_strdup(). They
- will be used in the new elmalias utility.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Initialize safe_malloc() failure trap just to play it safe. Although
- Elm doesn't currently use these routines, do this just in case somebody
- someday adds a call to a library routine that does use them.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Added fetch_alias() and next_addr_in_list() routines for use in
- new elmalias utility.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Modified to use new safe_malloc() routines.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Added new utilities "elmalias" and "prlong". Modified "checkalias"
- and "listalias" to use them.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Added elmalias.1 man page. Updated Users.guide to mention elmalias.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Added references to elmalias(1L).
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Fix year handling bug in date(1) time formats.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- I have now added a parameter which controls whether want_to clears the
- line and centers the question or behaves like it did before. I also
- added a 0 at the end of the parameter list to all the other calls to
- want_to where a centered question on a clean line is not desirable.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- The builtin editor couldn't back up to a line that had a character
- at the wrapcolumn position.
- Added tab handling to the builtin editor.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- None of i, q, x, >, and ^L are recognized by the single character help
- on the options screen. <return> causes the options screen to scroll
- because all non-printing characters are echoed by the error message.
- Options and alias help files didn't list all commands.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- If a To: or Cc: line is split in a comment, that is between ( and ),
- get_and_expand_everyone won't parse that correctly.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Check for EINTR if getchar() returns EOF. Happens after a resume from an
- interactive stop.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The setting of relop to the default (EQ) was in the wrong place,
- causing the wrong relation to be inserted in the rule.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Removed a malloc of a struct condition_rec that is never used.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The USR2 signal lost messages on some OS:es and did an unnecessary resync
- on others.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The primary editor didn't change at once when you entered a new value in
- the option screen.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The wrong NLS message was used in the option screen for the "A(l)ias Sorting".
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The "window is too small..." message gets printed on the wrong screen. The
- message also needs \r\n at the end.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Added check if headers_per_page is zero in get_page().
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- want_to() wrote "No." when user pressed return even if the default answer
- wasn't == *def_ans_no.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The onoff macro assumes a boolean option only has values 1 or 0.
- This is not true for forms option (may be 2 == MAYBE).
-
- This is known bug EB51 BTW. I'm looking at the list now and there are some
- bugs that I think are simple, and I'll try to fix some of them.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Fix to don't use address from reply-to field if it is empty.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- This can not happen according to RFC822. It requires at least one address if the
- reply-to is present, so this bug (EB48) isn't really a bug. But one can
- always try to be nice :-).
-
- nameof() didn't check that the character after the common string was /, thus
- (if Mail is the folderdir) Maildir/x was made to be =dir/x.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Added function enforce_newline to enforce newline (what else :-) at
- end of message.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- These patches makes 'T' (since it was free) do a Tag and Move command in the
- index and alias page, and in the builtin pager.
- In the alias help in src/alias.c, there is a tolower done on the character
- one wants help for. This is clearly wrong.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- On AIX, __STDC__ is not defined but it does use unistd.h, etc. In
- hdrs/def.h, ANS_C already gets defined if __STDC__ or _AIX. But this
- variable then needs to be used in src/init.c and hdrs/filter.h in place
- of the current test for __STDC__.
- From: rst...@elegant.com (Robert Story)
-
- the posix macros to interpret the result of the stat-call.
- From: vo...@isa.de (Gerald Vogt)
-
- In GetPrompt(), when timeout = 0 make sure we check the return of
- ReadCh() for EINTR on non-POSIX (BSDish) systems.
- From: t...@osf.org
-
- I noticed when I was sorting a mailbox by subject, that 2 messages with
- the following subjects
-
- Subject: Re: Reading news
- Subject: Reading news
-
- they were sorted as shown above even though the "Re:" message was
- "Sent" after the original. It turns out that the routine skip_re has a
- bug. If the actual subject (the part after the "Re: ") starts with the
- characters "re" skip_re will erroneously not strip the "Re:" part at
- all. The following patch fixes that behaviour.
- From: Larry Philps <lar...@sco.COM>
-
- Give up and add an Ultrix specific patch. There is a bug in Ispell under
- ultrix. The problem is that when ispell returns, the terminal is no
- longer in raw mode. (Ispell isn't restoring the terminal parameters)
- From: Scott Ames <sc...@cwis.unomaha.edu>
-
- For many embedded X.400 addresses in the format
- "/.../.../.../.../"@admd.country NLEN was simply too short and part of
- the address never made it to the reply address. In my opinion 512 bytes
- should be enough. So make it LONG_STRING.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- I found a small screen corruption problem with elm. If you select 'c' for
- change mailbox and then back out by just typing <Return> at the prompt for the
- new mailbox, the prompt 'Command: ' seems to be reprinted on the wrong line
- leaving the previous prompt and the 'Change Mailbox' string in place.
-
- Further investiagtion tracked the problem to the softkey programming. When a
- newline (LF) character is sent to the terminal in the sofkey's "send" string,
- the terminal still performs a linefeed just as if the linefeed were sent at any
- other time. The particlar set of softkeys for change mode has four such
- newlines and this is enought to cause the screen to scroll up one line. This
- in turn causes the prompt to appear on the wrong line.
-
- I have fixed this by replacing the newlines with carriage returns instead. I
- checked and this still performs the desired action without actually scrolling
- the screen.
- From: Steve Fosdick <ste...@aom.bt.co.uk>
-
- Lets try it again. In the file newmbox.c you check whether a mail is
- metamail. You also check whether a mail has a sun-attachment but elm doesn't
- recognize whether it has other attachment from for example the NeXT.
- From: r...@IS.TWI.TUDelft.NL (Rob Kooper)
-
- For convex, #if-defed memcpy, memset and sleep.
- From: r...@oso.chalmers.se (Rafal Maszkowski)
-
- SunOS 4.1.3 uses the BSD convention for signal handling in system
- calls like read. The system call resumes when the signal handler
- returns unless the SA_INTERRUPT flag is set. Thus to make elm resize
- it's window after a SIGWINCH this flag must be set.
- From: vo...@isa.de (Gerald Vogt)
-
- readmsg treated a line with From_ preceeded by whitespace as a valid
- message delimiter.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- frm treated a line with From_ preceeded by whitespace as a valid
- message delimiter.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- newmail treated a line with From_ preceeded by whitespace as a valid
- message delimiter.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The message OptionExitHelp in s_elm.m is called OptionReturnHelp in header and
- source files. Change it to keep consistency.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- There was a mismatch between OptionPrintHelp and the message in src/options.c
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- It's very non-portable, and fairly dangerous, to ass_u_me that you
- know what's inside a FILE. So don't #define clearerr().
- From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
-
- Use strerror() with ANSI compilers.
- From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
-
- I'm using Elm 2.4.21 under Linux. Linux has no Bourne shell. Each
- user installs her favorite shell as /bin/sh. I use Bash 1.12.
-
- Elm invokes the mail transport (MTA) like so:
-
- ( ( MTA destination; rm -f tempfile ) & ) < tempfile &
-
- This form of command doesn't work with my Bash, in which any command
- which is backgrounded ("&") gets its stdin attached to /dev/null.
-
- The below patch arranges for Elm to call the MTA thusly:
-
- ( MTA destination <tempfile; rm -f tempfile ) &
- From: decwrl!uunet.UU.NET!fin!chip (Chip Salzenberg)
-
- Use pointer arithmetic for aliases on crays
- From: Quentin Van Abbe <rxx...@argolis.osf.rmit.OZ.AU>
-
- NLS message ElmOptionBorderMenu should be ElmOptionBorderHelp in one place.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Try and get getarpdate to work on AIX
- From: "William F. Pemberton" <wf...@holmes.acc.virginia.edu>
-
- If there are local user names (account names) in the alias, they don't
- get fully expanded with a GCOS field like they do when you type an
- account name on the To line.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Jan's removal of tolower in alias.c breaks help for 'I'. This fixes
- that and makes the help messages for characters that have printable
- synonyms on the alias and options screens consistent with the help files.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Fix problem where "<space>From" was recognized as a valid "From_" line.
- From: decwrl!decvax!gatech!WLK.COM!chip (Chip Rosenthal)
-
- created a new elmrc variable named "readmsginc". This specifies an
- increment by which the message count is updated. If this variable is
- set to, say, 25, then the message count will only be updated every 25
- messages, displaying 0, 25, 50, 75, and so forth. The default value
- of 1 will cause Elm to behave exactly as it currently does in PL21.
- From: Eric Peterson <epet...@encore.com>
-
- On the DEC Alpha, OSF/1 the following change made things happy.
- From: da...@opus.csd.uwm.edu (Dave Rasmussen)
-
- Prevent overwriting appended message.
- From: Jason Molenda <mol...@sequent.com>
-
- Add sleepmsg to elmrc to control sleep timing for transient messages
- From: Syd
-
- When compiled on a POSIX host PL22 failed checking whether the file is
- readable and a regular file or not. There was one `!' missing in the
- `if (S_ISREG(mode))' test which should read `if (! S_ISREG(mode))'.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Fix wrong message being displayed and then overwritten
- for long aliases.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- The recent feature addition for the "readmsginc" variable did not modify
- the output statement that is used when MMDF is defined. The following
- patch makes the variable work on MMDF systems.
- From: Larry Philps <lar...@sco.COM>
-
- A MIME body-part must end with a newline even when there was no newline
- at the end of the actual body or the body is null. Otherwise the next
- mime boundary may not be recognized. The same goes with the closing
- boundary too.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Moved the new numeric variables to the Numeric Variables section and
- applied the quoting/highlight policy to them.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- When frm checked for file access on a POSIX system there
- was a test `&& S_ISREG(mode)' instead of `&& ! S_ISREG(mode)'
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- A couple of calls to want_to() had typos. Here is the patch.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- document new tidy feature
- From: da...@devteq.co.uk (Dave Thomas)
-
- This is a trivial patch to 'from.c' to tidy up the output is
- the cases where the 'from' part is longer that 20 characters.
- It adds the new '-t' (for tidy) option:
- From: da...@devteq.co.uk (Dave Thomas)
-
- fix elmalias bug
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Fix bug where text following "<" within double-quote delimited comment
- is taken as an address.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- fix want-to patch collision
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- It looks like there was some earlier patch that re-introduced
- some lock problems from the past time of 2.4beta.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- While looking into the feasibility of adding `limit sender' as requested
- on Usenet, I noticed that the limit code was replicated for each of
- the supported conditions. The following patch simplifies limit_selection()
- by sharing the common code between all conditions.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- In the Makefile listalias was given only a+x permission
- though it should have been a+rx.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Total rewrite of verify_transmission(). The existing code was a monsterous
- mess and rife with bugs (couldn't forget zero-length messages in send-only
- mode, prompts were being setup wrong, perms on Canceled.mail not done right,
- etc. etc. etc.) Previously, the work had been split among two places,
- the main code in mail() and the menu in verify_transmission(), and Elm kept
- bouncing back and forth between the two. Now, all work is performed in
- verify_transmission() and it simply returns a send-it/forget-it status.
- Modified "Canceled.mail" handling so that the files it creates are in
- an mbox format (i.e. now includes headers as well as message body).
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- With this patch build_address() should treat local mailing
- lists and other aliases known by the transport agent as valid
- addresses.
- I also conditionalized printing the "Expands to: " message
- in check_only mode to be done only when there is an expanded
- address to print. Build_address will inform anyway about an
- alias that does not exist.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Move the actual file saving code out of "save_copy()" into a seperate
- routine called "append_copy_to_file()" to make it globally available.
- In particular the "Canceled.mail" handling is going to be rewritten
- to use it.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Dave Thomas forgot to update the NLS message file when he added the tidy
- option to frm. While I was at it, I did a little cleanup to keep things
- alphabetized.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- check for missing replyfile
- From: r...@lorien.gatech.edu (Roy Mongiovi)
-
- Elm either failed to expand a group alias or crashed in strlen
- (called from do_expand_group()).
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Cosmetic addition to previous verify_transmission() changes. The
- merged code highlighted the fact that i)spell displayed a message
- and then immediately cleared the screen (erasing that message) before
- invoking ispell. This patch drops the clear screen.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Make it use the message catalog already defined
- From: Super Y.S.T. <tab...@matsumoto.dcl.co.jp>
-
-
-
-
-
-
- =========================================================
- Patch Set - Patches 21 through 21: Mon Feb 8 13:41:36 EST 1993
- Elm 2.4PL20 -> Elm 2.4PL21
-
- Do not assume that "char c" can represent EOF.
- From: ch...@tct.com (Chip Salzenberg)
-
- exitprog.c makes a reference to a null character pointer, savecopy.c
- tries to reference an uninitialized variable, and the previous patch to
- src/lock.c to get rid of an uninitialized variable compiler message
- needed to be put in filter/lock.c as well.
- From: w...@grouper.mkt.csd.harris.com (W. David Higgins)
-
- Just a small bugfix for the '#' (Debug Message) screen. The columns of the
- various flags don't all line up properly:
- From: Gary Bartlett <ga...@abekrd.co.uk>
-
- Significant changes to provide consistent Date and From_ header
- cracking. Overhauled date utilities and moved into library. Moved
- real_from() into library. Modified frm, newmail, and readmsg utilities
- to use library version of real_from(). Moved get_word() from Elm
- source into library. Added new library routines atonum() and strfcpy().
- Fixed trailing backslash bug in len_next().
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- add c)hange alias command to alias helpfile
- if a deleted alias is changed, undelete it. Also added the 'N'
- flag to changed aliases to help remind the user. Documented it.
- Note: if they mark the alias for deletion AFTER making the change it
- WILL be deleted. (and marked accordingly)
- modified alias mode title string to indicate when a resync was
- needed.
- allow editing alias file when none exist.
- Now aliases are check for illegal characters (and WS) and
- addresses are check for illegal WS when they are being entered. If
- anything illegal is found and message is printed and they keep entering
- the item until they get it right.
- I fixed a couple of places where int should be long to match
- the declared type of alias_rec.length
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- fix which file name is used on confirm messages
- From: vo...@isa.de (Gerald Vogt)
-
- There is a mismatch between the number of args and the format string in
- src/pattern.c.
- In nls/C/C/C/s_filter.m there is a , after OutOfMemory.
- This is my fault, and although it doesn't seem to affect things, there is no
- need for it.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Elm switches screens prematurely when calling metamail. It switches
- before writing the "Press any key..." message, thus losing metamail output.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- read_headers() in src/newmbox.c assumes that Mime-Version preceeds
- Content-Type in the headers. I removed that assumption.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- On a resync, the temp file was being reopened in *append*
- mode, thus the fseek that tried to back up the file pointer had no
- effect.
- From: Larry Philps <lar...@sco.COM>
-
- alter the message on aborts to report the temp file name to the user
- From: The Postmaster <sys...@central1.lancaster.ac.uk>
-
- During 'make uninstall', an error occurs with the make for doc/,
- due to a wrongly-extended "if" statement in the Makefile.
- From: Allan Kugel <hico2!hico3!al...@tsdiag.ocpt.ccur.com>
-
- Nits and typos in the NLS messages and corresponding default messages.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Fix one of the aliases.dir to be aliases.pag.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Some systems don't have SIGBUS, make it optional.
- From: Syd
-
- When SY_ENV_SHELL is set for syscall() it ends up touching SHELL in
- the parent's environment if vfork is used, so change to fork.
- From: ta...@uunet.uu.net (David C Lawrence)
-
- Adds a new integer parameter builtinlines.
- if (builtinlines < 0) and (the length of the message < LINES on
- screen + builtinlines) use internal.
- if (builtinlines > 0) and (length of message < builtinlines)
- use internal pager.
- if (builtinlines = 0) or none of the above conditions hold, use the
- external pager if defined.
- From: "John P. Rouillard" <rou...@ra.cs.umb.edu>
-
- I implemented a change to filter's default verbose message format
- including %x %X style date and time along with username
- From: ma...@drd.com (Mark Lawrence)
-
- Filter turns spaces in quoted strings into _ and then back again. This destroys
- any _ that where there in the first place. This patch removes that.
- Also fixed a minor bug where 'filter -r' wrote out the wrong thing if the
- relation in a rule was '~'.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The following minor patch for leavembox.c is useful for BSD systems
- which implement correct (per SVID & POSIX) struct utimbuf. Where the
- source previously tested just '#ifdef BSD' it now tests '#if
- defined(BSD) && !defined(UTIMBUF)'. This suppresses a compile-time
- warning on ConvexOS due to the prototype of utime.
- From: rwr...@dhostwo.convex.com (Randy Wright)
-
- Correct MMDF syntax problems and newmail botches.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- When elm exits because a spool mailbox is used, it should do a Raw(OFF) so
- that the error message get's printed on the right screen.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- It seams that SCO Unix nedds 1 pair of () extra to get
- the new newmail.c code to work.
- From: Jan S{ll <jan%uni...@Mail.SWIP.net>
-
- fixed the behaviour of the tool nfrm or frm -snew to be inconsistent
- with elm itself. In from.c it never recognized the file in the MAIL
- environment variable to be a SPOOL file as you say in the source.
- From: Erick Otto <eo...@hvlpa.ns-nl.att.com>
-
- There is a small bug in this routine in Chip's PL21 patch. The code
- calls atonum to convert the 4 digit timezone field. However this field
- is actually of the form HHMM, not a decimal number, so for example
- -0500 was being converted to -500 rather than the correct -300.
- From: Larry Philps <lar...@sco.COM>
-
- Corrections to PL21 Alpha docs and consistent punctuation use in help files.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- When newmail stats/reads the mailbox it updates the access times. This
- causes problems for users that run both newmail and xbiff since xbiff
- just looks at the access times of the mailbox. Added code to newmail
- that borrows some code from src/leavembox.c for updating mailbox access
- times.
- From: a...@redwood.cray.com (Chris Jackman)
-
- More utime portability problems with convex
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Adresses with double quoted strings that contains comma was parsed
- wrongly by break_down_tolist() and figure_out_addressee().
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Fix where we remove the extra hostbangs and on which fields we do
- it to include bcc and cc as well as to, and to do it in the file
- copies as well as the command line.
- From: Syd via code change request from d...@neptune.att.com
- A Raw(OFF) was missing so when in mail only mode and one
- does f)orget, the "Message saved" ends up on wrong screen.
- Also added \r\n to end of messages to make output look nicer.
-
- When composing mail in the builtin editor, it wrapped on /.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- xrealloc name conflicts with some os having a routine called xrealloc,
- renamed it elm_xrealloc.
- From: Syd
-
- added the RFC822 fields Comments, In-Reply-To and References.
- to fastmail.
- From: Greg Smith <sm...@heliotrope.bucknell.edu>
-
- Fix src/alias.c for which seek is being used, FILE * requires fseek
- From: Syd via prompt from mfv...@netcom.com (Michael Vargo)
-
- Add cast to silence compiler warning.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Make alias names consistently handled as lower case.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Fix to copy_file to ignore unescaped from if content_length not yet reached.
- Fixes to NLS messages match number of newlines between default messages
- and NLS messages. Also an extra ) was removed.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
-
-
-
-
-
-
-
- =========================================================
- Patch Set - Patches 18 through 20: Thu Dec 24 18:53:52 EST 1992
- Elm 2.4PL17 -> Elm 2.4PL20
-
- Fix unintended change where forwarding without editing started adding
- prefix chars
- From: Syd
-
- Here are the doc changes for my additions to the alias system and
- the new switches to listalias.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Add a c)hange alias, -u and -t options to listalias to list only user
- and only system aliases respectively.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Fix formatting and typograpical problems
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Always pass three parameters to header_cmp().
- From: ch...@tct.com (Chip Salzenberg)
-
- Fixed where when doing ! or | and ti/te is enabled, one doesn't see the
- "Press any key to return to ELM:" message. because the screens are
- switched before the message is printed.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Quote from the filter of phrase to prevent RFC-822 parsing problems
- From: Syd via request from Ian Stewartson <iste...@dlvax2.datlog.co.uk>
-
- EDITOROPTS and DEFEDITOR appear to be unused but here is
- a patch to make use of $editoropts.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Fix confirm prompts to follow Elm style in confirm append/create
- From: Syd
-
- Fix messages and nls messages to match. Plus use want_to
- where appropriate.
- From: Syd, via prompting from Jan Djarv <Jan....@sa.erisoft.se>
-
- Add Ignore of CONT signals on exit for Ultrix
- From: Syd via prompt from Bob Mason
-
- Add lstat call for proper detection of symlink in leavembox.c
- From: Syd via prompt from Bryan Curnutt
-
- Make copy_sans_escape expand tabs to prevent subject displays from getting messed up
- From: Syd via request from p...@Cayman.COM (Paul Fox)
-
-
-
-
- =========================================================
- Patch Set - Patches 13 through 17: Fri Dec 11 20:52:23 EST 1992
- Elm 2.4PL13 -> Elm 2.4PL17
-
- Attempt to fix where Elm was issuing the final error message on the
- cursor screen instead of the regular screen on terminals where the
- ti/te code swaps the screen.
- From: Syd
-
- Internal fix to use correct errno on some error messages.
- From: Syd
-
- Add decode option to copy_message
- From: bjo...@stud.cs.uit.no (Bjoern Stabell)
-
- Fix Configure for ls that return 0 status even if file
- is not found, re packing man pages.
- From: a...@redwood.cray.com (Chris Jackman)
-
- Fix Configure not getting mailgrp correct on symlinks.
- From: a...@redwood.cray.com (Chris Jackman)
-
- Add missing -n flag to doc makefile.
- From: g...@dogmatix.inmos.co.uk
-
- Always init fcntlerr and flockerr in src/lock.c to avoid compiler
- warnings.
- From: Syd via prompt from w...@grouper.mkt.csd.harris.com (W. David Higgins)
-
- Traditional C used 'unsigned preserving' rules when an integral data
- value is widened to integer and ANSI C changed the rules to 'value
- preserving'. This is one of the few things that the ANSI X3J11 committee
- did that might break existing programs. Casting to (int)
- From: Bo.Asbjorn.Muldbak <b...@jutland.ColumbiaSC.NCR.COM>
-
- When ELM is reporting "appending to <foldername>" I never get to see
- but a flash of light, before the message line has been replaced by a
- dummy "Messages saved" string. And if you happen to have mistyped the
- foldername or the leading '=', you never see the foldername.
-
- This fix will change file.c to show either
-
- Message <what> to <foldername>
-
- or
- <#> messages <what> to <foldername>
- From: Bo.Asbjorn.Muldbak <b...@jutland.ColumbiaSC.NCR.COM>
-
- This implements the use of SIGUSR1 and SIGUSR2 as discussed on the
- mailing list recently, and adds them to the documentation.
- From: s...@lokkur.dexter.mi.us (Steve Simmons)
-
- Attempt to patch posix_signal for SunOS problem.
- From: A lot of the Elm group
-
- Change canceled mail message to indicate full path name as
- AFS users don't have home and elm's home the same.
- From: Syd
-
- Fix doc/Makefile.SH to have an else clause on all if's so that
- if's that return an error code on a not taken if and a null else
- clause don't exit the makefile
- From: Syd via requests from many
-
- General changes for apollo portability
- From: gor...@mcil.comm.mot.com (Gordon Berkley)
-
- Fix typos in edit.c
- From: Bo.Asbjorn.Muldbak <b...@jutland.ColumbiaSC.NCR.COM>
-
- If sigset() and sigrelse() are available, release signal before
- using longjmp() to leave signal handler.
- From: ch...@tct.com (Chip Salzenberg)
-
- Anytime elm wants to re-run newalias, selected is set to 0.
- (removing any limit in effect)
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Allow for use from restricted shell by putting SHELL=/bin/sh in the
- environment of spawned mail transport program.
- From: ch...@tct.com (Chip Salzenberg)
-
- fix Obvious typos.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- List_folder knew only about '=' but nothing about the rest
- of [+=%] as one would have expected.
- From: Jukka Antero Ukkonen <ukk...@venus.csc.fi>
-
- Fix where the user creates a first new alias, then deletes it, the
- alias stays on screen, but the file really will be empty if it was the
- last alias, so the retry to delete gives 'cannot open ...file' messages
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Make Elm complain about spaces that are not after commas in
- alias and address lists
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Make verb and pronoun agree.
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- in do_get_alias(). abuf[] was under dimensioned.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Remove the old packed manual page before trying to pack the new one.
- From: Tom Moore <tmo...@fievel.DaytonOH.NCR.COM>
-
- Fix double inclusion of sys/types.h
- From: Tom Moore <tmo...@wnas.DaytonOH.NCR.COM>
-
- Fix building editor wrap problem
- From: Syd via prompting from vo...@isa.de (Gerald Vogt)
-
-
-
-
- =========================================================
- Patch Set - Patches 12 and 13: Sat Nov 21 21:03:26 EST 1992
- Elm 2.4PL11 -> Elm 2.4PL13
-
- Handle the case where a system does
- > #define jmp_buf sigjmp_buf
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Fix segmentation violation on restricted alias page jump.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Fix bug where alias records were not sorting by both last and
- first names.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Fix when expanding the macro '%S', the subject line is scanned for a
- 'Re:', and if nothing is found, a '"Re: ' is added. But when a 'Re:'
- *is* found, then nothing is added, not even the '"'.
- From: Sigmund Austigard <aus...@solan.unit.no>
-
- I was playing with the metamail stuff and Sun's Openwindows Mailtool
- and discovered that I was able to 'display' messages generated with
- Mailtool in elm using metamail. This marks the Sun Attachments as
- needing metamail.
- From: Lutz Brunke <bru...@dkrz-hamburg.dbp.de>
-
- Change the way Configure and doc/Makefile.SH deal with installing
- man pages.
- From: Tom Moore <tmo...@wnas.DaytonOH.NCR.COM>
-
- Add support for a "config.changes" file to override Configure decisions.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Allow SCO MMDF to use the mmdf library for mailer via execmail.
- From: Larry Philps <lar...@sco.com>
-
- Add on initial display or display where the entire screen is being
- drawn, we should not output the trailing blanks that clear the old
- value.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- This mod fixes overlapping prototypes for strchr and index on
- Convex.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- According to the MIME BNF, quoted strings are allowed in the value portion
- of a parameter.
- From: c...@alias.com (C. Harald Koch)
-
- The fastmail utility appears to work incorrectly when multiple addresses are
- supplied. Spaces were inserted between addresses rather than commas.
- From: lit...@carina.hks.com (Jim Littlefield)
-
-
-
- =========================================================
- Patch Set - Patch 11: Tues Nov 17 1992
- Elm 2.4PL10 -> Elm 2.4PL11
-
- Quickie fix to handle a botched edit of a test line in Configure
-
-
-
-
- =========================================================
- Patch Set - Patches 9 and 10 : Sat Nov 14 21:34:44 EST 1992
- Elm 2.4PL8 -> Elm 2.4PL10
-
- I think that the code in 'newmbox.c' which handles bad 'Content-length'
- entries is incomplete. The file-ptr for the mail file is
- backed up, but the file-ptr of the temp file WAS LEFT UNMODIFIED !
- From langesw.ssw.de!root Wed Nov 11 14:28:57 1992
-
- When elm copies the temp mailbox back to the mail spool to resync or
- quit, it changes to the mailgroup before attempting to diddle in the
- mail spool, but when it copies the temp mailbox back to the mail spool
- after editing, it forgets to change to mailgroup. This patch appears
- to work, but I haven't exhaustively checked for some path that leaves
- the gid set
- wrong. From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- There's an error in two messages in s_aliases.m which causes elm2.4
- to core dump when resyncronize aliases. (%s/%s) should be (%c/%c).
-
- This bug doesn't show up unless you use message catalogs, since the default
- message in a_quit.c is correct.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Fix how nls emulation lib gencat links prev pointers
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- The alias message_count isn't set to zero if the last alias has
- been deleted from the alias table. As no aliases are reread from
- the aliases database the message_count is left as it was before.
-
- Fixed that the function do_newalias() sometimes returns without freeing
- the buffer allocated before. The patch adds these free calls.
-
- When you erroneously type a number in your folder elm asks you for
- a new current message number. But now if you erase this one number
- and leave the string empty elm will set the new current message to
- the second message on our sun4! The patch adds a check for an empty
- string and returns the current number if no number was entered.
- From: vo...@isa.de (Gerald Vogt)
-
- The situation is that the .elm/aliases file is missing, but
- .elm/aliases.dir and .elm/aliases.pag exist (isn't serendipity
- wonderful?). The ndbz functions tolerate this and just put a NULL
- pointer in the db structure for the data file FILE pointer. However,
- get_one_alias() in listalias and elm doesn't account for the db_open()
- succeeding but the dbz_basef field being NULL, so it passes the NULL
- pointer to fread(). Detect null and return 0
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Clear the screen before displaying MIME:
- From: mar...@rhi.hi.is (Marius Olafsson)
-
- Add regexp processing to filter.
- Add execc operator
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
-
-
-
- =========================================================
- Patch Set - Patches 7 and 8 : Sat Nov 7 15:54:44 EST 1992
- Elm 2.4PL6 -> Elm 2.4PL8
-
- Add some tolerance for incorrect Content-Length header (fixes bug where
- Elm would combine two messages if content-length header was incorrect.
- Still has problem if incorrect content-length exactly matches multiple
- messages)
- From: Syd
-
- Change Makefile in doc to use -f as some shells don't have -x in test
- From: Syd
-
- The first is that when doing a summary, macros are expanded when printing the
- rule. IMHO they should be printed as with the -r option (i.e. %t is
- printed as "<time>" and so on).
-
- The second one is that the summary printed "applied n time" regardless of
- the value of n, not "applied n times" when n > 1.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- There is no need to write out the MIME-Version header in subparts
- From: Klaus Steinberger <Klaus.St...@Physik.Uni-Muenchen.DE>
-
- fix null dereferences from patch 5
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Fix where elm duplicates the entry's from the global elm.rc.
- It will however still copy the global weedout headers to your local
- elmrc if they where not already in it.
- From: ja...@fwi.uva.nl (Jan Wortelboer)
-
- another typo (2.4.6 Ref.guide)
- From: David.W...@gagme.chi.il.us (David W. Tamkin)
-
- comments should be allowed anywhere in the alias file.
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Symbol change for AIX370
- From: u...@watson.ibm.com
-
- Fix redefinition complaint by SCO 3.2v2.0.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- Enhanced printing support. Added "-I" to readmsg to
- suppress spurious diagnostic messages.
- From: ch...@chinacat.unicom.com (Chip Rosenthal)
-
- These small typos stopped me from making forms, so here is a patch.
- From: andrew.m...@rd.eng.bbc.co.uk (Andrew McParland)
-
- Add a hack to not use ti/te on list folders and do print
- From: Syd
-
- New header parsing routine header_cmp to allow for linear
- white space around the : in headers
- From: Syd
-
-
-
- =========================================================
- Patch Set - Patch 6 : Mon Nov 2 15:52:00 EST 1992
- Elm 2.4PL5 -> Elm 2.4PL6
-
- Things I found in doc/Ref.guide looking over patches 4 & 5:
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- More changes to folder creation confirmation
- From: Larry Philps <lar...@sco.COM>
-
- fix a bug in the forms reply caused by the Cc: buffer not being
- cleared. If one has sent mail just prior to replying to the form and
- specified a Cc: address, the form reply is also sent to those Cc:
- address(es).
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- Add missing MAKE variable in doc/Makefile.SH
- From: Syd
-
- it invokes metamail (the pseudo is because "text" isn't a legal Content-Type).
- in src/mime.c notplain() tries to check for text but fails because it should
- look for "text\n" not "text".
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- Use copy_message in mime shows to get encode processing
- From: bjo...@stud.cs.uit.no (Bjoern Stabell)
-
- Corrections to Unix date parsing and time zone storage
- From: eo...@hvlpa.att.com
-
- Prevent index underflow when wildchar is in first three chars of string
- From: Syd via note from g...@dogmatix.inmos.co.uk
-
-
- =========================================================
- Patch Set - Patches 4 and 5 : Sat Oct 24 22:48:00 EDT 1992
- Elm 2.4PL3 -> Elm 2.4PL5
-
- Fixes SysV style forwarding
- From: Baruch Cochavy <bcoc...@ilux39.intel.com>
-
- fix newmail attempting to close a file descriptor even if the corresponding
- open failed.
- From: "Peter A. Bigot" <p...@cs.arizona.edu>
-
- In our global elm.rc I keep the four options as below
-
- confirmappend = OFF Don't confirm every append to any file.
- confirmcreate = ON Confirm creation of every new file.
- confirmfiles = ON Confirm append to non folder files though.
- confirmfolders = ON In case someone does not want to be asked
- every time when creating a new file try
- to confirm creation of folders though.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- changes found by using codecenter on Elm 2.4.3
- From: Graham Hudspith <g...@inmos.co.uk>
-
- There is now an additional elmrc option "displaycharset", which
- sets the charset supported on your terminal. This is to prevent
- elm from calling out to metamail too often.
- Plus a slight documentation update for MIME composition (added examples)
- From: Klaus Steinberger <Klaus.St...@Physik.Uni-Muenchen.DE>
-
- More typos
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- I think all these are typos
- From: dwo...@pffft.sps.mot.com (Dave Wolfe)
-
- remove the 25 (MAXRULES) limitation.
- Basically it mallocs rules in hunks of RULESINC (25) as it goes along.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- fixed a bug were elm didn't call metamail on messages with a characterset,
- which could be displayed by elm itself, but message is encoded with QP
- or BASE64
- From: Klaus Steinberger <Klaus.St...@Physik.Uni-Muenchen.DE>
-
- Here are the patches to support POSIX sigaction().
- From: t...@osf.org
-
-
- =========================================================
- Patch Set - Patch 3: Mon Oct 19 13:10:28 EDT 1992
- Elm 2.4PL2 -> Elm 2.4PL3
-
- Fix spelling of name
- From: Larry Philps <lar...@sco.COM>
-
- corrected typos
- From: David.W...@gagme.chi.il.us (David W. Tamkin)
-
- Here's another; now the copyright notices on the man pages don't seem
- to have an ego problem. The various guides are just fine.
- From: Steve Simmons <s...@wotan.iti.org>
-
- setting the debug level to 5 or higher caused a core dump due to a possible
- dereference of a NULL pointer
- From: "Peter A. Bigot" <p...@cs.arizona.edu>
-
- rewrite the Configure prompt for metamail
- From: Steve Simmons <s...@iti.org>
-
- Correct reversed usage of $d_utimbuf.
- From: ch...@tct.com (Chip Salzenberg)
-
- Fix warnings from my ANSI C compiler because the declaration of
- edit_interrupt did not match the prototype for the second argument of
- a call to signal.
- From: Larry Philps <lar...@sco.COM>
-
- TEXT_SORT was supported, but UNRECOGNIZED
- From: l...@dmicvx.dmi.min.dk (Lennart Sorth)
-
- Force text arithmetic into unsigned for those systems
- with signed chars
- From: Marius Olafsson <mar...@rhi.hi.is>
-
- Change lock file name to add user name on filter locking of mail spool
- From: Peter Brouwer <p...@idca.tds.philips.nl>
-
- Fix messages to work with 4.3bsd /bin/sh
- From: w8...@TACOM-EMH1.Army.Mil (Keith Petersen - MACA WSMR)
-
- Add flags to read_rc to support command line overrides of the option.
- From: Jan Djarv <Jan....@sa.erisoft.se>
-
- adds the function bytemap() and the macros MAPIN and MAPOUT from the file
- lib/ndbz.c in the file src/alias.c.
- This fixes the byte order independence in aliases.
-
- prevent elm from exiting when resyncing the empty incoming mailbox.
- From: vo...@isa.de (Gerald Vogt)
-
- patch to make elm use (or in my case, not use) termcap/terminfo ti/te.
- From: Graham Hudspith <g...@inmos.co.uk>
-
- =========================================================
- Patch Set - Patches 1 and 2: Sat Oct 10 22:14:59 EDT 1992
- Elm 2.4PL0 -> Elm 2.4PL2
-
- Switch to wrapper for flock and fcntl locking.
- Change order to fcntl first, other order blocked.
- From: Jukka Ukkonen <ukk...@csc.fi>
-
- Fix some compiler warnings that I receive compiling Elm on my SVR4
- machine.
- From: Tom Moore <tmo...@fievel.DaytonOH.NCR.COM>
-
- Add AIX to src/curses.c for define of window size in different include
- file.
- From: Syd via note from Tom Kovar
-
- get_return() assumes that message_count reflects the number of
- messages in the current folder, but the message_count it's seeing
- from the alias subsystem is actually the *alias* count.
- toggle the main state before and after calling get_return().
- From: cl...@sfn.ORG (R. Cliff Young)
-
- Add missing setlocale and getopen to newalias and listalias.
- From: Syd
-
- Touchups on config guide
- From: David Barr <ba...@pop.psu.edu>
-
- Fix segv in wildcards if SHELL= has no / character in path
- From: Syd
-
- 1. If firstname && lastname is null then copy aliasname into the
- personal name field (inside the ()'s) when creating an alias
- from the menu using the 'n' command.
-
- 2. Now if for some reason and alias has a null personal name field
- (the person hand edited aliases.text) the blank () is not printed
- as part of the address. This actually cured another problem, where
- the To: field on the screen (when you hit 'm' on the alias menu)
- used to be blank, now the address shows up....
- From: "Robert L. Howard" <robert...@matd.gatech.edu>
-
- Updated AIX 3.2 section of README file
- From: Syd
-
- fixed a bug in the .lp macro in doc/tmac.n. The lp macros is always
- called with a unit specified for the second argument, however, the
- macro added a "n" unit specifier to that argument. The following patch
- fixes this problem.
-
- The various .guide books use the troff .tl macro liberally, but often the
- extra ' characters needed at the end of the lines to explicitly specify
- the trailing nulls fields were left off. The following patch fixes the
- erroneous lines.
- From: Larry Philps <lar...@sco.COM>
-
- While installing elm2.4 on a Sun4 running SunOS4.1.2, the Configure script
- doesn't recognize F_SETLK because it searches in /usr/include/sys/fcntl.h
- which includes /usr/include/sys/fcntlcom.h (where F_SETLK is).
- From: d...@ulysse.enst.fr (Philippe Dax)
-
- change dbm name to dbz to avoid conflicts with partial call
- ins from shared libraries, and from mixing code with yp code.
- From: Syd via prompt from Jess Anderson
-
--- 0 ----
Index: elmME+.2.5.alpha0-cvs/shared_libs/iconv/Makefile.SH
*** elm2.4.ME+.115/shared_libs/iconv/Makefile.SH 2004-01-24 13:51:43.000000000 +0200
--- elmME+.2.5.alpha0-cvs/shared_libs/iconv/Makefile.SH 2004-04-18 19:55:42.000000000 +0300
***************
*** 17,23 ****
echo "Extracting shared_libs/iconv/Makefile (with variable substitutions)"
$cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.8 2004/01/24 11:06:02 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
--- 17,23 ----
echo "Extracting shared_libs/iconv/Makefile (with variable substitutions)"
$cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.8.22.1 2004/04/18 16:55:42 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
***************
*** 92,106 ****
clean:
rm -f $(OBJS) ../../shlib/libelmme-iconv.so libiconv.a
! .PRECIOUS: $(INCLDIR)/elmshared.h ../../hdrs/defs.h
! $(INCLDIR)/elmshared.h: ../../hdrs/defs.h ../../hdrs/patchlevel.h ../../hdrs/elmlib.h $(INCLDIR)/shared.h
$(CHMOD) u+w $@
$(TOUCH) $@
! ../../hdrs/defs.h: ../../config.h ../../hdrs/sysdefs.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
Makefile: Makefile.SH ../../config.sh config.res
@echo "You must run 'sh Configure -S' or 'sh Configure'"
--- 92,111 ----
clean:
rm -f $(OBJS) ../../shlib/libelmme-iconv.so libiconv.a
! .PRECIOUS: $(INCLDIR)/elmshared.h ../../hdrs/elm_defs.h ../../hdrs/defs_major.h
! $(INCLDIR)/elmshared.h: ../../hdrs/elm_defs.h ../../hdrs/patchlevel.h $(INCLDIR)/shared.h
$(CHMOD) u+w $@
$(TOUCH) $@
! ../../hdrs/elm_defs.h: ../../hdrs/defs_major.h ../../hdrs/elm_nl_types.h ../../hdrs/elmlib.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! ../../hdrs/defs_major.h: ../../config.h ../../hdrs/sysdefs.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
Makefile: Makefile.SH ../../config.sh config.res
@echo "You must run 'sh Configure -S' or 'sh Configure'"
Index: elmME+.2.5.alpha0-cvs/shared_libs/include/elmshared.h
*** elm2.4.ME+.115/shared_libs/include/elmshared.h 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/shared_libs/include/elmshared.h 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmshared.h,v 1.5 2004/03/27 18:31:43 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmshared.h,v 1.5.8.1 2004/04/18 16:55:42 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 9,24 ****
/** Main header file for ELM ME+ shared libraries. **/
- #include <stdio.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <signal.h>
-
- #include <sys/stat.h>
-
- #include "../../hdrs/defs.h"
#include "../../hdrs/patchlevel.h"
! #include "../../hdrs/elmlib.h"
#include "shared.h"
--- 9,16 ----
/** Main header file for ELM ME+ shared libraries. **/
#include "../../hdrs/patchlevel.h"
! #include "../../hdrs/elm_defs.h"
#include "shared.h"
Index: elmME+.2.5.alpha0-cvs/shared_libs/smtp/Makefile.SH
*** elm2.4.ME+.115/shared_libs/smtp/Makefile.SH 2004-01-24 13:51:43.000000000 +0200
--- elmME+.2.5.alpha0-cvs/shared_libs/smtp/Makefile.SH 2004-04-18 19:55:42.000000000 +0300
***************
*** 17,23 ****
echo "Extracting shared_libs/smtp/Makefile (with variable substitutions)"
$cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.12 2004/01/24 11:06:02 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
--- 17,23 ----
echo "Extracting shared_libs/smtp/Makefile (with variable substitutions)"
$cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.12.22.1 2004/04/18 16:55:42 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
***************
*** 62,76 ****
clean:
rm -f $(OBJS) ../../shlib/libelmme-smtp.so libsmtp.a
! .PRECIOUS: $(INCLDIR)/elmshared.h ../../hdrs/defs.h
! $(INCLDIR)/elmshared.h: ../../hdrs/defs.h ../../hdrs/patchlevel.h ../../hdrs/elmlib.h $(INCLDIR)/shared.h
$(CHMOD) u+w $@
$(TOUCH) $@
! ../../hdrs/defs.h: ../../config.h ../../hdrs/sysdefs.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
Makefile: Makefile.SH ../../config.sh config.res
@echo "You must run 'sh Configure -S' or 'sh Configure'"
--- 62,80 ----
clean:
rm -f $(OBJS) ../../shlib/libelmme-smtp.so libsmtp.a
! .PRECIOUS: $(INCLDIR)/elmshared.h ../../hdrs/elm_defs.h ../../hdrs/defs_major.h
! $(INCLDIR)/elmshared.h: ../../hdrs/elm_defs.h ../../hdrs/patchlevel.h $(INCLDIR)/shared.h
$(CHMOD) u+w $@
$(TOUCH) $@
! ../../hdrs/elm_defs.h: ../../hdrs/defs_major.h ../../hdrs/elm_nl_types.h ../../hdrs/elmlib.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! ../../hdrs/defs_major.h: ../../config.h ../../hdrs/sysdefs.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
Makefile: Makefile.SH ../../config.sh config.res
@echo "You must run 'sh Configure -S' or 'sh Configure'"
Index: elmME+.2.5.alpha0-cvs/shared_libs/tls/Makefile.SH
*** elm2.4.ME+.115/shared_libs/tls/Makefile.SH 2004-01-24 13:51:43.000000000 +0200
--- elmME+.2.5.alpha0-cvs/shared_libs/tls/Makefile.SH 2004-04-18 19:55:42.000000000 +0300
***************
*** 17,23 ****
echo "Extracting shared_libs/tls/Makefile (with variable substitutions)"
$cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.16 2004/01/24 11:06:02 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
--- 17,23 ----
echo "Extracting shared_libs/tls/Makefile (with variable substitutions)"
$cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.16.22.1 2004/04/18 16:55:42 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
***************
*** 82,96 ****
clean:
rm -f $(OBJS) ../../shlib/libelmme-tls.so libtls.a
! .PRECIOUS: $(INCLDIR)/elmshared.h ../../hdrs/defs.h
! $(INCLDIR)/elmshared.h: ../../hdrs/defs.h ../../hdrs/patchlevel.h ../../hdrs/elmlib.h $(INCLDIR)/shared.h
$(CHMOD) u+w $@
$(TOUCH) $@
! ../../hdrs/defs.h: ../../config.h ../../hdrs/sysdefs.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
Makefile: Makefile.SH ../../config.sh config.res
@echo "You must run 'sh Configure -S' or 'sh Configure'"
--- 82,101 ----
clean:
rm -f $(OBJS) ../../shlib/libelmme-tls.so libtls.a
! .PRECIOUS: $(INCLDIR)/elmshared.h ../../hdrs/elm_defs.h ../../hdrs/defs_major.h
! $(INCLDIR)/elmshared.h: ../../hdrs/elm_defs.h ../../hdrs/patchlevel.h $(INCLDIR)/shared.h
$(CHMOD) u+w $@
$(TOUCH) $@
! ../../hdrs/elm_defs.h: ../../hdrs/defs_major.h ../../hdrs/elm_nl_types.h ../../hdrs/elmlib.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! ../../hdrs/defs_major.h: ../../config.h ../../hdrs/sysdefs.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
Makefile: Makefile.SH ../../config.sh config.res
@echo "You must run 'sh Configure -S' or 'sh Configure'"
Index: elmME+.2.5.alpha0-cvs/src/alias.c
*** elm2.4.ME+.115/src/alias.c 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/alias.c 2004-05-15 13:52:16.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: alias.c,v 1.35 2004/04/07 17:42:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** This file contains alias stuff
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: alias.c,v 1.35.2.1 2004/05/15 10:52:16 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35.2.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 src/alias.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/alias.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** This file contains alias stuff
***************
*** 2065,2070 ****
--- 2075,2104 ----
}
+
+ /* Check whether an address is aliased; if so return the alias, otherwise
+ * return NULL. */
+ char *address_to_alias(address, aview)
+ char *address;
+ struct AliasView *aview;
+ {
+ int i;
+ int ac;
+
+ open_alias_files(aview, NULL);
+
+ ac = get_alias_count(aview);
+ for (i = 0; i < ac; i++) {
+ struct alias_rec * a = give_alias(aview,i);
+ if (a) {
+ if (istrcmp(address, a->address) == 0)
+ return a->alias;
+ }
+ }
+ return NULL;
+ }
+
+
/*
* Local Variables:
* mode:c
Index: elmME+.2.5.alpha0-cvs/src/aliases/def_aliases.h
*** elm2.4.ME+.115/src/aliases/def_aliases.h 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/aliases/def_aliases.h 2004-04-18 19:55:43.000000000 +0300
***************
*** 1,8 ****
! /* $Id: def_aliases.h,v 1.4 2004/03/27 18:31:47 hurtta Exp $ */
! #include "headers.h"
#include "me.h"
-
#include "ndbz.h"
struct current_astorage {
--- 1,8 ----
! /* $Id: def_aliases.h,v 1.4.8.1 2004/04/18 16:55:43 hurtta Exp $ */
! #include "elm_defs.h"
! #include "mime.h"
#include "me.h"
#include "ndbz.h"
struct current_astorage {
Index: elmME+.2.5.alpha0-cvs/src/aliases/Makefile.SH
*** elm2.4.ME+.115/src/aliases/Makefile.SH 2004-01-24 13:51:43.000000000 +0200
--- elmME+.2.5.alpha0-cvs/src/aliases/Makefile.SH 2004-04-18 19:55:43.000000000 +0300
***************
*** 17,23 ****
echo "Extracting src/aliases/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.4 2004/01/06 09:13:39 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
--- 17,23 ----
echo "Extracting src/aliases/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.4.24.1 2004/04/18 16:55:43 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
***************
*** 62,78 ****
$(RANLIB) $@
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/headers.h def_aliases.h
! $(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! def_aliases.h: $(INCLDIR)/headers.h $(INCLDIR)/me.h $(INCLDIR)/ndbz.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 62,85 ----
$(RANLIB) $@
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/elm_defs.h $(INCLDIR)/defs_major.h def_aliases.h \
! $(INCLDIR)/me.h
! $(INCLDIR)/elm_defs.h: $(INCLDIR)/defs_major.h $(INCLDIR)/elm_nl_types.h \
! $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/defs_major.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! def_aliases.h: $(INCLDIR)/elm_defs.h $(INCLDIR)/me.h \
! $(INCLDIR)/mime.h $(INCLDIR)/ndbz.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! $(INCLDIR)/me.h: $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
Index: elmME+.2.5.alpha0-cvs/src/a_quit.c
*** elm2.4.ME+.115/src/a_quit.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/a_quit.c 2004-04-25 19:59:27.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: a_quit.c,v 1.17 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: a_quit.c,v 1.17.8.1 2004/04/25 16:59:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 67,73 ****
if (ac == 0)
return(newaliases); /* nothing changed */
! ask_questions = ((!prompt) ? FALSE : question_me);
/* YES or NO on softkeys */
/*
--- 67,73 ----
if (ac == 0)
return(newaliases); /* nothing changed */
! ask_questions = ((!prompt) ? FALSE : ask_delete);
/* YES or NO on softkeys */
/*
Index: elmME+.2.5.alpha0-cvs/src/args.c
*** elm2.4.ME+.115/src/args.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/args.c 2004-04-17 12:03:44.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: args.c,v 1.61 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.61 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: args.c,v 1.61.8.1 2004/04/17 09:03:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.61.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 292,302 ****
printf( "\t and bug reports for that reason will be rejected.\n\n");
}
#endif
! if (i == 1)
! printf("\n\tBased on Elm 2.4 PL24 - PL25\n\n");
if (i < 3) {
printf("\t(C) Copyright 1996-2004 Kari Hurtta\n");
printf("\tBased on Elm 2.4, (C) Copyright 1988-1992 USENET Community Trust\n");
printf("\tBased on Elm 2.0, (C) Copyright 1986,1987 Dave Taylor\n");
}
--- 292,305 ----
printf( "\t and bug reports for that reason will be rejected.\n\n");
}
#endif
! if (i == 1) {
! printf("\n\tBased on Elm 2.4 PL24 - PL25\n");
! printf("\tIncorporates some code from Elm 2.5 PL7\n\n");
! }
if (i < 3) {
printf("\t(C) Copyright 1996-2004 Kari Hurtta\n");
+ printf("\tBased on Elm 2.5, (C) Copyright 1988-1999 USENET Community Trust\n");
printf("\tBased on Elm 2.4, (C) Copyright 1988-1992 USENET Community Trust\n");
printf("\tBased on Elm 2.0, (C) Copyright 1986,1987 Dave Taylor\n");
}
Index: elmME+.2.5.alpha0-cvs/src/a_screen.c
*** elm2.4.ME+.115/src/a_screen.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/a_screen.c 2004-05-01 10:41:06.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: a_screen.c,v 1.15 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: a_screen.c,v 1.15.8.1 2004/05/01 07:41:06 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 51,57 ****
else if (entry->status & EXPIRED) mybuffer[0] = 'E';
else if (entry->status & NEW) mybuffer[0] = 'N';
else if (entry->status & UNREAD) mybuffer[0] = 'O';
! else if (entry->status & REPLIED) mybuffer[0] = 'r';
else mybuffer[0] = ' ';
/** and the second... **/
--- 51,57 ----
else if (entry->status & EXPIRED) mybuffer[0] = 'E';
else if (entry->status & NEW) mybuffer[0] = 'N';
else if (entry->status & UNREAD) mybuffer[0] = 'O';
! else if (entry->status & REPLIED_TO) mybuffer[0] = 'r';
else mybuffer[0] = ' ';
/** and the second... **/
Index: elmME+.2.5.alpha0-cvs/src/attach_menu.c
*** elm2.4.ME+.115/src/attach_menu.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/attach_menu.c 2004-04-25 19:59:27.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.62 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.62 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.62.8.1 2004/04/25 16:59:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.62.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 2428,2434 ****
"There are no attachments!"));
break;
}
! if (question_me) {
for(;;) {
PutLine0(LINES-3, 0, "Are you sure? (y/n): y");
MoveCursor(LINES-3, 21);
--- 2428,2434 ----
"There are no attachments!"));
break;
}
! if (ask_delete) {
for(;;) {
PutLine0(LINES-3, 0, "Are you sure? (y/n): y");
MoveCursor(LINES-3, 21);
Index: elmME+.2.5.alpha0-cvs/src/browser.c
*** elm2.4.ME+.115/src/browser.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/browser.c 2004-04-25 17:52:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: browser.c,v 1.29 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: browser.c,v 1.29.8.1 2004/04/25 14:52:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 1281,1287 ****
struct string **buffer;
int * redraw;
enum word_sel w;
! string * prev_fold;
struct AliasView *aview;
CONST char *format;
CONST char *msg;
--- 1281,1287 ----
struct string **buffer;
int * redraw;
enum word_sel w;
! struct string * prev_fold;
struct AliasView *aview;
CONST char *format;
CONST char *msg;
Index: elmME+.2.5.alpha0-cvs/src/builtin++.c
*** elm2.4.ME+.115/src/builtin++.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/builtin++.c 2004-04-30 19:50:06.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: builtin++.c,v 1.23 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: builtin++.c,v 1.23.8.1 2004/04/30 16:50:06 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 446,452 ****
{
int code;
- /* KESKEN */
code = optionally_enter2 (page,
&search_pattern,
LINES-1, 0,
--- 446,451 ----
Index: elmME+.2.5.alpha0-cvs/src/def_elm.h
*** elm2.4.ME+.115/src/def_elm.h 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/def_elm.h 2004-04-18 19:55:42.000000000 +0300
***************
*** 1,16 ****
! /* $Id: def_elm.h,v 1.3 2004/03/27 18:31:44 hurtta Exp $ */
! /* Author: Kari Hurtta */
/* Included on all src files on src (ie. on main elm)
- ... execpt elm.c (which includes elm.h)
*/
! #include "headers.h"
#include "me.h"
- extern JMP_BUF GetPromptBuf; /* setjmp buffer */
- extern int InGetPrompt; /* set if in GetPrompt() in read() */
/*
* Local Variables:
--- 1,19 ----
! /* $Id: def_elm.h,v 1.3.8.1 2004/04/18 16:55:42 hurtta Exp $ */
! /******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3.8.1 $ $State: Exp $
! *
! * Author: Kari Hurtta <hurtt...@posti.FMI.FI>
! *****************************************************************************/
/* Included on all src files on src (ie. on main elm)
*/
! #include "elm_defs.h"
! #include "mime.h"
#include "me.h"
+ #include "elm_globals.h"
/*
* Local Variables:
Index: elmME+.2.5.alpha0-cvs/src/editmsg.c
*** elm2.4.ME+.115/src/editmsg.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/editmsg.c 2004-05-04 21:39:33.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.42 2004/03/27 18:31:44 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
*****************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** This contains routines to do with starting up and using an editor (or two)
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.42.8.2 2004/05/04 18:39:33 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
*****************************************************************************
+ * Based on Elm 2.4 src/editmsg.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/editmsg.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** This contains routines to do with starting up and using an editor (or two)
***************
*** 688,693 ****
--- 698,710 ----
}
Raw(ON);
+ /* Flush input buffer. This is especially important under X,
+ * where accidental keystrokes in the elm window could make
+ * things messy.
+ */
+ if (edit_flush)
+ FlushInput();
+
enforce_newline(filename2);
if (filename2 != filename) {
***************
*** 1939,1945 ****
static struct string **gb_editmsg(I,em, base_page)
struct enter_info *I;
enum enter_mode em;
! struct menu_context *base_page; /* KESKEN */
{
switch(em) {
case em_redraw_initial:
--- 1956,1962 ----
static struct string **gb_editmsg(I,em, base_page)
struct enter_info *I;
enum enter_mode em;
! struct menu_context *base_page;
{
switch(em) {
case em_redraw_initial:
Index: elmME+.2.5.alpha0-cvs/src/elm.c
*** elm2.4.ME+.115/src/elm.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/elm.c 2004-05-15 23:11:36.000000000 +0300
***************
*** 1,32 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.69 2004/03/27 18:31:44 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.69 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
*****************************************************************************
* The Elm Mail System
*
* This file and all associated files and documentation:
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/* Main program of the ELM mail system!
*/
#include "patchlevel.h"
! #include "elm.h"
#include "s_elm.h"
#ifdef BSD_TYPE
# include <sys/timeb.h>
#endif
- #include "mime.h"
- #include "me.h"
-
DEBUG_VAR(Debug,__FILE__,"ELM");
--- 1,42 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.69.8.3 2004/05/15 20:11:36 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.69.8.3 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
*****************************************************************************
+ * Based on Elm 2.4 src/elm.c. That code was following copyright:
+ *
* The Elm Mail System
*
* This file and all associated files and documentation:
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/elm.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * This file and all associated files and documentation:
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/* Main program of the ELM mail system!
*/
#include "patchlevel.h"
!
! #define INTERN
! #include "def_elm.h"
#include "s_elm.h"
#ifdef BSD_TYPE
# include <sys/timeb.h>
#endif
DEBUG_VAR(Debug,__FILE__,"ELM");
***************
*** 398,403 ****
--- 408,432 ----
*redraw = pgp_mail_public_key(mailbox, aview, page);
break;
#endif
+
+
+ case 'M' :
+ if (show_mlists) {
+ Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
+ ElmMlistOff,
+ "[Mlists Off]"));
+
+ show_mlists = 0;
+ } else {
+ Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
+ ElmMlistOn,
+ "[Mlists On]"));
+
+ show_mlists = 1;
+ }
+ (*redraw) = 1; /* force redraw */
+
+ break;
case 'm' : Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmMail,
***************
*** 1605,1611 ****
(current_header->status & URGENT) != 0,
(current_header->status & VISIBLE) != 0,
(current_header->status & UNREAD) != 0,
! (current_header->status & REPLIED) != 0,
(current_header->status & MIME_MESSAGE) != 0,
(current_header->status & PRE_MIME_CONTENT) != 0,
(current_header->status & MIME_UNSUPPORTED) != 0,
--- 1634,1640 ----
(current_header->status & URGENT) != 0,
(current_header->status & VISIBLE) != 0,
(current_header->status & UNREAD) != 0,
! (current_header->status & REPLIED_TO) != 0,
(current_header->status & MIME_MESSAGE) != 0,
(current_header->status & PRE_MIME_CONTENT) != 0,
(current_header->status & MIME_UNSUPPORTED) != 0,
Index: elmME+.2.5.alpha0-cvs/src/file.c
*** elm2.4.ME+.115/src/file.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/file.c 2004-05-15 13:52:16.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: file.c,v 1.36 2004/03/27 18:31:45 hurtta Exp $";
/****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
*****************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** File I/O routines, mostly the save to file command...
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: file.c,v 1.36.8.2 2004/05/15 10:52:16 hurtta Exp $";
/****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
*****************************************************************************
+ * Based on Elm 2.4 src/file.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/save.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** File I/O routines, mostly the save to file command...
***************
*** 67,75 ****
If text_only is text, message is decoded.
**/
! int tagged = 0, i, oldstat = 0, appending = 0,
is_ordinary_file, scount = 0;
int mesgnum = 0; /* message whose address is used for save-by-name fn */
char
answer;
--- 77,86 ----
If text_only is text, message is decoded.
**/
! int num_tagged = 0, i, oldstat = 0, appending = 0,
is_ordinary_file, scount = 0;
int mesgnum = 0; /* message whose address is used for save-by-name fn */
+ int current_is_tagged = 0; /* is current message tagged? */
char
answer;
***************
*** 85,109 ****
XXX = new_browser(selection_folder);
! if (chdr)
oldstat = chdr->status; /* remember */
*redraw = FALSE;
mc = get_message_count(mailbox);
for (i=0; i < mc; i++) {
struct header_rec * hdr = give_header(mailbox,i);
if (hdr && ison(hdr->status, TAGGED)) {
! if(!tagged)
mesgnum = i; /* first tagged msg - use this one for
* save-by-name folder name */
! tagged++;
}
}
! if (tagged == 0) {
mesgnum = current-1; /* use this one for save-by-name folder name */
- tagged = 1;
if (chdr)
setit(chdr->status, TAGGED);
/* 2 == text_only -- Not envelope information */
--- 96,153 ----
XXX = new_browser(selection_folder);
! if (chdr) {
oldstat = chdr->status; /* remember */
+ current_is_tagged = ison(chdr->status, TAGGED);
+ }
*redraw = FALSE;
mc = get_message_count(mailbox);
for (i=0; i < mc; i++) {
struct header_rec * hdr = give_header(mailbox,i);
if (hdr && ison(hdr->status, TAGGED)) {
! if(!num_tagged)
mesgnum = i; /* first tagged msg - use this one for
* save-by-name folder name */
! num_tagged++;
! }
! }
!
! /* confirm save of tagged message if selection is elsewhere */
! if (num_tagged > 0 && !current_is_tagged && confirm_tag_save) {
!
! /* XXXXX prompt? */
!
! int ret;
! int LINES, COLUMNS;
!
!
! again:
! menu_get_sizes(page, &LINES, &COLUMNS);
!
! ret = prompt_letter(LINES-4,"",*def_ans_no,
! PROMPT_yesno|PROMPT_redraw_mark,page,
! CATGETS(elm_msg_cat, ElmSet,
! ElmSavecmdSaveMarked,
! "Save marked messages? (%c/%c) "),
! *def_ans_yes, *def_ans_no);
!
! if (REDRAW_MARK == ret) {
! *redraw = 1;
! goto again;
! }
!
! if (EOF == ret)
! return 0;
!
! if (ret != *def_ans_yes) {
! num_tagged = 0;
}
}
! if (num_tagged == 0) {
mesgnum = current-1; /* use this one for save-by-name folder name */
if (chdr)
setit(chdr->status, TAGGED);
/* 2 == text_only -- Not envelope information */
***************
*** 112,119 ****
}
DPRINT(Debug,4, (&Debug,
! "%d message%s tagged for saving (save)\n", tagged,
! plural(tagged)));
while (1) {
int code;
--- 156,163 ----
}
DPRINT(Debug,4, (&Debug,
! "%d message%s tagged for saving (save)\n", num_tagged,
! plural(num_tagged)));
while (1) {
int code;
***************
*** 125,144 ****
menu_get_sizes(page, &LINES, &COLUMNS);
! if (!buffer && save_by_name &&
mhdr && mhdr->from && mhdr->from[0].addr) {
char buffer1[1000];
!
/** build default filename to save to **/
! get_return_name(mhdr->from[0].addr,
! buffer1, TRUE, sizeof buffer1);
buffer = format_string(FRM("=%s"), buffer1);
}
/* 2 == text_only -- Not envelope information */
if (text_only > 0) {
! if (tagged == 1)
gen_browser(page,
XXX,&buffer,redraw,
delete ? word_save : word_copy,
--- 169,196 ----
menu_get_sizes(page, &LINES, &COLUMNS);
! if (!buffer && ( save_by_name || save_by_alias ) &&
mhdr && mhdr->from && mhdr->from[0].addr) {
char buffer1[1000];
! char * return_alias = NULL;
!
/** build default filename to save to **/
! if (save_by_alias &&
! (return_alias = address_to_alias(mhdr->from[0].addr,
! aview)) != NULL)
! strfcpy(buffer1, return_alias, sizeof buffer);
!
! else
! get_return_name(mhdr->from[0].addr,
! buffer1, TRUE, sizeof buffer1);
!
buffer = format_string(FRM("=%s"), buffer1);
}
/* 2 == text_only -- Not envelope information */
if (text_only > 0) {
! if (num_tagged == 1)
gen_browser(page,
XXX,&buffer,redraw,
delete ? word_save : word_copy,
***************
*** 157,163 ****
"%s text messages to: "),
(delete ? cap_save_word : cap_copy_word));
} else {
! if (tagged == 1)
gen_browser(page,
XXX,&buffer,redraw,
delete ? word_save : word_copy,
--- 209,215 ----
"%s text messages to: "),
(delete ? cap_save_word : cap_copy_word));
} else {
! if (num_tagged == 1)
gen_browser(page,
XXX,&buffer,redraw,
delete ? word_save : word_copy,
***************
*** 308,318 ****
mc = get_message_count(mailbox);
for (i=0; i < mc; i++) { /* save each tagged msg */
struct header_rec * hdr = give_header(mailbox,i);
! if (hdr && ison(hdr->status, TAGGED)) {
if (!save_message(i, XXX, buffer, write_ptr,
! (tagged > 1), appending++,
silently, delete, text_only, redraw,
mailbox, aview, header_page))
fail++;
--- 360,371 ----
mc = get_message_count(mailbox);
for (i=0; i < mc; i++) { /* save each tagged msg */
struct header_rec * hdr = give_header(mailbox,i);
! if (0 == num_tagged && mesgnum == i ||
! num_tagged > 0 && hdr && ison(hdr->status, TAGGED)) {
if (!save_message(i, XXX, buffer, write_ptr,
! (num_tagged > 1), appending++,
silently, delete, text_only, redraw,
mailbox, aview, header_page))
fail++;
***************
*** 328,340 ****
delete ? save_word:copy_word, buffer);
} else {
if (text_only) {
! if (tagged == 1 && !appending)
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmTextMessageSaved,
"Text of message %s to %S."),
delete ? saved_word: copied_word,
buffer);
! else if (tagged > 1)
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmTextMessagesSaved,
"Text of %d messages %s to %S."),
--- 381,393 ----
delete ? save_word:copy_word, buffer);
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha0.patch.gz
and elm-ME+2.5.alpha0.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha0.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha0.tar.gz >
via WWW.
Before applying patch catenate part 1 - 5 first.
This patch is agaist Elm 2.4ME+ PL115 (25) --------- [ part 5/5 ] ---------
} else {
if (text_only) {
! if (num_tagged <= 1 && !appending)
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmTextMessageSaved,
"Text of message %s to %S."),
delete ? saved_word: copied_word,
buffer);
! else if (num_tagged > 1)
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmTextMessagesSaved,
"Text of %d messages %s to %S."),
***************
*** 342,353 ****
delete ? saved_word: copied_word,
buffer);
} else {
! if (tagged == 1 && !appending)
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmMessageSaved,
"Message %s to %S."),
delete ? saved_word: copied_word,
buffer);
! else if (tagged > 1)
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmMessagesSaved,
"%d messages %s to %S."),
scount,
--- 395,406 ----
delete ? saved_word: copied_word,
buffer);
} else {
! if (num_tagged <= 1 && !appending)
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmMessageSaved,
"Message %s to %S."),
delete ? saved_word: copied_word,
buffer);
! else if (num_tagged > 1)
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmMessagesSaved,
"%d messages %s to %S."),
scount,
Index: elmME+.2.5.alpha0-cvs/src/fileio.c
*** elm2.4.ME+.115/src/fileio.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/fileio.c 2004-05-16 16:46:02.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: fileio.c,v 1.56 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** File I/O routines, including deletion from the folder!
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: fileio.c,v 1.56.8.5 2004/05/16 13:46:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56.8.5 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 src/fileio.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/fileio.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** File I/O routines, including deletion from the folder!
***************
*** 24,29 ****
--- 34,61 ----
DEBUG_VAR(PgpDebug,__FILE__,"pgp");
DEBUG_VAR(MimeDebug,__FILE__,"mime");
+
+ static unsigned char *s2us P_((char *str));
+ static unsigned char *s2us(str)
+ char *str;
+ {
+ return (unsigned char *)str;
+ }
+
+ static CONST unsigned char *cs2cus P_((const char *str));
+ static CONST unsigned char *cs2cus(str)
+ CONST char *str;
+ {
+ return (CONST unsigned char *)str;
+ }
+
+ static CONST unsigned char * csUs P_((const char *str));
+ static CONST unsigned char * csUs(str)
+ CONST char *str;
+ {
+ return (CONST unsigned char *)str;
+ }
+
#include <errno.h>
#ifndef ANSI_C
extern int errno;
***************
*** 984,989 ****
--- 1016,1262 ----
return ret;
}
+
+ static void makeAttString P_((const char *attribution /* attribution string to expand */,
+ int sel_field /* field to select in "%[...]" list */,
+ const struct header_rec *messageHeader /* current message header info */,
+ out_state_t *dest_file,
+ header_list_ptr all_headers));
+
+ static void makeAttString(attribution, sel_field, messageHeader, dest_file, all_headers)
+ CONST char *attribution; /* attribution string to expand */
+ int sel_field; /* field to select in "%[...]" list */
+ CONST struct header_rec *messageHeader; /* current message header info */
+ out_state_t *dest_file;
+ header_list_ptr all_headers;
+ {
+ const char *aptr = attribution; /* cursor into the attribution spec */
+
+ int in_selection; /* currently doing %[...] list? */
+ int curr_field; /* field number of current %[...] list */
+ char fromfield[STRING]; /* room for parsed from address */
+
+ /* Convert attribution to struct strincg so that multi-byte strings work */
+
+ struct string * attr = new_string2(system_charset,cs2cus(attribution));
+ int len = string_len(attr);
+ int pos;
+
+ in_selection = FALSE;
+
+ /*
+ * Process the attribution string.
+ */
+ for ( pos = 0; pos < len; ) {
+
+ uint16 unicode = give_unicode_from_string(attr,pos);
+
+ struct string * expval = NULL;
+
+ /*
+ * Handle the character if it is not a %-expansion.
+ */
+ switch (unicode) {
+
+ case 0x007C /* '|' */: /* next choice of "%[sel0|sel1|...]" list */
+ if (in_selection) {
+ ++curr_field;
+ pos++; /* skip '|' */
+ } else {
+ expval = clip_from_string(attr,&pos,1);
+ }
+ break;
+
+ case 0x005D /* ']' */: /* end of "%[sel0|sel1|...]" list */
+ if (in_selection) {
+ in_selection = FALSE;
+ pos++;
+ } else {
+ expval = clip_from_string(attr,&pos,1);
+ }
+ break;
+
+ case 0x005C /* '\\' */: /* backslash-quoting */
+ pos++;
+ if (pos < len) {
+ unicode = give_unicode_from_string(attr,pos);
+
+ switch (unicode) {
+ case 0x0074 /* 't' */:
+ expval = new_string(system_charset);
+ add_ascii_to_string(expval,s2us("\t"));
+ break;
+ case 0x006E /* 'n' */:
+ expval = new_string(system_charset);
+ add_ascii_to_string(expval,s2us("\n"));
+ break;
+ default:
+ expval = clip_from_string(attr,&pos,1);
+ break;
+ }
+ } else {
+ pos--;
+ expval = clip_from_string(attr,&pos,1);
+ }
+ break;
+
+
+ case 0x0025 /* '%' */: /* special %-expansion */
+
+ pos++;
+ if (pos < len) {
+ unicode = give_unicode_from_string(attr,pos);
+
+
+ switch (unicode) {
+ header_list_ptr X;
+ char *c;
+ int l;
+
+ case 0x0073 /* 's' */: /* backward compatibility with 2.4 */
+ case 0x0046 /* 'F' */: /* expand from */
+
+ X = locate_header_by_name(all_headers,"From");
+
+ if (X)
+ expval = give_decoded_header(X,
+ !(messageHeader->status & NOHDRENCODING),
+ messageHeader->header_charset);
+ if (!expval) /* XXX KESKEN */
+ expval = format_string(FRM("(env-from %s)"),
+ messageHeader->env_from);
+
+ pos++;
+ break;
+
+ case 0x0044 /* 'D' */: /* expand date */
+ c = ctime(&messageHeader->time_sent);
+ l = strlen(c)-1;
+ c[l-1] = '\0';
+
+ expval = new_string(system_charset);
+ add_ascii_to_string(expval,s2us(c));
+
+ pos++;
+ break;
+
+ case 0x0049 /* 'I' */: /* expand message ID */
+
+ expval = new_string(system_charset);
+ if (messageHeader->messageid)
+ add_ascii_to_string(expval,
+ cs2cus(messageHeader->messageid));
+
+ pos++;
+ break;
+
+ case 0x0053 /* 'S' */: /* expand subject */
+ expval = dup_string(messageHeader->subject);
+ pos++;
+ break;
+
+ case 0x005B /* '[' */: /* %[sel0|sel1|...] */
+ in_selection = TRUE;
+ curr_field = 0;
+ expval = NULL;
+ pos++;
+ break;
+
+ case 0x0029 /* ')' */: /* special case for %)F - from name */
+ /*FALLTHROUGH*/
+ case 0x003E /* '>' */: /* special case for %>F - from address */
+
+ pos++;
+ if (pos < len) {
+ if (give_unicode_from_string(attr,pos) != 0x0046 /* 'F' */) {
+ pos -= 2;
+ expval = clip_from_string(attr,&pos,3);
+
+ } else {
+
+ switch (unicode) {
+
+ case 0x0029 /* ')' */: /* from name */
+
+ expval = gen_From_buffer(messageHeader);
+
+ break;
+
+ case 0x003E /* '>' */: /* from addr */
+
+ if (messageHeader->from) {
+ struct addr_item *p;
+
+ for (p = messageHeader->from; p->addr && p->fullname; p++) {
+ if (expval)
+ add_ascii_to_string(expval,s2us(", "));
+ else
+ expval = new_string(display_charset);
+ add_ascii_to_string(expval,csUs(p->addr));
+ }
+ }
+
+ expval = gen_From_buffer(messageHeader);
+
+ break;
+ }
+
+
+ if (!expval) /* XXX KESKEN */
+ expval = format_string(FRM("(env-from %s)"),
+ messageHeader->env_from);
+
+ pos++;
+
+ }
+
+ } else {
+ pos -= 2;
+ expval = clip_from_string(attr,&pos,3);
+ }
+ break;
+
+ case 0x0025 /* '%' */: /* add a % and skip on past... */
+
+ expval = clip_from_string(attr,&pos,1);
+ break;
+
+
+ default:
+ pos--;
+ expval = clip_from_string(attr,&pos,2);
+ break;
+
+ }
+ } else {
+ pos--;
+ expval = clip_from_string(attr,&pos,1);
+ }
+ break;
+
+ default: /* just a regular char */
+ expval = clip_from_string(attr,&pos,1);
+ }
+
+ /*
+ * print the expansion value
+ */
+ if (expval != NULL && (!in_selection || curr_field == sel_field)) {
+
+ state_printf(dest_file,FRM("%S"),expval);
+ }
+
+ if (expval)
+ free_string(&expval);
+
+ }
+
+ state_nlputs("\n", dest_file);
+
+ free_string(&attr);
+ }
+
+
int copy_message_2(infile,current_header,prefix,dest_file,cm_options,
env_flags)
FILE *infile;
***************
*** 1011,1022 ****
**/
int first_line = TRUE;
! int remove_header = cm_options & CM_REMOVE_HEADER;
! int remove_envelope = cm_options & CM_REMOVE_ENVELOPE;
! int update_status = cm_options & CM_UPDATE_STATUS;
! int remail = cm_options & CM_REMAIL;
! int decode = cm_options & CM_DECODE;
! int filter_headers = cm_options & CM_FILT_HDR;
int bytes_seen = 0;
int content_length_seen = FALSE;
int return_path_seen = FALSE;
--- 1284,1299 ----
**/
int first_line = TRUE;
! int remove_header = cm_options & CM_REMOVE_HEADER;
! int remove_envelope = cm_options & CM_REMOVE_ENVELOPE;
! int update_status = cm_options & CM_UPDATE_STATUS;
! int remail = cm_options & CM_REMAIL;
! int decode = cm_options & CM_DECODE;
! int filter_headers = cm_options & CM_FILT_HDR;
!
! int make_attribution = cm_options & CM_ATTRIBUTION;
! int forwarding = cm_options & CM_FORWARDING;
!
int bytes_seen = 0;
int content_length_seen = FALSE;
int return_path_seen = FALSE;
***************
*** 1125,1130 ****
--- 1402,1408 ----
}
+
/* now while not EOF & still in message... copy it! */
DPRINT(Debug,5,(&Debug,
***************
*** 1200,1205 ****
--- 1478,1513 ----
"copy_message: [%ld] end of headers. Read ~ %d bytes.\n",
R2, bytes_seen));
+ /* emit the opening attribution string */
+ if (make_attribution) {
+
+ if (forwarding) {
+ if (fwdattribution[0] != '\0') {
+
+ makeAttString(fwdattribution, 0, current_header, dest_file, all_headers);
+ } else {
+
+ struct string * From_buffer = gen_From_buffer(current_header);
+
+ if (From_buffer) {
+ state_printf(dest_file,
+ CATGETS(elm_msg_cat, ElmSet, ElmForwarded1,
+ "----- Forwarded message from %S -----\n"),
+ From_buffer);
+ free_string(& From_buffer);
+ } else
+ state_printf(dest_file,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmForwarded2,
+ "----- Forwarded message (env-from %s) -----\n"),
+ current_header->env_from);
+ state_putc('\n',dest_file);
+ }
+ } else if (attribution[0]) {
+ makeAttString(attribution, 0, current_header, dest_file, all_headers);
+ }
+ }
+
if (!remove_header) {
***************
*** 1375,1381 ****
goto fail;
}
}
! if (ison(current_header->status, REPLIED)) {
if (state_printf (dest_file, FRM("r")) == EOF) {
DPRINT(Debug,1,(&Debug, "copy_message_2 fails\n"));
goto fail;
--- 1683,1689 ----
goto fail;
}
}
! if (ison(current_header->status, REPLIED_TO)) {
if (state_printf (dest_file, FRM("r")) == EOF) {
DPRINT(Debug,1,(&Debug, "copy_message_2 fails\n"));
goto fail;
***************
*** 1438,1443 ****
--- 1746,1775 ----
goto fail;
}
+ /* emit the closing attribution */
+
+ if (make_attribution && forwarding) {
+ if (fwdattribution[0]) {
+ makeAttString(fwdattribution, 1, current_header, dest_file, all_headers);
+ } else {
+ struct string * From_buffer = gen_From_buffer(current_header);
+ if (From_buffer) {
+ state_printf(dest_file,
+ CATGETS(elm_msg_cat, ElmSet, ElmForwarded3,
+ "----- End of forwarded message from %S -----\n"),
+ From_buffer);
+
+ free_string(&From_buffer);
+ } else {
+ state_printf(dest_file,
+ CATGETS(elm_msg_cat, ElmSet,
+ ElmForwarded4,
+ "----- End of forwarded message (env-from %s) -----\n"),
+ current_header->env_from);
+ }
+ }
+ }
+
DPRINT(Debug,5,(&Debug,
"copy_message: [%ld] Body read.\n",
ftell(infile)));
Index: elmME+.2.5.alpha0-cvs/src/help.c
*** elm2.4.ME+.115/src/help.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/help.c 2004-05-16 10:27:22.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: help.c,v 1.18 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/*** help routine for ELM program
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: help.c,v 1.18.8.2 2004/05/16 07:27:22 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 src/help.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/help.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/*** help routine for ELM program
***************
*** 237,242 ****
--- 247,256 ----
"l = Limit displayed messages based on the specified criteria.");
break;
+ case 'M': s = catgets(elm_msg_cat, ElmSet, ElmHelpToggleMailingList,
+ "M = Toggle display of mailing list information.");
+ break;
+
case 'm': s = catgets(elm_msg_cat, ElmSet, ElmHelpSendMail,
"m = Create and send mail to the specified person or persons.");
break;
Index: elmME+.2.5.alpha0-cvs/src/init.c
*** elm2.4.ME+.115/src/init.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/init.c 2004-05-01 10:41:07.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: init.c,v 1.49 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/***** Initialize - read in all the defaults etc etc
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: init.c,v 1.49.8.3 2004/05/01 07:41:07 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49.8.3 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 hdrs/init.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from hdrs/init.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/***** Initialize - read in all the defaults etc etc
***************
*** 333,338 ****
--- 343,368 ----
}
}
+ /*
+ * Locking problems are common when Elm is misconfigured/misinstalled.
+ * Sometimes, rather than fixing the problem, people will set
+ * Elm setuid=root. This is *extremely* dangerous. Make sure
+ * this isn't happening. This test needed to be deferred until
+ * after the system rcfile was read in.
+ */
+ if (getuid() != geteuid() && !allow_setuid) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmInstalledSetuid,
+ "\n\
+ This version of Elm has been installed setuid=%d. This is dangerous!\n\
+ Elm is NOT designed to run in this mode, and to do so can introduce\n\
+ grave security hazards. See the description of \"allow_setuid\" in the\n\
+ Elm Reference Guide for further information.\n\n"),
+ geteuid());
+
+ error_wait();/* Be sure that we do not exit before error is shown */ exit(1);
+ }
+
+
*main_aliases = new_aliasview();
add_files_to_aview(*main_aliases);
Index: elmME+.2.5.alpha0-cvs/src/in_utils.c
*** elm2.4.ME+.115/src/in_utils.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/in_utils.c 2004-05-02 14:05:48.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.35 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.35.8.2 2004/05/02 11:05:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 46,51 ****
--- 46,194 ----
#define erase_a_char() { Writechar(BACKSPACE); Writechar(' '); \
Writechar(BACKSPACE); FlushBuffer(); }
+ int prompt_letter(
+ #if ANSI_C
+ int line, char *letters, int def,
+ int flags,
+ struct menu_context *page,
+ const char * format, const char *msg, ...
+ #else
+ line, letters, def, flags, page, format, msg, va_alist
+ #endif
+ )
+ #if !ANSI_C
+ int line;
+ char *letters;
+ int def;
+ int flags;
+ struct menu_context *page;
+ CONST char * format;
+ CONST char *msg;
+ va_dcl
+ #endif
+ {
+ struct string *question = NULL;
+
+ int ch;
+ int center = flags & PROMPT_center;
+ int yesno = flags & PROMPT_yesno;
+ int mark = flags & PROMPT_redraw_mark;
+ int ctrlL = flags & PROMTP_ctrlL;
+ int cols = 0;
+
+
+ va_list vl;
+
+ DPRINT(Debug,6, (&Debug,
+ "prompt_letter: center=%d yesno=%d mark=%d ctrlL=%d\n",
+ center,yesno,mark,ctrlL));
+
+ Va_start(vl, msg); /* defined in defs.h */
+ question = elm_smessage(0,format,msg,vl);
+ va_end(vl);
+
+ do {
+ int LINES, COLUMNS;
+ int l;
+ char *x;
+
+ menu_get_sizes(page,&LINES, &COLUMNS);
+
+ /* FIXME: Not correct */
+ l = string_len(question);
+ cols = COLUMNS - ( l + 5 ); /* 5 for "Yes." + 1 */
+ if (cols < 0) {
+ cols = 0;
+ }
+
+ DPRINT(Debug,6, (&Debug,"prompt_letter: pos line=%d column=%d\n",
+ line, (center || (cols < 2)) ? 0 : cols-2));
+ sleep((sleepmsg + 1) / 2);
+ #endif
+ }
+ MoveCursor(line, (center || (cols < 2)) ? 0 : cols-2);
+ CleartoEOLN();
+ }
+
+ return ch;
+ }
+
int want_to(question, dflt, where, clear_and_center, page)
char *question;
int dflt;
***************
*** 60,66 ****
**/
int ch, cols;
int LINES, COLUMNS;
!
redraw:
menu_get_sizes(page,&LINES, &COLUMNS);
--- 203,209 ----
**/
int ch, cols;
int LINES, COLUMNS;
!
redraw:
menu_get_sizes(page,&LINES, &COLUMNS);
***************
*** 69,75 ****
cols = 0;
}
! DPRINT(Debug,3, (&Debug,"want_to: pos line=%d column=%d\n",
where, (clear_and_center || (cols < 2)) ? 0 : cols-2));
MoveCursor(where, (clear_and_center || (cols < 2)) ? 0 : cols-2);
--- 212,218 ----
cols = 0;
}
! DPRINT(Debug,6, (&Debug,"want_to: pos line=%d column=%d\n",
where, (clear_and_center || (cols < 2)) ? 0 : cols-2));
MoveCursor(where, (clear_and_center || (cols < 2)) ? 0 : cols-2);
--- 231,257 ----
struct menu_context *page,
! struct string **buffer,
! int x, int y, int flags,
! const char * format, const char *msg, ...
#else
! page, buffer, x, y, flags, format, msg, va_alist
#endif
)
#if !ANSI_C
--- 1001,1011 ----
int optionally_enter2 (
#if ANSI_C
struct menu_context *page,
! struct string **buffer,
! int x, int y, int flags,
! const char * format, const char *msg, ...
#else
! page, buffer, x, y, flags, format, msg, va_alist
#endif
)
#if !ANSI_C
Index: elmME+.2.5.alpha0-cvs/src/leavembox.c
*** elm2.4.ME+.115/src/leavembox.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/leavembox.c 2004-05-02 14:05:48.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.44 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** leave current folder, updating etc. as needed...
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.44.8.4 2004/05/02 11:05:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44.8.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 src/leavembox.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/leavembox.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** leave current folder, updating etc. as needed...
***************
*** 353,370 ****
across the resync.
If "quitting" and "prompt" is false, then no prompting is done.
! Otherwise prompting is dependent upon the variable
! question_me, as set by an elmrc option. This behavior makes
! the 'q' command prompt just like 'c' and '$', while
! retaining the 'Q' command for a quick exit that never
! prompts.
**/
int to_delete = 0, to_store = 0, to_keep = 0, to_ignore = 0,
to_hide = 0;
int marked_deleted=0;
int i,
! last_sortby, ask_questions, asked_storage_q,
num_chgd_status;
int return_value = -1;
--- 363,381 ----
across the resync.
If "quitting" and "prompt" is false, then no prompting is done.
! Otherwise prompting is dependent upon the variables
! ask_delete, ask_keep, and ask_store, as set by elmrc
! elmrc options. This behavior makes the 'q' command prompt
! just like 'c' and '$', while retaining the 'Q' command for a
! quick exit that never prompts.
**/
int to_delete = 0, to_store = 0, to_keep = 0, to_ignore = 0,
to_hide = 0;
int marked_deleted=0;
int i,
! last_sortby, l_ask_delete, l_ask_keep, l_ask_store,
! asked_storage_q,
num_chgd_status;
int return_value = -1;
***************
*** 591,597 ****
/* =================================================================== */
! ask_questions = ((quitting && !prompt) ? FALSE : question_me);
/* YES or NO on softkeys */
/*
--- 602,610 ----
/* =================================================================== */
! l_ask_delete = ((quitting && !prompt) ? FALSE : ask_delete);
! l_ask_keep = ((quitting && !prompt) ? FALSE : ask_keep);
! l_ask_store = ((quitting && !prompt) ? FALSE : ask_store);
/* YES or NO on softkeys */
/*
***************
*** 640,646 ****
char answer = (always_del ?
*def_ans_yes : *def_ans_no); /* default answer */
! if(ask_questions) {
char * buffer = NULL;
if (marked_deleted == 1)
--- 653,659 ----
char answer = (always_del ?
*def_ans_yes : *def_ans_no); /* default answer */
! if(l_ask_delete) {
char * buffer = NULL;
if (marked_deleted == 1)
***************
*** 734,748 ****
if (need_handle) {
if (!can_store) {
! char answer = '\0';
! char * buffer = elm_message(CATGETS(elm_msg_cat, ElmSet,
! ElmNoReceived,
! "\"received\" folder not available, continue? (%c/%c) "),
*def_ans_yes, *def_ans_no);
! answer = want_to(buffer, *def_ans_no, LINES-4, 0,
! page);
if (answer != *def_ans_yes) {
return_value = -2; /* failure */
--- 747,775 ----
if (need_handle) {
if (!can_store) {
! int answer = '\0';
! again1:
! menu_get_sizes(page, &LINES, &COLUMNS);
!
! /* NOTICE: prompt_letter may return EOF */
! answer = prompt_letter(LINES-4,"P",*def_ans_yes,
! PROMPT_center|PROMPT_yesno|
! PROMPT_redraw_mark|PROMTP_ctrlL,
! page,
! CATGETS(elm_msg_cat, ElmSet,
! ElmNoReceived,
! "\"received\" folder not available, continue leaving folder? ([P]anic/%c/%c) "),
*def_ans_yes, *def_ans_no);
!
! if (answer == ('L'&31) || answer == REDRAW_MARK) {
! menu_ClearScreen(page);
! goto again1;
! }
!
! if (answer == 'P' || answer == EOF)
! emergency_exit(0);
if (answer != *def_ans_yes) {
return_value = -2; /* failure */
***************
*** 808,814 ****
answer = (always_store ?
*def_ans_yes : *def_ans_no); /* default answer */
! if(ask_questions) {
char * buffer = NULL;
if (marked_read == 1)
--- 835,841 ----
answer = (always_store ?
*def_ans_yes : *def_ans_no); /* default answer */
! if(l_ask_store) {
char * buffer = NULL;
if (marked_read == 1)
***************
*** 931,937 ****
if(marked_unread) {
answer = (always_keep ?
*def_ans_yes : *def_ans_no); /* default answer */
! if(ask_questions) {
char * buffer = NULL;
if (marked_unread == 1)
--- 958,964 ----
if(marked_unread) {
answer = (always_keep ?
*def_ans_yes : *def_ans_no); /* default answer */
! if(l_ask_keep) {
char * buffer = NULL;
if (marked_unread == 1)
Index: elmME+.2.5.alpha0-cvs/src/mailmsg1.c
*** elm2.4.ME+.115/src/mailmsg1.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/mailmsg1.c 2004-05-04 21:39:33.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: mailmsg1.c,v 1.36 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
! * The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** Interface to allow mail to be sent to users. Part of ELM **/
--- 1,26 ----
! static char rcsid[] = "@(#)$Id: mailmsg1.c,v 1.36.8.4 2004/05/04 18:39:33 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36.8.4 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
! * Based on Elm 2.4 src/mailmsg1.c. That code was following copyright:
! *
! * The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ ****************************************************************************
+ * Incorparated Elm 2.5 code from src/sndmsg.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * This file and all associated files and documentation:
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** Interface to allow mail to be sent to users. Part of ELM **/
***************
*** 643,648 ****
--- 654,661 ----
return(1); /* everything looks okay! */
}
+
+
static int copy_the_msg(headers,is_a_response, options, page)
struct mailing_headers *headers;
int *is_a_response;
***************
*** 650,686 ****
struct menu_context *page;
{
int forwarding = 0 != (options & MAIL_FORWARDING);
!
int LINES, COLUMNS;
! /** Returns True iff the user wants to copy the message being
! replied to into the edit buffer before invoking the editor!
! Sets "is_a_response" to true if message is a response...
**/
!
! char msg[SLEN];
! int answer = FALSE;
!
menu_get_sizes(page,&LINES, &COLUMNS);
!
! if (forwarding)
! answer = TRUE;
! else if (headers->to.addrs_len > 0 && !mail_only) {
! /* predefined 'to' line! */
! if (auto_copy)
! answer = TRUE;
! else {
! elm_sfprintf(msg, sizeof msg,
! CATGETS(elm_msg_cat, ElmSet, ElmCopyMessageYN,
! "Copy message? (%c/%c) "),
! *def_ans_yes, *def_ans_no);
! answer = (want_to(msg, *def_ans_no, LINES-4, 0,
! page) == *def_ans_yes);
}
! *is_a_response = TRUE;
! }
!
! return(answer);
}
int a_sendmsg(edit_message, form_letter, mailbox, aview, header_page,
--- 663,725 ----
struct menu_context *page;
{
int forwarding = 0 != (options & MAIL_FORWARDING);
!
int LINES, COLUMNS;
! /** Returns True iff the user wants to copy the message being
! replied to into the edit buffer before invoking the editor!
! Sets "is_a_response" to true if message is a response...
**/
!
! char msg[SLEN];
! int answer = FALSE;
!
!
! again:
menu_get_sizes(page,&LINES, &COLUMNS);
!
! if (forwarding)
! answer = TRUE;
! else if (headers->to.addrs_len > 0 && !mail_only) {
! /* predefined 'to' line! */
!
! if (!ask_reply_copy)
! answer = reply_copy;
! else {
!
! int ret;
!
! if (user_level < 2)
! ret = prompt_letter(LINES-4,"",
! reply_copy ? *def_ans_yes : *def_ans_no,
! PROMPT_yesno|PROMPT_redraw_mark,
! page,
! CATGETS(elm_msg_cat, ElmSet,
! ElmCopyMessageIntoReplyYN,
! "Copy message into reply? (%c/%c) "),
! *def_ans_yes, *def_ans_no);
! else
! ret = prompt_letter(LINES-4,"",
! reply_copy ? *def_ans_yes : *def_ans_no,
! PROMPT_yesno|PROMPT_redraw_mark,
! page,
! CATGETS(elm_msg_cat, ElmSet,
! ElmCopyMessageYN,
! "Copy message? (%c/%c) "),
! *def_ans_yes, *def_ans_no);
!
! if (REDRAW_MARK == ret)
! goto again;
!
! if (EOF == ret)
! return 0;
!
! answer = ret == *def_ans_yes;
! }
! *is_a_response = TRUE;
}
!
! return(answer);
}
int a_sendmsg(edit_message, form_letter, mailbox, aview, header_page,
Index: elmME+.2.5.alpha0-cvs/src/mailmsg2.c
*** elm2.4.ME+.115/src/mailmsg2.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/mailmsg2.c 2004-05-15 14:52:25.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.76 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** Interface to allow mail to be sent to users. Part of ELM **/
--- 1,26 ----
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.76.8.6 2004/05/15 11:52:25 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76.8.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 src/mailmsg2.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from src/sndmsg.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * This file and all associated files and documentation:
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** Interface to allow mail to be sent to users. Part of ELM **/
***************
*** 103,108 ****
--- 114,146 ----
}
+ struct string * gen_From_buffer(current_header)
+ CONST struct header_rec * current_header;
+ {
+ struct string * From_buffer = NULL;
+
+ struct addr_item *p;
+
+ if (current_header->from) {
+ for (p = current_header->from; p->addr && p->fullname; p++) {
+ if (From_buffer)
+ add_ascii_to_string(From_buffer,s2us(", "));
+ else
+ From_buffer = new_string(display_charset);
+ if (string_len(p->fullname)) {
+ struct string * temp = cat_strings(From_buffer,
+ p->fullname,1);
+ free_string(&From_buffer);
+ From_buffer = temp;
+ } else {
+ add_ascii_to_string(From_buffer,csUs(p->addr));
+ }
+ }
+ }
+
+ return From_buffer;
+ }
+
int mail(current_header,options,form, headers,mailer_info,
infile,mailbox,aview)
struct header_rec * current_header;
***************
*** 116,121 ****
--- 154,160 ----
int copy_msg = 0 != current_header && 0 != (options & MAIL_COPY_MSG);
int edit_message = 0 != (options & MAIL_EDIT_MSG);
int forwarding = 0 != current_header && 0 != (options & MAIL_FORWARDING);
+ int replying = 0 != (options & MAIL_REPLYING);
struct Attachments attachments = NULL_Attachments;
***************
*** 198,205 ****
DPRINT(Debug,4, (&Debug," (with%s editing)\n",
edit_message? "" : "out"));
! /* this will get set to 1 on a successful reply */
! me_retcode = 0;
gotten_key = 0; /* ignore previously gotten encryption key */
--- 237,243 ----
DPRINT(Debug,4, (&Debug," (with%s editing)\n",
edit_message? "" : "out"));
!
gotten_key = 0; /* ignore previously gotten encryption key */
***************
*** 315,373 ****
cur_editcharset = system_charset; /* FIXME: Is correct? */
} else if (copy_msg && ! retransmit) { /* if retransmit we have it! */
! struct string * From_buffer = NULL;
! struct addr_item *p;
!
! if (current_header->from) {
! for (p = current_header->from; p->addr && p->fullname; p++) {
! if (From_buffer)
! add_ascii_to_string(From_buffer,s2us(", "));
! else
! From_buffer = new_string(display_charset);
! if (string_len(p->fullname)) {
! struct string * temp = cat_strings(From_buffer,
! p->fullname,1);
! free_string(&From_buffer);
! From_buffer = temp;
! } else {
! add_ascii_to_string(From_buffer,csUs(p->addr));
! }
! }
! }
if (!cur_editcharset)
cur_editcharset = display_charset;
if (!forwarding || (forwarding && !mimeforward)) {
! if (forwarding && !quote_forward) {
! if (From_buffer) {
! elm_fprintf(reply,
! CATGETS(elm_msg_cat, ElmSet, ElmForwarded1,
! "----- Forwarded message from %S -----\n\n"),
! From_buffer);
! } else
! elm_fprintf (reply,
! CATGETS(elm_msg_cat, ElmSet,
! ElmForwarded2,
! "----- Forwarded message (env-from %s) -----\n\n"),
! current_header->env_from);
!
! } else if (attribution[0] && current_header) {
! if (From_buffer) {
! char * str = us2s(stream_from_string(From_buffer,1,NULL));
! fprintf(reply, attribution, str);
! free(str);
! } else
! fprintf(reply, attribution, current_header->env_from);
! fputc('\n', reply);
! }
if (edit_message && infile) {
int NOHDR = forwarding ? noheaderfwd : noheader;
int NOQUOTE = forwarding && !quote_forward;
copy_message_f(infile,current_header,
! NOQUOTE ? "" : prefixchars, reply,
! ( NOHDR ? CM_REMOVE_HEADER : 0 )
! | CM_REMOVE_ENVELOPE | CM_DECODE
/* I think it is good idea to use CM_FILT_HDR
* even when we don't have forwarding ... -KEH
*/
--- 353,376 ----
cur_editcharset = system_charset; /* FIXME: Is correct? */
} else if (copy_msg && ! retransmit) { /* if retransmit we have it! */
! struct string * From_buffer = gen_From_buffer(current_header);
if (!cur_editcharset)
cur_editcharset = display_charset;
if (!forwarding || (forwarding && !mimeforward)) {
!
if (edit_message && infile) {
int NOHDR = forwarding ? noheaderfwd : noheader;
int NOQUOTE = forwarding && !quote_forward;
+ int FORW = forwarding;
+
copy_message_f(infile,current_header,
! NOQUOTE ? "" : prefixchars, reply,
! ( NOHDR ? CM_REMOVE_HEADER : 0 ) |
! CM_REMOVE_ENVELOPE | CM_DECODE |
! ( FORW ? CM_FORWARDING : 0 ) |
! CM_ATTRIBUTION
/* I think it is good idea to use CM_FILT_HDR
* even when we don't have forwarding ... -KEH
*/
***************
*** 375,399 ****
already_has_text = TRUE; /* we just added it, right? */
} else if (infile) {
int NOHDR = forwarding ? noheaderfwd : noheader;
copy_message_f(infile,current_header,
"", reply,
! ( NOHDR ? CM_REMOVE_HEADER : 0 )
! | CM_REMOVE_ENVELOPE
! /* I added CM_DECODE to here -KEH */
! | CM_DECODE, cur_editcharset);
}
if (forwarding && !quote_forward) {
- if (From_buffer)
- elm_fprintf (reply,
- CATGETS(elm_msg_cat, ElmSet, ElmForwarded3,
- "----- End of forwarded message from %S -----\n"),
- From_buffer);
- else
- elm_fprintf (reply,
- CATGETS(elm_msg_cat, ElmSet,
- ElmForwarded4,
- "----- End of forwarded message (env-from %s) -----\n"),
- current_header->env_from);
}
} else {
FILE *tmpfp;
--- 378,395 ----
already_has_text = TRUE; /* we just added it, right? */
} else if (infile) {
int NOHDR = forwarding ? noheaderfwd : noheader;
+ int FORW = forwarding;
+
copy_message_f(infile,current_header,
"", reply,
! ( NOHDR ? CM_REMOVE_HEADER : 0 ) |
! CM_REMOVE_ENVELOPE |
! ( FORW ? CM_FORWARDING : 0 ) |
! CM_ATTRIBUTION
! /* I added CM_DECODE to here -KEH */
! | CM_DECODE, cur_editcharset);
}
if (forwarding && !quote_forward) {
}
} else {
FILE *tmpfp;
***************
*** 485,491 ****
clear_copy_file(©_FILE); /* signals to not save a copy */
if(auto_copy_sent) {
! if(save_by_name) {
if(force_name) {
/* signals save by 'to' logname */
COPY_FILE.copy_file = format_string(FRM("="));
--- 481,487 ----
clear_copy_file(©_FILE); /* signals to not save a copy */
if(auto_copy_sent) {
! if(save_by_name || save_by_alias) {
if(force_name) {
/* signals save by 'to' logname */
COPY_FILE.copy_file = format_string(FRM("="));
***************
*** 542,550 ****
goto fail_label;
}
! /* so we can mark the reply flag */
! if (0 == code)
! me_retcode = 1;
}
err = can_open(cur_editfile,"r+");
--- 538,544 ----
goto fail_label;
}
!
}
err = can_open(cur_editfile,"r+");
***************
*** 746,752 ****
converted_buffer,
mailbox,
! page); /* Need access for all open
mailboxes/folders */
/** write all header information into whole_msg_file **/
--- 740,746 ----
converted_buffer,
mailbox,
! page,aview); /* Need access for all open
mailboxes/folders */
/** write all header information into whole_msg_file **/
***************
*** 810,815 ****
--- 804,824 ----
MIME_info.encoding_top, title,mailing_message);
/* NOTE: succees failure, backgrouded status currently ignored */
+
+ /* mark the "replied" status of the message */
+ if (replying && current_header &&
+ 0 != (current_header->status && REPLIED_TO)) {
+
+ DPRINT(Debug,4,(&Debug,
+ "Adding replied mark to current message\n"));
+
+ current_header->status |= REPLIED_TO;
+ current_header->status_chgd = TRUE;
+ } else {
+ DPRINT(Debug,8,(&Debug,"Not adding replied mark %s%s\n",
+ replying ? "" : " -- not replying ",
+ current_header ? "" : " -- no current_header"));
+ }
}
fclose(reply);
Index: elmME+.2.5.alpha0-cvs/src/Makefile.SH
*** elm2.4.ME+.115/src/Makefile.SH 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/src/Makefile.SH 2004-04-18 19:55:42.000000000 +0300
***************
*** 31,37 ****
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.50 2004/02/20 19:38:08 hurtta Exp $
#
# Makefile for the ELM mail program.
#
--- 31,37 ----
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.50.20.1 2004/04/18 16:55:42 hurtta Exp $
#
# Makefile for the ELM mail program.
#
***************
*** 297,313 ****
# Dependencies and rules
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/elm.h $(INCLDIR)/headers.h def_elm.h $(INCLDIR)/me.h
! $(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elm.h: $(INCLDIR)/defs.h $(INCLDIR)/me.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 297,311 ----
# Dependencies and rules
# Dependencies of header files upon other header files they include
! .PRECIOUS: def_elm.h $(INCLDIR)/me.h $(INCLDIR)/elm_defs.h \
! $(INCLDIR)/defs_major.h
! $(INCLDIR)/elm_defs.h: $(INCLDIR)/defs_major.h $(INCLDIR)/elm_nl_types.h \
! $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/defs_major.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
***************
*** 315,321 ****
$(CHMOD) u+w $@
$(TOUCH) $@
! def_elm.h: $(INCLDIR)/headers.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 313,320 ----
$(CHMOD) u+w $@
$(TOUCH) $@
! def_elm.h: $(INCLDIR)/elm_defs.h $(INCLDIR)/mime.h \
! $(INCLDIR)/me.h $(INCLDIR)/elm_globals.h
$(CHMOD) u+w $@
$(TOUCH) $@
***************
*** 337,343 ****
digest.o: def_elm.h $(INCLDIR)/s_elm.h
edit.o: def_elm.h
editmsg.o: def_elm.h $(INCLDIR)/s_elm.h
! elm.o: $(INCLDIR)/elm.h $(INCLDIR)/s_elm.h $(INCLDIR)/me.h $(INCLDIR)/patchlevel.h
encode.o: def_elm.h $(INCLDIR)/s_elm.h
exitprog.o: def_elm.h $(INCLDIR)/s_elm.h
file.o: def_elm.h $(INCLDIR)/s_elm.h
--- 336,342 ----
digest.o: def_elm.h $(INCLDIR)/s_elm.h
edit.o: def_elm.h
editmsg.o: def_elm.h $(INCLDIR)/s_elm.h
! elm.o: def_elm.h $(INCLDIR)/s_elm.h $(INCLDIR)/patchlevel.h
encode.o: def_elm.h $(INCLDIR)/s_elm.h
exitprog.o: def_elm.h $(INCLDIR)/s_elm.h
file.o: def_elm.h $(INCLDIR)/s_elm.h
Index: elmME+.2.5.alpha0-cvs/src/menu_common/def_mcommon.h
*** elm2.4.ME+.115/src/menu_common/def_mcommon.h 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/menu_common/def_mcommon.h 2004-04-18 19:55:43.000000000 +0300
***************
*** 1,6 ****
! /* $Id: def_mcommon.h,v 1.4 2004/03/27 18:31:47 hurtta Exp $ */
! #include "headers.h"
#include "me.h"
#define MENU_COMMON_magic 0xF700
--- 1,7 ----
! /* $Id: def_mcommon.h,v 1.4.8.1 2004/04/18 16:55:43 hurtta Exp $ */
! #include "elm_defs.h"
! #include "mime.h"
#include "me.h"
#define MENU_COMMON_magic 0xF700
Index: elmME+.2.5.alpha0-cvs/src/menu_common/Makefile.SH
*** elm2.4.ME+.115/src/menu_common/Makefile.SH 2004-02-25 21:39:18.000000000 +0200
--- elmME+.2.5.alpha0-cvs/src/menu_common/Makefile.SH 2004-04-18 19:55:43.000000000 +0300
***************
*** 17,23 ****
echo "Extracting src/menu_common/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.2 2004/02/20 19:38:10 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
--- 17,23 ----
echo "Extracting src/menu_common/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.2.20.1 2004/04/18 16:55:43 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
***************
*** 63,79 ****
$(RANLIB) $@
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/headers.h def_aliases.h
! $(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! def_mcommon.h: $(INCLDIR)/headers.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 63,86 ----
$(RANLIB) $@
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/elm_defs.h $(INCLDIR)/defs_major.h def_mcommon.h \
! $(INCLDIR)/me.h
! $(INCLDIR)/elm_defs.h: $(INCLDIR)/defs_major.h $(INCLDIR)/elm_nl_types.h \
! $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/defs_major.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! def_mcommon.h: $(INCLDIR)/elm_defs.h $(INCLDIR)/me.h \
! $(INCLDIR)/mime.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! $(INCLDIR)/me.h: $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
Index: elmME+.2.5.alpha0-cvs/src/menu_common/message_screen.c
*** elm2.4.ME+.115/src/menu_common/message_screen.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/menu_common/message_screen.c 2004-05-15 23:11:36.000000000 +0300
***************
*** 1,11 ****
! static char rcsid[] = "@(#)$Id: message_screen.c,v 1.4 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
******************************************************************************
! * Inludes code from screen.c which have following copyright:
*
* The Elm Mail System
*
--- 1,11 ----
! static char rcsid[] = "@(#)$Id: message_screen.c,v 1.4.8.1 2004/05/15 20:11:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
******************************************************************************
! * Inludes Elm 2.4 code from src/screen.c which have following copyright:
*
* The Elm Mail System
*
***************
*** 121,132 ****
--- 121,283 ----
struct string * buffer = NULL;
struct string * buffer1 = NULL;
struct string * bufferwho = NULL;
+ struct string * list_buffer = NULL;
int X,len1,fill_len;
int was_len;
int LINES, COLUMNS;
+ enum list_mode {
+ lm_unknown,
+ lm_myself_to,
+ lm_myself_cc,
+ lm_list_id
+ } list_mode = lm_unknown;
+ int other_seen = 0; /* if other than sender or reader
+ seen on address headers
+ */
+
+ struct addr_item *p;
+
+ /* Check is reader also on recipient headers */
+ if (entry->list_id)
+ list_mode = lm_list_id;
+
+ for (p = entry->cc; p && p->addr && p->fullname; p++) {
+ if (!okay_address_l(p,NULL))
+ list_mode = lm_myself_cc;
+
+ if (okay_address_l(p,entry->from))
+ other_seen++;
+ }
+
+ for (p = entry->to; p && p->addr && p->fullname; p++) {
+ if (!okay_address_l(p,NULL))
+ list_mode = lm_myself_to;
+
+ if (okay_address_l(p,entry->from))
+ other_seen++;
+ }
+
+ if (show_mlists) {
+ CONST int MLIST_LEN = 12;
+
+ /* 1) Just to me or to sender only */
+
+ if (lm_myself_to == list_mode &&
+ 0 == other_seen)
+ list_buffer = format_string(FRM(" ------------/"));
+
+ /* 2) to me and others */
+
+ else if (lm_myself_to == list_mode)
+ list_buffer = format_string(FRM(" ======------/"));
+
+ /* 3) cc to me */
+
+ else if (lm_myself_cc == list_mode)
+ list_buffer = format_string(FRM(" ============/"));
+
+ /* 4) mailing list post */
+
+ else if (lm_list_id == list_mode) {
+
+ if (entry->list_phrase) {
+ int X = 0,len1;
+ struct string * N =
+ curses_printable_clip(entry->list_phrase,
+ &X,MLIST_LEN,&len1,MLIST_LEN);
+
+ int fill_len = MLIST_LEN - len1;
+
+ list_buffer = format_string(FRM(" %S%*s/"),
+ N,fill_len,"");
+
+ free_string(&N);
+
+ } else {
+ /* FIXME? DO not take account header charset */
+ list_buffer = format_string(FRM(" %*.*s/"),
+ -MLIST_LEN,MLIST_LEN,
+ entry->list_id);
+
+ }
+
+
+ /* 5) Show To: -header */
+
+ } else if (entry->to && entry->to->fullname) {
+
+ if (string_len(entry->to->fullname) > 0) {
+ int X = 0,len1;
+ struct string * N =
+ curses_printable_clip(entry->to->fullname,
+ &X,MLIST_LEN-1,&len1,MLIST_LEN-1);
+
+ int fill_len = MLIST_LEN - len1 -1;
+
+ list_buffer = format_string(FRM(" (%S%*s)"),
+ N,fill_len,"");
+
+ free_string(&N);
+ } else {
+ /* FIXME? DO not take account header charset */
+ list_buffer = format_string(FRM(" (%*.*s)"),
+ -MLIST_LEN+1,
+ MLIST_LEN-1,
+ entry->to->addr);
+ }
+
+ }
+
+ /* 6) No To: -header */
+ else
+ list_buffer = format_string(FRM(" *** /"));
+
+ } else {
+
+ /* 1) Just to me or to sender only */
+
+ if (lm_myself_to == list_mode &&
+ 0 == other_seen)
+ list_buffer = format_string(FRM(" %c"),
+ to_chars[0] ?
+ to_chars[0] :
+ DEFAULT_TO_CHARS[0]);
+
+ /* 2) to me and others */
+ else if (lm_myself_to == list_mode)
+ list_buffer = format_string(FRM(" %c"),
+ to_chars[1] ?
+ to_chars[1] :
+ DEFAULT_TO_CHARS[1]);
+
+ /* 3) cc to me */
+
+ else if (lm_myself_cc == list_mode)
+ list_buffer = format_string(FRM(" %c"),
+ to_chars[2] ?
+ to_chars[2] :
+ DEFAULT_TO_CHARS[2]);
+
+
+ /* 4) mailing list post */
+ else if (lm_list_id == list_mode)
+ list_buffer = format_string(FRM(" %c"),
+ to_chars[4] ?
+ to_chars[4] :
+ DEFAULT_TO_CHARS[4]);
+
+ /* 5) unknown */
+ else
+ list_buffer = format_string(FRM(" %c"),
+ to_chars[3] ?
+ to_chars[3] :
+ DEFAULT_TO_CHARS[3]);
+ }
+
menu_get_sizes(page, &LINES, &COLUMNS);
+
/* truncate 'from' to 18 characters -
* this includes the leading "To" if really_to is true.
*/
***************
*** 155,166 ****
fill_len = 0;
if (entry->lines < 0)
! buffer = format_string(FRM("%.2s%.2s%c%-3d %.10s %.3s%S%*s (?) "),
(selected && arrow_cursor)? "->" : " ",
show_message_status(entry),
(entry->status & TAGGED? '+' : ' '),
message_number,
entry->time_menu,
(really_to ? "To " : ""),
/* give max and min width parameters for 'from' */
bufferwho,
--- 306,318 ----
fill_len = 0;
if (entry->lines < 0)
! buffer = format_string(FRM("%.2s%.2s%c%-3d %.10s%S %.3s%S%*s (?) "),
(selected && arrow_cursor)? "->" : " ",
show_message_status(entry),
(entry->status & TAGGED? '+' : ' '),
message_number,
entry->time_menu,
+ list_buffer,
(really_to ? "To " : ""),
/* give max and min width parameters for 'from' */
bufferwho,
***************
*** 168,179 ****
fill_len,""
);
else
! buffer = format_string(FRM("%.2s%.2s%c%-3d %.10s %.3s%S%*s (%d) %s"),
(selected && arrow_cursor)? "->" : " ",
show_message_status(entry),
(entry->status & TAGGED? '+' : ' '),
message_number,
entry->time_menu,
(really_to ? "To " : ""),
/* give max and min width parameters for 'from' */
bufferwho,
--- 320,332 ----
fill_len,""
);
else
! buffer = format_string(FRM("%.2s%.2s%c%-3d %.10s%S %.3s%S%*s (%d) %s"),
(selected && arrow_cursor)? "->" : " ",
show_message_status(entry),
(entry->status & TAGGED? '+' : ' '),
message_number,
entry->time_menu,
+ list_buffer,
(really_to ? "To " : ""),
/* give max and min width parameters for 'from' */
bufferwho,
***************
*** 188,193 ****
--- 341,347 ----
);
free_string(&bufferwho);
+ free_string(&list_buffer);
X = 0;
/* clip_from_string updates X */
Index: elmME+.2.5.alpha0-cvs/src/messages/def_messages.h
*** elm2.4.ME+.115/src/messages/def_messages.h 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/messages/def_messages.h 2004-04-18 19:55:43.000000000 +0300
***************
*** 1,6 ****
! /* $Id: def_messages.h,v 1.6 2004/03/27 18:31:48 hurtta Exp $ */
! #include "headers.h"
#include "me.h"
#if ANSI_C
--- 1,7 ----
! /* $Id: def_messages.h,v 1.6.8.1 2004/04/18 16:55:43 hurtta Exp $ */
! #include "elm_defs.h"
! #include "mime.h"
#include "me.h"
#if ANSI_C
Index: elmME+.2.5.alpha0-cvs/src/messages/digest.c
*** elm2.4.ME+.115/src/messages/digest.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/messages/digest.c 2004-04-25 17:52:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: digest.c,v 1.9 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: digest.c,v 1.9.8.1 2004/04/25 14:52:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 39,45 ****
mbx->u.digest = safe_malloc(sizeof (* (mbx->u.digest)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.digest, sizeof (* (mbx->u.digest)));
mbx->u.digest->the_digest = NULL;
mbx->u.digest->digest_count = 0;
--- 39,45 ----
mbx->u.digest = safe_malloc(sizeof (* (mbx->u.digest)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.digest, sizeof (* (mbx->u.digest)));
mbx->u.digest->the_digest = NULL;
mbx->u.digest->digest_count = 0;
Index: elmME+.2.5.alpha0-cvs/src/messages/header_alloc.c
*** elm2.4.ME+.115/src/messages/header_alloc.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/messages/header_alloc.c 2004-05-16 13:25:33.000000000 +0300
***************
*** 1,8 ****
! static char rcsid[] = "@(#)$Id: header_alloc.c,v 1.10 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,8 ----
! static char rcsid[] = "@(#)$Id: header_alloc.c,v 1.10.8.4 2004/05/16 10:25:33 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10.8.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 15,22 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "headers.h"
! #include "me.h"
DEBUG_VAR(Debug,__FILE__,"messages");
--- 15,21 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
! #include "def_messages.h"
DEBUG_VAR(Debug,__FILE__,"messages");
***************
*** 95,100 ****
--- 94,107 ----
if (h->subject)
free_string(&(h->subject));
h->subject = NULL;
+
+ if (h->list_phrase)
+ free_string(&(h->list_phrase));
+ h->list_phrase = NULL;
+ if (h->list_id)
+ free(h->list_id);
+ h->list_id = NULL;
+
h->mailx_status[0] = '\0';
mime_t_clear (&(h->mime_rec));
free_rec_mbx_info(h);
***************
*** 142,147 ****
--- 149,156 ----
h->time_menu[0] = '\0';
h->tz_offset = 0;
h->subject = NULL;
+ h->list_phrase = NULL;
+ h->list_id = NULL;
h->mailx_status[0] = '\0';
mime_t_zero (&(h->mime_rec));
h->mbx_info = NULL;
***************
*** 158,163 ****
--- 167,254 ----
h->partial_len = 0;
}
+ static void parse_list_id P_((struct header_rec *current_header,
+ header_list_ptr tmphdr));
+ static void parse_list_id(current_header,tmphdr)
+ struct header_rec *current_header;
+ header_list_ptr tmphdr;
+ {
+ char ** tokens = rfc822_tokenize(tmphdr->body);
+ int i;
+ char * phrase = NULL;
+ char * id = NULL;
+
+ /* 1) read phrase -- comments are not allowed */
+
+ for (i = 0; tokens[i]; i++) {
+
+ if ('\n' == tokens[i][0] &&
+ !tokens[i+1])
+ break;
+
+ if ('<' == tokens[i][0])
+ break;
+
+ if ('(' == tokens[i][0])
+ goto error;
+
+ if ('\n' == tokens[i][0])
+ phrase = strmcat(phrase," ");
+ else
+ phrase = strmcat(phrase,tokens[i]);
+ }
+
+ if ('<' != tokens[i][0])
+ goto error;
+
+ if (current_header->list_phrase ||
+ current_header->list_id)
+ goto error;
+
+ if (phrase)
+ current_header->list_phrase =
+ hdr_to_string(HDR_PHRASE,phrase,
+ current_header->header_charset,
+ !(current_header -> status &
+ NOHDRENCODING) &&
+ is_rfc1522(phrase));
+
+ /* 2) read id -- comments and whitespace is not allowed */
+
+ for (i++; tokens[i]; i++) {
+
+ if ('\n' == tokens[i][0] &&
+ !tokens[i+1])
+ break;
+
+ if ('>' == tokens[i][0])
+ break;
+
+ if ('(' == tokens[i][0])
+ goto error;
+ if (' ' == tokens[i][0])
+ goto error;
+ if ('\n' == tokens[i][0])
+ goto error;
+
+ id = strmcat(id,tokens[i]);
+ }
+
+ if ('>' != tokens[i][0])
+ goto error;
+
+ current_header->list_id = id;
+ id = NULL;
+
+ error:
+ if (phrase)
+ free(phrase);
+ if (id)
+ free(id);
+
+ free_rfc822tokenized(tokens);
+ }
+
void header_parse_helper(current_header,parsed_headers)
struct header_rec *current_header;
header_list_ptr parsed_headers;
***************
*** 242,248 ****
current_header->status |= UNREAD;
}
if (index(current_header->mailx_status, 'r') != NULL)
! current_header->status |= REPLIED;
}
if (NULL != (tmphdr = locate_header_by_name(parsed_headers,
--- 333,339 ----
current_header->status |= UNREAD;
}
if (index(current_header->mailx_status, 'r') != NULL)
! current_header->status |= REPLIED_TO;
}
if (NULL != (tmphdr = locate_header_by_name(parsed_headers,
***************
*** 270,275 ****
--- 361,371 ----
} else if (!current_header->subject)
current_header->subject = new_string(display_charset);
+
+ if (NULL != (tmphdr = locate_header_by_name(parsed_headers,
+ "List-Id"))) {
+ parse_list_id(current_header,tmphdr);
+ }
if (NULL != (tmphdr = locate_header_by_name(parsed_headers,
"From"))) {
Index: elmME+.2.5.alpha0-cvs/src/messages/Makefile.SH
*** elm2.4.ME+.115/src/messages/Makefile.SH 2003-10-12 12:48:03.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/messages/Makefile.SH 2004-04-18 19:55:43.000000000 +0300
***************
*** 17,23 ****
echo "Extracting src/messages/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.5 2003/10/01 17:34:34 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
--- 17,23 ----
echo "Extracting src/messages/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.5.44.1 2004/04/18 16:55:43 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
***************
*** 63,79 ****
$(RANLIB) $@
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/headers.h def_messages.h
! $(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h $(INCLDIR)/mime.h $(INCLDIR)/me.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! def_messages.h: $(INCLDIR)/headers.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 63,85 ----
$(RANLIB) $@
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/elm_defs.h $(INCLDIR)/defs_major.h def_messages.h \
! $(INCLDIR)/me.h
! $(INCLDIR)/elm_defs.h: $(INCLDIR)/defs_major.h $(INCLDIR)/elm_nl_types.h \
! $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/defs_major.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! def_messages.h: $(INCLDIR)/elm_defs.h $(INCLDIR)/me.h $(INCLDIR)/mime.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! $(INCLDIR)/me.h: $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
Index: elmME+.2.5.alpha0-cvs/src/messages/messages.c
*** elm2.4.ME+.115/src/messages/messages.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/messages/messages.c 2004-04-25 17:52:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: messages.c,v 1.12 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: messages.c,v 1.12.8.1 2004/04/25 14:52:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 23,29 ****
ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = MAILBOXVIEW_magic;
ret->mailbox_type = t;
--- 23,29 ----
ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = MAILBOXVIEW_magic;
ret->mailbox_type = t;
Index: elmME+.2.5.alpha0-cvs/src/messages/partial.c
*** elm2.4.ME+.115/src/messages/partial.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/messages/partial.c 2004-04-25 17:52:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: partial.c,v 1.14 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: partial.c,v 1.14.8.1 2004/04/25 14:52:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 27,33 ****
mbx->u.partial = safe_malloc(sizeof (* (mbx->u.partial)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.partial, sizeof (* (mbx->u.partial)));
mbx->u.partial->parent_mailbox = NULL;
--- 27,33 ----
mbx->u.partial = safe_malloc(sizeof (* (mbx->u.partial)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.partial, sizeof (* (mbx->u.partial)));
mbx->u.partial->parent_mailbox = NULL;
Index: elmME+.2.5.alpha0-cvs/src/messages/storage.c
*** elm2.4.ME+.115/src/messages/storage.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/messages/storage.c 2004-04-25 17:52:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: storage.c,v 1.6 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: storage.c,v 1.6.8.1 2004/04/25 14:52:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 30,36 ****
mbx->u.storage = safe_malloc(sizeof (* (mbx->u.storage)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.storage, sizeof (* (mbx->u.storage)));
mbx->u.storage->the_mailbox = NULL;
mbx->u.storage->mailbox_count = 0;
--- 30,36 ----
mbx->u.storage = safe_malloc(sizeof (* (mbx->u.storage)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.storage, sizeof (* (mbx->u.storage)));
mbx->u.storage->the_mailbox = NULL;
mbx->u.storage->mailbox_count = 0;
Index: elmME+.2.5.alpha0-cvs/src/options.c
*** elm2.4.ME+.115/src/options.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/options.c 2004-04-18 19:55:43.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: options.c,v 1.24 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: options.c,v 1.24.8.1 2004/04/18 16:55:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 95,102 ****
static void options_help P_((struct menu_context *page));
-
- char *level_name();
static char *on_name = NULL;
static char *off_name = NULL;
static int resort = 0;
--- 95,100 ----
***************
*** 404,412 ****
ClearLine(LINES-2); /* clear lower prompt message */
}
!
! char *
! level_name(n)
int n;
{
/** return the 'name' of the level... **/
--- 402,408 ----
ClearLine(LINES-2); /* clear lower prompt message */
}
! char * level_name(n)
int n;
{
/** return the 'name' of the level... **/
Index: elmME+.2.5.alpha0-cvs/src/out_utils.c
*** elm2.4.ME+.115/src/out_utils.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/out_utils.c 2004-04-25 17:52:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: out_utils.c,v 1.23 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: out_utils.c,v 1.23.8.1 2004/04/25 14:52:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
CONST char *format;
CONST char *line;
va_dcl
--- 299,304 ----
Index: elmME+.2.5.alpha0-cvs/src/quit.c
*** elm2.4.ME+.115/src/quit.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/quit.c 2004-05-02 14:05:48.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: quit.c,v 1.36 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: quit.c,v 1.36.8.2 2004/05/02 11:05:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
! menu_get_sizes(page, &LINES, &COLUMNS);
!
! /* NOTICE: prompt_letter may return EOF */
! ans = prompt_letter(LINES-1,"P",*def_ans_no,
! PROMPT_center|PROMPT_yesno|
! PROMPT_redraw_mark|PROMTP_ctrlL,
! page,
! CATGETS(elm_msg_cat, ElmSet, ElmFailedLeaveFolderQuit,
! "Failed to leave folder: Try to quit again ? ([P]anic/%c/%c) "),
! *def_ans_yes, *def_ans_no);
!
! menu_get_sizes(page, &LINES, &COLUMNS);
!
! /* NOTICE: prompt_letter may return EOF */
! ans = prompt_letter(LINES-1,"P",*def_ans_no,
! PROMPT_center|PROMPT_yesno|
! PROMPT_redraw_mark|PROMTP_ctrlL,
! page,
! CATGETS(elm_msg_cat, ElmSet, ElmFailedLeaveChange,
! "Failed to leave folder: Try to change again ? ([P]anic/%c/%c) "),
! *def_ans_yes, *def_ans_no);
!
!
! if (ans == ('L'&31) || ans == REDRAW_MARK) {
redraw = 1;
menu_ClearScreen(page);
goto again1;
***************
*** 312,318 ****
clear_error();
goto rechange;
}
! if (ans == 'P')
emergency_exit(0);
if (new_folder) {
--- 319,325 ----
clear_error();
goto rechange;
}
! if (ans == 'P' || ans == EOF)
emergency_exit(0);
if (new_folder) {
Index: elmME+.2.5.alpha0-cvs/src/read_rc.c
*** elm2.4.ME+.115/src/read_rc.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/read_rc.c 2004-05-01 23:07:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.24 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.24.8.2 2004/05/01 20:07:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 275,303 ****
extern char *sort_name(), *alias_sort_name();
if (DT_SYN == save_info[i].dt_type ||
! DT_MLT == save_info[i].dt_type ||
! /* not dumping addresses to debug file */
! DT_ALT == save_info[i].dt_type)
! continue;
!
! if (DT_WEE == save_info[i].dt_type) {
!
! DPRINT(Debug,1,(&Debug,
! "\nAnd we're skipping the following headers:\n\t"));
!
! for (len = 8, j = 0; j < weedcount; j++) {
! if (weedlist[j][0] == '*') continue; /* skip '*end-of-defaults*' */
! if (len + strlen(weedlist[j]) > 80) {
! DPRINT(Debug,1,(&Debug, " \n\t"));
! len = 8;
! }
! DPRINT(Debug,1,(&Debug, "%s ", weedlist[j]));
! len += strlen(weedlist[j]) + 3;
! }
! DPRINT(Debug,1,(&Debug, "\n\n"));
! continue;
! }
!
{ /* Not very effective */
FILE * X = debug_to_FILE(&Debug);
--- 275,282 ----
extern char *sort_name(), *alias_sort_name();
if (DT_SYN == save_info[i].dt_type ||
! DT_MLT == save_info[i].dt_type)
! continue;
{ /* Not very effective */
FILE * X = debug_to_FILE(&Debug);
Index: elmME+.2.5.alpha0-cvs/src/reply.c
*** elm2.4.ME+.115/src/reply.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/reply.c 2004-05-01 11:45:18.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: reply.c,v 1.35 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: reply.c,v 1.35.8.2 2004/05/01 08:45:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 352,361 ****
MAIL_EDIT_MSG | MAIL_REPLYING,
NO, infile,mailbox, aview,
page);
- if (me_retcode) {
- current_header->status |= REPLIED;
- current_header->status_chgd = TRUE;
- }
}
if (rt)
--- 352,357 ----
***************
*** 410,419 ****
MAIL_EDIT_MSG | MAIL_REPLYING,
NO, infile,mailbox, aview,
page);
- if (me_retcode) {
- current_header->status |= REPLIED;
- current_header->status_chgd = TRUE;
- }
if (rt)
free_addr_items(rt);
if (cc)
--- 406,411 ----
Index: elmME+.2.5.alpha0-cvs/src/savecopy.c
*** elm2.4.ME+.115/src/savecopy.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/savecopy.c 2004-05-15 13:52:16.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: savecopy.c,v 1.44 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** Save a copy of the specified message in a folder.
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: savecopy.c,v 1.44.8.1 2004/05/15 10:52:16 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 src/savecopy.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ ****************************************************************************
+ * Incorparated Elm 2.5 code from src/savecopy.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** Save a copy of the specified message in a folder.
***************
*** 58,64 ****
* the dirty work.
*/
int save_copy(headers, cf, form, mime_info, conv_file, mailbox,
! page)
struct mailing_headers * headers;
struct copy_file *cf;
int form;
--- 68,74 ----
* the dirty work.
*/
int save_copy(headers, cf, form, mime_info, conv_file, mailbox,
! page, aview)
struct mailing_headers * headers;
struct copy_file *cf;
int form;
***************
*** 66,71 ****
--- 76,82 ----
FILE * conv_file;
struct MailboxView *mailbox;
struct menu_context *page;
+ struct AliasView *aview;
{
int
is_ordinary_file;
***************
*** 104,113 ****
char buffer[LONG_STRING];
struct string *S1 = NULL;
int r;
! /* determine 'to' login */
! get_return_name(headers->to.addrs[0].addr,
! buffer, TRUE, sizeof buffer);
if (!buffer[0])
goto use_sent_mail;
--- 115,137 ----
char buffer[LONG_STRING];
struct string *S1 = NULL;
int r;
+ char *return_alias = NULL;
! if ((save_by_alias &&
! (return_alias =
! address_to_alias(headers->to.addrs[0].addr,
! aview))
! != NULL))
! strfcpy(buffer, return_alias, sizeof buffer);
! else
!
! /* XXX FIXME
! following uses different values
! on Elm 2.5 base on is save_by_name set or not
! */
! /* determine 'to' login */
! get_return_name(headers->to.addrs[0].addr,
! buffer, TRUE, sizeof buffer);
if (!buffer[0])
goto use_sent_mail;
Index: elmME+.2.5.alpha0-cvs/src/screen.c
*** elm2.4.ME+.115/src/screen.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/screen.c 2004-05-15 23:11:36.000000000 +0300
***************
*** 1,11 ****
! static char rcsid[] = "@(#)$Id: screen.c,v 1.35 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
! ******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
--- 1,13 ----
! static char rcsid[] = "@(#)$Id: screen.c,v 1.35.8.1 2004/05/15 20:11:36 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
! *****************************************************************************
! * Based on Elm 2.4 src/screen.c. That code was following copyright:
! *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
Index: elmME+.2.5.alpha0-cvs/src/screen/context.c
*** elm2.4.ME+.115/src/screen/context.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/screen/context.c 2004-04-25 17:52:40.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: context.c,v 1.3 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: context.c,v 1.3.8.1 2004/04/25 14:52:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 41,47 ****
struct menu_context *ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = MENU_CONTEXT_magic;
--- 41,47 ----
struct menu_context *ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = MENU_CONTEXT_magic;
Index: elmME+.2.5.alpha0-cvs/src/screen/curses.c
*** elm2.4.ME+.115/src/screen/curses.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/screen/curses.c 2004-04-18 19:55:43.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: curses.c,v 1.7 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: curses.c,v 1.7.8.1 2004/04/18 16:55:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 13,21 ****
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
-
#include "def_screen.h"
DEBUG_VAR(Debug,__FILE__,"screen");
#ifdef I_CURSES
--- 13,22 ----
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
#include "def_screen.h"
+ char *tgetstr();
+
DEBUG_VAR(Debug,__FILE__,"screen");
#ifdef I_CURSES
***************
*** 43,50 ****
#include <errno.h>
-
-
/* Lose 'const' */
static char * cs2s P_((const char *str));
static char * cs2s(str)
--- 44,49 ----
***************
*** 92,100 ****
char *_transmit_on = NULL, *_transmit_off = NULL;
! char *_key_up = NULL, *_key_down = NULL, *_key_left = NULL, *_key_right = NULL,
! *_key_pageup = NULL, *_key_pagedown = NULL, *_key_home = NULL,
! *_key_help = NULL, *_key_find = NULL;
/* Some additional capacities not used in ../src/curses.c */
--- 91,103 ----
char *_transmit_on = NULL, *_transmit_off = NULL;
! char *_key_up, *_key_down, *_key_left, *_key_right,
! *_key_pageup, *_key_pagedown, *_key_home,
! *_key_help, *_key_find;
!
! int has_highlighting; /* highlighting available? */
!
!
/* Some additional capacities not used in ../src/curses.c */
Index: elmME+.2.5.alpha0-cvs/src/screen/curs_input.c
*** elm2.4.ME+.115/src/screen/curs_input.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/screen/curs_input.c 2004-05-04 21:39:33.000000000 +0300
***************
*** 1,25 ****
! static char rcsid[] = "@(#)$Id: curs_input.c,v 1.6 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
*****************************************************************************
*
! * Some code copied from ../src/curses.c. It have following copyright:
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
-
#include "def_screen.h"
DEBUG_VAR(Debug,__FILE__,"screen");
#include <errno.h>
#if POLL_METHOD
static unsigned char *read_buffer = NULL;
--- 1,42 ----
! static char rcsid[] = "@(#)$Id: curs_input.c,v 1.6.8.2 2004/05/04 18:39:33 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
*****************************************************************************
*
! * Some code copied from Elm 2.4 src/curses.c. It have following copyright:
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * cur_FlushInput() partially based on Elm 2.5 src/curses.c.
+ * It have following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
#include "def_screen.h"
+ #ifdef TERMIOS
+ # include <termios.h>
+ #endif
+
DEBUG_VAR(Debug,__FILE__,"screen");
#include <errno.h>
+ char backspace, /* the current backspace char */
+ kill_line, /* the current kill_line char */
+ word_erase, /* the current word-erase char */
+ interrupt_char, /* the current interrupt char */
+ reprint_char, /* the current reprint-line char */
+ eof_char; /* the current end-of-file char */
#if POLL_METHOD
static unsigned char *read_buffer = NULL;
***************
*** 113,118 ****
--- 130,147 ----
}
#endif
+ void cur_FlushInput() {
+
+ #if POLL_METHOD
+ clear_input_buffer();
+ #endif
+ #ifdef TERMIOS
+ SIGDPRINT(Debug,4,(&Debug,
+ "Clearing terminal input from fd %d\n",
+ terminal_fd));
+ tcflush(terminal_fd,TCIFLUSH);
+ #endif
+ }
int cur_ReadCh(flags,break_flag,mc)
int flags;
Index: elmME+.2.5.alpha0-cvs/src/screen/def_screen.h
*** elm2.4.ME+.115/src/screen/def_screen.h 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/screen/def_screen.h 2004-05-04 21:39:33.000000000 +0300
***************
*** 1,8 ****
! /* $Id: def_screen.h,v 1.4 2004/03/27 18:31:48 hurtta Exp $ */
!
! #include "headers.h"
! #include "me.h"
extern int InGetPrompt; /* set if in GetPrompt() in read() */
/* HACK */
--- 1,8 ----
! /* $Id: def_screen.h,v 1.4.8.2 2004/05/04 18:39:33 hurtta Exp $ */
+ #include "elm_defs.h"
+ #include "mime.h"
+ #include "me.h"
extern int InGetPrompt; /* set if in GetPrompt() in read() */
/* HACK */
***************
*** 75,80 ****
--- 75,82 ----
int break_flag,
struct menu_context *mc));
+ extern void cur_FlushInput P_((void));
+
extern int cursor_control;
extern int _intransmit; /* are we transmitting keys? */
extern char *_key_up, *_key_down, *_key_left, *_key_right,
Index: elmME+.2.5.alpha0-cvs/src/screen/Makefile.SH
*** elm2.4.ME+.115/src/screen/Makefile.SH 2004-03-16 21:17:43.000000000 +0200
--- elmME+.2.5.alpha0-cvs/src/screen/Makefile.SH 2004-04-18 19:55:43.000000000 +0300
***************
*** 17,23 ****
echo "Extracting src/screen/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.3 2004/03/14 17:05:59 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
--- 17,23 ----
echo "Extracting src/screen/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.3.12.1 2004/04/18 16:55:43 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
***************
*** 63,69 ****
$(RANLIB) $@
# Dependencies of header files upon other header files they include
! .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/headers.h def_screen.h
$(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
--- 63,69 ----
$(RANLIB) $@
# Dependencies of header files upon other header files they include
! .PRECIOUS: def_screen.h $(INCLDIR)/defs.h $(INCLDIR)/headers.h
$(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
***************
*** 73,79 ****
$(CHMOD) u+w $@
$(TOUCH) $@
! def_screen.h: $(INCLDIR)/headers.h $(INCLDIR)/me.h
$(CHMOD) u+w $@
$(TOUCH) $@
--- 73,83 ----
$(CHMOD) u+w $@
$(TOUCH) $@
! def_screen.h: $(INCLDIR)/elm_defs.h $(INCLDIR)/me.h $(INCLDIR)/mime.h
! $(CHMOD) u+w $@
! $(TOUCH) $@
!
! $(INCLDIR)/me.h: $(INCLDIR)/melib.h
$(CHMOD) u+w $@
$(TOUCH) $@
Index: elmME+.2.5.alpha0-cvs/src/screen/screen.c
*** elm2.4.ME+.115/src/screen/screen.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/screen/screen.c 2004-05-04 21:39:33.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: screen.c,v 1.7 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
******************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: screen.c,v 1.7.8.1 2004/05/04 18:39:33 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
******************************************************************************
***************
*** 269,274 ****
--- 269,281 ----
return c;
}
+ void FlushInput() {
+
+ DPRINT(Debug,49, (&Debug, "FlushInput()\n"));
+
+ cur_FlushInput();
+ }
+
int menu_ReadCh(ptr,flags)
struct menu_context *ptr;
int flags;
Index: elmME+.2.5.alpha0-cvs/src/signals.c
*** elm2.4.ME+.115/src/signals.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/signals.c 2004-04-25 19:59:27.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: signals.c,v 1.24 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: signals.c,v 1.24.8.1 2004/04/25 16:59:27 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 220,228 ****
return;
}
! question_me = FALSE;
while (current_mailbox &&
! (result = leave_mbox(TRUE, FALSE, TRUE, NULL, current_mailbox,
&dummy, default_context))
== -1) {
int idx;
--- 220,228 ----
return;
}
! /* !! FIXME?? Differs from Elm 2.5 */
while (current_mailbox &&
! (result = leave_mbox(TRUE, FALSE, FALSE, NULL, current_mailbox,
&dummy, default_context))
== -1) {
int idx;
Index: elmME+.2.5.alpha0-cvs/src/strings.c
*** elm2.4.ME+.115/src/strings.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/strings.c 2004-04-18 19:55:43.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: strings.c,v 1.15 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: strings.c,v 1.15.8.1 2004/04/18 16:55:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 27,34 ****
/** forward declarations **/
- char *get_token();
-
char **argv_from_to(to)
char *to;
{
--- 27,32 ----
Index: elmME+.2.5.alpha0-cvs/src/syscall.c
*** elm2.4.ME+.115/src/syscall.c 2004-04-13 14:26:13.000000000 +0300
--- elmME+.2.5.alpha0-cvs/src/syscall.c 2004-05-14 22:48:18.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: syscall.c,v 1.33 2004/04/12 18:40:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: syscall.c,v 1.33.2.1 2004/05/14 19:48:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33.2.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 693,698 ****
--- 693,699 ----
int res = 0;
struct run_state RS;
CONST char * argv[4];
+ char XX[sizeof printhdrs +10];
int LINES, COLUMNS;
***************
*** 714,719 ****
--- 715,727 ----
if (!have_printout())
return 0;
+ XX[0] = '\0';
+
+ if (printhdrs[0] != '\0') {
+ elm_sfprintf(XX,sizeof XX,
+ FRM(" -w '%s'"), printhdrs);
+ }
+
/*
* Setup print command. Select old or new behavior based
* upon the presence of "%s" in the print command string.
***************
*** 727,739 ****
temp_dir, temp_print, getpid());
printbuffer = elm_message(FRM(printout), filename);
elm_sfprintf(buffer,sizeof buffer,
! FRM("%s -Ip > %s; %s"),
! readmsg, filename, printbuffer);
free(printbuffer);
} else {
elm_sfprintf(buffer,sizeof buffer,
! FRM("%s -Ip | %s"), readmsg, printout);
}
/*
--- 735,750 ----
temp_dir, temp_print, getpid());
printbuffer = elm_message(FRM(printout), filename);
+
+
+
elm_sfprintf(buffer,sizeof buffer,
! FRM("%s -Ip%s > %s; %s"),
! readmsg, XX,filename, printbuffer);
free(printbuffer);
} else {
elm_sfprintf(buffer,sizeof buffer,
! FRM("%s%s -Ip | %s"), readmsg, XX,printout);
}
/*
Index: elmME+.2.5.alpha0-cvs/utils/charmapcopy.c
*** elm2.4.ME+.115/utils/charmapcopy.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/utils/charmapcopy.c 2004-04-18 19:55:43.000000000 +0300
***************
*** 1,13 ****
! static char rcsid[] = "@(#)$Id: charmapcopy.c,v 1.5 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "defs.h"
! #include "elmlib.h"
#include "s_elm.h"
#include "s_me.h"
#include "reghelper.h"
--- 1,12 ----
! static char rcsid[] = "@(#)$Id: charmapcopy.c,v 1.5.8.1 2004/04/18 16:55:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
! #include "elm_defs.h"
#include "s_elm.h"
#include "s_me.h"
#include "reghelper.h"
Index: elmME+.2.5.alpha0-cvs/utils/from.c
*** elm2.4.ME+.115/utils/from.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/utils/from.c 2004-05-01 10:41:07.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: from.c,v 1.48 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.48 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: from.c,v 1.48.8.1 2004/05/01 07:41:07 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.48.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 614,620 ****
DPRINT(Debug,4,(&Debug," -NEW +UNREAD"));
}
if (index(hdr.mailx_status, 'r') != NULL) {
! hdr.status |= REPLIED;
DPRINT(Debug,4,(&Debug," +REPLIED"));
}
DPRINT(Debug,4,(&Debug," "));
--- 614,620 ----
DPRINT(Debug,4,(&Debug," -NEW +UNREAD"));
}
if (index(hdr.mailx_status, 'r') != NULL) {
! hdr.status |= REPLIED_TO;
DPRINT(Debug,4,(&Debug," +REPLIED"));
}
DPRINT(Debug,4,(&Debug," "));
Index: elmME+.2.5.alpha0-cvs/utils/Makefile.SH
*** elm2.4.ME+.115/utils/Makefile.SH 2003-11-15 18:19:06.000000000 +0200
--- elmME+.2.5.alpha0-cvs/utils/Makefile.SH 2004-04-18 19:55:43.000000000 +0300
***************
*** 16,22 ****
echo "Extracting utils/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # @(#)$Id: Makefile.SH,v 1.34 2003/11/15 15:50:22 hurtta Exp $
#
# Makefile for the Elm system utilities
#
--- 16,22 ----
echo "Extracting utils/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # @(#)$Id: Makefile.SH,v 1.34.38.1 2004/04/18 16:55:43 hurtta Exp $
#
# Makefile for the Elm system utilities
#
***************
*** 249,286 ****
# Dependencies and rules
# Dependencies and rules for compiling and linting C programs
! .PRECIOUS: $(INCLDIR)/defs.h $(INCLDIR)/elm.h \
! $(INCLDIR)/headers.h ../lib/libutil.a
!
! answer.o: $(INCLDIR)/elmutil.h $(INCLDIR)/ndbz.h $(INCLDIR)/s_answer.h $(INCLDIR)/sysdefs.h
! elmalias.o: $(INCLDIR)/elmutil.h $(INCLDIR)/ndbz.h $(INCLDIR)/s_elmalias.h
! fastmail.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_fastmail.h
! from.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_from.h $(INCLDIR)/s_elm.h
! newalias.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_newalias.h
! newmail.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_newmail.h
! prlong.o: $(INCLDIR)/elmutil.h $(INCLDIR)/defs.h
! readmsg.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_readmsg.h
! elmcharset.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/cs_imp.h $(INCLDIR)/reghelper.h charmapcopy.h
! elmrc-write.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
! $(INCLDIR)/reghelper.h
! elmterminal.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/reghelper.h
! elmunidata.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/unidata.h $(INCLDIR)/reghelper.h
! elmbindata.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/bindata.h $(INCLDIR)/reghelper.h $(INCLDIR)/cs_imp.h \
! charmapcopy.o
! elmstringconvert.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h
! elmregister.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h $(INCLDIR)/reghelper.h
! reghelper.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h \
! $(INCLDIR)/reghelper.h
! charmapcopy.o: charmapcopy.h $(INCLDIR)/s_elm.h $(INCLDIR)/elmlib.h \
! $(INCLDIR)/defs.h $(INCLDIR)/s_me.h $(INCLDIR)/reghelper.h
! elmlibregister.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
! $(INCLDIR)/reghelper.h
checkalias: checkalias.SH ; sh $?
listalias: listalias.SH ; sh $?
--- 249,255 ----
# Dependencies and rules
# Dependencies and rules for compiling and linting C programs
! .PRECIOUS: $(INCLDIR)/elm_defs.h $(INCLDIR)/defs_major.h ../lib/libutil.a
checkalias: checkalias.SH ; sh $?
listalias: listalias.SH ; sh $?
***************
*** 384,410 ****
$(CHMOD) u+w,a+rx $@
# Dependencies of header files upon other header files they include
! $(INCLDIR)/defs.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/elmutil.h: $(INCLDIR)/defs.h $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/headers.h: $(INCLDIR)/defs.h
$(CHMOD) u+w $@
$(TOUCH) $@
# Dependencies of C object files
! answer.o: $(INCLDIR)/ndbz.h $(INCLDIR)/elmutil.h $(INCLDIR)/s_answer.h
! elmalias.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_elmalias.h
! fastmail.o: $(INCLDIR)/patchlevel.h $(INCLDIR)/elmutil.h $(INCLDIR)/s_fastmail.h
! from.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_from.h
! newalias.o: $(INCLDIR)/elmutil.h $(INCLDIR)/sysdefs.h $(INCLDIR)/s_newalias.h
newmail.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_newmail.h
readmsg.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_readmsg.h
! prlong.o: $(INCLDIR)/defs.h
# Dependencies and rules for installing programs from bin directory
--- 353,403 ----
$(CHMOD) u+w,a+rx $@
# Dependencies of header files upon other header files they include
!
! $(INCLDIR)/elm_defs.h: $(INCLDIR)/defs_major.h $(INCLDIR)/elm_nl_types.h \
! $(INCLDIR)/elmlib.h
$(CHMOD) u+w $@
$(TOUCH) $@
! $(INCLDIR)/defs_major.h: $(INCLDIR)/../config.h $(INCLDIR)/sysdefs.h
$(CHMOD) u+w $@
$(TOUCH) $@
!
! $(INCLDIR)/elmutil.h: $(INCLDIR)/elm_defs.h
$(CHMOD) u+w $@
$(TOUCH) $@
+
# Dependencies of C object files
! prlong.o: $(INCLDIR)/elmutil.h
! answer.o: $(INCLDIR)/elmutil.h $(INCLDIR)/ndbz.h $(INCLDIR)/s_answer.h $(INCLDIR)/sysdefs.h
! elmalias.o: $(INCLDIR)/elmutil.h $(INCLDIR)/ndbz.h $(INCLDIR)/s_elmalias.h
! fastmail.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_fastmail.h
! from.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_from.h $(INCLDIR)/s_elm.h
! newalias.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_newalias.h
newmail.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_newmail.h
readmsg.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_readmsg.h
! elmcharset.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/cs_imp.h $(INCLDIR)/reghelper.h charmapcopy.h
! elmrc-write.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
! $(INCLDIR)/reghelper.h
! elmterminal.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/reghelper.h
! elmunidata.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/unidata.h $(INCLDIR)/reghelper.h
! elmbindata.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/bindata.h $(INCLDIR)/reghelper.h $(INCLDIR)/cs_imp.h \
! charmapcopy.o
! elmstringconvert.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h
! elmregister.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h $(INCLDIR)/reghelper.h
! reghelper.o: $(INCLDIR)/defs_major.h $(INCLDIR)/patchlevel.h \
! $(INCLDIR)/reghelper.h
! charmapcopy.o: charmapcopy.h $(INCLDIR)/s_elm.h $(INCLDIR)/elm_defs.h $(INCLDIR)/s_me.h $(INCLDIR)/reghelper.h
! elmlibregister.o: $(INCLDIR)/elmutil.h $(INCLDIR)/s_me.h $(INCLDIR)/s_elm.h \
! $(INCLDIR)/rc_imp.h $(INCLDIR)/save_opts.h $(INCLDIR)/s_elmrc.h \
! $(INCLDIR)/reghelper.h
# Dependencies and rules for installing programs from bin directory
Index: elmME+.2.5.alpha0-cvs/utils/newmail.c
*** elm2.4.ME+.115/utils/newmail.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/utils/newmail.c 2004-05-01 10:41:07.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: newmail.c,v 1.35 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: newmail.c,v 1.35.8.1 2004/05/01 07:41:07 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 476,482 ****
entry->status |= UNREAD;
}
if (index(tmphdr->body, 'r') != NULL)
! entry->status |= REPLIED;
}
if (NULL != (tmphdr = locate_header_by_name(parsed_headers,
--- 476,482 ----
entry->status |= UNREAD;
}
if (index(tmphdr->body, 'r') != NULL)
! entry->status |= REPLIED_TO;
}
if (NULL != (tmphdr = locate_header_by_name(parsed_headers,
Index: elmME+.2.5.alpha0-cvs/utils/prlong.c
*** elm2.4.ME+.115/utils/prlong.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/utils/prlong.c 2004-04-18 19:55:43.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: prlong.c,v 1.11 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: prlong.c,v 1.11.8.1 2004/04/18 16:55:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11.8.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 47,59 ****
* ha...@grumpy.acme.com
*/
-
- #include <stdio.h>
- #ifndef GETOPT
# include "elmutil.h"
- #else
- # include "defs.h"
- #endif
#define MAXWID 78 /* default maximum line width */
#define ONE_LDR "" /* default leader for first line */
--- 47,53 ----
Index: elmME+.2.5.alpha0-cvs/utils/readmsg.c
*** elm2.4.ME+.115/utils/readmsg.c 2004-03-30 19:38:44.000000000 +0300
--- elmME+.2.5.alpha0-cvs/utils/readmsg.c 2004-05-16 12:30:52.000000000 +0300
***************
*** 1,15 ****
! static char rcsid[] = "@(#)$Id: readmsg.c,v 1.18 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** This program extracts messages from a mail folder. It is particularly
--- 1,25 ----
! static char rcsid[] = "@(#)$Id: readmsg.c,v 1.18.8.2 2004/05/16 09:30:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18.8.2 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
******************************************************************************
+ * Based on Elm 2.4 utils/readmsg.c. That code was following copyright:
+ *
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
+ *****************************************************************************
+ * Incorparated Elm 2.5 code from utils/readmsg.c.
+ * That code was following copyright:
+ *
+ * The Elm Mail System
+ *
+ * Copyright (c) 1988-1995 USENET Community Trust
+ * Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
/** This program extracts messages from a mail folder. It is particularly
***************
*** 94,103 ****
*/
/*
* local procedures
*/
! void weed_headers();
char *skip_word();
static int print_patmatch_mssg P_((FILE *fp,
--- 104,136 ----
*/
+
+ /*
+ * Header weeding information.
+ */
+
+ #define DFLT_WEED_LIST "Subject: From: To: Cc: Apparently- Date:"
+
+ struct weed_header_info {
+ char *hdrname; /* string to compare against header */
+ int hdrlen; /* characters in "hdrname" */
+ int hdrskip; /* skip (instead of accept) on match? */
+ struct weed_header_info *next;
+ };
+
+ /* head of linked list of weeded headers */
+ struct weed_header_info Weedlist;
+
+ /* is default to accept headers NOT in weed list? */
+ int weed_dflt_accept = FALSE;
+
+
/*
* local procedures
*/
! void weed_headers P_((char *buf));
! void setup_weed_info P_((const char *sel_weed_str));
!
char *skip_word();
static int print_patmatch_mssg P_((FILE *fp,
***************
*** 116,122 ****
void usage_error()
{
lib_error(CATGETS(elm_msg_cat, ReadmsgSet, ReadmsgUsage,
! "Usage: %s [-anhp] [-f Folder] {MessageNum ... | pattern | *}\n"),
prog);
exit(1);
}
--- 149,155 ----
void usage_error()
{
lib_error(CATGETS(elm_msg_cat, ReadmsgSet, ReadmsgUsage,
! "Usage: %s [-anhp] [-f Folder] [-w weedlist] {MessageNum ... | pattern | *}\n"),
prog);
exit(1);
}
***************
*** 204,209 ****
--- 237,243 ----
int exit_status; /* normally zero, set to one on error */
FILE *fp; /* file stream for opened folder */
long idx; /* seek offset within folder */
+ char *sel_weed_str; /* header weeding specification */
char buf[SLEN];
int i;
***************
*** 232,237 ****
--- 266,272 ----
prog = argv[0];
folder_name[0] = '\0'; /* no folder specified yet */
folder_size = -1; /* message index not loaded yet */
+ sel_weed_str = DFLT_WEED_LIST; /* default header weeding spec */
hdr_disp_level = WEED; /* only display interesting headers */
do_page_breaks = FALSE; /* suppress formfeed between mssgs */
do_all_matches = FALSE; /* only show 1st mssg which matches pat */
***************
*** 256,262 ****
fstate_valid = (fstate.storage != NULL);
/* crack the command line */
! while ((i = getopt(argc, argv, "anhf:pId:")) != EOF) {
switch (i) {
case 'a' :
do_all_matches = TRUE;
--- 291,297 ----
fstate_valid = (fstate.storage != NULL);
/* crack the command line */
! while ((i = getopt(argc, argv, "anhf:pId:w:")) != EOF) {
switch (i) {
case 'a' :
do_all_matches = TRUE;
***************
*** 274,279 ****
--- 309,317 ----
break;
case 'h' :
hdr_disp_level = ALL;
+ case 'w' :
+ hdr_disp_level = WEED;
+ sel_weed_str = optarg;
break;
case 'f' :
strfcpy(folder_name, optarg, sizeof folder_name);
***************
*** 382,387 ****
--- 420,430 ----
}
}
+ /* process the header weeding specification */
+ if (hdr_disp_level == WEED)
+ setup_weed_info(sel_weed_str);
+
+
/* if no selections on cmd line then show selected mssgs from state file */
if (argc == optind) {
if (!fstate_valid) {
***************
*** 673,680 ****
if (buf[0] == '\n' && buf[1] == '\0' ||
buf[0] == '\r' && buf[1] == '\n' && buf[2] == '\0') {
if (in_header) {
- if (hdr_disp_level == WEED)
- weed_headers((char *)NULL);
in_header = FALSE;
}
++newlines;
--- 716,721 ----
***************
*** 734,780 ****
void weed_headers(buf)
char *buf;
{
! static int got_from = FALSE; /* already printed From: */
! static int got_date = FALSE; /* already printed Date: */
! static int is_interesting = FALSE; /* print out curr hdr line */
! static char save_from[SLEN]; /* From_ hdr from current mssg */
! char *s;
!
! /* finish off headers on NULL value */
! if (buf == (char *) NULL) {
! if (!got_from) {
! fputs("From: ", stdout);
! for (s = skip_word(save_from) ; *s != '\0' && !isspace(*s) ; ++s)
! putchar(*s);
! putchar('\n');
! }
! if (!got_date)
! printf("Date: %s", skip_word(skip_word(save_from)));
! is_interesting = got_from = got_date = FALSE;
! save_from[0] = '\0';
! return;
! }
!
! if (Hdrmatch(buf, "From ")) {
! strfcpy(save_from, buf, sizeof save_from);
! is_interesting = FALSE;
! } else if (Hdrmatch(buf, "To:") || Hdrmatch(buf, "Subject:")
! || Hdrmatch(buf, "Cc:"))
! is_interesting = TRUE;
! else if (Hdrmatch(buf, "Date:"))
! got_date = is_interesting = TRUE;
! else if (Hdrmatch(buf, "From:"))
! got_from = is_interesting = TRUE;
! else if (!isspace(buf[0]))
! is_interesting = FALSE;
! /* else */
! /* this is a continuation header - preserve "is_interesting" value */
! if (is_interesting)
fputs(buf, stdout);
}
/*
* Convert a mailbox message number to a seek location.
--- 775,852 ----
void weed_headers(buf)
char *buf;
{
! struct weed_header_info *w;
! static int accept_header = FALSE;
! /* if this is a new header, see if we want to accept it */
! if (!isspace(buf[0])) {
! accept_header = weed_dflt_accept;
! for (w = Weedlist.next ; w != NULL ; w = w->next) {
! if (strincmp(buf, w->hdrname, w->hdrlen) == 0) {
! accept_header = !w->hdrskip;
! break;
! }
! }
! }
!
! /* output accepted headers */
! if (accept_header)
fputs(buf, stdout);
}
+ /*
+ * Initialize the header weeding info.
+ *
+ * The header weeding info is a linked list of (struct weed_header_info).
+ */
+ void setup_weed_info(sel_weed_str)
+ CONST char *sel_weed_str;
+ {
+ struct weed_header_info *w;
+ char *weed_str, *fld, *s;
+
+ /* make a copy we can scribble on safely */
+ weed_str = safe_strdup(sel_weed_str);
+
+ w = &Weedlist;
+ while ((fld = strtok(weed_str, " \t\n,")) != NULL) {
+ weed_str = NULL;
+
+ /* convert "_" to " " */
+ for (s = fld ; *s != '\0' ; ++s) {
+ if (*s == '_')
+ *s = ' ';
+ }
+
+ /* add weeding info to end of list */
+ w->next = (struct weed_header_info *)
+ safe_malloc(sizeof(struct weed_header_info));
+ w = w->next;
+ if (w->hdrskip = (*fld == '!'))
+ ++fld;
+ w->hdrname = fld;
+ w->hdrlen = strlen(fld);
+ w->next = NULL;
+
+ /*
+ * The default weed action is the opposite of the last list entry.
+ * That is, if the list ends in "foo" (an accept action) then the
+ * default is to reject things not in the weed list. If the list
+ * ends in "!foo" (a reject action) then the default is to accept
+ * things not in the weed list.
+ *
+ * If this doesn't make sense to you, consider the following
+ * two example commands...and what you'd like them to do:
+ *
+ * readmsg -w "From: Date: Subject:"
+ * readmsg -w "!From_ !Received: !Status:"
+ *
+ */
+ weed_dflt_accept = w->hdrskip;
+ }
+
+ }
/*
* Convert a mailbox message number to a seek location.
Is available on ozone.FMI.FI (1)
via anonymous ftp
directory KEH/
files elm-2.4ME+PL116.patch.gz
and elm-2.4ME+116.tar.gz
for a moment (2).
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
files elm-2.4ME+PL116.patch.gz
and elm-2.4ME+116.tar.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL116.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+116.tar.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL116.patch.gz >
and <URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+116.tar.gz >
via WWW.
(1) Was ftp.ozone.fmi.fi but name ftp.ozone.fmi.fi
will probably point to service which no have anonymous ftp
before ozone.fmi.fi retires. So use ozone.fmi.fi
for a moment instead of ftp.ozone.fmi.fi.
(2) NOTE:
It is currently unknown what will be done for ftp.ozone.fmi.fi
and www.ozone.fmi.fi.
Also ozone.fmi.fi will retire.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL116.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Undo Elm2.4ME+ PL115a (25) patch before applying this patch.
SUMMARY: This patch fixes handling of unexpected return
value of nl_langinfo(CODESET) on AIX, fixes
value check of "internal-mailcaps" and
"metamail-mailcaps" elmrc variables,
fixes some prompts on situation where leaving
of folder fails, reimplements "alternatives"
and "weedout" elmrc variables, changes
elm.filelist format (adds subcommand
"copydoc" to elmregister), adds -s option
to elmregister and adds RFC 2919 List-ID to
list of known headers.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL115 (25) --------------------------------
Unistall Elm2.4ME+ PL115a (25) patch before installing that patch.
For installing that patch run
patch -p1 < {this-file}
on directory where Configure is.
Index: elm2.4.ME+.116-cvs/hdrs/patchlevel.h
Prereq: 1113000000
*** elm2.4.ME+.115/hdrs/patchlevel.h 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/hdrs/patchlevel.h 2004-05-18 22:30:03.000000000 +0300
***************
*** 1,12 ****
! #define PATCHLEVEL "115 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.115
*/
! #define LAST_REPORT_TIME 1113000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "Apr, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Apr, 2004"
/*
* Local Variables:
--- 1,12 ----
! #define PATCHLEVEL "116 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.116
*/
! #define LAST_REPORT_TIME 1116400000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "May, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released May, 2004"
/*
* Local Variables:
Index: elm2.4.ME+.116-cvs/README.ME+
*** elm2.4.ME+.115/README.ME+ 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/README.ME+ 2004-05-19 15:02:16.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.733 2004/04/12 19:27:31 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.760 2004/05/19 12:02:16 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,30 ****
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
Changes of Elm2.4ME+ PL115 (25) compared with Elm2.4ME+ PL114 (25)
------------------------------------------------------------------
! SuMMARY: This release changes temporary folder
! location on some situations, fixs crash
on c)hange command on alias menu, adds
elmrc options "local-sessionlock-dir" and
"local-sessionlock-use-home", and changes
! SIGWICH handling when waiting of editor.
! - If opened local mailbox is on somewhere other
! location than on spool directory, use "tmpdir" setting
from elm.rc for location of temporary file
"mbox.{mailbox}-{username}" instead default_temp.
--- 13,161 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL116 (25) compared with Elm2.4ME+ PL115 (25)
+ -------------------------------------------------------------------
+
+ SUMMARY: This patch fixes handling of unexpected return
+ value of nl_langinfo(CODESET) on AIX, fixes
+ value check of "internal-mailcaps" and
+ "metamail-mailcaps" elmrc variables,
+ fixes some prompts on situation where leaving
+ of folder fails, reimplements
+ "alternatives" and "weedout" elmrc variables,
+ changes elm.filelist format (adds subcommand
+ "copydoc" to elmregister), adds -s option
+ to elmregister and adds RFC 2919 List-ID to
+ list of known headers.
+
+ WARNING: There is small change on elm.filelist format, so
+ downgrading from Elm2.4ME+ PL116 (25) to
+ Elm 2.4ME+ PL115 (25) or to Elm ME+ 2.5 PLalpha0
+ will not work (you need unistall or remove
+ elm.filelist first.)
+
+ - " When installing ELM (on AIX 5L), I get the following message:
+
+ | Elm: Unable to map en_US locale (LC_CTYPE) to MIME charset.
+ | Codeset name ISO8859-1 was unknown. Treating ISO8859-1 as MIME name.
+ | Check /usr/local/lib/elm/elm.mimecharsets or
+ | noam/.elm/mime.charsets
+ | WARNING: Locale en_US (charset ISO8859-1) is unsupported, will cause problems!
+ | Problem with locale (system character set)! Elm ME+ will
+ | behave erratically."
+ Problem noted by: Noam G. Nudelman <no...@mail.biu.ac.il>
+
+ - dt_PATH_print_value() was not printing always empty values
+ correctly.
+
+ - fix test on expand_dt_path(). Specially non-file
+ values on "internal-mailcaps" and "metamail-mailcaps" was
+ not giving error message.
+
+ - Prompt "Failed to leave folder: Try to change again ?
+ [P]anic" did not worked. Added new routine prompt_letter()
+
+ - Changed prompt "Failed to leave folder: Try to quit again ?"
+
+ - Changed prompt ""received" folder not available, continue? (y/n) n"
+ - Also changed default answer to be yes on that prompt
+ (that is usefull only when received folder is remote,
+ but that error may occur also is somebody is set
+ receivedmail = /invalid
+ )
+
+ - Fix some possible compilation problems with traditional
+ C compilers (as opposed to ANSI C ompilers)
+
+ - Reimplemeted elmrc "alternatives" as type PATH and
+ removed special elmrc type for alternatives.
+
+ - Reimplemeted elmrc "weedout" as type PATH and
+ removed special elmrc type for weedout.
+ If first element on list is "*clear-weed-list*",
+ then builtin weedout list is not used.
+
+ - Fix typo PROMTP_yesno (to PROMPT_yesno) on
+ Elm2.4ME+ PL115a (25)
+
+ - Added command "elmregister copydoc" which
+ works like "elmregister copy", but marks
+ file to be document.
+
+ - Added option "-s {stage-subdir}" to command
+ "elmregister {command}".
+
+ - Added RFC 2919 List-ID -header to array on
+ lib/headers.c
+ - Fix missing space between pharse and < >
+ on result of hdr_decode_from_phrase() on
+ lib/headers.c
+
+ - If on header editing screen incoked editor
+ and address was on form '"a" <b> (c)",
+ and then edited it on header editing screen
+ address become as '"a" <b> (c('. Changed
+ on '(' to ')' on make_surface_addr() on
+ lib/outheaders.c
+
+
+ Changes of Elm2.4ME+ PL115a (25) compared with Elm2.4ME+ PL115 (25)
+ -------------------------------------------------------------------
+
+ [ This patch is branch from the main line. ]
+
+ SUMMARY: This patch fixes handling of unexpected return
+ value of nl_langinfo(CODESET) on AIX, fixes
+ value check of "internal-mailcaps" and
+ "metamail-mailcaps" elmrc variables and
+ fixes some prompts on situation where leaving
+ of folder fails.
+
+ - " When installing ELM (on AIX 5L), I get the following message:
+
+ | Elm: Unable to map en_US locale (LC_CTYPE) to MIME charset.
+ | Codeset name ISO8859-1 was unknown. Treating ISO8859-1 as MIME name.
+ | Check /usr/local/lib/elm/elm.mimecharsets or
+ | noam/.elm/mime.charsets
+ | WARNING: Locale en_US (charset ISO8859-1) is unsupported, will cause problems!
+ | Problem with locale (system character set)! Elm ME+ will
+ | behave erratically."
+ Problem noted by: Noam G. Nudelman <no...@mail.biu.ac.il>
+
+ - dt_PATH_print_value() was not printing always empty values
+ correctly.
+
+ - fix test on expand_dt_path(). Specially non-file
+ values on "internal-mailcaps" and "metamail-mailcaps" was
+ not giving error message.
+
+ - Prompt "Failed to leave folder: Try to change again ?
+ [P]anic" did not worked. Added new routine prompt_letter()
+
+ - Changed prompt "Failed to leave folder: Try to quit again ?"
+
+ - Changed prompt ""received" folder not available, continue? (y/n) n"
+ - Also changed default answer to be yes on that prompt
+ (that is usefull only when received folder is remote,
+ but that error may occur also is somebody is set
+ receivedmail = /invalid
+ )
+
+ - Fix some possible compilation problems with traditional
+ C compilers (as opposed to ANSI C ompilers)
+
Changes of Elm2.4ME+ PL115 (25) compared with Elm2.4ME+ PL114 (25)
------------------------------------------------------------------
! SUMMARY: This release changes temporary folder
! location on some situations, fixes crash
on c)hange command on alias menu, adds
elmrc options "local-sessionlock-dir" and
"local-sessionlock-use-home", and changes
! SIGWINCH handling when waiting for editor.
! - If opened local mailbox is on somewhere else
! than on spool directory, use "tmpdir" setting
from elm.rc for location of temporary file
"mbox.{mailbox}-{username}" instead default_temp.
***************
*** 78,84 ****
so that Elm will call menu_context_resize() when it is
waiting child to complete ...
-
New elmrc options:
local-sessionlock-dir
local-sessionlock-use-home
--- 209,214 ----
***************
*** 169,175 ****
Changes of Elm2.4ME+ PL113a (25) compared with Elm2.4ME+ PL113 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
- "I tried to compile elm2.4.ME+.113 on AIX 5.1 (maintenance
level 05) or on AIX 5.2 (maintenance level 02)
--- 299,305 ----
Changes of Elm2.4ME+ PL113a (25) compared with Elm2.4ME+ PL113 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "I tried to compile elm2.4.ME+.113 on AIX 5.1 (maintenance
level 05) or on AIX 5.2 (maintenance level 02)
***************
*** 338,344 ****
Changes of Elm2.4ME+ PL111b (25) compared with Elm2.4ME+ PL111a (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix crash on parse failure on command
"View digest as mailbox".
--- 468,474 ----
Changes of Elm2.4ME+ PL111b (25) compared with Elm2.4ME+ PL111a (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix crash on parse failure on command
"View digest as mailbox".
***************
*** 346,352 ****
Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes crash caused by 'U' command
on aliases menu.
--- 476,482 ----
Changes of Elm2.4ME+ PL111a (25) compared with Elm2.4ME+ PL111 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes crash caused by 'U' command
on aliases menu.
***************
*** 429,435 ****
Changes of Elm2.4ME+ PL110a (25) compared with Elm2.4ME+ PL110 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes case, where output of pgp/gpg was
not shown sometimes (on non-MIME messages),
--- 559,565 ----
Changes of Elm2.4ME+ PL110a (25) compared with Elm2.4ME+ PL110 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes case, where output of pgp/gpg was
not shown sometimes (on non-MIME messages),
***************
*** 569,575 ****
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes segmentation violation on
l)imit command and problem where user alias
--- 699,705 ----
Changes of Elm2.4ME+ PL109b (25) compared with Elm2.4ME+ PL109a (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes segmentation violation on
l)imit command and problem where user alias
***************
*** 585,591 ****
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
--- 715,721 ----
Changes of Elm2.4ME+ PL109a (25) compared with Elm2.4ME+ PL109 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
Undo Elm2.4ME+ PL109S (25) patch before applying this patch.
***************
*** 814,820 ****
Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch makes some fixes for elmregister,
and elm's search command ('/').
--- 944,950 ----
Changes of Elm2.4ME+ PL108a (25) compared with Elm2.4ME+ PL108 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch makes some fixes for elmregister,
and elm's search command ('/').
***************
*** 929,935 ****
Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch corrects page when returning
from o)ptions screen and fixes some other
--- 1059,1065 ----
Changes of Elm2.4ME+ PL107a (25) compared with Elm2.4ME+ PL107 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch corrects page when returning
from o)ptions screen and fixes some other
***************
*** 1242,1248 ****
Changes of Elm2.4ME+ PL102a (25) compared with Elm2.4ME+ PL102 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes temp file leak
when forwarding with mimeforward = YES and
--- 1372,1378 ----
Changes of Elm2.4ME+ PL102a (25) compared with Elm2.4ME+ PL102 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes temp file leak
when forwarding with mimeforward = YES and
***************
*** 1571,1577 ****
Changes of Elm2.4ME+ PL101c (25) compared with Elm2.4ME+ PL101b (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes segmentation fault, when
when viewing attachment with unxepected
--- 1701,1707 ----
Changes of Elm2.4ME+ PL101c (25) compared with Elm2.4ME+ PL101b (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes segmentation fault, when
when viewing attachment with unxepected
***************
*** 1784,1790 ****
Changes of Elm2.4ME+ PL101b (25) compared with Elm2.4ME+ PL101a (25)
--------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch makes possible to set
incoming-mailbox = $USER@imap-sever on
--- 1914,1920 ----
Changes of Elm2.4ME+ PL101b (25) compared with Elm2.4ME+ PL101a (25)
--------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch makes possible to set
incoming-mailbox = $USER@imap-sever on
***************
*** 1832,1838 ****
Changes of Elm2.4ME+ PL101a (25) compared with Elm2.4ME+ PL101 (25)
-------------------------------------------------------------------
! [ This is out of branch patch. ]
SUMMARY: This patch fixes crash on internal mailcap parser
and on header editing screen.
--- 1962,1968 ----
Changes of Elm2.4ME+ PL101a (25) compared with Elm2.4ME+ PL101 (25)
-------------------------------------------------------------------
! [ This patch is branch from the main line. ]
SUMMARY: This patch fixes crash on internal mailcap parser
and on header editing screen.
***************
*** 2014,2020 ****
Changes of Elm2.4ME+ PL100a (25) compared with Elm2.4ME+ PL100 (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Configure did not generated mapping for iso_8859_1
locale (on SunOS).
--- 2144,2150 ----
Changes of Elm2.4ME+ PL100a (25) compared with Elm2.4ME+ PL100 (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Configure did not generated mapping for iso_8859_1
locale (on SunOS).
***************
*** 2341,2347 ****
Changes of Elm2.4ME+ PL99f (25) compared with Elm2.4ME+ PL99e (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix panic on header editing screen on In-Reply-To:
STRING PANIC in cs_binary.c:1043:cs_give_unicode_from_ascii
--- 2471,2477 ----
Changes of Elm2.4ME+ PL99f (25) compared with Elm2.4ME+ PL99e (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix panic on header editing screen on In-Reply-To:
STRING PANIC in cs_binary.c:1043:cs_give_unicode_from_ascii
***************
*** 2366,2372 ****
Changes of Elm2.4ME+ PL99e (25) compared with Elm2.4ME+ PL99d (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Trying send pgp2 (signed or encrypted) message
was causing crash.
--- 2496,2502 ----
Changes of Elm2.4ME+ PL99e (25) compared with Elm2.4ME+ PL99d (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Trying send pgp2 (signed or encrypted) message
was causing crash.
***************
*** 2394,2400 ****
Changes of Elm2.4ME+ PL99d (25) compared with Elm2.4ME+ PL99c (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- "I'm working on updating the Debian elm-me+ package; a
number of patches have accumulated over the years, and
--- 2524,2530 ----
Changes of Elm2.4ME+ PL99d (25) compared with Elm2.4ME+ PL99c (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "I'm working on updating the Debian elm-me+ package; a
number of patches have accumulated over the years, and
***************
*** 2475,2481 ****
Changes of Elm2.4ME+ PL99c (25) compared with Elm2.4ME+ PL99b (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Handling of multipart/signed and
multipart/encrypted was broken Elm2.4ME+ PL98 (25)
--- 2605,2611 ----
Changes of Elm2.4ME+ PL99c (25) compared with Elm2.4ME+ PL99b (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Handling of multipart/signed and
multipart/encrypted was broken Elm2.4ME+ PL98 (25)
***************
*** 2484,2490 ****
Changes of Elm2.4ME+ PL99b (25) compared with Elm2.4ME+ PL99a (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix panic with ISO-2022-JP text with message
STRING PANIC in cs_iso2022.c:1757:add_char_stream
--- 2614,2620 ----
Changes of Elm2.4ME+ PL99b (25) compared with Elm2.4ME+ PL99a (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix panic with ISO-2022-JP text with message
STRING PANIC in cs_iso2022.c:1757:add_char_stream
***************
*** 2495,2501 ****
Changes of Elm2.4ME+ PL99a (25) compared with Elm2.4ME+ PL99 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- There should not be Return-Path header visible
on Pre-Send screen on Beginner user level.
--- 2625,2631 ----
Changes of Elm2.4ME+ PL99a (25) compared with Elm2.4ME+ PL99 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- There should not be Return-Path header visible
on Pre-Send screen on Beginner user level.
***************
*** 2744,2750 ****
Changes of Elm2.4ME+ PL98c (25) compared with Elm2.4ME+ PL98b (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- copy_message_2() lost header name when folding happeded
immediately after header name (that specially was visible
--- 2874,2880 ----
Changes of Elm2.4ME+ PL98c (25) compared with Elm2.4ME+ PL98b (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- copy_message_2() lost header name when folding happeded
immediately after header name (that specially was visible
***************
*** 2767,2773 ****
Changes of Elm2.4ME+ PL98b (25) compared with Elm2.4ME+ PL98a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Our non-standard headers was ignored:
* X-ELM-OSV: hdr-charset=xxxx was ignored
--- 2897,2903 ----
Changes of Elm2.4ME+ PL98b (25) compared with Elm2.4ME+ PL98a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Our non-standard headers was ignored:
* X-ELM-OSV: hdr-charset=xxxx was ignored
***************
*** 2776,2782 ****
Changes of Elm2.4ME+ PL98a (25) compared with Elm2.4ME+ PL98 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- "since a number of releases frm doesn't detect status
new correctly for me (Linux 2.4.18, elm2.4.ME+.98)."
--- 2906,2912 ----
Changes of Elm2.4ME+ PL98a (25) compared with Elm2.4ME+ PL98 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "since a number of releases frm doesn't detect status
new correctly for me (Linux 2.4.18, elm2.4.ME+.98)."
***************
*** 2969,2975 ****
Changes of Elm2.4ME+ PL97d (25) compared with Elm2.4ME+ PL97c (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- If there libintl.so (from GNU gettext) installed
--- 3099,3105 ----
Changes of Elm2.4ME+ PL97d (25) compared with Elm2.4ME+ PL97c (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- If there libintl.so (from GNU gettext) installed
***************
*** 3002,3008 ****
Changes of Elm2.4ME+ PL97c (25) compared with Elm2.4ME+ PL97b (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Wrong answer to question "Any additional libraries"
causes failure on "Trying locate terminfo routines"
--- 3132,3138 ----
Changes of Elm2.4ME+ PL97c (25) compared with Elm2.4ME+ PL97b (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Wrong answer to question "Any additional libraries"
causes failure on "Trying locate terminfo routines"
***************
*** 3052,3058 ****
Changes of Elm2.4ME+ PL97b (25) compared with Elm2.4ME+ PL97a (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- binary flag was incorrectly set true (result on change
on Elm2.4ME+ PL97 (25)). That caused that EOLN mail headers
--- 3182,3188 ----
Changes of Elm2.4ME+ PL97b (25) compared with Elm2.4ME+ PL97a (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- binary flag was incorrectly set true (result on change
on Elm2.4ME+ PL97 (25)). That caused that EOLN mail headers
***************
*** 3065,3071 ****
Changes of Elm2.4ME+ PL97a (25) compared with Elm2.4ME+ PL97 (25)
----------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix state_printf panic "Embedded newlines are not supported"
on case when there is on ~/.elm/elmheaders
--- 3195,3201 ----
Changes of Elm2.4ME+ PL97a (25) compared with Elm2.4ME+ PL97 (25)
----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix state_printf panic "Embedded newlines are not supported"
on case when there is on ~/.elm/elmheaders
***************
*** 3195,3201 ****
Changes of Elm2.4ME+ PL96b (25) compared with Elm2.4ME+ PL96a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Test whatever make sets $(MAKE)
--- 3325,3331 ----
Changes of Elm2.4ME+ PL96b (25) compared with Elm2.4ME+ PL96a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Test whatever make sets $(MAKE)
***************
*** 3225,3231 ****
Changes of Elm2.4ME+ PL96a (25) compared with Elm2.4ME+ PL96 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- Metamail can not cope with CRLF
Problem noted by: Konstantinos Konstantinides <k...@corp.cirrus.com>
--- 3355,3361 ----
Changes of Elm2.4ME+ PL96a (25) compared with Elm2.4ME+ PL96 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Metamail can not cope with CRLF
Problem noted by: Konstantinos Konstantinides <k...@corp.cirrus.com>
***************
*** 3424,3430 ****
Changes of Elm2.4ME+ PL95c (25) compared with Elm2.4ME+ PL95b (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- Do not use commands "mail" or "mailx" as mailer.
- Allow specify "none" as mailer on configuration time
--- 3554,3560 ----
Changes of Elm2.4ME+ PL95c (25) compared with Elm2.4ME+ PL95b (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Do not use commands "mail" or "mailx" as mailer.
- Allow specify "none" as mailer on configuration time
***************
*** 3440,3446 ****
Changes of Elm2.4ME+ PL95b (25) compared with Elm2.4ME+ PL95a (25)
------------------------------------------------------------------
! [ This is out of branch patch. ]
- "Using PL95 with the two patches you send me, I encountered the
following problem when searching for a string in a mail message:
--- 3570,3576 ----
Changes of Elm2.4ME+ PL95b (25) compared with Elm2.4ME+ PL95a (25)
------------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Using PL95 with the two patches you send me, I encountered the
following problem when searching for a string in a mail message:
***************
*** 3458,3464 ****
Changes of Elm2.4ME+ PL95a (25) compared with Elm2.4ME+ PL95 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- "Following please find the error when trying to
compile elm2.4.ME+.95 on AIX 4.3.3 (maintenance level 09):
--- 3588,3594 ----
Changes of Elm2.4ME+ PL95a (25) compared with Elm2.4ME+ PL95 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Following please find the error when trying to
compile elm2.4.ME+.95 on AIX 4.3.3 (maintenance level 09):
***************
*** 3766,3772 ****
Changes of Elm2.4ME+ PL94a (25) compared with Elm2.4ME+ PL94 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- When sending mail, saving copy of mail to folder
failed when
--- 3896,3902 ----
Changes of Elm2.4ME+ PL94a (25) compared with Elm2.4ME+ PL94 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- When sending mail, saving copy of mail to folder
failed when
***************
*** 3970,3976 ****
Changes of Elm2.4ME+ PL92a (25) compared with Elm2.4ME+ PL92 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- "Until I did this I could not get it to build correctly on
solaris 8 (even if I didn't want to use the sharedlibs --
--- 4100,4106 ----
Changes of Elm2.4ME+ PL92a (25) compared with Elm2.4ME+ PL92 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Until I did this I could not get it to build correctly on
solaris 8 (even if I didn't want to use the sharedlibs --
***************
*** 4206,4212 ****
Changes of Elm2.4ME+ PL90a (25) compared with Elm2.4ME+ PL90
------------------------------------------------------------
! [ This is out of branch patch. ]
- "Running Elm 2.4ME+86, if I displayed the first 80% of
a message using the built-in text browser, pressing
--- 4336,4342 ----
Changes of Elm2.4ME+ PL90a (25) compared with Elm2.4ME+ PL90
------------------------------------------------------------
! [ This patch is branch from the main line. ]
- "Running Elm 2.4ME+86, if I displayed the first 80% of
a message using the built-in text browser, pressing
***************
*** 4346,4352 ****
Changes of Elm2.4ME+ PL88a (25) compared with Elm2.4ME+ PL88 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- In newmail.c and from.c utilities header_charset
was not set.
--- 4476,4482 ----
Changes of Elm2.4ME+ PL88a (25) compared with Elm2.4ME+ PL88 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- In newmail.c and from.c utilities header_charset
was not set.
***************
*** 4614,4620 ****
Changes of Elm2.4ME+ PL84a (25) compared with Elm2.4ME+ PL84 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- 'struct string * ret' was incorrectly static on
browser_descend_imap(). That caused Elm to crash,
--- 4744,4750 ----
Changes of Elm2.4ME+ PL84a (25) compared with Elm2.4ME+ PL84 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- 'struct string * ret' was incorrectly static on
browser_descend_imap(). That caused Elm to crash,
***************
*** 5357,5363 ****
Changes of Elm2.4ME+ PL76a (25) compared with Elm2.4ME+ PL76 (25)
-----------------------------------------------------------------
! [ This is out of branch patch. ]
- On PL73 [encode] was producing (by mistake)
text/X-ELM-encode instead of application/X-ELM-encode as
--- 5487,5493 ----
Changes of Elm2.4ME+ PL76a (25) compared with Elm2.4ME+ PL76 (25)
-----------------------------------------------------------------
! [ This patch is branch from the main line. ]
- On PL73 [encode] was producing (by mistake)
text/X-ELM-encode instead of application/X-ELM-encode as
***************
*** 6716,6722 ****
Changes of Elm2.4ME+ PL53Y (25) compared with Elm2.4ME+ PL53 (25)
---------------------------------------------------------------
! [ This is out of branch patch. ]
- Test that year >= 0 instead of year > 0 on
cvt_yearstr_to_yearnum(). That affects if
--- 6846,6852 ----
Changes of Elm2.4ME+ PL53Y (25) compared with Elm2.4ME+ PL53 (25)
---------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Test that year >= 0 instead of year > 0 on
cvt_yearstr_to_yearnum(). That affects if
***************
*** 6868,6874 ****
Changes of Elm2.4ME+ PL50s (25) compared with Elm2.4ME+ PL50 (25)
--------------------------------------------------------------
! [ This is out of branch patch. ]
- Fix incorrect bound checking on putc_so_string()
(state.c)
--- 6998,7004 ----
Changes of Elm2.4ME+ PL50s (25) compared with Elm2.4ME+ PL50 (25)
--------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Fix incorrect bound checking on putc_so_string()
(state.c)
***************
*** 7509,7515 ****
Changes of Elm2.4ME+ PL31H (25) compared with Elm2.4ME+ PL31 (25)
---------------------------------------------------------------
! [ This is out of branch patch. ]
- Incorrect Content-length: -header was causing corruption
of folders.
--- 7639,7645 ----
Changes of Elm2.4ME+ PL31H (25) compared with Elm2.4ME+ PL31 (25)
---------------------------------------------------------------
! [ This patch is branch from the main line. ]
- Incorrect Content-length: -header was causing corruption
of folders.
Index: elm2.4.ME+.116-cvs/doc/elmrc-info
*** elm2.4.ME+.115/doc/elmrc-info 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/doc/elmrc-info 2004-05-01 22:08:18.000000000 +0300
***************
*** 1,4 ****
! #@(#)$Id: elmrc-info,v 1.61 2004/04/04 16:42:27 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
--- 1,4 ----
! #@(#)$Id: elmrc-info,v 1.62 2004/05/01 19:08:18 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
***************
*** 152,157 ****
--- 152,160 ----
weedout
# what headers I DON'T want to see, ever.
+ #
+ # If first element on list is "*clear-weed-list*" then builtin
+ # weedout list is not used.
bounceback
# threshold for bouncing copies of remote uucp messages...
Index: elm2.4.ME+.116-cvs/doc/elmregister.1
*** elm2.4.ME+.115/doc/elmregister.1 2004-02-25 21:39:18.000000000 +0200
--- elm2.4.ME+.116-cvs/doc/elmregister.1 2004-05-02 15:38:13.000000000 +0300
***************
*** 26,31 ****
--- 26,33 ----
.br
.B #LIB#/elmregister copy
.br
+ .B #LIB#/elmregister copydoc
+ .br
.B #LIB#/elmregister
.I command
***************
*** 105,108 ****
.SH BUG REPORTS TO
Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 2003 by Kari Hurtta
--- 107,110 ----
.SH BUG REPORTS TO
Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 2003, 2004 by Kari Hurtta
Index: elm2.4.ME+.116-cvs/doc/Makefile.SH
*** elm2.4.ME+.115/doc/Makefile.SH 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.116-cvs/doc/Makefile.SH 2004-05-02 15:38:13.000000000 +0300
***************
*** 17,23 ****
cat >Makefile <<!GROK!THIS!
#!$make
#
! # $Id: Makefile.SH,v 1.30 2004/01/03 20:12:28 hurtta Exp $
#
# Makefile for the documentation of the ELM mail system
#
--- 17,23 ----
cat >Makefile <<!GROK!THIS!
#!$make
#
! # $Id: Makefile.SH,v 1.31 2004/05/02 12:38:13 hurtta Exp $
#
# Makefile for the documentation of the ELM mail system
#
***************
*** 303,339 ****
# Dependencies and rules for installing man pages and lib files
$(MAN)/answer$(MANEXT): answer.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/checkalias$(MANEXT): chkalias.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elm$(MANEXT): elm.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmalias$(MANEXT): elmalias.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmcharset$(MANEXT): elmcharset.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmrc-write$(MANEXT): elmrc-write.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmterminal$(MANEXT): elmterminal.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmunidata$(MANEXT): elmunidata.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmbindata$(MANEXT): elmbindata.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/fastmail$(MANEXT): fastmail.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/frm$(MANEXT): frm.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/nfrm$(MANEXT): $(MAN)/frm$(MANEXT)
$(REG) link $? $@
--- 303,339 ----
# Dependencies and rules for installing man pages and lib files
$(MAN)/answer$(MANEXT): answer.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/checkalias$(MANEXT): chkalias.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elm$(MANEXT): elm.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmalias$(MANEXT): elmalias.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmcharset$(MANEXT): elmcharset.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmrc-write$(MANEXT): elmrc-write.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmterminal$(MANEXT): elmterminal.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmunidata$(MANEXT): elmunidata.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmbindata$(MANEXT): elmbindata.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/fastmail$(MANEXT): fastmail.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/frm$(MANEXT): frm.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/nfrm$(MANEXT): $(MAN)/frm$(MANEXT)
$(REG) link $? $@
***************
*** 342,375 ****
$(REG) link $? $@
$(MAN)/listalias$(MANEXT): listalias.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/messages$(MANEXT): messages.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/newalias$(MANEXT): newalias.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/newmail$(MANEXT): newmail.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/printmail$(MANEXT): printmail.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/readmsg$(MANEXT): readmsg.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmstringconvert$(MANEXT): elmstringconvert.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/prlong$(MANEXT): prlong.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmregister$(MANEXT): elmregister.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/elmlibregister$(MANEXT): elmlibregister.1.subs
! $(REG) copy -m 444 $? $@
$(MAN)/wnewmail$(MANEXT): $(MAN)/newmail$(MANEXT)
--- 342,375 ----
$(REG) link $? $@
$(MAN)/listalias$(MANEXT): listalias.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/messages$(MANEXT): messages.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/newalias$(MANEXT): newalias.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/newmail$(MANEXT): newmail.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/printmail$(MANEXT): printmail.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/readmsg$(MANEXT): readmsg.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmstringconvert$(MANEXT): elmstringconvert.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/prlong$(MANEXT): prlong.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmregister$(MANEXT): elmregister.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/elmlibregister$(MANEXT): elmlibregister.1.subs
! $(REG) copydoc -m 444 $? $@
$(MAN)/wnewmail$(MANEXT): $(MAN)/newmail$(MANEXT)
***************
*** 392,446 ****
# Dependencies and rules for installing catman
$(CATMAN)/answer$(CATMANEXT)$(SUFFIX): catman/answer$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/checkalias$(CATMANEXT)$(SUFFIX): catman/checkalias$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elm$(CATMANEXT)$(SUFFIX): catman/elm$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elmalias$(CATMANEXT)$(SUFFIX): catman/elmalias$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elmcharset$(CATMANEXT)$(SUFFIX): catman/elmcharset$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elmrc-write$(CATMANEXT)$(SUFFIX): catman/elmrc-write$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elmunidata$(CATMANEXT)$(SUFFIX): catman/elmunidata$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elmbindata$(CATMANEXT)$(SUFFIX): catman/elmbindata$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elmterminal$(CATMANEXT)$(SUFFIX): catman/elmterminal$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/fastmail$(CATMANEXT)$(SUFFIX): catman/fastmail$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/frm$(CATMANEXT)$(SUFFIX): catman/frm$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/listalias$(CATMANEXT)$(SUFFIX): catman/listalias$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/messages$(CATMANEXT)$(SUFFIX): catman/messages$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/newalias$(CATMANEXT)$(SUFFIX): catman/newalias$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/newmail$(CATMANEXT)$(SUFFIX): catman/newmail$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/printmail$(CATMANEXT)$(SUFFIX): catman/printmail$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/readmsg$(CATMANEXT)$(SUFFIX): catman/readmsg$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CHMOD) u=rw,go=r $@
$(CATMAN)/wnewmail$(CATMANEXT)$(SUFFIX): $(CATMAN)/newmail$(CATMANEXT)$(SUFFIX)
--- 392,446 ----
# Dependencies and rules for installing catman
$(CATMAN)/answer$(CATMANEXT)$(SUFFIX): catman/answer$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/checkalias$(CATMANEXT)$(SUFFIX): catman/checkalias$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elm$(CATMANEXT)$(SUFFIX): catman/elm$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmalias$(CATMANEXT)$(SUFFIX): catman/elmalias$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmcharset$(CATMANEXT)$(SUFFIX): catman/elmcharset$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmrc-write$(CATMANEXT)$(SUFFIX): catman/elmrc-write$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmunidata$(CATMANEXT)$(SUFFIX): catman/elmunidata$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmbindata$(CATMANEXT)$(SUFFIX): catman/elmbindata$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmterminal$(CATMANEXT)$(SUFFIX): catman/elmterminal$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/fastmail$(CATMANEXT)$(SUFFIX): catman/fastmail$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/frm$(CATMANEXT)$(SUFFIX): catman/frm$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/listalias$(CATMANEXT)$(SUFFIX): catman/listalias$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/messages$(CATMANEXT)$(SUFFIX): catman/messages$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/newalias$(CATMANEXT)$(SUFFIX): catman/newalias$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/newmail$(CATMANEXT)$(SUFFIX): catman/newmail$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/printmail$(CATMANEXT)$(SUFFIX): catman/printmail$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/readmsg$(CATMANEXT)$(SUFFIX): catman/readmsg$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CHMOD) u=rw,go=r $@
$(CATMAN)/wnewmail$(CATMANEXT)$(SUFFIX): $(CATMAN)/newmail$(CATMANEXT)$(SUFFIX)
***************
*** 453,468 ****
$(REG) link $? $@
$(CATMAN)/elmstringconvert$(CATMANEXT)$(SUFFIX): catman/elmstringconvert$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/prlong$(CATMANEXT)$(SUFFIX): catman/prlong$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elmregister$(CATMANEXT)$(SUFFIX): catman/elmregister$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
$(CATMAN)/elmlibregister$(CATMANEXT)$(SUFFIX): catman/elmlibregister$(CATMANEXT)$(SUFFIX)
! $(REG) copy -m 444 $? $@
# Dependencies and rules for making catman pages
catman/answer$(CATMANEXT)$(SUFFIX): answer.1.subs
--- 453,468 ----
$(REG) link $? $@
$(CATMAN)/elmstringconvert$(CATMANEXT)$(SUFFIX): catman/elmstringconvert$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/prlong$(CATMANEXT)$(SUFFIX): catman/prlong$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmregister$(CATMANEXT)$(SUFFIX): catman/elmregister$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmlibregister$(CATMANEXT)$(SUFFIX): catman/elmlibregister$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
# Dependencies and rules for making catman pages
catman/answer$(CATMANEXT)$(SUFFIX): answer.1.subs
Index: elm2.4.ME+.116-cvs/hdrs/defs.h
*** elm2.4.ME+.115/hdrs/defs.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/hdrs/defs.h 2004-05-01 16:18:50.000000000 +0300
***************
*** 1,7 ****
! /* $Id: defs.h,v 1.45 2004/03/27 18:31:35 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.45 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: defs.h,v 1.46 2004/05/01 13:18:50 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 576,586 ****
long length; /* length of alias data on file */
};
- struct addr_rec {
- char address[NLEN]; /* machine!user you get mail as */
- struct addr_rec *next; /* linked list pointer to next */
- };
-
#ifdef SHORTNAMES /* map long names to shorter ones */
# include <shortname.h>
--- 576,581 ----
Index: elm2.4.ME+.116-cvs/hdrs/elmlib.h
*** elm2.4.ME+.115/hdrs/elmlib.h 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/hdrs/elmlib.h 2004-05-01 22:08:18.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmlib.h,v 1.207 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.207 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmlib.h,v 1.209 2004/05/01 19:08:18 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.209 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 725,731 ****
From: -header
*/
extern char alternative_editor[SLEN];/* the 'other' editor */
! extern struct addr_rec *alternative_addresses; /* how else do we get mail? */
extern int always_del; /* flag: always delete marked msgs? */
extern int always_keep; /* flag: always keep unread msgs? */
extern int always_store; /* flag: always store read mail? */
--- 725,731 ----
From: -header
*/
extern char alternative_editor[SLEN];/* the 'other' editor */
! extern PATH alternative_addresses; /* how else do we get mail? */
extern int always_del; /* flag: always delete marked msgs? */
extern int always_keep; /* flag: always keep unread msgs? */
extern int always_store; /* flag: always store read mail? */
***************
*** 912,919 ****
extern char v_editor[SLEN]; /* "~v" editor... */
extern int elm_filter; /* flag: weed out header lines? */
extern int send_mime_plain; /* Send text/plain US-ASCII as MIME? */
! extern char *weedlist[MAX_IN_WEEDLIST];
! extern int weedcount; /* how many headers to check? */
#ifdef REMOTE_MBX
extern char raw_imap_charset[SLEN]; /* IMAP foldername charset */
extern int imap_fast_lookup; /* flag: skip directory listing */
--- 912,919 ----
extern char v_editor[SLEN]; /* "~v" editor... */
extern int elm_filter; /* flag: weed out header lines? */
extern int send_mime_plain; /* Send text/plain US-ASCII as MIME? */
! extern PATH weedlist;
!
#ifdef REMOTE_MBX
extern char raw_imap_charset[SLEN]; /* IMAP foldername charset */
extern int imap_fast_lookup; /* flag: skip directory listing */
Index: elm2.4.ME+.116-cvs/hdrs/headers.h
*** elm2.4.ME+.115/hdrs/headers.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/hdrs/headers.h 2004-05-19 14:52:30.000000000 +0300
***************
*** 1,7 ****
! /* $Id: headers.h,v 1.24 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: headers.h,v 1.25 2004/05/19 11:52:30 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 35,83 ****
extern int sendmail_verbose; /* Allow extended debugging on sendmail */
extern int nucurr; /** change list or just the current pointer **/
-
-
extern char cur_editfile[SLEN]; /* editor buffer */
extern char defaultfile[SLEN]; /* name of default folder */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
extern char batch_subject[SLEN];/* subject buffer for batchmail */
extern char included_file[SLEN];/* name of file to place in edit buf */
-
-
-
extern char version_buff[NLEN]; /* version buffer */
-
-
-
extern char *def_ans_yes; /* default yes answer - single char, lc */
extern char *def_ans_no; /* default no answer - single char, lc */
extern char *nls_deleted; /* [deleted] */
--- 35,48 ----
***************
*** 104,155 ****
extern int has_highlighting; /* highlighting available? */
-
-
-
-
-
-
-
-
-
extern int write_elmrc; /* flag: write elmrc in starting */
-
-
-
-
-
-
-
-
-
-
extern int mail_only; /* flag: send mail then leave? */
extern int check_only; /* flag: check aliases and leave? */
extern int batch_only; /* flag: send without prompting? */
-
extern long size_of_pathfd; /** size of pathfile, 0 if none **/
extern FILE *pathfd; /* path alias file */
extern FILE *domainfd; /* domains file */
-
-
-
-
extern int system_data; /* fileno of system data file */
extern int user_data; /* fileno of user data file */
-
-
-
-
-
-
-
#ifdef USE_PGP
extern int pgp_status;
--- 69,89 ----
Index: elm2.4.ME+.116-cvs/hdrs/mbx_imp.h
*** elm2.4.ME+.115/hdrs/mbx_imp.h 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/hdrs/mbx_imp.h 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! /* $Id: mbx_imp.h,v 1.66 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.66 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: mbx_imp.h,v 1.67 2004/04/24 12:30:02 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.67 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 749,758 ****
#define STFLAG_is_submission 0x0400
#define STFLAG_is_smtp 0x0800
! extern const struct service_type * IMAP_SERVICE;
! extern const struct service_type * POP_SERVICE;
! extern const struct service_type * SUBMISSION_SERVICE;
! extern const struct service_type * SMTP_SERVICE;
extern struct service_entry {
int flags;
--- 749,758 ----
#define STFLAG_is_submission 0x0400
#define STFLAG_is_smtp 0x0800
! extern CONST struct service_type * IMAP_SERVICE;
! extern CONST struct service_type * POP_SERVICE;
! extern CONST struct service_type * SUBMISSION_SERVICE;
! extern CONST struct service_type * SMTP_SERVICE;
extern struct service_entry {
int flags;
Index: elm2.4.ME+.116-cvs/hdrs/me.h
*** elm2.4.ME+.115/hdrs/me.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/hdrs/me.h 2004-05-02 14:15:26.000000000 +0300
***************
*** 1,7 ****
! /* $Id: me.h,v 1.87 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.87 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: me.h,v 1.89 2004/05/02 11:15:26 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.89 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 119,124 ****
--- 119,135 ----
int *redraw,
struct menu_context *page));
+ #define PROMPT_center 1
+ #define PROMPT_yesno 2
+ #define PROMPT_redraw_mark 4
+ #define PROMTP_ctrlL 8
+
+ extern int prompt_letter P_((int line, char *letters, int def,
+ int flags,
+ struct menu_context *page,
+ const char * format, const char *msg, ...));
+
+
#define OE_APPEND_CURRENT (1<<0)
#define OE_PASSWD (1<<1)
#define OE_REDRAW_MARK (1<<2)
Index: elm2.4.ME+.116-cvs/hdrs/rc_imp.h
*** elm2.4.ME+.115/hdrs/rc_imp.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/hdrs/rc_imp.h 2004-05-01 22:08:18.000000000 +0300
***************
*** 1,7 ****
! /* $Id: rc_imp.h,v 1.10 2004/03/28 13:37:38 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: rc_imp.h,v 1.12 2004/05/01 19:08:18 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
Index: elm2.4.ME+.116-cvs/hdrs/save_opts.h
*** elm2.4.ME+.115/hdrs/save_opts.h 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/hdrs/save_opts.h 2004-05-01 22:08:19.000000000 +0300
***************
*** 1,7 ****
! /* @(#)$Id: save_opts.h,v 1.82 2004/04/04 16:42:27 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.82 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* @(#)$Id: save_opts.h,v 1.84 2004/05/01 19:08:19 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.84 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 48,54 ****
#define PATH_sep_comma 64
#define PATH_sep_colon 128
#define PATH_quote_single 256
!
struct dt_path_info {
int flags;
--- 48,54 ----
#define PATH_sep_comma 64
#define PATH_sep_colon 128
#define PATH_quote_single 256
! #define PATH_convert_underline 512
struct dt_path_info {
int flags;
***************
*** 84,93 ****
long *l_num;
int *bol;
char *chr;
- char **weed;
- struct addr_rec **alts;
int *sort;
struct dt_path_info *path;
#ifdef USE_PGP
enum pgp_version *pgpver;
#endif
--- 84,92 ----
long *l_num;
int *bol;
char *chr;
int *sort;
struct dt_path_info *path;
+ char **mlt;
#ifdef USE_PGP
enum pgp_version *pgpver;
#endif
***************
*** 116,125 ****
#define ZZZ_DT_SRT(A) DT_SRT,0, { sort: A }, null_option_func
#define ZZZ_DT_STR(A) DT_STR,0, { str: A }, null_option_func
#define ZZZ_DT_STR_(x,A) DT_STR,x, { str: A }, null_option_func
- #define ZZZ_DT_ALT(A) DT_ALT,0, { alts: A }, null_option_func
#define ZZZ_DT_BOL(A) DT_BOL,0, { bol: A }, null_option_func
#define ZZZ_DT_BOL_(x,A) DT_BOL,x, { bol: A }, null_option_func
! #define ZZZ_DT_MLT(A) DT_MLT,0, { weed: A }, null_option_func
#define ZZZ_DT_SYN(A) DT_SYN,0, { str: A }, null_option_func
#define ZZZ_DT_NUM(A) DT_NUM,0, { num: A }, null_option_func
#define ZZZ_DT_NUM_(x,A) DT_NUM,x, { num: A }, null_option_func
--- 115,123 ----
#define ZZZ_DT_SRT(A) DT_SRT,0, { sort: A }, null_option_func
#define ZZZ_DT_STR(A) DT_STR,0, { str: A }, null_option_func
#define ZZZ_DT_STR_(x,A) DT_STR,x, { str: A }, null_option_func
#define ZZZ_DT_BOL(A) DT_BOL,0, { bol: A }, null_option_func
#define ZZZ_DT_BOL_(x,A) DT_BOL,x, { bol: A }, null_option_func
! #define ZZZ_DT_MLT(A) DT_MLT,0, { mlt: A }, null_option_func
#define ZZZ_DT_SYN(A) DT_SYN,0, { str: A }, null_option_func
#define ZZZ_DT_NUM(A) DT_NUM,0, { num: A }, null_option_func
#define ZZZ_DT_NUM_(x,A) DT_NUM,x, { num: A }, null_option_func
***************
*** 131,137 ****
#define ZZZ_DT_FUNC_(x,A) DT_FUNC,x, { str: NULL }, A
#define ZZZ_DT_CHR(A) &rc_DT_CHR,0, { chr: A }, null_option_func
#define ZZZ_DT_PRM(A) DT_PRM,0, { num: A }, null_option_func
- #define ZZZ_DT_WEE(A) DT_WEE,0, { weed: A }, null_option_func
#define ZZZ_DT_PATH(A) &rc_DT_PATH,0, { path: A }, null_option_func
#define ZZZ_DT_OBS0 &rc_DT_OBS,0, { str: NULL }, null_option_func
#define ZZZ_DT_SHARED(A) &rc_DT_SHARED,0, { shared: A }, null_option_func
--- 129,134 ----
***************
*** 158,164 ****
#define ZZZ_DT_SRT(A) DT_SRT, 0,(char *)A, null_option_func
#define ZZZ_DT_STR(A) DT_STR, 0,A, null_option_func
#define ZZZ_DT_STR_(x,A) DT_STR,x,A, null_option_func
- #define ZZZ_DT_ALT(A) DT_ALT, 0,(char *)A, null_option_func
#define ZZZ_DT_BOL(A) DT_BOL, 0,(char *)A, null_option_func
#define ZZZ_DT_BOL_(x,A) DT_BOL,x,(char *)A, null_option_func
#define ZZZ_DT_MLT(A) DT_MLT,0,(char *)A, null_option_func
--- 155,160 ----
***************
*** 173,179 ****
#define ZZZ_DT_FUNC_(x,A) DT_FUNC,x,NULL, A
#define ZZZ_DT_CHR(A) &rc_DT_CHR,0,(char *)A, null_option_func
#define ZZZ_DT_PRM(A) DT_PRM,0,(char *)A, null_option_func
- #define ZZZ_DT_WEE(A) DT_WEE,0,(char *)A, null_option_func
#define ZZZ_DT_PATH(A) &rc_DT_PATH,0, (char *)A, null_option_func
#define ZZZ_DT_OBS0 &rc_DT_OBS,0, NULL , null_option_func
#define ZZZ_DT_SHARED(A) &rc_DT_SHARED,0, (char *)A, null_option_func
--- 169,174 ----
***************
*** 249,255 ****
NULL},
{"alteditor", -1L,ZZZ_DT_STR(alternative_editor),
sizeof alternative_editor, NULL},
! {"alternatives", -1L,ZZZ_DT_ALT(&alternative_addresses), 0, NULL},
{"alwaysdelete", -1L,ZZZ_DT_BOL(&always_del), 0, NULL},
{"alwayskeep", -1L,ZZZ_DT_BOL(&always_keep), 0, NULL},
{"alwaysleave", -1L,ZZZ_DT_MLT(ALWAYS), 0, NULL},
--- 244,250 ----
NULL},
{"alteditor", -1L,ZZZ_DT_STR(alternative_editor),
sizeof alternative_editor, NULL},
! {"alternatives", -1L,ZZZ_DT_PATH(&alternative_addresses), 0, NULL},
{"alwaysdelete", -1L,ZZZ_DT_BOL(&always_del), 0, NULL},
{"alwayskeep", -1L,ZZZ_DT_BOL(&always_keep), 0, NULL},
{"alwaysleave", -1L,ZZZ_DT_MLT(ALWAYS), 0, NULL},
***************
*** 496,502 ****
{"utf7-encode-optional", -1L,ZZZ_DT_BOL(&utf7_encode_optional), 0, NULL},
{"visualeditor", -1L,ZZZ_DT_STR(v_editor), sizeof v_editor, NULL},
{"weed", -1L,ZZZ_DT_BOL(&elm_filter), 0, NULL},
! {"weedout", -1L,ZZZ_DT_WEE(weedlist), 0, NULL},
};
int NUMBER_OF_SAVEABLE_OPTIONS=(sizeof(save_info_data)/sizeof(ZZZ_SAVE_TYPE));
save_info_recs *save_info = (save_info_recs *) save_info_data;
--- 491,497 ----
{"utf7-encode-optional", -1L,ZZZ_DT_BOL(&utf7_encode_optional), 0, NULL},
{"visualeditor", -1L,ZZZ_DT_STR(v_editor), sizeof v_editor, NULL},
{"weed", -1L,ZZZ_DT_BOL(&elm_filter), 0, NULL},
! {"weedout", -1L,ZZZ_DT_PATH(&weedlist), 0, NULL},
};
int NUMBER_OF_SAVEABLE_OPTIONS=(sizeof(save_info_data)/sizeof(ZZZ_SAVE_TYPE));
save_info_recs *save_info = (save_info_recs *) save_info_data;
Index: elm2.4.ME+.116-cvs/hdrs/s_elm.h
*** elm2.4.ME+.115/hdrs/s_elm.h 2004-03-16 21:17:43.000000000 +0200
--- elm2.4.ME+.116-cvs/hdrs/s_elm.h 2004-05-01 22:08:19.000000000 +0300
***************
*** 476,484 ****
#define ElmBadLineElmrc 0x230
#define ElmBatchNoticeFoldersDir 0x231
#define ElmNoticeFoldersDir 0x232
- #define ElmTooManyWeedHeaders 0x233
- #define ElmTooManyWeedPmalloc 0x234
- #define ElmNoMemDefaultWeed 0x235
#define ElmCannotInitErrorExpanding 0x236
#define ElmCouldntMakeTempFileName 0x237
#define ElmCouldntOpenForWriting 0x238
--- 476,481 ----
***************
*** 1097,1099 ****
--- 1094,1097 ----
#define ElmCharsetBadOverride 0x865
#define ElmObsoleteInElmrc 0x866
#define ElmPgpRcvSure 0x867
+ #define ElmFailedLeaveChange 0x868
Index: elm2.4.ME+.116-cvs/lib/bindata.c
*** elm2.4.ME+.115/lib/bindata.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/bindata.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: bindata.c,v 1.4 2004/03/27 18:31:37 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: bindata.c,v 1.5 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@ozone.FMI.FI>
*****************************************************************************/
***************
*** 744,750 ****
struct bindata_format_1 *v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! const char *filename;
{
int status = 0,i;
struct csets_1 *y;
--- 744,750 ----
struct bindata_format_1 *v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! CONST char *filename;
{
int status = 0,i;
struct csets_1 *y;
***************
*** 793,799 ****
struct bindata_mapped_data * v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! const char *filename;
{
int r = 0;
--- 793,799 ----
struct bindata_mapped_data * v;
uint16 bytevector[256];
unsigned char revvector[MAP_REV_MAP_DIV];
! CONST char *filename;
{
int r = 0;
***************
*** 988,994 ****
/* bzero is defined on hdrs/defs.h
*/
! bzero(ret, sizeof (*ret));
ret->format = bindata_format_1;
ret->v.f1.header = v;
--- 988,994 ----
/* bzero is defined on hdrs/defs.h
*/
! bzero((void *)ret, sizeof (*ret));
ret->format = bindata_format_1;
ret->v.f1.header = v;
***************
*** 999,1005 ****
struct bindata_map * give_mapping(v,mapname)
struct bindata_mapped_data *v;
! const char *mapname;
{
struct bindata_map *ret = NULL;
--- 999,1005 ----
struct bindata_map * give_mapping(v,mapname)
struct bindata_mapped_data *v;
! CONST char *mapname;
{
struct bindata_map *ret = NULL;
Index: elm2.4.ME+.116-cvs/lib/cs_iso2022.c
*** elm2.4.ME+.115/lib/cs_iso2022.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/cs_iso2022.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.35 2004/03/27 18:31:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: cs_iso2022.c,v 1.36 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 1078,1084 ****
S_(cs_add_intdata_to_string cs_add_intdata_to_iso2022_gen)
static void cs_add_intdata_to_iso2022_gen(str,data)
struct string *str;
! const struct string *data;
{
int i;
struct mb_data * X1 = str->p->a.data;
--- 1078,1084 ----
S_(cs_add_intdata_to_string cs_add_intdata_to_iso2022_gen)
static void cs_add_intdata_to_iso2022_gen(str,data)
struct string *str;
! CONST struct string *data;
{
int i;
struct mb_data * X1 = str->p->a.data;
***************
*** 1229,1235 ****
S_(cs_give_unicode_from_string cs_give_unicode_from_iso2022_gen)
static uint16 cs_give_unicode_from_iso2022_gen(str,pos,found)
! const struct string *str;
int pos;
int *found;
{
--- 1229,1235 ----
S_(cs_give_unicode_from_string cs_give_unicode_from_iso2022_gen)
static uint16 cs_give_unicode_from_iso2022_gen(str,pos,found)
! CONST struct string *str;
int pos;
int *found;
{
***************
*** 1421,1427 ****
static void cs_add_unicodedata_to_iso2022_gen(str,len,data)
struct string *str;
int len;
! const uint16 *data;
{
int i;
--- 1421,1427 ----
static void cs_add_unicodedata_to_iso2022_gen(str,len,data)
struct string *str;
int len;
! CONST uint16 *data;
{
int i;
***************
*** 3436,3442 ****
S_(cs_clip_from_string cs_clip_from_iso2022_gen)
static void cs_clip_from_iso2022_gen(ret,str,pos,len)
struct string *ret;
! const struct string *str;
int *pos;
int len;
{
--- 3436,3442 ----
S_(cs_clip_from_string cs_clip_from_iso2022_gen)
static void cs_clip_from_iso2022_gen(ret,str,pos,len)
struct string *ret;
! CONST struct string *str;
int *pos;
int len;
{
***************
*** 3544,3550 ****
static int cs_add_streambytes_to_iso2022_gen(str,count,data)
struct string *str;
int count;
! const unsigned char *data;
{
int i = 0;
struct state_iso2022 * X ;
--- 3544,3550 ----
static int cs_add_streambytes_to_iso2022_gen(str,count,data)
struct string *str;
int count;
! CONST unsigned char *data;
{
int i = 0;
struct state_iso2022 * X ;
Index: elm2.4.ME+.116-cvs/lib/headers.c
*** elm2.4.ME+.115/lib/headers.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/headers.c 2004-05-15 18:51:38.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: headers.c,v 1.29 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: headers.c,v 1.31 2004/05/15 15:51:38 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.31 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 158,163 ****
--- 158,167 ----
} else if ('<' == tokens[i][0]) {
int j;
+ /* Add mising space wetween phrase and < > */
Index: elm2.4.ME+.116-cvs/lib/localmbx.c
*** elm2.4.ME+.115/lib/localmbx.c 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/localmbx.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.64 2004/04/04 06:17:17 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.64 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: localmbx.c,v 1.65 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.65 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
Index: elm2.4.ME+.116-cvs/lib/mbox.c
*** elm2.4.ME+.115/lib/mbox.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/mbox.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.51 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.51 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.52 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.52 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 144,150 ****
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct read_folder_state));
(*ptr) -> magic = RF_magic;
(*ptr) -> fbytes = 0;
--- 144,150 ----
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct read_folder_state));
(*ptr) -> magic = RF_magic;
(*ptr) -> fbytes = 0;
***************
*** 166,172 ****
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct read_folder_state));
free(*ptr);
*ptr = NULL;
--- 166,172 ----
*ptr));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct read_folder_state));
free(*ptr);
*ptr = NULL;
***************
*** 839,845 ****
new_folder = safe_malloc(sizeof (struct folder_info));
/* defined in hdrs/defs.h */
! bzero(new_folder,sizeof (struct folder_info));
new_folder -> p = NULL;
new_folder -> cur_folder_sys = NULL;
--- 839,845 ----
new_folder = safe_malloc(sizeof (struct folder_info));
/* defined in hdrs/defs.h */
! bzero((void *)new_folder,sizeof (struct folder_info));
new_folder -> p = NULL;
new_folder -> cur_folder_sys = NULL;
Index: elm2.4.ME+.116-cvs/lib/mediatype.c
*** elm2.4.ME+.115/lib/mediatype.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/mediatype.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mediatype.c,v 1.12 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mediatype.c,v 1.13 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 184,190 ****
}
enum mime_major_type give_major_type(major,create)
! const char * major;
int create;
{
int i;
--- 184,190 ----
}
enum mime_major_type give_major_type(major,create)
! CONST char * major;
int create;
{
int i;
***************
*** 228,235 ****
}
media_type_t give_media_type(major,minor,create)
! const char * major;
! const char * minor;
int create;
{
--- 228,235 ----
}
media_type_t give_media_type(major,minor,create)
! CONST char * major;
! CONST char * minor;
int create;
{
***************
*** 243,249 ****
media_type_t give_media_type2(major_type_code,minor,create)
enum mime_major_type major_type_code;
! const char * minor;
int create;
{
struct media_type * p;
--- 243,249 ----
media_type_t give_media_type2(major_type_code,minor,create)
enum mime_major_type major_type_code;
! CONST char * minor;
int create;
{
struct media_type * p;
Index: elm2.4.ME+.116-cvs/lib/okay_addr.c
*** elm2.4.ME+.115/lib/okay_addr.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/okay_addr.c 2004-05-01 22:08:19.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: okay_addr.c,v 1.17 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Reimplemented by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: okay_addr.c,v 1.19 2004/05/01 19:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Reimplemented by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
free(buffer1); buffer1 = NULL;
!
}
!
! alternatives = alternative_addresses;
! while (alternatives != NULL) {
! if (0 == strcmp(addr,alternatives->address)) {
! DPRINT(Debug,25,(&Debug,
! "addr_is_user(\"%s\")=TRUE: matches alternative address\n",
! addr));
! return(TRUE);
}
- alternatives = alternatives->next;
}
DPRINT(Debug,25,(&Debug,
"addr_is_user(\"%s\")=FALSE\n",addr));
--- 181,243 ----
}
}
! alternatives = give_dt_path_as_elems(&alternative_addresses,
! "alternatives");
! if (alternatives) {
!
! int i;
!
free(buffer1); buffer1 = NULL;
!
}
!
! alternatives = give_dt_path_as_elems(&alternative_addresses,
! "alternatives");
! if (alternatives) {
!
! int i;
!
! for (i = 0; alternatives[i]; i++) {
!
! if (0 == strcmp(addr,alternatives[i])) {
! DPRINT(Debug,25,(&Debug,
! "addr_is_user(\"%s\")=TRUE: matches alternative address\n",
! addr));
! return(TRUE);
! }
}
}
DPRINT(Debug,25,(&Debug,
"addr_is_user(\"%s\")=FALSE\n",addr));
Index: elm2.4.ME+.116-cvs/lib/outheaders.c
*** elm2.4.ME+.115/lib/outheaders.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/outheaders.c 2004-05-19 15:07:01.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.14 2004/03/27 18:31:40 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.18 2004/05/19 12:07:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 38,44 ****
struct mailing_headers *hdrs;
{
/* bzero is defined hdrs/defs.h */
! bzero(hdrs,sizeof (*hdrs));
hdrs->magic = MAIL_HDR_magic;
--- 38,44 ----
struct mailing_headers *hdrs;
{
/* bzero is defined hdrs/defs.h */
! bzero((void *)hdrs,sizeof (*hdrs));
hdrs->magic = MAIL_HDR_magic;
***************
*** 114,120 ****
/* Make sure that dangling pointters are catched */
/* bzero is defined hdrs/defs.h */
! bzero(hdrs,sizeof (*hdrs));
}
--- 114,120 ----
/* Make sure that dangling pointters are catched */
/* bzero is defined hdrs/defs.h */
! bzero((void *)hdrs,sizeof (*hdrs));
}
***************
*** 166,172 ****
struct expanded_address *x;
{
/* bzero is defined hdrs/defs.h */
! bzero(x,sizeof (*x));
x->magic = EXP_ADDR_magic;
x->addrs = NULL;
--- 166,172 ----
struct expanded_address *x;
{
/* bzero is defined hdrs/defs.h */
! bzero((void *)x,sizeof (*x));
x->magic = EXP_ADDR_magic;
x->addrs = NULL;
***************
*** 285,291 ****
add_unicode_to_string(result,1,&code);
}
! add_ascii_to_string(result,s2us(" ("));
}
--- 285,291 ----
add_unicode_to_string(result,1,&code);
}
! add_ascii_to_string(result,s2us(")"));
Index: elm2.4.ME+.116-cvs/lib/rc_handle.c
*** elm2.4.ME+.115/lib/rc_handle.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/rc_handle.c 2004-05-01 22:08:19.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.17 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.24 2004/05/01 19:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
***************
*** 16,22 ****
--- 16,24 ----
#include "headers.h"
#include "rc_imp.h"
#include "save_opts.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
- "!%s is not supported in line %d in \"%s\" file"),
- r->name,lineno,filename);
- return 0;
- }
-
- weedout(value);
- return 1;
- }
-
- #ifdef ANSI_C
- static rc_parse_cline dt_WEE_parse_cline;
- #endif
- static int dt_WEE_parse_cline(r,lcl,value,lineno,filename)
- struct rc_save_info_rec *r;
- int lcl;
- char *value;
- int lineno;
- char *filename;
- {
- weedout(value);
- return 1;
- }
-
- #if ANSI_C
- static rc_print_value dt_WEE_print_value;
- #endif
- static void dt_WEE_print_value(F,r,comment)
- FILE *F;
- struct rc_save_info_rec *r;
- int comment;
- {
- fprintf(F, "\n");
- }
-
- struct rc_type rc_DT_WEE = { dt_WEE_parse_line, dt_WEE_parse_cline,
- dt_WEE_print_value, NO_get_value };
-
- #ifdef ANSI_C
- static rc_parse_line dt_ALT_parse_line;
- #endif
- static int dt_ALT_parse_line(r,lcl,value,lineno,filename, e_val, negate)
- struct rc_save_info_rec *r;
- int lcl;
- char *value;
- int lineno;
- char *filename;
- int e_val;
- int negate;
- {
- if (negate) {
- lib_error(CATGETS(elm_msg_cat, ElmSet, ElmBadNegate,
- "!%s is not supported in line %d in \"%s\" file"),
- r->name,lineno,filename);
- return 0;
- }
-
- alternatives(value);
- return 1;
- }
-
- #ifdef ANSI_C
- static rc_parse_cline dt_ALT_parse_cline;
- #endif
- static int dt_ALT_parse_cline(r,lcl,value,lineno,filename)
- struct rc_save_info_rec *r;
- int lcl;
- char *value;
- int lineno;
- char *filename;
- {
- alternatives(value);
- return 1;
- }
-
- fprintf(F,"\n");
-
-
- }
-
+ int i;
+
+ for (i = 0; i < Len; i++)
+ if ('_' == value[i])
+ value[i] = ' ';
+ }
+
start_val = NULL;
goto expand_value;
}
***************
*** 1263,1269 ****
int Len = p - start_val;
/* Split on quote */
! q = '"';
DPRINT(Debug,11,(&Debug,
"expand_dt_path (clip len=%d)=%.*s\n",
--- 1103,1109 ----
int Len = p - start_val;
/* Split on quote */
! q = '\'';
DPRINT(Debug,11,(&Debug,
"expand_dt_path (clip len=%d)=%.*s\n",
***************
*** 1374,1380 ****
}
! if (is_dir &&
#ifdef S_ISREG
!S_ISREG(S.st_mode)
#else
--- 1214,1220 ----
}
! if (is_file &&
#ifdef S_ISREG
!S_ISREG(S.st_mode)
#else
***************
*** 1452,1457 ****
--- 1292,1298 ----
{
char *res,*p;
int sep;
+ int quote;
int i,L = 1;
if (!ptr->list && ptr->unexpanded)
***************
*** 1466,1483 ****
else if (ptr->flags & PATH_sep_colon) sep = ':';
else sep = ' ';
res = safe_malloc(L);
for (i = 0, p = res; i < ptr->nlen;i++) {
int l = strlen(ptr->list[i]);
! if (p+l+1 >= res+L)
panic("RC PANIC",__FILE__,__LINE__,"give_dt_path_as_str",
"Overflow",0);
if (i > 0)
*p++ = sep;
memcpy(p,ptr->list[i],l);
p += l;
}
*p = '\0';
--- 1307,1339 ----
else if (ptr->flags & PATH_sep_colon) sep = ':';
else sep = ' ';
+ if (ptr->flags & PATH_quote) quote = '"';
+ else if (ptr->flags & PATH_quote_single) quote = '\'';
+ else quote = 0;
+
--- 1442,1452 ----
if (comment)
fprintf(F, "### ");
+
+ fprintf(F, "%s = ",r->name);
for (i = 0; i < r->val.path->nlen; i++) {
! if (i > 0) {
if (len + strlen(r->val.path->list[i]) > 70) {
fprintf(F, "\n");
if (comment)
***************
*** 1603,1609 ****
}
if (r->val.path->flags & PATH_quote)
elm_fprintf(F,FRM("Q"),r->val.path->list[i]);
! else
fputs(r->val.path->list[i],F);
len += strlen(r->val.path->list[i]) + 1;
}
--- 1459,1469 ----
}
if (r->val.path->flags & PATH_quote)
elm_fprintf(F,FRM("Q"),r->val.path->list[i]);
! else if (r->val.path->flags & PATH_quote_single) {
! fputc('\'',F);
! fputs(r->val.path->list[i],F);
! fputc('\'',F);
! } else
fputs(r->val.path->list[i],F);
len += strlen(r->val.path->list[i]) + 1;
}
Index: elm2.4.ME+.116-cvs/lib/read_rc.c
*** elm2.4.ME+.115/lib/read_rc.c 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/read_rc.c 2004-05-01 22:08:19.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.133 2004/04/04 06:17:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.133 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.136 2004/05/01 19:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.136 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 48,55 ****
# endif
#define ASSIGNMENT 0
- #define WEEDOUT 1
- #define ALTERNATIVES 2
#define SYSTEM_RC 0
#define LOCAL_RC 1
--- 48,53 ----
***************
*** 144,150 ****
/* terminal if terminal supports */
int alias_sortby = NAME_SORT; /* how to sort aliases... */
char alternative_editor[SLEN] = "EDITOR"; /* alternative editor... */
! struct addr_rec *alternative_addresses; /* how else do we get mail? */
int always_del = 0; /* flag: always delete marked msgs? */
int always_keep = 1; /* flag: always keep unread msgs? */
int always_store = 0; /* flag: always store read msgs? */
--- 142,152 ----
/* terminal if terminal supports */
int alias_sortby = NAME_SORT; /* how to sort aliases... */
char alternative_editor[SLEN] = "EDITOR"; /* alternative editor... */
! PATH alternative_addresses = { /* how else do we get mail? */
! PATH_sep_comma|PATH_quote|PATH_quote_single,
! NULL, 0,NULL
! };
!
int always_del = 0; /* flag: always delete marked msgs? */
int always_keep = 1; /* flag: always keep unread msgs? */
int always_store = 0; /* flag: always store read msgs? */
***************
*** 367,374 ****
characters to be encoded? */
char v_editor[SLEN] = {0}; /* "~v" editor... */
int elm_filter = 1; /* flag: weed out header lines? */
! char *weedlist[MAX_IN_WEEDLIST] = {0}; /* */
! int weedcount; /* */
#ifdef REMOTE_MBX
char raw_imap_charset[SLEN] = "SYSTEM"; /* IMAP foldername charset */
--- 369,379 ----
characters to be encoded? */
char v_editor[SLEN] = {0}; /* "~v" editor... */
int elm_filter = 1; /* flag: weed out header lines? */
! PATH weedlist = {
! PATH_sep_comma|PATH_quote|PATH_convert_underline,
! NULL, 0,NULL
! };
!
#ifdef REMOTE_MBX
char raw_imap_charset[SLEN] = "SYSTEM"; /* IMAP foldername charset */
***************
*** 692,698 ****
return;
}
! if (0 == strcmp(lc_ctype,"C"))
system_charset = MIME_name_to_charset("US-ASCII",
CHARSET_create);
else if (0 == istrcmp(lc_ctype,"ASCII") ||
--- 697,741 ----
return;
}
! /* 1) ------ guess based on codeset ------------------------ */
!
! if (codeset[0] &&
! 0 == strincmp(codeset,"ISO-8859-",9) &&
! 0 < (val = atoi(codeset+9))) {
! elm_sfprintf(buffer, sizeof buffer,
! FRM("ISO-8859-%d"),
! val);
! system_charset = MIME_name_to_charset(buffer,
! CHARSET_create);
! } else if (codeset[0] &&
! 0 == strincmp(codeset,"ISO_8859-",9) &&
! 0 < (val = atoi(codeset+9))) {
! elm_sfprintf(buffer, sizeof buffer,
! FRM("ISO-8859-%d"),
! val);
! system_charset = MIME_name_to_charset(buffer,
! CHARSET_create);
! } else if (codeset[0] &&
! 0 == strincmp(codeset,"ISO8859-",8) &&
! 0 < (val = atoi(codeset+8))) {
! elm_sfprintf(buffer, sizeof buffer,
! FRM("ISO-8859-%d"),
! val);
! system_charset = MIME_name_to_charset(buffer,
! CHARSET_create);
! } else if (codeset[0] &&
! 0 == strincmp(codeset,"ISO8859",7) &&
! isascii(codeset[7]) && isdigit(codeset[7]) &&
! '\0' == codeset[8]) {
! elm_sfprintf(buffer, sizeof buffer,
! FRM("ISO-8859-%c"),
! codeset[7]);
! system_charset = MIME_name_to_charset(buffer,
! CHARSET_create);
!
! /* 2) ------ guess based on lc_ctype ------------------------ */
!
! } else if (0 == strcmp(lc_ctype,"C"))
system_charset = MIME_name_to_charset("US-ASCII",
CHARSET_create);
else if (0 == istrcmp(lc_ctype,"ASCII") ||
***************
*** 717,722 ****
--- 760,768 ----
FRM("ISO-8859-%d"),
val);
system_charset = MIME_name_to_charset(buffer,CHARSET_create);
+
+ /* 3) ------ guess based on charset part of locale ------------------------ */
+
} else if (charset && (0 == istrcmp(charset,"ASCII") ||
0 == istrcmp(charset,"US-ASCII")))
system_charset = MIME_name_to_charset("US-ASCII",
***************
*** 888,895 ****
#endif
#endif
- static void default_weedlist P_((void));
-
static int figure_domain P_((void));
static int figure_domain()
{
--- 934,939 ----
***************
*** 1013,1019 ****
*/
- default_weedlist();
errors = 0;
/*
--- 1057,1062 ----
***************
*** 1081,1087 ****
strfcpy(raw_defaultfile, "$MAIL", sizeof raw_defaultfile);
strfcpy(defaultfile, cp, sizeof defaultfile);
}
- alternative_addresses = NULL; /* none yet! */
raw_local_signature[0] = raw_remote_signature[0] =
local_signature[0] = remote_signature[0] =
--- 1124,1129 ----
***************
*** 2141,2286 ****
return eval_option(save_info,NUMBER_OF_SAVEABLE_OPTIONS,
lcl,word1,word2,filename);
}
-
- void weedout(string)
- char *string;
- {
- /** This routine is called with a list of headers to weed out. **/
! char *strptr, *header, *p;
! int Len;
! int finished;
!
! finished = FALSE;
! strptr = string;
! while (!finished && (header = strtokq(strptr, "\t ,", TRUE)) != NULL) {
! strptr = NULL;
!
! if (!*header)
! continue;
!
! for (p = header; *p; ++p) {
! if (*p == '_')
! *p = ' ';
! }
! if (! istrcmp(header, "*end-of-user-headers*"))
! break;
! if (! istrcmp(header, "*end-of-defaults*"))
! finished = TRUE;
! if (! istrcmp(header, "*clear-weed-list*")) {
! while (weedcount)
! free(weedlist[--weedcount]);
! header = "*end-of-defaults*";
! }
!
! if (matches_weedlist(header))
! continue;
!
--- 2183,2237 ----
return eval_option(save_info,NUMBER_OF_SAVEABLE_OPTIONS,
lcl,word1,word2,filename);
}
! static CONST char WEED_NO_DEFAULT[] = "*clear-weed-list*";
!
! int matches_weedlist(buffer)
! char *buffer;
! {
! /** returns true iff the first 'n' characters of 'buffer'
! match an entry of the weedlist **/
!
! int i;
! static char *default_list[] =
! { ">From", "In-Reply-To:",
! "References:", "Newsgroups:", "Received:",
! "Apparently-To:", "Message-Id:", "Content-Type:",
! "Content-Length", "MIME-Version",
! "Content-Transfer-Encoding",
! "From", "X-Mailer:", "Status:",
! "X-ELM-",
! "X-UIDL", /* Generated by some POP deamons */
! "Return-Path",
! "*end-of-defaults*", NULL
! };
! char **list = give_dt_path_as_elems(&weedlist,"weedout");
! /* If fist elem is "*clear-weed-list*" then default list is not
! used
! */
! if (!list || !list[0] ||
! 0 != strcmp(list[0],WEED_NO_DEFAULT)) {
!
! for (i = 0; default_list[i]; i++) {
! if (strincmp(buffer, default_list[i], strlen(default_list[i])) == 0)
! return(1);
! }
!
}
! if (list) {
! for (i=0;list[i]; i++) {
! if (strincmp(buffer, list[i], strlen(list[i])) == 0)
! return(1);
! }
}
return(0);
}
Index: elm2.4.ME+.116-cvs/lib/remote_mbx.c
*** elm2.4.ME+.115/lib/remote_mbx.c 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/remote_mbx.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.49 2004/04/04 06:17:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: remote_mbx.c,v 1.50 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.50 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 9,15 ****
--- 9,17 ----
#include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
#include "s_me.h"
#include "s_elm.h"
***************
*** 179,185 ****
struct remote_account *ra;
{
/* bzero is defined hdrs/defs.h */
! bzero (ra, sizeof (struct remote_account));
ra->hostaddr.sa.sa_family = AF_UNSPEC;
ra->service_idx = 0;
--- 181,187 ----
struct remote_account *ra;
{
/* bzero is defined hdrs/defs.h */
! bzero ((void *)ra, sizeof (struct remote_account));
ra->hostaddr.sa.sa_family = AF_UNSPEC;
ra->service_idx = 0;
Index: elm2.4.ME+.116-cvs/lib/savefolder.c
*** elm2.4.ME+.115/lib/savefolder.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/savefolder.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.75 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.75 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.76 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 1357,1363 ****
int real_prepare_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! const char *filename;
{
int ret = 0;
int err = 0;
--- 1357,1363 ----
int real_prepare_write_local(dir,ptr,filename)
struct folder_browser *dir;
WRITE_STATE ptr;
! CONST char *filename;
{
int ret = 0;
/* bzero is defined hdrs/defs.h */
! bzero(dir->selection,sizeof (struct name_vector));
dir->selection->sys_name = sys_name;
dir->selection->disp_name = disp_name;
dir->selection->flags = flags;
--- 2216,2222 ----
dir->selection = safe_malloc(sizeof (struct name_vector));
/* bzero is defined hdrs/defs.h */
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct browser_write_state));
(*ptr)->magic = WS_magic;
}
--- 3756,3762 ----
(*ptr) = safe_malloc(sizeof (struct browser_write_state));
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct browser_write_state));
(*ptr)->magic = WS_magic;
}
***************
*** 3767,3773 ****
{
if (*ptr) {
/* bzero is defined hdrs/defs.h */
! bzero(*ptr,sizeof (struct browser_write_state));
free(*ptr);
*ptr = NULL;
--- 3767,3773 ----
{
if (*ptr) {
/* bzero is defined hdrs/defs.h */
! bzero((void *)*ptr,sizeof (struct browser_write_state));
free(*ptr);
*ptr = NULL;
Index: elm2.4.ME+.116-cvs/lib/service_list.c
*** elm2.4.ME+.115/lib/service_list.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/service_list.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.26 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: service_list.c,v 1.27 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 9,15 ****
--- 9,17 ----
#include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
Index: elm2.4.ME+.116-cvs/lib/shared_all.c
*** elm2.4.ME+.115/lib/shared_all.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/shared_all.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared_all.c,v 1.2 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared_all.c,v 1.3 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
Index: elm2.4.ME+.116-cvs/lib/shared.c
*** elm2.4.ME+.115/lib/shared.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/shared.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared.c,v 1.54 2004/03/28 18:08:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.54 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared.c,v 1.55 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.55 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
Index: elm2.4.ME+.116-cvs/lib/shared_connect.c
*** elm2.4.ME+.115/lib/shared_connect.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/shared_connect.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared_connect.c,v 1.2 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared_connect.c,v 1.3 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 449,456 ****
Index: elm2.4.ME+.116-cvs/lib/streamsched.c
*** elm2.4.ME+.115/lib/streamsched.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/streamsched.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.33 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.33 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: streamsched.c,v 1.34 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.34 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 10,16 ****
--- 10,18 ----
#include "headers.h"
#include "ss_imp.h"
#include "mbx_imp.h"
+ #ifdef USE_DLOPEN
#include "shared_imp.h"
+ #endif
DEBUG_VAR(Debug,__FILE__,"net");
Index: elm2.4.ME+.116-cvs/lib/string.c
*** elm2.4.ME+.115/lib/string.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/lib/string.c 2004-04-24 15:30:02.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: string.c,v 1.38 2004/03/27 18:31:41 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: string.c,v 1.39 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 838,844 ****
/* result is malloced */
void bytestream_from_string(str,res,reslen)
! const struct string *str;
char **res;
int *reslen;
{
--- 838,844 ----
/* result is malloced */
void bytestream_from_string(str,res,reslen)
! CONST struct string *str;
char **res;
int *reslen;
{
Index: elm2.4.ME+.116-cvs/Makefile-1.SH
*** elm2.4.ME+.115/Makefile-1.SH 2004-01-24 13:51:43.000000000 +0200
--- elm2.4.ME+.116-cvs/Makefile-1.SH 2004-05-02 19:58:30.000000000 +0300
***************
*** 27,33 ****
echo "Extracting Makefile-1 (with variable substitutions)"
cat >Makefile-1 <<!GROK!THIS!
#!$make
! # $Id: Makefile-1.SH,v 1.11 2004/01/24 11:05:54 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
--- 27,33 ----
echo "Extracting Makefile-1 (with variable substitutions)"
cat >Makefile-1 <<!GROK!THIS!
#!$make
! # $Id: Makefile-1.SH,v 1.12 2004/05/02 16:58:30 hurtta Exp $
#
#
# Makefile for the ELM (ME+) mail program.
***************
*** 60,90 ****
libreg
$(ETC)/elm.rc: $(LIB)/elmrc-write doc/elmrc-info
! $(REG) {$(LIB)/elmrc-write} -G -I -C {doc/elmrc-info}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(LIB)/elm.map.bin/unidata.bin: $(LIB) $(LIB)/elm.map.bin \
charset/UNIDATA/UNIDATA2.TXT $(LIB)/elmunidata
! $(REG) {$(LIB)/elmunidata} -I -s {charset/UNIDATA/UNIDATA2.TXT}
$(REG) $(CHMOD) u=rw,go=r {$@}
! $(REG) true {charset/UNIDATA/README.TXT}
$(LIB)/elm.map.bin/bindata.bin: $(LIB) $(LIB)/elm.map.bin $(LIB)/elmbindata \
$(ETC)/elm.mimecharsets
! $(REG) {$(LIB)/elmbindata} -G -I \
-S {charset/MAPPINGS/ISO8859} -S {charset/MAPPINGS} \
-S {charset/MAPPINGS/MICSFT}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(ETC)/elm.mimecharsets: $(BIN)/elm.mimecharsets $(LIB)/elmcharset ConfTool/killsets $(LIB)/elm.map.txt
! $(REG) {$(LIB)/elmcharset} -G -I {ConfTool/killsets} -w {$@} \
-S {charset/MAPPINGS/ISO8859} -S {charset/MAPPINGS} \
-S {charset/MAPPINGS/MICSFT} {$(BIN)/elm.mimecharsets}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(ETC)/elm.terminalinfo: $(BIN)/elm.terminalinfo $(LIB)/elmterminal $(ETC)/elm.mimecharsets
! $(REG) {$(LIB)/elmterminal} -G -w {$@} {$(BIN)/elm.terminalinfo}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(LIB):
--- 60,90 ----
libreg
$(ETC)/elm.rc: $(LIB)/elmrc-write doc/elmrc-info
! $(REG) -s doc {$(LIB)/elmrc-write} -G -I -C {doc/elmrc-info}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(LIB)/elm.map.bin/unidata.bin: $(LIB) $(LIB)/elm.map.bin \
charset/UNIDATA/UNIDATA2.TXT $(LIB)/elmunidata
! $(REG) -s unidata {$(LIB)/elmunidata} -I -s {charset/UNIDATA/UNIDATA2.TXT}
$(REG) $(CHMOD) u=rw,go=r {$@}
! $(REG) -s unidata true {charset/UNIDATA/README.TXT}
$(LIB)/elm.map.bin/bindata.bin: $(LIB) $(LIB)/elm.map.bin $(LIB)/elmbindata \
$(ETC)/elm.mimecharsets
! $(REG) -s mappings {$(LIB)/elmbindata} -G -I \
-S {charset/MAPPINGS/ISO8859} -S {charset/MAPPINGS} \
-S {charset/MAPPINGS/MICSFT}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(ETC)/elm.mimecharsets: $(BIN)/elm.mimecharsets $(LIB)/elmcharset ConfTool/killsets $(LIB)/elm.map.txt
! $(REG) -s mappings {$(LIB)/elmcharset} -G -I {ConfTool/killsets} -w {$@} \
-S {charset/MAPPINGS/ISO8859} -S {charset/MAPPINGS} \
-S {charset/MAPPINGS/MICSFT} {$(BIN)/elm.mimecharsets}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(ETC)/elm.terminalinfo: $(BIN)/elm.terminalinfo $(LIB)/elmterminal $(ETC)/elm.mimecharsets
! $(REG) -s terminal {$(LIB)/elmterminal} -G -w {$@} {$(BIN)/elm.terminalinfo}
$(REG) $(CHMOD) u=rw,go=r {$@}
$(LIB):
Index: elm2.4.ME+.116-cvs/melib/mimewalk.c
*** elm2.4.ME+.115/melib/mimewalk.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/melib/mimewalk.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mimewalk.c,v 1.5 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mimewalk.c,v 1.6 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 24,30 ****
ret = safe_malloc(sizeof(*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = WALKHANDLER_magic;
ret->handler_type = t;
--- 24,30 ----
ret = safe_malloc(sizeof(*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = WALKHANDLER_magic;
ret->handler_type = t;
Index: elm2.4.ME+.116-cvs/melib/pgp_decode.c
*** elm2.4.ME+.115/melib/pgp_decode.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/melib/pgp_decode.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.38 2004/03/27 18:31:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pgp_decode.c,v 1.39 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 290,296 ****
array[1] = pgp_child_out[0];
array[2] = -1;
! rs->ext_init_data = &array;
rs->ext_init = close_them;
env[0] = NULL;
--- 290,296 ----
array[1] = pgp_child_out[0];
array[2] = -1;
! rs->ext_init_data = array;
rs->ext_init = close_them;
env[0] = NULL;
Index: elm2.4.ME+.116-cvs/nls/C/C/C/s_elm.m
*** elm2.4.ME+.115/nls/C/C/C/s_elm.m 2004-03-16 21:17:43.000000000 +0200
--- elm2.4.ME+.116-cvs/nls/C/C/C/s_elm.m 2004-05-01 22:08:19.000000000 +0300
***************
*** 2055,2061 ****
2031 save copy
$quote '
$ #NoReceived
! 2032 '"received" folder not available, continue? (%c/%c) '
$quote "
$ #FileSpecify1
2033 "\n\r\n\rYou must specify a file to "
--- 2051,2057 ----
2031 save copy
$quote '
$ #NoReceived
! 2032 '"received" folder not available, continue leaving folder? ([P]anic/%c/%c) '
$quote "
$ #FileSpecify1
2033 "\n\r\n\rYou must specify a file to "
***************
*** 2301,2303 ****
--- 2297,2301 ----
$quote "
$ #PgpRcvSure
2151 "The recv'd message was PGP encoded, are you sure? "
+ $ #FailedLeaveChange
+ 2152 "Failed to leave folder: Try to change again ? ([P]anic/%c/%c) "
Index: elm2.4.ME+.116-cvs/src/browser.c
*** elm2.4.ME+.115/src/browser.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/browser.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: browser.c,v 1.29 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.29 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: browser.c,v 1.30 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.30 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 1281,1287 ****
struct string **buffer;
int * redraw;
enum word_sel w;
! string * prev_fold;
struct AliasView *aview;
CONST char *format;
CONST char *msg;
--- 1281,1287 ----
struct string **buffer;
int * redraw;
enum word_sel w;
! struct string * prev_fold;
struct AliasView *aview;
CONST char *format;
CONST char *msg;
Index: elm2.4.ME+.116-cvs/src/in_utils.c
*** elm2.4.ME+.115/src/in_utils.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/in_utils.c 2004-05-02 14:15:26.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.35 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: in_utils.c,v 1.37 2004/05/02 11:15:26 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 46,51 ****
--- 46,187 ----
#define erase_a_char() { Writechar(BACKSPACE); Writechar(' '); \
Writechar(BACKSPACE); FlushBuffer(); }
+ int prompt_letter(
+ #if ANSI_C
+ int line, char *letters, int def,
+ int flags,
+ struct menu_context *page,
+ const char * format, const char *msg, ...
+ #else
+ line, letters, def, flags, page, format, msg, va_alist
+ #endif
+ )
+ #if !ANSI_C
+ int line;
+ char *letters;
+ int def;
+ int flags;
+ struct menu_context *page;
+ CONST char * format;
+ CONST char *msg;
+ va_dcl
+ #endif
+ {
+ struct string *question = NULL;
+
+ int ch;
+ int center = flags & PROMPT_center;
+ int yesno = flags & PROMPT_yesno;
+ int mark = flags & PROMPT_redraw_mark;
+ int ctrlL = flags & PROMTP_ctrlL;
+ int cols = 0;
+
+
+ va_list vl;
+
+ Va_start(vl, msg); /* defined in defs.h */
+ question = elm_smessage(0,format,msg,vl);
+ va_end(vl);
+
+ do {
+ int LINES, COLUMNS;
+ int l;
+ char *x;
+
+ menu_get_sizes(page,&LINES, &COLUMNS);
+
+ /* FIXME: Not correct */
+ l = string_len(question);
+ cols = COLUMNS - ( l + 5 ); /* 5 for "Yes." + 1 */
+ if (cols < 0) {
+ cols = 0;
+ }
+
+
+ MoveCursor(line, (center || (cols < 2)) ? 0 : cols-2);
+ CleartoEOLN();
+
+ PutLineX(line, center ? cols/2 : cols,
+ FRM("%S%c%c"), question, def, BACKSPACE);
+ FlushBuffer();
+
+ ch = menu_ReadCh(page, REDRAW_MARK);
+ if (ch == REDRAW_MARK) {
+ if (mark)
+ break;
+ continue;
+ }
+
+ if (PROMTP_ctrlL && ch == ('L'&31)) {
+ break;
+ }
+
+ if (ch == EOF)
+ break;
+
+ /* Look first letters without lowercasing */
+ for (x = letters; *x; x++) {
+
+ if (ch == *x) {
+ Writechar(ch);
+ goto out;
+ }
+ }
+
+ if(ch == '\n' || ch == '\r')
+ ch = def;
+ else {
+ #ifdef ASCII_CTYPE
+ if (isascii(ch))
+ #endif
+ ch = tolower(ch);
+ }
+
+ for (x = letters; *x; x++) {
+
+ if (ch == *x) {
+ Writechar(ch);
+ goto out;
+ }
+ }
+
+ if(ch == *def_ans_yes && yesno) {
+ Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmYesWord, "Yes."));
+ break;
+ } else if (ch == *def_ans_no && yesno) {
+ Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmNoWord, "No."));
+ break;
+ }
+
+ Writechar('?');
+ FlushBuffer();
+ #if POLL_METHOD
+ wait_for_timeout(1);
+ #else
+ sleep(1);
+ #endif
+
+ } while (EOF != ch);
+
+
+ out:
+ FlushBuffer();
+
+ if (EOF != ch && REDRAW_MARK != ch && ('L'&31) != ch) {
+ if (sleepmsg > 0) {
+ #if POLL_METHOD
+ wait_for_timeout((sleepmsg + 1) / 2);
+ #else
+ sleep((sleepmsg + 1) / 2);
+ #endif
+ }
+ MoveCursor(line, (center || (cols < 2)) ? 0 : cols-2);
+ CleartoEOLN();
+ }
+
+ return ch;
+ }
+
int want_to(question, dflt, where, clear_and_center, page)
char *question;
int dflt;
***************
*** 60,66 ****
**/
int ch, cols;
int LINES, COLUMNS;
!
redraw:
menu_get_sizes(page,&LINES, &COLUMNS);
--- 196,202 ----
**/
int ch, cols;
int LINES, COLUMNS;
!
redraw:
menu_get_sizes(page,&LINES, &COLUMNS);
***************
*** 88,114 ****
ch = tolower(ch);
while (!( ch == *def_ans_yes || ch == *def_ans_no || ch == '\n' || ch == '\r')) {
! ch = menu_ReadCh(page,REDRAW_MARK);
! if (ch == REDRAW_MARK)
! goto redraw;
! if (ch == EOF) {
! leave(0, ¤t_mailbox,¤t_aliaslist); /* ???? global reference */
! }
#ifdef ASCII_CTYPE
! if (isascii(ch))
#endif
! ch = tolower(ch);
}
if(ch == '\n' || ch == '\r')
ch = dflt;
if(ch == *def_ans_yes)
! Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmYesWord, "Yes."));
else if (ch == *def_ans_no)
! Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmNoWord, "No."));
else {
DPRINT(Debug,3,(&Debug,"want_to [%s]=%c\n",question,ch));
! return(ch); /* Don't write anything, just return */
}
FlushBuffer();
if (sleepmsg > 0) {
--- 224,250 ----
--- 994,1004 ----
int optionally_enter2 (
#if ANSI_C
struct menu_context *page,
! struct string **buffer,
! int x, int y, int flags,
! const char * format, const char *msg, ...
#else
! page, buffer, x, y, flags, format, msg, va_alist
#endif
)
#if !ANSI_C
Index: elm2.4.ME+.116-cvs/src/leavembox.c
*** elm2.4.ME+.115/src/leavembox.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/leavembox.c 2004-05-02 14:15:26.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.44 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.46 2004/05/02 11:15:26 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 734,748 ****
if (need_handle) {
if (!can_store) {
! char answer = '\0';
! char * buffer = elm_message(CATGETS(elm_msg_cat, ElmSet,
! ElmNoReceived,
! "\"received\" folder not available, continue? (%c/%c) "),
*def_ans_yes, *def_ans_no);
! answer = want_to(buffer, *def_ans_no, LINES-4, 0,
! page);
if (answer != *def_ans_yes) {
return_value = -2; /* failure */
--- 734,762 ----
Index: elm2.4.ME+.116-cvs/src/messages/digest.c
*** elm2.4.ME+.115/src/messages/digest.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/messages/digest.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: digest.c,v 1.9 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: digest.c,v 1.10 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 39,45 ****
mbx->u.digest = safe_malloc(sizeof (* (mbx->u.digest)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.digest, sizeof (* (mbx->u.digest)));
mbx->u.digest->the_digest = NULL;
mbx->u.digest->digest_count = 0;
--- 39,45 ----
mbx->u.digest = safe_malloc(sizeof (* (mbx->u.digest)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.digest, sizeof (* (mbx->u.digest)));
mbx->u.digest->the_digest = NULL;
mbx->u.digest->digest_count = 0;
Index: elm2.4.ME+.116-cvs/src/messages/messages.c
*** elm2.4.ME+.115/src/messages/messages.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/messages/messages.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: messages.c,v 1.12 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: messages.c,v 1.13 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 23,29 ****
ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = MAILBOXVIEW_magic;
ret->mailbox_type = t;
--- 23,29 ----
ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = MAILBOXVIEW_magic;
ret->mailbox_type = t;
Index: elm2.4.ME+.116-cvs/src/messages/partial.c
*** elm2.4.ME+.115/src/messages/partial.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/messages/partial.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: partial.c,v 1.14 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: partial.c,v 1.15 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 27,33 ****
mbx->u.partial = safe_malloc(sizeof (* (mbx->u.partial)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.partial, sizeof (* (mbx->u.partial)));
mbx->u.partial->parent_mailbox = NULL;
--- 27,33 ----
mbx->u.partial = safe_malloc(sizeof (* (mbx->u.partial)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.partial, sizeof (* (mbx->u.partial)));
mbx->u.partial->parent_mailbox = NULL;
Index: elm2.4.ME+.116-cvs/src/messages/storage.c
*** elm2.4.ME+.115/src/messages/storage.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/messages/storage.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: storage.c,v 1.6 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: storage.c,v 1.7 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 30,36 ****
mbx->u.storage = safe_malloc(sizeof (* (mbx->u.storage)));
/* bzero is defined hdrs/defs.h */
! bzero(mbx->u.storage, sizeof (* (mbx->u.storage)));
mbx->u.storage->the_mailbox = NULL;
mbx->u.storage->mailbox_count = 0;
--- 30,36 ----
mbx->u.storage = safe_malloc(sizeof (* (mbx->u.storage)));
/* bzero is defined hdrs/defs.h */
! bzero((void *)mbx->u.storage, sizeof (* (mbx->u.storage)));
mbx->u.storage->the_mailbox = NULL;
mbx->u.storage->mailbox_count = 0;
Index: elm2.4.ME+.116-cvs/src/out_utils.c
*** elm2.4.ME+.115/src/out_utils.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/out_utils.c 2004-04-24 19:33:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: out_utils.c,v 1.23 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: out_utils.c,v 1.25 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
Index: elm2.4.ME+.116-cvs/src/quit.c
*** elm2.4.ME+.115/src/quit.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/quit.c 2004-05-02 14:15:26.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: quit.c,v 1.36 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: quit.c,v 1.40 2004/05/02 11:15:26 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
! "No."));
! return;
! }
! return;
!
Index: elm2.4.ME+.116-cvs/src/read_rc.c
*** elm2.4.ME+.115/src/read_rc.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/read_rc.c 2004-05-01 22:08:19.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.24 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.26 2004/05/01 19:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
Index: elm2.4.ME+.116-cvs/src/screen/context.c
*** elm2.4.ME+.115/src/screen/context.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/src/screen/context.c 2004-04-24 15:30:03.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: context.c,v 1.3 2004/03/27 18:31:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: context.c,v 1.4 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.4 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
*****************************************************************************/
***************
*** 41,47 ****
struct menu_context *ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero(ret,sizeof (*ret));
ret->magic = MENU_CONTEXT_magic;
--- 41,47 ----
struct menu_context *ret = safe_malloc(sizeof (*ret));
/* bzero is defined hdrs/defs.h */
! bzero((void *)ret,sizeof (*ret));
ret->magic = MENU_CONTEXT_magic;
Index: elm2.4.ME+.116-cvs/utils/elmregister.c
*** elm2.4.ME+.115/utils/elmregister.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116-cvs/utils/elmregister.c 2004-05-02 20:16:48.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmregister.c,v 1.15 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.15 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmregister.c,v 1.18 2004/05/02 17:16:48 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 22,27 ****
--- 22,29 ----
* -- copy file
*
* 'F' user group mode filename '\n'
+ * 'd' user group mode filename '\n' (document)
+ * 's' user group mode filename '\n' (stage file)
*
* -- create directory
*
***************
*** 322,327 ****
--- 324,330 ----
switch (c) {
case 'F':
+ case 'd':
user_ptr = ptr; add_bytes(F,buffer1,&ptr); /* user */
group_ptr = ptr; add_bytes(F,buffer1,&ptr); /* group */
mode_ptr = ptr; add_bytes(F,buffer1,&ptr); /* mode */
***************
*** 700,705 ****
--- 703,709 ----
case '{':
case 's':
case 'F':
+ case 'd':
case 'C':
if (ptr2->arg_ptrs && ptr2->arg_ptrs[0] &&
***************
*** 1021,1026 ****
--- 1025,1032 ----
}
+
+
read_pipe = create_pipe(argc,argv,x,&PID,installer_root);
fd = fdopen(read_pipe,"r");
***************
*** 1146,1153 ****
/* NOTE: LI leaked ... */
-
-
return 0;
}
--- 1152,1157 ----
***************
*** 1697,1706 ****
#endif /* DIROPS */
! static void make_argcopy P_((char *arg, int arg_len));
! static void make_argcopy(arg,arg_len)
char *arg;
int arg_len;
{
struct stat X;
--- 1701,1711 ----
#endif /* DIROPS */
! static void make_argcopy P_((char *arg, int arg_len, char * stage_subdir ));
! static void make_argcopy(arg,arg_len, stage_subdir)
char *arg;
int arg_len;
+ char * stage_subdir;
{
struct stat X;
***************
*** 1773,1778 ****
--- 1778,1786 ----
}
n = strlen(stage_dir) + arg_len;
+ if (stage_subdir) {
+ n += strlen(stage_subdir) + 1;
+ }
target_r = malloc(n);
if (!target_r) {
fprintf(stderr,"%s: malloc %d bytes failed\n",
***************
*** 1782,1787 ****
--- 1790,1833 ----
strcpy(target_r,stage_dir+1);
strcat(target_r,"/");
+ if (stage_subdir) {
+ char * Y;
+ int n1;
+
+ strcat(target_r,stage_subdir);
+
+ n1 = strlen(installer_root) + strlen(target_r) + 3;
+
+ Y = malloc(n1);
+ if (!Y) {
+ fprintf(stderr,"%s: malloc %d bytes failed\n",
+ program_name,n1);
+ exit(1); /* FAILURE */
+ }
+
+ strcpy(Y,installer_root);
+ strcat(Y,"/");
+ strcat(Y,target_r);
+
+
+
+ if (0 == mkdir(Y,0755)) {
+ fprintf(stdout,
+ "%s: Directory %s created\n",
+ program_name,Y);
+ } else if (errno != EEXIST) {
+ fprintf(stderr,
+ "%s: Failed to create %s directory\n",
+ program_name,Y);
+ exit(1);
+ }
+
+
+ free(Y);
+
+ strcat(target_r,"/");
+ }
+
y = strrchr(bufferz,'/');
if (y)
strcat(target_r,y+1);
***************
*** 2108,2113 ****
--- 2154,2160 ----
(cmd = argv[x]) &&
(
0 == strcmp("copy", argv[x]) ||
+ 0 == strcmp("copydoc", argv[x]) ||
0 == strcmp("mkdir", argv[x])
)) {
uid_t id_user = (uid_t)-1;
***************
*** 2340,2346 ****
return 1; /* FAILURE */
}
! log_it("F",target_r,s_user, s_group, f_mode);
free(source_r); free(source_f);
free(target_r); free(target_f);
--- 2387,2396 ----
return 1; /* FAILURE */
}
! if (0 == strcmp("copydoc",cmd))
! log_it("d",target_r,s_user, s_group, f_mode);
! else
! log_it("F",target_r,s_user, s_group, f_mode);
free(source_r); free(source_f);
free(target_r); free(target_f);
***************
*** 2353,2361 ****
--- 2403,2420 ----
char buffer[ MAX_PIPE_LOG];
char *ptr;
+ char * stage_subdir = NULL;
int L = 4;
+ if (x < argc -1 && 0 == strcmp("-s", argv[x])) {
+ int l;
+
+ stage_subdir = argv[x+1];
+ x += 2;
+ }
+
+
if (argc - x >= MAX_ARGS) {
fprintf(stderr,
"%s: %s too many arguments\n",
***************
*** 2367,2374 ****
int z;
if ('{' == argv[j][0] && (z = strlen(argv[j])) && '}' == argv[j][z-1]) {
!
! make_argcopy(argv[j],z);
}
L += strlen(argv[j]) +1;
--- 2426,2432 ----
int z;
if ('{' == argv[j][0] && (z = strlen(argv[j])) && '}' == argv[j][z-1]) {
! make_argcopy(argv[j],z, stage_subdir);
}
L += strlen(argv[j]) +1;
***************
*** 2705,2711 ****
break;
case 'F':
!
pick_one(ptr,&src,L,&id_user,&id_group,&mode,&is_dir);
--- 2763,2769 ----
break;
case 'F':
! case 'd':
pick_one(ptr,&src,L,&id_user,&id_group,&mode,&is_dir);
***************
*** 2792,2797 ****
--- 2850,2856 ----
case '{':
case 's':
case 'F':
+ case 'd':
case 'C':
case 'M':
***************
*** 2870,2875 ****
--- 2929,2935 ----
case 'M':
case '{':
case 'F':
+ case 'd':
case 'C':
if (ptr->arg_ptrs && ptr->arg_ptrs[0]) {
***************
*** 3077,3082 ****
--- 3137,3143 ----
break;
case 'F':
+ case 'd':
case 's': /* also handled by unstage_list() */
if (ptr->arg_ptrs && ptr->arg_ptrs[0]) {
***************
*** 3188,3193 ****
--- 3249,3255 ----
break;
case 'F':
+ case 'd':
case 'C':
case 'L': /* link */
case 'M':
***************
*** 3407,3412 ****
--- 3469,3475 ----
case 'M':
case 'F':
+ case 'd':
case 'C':
p = NULL;
Is available on ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL116a.patch.gz
for a moment (1).
Is available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
files elm-2.4ME+PL116a.patch.gz
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL116a.patch.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL116a.patch.gz >
via WWW.
(1) NOTE:
It is currently unknown what will be done for ftp.ozone.fmi.fi
www.ozone.fmi.fi. Also ozone.fmi.fi will retire.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL116a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
SUMMARY: This patch fixes bug where alternatives and weedout list
are replaced with Q letters on elmrc and fixes bug where
gpg key of recipient is not found when sending mail.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL116 (25) --------------------------------
Index: elm2.4.ME+.116a-cvs/hdrs/patchlevel.h
Prereq: 1116400000
*** elm2.4.ME+.116/hdrs/patchlevel.h 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.116a-cvs/hdrs/patchlevel.h 2004-06-09 20:15:23.000000000 +0300
***************
*** 1,12 ****
! #define PATCHLEVEL "116 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.116
*/
! #define LAST_REPORT_TIME 1116400000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "May, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released May, 2004"
/*
* Local Variables:
--- 1,12 ----
! #define PATCHLEVEL "116a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.116
*/
! #define LAST_REPORT_TIME 1118000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "Jun, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Jun, 2004"
/*
* Local Variables:
Index: elm2.4.ME+.116a-cvs/README.ME+
*** elm2.4.ME+.116/README.ME+ 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.116a-cvs/README.ME+ 2004-06-09 22:56:19.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.760 2004/05/19 12:02:16 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.760.2.4 2004/06/09 19:56:19 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,41 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL116a (25) compared with Elm2.4ME+ PL116 (25)
+ -------------------------------------------------------------------
+
+ - Alternatives and weedout and list was replaced with Q letters
+ Problem noted by: Cyrille Lefevre <cyrille...@laposte.net>
+
+ - Reprint last error on "Mail Pre-Send Screen" after
+ clearing screen.
+
+ - Trying send encrypted messages with gpg was giving
+ error message
+ Couldn't find key matching 'xxx@yyy'
+ Problem noted by: Olivier COLIN <dodo.o...@wanadoo.fr>
+ (and probably others)
+ > Make GetPGPKey() retry reading of result on case of
+ interrupt.
+
+ - GetPGPKey() was not collect status of exted gpg and
+ was left lot of defunct processes. Converted code to
+ use start_run().
+
+ - Do not quote addresses on alternatives.
+
Changes of Elm2.4ME+ PL116 (25) compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------------
***************
*** 98,104 ****
on '(' to ')' on make_surface_addr() on
lib/outheaders.c
-
Changes of Elm2.4ME+ PL115a (25) compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------------
--- 121,126 ----
Index: elm2.4.ME+.116a-cvs/lib/rc_handle.c
*** elm2.4.ME+.116/lib/rc_handle.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.116a-cvs/lib/rc_handle.c 2004-06-09 23:08:54.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.24 2004/05/01 19:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.24.4.3 2004/06/09 20:08:54 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24.4.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
***************
*** 1446,1451 ****
--- 1446,1454 ----
fprintf(F, "%s = ",r->name);
for (i = 0; i < r->val.path->nlen; i++) {
+ /* NOTE: space is always valid separator even when
+ PATH_sep_comma or PATH_sep_colon is set */
+
if (i > 0) {
if (len + strlen(r->val.path->list[i]) > 70) {
fprintf(F, "\n");
***************
*** 1458,1464 ****
}
if (r->val.path->flags & PATH_quote)
! elm_fprintf(F,FRM("Q"),r->val.path->list[i]);
else if (r->val.path->flags & PATH_quote_single) {
fputc('\'',F);
fputs(r->val.path->list[i],F);
--- 1461,1467 ----
}
if (r->val.path->flags & PATH_quote)
! elm_fprintf(F,FRM("%Q"),r->val.path->list[i]);
else if (r->val.path->flags & PATH_quote_single) {
fputc('\'',F);
fputs(r->val.path->list[i],F);
Index: elm2.4.ME+.116a-cvs/lib/read_rc.c
*** elm2.4.ME+.116/lib/read_rc.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.116a-cvs/lib/read_rc.c 2004-06-09 22:56:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.136 2004/05/01 19:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.136 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.136.4.1 2004/06/09 19:56:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.136.4.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 143,149 ****
int alias_sortby = NAME_SORT; /* how to sort aliases... */
char alternative_editor[SLEN] = "EDITOR"; /* alternative editor... */
PATH alternative_addresses = { /* how else do we get mail? */
! PATH_sep_comma|PATH_quote|PATH_quote_single,
NULL, 0,NULL
};
--- 143,149 ----
int alias_sortby = NAME_SORT; /* how to sort aliases... */
char alternative_editor[SLEN] = "EDITOR"; /* alternative editor... */
PATH alternative_addresses = { /* how else do we get mail? */
! PATH_sep_comma,
NULL, 0,NULL
};
Index: elm2.4.ME+.116a-cvs/src/mailmsg2.c
*** elm2.4.ME+.116/src/mailmsg2.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116a-cvs/src/mailmsg2.c 2004-06-09 20:10:20.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.76 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.76.12.1 2004/06/09 17:10:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76.12.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 1182,1194 ****
if (do_redraw) {
do_redraw = 0;
*need_redraw_p = TRUE;
!
menu_ClearScreen(page);
print_format_center(0,
CATGETS(elm_msg_cat, ElmSet,
ElmMailScreenTitle,
"Mail Pre-Send Screen"));
show_presend_headers(headers,hdr_charset, page);
if (headers->env_from && user_level > 0) {
--- 1182,1196 ----
if (do_redraw) {
do_redraw = 0;
*need_redraw_p = TRUE;
!
menu_ClearScreen(page);
print_format_center(0,
CATGETS(elm_msg_cat, ElmSet,
ElmMailScreenTitle,
"Mail Pre-Send Screen"));
+ show_last_error();
+
show_presend_headers(headers,hdr_charset, page);
if (headers->env_from && user_level > 0) {
Index: elm2.4.ME+.116a-cvs/src/pgp.c
*** elm2.4.ME+.116/src/pgp.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.116a-cvs/src/pgp.c 2004-06-09 20:14:18.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pgp.c,v 1.38 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pgp.c,v 1.38.14.1 2004/06/09 17:14:18 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38.14.1 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 75,80 ****
--- 75,91 ----
/* not reached */
}
+
+
+ static void close_pipe P_((struct run_state *rs));
+ static void close_pipe(rs)
+ struct run_state *rs;
+ {
+ int *array = rs->ext_init_data;
+
+ close(array[0]);
+ }
+
static int GetPGPKey P_((char *name, char *target,
int targetsize, enum pgp_version v));
***************
*** 125,131 ****
for (;;) {
int fd[2];
!
if (pipe (fd) == -1) {
DPRINT(Debug,1,(&Debug,
"GetPGPKey()=-1: ERROR: pipe (errno %d)\n",
--- 136,151 ----
for (;;) {
int fd[2];
! int array[1];
! CONST char * argv[10];
! int code;
! int stat = -1;
!
! struct run_state RS;
!
! while (*c && isspace (*c)) c++; /* move past any leading space! */
! DPRINT(Debug,10,(&Debug, "GetPGPKey: c=%s\n",c));
!
if (pipe (fd) == -1) {
DPRINT(Debug,1,(&Debug,
"GetPGPKey()=-1: ERROR: pipe (errno %d)\n",
***************
*** 134,207 ****
return -1;
}
! while (*c && isspace (*c)) c++; /* move past any leading space! */
! DPRINT(Debug,10,(&Debug, "GetPGPKey: c=%s\n",c));
! if ((pid = fork()) == -1) {
! perror("fork");
! close(fd[0]);
! close(fd[1]);
! return -1;
! } else if (pid == 0) {
! int tmp = 0;
! if (-1 == setgid(groupid)) {
! int err = errno;
! fprintf(stderr,"GetPGPKey: setgid(%d) FAILED: %s\n",
! groupid,error_description(err));
! fflush(stderr);
! _exit(err);
! }
! if (-1 == setuid(userid)) {
! int err = errno;
! fprintf(stderr,"GetPGPKey: setuid(%d) FAILED: %s\n",
! userid,error_description(err));
! fflush(stderr);
! _exit(err);
! }
! close (fd[0]);
! close (1);
! dup (fd[1]);
! close (fd[1]);
!
! switch(v) {
! char *path;
! case pgp2:
!
! execl(pgp2_path,
! pgp2_path,"+verbose=0", "+language=en", "-kv", c,
! (char *)0);
! tmp = errno;
! perror(pgp2_path);
! break;
! case pgp5:
! path = elm_message(FRM("%s/pgpk"),pgp5_dir);
! execl(path,
! path, "+verbose=0","+language=en",
! "-l", c, (char *)0);
! tmp = errno;
! perror(path);
! break;
! case gpg:
! execl(gpg_path,
! gpg_path,"--list-public-keys",c,(char *)0);
! tmp = errno;
! perror(gpg_path);
! break;
! }
! _exit(tmp);
}
close (fd[1]);
p = fdopen (fd[0], "r");
if (p == NULL) {
DPRINT(Debug,1,(&Debug,
! "GetPGPKey()=-1: ERROR: fdopen (errno %d)\n", errno));
return -1;
}
while (fgets(buf, STRING, p) != NULL) {
DPRINT(Debug,10,(&Debug,
"GetPGPKey: %s\n",buf));
--- 154,228 ----
return -1;
}
! array[0] = fd[0];
! RS.save_errno = 0;
! RS.ext_init_data = array;
! RS.ext_init = close_pipe;
! RS.ext_env = NULL;
!
! switch(v) {
! static char path[1000];
! int n;
! case pgp2:
! n = 0;
!
! argv[n++] = pgp2_path;
! argv[n++] = "+verbose=0";
! argv[n++] = "+language=en";
! argv[n++] = "-kv";
! argv[n++] = c;
! argv[n] = NULL;
! break;
! case pgp5:
! n = 0;
! elm_sfprintf(path, sizeof path,FRM("%s/pgpk"),pgp5_dir);
! argv[n++] = path;
! argv[n++] = "+verbose=0";
! argv[n++] = "+language=en";
! argv[n++] = "-l";
! argv[n++] = c;
! argv[n] = NULL;
! break;
! case gpg:
! n = 0;
! argv[n++] = gpg_path;
! argv[n++] = "--list-public-keys";
! argv[n++] = c;
! argv[n++] = NULL;
! break;
}
+ code = start_run(&RS, SY_RUN_STATE_INIT, argv ,
+ -1,fd[1]);
+
close (fd[1]);
+
+ if (!code) {
+ DPRINT(Debug,1,(&Debug,
+ "GetPGPKey()=-1: running pgp/gpg failed\n"));
+ return -1;
+ }
+
+
p = fdopen (fd[0], "r");
if (p == NULL) {
+ int tmp;
+ int err = errno;
+
DPRINT(Debug,1,(&Debug,
! "GetPGPKey()=-1: ERROR: fdopen (errno %d)\n",
! err));
! kill(RS.pid,SIGTERM);
! wait_end(&RS,&tmp);
!
return -1;
}
+ retry:
while (fgets(buf, STRING, p) != NULL) {
DPRINT(Debug,10,(&Debug,
"GetPGPKey: %s\n",buf));
***************
*** 262,268 ****
--- 283,318 ----
}
}
}
+
+ if (ferror(p) && EINTR == errno) {
+ clearerr(p);
+ DPRINT(Debug,5,(&Debug,
+ "Reading of result interrupted (EINTR) -- retrying\n"));
+
+ if (0 == code) {
+ code = run_already_done(&RS,&stat);
+ if (0 != code) {
+ DPRINT(Debug,5,(&Debug,
+ "now pgp/gpg is completing\n"));
+ }
+ }
+
+ goto retry;
+ }
+
fclose(p);
+
+ if (0 == code)
+ code = wait_end(&RS,&stat);
+
+ if (code < 0) {
+ DPRINT(Debug,5,(&Debug,
+ "pgp/gpg dies on signal %d\n",
+ -code));
+ } else {
+ DPRINT(Debug,5,(&Debug,"pgp/gpgp exited with status %d\n",stat));
+ }
+
if (keys_len > 0 || i > 1)
break;
else {
Is available on ozone.FMI.FI (1)
via anonymous ftp
directory KEH/
files elm-2.4ME+PL117.patch.gz
and elm-2.4ME+117.tar.gz
for a moment (2).
Is available on ftp.funet.fi (or ftp.ipv6.funet.fi with IPv6)
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
files elm-2.4ME+PL117.patch.gz
and elm-2.4ME+117.tar.gz
or
<URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-2.4ME+/elm-2.4ME+PL117.patch.gz >
and <URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-2.4ME+/elm-2.4ME+117.tar.gz >
via WWW.
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL117.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+117.tar.gz >
via WWW.
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL117.patch.gz >
and <URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+117.tar.gz >
via WWW.
(1) Was ftp.ozone.fmi.fi but name ftp.ozone.fmi.fi
will probably point to service which no have anonymous ftp
before ozone.fmi.fi retires. So use ozone.fmi.fi
for a moment instead of ftp.ozone.fmi.fi.
(2) NOTE:
It is currently unknown what will be done for ftp.ozone.fmi.fi
and www.ozone.fmi.fi.
Also ozone.fmi.fi will retire.
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL117.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
Undo Elm2.4ME+ PL116a (25) patch before applying this patch.
SUMMARY: This release collects patch Elm2.4ME+ PL116a,
implements reconnection to mailer=submission, adds
pgp-interactive and askmimeforward elmrc options
and prompts about mimeforward on f)orward command.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL116 (25) --------------------------------
Index: elm2.4.ME+.117-cvs/hdrs/patchlevel.h
Prereq: 1116400000
*** elm2.4.ME+.116/hdrs/patchlevel.h 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/patchlevel.h 2004-06-27 19:21:16.000000000 +0300
***************
*** 1,12 ****
! #define PATCHLEVEL "116 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.116
*/
! #define LAST_REPORT_TIME 1116400000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "May, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released May, 2004"
/*
* Local Variables:
--- 1,12 ----
! #define PATCHLEVEL "117 (25)"
/* Used by Configure:
! SHAREDTAG: .1.0.117
*/
! #define LAST_REPORT_TIME 1119000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "Jun, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Jun, 2004"
/*
* Local Variables:
Index: elm2.4.ME+.117-cvs/README.ME+
--- elm2.4.ME+.117-cvs/README.ME+ 2004-06-27 19:19:51.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.760 2004/05/19 12:02:16 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.776 2004/06/27 16:19:51 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,126 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL117 (25) compared with Elm2.4ME+ PL116 (25)
+ -------------------------------------------------------------------
+
+ SUMMARY: This release collects patch Elm2.4ME+ PL116a,
+ implements reconnection to mailer=submission, adds
+ pgp-interactive and askmimeforward elmrc options
+ and prompts about mimeforward on f)orward command.
+
+ - Fix debug output of dump_expanded_address()
+
+ - Implement reconnection for mailer=submission (however
+ reconnection is not implemented for mailer=sendmail-bs).
+ These mailer's open smtp (or submission) connection
+ to server before editor is started. That is done
+ for get capacity of mailer (for 8BITMIME). However
+ sometime that times out if editing tooks too long
+ and sending of mail fails.
+
+ - Trying send encrypted messages with gpg was giving
+ error message
+ Couldn't find key matching 'xxx@yyy'
+ Problem noted by: Olivier COLIN <dodo.o...@wanadoo.fr>
+ (and probably others)
+ > Make GetPGPKey() retry reading of result on case of
+ interrupt.
+
+ - GetPGPKey() was not collect status of exted gpg and
+ was left lot of defunct processes. Converted code to
+ use start_run().
+
+ - Reprint last error on "Mail Pre-Send Screen" after
+ clearing screen.
+
+ - Added pgp-interactive option to elmrc. Setting that
+ disables batch mode of pgp/gpg when encrypting/signing
+ mail.
+
+ - Alternatives and weedout and list was replaced with Q letters
+ Problem noted by: Cyrille Lefevre <cyrille...@laposte.net>
+
+ - Do not quote addresses on alternatives.
+
+ - Added elmrc variable type rc_DT_ESTR (aka kind
+ of expanded string).
+ - Reimplemented elmrc variable "pager" as rc_DT_ESTR
+ - Reimplemented elmrc variable "editor" as rc_DT_ESTR
+ - Reimplemented elmrc variable "calendar" as rc_DT_ESTR
+ - Reimplemented elmrc variable "localsignature" as rc_DT_ESTR
+ - Reimplemented elmrc variable "remotesignature" as rc_DT_ESTR
+ - Reimplemented elmrc variable "receivedmail" as rc_DT_ESTR
+ - Reimplemented elmrc variable "sentmail" as rc_DT_ESTR
+ - Reimplemented elmrc variable "incoming-mailbox" as rc_DT_ESTR
+ - Removed valid_rc_type()
+
+ - Add package test to Configure (as it is done Elm ME+ 2.5)
+ for case that wrong config.sh is used.
+
+ - Added malloc_gets() to lib/mail_gets.c
+
+ - Changed send_msg_l(), mail(), mail_form(),
+ mail_filled_in_form(), forward(), reply_to_everyone(),
+ and reply() to use index, mailbox instead of
+ current_header, infile, mailbox.
+
+ - Added give_next_open_mailbox() or src/messages.c and
+ made save_copy() to use it.
+
+ - Moved defination of struct mv_storage and
+ struct mv_digest out from src/messages/def_messages.h
+
+ - When mail is forwarded mail, user is prompted
+ Forward message as separate part?
+ default value of answer depends "mimeforward"
+ elmrc option. Setting elmrc option "askmimeforward"
+ to OFF disables that prompt.
+
+ - Added expanded_address_from_items() to
+ lib/outheaders.c
+
+ - Removed class_charset() from melib/mime_parse.c
+
+ New elmrc options:
+ pgp-interactive
+ askmimeforward
+
+ Changes of Elm2.4ME+ PL116a (25) compared with Elm2.4ME+ PL116 (25)
+ -------------------------------------------------------------------
+
+ - Alternatives and weedout and list was replaced with Q letters
+ Problem noted by: Cyrille Lefevre <cyrille...@laposte.net>
+
+ - Reprint last error on "Mail Pre-Send Screen" after
+ clearing screen.
+
+ - Trying send encrypted messages with gpg was giving
+ error message
+ Couldn't find key matching 'xxx@yyy'
+ Problem noted by: Olivier COLIN <dodo.o...@wanadoo.fr>
+ (and probably others)
+ > Make GetPGPKey() retry reading of result on case of
+ interrupt.
+
+ - GetPGPKey() was not collect status of exted gpg and
+ was left lot of defunct processes. Converted code to
+ use start_run().
+
+ - Do not quote addresses on alternatives.
+
Changes of Elm2.4ME+ PL116 (25) compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------------
***************
*** 24,30 ****
of folder fails, reimplements
"alternatives" and "weedout" elmrc variables,
changes elm.filelist format (adds subcommand
! "copydoc" to elmregister), adds -s option
to elmregister and adds RFC 2919 List-ID to
list of known headers.
--- 132,138 ----
of folder fails, reimplements
"alternatives" and "weedout" elmrc variables,
changes elm.filelist format (adds subcommand
! "copydoc" to elmregister), adds -s option
to elmregister and adds RFC 2919 List-ID to
list of known headers.
***************
*** 91,103 ****
on result of hdr_decode_from_phrase() on
lib/headers.c
! - If on header editing screen incoked editor
! and address was on form '"a" <b> (c)",
and then edited it on header editing screen
! address become as '"a" <b> (c('. Changed
! on '(' to ')' on make_surface_addr() on
! lib/outheaders.c
!
Changes of Elm2.4ME+ PL115a (25) compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------------
--- 199,210 ----
on result of hdr_decode_from_phrase() on
lib/headers.c
! - If on header editing screen incoked editor
! and address was on form '"a" <b> (c)",
and then edited it on header editing screen
! address become as '"a" <b> (c('. Changed
! on '(' to ')' on make_surface_addr() on
! lib/outheaders.c
Changes of Elm2.4ME+ PL115a (25) compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------------
Index: elm2.4.ME+.117-cvs/Configure
*** elm2.4.ME+.116/Configure 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.117-cvs/Configure 2004-06-18 23:40:55.000000000 +0300
***************
*** 8,14 ****
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.150 2004/03/27 18:31:35 hurtta Exp $
#
: sanity checks
--- 8,14 ----
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.151 2004/06/18 20:40:55 hurtta Exp $
#
: sanity checks
***************
*** 777,782 ****
--- 777,783 ----
echo $n "$rp $c"
. myread
+ save_package="$package"
if test "$config" != "" ; then
echo "Fetching default answers from your old $config file..."
. ../$config
***************
*** 800,805 ****
--- 801,820 ----
esac
fi
+
+ if test "$save_package" != "$package" ; then
+
+ echo
+ echo "WARNING! Saved configuration is for $package and not for $save_package"
+ echo
+ sleep 5
+
+ # FIX paths
+ stage_dir="`echo \"$stage_dir\" | sed \"s/$package/$save_package/\"`"
+
+ package="$save_package"
+ fi
+
cat <<EOH
If you want Configure to search programs from some unusual directory first,
Index: elm2.4.ME+.117-cvs/doc/elmrc-info
*** elm2.4.ME+.116/doc/elmrc-info 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/doc/elmrc-info 2004-06-27 18:18:05.000000000 +0300
***************
*** 1,4 ****
! #@(#)$Id: elmrc-info,v 1.62 2004/05/01 19:08:18 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
--- 1,4 ----
! #@(#)$Id: elmrc-info,v 1.64 2004/06/27 15:18:05 hurtta Exp $
# Elm Version 2.4ME+
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
***************
*** 635,640 ****
--- 635,648 ----
# messages so that the receiver can correctly view the message!
# OFF: Elm will include the forwarded message in your editor instead
# of making it an separate mime body part.
+ #
+ # See also: askmimeforward
+
+ askmimeforward
+ # This option controls is forwarding as message/rfc822 prompted or not
+ # if set, option mnimeforward controls only default value for prompt
+ #
+ # See also: mimeforward
quoteforward
# Forwarded messages are quoted like replies, rather than included
***************
*** 675,680 ****
--- 683,691 ----
# none Don't call gpg
# /path Call gpg via that path, if it is executable
+ pgp-interactive
+ # Run pgp/gpg signing and encryption always on interactive mode
+
pgp-sign-type
# Specifies content-type for pgp signed messages.
# Possible values are: application/pgp, text/plain, text/x-pgp
Index: elm2.4.ME+.117-cvs/hdrs/defs.h
*** elm2.4.ME+.116/hdrs/defs.h 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/defs.h 2004-06-20 21:03:06.000000000 +0300
***************
*** 1,7 ****
! /* $Id: defs.h,v 1.46 2004/05/01 13:18:50 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: defs.h,v 1.47 2004/06/20 18:03:06 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.47 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 132,137 ****
--- 132,138 ----
#define MAIL_FORWARDING (1<<4)
#define MAIL_HAVE_ATTACHMENTS (1<<5) /* Flag for verify transmission */
#define MAIL_HAVE_PGP_ENCODED (1<<6) /* Falg for verify transmission */
+ #define MAIL_MIME_ATTCH (1<<7) /* mimeforward */
/* xxx_ACCESS moved to down after including of unistd.h */
Index: elm2.4.ME+.117-cvs/hdrs/elmlib.h
*** elm2.4.ME+.116/hdrs/elmlib.h 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/elmlib.h 2004-06-27 18:18:05.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmlib.h,v 1.209 2004/05/01 19:08:18 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.209 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmlib.h,v 1.215 2004/06/27 15:18:05 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.215 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 242,247 ****
--- 242,258 ----
extern int mail_gets P_((char *,int,FILE *));
+ /* malloc_gets added by Kari Hurtta
+ Do not return \n
+ reallocs *buffer
+
+ return -1 if limit exceeded, buffer is still alloced
+ return -2 if error or if feof() is true before reading anything
+
+ limit == -1 no limit
+ */
+ extern int malloc_gets P_((char **buffer, int limit, FILE *mailfile));
+
/* move_left.c */
extern void move_left P_((char *,int));
***************
*** 648,653 ****
--- 659,673 ----
extern char * give_dt_path_as_str P_((struct dt_path_info *ptr,
char * fieldname));
+ typedef struct dt_estr_info ESTR;
+
+ extern char * give_dt_estr_as_str P_((struct dt_estr_info *ptr,
+ char * fieldname));
+
+ /* Set initial value */
+ extern void set_dt_estr P_((struct dt_estr_info *ptr,
+ CONST char *const_val,
+ char *def_env));
/* lib/read_rc.c */
***************
*** 700,712 ****
extern char user_iso2022_sets[SLEN]; /* .elm/iso2022.sets */
extern char user_terminal_info[SLEN]; /* .elm/terminal.info */
extern char user_mail_services[SLEN]; /* .elm/mail.services */
! extern char defaultfile[SLEN]; /* name of default folder */
! extern char raw_defaultfile[SLEN]; /* Name of default folder */
! extern char calendar_file[SLEN]; /* name of file for clndr */
! extern char raw_calendar_file[SLEN]; /* unexpanded name of file for clndr */
extern nl_catd elm_msg_cat; /* message catalog */
- extern int clear_pages; /* flag: clear screen w/ builtin pgr? */
extern int title_messages; /* flag: title message display? */
extern char home[SLEN]; /* home directory of user */
extern char username[SLEN]; /* return address name! */
--- 720,729 ----
extern char user_iso2022_sets[SLEN]; /* .elm/iso2022.sets */
extern char user_terminal_info[SLEN]; /* .elm/terminal.info */
extern char user_mail_services[SLEN]; /* .elm/mail.services */
! extern ESTR defaultfile_e; /* name of default folder */
! extern ESTR calendar_file_e; /* name of file for clndr */
extern nl_catd elm_msg_cat; /* message catalog */
extern int title_messages; /* flag: title message display? */
extern char home[SLEN]; /* home directory of user */
extern char username[SLEN]; /* return address name! */
***************
*** 734,739 ****
--- 751,758 ----
extern int prompt_for_cc; /* flag: prompt user for 'cc' value? */
#ifdef USE_PGP
extern int pgp_askpgpsig; /* Should pgp ask userid to sign messages with? */
+ extern int pgp_interactive; /* Should pgp/gpg encryption/signing to be
+ run always on interactive mode */
extern int pgp_sign_type; /* 0 = application/pgp
1 = text/plain
2 = text/x-pgp
***************
*** 786,797 ****
extern charset_t wanted_display_charset; /* name of character set */
extern int DSN_success; /* flag: Ask successfull DSNes */
extern char e_editor[SLEN]; /* "~e" editor... */
! extern char editor[SLEN]; /* default editor for mail */
extern int env_from_source; /* 0 == forward-from,
1 == from,
2 == return-path
*/
! extern char raw_editor[SLEN]; /* unexpanded default editor for mail */
extern char escape_char; /* '~' or something else... */
extern int force_name; /* flag: save by name forced? */
extern int fragment_handling; /* 0 == none,
--- 805,816 ----
extern charset_t wanted_display_charset; /* name of character set */
extern int DSN_success; /* flag: Ask successfull DSNes */
extern char e_editor[SLEN]; /* "~e" editor... */
! extern ESTR editor_e; /* editor for outgoing mail*/
extern int env_from_source; /* 0 == forward-from,
1 == from,
2 == return-path
*/
!
extern char escape_char; /* '~' or something else... */
extern int force_name; /* flag: save by name forced? */
extern int fragment_handling; /* 0 == none,
***************
*** 818,825 ****
3 == non-spool */
extern char raw_local_fs_charset[SLEN]; /* filesystem charset */
extern charset_t local_fs_charset; /* filesystem charset */
! extern char local_signature[SLEN];/* local msg signature file */
! extern char raw_local_signature[SLEN];/* unexpanded local msg signature file */
extern int lockfolders; /* Lock folder when open */
extern int lock_in_copy; /* Lock folder when copied to it */
extern char folders[SLEN]; /* folder home directory */
--- 837,843 ----
3 == non-spool */
extern char raw_local_fs_charset[SLEN]; /* filesystem charset */
extern charset_t local_fs_charset; /* filesystem charset */
! extern ESTR local_signature_e; /* local msg signature file */
extern int lockfolders; /* Lock folder when open */
extern int lock_in_copy; /* Lock folder when copied to it */
extern char folders[SLEN]; /* folder home directory */
***************
*** 840,845 ****
--- 858,864 ----
extern int internal_mailcap_t_prompt; /* ... really? */
extern int metoo; /* flag: copy me on mail to alias? */
extern int mimeforward;
+ extern int askmimeforward;
extern int mime_body_keywords; /* flag: if false the body is not parsed for keywords */
extern int move_when_paged; /* flag: move when '+' or '-' used? */
extern int names_only; /* flag: display names but no addrs? */
***************
*** 854,861 ****
extern int page_known_charsets;
extern int pagemultipart;
extern int pagesigned;
! extern char pager[SLEN]; /* what pager to use... */
! extern char raw_pager[SLEN]; /* unexpanded what pager to use... */
#ifdef USE_PGP
extern char pgp2_path[SLEN]; /* Pgp2 path or "none" if no pgp2 */
extern char raw_pgp2_path[SLEN];
--- 873,879 ----
extern int page_known_charsets;
extern int pagemultipart;
extern int pagesigned;
! extern ESTR pager_e; /* what pager to use... */
#ifdef USE_PGP
extern char pgp2_path[SLEN]; /* Pgp2 path or "none" if no pgp2 */
extern char raw_pgp2_path[SLEN];
***************
*** 874,891 ****
extern int quote_forward; /* flag: fwd'd msgs quoted like replies */
extern int readdatapercentinc; /* data percent increment during new mbox read */
extern int readmsginc; /* msg cnt increment during new mbox read */
! extern char recvd_mail[SLEN]; /* folder for storing received mail */
! extern char raw_recvdmail[SLEN];/* unexpanded recvd_mail name */
! extern char remote_signature[SLEN];/* remote msg signature file */
! extern char raw_remote_signature[SLEN];/* unexpanded remote msg signature file*/
extern int req_mime_bodyencoding;
extern int req_mime_hdrencoding;
extern int resolve_mode; /* flag: resolve before moving mode? */
extern int save_by_name; /* flag: save mail by login name? */
! extern char sent_mail[SLEN]; /* name of file to save copies to */
extern int set_window_title; /* flag: set (xterm?) window title and
icon name */
- extern char raw_sentmail[SLEN]; /* unexpanded name of file to save to */
extern char shell[SLEN]; /* default system shell */
extern char raw_shell[SLEN]; /* unexpanded default system shell */
#ifdef USE_PGP
--- 892,906 ----
extern int quote_forward; /* flag: fwd'd msgs quoted like replies */
extern int readdatapercentinc; /* data percent increment during new mbox read */
extern int readmsginc; /* msg cnt increment during new mbox read */
! extern ESTR recvd_mail_e; /* folder for storing received mail */
! extern ESTR remote_signature_e;/* remote msg signature file */
extern int req_mime_bodyencoding;
extern int req_mime_hdrencoding;
extern int resolve_mode; /* flag: resolve before moving mode? */
extern int save_by_name; /* flag: save mail by login name? */
! extern ESTR sent_mail_e; /* name of file to save copies to */
extern int set_window_title; /* flag: set (xterm?) window title and
icon name */
extern char shell[SLEN]; /* default system shell */
extern char raw_shell[SLEN]; /* unexpanded default system shell */
#ifdef USE_PGP
***************
*** 1961,1966 ****
--- 1976,1988 ----
extern int query_mailer_info P_((struct mailer_info *I,
enum MI_query query));
+ /* -1 if connection lost
+ 0 if OK
+ 1 if mailer reinitialized and query_mailer_info()
+ need to be called again
+ */
+ extern int mailer_restarted P_((struct mailer_info *I));
+
/* Should return 1 if verify succees and fields of result to be filled
-- caller should free fields of result
Returns 0 on failure
***************
*** 2079,2084 ****
--- 2101,2109 ----
extern void dump_expanded_address P_((int debuglevel, const char *text,
struct expanded_address expanded));
+ extern void expanded_address_from_items P_((struct expanded_address *result,
+ struct addr_item *TMP));
+
struct mailing_headers {
unsigned short magic; /* MAIL_HDR_magic */
Index: elm2.4.ME+.117-cvs/hdrs/mailer_imp.h
*** elm2.4.ME+.116/hdrs/mailer_imp.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/mailer_imp.h 2004-05-23 15:31:00.000000000 +0300
***************
*** 1,7 ****
! /* $Id: mailer_imp.h,v 1.7 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: mailer_imp.h,v 1.8 2004/05/23 12:31:00 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 37,42 ****
--- 37,51 ----
struct mailer_info *I,
enum MI_query query));
+ /* Return
+ 1 == mailer restarted, reconnect succeed -- reask info
+ 0 == mailer not disconnected
+ -1 == mailer disconnected, reconnect failed
+ */
+ typedef int mailer_info_restart_hook P_((struct mailer_config *M,
+ struct mailer_info *I));
+
+
/* Return
-1 if caller should result with default data (return 1)
-2 if caller should just test passwd
***************
*** 88,93 ****
--- 97,103 ----
mailer_info_verify_addr * mi_verify_addr;
mailer_info_gen_def_ef * mi_def_env_from;
mailer_info_set_ef * mi_set_env_from;
+ mailer_info_restart_hook * mi_restart_hook;
int mailer_bits;
/* TODO: Add to this mailer specific data
Index: elm2.4.ME+.117-cvs/hdrs/me.h
*** elm2.4.ME+.116/hdrs/me.h 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/me.h 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! /* $Id: me.h,v 1.89 2004/05/02 11:15:26 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.89 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: me.h,v 1.92 2004/06/18 20:40:56 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.92 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 356,363 ****
/* mime.c */
extern int have_metamail P_((void));
! extern void clear_mime_send_info P_((mime_send_t *mime_info,
! struct mailer_info *mailer_info));
extern void free_mime_send_info P_((mime_send_t *mime_info));
extern void add_paramater_1 P_((char **ptr, char *name,
char *value, int quoted));
--- 356,362 ----
/* mime.c */
extern int have_metamail P_((void));
! extern void clear_mime_send_info P_((mime_send_t *mime_info));
extern void free_mime_send_info P_((mime_send_t *mime_info));
extern void add_paramater_1 P_((char **ptr, char *name,
char *value, int quoted));
***************
*** 486,492 ****
extern int a_sendmsg P_((int edit_message, int form_letter,
! struct MailboxView *mailbox /* save_copy needs */,
struct AliasView *aview, int header_page,
struct menu_context *page));
extern int send_msg_argv P_((char *argv[],
--- 485,491 ----
extern int a_sendmsg P_((int edit_message, int form_letter,
! struct MailboxView *mailbox,
struct AliasView *aview, int header_page,
struct menu_context *page));
extern int send_msg_argv P_((char *argv[],
***************
*** 495,507 ****
struct AliasView *aview,
struct menu_context *page));
! extern int send_msg_l P_((struct header_rec * current_header,
struct addr_item *given_to,
struct addr_item *given_cc,
char *given_subject,
int options, int form_letter,
! FILE *infile,
! struct MailboxView *mailbox /* for save_copy */,
struct AliasView *aview,
struct menu_context *page
));
--- 494,505 ----
struct AliasView *aview,
struct menu_context *page));
! extern int send_msg_l P_((int index,
struct addr_item *given_to,
struct addr_item *given_cc,
char *given_subject,
int options, int form_letter,
! struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page
));
***************
*** 512,517 ****
--- 510,516 ----
struct AliasView *aview,
struct menu_context *page));
+
/* mailmsg2.c */
#if ANSI_C
***************
*** 519,535 ****
#endif
! extern int mail P_((struct header_rec *current_header,
int options, int form,
struct mailing_headers *headers,
struct mailer_info *mailer_info,
! FILE *infile,
! struct MailboxView *mailbox,
struct AliasView *aview));
! extern int mail_form P_((struct header_rec *current_header,
struct addr_item *address,
char *subj,
- FILE *infile,
struct MailboxView *mailbox,
struct AliasView *aview));
--- 518,532 ----
#endif
! extern int mail P_((int idx,
int options, int form,
struct mailing_headers *headers,
struct mailer_info *mailer_info,
! struct MailboxView *mailbox /* system_call() */,
struct AliasView *aview));
! extern int mail_form P_((int mail_index,
struct addr_item *address,
char *subj,
struct MailboxView *mailbox,
struct AliasView *aview));
***************
*** 538,547 ****
/* froms.c */
! extern int mail_filled_in_form P_((struct header_rec * current_header,
struct addr_item *address,
char *subject,
- FILE *infile,
struct MailboxView *
mailbox /* for save_copy */,
struct AliasView *aview));
--- 535,543 ----
/* froms.c */
! extern int mail_filled_in_form P_((int mail_index,
struct addr_item *address,
char *subject,
struct MailboxView *
mailbox /* for save_copy */,
struct AliasView *aview));
***************
*** 602,608 ****
int form,
mime_send_t *mime_info,
FILE * conv_file,
- struct MailboxView *mailbox,
struct menu_context *page));
extern int append_copy_to_file P_((struct mailing_headers * headers,
--- 598,603 ----
***************
*** 714,733 ****
extern void get_return_name P_((char *address, char *name,
int trans_to_lowercase,
int size));
! extern int forward P_((struct header_rec *hdr,
! FILE *infile,
struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page));
! extern int reply_to_everyone P_((struct header_rec *hdr,
! FILE *infile,
! struct MailboxView *mailbox
! /* for save_copy */,
struct AliasView *aview,
struct menu_context *page));
! extern int reply P_((struct header_rec *hdr,
! FILE *infile,
! struct MailboxView *mailbox /* for save_copy */,
struct AliasView *aview,
struct menu_context *page));
--- 709,724 ----
extern void get_return_name P_((char *address, char *name,
int trans_to_lowercase,
int size));
! extern int forward P_((int index,
struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page));
! extern int reply_to_everyone P_((int index,
! struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page));
! extern int reply P_((int index,
! struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page));
***************
*** 803,808 ****
--- 794,807 ----
struct menu_context *page
));
+ extern int no_editor_edit_the_message P_((char *filename,
+ struct mailing_headers * headers,
+ charset_t file_set,
+ struct mailer_info *mailer_info,
+ struct MailboxView *mailbox
+ /* needed for system_call() */,
+ struct AliasView *aview
+ ));
/* delete.c */
***************
*** 1004,1009 ****
--- 1003,1014 ----
extern struct MailboxView * current_mailbox;
+ /* Better handling of current mailbox:
+ idx == 0 first
+ */
+
+ extern struct MailboxView * give_next_open_mailbox P_((int *idx,
+ int signal));
/* Joins storage to new view */
extern struct MailboxView * malloc_mailbox_view P_((struct current_storage *
***************
*** 1093,1099 ****
struct counter_data *counter,
parse_mime_callback *parse_mime));
-
extern void write_mailbox_info P_((FILE *fp, struct MailboxView *mailbox));
/* caller must string_free() result -- calculated if not set */
--- 1098,1103 ----
***************
*** 1117,1123 ****
extern int have_partial P_((struct MailboxView *parent_mailbox));
-
/* screen/screen.c */
extern int InitScreen P_((struct menu_context **page));
--- 1121,1126 ----
Index: elm2.4.ME+.117-cvs/hdrs/rc_imp.h
*** elm2.4.ME+.116/hdrs/rc_imp.h 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/rc_imp.h 2004-06-18 12:29:50.000000000 +0300
***************
*** 1,7 ****
! /* $Id: rc_imp.h,v 1.12 2004/05/01 19:08:18 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.12 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: rc_imp.h,v 1.13 2004/06/18 09:29:50 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 29,35 ****
--- 29,40 ----
/* Returns pointer to static buffer */
typedef char * rc_get_value P_((struct rc_save_info_rec *r));
+ #define RCTYPE_magic 0xF402
+
extern struct rc_type {
+ unsigned short magic; /* RCTYPE_magic */
+
+
rc_parse_line * parse_line; /* Parse line */
rc_parse_cline * parse_cline; /* Parse continuation line */
rc_print_value * print_value;
***************
*** 38,44 ****
} rc_DT_SYN, rc_DT_STR, rc_DT_NUM, rc_DT_BOL,
rc_DT_CHR, rc_DT_SRT,
rc_DT_MLT, rc_DT_ASR, rc_DT_PRM, rc_DT_FUNC,
! rc_DT_LONG, rc_DT_PATH, rc_DT_OBS;
extern int valid_rc_type P_((struct rc_type *T));
--- 43,49 ----
} rc_DT_SYN, rc_DT_STR, rc_DT_NUM, rc_DT_BOL,
rc_DT_CHR, rc_DT_SRT,
rc_DT_MLT, rc_DT_ASR, rc_DT_PRM, rc_DT_FUNC,
! rc_DT_LONG, rc_DT_PATH, rc_DT_OBS, rc_DT_ESTR;
extern int valid_rc_type P_((struct rc_type *T));
***************
*** 76,81 ****
--- 81,90 ----
extern int expand_dt_path P_((struct dt_path_info *ptr, char *fieldname,
char *val, int recursive));
+ extern int expand_dt_estr P_((struct dt_estr_info *ptr,
+ char *fieldname,
+ char *val));
+
/*
* Local Variables:
* mode:c
Index: elm2.4.ME+.117-cvs/hdrs/save_opts.h
*** elm2.4.ME+.116/hdrs/save_opts.h 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/save_opts.h 2004-06-27 18:18:05.000000000 +0300
***************
*** 1,7 ****
! /* @(#)$Id: save_opts.h,v 1.84 2004/05/01 19:08:19 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.84 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* @(#)$Id: save_opts.h,v 1.87 2004/06/27 15:18:05 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.87 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 57,62 ****
--- 57,70 ----
char ** list;
};
+ #define ESTR_meta 1
+
+ struct dt_estr_info {
+ int flags;
+ char * unexpanded;
+ char * expanded;
+ };
+
#ifdef USE_DLOPEN
struct dt_shared_info {
struct shared_loader *loader;
***************
*** 93,99 ****
#ifdef USE_DLOPEN
struct dt_shared_info *shared;
#endif
! void *dummy;
} val;
option_func *func_val;
int size_val;
--- 101,108 ----
#ifdef USE_DLOPEN
struct dt_shared_info *shared;
#endif
! struct dt_estr_info *estr;
! void *dummy;
} val;
option_func *func_val;
int size_val;
***************
*** 132,137 ****
--- 141,147 ----
#define ZZZ_DT_PATH(A) &rc_DT_PATH,0, { path: A }, null_option_func
#define ZZZ_DT_OBS0 &rc_DT_OBS,0, { str: NULL }, null_option_func
#define ZZZ_DT_SHARED(A) &rc_DT_SHARED,0, { shared: A }, null_option_func
+ #define ZZZ_DT_ESTR(A) &rc_DT_ESTR,0, { estr: A }, null_option_func
#else
***************
*** 172,177 ****
--- 182,188 ----
#define ZZZ_DT_PATH(A) &rc_DT_PATH,0, (char *)A, null_option_func
#define ZZZ_DT_OBS0 &rc_DT_OBS,0, NULL , null_option_func
#define ZZZ_DT_SHARED(A) &rc_DT_SHARED,0, (char *)A, null_option_func
+ #define ZZZ_DT_ESTR(A) &rc_DT_ESTR,0, (char *)A, null_option_func
#endif
/* shared.c */
***************
*** 252,257 ****
--- 263,269 ----
{"arrow", -1L,ZZZ_DT_BOL_(FL_OR,&arrow_cursor), 0, NULL},
{"ask", -1L,ZZZ_DT_BOL(&question_me), 0, NULL},
{"askcc", -1L,ZZZ_DT_BOL(&prompt_for_cc), 0, NULL},
+ {"askmimeforward", -1L,ZZZ_DT_BOL(&askmimeforward), 0, NULL},
#ifdef USE_PGP
{"askpgpsig", -1L,ZZZ_DT_BOL(&pgp_askpgpsig), 0, NULL},
#endif
***************
*** 275,282 ****
{"browser-wildcard-matching", -1L,ZZZ_DT_BOL(&browser_wildcards), 0, NULL},
{"builtinlines", -1L,ZZZ_DT_NUM(&builtin_lines), 0, NULL},
! {"calendar", -1L,ZZZ_DT_STR(raw_calendar_file),
! sizeof raw_calendar_file, NULL},
{"cc", -1L,ZZZ_DT_SYN("askcc"), 0, NULL},
{"charset", -1L,ZZZ_DT_SYN("text-charset"), 0, NULL},
{"charset-convert-ok", -1L,ZZZ_DT_BOL(&charset_convert_ok), 0, NULL},
--- 287,293 ----
{"browser-wildcard-matching", -1L,ZZZ_DT_BOL(&browser_wildcards), 0, NULL},
{"builtinlines", -1L,ZZZ_DT_NUM(&builtin_lines), 0, NULL},
! {"calendar", -1L,ZZZ_DT_ESTR(&calendar_file_e), 0, NULL},
{"cc", -1L,ZZZ_DT_SYN("askcc"), 0, NULL},
{"charset", -1L,ZZZ_DT_SYN("text-charset"), 0, NULL},
{"charset-convert-ok", -1L,ZZZ_DT_BOL(&charset_convert_ok), 0, NULL},
***************
*** 301,307 ****
sizeof raw_display_charset, NULL},
{"dsn-success", -1L,ZZZ_DT_BOL(&DSN_success), 0, NULL },
{"easyeditor", -1L,ZZZ_DT_STR(e_editor), sizeof e_editor, NULL},
! {"editor", -1L,ZZZ_DT_STR(raw_editor), sizeof raw_editor, NULL},
{"env-from-source", -1L,ZZZ_DT_NUM(&env_from_source),
sizeof env_from_source, &ENV_FROM_SOURCE},
{"escape", -1L,ZZZ_DT_CHR(&escape_char), 0, NULL},
--- 312,318 ----
sizeof raw_display_charset, NULL},
{"dsn-success", -1L,ZZZ_DT_BOL(&DSN_success), 0, NULL },
{"easyeditor", -1L,ZZZ_DT_STR(e_editor), sizeof e_editor, NULL},
! {"editor", -1L,ZZZ_DT_ESTR(&editor_e), 0, NULL},
{"env-from-source", -1L,ZZZ_DT_NUM(&env_from_source),
sizeof env_from_source, &ENV_FROM_SOURCE},
{"escape", -1L,ZZZ_DT_CHR(&escape_char), 0, NULL},
***************
*** 340,347 ****
{"imap-show-warning", -1L,ZZZ_DT_BOL(&IMAP_show_warning), 0, NULL},
{"imap-use-examine", -1L,ZZZ_DT_BOL(&IMAP_use_examine), 0, NULL},
#endif
! {"incoming-mailbox", -1L,ZZZ_DT_STR(raw_defaultfile),
! sizeof raw_defaultfile, NULL },
{"internal-mailcap-prompt-trusted", -1L,
ZZZ_DT_BOL(&internal_mailcap_t_prompt), 0, NULL },
{"internal-mailcap-trusted-programs",
--- 351,357 ----
{"imap-show-warning", -1L,ZZZ_DT_BOL(&IMAP_show_warning), 0, NULL},
{"imap-use-examine", -1L,ZZZ_DT_BOL(&IMAP_use_examine), 0, NULL},
#endif
! {"incoming-mailbox", -1L,ZZZ_DT_ESTR(&defaultfile_e), 0, NULL },
{"internal-mailcap-prompt-trusted", -1L,
ZZZ_DT_BOL(&internal_mailcap_t_prompt), 0, NULL },
{"internal-mailcap-trusted-programs",
***************
*** 362,369 ****
{"local-sessionlock-use-home", -1L, ZZZ_DT_NUM_(FL_SYS,
&local_sessionlock_use_home),
0, &local_sessionlock_list },
! {"localsignature", -1L,ZZZ_DT_STR(raw_local_signature),
! sizeof raw_local_signature, NULL},
#ifdef SYSCALL_LOCKING
{"lock-folders", -1L,ZZZ_DT_BOL(&lockfolders),0, NULL},
{"lock-in-copy", -1L,ZZZ_DT_BOL(&lock_in_copy),0, NULL},
--- 372,378 ----
{"local-sessionlock-use-home", -1L, ZZZ_DT_NUM_(FL_SYS,
&local_sessionlock_use_home),
0, &local_sessionlock_list },
! {"localsignature", -1L,ZZZ_DT_ESTR(&local_signature_e), 0, NULL},
#ifdef SYSCALL_LOCKING
{"lock-folders", -1L,ZZZ_DT_BOL(&lockfolders),0, NULL},
{"lock-in-copy", -1L,ZZZ_DT_BOL(&lock_in_copy),0, NULL},
***************
*** 403,412 ****
{"page-known-charsets", -1L,ZZZ_DT_BOL(&page_known_charsets), 0, NULL},
{"pagealternative", -1L,ZZZ_DT_BOL(&pagealternative), 0, NULL},
{"pagemultipart", -1L,ZZZ_DT_BOL(&pagemultipart), 0, NULL},
! {"pager", -1L,ZZZ_DT_STR(raw_pager), sizeof raw_pager, NULL},
{"pagesigned", -1L,ZZZ_DT_BOL(&pagesigned), 0, NULL},
#ifdef USE_PGP
{"pgp", -1L,ZZZ_DT_SYN("pgp2"), 0, NULL},
{"pgp-sign-type", -1L,ZZZ_DT_NUM(&pgp_sign_type),
sizeof pgp_sign_type, &PGP_SIGN_TYPE},
{"pgp-version", -1L,ZZZ_DT_PGPVER(&send_pgp_version),
--- 412,422 ----
{"page-known-charsets", -1L,ZZZ_DT_BOL(&page_known_charsets), 0, NULL},
{"pagealternative", -1L,ZZZ_DT_BOL(&pagealternative), 0, NULL},
{"pagemultipart", -1L,ZZZ_DT_BOL(&pagemultipart), 0, NULL},
! {"pager", -1L,ZZZ_DT_ESTR(&pager_e), 0, NULL},
{"pagesigned", -1L,ZZZ_DT_BOL(&pagesigned), 0, NULL},
#ifdef USE_PGP
{"pgp", -1L,ZZZ_DT_SYN("pgp2"), 0, NULL},
+ {"pgp-interactive", -1L,ZZZ_DT_BOL(&pgp_interactive), 0, NULL},
{"pgp-sign-type", -1L,ZZZ_DT_NUM(&pgp_sign_type),
sizeof pgp_sign_type, &PGP_SIGN_TYPE},
{"pgp-version", -1L,ZZZ_DT_PGPVER(&send_pgp_version),
***************
*** 435,444 ****
{"quoteforward", -1L,ZZZ_DT_BOL("e_forward), 0, NULL},
{"readdatapercentinc", -1L,ZZZ_DT_NUM(&readdatapercentinc), 0, NULL},
{"readmsginc", -1L,ZZZ_DT_NUM(&readmsginc), 0, NULL},
! {"receivedmail", -1L,ZZZ_DT_STR(raw_recvdmail),
! sizeof raw_recvdmail, NULL},
! {"remotesignature", -1L,ZZZ_DT_STR(raw_remote_signature),
! sizeof raw_remote_signature, NULL},
{"require-mime-version-for-body-encoding",
-1L,ZZZ_DT_BOL(&req_mime_bodyencoding), 0, NULL},
{"require-mime-version-for-hdr-encoding",
--- 445,452 ----
{"quoteforward", -1L,ZZZ_DT_BOL("e_forward), 0, NULL},
{"readdatapercentinc", -1L,ZZZ_DT_NUM(&readdatapercentinc), 0, NULL},
{"readmsginc", -1L,ZZZ_DT_NUM(&readmsginc), 0, NULL},
! {"receivedmail", -1L,ZZZ_DT_ESTR(&recvd_mail_e), 0, NULL},
! {"remotesignature", -1L,ZZZ_DT_ESTR(&remote_signature_e), 0, NULL},
{"require-mime-version-for-body-encoding",
-1L,ZZZ_DT_BOL(&req_mime_bodyencoding), 0, NULL},
{"require-mime-version-for-hdr-encoding",
***************
*** 450,457 ****
{"saveto", -1L,ZZZ_DT_SYN("sentmail"), 0, NULL},
{"send-mime-plain-text", -1L, ZZZ_DT_BOL(&send_mime_plain),
sizeof send_mime_plain, NULL },
! {"sentmail", -1L,ZZZ_DT_STR(raw_sentmail),
! sizeof raw_sentmail, NULL},
{"set-window-title", -1L, ZZZ_DT_BOL(&set_window_title),
sizeof set_window_title, NULL },
{"shell", -1L,ZZZ_DT_STR(raw_shell), sizeof raw_shell, NULL},
--- 458,464 ----
{"saveto", -1L,ZZZ_DT_SYN("sentmail"), 0, NULL},
{"send-mime-plain-text", -1L, ZZZ_DT_BOL(&send_mime_plain),
sizeof send_mime_plain, NULL },
! {"sentmail", -1L,ZZZ_DT_ESTR(&sent_mail_e), 0, NULL},
{"set-window-title", -1L, ZZZ_DT_BOL(&set_window_title),
sizeof set_window_title, NULL },
{"shell", -1L,ZZZ_DT_STR(raw_shell), sizeof raw_shell, NULL},
Index: elm2.4.ME+.117-cvs/hdrs/s_elm.h
*** elm2.4.ME+.116/hdrs/s_elm.h 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/s_elm.h 2004-06-20 21:03:06.000000000 +0300
***************
*** 470,476 ****
#define ElmCouldNotOpenNewElmrc 0x22a
#define ElmBadSortKeyInElmrc 0x22b
#define ElmBadAliasSortInElmrc 0x22c
- #define ElmSignatureObsolete 0x22d
#define ElmBouncebackGTMaxhops 0x22e
#define ElmTimeoutLTTen 0x22f
#define ElmBadLineElmrc 0x230
--- 470,475 ----
***************
*** 1095,1097 ****
--- 1094,1100 ----
#define ElmObsoleteInElmrc 0x866
#define ElmPgpRcvSure 0x867
#define ElmFailedLeaveChange 0x868
+ #define ElmChangedAttachEnc 0x869
+ #define ElmNoDSN 0x86a
+ #define ElmMailerDisconnected 0x86b
+ #define ElmMimeFWMessageYN 0x86c
Index: elm2.4.ME+.117-cvs/hdrs/shared_imp.h
*** elm2.4.ME+.116/hdrs/shared_imp.h 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/shared_imp.h 2004-06-18 12:29:50.000000000 +0300
***************
*** 1,7 ****
! /* $Id: shared_imp.h,v 1.16 2004/03/28 13:37:38 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.16 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: shared_imp.h,v 1.17 2004/06/18 09:29:50 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.17 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 32,43 ****
} * shared_SE_option_types;
extern int shared_SE_option_type_count;
- extern struct shared_RCT {
- struct rc_type * T;
- struct ImpInfo * imp_idx;
- } * shared_RC_types;
- extern int shared_RC_type_count;
-
extern struct shared_CST {
struct charset_type * T;
struct ImpInfo * imp_idx;
--- 32,37 ----
Index: elm2.4.ME+.117-cvs/hdrs/sysdefs.SH
*** elm2.4.ME+.116/hdrs/sysdefs.SH 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.117-cvs/hdrs/sysdefs.SH 2004-06-18 23:40:56.000000000 +0300
***************
*** 22,30 ****
echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
! /* $Id: sysdefs.SH,v 1.23 2004/04/04 06:17:17 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 22,30 ----
echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
! /* $Id: sysdefs.SH,v 1.24 2004/06/18 20:40:56 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 69,78 ****
#define default_temp "$tmpdir/"
#define temp_file "snd."
#define temp_form_file "form."
- /* #define temp_mbox "mbox." */
#define temp_print "print."
#define temp_edit "elm-edit"
- /* #define temp_uuname "uuname." */
#define temp_state "est."
#define emacs_editor "$emacs"
--- 69,76 ----
Index: elm2.4.ME+.117-cvs/lib/MAGIC
*** elm2.4.ME+.116/lib/MAGIC 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/MAGIC 2004-06-18 12:29:50.000000000 +0300
***************
*** 10,15 ****
--- 10,16 ----
#define DISPLAY_STATE_magic 0xF304
#define MAILCAP_magic 0xF400
#define MAILCAP_PARAM_magic 0xF401
+ #define RCTYPE_magic 0xF402
#define MAILBOXVIEW_magic 0xF500
#define LDSTATE_magic 0xF501
#define MAILBOXTYPE_magic 0xF502
Index: elm2.4.ME+.117-cvs/lib/mailer.c
*** elm2.4.ME+.116/lib/mailer.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/mailer.c 2004-05-23 15:31:00.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailer.c,v 1.46 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailer.c,v 1.47 2004/05/23 12:31:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.47 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 138,143 ****
--- 138,157 ----
X->mail_from = strmcpy(X->mail_from,value);
}
+ /* Return
+ 1 == mailer restarted, reconnect succeed -- reask info
+ 0 == mailer not disconnected
+ -1 == mailer disconnected, reconnect failed
+ */
+ S_(mailer_info_restart_hook default_mailer_info_rs_hook)
+ static int default_mailer_info_rs_hook P_((struct mailer_config *M,
+ struct mailer_info *I));
+ static int default_mailer_info_rs_hook(M,I)
+ struct mailer_config *M;
+ struct mailer_info *I;
+ {
+ return 0; /* Assume not restarted */
+ }
S_(mailer_info_set_ef sendmail_mailer_info_set_ef)
static void sendmail_mailer_info_set_ef();
***************
*** 460,465 ****
--- 474,480 ----
default_mailer_info_init, null_mailer_info_close,
default_mailer_info_query, default_mailer_info_verify_addr,
default_mailer_info_gen_def_ef, default_mailer_info_set_ef,
+ default_mailer_info_rs_hook,
MB_USE_DOMAIN
},
***************
*** 469,474 ****
--- 484,490 ----
default_mailer_info_init, null_mailer_info_close,
sendmail_mailer_info_query, sendmail_mailer_info_verify_addr,
default_mailer_info_gen_def_ef, sendmail_mailer_info_set_ef,
+ default_mailer_info_rs_hook,
MB_DONT_ADD_FROM
},
***************
*** 478,483 ****
--- 494,500 ----
default_mailer_info_init, null_mailer_info_close,
default_mailer_info_query, default_mailer_info_verify_addr,
default_mailer_info_gen_def_ef, default_mailer_info_set_ef,
+ default_mailer_info_rs_hook,
MB_USE_DOMAIN
},
***************
*** 487,492 ****
--- 504,510 ----
default_mailer_info_init, null_mailer_info_close,
default_mailer_info_query, default_mailer_info_verify_addr,
default_mailer_info_gen_def_ef, default_mailer_info_set_ef,
+ default_mailer_info_rs_hook,
MB_DONT_ADD_FROM
}
***************
*** 954,959 ****
--- 972,1001 ----
}
+ /* -1 if connection lost
+ 0 if OK
+ 1 if mailer reinitialized and query_mailer_info()
+ need to be called again
+ */
+ int mailer_restarted(I)
+ struct mailer_info *I;
+ {
+ int ret;
+
+ if (I->magic != MAILER_INFO_magic)
+ panic("MAILER PANIC",__FILE__,__LINE__,"mailer_restarted",
+ "Bad magic number (mailer info)",0);
+
+ if (!valid_mailer(I->mailer_type))
+ panic("MAILER PANIC",__FILE__,__LINE__,"mailer_restarted",
+ "Bad mailer type",
+ 0);
+
+ ret = I->mailer_type->mi_restart_hook(I->mailer_type,I);
+
+ return ret;
+ }
+
static int default_mailer_init(M,C,I)
struct mailer_config *M;
struct mail_send_state *C;
Index: elm2.4.ME+.117-cvs/lib/mail_gets.c
*** elm2.4.ME+.116/lib/mail_gets.c 2004-03-30 19:38:43.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/mail_gets.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mail_gets.c,v 1.8 2004/03/27 18:31:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mail_gets.c,v 1.9 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.9 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 53,58 ****
--- 53,114 ----
return line_bytes;
}
+ /* malloc_gets added by Kari Hurtta
+ Do not return \n
+
+ return -1 if limit exceeded, buffer is still alloced
+ return -2 if error or if feof() is true before reading anything
+ */
+
+ int malloc_gets(buffer, limit, mailfile)
+ char **buffer;
+ int limit; /* -1 if no limit */
+ FILE *mailfile;
+ {
+ char * buf = *buffer;
+ int line_bytes = 0, ch;
+ int alloced = 0;
+
+ if (feof(mailfile))
+ return -2; /* Is called after EOF */
+
+ while (!feof(mailfile) && !ferror(mailfile) &&
+ (line_bytes < limit || limit < 0)) {
+
+ int ch = getc(mailfile); /* Macro, faster than fgetc() ! */
+
+ if (EOF == ch ||
+ '\n' == ch)
+ break;
+
+ if (line_bytes+1 > alloced) {
+ int n = alloced + 100;
+ if (n > limit && limit > line_bytes)
+ n = limit;
+
+ buf = safe_realloc(buf,n);
+ alloced = n;
+ }
+ buf[line_bytes++] = ch;
+ }
+
+ if (line_bytes > 0 ||
+ !feof(mailfile) && !ferror(mailfile)) {
+
+ buf = safe_realloc(buf,line_bytes+1);
+ buf[line_bytes] = '\0';
+ }
+
+ *buffer = buf;
+
+ if (line_bytes >= limit)
+ return -1;
+
+ if (ferror(mailfile))
+ return-2;
+
+ return line_bytes;
+ }
/*
* Local Variables:
Index: elm2.4.ME+.117-cvs/lib/mbox.c
*** elm2.4.ME+.116/lib/mbox.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/mbox.c 2004-06-18 12:29:50.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.52 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.52 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mbox.c,v 1.53 2004/06/18 09:29:50 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.53 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 664,674 ****
/* if file name == default mailbox, its a spool file also
* even if its not in the spool directory. (SVR4)
*/
! if (strcmp(filename, defaultfile) == 0) {
! DPRINT(Debug,8,(&Debug,
"get_folder_type=SPOOL\n"));
! return(SPOOL);
}
if (buf) {
if (buf->st_mode & 07000) {
--- 664,682 ----
/* if file name == default mailbox, its a spool file also
* even if its not in the spool directory. (SVR4)
*/
!
!
! {
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
!
! if (default_val &&
! strcmp(filename, default_val) == 0) {
! DPRINT(Debug,8,(&Debug,
"get_folder_type=SPOOL\n"));
! return(SPOOL);
! }
}
+
if (buf) {
if (buf->st_mode & 07000) {
Index: elm2.4.ME+.117-cvs/lib/outheaders.c
*** elm2.4.ME+.116/lib/outheaders.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/outheaders.c 2004-06-21 21:28:47.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.18 2004/05/19 12:07:01 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: outheaders.c,v 1.20 2004/06/21 18:28:47 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 365,370 ****
--- 365,388 ----
free_string(&comment);
}
+ void expanded_address_from_items(result,TMP)
+ struct expanded_address *result;
+ struct addr_item *TMP;
+ {
+ int j;
+
+ for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
+ int pos = add_expanded_addr_(result,
+ TMP[j].addr,
+ TMP[j].fullname,
+ TMP[j].comment);
+ struct string *s = make_surface_addr(TMP[j]);
+ add_textual_addr_(result,s,pos,1);
+ free_string(&s);
+ }
+ }
+
+
#ifdef ANSI_C
hdr_add_to_mailing_hdr add_from_hdr;
#endif
***************
*** 376,383 ****
charset_t defcharset;
int replace;
{
- int j;
-
struct addr_item * TMP;
TMP = break_down_address(value,demime,defcharset);
--- 394,399 ----
***************
*** 385,399 ****
if (replace)
free_expanded_address(&(headers->from));
! for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
! int pos = add_expanded_addr_(&(headers->from),
! TMP[j].addr,
! TMP[j].fullname,
! TMP[j].comment);
! struct string *s = make_surface_addr(TMP[j]);
! add_textual_addr_(&(headers->from),s,pos,1);
! free_string(&s);
! }
free_addr_items(TMP);
--- 401,407 ----
if (replace)
free_expanded_address(&(headers->from));
! expanded_address_from_items(&(headers->from), TMP);
free_addr_items(TMP);
***************
*** 411,419 ****
int demime;
charset_t defcharset;
int replace;
! {
! int j;
!
struct addr_item * TMP;
TMP = break_down_address(value,demime,defcharset);
--- 419,425 ----
int demime;
charset_t defcharset;
int replace;
! {
struct addr_item * TMP;
TMP = break_down_address(value,demime,defcharset);
***************
*** 421,435 ****
if (replace)
free_expanded_address(&(headers->to));
! for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
! int pos = add_expanded_addr_(&(headers->to),
! TMP[j].addr,
! TMP[j].fullname,
! TMP[j].comment);
! struct string *s = make_surface_addr(TMP[j]);
! add_textual_addr_(&(headers->to),s,pos,1);
! free_string(&s);
! }
free_addr_items(TMP);
--- 427,433 ----
if (replace)
free_expanded_address(&(headers->to));
! expanded_address_from_items(&(headers->to), TMP);
free_addr_items(TMP);
***************
*** 448,455 ****
charset_t defcharset;
int replace;
{
- int j;
-
struct addr_item * TMP;
TMP = break_down_address(value,demime,defcharset);
--- 446,451 ----
***************
*** 457,471 ****
if (replace)
free_expanded_address(&(headers->cc));
! for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
! int pos = add_expanded_addr_(&(headers->cc),
! TMP[j].addr,
! TMP[j].fullname,
! TMP[j].comment);
! struct string *s = make_surface_addr(TMP[j]);
! add_textual_addr_(&(headers->cc),s,pos,1);
! free_string(&s);
! }
free_addr_items(TMP);
--- 453,459 ----
if (replace)
free_expanded_address(&(headers->cc));
! expanded_address_from_items(&(headers->cc), TMP);
free_addr_items(TMP);
***************
*** 493,507 ****
if (replace)
free_expanded_address(&(headers->bcc));
! for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
! int pos = add_expanded_addr_(&(headers->bcc),
! TMP[j].addr,
! TMP[j].fullname,
! TMP[j].comment);
! struct string *s = make_surface_addr(TMP[j]);
! add_textual_addr_(&(headers->bcc),s,pos,1);
! free_string(&s);
! }
free_addr_items(TMP);
--- 481,487 ----
if (replace)
free_expanded_address(&(headers->bcc));
! expanded_address_from_items(&(headers->bcc), TMP);
free_addr_items(TMP);
***************
*** 530,544 ****
if (replace)
free_expanded_address(&(headers->reply_to));
! for (j = 0; TMP[j].addr && TMP[j].fullname; j++) {
! int pos = add_expanded_addr_(&(headers->reply_to),
! TMP[j].addr,
! TMP[j].fullname,
! TMP[j].comment);
! struct string *s = make_surface_addr(TMP[j]);
! add_textual_addr_(&(headers->reply_to),s,pos,1);
! free_string(&s);
! }
free_addr_items(TMP);
--- 510,516 ----
if (replace)
free_expanded_address(&(headers->reply_to));
! expanded_address_from_items(&(headers->reply_to), TMP);
free_addr_items(TMP);
***************
*** 694,721 ****
l,"",ptr-expanded.surface, ptr->pos, LASTPOS+1));
}
for (j = 0; j < ptr->len; j++) {
! if (ptr->pos < 0 || ptr->pos >= expanded.addrs_len) {
DPRINT(Debug,debuglevel,
(&Debug,
"%*s %d [%d] ERROR, not range 0 - %d\n",
l,"",j,ptr->pos,
expanded.addrs_len-1));
} else {
! CONST struct addr_item *ptr1 = & (expanded.addrs[ptr->pos]);
if (!ptr1->addr || !ptr1->fullname || !ptr1->comment) {
DPRINT(Debug,debuglevel,
(&Debug,
"%*s %d [%d] ERROR! NULL element!\n",
! l,"",j,ptr->pos));
} else {
DPRINT(Debug,debuglevel,
(&Debug,
"%*s %d [%d] addr=%s \tfullname=%S\tcomment=%S\n",
! l,"",j,ptr->pos,
ptr1->addr,ptr1->fullname,
ptr1->comment));
}
! LASTPOS = ptr->pos;
}
}
}
--- 666,693 ----
l,"",ptr-expanded.surface, ptr->pos, LASTPOS+1));
}
for (j = 0; j < ptr->len; j++) {
! if (ptr->pos+j < 0 || ptr->pos+j >= expanded.addrs_len) {
DPRINT(Debug,debuglevel,
(&Debug,
"%*s %d [%d] ERROR, not range 0 - %d\n",
l,"",j,ptr->pos,
expanded.addrs_len-1));
} else {
! CONST struct addr_item *ptr1 = & (expanded.addrs[ptr->pos+j]);
if (!ptr1->addr || !ptr1->fullname || !ptr1->comment) {
DPRINT(Debug,debuglevel,
(&Debug,
"%*s %d [%d] ERROR! NULL element!\n",
! l,"",j,ptr->pos+j));
} else {
DPRINT(Debug,debuglevel,
(&Debug,
"%*s %d [%d] addr=%s \tfullname=%S\tcomment=%S\n",
! l,"",j,ptr->pos+j,
ptr1->addr,ptr1->fullname,
ptr1->comment));
}
! LASTPOS = ptr->pos+j;
}
}
}
Index: elm2.4.ME+.117-cvs/lib/rc_handle.c
*** elm2.4.ME+.116/lib/rc_handle.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/rc_handle.c 2004-06-18 12:29:50.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.24 2004/05/01 19:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: rc_handle.c,v 1.27 2004/06/18 09:29:50 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
****************************************************************************
***************
*** 23,69 ****
DEBUG_VAR(Debug,__FILE__,"config");
- int valid_rc_type(T)
- struct rc_type *T;
- {
- int i;
-
- if (&rc_DT_SYN == T ||
- &rc_DT_STR == T ||
- &rc_DT_NUM == T ||
- &rc_DT_BOL == T ||
- &rc_DT_CHR == T ||
- &rc_DT_SRT == T ||
- &rc_DT_MLT == T ||
- &rc_DT_ASR == T ||
- &rc_DT_PRM == T ||
- &rc_DT_FUNC == T ||
- &rc_DT_LONG == T ||
- #ifdef USE_PGP
- &rc_DT_PGPVER == T ||
- #endif
- #ifdef USE_DLOPEN
- &rc_DT_SHARED == T ||
- #endif
- &rc_DT_PATH == T ||
- &rc_DT_OBS == T
- ) {
- return 1;
- }
-
- #ifdef USE_DLOPEN
- for (i = 0; i < shared_RC_type_count; i++)
- if (shared_RC_types[i].T == T)
- return 1;
- #endif
-
- DPRINT(Debug,1,(&Debug,
- "valid_rc_type=0: type=%p (magic)\n",
- T));
-
- return 0;
- }
-
#ifdef ANSI_C
static rc_parse_line dt_SYN_parse_line;
#endif
--- 23,28 ----
***************
*** 127,133 ****
return "*bad*";
}
! struct rc_type rc_DT_SYN = { dt_SYN_parse_line, BAD_parse_cline,
NO_print_value, NO_get_value };
#ifdef ANSI_C
--- 86,93 ----
return "*bad*";
}
! struct rc_type rc_DT_SYN = { RCTYPE_magic,
! dt_SYN_parse_line, BAD_parse_cline,
NO_print_value, NO_get_value };
#ifdef ANSI_C
***************
*** 211,217 ****
}
! struct rc_type rc_DT_STR = { dt_STR_parse_line, BAD_parse_cline,
dt_STR_print_value, dt_STR_get_value };
#ifdef ANSI_C
--- 171,178 ----
}
! struct rc_type rc_DT_STR = { RCTYPE_magic,
! dt_STR_parse_line, BAD_parse_cline,
dt_STR_print_value, dt_STR_get_value };
#ifdef ANSI_C
***************
*** 298,304 ****
}
! struct rc_type rc_DT_NUM = { dt_NUM_parse_line, BAD_parse_cline,
dt_NUM_print_value, dt_NUM_get_value };
#ifdef ANSI_C
--- 259,266 ----
}
! struct rc_type rc_DT_NUM = { RCTYPE_magic,
! dt_NUM_parse_line, BAD_parse_cline,
dt_NUM_print_value, dt_NUM_get_value };
#ifdef ANSI_C
***************
*** 361,367 ****
return *r->val.bol ? "ON" : "OFF";
}
! struct rc_type rc_DT_BOL = { dt_BOL_parse_line, BAD_parse_cline,
dt_BOL_print_value, dt_BOL_get_value };
#ifdef ANSI_C
--- 323,330 ----
return *r->val.bol ? "ON" : "OFF";
}
! struct rc_type rc_DT_BOL = { RCTYPE_magic,
! dt_BOL_parse_line, BAD_parse_cline,
dt_BOL_print_value, dt_BOL_get_value };
#ifdef ANSI_C
***************
*** 419,425 ****
return buffer;
}
! struct rc_type rc_DT_CHR = { dt_CHR_parse_line, BAD_parse_cline,
dt_CHR_print_value, dt_CHR_get_value };
static struct {
--- 382,389 ----
return buffer;
}
! struct rc_type rc_DT_CHR = { RCTYPE_magic,
! dt_CHR_parse_line, BAD_parse_cline,
dt_CHR_print_value, dt_CHR_get_value };
static struct {
***************
*** 525,531 ****
dt_SRT_get_value(r));
}
! struct rc_type rc_DT_SRT = { dt_SRT_parse_line, BAD_parse_cline,
dt_SRT_print_value, dt_SRT_get_value };
#ifdef ANSI_C
--- 489,496 ----
dt_SRT_get_value(r));
}
! struct rc_type rc_DT_SRT = { RCTYPE_magic,
! dt_SRT_parse_line, BAD_parse_cline,
dt_SRT_print_value, dt_SRT_get_value };
#ifdef ANSI_C
***************
*** 558,564 ****
return ok;
}
! struct rc_type rc_DT_MLT = { dt_MLT_parse_line, BAD_parse_cline,
NO_print_value, NO_get_value };
static struct {
--- 523,530 ----
return ok;
}
! struct rc_type rc_DT_MLT = { RCTYPE_magic,
! dt_MLT_parse_line, BAD_parse_cline,
NO_print_value, NO_get_value };
static struct {
***************
*** 655,661 ****
fprintf(F, "%s = %s\n", r->name, dt_ASR_get_value(r));
}
! struct rc_type rc_DT_ASR = { dt_ASR_parse_line, BAD_parse_cline,
dt_ASR_print_value, dt_ASR_get_value };
#ifdef ANSI_C
--- 621,628 ----
fprintf(F, "%s = %s\n", r->name, dt_ASR_get_value(r));
}
! struct rc_type rc_DT_ASR = { RCTYPE_magic,
! dt_ASR_parse_line, BAD_parse_cline,
dt_ASR_print_value, dt_ASR_get_value };
#ifdef ANSI_C
***************
*** 733,739 ****
return mode_to_str(*(r->val.num));
}
! struct rc_type rc_DT_PRM = { dt_PRM_parse_line, BAD_parse_cline,
dt_PRM_print_value, dt_PRM_get_value };
#ifdef ANSI_C
--- 700,707 ----
return mode_to_str(*(r->val.num));
}
! struct rc_type rc_DT_PRM = { RCTYPE_magic,
! dt_PRM_parse_line, BAD_parse_cline,
dt_PRM_print_value, dt_PRM_get_value };
#ifdef ANSI_C
***************
*** 798,804 ****
}
! struct rc_type rc_DT_FUNC = { dt_FUNC_parse_line, BAD_parse_cline,
dt_FUNC_print_value, dt_FUNC_get_value };
#ifdef ANSI_C
--- 766,773 ----
}
! struct rc_type rc_DT_FUNC = { RCTYPE_magic,
! dt_FUNC_parse_line, BAD_parse_cline,
dt_FUNC_print_value, dt_FUNC_get_value };
#ifdef ANSI_C
***************
*** 859,865 ****
}
! struct rc_type rc_DT_LONG = { dt_LONG_parse_line, BAD_parse_cline,
dt_LONG_print_value, dt_LONG_get_value };
#ifdef USE_PGP
--- 828,835 ----
}
! struct rc_type rc_DT_LONG = { RCTYPE_magic,
! dt_LONG_parse_line, BAD_parse_cline,
dt_LONG_print_value, dt_LONG_get_value };
#ifdef USE_PGP
***************
*** 922,928 ****
return "*bad*";
}
! struct rc_type rc_DT_PGPVER = { dt_PGPVER_parse_line, BAD_parse_cline,
dt_PGPVER_print_value, dt_PGPVER_get_value };
#endif
--- 892,899 ----
return "*bad*";
}
! struct rc_type rc_DT_PGPVER = { RCTYPE_magic,
! dt_PGPVER_parse_line, BAD_parse_cline,
dt_PGPVER_print_value, dt_PGPVER_get_value };
#endif
***************
*** 1446,1451 ****
--- 1417,1425 ----
fprintf(F, "%s = ",r->name);
for (i = 0; i < r->val.path->nlen; i++) {
+ /* NOTE: space is always valid separator even when
+ PATH_sep_comma or PATH_sep_colon is set */
+
if (i > 0) {
if (len + strlen(r->val.path->list[i]) > 70) {
fprintf(F, "\n");
***************
*** 1458,1464 ****
}
if (r->val.path->flags & PATH_quote)
! elm_fprintf(F,FRM("Q"),r->val.path->list[i]);
else if (r->val.path->flags & PATH_quote_single) {
fputc('\'',F);
fputs(r->val.path->list[i],F);
--- 1432,1438 ----
}
if (r->val.path->flags & PATH_quote)
! elm_fprintf(F,FRM("%Q"),r->val.path->list[i]);
else if (r->val.path->flags & PATH_quote_single) {
fputc('\'',F);
fputs(r->val.path->list[i],F);
***************
*** 1471,1477 ****
}
}
! struct rc_type rc_DT_PATH = { dt_PATH_parse_line, dt_PATH_parse_cline,
dt_PATH_print_value, NO_get_value };
--- 1445,1452 ----
}
}
! struct rc_type rc_DT_PATH = { RCTYPE_magic,
! dt_PATH_parse_line, dt_PATH_parse_cline,
dt_PATH_print_value, NO_get_value };
***************
*** 1498,1508 ****
}
! struct rc_type rc_DT_OBS = { dt_OBS_parse_line, BAD_parse_cline,
NO_print_value, NO_get_value };
/*
* Local Variables:
* mode:c
--- 1473,1613 ----
}
! struct rc_type rc_DT_OBS = { RCTYPE_magic,
! dt_OBS_parse_line, BAD_parse_cline,
NO_print_value, NO_get_value };
+ /*
+ 0 == failure
+ 1 == succeed
+ */
+
+ int expand_dt_estr(ptr,fieldname,val)
+ struct dt_estr_info *ptr;
+ char *fieldname;
+ char *val;
+ {
+ char buffer[1024];
+
+ int x;
+
+ if (ptr->flags & ESTR_meta)
+ x = expand_meta(buffer, ptr->unexpanded, sizeof buffer);
+ else
+ x = expand_env(buffer, ptr->unexpanded, sizeof buffer);
+
+ if (x != 0) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet,
+ ElmBadVariableInElmrc,
+ "Bad variable on key \"%s\" value \"%s\""),
+ fieldname,val);
+ return 0;
+ }
+
+ ptr->expanded = strmcpy(ptr->expanded,buffer);
+
+ return 1;
+ }
+
+ char * give_dt_estr_as_str(ptr,fieldname)
+ struct dt_estr_info *ptr;
+ char * fieldname;
+ {
+ if (!ptr->expanded && ptr->unexpanded)
+ expand_dt_estr(ptr,fieldname,ptr->unexpanded);
+
+ return ptr->expanded;
+ }
+
+ /* Set initial value */
+ extern void set_dt_estr(ptr, const_val, def_env)
+ struct dt_estr_info *ptr;
+ CONST char *const_val;
+ char *def_env;
+ {
+ char *cp;
+
+ if (def_env &&
+ (cp = getenv(def_env)) &&
+ cp[0]) {
+ char *x = elm_message(FRM("$%s"),def_env);
+
+ ptr->unexpanded = strmcpy(ptr->unexpanded,x);
+ ptr->expanded = strmcpy(ptr->expanded,cp);
+
+ free(x);
+ } else {
+ ptr->unexpanded = strmcpy(ptr->unexpanded,const_val);
+ ptr->expanded = strmcpy(ptr->expanded,const_val);
+ }
+ }
+
+
+ #ifdef ANSI_C
+ static rc_parse_line dt_ESTR_parse_line;
+ #endif
+ static int dt_ESTR_parse_line(r,lcl,value,lineno,filename, e_val, negate)
+ struct rc_save_info_rec *r;
+ int lcl;
+ char *value;
+ int lineno;
+ char *filename;
+ int e_val;
+ int negate;
+ {
+ if (negate) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmBadNegate,
+ "!%s is not supported in line %d in \"%s\" file"),
+ r->name,lineno,filename);
+ return 0;
+ }
+
+ r->val.estr->unexpanded = strmcpy(r->val.estr->unexpanded,value);
+
+ /* Free old value */
+ if (r->val.estr->expanded) {
+ free(r->val.estr->expanded);
+ r->val.estr->expanded = NULL;
+ }
+
+ return 1;
+ }
+
+ #if ANSI_C
+ static rc_get_value dt_ESTR_get_value;
+ #endif
+ static char * dt_ESTR_get_value(r)
+ struct rc_save_info_rec *r;
+ {
+ return r->val.estr->unexpanded;
+ }
+
+ #if ANSI_C
+ static rc_print_value dt_ESTR_print_value;
+ #endif
+ static void dt_ESTR_print_value(F,r,comment)
+ FILE *F;
+ struct rc_save_info_rec *r;
+ int comment;
+ {
+ if (r->val.estr->unexpanded) {
+ if (comment)
+ fprintf(F, "### ");
+ fprintf(F, "%s = %s\n", r->name, r->val.estr->unexpanded);
+ } else {
+ fprintf(F, "### %s (not set)\n", r->name);
+ }
+ }
+
+ struct rc_type rc_DT_ESTR = { RCTYPE_magic,
+ dt_ESTR_parse_line, BAD_parse_cline,
+ dt_ESTR_print_value, dt_ESTR_get_value };
+
+
+
+
/*
* Local Variables:
* mode:c
Index: elm2.4.ME+.117-cvs/lib/read_rc.c
*** elm2.4.ME+.116/lib/read_rc.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/read_rc.c 2004-06-27 18:18:05.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.136 2004/05/01 19:08:19 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.136 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: read_rc.c,v 1.141 2004/06/27 15:18:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.141 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 109,118 ****
char user_terminal_info[SLEN] = USER_TERMINAL_INFO; /* user_init fixes */
char user_mail_services[SLEN] = USER_MAIL_SERVICES; /* user_init fixes */
! char defaultfile[SLEN] = {0}; /* name of default folder */
! char raw_defaultfile[SLEN] = "$MAIL"; /* init_defaults fixes */
! char calendar_file[SLEN] = {0}; /* name of file for clndr */
! char raw_calendar_file[SLEN] = {0}; /* unexpanded name of file for clndr */
int clear_pages = 0; /* flag: act like "page" (more -c)? */
int title_messages = 1; /* flag: title message display? */
--- 109,126 ----
char user_terminal_info[SLEN] = USER_TERMINAL_INFO; /* user_init fixes */
char user_mail_services[SLEN] = USER_MAIL_SERVICES; /* user_init fixes */
! ESTR defaultfile_e = { /* name of default folder */
! 0,
! NULL,
! NULL
! };
!
! ESTR calendar_file_e = { /* name of file for clndr */
! 0,
! NULL,
! NULL
! };
!
int clear_pages = 0; /* flag: act like "page" (more -c)? */
int title_messages = 1; /* flag: title message display? */
***************
*** 143,149 ****
int alias_sortby = NAME_SORT; /* how to sort aliases... */
char alternative_editor[SLEN] = "EDITOR"; /* alternative editor... */
PATH alternative_addresses = { /* how else do we get mail? */
! PATH_sep_comma|PATH_quote|PATH_quote_single,
NULL, 0,NULL
};
--- 151,157 ----
int alias_sortby = NAME_SORT; /* how to sort aliases... */
char alternative_editor[SLEN] = "EDITOR"; /* alternative editor... */
PATH alternative_addresses = { /* how else do we get mail? */
! PATH_sep_comma,
NULL, 0,NULL
};
***************
*** 159,164 ****
--- 167,174 ----
1 = text/plain
2 = text/x-pgp
*/
+ int pgp_interactive=0; /* Should pgp/gpg encryption/signing to be
+ run always on interactive mode */
enum pgp_version send_pgp_version = pgp_none; /* preferred pgp version*/
#endif
char attribution[SLEN] = {0}; /* attribution string for replies */
***************
*** 208,219 ****
/* the wanted display charset set */
int DSN_success = 0; /* flag: Ask successfull DSNes */
char e_editor[SLEN] = {0}; /* "~e" editor... */
! char editor[SLEN] = {0}; /* editor for outgoing mail*/
int env_from_source = 0; /* 0 == forward-from,
1 == from,
2 == return-path
*/
! char raw_editor[SLEN] = {0}; /* unexpanded editor for outgoing mail*/
char escape_char = TILDE_ESCAPE;/* '~' or something else.. */
int force_name = 0; /* flag: save by name forced? */
int fragment_handling = 1; /* 0 == none,
--- 218,235 ----
/* the wanted display charset set */
int DSN_success = 0; /* flag: Ask successfull DSNes */
char e_editor[SLEN] = {0}; /* "~e" editor... */
!
! ESTR editor_e = { /* editor for outgoing mail*/
! 0,
! NULL,
! NULL
! };
!
int env_from_source = 0; /* 0 == forward-from,
1 == from,
2 == return-path
*/
!
char escape_char = TILDE_ESCAPE;/* '~' or something else.. */
int force_name = 0; /* flag: save by name forced? */
int fragment_handling = 1; /* 0 == none,
***************
*** 246,253 ****
char raw_local_fs_charset[SLEN] = "SYSTEM"; /* filesystem charset */
charset_t local_fs_charset = NULL; /* filesystem charset */
! char local_signature[SLEN] = {0}; /* local msg signature file */
! char raw_local_signature[SLEN] = {0}; /* unexpanded local msg */
/* signature file */
#ifdef SYSCALL_LOCKING
int lockfolders = 1; /* Lock folder when open */
--- 262,272 ----
char raw_local_fs_charset[SLEN] = "SYSTEM"; /* filesystem charset */
charset_t local_fs_charset = NULL; /* filesystem charset */
! ESTR local_signature_e = { /* local msg signature file */
! 0,
! NULL,
! NULL
! };
/* signature file */
#ifdef SYSCALL_LOCKING
int lockfolders = 1; /* Lock folder when open */
***************
*** 291,296 ****
--- 310,316 ----
int mime_body_keywords = TRUE; /* flag: parse body looking for encode */
/* keywords */
int mimeforward = FALSE; /* flag: Forward as Message/rfc822 */
+ int askmimeforward = 1; /* flag: prompt about messaga/rfc822 forward */
int move_when_paged = 0; /* flag: move when '+' or '-' used? */
int names_only = 1; /* flag: display user names only? */
int allow_no_encoding = 0; /* 1: Allow 8bit without -B8BITMIME */
***************
*** 305,310 ****
--- 325,335 ----
int page_known_charsets=1; /* Page if charset is not unknown? */
int pagemultipart=0; /* Page unknown mime subparts? */
int pagesigned=0; /* Page unknown signed protocols? */
+ ESTR pager_e = { /* what pager to use */
+ 0,
+ NULL,
+ NULL
+ };
char pager[SLEN] = {0}; /* what pager to use */
char raw_pager[SLEN] = {0}; /* unexpanded what pager to use */
#ifdef USE_PGP
***************
*** 328,345 ****
int readdatapercentinc = 5; /* data percent increment during new mbox read */
int readmsginc = 100; /* increment of msg cnt when reading*/
/* new mbox */
! char recvd_mail[SLEN] = {0}; /* folder for storing received mail */
! char raw_recvdmail[SLEN] = {0}; /* unexpanded recvd_mail name */
! char remote_signature[SLEN] = {0}; /* remote msg signature file */
! char raw_remote_signature[SLEN] = {0}; /* unexpanded remote msg */
! /* signature file */
int req_mime_bodyencoding = 1; /* */
int req_mime_hdrencoding = 0; /* */
int resolve_mode = 1; /* flag: delete saved mail? */
int save_by_name = 1; /* flag: save mail by login name? */
! char sent_mail[SLEN] = {0}; /* name of file to save copies to */
int send_mime_plain = 1; /* flag: send plain text as MIME? */
- char raw_sentmail[SLEN] = {0}; /* unexpanded name of file to save to*/
char shell[SLEN] = {0}; /* current system shell */
char raw_shell[SLEN] = {0}; /* unexpanded current system shell */
int set_window_title = 0; /* flag: set (xterm?) window title and
--- 353,381 ----
int readdatapercentinc = 5; /* data percent increment during new mbox read */
int readmsginc = 100; /* increment of msg cnt when reading*/
/* new mbox */
! ESTR recvd_mail_e = { /* folder for storing received mail */
! ESTR_meta,
! NULL,
! NULL
! };
!
! ESTR remote_signature_e = { /* remote msg signature file */
! 0,
! NULL,
! NULL
! };
int req_mime_bodyencoding = 1; /* */
int req_mime_hdrencoding = 0; /* */
int resolve_mode = 1; /* flag: delete saved mail? */
int save_by_name = 1; /* flag: save mail by login name? */
!
! ESTR sent_mail_e = { /* name of file to save copies to */
! ESTR_meta,
! NULL,
! NULL
! };
!
int send_mime_plain = 1; /* flag: send plain text as MIME? */
char shell[SLEN] = {0}; /* current system shell */
char raw_shell[SLEN] = {0}; /* unexpanded current system shell */
int set_window_title = 0; /* flag: set (xterm?) window title and
***************
*** 1114,1136 ****
* First look for an environment variable MAIL, then
* use then mailhome if it is not found
*/
- if ((cp = getenv("MAIL")) == NULL) {
- elm_sfprintf(defaultfile, sizeof defaultfile,
- FRM("%s%s"), mailhome, username);
- elm_sfprintf(raw_defaultfile, sizeof raw_defaultfile,
- FRM("%s%s"), mailhome, username);
-
- } else {
- strfcpy(raw_defaultfile, "$MAIL", sizeof raw_defaultfile);
- strfcpy(defaultfile, cp, sizeof defaultfile);
- }
! raw_local_signature[0] = raw_remote_signature[0] =
! local_signature[0] = remote_signature[0] =
! raw_recvdmail[0] = raw_sentmail[0] =
! allowed_precedences[0] = '\0';
/* no defaults for those */
!
if (NULL != (cp = getenv("SHELL")) && '\0' != cp[0]) {
strfcpy(raw_shell, "$SHELL", sizeof raw_shell);
do_expand_env("shell", shell, raw_shell, sizeof(shell));
--- 1150,1165 ----
* First look for an environment variable MAIL, then
* use then mailhome if it is not found
*/
! {
! char *X = elm_message(FRM("%s%s"), mailhome, username);
! set_dt_estr(&defaultfile_e,X,"MAIL");
! free(X);
! }
!
! allowed_precedences[0] = '\0';
/* no defaults for those */
!
if (NULL != (cp = getenv("SHELL")) && '\0' != cp[0]) {
strfcpy(raw_shell, "$SHELL", sizeof raw_shell);
do_expand_env("shell", shell, raw_shell, sizeof(shell));
***************
*** 1140,1151 ****
}
#ifdef USE_BUILTIN_PAGER
! strfcpy(raw_pager,"builtin++", sizeof raw_pager);
! strfcpy(pager,"builtin++", sizeof pager);
#else
! strfcpy(raw_pager, ((cp = getenv("PAGER")) == NULL)? default_pager : cp,
! sizeof raw_pager);
! do_expand_env("pager", pager, raw_pager, sizeof(pager));
#endif
strfcpy(raw_temp_dir, (cp = getenv("TMPDIR")) ? cp : default_temp,
--- 1169,1177 ----
}
#ifdef USE_BUILTIN_PAGER
! set_dt_estr(&pager_e, "builtin++", NULL);
#else
! set_dt_estr(&pager_e,default_pager,"PAGER");
#endif
strfcpy(raw_temp_dir, (cp = getenv("TMPDIR")) ? cp : default_temp,
***************
*** 1156,1169 ****
temp_dir[strlen (temp_dir)-1] != '/')
strfcat(temp_dir, "/", sizeof temp_dir);
! if ((cp = getenv("EDITOR")) != NULL && '\0' != cp[0]) {
! strfcpy(raw_editor, "$EDITOR", sizeof raw_editor);
! strfcpy(editor, cp, sizeof editor);
! } else {
! strfcpy(raw_editor, default_editor, sizeof raw_editor);
! do_expand_env("editor", editor, raw_editor, sizeof(editor));
! }
!
if ((cp = getenv("MAILCAPS")) == NULL) {
/* RFC 1524:
--- 1182,1188 ----
temp_dir[strlen (temp_dir)-1] != '/')
strfcat(temp_dir, "/", sizeof temp_dir);
! set_dt_estr(&editor_e,default_editor,"EDITOR");
if ((cp = getenv("MAILCAPS")) == NULL) {
/* RFC 1524:
***************
*** 1235,1244 ****
do_expand_meta("map-bin-dir", map_bindir, raw_map_bindir,
sizeof(map_bindir));
! elm_sfprintf(raw_calendar_file, sizeof raw_calendar_file,
! FRM("~/%s"), dflt_calendar_file);
! do_expand_env("calendar_file", calendar_file, raw_calendar_file,
! sizeof(calendar_file));
strfcpy(e_editor, emacs_editor, sizeof e_editor);
strfcpy(v_editor, default_editor, sizeof v_editor);
--- 1254,1261 ----
do_expand_meta("map-bin-dir", map_bindir, raw_map_bindir,
sizeof(map_bindir));
! calendar_file_e.unexpanded =
! elm_message(FRM("~/%s"), dflt_calendar_file);
strfcpy(e_editor, emacs_editor, sizeof e_editor);
strfcpy(v_editor, default_editor, sizeof v_editor);
***************
*** 1247,1255 ****
FRM("%s/%s"), home, default_folders);
strfcpy(folders, raw_folders, sizeof folders);
- elm_sfprintf(raw_calendar_file, sizeof raw_calendar_file,
- FRM("%s/%s"), home, dflt_calendar_file);
- strfcpy(calendar_file, raw_calendar_file, sizeof calendar_file);
/* try system-wide rc file */
file = fopen(system_rc_file, "r");
--- 1264,1269 ----
***************
*** 1373,1379 ****
"Setting (wanted) display-charset to %s instead.\n",
wanted_display_charset->MIME_name ?
wanted_display_charset->MIME_name :
! "<no MIME name"));
}
if (!text_charset || !text_charset->MIME_name) {
text_charset = ASCII_SET;
--- 1387,1393 ----
"Setting (wanted) display-charset to %s instead.\n",
wanted_display_charset->MIME_name ?
wanted_display_charset->MIME_name :
! "<no MIME name>"));
}
if (!text_charset || !text_charset->MIME_name) {
text_charset = ASCII_SET;
***************
*** 1477,1488 ****
}
void post_init_check(int flag) {
do_expand_env("folders", folders, raw_folders, sizeof(folders));
do_expand_env("extra-mailbox-dir", extra_mailbox_dir,
raw_extra_mailbox_dir, sizeof(extra_mailbox_dir));
!
if (raw_extra_mailbox_dir[0] &&
0 == strcmp(extra_mailbox_dir,folders)) {
errors++;
--- 1491,1503 ----
}
void post_init_check(int flag) {
+ char *t;
do_expand_env("folders", folders, raw_folders, sizeof(folders));
do_expand_env("extra-mailbox-dir", extra_mailbox_dir,
raw_extra_mailbox_dir, sizeof(extra_mailbox_dir));
!
if (raw_extra_mailbox_dir[0] &&
0 == strcmp(extra_mailbox_dir,folders)) {
errors++;
***************
*** 1510,1529 ****
strfcpy(temp_dir,"/tmp/", sizeof temp_dir);
else if (temp_dir[strlen (temp_dir)-1] != '/')
strfcat(temp_dir, "/", sizeof temp_dir);
!
! do_expand_env("incoming-mailbox",
! defaultfile, raw_defaultfile,
! sizeof(defaultfile));
!
if (raw_shell[0] != '\0') {
/* shell is taken from /etc/passwd in initialize() */
do_expand_env("shell", shell, raw_shell, sizeof(shell));
}
! do_expand_env("editor", editor, raw_editor, sizeof(editor));
!
! do_expand_env("calendar_file", calendar_file, raw_calendar_file,
! sizeof(calendar_file));
!
if (strcmp(raw_printout,"none") == 0 ||
raw_printout[0] == '\0') {
strfcpy(raw_printout,"none", sizeof raw_printout);
--- 1525,1536 ----
strfcpy(temp_dir,"/tmp/", sizeof temp_dir);
else if (temp_dir[strlen (temp_dir)-1] != '/')
strfcat(temp_dir, "/", sizeof temp_dir);
!
if (raw_shell[0] != '\0') {
/* shell is taken from /etc/passwd in initialize() */
do_expand_env("shell", shell, raw_shell, sizeof(shell));
}
!
if (strcmp(raw_printout,"none") == 0 ||
raw_printout[0] == '\0') {
strfcpy(raw_printout,"none", sizeof raw_printout);
***************
*** 1531,1561 ****
} else {
do_expand_env("printout", printout, raw_printout, sizeof(printout));
}
!
! do_expand_env("pager", pager, raw_pager, sizeof(pager));
! if (equal(pager, "builtin+") || equal(pager, "internal+"))
! clear_pages++;
!
! do_expand_env("local_signature", local_signature,
! raw_local_signature, sizeof(local_signature));
! do_expand_env("remote_signature", remote_signature,
! raw_remote_signature, sizeof(remote_signature));
!
! if (equal(local_signature, remote_signature) &&
! (equal(shift_lower(local_signature), "on") ||
! equal(shift_lower(local_signature), "off"))) {
! errors++;
!
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmSignatureObsolete,
! "\"signature\" used in obsolete way in .elm/elmrc file. Ignored!\n\
! \t(Signature should specify the filename to use rather than on/off.)"));
!
! raw_local_signature[0] = raw_remote_signature[0] =
! local_signature[0] = remote_signature[0] = '\0';
! }
!
!
!
allow_forms = (allow_forms?MAYBE:NO);
if ((elm_timeout != 0) && (elm_timeout < 10)) {
--- 1538,1544 ----
} else {
do_expand_env("printout", printout, raw_printout, sizeof(printout));
}
!
allow_forms = (allow_forms?MAYBE:NO);
if ((elm_timeout != 0) && (elm_timeout < 10)) {
***************
*** 1601,1623 ****
* Then if they begin with a metacharacter, replace it with the
* folders directory name.
*/
! if(*raw_recvdmail == '\0') {
! strfcpy(raw_recvdmail, default_recvdmail,
! sizeof raw_recvdmail);
}
! do_expand_meta("recvd_mail", recvd_mail, raw_recvdmail,
! sizeof(recvd_mail));
!
! if(*raw_sentmail == '\0') {
! strfcpy(raw_sentmail, default_sentmail, sizeof raw_sentmail);
! strfcpy(sent_mail, default_sentmail, sizeof sent_mail);
}
- do_expand_meta("sent_mail", sent_mail, raw_sentmail,
- sizeof(sent_mail));
-
-
expand_map_bin("unidata", unidata_path, raw_unidata_path,
sizeof(unidata_path));
--- 1584,1597 ----
* Then if they begin with a metacharacter, replace it with the
* folders directory name.
*/
! if(!recvd_mail_e.unexpanded) {
! recvd_mail_e.unexpanded = safe_strdup(default_recvdmail);
}
! if(!sent_mail_e.unexpanded) {
! sent_mail_e.unexpanded = safe_strdup(default_sentmail);
}
expand_map_bin("unidata", unidata_path, raw_unidata_path,
sizeof(unidata_path));
***************
*** 2001,2007 ****
} else if (!keyword[0]) {
if (prev_type != NULL) {
! if (!valid_rc_type(prev_type->dt_type))
panic("RC PANIC",__FILE__,__LINE__,"do_rc",
"Bad prev_type",0);
--- 1975,1981 ----
} else if (!keyword[0]) {
if (prev_type != NULL) {
! if (RCTYPE_magic != prev_type->dt_type->magic)
panic("RC PANIC",__FILE__,__LINE__,"do_rc",
"Bad prev_type",0);
***************
*** 2159,2175 ****
} else
e_val = 0;
! if (!valid_rc_type(rc_options[x].dt_type))
panic("RC PANIC",__FILE__,__LINE__,"do_set",
"Bad config item type",0);
if (!rc_options[x].dt_type->parse_line(& (rc_options[x]),
! lcl,
! word2,
! lineno,
! filename,
! e_val,
! negate))
errors++;
return & (rc_options[x]);
--- 2133,2149 ----
} else
e_val = 0;
! if (RCTYPE_magic != rc_options[x].dt_type->magic)
panic("RC PANIC",__FILE__,__LINE__,"do_set",
"Bad config item type",0);
if (!rc_options[x].dt_type->parse_line(& (rc_options[x]),
! lcl,
! word2,
! lineno,
! filename,
! e_val,
! negate))
errors++;
return & (rc_options[x]);
Index: elm2.4.ME+.117-cvs/lib/savefolder.c
*** elm2.4.ME+.116/lib/savefolder.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/savefolder.c 2004-06-18 12:29:50.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.76 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: savefolder.c,v 1.77 2004/06/18 09:29:50 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.77 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 328,364 ****
BROWSER_NOFOLDER);
}
! /* Incoming mailbox (may also be IMAP mailbox) */
! if (defaultfile[0]) {
! /* WARNING: add_dir_vector does not allocate strings --
! * it just assign pointers!
! */
! add_dir_vector(dir,
! safe_strdup(defaultfile),
! new_string2(system_charset,s2us("!")),
! BROWSER_NODIR);
! }
! /* ">" -- usually =received folder */
! if (recvd_mail[0]) {
! /* WARNING: add_dir_vector does not allocate strings --
! * it just assign pointers!
! */
! add_dir_vector(dir,
! safe_strdup(recvd_mail),
! new_string2(system_charset,s2us(">")),
! BROWSER_NODIR);
}
! /* "<" -- usually =sent folder */
! if (sent_mail[0]) {
! /* WARNING: add_dir_vector does not allocate strings --
! * it just assign pointers!
! */
! add_dir_vector(dir,
! safe_strdup(sent_mail),
! new_string2(system_charset,s2us("<")),
! BROWSER_NODIR);
}
break;
--- 328,376 ----
BROWSER_NOFOLDER);
}
! {
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
! /* Incoming mailbox (may also be IMAP mailbox) */
! if (default_val) {
! /* WARNING: add_dir_vector does not allocate strings --
! * it just assign pointers!
! */
! add_dir_vector(dir,
! safe_strdup(default_val),
! new_string2(system_charset,s2us("!")),
! BROWSER_NODIR);
! }
}
! {
! char * recvd_val = give_dt_estr_as_str(&recvd_mail_e,"receivedmail");
!
! /* ">" -- usually =received folder */
! if (recvd_val) {
! /* WARNING: add_dir_vector does not allocate strings --
! * it just assign pointers!
! */
! add_dir_vector(dir,
! safe_strdup(recvd_val),
! new_string2(system_charset,s2us(">")),
! BROWSER_NODIR);
! }
! }
!
! {
! char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
!
! /* "<" -- usually =sent folder */
! if (sent_val) {
! /* WARNING: add_dir_vector does not allocate strings --
! * it just assign pointers!
! */
! add_dir_vector(dir,
! safe_strdup(sent_val),
! new_string2(system_charset,s2us("<")),
! BROWSER_NODIR);
! }
}
break;
***************
*** 2793,2842 ****
*/
! case 0x0021: /* '!' incoming mailbox */
! ret = tail_expander(dir,buffer,1,defaultfile,
! relative_to_type);
! if (ret && dir->sel_type == selection_file) {
! if (*relative_to_type && 0 < string_len(*relative_to_type))
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile1,
! "Name %S (expands to %s, %S) is unsafe use as file"),
! *buffer, defaultfile, *relative_to_type);
! else
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile2,
! "Name %S (expands to %s) is unsafe use as file"),
! *buffer, defaultfile);
ret = 0;
}
break;
! case 0x003E: /* '>' received folder */
! ret = tail_expander(dir,buffer,1,recvd_mail,
! relative_to_type);
! if (ret && dir->sel_type == selection_file) {
! if (relative_to_type && 0 < string_len(*relative_to_type))
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile1,
! "Name %S (expands to %s, %S) is unsafe use as file"),
! *buffer, recvd_mail, *relative_to_type);
! else
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile2,
! "Name %S (expands to %s) is unsafe use as file"),
! *buffer, recvd_mail);
! ret = 0;
}
break;
! case 0x003C: /* '<' sent folder */
! ret = tail_expander(dir,buffer,1,sent_mail,
! relative_to_type);
! if (ret && dir->sel_type == selection_file) {
! if (*relative_to_type && 0 < string_len(*relative_to_type))
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile1,
! "Name %S (expands to %s, %S) is unsafe use as file"),
! *buffer, sent_mail, *relative_to_type);
! else
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile2,
! "Name %S (expands to %s) is unsafe use as file"),
! *buffer, sent_mail);
! ret = 0;
}
break;
default:
--- 2805,2882 ----
*/
! case 0x0021: {
! /* '!' incoming mailbox */
!
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
!
! if (!default_val)
ret = 0;
+ else {
+ ret = tail_expander(dir,buffer,1,default_val,
+ relative_to_type);
+ if (ret && dir->sel_type == selection_file) {
+ if (*relative_to_type && 0 < string_len(*relative_to_type))
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile1,
+ "Name %S (expands to %s, %S) is unsafe use as file"),
+ *buffer, default_val, *relative_to_type);
+ else
+ lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile2,
+ "Name %S (expands to %s) is unsafe use as file"),
+ *buffer, default_val);
+ ret = 0;
+ }
}
+ }
break;
! case 0x003E: {
! /* '>' received folder */
!
! char * recvd_val = give_dt_estr_as_str(&recvd_mail_e,"receivedmail");
!
! if (!recvd_val)
! ret = 0 ;
! else {
! ret = tail_expander(dir,buffer,1,recvd_val,
! relative_to_type);
! if (ret && dir->sel_type == selection_file) {
! if (*relative_to_type && 0 < string_len(*relative_to_type))
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile1,
! "Name %S (expands to %s, %S) is unsafe use as file"),
! *buffer, recvd_val, *relative_to_type);
! else
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile2,
! "Name %S (expands to %s) is unsafe use as file"),
! *buffer, recvd_val);
! ret = 0;
! }
}
+ }
break;
! case 0x003C: {
! /* '<' sent folder */
!
! char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
!
! if (!sent_val)
! ret = 0 ;
! else {
!
! ret = tail_expander(dir,buffer,1,sent_val,
! relative_to_type);
! if (ret && dir->sel_type == selection_file) {
! if (*relative_to_type && 0 < string_len(*relative_to_type))
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile1,
! "Name %S (expands to %s, %S) is unsafe use as file"),
! *buffer, sent_val, *relative_to_type);
! else
! lib_error(CATGETS(elm_msg_cat, MeSet, MeUnsafeFile2,
! "Name %S (expands to %s) is unsafe use as file"),
! *buffer, sent_val);
! ret = 0;
! }
}
+ }
break;
default:
Index: elm2.4.ME+.117-cvs/lib/shared.c
*** elm2.4.ME+.116/lib/shared.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/lib/shared.c 2004-06-18 12:29:50.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: shared.c,v 1.55 2004/04/24 12:30:02 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.55 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: shared.c,v 1.56 2004/06/18 09:29:50 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.56 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 47,55 ****
struct shared_SEOT * shared_SE_option_types = NULL;
int shared_SE_option_type_count = 0;
- struct shared_RCT * shared_RC_types = NULL;
- int shared_RC_type_count = 0;
-
struct shared_CST * shared_CS_types = NULL;
int shared_CS_type_count = 0;
--- 47,52 ----
***************
*** 214,227 ****
provides_shared_FT_f * f2;
} f2; /* not in use */
-
-
-
- union F7 {
- void * ptr;
- provides_shared_RCT_f * f7;
- } f7;
-
union F8 {
void * ptr;
provides_RC_options_f * f8;
--- 211,216 ----
***************
*** 243,249 ****
/* not in use */
f2.ptr = dlsym( I->handle, "provides_shared_FT");
- f7.ptr = dlsym( I->handle, "provides_shared_RCT");
f8.ptr = dlsym( I->handle, "provides_RC_options");
f9.ptr = dlsym( I->handle, "RC_post_init");
f10.ptr = dlsym( I->handle, "wants_rand_bits");
--- 232,237 ----
***************
*** 253,261 ****
DPRINT(Debug,7,(&Debug, " ... NO provides_shared_FT\n"));
}
- if (!f7.f7) {
- DPRINT(Debug,7,(&Debug, " ... NO provides_shared_RCT\n"));
- }
if (!f8.f8) {
DPRINT(Debug,7,(&Debug, " ... NO provides_RC_options\n"));
}
--- 241,246 ----
***************
*** 301,331 ****
- if (f7.f7) {
- int count,x;
- size_t s_res7;
- struct rc_type ** res7 = f7.f7(&count, &s_res7);
-
- if (s_res7 != sizeof (**res7)) {
- DPRINT(Debug,1,(&Debug,"... struct rc_type mismatch: %d should be %d\n",
- s_res7,sizeof (**res7)));
- } else {
- shared_RC_types =
- safe_realloc(shared_RC_types,
- sizeof (shared_RC_types[0]) *
- (shared_RC_type_count + count));
-
- DPRINT(Debug,7,(&Debug," ... provides_shared_RCT: (shared_RC_types) count %d\n",
- count));
-
-
- for (x = 0; x < count; x++) {
- shared_RC_types[shared_RC_type_count+x].T = res7[x];
- shared_RC_types[shared_RC_type_count+x].imp_idx = I;
- }
- shared_RC_type_count += count;
- }
- }
if (f8.f8) {
int count;
--- 286,291 ----
***************
*** 793,799 ****
return return_buffer;
}
! struct rc_type rc_DT_SHARED = { dt_SHARED_parse_line, dt_SHARED_parse_cline,
dt_SHARED_print_value, dt_SHARED_get_value };
--- 753,760 ----
return return_buffer;
}
! struct rc_type rc_DT_SHARED = { RCTYPE_magic,
! dt_SHARED_parse_line, dt_SHARED_parse_cline,
dt_SHARED_print_value, dt_SHARED_get_value };
***************
*** 1046,1052 ****
local_value =
library_list[i]->rc_options[x].flags & FL_LOCAL;
! if (!valid_rc_type(library_list[i]->rc_options[x].dt_type)) {
DPRINT(Debug,1,(&Debug,
"shlib/option %d -- \"%s\" BAD, flags=%0x (library=%s)\n",
x,library_list[i]->rc_options[x].name,
--- 1007,1013 ----
local_value =
library_list[i]->rc_options[x].flags & FL_LOCAL;
! if (RCTYPE_magic != library_list[i]->rc_options[x].dt_type->magic) {
DPRINT(Debug,1,(&Debug,
"shlib/option %d -- \"%s\" BAD, flags=%0x (library=%s)\n",
x,library_list[i]->rc_options[x].name,
Index: elm2.4.ME+.117-cvs/melib/mime_parse.c
*** elm2.4.ME+.116/melib/mime_parse.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/melib/mime_parse.c 2004-06-27 18:18:05.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.45 2004/03/27 18:31:42 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.45 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime_parse.c,v 1.46 2004/06/27 15:18:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 239,284 ****
return 1;
}
- int class_charset(charset_value)
- char * charset_value;
- {
- /* Return > 0 (2) if charset is displayable with display_charset
- * Return < 0 (-2) if charset needs translating to display_charset
- */
- int ret = 0;
- charset_t charset_value_p = MIME_name_to_charset(charset_value,0);
-
- /* Check agaist display charset */
- if (0 == istrcmp(charset_value,"US-ASCII") &&
- charset_ok_p(display_charset))
- ret = 2;
- /* If display_charset can show us-ascii? */
- else if (display_charset->MIME_name &&
- 0 == istrcmp(charset_value,display_charset->MIME_name))
- ret = 2;
- /* if charset is subset of display */
- else if (charset_value_p && charset_superset_of(display_charset,
- charset_value_p))
- ret = 2;
- else if (charset_value_p &&
- (CS_printable & charset_properties(charset_value_p)))
- ret = -2; /* convert (filter?) to display charset */
- else
- ret = 0;
-
- DPRINT(Debug,9,(&Debug,
- "class_charset: charset_value=\"%s\"\n",
- charset_value));
- DPRINT(Debug,9,(&Debug,
- " : display_charset=\"%s\"\n",
- display_charset->MIME_name ?
- display_charset->MIME_name :
- "<no MIME name>"));
- DPRINT(Debug,9,(&Debug,
- "class_charset=%d\n",ret));
-
- return ret;
- }
int mime_get_charset (charset_value, opts, display_charset,
default_content_charset)
--- 239,244 ----
Index: elm2.4.ME+.117-cvs/nls/C/C/C/s_elm.m
*** elm2.4.ME+.116/nls/C/C/C/s_elm.m 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/nls/C/C/C/s_elm.m 2004-06-20 21:03:06.000000000 +0300
***************
*** 995,1003 ****
555 I can't understand sort key "%s" in line %d in "%s" file
$ #BadAliasSortInElmrc
556 I can't understand alias sort key "%s" in line %d in "%s" file
- $ #SignatureObsolete
- 557 "signature" used in obsolete way in .elm/elmrc file. Ignored!\n\
- \t(Signature should specify the filename to use rather than on/off.)
$ #BouncebackGTMaxhops
558 Warning: bounceback is set to greater than %d (max-hops). Ignored.\n\r
$ #TimeoutLTTen
--- 995,1000 ----
***************
*** 2299,2301 ****
--- 2296,2306 ----
2151 "The recv'd message was PGP encoded, are you sure? "
$ #FailedLeaveChange
2152 "Failed to leave folder: Try to change again ? ([P]anic/%c/%c) "
+ $ #ChangedAttachEnc
+ 2153 "Changed encoding of %d attachments"
+ $ #NoDSN
+ 2154 "Mailer do not support DSN, disabling it"
+ $ #MailerDisconnected
+ 2155 "Mailer disconnected! Can't send message. Use f)orget !"
+ $ #MimeFWMessageYN
+ 2156 'Forward message as separate part? (%c/%c) '
Index: elm2.4.ME+.117-cvs/shared_libs/include/shared.h
*** elm2.4.ME+.116/shared_libs/include/shared.h 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/shared_libs/include/shared.h 2004-06-18 12:29:50.000000000 +0300
***************
*** 1,7 ****
! /* $Id: shared.h,v 1.25 2004/03/27 18:31:43 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: shared.h,v 1.26 2004/06/18 09:29:50 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 55,63 ****
typedef struct SE_option_type **
provides_shared_SEOT_f P_((int *count, size_t *s_size));
- typedef struct rc_type **
- provides_shared_RCT_f P_((int *count, size_t *s_size));
-
typedef struct rc_save_info_rec
* provides_RC_options_f P_((int *count, size_t *s_size));
--- 55,60 ----
Index: elm2.4.ME+.117-cvs/shared_libs/smtp/smtp.c
*** elm2.4.ME+.116/shared_libs/smtp/smtp.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/shared_libs/smtp/smtp.c 2004-05-23 15:31:00.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: smtp.c,v 1.42 2004/03/27 18:31:43 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: smtp.c,v 1.43 2004/05/23 12:31:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.43 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 1717,1723 ****
I->p.p1->response_code[0] = '\0';
I->p.p1->response_text = NULL;
I->p.p1->response_text_len = 0;
- I->p.p1->SMTP_flags = 0;
I->p.p1->incomplete_command = NULL;
I->p.p1->incomplete_command_len = 0;
--- 1717,1722 ----
***************
*** 1726,1731 ****
--- 1725,1733 ----
I->p.p1->ESMPT_keyword_len = -1; /* -1 == EHLO not issued yet */
I->p.p1->state = smtp_error;
+ I->p.p1->SMTP_flags = 0;
+
+
if (!connect_remote_account(&(I->p.p1->RA),&got,se,ports))
goto clean;
***************
*** 1748,1756 ****
DPRINT(Debug,8,(&Debug,
"submission_mailer_info_init: smtp service\n"));
default:
DPRINT(Debug,1,(&Debug,
! "submission_mailer_info_init: Unknown sercide!\n"));
}
I->p.p1->state = smtp_wait_reply;
--- 1750,1760 ----
DPRINT(Debug,8,(&Debug,
"submission_mailer_info_init: smtp service\n"));
+ break;
+
default:
DPRINT(Debug,1,(&Debug,
! "submission_mailer_info_init: Unknown service!\n"));
}
I->p.p1->state = smtp_wait_reply;
***************
*** 1781,1786 ****
--- 1785,1946 ----
return status;
}
+ static void mailer_close2 P_((struct mailer_info *I));
+ static void mailer_close2(I)
+ struct mailer_info *I;
+ {
+ free_Read_Buffer(& (I->p.p1->read_buffer));
+ free_Write_Buffer(& (I->p.p1->write_buffer));
+
+ free_response_text(I->p.p1);
+
+ if (I->p.p1->incomplete_command)
+ free(I->p.p1->incomplete_command);
+
+ I->p.p1->incomplete_command = NULL;
+ I->p.p1->incomplete_command_len = 0;
+
+ if (I->p.p1->ESMPT_keywords) {
+ int i;
+ for (i = 0; i < I->p.p1->ESMPT_keyword_len; i++) {
+ if (I->p.p1->ESMPT_keywords[i])
+ free(I->p.p1->ESMPT_keywords[i]);
+ I->p.p1->ESMPT_keywords[i] = NULL;
+ }
+ free(I->p.p1->ESMPT_keywords);
+ }
+ I->p.p1->ESMPT_keywords = NULL;
+ I->p.p1->ESMPT_keyword_len = -1; /* -1 == EHLO not issued yet */
+ }
+
+ /* Return
+ 1 == mailer restarted, reconnect succeed -- reask info
+ 0 == mailer not disconnected
+ -1 == mailer disconnected, reconnect failed
+ */
+ S_(mailer_info_restart_hook submission_mailer_info_rs_hook)
+ static int submission_mailer_info_rs_hook P_((struct mailer_config *M,
+ struct mailer_info *I));
+ static int submission_mailer_info_rs_hook(M,I)
+ struct mailer_config *M;
+ struct mailer_info *I;
+ {
+ int is_ok = 1;
+ int status = 0;
+
+ char response_code[3];
+
+ PORTS ports[] = { PORT_submission, PORT_smtp, PORT_end };
+ int got; /* port number */
+
+ struct service_entry *se = NULL;
+
+ if (smtp_start_command(I->p.p1,"NOOP")) {
+
+ smtp_command_ready(I->p.p1,0);
+
+ is_ok = smtp_command_ok(I->p.p1,response_code);
+
+ smtp_command_reset(I->p.p1);
+ } else
+ is_ok = 0;
+
+ if (is_ok) {
+ DPRINT(Debug,12,(&Debug,
+ "submission_mailer_info_rs_hook=0 (OK, mailer not disconnected)\n"));
+
+ return 0; /* Mailer OK -- need not restart */
+ }
+
+ /* Send QUIT */
+ if (smtp_idle == I->p.p1->state) {
+ int status = smtp_start_command(I->p.p1,"QUIT");
+
+ if (status) {
+ smtp_command_ready(I->p.p1,0);
+
+ /* Wait for QUIT */
+ smtp_command_reset(I->p.p1);
+ }
+ }
+
+
+ status = -1;
+
+ /* Actually close connection */
+ free_remote_account(& (I->p.p1->RA));
+ mailer_close2(I);
+
+ se = give_service_entry(submission_server, STFLAG_smtp_like);
+ if (!se) {
+ status = -1;
+ goto clean;
+ }
+
+ /* Try reconnect */
+ I->p.p1->state = smtp_error;
+ I->p.p1->SMTP_flags = 0;
+
+
+ if (!connect_remote_account(&(I->p.p1->RA),&got,se,ports))
+ goto clean;
+
+ if (SUBMISSION_SERVICE == se->service)
+ goto is_submission;
+ else if (SMTP_SERVICE == se->service)
+ goto is_smtp;
+ else switch (got) {
+ case PORT_submission:
+ is_submission:
+
+ DPRINT(Debug,8,(&Debug,
+ "submission_mailer_info_rs_hook: Submission service\n"));
+ I->p.p1->SMTP_flags = SMTP_submission;
+ break;
+
+ case PORT_smtp:
+ is_smtp:
+
+ DPRINT(Debug,8,(&Debug,
+ "submission_mailer_info_rs_hook: smtp service\n"));
+
+ break;
+ default:
+ DPRINT(Debug,1,(&Debug,
+ "submission_mailer_info_rs_hook: Unknown sercide!\n"));
+ }
+
+ I->p.p1->state = smtp_wait_reply;
+
+ ConfigStream(I->p.p1->RA.stream,
+ smtp_read_action,ss_noaction_routine,smtp_timeout_action,
+ SMTP_TIMEOUT,I->p.p1);
+
+
+
+ if (!smtp_command_ok(I->p.p1,response_code)) {
+ DPRINT(Debug,12,(&Debug,
+ "submission_mailer_info_rs_hook: Failed to get greeting from server\n"));
+
+ /* Caller will call sendmailbs_mailer_info_close ... */
+ status = -1;
+ goto clean;
+ }
+ smtp_command_reset(I->p.p1);
+ status = 1; /* reconnect succeed */
+
+ clean:
+
+ if (se)
+ free_temporary_service_entry(&se);
+
+ DPRINT(Debug,12,(&Debug,
+ "submission_mailer_info_rs_hook=%d\n",status));
+ return status;
+
+ }
+
+
S_(mailer_info_close_hook submission_mailer_info_close)
static void submission_mailer_info_close(M,I)
struct mailer_config *M;
***************
*** 1803,1830 ****
}
free_remote_account(& (I->p.p1->RA));
! free_Read_Buffer(& (I->p.p1->read_buffer));
! free_Write_Buffer(& (I->p.p1->write_buffer));
!
! free_response_text(I->p.p1);
!
! if (I->p.p1->incomplete_command)
! free(I->p.p1->incomplete_command);
!
! I->p.p1->incomplete_command = NULL;
! I->p.p1->incomplete_command_len = 0;
!
! if (I->p.p1->ESMPT_keywords) {
! int i;
! for (i = 0; i < I->p.p1->ESMPT_keyword_len; i++) {
! if (I->p.p1->ESMPT_keywords[i])
! free(I->p.p1->ESMPT_keywords[i]);
! I->p.p1->ESMPT_keywords[i] = NULL;
! }
! free(I->p.p1->ESMPT_keywords);
! }
! I->p.p1->ESMPT_keywords = NULL;
! I->p.p1->ESMPT_keyword_len = -1; /* -1 == EHLO not issued yet */
/* bzero is defined on hdrs/defs.h */
bzero((void *)I->p.p1,sizeof (* (I->p.p1)));
--- 1963,1969 ----
}
free_remote_account(& (I->p.p1->RA));
! mailer_close2(I);
/* bzero is defined on hdrs/defs.h */
bzero((void *)I->p.p1,sizeof (* (I->p.p1)));
***************
*** 2004,2010 ****
I->p.p1->response_code[0] = '\0';
I->p.p1->response_text = NULL;
I->p.p1->response_text_len = 0;
- I->p.p1->SMTP_flags = SMTP_submission;
I->p.p1->incomplete_command = NULL;
I->p.p1->incomplete_command_len = 0;
--- 2143,2148 ----
***************
*** 2012,2017 ****
--- 2150,2157 ----
I->p.p1->ESMPT_keywords = NULL;
I->p.p1->ESMPT_keyword_len = -1; /* -1 == EHLO not issued yet */
+ I->p.p1->SMTP_flags = SMTP_submission;
+
if (!smtp_command_ok(I->p.p1,response_code)) {
DPRINT(Debug,12,(&Debug,
"sendmailbs_mailer_info_init: Failed to get greeting from sendmail -bs\n"));
***************
*** 2024,2029 ****
--- 2164,2211 ----
return 1;
}
+
+ /* Return
+ 1 == mailer restarted, reconnect succeed -- reask info
+ 0 == mailer not disconnected
+ -1 == mailer disconnected, reconnect failed
+ */
+ S_(mailer_info_restart_hook sendmailbs_mailer_info_rs_hook)
+ static int sendmailbs_mailer_info_rs_hook P_((struct mailer_config *M,
+ struct mailer_info *I));
+ static int sendmailbs_mailer_info_rs_hook(M,I)
+ struct mailer_config *M;
+ struct mailer_info *I;
+ {
+ int is_ok = 0;
+
+ if (smtp_start_command(I->p.p1,"NOOP")) {
+ char response_code[3];
+
+ smtp_command_ready(I->p.p1,0);
+
+ is_ok = smtp_command_ok(I->p.p1,response_code);
+
+ smtp_command_reset(I->p.p1);
+ } else
+ is_ok = 0;
+
+ if (is_ok) {
+ DPRINT(Debug,12,(&Debug,
+ "sendmailbs_mailer_info_rs_hook=0 (OK, mailer not disconnected)\n"));
+
+ return 0; /* Mailer OK -- need not restart */
+ }
+
+ /* TODO -- implement reconnect */
+
+ DPRINT(Debug,4,(&Debug,
+ "sendmailbs_mailer_info_rs_hook=-1 (reconnect not implemented)\n"));
+
+ return -1; /* reconnect not implemented */
+ }
+
+
S_(mailer_info_close_hook sendmailbs_mailer_info_close)
static void sendmailbs_mailer_info_close(M,I)
struct mailer_config *M;
***************
*** 2111,2138 ****
}
}
! free_Read_Buffer(& (I->p.p1->read_buffer));
! free_Write_Buffer(& (I->p.p1->write_buffer));
!
! free_response_text(I->p.p1);
!
! if (I->p.p1->incomplete_command)
! free(I->p.p1->incomplete_command);
!
! I->p.p1->incomplete_command = NULL;
! I->p.p1->incomplete_command_len = 0;
!
! if (I->p.p1->ESMPT_keywords) {
! int i;
! for (i = 0; i < I->p.p1->ESMPT_keyword_len; i++) {
! if (I->p.p1->ESMPT_keywords[i])
! free(I->p.p1->ESMPT_keywords[i]);
! I->p.p1->ESMPT_keywords[i] = NULL;
! }
! free(I->p.p1->ESMPT_keywords);
! }
! I->p.p1->ESMPT_keywords = NULL;
! I->p.p1->ESMPT_keyword_len = -1; /* -1 == EHLO not issued yet */
/* bzero is defined on hdrs/defs.h */
bzero((void *)I->p.p1,sizeof (* (I->p.p1)));
--- 2293,2299 ----
}
}
! mailer_close2(I);
/* bzero is defined on hdrs/defs.h */
bzero((void *)I->p.p1,sizeof (* (I->p.p1)));
***************
*** 2215,2220 ****
--- 2376,2382 ----
submission_mailer_info_init, submission_mailer_info_close,
smtp_common_mailer_info_query, submission_mailer_info_verify_addr,
smtp_common_mailer_info_gen_def_ef, smtp_common_mailer_info_set_ef,
+ submission_mailer_info_rs_hook,
MB_USE_DOMAIN|MB_REQ_DEFAULT_SENDER
},
***************
*** 2226,2232 ****
sendmailbs_mailer_info_init, sendmailbs_mailer_info_close,
smtp_common_mailer_info_query, sendmailbs_mailer_info_verify_addr,
smtp_common_mailer_info_gen_def_ef, smtp_common_mailer_info_set_ef,
!
MB_USE_DOMAIN|MB_REQ_DEFAULT_SENDER
},
#endif
--- 2388,2395 ----
sendmailbs_mailer_info_init, sendmailbs_mailer_info_close,
smtp_common_mailer_info_query, sendmailbs_mailer_info_verify_addr,
smtp_common_mailer_info_gen_def_ef, smtp_common_mailer_info_set_ef,
! sendmailbs_mailer_info_rs_hook,
!
MB_USE_DOMAIN|MB_REQ_DEFAULT_SENDER
},
#endif
Index: elm2.4.ME+.117-cvs/src/alias.c
*** elm2.4.ME+.116/src/alias.c 2004-04-13 14:26:13.000000000 +0300
--- elm2.4.ME+.117-cvs/src/alias.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: alias.c,v 1.35 2004/04/07 17:42:58 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: alias.c,v 1.36 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 1137,1143 ****
FlushBuffer();
redraw += a_sendmsg(TRUE,allow_forms,
! mailbox, aview, header_page,
page);
}
else {
--- 1137,1143 ----
FlushBuffer();
redraw += a_sendmsg(TRUE,allow_forms,
! mailbox, aview, header_page,
page);
}
else {
Index: elm2.4.ME+.117-cvs/src/args.c
*** elm2.4.ME+.116/src/args.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/args.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: args.c,v 1.61 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.61 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: args.c,v 1.62 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.62 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 469,475 ****
printf("\tHostname: %s\n",hostname);
printf("\tHost's domain: %s\n",hostdomain);
printf("\tQualified hostname: %s\n",hostfullname);
! printf("\tMailbox: %s\n",defaultfile);
if(mailerfunc(&value,0,0,NULL))
printf("\tMailer: %s\n",value);
--- 469,480 ----
printf("\tHostname: %s\n",hostname);
printf("\tHost's domain: %s\n",hostdomain);
printf("\tQualified hostname: %s\n",hostfullname);
! {
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
!
! printf("\tMailbox: %s\n",
! default_val ? default_val : "<no value>");
! }
if(mailerfunc(&value,0,0,NULL))
printf("\tMailer: %s\n",value);
***************
*** 617,623 ****
printf("(%s)",raw_default_nomime_charset);
putchar('\n');
! printf("\tMailbox: %s\n",defaultfile);
}
--- 622,632 ----
printf("(%s)",raw_default_nomime_charset);
putchar('\n');
! {
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
! printf("\tMailbox: %s\n",
! default_val ? default_val : "<no value>");
! }
}
Index: elm2.4.ME+.117-cvs/src/attach_menu.c
*** elm2.4.ME+.116/src/attach_menu.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/attach_menu.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.62 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.62 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: attach_menu.c,v 1.63 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.63 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 574,579 ****
--- 574,580 ----
int savetime;
struct stat sb;
char buf[STRING];
+ char *editor_val;
if (ptr->magic != MIME_magic)
mime_panic(__FILE__,__LINE__,"attach_edit",
***************
*** 588,600 ****
sleep_message();
return;
}
! if (strlen(ptr->pathname) + strlen(editor) > STRING-5)
return;
savetime = sb.st_mtime;
Raw(OFF);
elm_sfprintf (buf, sizeof buf,
! FRM("%s %s"), editor, ptr->pathname);
system_call (buf, 0, NULL);
Raw(ON);
--- 589,606 ----
sleep_message();
return;
}
!
! editor_val = give_dt_estr_as_str(&editor_e,"editor");
!
!
! if (!editor_val ||
! strlen(ptr->pathname) + strlen(editor_val) > STRING-5)
return;
savetime = sb.st_mtime;
Raw(OFF);
elm_sfprintf (buf, sizeof buf,
! FRM("%s %s"), editor_val, ptr->pathname);
system_call (buf, 0, NULL);
Raw(ON);
Index: elm2.4.ME+.117-cvs/src/browser.c
*** elm2.4.ME+.116/src/browser.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/src/browser.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: browser.c,v 1.30 2004/04/24 16:33:20 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.30 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: browser.c,v 1.31 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.31 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 374,380 ****
Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmListFoldersHelp1,
"Enter: <nothing> to not save a copy of the message,\n\
\r '<' to save in your \"sent\" folder ("));
! Write_to_screen(FRM("%s"), sent_mail);
Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmListFoldersHelp2,
"),\n\
--- 374,386 ----
Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmListFoldersHelp1,
"Enter: <nothing> to not save a copy of the message,\n\
\r '<' to save in your \"sent\" folder ("));
!
! {
! char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
!
! Write_to_screen(FRM("%s"), sent_val);
! }
!
Write_to_screen(CATGETS(elm_msg_cat, ElmSet,
ElmListFoldersHelp2,
"),\n\
***************
*** 395,410 ****
" to. Several options\n\rare available:\n\r\
\n\r '!' will use your incoming mailbox ("));
! Write_to_screen(FRM("%s"),defaultfile);
Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmFileHelpmsg3,
")\n\r '>' will use your \"received\" folder ("));
! Write_to_screen(FRM("%s"),recvd_mail);
!
Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmFileHelpmsg4,
")\n\r '<' will use your \"sent\" folder ("));
! Write_to_screen(FRM("%s"), sent_mail);
!
if (I->pvector[3]) {
Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmFileHelpmsg5,
")\n\r '.' will use the previous folder ("));
--- 401,430 ----
" to. Several options\n\rare available:\n\r\
\n\r '!' will use your incoming mailbox ("));
! {
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
!
! if (default_val)
! Write_to_screen(FRM("%s"),default_val);
! }
Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmFileHelpmsg3,
")\n\r '>' will use your \"received\" folder ("));
! {
! char * recvd_val = give_dt_estr_as_str(&recvd_mail_e,"receivedmail");
! if (recvd_val)
! Write_to_screen(FRM("%s"),recvd_val);
! }
Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmFileHelpmsg4,
")\n\r '<' will use your \"sent\" folder ("));
!
! {
! char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
!
! if (sent_val)
! Write_to_screen(FRM("%s"), sent_val);
! }
!
if (I->pvector[3]) {
Write_to_screen(CATGETS(elm_msg_cat, ElmSet, ElmFileHelpmsg5,
")\n\r '.' will use the previous folder ("));
Index: elm2.4.ME+.117-cvs/src/calendar.c
*** elm2.4.ME+.116/src/calendar.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/calendar.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: calendar.c,v 1.13 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: calendar.c,v 1.14 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 49,83 ****
FILE *calendar;
int count;
int err;
/* First step is to open the calendar file for appending... **/
! if (can_open(calendar_file, "a") != 0) {
err = errno;
DPRINT(Debug,2,
(&Debug,
"Error: wrong permissions to append to calendar %s\n",
! calendar_file));
DPRINT(Debug,2,
(&Debug, "** - %s **\n", error_description(err)));
lib_error(CATGETS(elm_msg_cat, ErrorSet, ErrorCalendarCanOpen,
"Not able to append to file %s!"),
! calendar_file);
return;
}
! save_file_stats(calendar_file);
! if ((calendar = fopen(calendar_file,"a")) == NULL) {
err = errno;
DPRINT(Debug,2,(&Debug,
"Error: couldn't append to calendar file %s (scan)\n",
! calendar_file));
DPRINT(Debug,2,(&Debug,
"** - %s **\n", error_description(err)));
lib_error(CATGETS(elm_msg_cat, ErrorSet, ErrorCalendarAppend,
"Couldn't append to file %s!"),
! calendar_file);
return;
}
--- 49,89 ----
FILE *calendar;
int count;
int err;
+ char * cal_val = give_dt_estr_as_str(&calendar_file_e,"calendar");
+
+ if (!cal_val) {
+ sleep_message();
+ return;
+ }
/* First step is to open the calendar file for appending... **/
! if (can_open(cal_val, "a") != 0) {
err = errno;
DPRINT(Debug,2,
(&Debug,
"Error: wrong permissions to append to calendar %s\n",
! cal_val));
DPRINT(Debug,2,
(&Debug, "** - %s **\n", error_description(err)));
lib_error(CATGETS(elm_msg_cat, ErrorSet, ErrorCalendarCanOpen,
"Not able to append to file %s!"),
! cal_val);
return;
}
! save_file_stats(cal_val);
! if ((calendar = fopen(cal_val,"a")) == NULL) {
err = errno;
DPRINT(Debug,2,(&Debug,
"Error: couldn't append to calendar file %s (scan)\n",
! cal_val));
DPRINT(Debug,2,(&Debug,
"** - %s **\n", error_description(err)));
lib_error(CATGETS(elm_msg_cat, ErrorSet, ErrorCalendarAppend,
"Couldn't append to file %s!"),
! cal_val);
return;
}
***************
*** 85,91 ****
fclose(calendar);
! restore_file_stats(calendar_file);
if (count > 0) {
if (count > 1)
--- 91,97 ----
fclose(calendar);
! restore_file_stats(cal_val);
if (count > 0) {
if (count > 1)
Index: elm2.4.ME+.117-cvs/src/edit.c
*** elm2.4.ME+.116/src/edit.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/edit.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: edit.c,v 1.19 2004/03/27 18:31:44 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: edit.c,v 1.20 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.20 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 97,142 ****
char buffer[SLEN];
int LINES, COLUMNS;
!
menu_get_sizes(page,&LINES, &COLUMNS);
PutLineX(LINES-2,0, CATGETS(elm_msg_cat, ElmSet, ElmInvokeEditor,
"Invoking editor..."));
! if (strcmp(editor, "builtin") == 0 || strcmp(editor, "none") == 0) {
! if (in_string(alternative_editor, "%s"))
elm_sfprintf(buffer, sizeof buffer,
FRM(alternative_editor), editfile);
! else
elm_sfprintf(buffer, sizeof buffer,
FRM("%s %s"), alternative_editor, editfile);
! } else {
! if (in_string(editor, "%s"))
elm_sfprintf(buffer, sizeof buffer,
! FRM(editor), editfile);
! else
elm_sfprintf(buffer, sizeof buffer,
! FRM("%s %s"), editor, editfile);
! }
!
! Raw(OFF);
!
! if (system_call(buffer, SY_ENAB_SIGHUP, NULL) == -1) {
! Raw(ON);
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmProblemsInvokingEditor,
! "Problems invoking editor %s!"),
! alternative_editor);
! sleep_message();
! return(0);
! }
!
Raw(ON);
!
! /* a location not near the next request, so an absolute is used */
! InvalidateLocation();
!
! return(1);
}
/*
--- 97,147 ----
char buffer[SLEN];
int LINES, COLUMNS;
! char * editor_val;
!
menu_get_sizes(page,&LINES, &COLUMNS);
+ editor_val = give_dt_estr_as_str(&editor_e,"editor");
+
+
PutLineX(LINES-2,0, CATGETS(elm_msg_cat, ElmSet, ElmInvokeEditor,
"Invoking editor..."));
! if (! editor_val ||
! strcmp(editor_val, "builtin") == 0 ||
! strcmp(editor_val, "none") == 0) {
! if (in_string(alternative_editor, "%s"))
elm_sfprintf(buffer, sizeof buffer,
FRM(alternative_editor), editfile);
! else
elm_sfprintf(buffer, sizeof buffer,
FRM("%s %s"), alternative_editor, editfile);
! } else {
! if (in_string(editor_val, "%s"))
elm_sfprintf(buffer, sizeof buffer,
! FRM(editor_val), editfile);
! else
elm_sfprintf(buffer, sizeof buffer,
! FRM("%s %s"), editor_val, editfile);
! }
!
! Raw(OFF);
!
! if (system_call(buffer, SY_ENAB_SIGHUP, NULL) == -1) {
Raw(ON);
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmProblemsInvokingEditor,
! "Problems invoking editor %s!"),
! alternative_editor);
! sleep_message();
! return(0);
! }
!
! Raw(ON);
!
! InvalidateLocation();
!
! return(1);
}
/*
Index: elm2.4.ME+.117-cvs/src/editmsg.c
*** elm2.4.ME+.116/src/editmsg.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/editmsg.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.42 2004/03/27 18:31:44 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: editmsg.c,v 1.43 2004/06/18 09:29:51 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.43 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 36,50 ****
int interrupts_while_editing; /* keep track 'o dis stuff */
JMP_BUF edit_location; /* for getting back from interrupt */
- static int no_editor_edit_the_message P_((char *filename,
- struct mailing_headers * headers,
- charset_t file_set,
- struct mailer_info *mailer_info,
- struct MailboxView *mailbox
- /* needed for system_call() */,
- struct AliasView *aview
- ));
-
struct builtin_edit {
struct mailing_headers * headers;
FILE * edit_fd;
--- 36,41 ----
***************
*** 1962,1969 ****
}
! static int no_editor_edit_the_message(filename,headers,file_set,mailer_info,
! mailbox,aview)
char *filename;
struct mailing_headers * headers;
charset_t file_set;
--- 1953,1960 ----
}
! int no_editor_edit_the_message(filename,headers,file_set,mailer_info,
! mailbox,aview)
char *filename;
struct mailing_headers * headers;
charset_t file_set;
Index: elm2.4.ME+.117-cvs/src/elm.c
*** elm2.4.ME+.116/src/elm.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/elm.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elm.c,v 1.69 2004/03/27 18:31:44 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.69 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elm.c,v 1.70 2004/06/18 20:40:56 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.70 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 253,273 ****
ElmNoMailToForward,
"No mail to forward!"));
! else if (give_message_data(mailbox,current-1,
! &hdr,&F,NULL,
! mime_parse_routine)) {
! if (forward(hdr,F,mailbox, aview, page))
(*redraw)++;
else {
(*nufoot)++;
show_msg_status(current-1,&MENU, *header_page);
}
! } else {
! DPRINT(Debug,3,(&Debug,
! "give_message_data [%d] fails",current-1));
!
! }
/* define_softkeys(MAIN); */
}
break;
--- 253,267 ----
ElmNoMailToForward,
"No mail to forward!"));
! else {
! if (forward(current-1,mailbox, aview, page))
(*redraw)++;
else {
(*nufoot)++;
show_msg_status(current-1,&MENU, *header_page);
}
! }
/* define_softkeys(MAIN); */
}
break;
***************
*** 288,294 ****
ElmNoMailToReply,
"No mail to reply to!"));
else if (give_message_data(mailbox,current-1,
! &hdr,&F,NULL,
mime_parse_routine)) {
if (hdr->status & FORM_LETTER) {
--- 282,288 ----
ElmNoMailToReply,
"No mail to reply to!"));
else if (give_message_data(mailbox,current-1,
! &hdr,NULL,NULL,
mime_parse_routine)) {
if (hdr->status & FORM_LETTER) {
***************
*** 299,305 ****
} else {
/* define_softkeys(YESNO); */
! (*redraw) += reply_to_everyone(hdr,F,
mailbox,
aview,
page);
--- 293,299 ----
} else {
/* define_softkeys(YESNO); */
! (*redraw) += reply_to_everyone(current-1,
mailbox,
aview,
page);
***************
*** 403,411 ****
ElmMail,
"Mail"));
FlushBuffer();
! (*redraw) += send_msg_l(NULL,NULL, NULL, NULL,
! MAIL_EDIT_MSG,allow_forms,NULL,
! mailbox,aview,page);
break;
case ' ' :
--- 397,405 ----
ElmMail,
"Mail"));
FlushBuffer();
! (*redraw) += send_msg_l(-1, NULL, NULL, NULL,
! MAIL_EDIT_MSG,allow_forms,
! mailbox, aview,page);
break;
case ' ' :
***************
*** 668,686 ****
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmNoMailToReplyTo,
"No mail to reply to!"));
! else if (give_message_data(mailbox,current-1,
! &hdr,&F,NULL,
! mime_parse_routine)) {
! (*redraw) += reply(hdr,F,mailbox, aview, page);
if (!*redraw)
show_msg_status(current-1,&MENU, *header_page);
! } else {
! DPRINT(Debug,3,(&Debug,
! "give_message_data [%d] fails",current-1));
! }
!
/* softkeys_on(); */
}
break;
--- 662,674 ----
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmNoMailToReplyTo,
"No mail to reply to!"));
! else {
! (*redraw) += reply(current-1,mailbox, aview, page);
if (!*redraw)
show_msg_status(current-1,&MENU, *header_page);
! }
/* softkeys_on(); */
}
break;
Index: elm2.4.ME+.117-cvs/src/forms.c
*** elm2.4.ME+.116/src/forms.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/forms.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: forms.c,v 1.23 2004/03/27 18:31:45 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.23 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: forms.c,v 1.24 2004/06/18 20:40:56 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 188,199 ****
return(form_count);
}
! int mail_filled_in_form(current_header,address, subject, infile,
mailbox,aview)
! struct header_rec * current_header;
struct addr_item *address;
char *subject;
- FILE *infile;
struct MailboxView *mailbox;
struct AliasView *aview;
{
--- 188,198 ----
return(form_count);
}
! int mail_filled_in_form(mail_index,address, subject,
mailbox,aview)
! int mail_index;
struct addr_item *address;
char *subject;
struct MailboxView *mailbox;
struct AliasView *aview;
{
***************
*** 207,224 ****
char buffer[SLEN];
struct menu_context *page = NULL;
struct menu_context *cpage;
DPRINT(Debug,4,
(&Debug,
"replying to form with;\n\tsubject=%s\n",
subject));
!
/* now we can fly along and get to the message body... */
! max_lines = current_header->lines;
while (0 < (len_buf =
! mail_gets(buffer, SLEN, infile))) {
if (len_buf == 1) /* <return> only */
break;
else if (lines >= max_lines) {
--- 206,231 ----
char buffer[SLEN];
struct menu_context *page = NULL;
struct menu_context *cpage;
+ struct header_rec *hdr = NULL;
+ FILE * mail_file = NULL;
+
DPRINT(Debug,4,
(&Debug,
"replying to form with;\n\tsubject=%s\n",
subject));
!
! if (!give_message_data(mailbox,mail_index,
! &hdr,&mail_file,NULL,
! NO_mime_parse))
! return 0;
!
/* now we can fly along and get to the message body... */
! max_lines = hdr->lines;
while (0 < (len_buf =
! mail_gets(buffer, SLEN, mail_file))) {
if (len_buf == 1) /* <return> only */
break;
else if (lines >= max_lines) {
***************
*** 246,252 ****
line with a triple asterisk... */
while (0 < (len_buf =
! mail_gets(buffer, SLEN, infile))) {
if (strcmp(buffer, "***\n") == 0)
break; /* we GOT it! It's a miracle! */
--- 253,259 ----
line with a triple asterisk... */
while (0 < (len_buf =
! mail_gets(buffer, SLEN, mail_file))) {
if (strcmp(buffer, "***\n") == 0)
break; /* we GOT it! It's a miracle! */
***************
*** 298,304 ****
/* !!! FIXME this is quite bogus ... */
while (0 < (len_buf =
! mail_gets(buffer, SLEN, infile))) {
DPRINT(Debug,9,(&Debug,
"- read %s", buffer));
if (strcmp(buffer, "***\n") == 0) /* end of form! */
--- 305,311 ----
/* !!! FIXME this is quite bogus ... */
while (0 < (len_buf =
! mail_gets(buffer, SLEN, mail_file))) {
DPRINT(Debug,9,(&Debug,
"- read %s", buffer));
if (strcmp(buffer, "***\n") == 0) /* end of form! */
***************
*** 338,344 ****
/** let's just mail this off now... **/
! mail_form(current_header,address, subject, infile,
mailbox /* for save_copy */,
aview);
--- 345,351 ----
/** let's just mail this off now... **/
! mail_form(mail_index,address, subject,
mailbox /* for save_copy */,
aview);
Index: elm2.4.ME+.117-cvs/src/hdrconfg.c
*** elm2.4.ME+.116/src/hdrconfg.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/hdrconfg.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.39 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: hdrconfg.c,v 1.40 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 756,765 ****
struct hdr_menu_item *h;
int precmd = 0;
!
int editor_available =
! strcmp(editor, "builtin") != 0 &&
! strcmp(editor, "none") != 0;
int LINES, COLUMNS;
--- 756,766 ----
struct hdr_menu_item *h;
int precmd = 0;
! char * editor_val = give_dt_estr_as_str(&editor_e,"editor");
int editor_available =
! editor_val &&
! strcmp(editor_val, "builtin") != 0 &&
! strcmp(editor_val, "none") != 0;
int LINES, COLUMNS;
***************
*** 901,912 ****
break;
case 'e':
! editor_available &= have_editor(editor);
!
! if (editor_available)
! edit_headers_on_editor(headers,editor,
! hdr_encoding_supported,
! page);
do_redraw = TRUE;
break;
--- 902,915 ----
break;
case 'e':
! if (editor_val) {
! editor_available &= have_editor(editor_val);
!
! if (editor_available)
! edit_headers_on_editor(headers,editor_val,
! hdr_encoding_supported,
! page);
! }
do_redraw = TRUE;
break;
Index: elm2.4.ME+.117-cvs/src/init.c
*** elm2.4.ME+.116/src/init.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/init.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: init.c,v 1.49 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: init.c,v 1.50 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.50 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 615,623 ****
}
/* Determine the mail file to read */
! if (!requestedmfiles || ! requestedmfiles[0])
! folder = enter_new_folder(defaultfile);
! else {
/* Assuming that file name given with -f is on
local-fs-charset and not system_charset
*/
--- 615,628 ----
}
/* Determine the mail file to read */
! if (!requestedmfiles || ! requestedmfiles[0]) {
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
!
! if (default_val)
! folder = enter_new_folder(default_val);
! else
! folder = NULL;
! } else {
/* Assuming that file name given with -f is on
local-fs-charset and not system_charset
*/
***************
*** 711,737 ****
"hostname = %-20s \tusername = %-20s \tfullname = %-20s\n",
hostname, username, full_username);
debug_action_call(&Debug,
! "home = %-20s \teditor = %-20s \trecvd_mail = %-20s\n",
! home, editor, recvd_mail);
debug_action_call(&Debug,
"folders = %-20s \tprintout = %-20s\n",
folders, printout);
debug_action_call(&Debug,
! "sent_mail = %-20s \tprefix = %-20s \tshell = %-20s\n\n",
! sent_mail, prefixchars, shell);
!
! if (local_signature[0])
! debug_action_call(&Debug,
! "local_signature = \"%s\"\n",
! local_signature);
! if (remote_signature[0])
! debug_action_call(&Debug,
! "remote_signature = \"%s\"\n",
! remote_signature);
! if (local_signature[0] || remote_signature[0])
! debug_action_call(&Debug, "\n");
}
#endif
}
--- 716,731 ----
"hostname = %-20s \tusername = %-20s \tfullname = %-20s\n",
hostname, username, full_username);
debug_action_call(&Debug,
! "home = %-20s \n",
! home);
debug_action_call(&Debug,
"folders = %-20s \tprintout = %-20s\n",
folders, printout);
debug_action_call(&Debug,
! " \tprefix = %-20s \tshell = %-20s\n\n",
! prefixchars, shell);
}
#endif
}
Index: elm2.4.ME+.117-cvs/src/leavembox.c
*** elm2.4.ME+.116/src/leavembox.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/src/leavembox.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.46 2004/05/02 11:15:26 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: leavembox.c,v 1.47 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.47 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 199,207 ****
/* Permissons check for and opening of =received done earlier */
DPRINT(Debug,10,(&Debug,
! "!! Copying from %s to %s\n",
! storage->current_folder->cur_folder_sys,
! recvd_mail));
DPRINT(Debug,2,(&Debug, "Storing message%s ", plural(to_store)));
for (i = 0; i < storage->message_count; i++) {
--- 199,206 ----
/* Permissons check for and opening of =received done earlier */
DPRINT(Debug,10,(&Debug,
! "!! Copying from %s to received folder\n",
! storage->current_folder->cur_folder_sys));
DPRINT(Debug,2,(&Debug, "Storing message%s ", plural(to_store)));
for (i = 0; i < storage->message_count; i++) {
Index: elm2.4.ME+.117-cvs/src/mailmsg1.c
*** elm2.4.ME+.116/src/mailmsg1.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/mailmsg1.c 2004-06-27 18:18:05.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailmsg1.c,v 1.36 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailmsg1.c,v 1.40 2004/06/27 15:18:05 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.40 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 27,38 ****
}
-
static int to_line, to_col;
! static int copy_the_msg P_((struct mailing_headers *headers,
! int *is_a_response, int options,
! struct menu_context *page));
static CONST unsigned char * csUs P_((const char *str));
static CONST unsigned char * csUs(str)
--- 27,39 ----
}
static int to_line, to_col;
! static enum copy_msg_mode { cm_no_copy = 0, cm_get_copy, cm_canceled_mail,
! cm_mimeforward
! } copy_the_msg P_((struct mailing_headers *headers,
! int options,
! struct menu_context *page));
static CONST unsigned char * csUs P_((const char *str));
static CONST unsigned char * csUs(str)
***************
*** 250,283 ****
struct menu_context *page));
static int send_msg_middle P_((
! struct header_rec * current_header,
struct expanded_address *given_to,
struct expanded_address *given_cc,
char *given_subject,
int options, int form_letter,
struct mailer_info *mailer_info,
- FILE *infile,
struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page
));
! static int send_msg_middle(current_header,
given_to, given_cc, given_subject, options,
! form_letter,mailer_info, infile,
mailbox,aview, page)
! struct header_rec * current_header;
struct expanded_address *given_to, *given_cc;
char *given_subject;
int options, form_letter;
struct mailer_info *mailer_info;
- FILE *infile;
struct MailboxView *mailbox;
struct AliasView *aview;
struct menu_context *page;
{
int res;
! int copy_msg = FALSE, is_a_response = FALSE;
char *p;
struct mailing_headers headers;
int LINES, COLUMNS;
--- 251,282 ----
struct menu_context *page));
static int send_msg_middle P_((
! int index,
struct expanded_address *given_to,
struct expanded_address *given_cc,
char *given_subject,
int options, int form_letter,
struct mailer_info *mailer_info,
struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page
));
! static int send_msg_middle(index,
given_to, given_cc, given_subject, options,
! form_letter,mailer_info,
mailbox,aview, page)
! int index;
struct expanded_address *given_to, *given_cc;
char *given_subject;
int options, form_letter;
struct mailer_info *mailer_info;
struct MailboxView *mailbox;
struct AliasView *aview;
struct menu_context *page;
{
int res;
! enum copy_msg_mode copy_msg = cm_no_copy;
char *p;
struct mailing_headers headers;
int LINES, COLUMNS;
***************
*** 317,328 ****
free_string(&X);
}
/* copy msg into edit buffer? */
copy_msg = copy_the_msg(&headers,
! &is_a_response, options, page);
! if (copy_msg) options |= MAIL_COPY_MSG;
! /* get the To: address and expand */
if (! get_to(&headers.to,mailer_info,aview, page))
return(0);
--- 316,338 ----
free_string(&X);
}
+
/* copy msg into edit buffer? */
copy_msg = copy_the_msg(&headers,
! options, page);
!
! switch (copy_msg) {
! case cm_get_copy:
! options |= MAIL_COPY_MSG;
! break;
! case cm_mimeforward:
! options |= MAIL_MIME_ATTCH;
! options |= MAIL_COPY_MSG;
! break;
! }
! /* get the To: address and expand --
! */
if (! get_to(&headers.to,mailer_info,aview, page))
return(0);
***************
*** 342,349 ****
if (batch_only) {
/** if we're batchmailing, let's send it and GET OUTTA HERE! **/
! res = mail(NULL, 0, form_letter,&headers,mailer_info,
! infile, mailbox /* for save_copy */, aview);
} else {
display_to(headers.to, page);
--- 352,359 ----
if (batch_only) {
/** if we're batchmailing, let's send it and GET OUTTA HERE! **/
! res = mail(-1, 0, form_letter,&headers,mailer_info,
! mailbox, aview);
} else {
display_to(headers.to, page);
***************
*** 367,374 ****
/** generate the In-Reply-To: header... **/
! if (is_a_response && 0 != (options & MAIL_REPLYING))
! generate_reply_to(current_header,&headers);
/* and mail that puppy outta here! */
--- 377,387 ----
/** generate the In-Reply-To: header... **/
! if ( 0 != (options & MAIL_REPLYING)) {
! struct header_rec *current_header = give_header(mailbox,index);
! if (current_header)
! generate_reply_to(current_header,&headers);
! }
/* and mail that puppy outta here! */
***************
*** 384,409 ****
dump_expanded_address(5,"cc",headers.cc);
dump_expanded_address(5,"bcc",headers.bcc);
! res=mail(current_header,options, form_letter,&headers,
! mailer_info, infile,
! mailbox /* save_copy needs */, aview);
}
free_it:
free_mailing_headers(&headers);
return res;
}
! int send_msg_l(current_header,
given_to, given_cc, given_subject, options, form_letter,
! infile, mailbox, aview, page
)
! struct header_rec * current_header;
struct addr_item *given_to, *given_cc;
char *given_subject;
int options, form_letter;
- FILE *infile;
struct MailboxView *mailbox;
struct AliasView *aview;
struct menu_context *page;
--- 397,422 ----
dump_expanded_address(5,"cc",headers.cc);
dump_expanded_address(5,"bcc",headers.bcc);
! res=mail(index,options, form_letter,&headers,
! mailer_info,
! mailbox, aview);
}
free_it:
+
free_mailing_headers(&headers);
return res;
}
! int send_msg_l(index,
given_to, given_cc, given_subject, options, form_letter,
! mailbox, aview, page
)
! int index;
struct addr_item *given_to, *given_cc;
char *given_subject;
int options, form_letter;
struct MailboxView *mailbox;
struct AliasView *aview;
struct menu_context *page;
***************
*** 421,431 ****
addr_to_expanded(&A,given_to,mailer_info,aview);
addr_to_expanded(&B,given_cc,mailer_info,aview);
! ret = send_msg_middle(current_header,&A,&B,
given_subject,options,form_letter,
! mailer_info, infile,
! mailbox /* save_copy needs */,
! aview, page);
free_expanded_address(&A);
free_expanded_address(&B);
--- 434,443 ----
addr_to_expanded(&A,given_to,mailer_info,aview);
addr_to_expanded(&B,given_cc,mailer_info,aview);
! ret = send_msg_middle(index,&A,&B,
given_subject,options,form_letter,
! mailer_info,
! mailbox, aview, page);
free_expanded_address(&A);
free_expanded_address(&B);
***************
*** 457,465 ****
argv_to_expanded(&A,argv,mailer_info,aview);
! ret = send_msg_middle(NULL,&A,&B,
given_subject,options,form,mailer_info,
! NULL,mailbox, aview, page);
free_expanded_address(&A);
free_expanded_address(&B);
--- 469,477 ----
argv_to_expanded(&A,argv,mailer_info,aview);
! ret = send_msg_middle(-1,&A,&B,
given_subject,options,form,mailer_info,
! mailbox, aview, page);
free_expanded_address(&A);
free_expanded_address(&B);
***************
*** 632,639 ****
if (build_address_l(cc,mailer_info, aview)) {
struct string * B = hdr_to_expval(*cc);
if (B) {
PutLineX(prompt_line, 11, FRM("%S"), B);
! if ((strcmp(editor, "builtin") != 0 && strcmp(editor, "none") != 0)
|| copy_message)
sleep_message();
free_string(&B);
--- 644,656 ----
if (build_address_l(cc,mailer_info, aview)) {
struct string * B = hdr_to_expval(*cc);
if (B) {
+ char * editor_val = give_dt_estr_as_str(&editor_e,"editor");
+
PutLineX(prompt_line, 11, FRM("%S"), B);
!
! if (!editor_val ||
! (strcmp(editor_val, "builtin") != 0 &&
! strcmp(editor_val, "none") != 0)
|| copy_message)
sleep_message();
free_string(&B);
***************
*** 643,683 ****
return(1); /* everything looks okay! */
}
! static int copy_the_msg(headers,is_a_response, options, page)
struct mailing_headers *headers;
- int *is_a_response;
int options;
struct menu_context *page;
{
int forwarding = 0 != (options & MAIL_FORWARDING);
int LINES, COLUMNS;
! /** Returns True iff the user wants to copy the message being
! replied to into the edit buffer before invoking the editor!
! Sets "is_a_response" to true if message is a response...
**/
char msg[SLEN];
! int answer = FALSE;
! menu_get_sizes(page,&LINES, &COLUMNS);
! if (forwarding)
! answer = TRUE;
! else if (headers->to.addrs_len > 0 && !mail_only) {
! /* predefined 'to' line! */
! if (auto_copy)
! answer = TRUE;
! else {
! elm_sfprintf(msg, sizeof msg,
! CATGETS(elm_msg_cat, ElmSet, ElmCopyMessageYN,
! "Copy message? (%c/%c) "),
! *def_ans_yes, *def_ans_no);
! answer = (want_to(msg, *def_ans_no, LINES-4, 0,
! page) == *def_ans_yes);
! }
! *is_a_response = TRUE;
}
return(answer);
--- 660,717 ----
return(1); /* everything looks okay! */
}
! static enum copy_msg_mode copy_the_msg(headers, options, page)
struct mailing_headers *headers;
int options;
struct menu_context *page;
{
int forwarding = 0 != (options & MAIL_FORWARDING);
+ int replying = 0 != (options & MAIL_REPLYING);
int LINES, COLUMNS;
! /** Returns True iff the user wants to copy the message being
! replied to into the edit buffer before invoking the editor!
**/
char msg[SLEN];
! static enum copy_msg_mode answer = cm_no_copy;
! menu_get_sizes(page,&LINES, &COLUMNS);
! if (forwarding) {
! int X = mimeforward;
!
! if (askmimeforward) {
! int def = mimeforward ? *def_ans_yes : *def_ans_no;
! int X1;
!
! X1 = prompt_letter(LINES-4,"",def,
! PROMPT_yesno,page,
! CATGETS(elm_msg_cat, ElmSet, ElmMimeFWMessageYN,
! "Forward message as separate part? (%c/%c) "),
! *def_ans_yes, *def_ans_no);
! X = (X1 == *def_ans_yes);
! }
!
! answer = X ? cm_mimeforward : cm_get_copy;
!
! } else if (replying) {
! /* predefined 'to' line! */
! if (auto_copy)
! answer = cm_get_copy;
! else {
! int X,X1;
!
! X1 = prompt_letter(LINES-4,"",*def_ans_no,
! PROMPT_yesno,page,
! CATGETS(elm_msg_cat, ElmSet, ElmCopyMessageYN,
! "Copy message? (%c/%c) "),
! *def_ans_yes, *def_ans_no);
! X = (X1 == *def_ans_yes);
!
! answer = X ? cm_get_copy : cm_no_copy;
! }
}
return(answer);
***************
*** 758,766 ****
dump_expanded_address(5,"bcc",headers.bcc);
main_state();
! ret = mail(NULL, edit_message ? MAIL_EDIT_MSG : 0, form_letter,
! &headers,mailer_info, NULL,
! mailbox /* save_copy needs */, aview);
main_state();
/*
--- 792,800 ----
dump_expanded_address(5,"bcc",headers.bcc);
main_state();
! ret = mail(-1, edit_message ? MAIL_EDIT_MSG : 0, form_letter,
! &headers,mailer_info,
! mailbox, aview);
main_state();
/*
Index: elm2.4.ME+.117-cvs/src/mailmsg2.c
*** elm2.4.ME+.116/src/mailmsg2.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/mailmsg2.c 2004-06-27 18:18:06.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.76 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.76 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.83 2004/06/27 15:18:06 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.83 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 76,82 ****
static int append_sig P_((FILE *file,struct mailing_headers *headers,
struct menu_context *page));
! static int recall_last_msg P_((char *filename, int copy_msg,
int *cancelled_msg, int *already_has_text,
struct menu_context *page));
--- 76,82 ----
static int append_sig P_((FILE *file,struct mailing_headers *headers,
struct menu_context *page));
! static int recall_last_msg P_((char *filename, int copy_msg,
int *cancelled_msg, int *already_has_text,
struct menu_context *page));
***************
*** 102,121 ****
return (CONST unsigned char *)str;
}
! int mail(current_header,options,form, headers,mailer_info,
! infile,mailbox,aview)
! struct header_rec * current_header;
int options,form;
struct mailing_headers * headers;
struct mailer_info *mailer_info;
! FILE *infile;
! struct MailboxView *mailbox; /* savecopy() needs list of folders */
struct AliasView *aview;
{
! int copy_msg = 0 != current_header && 0 != (options & MAIL_COPY_MSG);
! int edit_message = 0 != (options & MAIL_EDIT_MSG);
! int forwarding = 0 != current_header && 0 != (options & MAIL_FORWARDING);
struct Attachments attachments = NULL_Attachments;
--- 102,199 ----
return (CONST unsigned char *)str;
}
+ static void handle_mailer_options P_((struct mailer_info *mailer_info,
+ mime_send_t *mime_info,
+ int *dsn,
+ struct Attachments *attachments,
+ int *reask));
+
+ static void handle_mailer_options(mailer_info,mime_info,dsn, attachments,
+ reask)
+ struct mailer_info *mailer_info;
+ mime_send_t *mime_info;
+ int *dsn;
+ struct Attachments *attachments;
+ int *reask; /* on reask loop */
+ {
+ int i;
+ int changed = 0;
+
+ if (query_mailer_info(mailer_info,MI_HAVE_DSN)) {
+ DPRINT(Debug,8,(&Debug,"mailer supports DSN\n"));
+ if(DSN_success || !reask)
+ (*dsn) |= DSN_SUCCESS|DSN_FAILURE|DSN_DELAY;
+ } else if (*dsn) {
+ *dsn = 0;
+
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmNoDSN,
+ "Mailer do not support DSN, disabling it"));
+
+ if (reask)
+ *reask = 1;
+
+ }
+
+
+ mime_info->raw_level = mailer_7bit;
+
+ if (query_mailer_info(mailer_info,MI_HAVE_8BITMIME)) {
+ DPRINT(Debug,8,(&Debug,"mailer supports 8BITMIME\n"));
+ mime_info->raw_level = mailer_8bit;
! if (query_mailer_info(mailer_info,MI_HAVE_BINARYMIME)) {
! DPRINT(Debug,8,(&Debug,"mailer supports BINARYMIME\n"));
! mime_info->raw_level = mailer_binary;
! }
! }
!
! if (allow_no_encoding >= 2)
! /* Just send BINARY anyway */
! mime_info->raw_level = mailer_binary;
! else if (allow_no_encoding >= 1 &&
! mime_info->raw_level < mailer_8bit)
! /* Just send 8BIT anyway */
! mime_info->raw_level = mailer_8bit;
!
! for (i = 0; i < attachments->attachment_count; i++) {
! mime_t *part = & (attachments->attach_files[i]);
!
! if (ENCODING_BINARY == part->encoding &&
! mime_info->raw_level < mailer_binary) {
! part->encoding = ENCODING_BASE64;
! changed++;
! }
!
! if (ENCODING_8BIT == part->encoding &&
! mime_info->raw_level < mailer_8bit) {
! part->encoding = ENCODING_BASE64;
! changed++;
! }
! }
!
! if (changed) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmChangedAttachEnc,
! "Changed encoding of %d attachments"),
! changed);
!
! if (reask)
! *reask = 1;
! }
! }
!
! int mail(mail_index,options,form, headers,mailer_info,
! mailbox,aview)
! int mail_index;
int options,form;
struct mailing_headers * headers;
struct mailer_info *mailer_info;
! struct MailboxView *mailbox /* for mail_index */;
struct AliasView *aview;
{
! int copy_msg = 0 != (options & MAIL_COPY_MSG);
! int edit_message = 0 != (options & MAIL_EDIT_MSG);
! int forwarding = 0 != (options & MAIL_FORWARDING);
! int mime_attach = 0 != (options & MAIL_MIME_ATTCH);
struct Attachments attachments = NULL_Attachments;
***************
*** 136,142 ****
char fname[SLEN], very_long_buffer[VERY_LONG_STRING];
int ch, line_len;
! register int retransmit = FALSE;
int already_has_text = FALSE; /* we need an ADDRESS */
int signature_done = FALSE;
int need_redraw = 0;
--- 214,220 ----
char fname[SLEN], very_long_buffer[VERY_LONG_STRING];
int ch, line_len;
! int retransmit = FALSE;
int already_has_text = FALSE; /* we need an ADDRESS */
int signature_done = FALSE;
int need_redraw = 0;
***************
*** 173,199 ****
zero_copy_file(©_FILE);
- if (query_mailer_info(mailer_info,MI_HAVE_DSN)) {
- DPRINT(Debug,8,(&Debug,"mailer supports DSN\n"));
- if(DSN_success)
- dsn |= DSN_SUCCESS|DSN_FAILURE|DSN_DELAY;
- }
-
- if (current_header && (options & MAIL_ISFORM))
- copy_msg = FORM;
-
- /* Initialize structure */
- clear_mime_send_info(&MIME_info,mailer_info);
-
- if (allow_no_encoding >= 2)
- /* Just send BINARY anyway */
- MIME_info.raw_level = mailer_binary;
- else if (allow_no_encoding >= 1 &&
- MIME_info.raw_level < mailer_8bit)
- /* Just send 8BIT anyway */
- MIME_info.raw_level = mailer_8bit;
-
-
dump_expanded_address(4,"Mailing to",headers->to);
DPRINT(Debug,4, (&Debug," (with%s editing)\n",
edit_message? "" : "out"));
--- 251,256 ----
***************
*** 226,233 ****
cur_editfile,
cancelled_msg ? "" : " not"
));
! retransmit = recall_last_msg(cur_editfile, copy_msg, &cancelled_msg,
! &already_has_text,
page);
if (retransmit)
cur_editcharset = display_charset; /* ???? FIXME */
--- 283,290 ----
cur_editfile,
cancelled_msg ? "" : " not"
));
! retransmit = recall_last_msg(cur_editfile, copy_msg, &cancelled_msg,
! &already_has_text,
page);
if (retransmit)
cur_editcharset = display_charset; /* ???? FIXME */
***************
*** 297,452 ****
fclose(input);
already_has_text = TRUE;
}
- if (copy_msg == FORM) {
- elm_sfprintf(fname, sizeof fname,
- FRM("%s%s%d"), temp_dir, temp_form_file, getpid());
- fclose(reply); /* we can't retransmit a form! */
- if (access(fname,ACCESS_EXISTS) != 0) {
- lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotFindForm,
- "Couldn't find forms file!"));
goto fail_label;
}
! DPRINT(Debug,4,(&Debug,
! "-- renaming existing file %s to file %s --\n",
! fname, cur_editfile));
! rename(fname, cur_editfile);
! cur_editcharset = system_charset; /* FIXME: Is correct? */
! } else if (copy_msg && ! retransmit) { /* if retransmit we have it! */
! struct string * From_buffer = NULL;
! struct addr_item *p;
! if (current_header->from) {
! for (p = current_header->from; p->addr && p->fullname; p++) {
! if (From_buffer)
! add_ascii_to_string(From_buffer,s2us(", "));
! else
! From_buffer = new_string(display_charset);
! if (string_len(p->fullname)) {
! struct string * temp = cat_strings(From_buffer,
! p->fullname,1);
! free_string(&From_buffer);
! From_buffer = temp;
! } else {
! add_ascii_to_string(From_buffer,csUs(p->addr));
! }
}
- }
-
- if (!cur_editcharset)
- cur_editcharset = display_charset;
! if (!forwarding || (forwarding && !mimeforward)) {
! if (forwarding && !quote_forward) {
! if (From_buffer) {
! elm_fprintf(reply,
! CATGETS(elm_msg_cat, ElmSet, ElmForwarded1,
! "----- Forwarded message from %S -----\n\n"),
! From_buffer);
! } else
! elm_fprintf (reply,
! CATGETS(elm_msg_cat, ElmSet,
! ElmForwarded2,
! "----- Forwarded message (env-from %s) -----\n\n"),
! current_header->env_from);
!
! } else if (attribution[0] && current_header) {
! if (From_buffer) {
! char * str = us2s(stream_from_string(From_buffer,1,NULL));
! fprintf(reply, attribution, str);
! free(str);
! } else
! fprintf(reply, attribution, current_header->env_from);
! fputc('\n', reply);
! }
! if (edit_message && infile) {
! int NOHDR = forwarding ? noheaderfwd : noheader;
! int NOQUOTE = forwarding && !quote_forward;
! copy_message_f(infile,current_header,
! NOQUOTE ? "" : prefixchars, reply,
! ( NOHDR ? CM_REMOVE_HEADER : 0 )
! | CM_REMOVE_ENVELOPE | CM_DECODE
! /* I think it is good idea to use CM_FILT_HDR
! * even when we don't have forwarding ... -KEH
! */
! | CM_FILT_HDR, cur_editcharset);
! already_has_text = TRUE; /* we just added it, right? */
! } else if (infile) {
! int NOHDR = forwarding ? noheaderfwd : noheader;
! copy_message_f(infile,current_header,
! "", reply,
! ( NOHDR ? CM_REMOVE_HEADER : 0 )
! | CM_REMOVE_ENVELOPE
! /* I added CM_DECODE to here -KEH */
! | CM_DECODE, cur_editcharset);
! }
! if (forwarding && !quote_forward) {
! if (From_buffer)
! elm_fprintf (reply,
! CATGETS(elm_msg_cat, ElmSet, ElmForwarded3,
! "----- End of forwarded message from %S -----\n"),
! From_buffer);
! else
! elm_fprintf (reply,
! CATGETS(elm_msg_cat, ElmSet,
! ElmForwarded4,
! "----- End of forwarded message (env-from %s) -----\n"),
! current_header->env_from);
}
- } else {
- FILE *tmpfp;
- /* Use MESSAGE/RFC822 to forward messages. */
! elm_sfprintf (very_long_buffer, sizeof very_long_buffer,
! FRM("%selmfwd.%d"),
! temp_dir, getpid ());
! if (! (tmpfp = safeopen_rdwr (very_long_buffer))) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmFailFileForward,
! "Failed to create file for forwarding"));
! } else if (infile) {
! mime_t attach;
! mime_t_zero(&attach);
! attach.pathname = safe_strdup(very_long_buffer);
!
! copy_message_f(infile,current_header,"",tmpfp,
! CM_REMOVE_ENVELOPE,NULL);
! attach.length = fsize(tmpfp);
! fclose (tmpfp);
! attach.unlink = 1; /* mark for later deletion */
! attach.TYPE = give_media_type2(MIME_TYPE_MESSAGE,"rfc822", 0);
! if (!attach.TYPE)
! mime_panic(__FILE__,__LINE__,"mail",
! "message/rfc822 is not known");
! if (From_buffer)
! attach.description =
! format_string(CATGETS(elm_msg_cat, ElmSet,
! ElmForwardedMesg1,
! "Forwarded message from %S"),
! From_buffer);
! else
! attach.description =
! format_string(CATGETS(elm_msg_cat, ElmSet,
! ElmForwardedMesg2,
! "Forwarded message from %s"),
! current_header->env_from);
!
! /* Pick up the encoding from the message. */
! attach.encoding = ENCODING_7BIT;
! (void) update_encoding (&(attach.encoding),
! current_header->mime_rec.encoding);
! add_Attachments(&attachments,&attach);
}
}
! if (From_buffer)
! free_string(&From_buffer);
! }
if (!cur_editcharset)
cur_editcharset = display_charset;
--- 354,547 ----
fclose(input);
already_has_text = TRUE;
}
+
+ /* Initialize structure -- XXX KESKEN */
+ clear_mime_send_info(&MIME_info);
+ handle_mailer_options(mailer_info,&MIME_info,&dsn,
+ &attachments, NULL);
+ if (mailbox && mail_index >= 0 &&
+ (copy_msg || forwarding)) {
+ struct header_rec * hdr = NULL;
+ FILE * mailbox_file = NULL;
+
+
+ if (!give_message_data(mailbox,mail_index,
+ &hdr,&mailbox_file,NULL,
+ mime_parse_routine)) {
+
+ DPRINT(Debug,4,(&Debug,
+ "Failed to retrieve original mail for replying/forwarding\n"));
+
+ fclose(reply); reply = NULL;
+
goto fail_label;
}
!
! if ((options & MAIL_ISFORM))
! copy_msg = FORM;
! if (copy_msg == FORM) {
! elm_sfprintf(fname, sizeof fname,
! FRM("%s%s%d"), temp_dir, temp_form_file, getpid());
!
! /* we can't retransmit a form! */
! fclose(reply); reply = NULL;
! if (access(fname,ACCESS_EXISTS) != 0) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCouldNotFindForm,
! "Couldn't find forms file!"));
!
! goto fail_label;
}
! DPRINT(Debug,4,(&Debug,
! "-- renaming existing file %s to file %s --\n",
! fname, cur_editfile));
! rename(fname, cur_editfile);
! cur_editcharset = system_charset; /* FIXME: Is correct? */
!
! } else if (! retransmit) { /* if retransmit we have it! */
! struct string * From_buffer = NULL;
! struct addr_item *p;
!
! if (hdr->from) {
! for (p = hdr->from; p->addr && p->fullname; p++) {
! if (From_buffer)
! add_ascii_to_string(From_buffer,s2us(", "));
! else
! From_buffer = new_string(display_charset);
! if (string_len(p->fullname)) {
! struct string * temp = cat_strings(From_buffer,
! p->fullname,1);
! free_string(&From_buffer);
! From_buffer = temp;
! } else {
! add_ascii_to_string(From_buffer,csUs(p->addr));
! }
! }
}
! if (!cur_editcharset)
! cur_editcharset = display_charset;
! if (!mime_attach) {
! if (forwarding && !quote_forward) {
! if (From_buffer) {
! elm_fprintf(reply,
! CATGETS(elm_msg_cat, ElmSet, ElmForwarded1,
! "----- Forwarded message from %S -----\n\n"),
! From_buffer);
! } else
! elm_fprintf (reply,
! CATGETS(elm_msg_cat, ElmSet,
! ElmForwarded2,
! "----- Forwarded message (env-from %s) -----\n\n"),
! hdr->env_from);
!
! } else if (attribution[0] && hdr) {
! if (From_buffer) {
! char * str = us2s(stream_from_string(From_buffer,1,NULL));
! fprintf(reply, attribution, str);
! free(str);
! } else
! fprintf(reply, attribution, hdr->env_from);
! fputc('\n', reply);
! }
! if (edit_message && mailbox_file) {
! int NOHDR = forwarding ? noheaderfwd : noheader;
! int NOQUOTE = forwarding && !quote_forward;
! copy_message_f(mailbox_file,hdr,
! NOQUOTE ? "" : prefixchars, reply,
! ( NOHDR ? CM_REMOVE_HEADER : 0 )
! | CM_REMOVE_ENVELOPE | CM_DECODE
! /* I think it is good idea to use CM_FILT_HDR
! * even when we don't have forwarding ... -KEH
! */
! | CM_FILT_HDR, cur_editcharset);
! already_has_text = TRUE; /* we just added it, right? */
! } else if (mailbox_file) {
! int NOHDR = forwarding ? noheaderfwd : noheader;
! copy_message_f(mailbox_file,hdr,
! "", reply,
! ( NOHDR ? CM_REMOVE_HEADER : 0 )
! | CM_REMOVE_ENVELOPE
! /* I added CM_DECODE to here -KEH */
! | CM_DECODE, cur_editcharset);
! }
!
! if (forwarding && !quote_forward) {
! if (From_buffer)
! elm_fprintf (reply,
! CATGETS(elm_msg_cat, ElmSet, ElmForwarded3,
! "----- End of forwarded message from %S -----\n"),
! From_buffer);
! else
! elm_fprintf (reply,
! CATGETS(elm_msg_cat, ElmSet,
! ElmForwarded4,
! "----- End of forwarded message (env-from %s) -----\n"),
! hdr->env_from);
! }
! } else {
! FILE *tmpfp;
! /* Use MESSAGE/RFC822 to forward messages. */
!
! elm_sfprintf (very_long_buffer, sizeof very_long_buffer,
! FRM("%selmfwd.%d"),
! temp_dir, getpid ());
! if (! (tmpfp = safeopen_rdwr (very_long_buffer))) {
! lib_error(CATGETS(elm_msg_cat, ElmSet, ElmFailFileForward,
! "Failed to create file for forwarding"));
! } else if (mailbox_file) {
! mime_t attach;
!
! mime_t_zero(&attach);
!
! attach.pathname = safe_strdup(very_long_buffer);
! copy_message_f(mailbox_file,hdr,"",tmpfp,
! CM_REMOVE_ENVELOPE,NULL);
!
! attach.length = fsize(tmpfp);
! fclose (tmpfp);
! attach.unlink = 1; /* mark for later deletion */
! attach.TYPE = give_media_type2(MIME_TYPE_MESSAGE,"rfc822", 0);
! if (!attach.TYPE)
! mime_panic(__FILE__,__LINE__,"mail",
! "message/rfc822 is not known");
!
! if (forwarding) {
! if (From_buffer)
! attach.description =
! format_string(CATGETS(elm_msg_cat, ElmSet,
! ElmForwardedMesg1,
! "Forwarded message from %S"),
! From_buffer);
! else
! attach.description =
! format_string(CATGETS(elm_msg_cat, ElmSet,
! ElmForwardedMesg2,
! "Forwarded message from %s"),
! hdr->env_from);
! }
!
! /* Pick up the encoding from the message. */
! attach.encoding = ENCODING_7BIT;
! (void) update_encoding (&(attach.encoding),
! hdr->mime_rec.encoding);
! add_Attachments(&attachments,&attach);
! }
}
+ if (From_buffer)
+ free_string(&From_buffer);
}
!
! }
if (!cur_editcharset)
cur_editcharset = display_charset;
***************
*** 467,482 ****
/* append signature now if we are going to use an external editor */
/* Don't worry about the remote/local determination too much */
! if (already_has_text ||
! (strcmp(editor,"builtin") != 0 && strcmp(editor,"none") != 0)) {
! signature_done = TRUE;
! if (!retransmit && copy_msg != FORM)
! already_has_text |= append_sig(reply, headers, page);
}
! if (! retransmit && copy_msg != FORM)
! if (reply != NULL)
! (void) fclose(reply); /* on replies, it won't be open! */
/** Edit the message **/
--- 562,584 ----
/* append signature now if we are going to use an external editor */
/* Don't worry about the remote/local determination too much */
! {
! char * editor_val = give_dt_estr_as_str(&editor_e,"editor");
!
! if (already_has_text ||
! (editor_val &&
! strcmp(editor_val,"builtin") != 0 &&
! strcmp(editor_val,"none") != 0)) {
! signature_done = TRUE;
! if (!retransmit && copy_msg != FORM)
! already_has_text |= append_sig(reply, headers, page);
! }
}
! if (reply != NULL) {
! (void) fclose(reply);
! reply = NULL;
! }
/** Edit the message **/
***************
*** 503,511 ****
if (attachments.attachment_count > 0)
options |= MAIL_HAVE_ATTACHMENTS;
#ifdef USE_PGP
! if (current_header &&
! current_header->pgp & PGP_MESSAGE)
! options |= MAIL_HAVE_PGP_ENCODED;
#endif
/* Now .mailheaders is read before mail is composed! */
--- 605,616 ----
if (attachments.attachment_count > 0)
options |= MAIL_HAVE_ATTACHMENTS;
#ifdef USE_PGP
! if (mailbox && mail_index >= 0) {
! struct header_rec *hdr = give_header(mailbox,mail_index);
! if (hdr &&
! hdr->pgp & PGP_MESSAGE)
! options |= MAIL_HAVE_PGP_ENCODED;
! }
#endif
/* Now .mailheaders is read before mail is composed! */
***************
*** 583,588 ****
--- 688,709 ----
signature_done = TRUE;
}
+ if (code >= 0) { /* If not canceled */
+ int r = mailer_restarted(mailer_info);
+
+ if (r > 0)
+ handle_mailer_options(mailer_info,&MIME_info,&dsn,
+ &attachments, &reask_verify);
+
+ if (r < 0) {
+ lib_error(CATGETS(elm_msg_cat, ElmSet, ElmMailerDisconnected,
+ "Mailer disconnected! Can't send message. Use f)orget !"));
+
+
+ reask_verify = TRUE; /* Go to verify_transmission again. */
+ }
+ }
+
MIME_info.encoding_top = ENCODING_7BIT;/* Encoding for Multipart/ */
#if 0
***************
*** 745,751 ****
save_copy(headers,©_FILE, form, &MIME_info,
converted_buffer,
- mailbox,
page); /* Need access for all open
mailboxes/folders */
--- 866,871 ----
***************
*** 887,897 ****
}
}
! int mail_form(current_header, address, subj, infile,mailbox, aview)
! struct header_rec *current_header;
struct addr_item *address;
char *subj;
- FILE *infile;
struct MailboxView *mailbox;
struct AliasView *aview;
{
--- 1007,1016 ----
}
}
! int mail_form(mail_index, address, subj, mailbox, aview)
! int mail_index;
struct addr_item *address;
char *subj;
struct MailboxView *mailbox;
struct AliasView *aview;
{
***************
*** 912,919 ****
addr_to_expanded(&A,address,mailer_info,aview);
copy_expanded_address(&headers.to, A);
! res = mail(current_header,MAIL_ISFORM,NO, &headers,mailer_info,
! infile, mailbox /* save_copy needs */,
aview);
free_expanded_address(&A);
--- 1031,1038 ----
addr_to_expanded(&A,address,mailer_info,aview);
copy_expanded_address(&headers.to, A);
! res = mail(mail_index,MAIL_ISFORM,NO, &headers,mailer_info,
! mailbox /* save_copy needs */,
aview);
free_expanded_address(&A);
***************
*** 1182,1194 ****
if (do_redraw) {
do_redraw = 0;
*need_redraw_p = TRUE;
!
menu_ClearScreen(page);
print_format_center(0,
CATGETS(elm_msg_cat, ElmSet,
ElmMailScreenTitle,
"Mail Pre-Send Screen"));
show_presend_headers(headers,hdr_charset, page);
if (headers->env_from && user_level > 0) {
--- 1301,1315 ----
if (do_redraw) {
do_redraw = 0;
*need_redraw_p = TRUE;
!
menu_ClearScreen(page);
print_format_center(0,
CATGETS(elm_msg_cat, ElmSet,
ElmMailScreenTitle,
"Mail Pre-Send Screen"));
+ show_last_error();
+
show_presend_headers(headers,hdr_charset, page);
if (headers->env_from && user_level > 0) {
***************
*** 1463,1477 ****
if (*form_p == PREFORMATTED) {
bad_cmd = TRUE;
} else {
if (*form_p == YES)
*form_p = MAYBE;
*need_redraw_p = TRUE;
! do_redraw = 1;
! if (edit_the_message(filename, already_has_text,
! headers,editor,file_set,
! mailer_info, mailbox,
! aview, page) != 0)
! return -1;
}
break;
--- 1584,1608 ----
if (*form_p == PREFORMATTED) {
bad_cmd = TRUE;
} else {
+
+ char * editor_val = give_dt_estr_as_str(&editor_e,"editor");
+
if (*form_p == YES)
*form_p = MAYBE;
*need_redraw_p = TRUE;
! if (editor_val) {
! do_redraw = 1;
! if (edit_the_message(filename, already_has_text,
! headers,editor_val,file_set,
! mailer_info, mailbox,
! aview, page) != 0)
! return -1;
! } else {
! sleep_message();
! if (no_editor_edit_the_message(filename,headers,file_set,
! mailer_info,mailbox,aview))
! return -1;
! }
}
break;
***************
*** 1949,1955 ****
information). You can't necessarily finger someone in the
same domain. */
! if (!batch_only && (local_signature[0] || remote_signature[0])) {
char filename2[SLEN];
char *sig = "";
--- 2080,2093 ----
information). You can't necessarily finger someone in the
same domain. */
! char * lsig = give_dt_estr_as_str(&local_signature_e, "localsignature");
! char * rsig = give_dt_estr_as_str(&remote_signature_e,"remotesignature");
!
!
! if (!lsig || !rsig)
! error_wait();
!
! if (!batch_only && (lsig || rsig)) {
char filename2[SLEN];
char *sig = "";
***************
*** 1959,1965 ****
struct addr_item *p;
! sig = local_signature;
/* check To: list */
for (p = headers->to.addrs ;
--- 2097,2103 ----
struct addr_item *p;
! sig = lsig;
/* check To: list */
for (p = headers->to.addrs ;
***************
*** 1978,1989 ****
ptr++;
if (istrcmp(ptr, hostfullname) != 0) {
! sig = remote_signature;
break;
}
}
! if (sig == local_signature) /* still local? */
/* check Cc: */
for (p = headers->cc.addrs ;
p < headers->cc.addrs + headers->cc.addrs_len;
--- 2116,2127 ----
ptr++;
if (istrcmp(ptr, hostfullname) != 0) {
! sig = rsig;
break;
}
}
! if (sig == lsig) /* still local? */
/* check Cc: */
for (p = headers->cc.addrs ;
p < headers->cc.addrs + headers->cc.addrs_len;
***************
*** 2001,2012 ****
ptr++;
if (istrcmp(ptr, hostfullname) != 0) {
! sig = remote_signature;
break;
}
}
! if (sig[0]) { /* if there is a signature file */
if (sig[0] != '/')
elm_sfprintf(filename2, sizeof filename2,
FRM("%s/%s"),
--- 2139,2150 ----
ptr++;
if (istrcmp(ptr, hostfullname) != 0) {
! sig = rsig;
break;
}
}
! if (sig && sig[0]) { /* if there is a signature file */
if (sig[0] != '/')
elm_sfprintf(filename2, sizeof filename2,
FRM("%s/%s"),
Index: elm2.4.ME+.117-cvs/src/Makefile.SH
*** elm2.4.ME+.116/src/Makefile.SH 2004-02-25 21:39:18.000000000 +0200
--- elm2.4.ME+.117-cvs/src/Makefile.SH 2004-06-18 23:40:56.000000000 +0300
***************
*** 31,37 ****
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.50 2004/02/20 19:38:08 hurtta Exp $
#
# Makefile for the ELM mail program.
#
--- 31,37 ----
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.51 2004/06/18 20:40:56 hurtta Exp $
#
# Makefile for the ELM mail program.
#
Index: elm2.4.ME+.117-cvs/src/messages/def_messages.h
*** elm2.4.ME+.116/src/messages/def_messages.h 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/messages/def_messages.h 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,4 ****
! /* $Id: def_messages.h,v 1.6 2004/03/27 18:31:48 hurtta Exp $ */
#include "headers.h"
#include "me.h"
--- 1,4 ----
! /* $Id: def_messages.h,v 1.7 2004/06/18 20:40:56 hurtta Exp $ */
#include "headers.h"
#include "me.h"
***************
*** 90,107 ****
struct mailbox_type * mailbox_type;
union {
! struct mv_storage {
! struct current_storage ** the_mailbox;
! int mailbox_count;
!
! } * storage;
!
! struct mv_digest {
! struct current_digest ** the_digest;
! int digest_count;
! } * digest;
struct mv_partial {
struct MailboxView * parent_mailbox;
struct composite_vector * composite;
--- 90,102 ----
struct mailbox_type * mailbox_type;
union {
! struct mv_storage * storage;
!
! struct mv_digest * digest;
struct mv_partial {
+ /* partial_to_mailbox_view() sets parent so mv_partial need to
+ be defined on here */
struct MailboxView * parent_mailbox;
struct composite_vector * composite;
Index: elm2.4.ME+.117-cvs/src/messages/digest.c
*** elm2.4.ME+.116/src/messages/digest.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/src/messages/digest.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: digest.c,v 1.10 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.10 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: digest.c,v 1.11 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.11 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 20,25 ****
--- 20,30 ----
};
+ struct mv_digest {
+ struct current_digest ** the_digest;
+ int digest_count;
+ };
+
#if ANSI_C
#define S_(x) static x;
#else
Index: elm2.4.ME+.117-cvs/src/messages/Makefile.SH
*** elm2.4.ME+.116/src/messages/Makefile.SH 2003-10-12 12:48:03.000000000 +0300
--- elm2.4.ME+.117-cvs/src/messages/Makefile.SH 2004-06-18 23:40:56.000000000 +0300
***************
*** 17,23 ****
echo "Extracting src/messages/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.5 2003/10/01 17:34:34 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
--- 17,23 ----
echo "Extracting src/messages/Makefile (with variable substitutions)"
cat >Makefile <<!GROK!THIS!
#!$make
! # $Id: Makefile.SH,v 1.6 2004/06/18 20:40:56 hurtta Exp $
# Makefile for the ELM mail program.
#
# Variables
***************
*** 43,49 ****
SHELL = /bin/sh
OBJ = messages.o header_alloc.o storage.o digest.o \
! partial.o
all: Makefile libmessages.a
--- 43,49 ----
SHELL = /bin/sh
OBJ = messages.o header_alloc.o storage.o digest.o \
! partial.o
all: Makefile libmessages.a
Index: elm2.4.ME+.117-cvs/src/messages/messages.c
*** elm2.4.ME+.116/src/messages/messages.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/src/messages/messages.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: messages.c,v 1.13 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: messages.c,v 1.14 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 14,24 ****
#define MAILBOXVIEW_magic 0xF500
static struct MailboxView * malloc_view P_((struct mailbox_type *t));
static struct MailboxView * malloc_view(t)
struct mailbox_type *t;
{
! struct MailboxView *ret;
ret = safe_malloc(sizeof (*ret));
--- 14,64 ----
#define MAILBOXVIEW_magic 0xF500
+ static struct MailboxView ** mailbox_list = NULL;
+ static int mailbox_list_len = 0;
+
+ struct MailboxView * give_next_open_mailbox(idx, signal)
+ int *idx;
+ int signal;
+ {
+ int i = *idx;
+
+ struct MailboxView *ret = NULL;
+
+ do {
+ if (*idx >= mailbox_list_len || *idx < 0)
+ return NULL;
+
+
+ if (mailbox_list[*idx]) {
+
+
+ if (mailbox_list[*idx]->magic != MAILBOXVIEW_magic)
+ panic("MBX VIEW PANIC",__FILE__,__LINE__,"malloc_view",
+ "Bad type magic number",signal);
+
+
+ ret = mailbox_list[*idx];
+
+ }
+
+ (*idx)++;
+
+ } while (!ret);
+
+
+ SIGDPRINT(Debug,7,(&Debug,
+ "give_next_open_mailbox[%d->%d] = %p\n",
+ i,*idx,ret));
+
+ return ret;
+ }
+
static struct MailboxView * malloc_view P_((struct mailbox_type *t));
static struct MailboxView * malloc_view(t)
struct mailbox_type *t;
{
! struct MailboxView *ret, **X;
ret = safe_malloc(sizeof (*ret));
***************
*** 42,47 ****
--- 82,92 ----
ret->mailbox_type->mt_init_it(ret);
+ X = safe_realloc(mailbox_list,(mailbox_list_len+1)* sizeof (*X));
+ X[mailbox_list_len] = ret;
+ mailbox_list = X;
+ mailbox_list_len++;
+
return ret;
}
***************
*** 141,149 ****
--- 186,197 ----
}
+
void free_mailbox(mailbox)
struct MailboxView **mailbox;
{
+ int i;
+
if ((*mailbox)->magic != MAILBOXVIEW_magic)
panic("MBX VIEW PANIC",__FILE__,__LINE__,"free_mailbox",
"Bad magic number",0);
***************
*** 152,158 ****
--- 200,216 ----
panic("MBX VIEW PANIC",__FILE__,__LINE__,"free_mailbox",
"Bad type magic number",0);
+ for ( i = 0; i < mailbox_list_len; i++) {
+ if (mailbox_list[i] == *mailbox) {
+ mailbox_list[i] = NULL;
+ goto okei;
+ }
+ }
+
+ panic("MBX VIEW PANIC",__FILE__,__LINE__,"free_mailbox",
+ "mailbox not found from list",0);
+ okei:
(*mailbox)->mailbox_type->mt_free_it(*mailbox);
if ((*mailbox)->mailbox_title)
***************
*** 167,172 ****
--- 225,236 ----
(*mailbox)->magic = 0; /* Invalidate */
free(*mailbox);
*mailbox = NULL;
+
+ for ( ; i < mailbox_list_len-1; i++) {
+ mailbox_list[i] = mailbox_list[i+1];
+ }
+ mailbox_list[i] = NULL;
+ mailbox_list_len--;
}
/* Return 1 if redraw required */
Index: elm2.4.ME+.117-cvs/src/messages/storage.c
*** elm2.4.ME+.116/src/messages/storage.c 2004-05-19 19:10:14.000000000 +0300
--- elm2.4.ME+.117-cvs/src/messages/storage.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: storage.c,v 1.7 2004/04/24 12:30:03 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: storage.c,v 1.8 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.8 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 17,22 ****
--- 17,28 ----
#define S_(x)
#endif
+ struct mv_storage {
+ struct current_storage ** the_mailbox;
+ int mailbox_count;
+
+ };
+
static void mt_make_storage_view P_((struct MailboxView *mailbox));
Index: elm2.4.ME+.117-cvs/src/metapager.c
*** elm2.4.ME+.116/src/metapager.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/metapager.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: metapager.c,v 1.38 2004/03/27 18:31:45 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: metapager.c,v 1.39 2004/06/18 09:29:51 hurtta Exp $";
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.39 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 86,97 ****
charset_t charset_vector[255];
int x1;
int LINES, COLUMNS;
menu_get_sizes(page,&LINES, &COLUMNS);
/* check to see if we want the internal pager */
! if (strincmp(pager, "builtin", 7) == 0 ||
! strincmp(pager, "internal", 8) == 0 ||
(builtin_lines < 0
? hdr->lines < LINES-1 + builtin_lines
: hdr->lines < builtin_lines)) {
--- 86,105 ----
charset_t charset_vector[255];
int x1;
int LINES, COLUMNS;
+ char * exp_pager;
menu_get_sizes(page,&LINES, &COLUMNS);
/* check to see if we want the internal pager */
!
! exp_pager = give_dt_estr_as_str(&pager_e,"pager");
! if (!exp_pager) {
! sleep_message();
! builtin++;
!
! } else if (strincmp(exp_pager, "builtin", 7) == 0 ||
! strincmp(exp_pager, "internal", 8) == 0 ||
!
(builtin_lines < 0
? hdr->lines < LINES-1 + builtin_lines
: hdr->lines < builtin_lines)) {
***************
*** 494,500 ****
/* now execute pager and exit */
/* system_call() will return user to user's normal permissions. */
! _exit(system_call(pager, SY_ENAB_SIGINT, NULL));
}
fclose (fpout);
--- 502,508 ----
/* now execute pager and exit */
/* system_call() will return user to user's normal permissions. */
! _exit(system_call(exp_pager, SY_ENAB_SIGINT, NULL));
}
fclose (fpout);
Index: elm2.4.ME+.117-cvs/src/mime.c
*** elm2.4.ME+.116/src/mime.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/mime.c 2004-05-23 15:31:00.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mime.c,v 1.31 2004/03/27 18:31:45 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.31 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mime.c,v 1.32 2004/05/23 12:31:00 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.32 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 36,59 ****
return (char *)str;
}
! void clear_mime_send_info(mime_info,
! mailer_info)
mime_send_t *mime_info;
- struct mailer_info *mailer_info;
{
mime_info->raw_level = mailer_7bit;
-
- if (query_mailer_info(mailer_info,MI_HAVE_8BITMIME)) {
- DPRINT(Debug,8,(&Debug,"mailer supports 8BITMIME\n"));
- mime_info->raw_level = mailer_8bit;
-
- if (query_mailer_info(mailer_info,MI_HAVE_BINARYMIME)) {
- DPRINT(Debug,8,(&Debug,"mailer supports BINARYMIME\n"));
- mime_info->raw_level = mailer_binary;
- }
- }
-
mime_info->encoding_top = ENCODING_7BIT;
mime_info->type_opts_top = NULL;
mime_info->hdr_charset = text_charset;
--- 36,46 ----
return (char *)str;
}
! void clear_mime_send_info(mime_info)
mime_send_t *mime_info;
{
mime_info->raw_level = mailer_7bit;
mime_info->encoding_top = ENCODING_7BIT;
mime_info->type_opts_top = NULL;
mime_info->hdr_charset = text_charset;
Index: elm2.4.ME+.117-cvs/src/options.c
*** elm2.4.ME+.116/src/options.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/options.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: options.c,v 1.24 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.24 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: options.c,v 1.25 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.25 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 102,131 ****
static int resort = 0;
- static int post_cal P_((int f));
- static int post_cal(f)
- int f;
- {
- (void) expand_env(calendar_file, raw_calendar_file, sizeof(calendar_file));
- return 0;
- }
- static int post_editor P_((int f));
- static int post_editor(f)
- int f;
- {
- (void) expand_env(editor, raw_editor, sizeof(editor));
- return 0;
- }
- static int post_pager P_((int f));
- static int post_pager(f)
- int f;
- {
- (void) expand_env(pager, raw_pager, sizeof(pager));
- clear_pages = (equal(pager, "builtin+") || equal(pager, "internal+"));
- return 0;
- }
static int post_folder P_((int f));
static int post_folder(f)
--- 102,109 ----
***************
*** 144,157 ****
return 0;
}
- static int post_sent P_((int f));
- static int post_sent(f)
- int f;
- {
- (void) expand_meta(sent_mail, raw_sentmail, sizeof(sent_mail));
-
- return 0;
- }
static int post_print P_((int f));
static int post_print(f)
--- 122,127 ----
***************
*** 162,175 ****
}
/* ? ? ? What this is ? */
! static int post_menu P_((int f, struct menu_context *page));
! static int post_menu(f, page)
int f;
- struct menu_context *page;
{
int LINES, COLUMNS;
! menu_get_sizes(page,&LINES, &COLUMNS);
headers_per_page = LINES - (mini_menu ? 14 : 9);
return 0;
--- 132,144 ----
}
/* ? ? ? What this is ? */
! static int post_menu P_((int f));
! static int post_menu(f)
int f;
{
int LINES, COLUMNS;
! menu_get_sizes(default_context,&LINES, &COLUMNS);
headers_per_page = LINES - (mini_menu ? 14 : 9);
return 0;
***************
*** 184,197 ****
"Left margin string (prefix) for reply and forward.", ElmOptionBorderHelp},
#ifdef ENABLE_CALENDAR
! {'c', "C)alendar file", ElmOptionCalendarMenu, "calendar", post_cal,
"This is the file where calendar entries from messages are saved.", ElmOptionCalendarHelp},
#endif
! {'d', "D)isplay mail using", ElmOptionDisplayMenu, "pager", post_pager,
"This is the program invoked to display individual messages (try 'builtin').", ElmOptionDisplayHelp},
! {'e', "E)ditor (primary)", ElmOptionEditorMenu, "editor", post_editor,
"This is the editor used for all outbound messages (may be 'builtin').", ElmOptionEditorHelp},
{'f', "F)older directory", ElmOptionFolderMenu, "maildir", post_folder,
--- 153,166 ----
"Left margin string (prefix) for reply and forward.", ElmOptionBorderHelp},
#ifdef ENABLE_CALENDAR
! {'c', "C)alendar file", ElmOptionCalendarMenu, "calendar", NULL,
"This is the file where calendar entries from messages are saved.", ElmOptionCalendarHelp},
#endif
! {'d', "D)isplay mail using", ElmOptionDisplayMenu, "pager", NULL,
"This is the program invoked to display individual messages (try 'builtin').", ElmOptionDisplayHelp},
! {'e', "E)ditor (primary)", ElmOptionEditorMenu, "editor", NULL,
"This is the editor used for all outbound messages (may be 'builtin').", ElmOptionEditorHelp},
{'f', "F)older directory", ElmOptionFolderMenu, "maildir", post_folder,
***************
*** 215,221 ****
{'n', "N)ames only", ElmOptionNameMenu, "names", NULL,
"Whether to display the names and addresses on mail, or names only.", ElmOptionNameHelp},
! {'o', "O)utbound mail saved", ElmOptionOutboundMenu, "sentmail", post_sent,
"This is where copies of outbound messages are saved automatically.", ElmOptionOutboundHelp},
{'p', "P)rint mail using", ElmOptionPrintMenu, "print", post_print,
--- 184,190 ----
{'n', "N)ames only", ElmOptionNameMenu, "names", NULL,
"Whether to display the names and addresses on mail, or names only.", ElmOptionNameHelp},
! {'o', "O)utbound mail saved", ElmOptionOutboundMenu, "sentmail", NULL,
"This is where copies of outbound messages are saved automatically.", ElmOptionOutboundHelp},
{'p', "P)rint mail using", ElmOptionPrintMenu, "print", post_print,
***************
*** 924,959 ****
if (q)
return(1);
! if (DT_STR == save_info[x].dt_type) {
! strfcpy(buffer, SAVE_INFO_STR(x),
! sizeof buffer);
! if (save_info[x].flags & FL_NOSPC) {
! register char *s;
! for (s = buffer; *s; ++s)
! if (*s==' ')
! *s='_';
! }
!
! optionally_enter(buffer, ypos, xpos,
! (append_current ? OE_APPEND_CURRENT : 0) |
! (passwd ? OE_PASSWD : 0),
! sizeof buffer,page);
!
! if (save_info[x].flags & FL_NOSPC) {
! register char *s;
! for (s=buffer; *s; ++s)
! if (*s=='_')
! *s=' ';
! }
!
! if (!equal(buffer, SAVE_INFO_STR(x))) {
!
! strfcpy(SAVE_INFO_STR(x), buffer,
! save_info[x].size_val);
! q++;
! }
!
! } else if (DT_SRT == save_info[x].dt_type) {
number = *SAVE_INFO_SRT(x);
if (change_sort(&number, ypos, xpos, mailbox, page) != 0) {
*SAVE_INFO_SRT(x) = number;
--- 893,899 ----
if (q)
return(1);
! if (DT_SRT == save_info[x].dt_type) {
number = *SAVE_INFO_SRT(x);
if (change_sort(&number, ypos, xpos, mailbox, page) != 0) {
*SAVE_INFO_SRT(x) = number;
***************
*** 988,993 ****
--- 928,960 ----
++q;
}
+ } else { /* Hopefully generic routine ... */
+ char * s;
+
+ if (RCTYPE_magic != save_info[x].dt_type->magic)
+ panic("RC PANIC",__FILE__,__LINE__,"info_enter",
+ "Bad config item type",0);
+
+ s = save_info[x].dt_type->get_value(& save_info[x]);
+
+ if (s)
+ strfcpy(buffer,s, sizeof buffer);
+ else
+ buffer[0] = '\0';
+
+ optionally_enter(buffer, ypos, xpos,
+ (append_current ? OE_APPEND_CURRENT : 0) |
+ (passwd ? OE_PASSWD : 0),
+ sizeof buffer,page);
+
+ if (!s || !equal(buffer,s)) {
+
+ if (save_info[x].dt_type->parse_line(& save_info[x],
+ 1 /* local */ ,buffer,
+ 0,"<config editor>",
+ 0,0))
+ q++;
+ }
}
if (q)
Index: elm2.4.ME+.117-cvs/src/pgp.c
*** elm2.4.ME+.116/src/pgp.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/pgp.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: pgp.c,v 1.38 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.38 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: pgp.c,v 1.42 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.42 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 75,80 ****
--- 75,91 ----
/* not reached */
}
+
+
+ static void close_pipe P_((struct run_state *rs));
+ static void close_pipe(rs)
+ struct run_state *rs;
! int err = errno;
! fprintf(stderr,"GetPGPKey: setgid(%d) FAILED: %s\n",
! groupid,error_description(err));
! fflush(stderr);
! _exit(err);
! }
! if (-1 == setuid(userid)) {
! int err = errno;
+ "GetPGPKey()=-1: running pgp/gpg failed\n"));
+ return -1;
+ }
+
+
p = fdopen (fd[0], "r");
if (p == NULL) {
+ int tmp;
+ int err = errno;
+
DPRINT(Debug,1,(&Debug,
! "GetPGPKey()=-1: ERROR: fdopen (errno %d)\n",
! err));
! kill(RS.pid,SIGTERM);
! wait_end(&RS,&tmp);
!
return -1;
}
+ retry:
while (fgets(buf, STRING, p) != NULL) {
DPRINT(Debug,10,(&Debug,
"GetPGPKey: %s\n",buf));
***************
*** 262,268 ****
--- 283,318 ----
}
}
}
+
+ if (ferror(p) && EINTR == errno) {
+ clearerr(p);
+ DPRINT(Debug,5,(&Debug,
+ "Reading of result interrupted (EINTR) -- retrying\n"));
+
+ if (0 == code) {
+ code = run_already_done(&RS,&stat);
+ if (0 != code) {
+ DPRINT(Debug,5,(&Debug,
+ "now pgp/gpg is completing\n"));
+ }
+ }
+
+ goto retry;
+ }
+
fclose(p);
+
+ if (0 == code)
+ code = wait_end(&RS,&stat);
+
+ if (code < 0) {
+ DPRINT(Debug,5,(&Debug,
+ "pgp/gpg dies on signal %d\n",
+ -code));
+ } else {
+ DPRINT(Debug,5,(&Debug,"pgp/gpgp exited with status %d\n",stat));
+ }
+
if (keys_len > 0 || i > 1)
break;
else {
***************
*** 557,564 ****
argv0[a++] = pgp2_path;
if (metoo)
argv0[a++] = "+encrypttoself=on";
! if (usepgppass || !(opts & PGP_SIGNED_MESSAGE))
argv0[a++] = "+batchmode";
if (opts & PGP_SIGNED_MESSAGE)
argv0[a++] = "+clearsig=on";
argv0[a++] = "+verbose=0";
--- 607,617 ----
argv0[a++] = pgp2_path;
if (metoo)
argv0[a++] = "+encrypttoself=on";
!
! if ((usepgppass || !(opts & PGP_SIGNED_MESSAGE)) &&
! !pgp_interactive)
argv0[a++] = "+batchmode";
+
if (opts & PGP_SIGNED_MESSAGE)
argv0[a++] = "+clearsig=on";
argv0[a++] = "+verbose=0";
***************
*** 595,602 ****
argv[a++] = path;
if (metoo)
argv[a++] = "+encrypttoself=on";
! if (usepgppass || !(opts & PGP_SIGNED_MESSAGE))
argv[a++] = "+batchmode";
if (opts & PGP_SIGNED_MESSAGE)
argv[a++] = "+clearsig=on";
argv[a++] = "+verbose=0";
--- 648,657 ----
argv[a++] = path;
if (metoo)
argv[a++] = "+encrypttoself=on";
! if ((usepgppass || !(opts & PGP_SIGNED_MESSAGE)) &&
! !pgp_interactive)
argv[a++] = "+batchmode";
+
if (opts & PGP_SIGNED_MESSAGE)
argv[a++] = "+clearsig=on";
argv[a++] = "+verbose=0";
***************
*** 639,646 ****
argv[a++] = buffer;
close_fd = fd[1];
}
! if (usepgppass || !(opts & PGP_SIGNED_MESSAGE))
argv[a++] ="--batch";
if (metoo) {
argv[a++] = "--encrypt-to";
if (pgp_askpgpsig && (opts & PGP_SIGNED_MESSAGE)) {
--- 694,703 ----
argv[a++] = buffer;
close_fd = fd[1];
}
! if ((usepgppass || !(opts & PGP_SIGNED_MESSAGE)) &&
! !pgp_interactive)
argv[a++] ="--batch";
+
if (metoo) {
argv[a++] = "--encrypt-to";
if (pgp_askpgpsig && (opts & PGP_SIGNED_MESSAGE)) {
***************
*** 973,979 ****
pgp_status = PGP_PUBLIC_KEY;
/* Now send the message off! */
! send_msg_l(NULL,NULL, NULL, subj, 0, 0, NULL, mailbox, aview,
page);
unlink (included_file); /* make sure to clean up. */
--- 1030,1036 ----
pgp_status = PGP_PUBLIC_KEY;
/* Now send the message off! */
! send_msg_l(-1,NULL, NULL, subj, 0, 0, mailbox, aview,
page);
unlink (included_file); /* make sure to clean up. */
Index: elm2.4.ME+.117-cvs/src/reply.c
*** elm2.4.ME+.116/src/reply.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/reply.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: reply.c,v 1.35 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: reply.c,v 1.36 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 307,316 ****
return result;
}
! int reply(current_header,infile,mailbox, aview, page)
! struct header_rec *current_header;
! FILE *infile;
! struct MailboxView *mailbox /* for save_copy */;
struct AliasView *aview;
struct menu_context *page;
{
--- 307,315 ----
return result;
}
! int reply(index, mailbox, aview, page)
! int index;
! struct MailboxView *mailbox;
struct AliasView *aview;
struct menu_context *page;
{
***************
*** 319,331 ****
char subject[SLEN];
int return_value, form_letter;
! struct addr_item * rt;
struct string * temp1 = NULL;
char * temp2 = NULL;
!
! if (! current_header)
return 0;
if (current_header->subject)
temp1 = convert_string(display_charset,current_header->subject,1);
else
--- 318,341 ----
char subject[SLEN];
int return_value, form_letter;
! struct addr_item * rt = NULL;
struct string * temp1 = NULL;
char * temp2 = NULL;
! FILE *F = NULL;
! struct header_rec *current_header = NULL;
!
!
! if (!give_message_data(mailbox,index,
! ¤t_header,&F,NULL,
! NO_mime_parse))
return 0;
+ if (! current_header || !F)
+ return 0;
+
+ rt = handle_reply_to(current_header,F);
+
+
if (current_header->subject)
temp1 = convert_string(display_charset,current_header->subject,1);
else
***************
*** 343,356 ****
"Re: your mail") ),
sizeof subject);
- rt = handle_reply_to(current_header,infile);
if (form_letter)
! return_value = mail_filled_in_form(current_header,rt, subject,
! infile,mailbox, aview);
else {
! return_value = send_msg_l(current_header,rt, NULL, subject,
MAIL_EDIT_MSG | MAIL_REPLYING,
! NO, infile,mailbox, aview,
page);
if (me_retcode) {
current_header->status |= REPLIED;
--- 353,365 ----
"Re: your mail") ),
sizeof subject);
if (form_letter)
! return_value = mail_filled_in_form(index,rt, subject,
! mailbox, aview);
else {
! return_value = send_msg_l(index,rt, NULL, subject,
MAIL_EDIT_MSG | MAIL_REPLYING,
! NO, mailbox, aview,
page);
if (me_retcode) {
current_header->status |= REPLIED;
***************
*** 367,375 ****
return(return_value);
}
! int reply_to_everyone(current_header,infile,mailbox, aview, page)
! struct header_rec *current_header;
! FILE *infile;
struct MailboxView *mailbox /* for save_copy */;
struct AliasView *aview;
struct menu_context *page;
--- 376,383 ----
return(return_value);
}
! int reply_to_everyone(index,mailbox, aview, page)
! int index;
struct MailboxView *mailbox /* for save_copy */;
struct AliasView *aview;
struct menu_context *page;
***************
*** 387,399 ****
struct string * temp1 = NULL;
char * temp2 = NULL;
! if (!current_header)
return 0;
! rt = handle_reply_to(current_header, infile);
cc = get_and_expand_everyone(current_header,rt);
-
if (current_header->subject)
temp1 = convert_string(display_charset,current_header->subject,1);
else
--- 395,416 ----
struct string * temp1 = NULL;
char * temp2 = NULL;
!
! FILE *F = NULL;
! struct header_rec *current_header = NULL;
!
!
! if (!give_message_data(mailbox,index,
! ¤t_header,&F,NULL,
! NO_mime_parse))
return 0;
! if (! current_header || !F)
! return 0;
!
! rt = handle_reply_to(current_header,F);
cc = get_and_expand_everyone(current_header,rt);
if (current_header->subject)
temp1 = convert_string(display_charset,current_header->subject,1);
else
***************
*** 406,414 ****
"Re: your mail"),
sizeof subject);
! return_value = send_msg_l(current_header,rt, cc, subject,
MAIL_EDIT_MSG | MAIL_REPLYING,
! NO, infile,mailbox, aview,
page);
if (me_retcode) {
current_header->status |= REPLIED;
--- 423,431 ----
"Re: your mail"),
sizeof subject);
! return_value = send_msg_l(index,rt, cc, subject,
MAIL_EDIT_MSG | MAIL_REPLYING,
! NO, mailbox, aview,
page);
if (me_retcode) {
current_header->status |= REPLIED;
***************
*** 425,433 ****
return(return_value);
}
! int forward(current_header,infile,mailbox,aview, page)
! struct header_rec *current_header;
! FILE *infile;
struct MailboxView *mailbox;
struct AliasView *aview;
struct menu_context *page;
--- 442,449 ----
return(return_value);
}
! int forward(index,mailbox,aview, page)
! int index;
struct MailboxView *mailbox;
struct AliasView *aview;
struct menu_context *page;
***************
*** 444,449 ****
--- 460,466 ----
char subject[SLEN];
int results, edit_msg = FALSE;
int LINES, COLUMNS;
+ struct header_rec *current_header = give_header(mailbox,index);
menu_get_sizes(page, &LINES, &COLUMNS);
***************
*** 486,498 ****
"(fwd)") != 0))
strfcat(subject, " (fwd)", sizeof subject);
! results = send_msg_l(current_header,
NULL, NULL, subject,
(edit_msg ? MAIL_EDIT_MSG : 0 ) |
MAIL_FORWARDING,
current_header->status & FORM_LETTER ?
PREFORMATTED : allow_forms,
! infile,mailbox, aview,
page);
free_string(&temp1);
--- 503,515 ----
"(fwd)") != 0))
strfcat(subject, " (fwd)", sizeof subject);
! results = send_msg_l(index,
NULL, NULL, subject,
(edit_msg ? MAIL_EDIT_MSG : 0 ) |
MAIL_FORWARDING,
current_header->status & FORM_LETTER ?
PREFORMATTED : allow_forms,
! mailbox, aview,
page);
free_string(&temp1);
***************
*** 500,506 ****
}
else
! results = send_msg_l(current_header,
NULL, NULL,
/* TODO: Fix this mess... */
catgets(elm_msg_cat, ElmSet, ElmForwardedMail,
--- 517,523 ----
}
else
! results = send_msg_l(index,
NULL, NULL,
/* TODO: Fix this mess... */
catgets(elm_msg_cat, ElmSet, ElmForwardedMail,
***************
*** 509,515 ****
MAIL_FORWARDING,
current_header->status & FORM_LETTER ?
PREFORMATTED : allow_forms,
! infile, mailbox, aview,
page);
return(results);
}
--- 526,532 ----
MAIL_FORWARDING,
current_header->status & FORM_LETTER ?
PREFORMATTED : allow_forms,
! mailbox, aview,
page);
return(results);
}
Index: elm2.4.ME+.117-cvs/src/savecopy.c
*** elm2.4.ME+.116/src/savecopy.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/savecopy.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: savecopy.c,v 1.44 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.44 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: savecopy.c,v 1.46 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.46 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 57,70 ****
* the filenames right, and then invokes "append_copy_to_file()" to do
* the dirty work.
*/
! int save_copy(headers, cf, form, mime_info, conv_file, mailbox,
page)
struct mailing_headers * headers;
struct copy_file *cf;
int form;
mime_send_t *mime_info;
FILE * conv_file;
- struct MailboxView *mailbox;
struct menu_context *page;
{
int
--- 57,69 ----
* the filenames right, and then invokes "append_copy_to_file()" to do
* the dirty work.
*/
! int save_copy(headers, cf, form, mime_info, conv_file,
page)
struct mailing_headers * headers;
struct copy_file *cf;
int form;
mime_send_t *mime_info;
FILE * conv_file;
struct menu_context *page;
{
int
***************
*** 76,82 ****
int ra, rb;
int reopen_current = 0;
struct current_storage *storage = NULL;
!
if (!cf->copy_file)
return 0; /* Selected NONE */
--- 75,82 ----
int ra, rb;
int reopen_current = 0;
struct current_storage *storage = NULL;
! struct MailboxView *m;
! int idx;
if (!cf->copy_file)
return 0; /* Selected NONE */
***************
*** 135,146 ****
} else {
use_sent_mail:
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmCannotDetermineToName,
"Cannot determine `to' name to save by! Saving to \"sent\" folder %s instead."),
! sent_mail);
is_sent_mail++;
}
--- 135,151 ----
} else {
+
+ char * sent_val;
+
use_sent_mail:
+ sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
+
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmCannotDetermineToName,
"Cannot determine `to' name to save by! Saving to \"sent\" folder %s instead."),
! sent_val ? sent_val : "<");
is_sent_mail++;
}
***************
*** 150,157 ****
if (is_sent_mail) {
int r;
use_sent_mail2:
! /* If we come here via gtoto label, increment is_sent_mail */
if (!is_sent_mail)
is_sent_mail++;
--- 155,163 ----
if (is_sent_mail) {
int r;
+
use_sent_mail2:
! /* If we come here via goto label, increment is_sent_mail */
if (!is_sent_mail)
is_sent_mail++;
***************
*** 166,173 ****
r = select_dir_item(cf->dir,&(cf->copy_file));
if (!r) {
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCannotSaveTo,
! "Cannot save to %s!"), sent_mail);
sleep_message();
return 0;
}
--- 172,183 ----
r = select_dir_item(cf->dir,&(cf->copy_file));
if (!r) {
+ char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
+
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCannotSaveTo,
! "Cannot save to %s!"),
! sent_val ? sent_val : "<");
!
sleep_message();
return 0;
}
***************
*** 177,185 ****
if (!flags) { /* No selection so try it */
if (!select_dir_item(cf->dir,&(cf->copy_file))) {
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCannotSaveToSavingInstead,
"Cannot save to %S! Saving to \"sent\" folder %s instead."),
! cf->copy_file,sent_mail);
sleep_message();
if (is_sent_mail)
panic("FILE PANIC",__FILE__,__LINE__,"save copy",
--- 187,200 ----
if (!flags) { /* No selection so try it */
if (!select_dir_item(cf->dir,&(cf->copy_file))) {
+
+ char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
+
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCannotSaveToSavingInstead,
"Cannot save to %S! Saving to \"sent\" folder %s instead."),
! cf->copy_file,
! sent_val ? sent_val : "<");
!
sleep_message();
if (is_sent_mail)
panic("FILE PANIC",__FILE__,__LINE__,"save copy",
***************
*** 216,228 ****
free_string(&(cf->copy_file));
cf->copy_file = selection_name_dir(cf->dir);
! if (mailbox) {
int mbc,i;
! mbc = get_storage_count(mailbox);
is_current_folder = 0;
for (i = 0; i < mbc; i++) {
! storage = get_storage(mailbox,i);
if (storage &&
storage->current_folder)
--- 231,245 ----
free_string(&(cf->copy_file));
cf->copy_file = selection_name_dir(cf->dir);
!
! idx = 0;
! while (NULL != (m = give_next_open_mailbox(&idx,0))) {
int mbc,i;
! mbc = get_storage_count(m);
is_current_folder = 0;
for (i = 0; i < mbc; i++) {
! storage = get_storage(m,i);
if (storage &&
storage->current_folder)
***************
*** 231,236 ****
--- 248,256 ----
if (is_current_folder)
break; /* FOUND */
}
+
+ if (is_current_folder)
+ break; /* FOUND */
}
if (is_sent_mail) {
***************
*** 274,284 ****
free(msg_buffer);
if (answer != *def_ans_yes) {
PutLineX (LINES-1-2, 0, CATGETS(elm_msg_cat,
ElmSet,
ElmSavingToInstead,
"Alright - saving to `%s' instead"),
! sent_mail);
if (sleepmsg > 0)
sleep(sleepmsg);
ClearLine (LINES-1-2);
--- 294,306 ----
free(msg_buffer);
if (answer != *def_ans_yes) {
+ char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
+
PutLineX (LINES-1-2, 0, CATGETS(elm_msg_cat,
ElmSet,
ElmSavingToInstead,
"Alright - saving to `%s' instead"),
! sent_val ? sent_val : "<" );
if (sleepmsg > 0)
sleep(sleepmsg);
ClearLine (LINES-1-2);
***************
*** 321,332 ****
free(msg_buffer);
if (answer != *def_ans_yes) {
PutLineX (LINES-1-2, 0,
CATGETS(elm_msg_cat,
ElmSet,
ElmSavingToInstead,
"Alright - saving to `%s' instead"),
! sent_mail);
if (sleepmsg > 0)
sleep(sleepmsg);
ClearLine (LINES-1-2);
--- 343,356 ----
free(msg_buffer);
if (answer != *def_ans_yes) {
+ char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
+
PutLineX (LINES-1-2, 0,
CATGETS(elm_msg_cat,
ElmSet,
ElmSavingToInstead,
"Alright - saving to `%s' instead"),
! sent_val ? sent_val : "<");
if (sleepmsg > 0)
sleep(sleepmsg);
ClearLine (LINES-1-2);
***************
*** 336,345 ****
}
/* Create it now ... */
if (!create_selection_dir(cf->dir)) {
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmCannotSaveToSavingInstead,
"Cannot save to %S! Saving to \"sent\" folder %s instead."),
! cf->copy_file,sent_mail);
sleep_message();
goto use_sent_mail2;
}
--- 360,372 ----
}
/* Create it now ... */
if (!create_selection_dir(cf->dir)) {
+ char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
+
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmCannotSaveToSavingInstead,
"Cannot save to %S! Saving to \"sent\" folder %s instead."),
! cf->copy_file,
! sent_val ? sent_val : "<");
sleep_message();
goto use_sent_mail2;
}
***************
*** 372,388 ****
}
if (!prepare_write_folder(cf->dir,&write_ptr)) {
if (!is_sent_mail) {
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmCannotSaveToSavingInstead,
"Cannot save to %S! Saving to \"sent\" folder %s instead."),
! cf->copy_file,sent_mail);
sleep_message();
goto use_sent_mail2;
}
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCannotSaveTo,
"Cannot save to %s!"),
! sent_mail);
sleep_message();
return 0;
}
--- 399,419 ----
}
if (!prepare_write_folder(cf->dir,&write_ptr)) {
+ char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
+
if (!is_sent_mail) {
+
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmCannotSaveToSavingInstead,
"Cannot save to %S! Saving to \"sent\" folder %s instead."),
! cf->copy_file,
! sent_val ? sent_val : "<");
sleep_message();
goto use_sent_mail2;
}
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCannotSaveTo,
"Cannot save to %s!"),
! sent_val ? sent_val : "<");
sleep_message();
return 0;
}
***************
*** 404,420 ****
}
if (!rb || ra < 0) {
if (!is_sent_mail) {
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmCannotSaveToSavingInstead,
"Cannot save to %S! Saving to \"sent\" folder %s instead."),
! cf->copy_file,sent_mail);
sleep_message();
goto use_sent_mail2;
}
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCannotSaveTo,
"Cannot save to %s!"),
! sent_mail);
return 0;
}
return 1;
--- 435,454 ----
}
if (!rb || ra < 0) {
+ char * sent_val = give_dt_estr_as_str(&sent_mail_e,"sentmail");
+
if (!is_sent_mail) {
lib_error(CATGETS(elm_msg_cat, ElmSet,
ElmCannotSaveToSavingInstead,
"Cannot save to %S! Saving to \"sent\" folder %s instead."),
! cf->copy_file,
! sent_val ? sent_val : "<");
sleep_message();
goto use_sent_mail2;
}
lib_error(CATGETS(elm_msg_cat, ElmSet, ElmCannotSaveTo,
"Cannot save to %s!"),
! sent_val ? sent_val : "<");
return 0;
}
return 1;
Index: elm2.4.ME+.117-cvs/src/save_opts.c
*** elm2.4.ME+.116/src/save_opts.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/save_opts.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: save_opts.c,v 1.26 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.26 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: save_opts.c,v 1.27 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.27 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 147,153 ****
int x = find_opt(s);
if (x >= 0) {
! if (!valid_rc_type(save_info[x].dt_type))
panic("RC PANIC",__FILE__,__LINE__,"str_opt_nam",
"Bad config item type",0);
--- 147,153 ----
int x = find_opt(s);
if (x >= 0) {
! if (RCTYPE_magic != save_info[x].dt_type->magic)
panic("RC PANIC",__FILE__,__LINE__,"str_opt_nam",
"Bad config item type",0);
***************
*** 214,220 ****
local_value = save_info[x].flags & FL_LOCAL;
add_comment(x, newelmrc);
! if (!valid_rc_type(save_info[x].dt_type))
panic("RC PANIC",__FILE__,__LINE__,"save_user_options",
"Bad config item type",0);
--- 214,220 ----
local_value = save_info[x].flags & FL_LOCAL;
add_comment(x, newelmrc);
! if (RCTYPE_magic != save_info[x].dt_type->magic)
panic("RC PANIC",__FILE__,__LINE__,"save_user_options",
"Bad config item type",0);
Index: elm2.4.ME+.117-cvs/src/showmsg.c
*** elm2.4.ME+.116/src/showmsg.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/showmsg.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: showmsg.c,v 1.36 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: showmsg.c,v 1.37 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.37 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 665,673 ****
menu_get_sizes(page,&LINES, &COLUMNS);
DPRINT(Debug,4,(&Debug,
! "displaying %d lines from message #%d using %s\n",
current_header->lines,
! current, pager));
if(ison(current_header->status, NEW)) {
--- 665,673 ----
menu_get_sizes(page,&LINES, &COLUMNS);
DPRINT(Debug,4,(&Debug,
! "displaying %d lines from message #%d\n",
current_header->lines,
! current));
if(ison(current_header->status, NEW)) {
Index: elm2.4.ME+.117-cvs/src/showmsg_c.c
*** elm2.4.ME+.116/src/showmsg_c.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/src/showmsg_c.c 2004-06-18 23:40:56.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: showmsg_c.c,v 1.35 2004/03/27 18:31:46 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: showmsg_c.c,v 1.36 2004/06/18 20:40:56 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 253,267 ****
"Forward message"), TRUE, &MENU,
page);
! if (give_message_data(mailbox,current-1,
! &hdr,&F,NULL,
! mime_parse_routine)) {
! if (forward(hdr,F,mailbox, aview, page))
! put_border(page);
! } else {
! DPRINT(Debug,3,(&Debug,
! "give_message_data [%d] fails",current-1));
! }
}
break;
--- 253,261 ----
"Forward message"), TRUE, &MENU,
page);
! if (forward(current-1,mailbox, aview, page))
! put_border(page);
!
}
break;
***************
*** 274,287 ****
"Group reply"), TRUE, &MENU,
page);
! if (give_message_data(mailbox,current-1,
! &hdr,&F,NULL,
! mime_parse_routine))
! (void) reply_to_everyone(hdr,F,mailbox, aview, page);
! else {
! DPRINT(Debug,3,(&Debug,
! "give_message_data [%d] fails",current-1));
! }
}
break;
--- 268,274 ----
"Group reply"), TRUE, &MENU,
page);
! (void) reply_to_everyone(current-1,mailbox, aview, page);
}
break;
***************
*** 471,489 ****
"Mail message"), TRUE, &MENU,
page);
! if (give_message_data(mailbox,current-1,
! &hdr,&F,NULL,
! mime_parse_routine)) {
! if (send_msg_l(hdr,
! NULL,NULL,NULL, MAIL_EDIT_MSG,
! allow_forms, F,
! mailbox, aview,
! page))
! put_border(page);
! } else {
! DPRINT(Debug,3,(&Debug,
! "give_message_data [%d] fails",current-1));
! }
}
break;
--- 458,469 ----
"Mail message"), TRUE, &MENU,
page);
! if (send_msg_l(current-1,
! NULL,NULL,NULL, MAIL_EDIT_MSG,
! allow_forms,
! mailbox, aview,
! page))
! put_border(page);
}
break;
***************
*** 539,553 ****
put_cmd_name(catgets(elm_msg_cat, ElmSet, ElmReplyToMessage,
"Reply to message"), TRUE, &MENU,
page);
! if (give_message_data(mailbox,current-1,
! &hdr,&F,NULL,
! mime_parse_routine)) {
! if (reply(hdr,F,mailbox, aview, page))
! put_border(page);
! } else {
! DPRINT(Debug,3,(&Debug,
! "give_message_data [%d] fails",current-1));
! }
}
break;
--- 519,526 ----
put_cmd_name(catgets(elm_msg_cat, ElmSet, ElmReplyToMessage,
"Reply to message"), TRUE, &MENU,
page);
! if (reply(current-1,mailbox, aview, page))
! put_border(page);
}
break;
Index: elm2.4.ME+.117-cvs/utils/elmlibregister.c
*** elm2.4.ME+.116/utils/elmlibregister.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/utils/elmlibregister.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmlibregister.c,v 1.6 2004/03/28 13:37:39 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmlibregister.c,v 1.7 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 300,306 ****
local_value = save_info[x].flags & FL_CHANGED;
else
local_value = save_info[x].flags & FL_LOCAL;
! if (!valid_rc_type(save_info[x].dt_type))
panic("RC PANIC",__FILE__,__LINE__,"main",
"Bad config item type",0);
--- 300,306 ----
local_value = save_info[x].flags & FL_CHANGED;
else
local_value = save_info[x].flags & FL_LOCAL;
! if (RCTYPE_magic != save_info[x].dt_type->magic)
panic("RC PANIC",__FILE__,__LINE__,"main",
"Bad config item type",0);
***************
*** 345,351 ****
local_value = save_info[x].flags & FL_CHANGED;
else
local_value = save_info[x].flags & FL_LOCAL;
! if (!valid_rc_type(save_info[x].dt_type))
panic("RC PANIC",__FILE__,__LINE__,"main",
"Bad config item type",0);
--- 345,351 ----
local_value = save_info[x].flags & FL_CHANGED;
else
local_value = save_info[x].flags & FL_LOCAL;
! if (RCTYPE_magic != save_info[x].dt_type->magic)
panic("RC PANIC",__FILE__,__LINE__,"main",
"Bad config item type",0);
Index: elm2.4.ME+.117-cvs/utils/elmrc-write.c
*** elm2.4.ME+.116/utils/elmrc-write.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/utils/elmrc-write.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: elmrc-write.c,v 1.13 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.13 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: elmrc-write.c,v 1.14 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************
***************
*** 320,326 ****
local_value = save_info[x].flags & FL_CHANGED;
else
local_value = save_info[x].flags & FL_LOCAL;
! if (!valid_rc_type(save_info[x].dt_type))
panic("RC PANIC",__FILE__,__LINE__,"main",
"Bad config item type",0);
--- 320,326 ----
local_value = save_info[x].flags & FL_CHANGED;
else
local_value = save_info[x].flags & FL_LOCAL;
! if (RCTYPE_magic != save_info[x].dt_type->magic)
panic("RC PANIC",__FILE__,__LINE__,"main",
"Bad config item type",0);
***************
*** 365,371 ****
local_value = save_info[x].flags & FL_CHANGED;
else
local_value = save_info[x].flags & FL_LOCAL;
! if (!valid_rc_type(save_info[x].dt_type))
panic("RC PANIC",__FILE__,__LINE__,"main",
"Bad config item type",0);
--- 365,371 ----
local_value = save_info[x].flags & FL_CHANGED;
else
local_value = save_info[x].flags & FL_LOCAL;
! if (RCTYPE_magic != save_info[x].dt_type->magic)
panic("RC PANIC",__FILE__,__LINE__,"main",
"Bad config item type",0);
Index: elm2.4.ME+.117-cvs/utils/from.c
*** elm2.4.ME+.116/utils/from.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/utils/from.c 2004-06-18 12:29:51.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: from.c,v 1.48 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.48 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: from.c,v 1.49 2004/06/18 09:29:51 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.49 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 237,243 ****
infile[0] = '\0';
if (no_files = (optind == argc)) { /* assignment intentional */
! strfcpy(infile, defaultfile, sizeof infile);
optind -= 1; /* ensure one pass through loop */
}
--- 237,247 ----
infile[0] = '\0';
if (no_files = (optind == argc)) { /* assignment intentional */
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
!
! if (!default_val)
! exit(1);
! strfcpy(infile, default_val, sizeof infile);
optind -= 1; /* ensure one pass through loop */
}
Index: elm2.4.ME+.117-cvs/utils/newmail.c
*** elm2.4.ME+.116/utils/newmail.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/utils/newmail.c 2004-06-18 12:29:52.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: newmail.c,v 1.35 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.35 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: newmail.c,v 1.36 2004/06/18 09:29:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.36 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 715,727 ****
static void add_default_folder()
{
struct read_folder_state * read_state_ptr;
!
! folder_list[0].F = enter_new_folder(defaultfile);
if (!folder_list[0].F) {
DPRINT(Debug,1,(&Debug,
"failed to add folder %s\n",
! defaultfile));
return;
}
--- 715,731 ----
static void add_default_folder()
{
struct read_folder_state * read_state_ptr;
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
!
! if (!default_val)
! return;
!
! folder_list[0].F = enter_new_folder(default_val);
if (!folder_list[0].F) {
DPRINT(Debug,1,(&Debug,
"failed to add folder %s\n",
! default_val));
return;
}
Index: elm2.4.ME+.117-cvs/utils/readmsg.c
*** elm2.4.ME+.116/utils/readmsg.c 2004-03-30 19:38:44.000000000 +0300
--- elm2.4.ME+.117-cvs/utils/readmsg.c 2004-06-18 12:29:52.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: readmsg.c,v 1.18 2004/03/27 18:31:49 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.18 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: readmsg.c,v 1.19 2004/06/18 09:29:52 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.19 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 331,344 ****
sizeof folder_name);
! } else if (defaultfile[0] != '\0')
! strfcpy(folder_name, defaultfile, sizeof folder_name);
! else {
! lib_error(CATGETS(elm_msg_cat, ReadmsgSet,
! ReadmsgCannotGetIncomingName,
! "%s: Cannot figure out name of your incoming mail folder.\n"),
! prog);
! exit(1);
}
}
--- 331,348 ----
sizeof folder_name);
! } else {
! char * default_val = give_dt_estr_as_str(&defaultfile_e,"incoming-mailbox");
!
! if (default_val)
! strfcpy(folder_name, default_val, sizeof folder_name);
! else {
! lib_error(CATGETS(elm_msg_cat, ReadmsgSet,
! ReadmsgCannotGetIncomingName,
! "%s: Cannot figure out name of your incoming mail folder.\n"),
! prog);
! exit(1);
! }
}
}
[ resposted because of wrong/duplicate message-id ]
Is available on ozone.FMI.FI
via anonymous ftp
directory KEH/
file elm-2.4ME+PL117a.patch.gz
for a moment (1).
Will be available on ftp.funet.fi (or ftp.ipv6.funet.fi with IPv6)
via anonymous ftp
directory pub/unix/mail/elm/elm-2.4ME+/
file elm-2.4ME+PL117a.patch.gz
or
<URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-2.4ME+/elm-2.4ME+PL117a.patch.gz >
via WWW (2).
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-2.4ME+PL117a.patch.gz >
via WWW (1).
Is available with
<URL: http://personal.inet.fi/atk/elmme/elm-2.4ME+PL117a.patch.gz >
via WWW.
1) NOTE:
It is currently unknown what will be done for ftp.ozone.fmi.fi
www.ozone.fmi.fi. Also ozone.fmi.fi will retire.
2) Is submitted to pub/unix/incoming/ on ftp.funet.fi
( http://www.nic.funet.fi/pub/unix/incoming/elm-2.4ME+/ )
For apply patch use command
patch -p1 < {path...}/elm-2.4ME+PL117a.patch
on top level directory of Elm 2.4ME+ distribution
(ie. on directory where Configure is.)
SUMMARY: This patch fixes dsn-success handling bug introduced on
PL117.
Notice: ME+ series is not official Elm.
This patch is agaist Elm 2.4ME+ PL117 (25) --------------------------------
Index: elm2.4.ME+.117a-cvs/hdrs/patchlevel.h
Prereq: 1119000000
*** elm2.4.ME+.117/hdrs/patchlevel.h 2004-06-27 22:39:33.000000000 +0300
--- elm2.4.ME+.117a-cvs/hdrs/patchlevel.h 2004-07-04 08:57:24.000000000 +0300
***************
*** 1,12 ****
! #define PATCHLEVEL "117 (25)"
/* Used by Configure:
SHAREDTAG: .1.0.117
*/
! #define LAST_REPORT_TIME 1119000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "Jun, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Jun, 2004"
/*
* Local Variables:
--- 1,12 ----
! #define PATCHLEVEL "117a (25)"
/* Used by Configure:
SHAREDTAG: .1.0.117
*/
! #define LAST_REPORT_TIME 1120000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "Jul, 2004" /* for elm -v option */
#define WHAT_STRING \
! "@(#) Version 2.4(ME+), USENET supported version, released Jul, 2004"
/*
* Local Variables:
Index: elm2.4.ME+.117a-cvs/README.ME+
*** elm2.4.ME+.117/README.ME+ 2004-06-27 22:39:33.000000000 +0300
--- elm2.4.ME+.117a-cvs/README.ME+ 2004-07-04 08:53:02.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.776 2004/06/27 16:19:51 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.779 2004/07/04 05:53:02 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 13,18 ****
--- 13,26 ----
Version Elm2.4 PL24 ME8b is based on version Elm2.4 PL24.
Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
+ Changes of Elm2.4ME+ PL117a (25) compared with Elm2.4ME+ PL117 (25)
+ -------------------------------------------------------------------
+
+ [ This patch is branch from the main line. ]
+
+ - Fix bug where Elm2.4ME+ PL117 was acting always as
+ dsn-success was set.
+
Changes of Elm2.4ME+ PL117 (25) compared with Elm2.4ME+ PL116 (25)
-------------------------------------------------------------------
***************
*** 101,106 ****
--- 109,116 ----
Changes of Elm2.4ME+ PL116a (25) compared with Elm2.4ME+ PL116 (25)
-------------------------------------------------------------------
+ [ This patch is branch from the main line. ]
+
- Alternatives and weedout and list was replaced with Q letters
Problem noted by: Cyrille Lefevre <cyrille...@laposte.net>
Index: elm2.4.ME+.117a-cvs/nls/C/C/C/s_elm.m
*** elm2.4.ME+.117/nls/C/C/C/s_elm.m 2004-06-27 22:39:33.000000000 +0300
--- elm2.4.ME+.117a-cvs/nls/C/C/C/s_elm.m 2004-06-30 22:32:14.000000000 +0300
***************
*** 2303,2306 ****
$ #MailerDisconnected
2155 "Mailer disconnected! Can't send message. Use f)orget !"
$ #MimeFWMessageYN
! 2156 'Forward message as separate part? (%c/%c) '
--- 2303,2306 ----
$ #MailerDisconnected
2155 "Mailer disconnected! Can't send message. Use f)orget !"
$ #MimeFWMessageYN
! 2156 "Forward message as separate part? (%c/%c) "
Index: elm2.4.ME+.117a-cvs/src/mailmsg2.c
*** elm2.4.ME+.117/src/mailmsg2.c 2004-06-27 22:39:33.000000000 +0300
--- elm2.4.ME+.117a-cvs/src/mailmsg2.c 2004-06-30 21:00:53.000000000 +0300
***************
*** 1,7 ****
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.83 2004/06/27 15:18:06 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.83 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! static char rcsid[] = "@(#)$Id: mailmsg2.c,v 1.84 2004/06/30 18:00:53 hurtta Exp $";
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.84 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 121,128 ****
if (query_mailer_info(mailer_info,MI_HAVE_DSN)) {
DPRINT(Debug,8,(&Debug,"mailer supports DSN\n"));
! if(DSN_success || !reask)
(*dsn) |= DSN_SUCCESS|DSN_FAILURE|DSN_DELAY;
} else if (*dsn) {
*dsn = 0;
--- 121,130 ----
if (query_mailer_info(mailer_info,MI_HAVE_DSN)) {
DPRINT(Debug,8,(&Debug,"mailer supports DSN\n"));
! if(DSN_success && !reask) {
(*dsn) |= DSN_SUCCESS|DSN_FAILURE|DSN_DELAY;
+ DPRINT(Debug,8,(&Debug," dsn-success is set .. enabling\n"));
+ }
} else if (*dsn) {
*dsn = 0;
Will be available on ftp.funet.fi (2)
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha1.patch.gz
and elm-ME+2.5.alpha1.tar.gz
or
<URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-ME+2.5/elm-ME+2.5.PLalpha1.patch.gz >
and <URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-ME+2.5/elm-ME+2.5.alpha1.tar.gz >
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha1.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha1.tar.gz >
via WWW (1).
1) NOTE:
It is currently unknown what will be done for ftp.ozone.fmi.fi
www.ozone.fmi.fi. Also ozone.fmi.fi will retire.
2) Is submitted to pub/unix/incoming/ on ftp.funet.fi
( http://www.nic.funet.fi/pub/unix/incoming/elm-ME+2.5/ )
Before applying patch catenate parts 1 - 4 first.
That part (part 0) do not include patch. Patch
is on part 1 - 4.
This patch is agaist Elm ME+ 2.5 PLalpha0
Changes on Elm ME+ 2.5 PLalpha1 compared with Elm2.4ME+ PLalpha0 (25)
---------------------------------------------------------------------
Note: You must create directory
2.4/doc
before applying this patch!
SUMMARY: This release collects changes of Elm2.4ME+ PL116,
PL116a, PL117 and allows elmination of aliases
from larger aliases. Also Elm 2.4 guide files are moved
from doc to 2.4/doc. New elmrc aoptions are
pgp-interactive and askmimeforward.
WARNING: There is small change on elm.filelist format, so
downgrading from Elm2.4ME+ PL116 (25) or
Elm ME+ 2.5 PLalpha1 to Elm 2.4ME+ PL115 (25) or
to Elm ME+ 2.5 PLalpha0 will not work (you need
unistall or remove elm.filelist first.)
* Changes from Elm2.4ME+ PL116
- Changed prompt ""received" folder not available, continue? (y/n) n"
- Also changed default answer to be yes on that prompt
(that is usefull only when received folder is remote,
but that error may occur also is somebody is set
receivedmail = /invalid
)
- Fix some possible compilation problems with traditional
C compilers (as opposed to ANSI C ompilers)
- Fix typo PROMTP_yesno (to PROMPT_yesno) on
Elm2.4ME+ PL115a (25)
- Added command "elmregister copydoc" which
works like "elmregister copy", but marks
file to be document.
- Added option "-s {stage-subdir}" to command
"elmregister {command}".
- If on header editing screen incoked editor
and address was on form '"a" <b> (c)",
and then edited it on header editing screen
address become as '"a" <b> (c('. Changed
on '(' to ')' on make_surface_addr() on
lib/outheaders.c
- Change from Elm 2.5:
allow elimination of aliases from larger aliases
(To: bigalias -subalias) [B1]
do not send message with zero recipients [B2]
- Fix debug output of dump_expanded_address()
- Changed message catalog name from elm2.4me+
to elmme+2.5
* Changes from Elm2.4ME+ PL116a (25)
- Alternatives and weedout and list was replaced with Q letters
Problem noted by: Cyrille Lefevre <cyrille...@laposte.net>
- Reprint last error on "Mail Pre-Send Screen" after
clearing screen.
- Trying send encrypted messages with gpg was giving
error message
Couldn't find key matching 'xxx@yyy'
Problem noted by: Olivier COLIN <dodo.o...@wanadoo.fr>
(and probably others)
> Make GetPGPKey() retry reading of result on case of
interrupt.
- GetPGPKey() was not collect status of exted gpg and
was left lot of defunct processes. Converted code to
use start_run().
- Do not quote addresses on alternatives.
* Changes from Elm2.4ME+ PL117 (25)
- Fix debug output of dump_expanded_address()
- Implement reconnection for mailer=submission (however
reconnection is not implemented for mailer=sendmail-bs).
These mailer's open smtp (or submission) connection
to server before editor is started. That is done
for get capacity of mailer (for 8BITMIME). However
sometime that times out if editing tooks too long
and sending of mail fails.
- Added pgp-interactive option to elmrc. Setting that
disables batch mode of pgp/gpg when encrypting/signing
mail.
- Added elmrc variable type rc_DT_ESTR (aka kind
of expanded string).
- Reimplemented elmrc variable "pager" as rc_DT_ESTR
- Reimplemented elmrc variable "editor" as rc_DT_ESTR
- Reimplemented elmrc variable "calendar" as rc_DT_ESTR
- Reimplemented elmrc variable "localsignature" as rc_DT_ESTR
- Reimplemented elmrc variable "remotesignature" as rc_DT_ESTR
- Reimplemented elmrc variable "receivedmail" as rc_DT_ESTR
- Reimplemented elmrc variable "sentmail" as rc_DT_ESTR
- Reimplemented elmrc variable "incoming-mailbox" as rc_DT_ESTR
- Removed valid_rc_type()
- Added malloc_gets() to lib/mail_gets.c
- Changed send_msg_l(), mail(), mail_form(),
mail_filled_in_form(), forward(), reply_to_everyone(),
and reply() to use index, mailbox instead of
current_header, infile, mailbox.
- Added give_next_open_mailbox() or src/messages.c and
made save_copy() to use it.
- Moved defination of struct mv_storage and
struct mv_digest out from src/messages/def_messages.h
- When mail is forwarded mail, user is prompted
Forward message as separate part?
default value of answer depends "mimeforward"
elmrc option. Setting elmrc option "askmimeforward"
to OFF disables that prompt.
- Added expanded_address_from_items() to
lib/outheaders.c
- Removed class_charset() from melib/mime_parse.c
- Fix bug of Elm2.4ME+ PL117 where Elm was acting always
as dsn-success was set.
(from Elm2.4ME+ PL117a (25))
- Moved doc/Alias.guide to 2.4/doc/Alias.guide
- Moved doc/Form.guide to 2.4/doc/Form.guide
- Moved doc/Ref.guide to 2.4/doc/Ref.guide
- Moved doc/Users.guide to 2.4/doc/Users.guide
- Moved doc/Config.guid to 2.4/doc/Config.guid
- Moved doc/Elm.cover to 2.4/doc/Elm.cover
- Fix bug where Elm ME+ 2.5 PLalpha0 was eating last
character on %D expansion (on attribution string).
New elmrc options:
pgp-interactive
askmimeforward
Correspond quotes from Elm 2.5 PL7 Changes file:
[B1] allow elimination of aliases from larger aliases
(To: bigalias -subalias). Based on incomplete patch
by Waldi Ravens <wa...@moacs.indiv.nl.net>.
[B2] Don't try to send a message if the user erased all the
recipients on the header screen. (from Bob Schwartz
<r...@elt.com> and Keith Neufeld <neu...@pvi.org>
/ Kari Hurtta
Will be available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha1.patch.gz
and elm-ME+2.5.alpha1.tar.gz
or
<URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-ME+2.5/elm-ME+2.5.PLalpha1.patch.gz >
and <URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-ME+2.5/elm-ME+2.5.alpha1.tar.gz >
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha1.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha1.tar.gz >
via WWW.
Before applying patch catenate parts 1 - 4 first.
This patch is agaist Elm ME+ 2.5 PLalpha0
===========================================================[Part 1/4] =========
NOTICE: Create 2.4/doc directory before applying this patch!
For applying thich patch use (on directory where Configure is)
mkdir 2.4/doc
patch -p1 < {this-file}
Then check that removed files do not exists or are empty
ls -la `cat OBSOLETE `
If that lists non-empty files, patch failed.
Then remove emty files with command
rm `cat OBSOLETE `
Index: elmME+.2.5.alpha1-cvs/hdrs/patchlevel.h
Prereq: 1116000000
*** elmME+.2.5.alpha0/hdrs/patchlevel.h 2004-05-16 17:43:45.000000000 +0300
--- elmME+.2.5.alpha1-cvs/hdrs/patchlevel.h 2004-07-04 11:24:09.000000000 +0300
***************
*** 1,10 ****
! #define PATCHLEVEL "alpha0"
/* Used by Configure:
! SHAREDTAG: .1.1.0
*/
! #define LAST_REPORT_TIME 1116000000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "May, 2004" /* for elm -v option */
#define WHAT_STRING \
"@(#) Version ME+ 2.5, USENET supported version"
--- 1,10 ----
! #define PATCHLEVEL "alpha1"
/* Used by Configure:
! SHAREDTAG: .1.1.1
*/
! #define LAST_REPORT_TIME 1120400000
#define BUG_REPORT_ADDR "Kari Hurtta <e...@elmme-mailer.org>"
! #define VERS_DATE "Jul, 2004" /* for elm -v option */
#define WHAT_STRING \
"@(#) Version ME+ 2.5, USENET supported version"
Index: elmME+.2.5.alpha1-cvs/README.ME+
*** elmME+.2.5.alpha0/README.ME+ 2004-05-16 17:43:45.000000000 +0300
--- elmME+.2.5.alpha1-cvs/README.ME+ 2004-07-04 13:45:04.000000000 +0300
***************
*** 1,4 ****
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.736.4.28 2004/05/16 13:18:29 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
--- 1,4 ----
! $Header: /data/cvsroot/mail/elmme+/README.ME+,v 1.736.4.41 2004/07/04 10:45:04 hurtta Exp $
Version Elm2.4ME+ PL0 (25) is based on version Elm2.4 PL24 ME8b+.
Version Elm2.4 PL24 ME8b+ is based on version Elm2.4 PL24 ME8b.
***************
*** 19,25 ****
===================================================================
* Changelog of ElmME+ 2.5
! Changes on Elm ME+ 2.5 PLx compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------
Note: You must create directory
--- 19,185 ----
===================================================================
* Changelog of ElmME+ 2.5
! Changes on Elm ME+ 2.5 PLalpha1 compared with Elm2.4ME+ PLalpha0 (25)
! ---------------------------------------------------------------------
!
! Note: You must create directory
! 2.4/doc
! before applying this patch!
!
! SUMMARY: This release collects changes of Elm2.4ME+ PL116,
! PL116a, PL117 and allows elmination of aliases
! from larger aliases. Also Elm 2.4 guide files are moved
! from doc to 2.4/doc. New elmrc aoptions are
! pgp-interactive and askmimeforward.
!
! WARNING: There is small change on elm.filelist format, so
! downgrading from Elm2.4ME+ PL116 (25) or
! Elm ME+ 2.5 PLalpha1 to Elm 2.4ME+ PL115 (25) or
! to Elm ME+ 2.5 PLalpha0 will not work (you need
! unistall or remove elm.filelist first.)
!
! * Changes from Elm2.4ME+ PL116
!
! - Changed prompt ""received" folder not available, continue? (y/n) n"
! - Also changed default answer to be yes on that prompt
! (that is usefull only when received folder is remote,
! but that error may occur also is somebody is set
! receivedmail = /invalid
! )
!
! - Fix some possible compilation problems with traditional
! C compilers (as opposed to ANSI C ompilers)
!
! - Fix typo PROMTP_yesno (to PROMPT_yesno) on
! Elm2.4ME+ PL115a (25)
!
! - Added command "elmregister copydoc" which
! works like "elmregister copy", but marks
! file to be document.
!
! - Added option "-s {stage-subdir}" to command
! "elmregister {command}".
!
! - If on header editing screen incoked editor
! and address was on form '"a" <b> (c)",
! and then edited it on header editing screen
! address become as '"a" <b> (c('. Changed
! on '(' to ')' on make_surface_addr() on
! lib/outheaders.c
!
! - Change from Elm 2.5:
! allow elimination of aliases from larger aliases
! (To: bigalias -subalias) [B1]
! do not send message with zero recipients [B2]
!
! - Fix debug output of dump_expanded_address()
!
! - Changed message catalog name from elm2.4me+
! to elmme+2.5
!
! * Changes from Elm2.4ME+ PL116a (25)
!
! - Alternatives and weedout and list was replaced with Q letters
! Problem noted by: Cyrille Lefevre <cyrille...@laposte.net>
!
! - Reprint last error on "Mail Pre-Send Screen" after
! clearing screen.
!
! - Trying send encrypted messages with gpg was giving
! error message
! Couldn't find key matching 'xxx@yyy'
! Problem noted by: Olivier COLIN <dodo.o...@wanadoo.fr>
! (and probably others)
! > Make GetPGPKey() retry reading of result on case of
! interrupt.
!
! - GetPGPKey() was not collect status of exted gpg and
! was left lot of defunct processes. Converted code to
! use start_run().
!
! - Do not quote addresses on alternatives.
!
! * Changes from Elm2.4ME+ PL117 (25)
!
! - Fix debug output of dump_expanded_address()
!
! - Implement reconnection for mailer=submission (however
! reconnection is not implemented for mailer=sendmail-bs).
! These mailer's open smtp (or submission) connection
! to server before editor is started. That is done
! for get capacity of mailer (for 8BITMIME). However
! sometime that times out if editing tooks too long
! and sending of mail fails.
!
! - Added pgp-interactive option to elmrc. Setting that
! disables batch mode of pgp/gpg when encrypting/signing
! mail.
!
! - Added elmrc variable type rc_DT_ESTR (aka kind
! of expanded string).
! - Reimplemented elmrc variable "pager" as rc_DT_ESTR
! - Reimplemented elmrc variable "editor" as rc_DT_ESTR
! - Reimplemented elmrc variable "calendar" as rc_DT_ESTR
! - Reimplemented elmrc variable "localsignature" as rc_DT_ESTR
! - Reimplemented elmrc variable "remotesignature" as rc_DT_ESTR
! - Reimplemented elmrc variable "receivedmail" as rc_DT_ESTR
! - Reimplemented elmrc variable "sentmail" as rc_DT_ESTR
! - Reimplemented elmrc variable "incoming-mailbox" as rc_DT_ESTR
! - Removed valid_rc_type()
!
! - Added malloc_gets() to lib/mail_gets.c
!
! - Changed send_msg_l(), mail(), mail_form(),
! mail_filled_in_form(), forward(), reply_to_everyone(),
! and reply() to use index, mailbox instead of
! current_header, infile, mailbox.
!
! - Added give_next_open_mailbox() or src/messages.c and
! made save_copy() to use it.
!
! - Moved defination of struct mv_storage and
! struct mv_digest out from src/messages/def_messages.h
!
! - When mail is forwarded mail, user is prompted
! Forward message as separate part?
! default value of answer depends "mimeforward"
! elmrc option. Setting elmrc option "askmimeforward"
! to OFF disables that prompt.
!
! - Added expanded_address_from_items() to
! lib/outheaders.c
!
! - Removed class_charset() from melib/mime_parse.c
!
! - Fix bug of Elm2.4ME+ PL117 where Elm was acting always
! as dsn-success was set.
! (from Elm2.4ME+ PL117a (25))
!
! - Moved doc/Alias.guide to 2.4/doc/Alias.guide
! - Moved doc/Form.guide to 2.4/doc/Form.guide
! - Moved doc/Ref.guide to 2.4/doc/Ref.guide
! - Moved doc/Users.guide to 2.4/doc/Users.guide
! - Moved doc/Config.guid to 2.4/doc/Config.guid
! - Moved doc/Elm.cover to 2.4/doc/Elm.cover
!
! - Fix bug where Elm ME+ 2.5 PLalpha0 was eating last
! character on %D expansion (on attribution string).
!
! New elmrc options:
! pgp-interactive
! askmimeforward
!
! Correspond quotes from Elm 2.5 PL7 Changes file:
!
! [B1] allow elimination of aliases from larger aliases
! (To: bigalias -subalias). Based on incomplete patch
! by Waldi Ravens <wa...@moacs.indiv.nl.net>.
!
! [B2] Don't try to send a message if the user erased all the
! recipients on the header screen. (from Bob Schwartz
! <r...@elt.com> and Keith Neufeld <neu...@pvi.org>
!
! Changes on Elm ME+ 2.5 PLalpha0 compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------
Note: You must create directory
***************
*** 67,73 ****
added showreply to elmrc [A5] (!)
added confirmtagsave to elmrc [A6] [A13]
added editflush to elmrc [A7]
! added fwdattribution to elmrc [A8]
added printhdrs to elmrc [A11] (!!)
added savebyalias to elmrc
added showmlists to elmrc (!3)
--- 227,233 ----
added showreply to elmrc [A5] (!)
added confirmtagsave to elmrc [A6] [A13]
added editflush to elmrc [A7]
! added fwdattribution to elmrc [A8] [A16]
added printhdrs to elmrc [A11] (!!)
added savebyalias to elmrc
added showmlists to elmrc (!3)
***************
*** 97,103 ****
%)F for sender's name
%>F for sender's address
%% for %
! Added -w option to readmsg [A10]
Folder name may now include ... [A14] (!) (!2)
%h For 3 letter month
%y For 2 digit year
--- 257,263 ----
%)F for sender's name
%>F for sender's address
%% for %
! Added -w option to readmsg [A10] [A15]
Folder name may now include ... [A14] (!) (!2)
%h For 3 letter month
%y For 2 digit year
***************
*** 126,132 ****
- Change from Elm 2.5:
Added command 'M' to message menu
-
- Changes from Elm2.4ME+ PL115a (25)
- Reimplemeted elmrc "alternatives" as type PATH and
--- 286,291 ----
***************
*** 264,273 ****
--- 423,637 ----
This patch also allows environment vars to be enclosed
in {}.
+ [A15] Fixed readmsg so that when weeding is done, the
+ default action is the opposite of the last action.
+ That is, with a weed list of "Foo: Bar:" the default
+ is reject all other headers. With a weed list of
+ "Foo: !Bar:" the default is accept all other
+ headers.
+
+ [A16] The "fwdattribution" setting now understands
+ "%[begin|end]" formatting. Stuff to the left of the
+ bar is printed in the opening attribution, stuff to
+ the right in the close. The %A escape is depreciated
+ and is slated for removal.
===================================================================
* Changelog of Elm 2.4ME+
+ Changes of Elm2.4ME+ PL117 (25) compared with Elm2.4ME+ PL116 (25)
+ -------------------------------------------------------------------
+
+ - Removed class_charset() from melib/mime_parse.c
+
+ New elmrc options:
+ pgp-interactive
+ askmimeforward
+
+ Changes of Elm2.4ME+ PL116a (25) compared with Elm2.4ME+ PL116 (25)
+ -------------------------------------------------------------------
+
+ - Alternatives and weedout and list was replaced with Q letters
+ Problem noted by: Cyrille Lefevre <cyrille...@laposte.net>
+
+ - Reprint last error on "Mail Pre-Send Screen" after
+ clearing screen.
+
+ - Trying send encrypted messages with gpg was giving
+ error message
+ Couldn't find key matching 'xxx@yyy'
+ Problem noted by: Olivier COLIN <dodo.o...@wanadoo.fr>
+ (and probably others)
+ > Make GetPGPKey() retry reading of result on case of
+ interrupt.
+
+ - GetPGPKey() was not collect status of exted gpg and
+ was left lot of defunct processes. Converted code to
+ use start_run().
+
+ - Do not quote addresses on alternatives.
+
+ Changes of Elm2.4ME+ PL116 (25) compared with Elm2.4ME+ PL115 (25)
+ -------------------------------------------------------------------
+
+ SUMMARY: This patch fixes handling of unexpected return
+ value of nl_langinfo(CODESET) on AIX, fixes
+ value check of "internal-mailcaps" and
+ "metamail-mailcaps" elmrc variables,
+ fixes some prompts on situation where leaving
+ of folder fails, reimplements
+ "alternatives" and "weedout" elmrc variables,
+ changes elm.filelist format (adds subcommand
+ "copydoc" to elmregister), adds -s option
+ to elmregister and adds RFC 2919 List-ID to
+ list of known headers.
+
+ WARNING: There is small change on elm.filelist format, so
+ downgrading from Elm2.4ME+ PL116 (25) to
+ Elm 2.4ME+ PL115 (25) or to Elm ME+ 2.5 PLalpha0
+ will not work (you need unistall or remove
+ elm.filelist first.)
+
+ - " When installing ELM (on AIX 5L), I get the following message:
+
+ | Elm: Unable to map en_US locale (LC_CTYPE) to MIME charset.
+ | Codeset name ISO8859-1 was unknown. Treating ISO8859-1 as MIME name.
+ | Check /usr/local/lib/elm/elm.mimecharsets or
+ | noam/.elm/mime.charsets
+ | WARNING: Locale en_US (charset ISO8859-1) is unsupported, will cause problems!
+ | Problem with locale (system character set)! Elm ME+ will
+ | behave erratically."
+ Problem noted by: Noam G. Nudelman <no...@mail.biu.ac.il>
+
+ - dt_PATH_print_value() was not printing always empty values
+ correctly.
+
+ - fix test on expand_dt_path(). Specially non-file
+ values on "internal-mailcaps" and "metamail-mailcaps" was
+ not giving error message.
+
+ - Prompt "Failed to leave folder: Try to change again ?
+ [P]anic" did not worked. Added new routine prompt_letter()
+
+ - Changed prompt "Failed to leave folder: Try to quit again ?"
+
+ - Changed prompt ""received" folder not available, continue? (y/n) n"
+ - Also changed default answer to be yes on that prompt
+ (that is usefull only when received folder is remote,
+ but that error may occur also is somebody is set
+ receivedmail = /invalid
+ )
+
+ - Fix some possible compilation problems with traditional
+ C compilers (as opposed to ANSI C ompilers)
+
+ - Reimplemeted elmrc "alternatives" as type PATH and
+ removed special elmrc type for alternatives.
+
+ - Reimplemeted elmrc "weedout" as type PATH and
+ removed special elmrc type for weedout.
+ If first element on list is "*clear-weed-list*",
+ then builtin weedout list is not used.
+
+ - Fix typo PROMTP_yesno (to PROMPT_yesno) on
+ Elm2.4ME+ PL115a (25)
+
+ - Added command "elmregister copydoc" which
+ works like "elmregister copy", but marks
+ file to be document.
+
+ - Added option "-s {stage-subdir}" to command
+ "elmregister {command}".
+
+ - Added RFC 2919 List-ID -header to array on
+ lib/headers.c
+ - Fix missing space between pharse and < >
+ on result of hdr_decode_from_phrase() on
+ lib/headers.c
+
+ - If on header editing screen incoked editor
+ and address was on form '"a" <b> (c)",
+ and then edited it on header editing screen
+ address become as '"a" <b> (c('. Changed
+ on '(' to ')' on make_surface_addr() on
+ lib/outheaders.c
+
Changes of Elm2.4ME+ PL115a (25) compared with Elm2.4ME+ PL115 (25)
-------------------------------------------------------------------
Index: elmME+.2.5.alpha1-cvs/2.4/doc/Alias.guide
*** /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
--- elmME+.2.5.alpha1-cvs/2.4/doc/Alias.guide 2004-07-03 20:46:54.000000000 +0300
***************
*** 0 ****
--- 1,354 ----
+ .\" @(#)$Id: Alias.guide,v 1.1.2.1 2004/07/03 17:46:54 hurtta Exp $
+ .\"
+ .\" A guide to the ELM alias system and so on.
+ .\" format with:
+ .\" tbl Alias.guide | troff tmac.n - > Alias.format'
+ .\"
+ .\" (C) Copyright 1986,1987 Dave Taylor
+ .\" (C) Copyright 1988-1992 Usenet Community Trust
+ .\" Elm is now in the public trust.
+ .\"
+ .\"
+ .\"
+ .tm Have we been run through "tbl" first?? I hope so!
+ .po 1i
+ .ds h0
+ .ds h1
+ .ds h2
+ .ds f0
+ .ds f1
+ .ds f2
+ .nr Hy 1
+ .nr Pt 1
+ .nr Pi 0
+ .lg 0
+ .nf
+ .na
+ .rs
+ .za
+ .sp |3.0i
+ .ce 99
+ .ps 20
+ .ss 18
+ .vs 12
+ \f3The Elm Alias System Users Guide\f1
+ .sp 4
+ .ps 12
+ .ss 14
+ .vs 14
+ \f2What aliases are and how to use them
+ in the \f3Elm\fP mail system\f1
+ .sp 3
+ The Elm Mail System
+ (Version 2.4)
+ .sp 2
+ Syd Weinstein, Elm Coordinator
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp |9.0i
+ \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
+ \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
+ .fi
+ .ad
+ .bp 1
+ .sv 5v
+ .ps 14
+ .ss 12
+ .vs 16
+ \f3The Elm Alias System Users Guide\f1
+ .ds h0 "Alias Users Guide
+ .ds h1
+ .ds h2 "Version 2.4
+ .ds f0 "October 1, 1992
+ .ds f1
+ .ds f2 "Page %
+ .sp
+ .ps 10
+ .ss 12
+ .vs 12
+ (The Elm Mail System, \*(h2)
+ .sp
+ \*(f0
+ .sp 2
+ Syd Weinstein
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp 2
+ Derived from
+ \*QThe Elm Mail System, Version 2.0\*U
+ by
+ Dave Taylor
+ Intuitive Systems
+ Mountain View, California
+ email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
+ .ce 0
+ .sp 3
+ This document is intended as a supplement to the \f2Elm Users Guide\f1
+ and is only of interest to those users desiring more knowledge
+ about how aliases work and how to create strange and exciting
+ aliases for their systems (okay, so maybe it's not \f2that\f1 exciting!)
+ .sp
+ This document is broken up into the following sections;
+ user aliases,
+ group aliases,
+ system aliases,
+ editing and installing new aliases,
+ general warnings and other chit-chat.
+ .sp
+ .hn 1 User Aliases
+
+ The simplest type of aliases in the Elm system are individual
+ user aliases. These are made up of three parts;
+
+ .nf
+ \f2aliasname list\f1 = \f2username\f1 = \f2address\f1
+ .fi
+
+ Where the \f2aliasname list\f1 is either a single aliasname\s-1\u1\d\s0
+ .fn
+ 1. Aliasnames can be any combination of letters, numbers, hyphens (\*q\-\*u),
+ periods (\*q.\*u), or underscores (\*q_\*u). Letter case is not significant,
+ that is, \*QFRED\*U, \*QFred\*U, and \*Qfred\*U are identical.
+ .ef
+ or a list of aliasnames separated by commas. Aliasnames are case insensitive and will be
+ converted to all lower case by the alias system.
+ .sp
+ \f2Username\f1 is used to indicate the full \*Qreal name\*U of the user. For
+ example, if you had an alias for \*Qtaylor\*U to get to me, the
+ \f2username\f1 field would contain \*QDave Taylor\*U or
+ perhaps \*QDave Taylor at HP\*U
+ or some other permutation. The
+ name can optionally be entered in the format of \*QTaylor; Dave\*U. When
+ this is done, the alias system can sort aliases on a last name basis
+ for presentation on the alias menu within Elm.
+ Elm uses this information to add the user's full name to the addresses of
+ outbound mail to get more readable addresses. No
+ matter which format a name is entered, Elm displays it
+ and puts it in mail headers the way you would expect (i.e., \*QDave Taylor\*U).
+ .sp
+ \f2Address\f1 is either the user's full electronic mail address or, if
+ your system uses a smart mailer, the minimum address needed to specify
+ the destination. For example, say my smart mailer
+ contained information on how to get to machine \*Qhp-sdd\*U and I wanted
+ to have an address for my friend Ken there \(em I could have his address
+ specified as simply \*Qken@hp-sdd\*U (or alternatively \*Qhp-sdd!ken\*U since
+ the two are functionally equivalent).
+ .sp
+ Let's get on to some examples, shall we?
+ .sp
+ Consider this excerpt from my own \f2.elm/aliases.text\f1 file;
+
+ .nf
+ .ft CW
+ .zf
+ .in .5i
+ .ta \w'frank,minjarez 'u \w'frank,minjarez = Frank Minjarez 'u
+ # Mail aliases for Dave Taylor
+ # Friends from UCSD
+ addie = Addie Silva = ad...@hp-sdd.SDD.HP.COM
+ frank,minjarez = Frank Minjarez = Minjare...@dockmaster.ddn.mil
+ pizzini = Ken Pizzini = hplabs!ucbvax!ucdavis!pai!ken
+ george = Burdell; George P., Famous GT Guy = gbur...@matd.gatech.edu
+ .ft 1
+
+ .in 0
+ .fi
+ Note that the alias for Frank Minjarez has two \f2aliasnames\f1 associated
+ with it, \f2frank\f1 and \f2minjarez\f1.
+ Also notice that the first and second aliases
+ use the Internet style naming convention of \f2user@machine\f1
+ whereas the third uses the \f2uucp\f1 notation of \f2machine!user\f1.
+ The fourth alias illustrates two features for the \f2username\f1
+ field. An individual's name can be entered in the form of
+ \f2lastname; firstname, comment\f1 which allows the alias system to be able
+ to sort alias names on a last name basis. Additionally, any
+ text after the comma is treated as a comment. It is stored in
+ the alias file and displayed on the alias menu but will not
+ appear in the comment field (between the parentheses) in the header
+ of a message. This allows you to enter useful notes about an
+ individual that you would not otherwise want to include in the
+ \f3To:\f1 header of a mail message.
+ .sp
+ For the most part, the notational format is transparent within the
+ alias file \(em the only time it \f2does\f1 make a difference
+ is if you have to specify more than the machine that the user is
+ receiving mail on (as in the third example above).
+ .sp
+ Suffice to say that if you must specify any sort of uucp route
+ that you should use the uucp notation as much as possible to ensure
+ that the system expands the correct machine name. Similarly, if
+ you're bouncing mail through different Internet sites (to
+ get to a foreign system, as in the example below) you should use the
+ notation that system expects, e.g.:
+
+ .ft CW
+ .zf
+ .ti .5i
+ listserv%byuadmi...@rugters.edu
+ .ft 1
+ .sp
+ .hn 1 Group Aliases
+
+ After the confusion of user aliases, group aliases are even more
+ fun! For the most part the notation is very similar:
+
+ .nf
+ .ti .5i
+ \f2aliasname list\f1 = \f2groupname\f1 = \f2address list\f1
+ .fi
+
+ Where \f2aliasname list\f1 and \f2groupname\f1 are exactly equivalent
+ to the corresponding fields in user aliases.
+ .sp
+ The interesting part is the \f2address list\f1 field; this
+ field is actually in the same notation as the aliasname list (i.e.,
+ a list of addresses separated by commas),
+ so it's really quite easy to create.
+ It's best to illustrate by example:
+
+ .ft CW
+ .zf
+ .nf
+ .in .5i
+ friends, mypals = The Gang of Six = joe, larry, mary, joanna,
+ \h'\w'friends, mypals = The Gang of Six = 'u'nancy, michael
+ .ft 1
+ .in 0
+ .fi
+
+ Notice that you can continue onto as many lines as you'd like so
+ long as each additional line starts with either a \f2<space>\f1 or a
+ \f2<tab>\f1 character.
+ .sp
+ At times it may be desirable to send a message to everyone in
+ the group except one or two people. This can be accomplished by
+ adding the individuals' actual IDs to the \f3To:\f1 list, preceded
+ by a minus sign (\*q\-\*u). For example, if you were having a surprise
+ party for \f2nancy\f1 from the above group and you wanted to discuss the
+ details with the others, you could mail the message to:
+
+ .ft CW
+ .zf
+ .nf
+ .in .5i
+ friends \-nancy
+ .ft 1
+ .in 0
+ .fi
+
+ Unlike in prior versions of Elm, group alias addresses need not
+ be \f2previously defined aliases\f1 or valid mail addresses on
+ the current machine. Any valid delivery address, local user, or
+ prior user or group alias may now be part of a group alias
+ \f2address list\f1.
+ .sp
+ .hn 1 System Aliases
+
+ System aliases are functionally equivalent to the individual Elm
+ alias lists each Elm user has (both user aliases and group aliases)
+ but are \f2read only\f1 for everyone but the Elm administrator. The
+ format of the file is identical to the users' files, and the only difference is
+ that this file is expected to be located in the directory that contains
+ the \f3system_hash_file\f1 and \f3system_data_file\f1 files (see the
+ \f2Elm Configuration Guide\f1 for more details on these variables).
+ .sp
+ Simply create the system alias file in the specified directory
+ as you would a normal alias file, and install it using the newalias
+ command with the -g option (see the following section for more details
+ on that). Voila!!
+ .sp
+ .hn 1 Editing and Installing New Aliases
+
+ To install new aliases, you need merely to create, or modify,
+ the file \f2$HOME/.elm/aliases.text\f1 until you're
+ satisfied with it and it meets the requirements discussed above.
+ You can then try to install it with the command:
+
+ .ti .5i
+ $ \f3newalias\f1
+
+ which either reports the number of aliases installed
+ or the errors encountered trying to parse and store the
+ given alias list.
+ .sp
+ Note that blank lines are no problem and that comments are not only
+ allowed but actually encouraged, and must have \*q#\*u as the first
+ character of each comment line.
+ .sp
+ .hn 1 Other Stuff not Covered Yet
+
+ Probably the biggest question you have in your mind right now
+ is \*QBut how the heck does this relate to my existing \f2Berkeley Mail\f1
+ aliases and the lower-level \f2sendmail\f1 alias system?\*U Well,
+ rest assured that if you \f2really\f1 want to have
+ your aliases down in the transport you can. No problem.
+ .sp
+ And for those ex-\f2Berkeley Mail\f1 fans, you can translate your
+ aliases into the format that Elm wants by running them
+ through the \f2awk\f1 script listed in the appendix.
+ .sp
+ Finally, if you have any problems or questions, try looking in
+ the \f2newalias\f1 manual entry.
+ .bp
+ .ce 99
+ \f3Appendix One
+ An \f2awk\fP Script for Translating Aliases
+ from a Berkeley Mail \f2.mailrc\fP File
+ to an Elm \f2.elm/aliases.text\fP File\f1
+ .ce 0
+ .sp
+ .nf
+
+ .ta .5i
+ .ft CW
+ .zf
+ BEGIN { print "# Elm .elm/aliases.text file, from a .mailrc file..."
+ print ""
+ }
+ next_line == 1 {
+ next_line = 0;
+ group = ""
+ for (i = 1; i <= NF; i++) {
+ if (i == NF && $i == "\\\\") sep = ""
+ else sep = ", "
+ if ($i == "\\\\") {
+ group = sprintf("%s,", group)
+ next_line = 1;
+ }
+ else if (length(group) > 0)
+ group = sprintf("%s%s%s", group, sep, $i);
+ else
+ group = $i;
+ }
+ print "\\t" group
+ }
+ $1 ~ /[Aa]lias | [Gg]roup/ {
+ if ( NF == 3)
+ print $2 " = user alias = " $3;
+ else {
+ group = ""
+ for (i = 3; i <= NF; i++) {
+ if (i == NF && $i == "\\\\") sep = ""
+ else sep = ", "
+ if ($i == "\\\\") {
+ group = sprintf("%s,", group)
+ next_line = 1;
+ }
+ else if (length(group) > 0)
+ group = sprintf("%s%s%s", group, sep, $i);
+ else
+ group = $i;
+ }
+ print $2 " = group alias = " group;
+ }
+ }
+
+ .ft 1
+ .fi
+ Note: this script is contained in the release as \f2utils/mailrc.awk\f1.
Index: elmME+.2.5.alpha1-cvs/2.4/doc/Config.guid
*** /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
--- elmME+.2.5.alpha1-cvs/2.4/doc/Config.guid 2004-07-03 20:46:54.000000000 +0300
***************
*** 0 ****
--- 1,390 ----
+ .\" @(#)$Id: Config.guid,v 1.1.2.1 2004/07/03 17:46:54 hurtta Exp $
+ .\"
+ .\" A guide to the ELM alias system and so on.
+ .\" format with:
+ .\" 'troff tmac.n Config.guid > Config.fmtd'
+ .\"
+ .\" (C) Copyright 1986,1987 Dave Taylor
+ .\" (C) Copyright 1988-1992 Usenet Community Trust
+ .\"
+ .\"
+ .\"
+ .\"
+ .tm Have we been run through "tbl" first?? I hope so!
+ .po 1i
+ .ds h0
+ .ds h1
+ .ds h2
+ .ds f0
+ .ds f1
+ .ds f2
+ .nr Hy 1
+ .nr Pt 1
+ .nr Pi 0
+ .lg 0
+ .nf
+ .na
+ .rs
+ .za
+ .sp |3.0i
+ .ce 99
+ .ps 20
+ \f3Elm Configuration Guide\f1
+ .sp 4
+ .ps 12
+ .ss 14
+ .vs 14
+ \f2How to install and customize the Elm mail system\f1
+ .sp 3
+ The Elm Mail System
+ (Version 2.4)
+ .sp 2
+ Syd Weinstein, Elm Coordinator
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp |9.0i
+ \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
+ \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
+ .ps 10
+ .ss 12
+ .vs 12
+ .fi
+ .ad
+ .bp 1
+ .fi
+ .ad
+ .bp 1
+ .sv 5v
+ .ps 14
+ \f3Elm Configuration Guide\f1
+ .ds h0 "Elm Configuration Guide
+ .ds h1
+ .ds h2 "Version 2.4
+ .ds f0 "October 1, 1992
+ .ds f1
+ .ds f2 "Page %
+ .sp
+ .ps 10
+ .ss 12
+ .vs 12
+ (The Elm Mail System, \*(h2)
+ .sp
+ \*(f0
+ .sp 2
+ .sp 2
+ Syd Weinstein
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp 2
+ Derived from
+ \*QThe Elm Mail System, Version 2.0\*U
+ by
+ Dave Taylor
+ Intuitive Systems
+ Mountain View, California
+ email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
+ .ce 0
+ .sp 3
+ This document is intended as a supplement to the \f2Elm Users Guide\f1
+ and \f2Elm Reference Guide\f1
+ and should be of interest mainly to people at a site installing,
+ maintaining, and/or modifying the source code to the Elm mail system.
+ .sp
+ It is \f2required\f1 that installation be done by using the
+ \f2Configure\f1 script supplied with the system. Please see the
+ file \f2Instruct\f1 for further information on running \f2Configure\f1.
+ .sp
+ The remainder of this document discusses the various questions
+ asked by the \f2Configure\f1 script and the
+ options available via direct editing of various files and
+ parameters. As indicated above, almost all of the sites that install
+ Elm should find the \f2Configure\f1 script more than
+ sufficient.
+ .hu Using \f2Configure\fP
+
+ \f2Configure\fP is a shell script that automatically determines the
+ type of system it is running on and tunes the parameters of Elm to fit
+ that system and its environment. Where the installer has a choice, it
+ asks questions of the installer. \f2Configure\fP provides its own
+ instructions when run, so they are not repeated here. However, when
+ the installer is presented with a choice, this next section explains
+ some of the options available. Not all the questions or options to
+ those questions are explained here.
+ .sp
+ .ne 6
+ \f3Use fcntl style locking?\f1
+ .br
+ \f3Use flock style locking?\f1
+ .br
+ \f3Use dotlock (.lock) style locking?\f1
+ .sp
+ Elm, like all Mail User Agents (MUAs), has times when it needs exclusive
+ access to the mail spool file. There are three methods of locking the
+ mail spool file: \f2.lock\f1 files, \f2fcntl\f1, and \f2flock\f1.
+ \&\f2.lock\f1 files is the original method,
+ and is used by MUAs and Mail Transport Agents (MTAs). Whenever
+ possible \f2.lock\f1 files should be enabled to assure backwards
+ compatibility with older MUAs and MTAs.
+ .sp
+ BSD systems introduced \f2flock\f1 style locking. It uses the
+ \f2flock(2)\f1 system call
+ to lock the file on the local node. System V later introduced
+ \f2fcntl\f1 style locking, which can also use a protocol for remote locking
+ across the network. Where both styles are available, it is advisable
+ to use both, unless you are sure that only one is in use at your site.
+ Under many System V Release 4 (SVR4) systems, they both use the same underlying
+ system call (\f2flock\f1 is translated into \f2fcntl\f1 style locking),
+ so for that version of
+ .ux ,
+ \f2flock\f1 is not needed and \f2fcntl\f1 style alone can be used.
+ .sp
+ .ne 4
+ \f3Enable calendar feature?\f1
+ .sp
+ Elm has a feature to take specially marked lines within mail messages
+ and add them to a file for use by the system calendar program. The
+ command to do this extraction needs to be enabled to work. There is
+ also a follow on question regarding the name of the calendar file:
+ .sp
+ .ti .5i
+ \f3Default calendar file?\f1
+ .sp
+ which is usually \f2calendar\f1 on most systems. This file resides in
+ the user's home directory, not their \f2.elm\f1 directory.
+ .sp
+ .ne 5
+ \f3Does your /etc/passwd file keep full names in Berkeley/V7 format (name
+ first thing after \*q:\*u in GCOS field)?\f1
+ .sp
+ Elm uses the full name from the password file if it is available.
+ There are two major ways this name is stored. Berkeley/V7 systems
+ place the name as the entire GCOS field string, that is it starts
+ directly after the \*q:\*u that delimits the fields. USG (UNIX Systems
+ Group, or AT&T) systems put the user's name after a department number
+ and separate it from that number by a hyphen (\*q\-\*u).
+ The end of the user's full
+ name in these systems is a \*q(\*u. Look at your \f2/etc/passwd\f1 file and if
+ either version applies, answer \f2yes\f1 to this question; if neither
+ applies, answer \f2no\f1. Elm can still get the user's name from the
+ \&\f2.fullname\f1 file in their home directory.
+ .sp
+ .ne 6
+ \f3Every now and then someone has a gethostname()/uname() that lies about
+ the hostname but can't be fixed for political or economic reasons.
+ Would you like to pretend gethostname()/uname() isn't there and maybe
+ compile in the hostname?\f1
+ .sp
+ Elm needs to know the correct name of the host on which it is executing
+ to be able to create the proper headers for the outbound mail. Some
+ systems use one name for uucp and another name for the system and
+ others just don't reply to the subroutines with the proper name. In
+ this case it will be necessary to compile in the name. In all other
+ cases this should not be needed. It is provided just in case there is
+ a problem with your system.
+ .sp
+ .ne 4
+ \f3Honors Content-Length: header?\f1
+ .sp
+ Starting with SVR4, many of the MTAs are
+ binary transparent. This allows for sending binary messages, such as
+ encoded voice or graphics. In doing so, they no longer can tolerate changes in
+ the message content by the mailers to aid in determining the start of
+ the next message. To solve this problem the \f3Content-Length:\f1 header was
+ added. Elm generates the \f3Content-Length:\f1 header, but to make full use
+ of it, Elm should also not escape such sequences as \*QFrom \*U at the
+ start of a line of the message. If your MTA (mailer)
+ does honor the \f3Content-Length:\f1 header for determining the start of the
+ next message, answer this question \f2yes\f1.
+ .sp
+ Along the same lines, but now obsolete and being phased out, is a
+ problem where an MTA thinks a message is terminated
+ by a single lone period on a line. \f2sendmail\f1 has an option to turn off
+ this behavior and this option is set by default in \f2Configure\f1. If your
+ mailer cannot turn off this option, add a line to \f2sysdefs.SH\f1 to define
+ the symbol \f3NEED_LONE_PERIOD_ESCAPE\f1. This symbol turns a line with
+ a lone period into a period and a blank to avoid this problem.
+ This symbol is ignored if the \*QHonors Content-Length: header?\*U question
+ is answered \f2yes\f1.
+ .sp
+ .ne 4
+ \f3Am I going to be running as a setgid program?\f1
+ .sp
+ On USG and many other type systems, access to the mailboxes and
+ the mailbox directory is via the group permissions. The MUAs,
+ such as Elm, need write access in this directory to be able
+ to move the mailbox around for internal editing and to create lock
+ files. If the permissions on your mailbox directory are \*Qdrwxrwxr-x\*U
+ (no write access for \*Qothers\*U),
+ then Elm needs to be a \f2setgid\f1 program.
+ .sp
+ .ne 4
+ \f3What is the default editor on your system?\f1
+ .sp
+ If no editor is specified in the user's \f2.elm/elmrc\f1 file, this is
+ which editor to use. The editor is used to compose outbound mail
+ messages.
+ .sp
+ .ne 4
+ \f3What pager do you prefer to use with Elm?\f1
+ .sp
+ This is the standard pager to use for reading messages. Besides the
+ usual system pagers, two Elm specific internal options exist: \f2builtin\f1
+ and \f2builtin+\f1. The \f2builtin\f1 pager is faster to execute but much less
+ flexible than the system provided pagers. The \f2builtin+\f1 pager just clears
+ the page before displaying the next page, otherwise the two versions
+ are identical.
+ .hu Other Configurable Parameters
+ The following parameters rarely need to be changed, but are provided if
+ you need them. \f2Configure\fP does not prompt for their values. To
+ change them, edit the \f2hdrs/sysdefs.h\f1 file directly after running
+ \f2Configure\f1.
+ .lp MAX_IN_WEEDLIST 1.0i
+ The maximum number of headers that can be specified in the weedout
+ list of the \f2.elm/elmrc\f1 file. A suggested alternative approach if this
+ number is too small is to specify initial substrings in the file
+ rather than increasing the number. For example, say you want to
+ weedout the headers \*QLatitude:\*U and \*QLatitudinal-Coords:\*U, you
+ could simply specify \*QLatitud\*U and match them both! Furthermore
+ you could also specify headers like \*QX\-\*U and remove all the user
+ defined headers!
+ .lp MAX_HOPS 1.0i
+ When using the \f3group reply\f1 command, this is the maximum number of
+ hops that a message can have taken. This is used to try to optimize the
+ return address (remove cyclic loops and so on) and regular use
+ should show that the default of 35 is plenty more than you'll
+ ever need!
+ .lp system_text_file 1.0i
+ This is the source text file for the system level aliases.
+ See either the \f2newalias\f1 man page or \f2The Elm
+ Alias System Users Guide\f1 for further details.
+ .lp system_hash_file 1.0i
+ This is the file that contains the hashed version of the system
+ aliases generated by \f2newalias\f1.
+ .lp system_data_file 1.0i
+ This is the other file the \f2newalias\f1 command installs in the system
+ alias area and contains the actual addresses for each of the aliases
+ contained in the hashed data file.
+ .lp DEBUGFILE 1.0i
+ The name of the file to put in the user's home directory if they choose to
+ use the \f3\-d\f1 (\f3debug\f1) option.
+ .lp OLDEBUG 1.0i
+ The name of the file to save the previous debug output as (this feature
+ was added to ensure that users wanting to mail bug reports wouldn't
+ automatically overwrite the debug log of the session in question).
+ .lp temp_lock_dir 1.0i
+ Directory for lock files for XENIX.
+ .lp temp_file 1.0i
+ Temporary file for sending outbound messages.
+ .lp temp_form_file 1.0i
+ A place to store temporary forms (for Forms Mode) while answering them.
+ .lp temp_mbox 1.0i
+ Place to keep a copy of the incoming mailbox to avoid collisions with newer
+ mail.
+ .lp temp_print 1.0i
+ File to use when creating a printout of a message.
+ .lp temp_edit 1.0i
+ File to use when editing the mailbox file on XENIX.
+ .lp temp_uuname 1.0i
+ Where to redirect output of the \f2uuname\f1 command.
+ .lp mailtime_file 1.0i
+ File to compare date to to determine if a given message is new
+ since the last time the mail was read or not.
+ .lp readmsg_file 1.0i
+ File to use when communicating with the \f2readmsg\f1 program (see
+ that program for more information).
+ .lp smflags 1.0i
+ Defines the options to hand to \f2sendmail\f1 if and when the program
+ chooses to use it.
+ .lp smflagsv 1.0i
+ Defines the options to hand to \f2sendmail\f1 in verbose voyeur mode.
+ .lp mailer 1.0i
+ If you don't have \f2sendmail\f1, this is the mailer that'll be used.
+ .lp helpfile 1.0i
+ The help file name prefix.
+ .lp ELMRC_INFO 1.0i
+ The file containing textual messages associated with each
+ Elm variable setting in the user's \f2.elm/elmrc\f1
+ file. This is used when the user chooses to save the
+ options from within the main program.
+ .lp elmrcfile 1.0i
+ The name of the automatic control file within the \f2.elm\f1
+ directory (by default \f2elmrc\f1).
+ .lp old_elmrcfile 1.0i
+ When a new \f2elmrc\f1 file is saved, the old one is also saved by
+ renaming it to whatever this identifier is set to.
+ .lp system_rc_file 1.0i
+ The name of the global \f2elmrc\f1 file (default is \f2$lib/elm.rc\f1). This
+ is where the system administrator puts global default values for any
+ parameters controlled by the \f2.elm/elmrc\f1 file.
+ .lp mailheaders 1.0i
+ The name of the optional file that users may have that is
+ included in the headers of each outbound message.
+ .lp dead_letter 1.0i
+ If the user decides not to send a message it is instead saved
+ to this filename in their home directory.
+ .lp unedited_mail 1.0i
+ In the strange case when the mailer suddenly finds all the directories
+ it uses shut off (like \f2/usr/mail\f1 and \f2/tmp\f1)
+ then it'll put the current
+ mailbox into this file in the user's home directory.
+ .lp newalias 1.0i
+ How to install new aliases (note that you MUST have the \f3\-g\f1 option!).
+ .lp readmsg 1.0i
+ What the \f2readmsg\f1 program is installed as.
+ .hu Runtime configuration \(em the global \f2$lib/elm.rc\fP file
+
+ No global default file is provided as part of the installation of
+ Elm. If you wish to override any default parameters for all
+ users, create a file as defined in the \f3system_rc_file\f1 above. An
+ easy way to create it is to copy a saved \f2.elm/elmrc\f1 and edit it
+ to remove all user-specific parameters. Of particular interest are
+ three additional parameters you may set: \f3hostdomain\f1, \f3hostfullname\f1,
+ and \f3hostname\f1. See \f3String Variables\f1 in section 2
+ of the \f2Elm Reference Guide\f1 for details on these variables.
+ .hu When \f2Configure\fP Fails
+
+ The \f2Configure\f1 script has run successfully tens of thousands of
+ times. But maybe your system is the one in ten thousand that will
+ confuse it. For example, \f2Configure\f1 assumes that if your system
+ has a feature it would like, then it should be used. If vendors never
+ made mistakes, then that might be a good assumption. In reality,
+ \f2Configure\f1 might want to use a feature you'd prefer it didn't.
+ .sp
+ When \f2Configure\f1 completes its examination of your system, it
+ gives you a final chance to make changes. When \f2Configure\f1 asks
+ .sp
+ .ti .5i
+ \f3If you need to edit config.sh, do it as a shell escape here:\f1
+ .sp
+ you may briefly jump out of \f2Configure\f1 to make changes. For
+ example, if \f2vi\f1 is your preferred editor, type \f3!vi config.sh\f1.
+ .sp
+ Unfortunately, \f2Configure\f1 makes the same mistakes every time it
+ runs. This means that if you ever apply updates or changes to the
+ Elm system and rerun \f2Configure\f1, you will have to manually make
+ the same configuration changes. Or more likely, you'll forget that
+ the changes are required.
+ .sp
+ The solution to this problem is to create a \f2config.over\f1 file
+ in the Elm base directory. This file may contain any valid \f2sh\f1
+ commands, and is loaded by \f2Configure\f1 immediately before the
+ \f2config.sh\f1 file is created.
+ For example, supposed that \f2Configure\f1 creates a \f2config.sh\f1
+ file with the definition
+ .sp
+ .ti .5i
+ \f3d_feature=define\f1
+ .sp
+ but instead you want it to say
+ .sp
+ .ti .5i
+ \f3d_feature=undef\f1
+ .sp
+ All you need to do is create a \f2config.over\f1 file and put that
+ final line in it.
Index: elmME+.2.5.alpha1-cvs/2.4/doc/Elm.cover
*** /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
--- elmME+.2.5.alpha1-cvs/2.4/doc/Elm.cover 2004-07-03 20:46:54.000000000 +0300
***************
*** 0 ****
--- 1,69 ----
+ .\" @(#)$Id: Elm.cover,v 1.1.2.1 2004/07/03 17:46:54 hurtta Exp $
+ .\"
+ .\" Cover sheet for the ELM mail system...
+ .\" format with
+ .\" troff tmac.n Elm.cover > Coversheet.fmtd'
+ .\"
+ .\" Elm is now in the public trust.
+ .\"
+ .\" (C) Copyright 1986,1987 Dave Taylor
+ .\" (C) Copyright 1988-1992 Usenet Community Trust
+ .\"
+ .\"
+ .po 1i
+ .ds h0
+ .ds h1
+ .ds h2
+ .ds f0
+ .ds f1
+ .ds f2
+ .nr Hy 1
+ .nr Pt 1
+ .nr Pi 8
+ .lg 0
+ .nf
+ .na
+ .rs
+ .za
+ .sv |2.0i
+ .ce 99
+ .ps 28
+ \fBThe \s30Elm\s28 Mail System\fR
+ .sp 2
+ .ps 18
+ .ss 16
+ .vs 20
+ \fIA Replacement Mailer for All Unix Systems\fR
+ .sp 3
+ \fBUSENET VERSION\fR
+ .sp
+ (2.4 Release System)
+ .ps 14
+ .vs 16
+ .sp
+ Syd Weinstein, Elm Coordinator
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp 5
+ .ps 10
+ .ss 10
+ .vs 12
+ Derived from
+ \*QThe Elm Mail System, Version 2.0\*U
+ by
+ Dave Taylor
+ Intuitive Systems
+ Mountain View, California
+ email: taylor\s11@\s10intuitive.com \ or \ limbo!taylor
+
+ \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
+ \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
+ .sp
+ .fi
+ NOTICE: You may, without additional permission from the authors, distribute
+ copies of the Elm Documentation, with or without additions developed by
+ you or by others at no charge or at a charge that covers the cost of
+ reproducing the copies, provided that the Elm copyright notice is retained.
Index: elmME+.2.5.alpha1-cvs/2.4/doc/Form.guide
*** /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
--- elmME+.2.5.alpha1-cvs/2.4/doc/Form.guide 2004-07-03 20:46:54.000000000 +0300
***************
*** 0 ****
--- 1,402 ----
+ .\" @(#)$Id: Form.guide,v 1.1.2.1 2004/07/03 17:46:54 hurtta Exp $
+ .\"
+ .\" A guide to using the Elm Forms mode
+ .\" format with:
+ .\" 'troff tmac.n - > Forms.format'
+ .\"
+ .\" Elm is now in the public trust.
+ .\"
+ .\" Copyright (c) 1988-1992 USENET Community Trust
+ .\" Copyright (c) 1986,1987 Dave Taylor
+ .\"
+ .\"
+ .\"
+ .po 1i
+ .ds h0
+ .ds h1
+ .ds h2
+ .ds f0
+ .ds f1
+ .ds f2
+ .nr Hy 1
+ .nr Pt 1
+ .nr Pi 0
+ .lg 0
+ .nf
+ .na
+ .rs
+ .\" Define the big box macro for troff
+ .de eb
+ .sp -1
+ .nf
+ .ie t \{\
+ \h'-.5n'\L'|\\nau-1'\l'\\n(.lu+1n\(ul'\L'-|\\nau+1'\l'|0u-.5n\(ul'
+ .\}
+ .el \{\
+ \h'-.5n'\l'\\n(.lu+1n'
+ .\}
+ .fi
+ ..
+ .sv |3.0i
+ .ce 99
+ .ps 20
+ .ss 18
+ .vs 12
+ \f3Elm Forms Mode Guide\f1
+ .sp 3
+ .ps 12
+ .ss 14
+ .vs 14
+ \f2What Forms Mode is, how to use it to create
+ custom forms, how to reply to forms, and how to
+ use it for AT&T Mail messages\f1
+ .sp 3
+ The Elm Mail System
+ (Version 2.4)
+ .sp 2
+ Syd Weinstein, Elm Coordinator
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp |9.0i
+ \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
+ \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
+ .fi
+ .ad
+ .bp 1
+ .sv 5v
+ .ps 14
+ .ss 12
+ .vs 16
+ .sp 2
+ \f3A Guide to Forms Mode in Elm\f1
+ .ds h0 "Forms Mode Guide
+ .ds h1
+ .ds h2 "Version 2.4
+ .ds f0 "October 1, 1992
+ .ds f1
+ .ds f2 "Page %
+ .sp
+ .ps 10
+ .ss 12
+ .vs 12
+ (The Elm Mail System, \*(h2)
+ .sp
+ \*(f0
+ .sp 2
+ Syd Weinstein
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp 2
+ Derived from
+ \*QThe Elm Mail System, Version 2.0\*U
+ by
+ Dave Taylor
+ Intuitive Systems
+ Mountain View, California
+ email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
+ .ce 0
+ .sp 3
+ While there are a lot of mail systems that allow the transmission
+ of text and primitive pictures, to send and reply to more complex
+ forms is simply not possible. Elm, however, took
+ the forms mode implemented as part of the AT&T Mail package and has
+ expanded on it to be a smoothly fit part of the overall mail system.
+ .sp
+ Forms mode gives you the ability to send \*Qtemplate\*U files to people
+ and receive the filled-in replies.\s-2\u1\d\s0
+ .fn
+ 1. Note that this feature assumes that the person on the other end is
+ also using the Elm mail system, that both yourself and the person on
+ the other end have their user levels set to something other than
+ \f2Beginner\f1 (\f30\f1) and the \f3forms\f1 variable set ON in
+ their \f2.elm/elmrc\f1 files.
+ .ef
+ Let's look at an example right off.
+ .sp
+ Say we were going to use computer mail as a way to file defects with
+ software. There is a certain amount of information we want to be able
+ to collect when each report is made, and if it is in a specific format
+ we can use programs to file the defects upon receipt.
+ .sp
+ The form we'll try to emulate starts out looking like:
+ .\" A manual page break has been done because the 'sd' macro doesn't like
+ .\" coming up right after the footer or just doesn't like going to a new
+ .\" page by itself. The bug has been reported.
+ .bp
+ .ft CW
+ .zf
+ .sd c
+ .mk a
+ .sp
+ .tl ''Defect Reporting Form''
+ .sp
+ .tl 'Program:\ \l'2.3i-\w'Program:\ 'u'''Version:\ \l'1.7i-\w'Version:\ 'u''
+ .tl 'Operating\ System:\ \l'2.3i-\w'Operating\ System:\ 'u'''Version:\ \l'1.7i-\w'Version:\ 'u''
+ .sp
+ .tl 'Defect\ Type:\ \l'2.3i-\w'Defect\ Type:\ 'u''''
+ .sp
+ .tl 'Date\ Found:\ \l'2.3i-\w'Date\ Found:\ 'u'''By\ Whom:\ \l'2.3i-\w'By\ Whom:\ 'u'\h'.2i''
+ .tl 'Date\ Reported:\ \l'2.3i-\w'Date\ Reported:\ 'u'''Phone:\ \l'2.3i-\w'Phone:\ 'u'\h'.2i''
+ .sp
+ .tl 'Description:\ \l'6.4i-\w'Description:\ 'u''''
+ .tl '\l'6.4i''''
+ .tl '\l'6.4i''''
+ .sp
+ .eb
+ .ed
+ .ft 1
+ .rs \" restore spacing from ed macro
+ .sp
+ This form can actually be created almost exactly as listed above in
+ the Elm mail system by using your standard editor and can then
+ be mailed about as needed.
+ .sp
+ Let's say that we want a bit more information, however, especially with
+ fields like \f2Defect Type\f1, we want to list all the recommended answers.
+ To create the actual form, we need merely to replace the underlines in
+ the above form with spaces. The multi-line comments can simply be
+ indicated by a \*q:\*u by itself on a line:
+
+ .ft CW
+ .zf
+ .sd c
+ .mk a
+ .sp
+ .tl ''Defect Reporting Form''
+ .sp
+ .tl 'Program:''Version:\h'1.7i-\w'Version:'u''
+ .tl 'Operating System:''Version:\h'1.7i-\w'Version:'u''
+ .sp
+ .tl '(Valid Defect Types are: user-error, doc-error, fatal, other)'''
+ .tl 'Defect Type:'''
+ .sp
+ .tl 'Date Found:''By\ Whom:\h'2.3i-\w'By\ Whom:'u''
+ .tl 'Date Reported:''Phone:\h'2.3i-\w'Phone:'u''
+ .sp
+ .tl 'Description'''
+ .tl ':'''
+ .sp
+ Thank you for filling in this form.
+ .sp 2
+ .eb
+ .ed
+ .ft 1
+ .rs \" restore spacing from ed macro
+ .sp
+ As you can see, it is quite simple to create forms!!
+ .sp
+ Now that you have an idea what we're talking about, let's actually officially
+ define the system.
+ .br
+ .ne 5
+ .hu Forms Mode Specification
+
+ [Note that this is all taken from the document \f2Standard for Exchanging
+ Forms on AT&T Mail\f1, Version 1.9 of 6/7/86, from AT&T.]
+ .sp
+ The forms mode is really quite simple. Simple enough that it is amazing
+ that it hadn't been implemented before AT&T Mail came along!!
+ .sp
+ In a nutshell, each field is delimited by a \*q:\*u followed by a number of
+ blank spaces or tabs that represent the valid size for that field. That
+ is, if we have a line in the form like:
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .tl ''Phone (area-code):\0\0\0\0\0Number:\0\0\0\0\0\0\0\0\0\0''
+ .ft 1
+ .fi
+ .sp
+ The area-code field is limited to three characters and the number to nine
+ (this is kind of hard to see with the proportionally spaced formatted copy,
+ alas).
+ The only exception to the rule is that a \*q:\*u by itself on a line represents
+ a field that is as large as the user entering the data desires.
+
+ The actual form that is transmitted, in AT&T Mail parlance, is a \*QSIMPLE\*U
+ forms handler message (as opposed to the \*QADVANCED\*U handler). This means
+ that it contains three sections:
+ .sp
+ .ne 8
+ .nf
+ .in .5i
+ .ft 2
+ The Message Header
+ .ft CW
+ .zf
+ [\&OPTIONS-SECTION]
+ ***
+ [\&FORMS-IMAGE]
+ ***
+ [\&RULES-SECTION]\f1
+ .in 0
+ .fi
+ .sp
+ Elm generates form messages with the \f2OPTIONS-SECTION\f1 filled out,
+ but ignores it when receiving mail. The filled out \f2OPTIONS-SECTION\f1 is:
+ .sp
+ .ft CW
+ .zf
+ .nf
+ .in .5i
+ WIDTH=80
+ TYPE=SIMPLE
+ OUTPUT=TEXT\f1
+ .in 0
+ .fi
+ .sp
+ The \f2FORMS-IMAGE\f1 section is that described above, i.e. prompting
+ text followed by a \*q:\*u, followed by spaces or tabs.
+ The \f2RULES-SECTION\f1 can
+ contain explicit rules about the possible values of each field, but
+ this is currently ignored by Elm, being a \*QSIMPLE\*U forms mode
+ mail system.
+ .sp
+ Forms also have the header \*QContent-Type: mailform\*U to indicate to the
+ mail system (either Elm or AT&T Mail) that a form is being sent.
+ .sp
+ Elm further indicates that a form has been received by having an
+ \*qF\*u as the status character in the header display section (instead of
+ \*qN\*u for new, etc).
+ .br
+ .ne 5
+ .hu Composing and Sending a Form
+
+ The first step to enable sending forms is to change the setting of
+ the variable \f3forms\f1 in your \f2.elm/elmrc\f1 file to ON:
+ .sp
+ .nf
+ .ti .5i
+ forms = ON
+ .fi
+ .sp
+ The next step is to send the message to someone using the \f3m\f1 (\f3mail\f1)
+ command, which drops you into an editor. Type in the form as
+ indicated above, with appropriate colons and comments, and end the entry
+ by leaving the editor.
+ .sp
+ The prompt is now:
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .tl ''Choose: E)dit msg, edit H)eaders, M)ake form, S)end or F)orget : @''
+ .ft 1
+ .fi
+ .sp
+ so we choose \f3m\f1 \(em \f3make form\f1. Elm then either
+ rewrites the prompt without the \*QM)ake form\*U option, indicating that
+ the form has been accepted, or indicates the problem and gives you
+ a chance to correct it.
+ .sp
+ Once it has been accepted, simply use the \f3s\f1 \(em \f3send message\f1 \(em
+ command and it's off!
+ .sp
+ Note that you cannot reply to a message with a form.
+ .br
+ .ne 6
+ .hu Replying to a Form
+
+ Let's reply to the form message we generated now. The header page of the
+ Elm mail system indicates that the message is a form by having
+ an \*qF\*u next to it. So we use \f3r\f1 to reply and the screen is immediately
+ cleared and we're prompted, field by field, for the data requested.
+ Each field has underscores in the input area to indicate the size field that
+ is expected.
+ .sp
+ After answering all the questions we'll have a screen that looks like:
+
+ .ft CW
+ .zf
+ .sd c
+ .mk a
+ .sp
+ .tl ''Defect Reporting Form''
+ .sp
+ Program: \f3The Elm Mail System\f1\l'3i-\w'\f3The Elm Mail System'u'
+ Version: \f31.5\f1\l'3i-\w'\f31.5'u'
+ Operating System: \f3HP-UX\f1\l'3i-\w'\f3HP-UX'u'
+ Version: \f35.141 C\f1\l'3i-\w'\f35.141 C'u'
+ .sp
+ (Valid Defect Types are: user-error, doc-error, fatal, other)
+ Defect Type: \f3fatal\f1\l'5i-\w'\f3fatal\f1'u'
+ .sp
+ Date Found: \f310/9/86\f1\l'3i-\w'\f310/9/86\f1'u'
+ By Whom: \f3Dave Taylor\f1\l'3i-\w'\f3Dave Taylor\f1'u'
+ Date Reported: \f310/9/86\f1\l'3i-\w'\f310/9/86\f1'u'
+ Phone: \f3(415) 857\-6887\f1\l'3i-\w'\f3(415) 857-6887\f1'u'
+ .sp
+ Description
+ (Enter as many lines as needed, ending with a \*q.\*u by itself on a line)
+ \f3When running it on a CPM system I cannot compile successfully.\f1
+ \f3.\f1
+ Thank you for filling in this form.
+ .tl ''Choose: E)dit form, edit H)eaders, S)end or F)orget : @''
+ .sp
+ .eb
+ .ed
+ .ft 1
+ .rs \" restore spacing from ed macro
+ .sp
+ Quite simple. Notice, however, that the order of prompting is
+ left-to-right on each line, so the fields, \f2By Whom:\f1 and
+ \f2Phone:\f1, although placed in what seems like a logical place on the
+ form, turn out to be confusing when filling in the received form since
+ it isn't clear what \f2Phone:\f1 is being asked for because of the
+ intervention of the \f2Date Reported:\f1 field.
+ .sp
+ The message that is actually sent out from this has the
+ fields in a more acceptable format:
+ .\" Force page break, as there seems to be a bug in the .sd macro
+ .bp
+ .\"
+ .ft CW
+ .zf
+ .mk a
+ .sp
+ WIDTH=80
+ TYPE=SIMPLE
+ OUTPUT=TEXT
+ ***
+ .tl ''Defect Reporting Form''
+ .sp
+ .tl ' Program: The Elm Mail System''Version: 1.5\h'1.5i-\w'Version: 1.5'u''
+ .tl ' Operating System: HP-UX''Version: 5.141 C\h'1.5i-\w'Version: 5.141 C'u''
+ .sp
+ .tl ' (Valid Defect Types are: user-error, doc-error, fatal, other)'''
+ .tl ' Defect Type: fatal'''
+ .sp
+ .tl ' Date Found: 10/9/86''By Whom: Dave Taylor\h'2.3i-\w'By Whom: Dave Taylor'u''
+ .tl ' Date Reported: 10/9/86''Phone: (415) 857-6887\h'2.3i-\w'Phone: (415) 857-6887'u''
+ .sp
+ .tl ' Description'''
+ .sp
+ When running it on a CPM system I cannot compile successfully.
+ .sp
+ .tl ' Thank you for filling in this form.'''
+ ***
+ .sp
+ .eb
+ .ft 1
+
+ .hu Comments on Forms Mode
+
+ As was said at the beginning, this way of sending about forms could
+ prove to be very helpful and useful in a variety of contexts. On the
+ other hand, until a more sophisticated forms language is used for the
+ forms, this should be sufficient to embody the power of the idea.
+ .sp
+ I welcome any comments and thoughts on this system and also welcome
+ possible enhancements.
+ .sp
+ I also gratefully thank Dale DeJager of AT&T Information Systems
+ for sending me more
+ information on AT&T Mail than I could possibly digest in any finite
+ amount of time.
Index: elmME+.2.5.alpha1-cvs/2.4/doc/Ref.guide
*** /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
--- elmME+.2.5.alpha1-cvs/2.4/doc/Ref.guide 2004-07-03 20:46:54.000000000 +0300
***************
*** 0 ****
--- 1,2359 ----
+ .\" @(#)$Id: Ref.guide,v 1.1.2.1 2004/07/03 17:46:54 hurtta Exp $
+ .\"
+ .\" Reference guide to the Elm mail system.
+ .\" format with
+ .\" troff tmac.n Ref.guide > Ref.format
+ .\"
+ .\" Elm is now in the public trust.
+ .\"
+ .\" (C) Copyright 1986,1987 Dave Taylor
+ .\" (C) Copyright 1988-1992 Usenet Community Trust
+ .\"
+ .\"
+ .\"
+ .po 1i
+ .ds h0
+ .ds h1
+ .ds h2
+ .ds f0
+ .ds f1
+ .ds f2
+ .nr Hy 1
+ .nr Pt 1
+ .nr Pi 0
+ .lg 0
+ .nf
+ .na
+ .rs
+ .za
+ .sv |3.0i
+ .ce 99
+ .ps 20
+ .ss 18
+ .vs 12
+ \f3The Elm Reference Guide\f1
+ .sp 4
+ .ps 12
+ .ss 14
+ .vs 14
+ \f2A comprehensive list of all commands,
+ options and such to the \f3Elm\fP mail system\f1
+ .sp 3
+ The Elm Mail System
+ (Version 2.4)
+ .sp 2
+ Syd Weinstein, Elm Coordinator
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp |9.0i
+ \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
+ \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
+ .fi
+ .ad
+ .bp 1
+ .sv 5v
+ .ce 99
+ .ps 14
+ .vs 16
+ \f3The Elm Reference Guide\f1
+ .ds h0 "Elm Reference Guide
+ .ds h1
+ .ds h2 "Version 2.4
+ .ds f0 "October 1, 1992
+ .ds f1
+ .ds f2 "Page %
+ .sp
+ .ps 10
+ .ss 12
+ .vs 12
+ (The Elm Mail System, \*(h2)
+ .sp
+ \*(f0
+ .sp 2
+ Syd Weinstein
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp 2
+ Derived from
+ \*QThe Elm Mail System, Version 2.0\*U
+ by
+ Dave Taylor
+ Intuitive Systems
+ Mountain View, California
+ email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
+ .ce 0
+ .sp 3
+ .hn 1 Introduction
+
+ There are many parts to a complex software system and \f3The Elm
+ Mail System\f1
+ is no different. This document describes fully all the options
+ available in the mailer, including the command line options,
+ the commands (in considerably more detail than
+ in \f2The Elm Users Guide\f1) and
+ the \f2.elm/elmrc\f1 file.
+
+ To be more explicit, this document covers:
+ a discussion of
+ the \f2.elm/elmrc\f1 file,
+ command line options of Elm,
+ outgoing mail processing,
+ responses of various commands,
+ mail archive folders,
+ the Alias system,
+ system aliases etc,
+ more on the Elm utilities,
+ and a section for expert mail users.
+
+ Without any further ado, then, let's get this show on the road!!
+ .sp
+ .ne 8 \" footnote for UNIX forces text to next page but leaves footnote & hdr
+ .hn 1 "The .elm/elmrc File"
+
+ Elm, like lots of other software on the
+ .ux
+ system, has the ability to automatically read
+ in a configuration file at each invocation. The file must be
+ called \f2elmrc\f1 and reside in the \f2.elm\f1 directory located
+ in your home directory. It can have any of the entries below, in any order.
+ If you are missing any entries, or if you don't have an \f2.elm/elmrc\f1
+ file, the default values (listed below for each option) or those values specified
+ by your systems administrator in a system wide \f2elm.rc\f1 file are used.
+ Note that those options below designated with \*q*\*u can be altered
+ using Elm via the options screen, while those designated with a
+ \*q+\*u can be placed
+ on the options screen using the \f3configoptions\f1 variable.
+ Also note that when you save a new \f2.elm/elmrc\f1 file via the \*q>\*u command
+ of the options
+ screen, it is (re)created including only those options that you
+ have changed via your original \f2.elm/elmrc\f1 file or via the options screen.
+
+ The format for each line of the \f2.elm/elmrc\f1 file is:
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .ti +.5i
+ variable = value\f1
+ .fi
+ .sp
+ .ne 8
+ .hu String Variables
+
+ .lp aliassortby* 1.0i
+ You can have your alias display sorted by any of the following ways:
+ .si 1.5i
+ .lp alias 10n
+ Sorts according to \f2aliasname\f1 for each address.
+ .lp name 10n
+ Sorts according to \f2username\f1 for each address.
+ .lp text 10n
+ Presents the aliases in the order found in the
+ \f2aliases.text\f1 file.
+ .ei
+ .in 1.0i \" ei doesn't restore margin
+ .sp
+ Each of these fields can also optionally be prepended with the
+ sequence \*Qreverse\-\*U to reverse the order of the sort. This doesn't
+ imply anything about the order of the message in the \f2aliases.text\f1
+ file itself and affects only their order on the display screen. The
+ default is \f2name\f1 order.
+
+ .lp alteditor+ 1.0i
+ The editor to use when mailing to a message that already includes text,
+ as the builtin editor cannot handle that situation. Messages that
+ already include text are forwarded messages and replies where the
+ original message is included in the reply. This value is not needed
+ if the \f3editor\f1 variable is not set to \*Qbuiltin\*U.
+
+ .lp alternatives 1.0i
+ This is a list of other machine/username combinations
+ that you receive mail from (forwarded). This is used
+ when the \f2group reply\f1 feature is invoked to ensure that
+ you don't send yourself a copy of the outbound message.
+ The default is a list of no alternatives.
+
+ .lp attribution 1.0i
+ When you \f3forward\f1 a message or \f3reply\f1 to it, you can
+ optionally attribute the quoted text to its original author.
+ Defining the attribution string here allows you to indicate the
+ form that the attribution should take. The sequence \*Q%s\*U in the
+ attribution is replaced by the name of the original author.
+ Examples are:
+ .sp
+ .nf
+ .in 1.5i
+ .ft CW
+ .zf
+ attribution = According to %s:
+ attribution = %s writes:
+ .ft 1
+ .in 0
+ .fi
+
+ .lp calendar* 1.0i
+ This is used in conjunction with the \*q<\*u \f2scan message for
+ calendar entries\f1 command, as the file to append any found
+ calendar entries to. The default is \f2calendar\f1 in your home directory.
+
+ .lp charset 1.0i
+ This is the character set used for messages with a
+ \*QContent-Type: text/plain\*U header.
+ The default depends on your site's installation, but is usually
+ US-ASCII. \f3charset\f1 is only recognized if MIME
+ (Multipurpose Internet Mail Extension)
+ support is configured. You could set \f3charset\f1 to your preferred
+ national character set, but be aware that there is currently no way
+ to change it online. Also you must be aware that Elm probably needs
+ \f2metamail\f1 to display messages with \f3charset\f1=US-ASCII if you change
+ \f3charset\f1. Elm tries to know which character set could display US-ASCII
+ too, but its list of compatible character sets is probably not complete.
+
+ .lp compatcharsets 1.0i
+ This is the list of character sets which are more or less a superset
+ of US-ASCII. This enables Elm to display messages with \f3charset\f1=US-ASCII
+ with the builtin pager, or your preferred pager, instead of calling
+ \f2metamail\f1. \f3compatcharsets\f1 is only recognized if MIME support
+ is configured. The ISO-8859-X character sets are defaulted.
+
+ .lp configoptions 1.0i
+ This is a list of letters that indicate which of the run-time
+ configurable options you desire placed on the options screen (see
+ section 7, \f3Commands\f1, for the \f3options\f1 command). There
+ are 22 run-time configurable options, but only room for 15 on a
+ 24-line screen. The default list is \f2^_cdefsopyv_am_un\f1. Two
+ additional characters can be specified for formatting. Those are \*q_\*u, which
+ adds a blank line, and \*q^\*u, which places the title message on that line
+ instead of the bottom of the screen. The
+ letters \*qi\*u, \*qq\*u, and \*qx\*u are reserved for \*Qreturn to
+ index\*U, \*Qquit\*U,
+ and \*Qexit\*U, respectively, and are not listed as part of the
+ \f3configoptions\f1
+ list. The options controlled by each letter are:
+ .sp
+ .in 1.5i
+ .ta 0.5i
+ a A)rrow cursor \f2(arrow)\f1
+ .br
+ b B)order on copy \f2(prefix)\f1
+ .br
+ c C)alendar file \f2(calendar)\f1
+ .br
+ d D)isplay mail using \f2(pager)\f1
+ .br
+ e E)ditor (primary) \f2(editor)\f1
+ .br
+ f F)older directory \f2(maildir)\f1
+ .br
+ h H)old sent message \f2(copy)\f1
+ .br
+ j J) reply editor \f2(alteditor)\f1
+ .br
+ k K) pause after pager \f2(promptafter)\f1
+ .br
+ l A(l)ias Sorting \f2(aliassortby)\f1
+ .br
+ m M)enu display \f2(menu)\f1
+ .br
+ n N)ames only \f2(names)\f1
+ .br
+ o O)utbound mail saved \f2(sentmail)\f1
+ .br
+ p P)rint mail using \f2(print)\f1
+ .br
+ r R)eply copies msg \f2(autocopy)\f1
+ .br
+ s S)orting criteria \f2(sortby)\f1
+ .br
+ t T)ext editor (~e) \f2(easyeditor)\f1
+ .br
+ u U)ser level \f2(userlevel)\f1
+ .br
+ v V)isual Editor (~v) \f2(visualeditor)\f1
+ .br
+ w W)ant Cc: prompt \f2(askcc)\f1
+ .br
+ y Y)our full name \f2(fullname)\f1
+ .br
+ z Z) signature dashes \f2(sigdashes)\f1
+
+ .lp displaycharset 1.0i
+ This is the character set which is supported by your terminal.
+ The default depends on your site's installation but is usually
+ US-ASCII. For sites with
+ .xw
+ support, ISO-8859-1
+ is a reasonable default.
+
+ .lp easyeditor+ 1.0i
+ The editor to be used by the \*Q~e\*U escape within the builtin editor.
+ The default value is the value of the configuration variable \f2emacs_editor\f1
+ (see \f2The Elm Configuration Guide\f1).
+
+ .lp editor* 1.0i
+ The editor to use when typing in new mail. If you select
+ \*Qnone\*U or \*Qbuiltin\*U you'll get a Berkeley Mail style
+ interface for all mail that doesn't already have text
+ in the buffer (e.g. a reply, mail with a \*Qsignature\*U, etc.)
+ There are two possible formats for it, either a command that
+ can have a filename appended to it before being
+ executed, or a string that contains the metasequence \*Q%s\*U
+ which is replaced by the name of the file before being
+ executed. Examples of each are:
+
+ .nf
+ .in 1.5i
+ .ft CW
+ .zf
+ editor = emacs \-nw
+ editor = emacs \-nw %s \-f text-mode \-f turn-on-auto-fill
+ .ft 1
+ .in 1.0i
+ .fi
+
+ The default is to use the value of $EDITOR in your
+ current environment, and if not set, an editor selected by
+ the person who configured Elm for your system.
+
+ .lp escape 1.0i
+ The character used with the builtin editor (see \f3editor\f1 above)
+ to escape from text entry to input a command.
+ When a line begins with this character, the builtin editor interprets it
+ as a command rather than as text to add.
+ The default is \*q~\*u (tilde).
+
+ .lp fullname* 1.0i
+ This is the name the mailer uses in messages
+ you send. It is highly recommended that you use your
+ full name and nothing strange or unusual, as that can
+ appear extremely rude to people receiving your mail.
+ The default is to use the \*Qgcos\*U field from the \f2/etc/passwd\f1 file
+ on systems that use this field to store full names, and to use the contents
+ of the \f2.\|fullname\f1 file in your home directory on other systems.
+
+ .lp hostdomain 1.0i
+ This is the domain name of your system.
+ This variable is only valid in the system-wide \f2elm.rc\f1 file.
+ It is only necessary if the value returned by
+ the \f2getdomainname\f1 system call is incorrect for your mail use or
+ if that system call is unavailable on your system.
+ If this variable is specified, then the \f3hostfullname\f1 variable must
+ also be specified.
+
+ .lp hostfullname 1.0i
+ This is the \*Qfully qualified domain name\*U of your system.
+ This variable is only valid in the system-wide \f2elm.rc\f1 file.
+ It is only necessary if the value returned by the \f2getdomainname\f1 and
+ \f2gethostname\f1 system calls are incorrect for your mail use or if those
+ system calls are unavailable on your system. It is required if either
+ the \f3hostdomain\f1 or the \f3hostname\f1 variables are used within the
+ system-wide \f2elm.rc\f1 file.
+
+ .lp hostname 1.0i
+ This is the local node-name of your system.
+ This variable is only valid in the system wide \f2elm.rc\f1 file.
+ It is only necessary if the value returned by
+ the \f2gethostname\f1 system call is incorrect for your mail use or if
+ that system call is unavailable on your system.
+ If this variable is specified, then the \f3hostfullname\f1 variable must
+ also be specified.
+
+ .lp localsignature 1.0i
+ See \f3signature\f1.
+
+ .lp maildir* 1.0i
+ This is your folder directory.
+ When you specify a folder name beginning with the \*q=\*u metacharacter,\s-2\u1\d\s0
+ .fn
+ 1. Note that \*q%\*u and \*q+\*u are synonymous with \*q=\*u throughout Elm.
+ .ef
+ it stands for this directory name. That is,
+ if you save a message to folder \f2=stuff\f1
+ the \*q=\*u is expanded to the current value of \f3maildir\f1.
+ The default is the directory \f2Mail\fP in your home directory.
+
+ .lp pager* 1.0i
+ This is the program to be used to display messages. You can
+ specify \*Qbuiltin\*U or the name of any standard pager. If you
+ use \*Qbuiltin+\*U, each screenfull of displayed message is
+ \*Qpaged\*U from the top of your screen with a title line,
+ while \*Qbuiltin\*U simply \*Qscrolls up\*U subsequent screenfulls once
+ it has \*Qpaged\*U the first screenfull.
+ The default is to use the value of $PAGER in your
+ current environment, and if not set, a pager selected by
+ the person who configured Elm for your system, quite likely
+ \*Qbuiltin+\*U.
+
+ .lp precedences 1.0i
+ Some mail transports look at a \*QPrecedence\*U header in outbound
+ mail messages to determine how to deliver the message. The Elm header
+ editing menu allows you to place a precedence on your mail messages.
+ By default, Elm allows any value to be specified as the message
+ precedence. This option may be used to restrict the allowed precedences
+ to a particular list. For example, you might say:
+
+ .nf
+ .in 1.5i
+ .ft CW
+ .zf
+ precedences = special-delivery air-mail first-class bulk junk
+ .ft 1
+ .in 1.0i
+ .fi
+
+ Exactly what precedences your mail transport supports and what they
+ do (if anything at all!) will vary from site to site.
+
+ The distinction between the \*QPrecedence\*U and \*QPriority\*U headers
+ is subtle: the precedence tells the mail system how to handle the
+ message and the priority tells the recipient how important the message
+ is. Although these are quite different things, they are often related.
+ This option will also allow you to associate message priorities with
+ precedences. For example, you might say:
+
+ .nf
+ .in 1.5i
+ .ft CW
+ .zf
+ precedences = special-delivery:urgent air-mail:urgent first-class bulk junk
+ .ft 1
+ .in 1.0i
+ .fi
+
+ In this example, if you select an \*Qair-mail\*U precedence then the
+ message priority defaults to \*Qurgent\*U. If you select a
+ \*Qfirst-class\*U precedence then no special priority is implied. The
+ priorities given in this field are used only if you have not already
+ assigned a priority to your message, and even if one is assigned via
+ \f3precedences\f1 you can always go back and change it.
+
+ .lp prefix+ 1.0i
+ When you \f3reply\f1 to a message or \f3forward\f1 a message to another person,
+ you can optionally include the original message. Defining the
+ prefix value here allows you to indicate what the prefix of
+ each included line should be. The default is \*Q>\ \*U (specified as
+ \*Q>_\*U \(em underscore is interpreted as space) and is
+ standard in the
+ .ux
+ community.
+
+ .lp print* 1.0i
+ This is the command used for printing mail messages. There are two
+ possible formats for the command, depending on whether or not the command
+ contains the sequence \*Q%s\*U. In the first form the mail message(s) to
+ be printed are piped to the specified command. An example of this
+ form is:
+ .sp
+ .in 1.5i
+ .ft CW
+ .zf
+ print = print \-formfeed
+ .ft 1
+ .in 1.0i
+ .sp
+ In the second form the mail message(s) to be printed are dumped into
+ a temporary file, and a \*Q%s\*U in the command string is replaced with
+ the name of the temporary file. An example of this form is:
+ .sp
+ .in 1.5i
+ .ft CW
+ .zf
+ print = pr %s | lpr
+ .ft 1
+ .in 1.0i
+ .sp
+ Another significant difference between the two forms is that in the
+ second form all output from the command is discarded, but in the first
+ form all output is displayed on the terminal. For
+ example, if you wish to use the \*Qpass-through\*U feature to print on
+ the \*Qaux\*U port of a terminal, you must use the first form. The second
+ form is provided for backward compatibility with old versions of Elm.
+ It is depreciated and might be removed in a future release. The
+ default is set by the person who configured Elm for your system.
+
+ .lp receivedmail 1.0i
+ This is the folder to which incoming mail is saved after you've read it.
+ When you answer \f2no\f1 to \*QKeep unread messages in
+ your incoming mailbox?\*U or \f2yes\f1 to \*QStore read
+ messages in your \*Qreceived\*U folder?\*U, this is where the messages go.
+ The default is \*Q=received\*U, that is,
+ a folder called \f2received\f1 in your \f3maildir\f1 directory.
+
+ .lp remotesignature 1.0i
+ See \f3signature\f1.
+
+ .lp sentmail* 1.0i
+ This is the folder to which a copy of outgoing mail is automatically
+ saved. This is only done if the \f3copy\f1 boolean variable is set
+ ON. Also note that if the \f3savename\f1 boolean variable is enabled
+ then this folder may be ignored since the program may save to a folder
+ that has the same name as the login of the person you're sending to.
+ Whether or not a copy is saved, and to what folder, can be changed just
+ prior to sending a message (see the \f3copy\f1 command of the mail
+ command sub-menu in section 7, \f3Commands\f1). The default is
+ \*Q=sent\*U, that is, a folder called \f2sent\f1 in your \f3maildir\f1
+ directory.
+
+ .lp shell 1.0i
+ This defines the shell to use when doing \*q!\*u escapes and
+ such. The default is to use the value of $SHELL in your
+ current environment, and if not set, a shell selected by
+ the person who configured Elm for your system.
+ Note that the \*q!\*u escape is optional and may not be enabled in your
+ version of Elm.
+
+ .lp signature 1.0i
+ This defines the file that is automatically appended to all
+ outbound mail before the editor is invoked. Furthermore,
+ if you'd like a different signature file for \*Qlocal\*U
+ mail and \*Qremote\*U mail (remote being via other hosts),
+ you can alternatively define two variables, \f3localsignature\f1
+ and \f3remotesignature\f1, to have the same functionality.
+ The default is to not have signatures appended to your messages.
+
+ .lp sortby* 1.0i
+ You can have your folder sorted in any of the following ways:
+ .si 1.5i
+ .lp from 10n
+ Sorts according to whom each message is \f2from\f1.
+ .lp lines 10n
+ Sorts \f2shortest\f1 to \f2longest\f1 by message.
+ .lp mailbox 10n
+ Leaves the messages in the order found in the folder.
+ .lp received 10n
+ Sorts \f2least recently received\f1 to \f2most recently received\f1.
+ .lp sent 10n
+ Sorts \f2least recently sent\f1 to \f2most recently sent\f1.
+ .lp status 10n
+ Sorts by \f2priority\f1, \f2action\f1, \f2new\f1, \f2tagged\f1, then
+ \f2deleted\f1.
+ .lp subject 10n
+ Sorts according to the \f2subject\f1 of each message.
+ .ei
+ .in 1.0i \" ei doesn't restore margin
+ .sp
+ Each of these fields can optionally be prepended with the
+ sequence \*Qreverse\-\*U to reverse the order of the sort. This doesn't
+ imply anything about the order of the messages in the folder
+ itself and affects only their order on the index screen. The
+ default is \f2mailbox\f1 order.
+
+ .lp textencoding 1.0i
+ This is the value for the
+ \*QContent-Transfer-Encoding:\*U header,
+ which is used to tell MIME
+ (Multipurpose Internet Mail Extension) capable mail readers how they
+ should decode your mail.
+ The default depends on your site's installation, but is usually
+ \f27bit\f1. Other possible values are \f28bit\f1, \f2base64\f1 or
+ \f2quoted-printable\f1 (see RFC1341 for details).
+ \f27bit\f1 and \f28bit\f1 implies no encoding.
+ .sp
+ Note that Elm doesn't look at this value; it is just placed in your
+ outgoing mail headers.
+ If you put \f2base64\f1 or \f2quoted-printable\f1 as the value,
+ Elm will NOT turn your message into a \f2base64\f1/\f2quoted-printable\f1
+ encoded message. You will have to do that
+ yourself with whatever means are available in your MIME capable mail reader.
+ Metamail, for instance, has a program called mimencode that you can use.
+
+ .lp tmpdir 1.0i
+ Use this if you want to define your own directory for the temporary
+ file Elm creates while running. This is only necessary if using the
+ system temporary directory could cause problems, such as when not all
+ NFS clients mount the common temporary directory, or when the temporary
+ directory is prone to being cleared periodically. The default entry
+ of the system temporary directory is normally OK.
+
+ .lp visualeditor+ 1.0i
+ The editor to be used by the \*Q~v\*U escape within the builtin editor.
+ The default value is the value of the configuration variable \f2vi_editor\f1
+ (see \f2The Elm Configuration Guide\f1).
+
+ .lp weedout 1.0i
+ When specifying this option, you can list headers that
+ you \f2don't\f1 want to see when you are displaying a message.
+ This list can continue for as many lines as desired, as
+ long as the continued lines all have leading indentation.
+ All headers in this entry append to the default weedout list.
+ There are two special header flags. The first, \*Q*clear-weed-list*\*U,
+ clears the default list. The second, \*Q*end-of-user-headers*\*U,
+ terminates the entry, in case the following lines look like they
+ might be more headers for the list.
+ The default \f3weedout\f1 list includes the following header strings:
+ .sp
+ .in 1.5i
+ .ft CW
+ .zf
+ .nf
+ \&>From
+ \&Apparently-To:
+ \&Content-Length
+ \&Content-Transfer-Encoding
+ \&Content-Type:
+ \&From
+ \&In-Reply-To:
+ \&MIME-Version
+ \&Message-Id:
+ \&Newsgroups:
+ \&Received:
+ \&References:
+ \&Status:
+ \&X-Mailer:
+ .ft 1
+ .fi
+ .sp
+ .in 1.0i
+ Note that the \*QFrom\*U entry weeds out both \*QFrom:\*U and the
+ \*QFrom\ \*U headers. If you just want to weed out \*QFrom\ \*U, for example,
+ put a \*Q*clear-weed-list*\*U at the start of the list followed by \*QFrom_\*U
+ or \*QFrom\ \*U.
+ .in 0
+ .ne 8
+ .hu Numeric Variables
+
+ .lp bounceback 1.0i
+ This is a hop count threshold value and allows you to
+ set up the mailer so that when you send mail more than
+ \f2n\f1 machines away, it'll automatically include a
+ \*QCc:\*U to you through the remote machine. In practice
+ this should be very rarely used. Note that this refuses to
+ bounce mail off an Internet address. The default is to
+ have it set to zero, which disables the function.
+
+ .lp builtinlines 1.0i
+ This is used to determine if the builtin pager should be used on some
+ messages even if you would usually use an external pager program.
+ There are two ways of determining whether the builtin pager should be
+ used. If you want any message that is shorter than \f2n\f1 lines to
+ use the internal pager, set this variable to \f2n\f1. If you want the
+ builtin pager to be used if the message is \f2m\f1 lines shorter than
+ the number of lines on your screen, set this variable to \f2\-m\f1.
+ Setting this variable to zero will result in the message always being
+ sent through your external pager. This variable is used only if
+ the pager is not set to the builtin pager. The default is \-3.
+
+ .lp readmsginc 1.0i
+ This variable modifies the display of the message \*QReading in
+ \f2foldername\f1, message: #\*U, which is displayed when reading a new
+ folder. The message count is normally updated as
+ each message in the folder is read. If you are on a slow terminal and are
+ reading a folder with a large number of messages, the time it takes to
+ redraw the message count can significantly exceed the time it takes to
+ simply read the folder.
+ .sp
+ The \f3readmsginc\f1 variable controls the frequency with which the
+ message count is updated. If this parameter is set to 50, the message
+ count will be updated after every 50 messages (i.e., at 50, 100, 150,
+ and so forth). The default value for this parameter is 1. If a value
+ of less than 1 is specified for this parameter, the value is ignored,
+ and the default value is used instead.
+
+ .lp sleepmsg 1.0i
+ This variable modifies the time Elm waits after displaying a transient
+ message before erasing it and continuing. It can be set to zero to
+ suppress the wait entirely. It is in units of whole seconds.
+
+ .lp timeout 1.0i
+ On more advanced systems, it's nice to start up the
+ mailer in a window and let it sit in background
+ until new mail arrives (see \f2wnewmail\f1 for
+ another window based program), at which point
+ it can be brought up to the forefront of the system
+ and read. In this case, it would be quite convenient
+ to have the mailer internally resynchronize every
+ so often. This option specifies the number of seconds that this occurs.
+ .sp
+ This is also useful for non-windowing terminals. For example, you can
+ leave Elm running at night (I usually do) and when you
+ come in in the morning it'll be all ready to read your mail!
+ .sp
+ The default is a 300 second (5 minute) timeout period.
+
+ .lp userlevel* 1.0i
+ This is what the program uses to determine the relative level of
+ sophistication of the user. The values are \*q0\*u for a new user (the
+ default), \*q1\*u for someone familiar with Elm,
+ and \*q2\*u for experts. Some advanced features are hidden from novice
+ users, while experts get less verbose prompt messages.
+ The default is \*q0\*u.
+ .br
+ .ne 8
+ .hu Boolean Variables
+
+ The value assigned to boolean variables can be \*QON\*U or \*QOFF\*U only.
+
+ .lp alwaysdelete 1.0i
+ Set ON to set the default answer to the \*QDelete messages?\*U prompt
+ to \f2yes\f1 (see the \f3quit\f1 command in section 7, \f3Commands\f1,
+ and the \f3ask\f1 variable below). This default answer also applies to
+ deletions from the alias system. The default for \f3alwaysdelete\f1 is
+ OFF.
+
+ .lp alwayskeep 1.0i
+ Set ON to set the default answer to the \*QKeep unread mail in incoming
+ mailbox?\*U prompt to \f2yes\f1. However, if you set \f3alwaysstore\f1
+ OFF or answer \f2no\fP to the \*QStore read mail in \*Qreceived\*U
+ folder?\*U prompt, it is presumed that you also want to keep your
+ unread mail in the incoming mailbox, so the value of \f3alwayskeep\f1
+ is ignored in those cases. See the \f3quit\f1 command in section 7,
+ \f3Commands\f1, and the \f3ask\f1 and \f3alwaysstore\f1 variables
+ below for more details. The default for \f3alwayskeep\f1 is ON.
+
+ .lp alwaysstore 1.0i
+ Set ON to set the default answer to the \*QStore read mail in
+ \*Qreceived\*U folder?\*U prompt to \f2yes\f1 (see the \f3quit\f1
+ command in section 7, \f3Commands\f1, and the \f3ask\f1 variable
+ below). The default for \f3alwaysstore\f1 is OFF.
+
+ .lp arrow* 1.0i
+ Sometimes you are forced to use a slow or \*Qdumb\*U terminal. Set ON
+ to make the current message pointer the \*Q\->\*U sequence rather than
+ the inverse bar. Note that this is overridden by the \*Q\-a\*U command
+ line option (see section 3, \f3Command Line Options\f1). The default
+ is OFF.
+
+ .lp ask 1.0i
+ Set OFF to tell Elm that you'd rather not be asked \*QDelete
+ messages?\*U and such each time you quit, resynchronize, change
+ folders, or return from the alias system, but that it should just use
+ the values of \f3alwaysdelete\f1, \f3alwaysstore\f1, and
+ \f3alwayskeep\f1 without prompting. Note that when you quit \f3Elm\fP,
+ if you use \*qQ\*u instead of \*qq\*u, you will never be questioned,
+ regardless of how you have \f3ask\f1 set. See the \f3quit\f1 commands
+ in section 7, \f3Commands\f1, and the \f3alwaysdelete\f1,
+ \f3alwayskeep\f1, and \f3alwaysstore\f1 variables above for more
+ details. The default for \f3ask\f1 is ON.
+
+ .lp askcc+ 1.0i
+ Set OFF to allow sending mail without being presented the \*QCopies
+ to:\*U prompt for each message. This still allows you to explicitly
+ include addresses in the \*QCc:\*U list via either the header editor or
+ \*Q~c\*U in the builtin editor (see section 8, \f3Using Elm with
+ \*Qeditor = none\*U\f1). The default is ON.
+
+ .lp autocopy+ 1.0i
+ Set ON for Elm to automatically copy the text of each message
+ replied to into the edit buffer. Otherwise you will be prompted as to
+ whether you want the message included in your reply. See the
+ \f3prefix\f1 variable under \f3String Variables\f1 in section 2 for how
+ copied text is marked. The default for \f3autocopy\f1 is OFF.
+
+ .lp confirmappend 1.0i
+ Set ON to make Elm ask for permission
+ to append messages to the end of any file that already exists.
+ Whether the file is a mail folder in the user's mail directory
+ or an ordinary file makes no difference.
+ The default is OFF.
+
+ .lp confirmcreate 1.0i
+ Set ON to make Elm ask for permission before it creates
+ a new file to store messages in.
+ It makes no difference whether the new file would be a mail
+ folder in the user's mail directory or an ordinary file.
+ The default is OFF.
+
+ .lp confirmfiles 1.0i
+ This allows you to have some last resort control over Elm when a
+ message would be appended (by copy, save, or auto-cc) to an existing
+ file which is not a folder in your mail directory (see the
+ \f3maildir\f1 variable under \f3String Variables\f1 in section 2). Set ON
+ to make Elm ask for permission to append a message to the end of
+ an ordinary file, otherwise it silently adds the message to the end of
+ the specified file whether it is a folder or not. The default is OFF.
+
+ .lp confirmfolders 1.0i
+ Set ON to make Elm ask before creating new mail folders in your
+ mail directory (see the \f3maildir\f1 variable under \f3String
+ Variables\f1 in section 2), otherwise it silently creates new mail folders
+ whenever a copy of a message is going to be stored in a folder that
+ does not already exist. See the \f3copy\f1, \f3savename\f1, and
+ \f3forcename\f1 variables below for additional information about
+ copying messages. The default for \f3confirmfolders\f1 is OFF.
+
+ .lp copy+ 1.0i
+ Set ON to have silent copies made of all outgoing mail. Where the copy
+ of the message is saved is determined by the \f3maildir\f1 and
+ \f3sentmail\f1 string variables and the \f3savename\f1 and
+ \f3forcename\f1 boolean variables. Whether a copy is saved and to
+ which folder can also be set prior to sending a message \(em see the
+ \f3copy\f1 command of the mail command sub-menu in section 7,
+ \f3Commands\f1, for details. The default for \f3copy\f1 is OFF.
+
+ .lp forcename 1.0i
+ Set ON to force creation of folders for copies of outbound mail by the
+ recipient name. For complete details of how to enable automatic
+ copying of outbound messages, see the \f3copy\f1 and \f3savename\f1
+ boolean variables. The default is OFF.
+
+ .lp forms 1.0i
+ Set ON to enable the generation of \*Qforms\*U type messages. See the
+ \f2Elm Forms Mode Guide\f1 for further information about mail forms.
+
+ .lp keepempty 1.0i
+ The mail system has a habit of deleting folders when you've removed
+ everything from them. Set ON to preserve empty folders as zero-length
+ files. Note that this option does not apply to your incoming mailbox.
+ The default is OFF.
+
+ .lp keypad 1.0i
+ Set ON to indicate that you have an HP terminal and want the
+ \f2<NEXT>\f1, \f2<PREV>\f1, \f2<HOME>\f1 and \f2<SHIFT-HOME>\f1 keys enabled.
+ The default is OFF.
+
+ .lp menu* 1.0i
+ Set OFF to inhibit the menu display on all screen displays within
+ Elm. Note that this is overridden by the \*Q\-m\*U command line
+ option (see section 3, \f3Command Line Options\f1). The default is
+ ON.
+
+ .lp metoo 1.0i
+ Set ON to get a copy of mail you send to a mailing list you are on,
+ otherwise you do not get a copy of such messages. The default is OFF.
+
+ .lp movepage 1.0i
+ Set ON to enable commands that move through the folder by pages (see
+ the \*q+\*u, \*q\-\*u, \f2<right>\f1, and \f2<left>\f1 keys in section
+ 7, \f3Commands\f1) to move the current message pointer to the top of
+ that page of messages. Set OFF to not alter the current message
+ pointer location when moving through pages. The default is OFF.
+
+ .lp names* 1.0i
+ Set OFF to display the primary recipients' addresses on your screen
+ with their full names when you send a message. Set ON to display only
+ the full names. The default is ON.
+
+ .lp noheader 1.0i
+ Set ON to not include the headers of messages when copying a message
+ into the edit buffer for replying or forwarding (see the \f3autocopy\f1
+ variable above). The default is ON.
+
+ .lp pointnew 1.0i
+ Set ON to cause the current message pointer to point to the first new
+ message in your incoming mailbox when started, instead of at message #1
+ of the index. This has no effect for other folders since they are not
+ expected to have \*Qnew\*U mail. The default is ON.
+
+ .lp promptafter+ 1.0i
+ Set ON to display a command prompt rather than the index screen when
+ exiting from an external pager. This variable has no effect on the
+ builtin pager. See the \f3pager\f1 variable under \f3String Variables\f1
+ in section 2 to specify which pager to use to read messages.
+
+ If your external pager immediately exits when it reaches the end of the
+ message, you should set \f3promptafter\f1 ON so that the last screen of
+ the displayed message is not immediately replaced by the index screen.
+ If your external pager doesn't exit until you command it to, you have a
+ choice. If you usually want to see the index screen before issuing a
+ command, setting this variable OFF eliminates the extra keystroke
+ needed to return to the index screen. If you usually don't need to see
+ the index screen before issuing the next command, setting it ON allows
+ you to enter your next command without waiting for the index screen to
+ be redrawn. The default is ON.
+
+ .lp resolve 1.0i
+ Set ON to move the current message pointer to the next message on the
+ index when a mail message is \*Qdealt with\*U through deleting,
+ undeleting, saving, forwarding, etc. or set OFF to leave the current
+ message pointer unchanged. The default is ON.
+
+ .lp savename 1.0i
+ One of the problems with electronic mail systems is that one tends to
+ get very large, one-dimensional (flat) files that contain lots of
+ completely unrelated mail. Elm can use a more intelligent
+ algorithm: for incoming mail, when you \f3save\f1 or \f3copy\f1 it
+ (see section 7, \f3Commands\f1), the default folder is the login name
+ of the person who sent you the message (changed by pressing anything
+ other than \f2<return>\f1 of course). Similarly, when sending mail,
+ instead of just blindly saving it to the \f3sentmail\f1 folder,
+ Elm can save it to a folder that is the login name of the
+ recipient of the mail.\s-2\u2\d\s0
+ .fn
+ 2. When sending to a group, it's saved to the login name of the first
+ person in the list only.
+ .ef
+ Set \f3savename\f1 ON to enable this algorithm.
+
+ If \f3forcename\f1 is OFF (see above), the copy is saved to that folder
+ only if the folder already exists. In practice, this means that
+ important people that you communicate with (those that you tend to save
+ mail from) have folders that are actually \f2a recorded log of the
+ discussion in both directions\f1 and others (random mailings) are all
+ stuffed in the \f3sentmail\f1 folder for easy perusal and removal (see
+ the \f3sentmail\f1 variable under \f3String Variables\f1 in section
+ 2). If you always want to save copies of outgoing messages in separate
+ folders by recipient login name, you'll want to set \f3forcename\f1
+ ON.
+
+ The default for \f3savename\f1 is ON.
+
+ .lp sigdashes+ 1.0i
+ Set ON to tell Elm that you wish to follow the
+ convention of prefixing your signature with \*Q\f2newline dash dash
+ blank newline\f1\*U. This is placed in your message before your
+ signature file (see the \f3signature\f1, \f3localsignature\f1, and
+ \f3remotesignature\f1 variables under \f3String Variables\f1 in section 2).
+ If OFF, the signature file, if any, is placed at
+ the end of the message without any prefix. The default is ON.
+
+ .lp softkeys 1.0i
+ Set ON to tell Elm that you have an HP terminal with the
+ HP 2622 function key protocol and that you'd like to have the function
+ keys available while in the program. The default is OFF.
+
+ .lp titles 1.0i
+ Set ON to have the first line of a message titled with:
+ .sp
+ .ft CW
+ .zf
+ .ps 9
+ .nf
+ .tl ' Message \f2N/M\fP from \f2username\fP''\f2date\fP at \f2time\f1 '
+ .fi
+ .ps 10
+ .ft 1
+ .sp
+ where all the information is extracted from the message.
+ This is especially useful if you weed out all the headers of each
+ message with a large \f3weedout\f1 list (see the \f3weedout\f1 variable
+ under \f3String Variables\f1 in section 2).
+ The default is ON.
+
+ .lp usetite 1.0i
+ Set ON to enable use of the \f2termcap/terminfo\f1
+ \f3ti/te\f1 capabilities.
+ Many terminal emulators require it (not the least of which is the
+ OpenLook \f2cmdtool\f1).
+ Some terminal emulators clear the screen on \f3te\f1 (some \f2xterm\f1s).
+ Set OFF to disable use of \f3ti/te\f1.
+ Note that this is overridden by the \*Q\-t\*U command line option
+ (see section 3, \f3Command Line Options\f1). The default is ON.
+
+ .lp weed 1.0i
+ Set ON to have Elm \*Qweed out\*U certain headers from displayed
+ messages, that is, not display them. The \f3weedout\f1 variable under
+ \f3String Variables\f1 in section 2 allows you to custom define the set of
+ headers you would like to not have displayed while reading messages.
+ The default for the \f3weed\f1 variable is ON.
+ .in 0
+ .sp
+ .sp
+ For a better idea of how this all works, here's a sample \f2.elm/elmrc\f1
+ file. While looking through it, notice that you can have lots of
+ comments and blank lines for readability and that you can also use
+ \*Qshell variables\*U and the \*q~\*u (tilde) metacharacter for your home
+ directory, and they are expanded accordingly when read in by the
+ mailer. Note that this was automatically saved by the Elm
+ program on the fly from the options screen.
+ .sp
+ .ft CW
+ .zf
+ .nf
+ #
+ # .elm/elmrc \- options file for the ELM mail system
+ #
+ # Saved automatically by ELM 2.4 for Elm Development Group
+ #
+
+ # For yes/no settings with ?, ON means yes, OFF means no
+
+ # where to save calendar entries
+ calendar = ~/.Agenda
+
+ # what editor to use ("none" means simulate Berkeley Mail)
+ # \'%s\' can be used as the temporary filename for the outgoing message
+ editor = none
+
+ # the character to use in the builtin editor for entering commands
+ escape = ~
+
+ # the full user name for outbound mail
+ fullname = Elm Development Group
+
+ # where to save received messages to, default file is "=received"
+ receivedmail = $HOME/Mail/received
+
+ # where to save my mail to, default directory is "Mail"
+ maildir = /users/elmdev/Mail
+
+ #directory to hold my temporary files to avoid NFS cross mount problems
+ tmpdir = /users/elmdev/Mail/tmp
+
+ # program to use for displaying messages (\'builtin\' is recommended)
+ pager = builtin
+
+ # prefix sequence for indenting included message text in outgoing messages...
+ prefix = >_
+
+ # how to print a message (\'%s\' is the filename)
+ print = lpr \-Plw2 %s
+
+ # attribution string for replies (\'%s\' is the author of original message)
+ attribution = According to %s:
+
+ # where to save copies of outgoing mail to, default file is "=sent"
+ sentmail = /users/elmdev/Mail/mail.sent
+
+ # the shell to use for shell escapes
+ shell = /bin/csh
+
+ # local ".signature" file to append to appropriate messages...
+ localsignature = localsig
+
+ # remote ".signature" file to append to appropriate messages...
+ remotesignature = remotesig
+
+ # do we want dashes above signatures? (News 2.11 compatibility and convention)
+ sigdashes = ON
+
+ # how to sort folders, "Reverse Sent" by default
+ sortby = Reverse\-Received
+
+ # should the default be to delete messages we\'ve marked for deletion?
+ alwaysdelete = ON
+
+ # should the default be to store read messages to the "received" folder?
+ alwaysstore = ON
+
+ # should the default be to keep unread messages in the incoming mailbox?
+ alwayskeep = ON
+
+ # should we use the "\->" rather than the inverse video bar?
+ arrow = OFF
+
+ # should the message disposition questions be displayed (ON) or
+ # auto\-answered (OFF) with the default answers when we resync or change folders?
+ ask = ON
+
+ # would you like to be asked for Carbon\-Copies information each msg?
+ askcc = ON
+
+ # automatically copy message being replied to into buffer?
+ autocopy = OFF
+
+ # threshold for bouncing copies of remote uucp messages...
+ # zero = disable function.
+ bounceback = 0
+
+ # save a copy of all outbound messages?
+ copy = ON
+
+ # do we want to be able to mail out AT&T Mail Forms?
+ forms = OFF
+
+ # should we keep folders from which all messages are deleted?
+ keepempty = OFF
+
+ # we\'re running on an HP terminal and want HOME, PREV, NEXT, etc...
+ keypad = OFF
+
+ # should we display the three\-line \'mini\' menu?
+ menu = ON
+
+ # would you like a copy of a message you send to an alias you are on?
+ metoo = OFF
+
+ # when using the page commands (+ \- <NEXT> <PREV>) change the current
+ # message pointer...?
+ movepage = ON
+
+ # just show the names when expanding aliases?
+ names = ON
+
+ # when messages are copied into the outbound buffer, don\'t include headers?
+ noheader = ON
+
+ # start up by pointing to the first new message received, if possible?
+ pointnew = ON
+
+ # prompt for a command after the external pager exits?
+ promptafter = ON
+
+ # emulate the mailx message increment mode (only increment after something
+ # has been \'done\' to a message, either saved or deleted, as opposed to
+ # simply each time something is touched)?
+ resolve = ON
+
+ # save messages, incoming and outbound, by login name of sender/recipient?
+ savename = ON
+
+ # save outbound messages by login name of sender/recipient even if the
+ # associated folder doesn\'t already exist?
+ forcename = OFF
+
+ # are we running on an HP terminal and want HOME, PREV, NEXT, etc...?
+ # (this implies "keypad=ON" too)
+ softkeys = OFF
+
+ # set the main prompt timeout for resynching...
+ timeout = 60
+
+ # display message title when displaying pages of message?
+ titles = ON
+
+ # are we good at it? 0=beginner, 1=intermediate, 2+ = expert!
+ userlevel = 2
+
+ # enable the weedout list to be read?
+ weed = ON
+
+ # what headers I DON\'T want to see, ever.
+ weedout = "Path:" "Via:" "Sent:" "Date" "Status:" "Original" "Phase"
+ "Subject:" "Fruit" "Sun" "Lat" "Buzzword" "Return" "Posted"
+ "Telephone" "Postal\-Address" "Origin" "X\-Sent\-By\-Nmail\-V" "Resent"
+ "X\-Location" "Source" "Mood" "Neuron" "Libido" "To:" "X\-Mailer:"
+ "Full\-Name:" "X\-HPMAIL" "Cc:" "cc:" "Mmdf" "Network\-" "Really\-"
+ "Sender:" "Post" "Message\-" "Relay\-" "Article\-" "Lines:"
+ "Approved:" "Xref:" "Organization:" "*end\-of\-user\-headers*"
+
+ # alternative addresses that I could receive mail from (usually a
+ # forwarding mailbox) and don\'t want to have listed...
+ alternatives = dsidev!elmdev dsirel!elmdev elmdev@dsidev elmdev%dsidev
+
+ # list of delivery precedences allowed, or empty to allow anything
+ # precedence may be followed by optional ":priority" specification
+ precedences = special\-delivery:urgent air\-mail:urgent first\-class bulk junk
+
+ # name of Character Set used with MIME text/plain Content\-type
+ # US\-ASCII is default. Be aware that if you use a national charset
+ # elm probably needs metamail to display US\-ASCII. Elm tries to
+ # know if that charset could display US\-ASCII too, but the list
+ # of us\-ascii compatible charsets is not yet complete
+ charset=US\-ASCII
+
+ # name of Character Set which the display supports. This is independent
+ # of the above "charset".
+ displaycharset=US\-ASCII
+
+ # list of Character Sets, which are more or less a superset of US\-ASCII
+ # so we know that we can display messages with charset=US\-ASCII without
+ # help of metamail
+ compatcharsets = ISO\-8859\-1 ISO\-8859\-2 ISO\-8859\-3 ISO\-8859\-4 ISO\-8859\-5 ISO\-8859\-6 ISO\-8859\-7 ISO\-8859\-8 ISO\-8859\-9
+
+ # would you like to use termcap/terminfo ti/te entries?
+ usetite = ON
+
+ # Value by which message count is incremented while reading a new mailbox.
+ # Setting this value to a number larger than one will speed up the time it
+ # takes to read a large mailbox when using a slow terminal.
+ readmsginc = 5
+
+ # time in seconds which Elm will wait after displaying a transient message
+ # and before erasing it. Can be 0 or positive integer.
+ sleepmsg = 2
+ .fi
+ .br
+ .ne 5
+ .sp 2
+ .hn 1 Command Line Options
+
+ There are a number of command line options to the Elm
+ program, with only one that needs to be remembered: \*Q\-?\*Uor \*Q\-h\*U
+ for help.
+
+ The options are:
+
+ .lp \h'24p'\-a 66p
+ This allows you to have the \*Q\->\*U arrow pointer
+ rather than the inverse bar. This can also be set in
+ the \f2.elm/elmrc\f1
+ file with the boolean variable \f3arrow\f1.
+
+ .lp \h'24p'\-c 66p
+ Check only. This is useful for expanding aliases
+ without sending any mail. The invocation is similar to
+ invoking Elm in send-only mode:
+ .sp
+ .ft CW
+ .zf
+ .ti 1.5i
+ elm \-c\f2 list-of-aliases\f1
+
+ .lp "\h'24p'\-d \f2n\f1" 66p
+ Set debug level to \f2n\f1. Useful for debugging the Elm
+ program, this option will create a file in your home
+ directory called \f2ELM:debug.info\f1 containing
+ a running log of what is going on with
+ the program. Level \f2n\f1 can be 1 through 11,
+ where the higher numbers generate more output.
+ This option might be disabled by the the person who configured
+ Elm for your system.
+
+ .lp "\h'24p'\-f \f2folder\f1" 66p
+ Read the specified folder rather than the default incoming mailbox.
+ Note that you can use the same metacharacters (e.g. \*q=\*u) as when
+ you \f2change folders\f1 from within the program. You can also use the
+ same abbreviatory symbols (\*q!\*u, \*q>\*u and \*q<\*u),
+ but remember to \*Qsingle quote\*U them
+ in case they have special meaning in the shell you use.
+
+ .lp "\h'24p'\-h or \-?" 66p
+ Help message. Gives a short list of all these options and exits.
+
+ .lp "\h'24p'\-i \f2file\f1" 66p
+ Include a prepared file in the edit buffer before sending.
+ This facilitates using Elm with other programs
+ that interface with mail (like news readers, for example). There
+ is an example of how to set up the \f2rn\f1 news reading program to
+ use Elm in \f2The Elm Users Guide\f1. The file specified is
+ copied into the temporary file just before the signature file.
+
+ .lp \h'24p'\-k 66p
+ Keypad enable. This option lets the Elm program
+ know that you're on an HP terminal, and it can then interpret
+ the <PREV>, <NEXT> and <HOME>/<SHIFT>-<HOME> keys accordingly. If you
+ are not on an HP terminal, it is recommended that you do
+ NOT use this option. See also the \f3keypad\f1 variable,
+ described under \f3Boolean Variables\f1 in section 2.
+
+ .lp \h'24p'\-K 66p
+ Keypad + softkeys enable. The Elm mailer can
+ use the HP softkeys as an alternative form of
+ input. If you specify this option be sure that you're on
+ an HP terminal that can accept the standard 2622 terminal
+ escape sequences! See also the \f3softkeys\f1 variable,
+ described under \f3Boolean Variables\f1 in section 2.
+
+ .lp \h'24p'\-m 66p
+ Inhibit display of the 3-line menu when using the mailer. This,
+ of course, gives you three more message headers per page instead.
+ See also the \f3menu\f1 variable, described under \f3Boolean
+ Variables\f1 in section 2.
+
+ .lp "\h'24p'\-s \f2subject\f1" 66p
+ In send-only and batch mode, this is how to indicate the subject of the
+ resulting message. Please see the section on \f3Non-Interactive
+ Uses of Elm\f1 in \f2The Elm Users Guide\f1 for more information.
+
+ .lp \h'24p'\-t 66p
+ Disable use of the \f2termcap/terminfo\f1 \f3ti/te\f1 capabilities.
+ Many terminal emulators require it (not the least of which is the
+ OpenLook \f2cmdtool\f1).
+ Some terminal emulators clear the screen on \f3te\f1 (some \f2xterm\f1s).
+ See also the \f3usetite\f1 variable, described under \f3Boolean
+ Variables\f1 in section 2.
+
+ .lp \h'24p'\-z 66p
+ This causes Elm not to start if you don't
+ have any mail, but instead to display the message \*QYou have no
+ mail.\*U This emulates the behavior of programs
+ like \f2Berkeley Mail\f1.
+
+ .in 0
+ All the above options default to reasonable values, so there is
+ usually no need to use them. Furthermore, the most used options
+ are available through the \f2.elm/elmrc\f1 file, described in section 2.
+ .br
+ .ne 5
+ .sp
+ .hn 1 Multi-Media Capabilities of Elm
+
+ Elm optionally provides you with some Multi-Media features, which
+ are compliant
+ to the MIME (Multipurpose Internet Mail Extension) IETF draft.
+
+ If the support is compiled into Elm, on the receiving side
+ Elm accesses Metamail from Nathaniel Borenstein of
+ Bellcore. If you receive a MIME compliant message, Elm calls
+ Metamail automatically to display the message. Metamail
+ asks you if you want to display each part of the message
+ and uses the display programs available at your site. This
+ is controlled through the \f2mailcap\f1 file.
+
+ On the sending side, there is a simple mechanism integrated in Elm
+ to compose MIME compliant messages. If you have one or more key lines
+ of the form
+
+ .ft CW
+ .zf
+ .ti .5i
+ [\&include \f2file contenttype/subtype encoding\f1]
+ .ft 1
+
+ in the message body, at each
+ of these key lines, a file is included, and becomes a part
+ of the message. The text lines before, between and after the \f2include\f1
+ lines go into extra message parts of type \f2text\f1.
+
+ As an example, say you want to include the file \f2foo.gif\f1 into your message,
+ which is a GIF image, and you want to use \f2base64\f1 encoding, use the
+ following line:
+
+ .ft CW
+ .zf
+ .ti .5i
+ [\&include foo.gif image/gif base64]
+ .ft 1
+
+ Or you want to include a text file which contains plain ASCII:
+
+ .ft CW
+ .zf
+ .ti .5i
+ [\&include foo.txt text/plain]
+ .ft 1
+
+ The \f2encoding\f1 parameter is optional and the default is \f27bit\f1.
+
+ Refer to RFC1341 for valid \f2contenttype/subtype\f1 and \f2encoding\f1
+ parameter values.
+ .br
+ .ne 5
+ .sp
+ .hn 1 Special Outgoing Mail Processing
+
+ There are a few extra features that Elm offers on
+ outgoing mail that are worthy of mention.
+
+ The first, and probably the most exciting feature,\s-2\u3\d\s0 is the
+ .fn
+ 3. Unfortunately, at many non-US sites, it's quite probable that
+ you won't be able to use this feature since you won't have
+ the \f2crypt()\f1 library available due to licensing restrictions.
+ .ef
+ ability to send \f2encrypted\f1 mail! To do this is
+ extremely simple: you need merely to have two key lines
+
+ .ft CW
+ .zf
+ .ti .5i
+ [\&encode]
+ .ft 1
+ .br
+ and
+ .ft CW
+ .zf
+ .ti .5i
+ [\&clear]
+ .ft 1
+
+ in the message body.
+
+ .ne 15
+ Consider the following outgoing message:
+ .sp
+ .nf
+ .ps 9
+ .in .5i
+ .ft CW
+ .zf
+ Joe,
+ Remember that talk we had about Amy? Well, I talked to my manager
+ about it and he said...
+ uhh...better encrypt this...the usual \`key\'...
+ [\&encode]
+ He said that Amy was having family problems and that it had been
+ affecting her work.
+ Given this, I went and talked to her, and told her I was sorry for
+ getting angry. She said that she understood.
+ We\'re friends again!!
+ [\&clear]
+ Exciting stuff, eh?
+ \h'3i'Mike
+ .ps 10
+ .ft 1
+ .in 0
+ .fi
+ .sp
+ While this is obviously quite readable while being typed into
+ the editor, as soon as the message is confirmed as wanting
+ to be sent, the Elm mailer prompts with:
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .ps 9
+ .ti .5i
+ Enter encryption key: @
+ .ps 10
+ .ft 1
+ .fi
+ .sp
+ and accepts a key (a series of 8 or less characters) without
+ echoing them to the screen. After entry, it will ask for the
+ same key again to confirm it, then *\f2poof\f1* it will encrypt and
+ send the mail.
+
+ If you have the \f3copy\f1 option enabled, the program will save
+ your copy of the message encrypted too. (This is to ensure
+ the privacy and security of your mail archive, too.)
+
+ If the mailer doesn't ask for the encryption key, it's because
+ you don't have the \f2[\&encode]\f1 entered as the first 8 characters
+ of the line. It MUST be so for this to work!!
+
+ On the other end, a person receiving this mail (they must also
+ be using Elm to receive it, since this mailer has a
+ unique encryption program) will be reading the
+ message and then suddenly be prompted:
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .ps 9
+ .ti .5i
+ Enter decryption key: @
+ .ft 1
+ .ps 10
+ .fi
+ .sp
+ and will again be asked to re-enter it to confirm.
+ The program will then on-the-fly decrypt the mail
+ and display each line as it is decoded. The \f2[\&clear]\f1
+ line signifies that the block to encrypt is done.
+
+ Note that it is not possible currently to \f3pipe\f1 or \f3print\f1
+ encrypted mail.
+ .sp 2
+ The other feature on outgoing mail is the ability to
+ specify what section of the message you want to have
+ archived (assuming \f3copy\f1 is enabled) and what section
+ you don't. This is most useful for sending out source
+ file listings and so on.
+
+ To indicate the end of the section that should be
+ saved in the archive, you need merely to have the key line
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .ti .5i
+ [\&nosave]
+ .ft 1
+ or
+ .ft CW
+ .zf
+ .ti .5i
+ [\&no save]
+ .ft 1
+ .fi
+ .sp
+ appear by itself on a line. This key line is removed from
+ the outgoing mail, and indicates the last line of
+ the message to be saved.
+ Other than this, the saved mail is identical to the outgoing mail.
+ .br
+ .ne 5
+ .sp
+ .hn 1 Customized header lines
+
+ The mailer provides a facility for including customized
+ header lines in the messages you send.
+ If you have an \f2.elm/elmheaders\f1 file,
+ the mailer will include its contents
+ immediately after the regular headers of all outbound mail.
+ The mailer supports use of the backquote convention in this file
+ to run commands and substitute the commands' output for the backquoted
+ text.
+ Here's a typical \f2.elm/elmheaders\f1 file:
+ .sp
+ .ft CW
+ .zf
+ .nf
+ Organization: Hewlett-Packard Laboratories
+ Phone: (415)-555-1234
+ Operating-System: \`uname -srv\`
+ .fi
+ .ft 1
+ .sp
+ These lines will be inserted after all other header lines in the message.
+ .br
+ .ne 5
+ .sp
+ .hn 1 Commands
+ .sp
+
+ This section discusses each command in the Elm
+ program in more detail than above, including the
+ prompts the user can expect upon executing the
+ command, the meaning of different options, etc.
+
+ .lp \h'24p'? 66p
+ Help. This command used once puts you in the \f2help\f1
+ mode, where any key you press results in a one-line description
+ of the key. Pressing \*q?\*u again at this point produces a
+ summary listing each command available.
+ Pressing \*q.\*u (period) leaves the help mode and returns you to the
+ command level.
+
+ .lp \h'24p'<space> 66p
+ Display the current message.
+ <space> is useful for reading through a mail folder.
+ When issued from the index screen,
+ it displays the first screen of the current message.
+ When issued while in the builtin pager,
+ it pages through the message to the end.
+ When issued at the end of a message
+ (with either the builtin pager or an external pager),
+ it displays the first screen of the next message not marked for deletion.
+
+ .lp \h'24p'<return> 66p
+ Display the current message.
+ <return> behaves somewhat differently from <space>.
+ When issued while in the builtin pager,
+ it scrolls the current message forward one line,
+ and then when issued at the end of a message
+ (with either the builtin pager or an external pager),
+ it redisplays the first screen of the the \f2current\fP message.
+ The latter is useful in case you have issued a non-pager
+ command while in the builtin pager and want to restart the display
+ of the current message.
+
+ .lp \h'24p'! 66p
+ Shell. This allows you to send a command to the shell without
+ leaving the program. Note that it is possible that the person who
+ installed Elm on your system disabled this feature.
+
+ .lp \h'24p'| 66p
+ Pipe. This command allows you to pipe the current message
+ or the set of \f2tagged\f1 messages
+ through other filters as you desire. The shell used for
+ the entire command is either the one specified in
+ your \f2.elm/elmrc\f1 file, or the default shell (see the \f3shell\f1
+ variable under \f3String Variables\f1 in section 2).
+
+ .lp \h'24p'\/ 66p
+ Pattern match. This command, at the command level, allows the
+ user to search through all the \f2from\f1 and \f2subject\f1 lines of
+ the current folder starting at the current message and
+ continuing through the end. If the first character of the
+ pattern is a \*q/\*u, then Elm tries to match the
+ specified pattern against \f2any\f1 line in the folder. Again,
+ this works from the current message through the
+ end. Both searches are case insensitive.
+
+ .lp "\h'24p'\- or <left>" 66p
+ Display the previous page of the message index.
+
+ .lp "\h'24p'+ or <right>" 66p
+ Display the next page of the message index.
+
+ .lp \h'24p'<number><return> 66p
+ Specify new current message. When you type in any digit, Elm
+ prompts \*QSet current to : \f2n\f1\*U, where \f2n\f1 is
+ the digit entered. Continue entering the full number
+ and terminate with <return>. Note that changing the
+ current message to a message not on the
+ current page of headers results in a new page
+ being displayed.
+
+ .lp \h'24p'< 66p
+ Scan message for calendar entries. A rather novel feature of
+ the Elm mailer is the ability to automatically incorporate
+ calendar/agenda information from a mail message into the user's
+ calendar file. This is done quite simply; any line that has
+ the pattern
+
+ .ti +.5i
+ \-> \f2calendar entry\f1
+
+ is automatically added to the user's \f3calendar\f1 file
+ when the \*q<\*u command is used
+ (see the \f3calendar\f1 variable under \f3String Variables\f1 in section 2).
+ .sp
+ For example, let's say we had a message with the text:
+
+ .ft CW
+ .zf
+ .ps 9
+ .ti +.5i
+ Regardless of that meeting, here\'s the seminar stuff:
+ .br
+ .ti +.5i
+ \-> 8/03 3:00pm: AI Seminar with Ira Goldstein of HP Labs
+ .ft 1
+ .ps 10
+
+ then using the \*q<\*u command would add the line:
+
+ .ft CW
+ .zf
+ .ps 9
+ .ti +.5i
+ 8/03 3:00pm: AI Seminar with Ira Goldstein of HP Labs
+ .ps 10
+ .ft 1
+
+ to the user's \f3calendar\f1 file.
+
+ .lp \h'24p'a 66p
+ Alias. The alias system is a way by which more complex mail addresses
+ can be shortened for the mail user. For example:
+ .sp
+ .nf
+ .ps 9
+ .ft CW
+ .zf
+ .ti +.5i
+ joe, bleu = Joe Bleu = j...@hpfcla.SSO.HP.COM
+ .ft 1
+ .ps 10
+ .fi
+ .sp
+ which allows mail to \*Qjoe\*U or \*Qbleu\*U with the system expanding
+ the address properly. Obviously, this saves having to remember
+ complex addresses. A more detailed discussion can
+ be found in either the section entitled \f2The Alias System\f1 in
+ this document or \f2The Elm Alias System Users Guide\f1.
+
+ .lp \h'24p'b 66p
+ Bounce mail. This \*Qremails\*U mail to someone else in such a
+ way as to make the return address the original sender rather
+ than you. The \f3forward\f1 command is similar, but it makes
+ the return address \f2you\f1 rather than the original sender.
+
+ .lp \h'24p'C 66p
+ Copy to folder. This command copies the current message or set of
+ tagged messages to
+ a folder. If there is anything in the folder currently the
+ message is appended to the end, otherwise the folder is created
+ containing only the newly copied messages. The prompt for this command
+ is \*QCopy to folder: \*U. A response of <return> cancels the command
+ and returns the user to the command prompt. The usual filename
+ metacharacters are available, too. That is, this command expands filenames
+ with \*q~\*u (tilde) to your home directory and \*q=\*u to your
+ \f3maildir\f1 directory, if defined. This command also allows you to
+ use \*q>\*u for your \f3receivedmail\f1 folder,
+ \*q<\*u for your \f3sentmail\f1 folder,
+ \*q.\*u for the last folder you saved or copied a message to
+ and \*Q@alias\*U for the default folder for \*Qalias\*U.
+ If you use a shell wildcard in the file or folder name, you are
+ given a list of all files or folders which match the wildcard.
+ Elm uses your shell to find the names, so whatever wildcards you are
+ used to will work.
+ Finally, you can also enter \*q?\*u at the prompt
+ to get detailed help.
+
+ .lp \h'24p'c 66p
+ Change folder. Specifying this command allows the user to change
+ the folder that is currently being read. This is intended
+ for perusal and reply to previously archived messages.
+ The prompt is \*QName of new folder: \*U and entering <return>
+ cancels the operation, while entering a filename causes the program
+ to read that file as the new folder,
+ if possible. This command expands filenames
+ with \*q~\*u (tilde) to your home directory and \*q=\*u to your
+ \f3maildir\f1 directory, if defined. This command also allows you to
+ use \*q!\*u as an abbreviation for you incoming mailbox,
+ \*q>\*u for your \f3receivedmail\f1 folder,
+ \*q<\*u for your \f3sentmail\f1 folder,
+ \*q.\*u for the last folder you saved or copied a message to
+ and \*Q@alias\*U for the default folder for \*Qalias\*U.
+ If you use a shell wildcard in the file or folder name, you are
+ given a list of all files or folders which match the wildcard.
+ Elm uses your shell to find the names, so whatever wildcards you are
+ used to will work.
+ Finally, you can also enter \*q?\*u at the prompt
+ to get detailed help.
+
+ .lp "\h'24p'd, u" 66p
+ Delete and undelete. Neither of these two commands have any prompts
+ and indicate their action by either adding a \*qD\*u to the current
+ message index entry (indicating deletion pending) or removing
+ the \*qD\*u (indicating that the message isn't set for deletion).
+
+ .lp \h'24p'<control>-D 66p
+ This command allows you to easily mark for deletion all messages
+ that have a specific pattern. After \f3<control>-D\f1 is pressed,
+ Elm prompts for the string to match in
+ either the \f2from\f1 or \f2subject\f1 lines of
+ the messages.
+
+ .lp \h'24p'<control>-U 66p
+ This is the direct opposite command to the \f3<control>-D\f1 command
+ \(em all messages
+ that match the specified pattern have any mark for deletion
+ removed by this command.
+
+ .lp \h'24p'e 66p
+ Edit mailbox. This allows you to modify the current mail file at
+ a single keystroke. This is mostly useful for editing messages
+ before saving them. Modifying headers should be done with extreme
+ caution, as they contain routing information and other vital stuff
+ for full functionality. This command may be disabled by whoever
+ configured your Elm installation.
+
+ .lp \h'24p'f 66p
+ Forward. Allows the user to forward the current message to another user.
+ This copies the message into the edit buffer and allows the user to add
+ their own message too. The prompt is \*QForward to:\*U and will expand an alias
+ if entered. See also \f3bounce\f1, above.
+
+ Elm will ask you if you want to edit the message before sending it. If you
+ answer \f2yes\f1, Elm will prepend your prefix string to each line of the
+ message, and let you edit the result. If you do not want the prefix string
+ on each line, answer \f2no\f1; you will have another chance to edit the message
+ when you get to the \*Qsend\*U menu. See the \f3prefix\f1 variable
+ under \f3String Variables\f1 in section 2.
+
+ .lp \h'24p'g 66p
+ Group reply. Identical to \f3reply\f1 below, except that the
+ response is mailed to \f2all recipients\f1 of the original
+ message except yourself. See the \f3alternatives\f1
+ variable under \f3String Variables\f1 in section 2.
+
+ .lp \h'24p'h 66p
+ Display the current message with all headers intact.
+ When you display a message with other commands,
+ certain header lines are formatted and others discarded according
+ to the \f3weedlist\fP variable, described under \f3String
+ Variables\f1 in section 2.
+
+ .lp \h'24p'i 66p
+ Return to the index screen,
+ when issued in the builtin pager or at the end of a message with
+ either the builtin pager or an external pager.
+
+ .lp "\h'24p'j or <down>, k or <up>" 66p
+ These four keys work similarly to what they would do in \f2vi\f1 or
+ any of the other (precious few) screen oriented
+ programs. The \f3j\f1 and \f3<down>\f1 keys move
+ the current message pointer down to the next message skipping
+ over any marked deleted (going to
+ the next page if necessary) and the \f3k\f1 and \f3<up>\f1 keys move
+ the current
+ message pointer back to the previous message skipping
+ over any marked deleted (also changing pages if necessary).
+
+ .lp "\h'24p'J, K" 66p
+ These two keys work similarly to their lower case counterparts,
+ except that they don't skip over deleted messages.
+
+ .lp \h'24p'l 66p
+ Limit. This feature allows you to specify a subset of the existing
+ messages to be dealt with. For example, let's say we had a folder with
+ four hundred messages in it, with only four or five different subjects. We
+ could then limit what we're dealing with by using the \f3limit\f1
+ command. Pressing \f3l\f1 would result in the prompt:
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .ti +.5i
+ Criteria:
+ .ft 1
+ .fi
+ .sp
+ to which we could answer
+ \*Qsubject \f2string\f1\*U,
+ \*Qfrom \f2string\f1\*U or
+ \*Qto \f2string\f1\*U. In our example, we could use
+ \*Qsubject programming\*U
+ as a criterion for selection. Once we've limited our selections,
+ the screen is rewritten with just the selected messages
+ and the top line changes to have a message like:
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .ps 9
+ .tl ''\0\0\0\0\0Folder is "=elm" with 92 shown out of 124 [Elm 2.4]''
+ .ps 10
+ .ft 1
+ .fi
+ .sp
+ We can further limit selections by using the \f3limit\f1 option
+ repeatedly to enter further criteria.
+
+ To clear all the criteria and get back to the \*Qregular\*U display, simply
+ enter \*Qall\*U as the limiting criteria. It should be noted that the
+ selection based on \*Qto\*U isn't fully implemented for this version, so
+ it is recommended that users stay with \*Qsubject\*U and \*Qfrom\*U as the
+ basis for their criteria.
+
+ .lp \h'24p'm 66p
+ Mail. Send mail to a specified user. The prompt associated
+ with this command is \*QSend mail to: \*U. Entering an alias name results
+ in the full address being rewritten in parenthesis immediately. This
+ prompt is followed by \*QSubject: \*U which allows the user to title their
+ note. The final prompt is \*QCopies to: \*U, which allows other people
+ specified to receive \*Qcarbon copies\*U of the message, but see the
+ \f3askcc\f1 variable under \f3Boolean Variables\f1 in section 2. Upon
+ entering all three items the
+ editor is invoked and the message can be composed.
+
+ .lp \h'24p'n 66p
+ Next message that is not marked for deletion.
+ Useful for displaying successive messages in a folder.
+ When issued from the index screen, it displays the current message,
+ and when issued while in the builtin pager or at the end of a message
+ (with either the builtin pager or an external pager),
+ it displays the first screen of the next message not marked for deletion.
+
+ .lp \h'24p'o 66p
+ Options. This full-screen display allows you to alter the settings
+ of a number of parameters, including the current sorting method,
+ the method of printing files, the calendar file, the save file, and
+ so on. It's self-documenting (where have you heard \f2that\f1
+ before?) so isn't explained in too much detail here. See the
+ \f3configoptions\f1 variable under \f3String Variables\f1 in section 2.
+
+ .lp \h'24p'p 66p
+ Print. This allows you to print out the current
+ message or the tagged messages to a previously defined printer. See
+ the \f3print\f1 variable under \f3String Variables\f1 in section 2.
+
+ .lp \h'24p'q 66p
+ Quit. If you in the pager, you are returned to the index screen. If you are
+ at the index screen, Elm quits altogether. However, if you have the
+ \f3ask\fP variable set ON, Elm first prompts you for the disposition of the
+ messages in the current folder. If any messages are marked for deletion, it
+ asks if you want them deleted. If the current folder is your incoming
+ mailbox, you are also asked if read messages should be stored in your
+ \f3receivedmail\f1 folder,
+ and if unread messages should be kept in the incoming mailbox.
+ The default answers to these questions are set by the \f2.elm/elmrc\f1
+ variables \f3alwaysdelete\f1, \f3alwaysstore\f1, and \f3alwayskeep\f1
+ (see \f3Boolean Variables\f1 in section 2).
+ However, if you elect to not store your read messages (i.e. keep them)
+ it is presumed you want to keep your unread messages, too.
+
+ .lp \h'24p'Q 66p
+ Quick quit. This behaves similar to the \f3quit\f1 command except that
+ you are never prompted for answers to the message disposition questions.
+ Elm disposes of messages according to the values you
+ have set for \f3alwaysdelete\f1, \f3alwaysstore\f1, and \f3alwayskeep\f1
+ in your \f2.elm/elmrc\f1 file (see \f3Boolean Variables\f1 in section 2).
+
+ .lp \h'24p'r 66p
+ Reply. Reply to the sender of the current message. If
+ the \f3autocopy\f1 variable is set to OFF in your \f2.elm/elmrc\f1 file,
+ Elm prompts \*QCopy message? (y/n)\*U, to which you can specify
+ whether or not a copy of the source message is to be copied into the edit
+ buffer. If copied in, all lines from the message are
+ prepended with the \f3prefix\f1 character sequence specified in
+ your \f2.elm/elmrc\f1 file (see \f3String Variables\f1 in section 2).
+
+ .lp \h'24p's 66p
+ Save to folder. This command is like the \f3copy\f1 command, except
+ that the saved messages are marked for deletion and, if you are
+ saving just the current message, the current message pointer is
+ incremented afterwards (see the \f3resolve\f1 variable under \f3Boolean
+ Variables\f1 in section 2). This command expands folder names
+ with \*q~\*u (tilde) to your home directory and \*q=\*u to your
+ \f3maildir\f1 directory, if defined. This command also allows you to
+ use \*q>\*u for your \f3receivedmail\f1 folder,
+ \*q<\*u for your \f3sentmail\f1 folder (see \f3String Variables\f1 in
+ section 2),
+ \*q.\*u (period) for the last folder you saved or copied a message to
+ and \*Q@alias\*U for the default folder for \*Qalias\*U.
+
+ .lp \h'24p't 66p
+ Tag.
+ .fn
+ 4. Currently only \f3copy\f1, \f3pipe\f1, \f3print\f1, and \f3save\f1
+ support this.
+ .ef
+ Tag the current message for a later operation.\s-2\u4\d\s0
+
+ .lp \h'24p'T 66p
+ Tag and move to next undeleted message.
+ This command is like the `Tag' command but also increments the current message
+ pointer to the next undeleted message.
+
+ .lp \h'24p'<control>-T 66p
+ Tag all messages containing the specified pattern. Since \f2tagging\f1
+ messages can occur on screens other than the one being viewed,
+ Elm first checks to see if any messages are currently
+ \f2tagged\f1 and ask you if you'd like to remove those tags. After
+ that, it will, similar to the \f3<control>-D\f1 command, prompt for
+ a pattern to match and then mark all messages that contain
+ the (case insensitive) pattern in either the \f2from\f1 or \f2subject\f1
+ lines.
+
+ .lp \h'24p'x 66p
+ Exit. This leaves Elm and discards any changes to the mailbox.
+ If changes are pending (such as messages marked for deletion) you are
+ asked to confirm discarding the changes. If confirmed, no
+ messages are deleted and the status of all messages is unchanged. That is,
+ any messages that were new will remain new instead of being noted as old,
+ and any messages that were read for the first time
+ will be again noted as unread.
+
+ .lp \h'24p'X 66p
+ Exit immediately. This leaves Elm in the quickest possible manner
+ without even prompting about discarding the changes to the mailbox.
+ No messages are deleted and the status of all messages is unchanged. That is,
+ any messages that were new will remain new instead of being noted as old,
+ and any messages that were read for the first time
+ will be again noted as unread.
+
+ .in 0
+ .sp
+ When you are about to send a message with the \f3forward\f1, \f3mail\f1,
+ or \f3reply\f1 commands (see above), a small menu of the following
+ options appears:
+
+ .lp \h'24p'c 66p
+ Specify the folder for saving a copy of the message.
+ This allows you to override the
+ \f3copy\f1, \f3forcename\f1 and \f3savename\f1 variables
+ from your \f2.elm/elmrc\f1 file (see \f3Boolean Variables\f1 in
+ section 2). It prompts you for the name
+ of the folder where a copy of the outgoing message is to be saved. The
+ default displayed is taken from those three \f2.elm/elmrc\f1
+ options and can be changed. This command also allows you to
+ use \*q>\*u for your \f3receivedmail\f1 folder
+ and \*q<\*u for your \f3sentmail\f1 folder (see \f3String Variables\f1
+ in section 2),
+ and \*q=?\*u to mean \*Qconditionally save by name\*U
+ and \*q=\*u to mean \*Qunconditionally save by name\*U.
+ Since you could next enter
+ the \f3edit headers\f1 command and change the recipients
+ of your message, the name of the folder under the
+ two \*Qsave by name\*U options is not established until you enter the \f3send\f1
+ command.
+ If you use a shell wildcard in the file or folder name, you are
+ given a list of all files or folders which match the wildcard.
+ Elm uses your shell to find the names, so whatever wildcards you are
+ used to will work.
+ You can also enter \*q?\*u at the prompt
+ to get help about saving.
+
+ .lp \h'24p'e 66p
+ Edit message (or form). Entering this command allows you to edit
+ the text of your message or form.
+
+ .lp \h'24p'f 66p
+ Forget. This gets you out of sending a message you started. If you are
+ in send-only mode, the message is saved to the file \f2Canceled.mail\f1
+ in your home directory. Otherwise
+ it can be restored at the next \f3forward\f1, \f3mail\f1,
+ or \f3reply\f1 command during the current session of Elm After
+ issuing one of those commands you will be prompted with \*QRecall last
+ kept message?\*U
+
+ .lp \h'24p'h 66p
+ Edit headers. This puts you into the \f2header editing mode\f1, whereby
+ you can edit any of the various headers of your message. Like
+ the options screen, it's self-documenting, so it isn't explained in too much
+ detail here.
+
+ .lp \h'24p'i 66p
+ Run \f2ispell\f1 (or some other configured spelling correction program).
+ The outgoing message is run through an interactive spelling correction program
+ if one is available. The default spelling program is the GNU \f2ispell\f1 program
+ unless changed by the person who installed Elm on your system.
+
+ .lp \h'24p'm 66p
+ Make form. This converts the message you have edited into a form. See
+ the \f3forms\f1 variable under \f3Boolean Variables\f1 in section 2 and
+ \f2The Elm Forms Mode Guide\f1 for more details.
+
+ .lp \h'24p's 66p
+ Send. This sends the message as is without any further ado.
+ .in 0
+ .br
+ .ne 5
+ .sp
+ .hn 1 "Using Elm with \*Qeditor = none\*U"
+ .sp
+ The Elm program also supports a builtin editor for simple message
+ composition that is very (very) similar to the simple line
+ editor available from the \f2Berkeley Mail\f1 system.
+
+ To access it, you need merely to specify \*Q\f3editor=none\f1\*U in
+ your \f2.elm/elmrc\f1 file.
+ With that, any messages to be composed
+ that don't already have text in the buffer (e.g. no reply with
+ the text included, etc.), will use this editor.
+ .sp
+ From the builtin editor, the following options are available for use.
+ Each command here is prefixed with a \*q~\*u (tilde).
+ You can specify a different \*Qescape\*U character in your \f2.elm/elmrc\f1 file,
+ if you desire (see the \f3escape\f1 variable under \f3String
+ Variables\f1 in section 2).
+ .sp
+
+ .lp \h'16p'~? .5i
+ Print a brief help menu.
+
+ .lp \h'16p'~b .5i
+ Change the Blind-Carbon-Copy list.
+
+ .lp \h'16p'~c .5i
+ Change the Carbon-Copy list.
+
+ .lp \h'16p'~e .5i
+ Invoke the \f3easyeditor\f1 editor on the message, if possible
+ (see the \f3easyeditor\f1 variable under \f3String Variables\f1 in
+ section 2).
+
+ .lp \h'16p'~f .5i
+ Add the specified message or current message.
+
+ .lp \h'16p'~h .5i
+ Change all the available headers (To, Cc, Bcc, and Subject).
+
+ .lp \h'16p'~m .5i
+ Same as \f3~f\f1, but with the current \f3prefix\f1 (see the
+ \f3prefix\f1 variable under \f3String Variables\f1 in section 2).
+
+ .lp \h'16p'~o .5i
+ Invoke a user specified editor on the message.
+
+ .lp \h'16p'~p .5i
+ Print out, on the screen, the message as typed in so far.
+
+ .lp \h'16p'~r .5i
+ Include (read in) the contents of the specified file.
+
+ .lp \h'16p'~s .5i
+ Change the Subject line.
+
+ .lp \h'16p'~t .5i
+ Change the To list.
+
+ .lp \h'16p'~v .5i
+ Invoke the \f2vi\f1 visual editor on the message.
+
+ .lp \h'16p'~< .5i
+ Execute the specified
+ .ux
+ command, entering the output
+ of the command into the editor buffer upon completion.
+ For example, \*Q~< who\*U includes the output of
+ the \f2who\f1 command in your message.
+
+ .lp \h'16p'~! .5i
+ Execute a
+ .ux
+ command if one is given (as in \*Q~!ls\*U) or
+ give the user a shell, either from the \f3shell\f1 variable setting in
+ the \f2.elm/elmrc\f1 file or the default (see the \f3shell\f1 variable
+ under \f3String Variables\f1 in section 2).
+
+ .lp \h'16p'~~ .5i
+ Add a line prefixed by a single \*q~\*u character.
+ .in 0
+ .sp
+ A useful note is that the \f3~f\f1 and \f3~m\f1 commands invoke the \f2readmsg\f1
+ command, so you can pass parameters along too. For example, if we
+ wanted to include a message from Joe, without any headers, but with each
+ line prefixed, we could use:
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .ti .5i
+ \&~m \-n Joe
+ .ft 1
+ .fi
+ .sp
+ to accomplish the task.
+
+ To learn more about how they work, try 'em!
+ .br
+ .ne 5
+ .sp
+ .hn 1 The Alias System
+ .sp
+ As mentioned previously, there exists in the Elm
+ system a set of aliases that associate
+ an arbitrary word (such as a persons name) to a complex address or group.
+ The advantages are readily apparent; rather than
+ remembering an address of the form:
+ .sp
+ .nf
+ .ps 9
+ .ft CW
+ .zf
+ .ti .5i
+ host1!host2! ... !hostN!user
+ .ft 1
+ .ps 10
+ .fi
+ .sp
+ the user merely has to remember a single word.
+
+ Two alias tables are available for a each
+ user within Elm,
+ namely the system alias file and the user's alias file. The
+ system alias file is created and maintained (by the system administrator)
+ by editing the file name defined for \f2SYSTEM_ALIASES\f1 in the
+ \f2sysdefs.h\f1 file (see \f2The Elm Configuration Guide\f1) and as described
+ in the documentation with the \f2newalias\f1 command,
+ then running the \f2newalias\f1 program.
+
+ An individual user can also have an alias file which works
+ in conjunction with the system aliases. To do this, one
+ merely needs to enter the alias menu system and create aliases with
+ the \f3a\f1 (\f3alias current message\f1) or \f3n\f1
+ (\f3make new alias\f1) commands.
+ Alternatively, the user can peruse the documentation for the \f2newalias\f1
+ command and create a file as indicated therein. After
+ executing the program, the aliases are available
+ for use from within Elm.
+ .sp
+ Please refer to \f2The Elm Alias Users Guide\f1 for complete details.
+ .sp 2
+ Within Elm,
+ however, the alias system acts as an entirely different program, with
+ its own display, own commands, and own mini-menu. The aliases are
+ presented in a
+ list similar to the index screen with the following menu:
+ .sp
+ .sd
+ .nf
+ .ps 9
+ .ft CW
+ .zf
+ .ce 3
+ Alias commands: ?=help, <n>=set current to n, /=search pattern
+ a)lias current message, c)hange, d)elete, e)dit aliases.text, f)ully expand,
+ l)imit display, m)ail, n)ew alias, r)eturn, t)ag, u)ndelete, or e(x)it
+ .sp
+ Alias: @
+ .sp
+ .ps 10
+ .ft 1
+ .ed
+ .fi
+
+ The commands are:
+
+ .lp \h'16p'? .5i
+ Help. This command used once puts you in the \f2help\f1
+ mode, where any key you press will result in a one-line description
+ of the key. Pressing \*q?\*u again at this point produces a
+ summary listing each command available.
+ Pressing \*q.\*u (period) leaves the help mode and returns you to the
+ alias command prompt.
+
+ .lp "\h'16p'<space> or <return> or v" .5i
+ Display the current alias address. The alias address is displayed below
+ the alias menu. This command allows you to verify the address for a
+ person or the contents of a group alias.
+
+ .lp \h'16p'$ .5i
+ Resynchronize the alias text file (\f2$HOME/.elm/aliases.text\f1) and
+ alias database by rebuilding the database from the text file by running
+ \f2newalias\f1. Aliases marked for deletion are removed, tagged aliases
+ are untagged, and new and changed aliases are recognized. The alias
+ screen is updated to reflect these changes.
+
+ .lp \h'16p'\/ .5i
+ Pattern match. This command allows the
+ user to search through all the \f2alias\f1 and \f2username\f1
+ entries in the alias list
+ starting at the current alias and
+ continuing through the end.
+ If the first character of the
+ pattern is a \*q/\*u, then Elm also includes the \f2comment\f1
+ and the fully expanded \f2address\f1 fields in the search.
+ The search is case insensitive. This allows the user to find a
+ specific alias in the situation where there are a large number of
+ aliases.
+
+ .lp \h'16p'a .5i
+ Alias current message.
+ This allows the user to create an alias that has the
+ return address of the current message as the address field of
+ the alias. It prompts for a unique alias name. If the alias
+ name is not unique, you will be asked if you wish to replace
+ the existing alias. For further
+ information, please see \f2The Elm Alias System Users Guide\f1.
+
+ .lp \h'16p'c .5i
+ Change current alias. This will prompt for changes to the current
+ names and address. If other aliases are tagged you will be asked if you
+ want to create a group alias from the tagged aliases. The original
+ alias is replaced with the new information in
+ your individual alias file (\f2$HOME/.elm/aliases.text\f1) and
+ then added to the database (at the next alias resync). Aliases
+ that have been changed are marked with an \*qN\*u (for new) until
+ the database is updated.
+
+ .lp "\h'16p'd, u" .5i
+ Delete or undelete an alias.
+ This allows the user to mark an alias for deletion in the same fashion
+ as on the index screen. The deletions are not
+ actually made until the user returns to the main menu with the \f3r\f1,
+ \f3q\f1, or \f3i\f1 commands or resyncs
+ the display with the \f3$\f1 command. Deletions on system aliases are not
+ allowed. These commands (plus the \f3<control>-D\f1
+ and \f3<control>-U\f1 versions) behave identically to their index screen
+ counterparts (see section 7, \f3Commands\f1).
+
+ .lp \h'16p'e .5i
+ Edit the \f2.elm/aliases.text\f1 file. The user alias file is edited
+ using the editor defined in the \f3editor\f1 variable in your
+ \f2\&.elm/elmrc\f1 file (see \f3String Variables\f1 in section 2).
+ \f2newalias\f1 is run after the edit.
+
+ .lp \h'16p'f .5i
+ Display fully expanded alias. The currently selected
+ alias is fully expanded and displayed to the user. This is most useful when
+ working with group aliases.
+
+ .lp \h'16p'l .5i
+ Limit the display. You can limit the display by alias type (person/group
+ or user/system) or by search pattern on name or alias. Otherwise, this
+ works exactly like the limit command on the index screen.
+
+ .lp \h'16p'm .5i
+ Send mail to the current alias. The user is prompted to compose a new
+ mail message to be sent to the
+ person or group specified by the selected alias. If aliases are
+ tagged the message is mailed to the person(s) and/or group(s)
+ specified by the tagged aliases. Tags are cleared after mailing the
+ message.
+
+ .lp \h'16p'n .5i
+ Make a new user alias. This prompts for a unique alias name and
+ then for an address. If the alias
+ name is not unique, you are asked if you wish to replace
+ the existing alias. If aliases are tagged you are asked if you
+ want to create a group alias from the tagged aliases.
+ The information provided is added
+ to your individual alias file (\f2$HOME/.elm/aliases.text\f1) and
+ then added to the database at the next alias resync.
+
+ .lp "\h'16p'r or q or i" .5i
+ Return. Return to the index screen of the Elm program. Any pending
+ deletions are processed and newalias is run to update the database. New
+ additions are handled at this time as well.
+
+ .lp "\h'16p'R or Q or I" .5i
+ Quick return. This behaves like the \*qr\*u command except that you are never
+ prompted for answers to alias disposition questions.
+ Elm disposes of aliases according to the value
+ set for the \f3alwaysdelete\f1 variable
+ in your \f2.elm/elmrc\f1 file (see \f3Boolean Variables\f1 in
+ section 2).
+
+ .lp \h'16p't .5i
+ Tag.
+ Tag the current alias for a later operation.\s-2\u5\d\s0
+ .fn
+ 5. Currently only \f3mail\f1, \f3change\f1, and \f2n3w alias\f1 support this.
+ .ef
+ This command (plus the \f3<control>-T\f1
+ version) behaves identically to its index screen
+ counterpart (see section 7, \f3Commands\f1).
+
+ .lp \h'16p'x .5i
+ Exit alias menu. Exits the alias menu without processing any
+ deletions. Aliases marked for deletion are unmarked and
+ \f2newalias\f1 is not run, even if alias additions have been made.
+ .in 0
+ .sp
+ Additionally, the movement keys (\*qj\*u, \*qk\*u, \*q+\*u, \*q\-\*u,
+ etc.) work in the same fashion as on the index screen (see section 7,
+ \f3Commands\f1).
+ .br
+ .ne 5
+ .sp
+ .hn 1 Elm and Signals
+
+ Elm can handle several standard
+ .ux
+ \f2signals\fR to do
+ some special processing.
+ Signals are interrupt messages sent from one program to
+ another. No detailed messages are sent, but a properly configured
+ program (such as Elm) can watch for and handle these signals.
+
+ In particular, Elm watches for the following signals
+ and takes these actions:
+ .lp ALRM .5i
+ This is the alarm clock signal or time warning.
+ Elm uses this to wake itself up periodically and check for
+ new mail.
+ .lp HUP .5i
+ This is the hangup notice.
+ It means that the terminal/modem/whatever which you have been using
+ with Elm has become detached from the system where Elm
+ was running.
+ When Elm gets this signal, it aborts all the pending operations
+ and exits, leaving your mailbox unchanged.
+ .lp USR1 .5i
+ This is the first user-defined signal.
+ When Elm gets this signal, it receives any pending mail,
+ performs all the pending operations (deletes), and exits
+ leaving all unread mail marked as new.
+ This is the same as giving both the \f3$\f1 and \f3X\f1 commands.
+ .lp USR2 .5i
+ This is the second user-defined signal.
+ When Elm gets this signal, it receives any pending mail,
+ performs all the pending operations (deletes), and exits,
+ leaving all unread mail marked as old.
+ This is the same as giving both the \f3$\f1 and \f3Q\f1 commands.
+ .in 0
+ .sp
+ You would only use these signals yourself under the most unusual
+ circumstances. For example, suppose you were using \f3Elm\fR
+ to read mail on \f2host_1\fR. You have many messages, most of
+ which have been read and filed (and therefore deleted), or simply
+ deleted. You have not yet resynchronized your mailbox (\f3$\f1
+ command). Now you go to lunch.
+ On your return, you're stopped at the door and told to take care
+ of an emergency. You go to another part of the building, and want
+ to read your mail to see what the emergency is \(em but you can't,
+ because Elm is still running at your desk.
+
+ What you really want is one of the scenarios given in the
+ description of \f2HUP\f1, \f2USR1\f1 or \f2USR2\f1.
+ Use your local \f2ps\f1 command to find out what the \f2process number\f1
+ of your Elm session is. Then give the command
+ .sp
+ .nf
+ .ft CW
+ .zf
+ .ti .5i
+ kill \-\f2XXX process_number\f1
+ .fi
+ .sp
+ where \f2XXX\f1 is either \*QHUP\*U, \*QUSR1\*U or \*QUSR2\*U and
+ \f2process_number\f1 is the process number for your remote Elm session.
+ Your remote session will terminate with the actions noted above.
+ .br
+ .ne 5
+ .sp
+ .hn 1 Expert Mail Users and Debugging the Mailer
+
+ There are some additional facilities available in the Elm
+ mailer for those people who are knowledgeable about
+ mail protocols, or trying to debug/track down a problem.
+
+ The \f3h\f1 (\f3display with headers\f1) command at the command prompt
+ displays the current message ignoring the current
+ setting of the \f3weed\f1 variable (see \f3Boolean Variables\f1 in
+ section 2). This is most useful
+ for answering questions of the form \*QI wonder what
+ this guy put in his header?\*U and such. This command
+ does not show up on the mini-menu because it is somewhat
+ esoteric, but it does appear on the help screen.
+
+ The \f3@\f1 command at the command prompt
+ outputs a screen of debugging information,
+ including the number of lines and
+ offsets of each of the messages in the current mailbox.
+
+ The \f3#\f1 command at the command prompt
+ displays the entire stored \*Qrecord structure\*U for
+ the current message.
+
+ The \f3%\f1 command
+ displays the full computed return address of the
+ current message.
+
+ Starting up Elm with the \f3\-d\f1 (debug) option (see section 3,
+ \f3Command Line Options\f1) creates a file called
+ \f2ELM:debug.info\f1 in your home directory which contains a wealth of useful
+ information (to me, at least!) to aid in tracking down
+ what errors are occurring and why.
+
+ If there are any problems with Elm, please try
+ to recreate the error with the debug option enabled
+ and set to the highest level (11) before sending defect reports my way.
+
+ One final note: all error names reported by the program
+ are documented in the \f2AT&T System V Interface Definition Reference
+ Manual\f1 in \f3errno\f1(2).
Index: elmME+.2.5.alpha1-cvs/2.4/doc/Users.guide
*** /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
--- elmME+.2.5.alpha1-cvs/2.4/doc/Users.guide 2004-07-03 20:46:54.000000000 +0300
***************
*** 0 ****
--- 1,1102 ----
+ .\" @(#)$Id: Users.guide,v 1.1.2.1 2004/07/03 17:46:54 hurtta Exp $
+ .\"
+ .\" Users guide to the ELM mail system.
+ .\" format with:
+ .\" 'tbl Users.guide | troff tmac.n - > Users.fmtd'
+ .\"
+ .\" Elm is now in the public trust.
+ .\"
+ .\" (C) Copyright 1986,1987 Dave Taylor
+ .\" (C) Copyright 1988-1992 Usenet Community Trust
+ .\"
+ .\"
+ .tm I trust we've run this through "tbl" first...
+ .\" Define the big box macro for troff
+ .de eb
+ .sp -1
+ .nf
+ .ie t \{\
+ \h'-.5n'\L'|\\nau-1'\l'\\n(.lu+1n\(ul'\L'-|\\nau+1'\l'|0u-.5n\(ul'
+ .\}
+ .el \{\
+ \h'-.5n'\l'\\n(.lu+1n'
+ .\}
+ .fi
+ ..
+ .\" Define break line for user interaction displays
+ .de bl
+ .ie t .tl '\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-'''
+ .el .tl '-----------------------------------------------------------------'''
+ ..
+ .po 1i
+ .ds h0
+ .ds h1
+ .ds h2
+ .ds f0
+ .ds f1
+ .ds f2
+ .nr Hy 1
+ .nr Pt 1
+ .nr Pi 0
+ .lg 0
+ .nf
+ .na
+ .rs
+ .za
+ .\" This will keep the nroff version of the title page on one sheet.
+ .if t .sv |2.0i
+ .ce 99
+ .ps 20
+ .ss 18
+ .vs 12
+ \f3The Elm Users Guide\f1
+ .sp 3
+ .ps 12
+ .ss 14
+ .vs 14
+ \f2A painless introduction to electronic mail
+ using the \f3Elm\fP mail system\f1
+ .sp 3
+ The Elm Mail System
+ (Version 2.4)
+ .sp 2
+ Syd Weinstein, Elm Coordinator
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .fi
+ .ad
+ .ps 8
+ .if t .vs 9
+ .sp 4
+ \f3ABSTRACT\f1
+ .ce 0
+ .sp
+ .in +1i
+ .ll -1i
+ While various UNIX utilities have been designed to
+ take advantage of the CRT screen
+ (rather than line-oriented systems)
+ electronic mail systems haven't \*Qcaught the wave\*U.
+ This document
+ presents Elm, a sophisticated
+ full-screen mail system for interactive use.
+ Elm offers all the features of
+ \f2/bin/mail\f1, \f2Berkeley Mail\f1, \f2uumail\f1, \f2NMail\f1 and
+ the AT&T Mail family of UNIX mailers (namely \f2PMX/TERM\f1) in a
+ unified and intuitive fashion.
+ .br
+ .ll +1i
+ .in -1i
+ .sp |9.0i
+ .ce 99
+ .ps 12
+ .ss 14
+ .vs 14
+ \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
+ \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
+ .fi
+ .ad
+ .bp 1
+ .sv 5v
+ .ps 14
+ .ss 12
+ .vs 16
+ \f3Elm Users Guide\f1
+ .ds h0 "Elm Users Guide
+ .ds h1
+ .ds h2 "Version 2.4
+ .ds f0 "October 1, 1992
+ .ds f1
+ .ds f2 "Page %
+ .sp
+ .ps 10
+ .ss 12
+ .vs 12
+ (The Elm Mail System, \*(h2)
+ .sp
+ \*(f0
+ .sp 2
+ Syd Weinstein
+ Datacomp Systems, Inc.
+ 3837 Byron Road
+ Huntingdon Valley, PA 19006-2320
+ .sp
+ email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
+ .sp 2
+ Derived from
+ \*QThe Elm Mail System, Version 2.0\*U
+ by
+ Dave Taylor
+ Intuitive Systems
+ Mountain View, California
+ email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
+ .ce 0
+ .sp 3
+ .hn 1 Introduction
+
+ The
+ .ux
+ operating system was originally written on a small PDP machine,
+ to work with teletypewriters. Consequently, all the original software for
+ the operating system was written with a \*Qtty\*U in mind;
+ with line oriented interfaces, rather than screen oriented.
+
+ Gradually this began to change, and, with the addition of the Berkeley \f2vi\f1
+ visual shell to the \f2ed\f1
+ line editor, the trend began to be brought to the attention of
+ .ux
+ systems designers.
+ And yet, this transition has seemed
+ too subtle for many software engineers,
+ and so precious few
+ .ux
+ programs are available
+ designed to exploit the entire CRT screen.
+
+ Consequently, after becoming more and more disenchanted
+ with the existing electronic mail facilities (\f2binmail\f1
+ and \f2Berkeley Mail\f1)
+ Dave Taylor decided to undertake creating his own system.
+ Once the ball was rolling it became quite
+ difficult not to keep enhancing it, especially as he and
+ the Elm Development Group
+ became more and more familiar with various different mail
+ systems, but the result, we hope, is a solid, unified interface
+ to electronic mail suitable for almost any environment.
+
+ One thing that sets the Elm mail system off from
+ other packages is that it
+ comes with an extensive documentation set, including;
+ \f2The Elm Users Guide\f1, which you're holding,
+ \f2The Elm Reference Guide\f1,
+ \f2The Elm Alias Users Guide\f1,
+ \f2The Elm Filter System Users Guide\f1,
+ \f2The Elm Forms Mode Guide\f1,
+ and \f2The Elm Configuration Guide\f1.
+ The names of each indicate
+ what they discuss (not unreasonably).
+
+ This particular document contains;
+ this introduction, a tutorial session with the mailer, a
+ discussion of non-interactive uses of Elm,
+ a brief foray into the Elm utilities,
+ and finally, credits and references.
+
+ \f2The Elm Reference Guide\f1 contains a
+ much more in-depth discussion of all the possible options
+ available within the Elm environment, including
+ the \f2.elm/elmrc\f1 file,
+ the available outbound mail processing features,
+ a section for expert users, suggestions
+ on debugging strange installations, and
+ many other useful topics.
+
+ \f2The Elm Alias Users Guide\f1 is the place
+ to go to learn about the format of the \f2.elm/aliases.text\f1
+ file and the associated data files, system aliases, and other
+ related topics.
+
+ One of the more innovative features of Elm is
+ the ability to transmit and receive \*Qforms\*U (as
+ defined by the AT&T Mail system). To learn about
+ how to create and reply to forms you should refer
+ to \f2The Elm Forms Mode Guide\f1.
+
+ If you find yourself getting too much mail delivered in
+ your mailbox, you might be a good candidate for the
+ \f2filter\f1 program. To learn more about what
+ this program is and how to use it please
+ consult \f2The Elm Filter System Users Guide\f1.
+
+ Finally, if you're working with the actual source code
+ and are interested in what all the locally configured
+ options are and mean, please see
+ \f2The Elm Configuration Guide\f1. It is
+ strongly suggested that all system administrators
+ and people installing the system print out the
+ local \f2sysdefs.h\f1 file and have it handy while
+ reading the configuration guide.
+
+ The recommended order of learning the Elm
+ system is to skim this guide until you feel
+ confident enough to start up the program. Once
+ that's reached, \f2use it!\f1 Soon you'll find
+ areas that you need to expand into, and you can
+ achieve that by going into the options
+ screen within Elm and changing your
+ user level accordingly.
+ After a while, sit down again and read through this
+ guide. You should have a couple of \*Qaha!\*U intuitive
+ flashes. After another period of time, you're
+ ready to delve into the real power of the system
+ and read the reference guide. The other manuals
+ should be read as the need arises.
+
+ In any case, the system should be usable without reading
+ \f2any\f1 of the documentation!
+
+ Any comments or problems with any of the documentation or the program
+ itself are welcome; if you can't get electronic mail to the Elm
+ Development Group, please feel free instead to drop me a note via the
+ overland mail address in the title page.
+ .br
+ .ne 20
+ .sp
+ .hn 1 The Main System
+
+ Upon entry to the program, the main screen will be
+ displayed as below:
+
+ .\" display start, constant width, remember loc for BOX
+ .ft CW
+ .zf
+ .ps 9
+ .mk a
+ .sp
+ .ce
+ Mailbox is \'/usr/mail/mymail\' with 15 messages [Elm 2.4PL22]
+ .TS
+ r l n l l l l.
+ \-> N 1 Apr 24 Larry Fenske (49) Hello there
+ N 2 Apr 24 jad@hpcnoe (84) Chico? Why go there?
+ E 3 Apr 23 Carl Smith (53) Dinner tonight?
+ NU 4 Apr 18 Don Knuth (354) Your version of TeX...
+ N 5 Apr 18 games (26) Bug in cribbage game
+ A 6 Apr 15 kevin (27) More software requests
+ 7 Apr 13 John Jacobs (194) How can you hate RUSH?
+ U 8 Apr 8 decvax!mouse (68) Re: your Usenet article
+ 9 Apr 6 root (7)
+ O 10 Apr 5 root (13)
+ .TE
+ .sp
+ .ce 3
+ You can use any of the following commands by pressing the first character;
+ d)elete or u)ndelete mail, m)ail a message, r)eply or f)orward mail, q)uit
+ To read a message, press <return>. j = move down, k = move up, ? = help
+ Command : @
+ .sp
+ .\" draw box, proportional Roman font back, display end
+ .eb
+ .ps 10
+ .ft 1
+
+ There are a number of things to notice about this, the main screen;
+
+ .lp \h'12p'\(bu 20p
+ Most likely, on your computer the message currently \*Qactive\*U will be
+ displayed in an inverse bar rather than being delimited by the two
+ character arrow as here. It's nothing to worry about; displaying
+ inverse video is just quite difficult on printable guides!
+
+ .lp \h'12p'\(bu 20p
+ The first line on the screen always displays the name of the current folder,
+ the number of messages in the folder, and the current Elm version number.
+
+ .lp \h'12p'\(bu 20p
+ The arrow (\*Q\->\*U) or inverse video bar will always
+ indicate which is the current message.
+
+ .lp \h'12p'\(bu 20p
+ The first field that appears associated with each message is
+ the status field. This can be blank (as with most of the
+ ones above, or can have any combination of the following:
+
+ The first character signifies temporary status:
+
+ .ta .75iC 102p
+ .nf
+ E for an \f2expired\f1 message
+ N for a \f2new\f1 message
+ O for an \f2old\f1 (i.e. not new but not read) message
+ D for a \f2deleted\f1 message
+
+ The second character which signifies permanent status:
+
+ C for \f2confidential\f1 mail
+ U for \f2urgent\f1 mail
+ P for a \f2private\f1 message
+ A for messages that have an \f2action\f1 associated with them
+ F for a \f2form\f1 letter
+ M for a \f2MIME\f1 compliant message
+ .fi
+
+ The third character of the status field can be a \*q+\*u to
+ indicate that the message is \f2tagged\f1 too.
+
+ .lp \h'12p'\(bu 20p
+ Continuing from left to right, the next field is the message
+ number. For the most part you can ignore these unless you want
+ to quickly move to a specific message (as we'll see later).
+
+ .lp \h'12p'\(bu 20p
+ The date associated with each message is typically
+ the date the person actually \f2sent\f1 the message.
+
+ .lp \h'12p'\(bu 20p
+ The next field displayed indicates whom the message is from.
+ Elm will try to display the \f2full name\f1 of the person who
+ sent the message, rather than the their return address or computer login.
+ Some systems don't generate the correct headers, though, hence
+ messages like numbers 2 and 8, where it's their return address.
+
+ .lp \h'12p'\(bu 20p
+ The number in parentheses is the total number of lines in the message.
+
+ .lp \h'12p'\(bu 20p
+ The final field is the subject of the message. Notice
+ that messages might not have any subject, as in messages #9 and #10.
+
+ .lp \h'12p'\(bu 20p
+ A maximum of ten messages are displayed at one time.\s-2\u1\d\s0
+ .fn
+ 1. On screens with more than 24 lines, additional messages are
+ displayed automatically. Furthermore, if you choose to turn off
+ the menu display, you can have an even greater number
+ displayed.
+ .ef
+ Further into the document we'll learn how to change \*Qpages\*U in the folder.
+
+ .lp \h'12p'\(bu 20p
+ The three line menu display will always
+ indicate the relevant commands. There are actually two possible
+ menus that can be displayed, based
+ on the \f2user level\f1 as set from either the options screen or
+ the \f2.elm/elmrc\f1
+ file. The alternate menu, for more advanced users,
+ lists more options;
+ .sp
+ .ft CW
+ .zf
+ .ps 9
+ .ce 3
+ |=pipe, !=shell, ?=help, <n>=set current to n, /=search pattern
+ a)lias, C)copy, c)hange folder, d)elete, e)dit, f)orward, g)roup reply, m)ail,
+ n)ext, o)ptions, p)rint, r)eply, s)ave, t)ag, q)uit, u)ndelete, or e(x)it
+ .ps 10
+ .ft 1
+
+ .lp \h'12p'\(bu 20p
+ Finally, the \*q@\*u character indicates where the cursor would be, awaiting
+ your input.
+
+ .sp
+ .in 0
+ The typical action at this point is to use the \f2<return>\f1
+ key to read the current message, which will clear the
+ screen and display the current message:
+
+ .ne 10
+ .ft CW
+ .zf
+ .ps 9
+ .mk a
+ .tl ' Message 1/15 from Larry Fenske''Apr 24 \'87 at 8:45 pm edt'
+ .tl ''Hello there''
+ .nf
+ Dave,
+ Just wanted to drop you a brief note to see what was going on with
+ you this afternoon. Life here has been the usual fun and games...
+ Ah well, off to the great wilds beyond the desk!
+ Larry
+ Command (\'i\' to return to index): @
+ .fi
+ .eb
+ .ft 1
+ .ps 10
+
+ Before we go further with our example, however, let's very
+ quickly look at all the functions available from the main
+ screen:
+ .\" ensure we get a reasonable chunk of this table on the page...
+ .br
+ .ne 10
+ .lp \h'18p'\f3Command 90p
+ Action\f1
+
+ .lp "\h'18p'<return> or <space>" 90p
+ Read current message.
+ .lp \h'18p'| 90p
+ Pipe current message or tagged messages to specified system command.
+ .lp \h'18p'! 90p
+ Shell escape.
+ .lp \h'18p'$ 90p
+ Resynchronize folder.
+ .lp \h'18p'? 90p
+ Help mode \(em any key pressed will be explained.
+ .lp "\h'18p'+ or <right>" 90p
+ Display next page of subjects.
+ .lp "\h'18p'\- or <left>" 90p
+ Display previous page of subjects.
+ .lp \h'18p'= 90p
+ Set current message to 1.
+ .lp \h'18p'* 90p
+ Set current to last message.
+ .lp \h'18p'<number><return> 90p
+ Set current message to number \f2number\f1.
+ .lp \h'18p'/ 90p
+ Search for pattern in subject/from lines.
+ .lp \h'18p'// 90p
+ Search for pattern in entire folder.
+ .lp \h'18p'< 90p
+ Scan message for calendar entries.\s-2\u2\d\s0
+ .fn
+ 2. Some sites might opt not to have the calendar feature available.
+ .ef
+ .lp \h'18p'> 90p
+ A synonym for \f3s\f1 \(em \f3save\f1 message or messages.
+ .sp
+ .lp \h'18p'a 90p
+ Alias, change to \*Qalias\*U mode.
+ .lp \h'18p'b 90p
+ Bounce \(em remail message (see \f3f\f1 \(em \f3forward\f1 too).
+ .lp \h'18p'C 90p
+ Copy current message or tagged messages to folder.
+ .lp \h'18p'c 90p
+ Change to another folder.
+ .lp \h'18p'd 90p
+ Delete current message.
+ .lp \h'18p'<control>-D 90p
+ Delete all messages matching specified pattern.
+ .lp \h'18p'e 90p
+ Edit current folder, resyncing upon re-entry.\s-2\u3\d\s0
+ .fn
+ 3. Some sites might opt not to have the edit folder feature available.
+ .ef
+ .lp \h'18p'f 90p
+ Forward message to specified user.\s-2\u4\d\s0
+ .fn
+ 4. The difference between \f3forward\f1 and \f3bounce\f1 is rather
+ subtle \(em a forwarded message is \f2from\f1 you, with the
+ original message included, whereas a bounced message
+ is still from the original sender.
+ .ef
+ .lp \h'18p'g 90p
+ Group reply \(em reply to everyone who received the current message.
+ .lp \h'18p'h 90p
+ Display message with headers.
+ .lp \h'18p'i 90p
+ Return to index screen after displaying message.
+ .lp \h'18p'J 90p
+ Set current to next message.
+ .lp "\h'18p'j or <down>" 90p
+ Set current to next message not marked deleted.
+ .lp \h'18p'K 90p
+ Set current to previous message.
+ .lp "\h'18p'k or <up>" 90p
+ Set current to previous message not marked deleted.
+ .lp \h'18p'l 90p
+ Limit displayed messages based on the specified criteria.
+ .lp \h'18p'<control>-L 90p
+ Rewrite screen.
+ .lp \h'18p'm 90p
+ Mail to arbitrary user(s).
+ .lp \h'18p'n 90p
+ Read current message, then increment to next message not marked deleted.
+ .lp \h'18p'o 90p
+ Alter current system options.
+ .lp \h'18p'p 90p
+ Print current message or tagged messages.
+ .lp \h'18p'q 90p
+ Quit \(em maybe prompting for messages to delete, store, or keep.
+ .lp \h'18p'Q 90p
+ Quick quit \(em like quit but without prompting.
+ .lp \h'18p'r 90p
+ Reply to the author of current message.
+ .lp \h'18p's 90p
+ Save current message or tagged messages to folder.
+ .lp \h'18p't 90p
+ Tag current message.
+ .lp \h'18p'<control>-T 90p
+ Tag all messages matching specified pattern.
+ .lp \h'18p'u 90p
+ Undelete current message.
+ .lp \h'18p'<control>-U 90p
+ Undelete all messages matching specified pattern.
+ .lp \h'18p'x 90p
+ Exit \(em prompt if mailbox changed, don't record as read, don't save.
+ .lp \h'18p'X 90p
+ Exit immediately \(em don't record as read, don't save.
+ .in 0
+ .sp
+ .ne 10
+ But let's go back to our example and see some of this at
+ work, shall we?
+ .sp
+ We were reading the message from Larry and the screen looked
+ like:
+
+ .ne 10
+ .ft CW
+ .zf
+ .ps 9
+ .mk a
+ .tl ' Message 1/15 from Larry Fenske''Apr 24 \'87 at 8:45 pm edt'
+ .tl ''Hello there''
+ .nf
+ Dave,
+ Just wanted to drop you a brief note to see what was going on with
+ you this afternoon. Life here has been the usual fun and games...
+ Ah well, off to the great wilds beyond the desk!
+ Larry
+ Command (\'i\' to return to index): @
+ .fi
+ .eb
+ .ft 1
+ .ps 10
+
+ From this point let's go ahead and reply to the message. To
+ do this, we can use the \f3reply\f1 command.
+ To do this, we type \*qr\*u and the last few lines change to
+ something like:
+ .ft CW
+ .zf
+ .ps 9
+ .sp
+ .bl
+ .tl 'Command: Reply to message''Copy message? (y/n) @ '
+ .sp 2
+ .ft 1
+ .ps 10
+ To which we decide that we don't need the text of this message in
+ our new one, so we reply \f2no\f1 by pressing the \*qn\*u key. The
+ bottom part of the window then changes to:
+ .ft CW
+ .zf
+ .ps 9
+ .sp
+ .bl
+ .ie t .tl 'Command: Reply to message'To: Larry Fenske ''
+ .el .tl 'Command: Reply to message''To: Larry Fenske '
+ .tl 'Subject: Re: Hello there@'''
+ .ft 1
+ .ps 10
+ .sp 2
+ At this point we can either decide to enter a new subject (you could
+ use either \f2backup word\f1 (\f2<control>-W\f1) or \f2backup line\f1 (this
+ is the same as your \*Qline kill\*U character,
+ \f2<control>-X\f1 or \f2<control>-U\f1
+ usually)) or go with this one by pressing \f2<return>\f1. We'll
+ just leave it as it is and press \f2<return>\f1, changing the
+ screen to:
+ .ps 9
+ .ft CW
+ .zf
+ .sp
+ .bl
+ .ie t .tl 'Command: reply to message'To: Larry Fenske ''
+ .el .tl 'Command: reply to message''To: Larry Fenske '
+ .tl 'Subject: Re: Hello there'''
+ .tl 'Copies to: @'''
+ .ps 10
+ .ft 1
+ .sp
+ There's no one we want to have receive copies of this message, so we'll
+ just press \f2<return>\f1 again to indicate this.
+
+ Once you've answered these questions the program will put you into
+ your favorite editor and let you compose a response. When you're
+ done it then asks:
+ .ps 9
+ .ft CW
+ .zf
+ .sp
+ .tl 'Please choose one of the following options by parenthesized letter: @'''
+ .tl ''e)dit message, edit h)eaders, s)end it, or f)orget it.''
+ .ft 1
+ .ps 10
+ .sp
+ Since we're just interested in sending the message out, we'll
+ choose the \f3send\f1 option and press \*qs\*u. The program
+ then sends the message, indicating that by the line below
+ saying:
+ .sp
+ .ps 9
+ .ft CW
+ .zf
+ Sending mail...
+ .ft 1
+ .ps 10
+ .sp
+ then putting at the bottom of the screen ``Mail sent!'' and giving us
+ the prompt:
+ .ps 9
+ .ft CW
+ .zf
+ .sp
+ .bl
+ .tl 'Command:''(Use \'i\' to return to index.)''
+ .sp
+ .ps 10
+ .ft 1
+ Pretty easy, isn't it? Let's continue by going back to the main
+ screen pressing the \*qi\*u key to request the \f2index\f1. The
+ screen is then:
+
+ .ne 20
+ .ft CW
+ .zf
+ .ps 9
+ .mk a
+ .sp
+ .ce
+ Mailbox is \'/usr/mail/mymail\' with 15 messages [Elm 2.4PL22]
+ .TS
+ r l r l l l l.
+ \-> 1 Apr 24 Larry Fenske (49) Hello there
+ N 2 Apr 24 jad@hpcnoe (84) Chico? Why go there?
+ E 3 Apr 23 Carl Smith (53) Dinner tonight?
+ NU 4 Apr 18 Don Knuth (354) Your version of TeX...
+ N 5 Apr 18 games (26) Bug in cribbage game
+ A 6 Apr 15 kevin (27) More software requests
+ 7 Apr 13 John Jacobs (194) How can you hate RUSH?
+ U 8 Apr 8 decvax!mouse (68) Re: your Usenet article
+ 9 Apr 6 root (7)
+ O 10 Apr 5 root (13)
+ .TE
+ .sp
+ .ce 3
+ You can use any of the following commands by pressing the first character;
+ d)elete or u)ndelete mail, m)ail a message, r)eply or f)orward mail, q)uit
+ To read a message, press <return>. j = move down, k = move up, ? = help
+ Command : @
+ .sp
+ .\" draw box, proportional Roman font back, display end
+ .eb
+ .ft 1
+ .ps 10
+
+ Notice that the first message is no longer marked as \f2new\f1
+ since we've now read it.
+ .sp
+ Let's go ahead and read the message from kevin (message #6) since
+ it has some sort of \f2action\f1 associated with it anyway. To
+ do this, we simply press the \*q6\*u key, which will change the
+ bottom of the screen to:
+ .sp
+ .ps 9
+ .ft CW
+ .zf
+ .tl 'Command: New Current Message''Set current message to : 6@'
+ .ft 1
+ .ps 10
+ .sp
+ We'll just press \f2<return>\f1 to move the active message
+ pointer (the arrow).
+ .sp
+ Now we're pointing at the new message, so let's go ahead and read
+ it by pressing \f2<return>\f1 again, giving us:
+
+ .ne 10
+ .ft CW
+ .zf
+ .ps 9
+ .mk a
+ .tl ' Message 6/15 from kevin''Apr 15 \'87 at 11:36 am pst'
+ .tl ''More software requests''
+ Action: please acknowledge receipt
+ I don\'t suppose you have a nifty netnews reader around too, do you??
+ \-\-
+ kevin
+ Command (\'i\' to return to index): @
+ .eb
+ .sp
+ .ps 10
+ .ft 1
+
+ .br
+ .ne 5
+ Well, it turns out that we don't, but a friend of ours does, so
+ let's \f3forward\f1 the message to them by pressing \*qf\*u:
+ .ps 9
+ .ft CW
+ .zf
+ .sp
+ .tl 'Command: Forward message''Edit outgoing message (y/n) ? @ '
+ .ft 1
+ .ps 10
+ .sp 2
+ No need to edit it, so let's answer \f2no\f1 with \*qn\*u:
+ .sp
+ .ps 9
+ .ft CW
+ .zf
+ .tl 'Command: Forward message''Edit outgoing message (y/n) ? No '
+ .tl 'To: @'''
+ .ps 10
+ .ft 1
+ .sp
+ We type in the address of the person we're forwarding to (in
+ this case
+ .ft CW
+ .zf
+ usenet\f1) and press
+ \f2<return>\f1:
+ .ft CW
+ .zf
+ .ps 9
+ .sp
+ .ie t .tl 'Command: Forward message'To: usenet ''
+ .el .tl 'Command: Forward message''To: usenet '
+ .tl 'Subject: More software requests (fwd)@'''
+ .ft 1
+ .ps 10
+ .sp
+ To which we again press \f2<return>\f1 to take the default subject.
+ Elm asks for any possible copy recipients, asks us if we're
+ sure we want to send it, and shoots it off.
+ .sp
+ Enough mail for now, however, so we just \f3exit\f1 by pressing
+ the \*qx\*u key at the \*QCommand:\*U prompt and the program drops us
+ back into our shell.
+ .sp
+ As you can see, it's quite easy to use the Elm system, so
+ rather than continue with our example, let's
+ look at some other aspects of the program.
+ .br
+ .ne 5
+ .sp
+ .hn 1 Non-Interactive Uses of Elm
+
+ Before we go ahead and discuss the Elm utilities, it's worth
+ noting that
+ there are a couple of other ways to use the main mail
+ system, namely to \*Qsend only\*U and to send files (batchmail).
+
+ To send a message to someone without any of the associated
+ overhead of reading in a mail folder, you can invoke the
+ mailer with the name(s) of the people to send to. For example:
+
+ .nf
+ .ti +.5i
+ $ \f3elm dave_taylor\f1
+ .fi
+
+ Elm then prompts for Subject, Copies, and then drops
+ you in your editor (defined in the \f2.elm/elmrc\f1 file) to compose
+ the message. When composition is complete, the program
+ verifies transmission then terminates.
+
+ .ne 6
+ Elm also supports batch type mailing, of files and so on,
+ by using the following command:
+
+ .nf
+ .ti +.5i
+ $ \f3elm dave_taylor < help.c\f1
+ .fi
+
+ which reads in the file and transmits it to the specified user.
+
+ .ne 3
+ A subject may be specified with \*Q\-s \f2subject\f1\*U as an option
+ to Elm in either \*Qsend only\*U or \*Qbatch\*U modes, as in:
+
+ .nf
+ .ti +.5i
+ $ \f3elm \-s "File help.c, as promised" dave_taylor < help.c\f1
+ .fi
+
+ .ne 3
+ Elm also has an option to specify that a certain file be used as the
+ initial text of the message. This makes it easier to use Elm with
+ other programs that interface with a mailer. Use \*Q\-i \f2file\f1\*U as an
+ option to Elm in \*Qsend only\*U mode. For example, to specify to \f2rn\f1
+ to use Elm as the mailer, define the following in \f3RNINIT\f1:
+
+ .ft CW
+ .zf
+ .nf
+ .ti +.5i
+ \-EMAILPOSTER="elm \-i %h \-s \\"Re: %S\\" %t"
+ .fi
+ .ft 1
+
+ See the man page for \f2rn\f1(1) or the newsreader you use for more specific
+ information.
+
+ .br
+ .ne 5
+ .sp
+ .hn 1 The Elm Utilities
+
+ The Elm mail system is really much more than a single
+ program for reading and writing mail. It's a unified
+ environment for intelligently dealing with electronic
+ correspondence. As a consequence, it contains a number of other
+ programs to aid in the easy processing of \*Qemail\*U,
+ including the following;
+
+ .lp \h'10p'answer 1.0i
+ An answering-machine transcription program. Please see the
+ manual entry for more information on how to use this program.
+
+ .lp \h'10p'checkalias 1.0i
+ A script for checking aliases simply.
+
+ .lp \h'10p'elmalias 1.0i
+ A tool to obtain information on defined aliases.
+
+ .lp \h'10p'listalias 1.0i
+ A script to produce sorted listings of aliases.
+
+ .lp \h'10p'messages 1.0i
+ A script that lists the number of messages in the specified
+ folder. Suitable for login scripts and such.
+
+ .lp \h'10p'newmail 1.0i
+ This program monitors a mailbox or set of mailboxes and can
+ output notification of new mail in one of two possible
+ formats; either:
+
+ .ne 6
+ .nf
+ .ft CW
+ .zf
+ .ps 9
+ .ti +.5i
+ >> New mail from Jimmy Carter \-\- Urgent matters of state
+ .br
+ .ti +.5i
+ >> New mail from j...@ucbvax.arpa \-\- Did I hear someone say PARTY??
+ .ft 1
+ .ps 10
+
+ if running as \f2newmail\f1 or:
+
+ .ft CW
+ .zf
+ .ps 9
+ .ti +.5i
+ Jimmy Carter \-\- Urgent matters of state
+ .br
+ .ti +.5i
+ j...@ucbvax.arpa \-\- Did I hear someone say PARTY??
+ .ft 1
+ .ps 10
+ .fi
+
+ if running as \f2wnewmail\f1. BSD Users will find this is
+ a far superior \f2biff\f1 program.
+
+ .lp \h'10p'wnewmail 1.0i
+ This is the same program as \f2newmail\f1, but has different
+ defaults if invoked this way.
+
+ .lp \h'10p'readmsg 1.0i
+ This handy little program can be used in two ways. First off,
+ it can be used to easily read a specific message in the
+ incoming mailbox, specified by ordinal number, by a string that
+ the message contains, by the metacharacter \*q$\*u which
+ represents the last message in the folder, or \*q*\*u which matches
Will be available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha1.patch.gz
and elm-ME+2.5.alpha1.tar.gz
or
<URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-ME+2.5/elm-ME+2.5.PLalpha1.patch.gz >
and <URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-ME+2.5/elm-ME+2.5.alpha1.tar.gz >
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha1.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha1.tar.gz >
via WWW.
Before applying patch catenate parts 1 - 4 first.
This patch is agaist Elm ME+ 2.5 PLalpha0
========================================================== [ part 2/4] =========
+ all the messages in the folder.
+
+ For example;
+
+ .ti +.5i
+ $ \f3readmsg 4 5 9 | lpr\f1
+
+ would generate a printout, \f2sans\f1 superfluous headers, of the fourth,
+ fifth and ninth messages in your mailbox.
+
+ .ti +.5i
+ $ \f3readmsg Carter | page\f1
+
+ would be a fast way to read what \*uole Jimmy has to say, and
+
+ .ti +.5i
+ $ \f3readmsg \-h hear someone say\f1
+
+ would list, including all the message headers, the message
+ containing the string \*Qhear someone say\*U.
+
+ .lp \h'10p'frm 1.0i
+ Similar to the Berkeley \f2from\f1 command, this will
+ give you a \*Qtable of contents\*U or a summary of either the current
+ mailbox or a mailbox of your choice. It's useful to
+ see what mail is pending, or what's in a mailbox.
+ If used with the \*Q\-n\*U option, it will number each message
+ in a way compatible with the arguments \f2readmsg\f1
+ expects to get, too!
+
+ .lp \h'10p'newalias 1.0i
+ This is used to install new user/group aliases. Please see
+ \f2The Elm Alias Users Guide\f1 for further information.
+
+ .lp \h'10p'fastmail 1.0i
+ Sometimes you want to have a batchmailing system that works as
+ quickly as possible, not bothering with aliases or any of the
+ other \*Qdeluxe\*U features of Elm. An example of this would
+ be if you have a large mailing list for a newsletter, say.
+ This command, \f2fastmail\f1, is designed just for that purpose.
+ It avoids the lengthy startup time of Elm while still
+ generating valid RFC-822\s-2\u5\d\s0 mail.
+ .fn
+ 5. If you don't know what RFC-822 is, don't worry about it!
+ .ef
+ Please see the manual entry for more information on this
+ command.
+ .in 0
+ .br
+ .ne 5
+ .sp
+ .hn 1 "Credits and So on \(em Elm's early years from Dave Taylor"
+
+ This mailer has been evolving over the past few years with
+ invaluable comments on the interface and general mail
+ issues from the following people;
+ Jim Davis, Steve Wolf (or should that say Steve!! Wolf!!!! perhaps?),
+ Larry Fenske, Rob Sartin,
+ John Dilley and Carl Dierschow.
+ .sp
+ For the Berkeley implementation, lots of help came from
+ both John Lebovitz and Ken Stone.
+ .sp
+ For the Amdahl/UTS implementation, thanks to Scott McGregor and
+ Stan Isaacs.
+ .sp
+ For the Sun problems, Dave England in Lancaster (UK) turned out to be
+ \*Qbloody useful\*U, as he would no doubt say.
+ .sp
+ The Pyramid version is due to the work of Steve Malone
+ of the University of Washington.
+ .sp
+ A number of other people have been amazingly disciplined at reporting
+ problems and (usually, much to my relief) indicating the fixes needed,
+ especially Guy Hillyer, Bruce Townsend and Eric Negaard.
+ .sp
+ There have been many, many others, too numerous to mention, that
+ have inspired me with questions like \*QWhy can't Elm...\*U or
+ \*QWhy does it ...\*U or \*QCan we make it...\*U too. A loud round of
+ applause and an enthusiastic THANK YOU to you all!!
+ .sp
+ Also helpful was the ability to have my \*Qown\*U machine to
+ close up the many many iterative loops that this software
+ has gone through \(em since being on a big multi-user machine
+ tends to slow it down to a standstill.
+ For that, I thank Hewlett-Packard Colorado Networks Division for their
+ initial support, and now HP Laboratories for the wonderful working
+ environment that I have here (more than any one person is safe having,
+ I suspect).
+ .sp
+ Mailers that have influenced the design and implementation of Elm,
+ for better or worse, include the following;
+
+ .lp \h'4p'\f2/bin/mail\f1 1.0i
+ The most basic of mailers, this one was simply the example of how \f2not\f1
+ to force the user to interact with a program.
+
+ .lp "\h'4p'\f2Berkeley Mail\f1" 1.0i
+ A surprisingly sophisticated mailer, especially the version with 4.3 BSD,
+ \f2Berkeley Mail\f1 still suffers from the tendency to force the user to
+ know too much about the system, and also lacks a friendly, non-cryptic
+ interface for the large subset of the population that use
+ .ux
+ but aren't
+ interested in becoming a \*Qhacker\*U.
+
+ .lp \h'4p'\f2MH\f1 1.0i
+ This is another nifty mailer. The main difference between this and the
+ other mailers about is that it is a discrete set of programs rather than
+ a single unified interface. This is quite useful for those people that
+ receive \f2lots\f1 of mail and are willing to spend some time learning
+ the intricacies of the program. It's quite powerful, but again, misses some
+ of the basic friendly features the majority of users are interested in.
+
+ .lp \h'4p'\f2dmail\f1 1.0i
+ A sort of mutated cross between \f2MH\f1 and \f2Berkeley Mail\f1, it was
+ this program that convinced me to implement the \f3limit\f1 functions.
+
+ .lp \h'4p'\f2NMail\f1 1.0i
+ A part of the HP AI Workstation Software Environment, this program hints
+ at the power that mailers could be given to help deal with mail in a quick
+ and intelligent fashion. Most of what it can do, and a lot more, are
+ therefore part of Elm. Indubitably. And quite fast too!
+
+ .lp \h'4p'\f2PMX/TERM\f1 1.0i
+ Part of the AT&T Mail package, a single glance at this interface convinced
+ me that a PC interface, with almost half of the screen taken up by a silly
+ function key mapping, is most certainly \f2not\f1 the way to do things!!
+ On the other hand, it also shows that the \*Qforms\*U mode can be quite
+ nicely integrated into a more sophisticated mailer.
+
+ .lp \h'4p'\f2fmail\f1 1.0i
+ A nickel addition to the \f2/bin/mail\f1 program to add some rudimentary
+ screen interface stuff, this nonetheless interesting mailer is part of
+ the AT&T Toolchest.
+
+ .lp \h'4p'\f2Laurel\f1 1.0i
+ A program only available within Xerox PARC, this was an interesting
+ early attempt at a graphics based full-screen mail program. The one,
+ perhaps trivial, part of the interface I really like was the fact that
+ it would \f2cross out\f1 a message that was marked for deletion. One
+ day when we get real graphics and the ability to use them in
+ a facility (not too) like \f2termcap\f1, perhaps Elm will do
+ this too!
+
+ .lp \h'4p'\f2Mailtool\f1 1.0i
+ Part of the Sun distribution package, this program is a really nice
+ example of what can be done by putting a smart shell on top of a dumb
+ program \(em it uses \f2/bin/mail\f1 for all the \*Qdirty work\*U. Other than
+ that, it's not a particularly interesting interface or mailer, and it
+ certainly doesn't add much functionality!
+
+ .lp \h'4p'\f2Metamail\f1 1.0i
+ What can I say? This isn't even a real mailer,\s-2\u6\d\s0
+ .fn
+ 6. Not to be confused with the multi-media mailer, \f2metamail\f1, from
+ Nathaniel Borenstein of Bellcore.
+ .ef
+ but is just what I dream
+ of as an interface to mail in the future. A program that works sort of
+ like HAL did in \f22001: A Space Odyssey\f1 \(em where it interrupts
+ me as appropriate for important mail, and can answer inane and other
+ queries itself according to what I teach it. Maybe Elm, by some sort
+ of groupmind metamorphosis, will change into that someday. Maybe not. Maybe
+ no one bothers to read this far into the document!!
+
+ .in 0
+ Finally, it's also been a very useful experience overall,
+ confirming my beliefs that iterative software design and
+ keeping a close watch on users (not to mention an open
+ mind and mailbox!) improves a product manyfold. Comments,
+ feedback and bug reports (and fixes!) are, of course, always welcome!
+ .br
+ .ne 5
+ .sp
+ .hn 1 "Credits and So on Part II \(em The Usenet Elm Development Group"
+
+ As coordinator of the Elm Development Group, I must add to the credits.
+ This group of volunteers has taken the Elm code from Dave Taylor and
+ added features, made it more robust, and more portable.
+ .sp
+ For getting the Usenet Elm group going, for without which I wouldn't be
+ writing this, thanks to Greg Hackney at Southwestern Bell Telephone Co.
+ .sp
+ For the Configuration system and its newer Dist 2.0 version, thanks are
+ due to Larry Wall of JPL-NASA.
+ .sp
+ For his over two hundred sets of changes to version 2.2, Elm owes a lot
+ to Rob Bernardo who was at Pacbell at that time.
+ .sp
+ The ability to run Elm at all on Intel 286 machines owes a lot to the
+ insistent nudging of the coordinator by Chip Salzenberg,
+ Chip Rosenthal, and Tim Evans.
+ .sp
+ For getting us the rights to use the news macros and converting all
+ the documentation over to those macros, thanks to Mike Brown.
+ .sp
+ For pushing us into the \*u90s and forcing the issues of
+ NLS and foreign language support, I thank Jan Saell of Administration & Systemkonsult AB
+ along with Larry Philps of SCO Canada.
+ .P
+ I'd also like to thank the many current and prior members of the Elm
+ development and testing groups. The list varies from time to time
+ as people come and go. Also, to all the Elm users out there who
+ send in patches. The group can use all the extra help it gets.
+ As a postScript, if you wish to join the group, all it takes is some
+ time to work on things, and to ask.
+
+ Syd Weinstein, Elm Coordinator.
Index: elmME+.2.5.alpha1-cvs/Configure
*** elmME+.2.5.alpha0/Configure 2004-05-16 17:43:45.000000000 +0300
--- elmME+.2.5.alpha1-cvs/Configure 2004-07-03 20:46:52.000000000 +0300
***************
*** 8,14 ****
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.150.8.6 2004/05/16 12:26:42 hurtta Exp $
#
: sanity checks
--- 8,14 ----
# and edit it to reflect your system. Some packages may include samples
# of config.h for certain machines, so you might look for one of those.)
#
! # $Header: /data/cvsroot/mail/elmme+/Configure,v 1.150.8.7 2004/07/03 17:46:52 hurtta Exp $
#
: sanity checks
***************
*** 1374,1379 ****
--- 1374,1385 ----
EOSS
chmod +x filexp
+ : ############### >>>>>>>>>>>>>>> Commented out ROFF section
+ if true
+ then
+ roff=none
+ else
+
# determine text processor to use, default to troff if found.
case "$roff" in
'')
***************
*** 1460,1465 ****
--- 1466,1474 ----
esac
fi
+ fi
+ : ############### <<<<<<<<<<<<<<<<<<<< Commented out ROFF section
+
: default clear to no extra flags
xencf=
xenlf=
Index: elmME+.2.5.alpha1-cvs/doc/Alias.guide
*** elmME+.2.5.alpha0/doc/Alias.guide 2002-01-26 13:14:45.000000000 +0200
--- /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
***************
*** 1,354 ****
- .\" @(#)$Id: Alias.guide,v 1.2 1998/10/20 19:57:19 hurtta Exp $
- .\"
- .\" A guide to the ELM alias system and so on.
- .\" format with:
- .\" tbl Alias.guide | troff tmac.n - > Alias.format'
- .\"
- .\" (C) Copyright 1986,1987 Dave Taylor
- .\" (C) Copyright 1988-1992 Usenet Community Trust
- .\" Elm is now in the public trust.
- .\"
- .\"
- .\"
- .tm Have we been run through "tbl" first?? I hope so!
- .po 1i
- .ds h0
- .ds h1
- .ds h2
- .ds f0
- .ds f1
- .ds f2
- .nr Hy 1
- .nr Pt 1
- .nr Pi 0
- .lg 0
- .nf
- .na
- .rs
- .za
- .sp |3.0i
- .ce 99
- .ps 20
- .ss 18
- .vs 12
- \f3The Elm Alias System Users Guide\f1
- .sp 4
- .ps 12
- .ss 14
- .vs 14
- \f2What aliases are and how to use them
- in the \f3Elm\fP mail system\f1
- .sp 3
- The Elm Mail System
- (Version 2.4)
- .sp 2
- Syd Weinstein, Elm Coordinator
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp |9.0i
- \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
- \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
- .fi
- .ad
- .bp 1
- .sv 5v
- .ps 14
- .ss 12
- .vs 16
- \f3The Elm Alias System Users Guide\f1
- .ds h0 "Alias Users Guide
- .ds h1
- .ds h2 "Version 2.4
- .ds f0 "October 1, 1992
- .ds f1
- .ds f2 "Page %
- .sp
- .ps 10
- .ss 12
- .vs 12
- (The Elm Mail System, \*(h2)
- .sp
- \*(f0
- .sp 2
- Syd Weinstein
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp 2
- Derived from
- \*QThe Elm Mail System, Version 2.0\*U
- by
- Dave Taylor
- Intuitive Systems
- Mountain View, California
- email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
- .ce 0
- .sp 3
- This document is intended as a supplement to the \f2Elm Users Guide\f1
- and is only of interest to those users desiring more knowledge
- about how aliases work and how to create strange and exciting
- aliases for their systems (okay, so maybe it's not \f2that\f1 exciting!)
- .sp
- This document is broken up into the following sections;
- user aliases,
- group aliases,
- system aliases,
- editing and installing new aliases,
- general warnings and other chit-chat.
- .sp
- .hn 1 User Aliases
-
- The simplest type of aliases in the Elm system are individual
- user aliases. These are made up of three parts;
-
- .nf
- \f2aliasname list\f1 = \f2username\f1 = \f2address\f1
- .fi
-
- Where the \f2aliasname list\f1 is either a single aliasname\s-1\u1\d\s0
- .fn
- 1. Aliasnames can be any combination of letters, numbers, hyphens (\*q\-\*u),
- periods (\*q.\*u), or underscores (\*q_\*u). Letter case is not significant,
- that is, \*QFRED\*U, \*QFred\*U, and \*Qfred\*U are identical.
- .ef
- or a list of aliasnames separated by commas. Aliasnames are case insensitive and will be
- converted to all lower case by the alias system.
- .sp
- \f2Username\f1 is used to indicate the full \*Qreal name\*U of the user. For
- example, if you had an alias for \*Qtaylor\*U to get to me, the
- \f2username\f1 field would contain \*QDave Taylor\*U or
- perhaps \*QDave Taylor at HP\*U
- or some other permutation. The
- name can optionally be entered in the format of \*QTaylor; Dave\*U. When
- this is done, the alias system can sort aliases on a last name basis
- for presentation on the alias menu within Elm.
- Elm uses this information to add the user's full name to the addresses of
- outbound mail to get more readable addresses. No
- matter which format a name is entered, Elm displays it
- and puts it in mail headers the way you would expect (i.e., \*QDave Taylor\*U).
- .sp
- \f2Address\f1 is either the user's full electronic mail address or, if
- your system uses a smart mailer, the minimum address needed to specify
- the destination. For example, say my smart mailer
- contained information on how to get to machine \*Qhp-sdd\*U and I wanted
- to have an address for my friend Ken there \(em I could have his address
- specified as simply \*Qken@hp-sdd\*U (or alternatively \*Qhp-sdd!ken\*U since
- the two are functionally equivalent).
- .sp
- Let's get on to some examples, shall we?
- .sp
- Consider this excerpt from my own \f2.elm/aliases.text\f1 file;
-
- .nf
- .ft CW
- .zf
- .in .5i
- .ta \w'frank,minjarez 'u \w'frank,minjarez = Frank Minjarez 'u
- # Mail aliases for Dave Taylor
- # Friends from UCSD
- addie = Addie Silva = ad...@hp-sdd.SDD.HP.COM
- frank,minjarez = Frank Minjarez = Minjare...@dockmaster.ddn.mil
- pizzini = Ken Pizzini = hplabs!ucbvax!ucdavis!pai!ken
- george = Burdell; George P., Famous GT Guy = gbur...@matd.gatech.edu
- .ft 1
-
- .in 0
- .fi
- Note that the alias for Frank Minjarez has two \f2aliasnames\f1 associated
- with it, \f2frank\f1 and \f2minjarez\f1.
- Also notice that the first and second aliases
- use the Internet style naming convention of \f2user@machine\f1
- whereas the third uses the \f2uucp\f1 notation of \f2machine!user\f1.
- The fourth alias illustrates two features for the \f2username\f1
- field. An individual's name can be entered in the form of
- \f2lastname; firstname, comment\f1 which allows the alias system to be able
- to sort alias names on a last name basis. Additionally, any
- text after the comma is treated as a comment. It is stored in
- the alias file and displayed on the alias menu but will not
- appear in the comment field (between the parentheses) in the header
- of a message. This allows you to enter useful notes about an
- individual that you would not otherwise want to include in the
- \f3To:\f1 header of a mail message.
- .sp
- For the most part, the notational format is transparent within the
- alias file \(em the only time it \f2does\f1 make a difference
- is if you have to specify more than the machine that the user is
- receiving mail on (as in the third example above).
- .sp
- Suffice to say that if you must specify any sort of uucp route
- that you should use the uucp notation as much as possible to ensure
- that the system expands the correct machine name. Similarly, if
- you're bouncing mail through different Internet sites (to
- get to a foreign system, as in the example below) you should use the
- notation that system expects, e.g.:
-
- .ft CW
- .zf
- .ti .5i
- listserv%byuadmi...@rugters.edu
- .ft 1
- .sp
- .hn 1 Group Aliases
-
- After the confusion of user aliases, group aliases are even more
- fun! For the most part the notation is very similar:
-
- .nf
- .ti .5i
- \f2aliasname list\f1 = \f2groupname\f1 = \f2address list\f1
- .fi
-
- Where \f2aliasname list\f1 and \f2groupname\f1 are exactly equivalent
- to the corresponding fields in user aliases.
- .sp
- The interesting part is the \f2address list\f1 field; this
- field is actually in the same notation as the aliasname list (i.e.,
- a list of addresses separated by commas),
- so it's really quite easy to create.
- It's best to illustrate by example:
-
- .ft CW
- .zf
- .nf
- .in .5i
- friends, mypals = The Gang of Six = joe, larry, mary, joanna,
- \h'\w'friends, mypals = The Gang of Six = 'u'nancy, michael
- .ft 1
- .in 0
- .fi
-
- Notice that you can continue onto as many lines as you'd like so
- long as each additional line starts with either a \f2<space>\f1 or a
- \f2<tab>\f1 character.
- .sp
- At times it may be desirable to send a message to everyone in
- the group except one or two people. This can be accomplished by
- adding the individuals' actual IDs to the \f3To:\f1 list, preceded
- by a minus sign (\*q\-\*u). For example, if you were having a surprise
- party for \f2nancy\f1 from the above group and you wanted to discuss the
- details with the others, you could mail the message to:
-
- .ft CW
- .zf
- .nf
- .in .5i
- friends \-nancy
- .ft 1
- .in 0
- .fi
-
- Unlike in prior versions of Elm, group alias addresses need not
- be \f2previously defined aliases\f1 or valid mail addresses on
- the current machine. Any valid delivery address, local user, or
- prior user or group alias may now be part of a group alias
- \f2address list\f1.
- .sp
- .hn 1 System Aliases
-
- System aliases are functionally equivalent to the individual Elm
- alias lists each Elm user has (both user aliases and group aliases)
- but are \f2read only\f1 for everyone but the Elm administrator. The
- format of the file is identical to the users' files, and the only difference is
- that this file is expected to be located in the directory that contains
- the \f3system_hash_file\f1 and \f3system_data_file\f1 files (see the
- \f2Elm Configuration Guide\f1 for more details on these variables).
- .sp
- Simply create the system alias file in the specified directory
- as you would a normal alias file, and install it using the newalias
- command with the -g option (see the following section for more details
- on that). Voila!!
- .sp
- .hn 1 Editing and Installing New Aliases
-
- To install new aliases, you need merely to create, or modify,
- the file \f2$HOME/.elm/aliases.text\f1 until you're
- satisfied with it and it meets the requirements discussed above.
- You can then try to install it with the command:
-
- .ti .5i
- $ \f3newalias\f1
-
- which either reports the number of aliases installed
- or the errors encountered trying to parse and store the
- given alias list.
- .sp
- Note that blank lines are no problem and that comments are not only
- allowed but actually encouraged, and must have \*q#\*u as the first
- character of each comment line.
- .sp
- .hn 1 Other Stuff not Covered Yet
-
- Probably the biggest question you have in your mind right now
- is \*QBut how the heck does this relate to my existing \f2Berkeley Mail\f1
- aliases and the lower-level \f2sendmail\f1 alias system?\*U Well,
- rest assured that if you \f2really\f1 want to have
- your aliases down in the transport you can. No problem.
- .sp
- And for those ex-\f2Berkeley Mail\f1 fans, you can translate your
- aliases into the format that Elm wants by running them
- through the \f2awk\f1 script listed in the appendix.
- .sp
- Finally, if you have any problems or questions, try looking in
- the \f2newalias\f1 manual entry.
- .bp
- .ce 99
- \f3Appendix One
- An \f2awk\fP Script for Translating Aliases
- from a Berkeley Mail \f2.mailrc\fP File
- to an Elm \f2.elm/aliases.text\fP File\f1
- .ce 0
- .sp
- .nf
-
- .ta .5i
- .ft CW
- .zf
- BEGIN { print "# Elm .elm/aliases.text file, from a .mailrc file..."
- print ""
- }
- next_line == 1 {
- next_line = 0;
- group = ""
- for (i = 1; i <= NF; i++) {
- if (i == NF && $i == "\\\\") sep = ""
- else sep = ", "
- if ($i == "\\\\") {
- group = sprintf("%s,", group)
- next_line = 1;
- }
- else if (length(group) > 0)
- group = sprintf("%s%s%s", group, sep, $i);
- else
- group = $i;
- }
- print "\\t" group
- }
- $1 ~ /[Aa]lias | [Gg]roup/ {
- if ( NF == 3)
- print $2 " = user alias = " $3;
- else {
- group = ""
- for (i = 3; i <= NF; i++) {
- if (i == NF && $i == "\\\\") sep = ""
- else sep = ", "
- if ($i == "\\\\") {
- group = sprintf("%s,", group)
- next_line = 1;
- }
- else if (length(group) > 0)
- group = sprintf("%s%s%s", group, sep, $i);
- else
- group = $i;
- }
- print $2 " = group alias = " group;
- }
- }
-
- .ft 1
- .fi
- Note: this script is contained in the release as \f2utils/mailrc.awk\f1.
--- 0 ----
Index: elmME+.2.5.alpha1-cvs/doc/Config.guid
*** elmME+.2.5.alpha0/doc/Config.guid 2002-01-26 13:14:45.000000000 +0200
--- /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
***************
*** 1,390 ****
- .\" @(#)$Id: Config.guid,v 1.1.1.1 1998/10/15 15:36:39 hurtta Exp $
- .\"
- .\" A guide to the ELM alias system and so on.
- .\" format with:
- .\" 'troff tmac.n Config.guid > Config.fmtd'
- .\"
- .\" (C) Copyright 1986,1987 Dave Taylor
- .\" (C) Copyright 1988-1992 Usenet Community Trust
- .\"
- .\"
- .\"
- .\"
- .tm Have we been run through "tbl" first?? I hope so!
- .po 1i
- .ds h0
- .ds h1
- .ds h2
- .ds f0
- .ds f1
- .ds f2
- .nr Hy 1
- .nr Pt 1
- .nr Pi 0
- .lg 0
- .nf
- .na
- .rs
- .za
- .sp |3.0i
- .ce 99
- .ps 20
- \f3Elm Configuration Guide\f1
- .sp 4
- .ps 12
- .ss 14
- .vs 14
- \f2How to install and customize the Elm mail system\f1
- .sp 3
- The Elm Mail System
- (Version 2.4)
- .sp 2
- Syd Weinstein, Elm Coordinator
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp |9.0i
- \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
- \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
- .ps 10
- .ss 12
- .vs 12
- .fi
- .ad
- .bp 1
- .fi
- .ad
- .bp 1
- .sv 5v
- .ps 14
- \f3Elm Configuration Guide\f1
- .ds h0 "Elm Configuration Guide
- .ds h1
- .ds h2 "Version 2.4
- .ds f0 "October 1, 1992
- .ds f1
- .ds f2 "Page %
- .sp
- .ps 10
- .ss 12
- .vs 12
- (The Elm Mail System, \*(h2)
- .sp
- \*(f0
- .sp 2
- .sp 2
- Syd Weinstein
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp 2
- Derived from
- \*QThe Elm Mail System, Version 2.0\*U
- by
- Dave Taylor
- Intuitive Systems
- Mountain View, California
- email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
- .ce 0
- .sp 3
- This document is intended as a supplement to the \f2Elm Users Guide\f1
- and \f2Elm Reference Guide\f1
- and should be of interest mainly to people at a site installing,
- maintaining, and/or modifying the source code to the Elm mail system.
- .sp
- It is \f2required\f1 that installation be done by using the
- \f2Configure\f1 script supplied with the system. Please see the
- file \f2Instruct\f1 for further information on running \f2Configure\f1.
- .sp
- The remainder of this document discusses the various questions
- asked by the \f2Configure\f1 script and the
- options available via direct editing of various files and
- parameters. As indicated above, almost all of the sites that install
- Elm should find the \f2Configure\f1 script more than
- sufficient.
- .hu Using \f2Configure\fP
-
- \f2Configure\fP is a shell script that automatically determines the
- type of system it is running on and tunes the parameters of Elm to fit
- that system and its environment. Where the installer has a choice, it
- asks questions of the installer. \f2Configure\fP provides its own
- instructions when run, so they are not repeated here. However, when
- the installer is presented with a choice, this next section explains
- some of the options available. Not all the questions or options to
- those questions are explained here.
- .sp
- .ne 6
- \f3Use fcntl style locking?\f1
- .br
- \f3Use flock style locking?\f1
- .br
- \f3Use dotlock (.lock) style locking?\f1
- .sp
- Elm, like all Mail User Agents (MUAs), has times when it needs exclusive
- access to the mail spool file. There are three methods of locking the
- mail spool file: \f2.lock\f1 files, \f2fcntl\f1, and \f2flock\f1.
- \&\f2.lock\f1 files is the original method,
- and is used by MUAs and Mail Transport Agents (MTAs). Whenever
- possible \f2.lock\f1 files should be enabled to assure backwards
- compatibility with older MUAs and MTAs.
- .sp
- BSD systems introduced \f2flock\f1 style locking. It uses the
- \f2flock(2)\f1 system call
- to lock the file on the local node. System V later introduced
- \f2fcntl\f1 style locking, which can also use a protocol for remote locking
- across the network. Where both styles are available, it is advisable
- to use both, unless you are sure that only one is in use at your site.
- Under many System V Release 4 (SVR4) systems, they both use the same underlying
- system call (\f2flock\f1 is translated into \f2fcntl\f1 style locking),
- so for that version of
- .ux ,
- \f2flock\f1 is not needed and \f2fcntl\f1 style alone can be used.
- .sp
- .ne 4
- \f3Enable calendar feature?\f1
- .sp
- Elm has a feature to take specially marked lines within mail messages
- and add them to a file for use by the system calendar program. The
- command to do this extraction needs to be enabled to work. There is
- also a follow on question regarding the name of the calendar file:
- .sp
- .ti .5i
- \f3Default calendar file?\f1
- .sp
- which is usually \f2calendar\f1 on most systems. This file resides in
- the user's home directory, not their \f2.elm\f1 directory.
- .sp
- .ne 5
- \f3Does your /etc/passwd file keep full names in Berkeley/V7 format (name
- first thing after \*q:\*u in GCOS field)?\f1
- .sp
- Elm uses the full name from the password file if it is available.
- There are two major ways this name is stored. Berkeley/V7 systems
- place the name as the entire GCOS field string, that is it starts
- directly after the \*q:\*u that delimits the fields. USG (UNIX Systems
- Group, or AT&T) systems put the user's name after a department number
- and separate it from that number by a hyphen (\*q\-\*u).
- The end of the user's full
- name in these systems is a \*q(\*u. Look at your \f2/etc/passwd\f1 file and if
- either version applies, answer \f2yes\f1 to this question; if neither
- applies, answer \f2no\f1. Elm can still get the user's name from the
- \&\f2.fullname\f1 file in their home directory.
- .sp
- .ne 6
- \f3Every now and then someone has a gethostname()/uname() that lies about
- the hostname but can't be fixed for political or economic reasons.
- Would you like to pretend gethostname()/uname() isn't there and maybe
- compile in the hostname?\f1
- .sp
- Elm needs to know the correct name of the host on which it is executing
- to be able to create the proper headers for the outbound mail. Some
- systems use one name for uucp and another name for the system and
- others just don't reply to the subroutines with the proper name. In
- this case it will be necessary to compile in the name. In all other
- cases this should not be needed. It is provided just in case there is
- a problem with your system.
- .sp
- .ne 4
- \f3Honors Content-Length: header?\f1
- .sp
- Starting with SVR4, many of the MTAs are
- binary transparent. This allows for sending binary messages, such as
- encoded voice or graphics. In doing so, they no longer can tolerate changes in
- the message content by the mailers to aid in determining the start of
- the next message. To solve this problem the \f3Content-Length:\f1 header was
- added. Elm generates the \f3Content-Length:\f1 header, but to make full use
- of it, Elm should also not escape such sequences as \*QFrom \*U at the
- start of a line of the message. If your MTA (mailer)
- does honor the \f3Content-Length:\f1 header for determining the start of the
- next message, answer this question \f2yes\f1.
- .sp
- Along the same lines, but now obsolete and being phased out, is a
- problem where an MTA thinks a message is terminated
- by a single lone period on a line. \f2sendmail\f1 has an option to turn off
- this behavior and this option is set by default in \f2Configure\f1. If your
- mailer cannot turn off this option, add a line to \f2sysdefs.SH\f1 to define
- the symbol \f3NEED_LONE_PERIOD_ESCAPE\f1. This symbol turns a line with
- a lone period into a period and a blank to avoid this problem.
- This symbol is ignored if the \*QHonors Content-Length: header?\*U question
- is answered \f2yes\f1.
- .sp
- .ne 4
- \f3Am I going to be running as a setgid program?\f1
- .sp
- On USG and many other type systems, access to the mailboxes and
- the mailbox directory is via the group permissions. The MUAs,
- such as Elm, need write access in this directory to be able
- to move the mailbox around for internal editing and to create lock
- files. If the permissions on your mailbox directory are \*Qdrwxrwxr-x\*U
- (no write access for \*Qothers\*U),
- then Elm needs to be a \f2setgid\f1 program.
- .sp
- .ne 4
- \f3What is the default editor on your system?\f1
- .sp
- If no editor is specified in the user's \f2.elm/elmrc\f1 file, this is
- which editor to use. The editor is used to compose outbound mail
- messages.
- .sp
- .ne 4
- \f3What pager do you prefer to use with Elm?\f1
- .sp
- This is the standard pager to use for reading messages. Besides the
- usual system pagers, two Elm specific internal options exist: \f2builtin\f1
- and \f2builtin+\f1. The \f2builtin\f1 pager is faster to execute but much less
- flexible than the system provided pagers. The \f2builtin+\f1 pager just clears
- the page before displaying the next page, otherwise the two versions
- are identical.
- .hu Other Configurable Parameters
- The following parameters rarely need to be changed, but are provided if
- you need them. \f2Configure\fP does not prompt for their values. To
- change them, edit the \f2hdrs/sysdefs.h\f1 file directly after running
- \f2Configure\f1.
- .lp MAX_IN_WEEDLIST 1.0i
- The maximum number of headers that can be specified in the weedout
- list of the \f2.elm/elmrc\f1 file. A suggested alternative approach if this
- number is too small is to specify initial substrings in the file
- rather than increasing the number. For example, say you want to
- weedout the headers \*QLatitude:\*U and \*QLatitudinal-Coords:\*U, you
- could simply specify \*QLatitud\*U and match them both! Furthermore
- you could also specify headers like \*QX\-\*U and remove all the user
- defined headers!
- .lp MAX_HOPS 1.0i
- When using the \f3group reply\f1 command, this is the maximum number of
- hops that a message can have taken. This is used to try to optimize the
- return address (remove cyclic loops and so on) and regular use
- should show that the default of 35 is plenty more than you'll
- ever need!
- .lp system_text_file 1.0i
- This is the source text file for the system level aliases.
- See either the \f2newalias\f1 man page or \f2The Elm
- Alias System Users Guide\f1 for further details.
- .lp system_hash_file 1.0i
- This is the file that contains the hashed version of the system
- aliases generated by \f2newalias\f1.
- .lp system_data_file 1.0i
- This is the other file the \f2newalias\f1 command installs in the system
- alias area and contains the actual addresses for each of the aliases
- contained in the hashed data file.
- .lp DEBUGFILE 1.0i
- The name of the file to put in the user's home directory if they choose to
- use the \f3\-d\f1 (\f3debug\f1) option.
- .lp OLDEBUG 1.0i
- The name of the file to save the previous debug output as (this feature
- was added to ensure that users wanting to mail bug reports wouldn't
- automatically overwrite the debug log of the session in question).
- .lp temp_lock_dir 1.0i
- Directory for lock files for XENIX.
- .lp temp_file 1.0i
- Temporary file for sending outbound messages.
- .lp temp_form_file 1.0i
- A place to store temporary forms (for Forms Mode) while answering them.
- .lp temp_mbox 1.0i
- Place to keep a copy of the incoming mailbox to avoid collisions with newer
- mail.
- .lp temp_print 1.0i
- File to use when creating a printout of a message.
- .lp temp_edit 1.0i
- File to use when editing the mailbox file on XENIX.
- .lp temp_uuname 1.0i
- Where to redirect output of the \f2uuname\f1 command.
- .lp mailtime_file 1.0i
- File to compare date to to determine if a given message is new
- since the last time the mail was read or not.
- .lp readmsg_file 1.0i
- File to use when communicating with the \f2readmsg\f1 program (see
- that program for more information).
- .lp smflags 1.0i
- Defines the options to hand to \f2sendmail\f1 if and when the program
- chooses to use it.
- .lp smflagsv 1.0i
- Defines the options to hand to \f2sendmail\f1 in verbose voyeur mode.
- .lp mailer 1.0i
- If you don't have \f2sendmail\f1, this is the mailer that'll be used.
- .lp helpfile 1.0i
- The help file name prefix.
- .lp ELMRC_INFO 1.0i
- The file containing textual messages associated with each
- Elm variable setting in the user's \f2.elm/elmrc\f1
- file. This is used when the user chooses to save the
- options from within the main program.
- .lp elmrcfile 1.0i
- The name of the automatic control file within the \f2.elm\f1
- directory (by default \f2elmrc\f1).
- .lp old_elmrcfile 1.0i
- When a new \f2elmrc\f1 file is saved, the old one is also saved by
- renaming it to whatever this identifier is set to.
- .lp system_rc_file 1.0i
- The name of the global \f2elmrc\f1 file (default is \f2$lib/elm.rc\f1). This
- is where the system administrator puts global default values for any
- parameters controlled by the \f2.elm/elmrc\f1 file.
- .lp mailheaders 1.0i
- The name of the optional file that users may have that is
- included in the headers of each outbound message.
- .lp dead_letter 1.0i
- If the user decides not to send a message it is instead saved
- to this filename in their home directory.
- .lp unedited_mail 1.0i
- In the strange case when the mailer suddenly finds all the directories
- it uses shut off (like \f2/usr/mail\f1 and \f2/tmp\f1)
- then it'll put the current
- mailbox into this file in the user's home directory.
- .lp newalias 1.0i
- How to install new aliases (note that you MUST have the \f3\-g\f1 option!).
- .lp readmsg 1.0i
- What the \f2readmsg\f1 program is installed as.
- .hu Runtime configuration \(em the global \f2$lib/elm.rc\fP file
-
- No global default file is provided as part of the installation of
- Elm. If you wish to override any default parameters for all
- users, create a file as defined in the \f3system_rc_file\f1 above. An
- easy way to create it is to copy a saved \f2.elm/elmrc\f1 and edit it
- to remove all user-specific parameters. Of particular interest are
- three additional parameters you may set: \f3hostdomain\f1, \f3hostfullname\f1,
- and \f3hostname\f1. See \f3String Variables\f1 in section 2
- of the \f2Elm Reference Guide\f1 for details on these variables.
- .hu When \f2Configure\fP Fails
-
- The \f2Configure\f1 script has run successfully tens of thousands of
- times. But maybe your system is the one in ten thousand that will
- confuse it. For example, \f2Configure\f1 assumes that if your system
- has a feature it would like, then it should be used. If vendors never
- made mistakes, then that might be a good assumption. In reality,
- \f2Configure\f1 might want to use a feature you'd prefer it didn't.
- .sp
- When \f2Configure\f1 completes its examination of your system, it
- gives you a final chance to make changes. When \f2Configure\f1 asks
- .sp
- .ti .5i
- \f3If you need to edit config.sh, do it as a shell escape here:\f1
- .sp
- you may briefly jump out of \f2Configure\f1 to make changes. For
- example, if \f2vi\f1 is your preferred editor, type \f3!vi config.sh\f1.
- .sp
- Unfortunately, \f2Configure\f1 makes the same mistakes every time it
- runs. This means that if you ever apply updates or changes to the
- Elm system and rerun \f2Configure\f1, you will have to manually make
- the same configuration changes. Or more likely, you'll forget that
- the changes are required.
- .sp
- The solution to this problem is to create a \f2config.over\f1 file
- in the Elm base directory. This file may contain any valid \f2sh\f1
- commands, and is loaded by \f2Configure\f1 immediately before the
- \f2config.sh\f1 file is created.
- For example, supposed that \f2Configure\f1 creates a \f2config.sh\f1
- file with the definition
- .sp
- .ti .5i
- \f3d_feature=define\f1
- .sp
- but instead you want it to say
- .sp
- .ti .5i
- \f3d_feature=undef\f1
- .sp
- All you need to do is create a \f2config.over\f1 file and put that
- final line in it.
--- 0 ----
Index: elmME+.2.5.alpha1-cvs/doc/Elm.cover
*** elmME+.2.5.alpha0/doc/Elm.cover 2002-01-26 13:14:45.000000000 +0200
--- /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
***************
*** 1,69 ****
- .\" @(#)$Id: Elm.cover,v 1.2 1998/10/20 19:57:19 hurtta Exp $
- .\"
- .\" Cover sheet for the ELM mail system...
- .\" format with
- .\" troff tmac.n Elm.cover > Coversheet.fmtd'
- .\"
- .\" Elm is now in the public trust.
- .\"
- .\" (C) Copyright 1986,1987 Dave Taylor
- .\" (C) Copyright 1988-1992 Usenet Community Trust
- .\"
- .\"
- .po 1i
- .ds h0
- .ds h1
- .ds h2
- .ds f0
- .ds f1
- .ds f2
- .nr Hy 1
- .nr Pt 1
- .nr Pi 8
- .lg 0
- .nf
- .na
- .rs
- .za
- .sv |2.0i
- .ce 99
- .ps 28
- \fBThe \s30Elm\s28 Mail System\fR
- .sp 2
- .ps 18
- .ss 16
- .vs 20
- \fIA Replacement Mailer for All Unix Systems\fR
- .sp 3
- \fBUSENET VERSION\fR
- .sp
- (2.4 Release System)
- .ps 14
- .vs 16
- .sp
- Syd Weinstein, Elm Coordinator
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp 5
- .ps 10
- .ss 10
- .vs 12
- Derived from
- \*QThe Elm Mail System, Version 2.0\*U
- by
- Dave Taylor
- Intuitive Systems
- Mountain View, California
- email: taylor\s11@\s10intuitive.com \ or \ limbo!taylor
-
- \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
- \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
- .sp
- .fi
- NOTICE: You may, without additional permission from the authors, distribute
- copies of the Elm Documentation, with or without additions developed by
- you or by others at no charge or at a charge that covers the cost of
- reproducing the copies, provided that the Elm copyright notice is retained.
--- 0 ----
Index: elmME+.2.5.alpha1-cvs/doc/elmrc-info
*** elmME+.2.5.alpha0/doc/elmrc-info 2004-05-16 17:43:45.000000000 +0300
--- elmME+.2.5.alpha1-cvs/doc/elmrc-info 2004-07-03 18:23:02.000000000 +0300
***************
*** 1,4 ****
! #@(#)$Id: elmrc-info,v 1.61.2.12 2004/05/15 20:11:35 hurtta Exp $
# Elm Version ME+ 2.5
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
--- 1,4 ----
! #@(#)$Id: elmrc-info,v 1.61.2.13 2004/07/03 15:23:02 hurtta Exp $
# Elm Version ME+ 2.5
#
#$HDR - magic line to mark comments to put at top of user's elmrc file.
***************
*** 707,712 ****
--- 707,720 ----
# messages so that the receiver can correctly view the message!
# OFF: Elm will include the forwarded message in your editor instead
# of making it an separate mime body part.
+ #
+ # See also: askmimeforward
+
+ askmimeforward
+ # This option controls is forwarding as message/rfc822 prompted or not
+ # if set, option mnimeforward controls only default value for prompt
+ #
+ # See also: mimeforward
quoteforward
# Forwarded messages are quoted like replies, rather than included
***************
*** 747,752 ****
--- 755,763 ----
# none Don't call gpg
# /path Call gpg via that path, if it is executable
+ pgp-interactive
+ # Run pgp/gpg signing and encryption always on interactive mode
+
pgp-sign-type
# Specifies content-type for pgp signed messages.
# Possible values are: application/pgp, text/plain, text/x-pgp
Index: elmME+.2.5.alpha1-cvs/doc/elmregister.1
*** elmME+.2.5.alpha0/doc/elmregister.1 2004-05-16 17:43:45.000000000 +0300
--- elmME+.2.5.alpha1-cvs/doc/elmregister.1 2004-05-22 17:50:34.000000000 +0300
***************
*** 26,31 ****
--- 26,33 ----
.br
.B #LIB#/elmregister copy
.br
+ .B #LIB#/elmregister copydoc
+ .br
.B #LIB#/elmregister
.I command
***************
*** 105,108 ****
.SH BUG REPORTS TO
Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 2003 by Kari Hurtta
--- 107,110 ----
.SH BUG REPORTS TO
Kari Hurtta e...@elmme-mailer.org
.SH COPYRIGHTS
! \fB\*(ct\fRCopyright 2003, 2004 by Kari Hurtta
Index: elmME+.2.5.alpha1-cvs/doc/Form.guide
*** elmME+.2.5.alpha0/doc/Form.guide 2002-01-26 13:14:45.000000000 +0200
--- /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
***************
*** 1,402 ****
- .\" @(#)$Id: Form.guide,v 1.2 1998/10/20 19:57:19 hurtta Exp $
- .\"
- .\" A guide to using the Elm Forms mode
- .\" format with:
- .\" 'troff tmac.n - > Forms.format'
- .\"
- .\" Elm is now in the public trust.
- .\"
- .\" Copyright (c) 1988-1992 USENET Community Trust
- .\" Copyright (c) 1986,1987 Dave Taylor
- .\"
- .\"
- .\"
- .po 1i
- .ds h0
- .ds h1
- .ds h2
- .ds f0
- .ds f1
- .ds f2
- .nr Hy 1
- .nr Pt 1
- .nr Pi 0
- .lg 0
- .nf
- .na
- .rs
- .\" Define the big box macro for troff
- .de eb
- .sp -1
- .nf
- .ie t \{\
- \h'-.5n'\L'|\\nau-1'\l'\\n(.lu+1n\(ul'\L'-|\\nau+1'\l'|0u-.5n\(ul'
- .\}
- .el \{\
- \h'-.5n'\l'\\n(.lu+1n'
- .\}
- .fi
- ..
- .sv |3.0i
- .ce 99
- .ps 20
- .ss 18
- .vs 12
- \f3Elm Forms Mode Guide\f1
- .sp 3
- .ps 12
- .ss 14
- .vs 14
- \f2What Forms Mode is, how to use it to create
- custom forms, how to reply to forms, and how to
- use it for AT&T Mail messages\f1
- .sp 3
- The Elm Mail System
- (Version 2.4)
- .sp 2
- Syd Weinstein, Elm Coordinator
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp |9.0i
- \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
- \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
- .fi
- .ad
- .bp 1
- .sv 5v
- .ps 14
- .ss 12
- .vs 16
- .sp 2
- \f3A Guide to Forms Mode in Elm\f1
- .ds h0 "Forms Mode Guide
- .ds h1
- .ds h2 "Version 2.4
- .ds f0 "October 1, 1992
- .ds f1
- .ds f2 "Page %
- .sp
- .ps 10
- .ss 12
- .vs 12
- (The Elm Mail System, \*(h2)
- .sp
- \*(f0
- .sp 2
- Syd Weinstein
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp 2
- Derived from
- \*QThe Elm Mail System, Version 2.0\*U
- by
- Dave Taylor
- Intuitive Systems
- Mountain View, California
- email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
- .ce 0
- .sp 3
- While there are a lot of mail systems that allow the transmission
- of text and primitive pictures, to send and reply to more complex
- forms is simply not possible. Elm, however, took
- the forms mode implemented as part of the AT&T Mail package and has
- expanded on it to be a smoothly fit part of the overall mail system.
- .sp
- Forms mode gives you the ability to send \*Qtemplate\*U files to people
- and receive the filled-in replies.\s-2\u1\d\s0
- .fn
- 1. Note that this feature assumes that the person on the other end is
- also using the Elm mail system, that both yourself and the person on
- the other end have their user levels set to something other than
- \f2Beginner\f1 (\f30\f1) and the \f3forms\f1 variable set ON in
- their \f2.elm/elmrc\f1 files.
- .ef
- Let's look at an example right off.
- .sp
- Say we were going to use computer mail as a way to file defects with
- software. There is a certain amount of information we want to be able
- to collect when each report is made, and if it is in a specific format
- we can use programs to file the defects upon receipt.
- .sp
- The form we'll try to emulate starts out looking like:
- .\" A manual page break has been done because the 'sd' macro doesn't like
- .\" coming up right after the footer or just doesn't like going to a new
- .\" page by itself. The bug has been reported.
- .bp
- .ft CW
- .zf
- .sd c
- .mk a
- .sp
- .tl ''Defect Reporting Form''
- .sp
- .tl 'Program:\ \l'2.3i-\w'Program:\ 'u'''Version:\ \l'1.7i-\w'Version:\ 'u''
- .tl 'Operating\ System:\ \l'2.3i-\w'Operating\ System:\ 'u'''Version:\ \l'1.7i-\w'Version:\ 'u''
- .sp
- .tl 'Defect\ Type:\ \l'2.3i-\w'Defect\ Type:\ 'u''''
- .sp
- .tl 'Date\ Found:\ \l'2.3i-\w'Date\ Found:\ 'u'''By\ Whom:\ \l'2.3i-\w'By\ Whom:\ 'u'\h'.2i''
- .tl 'Date\ Reported:\ \l'2.3i-\w'Date\ Reported:\ 'u'''Phone:\ \l'2.3i-\w'Phone:\ 'u'\h'.2i''
- .sp
- .tl 'Description:\ \l'6.4i-\w'Description:\ 'u''''
- .tl '\l'6.4i''''
- .tl '\l'6.4i''''
- .sp
- .eb
- .ed
- .ft 1
- .rs \" restore spacing from ed macro
- .sp
- This form can actually be created almost exactly as listed above in
- the Elm mail system by using your standard editor and can then
- be mailed about as needed.
- .sp
- Let's say that we want a bit more information, however, especially with
- fields like \f2Defect Type\f1, we want to list all the recommended answers.
- To create the actual form, we need merely to replace the underlines in
- the above form with spaces. The multi-line comments can simply be
- indicated by a \*q:\*u by itself on a line:
-
- .ft CW
- .zf
- .sd c
- .mk a
- .sp
- .tl ''Defect Reporting Form''
- .sp
- .tl 'Program:''Version:\h'1.7i-\w'Version:'u''
- .tl 'Operating System:''Version:\h'1.7i-\w'Version:'u''
- .sp
- .tl '(Valid Defect Types are: user-error, doc-error, fatal, other)'''
- .tl 'Defect Type:'''
- .sp
- .tl 'Date Found:''By\ Whom:\h'2.3i-\w'By\ Whom:'u''
- .tl 'Date Reported:''Phone:\h'2.3i-\w'Phone:'u''
- .sp
- .tl 'Description'''
- .tl ':'''
- .sp
- Thank you for filling in this form.
- .sp 2
- .eb
- .ed
- .ft 1
- .rs \" restore spacing from ed macro
- .sp
- As you can see, it is quite simple to create forms!!
- .sp
- Now that you have an idea what we're talking about, let's actually officially
- define the system.
- .br
- .ne 5
- .hu Forms Mode Specification
-
- [Note that this is all taken from the document \f2Standard for Exchanging
- Forms on AT&T Mail\f1, Version 1.9 of 6/7/86, from AT&T.]
- .sp
- The forms mode is really quite simple. Simple enough that it is amazing
- that it hadn't been implemented before AT&T Mail came along!!
- .sp
- In a nutshell, each field is delimited by a \*q:\*u followed by a number of
- blank spaces or tabs that represent the valid size for that field. That
- is, if we have a line in the form like:
- .sp
- .nf
- .ft CW
- .zf
- .tl ''Phone (area-code):\0\0\0\0\0Number:\0\0\0\0\0\0\0\0\0\0''
- .ft 1
- .fi
- .sp
- The area-code field is limited to three characters and the number to nine
- (this is kind of hard to see with the proportionally spaced formatted copy,
- alas).
- The only exception to the rule is that a \*q:\*u by itself on a line represents
- a field that is as large as the user entering the data desires.
-
- The actual form that is transmitted, in AT&T Mail parlance, is a \*QSIMPLE\*U
- forms handler message (as opposed to the \*QADVANCED\*U handler). This means
- that it contains three sections:
- .sp
- .ne 8
- .nf
- .in .5i
- .ft 2
- The Message Header
- .ft CW
- .zf
- [\&OPTIONS-SECTION]
- ***
- [\&FORMS-IMAGE]
- ***
- [\&RULES-SECTION]\f1
- .in 0
- .fi
- .sp
- Elm generates form messages with the \f2OPTIONS-SECTION\f1 filled out,
- but ignores it when receiving mail. The filled out \f2OPTIONS-SECTION\f1 is:
- .sp
- .ft CW
- .zf
- .nf
- .in .5i
- WIDTH=80
- TYPE=SIMPLE
- OUTPUT=TEXT\f1
- .in 0
- .fi
- .sp
- The \f2FORMS-IMAGE\f1 section is that described above, i.e. prompting
- text followed by a \*q:\*u, followed by spaces or tabs.
- The \f2RULES-SECTION\f1 can
- contain explicit rules about the possible values of each field, but
- this is currently ignored by Elm, being a \*QSIMPLE\*U forms mode
- mail system.
- .sp
- Forms also have the header \*QContent-Type: mailform\*U to indicate to the
- mail system (either Elm or AT&T Mail) that a form is being sent.
- .sp
- Elm further indicates that a form has been received by having an
- \*qF\*u as the status character in the header display section (instead of
- \*qN\*u for new, etc).
- .br
- .ne 5
- .hu Composing and Sending a Form
-
- The first step to enable sending forms is to change the setting of
- the variable \f3forms\f1 in your \f2.elm/elmrc\f1 file to ON:
- .sp
- .nf
- .ti .5i
- forms = ON
- .fi
- .sp
- The next step is to send the message to someone using the \f3m\f1 (\f3mail\f1)
- command, which drops you into an editor. Type in the form as
- indicated above, with appropriate colons and comments, and end the entry
- by leaving the editor.
- .sp
- The prompt is now:
- .sp
- .nf
- .ft CW
- .zf
- .tl ''Choose: E)dit msg, edit H)eaders, M)ake form, S)end or F)orget : @''
- .ft 1
- .fi
- .sp
- so we choose \f3m\f1 \(em \f3make form\f1. Elm then either
- rewrites the prompt without the \*QM)ake form\*U option, indicating that
- the form has been accepted, or indicates the problem and gives you
- a chance to correct it.
- .sp
- Once it has been accepted, simply use the \f3s\f1 \(em \f3send message\f1 \(em
- command and it's off!
- .sp
- Note that you cannot reply to a message with a form.
- .br
- .ne 6
- .hu Replying to a Form
-
- Let's reply to the form message we generated now. The header page of the
- Elm mail system indicates that the message is a form by having
- an \*qF\*u next to it. So we use \f3r\f1 to reply and the screen is immediately
- cleared and we're prompted, field by field, for the data requested.
- Each field has underscores in the input area to indicate the size field that
- is expected.
- .sp
- After answering all the questions we'll have a screen that looks like:
-
- .ft CW
- .zf
- .sd c
- .mk a
- .sp
- .tl ''Defect Reporting Form''
- .sp
- Program: \f3The Elm Mail System\f1\l'3i-\w'\f3The Elm Mail System'u'
- Version: \f31.5\f1\l'3i-\w'\f31.5'u'
- Operating System: \f3HP-UX\f1\l'3i-\w'\f3HP-UX'u'
- Version: \f35.141 C\f1\l'3i-\w'\f35.141 C'u'
- .sp
- (Valid Defect Types are: user-error, doc-error, fatal, other)
- Defect Type: \f3fatal\f1\l'5i-\w'\f3fatal\f1'u'
- .sp
- Date Found: \f310/9/86\f1\l'3i-\w'\f310/9/86\f1'u'
- By Whom: \f3Dave Taylor\f1\l'3i-\w'\f3Dave Taylor\f1'u'
- Date Reported: \f310/9/86\f1\l'3i-\w'\f310/9/86\f1'u'
- Phone: \f3(415) 857\-6887\f1\l'3i-\w'\f3(415) 857-6887\f1'u'
- .sp
- Description
- (Enter as many lines as needed, ending with a \*q.\*u by itself on a line)
- \f3When running it on a CPM system I cannot compile successfully.\f1
- \f3.\f1
- Thank you for filling in this form.
- .tl ''Choose: E)dit form, edit H)eaders, S)end or F)orget : @''
- .sp
- .eb
- .ed
- .ft 1
- .rs \" restore spacing from ed macro
- .sp
- Quite simple. Notice, however, that the order of prompting is
- left-to-right on each line, so the fields, \f2By Whom:\f1 and
- \f2Phone:\f1, although placed in what seems like a logical place on the
- form, turn out to be confusing when filling in the received form since
- it isn't clear what \f2Phone:\f1 is being asked for because of the
- intervention of the \f2Date Reported:\f1 field.
- .sp
- The message that is actually sent out from this has the
- fields in a more acceptable format:
- .\" Force page break, as there seems to be a bug in the .sd macro
- .bp
- .\"
- .ft CW
- .zf
- .mk a
- .sp
- WIDTH=80
- TYPE=SIMPLE
- OUTPUT=TEXT
- ***
- .tl ''Defect Reporting Form''
- .sp
- .tl ' Program: The Elm Mail System''Version: 1.5\h'1.5i-\w'Version: 1.5'u''
- .tl ' Operating System: HP-UX''Version: 5.141 C\h'1.5i-\w'Version: 5.141 C'u''
- .sp
- .tl ' (Valid Defect Types are: user-error, doc-error, fatal, other)'''
- .tl ' Defect Type: fatal'''
- .sp
- .tl ' Date Found: 10/9/86''By Whom: Dave Taylor\h'2.3i-\w'By Whom: Dave Taylor'u''
- .tl ' Date Reported: 10/9/86''Phone: (415) 857-6887\h'2.3i-\w'Phone: (415) 857-6887'u''
- .sp
- .tl ' Description'''
- .sp
- When running it on a CPM system I cannot compile successfully.
- .sp
- .tl ' Thank you for filling in this form.'''
- ***
- .sp
- .eb
- .ft 1
-
- .hu Comments on Forms Mode
-
- As was said at the beginning, this way of sending about forms could
- prove to be very helpful and useful in a variety of contexts. On the
- other hand, until a more sophisticated forms language is used for the
- forms, this should be sufficient to embody the power of the idea.
- .sp
- I welcome any comments and thoughts on this system and also welcome
- possible enhancements.
- .sp
- I also gratefully thank Dale DeJager of AT&T Information Systems
- for sending me more
- information on AT&T Mail than I could possibly digest in any finite
- amount of time.
--- 0 ----
Index: elmME+.2.5.alpha1-cvs/doc/Makefile.SH
*** elmME+.2.5.alpha0/doc/Makefile.SH 2004-01-24 13:51:43.000000000 +0200
--- elmME+.2.5.alpha1-cvs/doc/Makefile.SH 2004-07-03 20:46:54.000000000 +0300
***************
*** 17,23 ****
cat >Makefile <<!GROK!THIS!
#!$make
#
! # $Id: Makefile.SH,v 1.30 2004/01/03 20:12:28 hurtta Exp $
#
# Makefile for the documentation of the ELM mail system
#
--- 17,23 ----
cat >Makefile <<!GROK!THIS!
#!$make
#
! # $Id: Makefile.SH,v 1.30.26.2 2004/07/03 17:46:54 hurtta Exp $
#
# Makefile for the documentation of the ELM mail system
#
***************
*** 32,39 ****
SUBS = 's"\#LIB\#"$lib"g; s"\#ETC\#"$etc"g;'
DEST = $bin
ECHO = $echo
- FORMATTER = $roff
- FORMATTER_OPTS = $roffopts
LIB = \$(ELM_ROOT)//$lib
LN = $ln
MAN = \$(ELM_ROOT)//$mansrc
--- 32,37 ----
***************
*** 68,92 ****
REGCATMAN = $regcatman
!GROK!THIS!
- if $test "$roff" != none ; then
- cat >>Makefile <<!GROK!THIS!
- # List of formatted guides (obsolete)
- FORMATTED_LIST = Alias.fmtd \
- Config.fmtd \
- Cover.fmtd \
- Form.fmtd \
- Ref.fmtd \
- Users.fmtd
-
- !GROK!THIS!
- else
- cat >>Makefile <<!GROK!THIS!
- # No formatted quides (obsolete)
- FORMATTED_LIST =
-
- !GROK!THIS!
- fi
-
if $test "$make_sets_make" != "$define" ; then
--- 66,71 ----
--- 282,318 ----
--- 321,354 ----
--- 371,425 ----
--- 432,447 ----
$(REG) link $? $@
$(CATMAN)/elmstringconvert$(CATMANEXT)$(SUFFIX): catman/elmstringconvert$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/prlong$(CATMANEXT)$(SUFFIX): catman/prlong$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmregister$(CATMANEXT)$(SUFFIX): catman/elmregister$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
$(CATMAN)/elmlibregister$(CATMANEXT)$(SUFFIX): catman/elmlibregister$(CATMANEXT)$(SUFFIX)
! $(REG) copydoc -m 444 $? $@
# Dependencies and rules for making catman pages
catman/answer$(CATMANEXT)$(SUFFIX): answer.1.subs
***************
*** 655,681 ****
true ; \
fi
- # Dependencies and rules for formatting guides
- documentation: $(FORMATTED_LIST)
-
- Alias.fmtd: Alias.guide
- $(TBL) $? | $(FORMATTER) $(FORMATTER_OPTS) tmac.n - > $@
-
- Config.fmtd: Config.guid
- $(TBL) $? | $(FORMATTER) $(FORMATTER_OPTS) tmac.n - > $@
-
- Cover.fmtd: Elm.cover
- $(FORMATTER) $(FORMATTER_OPTS) tmac.n $? > $@
-
- Form.fmtd: Form.guide
- $(FORMATTER) $(FORMATTER_OPTS) tmac.n $? > $@
-
- Ref.fmtd: Ref.guide
- $(FORMATTER) $(FORMATTER_OPTS) tmac.n $? > $@
-
- Users.fmtd: Users.guide
- $(TBL) $? | $(FORMATTER) $(FORMATTER_OPTS) tmac.n - > $@
-
!NO!SUBS!
case "$install_prefix" in
--- 634,639 ----
Index: elmME+.2.5.alpha1-cvs/doc/Ref.guide
*** elmME+.2.5.alpha0/doc/Ref.guide 2002-01-26 13:14:45.000000000 +0200
--- /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
***************
*** 1,2359 ****
- .\" @(#)$Id: Ref.guide,v 1.2 1998/10/20 19:57:19 hurtta Exp $
- .\"
- .\" Reference guide to the Elm mail system.
- .\" format with
- .\" troff tmac.n Ref.guide > Ref.format
- .\"
- .\" Elm is now in the public trust.
- .\"
- .\" (C) Copyright 1986,1987 Dave Taylor
- .\" (C) Copyright 1988-1992 Usenet Community Trust
- .\"
- .\"
- .\"
- .po 1i
- .ds h0
- .ds h1
- .ds h2
- .ds f0
- .ds f1
- .ds f2
- .nr Hy 1
- .nr Pt 1
- .nr Pi 0
- .lg 0
- .nf
- .na
- .rs
- .za
- .sv |3.0i
- .ce 99
- .ps 20
- .ss 18
- .vs 12
- \f3The Elm Reference Guide\f1
- .sp 4
- .ps 12
- .ss 14
- .vs 14
- \f2A comprehensive list of all commands,
- options and such to the \f3Elm\fP mail system\f1
- .sp 3
- The Elm Mail System
- (Version 2.4)
- .sp 2
- Syd Weinstein, Elm Coordinator
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp |9.0i
- \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
- \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
- .fi
- .ad
- .bp 1
- .sv 5v
- .ce 99
- .ps 14
- .vs 16
- \f3The Elm Reference Guide\f1
- .ds h0 "Elm Reference Guide
- .ds h1
- .ds h2 "Version 2.4
- .ds f0 "October 1, 1992
- .ds f1
- .ds f2 "Page %
- .sp
- .ps 10
- .ss 12
- .vs 12
- (The Elm Mail System, \*(h2)
- .sp
- \*(f0
- .sp 2
- Syd Weinstein
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp 2
- Derived from
- \*QThe Elm Mail System, Version 2.0\*U
- by
- Dave Taylor
- Intuitive Systems
- Mountain View, California
- email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
- .ce 0
- .sp 3
- .hn 1 Introduction
-
- There are many parts to a complex software system and \f3The Elm
- Mail System\f1
- is no different. This document describes fully all the options
- available in the mailer, including the command line options,
- the commands (in considerably more detail than
- in \f2The Elm Users Guide\f1) and
- the \f2.elm/elmrc\f1 file.
-
- To be more explicit, this document covers:
- a discussion of
- the \f2.elm/elmrc\f1 file,
- command line options of Elm,
- outgoing mail processing,
- responses of various commands,
- mail archive folders,
- the Alias system,
- system aliases etc,
- more on the Elm utilities,
- and a section for expert mail users.
-
- Without any further ado, then, let's get this show on the road!!
- .sp
- .ne 8 \" footnote for UNIX forces text to next page but leaves footnote & hdr
- .hn 1 "The .elm/elmrc File"
-
- Elm, like lots of other software on the
- .ux
- system, has the ability to automatically read
- in a configuration file at each invocation. The file must be
- called \f2elmrc\f1 and reside in the \f2.elm\f1 directory located
- in your home directory. It can have any of the entries below, in any order.
- If you are missing any entries, or if you don't have an \f2.elm/elmrc\f1
- file, the default values (listed below for each option) or those values specified
- by your systems administrator in a system wide \f2elm.rc\f1 file are used.
- Note that those options below designated with \*q*\*u can be altered
- using Elm via the options screen, while those designated with a
- \*q+\*u can be placed
- on the options screen using the \f3configoptions\f1 variable.
- Also note that when you save a new \f2.elm/elmrc\f1 file via the \*q>\*u command
- of the options
- screen, it is (re)created including only those options that you
- have changed via your original \f2.elm/elmrc\f1 file or via the options screen.
-
- The format for each line of the \f2.elm/elmrc\f1 file is:
- .sp
- .nf
- .ft CW
- .zf
- .ti +.5i
- variable = value\f1
- .fi
- .sp
- .ne 8
- .hu String Variables
-
- .lp aliassortby* 1.0i
- You can have your alias display sorted by any of the following ways:
- .si 1.5i
- .lp alias 10n
- Sorts according to \f2aliasname\f1 for each address.
- .lp name 10n
- Sorts according to \f2username\f1 for each address.
- .lp text 10n
- Presents the aliases in the order found in the
- \f2aliases.text\f1 file.
- .ei
- .in 1.0i \" ei doesn't restore margin
- .sp
- Each of these fields can also optionally be prepended with the
- sequence \*Qreverse\-\*U to reverse the order of the sort. This doesn't
- imply anything about the order of the message in the \f2aliases.text\f1
- file itself and affects only their order on the display screen. The
- default is \f2name\f1 order.
-
- .lp alteditor+ 1.0i
- The editor to use when mailing to a message that already includes text,
- as the builtin editor cannot handle that situation. Messages that
- already include text are forwarded messages and replies where the
- original message is included in the reply. This value is not needed
- if the \f3editor\f1 variable is not set to \*Qbuiltin\*U.
-
- .lp alternatives 1.0i
- This is a list of other machine/username combinations
- that you receive mail from (forwarded). This is used
- when the \f2group reply\f1 feature is invoked to ensure that
- you don't send yourself a copy of the outbound message.
- The default is a list of no alternatives.
-
- .lp attribution 1.0i
- When you \f3forward\f1 a message or \f3reply\f1 to it, you can
- optionally attribute the quoted text to its original author.
- Defining the attribution string here allows you to indicate the
- form that the attribution should take. The sequence \*Q%s\*U in the
- attribution is replaced by the name of the original author.
- Examples are:
- .sp
- .nf
- .in 1.5i
- .ft CW
- .zf
- attribution = According to %s:
- attribution = %s writes:
- .ft 1
- .in 0
- .fi
-
- .lp calendar* 1.0i
- This is used in conjunction with the \*q<\*u \f2scan message for
- calendar entries\f1 command, as the file to append any found
- calendar entries to. The default is \f2calendar\f1 in your home directory.
-
- .lp charset 1.0i
- This is the character set used for messages with a
- \*QContent-Type: text/plain\*U header.
- The default depends on your site's installation, but is usually
- US-ASCII. \f3charset\f1 is only recognized if MIME
- (Multipurpose Internet Mail Extension)
- support is configured. You could set \f3charset\f1 to your preferred
- national character set, but be aware that there is currently no way
- to change it online. Also you must be aware that Elm probably needs
- \f2metamail\f1 to display messages with \f3charset\f1=US-ASCII if you change
- \f3charset\f1. Elm tries to know which character set could display US-ASCII
- too, but its list of compatible character sets is probably not complete.
-
- .lp compatcharsets 1.0i
- This is the list of character sets which are more or less a superset
- of US-ASCII. This enables Elm to display messages with \f3charset\f1=US-ASCII
- with the builtin pager, or your preferred pager, instead of calling
- \f2metamail\f1. \f3compatcharsets\f1 is only recognized if MIME support
- is configured. The ISO-8859-X character sets are defaulted.
-
- .lp configoptions 1.0i
- This is a list of letters that indicate which of the run-time
- configurable options you desire placed on the options screen (see
- section 7, \f3Commands\f1, for the \f3options\f1 command). There
- are 22 run-time configurable options, but only room for 15 on a
- 24-line screen. The default list is \f2^_cdefsopyv_am_un\f1. Two
- additional characters can be specified for formatting. Those are \*q_\*u, which
- adds a blank line, and \*q^\*u, which places the title message on that line
- instead of the bottom of the screen. The
- letters \*qi\*u, \*qq\*u, and \*qx\*u are reserved for \*Qreturn to
- index\*U, \*Qquit\*U,
- and \*Qexit\*U, respectively, and are not listed as part of the
- \f3configoptions\f1
- list. The options controlled by each letter are:
- .sp
- .in 1.5i
- .ta 0.5i
- a A)rrow cursor \f2(arrow)\f1
- .br
- b B)order on copy \f2(prefix)\f1
- .br
- c C)alendar file \f2(calendar)\f1
- .br
- d D)isplay mail using \f2(pager)\f1
- .br
- e E)ditor (primary) \f2(editor)\f1
- .br
- f F)older directory \f2(maildir)\f1
- .br
- h H)old sent message \f2(copy)\f1
- .br
- j J) reply editor \f2(alteditor)\f1
- .br
- k K) pause after pager \f2(promptafter)\f1
- .br
- l A(l)ias Sorting \f2(aliassortby)\f1
- .br
- m M)enu display \f2(menu)\f1
- .br
- n N)ames only \f2(names)\f1
- .br
- o O)utbound mail saved \f2(sentmail)\f1
- .br
- p P)rint mail using \f2(print)\f1
- .br
- r R)eply copies msg \f2(autocopy)\f1
- .br
- s S)orting criteria \f2(sortby)\f1
- .br
- t T)ext editor (~e) \f2(easyeditor)\f1
- .br
- u U)ser level \f2(userlevel)\f1
- .br
- v V)isual Editor (~v) \f2(visualeditor)\f1
- .br
- w W)ant Cc: prompt \f2(askcc)\f1
- .br
- y Y)our full name \f2(fullname)\f1
- .br
- z Z) signature dashes \f2(sigdashes)\f1
-
- .lp displaycharset 1.0i
- This is the character set which is supported by your terminal.
- The default depends on your site's installation but is usually
- US-ASCII. For sites with
- .xw
- support, ISO-8859-1
- is a reasonable default.
-
- .lp easyeditor+ 1.0i
- The editor to be used by the \*Q~e\*U escape within the builtin editor.
- The default value is the value of the configuration variable \f2emacs_editor\f1
- (see \f2The Elm Configuration Guide\f1).
-
- .lp editor* 1.0i
- The editor to use when typing in new mail. If you select
- \*Qnone\*U or \*Qbuiltin\*U you'll get a Berkeley Mail style
- interface for all mail that doesn't already have text
- in the buffer (e.g. a reply, mail with a \*Qsignature\*U, etc.)
- There are two possible formats for it, either a command that
- can have a filename appended to it before being
- executed, or a string that contains the metasequence \*Q%s\*U
- which is replaced by the name of the file before being
- executed. Examples of each are:
-
- .nf
- .in 1.5i
- .ft CW
- .zf
- editor = emacs \-nw
- editor = emacs \-nw %s \-f text-mode \-f turn-on-auto-fill
- .ft 1
- .in 1.0i
- .fi
-
- The default is to use the value of $EDITOR in your
- current environment, and if not set, an editor selected by
- the person who configured Elm for your system.
-
- .lp escape 1.0i
- The character used with the builtin editor (see \f3editor\f1 above)
- to escape from text entry to input a command.
- When a line begins with this character, the builtin editor interprets it
- as a command rather than as text to add.
- The default is \*q~\*u (tilde).
-
- .lp fullname* 1.0i
- This is the name the mailer uses in messages
- you send. It is highly recommended that you use your
- full name and nothing strange or unusual, as that can
- appear extremely rude to people receiving your mail.
- The default is to use the \*Qgcos\*U field from the \f2/etc/passwd\f1 file
- on systems that use this field to store full names, and to use the contents
- of the \f2.\|fullname\f1 file in your home directory on other systems.
-
- .lp hostdomain 1.0i
- This is the domain name of your system.
- This variable is only valid in the system-wide \f2elm.rc\f1 file.
- It is only necessary if the value returned by
- the \f2getdomainname\f1 system call is incorrect for your mail use or
- if that system call is unavailable on your system.
- If this variable is specified, then the \f3hostfullname\f1 variable must
- also be specified.
-
- .lp hostfullname 1.0i
- This is the \*Qfully qualified domain name\*U of your system.
- This variable is only valid in the system-wide \f2elm.rc\f1 file.
- It is only necessary if the value returned by the \f2getdomainname\f1 and
- \f2gethostname\f1 system calls are incorrect for your mail use or if those
- system calls are unavailable on your system. It is required if either
- the \f3hostdomain\f1 or the \f3hostname\f1 variables are used within the
- system-wide \f2elm.rc\f1 file.
-
- .lp hostname 1.0i
- This is the local node-name of your system.
- This variable is only valid in the system wide \f2elm.rc\f1 file.
- It is only necessary if the value returned by
- the \f2gethostname\f1 system call is incorrect for your mail use or if
- that system call is unavailable on your system.
- If this variable is specified, then the \f3hostfullname\f1 variable must
- also be specified.
-
- .lp localsignature 1.0i
- See \f3signature\f1.
-
- .lp maildir* 1.0i
- This is your folder directory.
- When you specify a folder name beginning with the \*q=\*u metacharacter,\s-2\u1\d\s0
- .fn
- 1. Note that \*q%\*u and \*q+\*u are synonymous with \*q=\*u throughout Elm.
- .ef
- it stands for this directory name. That is,
- if you save a message to folder \f2=stuff\f1
- the \*q=\*u is expanded to the current value of \f3maildir\f1.
- The default is the directory \f2Mail\fP in your home directory.
-
- .lp pager* 1.0i
- This is the program to be used to display messages. You can
- specify \*Qbuiltin\*U or the name of any standard pager. If you
- use \*Qbuiltin+\*U, each screenfull of displayed message is
- \*Qpaged\*U from the top of your screen with a title line,
- while \*Qbuiltin\*U simply \*Qscrolls up\*U subsequent screenfulls once
- it has \*Qpaged\*U the first screenfull.
- The default is to use the value of $PAGER in your
- current environment, and if not set, a pager selected by
- the person who configured Elm for your system, quite likely
- \*Qbuiltin+\*U.
-
- .lp precedences 1.0i
- Some mail transports look at a \*QPrecedence\*U header in outbound
- mail messages to determine how to deliver the message. The Elm header
- editing menu allows you to place a precedence on your mail messages.
- By default, Elm allows any value to be specified as the message
- precedence. This option may be used to restrict the allowed precedences
- to a particular list. For example, you might say:
-
- .nf
- .in 1.5i
- .ft CW
- .zf
- precedences = special-delivery air-mail first-class bulk junk
- .ft 1
- .in 1.0i
- .fi
-
- Exactly what precedences your mail transport supports and what they
- do (if anything at all!) will vary from site to site.
-
- The distinction between the \*QPrecedence\*U and \*QPriority\*U headers
- is subtle: the precedence tells the mail system how to handle the
- message and the priority tells the recipient how important the message
- is. Although these are quite different things, they are often related.
- This option will also allow you to associate message priorities with
- precedences. For example, you might say:
-
- .nf
- .in 1.5i
- .ft CW
- .zf
- precedences = special-delivery:urgent air-mail:urgent first-class bulk junk
- .ft 1
- .in 1.0i
- .fi
-
- In this example, if you select an \*Qair-mail\*U precedence then the
- message priority defaults to \*Qurgent\*U. If you select a
- \*Qfirst-class\*U precedence then no special priority is implied. The
- priorities given in this field are used only if you have not already
- assigned a priority to your message, and even if one is assigned via
- \f3precedences\f1 you can always go back and change it.
-
- .lp prefix+ 1.0i
- When you \f3reply\f1 to a message or \f3forward\f1 a message to another person,
- you can optionally include the original message. Defining the
- prefix value here allows you to indicate what the prefix of
- each included line should be. The default is \*Q>\ \*U (specified as
- \*Q>_\*U \(em underscore is interpreted as space) and is
- standard in the
- .ux
- community.
-
- .lp print* 1.0i
- This is the command used for printing mail messages. There are two
- possible formats for the command, depending on whether or not the command
- contains the sequence \*Q%s\*U. In the first form the mail message(s) to
- be printed are piped to the specified command. An example of this
- form is:
- .sp
- .in 1.5i
- .ft CW
- .zf
- print = print \-formfeed
- .ft 1
- .in 1.0i
- .sp
- In the second form the mail message(s) to be printed are dumped into
- a temporary file, and a \*Q%s\*U in the command string is replaced with
- the name of the temporary file. An example of this form is:
- .sp
- .in 1.5i
- .ft CW
- .zf
- print = pr %s | lpr
- .ft 1
- .in 1.0i
- .sp
- Another significant difference between the two forms is that in the
- second form all output from the command is discarded, but in the first
- form all output is displayed on the terminal. For
- example, if you wish to use the \*Qpass-through\*U feature to print on
- the \*Qaux\*U port of a terminal, you must use the first form. The second
- form is provided for backward compatibility with old versions of Elm.
- It is depreciated and might be removed in a future release. The
- default is set by the person who configured Elm for your system.
-
- .lp receivedmail 1.0i
- This is the folder to which incoming mail is saved after you've read it.
- When you answer \f2no\f1 to \*QKeep unread messages in
- your incoming mailbox?\*U or \f2yes\f1 to \*QStore read
- messages in your \*Qreceived\*U folder?\*U, this is where the messages go.
- The default is \*Q=received\*U, that is,
- a folder called \f2received\f1 in your \f3maildir\f1 directory.
-
- .lp remotesignature 1.0i
- See \f3signature\f1.
-
- .lp sentmail* 1.0i
- This is the folder to which a copy of outgoing mail is automatically
- saved. This is only done if the \f3copy\f1 boolean variable is set
- ON. Also note that if the \f3savename\f1 boolean variable is enabled
- then this folder may be ignored since the program may save to a folder
- that has the same name as the login of the person you're sending to.
- Whether or not a copy is saved, and to what folder, can be changed just
- prior to sending a message (see the \f3copy\f1 command of the mail
- command sub-menu in section 7, \f3Commands\f1). The default is
- \*Q=sent\*U, that is, a folder called \f2sent\f1 in your \f3maildir\f1
- directory.
-
- .lp shell 1.0i
- This defines the shell to use when doing \*q!\*u escapes and
- such. The default is to use the value of $SHELL in your
- current environment, and if not set, a shell selected by
- the person who configured Elm for your system.
- Note that the \*q!\*u escape is optional and may not be enabled in your
- version of Elm.
-
- .lp signature 1.0i
- This defines the file that is automatically appended to all
- outbound mail before the editor is invoked. Furthermore,
- if you'd like a different signature file for \*Qlocal\*U
- mail and \*Qremote\*U mail (remote being via other hosts),
- you can alternatively define two variables, \f3localsignature\f1
- and \f3remotesignature\f1, to have the same functionality.
- The default is to not have signatures appended to your messages.
-
- .lp sortby* 1.0i
- You can have your folder sorted in any of the following ways:
- .si 1.5i
- .lp from 10n
- Sorts according to whom each message is \f2from\f1.
- .lp lines 10n
- Sorts \f2shortest\f1 to \f2longest\f1 by message.
- .lp mailbox 10n
- Leaves the messages in the order found in the folder.
- .lp received 10n
- Sorts \f2least recently received\f1 to \f2most recently received\f1.
- .lp sent 10n
- Sorts \f2least recently sent\f1 to \f2most recently sent\f1.
- .lp status 10n
- Sorts by \f2priority\f1, \f2action\f1, \f2new\f1, \f2tagged\f1, then
- \f2deleted\f1.
- .lp subject 10n
- Sorts according to the \f2subject\f1 of each message.
- .ei
- .in 1.0i \" ei doesn't restore margin
- .sp
- Each of these fields can optionally be prepended with the
- sequence \*Qreverse\-\*U to reverse the order of the sort. This doesn't
- imply anything about the order of the messages in the folder
- itself and affects only their order on the index screen. The
- default is \f2mailbox\f1 order.
-
- .lp textencoding 1.0i
- This is the value for the
- \*QContent-Transfer-Encoding:\*U header,
- which is used to tell MIME
- (Multipurpose Internet Mail Extension) capable mail readers how they
- should decode your mail.
- The default depends on your site's installation, but is usually
- \f27bit\f1. Other possible values are \f28bit\f1, \f2base64\f1 or
- \f2quoted-printable\f1 (see RFC1341 for details).
- \f27bit\f1 and \f28bit\f1 implies no encoding.
- .sp
- Note that Elm doesn't look at this value; it is just placed in your
- outgoing mail headers.
- If you put \f2base64\f1 or \f2quoted-printable\f1 as the value,
- Elm will NOT turn your message into a \f2base64\f1/\f2quoted-printable\f1
- encoded message. You will have to do that
- yourself with whatever means are available in your MIME capable mail reader.
- Metamail, for instance, has a program called mimencode that you can use.
-
- .lp tmpdir 1.0i
- Use this if you want to define your own directory for the temporary
- file Elm creates while running. This is only necessary if using the
- system temporary directory could cause problems, such as when not all
- NFS clients mount the common temporary directory, or when the temporary
- directory is prone to being cleared periodically. The default entry
- of the system temporary directory is normally OK.
-
- .lp visualeditor+ 1.0i
- The editor to be used by the \*Q~v\*U escape within the builtin editor.
- The default value is the value of the configuration variable \f2vi_editor\f1
- (see \f2The Elm Configuration Guide\f1).
-
- .lp weedout 1.0i
- When specifying this option, you can list headers that
- you \f2don't\f1 want to see when you are displaying a message.
- This list can continue for as many lines as desired, as
- long as the continued lines all have leading indentation.
- All headers in this entry append to the default weedout list.
- There are two special header flags. The first, \*Q*clear-weed-list*\*U,
- clears the default list. The second, \*Q*end-of-user-headers*\*U,
- terminates the entry, in case the following lines look like they
- might be more headers for the list.
- The default \f3weedout\f1 list includes the following header strings:
- .sp
- .in 1.5i
- .ft CW
- .zf
- .nf
- \&>From
- \&Apparently-To:
- \&Content-Length
- \&Content-Transfer-Encoding
- \&Content-Type:
- \&From
- \&In-Reply-To:
- \&MIME-Version
- \&Message-Id:
- \&Newsgroups:
- \&Received:
- \&References:
- \&Status:
- \&X-Mailer:
- .ft 1
- .fi
- .sp
- .in 1.0i
- Note that the \*QFrom\*U entry weeds out both \*QFrom:\*U and the
- \*QFrom\ \*U headers. If you just want to weed out \*QFrom\ \*U, for example,
- put a \*Q*clear-weed-list*\*U at the start of the list followed by \*QFrom_\*U
- or \*QFrom\ \*U.
- .in 0
- .ne 8
- .hu Numeric Variables
-
- .lp bounceback 1.0i
- This is a hop count threshold value and allows you to
- set up the mailer so that when you send mail more than
- \f2n\f1 machines away, it'll automatically include a
- \*QCc:\*U to you through the remote machine. In practice
- this should be very rarely used. Note that this refuses to
- bounce mail off an Internet address. The default is to
- have it set to zero, which disables the function.
-
- .lp builtinlines 1.0i
- This is used to determine if the builtin pager should be used on some
- messages even if you would usually use an external pager program.
- There are two ways of determining whether the builtin pager should be
- used. If you want any message that is shorter than \f2n\f1 lines to
- use the internal pager, set this variable to \f2n\f1. If you want the
- builtin pager to be used if the message is \f2m\f1 lines shorter than
- the number of lines on your screen, set this variable to \f2\-m\f1.
- Setting this variable to zero will result in the message always being
- sent through your external pager. This variable is used only if
- the pager is not set to the builtin pager. The default is \-3.
-
- .lp readmsginc 1.0i
- This variable modifies the display of the message \*QReading in
- \f2foldername\f1, message: #\*U, which is displayed when reading a new
- folder. The message count is normally updated as
- each message in the folder is read. If you are on a slow terminal and are
- reading a folder with a large number of messages, the time it takes to
- redraw the message count can significantly exceed the time it takes to
- simply read the folder.
- .sp
- The \f3readmsginc\f1 variable controls the frequency with which the
- message count is updated. If this parameter is set to 50, the message
- count will be updated after every 50 messages (i.e., at 50, 100, 150,
- and so forth). The default value for this parameter is 1. If a value
- of less than 1 is specified for this parameter, the value is ignored,
- and the default value is used instead.
-
- .lp sleepmsg 1.0i
- This variable modifies the time Elm waits after displaying a transient
- message before erasing it and continuing. It can be set to zero to
- suppress the wait entirely. It is in units of whole seconds.
-
- .lp timeout 1.0i
- On more advanced systems, it's nice to start up the
- mailer in a window and let it sit in background
- until new mail arrives (see \f2wnewmail\f1 for
- another window based program), at which point
- it can be brought up to the forefront of the system
- and read. In this case, it would be quite convenient
- to have the mailer internally resynchronize every
- so often. This option specifies the number of seconds that this occurs.
- .sp
- This is also useful for non-windowing terminals. For example, you can
- leave Elm running at night (I usually do) and when you
- come in in the morning it'll be all ready to read your mail!
- .sp
- The default is a 300 second (5 minute) timeout period.
-
- .lp userlevel* 1.0i
- This is what the program uses to determine the relative level of
- sophistication of the user. The values are \*q0\*u for a new user (the
- default), \*q1\*u for someone familiar with Elm,
- and \*q2\*u for experts. Some advanced features are hidden from novice
- users, while experts get less verbose prompt messages.
- The default is \*q0\*u.
- .br
- .ne 8
- .hu Boolean Variables
-
- The value assigned to boolean variables can be \*QON\*U or \*QOFF\*U only.
-
- .lp alwaysdelete 1.0i
- Set ON to set the default answer to the \*QDelete messages?\*U prompt
- to \f2yes\f1 (see the \f3quit\f1 command in section 7, \f3Commands\f1,
- and the \f3ask\f1 variable below). This default answer also applies to
- deletions from the alias system. The default for \f3alwaysdelete\f1 is
- OFF.
-
- .lp alwayskeep 1.0i
- Set ON to set the default answer to the \*QKeep unread mail in incoming
- mailbox?\*U prompt to \f2yes\f1. However, if you set \f3alwaysstore\f1
- OFF or answer \f2no\fP to the \*QStore read mail in \*Qreceived\*U
- folder?\*U prompt, it is presumed that you also want to keep your
- unread mail in the incoming mailbox, so the value of \f3alwayskeep\f1
- is ignored in those cases. See the \f3quit\f1 command in section 7,
- \f3Commands\f1, and the \f3ask\f1 and \f3alwaysstore\f1 variables
- below for more details. The default for \f3alwayskeep\f1 is ON.
-
- .lp alwaysstore 1.0i
- Set ON to set the default answer to the \*QStore read mail in
- \*Qreceived\*U folder?\*U prompt to \f2yes\f1 (see the \f3quit\f1
- command in section 7, \f3Commands\f1, and the \f3ask\f1 variable
- below). The default for \f3alwaysstore\f1 is OFF.
-
- .lp arrow* 1.0i
- Sometimes you are forced to use a slow or \*Qdumb\*U terminal. Set ON
- to make the current message pointer the \*Q\->\*U sequence rather than
- the inverse bar. Note that this is overridden by the \*Q\-a\*U command
- line option (see section 3, \f3Command Line Options\f1). The default
- is OFF.
-
- .lp ask 1.0i
- Set OFF to tell Elm that you'd rather not be asked \*QDelete
- messages?\*U and such each time you quit, resynchronize, change
- folders, or return from the alias system, but that it should just use
- the values of \f3alwaysdelete\f1, \f3alwaysstore\f1, and
- \f3alwayskeep\f1 without prompting. Note that when you quit \f3Elm\fP,
- if you use \*qQ\*u instead of \*qq\*u, you will never be questioned,
- regardless of how you have \f3ask\f1 set. See the \f3quit\f1 commands
- in section 7, \f3Commands\f1, and the \f3alwaysdelete\f1,
- \f3alwayskeep\f1, and \f3alwaysstore\f1 variables above for more
- details. The default for \f3ask\f1 is ON.
-
- .lp askcc+ 1.0i
- Set OFF to allow sending mail without being presented the \*QCopies
- to:\*U prompt for each message. This still allows you to explicitly
- include addresses in the \*QCc:\*U list via either the header editor or
- \*Q~c\*U in the builtin editor (see section 8, \f3Using Elm with
- \*Qeditor = none\*U\f1). The default is ON.
-
- .lp autocopy+ 1.0i
- Set ON for Elm to automatically copy the text of each message
- replied to into the edit buffer. Otherwise you will be prompted as to
- whether you want the message included in your reply. See the
- \f3prefix\f1 variable under \f3String Variables\f1 in section 2 for how
- copied text is marked. The default for \f3autocopy\f1 is OFF.
-
- .lp confirmappend 1.0i
- Set ON to make Elm ask for permission
- to append messages to the end of any file that already exists.
- Whether the file is a mail folder in the user's mail directory
- or an ordinary file makes no difference.
- The default is OFF.
-
- .lp confirmcreate 1.0i
- Set ON to make Elm ask for permission before it creates
- a new file to store messages in.
- It makes no difference whether the new file would be a mail
- folder in the user's mail directory or an ordinary file.
- The default is OFF.
-
- .lp confirmfiles 1.0i
- This allows you to have some last resort control over Elm when a
- message would be appended (by copy, save, or auto-cc) to an existing
- file which is not a folder in your mail directory (see the
- \f3maildir\f1 variable under \f3String Variables\f1 in section 2). Set ON
- to make Elm ask for permission to append a message to the end of
- an ordinary file, otherwise it silently adds the message to the end of
- the specified file whether it is a folder or not. The default is OFF.
-
- .lp confirmfolders 1.0i
- Set ON to make Elm ask before creating new mail folders in your
- mail directory (see the \f3maildir\f1 variable under \f3String
- Variables\f1 in section 2), otherwise it silently creates new mail folders
- whenever a copy of a message is going to be stored in a folder that
- does not already exist. See the \f3copy\f1, \f3savename\f1, and
- \f3forcename\f1 variables below for additional information about
- copying messages. The default for \f3confirmfolders\f1 is OFF.
-
- .lp copy+ 1.0i
- Set ON to have silent copies made of all outgoing mail. Where the copy
- of the message is saved is determined by the \f3maildir\f1 and
- \f3sentmail\f1 string variables and the \f3savename\f1 and
- \f3forcename\f1 boolean variables. Whether a copy is saved and to
- which folder can also be set prior to sending a message \(em see the
- \f3copy\f1 command of the mail command sub-menu in section 7,
- \f3Commands\f1, for details. The default for \f3copy\f1 is OFF.
-
- .lp forcename 1.0i
- Set ON to force creation of folders for copies of outbound mail by the
- recipient name. For complete details of how to enable automatic
- copying of outbound messages, see the \f3copy\f1 and \f3savename\f1
- boolean variables. The default is OFF.
-
- .lp forms 1.0i
- Set ON to enable the generation of \*Qforms\*U type messages. See the
- \f2Elm Forms Mode Guide\f1 for further information about mail forms.
-
- .lp keepempty 1.0i
- The mail system has a habit of deleting folders when you've removed
- everything from them. Set ON to preserve empty folders as zero-length
- files. Note that this option does not apply to your incoming mailbox.
- The default is OFF.
-
- .lp keypad 1.0i
- Set ON to indicate that you have an HP terminal and want the
- \f2<NEXT>\f1, \f2<PREV>\f1, \f2<HOME>\f1 and \f2<SHIFT-HOME>\f1 keys enabled.
- The default is OFF.
-
- .lp menu* 1.0i
- Set OFF to inhibit the menu display on all screen displays within
- Elm. Note that this is overridden by the \*Q\-m\*U command line
- option (see section 3, \f3Command Line Options\f1). The default is
- ON.
-
- .lp metoo 1.0i
- Set ON to get a copy of mail you send to a mailing list you are on,
- otherwise you do not get a copy of such messages. The default is OFF.
-
- .lp movepage 1.0i
- Set ON to enable commands that move through the folder by pages (see
- the \*q+\*u, \*q\-\*u, \f2<right>\f1, and \f2<left>\f1 keys in section
- 7, \f3Commands\f1) to move the current message pointer to the top of
- that page of messages. Set OFF to not alter the current message
- pointer location when moving through pages. The default is OFF.
-
- .lp names* 1.0i
- Set OFF to display the primary recipients' addresses on your screen
- with their full names when you send a message. Set ON to display only
- the full names. The default is ON.
-
- .lp noheader 1.0i
- Set ON to not include the headers of messages when copying a message
- into the edit buffer for replying or forwarding (see the \f3autocopy\f1
- variable above). The default is ON.
-
- .lp pointnew 1.0i
- Set ON to cause the current message pointer to point to the first new
- message in your incoming mailbox when started, instead of at message #1
- of the index. This has no effect for other folders since they are not
- expected to have \*Qnew\*U mail. The default is ON.
-
- .lp promptafter+ 1.0i
- Set ON to display a command prompt rather than the index screen when
- exiting from an external pager. This variable has no effect on the
- builtin pager. See the \f3pager\f1 variable under \f3String Variables\f1
- in section 2 to specify which pager to use to read messages.
-
- If your external pager immediately exits when it reaches the end of the
- message, you should set \f3promptafter\f1 ON so that the last screen of
- the displayed message is not immediately replaced by the index screen.
- If your external pager doesn't exit until you command it to, you have a
- choice. If you usually want to see the index screen before issuing a
- command, setting this variable OFF eliminates the extra keystroke
- needed to return to the index screen. If you usually don't need to see
- the index screen before issuing the next command, setting it ON allows
- you to enter your next command without waiting for the index screen to
- be redrawn. The default is ON.
-
- .lp resolve 1.0i
- Set ON to move the current message pointer to the next message on the
- index when a mail message is \*Qdealt with\*U through deleting,
- undeleting, saving, forwarding, etc. or set OFF to leave the current
- message pointer unchanged. The default is ON.
-
- .lp savename 1.0i
- One of the problems with electronic mail systems is that one tends to
- get very large, one-dimensional (flat) files that contain lots of
- completely unrelated mail. Elm can use a more intelligent
- algorithm: for incoming mail, when you \f3save\f1 or \f3copy\f1 it
- (see section 7, \f3Commands\f1), the default folder is the login name
- of the person who sent you the message (changed by pressing anything
- other than \f2<return>\f1 of course). Similarly, when sending mail,
- instead of just blindly saving it to the \f3sentmail\f1 folder,
- Elm can save it to a folder that is the login name of the
- recipient of the mail.\s-2\u2\d\s0
- .fn
- 2. When sending to a group, it's saved to the login name of the first
- person in the list only.
- .ef
- Set \f3savename\f1 ON to enable this algorithm.
-
- If \f3forcename\f1 is OFF (see above), the copy is saved to that folder
- only if the folder already exists. In practice, this means that
- important people that you communicate with (those that you tend to save
- mail from) have folders that are actually \f2a recorded log of the
- discussion in both directions\f1 and others (random mailings) are all
- stuffed in the \f3sentmail\f1 folder for easy perusal and removal (see
- the \f3sentmail\f1 variable under \f3String Variables\f1 in section
- 2). If you always want to save copies of outgoing messages in separate
- folders by recipient login name, you'll want to set \f3forcename\f1
- ON.
-
- The default for \f3savename\f1 is ON.
-
- .lp sigdashes+ 1.0i
- Set ON to tell Elm that you wish to follow the
- convention of prefixing your signature with \*Q\f2newline dash dash
- blank newline\f1\*U. This is placed in your message before your
- signature file (see the \f3signature\f1, \f3localsignature\f1, and
- \f3remotesignature\f1 variables under \f3String Variables\f1 in section 2).
- If OFF, the signature file, if any, is placed at
- the end of the message without any prefix. The default is ON.
-
- .lp softkeys 1.0i
- Set ON to tell Elm that you have an HP terminal with the
- HP 2622 function key protocol and that you'd like to have the function
- keys available while in the program. The default is OFF.
-
- .lp titles 1.0i
- Set ON to have the first line of a message titled with:
- .sp
- .ft CW
- .zf
- .ps 9
- .nf
- .tl ' Message \f2N/M\fP from \f2username\fP''\f2date\fP at \f2time\f1 '
- .fi
- .ps 10
- .ft 1
- .sp
- where all the information is extracted from the message.
- This is especially useful if you weed out all the headers of each
- message with a large \f3weedout\f1 list (see the \f3weedout\f1 variable
- under \f3String Variables\f1 in section 2).
- The default is ON.
-
- .lp usetite 1.0i
- Set ON to enable use of the \f2termcap/terminfo\f1
- \f3ti/te\f1 capabilities.
- Many terminal emulators require it (not the least of which is the
- OpenLook \f2cmdtool\f1).
- Some terminal emulators clear the screen on \f3te\f1 (some \f2xterm\f1s).
- Set OFF to disable use of \f3ti/te\f1.
- Note that this is overridden by the \*Q\-t\*U command line option
- (see section 3, \f3Command Line Options\f1). The default is ON.
-
- .lp weed 1.0i
- Set ON to have Elm \*Qweed out\*U certain headers from displayed
- messages, that is, not display them. The \f3weedout\f1 variable under
- \f3String Variables\f1 in section 2 allows you to custom define the set of
- headers you would like to not have displayed while reading messages.
- The default for the \f3weed\f1 variable is ON.
- .in 0
- .sp
- .sp
- For a better idea of how this all works, here's a sample \f2.elm/elmrc\f1
- file. While looking through it, notice that you can have lots of
- comments and blank lines for readability and that you can also use
- \*Qshell variables\*U and the \*q~\*u (tilde) metacharacter for your home
- directory, and they are expanded accordingly when read in by the
- mailer. Note that this was automatically saved by the Elm
- program on the fly from the options screen.
- .sp
- .ft CW
- .zf
- .nf
- #
- # .elm/elmrc \- options file for the ELM mail system
- #
- # Saved automatically by ELM 2.4 for Elm Development Group
- #
-
- # For yes/no settings with ?, ON means yes, OFF means no
-
- # where to save calendar entries
- calendar = ~/.Agenda
-
- # what editor to use ("none" means simulate Berkeley Mail)
- # \'%s\' can be used as the temporary filename for the outgoing message
- editor = none
-
- # the character to use in the builtin editor for entering commands
- escape = ~
-
- # the full user name for outbound mail
- fullname = Elm Development Group
-
- # where to save received messages to, default file is "=received"
- receivedmail = $HOME/Mail/received
-
- # where to save my mail to, default directory is "Mail"
- maildir = /users/elmdev/Mail
-
- #directory to hold my temporary files to avoid NFS cross mount problems
- tmpdir = /users/elmdev/Mail/tmp
-
- # program to use for displaying messages (\'builtin\' is recommended)
- pager = builtin
-
- # prefix sequence for indenting included message text in outgoing messages...
- prefix = >_
-
- # how to print a message (\'%s\' is the filename)
- print = lpr \-Plw2 %s
-
- # attribution string for replies (\'%s\' is the author of original message)
- attribution = According to %s:
-
- # where to save copies of outgoing mail to, default file is "=sent"
- sentmail = /users/elmdev/Mail/mail.sent
-
- # the shell to use for shell escapes
- shell = /bin/csh
-
- # local ".signature" file to append to appropriate messages...
- localsignature = localsig
-
- # remote ".signature" file to append to appropriate messages...
- remotesignature = remotesig
-
- # do we want dashes above signatures? (News 2.11 compatibility and convention)
- sigdashes = ON
-
- # how to sort folders, "Reverse Sent" by default
- sortby = Reverse\-Received
-
- # should the default be to delete messages we\'ve marked for deletion?
- alwaysdelete = ON
-
- # should the default be to store read messages to the "received" folder?
- alwaysstore = ON
-
- # should the default be to keep unread messages in the incoming mailbox?
- alwayskeep = ON
-
- # should we use the "\->" rather than the inverse video bar?
- arrow = OFF
-
- # should the message disposition questions be displayed (ON) or
- # auto\-answered (OFF) with the default answers when we resync or change folders?
- ask = ON
-
- # would you like to be asked for Carbon\-Copies information each msg?
- askcc = ON
-
- # automatically copy message being replied to into buffer?
- autocopy = OFF
-
- # threshold for bouncing copies of remote uucp messages...
- # zero = disable function.
- bounceback = 0
-
- # save a copy of all outbound messages?
- copy = ON
-
- # do we want to be able to mail out AT&T Mail Forms?
- forms = OFF
-
- # should we keep folders from which all messages are deleted?
- keepempty = OFF
-
- # we\'re running on an HP terminal and want HOME, PREV, NEXT, etc...
- keypad = OFF
-
- # should we display the three\-line \'mini\' menu?
- menu = ON
-
- # would you like a copy of a message you send to an alias you are on?
- metoo = OFF
-
- # when using the page commands (+ \- <NEXT> <PREV>) change the current
- # message pointer...?
- movepage = ON
-
- # just show the names when expanding aliases?
- names = ON
-
- # when messages are copied into the outbound buffer, don\'t include headers?
- noheader = ON
-
- # start up by pointing to the first new message received, if possible?
- pointnew = ON
-
- # prompt for a command after the external pager exits?
- promptafter = ON
-
- # emulate the mailx message increment mode (only increment after something
- # has been \'done\' to a message, either saved or deleted, as opposed to
- # simply each time something is touched)?
- resolve = ON
-
- # save messages, incoming and outbound, by login name of sender/recipient?
- savename = ON
-
- # save outbound messages by login name of sender/recipient even if the
- # associated folder doesn\'t already exist?
- forcename = OFF
-
- # are we running on an HP terminal and want HOME, PREV, NEXT, etc...?
- # (this implies "keypad=ON" too)
- softkeys = OFF
-
- # set the main prompt timeout for resynching...
- timeout = 60
-
- # display message title when displaying pages of message?
- titles = ON
-
- # are we good at it? 0=beginner, 1=intermediate, 2+ = expert!
- userlevel = 2
-
- # enable the weedout list to be read?
- weed = ON
-
- # what headers I DON\'T want to see, ever.
- weedout = "Path:" "Via:" "Sent:" "Date" "Status:" "Original" "Phase"
- "Subject:" "Fruit" "Sun" "Lat" "Buzzword" "Return" "Posted"
- "Telephone" "Postal\-Address" "Origin" "X\-Sent\-By\-Nmail\-V" "Resent"
- "X\-Location" "Source" "Mood" "Neuron" "Libido" "To:" "X\-Mailer:"
- "Full\-Name:" "X\-HPMAIL" "Cc:" "cc:" "Mmdf" "Network\-" "Really\-"
- "Sender:" "Post" "Message\-" "Relay\-" "Article\-" "Lines:"
- "Approved:" "Xref:" "Organization:" "*end\-of\-user\-headers*"
-
- # alternative addresses that I could receive mail from (usually a
- # forwarding mailbox) and don\'t want to have listed...
- alternatives = dsidev!elmdev dsirel!elmdev elmdev@dsidev elmdev%dsidev
-
- # list of delivery precedences allowed, or empty to allow anything
- # precedence may be followed by optional ":priority" specification
- precedences = special\-delivery:urgent air\-mail:urgent first\-class bulk junk
-
- # name of Character Set used with MIME text/plain Content\-type
- # US\-ASCII is default. Be aware that if you use a national charset
- # elm probably needs metamail to display US\-ASCII. Elm tries to
- # know if that charset could display US\-ASCII too, but the list
- # of us\-ascii compatible charsets is not yet complete
- charset=US\-ASCII
-
- # name of Character Set which the display supports. This is independent
- # of the above "charset".
- displaycharset=US\-ASCII
-
- # list of Character Sets, which are more or less a superset of US\-ASCII
- # so we know that we can display messages with charset=US\-ASCII without
- # help of metamail
- compatcharsets = ISO\-8859\-1 ISO\-8859\-2 ISO\-8859\-3 ISO\-8859\-4 ISO\-8859\-5 ISO\-8859\-6 ISO\-8859\-7 ISO\-8859\-8 ISO\-8859\-9
-
- # would you like to use termcap/terminfo ti/te entries?
- usetite = ON
-
- # Value by which message count is incremented while reading a new mailbox.
- # Setting this value to a number larger than one will speed up the time it
- # takes to read a large mailbox when using a slow terminal.
- readmsginc = 5
-
- # time in seconds which Elm will wait after displaying a transient message
- # and before erasing it. Can be 0 or positive integer.
- sleepmsg = 2
- .fi
- .br
- .ne 5
- .sp 2
- .hn 1 Command Line Options
-
- There are a number of command line options to the Elm
- program, with only one that needs to be remembered: \*Q\-?\*Uor \*Q\-h\*U
- for help.
-
- The options are:
-
- .lp \h'24p'\-a 66p
- This allows you to have the \*Q\->\*U arrow pointer
- rather than the inverse bar. This can also be set in
- the \f2.elm/elmrc\f1
- file with the boolean variable \f3arrow\f1.
-
- .lp \h'24p'\-c 66p
- Check only. This is useful for expanding aliases
- without sending any mail. The invocation is similar to
- invoking Elm in send-only mode:
- .sp
- .ft CW
- .zf
- .ti 1.5i
- elm \-c\f2 list-of-aliases\f1
-
- .lp "\h'24p'\-d \f2n\f1" 66p
- Set debug level to \f2n\f1. Useful for debugging the Elm
- program, this option will create a file in your home
- directory called \f2ELM:debug.info\f1 containing
- a running log of what is going on with
- the program. Level \f2n\f1 can be 1 through 11,
- where the higher numbers generate more output.
- This option might be disabled by the the person who configured
- Elm for your system.
-
- .lp "\h'24p'\-f \f2folder\f1" 66p
- Read the specified folder rather than the default incoming mailbox.
- Note that you can use the same metacharacters (e.g. \*q=\*u) as when
- you \f2change folders\f1 from within the program. You can also use the
- same abbreviatory symbols (\*q!\*u, \*q>\*u and \*q<\*u),
- but remember to \*Qsingle quote\*U them
- in case they have special meaning in the shell you use.
-
- .lp "\h'24p'\-h or \-?" 66p
- Help message. Gives a short list of all these options and exits.
-
- .lp "\h'24p'\-i \f2file\f1" 66p
- Include a prepared file in the edit buffer before sending.
- This facilitates using Elm with other programs
- that interface with mail (like news readers, for example). There
- is an example of how to set up the \f2rn\f1 news reading program to
- use Elm in \f2The Elm Users Guide\f1. The file specified is
- copied into the temporary file just before the signature file.
-
- .lp \h'24p'\-k 66p
- Keypad enable. This option lets the Elm program
- know that you're on an HP terminal, and it can then interpret
- the <PREV>, <NEXT> and <HOME>/<SHIFT>-<HOME> keys accordingly. If you
- are not on an HP terminal, it is recommended that you do
- NOT use this option. See also the \f3keypad\f1 variable,
- described under \f3Boolean Variables\f1 in section 2.
-
- .lp \h'24p'\-K 66p
- Keypad + softkeys enable. The Elm mailer can
- use the HP softkeys as an alternative form of
- input. If you specify this option be sure that you're on
- an HP terminal that can accept the standard 2622 terminal
- escape sequences! See also the \f3softkeys\f1 variable,
- described under \f3Boolean Variables\f1 in section 2.
-
- .lp \h'24p'\-m 66p
- Inhibit display of the 3-line menu when using the mailer. This,
- of course, gives you three more message headers per page instead.
- See also the \f3menu\f1 variable, described under \f3Boolean
- Variables\f1 in section 2.
-
- .lp "\h'24p'\-s \f2subject\f1" 66p
- In send-only and batch mode, this is how to indicate the subject of the
- resulting message. Please see the section on \f3Non-Interactive
- Uses of Elm\f1 in \f2The Elm Users Guide\f1 for more information.
-
- .lp \h'24p'\-t 66p
- Disable use of the \f2termcap/terminfo\f1 \f3ti/te\f1 capabilities.
- Many terminal emulators require it (not the least of which is the
- OpenLook \f2cmdtool\f1).
- Some terminal emulators clear the screen on \f3te\f1 (some \f2xterm\f1s).
- See also the \f3usetite\f1 variable, described under \f3Boolean
- Variables\f1 in section 2.
-
- .lp \h'24p'\-z 66p
- This causes Elm not to start if you don't
- have any mail, but instead to display the message \*QYou have no
- mail.\*U This emulates the behavior of programs
- like \f2Berkeley Mail\f1.
-
- .in 0
- All the above options default to reasonable values, so there is
- usually no need to use them. Furthermore, the most used options
- are available through the \f2.elm/elmrc\f1 file, described in section 2.
- .br
- .ne 5
- .sp
- .hn 1 Multi-Media Capabilities of Elm
-
- Elm optionally provides you with some Multi-Media features, which
- are compliant
- to the MIME (Multipurpose Internet Mail Extension) IETF draft.
-
- If the support is compiled into Elm, on the receiving side
- Elm accesses Metamail from Nathaniel Borenstein of
- Bellcore. If you receive a MIME compliant message, Elm calls
- Metamail automatically to display the message. Metamail
- asks you if you want to display each part of the message
- and uses the display programs available at your site. This
- is controlled through the \f2mailcap\f1 file.
-
- On the sending side, there is a simple mechanism integrated in Elm
- to compose MIME compliant messages. If you have one or more key lines
- of the form
-
- .ft CW
- .zf
- .ti .5i
- [\&include \f2file contenttype/subtype encoding\f1]
- .ft 1
-
- in the message body, at each
- of these key lines, a file is included, and becomes a part
- of the message. The text lines before, between and after the \f2include\f1
- lines go into extra message parts of type \f2text\f1.
-
- As an example, say you want to include the file \f2foo.gif\f1 into your message,
- which is a GIF image, and you want to use \f2base64\f1 encoding, use the
- following line:
-
- .ft CW
- .zf
- .ti .5i
- [\&include foo.gif image/gif base64]
- .ft 1
-
- Or you want to include a text file which contains plain ASCII:
-
- .ft CW
- .zf
- .ti .5i
- [\&include foo.txt text/plain]
- .ft 1
-
- The \f2encoding\f1 parameter is optional and the default is \f27bit\f1.
-
- Refer to RFC1341 for valid \f2contenttype/subtype\f1 and \f2encoding\f1
- parameter values.
- .br
- .ne 5
- .sp
- .hn 1 Special Outgoing Mail Processing
-
- There are a few extra features that Elm offers on
- outgoing mail that are worthy of mention.
-
- The first, and probably the most exciting feature,\s-2\u3\d\s0 is the
- .fn
- 3. Unfortunately, at many non-US sites, it's quite probable that
- you won't be able to use this feature since you won't have
- the \f2crypt()\f1 library available due to licensing restrictions.
- .ef
- ability to send \f2encrypted\f1 mail! To do this is
- extremely simple: you need merely to have two key lines
-
- .ft CW
- .zf
- .ti .5i
- [\&encode]
- .ft 1
- .br
- and
- .ft CW
- .zf
- .ti .5i
- [\&clear]
- .ft 1
-
- in the message body.
-
- .ne 15
- Consider the following outgoing message:
- .sp
- .nf
- .ps 9
- .in .5i
- .ft CW
- .zf
- Joe,
- Remember that talk we had about Amy? Well, I talked to my manager
- about it and he said...
- uhh...better encrypt this...the usual \`key\'...
- [\&encode]
- He said that Amy was having family problems and that it had been
- affecting her work.
- Given this, I went and talked to her, and told her I was sorry for
- getting angry. She said that she understood.
- We\'re friends again!!
- [\&clear]
- Exciting stuff, eh?
- \h'3i'Mike
- .ps 10
- .ft 1
- .in 0
- .fi
- .sp
- While this is obviously quite readable while being typed into
- the editor, as soon as the message is confirmed as wanting
- to be sent, the Elm mailer prompts with:
- .sp
- .nf
- .ft CW
- .zf
- .ps 9
- .ti .5i
- Enter encryption key: @
- .ps 10
- .ft 1
- .fi
- .sp
- and accepts a key (a series of 8 or less characters) without
- echoing them to the screen. After entry, it will ask for the
- same key again to confirm it, then *\f2poof\f1* it will encrypt and
- send the mail.
-
- If you have the \f3copy\f1 option enabled, the program will save
- your copy of the message encrypted too. (This is to ensure
- the privacy and security of your mail archive, too.)
-
- If the mailer doesn't ask for the encryption key, it's because
- you don't have the \f2[\&encode]\f1 entered as the first 8 characters
- of the line. It MUST be so for this to work!!
-
- On the other end, a person receiving this mail (they must also
- be using Elm to receive it, since this mailer has a
- unique encryption program) will be reading the
- message and then suddenly be prompted:
- .sp
- .nf
- .ft CW
- .zf
- .ps 9
- .ti .5i
- Enter decryption key: @
- .ft 1
- .ps 10
- .fi
- .sp
- and will again be asked to re-enter it to confirm.
- The program will then on-the-fly decrypt the mail
- and display each line as it is decoded. The \f2[\&clear]\f1
- line signifies that the block to encrypt is done.
-
- Note that it is not possible currently to \f3pipe\f1 or \f3print\f1
- encrypted mail.
- .sp 2
- The other feature on outgoing mail is the ability to
- specify what section of the message you want to have
- archived (assuming \f3copy\f1 is enabled) and what section
- you don't. This is most useful for sending out source
- file listings and so on.
-
- To indicate the end of the section that should be
- saved in the archive, you need merely to have the key line
- .sp
- .nf
- .ft CW
- .zf
- .ti .5i
- [\&nosave]
- .ft 1
- or
- .ft CW
- .zf
- .ti .5i
- [\&no save]
- .ft 1
- .fi
- .sp
- appear by itself on a line. This key line is removed from
- the outgoing mail, and indicates the last line of
- the message to be saved.
- Other than this, the saved mail is identical to the outgoing mail.
- .br
- .ne 5
- .sp
- .hn 1 Customized header lines
-
- The mailer provides a facility for including customized
- header lines in the messages you send.
- If you have an \f2.elm/elmheaders\f1 file,
- the mailer will include its contents
- immediately after the regular headers of all outbound mail.
- The mailer supports use of the backquote convention in this file
- to run commands and substitute the commands' output for the backquoted
- text.
- Here's a typical \f2.elm/elmheaders\f1 file:
- .sp
- .ft CW
- .zf
- .nf
- Organization: Hewlett-Packard Laboratories
- Phone: (415)-555-1234
- Operating-System: \`uname -srv\`
- .fi
- .ft 1
- .sp
- These lines will be inserted after all other header lines in the message.
- .br
- .ne 5
- .sp
- .hn 1 Commands
- .sp
-
- This section discusses each command in the Elm
- program in more detail than above, including the
- prompts the user can expect upon executing the
- command, the meaning of different options, etc.
-
- .lp \h'24p'? 66p
- Help. This command used once puts you in the \f2help\f1
- mode, where any key you press results in a one-line description
- of the key. Pressing \*q?\*u again at this point produces a
- summary listing each command available.
- Pressing \*q.\*u (period) leaves the help mode and returns you to the
- command level.
-
- .lp \h'24p'<space> 66p
- Display the current message.
- <space> is useful for reading through a mail folder.
- When issued from the index screen,
- it displays the first screen of the current message.
- When issued while in the builtin pager,
- it pages through the message to the end.
- When issued at the end of a message
- (with either the builtin pager or an external pager),
- it displays the first screen of the next message not marked for deletion.
-
- .lp \h'24p'<return> 66p
- Display the current message.
- <return> behaves somewhat differently from <space>.
- When issued while in the builtin pager,
- it scrolls the current message forward one line,
- and then when issued at the end of a message
- (with either the builtin pager or an external pager),
- it redisplays the first screen of the the \f2current\fP message.
- The latter is useful in case you have issued a non-pager
- command while in the builtin pager and want to restart the display
- of the current message.
-
- .lp \h'24p'! 66p
- Shell. This allows you to send a command to the shell without
- leaving the program. Note that it is possible that the person who
- installed Elm on your system disabled this feature.
-
- .lp \h'24p'| 66p
- Pipe. This command allows you to pipe the current message
- or the set of \f2tagged\f1 messages
- through other filters as you desire. The shell used for
- the entire command is either the one specified in
- your \f2.elm/elmrc\f1 file, or the default shell (see the \f3shell\f1
- variable under \f3String Variables\f1 in section 2).
-
- .lp \h'24p'\/ 66p
- Pattern match. This command, at the command level, allows the
- user to search through all the \f2from\f1 and \f2subject\f1 lines of
- the current folder starting at the current message and
- continuing through the end. If the first character of the
- pattern is a \*q/\*u, then Elm tries to match the
- specified pattern against \f2any\f1 line in the folder. Again,
- this works from the current message through the
- end. Both searches are case insensitive.
-
- .lp "\h'24p'\- or <left>" 66p
- Display the previous page of the message index.
-
- .lp "\h'24p'+ or <right>" 66p
- Display the next page of the message index.
-
- .lp \h'24p'<number><return> 66p
- Specify new current message. When you type in any digit, Elm
- prompts \*QSet current to : \f2n\f1\*U, where \f2n\f1 is
- the digit entered. Continue entering the full number
- and terminate with <return>. Note that changing the
- current message to a message not on the
- current page of headers results in a new page
- being displayed.
-
- .lp \h'24p'< 66p
- Scan message for calendar entries. A rather novel feature of
- the Elm mailer is the ability to automatically incorporate
- calendar/agenda information from a mail message into the user's
- calendar file. This is done quite simply; any line that has
- the pattern
-
- .ti +.5i
- \-> \f2calendar entry\f1
-
- is automatically added to the user's \f3calendar\f1 file
- when the \*q<\*u command is used
- (see the \f3calendar\f1 variable under \f3String Variables\f1 in section 2).
- .sp
- For example, let's say we had a message with the text:
-
- .ft CW
- .zf
- .ps 9
- .ti +.5i
- Regardless of that meeting, here\'s the seminar stuff:
- .br
- .ti +.5i
- \-> 8/03 3:00pm: AI Seminar with Ira Goldstein of HP Labs
- .ft 1
- .ps 10
-
- then using the \*q<\*u command would add the line:
-
- .ft CW
- .zf
- .ps 9
- .ti +.5i
- 8/03 3:00pm: AI Seminar with Ira Goldstein of HP Labs
- .ps 10
- .ft 1
-
- to the user's \f3calendar\f1 file.
-
- .lp \h'24p'a 66p
- Alias. The alias system is a way by which more complex mail addresses
- can be shortened for the mail user. For example:
- .sp
- .nf
- .ps 9
- .ft CW
- .zf
- .ti +.5i
- joe, bleu = Joe Bleu = j...@hpfcla.SSO.HP.COM
- .ft 1
- .ps 10
- .fi
- .sp
- which allows mail to \*Qjoe\*U or \*Qbleu\*U with the system expanding
- the address properly. Obviously, this saves having to remember
- complex addresses. A more detailed discussion can
- be found in either the section entitled \f2The Alias System\f1 in
- this document or \f2The Elm Alias System Users Guide\f1.
-
- .lp \h'24p'b 66p
- Bounce mail. This \*Qremails\*U mail to someone else in such a
- way as to make the return address the original sender rather
- than you. The \f3forward\f1 command is similar, but it makes
- the return address \f2you\f1 rather than the original sender.
-
- .lp \h'24p'C 66p
- Copy to folder. This command copies the current message or set of
- tagged messages to
- a folder. If there is anything in the folder currently the
- message is appended to the end, otherwise the folder is created
- containing only the newly copied messages. The prompt for this command
- is \*QCopy to folder: \*U. A response of <return> cancels the command
- and returns the user to the command prompt. The usual filename
- metacharacters are available, too. That is, this command expands filenames
- with \*q~\*u (tilde) to your home directory and \*q=\*u to your
- \f3maildir\f1 directory, if defined. This command also allows you to
- use \*q>\*u for your \f3receivedmail\f1 folder,
- \*q<\*u for your \f3sentmail\f1 folder,
- \*q.\*u for the last folder you saved or copied a message to
- and \*Q@alias\*U for the default folder for \*Qalias\*U.
- If you use a shell wildcard in the file or folder name, you are
- given a list of all files or folders which match the wildcard.
- Elm uses your shell to find the names, so whatever wildcards you are
- used to will work.
- Finally, you can also enter \*q?\*u at the prompt
- to get detailed help.
-
- .lp \h'24p'c 66p
- Change folder. Specifying this command allows the user to change
- the folder that is currently being read. This is intended
- for perusal and reply to previously archived messages.
- The prompt is \*QName of new folder: \*U and entering <return>
- cancels the operation, while entering a filename causes the program
- to read that file as the new folder,
- if possible. This command expands filenames
- with \*q~\*u (tilde) to your home directory and \*q=\*u to your
- \f3maildir\f1 directory, if defined. This command also allows you to
- use \*q!\*u as an abbreviation for you incoming mailbox,
- \*q>\*u for your \f3receivedmail\f1 folder,
- \*q<\*u for your \f3sentmail\f1 folder,
- \*q.\*u for the last folder you saved or copied a message to
- and \*Q@alias\*U for the default folder for \*Qalias\*U.
- If you use a shell wildcard in the file or folder name, you are
- given a list of all files or folders which match the wildcard.
- Elm uses your shell to find the names, so whatever wildcards you are
- used to will work.
- Finally, you can also enter \*q?\*u at the prompt
- to get detailed help.
-
- .lp "\h'24p'd, u" 66p
- Delete and undelete. Neither of these two commands have any prompts
- and indicate their action by either adding a \*qD\*u to the current
- message index entry (indicating deletion pending) or removing
- the \*qD\*u (indicating that the message isn't set for deletion).
-
- .lp \h'24p'<control>-D 66p
- This command allows you to easily mark for deletion all messages
- that have a specific pattern. After \f3<control>-D\f1 is pressed,
- Elm prompts for the string to match in
- either the \f2from\f1 or \f2subject\f1 lines of
- the messages.
-
- .lp \h'24p'<control>-U 66p
- This is the direct opposite command to the \f3<control>-D\f1 command
- \(em all messages
- that match the specified pattern have any mark for deletion
- removed by this command.
-
- .lp \h'24p'e 66p
- Edit mailbox. This allows you to modify the current mail file at
- a single keystroke. This is mostly useful for editing messages
- before saving them. Modifying headers should be done with extreme
- caution, as they contain routing information and other vital stuff
- for full functionality. This command may be disabled by whoever
- configured your Elm installation.
-
- .lp \h'24p'f 66p
- Forward. Allows the user to forward the current message to another user.
- This copies the message into the edit buffer and allows the user to add
- their own message too. The prompt is \*QForward to:\*U and will expand an alias
- if entered. See also \f3bounce\f1, above.
-
- Elm will ask you if you want to edit the message before sending it. If you
- answer \f2yes\f1, Elm will prepend your prefix string to each line of the
- message, and let you edit the result. If you do not want the prefix string
- on each line, answer \f2no\f1; you will have another chance to edit the message
- when you get to the \*Qsend\*U menu. See the \f3prefix\f1 variable
- under \f3String Variables\f1 in section 2.
-
- .lp \h'24p'g 66p
- Group reply. Identical to \f3reply\f1 below, except that the
- response is mailed to \f2all recipients\f1 of the original
- message except yourself. See the \f3alternatives\f1
- variable under \f3String Variables\f1 in section 2.
-
- .lp \h'24p'h 66p
- Display the current message with all headers intact.
- When you display a message with other commands,
- certain header lines are formatted and others discarded according
- to the \f3weedlist\fP variable, described under \f3String
- Variables\f1 in section 2.
-
- .lp \h'24p'i 66p
- Return to the index screen,
- when issued in the builtin pager or at the end of a message with
- either the builtin pager or an external pager.
-
- .lp "\h'24p'j or <down>, k or <up>" 66p
- These four keys work similarly to what they would do in \f2vi\f1 or
- any of the other (precious few) screen oriented
- programs. The \f3j\f1 and \f3<down>\f1 keys move
- the current message pointer down to the next message skipping
- over any marked deleted (going to
- the next page if necessary) and the \f3k\f1 and \f3<up>\f1 keys move
- the current
- message pointer back to the previous message skipping
- over any marked deleted (also changing pages if necessary).
-
- .lp "\h'24p'J, K" 66p
- These two keys work similarly to their lower case counterparts,
- except that they don't skip over deleted messages.
-
- .lp \h'24p'l 66p
- Limit. This feature allows you to specify a subset of the existing
- messages to be dealt with. For example, let's say we had a folder with
- four hundred messages in it, with only four or five different subjects. We
- could then limit what we're dealing with by using the \f3limit\f1
- command. Pressing \f3l\f1 would result in the prompt:
- .sp
- .nf
- .ft CW
- .zf
- .ti +.5i
- Criteria:
- .ft 1
- .fi
- .sp
- to which we could answer
- \*Qsubject \f2string\f1\*U,
- \*Qfrom \f2string\f1\*U or
- \*Qto \f2string\f1\*U. In our example, we could use
- \*Qsubject programming\*U
- as a criterion for selection. Once we've limited our selections,
- the screen is rewritten with just the selected messages
- and the top line changes to have a message like:
- .sp
- .nf
- .ft CW
- .zf
- .ps 9
- .tl ''\0\0\0\0\0Folder is "=elm" with 92 shown out of 124 [Elm 2.4]''
- .ps 10
- .ft 1
- .fi
- .sp
- We can further limit selections by using the \f3limit\f1 option
- repeatedly to enter further criteria.
-
- To clear all the criteria and get back to the \*Qregular\*U display, simply
- enter \*Qall\*U as the limiting criteria. It should be noted that the
- selection based on \*Qto\*U isn't fully implemented for this version, so
- it is recommended that users stay with \*Qsubject\*U and \*Qfrom\*U as the
- basis for their criteria.
-
- .lp \h'24p'm 66p
- Mail. Send mail to a specified user. The prompt associated
- with this command is \*QSend mail to: \*U. Entering an alias name results
- in the full address being rewritten in parenthesis immediately. This
- prompt is followed by \*QSubject: \*U which allows the user to title their
- note. The final prompt is \*QCopies to: \*U, which allows other people
- specified to receive \*Qcarbon copies\*U of the message, but see the
- \f3askcc\f1 variable under \f3Boolean Variables\f1 in section 2. Upon
- entering all three items the
- editor is invoked and the message can be composed.
-
- .lp \h'24p'n 66p
- Next message that is not marked for deletion.
- Useful for displaying successive messages in a folder.
- When issued from the index screen, it displays the current message,
- and when issued while in the builtin pager or at the end of a message
- (with either the builtin pager or an external pager),
- it displays the first screen of the next message not marked for deletion.
-
- .lp \h'24p'o 66p
- Options. This full-screen display allows you to alter the settings
- of a number of parameters, including the current sorting method,
- the method of printing files, the calendar file, the save file, and
- so on. It's self-documenting (where have you heard \f2that\f1
- before?) so isn't explained in too much detail here. See the
- \f3configoptions\f1 variable under \f3String Variables\f1 in section 2.
-
- .lp \h'24p'p 66p
- Print. This allows you to print out the current
- message or the tagged messages to a previously defined printer. See
- the \f3print\f1 variable under \f3String Variables\f1 in section 2.
-
- .lp \h'24p'q 66p
- Quit. If you in the pager, you are returned to the index screen. If you are
- at the index screen, Elm quits altogether. However, if you have the
- \f3ask\fP variable set ON, Elm first prompts you for the disposition of the
- messages in the current folder. If any messages are marked for deletion, it
- asks if you want them deleted. If the current folder is your incoming
- mailbox, you are also asked if read messages should be stored in your
- \f3receivedmail\f1 folder,
- and if unread messages should be kept in the incoming mailbox.
- The default answers to these questions are set by the \f2.elm/elmrc\f1
- variables \f3alwaysdelete\f1, \f3alwaysstore\f1, and \f3alwayskeep\f1
- (see \f3Boolean Variables\f1 in section 2).
- However, if you elect to not store your read messages (i.e. keep them)
- it is presumed you want to keep your unread messages, too.
-
- .lp \h'24p'Q 66p
- Quick quit. This behaves similar to the \f3quit\f1 command except that
- you are never prompted for answers to the message disposition questions.
- Elm disposes of messages according to the values you
- have set for \f3alwaysdelete\f1, \f3alwaysstore\f1, and \f3alwayskeep\f1
- in your \f2.elm/elmrc\f1 file (see \f3Boolean Variables\f1 in section 2).
-
- .lp \h'24p'r 66p
- Reply. Reply to the sender of the current message. If
- the \f3autocopy\f1 variable is set to OFF in your \f2.elm/elmrc\f1 file,
- Elm prompts \*QCopy message? (y/n)\*U, to which you can specify
- whether or not a copy of the source message is to be copied into the edit
- buffer. If copied in, all lines from the message are
- prepended with the \f3prefix\f1 character sequence specified in
- your \f2.elm/elmrc\f1 file (see \f3String Variables\f1 in section 2).
-
- .lp \h'24p's 66p
- Save to folder. This command is like the \f3copy\f1 command, except
- that the saved messages are marked for deletion and, if you are
- saving just the current message, the current message pointer is
- incremented afterwards (see the \f3resolve\f1 variable under \f3Boolean
- Variables\f1 in section 2). This command expands folder names
- with \*q~\*u (tilde) to your home directory and \*q=\*u to your
- \f3maildir\f1 directory, if defined. This command also allows you to
- use \*q>\*u for your \f3receivedmail\f1 folder,
- \*q<\*u for your \f3sentmail\f1 folder (see \f3String Variables\f1 in
- section 2),
- \*q.\*u (period) for the last folder you saved or copied a message to
- and \*Q@alias\*U for the default folder for \*Qalias\*U.
-
- .lp \h'24p't 66p
- Tag.
- .fn
- 4. Currently only \f3copy\f1, \f3pipe\f1, \f3print\f1, and \f3save\f1
- support this.
- .ef
- Tag the current message for a later operation.\s-2\u4\d\s0
-
- .lp \h'24p'T 66p
- Tag and move to next undeleted message.
- This command is like the `Tag' command but also increments the current message
- pointer to the next undeleted message.
-
- .lp \h'24p'<control>-T 66p
- Tag all messages containing the specified pattern. Since \f2tagging\f1
- messages can occur on screens other than the one being viewed,
- Elm first checks to see if any messages are currently
- \f2tagged\f1 and ask you if you'd like to remove those tags. After
- that, it will, similar to the \f3<control>-D\f1 command, prompt for
- a pattern to match and then mark all messages that contain
- the (case insensitive) pattern in either the \f2from\f1 or \f2subject\f1
- lines.
-
- .lp \h'24p'x 66p
- Exit. This leaves Elm and discards any changes to the mailbox.
- If changes are pending (such as messages marked for deletion) you are
- asked to confirm discarding the changes. If confirmed, no
- messages are deleted and the status of all messages is unchanged. That is,
- any messages that were new will remain new instead of being noted as old,
- and any messages that were read for the first time
- will be again noted as unread.
-
- .lp \h'24p'X 66p
- Exit immediately. This leaves Elm in the quickest possible manner
- without even prompting about discarding the changes to the mailbox.
- No messages are deleted and the status of all messages is unchanged. That is,
- any messages that were new will remain new instead of being noted as old,
- and any messages that were read for the first time
- will be again noted as unread.
-
- .in 0
- .sp
- When you are about to send a message with the \f3forward\f1, \f3mail\f1,
- or \f3reply\f1 commands (see above), a small menu of the following
- options appears:
-
- .lp \h'24p'c 66p
- Specify the folder for saving a copy of the message.
- This allows you to override the
- \f3copy\f1, \f3forcename\f1 and \f3savename\f1 variables
- from your \f2.elm/elmrc\f1 file (see \f3Boolean Variables\f1 in
- section 2). It prompts you for the name
- of the folder where a copy of the outgoing message is to be saved. The
- default displayed is taken from those three \f2.elm/elmrc\f1
- options and can be changed. This command also allows you to
- use \*q>\*u for your \f3receivedmail\f1 folder
- and \*q<\*u for your \f3sentmail\f1 folder (see \f3String Variables\f1
- in section 2),
- and \*q=?\*u to mean \*Qconditionally save by name\*U
- and \*q=\*u to mean \*Qunconditionally save by name\*U.
- Since you could next enter
- the \f3edit headers\f1 command and change the recipients
- of your message, the name of the folder under the
- two \*Qsave by name\*U options is not established until you enter the \f3send\f1
- command.
- If you use a shell wildcard in the file or folder name, you are
- given a list of all files or folders which match the wildcard.
- Elm uses your shell to find the names, so whatever wildcards you are
- used to will work.
- You can also enter \*q?\*u at the prompt
- to get help about saving.
-
- .lp \h'24p'e 66p
- Edit message (or form). Entering this command allows you to edit
- the text of your message or form.
-
- .lp \h'24p'f 66p
- Forget. This gets you out of sending a message you started. If you are
- in send-only mode, the message is saved to the file \f2Canceled.mail\f1
- in your home directory. Otherwise
- it can be restored at the next \f3forward\f1, \f3mail\f1,
- or \f3reply\f1 command during the current session of Elm After
- issuing one of those commands you will be prompted with \*QRecall last
- kept message?\*U
-
- .lp \h'24p'h 66p
- Edit headers. This puts you into the \f2header editing mode\f1, whereby
- you can edit any of the various headers of your message. Like
- the options screen, it's self-documenting, so it isn't explained in too much
- detail here.
-
- .lp \h'24p'i 66p
- Run \f2ispell\f1 (or some other configured spelling correction program).
- The outgoing message is run through an interactive spelling correction program
- if one is available. The default spelling program is the GNU \f2ispell\f1 program
- unless changed by the person who installed Elm on your system.
-
- .lp \h'24p'm 66p
- Make form. This converts the message you have edited into a form. See
- the \f3forms\f1 variable under \f3Boolean Variables\f1 in section 2 and
- \f2The Elm Forms Mode Guide\f1 for more details.
-
- .lp \h'24p's 66p
- Send. This sends the message as is without any further ado.
- .in 0
- .br
- .ne 5
- .sp
- .hn 1 "Using Elm with \*Qeditor = none\*U"
- .sp
- The Elm program also supports a builtin editor for simple message
- composition that is very (very) similar to the simple line
- editor available from the \f2Berkeley Mail\f1 system.
-
- To access it, you need merely to specify \*Q\f3editor=none\f1\*U in
- your \f2.elm/elmrc\f1 file.
- With that, any messages to be composed
- that don't already have text in the buffer (e.g. no reply with
- the text included, etc.), will use this editor.
- .sp
- From the builtin editor, the following options are available for use.
- Each command here is prefixed with a \*q~\*u (tilde).
- You can specify a different \*Qescape\*U character in your \f2.elm/elmrc\f1 file,
- if you desire (see the \f3escape\f1 variable under \f3String
- Variables\f1 in section 2).
- .sp
-
- .lp \h'16p'~? .5i
- Print a brief help menu.
-
- .lp \h'16p'~b .5i
- Change the Blind-Carbon-Copy list.
-
- .lp \h'16p'~c .5i
- Change the Carbon-Copy list.
-
- .lp \h'16p'~e .5i
- Invoke the \f3easyeditor\f1 editor on the message, if possible
- (see the \f3easyeditor\f1 variable under \f3String Variables\f1 in
- section 2).
-
- .lp \h'16p'~f .5i
- Add the specified message or current message.
-
- .lp \h'16p'~h .5i
- Change all the available headers (To, Cc, Bcc, and Subject).
-
- .lp \h'16p'~m .5i
- Same as \f3~f\f1, but with the current \f3prefix\f1 (see the
- \f3prefix\f1 variable under \f3String Variables\f1 in section 2).
-
- .lp \h'16p'~o .5i
- Invoke a user specified editor on the message.
-
- .lp \h'16p'~p .5i
- Print out, on the screen, the message as typed in so far.
-
- .lp \h'16p'~r .5i
- Include (read in) the contents of the specified file.
-
- .lp \h'16p'~s .5i
- Change the Subject line.
-
- .lp \h'16p'~t .5i
- Change the To list.
-
- .lp \h'16p'~v .5i
- Invoke the \f2vi\f1 visual editor on the message.
-
- .lp \h'16p'~< .5i
- Execute the specified
- .ux
- command, entering the output
- of the command into the editor buffer upon completion.
- For example, \*Q~< who\*U includes the output of
- the \f2who\f1 command in your message.
-
- .lp \h'16p'~! .5i
- Execute a
- .ux
- command if one is given (as in \*Q~!ls\*U) or
- give the user a shell, either from the \f3shell\f1 variable setting in
- the \f2.elm/elmrc\f1 file or the default (see the \f3shell\f1 variable
- under \f3String Variables\f1 in section 2).
-
- .lp \h'16p'~~ .5i
- Add a line prefixed by a single \*q~\*u character.
- .in 0
- .sp
- A useful note is that the \f3~f\f1 and \f3~m\f1 commands invoke the \f2readmsg\f1
- command, so you can pass parameters along too. For example, if we
- wanted to include a message from Joe, without any headers, but with each
- line prefixed, we could use:
- .sp
- .nf
- .ft CW
- .zf
- .ti .5i
- \&~m \-n Joe
- .ft 1
- .fi
- .sp
- to accomplish the task.
-
- To learn more about how they work, try 'em!
- .br
- .ne 5
- .sp
- .hn 1 The Alias System
- .sp
- As mentioned previously, there exists in the Elm
- system a set of aliases that associate
- an arbitrary word (such as a persons name) to a complex address or group.
- The advantages are readily apparent; rather than
- remembering an address of the form:
- .sp
- .nf
- .ps 9
- .ft CW
- .zf
- .ti .5i
- host1!host2! ... !hostN!user
- .ft 1
- .ps 10
- .fi
- .sp
- the user merely has to remember a single word.
-
- Two alias tables are available for a each
- user within Elm,
- namely the system alias file and the user's alias file. The
- system alias file is created and maintained (by the system administrator)
- by editing the file name defined for \f2SYSTEM_ALIASES\f1 in the
- \f2sysdefs.h\f1 file (see \f2The Elm Configuration Guide\f1) and as described
- in the documentation with the \f2newalias\f1 command,
- then running the \f2newalias\f1 program.
-
- An individual user can also have an alias file which works
- in conjunction with the system aliases. To do this, one
- merely needs to enter the alias menu system and create aliases with
- the \f3a\f1 (\f3alias current message\f1) or \f3n\f1
- (\f3make new alias\f1) commands.
- Alternatively, the user can peruse the documentation for the \f2newalias\f1
- command and create a file as indicated therein. After
- executing the program, the aliases are available
- for use from within Elm.
- .sp
- Please refer to \f2The Elm Alias Users Guide\f1 for complete details.
- .sp 2
- Within Elm,
- however, the alias system acts as an entirely different program, with
- its own display, own commands, and own mini-menu. The aliases are
- presented in a
- list similar to the index screen with the following menu:
- .sp
- .sd
- .nf
- .ps 9
- .ft CW
- .zf
- .ce 3
- Alias commands: ?=help, <n>=set current to n, /=search pattern
- a)lias current message, c)hange, d)elete, e)dit aliases.text, f)ully expand,
- l)imit display, m)ail, n)ew alias, r)eturn, t)ag, u)ndelete, or e(x)it
- .sp
- Alias: @
- .sp
- .ps 10
- .ft 1
- .ed
- .fi
-
- The commands are:
-
- .lp \h'16p'? .5i
- Help. This command used once puts you in the \f2help\f1
- mode, where any key you press will result in a one-line description
- of the key. Pressing \*q?\*u again at this point produces a
- summary listing each command available.
- Pressing \*q.\*u (period) leaves the help mode and returns you to the
- alias command prompt.
-
- .lp "\h'16p'<space> or <return> or v" .5i
- Display the current alias address. The alias address is displayed below
- the alias menu. This command allows you to verify the address for a
- person or the contents of a group alias.
-
- .lp \h'16p'$ .5i
- Resynchronize the alias text file (\f2$HOME/.elm/aliases.text\f1) and
- alias database by rebuilding the database from the text file by running
- \f2newalias\f1. Aliases marked for deletion are removed, tagged aliases
- are untagged, and new and changed aliases are recognized. The alias
- screen is updated to reflect these changes.
-
- .lp \h'16p'\/ .5i
- Pattern match. This command allows the
- user to search through all the \f2alias\f1 and \f2username\f1
- entries in the alias list
- starting at the current alias and
- continuing through the end.
- If the first character of the
- pattern is a \*q/\*u, then Elm also includes the \f2comment\f1
- and the fully expanded \f2address\f1 fields in the search.
- The search is case insensitive. This allows the user to find a
- specific alias in the situation where there are a large number of
- aliases.
-
- .lp \h'16p'a .5i
- Alias current message.
- This allows the user to create an alias that has the
- return address of the current message as the address field of
- the alias. It prompts for a unique alias name. If the alias
- name is not unique, you will be asked if you wish to replace
- the existing alias. For further
- information, please see \f2The Elm Alias System Users Guide\f1.
-
- .lp \h'16p'c .5i
- Change current alias. This will prompt for changes to the current
- names and address. If other aliases are tagged you will be asked if you
- want to create a group alias from the tagged aliases. The original
- alias is replaced with the new information in
- your individual alias file (\f2$HOME/.elm/aliases.text\f1) and
- then added to the database (at the next alias resync). Aliases
- that have been changed are marked with an \*qN\*u (for new) until
- the database is updated.
-
- .lp "\h'16p'd, u" .5i
- Delete or undelete an alias.
- This allows the user to mark an alias for deletion in the same fashion
- as on the index screen. The deletions are not
- actually made until the user returns to the main menu with the \f3r\f1,
- \f3q\f1, or \f3i\f1 commands or resyncs
- the display with the \f3$\f1 command. Deletions on system aliases are not
- allowed. These commands (plus the \f3<control>-D\f1
- and \f3<control>-U\f1 versions) behave identically to their index screen
- counterparts (see section 7, \f3Commands\f1).
-
- .lp \h'16p'e .5i
- Edit the \f2.elm/aliases.text\f1 file. The user alias file is edited
- using the editor defined in the \f3editor\f1 variable in your
- \f2\&.elm/elmrc\f1 file (see \f3String Variables\f1 in section 2).
- \f2newalias\f1 is run after the edit.
-
- .lp \h'16p'f .5i
- Display fully expanded alias. The currently selected
- alias is fully expanded and displayed to the user. This is most useful when
- working with group aliases.
-
- .lp \h'16p'l .5i
- Limit the display. You can limit the display by alias type (person/group
- or user/system) or by search pattern on name or alias. Otherwise, this
- works exactly like the limit command on the index screen.
-
- .lp \h'16p'm .5i
- Send mail to the current alias. The user is prompted to compose a new
- mail message to be sent to the
- person or group specified by the selected alias. If aliases are
- tagged the message is mailed to the person(s) and/or group(s)
- specified by the tagged aliases. Tags are cleared after mailing the
- message.
-
- .lp \h'16p'n .5i
- Make a new user alias. This prompts for a unique alias name and
- then for an address. If the alias
- name is not unique, you are asked if you wish to replace
- the existing alias. If aliases are tagged you are asked if you
- want to create a group alias from the tagged aliases.
- The information provided is added
- to your individual alias file (\f2$HOME/.elm/aliases.text\f1) and
- then added to the database at the next alias resync.
-
- .lp "\h'16p'r or q or i" .5i
- Return. Return to the index screen of the Elm program. Any pending
- deletions are processed and newalias is run to update the database. New
- additions are handled at this time as well.
-
- .lp "\h'16p'R or Q or I" .5i
- Quick return. This behaves like the \*qr\*u command except that you are never
- prompted for answers to alias disposition questions.
- Elm disposes of aliases according to the value
- set for the \f3alwaysdelete\f1 variable
- in your \f2.elm/elmrc\f1 file (see \f3Boolean Variables\f1 in
- section 2).
-
- .lp \h'16p't .5i
- Tag.
- Tag the current alias for a later operation.\s-2\u5\d\s0
- .fn
- 5. Currently only \f3mail\f1, \f3change\f1, and \f2n3w alias\f1 support this.
- .ef
- This command (plus the \f3<control>-T\f1
- version) behaves identically to its index screen
- counterpart (see section 7, \f3Commands\f1).
-
- .lp \h'16p'x .5i
- Exit alias menu. Exits the alias menu without processing any
- deletions. Aliases marked for deletion are unmarked and
- \f2newalias\f1 is not run, even if alias additions have been made.
- .in 0
- .sp
- Additionally, the movement keys (\*qj\*u, \*qk\*u, \*q+\*u, \*q\-\*u,
- etc.) work in the same fashion as on the index screen (see section 7,
- \f3Commands\f1).
- .br
- .ne 5
- .sp
- .hn 1 Elm and Signals
-
- Elm can handle several standard
- .ux
- \f2signals\fR to do
- some special processing.
- Signals are interrupt messages sent from one program to
- another. No detailed messages are sent, but a properly configured
- program (such as Elm) can watch for and handle these signals.
-
- In particular, Elm watches for the following signals
- and takes these actions:
- .lp ALRM .5i
- This is the alarm clock signal or time warning.
- Elm uses this to wake itself up periodically and check for
- new mail.
- .lp HUP .5i
- This is the hangup notice.
- It means that the terminal/modem/whatever which you have been using
- with Elm has become detached from the system where Elm
- was running.
- When Elm gets this signal, it aborts all the pending operations
- and exits, leaving your mailbox unchanged.
- .lp USR1 .5i
- This is the first user-defined signal.
- When Elm gets this signal, it receives any pending mail,
- performs all the pending operations (deletes), and exits
- leaving all unread mail marked as new.
- This is the same as giving both the \f3$\f1 and \f3X\f1 commands.
- .lp USR2 .5i
- This is the second user-defined signal.
- When Elm gets this signal, it receives any pending mail,
- performs all the pending operations (deletes), and exits,
- leaving all unread mail marked as old.
- This is the same as giving both the \f3$\f1 and \f3Q\f1 commands.
- .in 0
- .sp
- You would only use these signals yourself under the most unusual
- circumstances. For example, suppose you were using \f3Elm\fR
- to read mail on \f2host_1\fR. You have many messages, most of
- which have been read and filed (and therefore deleted), or simply
- deleted. You have not yet resynchronized your mailbox (\f3$\f1
- command). Now you go to lunch.
- On your return, you're stopped at the door and told to take care
- of an emergency. You go to another part of the building, and want
- to read your mail to see what the emergency is \(em but you can't,
- because Elm is still running at your desk.
-
- What you really want is one of the scenarios given in the
- description of \f2HUP\f1, \f2USR1\f1 or \f2USR2\f1.
- Use your local \f2ps\f1 command to find out what the \f2process number\f1
- of your Elm session is. Then give the command
- .sp
- .nf
- .ft CW
- .zf
- .ti .5i
- kill \-\f2XXX process_number\f1
- .fi
- .sp
- where \f2XXX\f1 is either \*QHUP\*U, \*QUSR1\*U or \*QUSR2\*U and
- \f2process_number\f1 is the process number for your remote Elm session.
- Your remote session will terminate with the actions noted above.
- .br
- .ne 5
- .sp
- .hn 1 Expert Mail Users and Debugging the Mailer
-
- There are some additional facilities available in the Elm
- mailer for those people who are knowledgeable about
- mail protocols, or trying to debug/track down a problem.
-
- The \f3h\f1 (\f3display with headers\f1) command at the command prompt
- displays the current message ignoring the current
- setting of the \f3weed\f1 variable (see \f3Boolean Variables\f1 in
- section 2). This is most useful
- for answering questions of the form \*QI wonder what
- this guy put in his header?\*U and such. This command
- does not show up on the mini-menu because it is somewhat
- esoteric, but it does appear on the help screen.
-
- The \f3@\f1 command at the command prompt
- outputs a screen of debugging information,
- including the number of lines and
- offsets of each of the messages in the current mailbox.
-
- The \f3#\f1 command at the command prompt
- displays the entire stored \*Qrecord structure\*U for
- the current message.
-
- The \f3%\f1 command
- displays the full computed return address of the
- current message.
-
- Starting up Elm with the \f3\-d\f1 (debug) option (see section 3,
- \f3Command Line Options\f1) creates a file called
- \f2ELM:debug.info\f1 in your home directory which contains a wealth of useful
- information (to me, at least!) to aid in tracking down
- what errors are occurring and why.
-
- If there are any problems with Elm, please try
- to recreate the error with the debug option enabled
- and set to the highest level (11) before sending defect reports my way.
-
- One final note: all error names reported by the program
- are documented in the \f2AT&T System V Interface Definition Reference
- Manual\f1 in \f3errno\f1(2).
--- 0 ----
Index: elmME+.2.5.alpha1-cvs/doc/Users.guide
*** elmME+.2.5.alpha0/doc/Users.guide 2002-01-26 13:14:45.000000000 +0200
--- /tmp/12834-very-long-file-name-NULL-comes-in-here--XXXXXXXXX 2004-07-04 14:00:44.000000000 +0300
***************
*** 1,1102 ****
- .\" @(#)$Id: Users.guide,v 1.2 1998/10/20 19:57:20 hurtta Exp $
- .\"
- .\" Users guide to the ELM mail system.
- .\" format with:
- .\" 'tbl Users.guide | troff tmac.n - > Users.fmtd'
- .\"
- .\" Elm is now in the public trust.
- .\"
- .\" (C) Copyright 1986,1987 Dave Taylor
- .\" (C) Copyright 1988-1992 Usenet Community Trust
- .\"
- .\"
- .tm I trust we've run this through "tbl" first...
- .\" Define the big box macro for troff
- .de eb
- .sp -1
- .nf
- .ie t \{\
- \h'-.5n'\L'|\\nau-1'\l'\\n(.lu+1n\(ul'\L'-|\\nau+1'\l'|0u-.5n\(ul'
- .\}
- .el \{\
- \h'-.5n'\l'\\n(.lu+1n'
- .\}
- .fi
- ..
- .\" Define break line for user interaction displays
- .de bl
- .ie t .tl '\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-'''
- .el .tl '-----------------------------------------------------------------'''
- ..
- .po 1i
- .ds h0
- .ds h1
- .ds h2
- .ds f0
- .ds f1
- .ds f2
- .nr Hy 1
- .nr Pt 1
- .nr Pi 0
- .lg 0
- .nf
- .na
- .rs
- .za
- .\" This will keep the nroff version of the title page on one sheet.
- .if t .sv |2.0i
- .ce 99
- .ps 20
- .ss 18
- .vs 12
- \f3The Elm Users Guide\f1
- .sp 3
- .ps 12
- .ss 14
- .vs 14
- \f2A painless introduction to electronic mail
- using the \f3Elm\fP mail system\f1
- .sp 3
- The Elm Mail System
- (Version 2.4)
- .sp 2
- Syd Weinstein, Elm Coordinator
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .fi
- .ad
- .ps 8
- .if t .vs 9
- .sp 4
- \f3ABSTRACT\f1
- .ce 0
- .sp
- .in +1i
- .ll -1i
- While various UNIX utilities have been designed to
- take advantage of the CRT screen
- (rather than line-oriented systems)
- electronic mail systems haven't \*Qcaught the wave\*U.
- This document
- presents Elm, a sophisticated
- full-screen mail system for interactive use.
- Elm offers all the features of
- \f2/bin/mail\f1, \f2Berkeley Mail\f1, \f2uumail\f1, \f2NMail\f1 and
- the AT&T Mail family of UNIX mailers (namely \f2PMX/TERM\f1) in a
- unified and intuitive fashion.
- .br
- .ll +1i
- .in -1i
- .sp |9.0i
- .ce 99
- .ps 12
- .ss 14
- .vs 14
- \s18\f3\*(ct\f1\s12 Copyright 1986,1987 by Dave Taylor
- \s18\f3\*(ct\f1\s12 Copyright 1988-1992 by The USENET Community Trust
- .fi
- .ad
- .bp 1
- .sv 5v
- .ps 14
- .ss 12
- .vs 16
- \f3Elm Users Guide\f1
- .ds h0 "Elm Users Guide
- .ds h1
- .ds h2 "Version 2.4
- .ds f0 "October 1, 1992
- .ds f1
- .ds f2 "Page %
- .sp
- .ps 10
- .ss 12
- .vs 12
- (The Elm Mail System, \*(h2)
- .sp
- \*(f0
- .sp 2
- Syd Weinstein
- Datacomp Systems, Inc.
- 3837 Byron Road
- Huntingdon Valley, PA 19006-2320
- .sp
- email: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm
- .sp 2
- Derived from
- \*QThe Elm Mail System, Version 2.0\*U
- by
- Dave Taylor
- Intuitive Systems
- Mountain View, California
- email: taylor\s-1@\s+1intuitive.com or limbo\s-1!\s+1taylor
- .ce 0
- .sp 3
- .hn 1 Introduction
-
- The
- .ux
- operating system was originally written on a small PDP machine,
- to work with teletypewriters. Consequently, all the original software for
- the operating system was written with a \*Qtty\*U in mind;
- with line oriented interfaces, rather than screen oriented.
-
- Gradually this began to change, and, with the addition of the Berkeley \f2vi\f1
- visual shell to the \f2ed\f1
- line editor, the trend began to be brought to the attention of
- .ux
- systems designers.
- And yet, this transition has seemed
- too subtle for many software engineers,
- and so precious few
- .ux
- programs are available
- designed to exploit the entire CRT screen.
-
- Consequently, after becoming more and more disenchanted
- with the existing electronic mail facilities (\f2binmail\f1
- and \f2Berkeley Mail\f1)
- Dave Taylor decided to undertake creating his own system.
- Once the ball was rolling it became quite
- difficult not to keep enhancing it, especially as he and
- the Elm Development Group
- became more and more familiar with various different mail
- systems, but the result, we hope, is a solid, unified interface
- to electronic mail suitable for almost any environment.
-
- One thing that sets the Elm mail system off from
- other packages is that it
- comes with an extensive documentation set, including;
- \f2The Elm Users Guide\f1, which you're holding,
- \f2The Elm Reference Guide\f1,
- \f2The Elm Alias Users Guide\f1,
- \f2The Elm Filter System Users Guide\f1,
- \f2The Elm Forms Mode Guide\f1,
- and \f2The Elm Configuration Guide\f1.
- The names of each indicate
- what they discuss (not unreasonably).
-
- This particular document contains;
- this introduction, a tutorial session with the mailer, a
- discussion of non-interactive uses of Elm,
- a brief foray into the Elm utilities,
- and finally, credits and references.
-
- \f2The Elm Reference Guide\f1 contains a
- much more in-depth discussion of all the possible options
- available within the Elm environment, including
- the \f2.elm/elmrc\f1 file,
- the available outbound mail processing features,
- a section for expert users, suggestions
- on debugging strange installations, and
- many other useful topics.
-
- \f2The Elm Alias Users Guide\f1 is the place
- to go to learn about the format of the \f2.elm/aliases.text\f1
- file and the associated data files, system aliases, and other
- related topics.
-
- One of the more innovative features of Elm is
- the ability to transmit and receive \*Qforms\*U (as
- defined by the AT&T Mail system). To learn about
- how to create and reply to forms you should refer
- to \f2The Elm Forms Mode Guide\f1.
-
- If you find yourself getting too much mail delivered in
- your mailbox, you might be a good candidate for the
- \f2filter\f1 program. To learn more about what
- this program is and how to use it please
- consult \f2The Elm Filter System Users Guide\f1.
-
- Finally, if you're working with the actual source code
- and are interested in what all the locally configured
- options are and mean, please see
- \f2The Elm Configuration Guide\f1. It is
- strongly suggested that all system administrators
- and people installing the system print out the
- local \f2sysdefs.h\f1 file and have it handy while
- reading the configuration guide.
-
- The recommended order of learning the Elm
- system is to skim this guide until you feel
- confident enough to start up the program. Once
- that's reached, \f2use it!\f1 Soon you'll find
- areas that you need to expand into, and you can
- achieve that by going into the options
- screen within Elm and changing your
- user level accordingly.
- After a while, sit down again and read through this
- guide. You should have a couple of \*Qaha!\*U intuitive
- flashes. After another period of time, you're
- ready to delve into the real power of the system
- and read the reference guide. The other manuals
- should be read as the need arises.
-
- In any case, the system should be usable without reading
- \f2any\f1 of the documentation!
-
- Any comments or problems with any of the documentation or the program
- itself are welcome; if you can't get electronic mail to the Elm
- Development Group, please feel free instead to drop me a note via the
- overland mail address in the title page.
- .br
- .ne 20
- .sp
- .hn 1 The Main System
-
- Upon entry to the program, the main screen will be
- displayed as below:
-
- .\" display start, constant width, remember loc for BOX
- .ft CW
- .zf
- .ps 9
- .mk a
- .sp
- .ce
- Mailbox is \'/usr/mail/mymail\' with 15 messages [Elm 2.4PL22]
- .TS
- r l n l l l l.
- \-> N 1 Apr 24 Larry Fenske (49) Hello there
- N 2 Apr 24 jad@hpcnoe (84) Chico? Why go there?
- E 3 Apr 23 Carl Smith (53) Dinner tonight?
- NU 4 Apr 18 Don Knuth (354) Your version of TeX...
- N 5 Apr 18 games (26) Bug in cribbage game
- A 6 Apr 15 kevin (27) More software requests
- 7 Apr 13 John Jacobs (194) How can you hate RUSH?
- U 8 Apr 8 decvax!mouse (68) Re: your Usenet article
- 9 Apr 6 root (7)
- O 10 Apr 5 root (13)
- .TE
- .sp
- .ce 3
- You can use any of the following commands by pressing the first character;
- d)elete or u)ndelete mail, m)ail a message, r)eply or f)orward mail, q)uit
- To read a message, press <return>. j = move down, k = move up, ? = help
- Command : @
- .sp
- .\" draw box, proportional Roman font back, display end
- .eb
- .ps 10
- .ft 1
-
- There are a number of things to notice about this, the main screen;
-
- .lp \h'12p'\(bu 20p
- Most likely, on your computer the message currently \*Qactive\*U will be
- displayed in an inverse bar rather than being delimited by the two
- character arrow as here. It's nothing to worry about; displaying
- inverse video is just quite difficult on printable guides!
-
- .lp \h'12p'\(bu 20p
- The first line on the screen always displays the name of the current folder,
- the number of messages in the folder, and the current Elm version number.
-
- .lp \h'12p'\(bu 20p
- The arrow (\*Q\->\*U) or inverse video bar will always
- indicate which is the current message.
-
- .lp \h'12p'\(bu 20p
- The first field that appears associated with each message is
- the status field. This can be blank (as with most of the
- ones above, or can have any combination of the following:
-
- The first character signifies temporary status:
-
- .ta .75iC 102p
- .nf
- E for an \f2expired\f1 message
- N for a \f2new\f1 message
- O for an \f2old\f1 (i.e. not new but not read) message
- D for a \f2deleted\f1 message
-
- The second character which signifies permanent status:
-
- C for \f2confidential\f1 mail
- U for \f2urgent\f1 mail
- P for a \f2private\f1 message
- A for messages that have an \f2action\f1 associated with them
- F for a \f2form\f1 letter
- M for a \f2MIME\f1 compliant message
- .fi
-
- The third character of the status field can be a \*q+\*u to
- indicate that the message is \f2tagged\f1 too.
-
- .lp \h'12p'\(bu 20p
- Continuing from left to right, the next field is the message
- number. For the most part you can ignore these unless you want
- to quickly move to a specific message (as we'll see later).
-
- .lp \h'12p'\(bu 20p
- The date associated with each message is typically
- the date the person actually \f2sent\f1 the message.
-
- .lp \h'12p'\(bu 20p
- The next field displayed indicates whom the message is from.
- Elm will try to display the \f2full name\f1 of the person who
- sent the message, rather than the their return address or computer login.
- Some systems don't generate the correct headers, though, hence
- messages like numbers 2 and 8, where it's their return address.
-
- .lp \h'12p'\(bu 20p
- The number in parentheses is the total number of lines in the message.
-
- .lp \h'12p'\(bu 20p
- The final field is the subject of the message. Notice
- that messages might not have any subject, as in messages #9 and #10.
-
- .lp \h'12p'\(bu 20p
- A maximum of ten messages are displayed at one time.\s-2\u1\d\s0
- .fn
- 1. On screens with more than 24 lines, additional messages are
- displayed automatically. Furthermore, if you choose to turn off
- the menu display, you can have an even greater number
- displayed.
- .ef
- Further into the document we'll learn how to change \*Qpages\*U in the folder.
-
- .lp \h'12p'\(bu 20p
- The three line menu display will always
- indicate the relevant commands. There are actually two possible
- menus that can be displayed, based
- on the \f2user level\f1 as set from either the options screen or
- the \f2.elm/elmrc\f1
- file. The alternate menu, for more advanced users,
- lists more options;
- .sp
- .ft CW
- .zf
- .ps 9
- .ce 3
- |=pipe, !=shell, ?=help, <n>=set current to n, /=search pattern
- a)lias, C)copy, c)hange folder, d)elete, e)dit, f)orward, g)roup reply, m)ail,
- n)ext, o)ptions, p)rint, r)eply, s)ave, t)ag, q)uit, u)ndelete, or e(x)it
- .ps 10
- .ft 1
-
- .lp \h'12p'\(bu 20p
- Finally, the \*q@\*u character indicates where the cursor would be, awaiting
- your input.
-
- .sp
- .in 0
- The typical action at this point is to use the \f2<return>\f1
- key to read the current message, which will clear the
- screen and display the current message:
-
- .ne 10
- .ft CW
- .zf
- .ps 9
- .mk a
- .tl ' Message 1/15 from Larry Fenske''Apr 24 \'87 at 8:45 pm edt'
- .tl ''Hello there''
- .nf
- Dave,
- Just wanted to drop you a brief note to see what was going on with
- you this afternoon. Life here has been the usual fun and games...
- Ah well, off to the great wilds beyond the desk!
- Larry
- Command (\'i\' to return to index): @
- .fi
- .eb
- .ft 1
- .ps 10
-
- Before we go further with our example, however, let's very
- quickly look at all the functions available from the main
- screen:
- .\" ensure we get a reasonable chunk of this table on the page...
- .br
- .ne 10
- .lp \h'18p'\f3Command 90p
- Action\f1
-
- .lp "\h'18p'<return> or <space>" 90p
- Read current message.
- .lp \h'18p'| 90p
- Pipe current message or tagged messages to specified system command.
- .lp \h'18p'! 90p
- Shell escape.
- .lp \h'18p'$ 90p
- Resynchronize folder.
- .lp \h'18p'? 90p
- Help mode \(em any key pressed will be explained.
- .lp "\h'18p'+ or <right>" 90p
- Display next page of subjects.
- .lp "\h'18p'\- or <left>" 90p
- Display previous page of subjects.
- .lp \h'18p'= 90p
- Set current message to 1.
- .lp \h'18p'* 90p
- Set current to last message.
- .lp \h'18p'<number><return> 90p
- Set current message to number \f2number\f1.
- .lp \h'18p'/ 90p
- Search for pattern in subject/from lines.
- .lp \h'18p'// 90p
- Search for pattern in entire folder.
- .lp \h'18p'< 90p
- Scan message for calendar entries.\s-2\u2\d\s0
- .fn
- 2. Some sites might opt not to have the calendar feature available.
- .ef
- .lp \h'18p'> 90p
- A synonym for \f3s\f1 \(em \f3save\f1 message or messages.
- .sp
- .lp \h'18p'a 90p
- Alias, change to \*Qalias\*U mode.
- .lp \h'18p'b 90p
- Bounce \(em remail message (see \f3f\f1 \(em \f3forward\f1 too).
- .lp \h'18p'C 90p
- Copy current message or tagged messages to folder.
- .lp \h'18p'c 90p
- Change to another folder.
- .lp \h'18p'd 90p
- Delete current message.
- .lp \h'18p'<control>-D 90p
- Delete all messages matching specified pattern.
- .lp \h'18p'e 90p
- Edit current folder, resyncing upon re-entry.\s-2\u3\d\s0
- .fn
- 3. Some sites might opt not to have the edit folder feature available.
- .ef
- .lp \h'18p'f 90p
- Forward message to specified user.\s-2\u4\d\s0
- .fn
- 4. The difference between \f3forward\f1 and \f3bounce\f1 is rather
- subtle \(em a forwarded message is \f2from\f1 you, with the
- original message included, whereas a bounced message
- is still from the original sender.
- .ef
- .lp \h'18p'g 90p
- Group reply \(em reply to everyone who received the current message.
- .lp \h'18p'h 90p
- Display message with headers.
- .lp \h'18p'i 90p
- Return to index screen after displaying message.
- .lp \h'18p'J 90p
- Set current to next message.
- .lp "\h'18p'j or <down>" 90p
- Set current to next message not marked deleted.
- .lp \h'18p'K 90p
- Set current to previous message.
- .lp "\h'18p'k or <up>" 90p
- Set current to previous message not marked deleted.
- .lp \h'18p'l 90p
- Limit displayed messages based on the specified criteria.
- .lp \h'18p'<control>-L 90p
- Rewrite screen.
- .lp \h'18p'm 90p
- Mail to arbitrary user(s).
- .lp \h'18p'n 90p
- Read current message, then increment to next message not marked deleted.
- .lp \h'18p'o 90p
- Alter current system options.
- .lp \h'18p'p 90p
- Print current message or tagged messages.
- .lp \h'18p'q 90p
- Quit \(em maybe prompting for messages to delete, store, or keep.
- .lp \h'18p'Q 90p
- Quick quit \(em like quit but without prompting.
- .lp \h'18p'r 90p
- Reply to the author of current message.
- .lp \h'18p's 90p
- Save current message or tagged messages to folder.
- .lp \h'18p't 90p
- Tag current message.
- .lp \h'18p'<control>-T 90p
- Tag all messages matching specified pattern.
- .lp \h'18p'u 90p
- Undelete current message.
- .lp \h'18p'<control>-U 90p
- Undelete all messages matching specified pattern.
- .lp \h'18p'x 90p
- Exit \(em prompt if mailbox changed, don't record as read, don't save.
- .lp \h'18p'X 90p
- Exit immediately \(em don't record as read, don't save.
- .in 0
- .sp
- .ne 10
- But let's go back to our example and see some of this at
- work, shall we?
- .sp
- We were reading the message from Larry and the screen looked
- like:
-
- .ne 10
- .ft CW
- .zf
- .ps 9
- .mk a
- .tl ' Message 1/15 from Larry Fenske''Apr 24 \'87 at 8:45 pm edt'
- .tl ''Hello there''
- .nf
- Dave,
- Just wanted to drop you a brief note to see what was going on with
- you this afternoon. Life here has been the usual fun and games...
- Ah well, off to the great wilds beyond the desk!
- Larry
- Command (\'i\' to return to index): @
- .fi
- .eb
- .ft 1
- .ps 10
-
- From this point let's go ahead and reply to the message. To
- do this, we can use the \f3reply\f1 command.
- To do this, we type \*qr\*u and the last few lines change to
- something like:
- .ft CW
- .zf
- .ps 9
- .sp
- .bl
- .tl 'Command: Reply to message''Copy message? (y/n) @ '
- .sp 2
- .ft 1
- .ps 10
- To which we decide that we don't need the text of this message in
- our new one, so we reply \f2no\f1 by pressing the \*qn\*u key. The
- bottom part of the window then changes to:
- .ft CW
- .zf
- .ps 9
- .sp
- .bl
- .ie t .tl 'Command: Reply to message'To: Larry Fenske ''
- .el .tl 'Command: Reply to message''To: Larry Fenske '
- .tl 'Subject: Re: Hello there@'''
- .ft 1
- .ps 10
- .sp 2
- At this point we can either decide to enter a new subject (you could
- use either \f2backup word\f1 (\f2<control>-W\f1) or \f2backup line\f1 (this
- is the same as your \*Qline kill\*U character,
- \f2<control>-X\f1 or \f2<control>-U\f1
- usually)) or go with this one by pressing \f2<return>\f1. We'll
- just leave it as it is and press \f2<return>\f1, changing the
- screen to:
- .ps 9
- .ft CW
- .zf
- .sp
- .bl
- .ie t .tl 'Command: reply to message'To: Larry Fenske ''
- .el .tl 'Command: reply to message''To: Larry Fenske '
- .tl 'Subject: Re: Hello there'''
- .tl 'Copies to: @'''
- .ps 10
- .ft 1
- .sp
- There's no one we want to have receive copies of this message, so we'll
- just press \f2<return>\f1 again to indicate this.
-
- Once you've answered these questions the program will put you into
- your favorite editor and let you compose a response. When you're
- done it then asks:
- .ps 9
- .ft CW
- .zf
- .sp
- .tl 'Please choose one of the following options by parenthesized letter: @'''
- .tl ''e)dit message, edit h)eaders, s)end it, or f)orget it.''
- .ft 1
- .ps 10
- .sp
- Since we're just interested in sending the message out, we'll
- choose the \f3send\f1 option and press \*qs\*u. The program
- then sends the message, indicating that by the line below
- saying:
- .sp
- .ps 9
- .ft CW
- .zf
- Sending mail...
- .ft 1
- .ps 10
- .sp
- then putting at the bottom of the screen ``Mail sent!'' and giving us
- the prompt:
- .ps 9
- .ft CW
- .zf
- .sp
- .bl
- .tl 'Command:''(Use \'i\' to return to index.)''
- .sp
- .ps 10
- .ft 1
- Pretty easy, isn't it? Let's continue by going back to the main
- screen pressing the \*qi\*u key to request the \f2index\f1. The
- screen is then:
-
- .ne 20
- .ft CW
- .zf
- .ps 9
- .mk a
- .sp
- .ce
- Mailbox is \'/usr/mail/mymail\' with 15 messages [Elm 2.4PL22]
- .TS
- r l r l l l l.
- \-> 1 Apr 24 Larry Fenske (49) Hello there
- N 2 Apr 24 jad@hpcnoe (84) Chico? Why go there?
- E 3 Apr 23 Carl Smith (53) Dinner tonight?
- NU 4 Apr 18 Don Knuth (354) Your version of TeX...
- N 5 Apr 18 games (26) Bug in cribbage game
- A 6 Apr 15 kevin (27) More software requests
- 7 Apr 13 John Jacobs (194) How can you hate RUSH?
- U 8 Apr 8 decvax!mouse (68) Re: your Usenet article
- 9 Apr 6 root (7)
- O 10 Apr 5 root (13)
- .TE
- .sp
- .ce 3
- You can use any of the following commands by pressing the first character;
- d)elete or u)ndelete mail, m)ail a message, r)eply or f)orward mail, q)uit
- To read a message, press <return>. j = move down, k = move up, ? = help
- Command : @
- .sp
- .\" draw box, proportional Roman font back, display end
- .eb
- .ft 1
- .ps 10
-
- Notice that the first message is no longer marked as \f2new\f1
- since we've now read it.
- .sp
- Let's go ahead and read the message from kevin (message #6) since
- it has some sort of \f2action\f1 associated with it anyway. To
- do this, we simply press the \*q6\*u key, which will change the
- bottom of the screen to:
- .sp
- .ps 9
- .ft CW
- .zf
- .tl 'Command: New Current Message''Set current message to : 6@'
Will be available on ftp.funet.fi
via anonymous ftp
directory pub/unix/mail/elm/elm-ME+2.5/
files elm-ME+2.5.PLalpha1.patch.gz
and elm-ME+2.5.alpha1.tar.gz
or
<URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-ME+2.5/elm-ME+2.5.PLalpha1.patch.gz >
and <URL: http://www.nic.funet.fi/pub/unix/mail/elm/elm-ME+2.5/elm-ME+2.5.alpha1.tar.gz >
Is available with
<URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.PLalpha1.patch.gz >
and <URL: http://www.ozone.FMI.FI/KEH/elm-ME+2.5.alpha1.tar.gz >
via WWW.
Before applying patch catenate parts 1 - 4 first.
This patch is agaist Elm ME+ 2.5 PLalpha0
============================================= [ part 3/4 ] =================
- .ft 1
- .ps 10
- .sp
- We'll just press \f2<return>\f1 to move the active message
- pointer (the arrow).
- .sp
- Now we're pointing at the new message, so let's go ahead and read
- it by pressing \f2<return>\f1 again, giving us:
-
- .ne 10
- .ft CW
- .zf
- .ps 9
- .mk a
- .tl ' Message 6/15 from kevin''Apr 15 \'87 at 11:36 am pst'
- .tl ''More software requests''
- Action: please acknowledge receipt
- I don\'t suppose you have a nifty netnews reader around too, do you??
- \-\-
- kevin
- Command (\'i\' to return to index): @
- .eb
- .sp
- .ps 10
- .ft 1
-
- .br
- .ne 5
- Well, it turns out that we don't, but a friend of ours does, so
- let's \f3forward\f1 the message to them by pressing \*qf\*u:
- .ps 9
- .ft CW
- .zf
- .sp
- .tl 'Command: Forward message''Edit outgoing message (y/n) ? @ '
- .ft 1
- .ps 10
- .sp 2
- No need to edit it, so let's answer \f2no\f1 with \*qn\*u:
- .sp
- .ps 9
- .ft CW
- .zf
- .tl 'Command: Forward message''Edit outgoing message (y/n) ? No '
- .tl 'To: @'''
- .ps 10
- .ft 1
- .sp
- We type in the address of the person we're forwarding to (in
- this case
- .ft CW
- .zf
- usenet\f1) and press
- \f2<return>\f1:
- .ft CW
- .zf
- .ps 9
- .sp
- .ie t .tl 'Command: Forward message'To: usenet ''
- .el .tl 'Command: Forward message''To: usenet '
- .tl 'Subject: More software requests (fwd)@'''
- .ft 1
- .ps 10
- .sp
- To which we again press \f2<return>\f1 to take the default subject.
- Elm asks for any possible copy recipients, asks us if we're
- sure we want to send it, and shoots it off.
- .sp
- Enough mail for now, however, so we just \f3exit\f1 by pressing
- the \*qx\*u key at the \*QCommand:\*U prompt and the program drops us
- back into our shell.
- .sp
- As you can see, it's quite easy to use the Elm system, so
- rather than continue with our example, let's
- look at some other aspects of the program.
- .br
- .ne 5
- .sp
- .hn 1 Non-Interactive Uses of Elm
-
- Before we go ahead and discuss the Elm utilities, it's worth
- noting that
- there are a couple of other ways to use the main mail
- system, namely to \*Qsend only\*U and to send files (batchmail).
-
- To send a message to someone without any of the associated
- overhead of reading in a mail folder, you can invoke the
- mailer with the name(s) of the people to send to. For example:
-
- .nf
- .ti +.5i
- $ \f3elm dave_taylor\f1
- .fi
-
- Elm then prompts for Subject, Copies, and then drops
- you in your editor (defined in the \f2.elm/elmrc\f1 file) to compose
- the message. When composition is complete, the program
- verifies transmission then terminates.
-
- .ne 6
- Elm also supports batch type mailing, of files and so on,
- by using the following command:
-
- .nf
- .ti +.5i
- $ \f3elm dave_taylor < help.c\f1
- .fi
-
- which reads in the file and transmits it to the specified user.
-
- .ne 3
- A subject may be specified with \*Q\-s \f2subject\f1\*U as an option
- to Elm in either \*Qsend only\*U or \*Qbatch\*U modes, as in:
-
- .nf
- .ti +.5i
- $ \f3elm \-s "File help.c, as promised" dave_taylor < help.c\f1
- .fi
-
- .ne 3
- Elm also has an option to specify that a certain file be used as the
- initial text of the message. This makes it easier to use Elm with
- other programs that interface with a mailer. Use \*Q\-i \f2file\f1\*U as an
- option to Elm in \*Qsend only\*U mode. For example, to specify to \f2rn\f1
- to use Elm as the mailer, define the following in \f3RNINIT\f1:
-
- .ft CW
- .zf
- .nf
- .ti +.5i
- \-EMAILPOSTER="elm \-i %h \-s \\"Re: %S\\" %t"
- .fi
- .ft 1
-
- See the man page for \f2rn\f1(1) or the newsreader you use for more specific
- information.
-
- .br
- .ne 5
- .sp
- .hn 1 The Elm Utilities
-
- The Elm mail system is really much more than a single
- program for reading and writing mail. It's a unified
- environment for intelligently dealing with electronic
- correspondence. As a consequence, it contains a number of other
- programs to aid in the easy processing of \*Qemail\*U,
- including the following;
-
- .lp \h'10p'answer 1.0i
- An answering-machine transcription program. Please see the
- manual entry for more information on how to use this program.
-
- .lp \h'10p'checkalias 1.0i
- A script for checking aliases simply.
-
- .lp \h'10p'elmalias 1.0i
- A tool to obtain information on defined aliases.
-
- .lp \h'10p'listalias 1.0i
- A script to produce sorted listings of aliases.
-
- .lp \h'10p'messages 1.0i
- A script that lists the number of messages in the specified
- folder. Suitable for login scripts and such.
-
- .lp \h'10p'newmail 1.0i
- This program monitors a mailbox or set of mailboxes and can
- output notification of new mail in one of two possible
- formats; either:
-
- .ne 6
- .nf
- .ft CW
- .zf
- .ps 9
- .ti +.5i
- >> New mail from Jimmy Carter \-\- Urgent matters of state
- .br
- .ti +.5i
- >> New mail from j...@ucbvax.arpa \-\- Did I hear someone say PARTY??
- .ft 1
- .ps 10
-
- if running as \f2newmail\f1 or:
-
- .ft CW
- .zf
- .ps 9
- .ti +.5i
- Jimmy Carter \-\- Urgent matters of state
- .br
- .ti +.5i
- j...@ucbvax.arpa \-\- Did I hear someone say PARTY??
- .ft 1
- .ps 10
- .fi
-
- if running as \f2wnewmail\f1. BSD Users will find this is
- a far superior \f2biff\f1 program.
-
- .lp \h'10p'wnewmail 1.0i
- This is the same program as \f2newmail\f1, but has different
- defaults if invoked this way.
-
- .lp \h'10p'readmsg 1.0i
- This handy little program can be used in two ways. First off,
- it can be used to easily read a specific message in the
- incoming mailbox, specified by ordinal number, by a string that
- the message contains, by the metacharacter \*q$\*u which
- represents the last message in the folder, or \*q*\*u which matches
- all the messages in the folder.
-
- For example;
-
- .ti +.5i
- $ \f3readmsg 4 5 9 | lpr\f1
-
- would generate a printout, \f2sans\f1 superfluous headers, of the fourth,
- fifth and ninth messages in your mailbox.
-
- .ti +.5i
- $ \f3readmsg Carter | page\f1
-
- would be a fast way to read what \*uole Jimmy has to say, and
-
- .ti +.5i
- $ \f3readmsg \-h hear someone say\f1
-
- would list, including all the message headers, the message
- containing the string \*Qhear someone say\*U.
-
- .lp \h'10p'frm 1.0i
- Similar to the Berkeley \f2from\f1 command, this will
- give you a \*Qtable of contents\*U or a summary of either the current
- mailbox or a mailbox of your choice. It's useful to
- see what mail is pending, or what's in a mailbox.
- If used with the \*Q\-n\*U option, it will number each message
- in a way compatible with the arguments \f2readmsg\f1
- expects to get, too!
-
- .lp \h'10p'newalias 1.0i
- This is used to install new user/group aliases. Please see
- \f2The Elm Alias Users Guide\f1 for further information.
-
- .lp \h'10p'fastmail 1.0i
- Sometimes you want to have a batchmailing system that works as
- quickly as possible, not bothering with aliases or any of the
- other \*Qdeluxe\*U features of Elm. An example of this would
- be if you have a large mailing list for a newsletter, say.
- This command, \f2fastmail\f1, is designed just for that purpose.
- It avoids the lengthy startup time of Elm while still
- generating valid RFC-822\s-2\u5\d\s0 mail.
- .fn
- 5. If you don't know what RFC-822 is, don't worry about it!
- .ef
- Please see the manual entry for more information on this
- command.
- .in 0
- .br
- .ne 5
- .sp
- .hn 1 "Credits and So on \(em Elm's early years from Dave Taylor"
-
- This mailer has been evolving over the past few years with
- invaluable comments on the interface and general mail
- issues from the following people;
- Jim Davis, Steve Wolf (or should that say Steve!! Wolf!!!! perhaps?),
- Larry Fenske, Rob Sartin,
- John Dilley and Carl Dierschow.
- .sp
- For the Berkeley implementation, lots of help came from
- both John Lebovitz and Ken Stone.
- .sp
- For the Amdahl/UTS implementation, thanks to Scott McGregor and
- Stan Isaacs.
- .sp
- For the Sun problems, Dave England in Lancaster (UK) turned out to be
- \*Qbloody useful\*U, as he would no doubt say.
- .sp
- The Pyramid version is due to the work of Steve Malone
- of the University of Washington.
- .sp
- A number of other people have been amazingly disciplined at reporting
- problems and (usually, much to my relief) indicating the fixes needed,
- especially Guy Hillyer, Bruce Townsend and Eric Negaard.
- .sp
- There have been many, many others, too numerous to mention, that
- have inspired me with questions like \*QWhy can't Elm...\*U or
- \*QWhy does it ...\*U or \*QCan we make it...\*U too. A loud round of
- applause and an enthusiastic THANK YOU to you all!!
- .sp
- Also helpful was the ability to have my \*Qown\*U machine to
- close up the many many iterative loops that this software
- has gone through \(em since being on a big multi-user machine
- tends to slow it down to a standstill.
- For that, I thank Hewlett-Packard Colorado Networks Division for their
- initial support, and now HP Laboratories for the wonderful working
- environment that I have here (more than any one person is safe having,
- I suspect).
- .sp
- Mailers that have influenced the design and implementation of Elm,
- for better or worse, include the following;
-
- .lp \h'4p'\f2/bin/mail\f1 1.0i
- The most basic of mailers, this one was simply the example of how \f2not\f1
- to force the user to interact with a program.
-
- .lp "\h'4p'\f2Berkeley Mail\f1" 1.0i
- A surprisingly sophisticated mailer, especially the version with 4.3 BSD,
- \f2Berkeley Mail\f1 still suffers from the tendency to force the user to
- know too much about the system, and also lacks a friendly, non-cryptic
- interface for the large subset of the population that use
- .ux
- but aren't
- interested in becoming a \*Qhacker\*U.
-
- .lp \h'4p'\f2MH\f1 1.0i
- This is another nifty mailer. The main difference between this and the
- other mailers about is that it is a discrete set of programs rather than
- a single unified interface. This is quite useful for those people that
- receive \f2lots\f1 of mail and are willing to spend some time learning
- the intricacies of the program. It's quite powerful, but again, misses some
- of the basic friendly features the majority of users are interested in.
-
- .lp \h'4p'\f2dmail\f1 1.0i
- A sort of mutated cross between \f2MH\f1 and \f2Berkeley Mail\f1, it was
- this program that convinced me to implement the \f3limit\f1 functions.
-
- .lp \h'4p'\f2NMail\f1 1.0i
- A part of the HP AI Workstation Software Environment, this program hints
- at the power that mailers could be given to help deal with mail in a quick
- and intelligent fashion. Most of what it can do, and a lot more, are
- therefore part of Elm. Indubitably. And quite fast too!
-
- .lp \h'4p'\f2PMX/TERM\f1 1.0i
- Part of the AT&T Mail package, a single glance at this interface convinced
- me that a PC interface, with almost half of the screen taken up by a silly
- function key mapping, is most certainly \f2not\f1 the way to do things!!
- On the other hand, it also shows that the \*Qforms\*U mode can be quite
- nicely integrated into a more sophisticated mailer.
-
- .lp \h'4p'\f2fmail\f1 1.0i
- A nickel addition to the \f2/bin/mail\f1 program to add some rudimentary
- screen interface stuff, this nonetheless interesting mailer is part of
- the AT&T Toolchest.
-
- .lp \h'4p'\f2Laurel\f1 1.0i
- A program only available within Xerox PARC, this was an interesting
- early attempt at a graphics based full-screen mail program. The one,
- perhaps trivial, part of the interface I really like was the fact that
- it would \f2cross out\f1 a message that was marked for deletion. One
- day when we get real graphics and the ability to use them in
- a facility (not too) like \f2termcap\f1, perhaps Elm will do
- this too!
-
- .lp \h'4p'\f2Mailtool\f1 1.0i
- Part of the Sun distribution package, this program is a really nice
- example of what can be done by putting a smart shell on top of a dumb
- program \(em it uses \f2/bin/mail\f1 for all the \*Qdirty work\*U. Other than
- that, it's not a particularly interesting interface or mailer, and it
- certainly doesn't add much functionality!
-
- .lp \h'4p'\f2Metamail\f1 1.0i
- What can I say? This isn't even a real mailer,\s-2\u6\d\s0
- .fn
- 6. Not to be confused with the multi-media mailer, \f2metamail\f1, from
- Nathaniel Borenstein of Bellcore.
- .ef
- but is just what I dream
- of as an interface to mail in the future. A program that works sort of
- like HAL did in \f22001: A Space Odyssey\f1 \(em where it interrupts
- me as appropriate for important mail, and can answer inane and other
- queries itself according to what I teach it. Maybe Elm, by some sort
- of groupmind metamorphosis, will change into that someday. Maybe not. Maybe
- no one bothers to read this far into the document!!
-
- .in 0
- Finally, it's also been a very useful experience overall,
- confirming my beliefs that iterative software design and
- keeping a close watch on users (not to mention an open
- mind and mailbox!) improves a product manyfold. Comments,
- feedback and bug reports (and fixes!) are, of course, always welcome!
- .br
- .ne 5
- .sp
- .hn 1 "Credits and So on Part II \(em The Usenet Elm Development Group"
-
- As coordinator of the Elm Development Group, I must add to the credits.
- This group of volunteers has taken the Elm code from Dave Taylor and
- added features, made it more robust, and more portable.
- .sp
- For getting the Usenet Elm group going, for without which I wouldn't be
- writing this, thanks to Greg Hackney at Southwestern Bell Telephone Co.
- .sp
- For the Configuration system and its newer Dist 2.0 version, thanks are
- due to Larry Wall of JPL-NASA.
- .sp
- For his over two hundred sets of changes to version 2.2, Elm owes a lot
- to Rob Bernardo who was at Pacbell at that time.
- .sp
- The ability to run Elm at all on Intel 286 machines owes a lot to the
- insistent nudging of the coordinator by Chip Salzenberg,
- Chip Rosenthal, and Tim Evans.
- .sp
- For getting us the rights to use the news macros and converting all
- the documentation over to those macros, thanks to Mike Brown.
- .sp
- For pushing us into the \*u90s and forcing the issues of
- NLS and foreign language support, I thank Jan Saell of Administration & Systemkonsult AB
- along with Larry Philps of SCO Canada.
- .P
- I'd also like to thank the many current and prior members of the Elm
- development and testing groups. The list varies from time to time
- as people come and go. Also, to all the Elm users out there who
- send in patches. The group can use all the extra help it gets.
- As a postScript, if you wish to join the group, all it takes is some
- time to work on things, and to ask.
-
- Syd Weinstein, Elm Coordinator.
--- 0 ----
Index: elmME+.2.5.alpha1-cvs/hdrs/elm_globals.h
*** elmME+.2.5.alpha0/hdrs/elm_globals.h 2004-05-16 17:43:45.000000000 +0300
--- elmME+.2.5.alpha1-cvs/hdrs/elm_globals.h 2004-07-03 18:23:03.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elm_globals.h,v 1.1.2.2 2004/05/13 16:26:18 hurtta Exp $ */
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.1.2.2 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
******************************************************************************
--- 1,7 ----
! /* $Id: elm_globals.h,v 1.1.2.3 2004/07/03 15:23:03 hurtta Exp $ */
/*****************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.1.2.3 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI>
******************************************************************************
***************
*** 180,187 ****
#define MAIL_REPLYING (1<<3)
#define MAIL_FORWARDING (1<<4)
#define MAIL_HAVE_ATTACHMENTS (1<<5) /* Flag for verify transmission */
! #define MAIL_HAVE_PGP_ENCODED (1<<6) /* Falg for verify transmission */
!
#if 0 /* XXXX not used */
--- 180,187 ----
#define MAIL_REPLYING (1<<3)
#define MAIL_FORWARDING (1<<4)
#define MAIL_HAVE_ATTACHMENTS (1<<5) /* Flag for verify transmission */
! #define MAIL_HAVE_PGP_ENCODED (1<<6) /* Flag for verify transmission */
! #define MAIL_MIME_ATTCH (1<<7) /* mimeforward */
#if 0 /* XXXX not used */
Index: elmME+.2.5.alpha1-cvs/hdrs/elmlib.h
*** elmME+.2.5.alpha0/hdrs/elmlib.h 2004-05-16 17:43:45.000000000 +0300
--- elmME+.2.5.alpha1-cvs/hdrs/elmlib.h 2004-07-03 18:23:03.000000000 +0300
***************
*** 1,7 ****
! /* $Id: elmlib.h,v 1.207.4.14 2004/05/15 20:11:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.207.4.14 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: elmlib.h,v 1.207.4.16 2004/07/03 15:23:03 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.207.4.16 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
! extern ESTR defaultfile_e; /* name of default folder */
! extern ESTR calendar_file_e; /* name of file for clndr */
extern nl_catd elm_msg_cat; /* message catalog */
extern int title_messages; /* flag: title message display? */
extern char home[SLEN]; /* home directory of user */
extern char username[SLEN]; /* return address name! */
***************
*** 739,744 ****
--- 756,763 ----
extern int prompt_for_cc; /* flag: prompt user for 'cc' value? */
#ifdef USE_PGP
extern int pgp_askpgpsig; /* Should pgp ask userid to sign messages with? */
+ extern int pgp_interactive; /* Should pgp/gpg encryption/signing to be
+ run always on interactive mode */
extern int pgp_sign_type; /* 0 = application/pgp
1 = text/plain
2 = text/x-pgp
***************
*** 795,806 ****
extern charset_t wanted_display_charset; /* name of character set */
extern int DSN_success; /* flag: Ask successfull DSNes */
extern char e_editor[SLEN]; /* "~e" editor... */
! extern char editor[SLEN]; /* default editor for mail */
extern int env_from_source; /* 0 == forward-from,
1 == from,
2 == return-path
*/
! extern char raw_editor[SLEN]; /* unexpanded default editor for mail */
extern char escape_char; /* '~' or something else... */
extern int force_name; /* flag: save by name forced? */
extern int fragment_handling; /* 0 == none,
--- 814,825 ----
extern charset_t wanted_display_charset; /* name of character set */
extern int DSN_success; /* flag: Ask successfull DSNes */
extern char e_editor[SLEN]; /* "~e" editor... */
! extern ESTR editor_e; /* editor for outgoing mail*/
extern int env_from_source; /* 0 == forward-from,
1 == from,
2 == return-path
*/
!
extern char escape_char; /* '~' or something else... */
extern int force_name; /* flag: save by name forced? */
extern int fragment_handling; /* 0 == none,
***************
*** 827,834 ****
3 == non-spool */
extern char raw_local_fs_charset[SLEN]; /* filesystem charset */
extern charset_t local_fs_charset; /* filesystem charset */
! extern char local_signature[SLEN];/* local msg signature file */
! extern char raw_local_signature[SLEN];/* unexpanded local msg signature file */
extern int lockfolders; /* Lock folder when open */
extern int lock_in_copy; /* Lock folder when copied to it */
extern char folders[SLEN]; /* folder home directory */
--- 846,852 ----
3 == non-spool */
extern char raw_local_fs_charset[SLEN]; /* filesystem charset */
extern charset_t local_fs_charset; /* filesystem charset */
! extern ESTR local_signature_e; /* local msg signature file */
extern int lockfolders; /* Lock folder when open */
extern int lock_in_copy; /* Lock folder when copied to it */
extern char folders[SLEN]; /* folder home directory */
***************
*** 850,855 ****
--- 868,874 ----
extern int internal_mailcap_t_prompt; /* ... really? */
extern int metoo; /* flag: copy me on mail to alias? */
extern int mimeforward;
+ extern int askmimeforward;
extern int mime_body_keywords; /* flag: if false the body is not parsed for keywords */
extern int move_when_paged; /* flag: move when '+' or '-' used? */
extern int names_only; /* flag: display names but no addrs? */
***************
*** 864,871 ****
extern int page_known_charsets;
extern int pagemultipart;
extern int pagesigned;
! extern char pager[SLEN]; /* what pager to use... */
! extern char raw_pager[SLEN]; /* unexpanded what pager to use... */
#ifdef USE_PGP
extern char pgp2_path[SLEN]; /* Pgp2 path or "none" if no pgp2 */
extern char raw_pgp2_path[SLEN];
--- 883,889 ----
extern int page_known_charsets;
extern int pagemultipart;
extern int pagesigned;
! extern ESTR pager_e; /* what pager to use... */
#ifdef USE_PGP
extern char pgp2_path[SLEN]; /* Pgp2 path or "none" if no pgp2 */
extern char raw_pgp2_path[SLEN];
***************
*** 885,903 ****
extern int quote_forward; /* flag: fwd'd msgs quoted like replies */
extern int readdatapercentinc; /* data percent increment during new mbox read */
extern int readmsginc; /* msg cnt increment during new mbox read */
! extern char recvd_mail[SLEN]; /* folder for storing received mail */
! extern char raw_recvdmail[SLEN];/* unexpanded recvd_mail name */
! extern char remote_signature[SLEN];/* remote msg signature file */
! extern char raw_remote_signature[SLEN];/* unexpanded remote msg signature file*/
extern int req_mime_bodyencoding;
extern int req_mime_hdrencoding;
extern int resolve_mode; /* flag: resolve before moving mode? */
extern int save_by_name; /* flag: save mail by login name? */
extern int save_by_alias; /* save mail by alias of login name? */
! extern char sent_mail[SLEN]; /* name of file to save copies to */
extern int set_window_title; /* flag: set (xterm?) window title and
icon name */
- extern char raw_sentmail[SLEN]; /* unexpanded name of file to save to */
extern char shell[SLEN]; /* default system shell */
extern char raw_shell[SLEN]; /* unexpanded default system shell */
#ifdef USE_PGP
--- 903,918 ----
extern int quote_forward; /* flag: fwd'd msgs quoted like replies */
extern int readdatapercentinc; /* data percent increment during new mbox read */
extern int readmsginc; /* msg cnt increment during new mbox read */
! extern ESTR recvd_mail_e; /* folder for storing received mail */
! extern ESTR remote_signature_e;/* remote msg signature file */
extern int req_mime_bodyencoding;
extern int req_mime_hdrencoding;
extern int resolve_mode; /* flag: resolve before moving mode? */
extern int save_by_name; /* flag: save mail by login name? */
extern int save_by_alias; /* save mail by alias of login name? */
! extern ESTR sent_mail_e; /* name of file to save copies to */
extern int set_window_title; /* flag: set (xterm?) window title and
icon name */
extern char shell[SLEN]; /* default system shell */
extern char raw_shell[SLEN]; /* unexpanded default system shell */
#ifdef USE_PGP
***************
*** 1980,1985 ****
--- 1995,2007 ----
extern int query_mailer_info P_((struct mailer_info *I,
enum MI_query query));
+ /* -1 if connection lost
+ 0 if OK
+ 1 if mailer reinitialized and query_mailer_info()
+ need to be called again
+ */
+ extern int mailer_restarted P_((struct mailer_info *I));
+
/* Should return 1 if verify succees and fields of result to be filled
-- caller should free fields of result
Returns 0 on failure
***************
*** 2103,2108 ****
--- 2125,2133 ----
extern void dump_expanded_address P_((int debuglevel, const char *text,
struct expanded_address expanded));
+ extern void expanded_address_from_items P_((struct expanded_address *result,
+ struct addr_item *TMP));
+
struct mailing_headers {
unsigned short magic; /* MAIL_HDR_magic */
Index: elmME+.2.5.alpha1-cvs/hdrs/mailer_imp.h
*** elmME+.2.5.alpha0/hdrs/mailer_imp.h 2004-03-30 19:38:43.000000000 +0300
--- elmME+.2.5.alpha1-cvs/hdrs/mailer_imp.h 2004-05-23 19:24:48.000000000 +0300
***************
*** 1,7 ****
! /* $Id: mailer_imp.h,v 1.7 2004/03/27 18:31:36 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
--- 1,7 ----
! /* $Id: mailer_imp.h,v 1.7.8.1 2004/05/23 16:24:48 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.7.8.1 $ $State: Exp $
*
* Author: Kari Hurtta <hurtt...@posti.FMI.FI> (was hurtt...@ozone.FMI.FI)
*****************************************************************************/
***************
*** 37,42 ****
--- 37,51 ----
struct mailer_info *I,
enum MI_query query));
+ /* Return
+ 1 == mailer restarted, reconnect succeed -- reask info
+ 0 == mailer not disconnected
+ -1 == mailer disconnected, reconnect failed
+ */
+ typedef int mailer_info_restart_hook P_((struct mailer_config *M,
+ struct mailer_info *I));
+
+
/* Return
-1 if caller should result with default data (return 1)
-2 if caller should just test passwd
***************
*** 88,93 ****
--- 97,103 ----
mailer_info_verify_addr * mi_verify_addr;
mailer_info_gen_def_ef * mi_def_env_from;
mailer_info_set_ef * mi_set_env_from;
+ mailer_info_restart_hook * mi_restart_hook;
int mailer_bits;
/* TODO: Add to this mailer specific data
Index: elmME+.2.5.alpha1-cvs/hdrs/me.h
*** elmME+.2.5.alpha0/hdrs/me.h 2004-05-16 17:43:45.000000000 +0300
--- elmME+.2.5.alpha1-cvs/hdrs/me.h 2004-07-03 18:23:03.000000000 +0300
***************
*** 1,7 ****
! /* $Id: me.h,v 1.87.8.8 2004/05/16 09:54:13 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.87.8.8 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
--- 1,7 ----
! /* $Id: me.h,v 1.87.8.10 2004/07/03 15:23:03 hurtta Exp $ */
/******************************************************************************
! * The Elm (ME+) Mail System - $Revision: 1.87.8.10 $ $State: Exp $
*
* Modified by: Kari Hurtta <hurtt...@posti.FMI.FI>
* (was hurtt...@ozone.FMI.FI)
***************
*** 360,367 ****
/* mime.c */
extern int have_metamail P_((void));
! extern void clear_mime_send_info P_((mime_send_t *mime_info,
! struct mailer_info *mailer_info));
extern void free_mime_send_info P_((mime_send_t *mime_info));
extern void add_paramater_1 P_((char **ptr, char *name,
char *value, int quoted));
--- 360,366 ----
/* mime.c */
extern int have_metamail P_((void));
! extern void clear_mime_send_info P_((mime_send_t *mime_info));
extern void free_mime_send_info P_((mime_send_t *mime_info));
extern void add_paramater_1 P_((char **ptr, char *name,
char *value, int quoted));
***************
*** 492,498 ****
extern int a_sendmsg P_((int edit_message, int form_letter,
! struct MailboxView *mailbox /* save_copy needs */,
struct AliasView *aview, int header_page,
struct menu_context *page));
extern int send_msg_argv P_((char *argv[],
--- 491,497 ----
extern int a_sendmsg P_((int edit_message, int form_letter,
! struct MailboxView *mailbox,
struct AliasView *aview, int header_page,
struct menu_context *page));
extern int send_msg_argv P_((char *argv[],
***************
*** 501,513 ****
struct AliasView *aview,
struct menu_context *page));
! extern int send_msg_l P_((struct header_rec * current_header,
struct addr_item *given_to,
struct addr_item *given_cc,
char *given_subject,
int options, int form_letter,
! FILE *infile,
! struct MailboxView *mailbox /* for save_copy */,
struct AliasView *aview,
struct menu_context *page
));
--- 500,511 ----
struct AliasView *aview,
struct menu_context *page));
! extern int send_msg_l P_((int index,
struct addr_item *given_to,
struct addr_item *given_cc,
char *given_subject,
int options, int form_letter,
! struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page
));
***************
*** 518,523 ****
--- 516,522 ----
struct AliasView *aview,
struct menu_context *page));
+
/* mailmsg2.c */
#if ANSI_C
***************
*** 526,542 ****
extern struct string * gen_From_buffer P_((const struct header_rec * current_header));
! extern int mail P_((struct header_rec *current_header,
int options, int form,
struct mailing_headers *headers,
struct mailer_info *mailer_info,
! FILE *infile,
! struct MailboxView *mailbox,
struct AliasView *aview));
! extern int mail_form P_((struct header_rec *current_header,
struct addr_item *address,
char *subj,
- FILE *infile,
struct MailboxView *mailbox,
struct AliasView *aview));
--- 525,539 ----
extern struct string * gen_From_buffer P_((const struct header_rec * current_header));
! extern int mail P_((int idx,
int options, int form,
struct mailing_headers *headers,
struct mailer_info *mailer_info,
! struct MailboxView *mailbox /* system_call() */,
struct AliasView *aview));
! extern int mail_form P_((int mail_index,
struct addr_item *address,
char *subj,
struct MailboxView *mailbox,
struct AliasView *aview));
***************
*** 545,554 ****
/* froms.c */
! extern int mail_filled_in_form P_((struct header_rec * current_header,
struct addr_item *address,
char *subject,
- FILE *infile,
struct MailboxView *
mailbox /* for save_copy */,
struct AliasView *aview));
--- 542,550 ----
/* froms.c */
! extern int mail_filled_in_form P_((int mail_index,
struct addr_item *address,
char *subject,
struct MailboxView *
mailbox /* for save_copy */,
struct AliasView *aview));
***************
*** 609,615 ****
int form,
mime_send_t *mime_info,
FILE * conv_file,
- struct MailboxView *mailbox,
struct menu_context *page,
struct AliasView *aview));
--- 605,610 ----
***************
*** 722,741 ****
extern void get_return_name P_((char *address, char *name,
int trans_to_lowercase,
int size));
! extern int forward P_((struct header_rec *hdr,
! FILE *infile,
struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page));
! extern int reply_to_everyone P_((struct header_rec *hdr,
! FILE *infile,
! struct MailboxView *mailbox
! /* for save_copy */,
struct AliasView *aview,
struct menu_context *page));
! extern int reply P_((struct header_rec *hdr,
! FILE *infile,
! struct MailboxView *mailbox /* for save_copy */,
struct AliasView *aview,
struct menu_context *page));
--- 717,732 ----
extern void get_return_name P_((char *address, char *name,
int trans_to_lowercase,
int size));
! extern int forward P_((int index,
struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page));
! extern int reply_to_everyone P_((int index,
! struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page));
! extern int reply P_((int index,
! struct MailboxView *mailbox,
struct AliasView *aview,
struct menu_context *page));
***************
*** 814,819 ****
--- 805,818 ----
struct menu_context *page
));
+ extern int no_editor_edit_the_message P_((char *filename,
+ struct mailing_headers * headers,
+ charset_t file_set,
+ struct mailer_info *mailer_info,
+ struct MailboxView *mailbox