]> granicus.if.org Git - neomutt/commitdiff
This patch adds on-demand loading of character set tables,
authorThomas Roessler <roessler@does-not-exist.org>
Sun, 13 Sep 1998 15:26:52 +0000 (15:26 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Sun, 13 Sep 1998 15:26:52 +0000 (15:26 +0000)
changes the default location of $SHAREDIR, and fixes some
compilation problems occuring on machines without PGP
installed.

12 files changed:
Makefile.in
charset.c
charset.h
commands.c
configure
configure.in
gen-charset.c [new file with mode: 0644]
handler.c
hash.h
recvattach.c
rfc2047.c
sendlib.c

index c753c7fc978b68cc62ee24c2a022636ff0f82c85..5d436be197fe32c4a3258e885908577abeffcdea 100644 (file)
@@ -57,7 +57,7 @@ NONEXPORT=pgp.c pgp.h pgpinvoke.c pgpkey.c pgppubring.c sha.h sha1dgst.c \
        gnupgparse.c sha_locl.h OPS.PGP doc/pgp-Notes.txt doc/language.txt \
        doc/language50.txt
 
-all: mutt @DOTLOCK_TARGET@
+all: mutt @DOTLOCK_TARGET@ gen-charset
 
 mutt: keymap_defs.h $(OBJS) $(REGEX)
        $(CC) -o mutt $(OBJS) $(REGEX) $(LDFLAGS) $(LIBS)
@@ -65,11 +65,14 @@ mutt: keymap_defs.h $(OBJS) $(REGEX)
 dotlock: dotlock.o @SNPRINTFOBJS@
        $(CC) -o dotlock dotlock.o @SNPRINTFOBJS@
 
+gen-charset: gen-charset.o
+       $(CC) -o gen-charset gen-charset.o
+
 keymap_defs.h: Makefile $(OPS)
        rm -f keymap_defs.h
        $(srcdir)/gen_defs $(OPS) > keymap_defs.h
 
-install: mutt install.doc @DOTLOCK_INSTALL_TARGET@
+install: mutt install.doc @DOTLOCK_INSTALL_TARGET@ gen-charset
        $(srcdir)/mkinstalldirs $(bindir)
        -mv -f $(bindir)/mutt $(bindir)/mutt.old
        $(INSTALL) -m 755 mutt $(bindir)
@@ -80,6 +83,8 @@ install: mutt install.doc @DOTLOCK_INSTALL_TARGET@
        -if [ ! -f $(sharedir)/mime.types ]; then \
                $(INSTALL) -m 644 $(srcdir)/mime.types $(sharedir); \
        fi
+       $(srcdir)/mkinstalldirs $(sharedir)/charsets
+       ./gen-charset $(sharedir)/charsets
 
 install.dotlock: dotlock
        $(srcdir)/mkinstalldirs $(bindir)
index aefe610e57fabdc0d718ed48852e2a8e14488fe4..96e6b94a9f7f0c89339b14100736c2d86ba74625 100644 (file)
--- a/charset.c
+++ b/charset.c
@@ -1,5 +1,6 @@
 /*
- * Copyright (C) 1998 Ruslan Ermilov <ru@ucb.crimea.ua>
+ * Copyright (C) 1998 Ruslan Ermilov <ru@ucb.crimea.ua>,
+ *                    Thomas Roessler <roessler@guug.de>
  *
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
 #include "charset.h"
 
 #include <string.h>
+#include <ctype.h>
 
+static HASH *Translations = NULL;
+static HASH *Charsets = NULL;
 
-static UNICODE_MAP iso_8859_1 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
-       0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
-       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
-       0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
-       0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
-       0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
-       0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
-       0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
-       0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
-       0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
-       0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
-       0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
-};
-
-static UNICODE_MAP iso_8859_2 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
-       0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
-       0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
-       0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
-       0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
-       0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
-       0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
-       0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
-       0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
-       0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
-       0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
-       0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
-};
-
-static UNICODE_MAP iso_8859_3 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4,     -1, 0x0124, 0x00A7,
-       0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD,     -1, 0x017B,
-       0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7,
-       0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD,     -1, 0x017C,
-       0x00C0, 0x00C1, 0x00C2,     -1, 0x00C4, 0x010A, 0x0108, 0x00C7,
-       0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
-           -1, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7,
-       0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF,
-       0x00E0, 0x00E1, 0x00E2,     -1, 0x00E4, 0x010B, 0x0109, 0x00E7,
-       0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
-           -1, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7,
-       0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9
-};
+static CHARSET *mutt_new_charset(void)
+{
+  CHARSET *chs;
+  
+  chs       = safe_malloc(sizeof(CHARSET));
+  chs->name = NULL;
+  chs->map  = NULL;
+  
+  return chs;
+}
 
-static UNICODE_MAP iso_8859_4 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7,
-       0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF,
-       0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7,
-       0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B,
-       0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
-       0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A,
-       0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
-       0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF,
-       0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
-       0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B,
-       0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
-       0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9
-};
+#if 0
 
-static UNICODE_MAP iso_8859_5 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
-       0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
-       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-       0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
-       0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-       0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
-       0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-       0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
-       0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-       0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
-       0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
-       0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F
-};
+static void mutt_free_charset(CHARSET **chsp)
+{
+  CHARSET *chs = *chsp;
+  
+  safe_free((void **) &chs->name);
+  safe_free((void **) &chs->map);
+  safe_free((void **) chsp);
+}
 
-static UNICODE_MAP iso_8859_6 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0,     -1,     -1,     -1, 0x00A4,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1, 0x060C, 0x00AD,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1, 0x061B,     -1,     -1,     -1, 0x061F,
-           -1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
-       0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
-       0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
-       0x0638, 0x0639, 0x063A,     -1,     -1,     -1,     -1,     -1,
-       0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
-       0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F,
-       0x0650, 0x0651, 0x0652,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1
-};
+#endif
 
-static UNICODE_MAP iso_8859_7 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0, 0x02BD, 0x02BC, 0x00A3,     -1,     -1, 0x00A6, 0x00A7,
-       0x00A8, 0x00A9,     -1, 0x00AB, 0x00AC, 0x00AD,     -1, 0x2015,
-       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7,
-       0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
-       0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
-       0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
-       0x03A0, 0x03A1,     -1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
-       0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
-       0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
-       0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
-       0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
-       0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE,     -1
-};
+static void canonical_charset(char *dest, size_t dlen, const char *name)
+{
+  int i;
+  
+  if(!strncasecmp(name, "x-", 2))
+    name = name + 2;
+  
+  for(i = 0; name[i] && i < dlen - 1; i++)
+  {
+    if(strchr("_/. ", name[i]))
+      dest[i] = '-';
+    else
+      dest[i] = tolower(name[i]);
+  }
+  
+  dest[i] = '\0';
+}
 
-static UNICODE_MAP iso_8859_8 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0,     -1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
-       0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x203E,
-       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
-       0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1, 0x2017,
-       0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
-       0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
-       0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
-       0x05E8, 0x05E9, 0x05EA,     -1,     -1,     -1,     -1,     -1
-};
+static CHARSET *load_charset(const char *name)
+{
+  char path[_POSIX_PATH_MAX];
+  char buffer[SHORT_STRING];
+  CHARSET *chs;
+  FILE *fp = NULL;
+  int i;
 
-static UNICODE_MAP iso_8859_9 = {
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
-       0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
-       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
-       0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
-       0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
-       0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
-       0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
-       0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
-       0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
-       0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
-       0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
-       0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
-};
+  chs = mutt_new_charset();
+  chs->name = safe_strdup(name);
+  
+  snprintf(path, sizeof(path), "%s/charsets/%s", SHAREDIR, name);
+  if((fp = fopen(path, "r")) == NULL)
+    goto bail;
+  
+  if(fgets(buffer, sizeof(buffer), fp) == NULL)
+    goto bail;
+  
+  if(strcmp(buffer, CHARSET_MAGIC) != 0)
+    goto bail;
 
-static UNICODE_MAP koi8_r = {
-       0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
-       0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
-       0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
-       0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
-       0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
-       0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
-       0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
-       0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
-       0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
-       0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-       0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
-       0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
-       0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
-       0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-       0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
-       0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
-};
+  chs->map  = safe_malloc(sizeof(UNICODE_MAP));
+  
+  for(i = 0; i < 128; i++)
+  {
+    if(fscanf(fp, "%i", &(*chs->map)[i]) != 1)
+    {
+      safe_free((void **) &chs->map);
+      break;
+    }
+  }
 
-static UNICODE_MAP microsoft_cp1251 = {
-       0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
-           -1, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
-       0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
-           -1, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
-       0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
-       0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
-       0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
-       0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
-       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-       0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
-       0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-       0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
-       0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-       0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
-       0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-       0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
-};
+  bail:
+  
+  if(fp) fclose(fp);
+  return chs;
+}
 
-static UNICODE_MAP microsoft_cp866 = {
-       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-       0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
-       0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-       0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
-       0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-       0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
-       0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
-       0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
-       0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
-       0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
-       0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
-       0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
-       0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-       0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
-       0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e,
-       0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0
-};
+static void init_charsets()
+{
+  if(Charsets) return;
 
-static CHARSET Charsets[] = {
-       {"iso-8859-1",  &iso_8859_1},
-       {"iso-8859-2",  &iso_8859_2},
-       {"iso-8859-3",  &iso_8859_3},
-       {"iso-8859-4",  &iso_8859_4},
-       {"iso-8859-5",  &iso_8859_5},
-       {"iso-8859-6",  &iso_8859_6},
-       {"iso-8859-7",  &iso_8859_7},
-       {"iso-8859-8",  &iso_8859_8},
-       {"iso-8859-9",  &iso_8859_9},
-       {"koi8-r",      &koi8_r},
-       {"windows-1251",&microsoft_cp1251},
-       {"x-cp866",     &microsoft_cp866},
-       {NULL,          NULL}
-};
+  Charsets     = hash_create(16);
+  Translations = hash_create(32);
+}
 
 CHARSET *mutt_get_charset(const char *name)
 {
   CHARSET *charset;
-
-  if (name == NULL) return NULL;
-  for (charset = Charsets; charset->name; charset++) 
+  char buffer[SHORT_STRING];
+  
+  init_charsets();
+  canonical_charset(buffer, sizeof(buffer), name);
+  if(!(charset = hash_find(Charsets, buffer)))
   {
-    if (strcasecmp(charset->name, name) == 0)
-      return charset;
+    charset = load_charset(buffer);
+    hash_insert(Charsets, buffer, charset, 0);
   }
-  return NULL;
+  return charset;
 }
 
-int mutt_display_char(int ch, CHARSET *in_charset, CHARSET *out_charset)
+static int translate_char(UNICODE_MAP *to, int ch)
 {
   int i;
 
-  if (!in_charset || !out_charset || (in_charset == out_charset) || (ch < 128) || (ch > 255)) 
-    return ch;
-  
-  ch = (*in_charset->map)[ch - 128];
   if (ch == -1) return '?';
   if (ch < 128) return ch;
   for (i = 0; i < 128; i++)
   {
-    if ((*out_charset->map)[i] == ch) 
+    if ((*to)[i] == ch) 
       return (128 + i);
   }
   return '?';
 }
 
-int mutt_display_string(char *str, CHARSET *in_charset, CHARSET *out_charset)
+UNICODE_MAP *build_translation(UNICODE_MAP *from, UNICODE_MAP *to)
+{
+  int i;
+  UNICODE_MAP *map = safe_malloc(sizeof(UNICODE_MAP));
+
+  for(i = 0; i < 128; i++)
+    (*map)[i] = translate_char(to, (*from)[i]);
+
+  return map;
+}
+
+UNICODE_MAP *mutt_get_translation(const char *_from, const char *_to)
+{
+  char from[SHORT_STRING];
+  char to[SHORT_STRING];
+  char key[SHORT_STRING];
+  CHARSET *from_cs, *to_cs;
+  UNICODE_MAP *map;
+
+  if(!_from || !_to)
+    return NULL;
+  
+  init_charsets();
+
+  canonical_charset(from, sizeof(from), _from);
+  canonical_charset(to, sizeof(to), _to);
+  
+  /* quick check for the identity mapping */
+  if((*from == *to) && !strcmp(from, to))
+    return NULL;
+  
+  snprintf(key, sizeof(key), "%s %s", from, to);
+  if((map = hash_find(Translations, key)) == NULL)
+  {
+    from_cs = mutt_get_charset(from);
+    to_cs   = mutt_get_charset(to);
+
+    if(!from_cs->map || !to_cs->map)
+      return NULL;
+    
+    map = build_translation(from_cs->map, to_cs->map);
+    hash_insert(Translations, key, map, 0);
+  }
+  return map;
+}
+
+int mutt_display_char(int ch, UNICODE_MAP *map)
+{
+  if (!map || (ch < 128) || (ch > 255))
+    return ch;
+  
+  return (*map)[ch - 128];
+}
+
+int mutt_display_string(char *str, UNICODE_MAP *map)
 {
-  if (!in_charset || !out_charset) 
+  if(!map)
     return -1;
 
-  while ((*str = mutt_display_char((unsigned char)*str, in_charset, out_charset)))
+  while ((*str = mutt_display_char((unsigned char)*str, map)))
     str++;
 
   return 0;
index b2c6878cb87142443d977ca7eaaab8b1323a58ab..d60dfaf8a604fd20ff5929d25c6c4b7152e01b7d 100644 (file)
--- a/charset.h
+++ b/charset.h
@@ -27,8 +27,15 @@ typedef struct
   UNICODE_MAP *map;
 } CHARSET;
 
+#define CHARSET_MAGIC "Mutt Character Set Definition 1.0\n"
+
+#ifndef _GEN_CHARSETS
+
 CHARSET *mutt_get_charset(const char *);
-int mutt_display_char(int, CHARSET *, CHARSET *);
-int mutt_display_string(char *, CHARSET *, CHARSET *);
+UNICODE_MAP *mutt_get_translation(const char *, const char *);
+int mutt_display_char(int, UNICODE_MAP *);
+int mutt_display_string(char *, UNICODE_MAP *);
+
+#endif
 
 #endif /* _CHARSET_H */
index 6b9958f7d0facdcd27662f1a67d29bb9809a6874..715d2902d65ed109f6d8c2320e25ba9151874926 100644 (file)
@@ -554,7 +554,10 @@ static void _mutt_save_message (HEADER *h, CONTEXT *ctx, int delete, int decode,
 /* returns 0 if the copy/save was successful, or -1 on error/abort */
 int mutt_save_message (HEADER *h, int delete, int decode, int decrypt, int *redraw)
 {
-  int i, need_buffy_cleanup, need_passphrase = 0;
+  int i, need_buffy_cleanup;
+#ifdef _PGPPATH
+  int need_passphrase = 0;
+#endif
   char prompt[SHORT_STRING], buf[_POSIX_PATH_MAX];
   CONTEXT ctx;
   struct stat st;
@@ -573,7 +576,9 @@ int mutt_save_message (HEADER *h, int delete, int decode, int decrypt, int *redr
   
   if (h)
   {
+#ifdef _PGPPATH
     need_passphrase = h->pgp & PGPENCRYPT;
+#endif
     mutt_default_save (buf, sizeof (buf), h);
   }
   else
@@ -592,7 +597,9 @@ int mutt_save_message (HEADER *h, int delete, int decode, int decrypt, int *redr
     if (h)
     {
       mutt_default_save (buf, sizeof (buf), h);
+#ifdef _PGPPATH
       need_passphrase |= h->pgp & PGPENCRYPT;
+#endif
       h = NULL;
     }
   }
@@ -629,8 +636,10 @@ int mutt_save_message (HEADER *h, int delete, int decode, int decrypt, int *redr
     return (-1);
   }
 
+#ifdef _PGPPATH
   if(need_passphrase && (decode || decrypt) && !pgp_valid_passphrase())
     return -1;
+#endif
   
   mutt_message ("Copying to %s...", buf);
   
index 2baa1834b3fdc102ff8a5bd9de3b6c06a01efb71..ab3d8d6c744b902d0594d45e39164f45f9070f17 100755 (executable)
--- a/configure
+++ b/configure
@@ -2626,11 +2626,7 @@ echo "configure:2626: checking where to put architecture-dependent files" >&5
 if eval "test \"`echo '$''{'mutt_cv_libdir'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  if test -d ${mutt_cv_prefix}/lib/misc; then
-                       mutt_cv_libdir="${mutt_cv_prefix}/lib/misc"
-               else
-                       mutt_cv_libdir="${mutt_cv_prefix}/lib"
-               fi
+        mutt_cv_libdir="${mutt_cv_prefix}/lib/mutt " 
 fi
 
 echo "$ac_t""$mutt_cv_libdir" 1>&6
@@ -2647,16 +2643,12 @@ if test "${with_sharedir+set}" = set; then
   mutt_cv_sharedir=$withval
 else
    echo $ac_n "checking where to put architecture-independent data files""... $ac_c" 1>&6
-echo "configure:2651: checking where to put architecture-independent data files" >&5
+echo "configure:2647: checking where to put architecture-independent data files" >&5
 if eval "test \"`echo '$''{'mutt_cv_sharedir'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -d ${mutt_cv_prefix}/share; then
-                       if test -d ${mutt_cv_prefix}/share/misc; then
-                               mutt_cv_sharedir="${mutt_cv_prefix}/share/misc"
-                       else
-                               mutt_cv_sharedir="${mutt_cv_prefix}/share"
-                       fi
+                       mutt_cv_sharedir="${mutt_cv_prefix}/share/mutt"
                else
                        mutt_cv_sharedir="$libdir"
                fi
@@ -2677,7 +2669,7 @@ if test "${with_docdir+set}" = set; then
   mutt_cv_docdir=$withval
 else
    echo $ac_n "checking where to put the documentation""... $ac_c" 1>&6
-echo "configure:2681: checking where to put the documentation" >&5
+echo "configure:2673: checking where to put the documentation" >&5
 if eval "test \"`echo '$''{'mutt_cv_docdir'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2728,7 +2720,7 @@ if test "${enable_pop+set}" = set; then
 EOF
 
        echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:2732: checking for socket in -lsocket" >&5
+echo "configure:2724: checking for socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2736,7 +2728,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2740 "configure"
+#line 2732 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2747,7 +2739,7 @@ int main() {
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:2751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2775,7 +2767,7 @@ else
 fi
 
        echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:2779: checking for gethostbyname in -lnsl" >&5
+echo "configure:2771: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2783,7 +2775,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2787 "configure"
+#line 2779 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2794,7 +2786,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:2798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2834,7 +2826,7 @@ if test "${enable_imap+set}" = set; then
 EOF
 
        echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:2838: checking for socket in -lsocket" >&5
+echo "configure:2830: checking for socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2842,7 +2834,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2846 "configure"
+#line 2838 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2853,7 +2845,7 @@ int main() {
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:2857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2881,7 +2873,7 @@ else
 fi
 
        echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:2885: checking for gethostbyname in -lnsl" >&5
+echo "configure:2877: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2889,7 +2881,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2893 "configure"
+#line 2885 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2900,7 +2892,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:2904: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
index c2bf1ed657b4cf5323e7671858831531ef198bfc..a83a853adf8ac4e06b12694ea21acd7f41bb92b8 100644 (file)
@@ -319,11 +319,7 @@ AC_ARG_WITH(libdir, [  --with-libdir=PATH       specify where to put arch depend
        [mutt_cv_libdir=$withval],
        [ AC_CACHE_CHECK(where to put architecture-dependent files,
                       mutt_cv_libdir,
-               [if test -d ${mutt_cv_prefix}/lib/misc; then
-                       mutt_cv_libdir="${mutt_cv_prefix}/lib/misc"
-               else
-                       mutt_cv_libdir="${mutt_cv_prefix}/lib"
-               fi])
+               [      mutt_cv_libdir="${mutt_cv_prefix}/lib/mutt " ])
        ])
 
 libdir=$mutt_cv_libdir
@@ -334,11 +330,7 @@ AC_ARG_WITH(sharedir, [  --with-sharedir=PATH       specify where to put arch in
        [ AC_CACHE_CHECK(where to put architecture-independent data files,
                       mutt_cv_sharedir,
                [if test -d ${mutt_cv_prefix}/share; then
-                       if test -d ${mutt_cv_prefix}/share/misc; then
-                               mutt_cv_sharedir="${mutt_cv_prefix}/share/misc"
-                       else
-                               mutt_cv_sharedir="${mutt_cv_prefix}/share"
-                       fi
+                       mutt_cv_sharedir="${mutt_cv_prefix}/share/mutt"
                else
                        mutt_cv_sharedir="$libdir"
                fi])
diff --git a/gen-charset.c b/gen-charset.c
new file mode 100644 (file)
index 0000000..dbc8eca
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+ * Copyright (C) 1998 Ruslan Ermilov <ru@ucb.crimea.ua>,
+ *                    Thomas Roessler <roessler@guug.de>
+ *
+ *     This program is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This program is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this program; if not, write to the Free Software
+ *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#define _GEN_CHARSETS
+#include "charset.h"
+
+static UNICODE_MAP iso_8859_1 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+       0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+       0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+       0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
+       0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+       0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+       0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+       0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
+       0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+       0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+       0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+};
+
+static UNICODE_MAP iso_8859_2 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
+       0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
+       0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
+       0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
+       0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
+       0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
+       0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
+       0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
+       0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
+       0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
+       0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
+       0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
+};
+
+static UNICODE_MAP iso_8859_3 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4,     -1, 0x0124, 0x00A7,
+       0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD,     -1, 0x017B,
+       0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7,
+       0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD,     -1, 0x017C,
+       0x00C0, 0x00C1, 0x00C2,     -1, 0x00C4, 0x010A, 0x0108, 0x00C7,
+       0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+           -1, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7,
+       0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF,
+       0x00E0, 0x00E1, 0x00E2,     -1, 0x00E4, 0x010B, 0x0109, 0x00E7,
+       0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+           -1, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7,
+       0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9
+};
+
+static UNICODE_MAP iso_8859_4 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7,
+       0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF,
+       0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7,
+       0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B,
+       0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
+       0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A,
+       0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+       0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF,
+       0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
+       0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B,
+       0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+       0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9
+};
+
+static UNICODE_MAP iso_8859_5 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
+       0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
+       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+       0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
+       0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+       0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
+       0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+       0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+       0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+       0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
+       0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
+       0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F
+};
+
+static UNICODE_MAP iso_8859_6 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0,     -1,     -1,     -1, 0x00A4,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1, 0x060C, 0x00AD,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1, 0x061B,     -1,     -1,     -1, 0x061F,
+           -1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+       0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
+       0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
+       0x0638, 0x0639, 0x063A,     -1,     -1,     -1,     -1,     -1,
+       0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
+       0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F,
+       0x0650, 0x0651, 0x0652,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1
+};
+
+static UNICODE_MAP iso_8859_7 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0, 0x02BD, 0x02BC, 0x00A3,     -1,     -1, 0x00A6, 0x00A7,
+       0x00A8, 0x00A9,     -1, 0x00AB, 0x00AC, 0x00AD,     -1, 0x2015,
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7,
+       0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
+       0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+       0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+       0x03A0, 0x03A1,     -1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
+       0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
+       0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
+       0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
+       0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
+       0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE,     -1
+};
+
+static UNICODE_MAP iso_8859_8 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0,     -1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+       0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x203E,
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+       0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1, 0x2017,
+       0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
+       0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
+       0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
+       0x05E8, 0x05E9, 0x05EA,     -1,     -1,     -1,     -1,     -1
+};
+
+static UNICODE_MAP iso_8859_9 = {
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+           -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+       0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+       0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+       0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+       0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
+       0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+       0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+       0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
+       0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
+       0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+       0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+       0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
+};
+
+static UNICODE_MAP koi8_r = {
+       0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
+       0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
+       0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
+       0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
+       0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
+       0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
+       0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
+       0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
+       0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
+       0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
+       0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+       0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+       0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+       0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
+       0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
+       0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
+};
+
+static UNICODE_MAP microsoft_cp1251 = {
+       0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
+           -1, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
+       0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+           -1, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
+       0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
+       0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
+       0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
+       0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
+       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+       0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
+       0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+       0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
+       0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+       0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+       0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+       0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
+};
+
+static UNICODE_MAP microsoft_cp866 = {
+       0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+       0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+       0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+       0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+       0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+       0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+       0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+       0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+       0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+       0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+       0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+       0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+       0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+       0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+       0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e,
+       0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0
+};
+
+static CHARSET Charsets[] = {
+       {"iso-8859-1",  &iso_8859_1},
+       {"iso-8859-2",  &iso_8859_2},
+       {"iso-8859-3",  &iso_8859_3},
+       {"iso-8859-4",  &iso_8859_4},
+       {"iso-8859-5",  &iso_8859_5},
+       {"iso-8859-6",  &iso_8859_6},
+       {"iso-8859-7",  &iso_8859_7},
+       {"iso-8859-8",  &iso_8859_8},
+       {"iso-8859-9",  &iso_8859_9},
+       {"koi8-r",      &koi8_r},
+       {"windows-1251",&microsoft_cp1251},
+       {"cp866",       &microsoft_cp866},
+       {NULL,          NULL}
+};
+
+int main (int argc, const char *argv[])
+{
+  int i, j;
+  FILE *f;
+  
+  if(argv[1])
+  {
+    if(chdir(argv[1]) == -1)
+    {
+      perror("chdir");
+      exit(1);
+    }
+  }
+  
+  for(i = 0; Charsets[i].name; i++)
+  {
+    printf("%s: %s\n", argv[0], Charsets[i].name);
+    if((f = fopen(Charsets[i].name, "w")) == NULL)
+    {
+      perror(Charsets[i].name);
+      exit(1);
+    }
+    
+    fputs(CHARSET_MAGIC, f);
+    for(j = 0; j < 128; j++)
+      fprintf(f, "%d\n",  (*Charsets[i].map)[j]);
+    
+    fclose(f);
+  }
+  
+  return 0;
+}
index 75169964ac20bf739acb7fe715b2c8e886f0df91..86e8f64502182281e980e642f88577f151152b3e 100644 (file)
--- a/handler.c
+++ b/handler.c
@@ -72,8 +72,9 @@ void mutt_decode_xbit (STATE *s, BODY *b, int istext)
   
   if (istext)
   {
-    CHARSET *body_charset = mutt_get_charset(mutt_get_parameter("charset", b->parameter));
-    CHARSET *display_charset = mutt_get_charset(Charset);
+    UNICODE_MAP *map;
+    
+    map = mutt_get_translation(mutt_get_parameter("charset", b->parameter), Charset);
 
     while ((c = fgetc(s->fpin)) != EOF && len--)
     {
@@ -96,7 +97,7 @@ void mutt_decode_xbit (STATE *s, BODY *b, int istext)
        }
        
       }
-      state_putc(mutt_display_char(c, body_charset, display_charset), s);
+      state_putc(mutt_display_char(c, map), s);
       if(c == '\n')
        lbreak = 1;
     }
@@ -121,8 +122,7 @@ void mutt_decode_quoted (STATE *s, BODY *b, int istext)
 {
   long len = b->length;
   int ch, lbreak = 1;
-  CHARSET *body_charset = mutt_get_charset(mutt_get_parameter("charset", b->parameter));
-  CHARSET *display_charset = mutt_get_charset(Charset);
+  UNICODE_MAP *map = mutt_get_translation(mutt_get_parameter("charset", b->parameter), Charset);
 
   while (len > 0)
   {
@@ -190,7 +190,7 @@ void mutt_decode_quoted (STATE *s, BODY *b, int istext)
     }
 
     if(ch != EOF)
-      state_putc(istext ? mutt_display_char(ch, body_charset, display_charset) : ch, s);
+      state_putc(istext ? mutt_display_char(ch, map) : ch, s);
 
     if(ch == '\n')
       lbreak = 1;
@@ -202,8 +202,7 @@ void mutt_decode_base64 (STATE *s, BODY *b, int istext)
   long len = b->length;
   char buf[5];
   int c1, c2, c3, c4, ch, cr = 0, i;
-  CHARSET *body_charset = mutt_get_charset(mutt_get_parameter("charset", b->parameter));
-  CHARSET *display_charset = mutt_get_charset(Charset);
+  UNICODE_MAP *map = mutt_get_translation(mutt_get_parameter("charset", b->parameter), Charset);
 
   buf[4] = 0;
 
@@ -232,7 +231,7 @@ void mutt_decode_base64 (STATE *s, BODY *b, int istext)
       cr = 1;
     else
     {
-      state_putc(istext ? mutt_display_char(ch, body_charset, display_charset) : ch, s);
+      state_putc(istext ? mutt_display_char(ch, map) : ch, s);
       if (ch == '\n' && s->prefix) state_puts (s->prefix, s);
     }
 
@@ -249,7 +248,7 @@ void mutt_decode_base64 (STATE *s, BODY *b, int istext)
       cr = 1;
     else
     {
-      state_putc(istext ? mutt_display_char(ch, body_charset, display_charset) : ch, s);
+      state_putc(istext ? mutt_display_char(ch, map) : ch, s);
       if (ch == '\n' && s->prefix)
        state_puts (s->prefix, s);
     }
@@ -266,7 +265,7 @@ void mutt_decode_base64 (STATE *s, BODY *b, int istext)
       cr = 1;
     else
     {
-      state_putc(istext ? mutt_display_char(ch, body_charset, display_charset) : ch, s);
+      state_putc(istext ? mutt_display_char(ch, map) : ch, s);
       if (ch == '\n' && s->prefix)
        state_puts (s->prefix, s);
     }
diff --git a/hash.h b/hash.h
index a0757c6ba8eba884e7eafd8fa9176d70ffdd912d..bc079a1190350eb3ac29b7058498df6b3efc98be 100644 (file)
--- a/hash.h
+++ b/hash.h
@@ -16,6 +16,9 @@
  *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#ifndef _HASH_H
+#define _HASH_H
+
 struct hash_elem
 {
   const char *key;
@@ -41,3 +44,5 @@ void *hash_find_hash (const HASH * table, int hash, const char *key);
 void hash_delete_hash (HASH * table, int hash, const char *key, const void *data,
                       void (*destroy) (void *));
 void hash_destroy (HASH ** hash, void (*destroy) (void *));
+
+#endif
index b5d0f2207d8eec6e87289c9800b9015d20b32e67..ef464769fc08f12316623d0fa4b9732868670ec5 100644 (file)
@@ -109,7 +109,11 @@ ATTACHPTR **mutt_gen_attach_list (BODY *m,
     if (*idxlen == *idxmax)
       safe_realloc ((void **) &idx, sizeof (ATTACHPTR *) * (*idxmax += 5));
 
-    if (m->type == TYPEMULTIPART && m->parts && !mutt_is_multipart_encrypted(m))
+    if (m->type == TYPEMULTIPART && m->parts
+#ifdef _PGPPATH
+       && !mutt_is_multipart_encrypted(m)
+#endif
+       )
     {
       idx = mutt_gen_attach_list (m->parts, idx, idxlen, idxmax, level, compose);
     }
index a302afb2beef8531632ba20a39cdbe8c8b3a953c..3bfaafb74d7783320094dc7dc868669d0c205a81 100644 (file)
--- a/rfc2047.c
+++ b/rfc2047.c
@@ -245,8 +245,8 @@ static int rfc2047_decode_word (char *d, const char *s, size_t len)
   char *pp = p;
   char *pd = d;
   int enc = 0, filter = 0, count = 0, c1, c2, c3, c4;
-  char *charset;
-
+  char *charset = NULL;
+  
   while ((pp = strtok (pp, "?")) != NULL)
   {
     count++;
@@ -326,7 +326,7 @@ static int rfc2047_decode_word (char *d, const char *s, size_t len)
   }
   if (filter)
   {
-    if (mutt_display_string(d, mutt_get_charset(charset), mutt_get_charset(Charset)) == -1)
+    if (mutt_display_string(d, mutt_get_translation(charset, Charset)) == -1)
     {
       pd = d;
       while (*pd)
index 11859939df1238c3330519e6d2f5a27165409322..63c2239c23db57f7760b06b35a66fc3fe52b0914 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
@@ -919,7 +919,9 @@ BODY *mutt_make_message_attach (CONTEXT *ctx, HEADER *hdr, int attach_msg)
   BODY *body;
   FILE *fp;
   int cmflags, chflags;
+#ifdef _PGPPATH
   int pgp = hdr->pgp;
+#endif
   
 #ifdef _PGPPATH
   if ((option(OPTMIMEFORWDECODE) || option(OPTFORWDECRYPT)) &&
@@ -947,7 +949,9 @@ BODY *mutt_make_message_attach (CONTEXT *ctx, HEADER *hdr, int attach_msg)
   {
     chflags |= CH_MIME | CH_TXTPLAIN;
     cmflags = M_CM_DECODE;
+#ifdef _PGPPATH
     pgp &= ~PGPENCRYPT;
+#endif
   }
   else
 #ifdef _PGPPATH