aboutsummaryrefslogtreecommitdiffstats
path: root/debian
diff options
context:
space:
mode:
Diffstat (limited to 'debian')
-rw-r--r--debian/patches/015_debian-version.patch42
-rw-r--r--debian/patches/020_button.patch439
-rw-r--r--debian/patches/020_debian.patch11826
-rw-r--r--debian/patches/030_pager-s-option.patch181
-rw-r--r--debian/patches/040_link-gtk2.patch31
-rw-r--r--debian/patches/050_autotools-config.patch2813
-rw-r--r--debian/patches/060_format-security.patch44
-rw-r--r--debian/patches/070_glibc2.14.patch63
-rw-r--r--debian/patches/080_gc72.patch25
-rw-r--r--debian/patches/090_parallel-make.patch39
-rw-r--r--debian/patches/100_use-cppflags.patch17
-rw-r--r--debian/patches/110_form-input-text.patch15
-rw-r--r--debian/patches/120_sgrmouse.patch111
-rw-r--r--debian/patches/130_siteconf.patch2065
-rw-r--r--debian/patches/140_sort-dump-links.patch47
-rw-r--r--debian/patches/150_contact-list.patch32
-rw-r--r--debian/patches/160_ignore-shy.patch17
-rw-r--r--debian/patches/170_w3mman2html-utf8.patch53
-rw-r--r--debian/patches/180_execdict.patch14
-rw-r--r--debian/patches/190_Strchop.patch16
-rw-r--r--debian/patches/200_readme-img-typo.patch26
-rw-r--r--debian/patches/210_vim-like.patch87
-rw-r--r--debian/patches/220_maxcol.patch17
-rw-r--r--debian/patches/230_cygwin-lang.patch30
-rw-r--r--debian/patches/240_win64gc.patch1235
-rw-r--r--debian/patches/250_schemebug.patch97
-rw-r--r--debian/patches/260_openssl.patch29
-rw-r--r--debian/patches/270_refresh-url.patch25
-rw-r--r--debian/patches/280_search-next.patch19
-rw-r--r--debian/patches/290_closedir.patch19
-rw-r--r--debian/patches/300_manual-links.patch32
-rw-r--r--debian/patches/310_doc-ascii.patch79
-rw-r--r--debian/patches/320_imlib2-config.patch67
-rw-r--r--debian/patches/330_Disable-weak-ciphers.patch16
-rw-r--r--debian/patches/340_ssl-init.patch50
-rw-r--r--debian/patches/350_ambwidth.patch239
-rw-r--r--debian/patches/360_libressl.patch19
-rw-r--r--debian/patches/370_gtk2-pkg-config.patch31
-rw-r--r--debian/patches/380_tinfo.patch44
-rw-r--r--debian/patches/390_gdk-pixbuf.patch82
-rw-r--r--debian/patches/400_w3m-img-freebsd.patch831
-rw-r--r--debian/patches/410_textarea-segfault.patch22
-rw-r--r--debian/patches/420_uninitialized.patch54
-rw-r--r--debian/patches/430_no-ascii-default.patch21
-rw-r--r--debian/patches/440_parsetagx-crash.patch16
-rw-r--r--debian/patches/450_remoteimg.patch936
-rw-r--r--debian/patches/460_printf.patch52
-rw-r--r--debian/patches/470_alloc.patch151
-rw-r--r--debian/patches/800_lang-en.patch535
-rw-r--r--debian/patches/810_lang-de.patch921
-rw-r--r--debian/patches/820_lang-ja.patch18
-rw-r--r--debian/patches/900_ChangeLog.patch613
-rw-r--r--debian/patches/series52
53 files changed, 11827 insertions, 12528 deletions
diff --git a/debian/patches/015_debian-version.patch b/debian/patches/015_debian-version.patch
deleted file mode 100644
index f9373d1..0000000
--- a/debian/patches/015_debian-version.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-Subject: Update CURRENT_VERSION to 0.5.3+gitYYYYMMDD (generate from ChangeLog)
-From: Tatsuya Kinoshita <tats@debian.org>
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 52c8874..541cb74 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -6,7 +6,8 @@ dnl w3m autoconf macros
- AC_DEFUN([AC_W3M_VERSION],
- [AC_SUBST(CURRENT_VERSION)
- cvsver=`$AWK '\$[1] ~ /Id:/ { print \$[3]}' $srcdir/ChangeLog`
-- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
-+ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog`
-+ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
- CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`])
- #
- # ----------------------------------------------------------------
-diff --git a/configure b/configure
-index 2e37bb1..c09d70a 100755
---- a/configure
-+++ b/configure
-@@ -9084,7 +9084,8 @@ _ACEOF
-
-
- cvsver=`$AWK '\$1 ~ /Id:/ { print \$3}' $srcdir/ChangeLog`
-- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
-+ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog`
-+ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
- CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`
- ac_config_files="$ac_config_files Makefile posubst po/Makefile.in scripts/Makefile scripts/dirlist.cgi scripts/w3mhelp.cgi scripts/w3mmail.cgi scripts/xface2xpm scripts/multipart/Makefile scripts/multipart/multipart.cgi scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 scripts/w3mman/w3mman2html.cgi libwc/Makefile w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mimg/win/Makefile w3mhelp-w3m_en.html w3mhelp-w3m_ja.html w3mhelp-lynx_en.html w3mhelp-lynx_ja.html"
-
-diff --git a/version.c.in b/version.c.in
-index 31d30e4..ab25163 100644
---- a/version.c.in
-+++ b/version.c.in
-@@ -1,5 +1,5 @@
- /* $Id: version.c.in,v 1.49 2012/05/22 09:45:56 inu Exp $ */
--#define CURRENT_VERSION "w3m/0.5.3+cvs"
-+#define CURRENT_VERSION "w3m/0.5.3+gitYYYYMMDD"
-
- #ifndef FM_H
- char *w3m_version = CURRENT_VERSION;
diff --git a/debian/patches/020_button.patch b/debian/patches/020_button.patch
deleted file mode 100644
index 0ed7b87..0000000
--- a/debian/patches/020_button.patch
+++ /dev/null
@@ -1,439 +0,0 @@
-Description: Support the button element as defined in HTML 4.01
-Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/201009.month/4411.html
-Bug-Debian: http://bugs.debian.org/136810
-
-Index: file.c
-===================================================================
-RCS file: /cvsroot/w3m/w3m/file.c,v
-retrieving revision 1.264
-diff -u -r1.264 file.c
---- w3m.orig/file.c 3 Aug 2010 10:02:16 -0000 1.264
-+++ w3m/file.c 17 Sep 2010 12:18:55 -0000
-@@ -2467,6 +2467,7 @@
- bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor,
- sizeof(obuf->anchor));
- obuf->bp.img_alt = obuf->img_alt;
-+ obuf->bp.input_alt = obuf->input_alt;
- obuf->bp.in_bold = obuf->in_bold;
- obuf->bp.in_italic = obuf->in_italic;
- obuf->bp.in_under = obuf->in_under;
-@@ -2484,6 +2485,7 @@
- bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor,
- sizeof(obuf->anchor));
- obuf->img_alt = obuf->bp.img_alt;
-+ obuf->input_alt = obuf->bp.input_alt;
- obuf->in_bold = obuf->bp.in_bold;
- obuf->in_italic = obuf->bp.in_italic;
- obuf->in_under = obuf->bp.in_under;
-@@ -2727,7 +2729,7 @@
- Str line = obuf->line, pass = NULL;
- char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL,
- *hidden_under = NULL, *hidden_italic = NULL, *hidden_strike = NULL,
-- *hidden_ins = NULL, *hidden = NULL;
-+ *hidden_ins = NULL, *hidden_input, *hidden = NULL;
-
- #ifdef DEBUG
- if (w3m_debug) {
-@@ -2759,6 +2761,12 @@
- hidden = hidden_img;
- }
- }
-+ if (obuf->input_alt.in) {
-+ if ((hidden_input = has_hidden_link(obuf, HTML_INPUT_ALT)) != NULL) {
-+ if (!hidden || hidden_input < hidden)
-+ hidden = hidden_input;
-+ }
-+ }
- if (obuf->in_bold) {
- if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) {
- if (!hidden || hidden_bold < hidden)
-@@ -2810,6 +2818,8 @@
- Strcat_charp(line, "</a>");
- if (obuf->img_alt && !hidden_img)
- Strcat_charp(line, "</img_alt>");
-+ if (obuf->input_alt.in && !hidden_input)
-+ Strcat_charp(line, "</input_alt>");
- if (obuf->in_bold && !hidden_bold)
- Strcat_charp(line, "</b>");
- if (obuf->in_italic && !hidden_italic)
-@@ -3020,6 +3030,18 @@
- Strcat_charp(tmp, "\">");
- push_tag(obuf, tmp->ptr, HTML_IMG_ALT);
- }
-+ if (!hidden_input && obuf->input_alt.in) {
-+ Str tmp;
-+ if (obuf->input_alt.hseq > 0)
-+ obuf->input_alt.hseq = - obuf->input_alt.hseq;
-+ tmp = Sprintf("<INPUT_ALT hseq=\"%d\" fid=\"%d\" name=\"%s\" type=\"%s\" value=\"%s\">",
-+ obuf->input_alt.hseq,
-+ obuf->input_alt.fid,
-+ obuf->input_alt.name->ptr,
-+ obuf->input_alt.type->ptr,
-+ obuf->input_alt.value->ptr);
-+ push_tag(obuf, tmp->ptr, HTML_INPUT_ALT);
-+ }
- if (!hidden_bold && obuf->in_bold)
- push_tag(obuf, "<B>", HTML_B);
- if (!hidden_italic && obuf->in_italic)
-@@ -3730,6 +3752,63 @@
- }
-
- Str
-+process_button(struct parsed_tag *tag)
-+{
-+ Str tmp = NULL;
-+ char *p, *q, *r, *qq = "";
-+ int qlen, v;
-+
-+ if (cur_form_id < 0) {
-+ char *s = "<form_int method=internal action=none>";
-+ tmp = process_form(parse_tag(&s, TRUE));
-+ }
-+ if (tmp == NULL)
-+ tmp = Strnew();
-+
-+ p = "submit";
-+ parsedtag_get_value(tag, ATTR_TYPE, &p);
-+ q = NULL;
-+ parsedtag_get_value(tag, ATTR_VALUE, &q);
-+ r = "";
-+ parsedtag_get_value(tag, ATTR_NAME, &r);
-+
-+ v = formtype(p);
-+ if (v == FORM_UNKNOWN)
-+ return NULL;
-+
-+ if (!q) {
-+ switch (v) {
-+ case FORM_INPUT_SUBMIT:
-+ case FORM_INPUT_BUTTON:
-+ q = "SUBMIT";
-+ break;
-+ case FORM_INPUT_RESET:
-+ q = "RESET";
-+ break;
-+ }
-+ }
-+ if (q) {
-+ qq = html_quote(q);
-+ qlen = strlen(q);
-+ }
-+
-+ // Strcat_charp(tmp, "<pre_int>");
-+ Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s "
-+ "name=\"%s\" value=\"%s\">",
-+ cur_hseq++, cur_form_id, p, html_quote(r), qq));
-+ return tmp;
-+}
-+
-+Str
-+process_n_button(void)
-+{
-+ Str tmp = Strnew();
-+ Strcat_charp(tmp, "</input_alt>");
-+ // Strcat_charp(tmp, "</pre_int>");
-+ return tmp;
-+}
-+
-+Str
- process_select(struct parsed_tag *tag)
- {
- Str tmp = NULL;
-@@ -4859,7 +4938,35 @@
- if (i > obuf->bottom_margin)
- obuf->bottom_margin = i;
- }
-+ if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) {
-+ obuf->input_alt.hseq = hseq;
-+ }
-+ if (parsedtag_get_value(tag, ATTR_FID, &i)) {
-+ obuf->input_alt.fid = i;
-+ }
-+ if (parsedtag_get_value(tag, ATTR_TYPE, &p)) {
-+ obuf->input_alt.type = Strnew_charp(p);
-+ }
-+ if (parsedtag_get_value(tag, ATTR_VALUE, &p)) {
-+ obuf->input_alt.value = Strnew_charp(p);
-+ }
-+ if (parsedtag_get_value(tag, ATTR_NAME, &p)) {
-+ obuf->input_alt.name = Strnew_charp(p);
-+ }
-+ obuf->input_alt.in = 1;
- return 0;
-+ case HTML_N_INPUT_ALT:
-+ if (obuf->input_alt.in) {
-+ if (!close_effect0(obuf, HTML_INPUT_ALT))
-+ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT);
-+ obuf->input_alt.hseq = 0;
-+ obuf->input_alt.fid = -1;
-+ obuf->input_alt.in = 0;
-+ obuf->input_alt.type = NULL;
-+ obuf->input_alt.name = NULL;
-+ obuf->input_alt.value = NULL;
-+ }
-+ return 1;
- case HTML_TABLE:
- close_anchor(h_env, obuf);
- obuf->table_level++;
-@@ -4968,6 +5075,16 @@
- case HTML_INPUT:
- close_anchor(h_env, obuf);
- tmp = process_input(tag);
-+ if (tmp)
-+ HTMLlineproc1(tmp->ptr, h_env);
-+ return 1;
-+ case HTML_BUTTON:
-+ tmp = process_button(tag);
-+ if (tmp)
-+ HTMLlineproc1(tmp->ptr, h_env);
-+ return 1;
-+ case HTML_N_BUTTON:
-+ tmp = process_n_button();
- if (tmp)
- HTMLlineproc1(tmp->ptr, h_env);
- return 1;
-@@ -5680,6 +5797,21 @@
- putHmarker(buf->hmarklist, currentLn(buf),
- hpos, hseq - 1);
- }
-+ else if (hseq < 0) {
-+ int h = -hseq - 1;
-+ int hpos = pos;
-+ if (*str == '[')
-+ hpos++;
-+ if (buf->hmarklist &&
-+ h < buf->hmarklist->nmark &&
-+ buf->hmarklist->marks[h].invalid) {
-+ buf->hmarklist->marks[h].pos = hpos;
-+ buf->hmarklist->marks[h].line = currentLn(buf);
-+ buf->hmarklist->marks[h].invalid = 0;
-+ hseq = -hseq;
-+ }
-+ }
-+
- if (!form->target)
- form->target = buf->baseTarget;
- if (a_textarea &&
-@@ -6747,6 +6879,12 @@
- obuf->nobr_level = 0;
- bzero((void *)&obuf->anchor, sizeof(obuf->anchor));
- obuf->img_alt = 0;
-+ obuf->input_alt.hseq = 0;
-+ obuf->input_alt.fid = -1;
-+ obuf->input_alt.in = 0;
-+ obuf->input_alt.type = NULL;
-+ obuf->input_alt.name = NULL;
-+ obuf->input_alt.value = NULL;
- obuf->in_bold = 0;
- obuf->in_italic = 0;
- obuf->in_under = 0;
-@@ -6782,6 +6920,15 @@
- push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT);
- obuf->img_alt = NULL;
- }
-+ if (obuf->input_alt.in) {
-+ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT);
-+ obuf->input_alt.hseq = 0;
-+ obuf->input_alt.fid = -1;
-+ obuf->input_alt.in = 0;
-+ obuf->input_alt.type = NULL;
-+ obuf->input_alt.name = NULL;
-+ obuf->input_alt.value = NULL;
-+ }
- if (obuf->in_bold) {
- push_tag(obuf, "</b>", HTML_N_B);
- obuf->in_bold = 0;
-Index: fm.h
-===================================================================
-RCS file: /cvsroot/w3m/w3m/fm.h,v
-retrieving revision 1.149
-diff -u -r1.149 fm.h
---- w3m.orig/fm.h 20 Aug 2010 09:47:09 -0000 1.149
-+++ w3m/fm.h 17 Sep 2010 12:18:55 -0000
-@@ -562,6 +562,13 @@
- #define INIT_BUFFER_WIDTH ((_INIT_BUFFER_WIDTH > 0) ? _INIT_BUFFER_WIDTH : 0)
- #define FOLD_BUFFER_WIDTH (FoldLine ? (INIT_BUFFER_WIDTH + 1) : -1)
-
-+struct input_alt_attr {
-+ int hseq;
-+ int fid;
-+ int in;
-+ Str type, name, value;
-+};
-+
- typedef struct {
- int pos;
- int len;
-@@ -569,6 +576,7 @@
- long flag;
- Anchor anchor;
- Str img_alt;
-+ struct input_alt_attr input_alt;
- char fontstat[FONTSTAT_SIZE];
- short nobr_level;
- Lineprop prev_ctype;
-@@ -591,6 +599,7 @@
- short nobr_level;
- Anchor anchor;
- Str img_alt;
-+ struct input_alt_attr input_alt;
- char fontstat[FONTSTAT_SIZE];
- char fontstat_stack[FONT_STACK_SIZE][FONTSTAT_SIZE];
- int fontstat_sp;
-Index: html.c
-===================================================================
-RCS file: /cvsroot/w3m/w3m/html.c,v
-retrieving revision 1.32
-diff -u -r1.32 html.c
---- w3m.orig/html.c 14 Aug 2010 01:29:40 -0000 1.32
-+++ w3m/html.c 17 Sep 2010 12:18:55 -0000
-@@ -56,6 +56,9 @@
- ATTR_CORE
- };
- #define MAXA_INPUT MAXA_CORE + 12
-+unsigned char ALST_BUTTON[] =
-+ { ATTR_TYPE, ATTR_VALUE, ATTR_NAME, ATTR_CORE };
-+#define MAXA_BUTTON MAXA_CORE + 3
- unsigned char ALST_TEXTAREA[] =
- { ATTR_COLS, ATTR_ROWS, ATTR_NAME, ATTR_READONLY, ATTR_CORE };
- #define MAXA_TEXTAREA MAXA_CORE + 4
-@@ -247,24 +250,24 @@
- {"/bdo", NULL, 0, TFLG_END}, /* 121 HTML_N_BDO */
- {"big", ALST_NOP, MAXA_NOP, 0}, /* 122 HTML_BIG */
- {"/big", NULL, 0, TFLG_END}, /* 123 HTML_N_BIG */
-- {"button", ALST_NOP, MAXA_NOP, 0}, /* 124 HTML_BUTTON */
-- {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 125 HTML_FIELDSET */
-- {"/fieldset", NULL, 0, TFLG_END}, /* 126 HTML_N_FIELDSET */
-- {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 127 HTML_IFRAME */
-- {"label", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_LABEL */
-- {"/label", NULL, 0, TFLG_END}, /* 129 HTML_N_LABEL */
-- {"legend", ALST_NOP, MAXA_NOP, 0}, /* 130 HTML_LEGEND */
-- {"/legend", NULL, 0, TFLG_END}, /* 131 HTML_N_LEGEND */
-- {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 132 HTML_NOSCRIPT */
-- {"/noscript", NULL, 0, TFLG_END}, /* 133 HTML_N_NOSCRIPT */
-- {"object", ALST_NOP, MAXA_NOP, 0}, /* 134 HTML_OBJECT */
-- {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OPTGROUP */
-- {"/optgroup", NULL, 0, TFLG_END}, /* 136 HTML_N_OPTGROUP */
-- {"param", ALST_NOP, MAXA_NOP, 0}, /* 137 HTML_PARAM */
-- {"small", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_SMALL */
-- {"/small", NULL, 0, TFLG_END}, /* 139 HTML_N_SMALL */
-+ {"button", ALST_BUTTON, MAXA_BUTTON, 0}, /* 124 HTML_BUTTON */
-+ {"/button", NULL, 0, TFLG_END}, /* 125 HTML_N_BUTTON */
-+ {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 126 HTML_FIELDSET */
-+ {"/fieldset", NULL, 0, TFLG_END}, /* 127 HTML_N_FIELDSET */
-+ {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_IFRAME */
-+ {"label", ALST_NOP, MAXA_NOP, 0}, /* 129 HTML_LABEL */
-+ {"/label", NULL, 0, TFLG_END}, /* 130 HTML_N_LABEL */
-+ {"legend", ALST_NOP, MAXA_NOP, 0}, /* 131 HTML_LEGEND */
-+ {"/legend", NULL, 0, TFLG_END}, /* 132 HTML_N_LEGEND */
-+ {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 133 HTML_NOSCRIPT */
-+ {"/noscript", NULL, 0, TFLG_END}, /* 134 HTML_N_NOSCRIPT */
-+ {"object", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OBJECT */
-+ {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 136 HTML_OPTGROUP */
-+ {"/optgroup", NULL, 0, TFLG_END}, /* 137 HTML_N_OPTGROUP */
-+ {"param", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_PARAM */
-+ {"small", ALST_NOP, MAXA_NOP, 0}, /* 139 HTML_SMALL */
-+ {"/small", NULL, 0, TFLG_END}, /* 140 HTML_N_SMALL */
-
-- {NULL, NULL, 0, 0}, /* 140 Undefined */
- {NULL, NULL, 0, 0}, /* 141 Undefined */
- {NULL, NULL, 0, 0}, /* 142 Undefined */
- {NULL, NULL, 0, 0}, /* 143 Undefined */
-Index: html.h
-===================================================================
-RCS file: /cvsroot/w3m/w3m/html.h,v
-retrieving revision 1.31
-diff -u -r1.31 html.h
---- w3m.orig/html.h 14 Aug 2010 01:29:40 -0000 1.31
-+++ w3m/html.h 17 Sep 2010 12:18:55 -0000
-@@ -214,21 +214,22 @@
- #define HTML_BIG 122
- #define HTML_N_BIG 123
- #define HTML_BUTTON 124
--#define HTML_FIELDSET 125
--#define HTML_N_FIELDSET 126
--#define HTML_IFRAME 127
--#define HTML_LABEL 128
--#define HTML_N_LABEL 129
--#define HTML_LEGEND 130
--#define HTML_N_LEGEND 131
--#define HTML_NOSCRIPT 132
--#define HTML_N_NOSCRIPT 133
--#define HTML_OBJECT 134
--#define HTML_OPTGROUP 135
--#define HTML_N_OPTGROUP 136
--#define HTML_PARAM 137
--#define HTML_SMALL 138
--#define HTML_N_SMALL 139
-+#define HTML_N_BUTTON 125
-+#define HTML_FIELDSET 126
-+#define HTML_N_FIELDSET 127
-+#define HTML_IFRAME 128
-+#define HTML_LABEL 129
-+#define HTML_N_LABEL 130
-+#define HTML_LEGEND 131
-+#define HTML_N_LEGEND 132
-+#define HTML_NOSCRIPT 133
-+#define HTML_N_NOSCRIPT 134
-+#define HTML_OBJECT 135
-+#define HTML_OPTGROUP 136
-+#define HTML_N_OPTGROUP 137
-+#define HTML_PARAM 138
-+#define HTML_SMALL 139
-+#define HTML_N_SMALL 140
-
- /* pseudo tag */
- #define HTML_SELECT_INT 160
-Index: proto.h
-===================================================================
-RCS file: /cvsroot/w3m/w3m/proto.h,v
-retrieving revision 1.104
-diff -u -r1.104 proto.h
---- w3m.orig/proto.h 25 Jul 2010 09:55:05 -0000 1.104
-+++ w3m/proto.h 17 Sep 2010 12:18:55 -0000
-@@ -207,6 +207,8 @@
- extern Str process_img(struct parsed_tag *tag, int width);
- extern Str process_anchor(struct parsed_tag *tag, char *tagbuf);
- extern Str process_input(struct parsed_tag *tag);
-+extern Str process_button(struct parsed_tag *tag);
-+extern Str process_n_button(void);
- extern Str process_select(struct parsed_tag *tag);
- extern Str process_n_select(void);
- extern void feed_select(char *str);
-Index: table.c
-===================================================================
-RCS file: /cvsroot/w3m/w3m/table.c,v
-retrieving revision 1.58
-diff -u -r1.58 table.c
---- w3m.orig/table.c 9 Aug 2010 11:59:19 -0000 1.58
-+++ w3m/table.c 17 Sep 2010 12:18:55 -0000
-@@ -2878,6 +2878,14 @@
- tmp = process_input(tag);
- feed_table1(tbl, tmp, mode, width);
- break;
-+ case HTML_BUTTON:
-+ tmp = process_button(tag);
-+ feed_table1(tbl, tmp, mode, width);
-+ break;
-+ case HTML_N_BUTTON:
-+ tmp = process_n_button();
-+ feed_table1(tbl, tmp, mode, width);
-+ break;
- case HTML_SELECT:
- tmp = process_select(tag);
- if (tmp)
-Index: tagtable.tab
-===================================================================
-RCS file: /cvsroot/w3m/w3m/tagtable.tab,v
-retrieving revision 1.14
-diff -u -r1.14 tagtable.tab
---- w3m.orig/tagtable.tab 14 Aug 2010 01:29:40 -0000 1.14
-+++ w3m/tagtable.tab 17 Sep 2010 12:18:55 -0000
-@@ -176,6 +176,7 @@
- big HTML_BIG
- /big HTML_N_BIG
- button HTML_BUTTON
-+/button HTML_N_BUTTON
- fieldset HTML_FIELDSET
- /fieldset HTML_N_FIELDSET
- iframe HTML_IFRAME
diff --git a/debian/patches/020_debian.patch b/debian/patches/020_debian.patch
new file mode 100644
index 0000000..a53d97c
--- /dev/null
+++ b/debian/patches/020_debian.patch
@@ -0,0 +1,11826 @@
+Description: Git master branch of Debian's w3m
+Origin: http://anonscm.debian.org/cgit/collab-maint/w3m.git
+
+diff --git a/ChangeLog b/ChangeLog
+index 88358ef..7629962 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,3 +1,605 @@
++2015-01-24 Tatsuya Kinoshita <tats@debian.org>
++
++ * acinclude.m4, configure, version.c.in:
++ Update to 0.5.3+gitYYYYMMDD (generate from ChangeLog).
++
++2015-01-15 Tatsuya Kinoshita <tats@debian.org>
++
++ * alloc.h, main.c: Drop C99 features.
++
++2015-01-15 Scarlett <scarlett@xavin.net>
++
++ Add overflow detection.
++ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
++ * main.c: Call exit(1) when out of memory to avoid dereferencing null
++ pointers when gc's malloc fails.
++ * alloc.h: Replacements for w3m's allocation macros which add
++ overflow detection and concentrate the macros in one file.
++ * indep.h, libwc/charset.c, libwc/status.c, matrix.c: Use the
++ overflow-detecting allocation macros from alloc.h.
++
++2015-01-15 Tatsuya Kinoshita <tats@debian.org>
++
++ * Str.c, cookie.c, map.c:
++ Do not use C99 printf format specifiers and asprintf.
++
++2015-01-15 Scarlett <scarlett@xavin.net>
++
++ Correct printf arguments and use asprintf.
++ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
++ * Str.c: Use asprintf() instead of rolling our own printf string
++ length detection.
++ * cookie.c: Pass the char pointer in the string struct to printf %s
++ instead of the string struct itself.
++ Print time_t using %lld instead of %ld to allow for 64-bit time_t.
++ * main.c: Print a long int using the correct format specifier.
++ * map.c: Print size_t using the correct format specifier.
++
++2014-12-06 Araki Ken <arakiken@users.sf.net>
++
++ Support OSC 5379 remote imaging and sixel graphics.
++ Origin: https://bitbucket.org/arakiken/w3m/branch/remoteimg (2014-11-16)
++
++ * doc/README.sixel, terms.c: Add README.sixel. W3M_IMG2SIXEL
++ environmental variable enables to specify options of img2sixel.
++
++ * image.c, terms.c:
++ Add n_terminal_image argument to put_image_{sixel|osc5379}().
++ Use struct winsize to calculate ppc and ppl.
++
++ * terms.c: If SCREEN_VARIANT=sixel on GNU screen, exec img2sixel
++ without -P option.
++
++ * terms.c: ttymode_set() -> ttymode_reset().
++
++ * terms.c: Fix.
++
++ * terms.c: Support GNU screen.
++
++ * terms.c: Show GIF (except animation GIF) correctly.
++
++ * main.c, terms.c: img2sixel exits by Ctrl+C. Enable GIF Animation if
++ 'I' is pressed to show it.
++
++ * image.c: Add declaration of get_pixel_per_cell().
++
++ * terms.c: Show the first frame of animation gif files.
++
++ * terms.c: system() -> fork()&execvp()
++
++ * display.c: Draw underline on anchor which contains cboth text and
++ images.
++
++ * etc.c: Remove close_tty() from setup_child() because close_tty()
++ sometimes interrupts loadGeneralFile() in loadImage() and corrupt
++ image data can be cached in ~/.w3m.
++
++ * image.c: Minor fix.
++
++ * image.c: Cache image files if at all possible and convert them to
++ sixel when -sixel option is specified.
++
++ * image.c: Init pixel_per_{char|line}_i if get_pixel_per_cell() fails.
++
++ * display.c, file.c, fm.h, image.c, main.c, terms.c:
++ Add -sixel option which supports image processing by img2sixel.
++
++ * image.c: Don't download image files whose size is specified in
++ <img> tag.
++
++ * image.c: Minor fixes of parseImageHeader().
++
++ * image.c: Determine the format of an image file by its header data
++ not by its file name suffix.
++
++ * image.c: Read width and height from jpeg, png and gif files directly
++ instead of executing w3mimgdisplay -size.
++
++ * display.c: display.c: Draw underline on anchor text which is not
++ overlapped with any image.
++
++ * terms.c: Clear fd_set by FD_ZERO() before select().
++
++ * file.c: nw and ni are rounded up instead of rounded off to show
++ every corner of images.
++
++ * terms.c: Change time to wait for the response of "\x1b[14t\x1b[18t"
++ from 0.1 sec to 0.5 sec.
++
++ * image.c:
++ - clearImage() works.
++ - Use cached image files created by w3m in getImage().
++
++ * file.c: Hack for alignment.
++
++ * fm.h, image.c, terms.c:
++ - Adjust the image size to the terminal cell size.
++ - If the image size is specified in html source, skip to load the image.
++
++ * display.c, fm.h, image.c, main.c, terms.c, w3mimg/x11/x11_w3mimg.c:
++ Support remote image by OSC 5379 show_picture sequence.
++
++2014-12-06 Olaf Hering <olh@suse.de>
++
++ * parsetagx.c: Fix crash in parse_tag() during every start.
++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-parsetagx-crash.patch?expand=1
++
++ * fm.h: Change the default to alt_entity=0.
++ Change the default for the option "Use ASCII equivalents to
++ display entities" from YES to NO.
++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.5.1-no-ASCII-equivalents-by-default.patch?expand=1
++ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=247397
++
++ * anchor.c, libwc/gb18030.c, libwc/ucs.c, regex.c:
++ Fix a few harmless uninitialized variables.
++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-uninitialized.patch?expand=1
++
++2014-12-06 Peter Poeml <poeml@suse.de>
++
++ * terms.c: Prevent segfault when editing a textarea field with vi.
++ Add fix for segfault that can occur when editing a textarea field
++ with vi, and returning to w3m (it seems to happen if the terminal
++ is not writable, as when using w3m after 'su - some_user')
++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.4.1-textarea-segfault.dif?expand=1
++
++2014-12-04 Tatsuya Kinoshita <tats@debian.org>
++
++ * acinclude.m4: Follow updated configure.
++
++2014-12-03 Yusuke Baba <babayaga1@y8.dion.ne.jp>
++
++ * configure, w3mimg/fb/fb.c, w3mimg/fb/fb.h, w3mimg/fb/fb_w3mimg.c:
++ Support FreeBSD framebuffer.
++ Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html
++ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673
++
++2014-12-02 Naohiro Aota <naota@gentoo.org>
++
++ * acinclude.m4, configure, w3mimg/fb/fb_gdkpixbuf.c:
++ * w3mimg/x11/x11_w3mimg.c:
++ Depend on gdk-pixbuf instead of gtk when gtk2.
++ Origin: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-gdk-pixbuf.patch?revision=1.1
++
++2014-12-02 Jeroen Roovers <jer@gentoo.org>
++
++ * acinclude.m4, configure: Add tinfo to with_termlib.
++ Fix building against sys-libs/ncurses[tinfo].
++ Origin: https://504588.bugs.gentoo.org/attachment.cgi?id=372650
++ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=504588
++
++2014-12-01 OBATA Akio <obache@netbsd.org>
++
++ * acinclude.m4, configure:
++ Assume defined PKG_CONFIG points right location when gtk2.
++ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-aa?rev=1.13&content-type=text/x-cvsweb-markup
++ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-ak?rev=1.1&content-type=text/x-cvsweb-markup
++
++2014-12-01 Vsevolod Stakhov <vsevolod@FreeBSD.org>
++
++ * config.h.in: Disable USE_EGD for LibreSSL.
++ Disable use of RAND_egd as it is absent in FreeBSD.
++ This also fixes build error with LibreSSL.
++ Origin: https://bz-attachments.freebsd.org/attachment.cgi?id=144635
++ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191852
++ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191956
++
++2014-12-01 zimous <zimous@matfyz.cz>
++
++ * po/ja.po: Set Language tag properly for Japanese translation.
++ Origin: https://512722.bugs.gentoo.org/attachment.cgi?id=378452
++ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=512722
++
++2014-11-30 Tatsuya Kinoshita <tats@debian.org>
++
++ * doc/w3m.1: Typo fix.
++
++2014-11-30 Markus Hiereth <post@hiereth.de>
++
++ * doc/w3m.1: Miscellaneous changes to improve English manpage.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
++
++2014-11-29 Markus Hiereth <post@hiereth.de>
++
++ * doc/w3m.1: Improve FILES.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=403634
++
++ * doc/w3m.1: Improve EXAMPLES.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=380560
++
++ * doc/w3m.1: Improve explanation about option -N.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=345084
++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=530468
++
++ * doc/w3m.1: Note that -cols only affects when HTML is rendered.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=285251
++
++ * doc/w3m.1: Add more info on configuration.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=268211
++
++2014-11-29 Justin B Rye <justin.byam.rye@gmail.com>
++
++ * scripts/w3mman/w3mman.1.in: Tweak for W3MMAN_W3M.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771003#5
++
++ * scripts/w3mman/w3mman.1.in: English fixes.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#25
++
++2014-11-29 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-19+.
++
++2014-11-29 Justin B Rye <justin.byam.rye@gmail.com>
++
++ * scripts/w3mman/w3mman2html.cgi.in: Fix Perl warnings.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771004
++
++2014-10-21 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-19
++
++ * po/LINGUAS: Correct LINGUAS to a whitespace separated list
++
++2014-10-21 Markus Hiereth <markus.hiereth@freenet.de>
++
++ * po/LINGUAS, po/de.po: Add German translation
++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763964
++
++2014-10-15 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-18
++
++ * doc-jp/README.SSL: Update README.SSL to follow default values
++
++ * config.sub: Update config.sub with autotools-dev 20140911.1
++
++ * fm.h: Disable SSLv3 by default [CVE-2014-3566]
++ cf. https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/
++
++2014-10-15 Ludwig Nussel <ludwig.nussel@suse.de>
++
++ * fm.h: Force ssl_verify_server on and disable SSLv2 support
++ Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4
++
++2014-10-13 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-17+
++
++2014-10-04 Tatsuya Kinoshita <tats@debian.org>
++
++ * libwc/ambwidth_map.awk, libwc/map/ucs_ambwidth.map:
++ Fix incorrect generation of ucs_ambwidth_map
++
++2014-08-22 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-17
++
++ * config.guess:
++ Update config.guess to 2014-03-23 with autotools-dev 20140510.1
++
++ * config.sub:
++ Update config.sub to 2014-05-01 with autotools-dev 20140510.1
++
++2014-08-22 Micah Cowan <micah@addictivecode.org>
++
++ * main.c: Support Boehm GC 7.2
++ Replace Gentoo's patch to prevent segfaults due to infinite recursion.
++ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=080_gc72.patch;att=1;bug=758831
++ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758831
++ Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=555467
++ Bug: http://sourceforge.net/p/w3m/patches/63/
++ Bug: http://sourceforge.net/p/w3m/patches/59/
++
++2014-08-22 Tatsuya Kinoshita <tats@debian.org>
++
++ * main.c:
++ Revert "Support Boehm GC 7.2" (w3m-0.5.2-gc72.patch from Gentoo)
++ This reverts commit 4331db3e3e673ac4dbfe8e9f2b42a8e0478dc98a.
++
++2014-06-23 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-16
++
++ * url.c: Disable ciphers that use keys smaller than 128 bits
++ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1325674
++
++2014-01-04 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-15
++
++2014-01-03 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-14
++
++ * acinclude.m4, configure: Use pkg-config to build with imlib2 1.4.6
++
++ * doc/HISTORY, doc/README.cookie, doc/README.m17n:
++ Prefer US-ASCII rathar than Japanese encodings in English documents
++
++2013-12-27 Tatsuya Kinoshita <tats@debian.org>
++
++ * doc-jp/MANUAL.html, doc/MANUAL.html:
++ Cleanup unusable links in MANUAL.html
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517315
++
++ * version.c.in: Update to 0.5.3+debian-13+
++
++2013-12-17 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-13
++
++2013-12-14 Tatsuya Kinoshita <tats@debian.org>
++
++ * config.guess:
++ Update config.guess to 2013-06-10 with autotools-dev 20130810.1
++
++ * config.sub:
++ Update config.sub to 2013-08-10 with autotools-dev 20130810.1
++
++2013-12-07 Reinhard Max <max@suse.de>
++
++ * local.c: Fix a directory descriptor leak in loadLocalDir
++ Patch from openSUSE on 2009-09-07.
++ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-closedir.patch
++ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=531675
++
++2013-12-07 AIDA Shinra <shinra@j10n.org>
++
++ * main.c: Fix crash after SEARCH_NEXT
++ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-search-next.patch>,
++ [w3m-dev:04473] on 2013-12-07.
++
++2013-11-11 Paul Boekholt <p.boekholt@gmail.com>
++
++ * file.c: Add support for single quoted meta refresh URL
++ Bug: https://sourceforge.net/p/w3m/patches/53/
++
++2013-11-07 Cristian Rodriguez <crrodriguez@opensuse.org>
++
++ * url.c: Use SSL_OP_NO_COMPRESSION if available
++ Due to the "CRIME attack" (CVE-2012-4929) HTTPS clients that
++ negotiate TLS-level compression can be abused for MITM attacks.
++ * url.c: Use SSL_MODE_RELEASE_BUFFERS if available
++ Patch from openSUSE on 2012-11-12:
++ https://build.opensuse.org/request/show/141054
++
++2013-10-15 Tatsuya Kinoshita <tats@debian.org>
++
++ * Makefile.in:
++ Depend on funcname.tab to fix parallel make issue of scripts
++ Bug: https://sourceforge.net/p/w3m/patches/64/
++ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=362249
++
++ * w3mimg/Makefile.in:
++ Avoid prerequisite $(IMGOBJS) to fix parallel make issue of w3mimg
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726188
++
++ * acinclude.m4, configure:
++ Explicitly add -lX11 to IMGX11LDFLAGS only when gtk2
++ Bug: https://sourceforge.net/p/w3m/patches/57/
++
++ * w3mimg/Makefile.in: Revert "Fix parallel make issue"
++ This reverts commit aa6f871c6dcc108118142bcc786e4a6ac3d46867.
++
++ * Makefile.in:
++ Revert "Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5"
++ This reverts commit 7410954066d68ac2ad6aea638801714447321fec.
++
++2013-10-14 AIDA Shinra <shinra@j10n.org>
++
++ * url.c: Define schemeNumToName() to fix scheme bug
++ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-schemebug.patch>,
++ [w3m-dev:04470] on 2013-10-14.
++ Bug: https://sourceforge.net/p/w3m/patches/60/
++
++ * config.h.in, file.c, fm.h, html.h, image.c, indep.c, indep.h:
++ * istream.c, istream.h, local.c, main.c, mimehead.c, proto.h:
++ Workaround of GC crash on Cygwin64
++ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch>,
++ [w3m-dev:04469] on 2013-10-14.
++
++2013-10-14 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-12+
++
++2013-10-14 Jarek Czekalski <jarekczek@poczta.onet.pl>
++
++ * terms.c: Fix paren in check_cygwin_console()
++ Bug: https://sourceforge.net/p/w3m/patches/66/
++
++2013-10-13 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-12
++
++ * doc-jp/MANUAL.html, doc-jp/w3m.1, doc/MANUAL.html, doc/w3m.1:
++ Update document for the -s option change
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527
++
++ * terms.c: Do not fail when LANG is not set
++ Check whether the value of LC_ALL, LC_CTYPE or LANG is not NULL in
++ check_cygwin_console().
++ Bug: https://sourceforge.net/p/w3m/patches/66/
++
++2013-10-12 Tatsuya Kinoshita <tats@debian.org>
++
++ * table.h: Bump MAXCOL to 256
++ Bug: https://sourceforge.net/p/w3m/feature-requests/24/
++
++2013-10-12 Laurence Richert <laurencerichert@yahoo.de>
++
++ * main.c, proto.h: vim/-perator like handling
++ - half page scrolling
++ - jumping to elements numbered by getLinkNumberStr() from Karsten
++ Schoelzel
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028
++
++2013-10-12 Tatsuya Kinoshita <tats@debian.org>
++
++ * doc-jp/README, doc/README:
++ Mention project page rather than unavailable mailing lists
++
++2013-10-09 Rafael Laboissiere <rafael@laboissiere.net>
++
++ * doc/README.img: Fix typo
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=725892
++
++2013-08-12 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-11+
++
++ * ChangeLog: Update ChangeLog to use contributor's name
++
++2013-08-08 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-11
++
++2013-08-04 Tatsuya Kinoshita <tats@debian.org>
++
++ * Str.c: Check length for Strchop()
++
++ * main.c: Fix potentially segfault of execdict()
++
++ * version.c.in: Update to 0.5.3+debian-10+
++
++ * file.c: Fix segfault of loadGeneralFile()
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718612
++
++2013-08-02 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-10
++
++2013-08-02 Piotr P. Karwasz <piotr.p@karwasz.org>
++
++ * scripts/w3mman/w3mman2html.cgi.in:
++ Correct underline processing and more UTF-8 support for w3mman2html.cgi
++ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/680202>
++ on 2010-11-23.
++
++2013-08-01 Hilko Bengen <bengen@debian.org>
++
++ * entity.c: Ignore SOFT HYPHEN to prevent drawing hyphens everywhere
++ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441934>
++ on 2011-03-01.
++
++2013-08-01 Tatsuya Kinoshita <tats@debian.org>
++
++ * doc-jp/README, doc/README: Update contact list in README
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696209
++
++2013-07-30 Tatsuya Kinoshita <tats@debian.org>
++
++ * config.guess, config.sub:
++ Update config.guess and config.sub to supprot aarch64
++ Updated with Debian autotools-dev version 20130515.1.
++
++2013-07-30 Conrad J.C. Hughes <debbugs@xrad.org>
++
++ * main.c: Sort anchors by sequence number in -dump
++ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657666>
++ on 2012-01-27.
++
++2013-07-30 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update to 0.5.3+debian-9+
++
++2013-07-29 Tatsuya Kinoshita <tats@debian.org>
++
++ * version.c.in: Update version to w3m/0.5.3+debian-9
++
++ * version.c.in: Set CURRENT_VERSION to debian version
++
++2013-07-28 Tatsuya Kinoshita <tats@debian.org>
++
++ * file.c: Fix segfault of process_button()
++
++2013-04-08 AIDA Shinra <shinra@j10n.org>
++
++ * file.c: One more patch for siteconf from [w3m-dev 04464]
++
++ * anchor.c, config.h.in, display.c, doc-jp/README.siteconf:
++ * doc/README.siteconf, file.c, fm.h, form.c, frame.c, func.c:
++ * history.c, indep.c, indep.h, linein.c, main.c, map.c, menu.c:
++ * po/ja.po, proto.h, rc.c, url.c: Support the siteconf feature
++ Patch to support the siteconf feature, from [w3m-dev 04463]
++ on 2012-06-27.
++
++2013-04-08 Hayaki Saito <user@zuse.jp>
++
++ * keybind.c, main.c, proto.h, terms.c:
++ Support SGR 1006 mouse reporting
++ Patch to support SGR 1006 mouse reporting, from [w3m-dev 04466]
++ on 2012-07-15.
++
++2012-05-19 Hilko Bengen <bengen@debian.org>
++
++ * form.c: Assume "text" if an input type is unknown
++ Patch from <http://bugs.debian.org/615843> on 2011-03-01.
++
++2012-05-19 Simon Ruderich <simon@ruderich.org>
++
++ * Makefile.in: Use $(CPPFLAGS) with $(CPP)
++ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665491>
++ on 2012-03-24.
++
++2012-05-03 Miroslav Šulc <fordfrog@gentoo.org>
++
++ * w3mimg/Makefile.in: Fix parallel make issue
++ Patch from Gentoo
++ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-parallel-make.patch?revision=1.1&view=markup>
++ <https://bugs.gentoo.org/show_bug.cgi?id=353390> on 2011-02-01.
++
++2012-05-03 MATSUU Takuto <matsuu@gentoo.org>
++
++ * main.c: Support Boehm GC 7.2
++ Patch from Gentoo
++ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.2-gc72.patch?revision=1.1&view=markup>
++ on 2009-12-13.
++
++2012-05-02 Reinhard Tartler <siretart@tauware.de>
++
++ * istream.c, istream.h:
++ Fix that struct file_handle conflicts with glibc 2.14
++ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/935540>
++ on 2012-02-19.
++
++2011-10-30 Colin Watson <cjwatson@ubuntu.com>
++
++ * acinclude.m4, configure, w3mbookmark.c:
++ Appease gcc -Werror=format-security.
++ Patch from 0.5.3-3ubuntu1 on 2011-10-23.
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646321
++
++2011-06-19 Martin Pitt <martin.pitt@ubuntu.com>
++
++ * Makefile.in:
++ Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5
++ Patch from 0.5.2-10ubuntu1 on 2010-12-03.
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605761
++
++2011-06-19 Fumitoshi UKAI <ukai@debian.or.jp>
++
++ * main.c:
++ Change the -s option to "squeeze multiple blank lines" for pager
++ Change the -s option from "display charset Shift_JIS" to "squeeze
++ multiple blank lines" to work as /usr/bin/pager. In addition, the
++ options -j and -e are disabled. To specify the display charset,
++ use -O{s|j|e} instead.
++ Patch from [w3m-dev 01275] on 2000-10-26.
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527
++
++2011-06-19 Hiroyuki Ito <ZXB01226@nifty.com>
++
++ * file.c, fm.h, html.c, html.h, proto.h, table.c, tagtable.tab:
++ Support the button element as defined in HTML 4.01
++ Patch from upstream, [w3m-dev 04411] on 2010-09-17, to support the
++ button element. It is discussed upstream and incomplete, but enough
++ to login Launchpad.
++ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=136810
++
+ 2012-05-22 Tatsuya Kinoshita <tats@vega.ocn.ne.jp>
+
+ * [w3m-dev 04451] w3m/entity.h should be removed when `make clean'
+diff --git a/Makefile.in b/Makefile.in
+index 7d692f9..8fa799e 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -150,7 +150,7 @@ parsetagx.o: html.c
+
+ funcname.tab: $(DEFUNS)
+ (echo '#define DEFUN(x,y,z) x y';\
+- sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) - | \
++ sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) $(CPPFLAGS) - | \
+ awk '$$1 ~ /^[_A-Za-z]/ { \
+ for (i=2;i<=NF;i++) { print $$i, $$1} \
+ }' > $@.tmp
+@@ -250,7 +250,7 @@ install-po:
+ (cd $$subdir && $(MAKE) install); \
+ done
+
+-all-scripts:
++all-scripts: funcname.tab
+ for dir in $(SCRIPTSUBDIRS); \
+ do \
+ (cd $$dir && $(MAKE) $(MAKE_ARGS)); \
+diff --git a/Str.c b/Str.c
+index e5a0982..eff82a4 100644
+--- a/Str.c
++++ b/Str.c
+@@ -278,8 +278,8 @@ void
+ Strchop(Str s)
+ {
+ STR_LENGTH_CHECK(s);
+- while ((s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r') &&
+- s->length > 0) {
++ while (s->length > 0 &&
++ (s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r')) {
+ s->length--;
+ }
+ s->ptr[s->length] = '\0';
+diff --git a/acinclude.m4 b/acinclude.m4
+index e4ccc3d..60705f4 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -6,7 +6,8 @@ dnl w3m autoconf macros
+ AC_DEFUN([AC_W3M_VERSION],
+ [AC_SUBST(CURRENT_VERSION)
+ cvsver=`$AWK '\$[1] ~ /Id:/ { print \$[3]}' $srcdir/ChangeLog`
+- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
++ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog`
++ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
+ CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`])
+ #
+ # ----------------------------------------------------------------
+@@ -400,10 +401,10 @@ AC_DEFUN([AC_W3M_TERMLIB],
+ AC_ARG_WITH(termlib,
+ [ --with-termlib[=LIBS] terminal library
+ LIBS is space separated list of:
+- terminfo mytinfo termcap ncurses curses],,
++ terminfo mytinfo termcap tinfo ncurses curses],,
+ [with_termlib="yes"])
+ AC_MSG_RESULT($with_termlib)
+- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
++ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses"
+ for lib in $with_termlib; do
+ AC_CHECK_LIB($lib, tgetent, [W3M_LIBS="$W3M_LIBS -l$lib"; break])
+ done
+@@ -600,7 +601,7 @@ AC_DEFUN([AC_W3M_IMAGE],
+ if test x"$enable_image" = xyes; then
+ enable_image=x11
+ case "`uname -s`" in
+- Linux|linux|LINUX)
++ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD)
+ if test -c /dev/fb0; then
+ enable_image=x11,fb
+ fi;;
+@@ -649,6 +650,9 @@ AC_DEFUN([AC_W3M_IMAGE],
+ fi;;
+ imlib2)
+ with_imlib2="yes"
++ if test x"$PKG_CONFIG" = x; then
++ PKG_CONFIG=pkg-config
++ fi
+ if test x"$IMLIB2_CONFIG" = x; then
+ IMLIB2_CONFIG=imlib2-config
+ fi;;
+@@ -661,8 +665,6 @@ AC_DEFUN([AC_W3M_IMAGE],
+ with_gtk2="yes"
+ if test x"$PKG_CONFIG" = x; then
+ PKG_CONFIG=pkg-config
+- else
+- PKG_CONFIG=:
+ fi;;
+ esac
+ done
+@@ -705,8 +707,8 @@ AC_DEFUN([AC_W3M_IMAGE],
+ IMGTARGETS="x11"
+ AC_DEFINE(USE_GDKPIXBUF)
+ AC_DEFINE(USE_GTK2)
+- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
+- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
++ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
++ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
+ elif test x"$have_gdkpixbuf" = xyes; then
+ AC_DEFINE(USE_W3MIMG_X11)
+ IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
+@@ -728,7 +730,7 @@ AC_DEFUN([AC_W3M_IMAGE],
+ IMGTARGETS="x11"
+ AC_DEFINE(USE_IMLIB2)
+ IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
+- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
++ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`"
+ else
+ AC_MSG_WARN([unable to build w3mimgdisplay with X11 support])
+ fi
+@@ -740,8 +742,8 @@ AC_DEFUN([AC_W3M_IMAGE],
+ IMGTARGETS="${IMGTARGETS} fb"
+ AC_DEFINE(USE_GDKPIXBUF)
+ AC_DEFINE(USE_GTK2)
+- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
+- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
++ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`"
++ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`"
+ elif test x"$have_gdkpixbuf" = xyes; then
+ AC_DEFINE(USE_W3MIMG_FB)
+ IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
+@@ -756,7 +758,7 @@ AC_DEFUN([AC_W3M_IMAGE],
+ AC_DEFINE(USE_IMLIB2)
+ IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
+ IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
+- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
++ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`"
+ else
+ AC_MSG_WARN([unable to build w3mimgdisplay with FB support])
+ fi
+@@ -866,7 +868,7 @@ AC_MSG_CHECKING(for sys_errlist)
+ AC_TRY_COMPILE(
+ changequote(<<,>>)dnl
+ <<extern char *sys_errlist[];>>,
+-<<printf(sys_errlist[0]);>>,
++<<printf("%s", sys_errlist[0]);>>,
+ changequote([,])dnl
+ [have_sys_errlist="yes"; AC_DEFINE(HAVE_SYS_ERRLIST)],
+ [have_sys_errlist="no"])
+diff --git a/alloc.h b/alloc.h
+new file mode 100644
+index 0000000..fa0d391
+--- /dev/null
++++ b/alloc.h
+@@ -0,0 +1,39 @@
++/*
++ * by Scarlett. public domain.
++ * replacements for w3m's allocation macros which add overflow
++ * detection and concentrate the macros in one file
++ */
++#ifndef W3_ALLOC_H
++#define W3_ALLOC_H
++#include <gc.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <limits.h>
++
++static inline size_t
++z_mult_no_oflow_(size_t n, size_t size)
++{
++ if (size != 0 && n > ULONG_MAX / size) {
++ fprintf(stderr,
++ "w3m: overflow in malloc, %lu*%lu\n", (unsigned long)n, (unsigned long)size);
++ exit(1);
++ }
++ return n * size;
++}
++
++#define New(type) \
++ (GC_MALLOC(sizeof(type)))
++
++#define NewAtom(type) \
++ (GC_MALLOC_ATOMIC(sizeof(type)))
++
++#define New_N(type, n) \
++ (GC_MALLOC(z_mult_no_oflow_((n), sizeof(type))))
++
++#define NewAtom_N(type, n) \
++ (GC_MALLOC_ATOMIC(z_mult_no_oflow_((n), sizeof(type))))
++
++#define New_Reuse(type, ptr, n) \
++ (GC_REALLOC((ptr), z_mult_no_oflow_((n), sizeof(type))))
++
++#endif /* W3_ALLOC_H */
+diff --git a/anchor.c b/anchor.c
+index 27bbd56..a353bb9 100644
+--- a/anchor.c
++++ b/anchor.c
+@@ -11,7 +11,7 @@ putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return,
+ {
+ int n, i, j;
+ Anchor *a;
+- BufferPoint bp;
++ BufferPoint bp = { 0 };
+ if (al == NULL) {
+ al = New(AnchorList);
+ al->anchors = NULL;
+@@ -200,10 +200,11 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos)
+ if (*(p2 - 1) == '>')
+ p2--;
+ }
+- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset,
+- buf->document_charset);
+- tmp = Sprintf("news:%s", file_quote(tmp->ptr));
+- return registerHref(buf, tmp->ptr, NULL, NO_REFERER, NULL, '\0', line,
++ tmp = Strnew_charp("news:");
++ Strcat_charp_n(tmp, p1, p2 - p1);
++ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf),
++ buf->document_charset),
++ NULL, NO_REFERER, NULL, '\0', line,
+ pos);
+ }
+ #endif /* USE_NNTP */
+@@ -213,9 +214,10 @@ _put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos)
+ {
+ Str tmp;
+
+- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset,
+- buf->document_charset);
+- return registerHref(buf, url_quote(tmp->ptr), NULL, NO_REFERER, NULL,
++ tmp = Strnew_charp_n(p1, p2 - p1);
++ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf),
++ buf->document_charset),
++ NULL, NO_REFERER, NULL,
+ '\0', line, pos);
+ }
+
+@@ -756,7 +758,7 @@ link_list_panel(Buffer *buf)
+ p = parsedURL2Str(&pu)->ptr;
+ u = html_quote(p);
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv(p, buf->document_charset));
++ p = html_quote(url_decode2(p, buf));
+ else
+ p = u;
+ }
+@@ -787,7 +789,7 @@ link_list_panel(Buffer *buf)
+ p = parsedURL2Str(&pu)->ptr;
+ u = html_quote(p);
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv(p, buf->document_charset));
++ p = html_quote(url_decode2(p, buf));
+ else
+ p = u;
+ t = getAnchorText(buf, al, a);
+@@ -809,16 +811,13 @@ link_list_panel(Buffer *buf)
+ p = parsedURL2Str(&pu)->ptr;
+ u = html_quote(p);
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv(p, buf->document_charset));
++ p = html_quote(url_decode2(p, buf));
+ else
+ p = u;
+ if (a->title && *a->title)
+ t = html_quote(a->title);
+- else if (DecodeURL)
+- t = html_quote(url_unquote_conv
+- (a->url, buf->document_charset));
+ else
+- t = html_quote(a->url);
++ t = html_quote(url_decode2(a->url, buf));
+ Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,
+ "\n", NULL);
+ a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos);
+@@ -842,19 +841,13 @@ link_list_panel(Buffer *buf)
+ p = parsedURL2Str(&pu)->ptr;
+ u = html_quote(p);
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv(p,
+- buf->
+- document_charset));
++ p = html_quote(url_decode2(p, buf));
+ else
+ p = u;
+ if (m->alt && *m->alt)
+ t = html_quote(m->alt);
+- else if (DecodeURL)
+- t = html_quote(url_unquote_conv(m->url,
+- buf->
+- document_charset));
+ else
+- t = html_quote(m->url);
++ t = html_quote(url_decode2(m->url, buf));
+ Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t,
+ "</a><br>", p, "\n", NULL);
+ }
+diff --git a/config.guess b/config.guess
+index 51fab47..1f5c50c 100755
+--- a/config.guess
++++ b/config.guess
+@@ -1,13 +1,12 @@
+ #! /bin/sh
+ # Attempt to guess a canonical system name.
+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++# Copyright 1992-2014 Free Software Foundation, Inc.
+
+-timestamp='2004-03-12'
++timestamp='2014-03-23'
+
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful, but
+@@ -16,24 +15,22 @@ timestamp='2004-03-12'
+ # General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
+-
+-# Originally written by Per Bothner <per@bothner.com>.
+-# Please send patches to <config-patches@gnu.org>. Submit a context
+-# diff and a properly formatted ChangeLog entry.
++# the same distribution terms that you use for the rest of that
++# program. This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
++#
++# Originally written by Per Bothner.
+ #
+-# This script attempts to guess a canonical system name similar to
+-# config.sub. If it succeeds, it prints the system name on stdout, and
+-# exits with 0. Otherwise, it exits with 1.
++# You can get the latest version of this script from:
++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+ #
+-# The plan is that this can be called by configure scripts if you
+-# don't specify an explicit build system type.
++# Please send patches with a ChangeLog entry to config-patches@gnu.org.
++
+
+ me=`echo "$0" | sed -e 's,.*/,,'`
+
+@@ -53,8 +50,7 @@ version="\
+ GNU config.guess ($timestamp)
+
+ Originally written by Per Bothner.
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+-Free Software Foundation, Inc.
++Copyright 1992-2014 Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -66,11 +62,11 @@ Try \`$me --help' for more information."
+ while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+- echo "$timestamp" ; exit 0 ;;
++ echo "$timestamp" ; exit ;;
+ --version | -v )
+- echo "$version" ; exit 0 ;;
++ echo "$version" ; exit ;;
+ --help | --h* | -h )
+- echo "$usage"; exit 0 ;;
++ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+@@ -104,7 +100,7 @@ set_cc_for_build='
+ trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+ trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+ : ${TMPDIR=/tmp} ;
+- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
++ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+@@ -123,7 +119,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+-esac ;'
++esac ; set_cc_for_build= ;'
+
+ # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+ # (ghazi@noc.rutgers.edu 1994-08-24)
+@@ -136,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
++case "${UNAME_SYSTEM}" in
++Linux|GNU|GNU/*)
++ # If the system lacks a compiler, then just pick glibc.
++ # We could probably try harder.
++ LIBC=gnu
++
++ eval $set_cc_for_build
++ cat <<-EOF > $dummy.c
++ #include <features.h>
++ #if defined(__UCLIBC__)
++ LIBC=uclibc
++ #elif defined(__dietlibc__)
++ LIBC=dietlibc
++ #else
++ LIBC=gnu
++ #endif
++ EOF
++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
++ ;;
++esac
++
+ # Note: order is significant - the case branches are not exclusive.
+
+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+@@ -158,6 +175,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
++ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+@@ -166,7 +184,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+- | grep __ELF__ >/dev/null
++ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+@@ -176,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ fi
+ ;;
+ *)
+- os=netbsd
++ os=netbsd
+ ;;
+ esac
+ # The OS release
+@@ -196,71 +214,34 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+- exit 0 ;;
+- amd64:OpenBSD:*:*)
+- echo x86_64-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- amiga:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- arc:OpenBSD:*:*)
+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- cats:OpenBSD:*:*)
+- echo arm-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- hp300:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- mac68k:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- macppc:OpenBSD:*:*)
+- echo powerpc-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- mvme68k:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- mvme88k:OpenBSD:*:*)
+- echo m88k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- mvmeppc:OpenBSD:*:*)
+- echo powerpc-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- pegasos:OpenBSD:*:*)
+- echo powerpc-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- pmax:OpenBSD:*:*)
+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- sgi:OpenBSD:*:*)
+- echo mipseb-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- sun3:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- wgrisc:OpenBSD:*:*)
+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
++ *:Bitrig:*:*)
++ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
++ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
++ exit ;;
+ *:OpenBSD:*:*)
+- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
++ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
++ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
++ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
++ *:SolidBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
++ exit ;;
+ macppc:MirBSD:*:*)
+- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+- exit 0 ;;
++ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
++ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+@@ -306,40 +287,46 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+- exit 0 ;;
+- Alpha*:OpenVMS:*:*)
+- echo alpha-hp-vms
+- exit 0 ;;
++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
++ exitcode=$?
++ trap '' 0
++ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+- exit 0 ;;
++ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+- exit 0 ;;
++ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+- exit 0;;
++ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+- exit 0 ;;
++ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+- exit 0 ;;
++ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+- exit 0 ;;
++ exit ;;
++ *:z/VM:*:*)
++ echo s390-ibm-zvmoe
++ exit ;;
+ *:OS400:*:*)
+- echo powerpc-ibm-os400
+- exit 0 ;;
++ echo powerpc-ibm-os400
++ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+- exit 0;;
++ exit ;;
++ arm*:riscos:*:*|arm*:RISCOS:*:*)
++ echo arm-unknown-riscos
++ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+- exit 0;;
++ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+@@ -347,32 +334,51 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ else
+ echo pyramid-pyramid-bsd
+ fi
+- exit 0 ;;
++ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+- exit 0 ;;
++ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+- exit 0 ;;
+- DRS?6000:UNIX_SV:4.2*:7*)
++ exit ;;
++ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+- sparc) echo sparc-icl-nx7 && exit 0 ;;
++ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
++ s390x:SunOS:*:*)
++ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
++ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
+- i86pc:SunOS:5.*:*)
+- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
++ exit ;;
++ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
++ echo i386-pc-auroraux${UNAME_RELEASE}
++ exit ;;
++ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
++ eval $set_cc_for_build
++ SUN_ARCH="i386"
++ # If there is a compiler, see if it is configured for 64-bit objects.
++ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
++ # This test works for both compilers.
++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
++ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
++ grep IS_64BIT_ARCH >/dev/null
++ then
++ SUN_ARCH="x86_64"
++ fi
++ fi
++ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
++ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+@@ -381,10 +387,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+- exit 0 ;;
++ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+@@ -396,10 +402,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+- exit 0 ;;
++ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+@@ -409,41 +415,41 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+- echo m68k-atari-mint${UNAME_RELEASE}
+- exit 0 ;;
++ echo m68k-atari-mint${UNAME_RELEASE}
++ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+- echo m68k-atari-mint${UNAME_RELEASE}
+- exit 0 ;;
++ echo m68k-atari-mint${UNAME_RELEASE}
++ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+- echo m68k-milan-mint${UNAME_RELEASE}
+- exit 0 ;;
++ echo m68k-milan-mint${UNAME_RELEASE}
++ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+- echo m68k-hades-mint${UNAME_RELEASE}
+- exit 0 ;;
++ echo m68k-hades-mint${UNAME_RELEASE}
++ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+- echo m68k-unknown-mint${UNAME_RELEASE}
+- exit 0 ;;
++ echo m68k-unknown-mint${UNAME_RELEASE}
++ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+- exit 0 ;;
++ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+@@ -467,35 +473,36 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ exit (-1);
+ }
+ EOF
+- $CC_FOR_BUILD -o $dummy $dummy.c \
+- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+- && exit 0
++ $CC_FOR_BUILD -o $dummy $dummy.c &&
++ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
++ SYSTEM_NAME=`$dummy $dummyarg` &&
++ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+- exit 0 ;;
++ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+- exit 0 ;;
++ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+- exit 0 ;;
++ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+- exit 0 ;;
++ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+- exit 0 ;;
++ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+- exit 0 ;;
++ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+- exit 0 ;;
++ exit ;;
+ AViiON:dgux:*:*)
+- # DG/UX returns AViiON for all architectures
+- UNAME_PROCESSOR=`/usr/bin/uname -p`
++ # DG/UX returns AViiON for all architectures
++ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+@@ -508,29 +515,29 @@ EOF
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+- exit 0 ;;
++ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+- exit 0 ;;
++ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+- exit 0 ;;
++ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+- exit 0 ;;
++ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+- exit 0 ;;
++ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+- exit 0 ;;
++ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
++ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
++ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+- exit 0 ;;
++ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+@@ -538,7 +545,7 @@ EOF
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+- exit 0 ;;
++ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+@@ -553,15 +560,19 @@ EOF
+ exit(0);
+ }
+ EOF
+- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+- echo rs6000-ibm-aix3.2.5
++ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
++ then
++ echo "$SYSTEM_NAME"
++ else
++ echo rs6000-ibm-aix3.2.5
++ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+- exit 0 ;;
+- *:AIX:*:[45])
++ exit ;;
++ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+@@ -574,28 +585,28 @@ EOF
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+- exit 0 ;;
++ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+- exit 0 ;;
++ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+- exit 0 ;;
++ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+- exit 0 ;; # report: romp-ibm BSD 4.3
++ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+- exit 0 ;;
++ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+- exit 0 ;;
++ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+- exit 0 ;;
++ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+- exit 0 ;;
++ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+@@ -604,52 +615,52 @@ EOF
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+- case "${sc_cpu_version}" in
+- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+- 532) # CPU_PA_RISC2_0
+- case "${sc_kernel_bits}" in
+- 32) HP_ARCH="hppa2.0n" ;;
+- 64) HP_ARCH="hppa2.0w" ;;
++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
++ case "${sc_cpu_version}" in
++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
++ 532) # CPU_PA_RISC2_0
++ case "${sc_kernel_bits}" in
++ 32) HP_ARCH="hppa2.0n" ;;
++ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+- esac ;;
+- esac
++ esac ;;
++ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+- sed 's/^ //' << EOF >$dummy.c
++ sed 's/^ //' << EOF >$dummy.c
+
+- #define _HPUX_SOURCE
+- #include <stdlib.h>
+- #include <unistd.h>
++ #define _HPUX_SOURCE
++ #include <stdlib.h>
++ #include <unistd.h>
+
+- int main ()
+- {
+- #if defined(_SC_KERNEL_BITS)
+- long bits = sysconf(_SC_KERNEL_BITS);
+- #endif
+- long cpu = sysconf (_SC_CPU_VERSION);
++ int main ()
++ {
++ #if defined(_SC_KERNEL_BITS)
++ long bits = sysconf(_SC_KERNEL_BITS);
++ #endif
++ long cpu = sysconf (_SC_CPU_VERSION);
+
+- switch (cpu)
+- {
+- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+- case CPU_PA_RISC2_0:
+- #if defined(_SC_KERNEL_BITS)
+- switch (bits)
+- {
+- case 64: puts ("hppa2.0w"); break;
+- case 32: puts ("hppa2.0n"); break;
+- default: puts ("hppa2.0"); break;
+- } break;
+- #else /* !defined(_SC_KERNEL_BITS) */
+- puts ("hppa2.0"); break;
+- #endif
+- default: puts ("hppa1.0"); break;
+- }
+- exit (0);
+- }
++ switch (cpu)
++ {
++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
++ case CPU_PA_RISC2_0:
++ #if defined(_SC_KERNEL_BITS)
++ switch (bits)
++ {
++ case 64: puts ("hppa2.0w"); break;
++ case 32: puts ("hppa2.0n"); break;
++ default: puts ("hppa2.0"); break;
++ } break;
++ #else /* !defined(_SC_KERNEL_BITS) */
++ puts ("hppa2.0"); break;
++ #endif
++ default: puts ("hppa1.0"); break;
++ }
++ exit (0);
++ }
+ EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+@@ -657,9 +668,19 @@ EOF
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+- # avoid double evaluation of $set_cc_for_build
+- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
++ eval $set_cc_for_build
++
++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
++ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
++ # generating 64-bit code. GNU and HP use different nomenclature:
++ #
++ # $ CC_FOR_BUILD=cc ./config.guess
++ # => hppa2.0w-hp-hpux11.23
++ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
++ # => hppa64-hp-hpux11.23
++
++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
++ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+@@ -667,11 +688,11 @@ EOF
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+- exit 0 ;;
++ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+- exit 0 ;;
++ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+@@ -699,340 +720,345 @@ EOF
+ exit (0);
+ }
+ EOF
+- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
++ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
++ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+- exit 0 ;;
++ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+- exit 0 ;;
++ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+- exit 0 ;;
++ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+- exit 0 ;;
++ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+- exit 0 ;;
++ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+- exit 0 ;;
++ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+- exit 0 ;;
++ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+- exit 0 ;;
++ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+- exit 0 ;;
++ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+- exit 0 ;;
++ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+- exit 0 ;;
++ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+- exit 0 ;;
++ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+- exit 0 ;;
++ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
++ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
++ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
++ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
++ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
++ exit ;;
+ *:UNICOS/mp:*:*)
+- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
++ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+- exit 0 ;;
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+- exit 0 ;;
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *:FreeBSD:*:*)
+- # Determine whether the default compiler uses glibc.
+- eval $set_cc_for_build
+- sed 's/^ //' << EOF >$dummy.c
+- #include <features.h>
+- #if __GLIBC__ >= 2
+- LIBC=gnu
+- #else
+- LIBC=
+- #endif
+-EOF
+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+- # GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+- # FreeBSD's kernel, but not the complete OS.
+- case ${LIBC} in gnu) kernel_only='k' ;; esac
+- echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+- exit 0 ;;
++ UNAME_PROCESSOR=`/usr/bin/uname -p`
++ case ${UNAME_PROCESSOR} in
++ amd64)
++ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ *)
++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ esac
++ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+- exit 0 ;;
+- i*:MINGW*:*)
++ exit ;;
++ *:MINGW64*:*)
++ echo ${UNAME_MACHINE}-pc-mingw64
++ exit ;;
++ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+- exit 0 ;;
++ exit ;;
++ *:MSYS*:*)
++ echo ${UNAME_MACHINE}-pc-msys
++ exit ;;
++ i*:windows32*:*)
++ # uname -m includes "-pc" on this system.
++ echo ${UNAME_MACHINE}-mingw32
++ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+- exit 0 ;;
+- x86:Interix*:[34]*)
+- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+- exit 0 ;;
++ exit ;;
++ *:Interix*:*)
++ case ${UNAME_MACHINE} in
++ x86)
++ echo i586-pc-interix${UNAME_RELEASE}
++ exit ;;
++ authenticamd | genuineintel | EM64T)
++ echo x86_64-unknown-interix${UNAME_RELEASE}
++ exit ;;
++ IA64)
++ echo ia64-unknown-interix${UNAME_RELEASE}
++ exit ;;
++ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+- exit 0 ;;
++ exit ;;
++ 8664:Windows_NT:*)
++ echo x86_64-pc-mks
++ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+- exit 0 ;;
++ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+- exit 0 ;;
++ exit ;;
++ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
++ echo x86_64-unknown-cygwin
++ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+- exit 0 ;;
++ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
++ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+- exit 0 ;;
++ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
++ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+- exit 0 ;;
++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
++ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+- exit 0 ;;
++ exit ;;
++ aarch64:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ aarch64_be:Linux:*:*)
++ UNAME_MACHINE=aarch64_be
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ alpha:Linux:*:*)
++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
++ EV5) UNAME_MACHINE=alphaev5 ;;
++ EV56) UNAME_MACHINE=alphaev56 ;;
++ PCA56) UNAME_MACHINE=alphapca56 ;;
++ PCA57) UNAME_MACHINE=alphapca56 ;;
++ EV6) UNAME_MACHINE=alphaev6 ;;
++ EV67) UNAME_MACHINE=alphaev67 ;;
++ EV68*) UNAME_MACHINE=alphaev68 ;;
++ esac
++ objdump --private-headers /bin/sh | grep -q ld.so.1
++ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ arc:Linux:*:* | arceb:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
+ arm*:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
++ eval $set_cc_for_build
++ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
++ | grep -q __ARM_EABI__
++ then
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ else
++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
++ | grep -q __ARM_PCS_VFP
++ then
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
++ else
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
++ fi
++ fi
++ exit ;;
++ avr32*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
+ cris:Linux:*:*)
+- echo cris-axis-linux-gnu
+- exit 0 ;;
++ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
++ exit ;;
++ crisv32:Linux:*:*)
++ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
++ exit ;;
++ frv:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ hexagon:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ i*86:Linux:*:*)
++ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
++ exit ;;
+ ia64:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
+ m32r*:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
+ m68*:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
+- mips:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+- #undef mips
+- #undef mipsel
++ #undef ${UNAME_MACHINE}
++ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+- CPU=mipsel
++ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+- CPU=mips
++ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+ EOF
+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ ;;
+- mips64:Linux:*:*)
+- eval $set_cc_for_build
+- sed 's/^ //' << EOF >$dummy.c
+- #undef CPU
+- #undef mips64
+- #undef mips64el
+- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+- CPU=mips64el
+- #else
+- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+- CPU=mips64
+- #else
+- CPU=
+- #endif
+- #endif
+-EOF
+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+- ;;
+- ppc:Linux:*:*)
+- echo powerpc-unknown-linux-gnu
+- exit 0 ;;
+- ppc64:Linux:*:*)
+- echo powerpc64-unknown-linux-gnu
+- exit 0 ;;
+- alpha:Linux:*:*)
+- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+- EV5) UNAME_MACHINE=alphaev5 ;;
+- EV56) UNAME_MACHINE=alphaev56 ;;
+- PCA56) UNAME_MACHINE=alphapca56 ;;
+- PCA57) UNAME_MACHINE=alphapca56 ;;
+- EV6) UNAME_MACHINE=alphaev6 ;;
+- EV67) UNAME_MACHINE=alphaev67 ;;
+- EV68*) UNAME_MACHINE=alphaev68 ;;
+- esac
+- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+- exit 0 ;;
++ openrisc*:Linux:*:*)
++ echo or1k-unknown-linux-${LIBC}
++ exit ;;
++ or32:Linux:*:* | or1k*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ padre:Linux:*:*)
++ echo sparc-unknown-linux-${LIBC}
++ exit ;;
++ parisc64:Linux:*:* | hppa64:Linux:*:*)
++ echo hppa64-unknown-linux-${LIBC}
++ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+- PA7*) echo hppa1.1-unknown-linux-gnu ;;
+- PA8*) echo hppa2.0-unknown-linux-gnu ;;
+- *) echo hppa-unknown-linux-gnu ;;
++ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
++ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
++ *) echo hppa-unknown-linux-${LIBC} ;;
+ esac
+- exit 0 ;;
+- parisc64:Linux:*:* | hppa64:Linux:*:*)
+- echo hppa64-unknown-linux-gnu
+- exit 0 ;;
++ exit ;;
++ ppc64:Linux:*:*)
++ echo powerpc64-unknown-linux-${LIBC}
++ exit ;;
++ ppc:Linux:*:*)
++ echo powerpc-unknown-linux-${LIBC}
++ exit ;;
++ ppc64le:Linux:*:*)
++ echo powerpc64le-unknown-linux-${LIBC}
++ exit ;;
++ ppcle:Linux:*:*)
++ echo powerpcle-unknown-linux-${LIBC}
++ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+- echo ${UNAME_MACHINE}-ibm-linux
+- exit 0 ;;
++ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
++ exit ;;
+ sh64*:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
+ sh*:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ tile*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ vax:Linux:*:*)
++ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
++ exit ;;
+ x86_64:Linux:*:*)
+- echo x86_64-unknown-linux-gnu
+- exit 0 ;;
+- i*86:Linux:*:*)
+- # The BFD linker knows what the default object file format is, so
+- # first see if it will tell us. cd to the root directory to prevent
+- # problems with other programs or directories called `ld' in the path.
+- # Set LC_ALL=C to ensure ld outputs messages in English.
+- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+- | sed -ne '/supported targets:/!d
+- s/[ ][ ]*/ /g
+- s/.*supported targets: *//
+- s/ .*//
+- p'`
+- case "$ld_supported_targets" in
+- elf32-i386)
+- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+- ;;
+- a.out-i386-linux)
+- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+- exit 0 ;;
+- coff-i386)
+- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+- exit 0 ;;
+- "")
+- # Either a pre-BFD a.out linker (linux-gnuoldld) or
+- # one that does not give us useful --help.
+- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+- exit 0 ;;
+- esac
+- # Determine whether the default compiler is a.out or elf
+- eval $set_cc_for_build
+- sed 's/^ //' << EOF >$dummy.c
+- #include <features.h>
+- #ifdef __ELF__
+- # ifdef __GLIBC__
+- # if __GLIBC__ >= 2
+- LIBC=gnu
+- # else
+- LIBC=gnulibc1
+- # endif
+- # else
+- LIBC=gnulibc1
+- # endif
+- #else
+- #ifdef __INTEL_COMPILER
+- LIBC=gnu
+- #else
+- LIBC=gnuaout
+- #endif
+- #endif
+- #ifdef __dietlibc__
+- LIBC=dietlibc
+- #endif
+-EOF
+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+- ;;
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
++ xtensa*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+- exit 0 ;;
++ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+- # Unixware is an offshoot of SVR4, but it has its own version
+- # number series starting with 2...
+- # I am not positive that other SVR4 systems won't match this,
++ # Unixware is an offshoot of SVR4, but it has its own version
++ # number series starting with 2...
++ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+- # Use sysv4.2uw... so that sysv4* matches it.
++ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+- exit 0 ;;
++ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+- exit 0 ;;
++ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+- exit 0 ;;
++ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+- exit 0 ;;
+- i*86:syllable:*:*)
++ exit ;;
++ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+- exit 0 ;;
+- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
++ exit ;;
++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+- exit 0 ;;
++ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+@@ -1040,15 +1066,16 @@ EOF
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+- exit 0 ;;
+- i*86:*:5:[78]*)
++ exit ;;
++ i*86:*:5:[678]*)
++ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+- exit 0 ;;
++ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+@@ -1066,73 +1093,86 @@ EOF
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+- exit 0 ;;
++ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+- # uname -m prints for DJGPP always 'pc', but it prints nothing about
+- # the processor, so we play safe by assuming i386.
+- echo i386-pc-msdosdjgpp
+- exit 0 ;;
++ # uname -m prints for DJGPP always 'pc', but it prints nothing about
++ # the processor, so we play safe by assuming i586.
++ # Note: whatever this is, it MUST be the same as what config.sub
++ # prints for the "djgpp" host, or else GDB configury will decide that
++ # this is a cross-build.
++ echo i586-pc-msdosdjgpp
++ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+- exit 0 ;;
++ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+- exit 0 ;;
++ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+- exit 0 ;;
++ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+- exit 0 ;;
++ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+- exit 0 ;;
++ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+- exit 0 ;;
+- M68*:*:R3V[567]*:*)
+- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
++ exit ;;
++ M68*:*:R3V[5678]*:*)
++ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
++ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+- && echo i486-ncr-sysv4 && exit 0 ;;
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4; exit; } ;;
++ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
++ OS_REL='.3'
++ test -r /etc/.relid \
++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
++ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+- exit 0 ;;
++ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
+- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
++ exit ;;
++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+- exit 0 ;;
++ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+- exit 0 ;;
++ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+@@ -1140,68 +1180,109 @@ EOF
+ else
+ echo ns32k-sni-sysv
+ fi
+- exit 0 ;;
+- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+- # says <Richard.M.Bartel@ccMail.Census.GOV>
+- echo i586-unisys-sysv4
+- exit 0 ;;
++ exit ;;
++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
++ # says <Richard.M.Bartel@ccMail.Census.GOV>
++ echo i586-unisys-sysv4
++ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+- exit 0 ;;
++ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+- exit 0 ;;
++ exit ;;
++ i*86:VOS:*:*)
++ # From Paul.Green@stratus.com.
++ echo ${UNAME_MACHINE}-stratus-vos
++ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+- exit 0 ;;
++ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+- exit 0 ;;
++ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+- echo mips-nec-sysv${UNAME_RELEASE}
++ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+- echo mips-unknown-sysv${UNAME_RELEASE}
++ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+- exit 0 ;;
++ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+- exit 0 ;;
++ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+- exit 0 ;;
++ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+- exit 0 ;;
++ exit ;;
++ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
++ echo i586-pc-haiku
++ exit ;;
++ x86_64:Haiku:*:*)
++ echo x86_64-unknown-haiku
++ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
++ SX-7:SUPER-UX:*:*)
++ echo sx7-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-8:SUPER-UX:*:*)
++ echo sx8-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-8R:SUPER-UX:*:*)
++ echo sx8r-nec-superux${UNAME_RELEASE}
++ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *:Darwin:*:*)
+- case `uname -p` in
+- *86) UNAME_PROCESSOR=i686 ;;
+- powerpc) UNAME_PROCESSOR=powerpc ;;
+- esac
++ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
++ eval $set_cc_for_build
++ if test "$UNAME_PROCESSOR" = unknown ; then
++ UNAME_PROCESSOR=powerpc
++ fi
++ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
++ grep IS_64BIT_ARCH >/dev/null
++ then
++ case $UNAME_PROCESSOR in
++ i386) UNAME_PROCESSOR=x86_64 ;;
++ powerpc) UNAME_PROCESSOR=powerpc64 ;;
++ esac
++ fi
++ fi
++ elif test "$UNAME_PROCESSOR" = i386 ; then
++ # Avoid executing cc on OS X 10.9, as it ships with a stub
++ # that puts up a graphical alert prompting to install
++ # developer tools. Any system running Mac OS X 10.7 or
++ # later (Darwin 11 and later) is required to have a 64-bit
++ # processor. This is not true of the ARM version of Darwin
++ # that Apple uses in portable devices.
++ UNAME_PROCESSOR=x86_64
++ fi
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+@@ -1209,22 +1290,28 @@ EOF
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+- exit 0 ;;
++ exit ;;
++ NEO-?:NONSTOP_KERNEL:*:*)
++ echo neo-tandem-nsk${UNAME_RELEASE}
++ exit ;;
++ NSE-*:NONSTOP_KERNEL:*:*)
++ echo nse-tandem-nsk${UNAME_RELEASE}
++ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+- exit 0 ;;
++ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+- exit 0 ;;
++ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+- exit 0 ;;
++ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+@@ -1235,183 +1322,55 @@ EOF
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+- exit 0 ;;
++ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+- exit 0 ;;
++ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+- exit 0 ;;
++ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+- exit 0 ;;
++ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+- exit 0 ;;
++ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+- exit 0 ;;
++ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+- exit 0 ;;
++ exit ;;
+ SEI:*:*:SEIUX)
+- echo mips-sei-seiux${UNAME_RELEASE}
+- exit 0 ;;
++ echo mips-sei-seiux${UNAME_RELEASE}
++ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+- exit 0 ;;
++ exit ;;
++ *:*VMS:*:*)
++ UNAME_MACHINE=`(uname -p) 2>/dev/null`
++ case "${UNAME_MACHINE}" in
++ A*) echo alpha-dec-vms ; exit ;;
++ I*) echo ia64-dec-vms ; exit ;;
++ V*) echo vax-dec-vms ; exit ;;
++ esac ;;
++ *:XENIX:*:SysV)
++ echo i386-pc-xenix
++ exit ;;
++ i*86:skyos:*:*)
++ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
++ exit ;;
++ i*86:rdos:*:*)
++ echo ${UNAME_MACHINE}-pc-rdos
++ exit ;;
++ i*86:AROS:*:*)
++ echo ${UNAME_MACHINE}-pc-aros
++ exit ;;
++ x86_64:VMkernel:*:*)
++ echo ${UNAME_MACHINE}-unknown-esx
++ exit ;;
+ esac
+
+-#echo '(No uname command or uname output not recognized.)' 1>&2
+-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+-
+-eval $set_cc_for_build
+-cat >$dummy.c <<EOF
+-#ifdef _SEQUENT_
+-# include <sys/types.h>
+-# include <sys/utsname.h>
+-#endif
+-main ()
+-{
+-#if defined (sony)
+-#if defined (MIPSEB)
+- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+- I don't know.... */
+- printf ("mips-sony-bsd\n"); exit (0);
+-#else
+-#include <sys/param.h>
+- printf ("m68k-sony-newsos%s\n",
+-#ifdef NEWSOS4
+- "4"
+-#else
+- ""
+-#endif
+- ); exit (0);
+-#endif
+-#endif
+-
+-#if defined (__arm) && defined (__acorn) && defined (__unix)
+- printf ("arm-acorn-riscix"); exit (0);
+-#endif
+-
+-#if defined (hp300) && !defined (hpux)
+- printf ("m68k-hp-bsd\n"); exit (0);
+-#endif
+-
+-#if defined (NeXT)
+-#if !defined (__ARCHITECTURE__)
+-#define __ARCHITECTURE__ "m68k"
+-#endif
+- int version;
+- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+- if (version < 4)
+- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+- else
+- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+- exit (0);
+-#endif
+-
+-#if defined (MULTIMAX) || defined (n16)
+-#if defined (UMAXV)
+- printf ("ns32k-encore-sysv\n"); exit (0);
+-#else
+-#if defined (CMU)
+- printf ("ns32k-encore-mach\n"); exit (0);
+-#else
+- printf ("ns32k-encore-bsd\n"); exit (0);
+-#endif
+-#endif
+-#endif
+-
+-#if defined (__386BSD__)
+- printf ("i386-pc-bsd\n"); exit (0);
+-#endif
+-
+-#if defined (sequent)
+-#if defined (i386)
+- printf ("i386-sequent-dynix\n"); exit (0);
+-#endif
+-#if defined (ns32000)
+- printf ("ns32k-sequent-dynix\n"); exit (0);
+-#endif
+-#endif
+-
+-#if defined (_SEQUENT_)
+- struct utsname un;
+-
+- uname(&un);
+-
+- if (strncmp(un.version, "V2", 2) == 0) {
+- printf ("i386-sequent-ptx2\n"); exit (0);
+- }
+- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+- printf ("i386-sequent-ptx1\n"); exit (0);
+- }
+- printf ("i386-sequent-ptx\n"); exit (0);
+-
+-#endif
+-
+-#if defined (vax)
+-# if !defined (ultrix)
+-# include <sys/param.h>
+-# if defined (BSD)
+-# if BSD == 43
+- printf ("vax-dec-bsd4.3\n"); exit (0);
+-# else
+-# if BSD == 199006
+- printf ("vax-dec-bsd4.3reno\n"); exit (0);
+-# else
+- printf ("vax-dec-bsd\n"); exit (0);
+-# endif
+-# endif
+-# else
+- printf ("vax-dec-bsd\n"); exit (0);
+-# endif
+-# else
+- printf ("vax-dec-ultrix\n"); exit (0);
+-# endif
+-#endif
+-
+-#if defined (alliant) && defined (i860)
+- printf ("i860-alliant-bsd\n"); exit (0);
+-#endif
+-
+- exit (1);
+-}
+-EOF
+-
+-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+-
+-# Apollos put the system type in the environment.
+-
+-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+-
+-# Convex versions that predate uname can use getsysinfo(1)
+-
+-if [ -x /usr/convex/getsysinfo ]
+-then
+- case `getsysinfo -f cpu_type` in
+- c1*)
+- echo c1-convex-bsd
+- exit 0 ;;
+- c2*)
+- if getsysinfo -f scalar_acc
+- then echo c32-convex-bsd
+- else echo c2-convex-bsd
+- fi
+- exit 0 ;;
+- c34*)
+- echo c34-convex-bsd
+- exit 0 ;;
+- c38*)
+- echo c38-convex-bsd
+- exit 0 ;;
+- c4*)
+- echo c4-convex-bsd
+- exit 0 ;;
+- esac
+-fi
+-
+ cat >&2 <<EOF
+ $0: unable to guess system type
+
+@@ -1419,7 +1378,9 @@ This script, last modified $timestamp, has failed to recognize
+ the operating system you are using. It is advised that you
+ download the most up to date version of the config scripts from
+
+- ftp://ftp.gnu.org/pub/gnu/config/
++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++and
++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+ If the version you run ($0) is already up to date, please
+ send the following data and any information you think might be
+diff --git a/config.h.in b/config.h.in
+index 2f41eed..3b575e4 100644
+--- a/config.h.in
++++ b/config.h.in
+@@ -25,6 +25,7 @@
+
+ #define PASSWD_FILE RC_DIR "/passwd"
+ #define PRE_FORM_FILE RC_DIR "/pre_form"
++#define SITECONF_FILE RC_DIR "/siteconf"
+ #define USER_MAILCAP RC_DIR "/mailcap"
+ #define SYS_MAILCAP CONF_DIR "/mailcap"
+ #define USER_MIMETYPES "~/.mime.types"
+@@ -84,7 +85,7 @@
+ #undef INET6
+ #undef HAVE_SOCKLEN_T
+ #undef HAVE_OLD_SS_FAMILY
+-#define USE_EGD
++#undef USE_EGD
+ #define ENABLE_REMOVE_TRAILINGSPACES
+ #undef MENU_THIN_FRAME
+ #undef USE_RAW_SCROLL
+@@ -209,6 +210,10 @@ typedef RETSIGTYPE MySignalHandler;
+ #define SUPPORT_WIN9X_CONSOLE_MBCS 1
+ #endif
+
++#if defined(__CYGWIN__) && defined(__x86_64__)
++#define DONT_CALL_GC_AFTER_FORK
++#endif
++
+ #if defined(__DJGPP__)
+ #define DEFAULT_TERM "dosansi"
+ #else
+diff --git a/config.sub b/config.sub
+index ba33103..bba4efb 100755
+--- a/config.sub
++++ b/config.sub
+@@ -1,42 +1,40 @@
+ #! /bin/sh
+ # Configuration validation subroutine script.
+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++# Copyright 1992-2014 Free Software Foundation, Inc.
+
+-timestamp='2004-03-12'
++timestamp='2014-09-11'
+
+-# This file is (in principle) common to ALL GNU software.
+-# The presence of a machine in this file suggests that SOME GNU software
+-# can handle that machine. It does not imply ALL GNU software can.
+-#
+-# This file is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 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.
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330,
+-# Boston, MA 02111-1307, USA.
+-
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
++#
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
++# the same distribution terms that you use for the rest of that
++# program. This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+
+-# Please send patches to <config-patches@gnu.org>. Submit a context
+-# diff and a properly formatted ChangeLog entry.
++
++# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+ #
+ # Configuration subroutine to validate and canonicalize a configuration type.
+ # Supply the specified configuration type as an argument.
+ # If it is invalid, we print an error message on stderr and exit with code 1.
+ # Otherwise, we print the canonical config type on stdout and succeed.
+
++# You can get the latest version of this script from:
++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
++
+ # This file is supposed to be the same for all GNU packages
+ # and recognize all the CPU types, system types and aliases
+ # that are meaningful with *any* GNU software.
+@@ -70,8 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
+ version="\
+ GNU config.sub ($timestamp)
+
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+-Free Software Foundation, Inc.
++Copyright 1992-2014 Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -83,11 +80,11 @@ Try \`$me --help' for more information."
+ while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+- echo "$timestamp" ; exit 0 ;;
++ echo "$timestamp" ; exit ;;
+ --version | -v )
+- echo "$version" ; exit 0 ;;
++ echo "$version" ; exit ;;
+ --help | --h* | -h )
+- echo "$usage"; exit 0 ;;
++ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+@@ -99,7 +96,7 @@ while test $# -gt 0 ; do
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+- exit 0;;
++ exit ;;
+
+ * )
+ break ;;
+@@ -118,11 +115,18 @@ esac
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
++ knetbsd*-gnu* | netbsd*-gnu* | \
++ kopensolaris*-gnu* | \
++ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
++ android-linux)
++ os=-linux-android
++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
++ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+@@ -145,10 +149,13 @@ case $os in
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+- -apple | -axis)
++ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
++ -bluegene*)
++ os=-cnk
++ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+@@ -163,13 +170,17 @@ case $os in
+ os=-chorusos
+ basic_machine=$1
+ ;;
+- -chorusrdb)
+- os=-chorusrdb
++ -chorusrdb)
++ os=-chorusrdb
+ basic_machine=$1
+- ;;
++ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
++ -sco6)
++ os=-sco5v6
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+@@ -186,6 +197,10 @@ case $os in
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
++ -sco5v6*)
++ # Don't forget version if it is 3.2v4 or newer.
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+@@ -203,6 +218,12 @@ case $os in
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
++ -lynx*178)
++ os=-lynxos178
++ ;;
++ -lynx*5)
++ os=-lynxos5
++ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+@@ -227,57 +248,109 @@ case $basic_machine in
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
++ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+- | c4x | clipper \
++ | arc | arceb \
++ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
++ | avr | avr32 \
++ | be32 | be64 \
++ | bfin \
++ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+- | fr30 | frv \
++ | epiphany \
++ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
++ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+- | m32r | m32rle | m68000 | m68k | m88k | mcore \
++ | k1om \
++ | le32 | le64 \
++ | lm32 \
++ | m32c | m32r | m32rle | m68000 | m68k | m88k \
++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+- | mips64vr | mips64vrel \
++ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
++ | mips64r5900 | mips64r5900el \
++ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
++ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
++ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
++ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
++ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
++ | moxie \
++ | mt \
+ | msp430 \
++ | nds32 | nds32le | nds32be \
++ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+- | openrisc | or32 \
++ | open8 | or1k | or1knd | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
++ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
++ | riscv32 | riscv64 \
++ | rl78 | rx \
++ | score \
++ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+- | strongarm \
+- | tahoe | thumb | tic4x | tic80 | tron \
+- | v850 | v850e \
++ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
++ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
++ | spu \
++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
++ | ubicom32 \
++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | we32k \
+- | x86 | xscale | xstormy16 | xtensa \
+- | z8k)
++ | x86 | xc16x | xstormy16 | xtensa \
++ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+- m6811 | m68hc11 | m6812 | m68hc12)
+- # Motorola 68HC11/12.
++ c54x)
++ basic_machine=tic54x-unknown
++ ;;
++ c55x)
++ basic_machine=tic55x-unknown
++ ;;
++ c6x)
++ basic_machine=tic6x-unknown
++ ;;
++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
++ ms1)
++ basic_machine=mt-unknown
++ ;;
++
++ strongarm | thumb | xscale)
++ basic_machine=arm-unknown
++ ;;
++ xgate)
++ basic_machine=$basic_machine-unknown
++ os=-none
++ ;;
++ xscaleeb)
++ basic_machine=armeb-unknown
++ ;;
++
++ xscaleel)
++ basic_machine=armel-unknown
++ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+@@ -293,59 +366,86 @@ case $basic_machine in
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
++ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+- | avr-* \
+- | bs2000-* \
+- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+- | clipper-* | cydra-* \
++ | avr-* | avr32-* \
++ | be32-* | be64-* \
++ | bfin-* | bs2000-* \
++ | c[123]* | c30-* | [cjt]90-* | c4x-* \
++ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
++ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
++ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+- | m32r-* | m32rle-* \
++ | k1om-* \
++ | le32-* | le64-* \
++ | lm32-* \
++ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+- | m88110-* | m88k-* | mcore-* \
++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
++ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+- | mips64vr-* | mips64vrel-* \
++ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
++ | mips64r5900-* | mips64r5900el-* \
++ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
++ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
++ | mipsisa32r6-* | mipsisa32r6el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
++ | mipsisa64r6-* | mipsisa64r6el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
++ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
++ | mmix-* \
++ | mt-* \
+ | msp430-* \
+- | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
++ | nds32-* | nds32le-* | nds32be-* \
++ | nios-* | nios2-* | nios2eb-* | nios2el-* \
++ | none-* | np1-* | ns16k-* | ns32k-* \
++ | open8-* \
++ | or1k*-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+- | romp-* | rs6000-* \
+- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
++ | rl78-* | romp-* | rs6000-* | rx-* \
++ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+- | tahoe-* | thumb-* \
++ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
++ | sparclite-* \
++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
++ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
++ | tile*-* \
+ | tron-* \
+- | v850-* | v850e-* | vax-* \
++ | ubicom32-* \
++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
++ | vax-* \
+ | we32k-* \
+- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+- | xtensa-* \
++ | x86-* | x86_64-* | xc16x-* | xps100-* \
++ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+- | z8k-*)
++ | z8k-* | z80-*)
++ ;;
++ # Recognize the basic CPU types without company name, with glob match.
++ xtensa*)
++ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+@@ -363,7 +463,7 @@ case $basic_machine in
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+- abacus)
++ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+@@ -409,6 +509,10 @@ case $basic_machine in
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
++ aros)
++ basic_machine=i386-pc
++ os=-aros
++ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+@@ -417,10 +521,35 @@ case $basic_machine in
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
++ blackfin)
++ basic_machine=bfin-unknown
++ os=-linux
++ ;;
++ blackfin-*)
++ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
++ bluegene*)
++ basic_machine=powerpc-ibm
++ os=-cnk
++ ;;
++ c54x-*)
++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ c55x-*)
++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ c6x-*)
++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
++ cegcc)
++ basic_machine=arm-unknown
++ os=-cegcc
++ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+@@ -445,13 +574,20 @@ case $basic_machine in
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+- cr16c)
+- basic_machine=cr16c-unknown
++ craynv)
++ basic_machine=craynv-cray
++ os=-unicosmp
++ ;;
++ cr16 | cr16-*)
++ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
++ crisv32 | crisv32-* | etraxfs*)
++ basic_machine=crisv32-axis
++ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+@@ -481,6 +617,14 @@ case $basic_machine in
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
++ dicos)
++ basic_machine=i686-pc
++ os=-dicos
++ ;;
++ djgpp)
++ basic_machine=i586-pc
++ os=-msdosdjgpp
++ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+@@ -592,7 +736,6 @@ case $basic_machine in
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+@@ -631,6 +774,14 @@ case $basic_machine in
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
++ m68knommu)
++ basic_machine=m68k-unknown
++ os=-linux
++ ;;
++ m68knommu-*)
++ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+@@ -642,10 +793,21 @@ case $basic_machine in
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
++ microblaze*)
++ basic_machine=microblaze-xilinx
++ ;;
++ mingw64)
++ basic_machine=x86_64-pc
++ os=-mingw64
++ ;;
+ mingw32)
+- basic_machine=i386-pc
++ basic_machine=i686-pc
+ os=-mingw32
+ ;;
++ mingw32ce)
++ basic_machine=arm-unknown
++ os=-mingw32ce
++ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+@@ -659,10 +821,6 @@ case $basic_machine in
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+- mmix*)
+- basic_machine=mmix-knuth
+- os=-mmixware
+- ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+@@ -671,14 +829,29 @@ case $basic_machine in
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
++ moxiebox)
++ basic_machine=moxie-unknown
++ os=-moxiebox
++ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
++ ms1-*)
++ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
++ ;;
++ msys)
++ basic_machine=i686-pc
++ os=-msys
++ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
++ nacl)
++ basic_machine=le32-unknown
++ os=-nacl
++ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+@@ -743,9 +916,11 @@ case $basic_machine in
+ np1)
+ basic_machine=np1-gould
+ ;;
+- nv1)
+- basic_machine=nv1-cray
+- os=-unicosmp
++ neo-tandem)
++ basic_machine=neo-tandem
++ ;;
++ nse-tandem)
++ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+@@ -754,9 +929,8 @@ case $basic_machine in
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+- or32 | or32-*)
++ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+- os=-coff
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+@@ -778,6 +952,14 @@ case $basic_machine in
+ basic_machine=i860-intel
+ os=-osf
+ ;;
++ parisc)
++ basic_machine=hppa-unknown
++ os=-linux
++ ;;
++ parisc-*)
++ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+@@ -787,6 +969,12 @@ case $basic_machine in
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
++ pc98)
++ basic_machine=i386-pc
++ ;;
++ pc98-*)
++ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+@@ -816,9 +1004,10 @@ case $basic_machine in
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+- ppc) basic_machine=powerpc-unknown
++ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ppc-* | ppcbe-*)
++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+@@ -843,6 +1032,14 @@ case $basic_machine in
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
++ rdos | rdos64)
++ basic_machine=x86_64-pc
++ os=-rdos
++ ;;
++ rdos32)
++ basic_machine=i386-pc
++ os=-rdos
++ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+@@ -869,6 +1066,10 @@ case $basic_machine in
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
++ sde)
++ basic_machine=mipsisa32-sde
++ os=-elf
++ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+@@ -880,6 +1081,9 @@ case $basic_machine in
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
++ sh5el)
++ basic_machine=sh5le-unknown
++ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+@@ -901,6 +1105,9 @@ case $basic_machine in
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
++ strongarm-* | thumb-*)
++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+@@ -957,17 +1164,9 @@ case $basic_machine in
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+- tic54x | c54x*)
+- basic_machine=tic54x-unknown
+- os=-coff
+- ;;
+- tic55x | c55x*)
+- basic_machine=tic55x-unknown
+- os=-coff
+- ;;
+- tic6x | c6x*)
+- basic_machine=tic6x-unknown
+- os=-coff
++ tile*)
++ basic_machine=$basic_machine-unknown
++ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+@@ -1029,9 +1228,16 @@ case $basic_machine in
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
++ xbox)
++ basic_machine=i686-pc
++ os=-mingw32
++ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
++ xscale-* | xscalee[bl]-*)
++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
++ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+@@ -1040,6 +1246,10 @@ case $basic_machine in
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
++ z80-*-coff)
++ basic_machine=z80-unknown
++ os=-sim
++ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+@@ -1059,6 +1269,9 @@ case $basic_machine in
+ romp)
+ basic_machine=romp-ibm
+ ;;
++ mmix)
++ basic_machine=mmix-knuth
++ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+@@ -1075,13 +1288,10 @@ case $basic_machine in
+ we32k)
+ basic_machine=we32k-att
+ ;;
+- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
++ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+- sh64)
+- basic_machine=sh64-unknown
+- ;;
+- sparc | sparcv8 | sparcv9 | sparcv9b)
++ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+@@ -1125,9 +1335,12 @@ esac
+ if [ x"$os" != x"" ]
+ then
+ case $os in
+- # First match some system type aliases
+- # that might get confused with valid system types.
++ # First match some system type aliases
++ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
++ -auroraux)
++ os=-auroraux
++ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+@@ -1148,26 +1361,31 @@ case $os in
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
++ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
++ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+- | -aos* \
++ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
++ | -bitrig* | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+- | -chorusos* | -chorusrdb* \
+- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
++ | -chorusos* | -chorusrdb* | -cegcc* \
++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
++ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+@@ -1185,7 +1403,7 @@ case $os in
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+@@ -1206,7 +1424,7 @@ case $os in
+ -opened*)
+ os=-openedition
+ ;;
+- -os400*)
++ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+@@ -1255,7 +1473,7 @@ case $os in
+ -sinix*)
+ os=-sysv4
+ ;;
+- -tpf*)
++ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+@@ -1291,8 +1509,13 @@ case $os in
+ -aros*)
+ os=-aros
+ ;;
+- -kaos*)
+- os=-kaos
++ -zvmoe)
++ os=-zvmoe
++ ;;
++ -dicos*)
++ os=-dicos
++ ;;
++ -nacl*)
+ ;;
+ -none)
+ ;;
+@@ -1316,6 +1539,12 @@ else
+ # system, and we'll never get to this point.
+
+ case $basic_machine in
++ score-*)
++ os=-elf
++ ;;
++ spu-*)
++ os=-elf
++ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+@@ -1325,9 +1554,24 @@ case $basic_machine in
+ arm*-semi)
+ os=-aout
+ ;;
+- c4x-* | tic4x-*)
+- os=-coff
+- ;;
++ c4x-* | tic4x-*)
++ os=-coff
++ ;;
++ c8051-*)
++ os=-elf
++ ;;
++ hexagon-*)
++ os=-elf
++ ;;
++ tic54x-*)
++ os=-coff
++ ;;
++ tic55x-*)
++ os=-coff
++ ;;
++ tic6x-*)
++ os=-coff
++ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+@@ -1346,13 +1590,13 @@ case $basic_machine in
+ ;;
+ m68000-sun)
+ os=-sunos3
+- # This also exists in the configure program, but was not the
+- # default.
+- # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
++ mep-*)
++ os=-elf
++ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+@@ -1371,9 +1615,15 @@ case $basic_machine in
+ *-be)
+ os=-beos
+ ;;
++ *-haiku)
++ os=-haiku
++ ;;
+ *-ibm)
+ os=-aix
+ ;;
++ *-knuth)
++ os=-mmixware
++ ;;
+ *-wec)
+ os=-proelf
+ ;;
+@@ -1476,7 +1726,7 @@ case $basic_machine in
+ -sunos*)
+ vendor=sun
+ ;;
+- -aix*)
++ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+@@ -1539,7 +1789,7 @@ case $basic_machine in
+ esac
+
+ echo $basic_machine$os
+-exit 0
++exit
+
+ # Local variables:
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
+diff --git a/configure b/configure
+index 4c1bc06..c721825 100755
+--- a/configure
++++ b/configure
+@@ -1490,7 +1490,7 @@ Optional Packages:
+ --with-ssl=PREFIX support https protocol
+ --with-termlib=LIBS terminal library
+ LIBS is space separated list of:
+- terminfo mytinfo termcap ncurses curses
++ terminfo mytinfo termcap tinfo ncurses curses
+ --with-gc=PREFIX libgc PREFIX
+
+ Some influential environment variables:
+@@ -6755,7 +6755,7 @@ $as_echo "$enable_image" >&6; }
+ if test x"$enable_image" = xyes; then
+ enable_image=x11
+ case "`uname -s`" in
+- Linux|linux|LINUX)
++ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD)
+ if test -c /dev/fb0; then
+ enable_image=x11,fb
+ fi;;
+@@ -6811,6 +6811,9 @@ $as_echo "$with_imagelib" >&6; }
+ fi;;
+ imlib2)
+ with_imlib2="yes"
++ if test x"$PKG_CONFIG" = x; then
++ PKG_CONFIG=pkg-config
++ fi
+ if test x"$IMLIB2_CONFIG" = x; then
+ IMLIB2_CONFIG=imlib2-config
+ fi;;
+@@ -6823,8 +6826,6 @@ $as_echo "$with_imagelib" >&6; }
+ with_gtk2="yes"
+ if test x"$PKG_CONFIG" = x; then
+ PKG_CONFIG=pkg-config
+- else
+- PKG_CONFIG=:
+ fi;;
+ esac
+ done
+@@ -6926,8 +6927,8 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >=
+
+ $as_echo "#define USE_GTK2 1" >>confdefs.h
+
+- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
+- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
++ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
++ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
+ elif test x"$have_gdkpixbuf" = xyes; then
+ $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
+
+@@ -6955,7 +6956,7 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >=
+ $as_echo "#define USE_IMLIB2 1" >>confdefs.h
+
+ IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
+- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
++ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with X11 support" >&5
+ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
+@@ -6971,8 +6972,8 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
+
+ $as_echo "#define USE_GTK2 1" >>confdefs.h
+
+- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
+- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
++ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`"
++ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`"
+ elif test x"$have_gdkpixbuf" = xyes; then
+ $as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h
+
+@@ -6991,7 +6992,7 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
+
+ IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
+ IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
+- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
++ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with FB support" >&5
+ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with FB support" >&2;}
+@@ -7977,7 +7978,7 @@ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_termlib" >&5
+ $as_echo "$with_termlib" >&6; }
+- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
++ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses"
+ for lib in $with_termlib; do
+ as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_tgetent" | $as_tr_sh`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$lib" >&5
+@@ -8986,7 +8987,7 @@ extern char *sys_errlist[];
+ int
+ main ()
+ {
+-printf(sys_errlist[0]);
++printf("%s", sys_errlist[0]);
+ ;
+ return 0;
+ }
+@@ -9084,7 +9085,8 @@ _ACEOF
+
+
+ cvsver=`$AWK '\$1 ~ /Id:/ { print \$3}' $srcdir/ChangeLog`
+- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
++ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog`
++ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
+ CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`
+ ac_config_files="$ac_config_files Makefile posubst po/Makefile.in scripts/Makefile scripts/dirlist.cgi scripts/w3mhelp.cgi scripts/w3mmail.cgi scripts/xface2xpm scripts/multipart/Makefile scripts/multipart/multipart.cgi scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 scripts/w3mman/w3mman2html.cgi libwc/Makefile w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mimg/win/Makefile w3mhelp-w3m_en.html w3mhelp-w3m_ja.html w3mhelp-lynx_en.html w3mhelp-lynx_ja.html"
+
+diff --git a/cookie.c b/cookie.c
+index 8020f6d..c11649c 100644
+--- a/cookie.c
++++ b/cookie.c
+@@ -247,7 +247,7 @@ find_cookie(ParsedURL *pu)
+ Strcat(tmp, Sprintf("; $Domain=\"%s\"", p1->domain->ptr));
+ if (p1->portl)
+ Strcat(tmp,
+- Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)));
++ Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)->ptr));
+ }
+ }
+ return tmp;
+@@ -463,7 +463,7 @@ save_cookies(void)
+ continue;
+ fprintf(fp, "%s\t%s\t%s\t%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n",
+ parsedURL2Str(&p->url)->ptr,
+- p->name->ptr, p->value->ptr, p->expires,
++ p->name->ptr, p->value->ptr, (long)p->expires,
+ p->domain->ptr, p->path->ptr, p->flag,
+ p->version, str2charp(p->comment),
+ (p->portl) ? portlist2str(p->portl)->ptr : "",
+diff --git a/display.c b/display.c
+index e00eb0c..d4f336a 100644
+--- a/display.c
++++ b/display.c
+@@ -257,7 +257,7 @@ make_lastline_link(Buffer *buf, char *title, char *url)
+ parseURL2(url, &pu, baseURL(buf));
+ u = parsedURL2Str(&pu);
+ if (DecodeURL)
+- u = Strnew_charp(url_unquote_conv(u->ptr, buf->document_charset));
++ u = Strnew_charp(url_decode2(u->ptr, buf));
+ #ifdef USE_M17N
+ u = checkType(u, &pr, NULL);
+ #endif
+@@ -487,7 +487,7 @@ displayBuffer(Buffer *buf, int mode)
+ term_title(conv_to_system(buf->buffername));
+ refresh();
+ #ifdef USE_IMAGE
+- if (activeImage && displayImage && buf->img) {
++ if (activeImage && displayImage && buf->img && buf->image_loaded) {
+ drawImage();
+ }
+ #endif
+@@ -521,7 +521,15 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq,
+ break;
+ }
+ if (hseq >= 0 && an->hseq == hseq) {
++ int start_pos = an->start.pos;
++ int end_pos = an->end.pos;
+ for (i = an->start.pos; i < an->end.pos; i++) {
++ if (enable_inline_image && (l->propBuf[i] & PE_IMAGE)) {
++ if (start_pos == i)
++ start_pos = i + 1;
++ else if (end_pos == an->end.pos)
++ end_pos = i - 1;
++ }
+ if (l->propBuf[i] & (PE_IMAGE | PE_ANCHOR | PE_FORM)) {
+ if (active)
+ l->propBuf[i] |= PE_ACTIVE;
+@@ -529,9 +537,9 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq,
+ l->propBuf[i] &= ~PE_ACTIVE;
+ }
+ }
+- if (active)
++ if (active && start_pos < end_pos)
+ redrawLineRegion(buf, l, l->linenumber - tline + buf->rootY,
+- an->start.pos, an->end.pos);
++ start_pos, end_pos);
+ }
+ else if (prevhseq >= 0 && an->hseq == prevhseq) {
+ if (active)
+@@ -855,14 +863,16 @@ redrawLineImage(Buffer *buf, Line *l, int i)
+ y = (int)(i * pixel_per_line);
+ sx = (int)((rcol - COLPOS(l, a->start.pos)) * pixel_per_char);
+ sy = (int)((l->linenumber - image->y) * pixel_per_line);
+- if (sx == 0 && x + image->xoffset >= 0)
+- x += image->xoffset;
+- else
+- sx -= image->xoffset;
+- if (sy == 0 && y + image->yoffset >= 0)
+- y += image->yoffset;
+- else
+- sy -= image->yoffset;
++ if (! enable_inline_image) {
++ if (sx == 0 && x + image->xoffset >= 0)
++ x += image->xoffset;
++ else
++ sx -= image->xoffset;
++ if (sy == 0 && y + image->yoffset >= 0)
++ y += image->yoffset;
++ else
++ sy -= image->yoffset;
++ }
+ if (image->width > 0)
+ w = image->width - sx;
+ else
+diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html
+index 41d70f1..a8623e2 100644
+--- a/doc-jp/MANUAL.html
++++ b/doc-jp/MANUAL.html
+@@ -51,15 +51,9 @@ w3m
+ <dt>-l Կ
+ <dd>ɸϤƤɽȤ¸Կꤹ
+ 롥ǥեȤ 10000
+-<dt>-s
+-<dd>Shift_JIS ɤɽ롥
+-<dt>-e
+-<dd>EUC ɤɽ롥
+-<dt>-j
+-<dd>JIS(ISO-2022-JP) ɤɽ롥
+-<dt>-O e|s|j|N|m|n
++<dt>-O ʸ
+ <dd>ɽѤʸɤꤹ롥
+-<dt>-I e|s
++<dt>-I ʸ
+ <dd>ʸʸɤꤹ롥
+ <dt>-T
+ <dd>ɽʸΥפꤹ롥λ꤬ʤ硤ե
+@@ -89,7 +83,7 @@ HTML
+ <dd>顼ɽ򤷤ʤ
+ <dt>-F
+ <dd>ե졼ưɽ롥
+-<dt>-S
++<dt>-s
+ <dd>Ϣ³Ԥ1ԤˤޤȤɽ롥
+ <dt>-X
+ <dd>w3mλˡβ̤ʤ
+@@ -489,8 +483,7 @@ w3m
+ w3mȤСHTTPФʤCGIץȤư뤳ȤǤޤ
+ ΤȤw3mФΤդ򤷤ƥץȤưνϤ
+ ɤߤɽ櫓Ǥ
+-<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">֥åޡϿ</a>
+-<a href="file:///$LIB/w3mhelperpanel?mode=panel">ӥ塼Խ</a>
++֥åޡϿȳӥ塼Խ
+ ϡlocal CGIΥץȤȤƼ¸Ƥޤ
+ local CGIȤСw3mѤΥեϥ󥿥եȤ
+ ȤȤǤޤ
+diff --git a/doc-jp/README b/doc-jp/README
+index 074766f..e5e59b1 100644
+--- a/doc-jp/README
++++ b/doc-jp/README
+@@ -122,7 +122,6 @@ w3m
+ ±
+ satodai@w3m.jp
+
+-ոۤMLޤǤ󤻤
+- w3m-dev@sic.med.tohoku.ac.jp (ܸ)
+- w3m-dev-en@sic.med.tohoku.ac.jp (Ѹ)
++ոۤ򤪴󤻤
+ http://w3m.sourceforge.net/
++ https://sourceforge.net/projects/w3m/
+diff --git a/doc-jp/README.SSL b/doc-jp/README.SSL
+index 4aedfde..670ed5f 100644
+--- a/doc-jp/README.SSL
++++ b/doc-jp/README.SSL
+@@ -25,9 +25,9 @@ SSL
+
+ ssl_forbid_method
+ ȤʤSSL᥽åɤΥꥹ(2: SSLv2, 3: SSLv3, t: TLSv1)
+- (ǥեȤ<NULL>).
++ (ǥեȤ2, 3).
+ ssl_verify_server ON/OFF
+- SSLΥǧڤԤ(ǥեȤOFF).
++ SSLΥǧڤԤ(ǥեȤON).
+ ssl_cert_file ե̾
+ SSLΥ饤PEMե(ǥեȤ<NULL>).
+ ssl_key_file ե̾
+diff --git a/doc-jp/README.siteconf b/doc-jp/README.siteconf
+new file mode 100644
+index 0000000..58b51c7
+--- /dev/null
++++ b/doc-jp/README.siteconf
+@@ -0,0 +1,60 @@
++siteconf: ̥ޥ
++
++siteconf ϡ URL Υѥȡɳդ줿꤫ޤ
++siteconf Ȥȡʸɤꤷ "decode_url"
++νϤꡢ Google Υ쥯򱪲󤷤ǽ
++ץ饤Х夵ꤹ뤳ȤǤޤ
++
++ǥեȤǤ siteconf ~/.w3m/siteconf ɤ߹ޤޤ
++
++===== ʸ =====
++
++url <url>|/<re-url>/|m@<re-url>@i [exact]
++substitute_url "<destination-url>"
++url_charset <charset>
++no_referer_from on|off
++no_referer_to on|off
++
++˽񤫤줿Τͥ褵ޤ
++
++===== =====
++
++url "http://twitter.com/#!/"
++substitute_url "http://mobile.twitter.com/"
++
++twitter.com Х륵Ȥžޤ
++
++url "http://your.bookmark.net/"
++no_referer_from on
++
++your.bookmark.net ĥä󥯤éݤˡ HTTP referer
++ʤ褦ˤޤ
++
++url "http://www.google.com/url?" exact
++substitute_url "file:///cgi-bin/your-redirector.cgi?"
++
++Google Υ쥯 local CGI žޤ
++
++url /^http:\/\/[a-z]*\.wikipedia\.org\//
++url_charset utf-8
++
++Ʊ "decode_url" ץ򥪥ˤȡ Wikipedia ؤ
++󥯤 UTF-8 Ȥƥǥɤɽޤ
++
++===== ɽˤĤ =====
++
++ɽϤƱ̣ɽޤ
++
++/http:\/\/www\.example\.com\//
++m/http:\/\/www\.example\.com\//
++m@http://www\.example\.com/@
++m!http://www\.example\.com/!
++
++Ǹ 'i' Ҥդȡʸʸ̤˾ȹԤޤ
++㤨С m@^http://www\.example\.com/abc/@i ϰʲΤȤפޤ
++
++http://www.example.com/abc/
++http://www.example.com/Abc/
++http://www.example.com/ABC/
++
++ۥ̾ʬϾ˾ʸѴƤӤޤ
+diff --git a/doc-jp/w3m.1 b/doc-jp/w3m.1
+index 89aacb6..099a803 100644
+--- a/doc-jp/w3m.1
++++ b/doc-jp/w3m.1
+@@ -39,19 +39,10 @@ text/plain
+ ɸϤƤɽȤ¸Կꤹ롥
+ ǥեȤ10000
+ .TP
+-.B \-s
+-Shift_JISɤɽ롥
+-.TP
+-.B \-e
+-EUCɤɽ롥
+-.TP
+-.B \-j
+-JIS (ISO-2022-JP)ɤɽ롥
+-.TP
+-.BI \-O\ e|s|j|N|m
++.BI \-O\ ʸ
+ ɽ˻Ȥʸɤꤹ.
+ .TP
+-.BI \-I\ e|s
++.BI \-I\ ʸ
+ ʸʸɤꤹ롥
+ .TP
+ .BI \-T\
+@@ -90,7 +81,7 @@ Bookmark
+ .B \-F
+ ե졼ưɽ롥
+ .TP
+-.B \-S
++.B \-s
+ Ϣ³Ԥ1ԤˤޤȤɽ롥
+ .TP
+ .B \-X
+diff --git a/doc/HISTORY b/doc/HISTORY
+index b8f5b94..7f7ae2b 100644
+--- a/doc/HISTORY
++++ b/doc/HISTORY
+@@ -588,7 +588,7 @@ From: Okabe Katsuya <okabek@guitar.ocn.ne.jp>
+ * space characters in a buffer are mapped into 0x80-0x9f.
+ * unprintable characters (0x80-0xa0) are displayed as \xxx.
+
+-From: Tsutomu Okada ($B2,ED(B $BJY(B) <okada@furuno.co.jp>
++From: Tsutomu Okada <okada@furuno.co.jp>
+ Subject: [w3m-dev 01354] minimize when #undef USE_GOPHER or USE_NNTP
+
+ 2000/11/16
+@@ -1422,7 +1422,7 @@ HTML4.0 ID attribute support.
+
+ From: Okabe Katsuya <okabe@fphy.hep.okayama-u.ac.jp>
+ table get weird when it contains <input type=hidden>.
+-$B=$@5!%(B
++Fixed.
+
+ 2000.2.12
+ From: Rogue Metal - Jake Moorman <roguemtl@stampede.org>
+@@ -1649,15 +1649,15 @@ From: patakuti
+ If an <input type=button> tag has no `name' attribute,
+ w3m adds it an inappropriate name attribute.
+
+-From: $B$d$^(B
++From: Yama
+ Now w3m can handle a frameset that has both ROWS and COLS.
+
+ From: aito
+ Now bookmarking is done by a separate command w3mbookmark.
+
+-C-s $B$G2hLLI=<($,;_$^$C$F$$$?%P%0$N=$@5!%(B
++Bug fix that C-s hangs.
+
+-$BJ8;zF~NO;~$K(B C-g $B$GCf;_$G$-$k$h$&$K$7$?!%(B
++Enable C-g to quit for keyboard input.
+
+ From: hovav@cs.stanford.edu
+ When downloading a file, an attempt to save it to a non-exist
+@@ -1699,7 +1699,7 @@ Menu behavior is changed.
+ * Clicking outside the menu causes cancellation of sub-menu.
+ * <, >, +, - abandoned
+
+-From: $B$*$+$@(B <okada@furuno.co.jp>
++From: Okada <okada@furuno.co.jp>
+ Now C-a/C-e are bound to 'jump to the first/last item in menu.'
+
+ From: "OMAE, jun" <jun-o@osb.att.ne.jp>
+diff --git a/doc/MANUAL.html b/doc/MANUAL.html
+index aff0189..8353f33 100644
+--- a/doc/MANUAL.html
++++ b/doc/MANUAL.html
+@@ -55,12 +55,10 @@ If you don't specify this option,
+ <dt>-l number
+ <dd>Specify line number preserved internally when reading text/plain document
+ fron standard input. Default is 10000.
+-<dt>-s
+-<dd>Display documents with Shift_JIS code.
+-<dt>-e
+-<dd>Display documents with EUC_JP code.
+-<dt>-j
+-<dd>Display documents with ISO-2022-JP code.
++<dt>-O charset
++<dd>Specify display/output charset.
++<dt>-I charset
++<dd>Specify document charset.
+ <dt>-T type
+ <dd>Specify document type. Without this option, document type
+ is determined from extension of a file. If the determination
+@@ -90,7 +88,7 @@ It is useful when reading E-mail or NetNews messages.
+ <dd>Monochrome display mode.
+ <dt>-F
+ <dd>Automatically render frame.
+-<dt>-S
++<dt>-s
+ <dd>Squeeze blank lines.
+ <dt>-X
+ <dd>Upon exit, do not display preserved screen.
+@@ -468,8 +466,7 @@ and <a href="keymap.lynx">keymap.lynx</a>) as examples.
+ You can run CGI scripts using w3m, without any HTTP server.
+ It means that w3m behaves like an HTTP server and activates CGI script,
+ then w3m reads the output of the script and display it. The
+-<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">bookmark registration</a>
+-and <a href="file:///$LIB/w3mhelperpanel?mode=panel">helper-app editor</a>
++bookmark registration and helper-app editor
+ are realized as local CGI scripts.
+ Using local CGI, w3m can be used as a general purpose form interface.
+ <P>
+diff --git a/doc/README b/doc/README
+index 324ea3e..60d6d19 100644
+--- a/doc/README
++++ b/doc/README
+@@ -115,7 +115,6 @@ Current Maintainer
+ Tohoku University Hospital
+ satodai@w3m.jp
+
+-Feel free to send your opinion to the w3m mailing-lists.
+- w3m-dev@sic.med.tohoku.ac.jp (Japanese)
+- w3m-dev-en@sic.med.tohoku.ac.jp (English)
++Feel free to send your opinion to:
+ http://w3m.sourceforge.net/
++ https://sourceforge.net/projects/w3m/
+diff --git a/doc/README.cookie b/doc/README.cookie
+index 56cca50..da16947 100644
+--- a/doc/README.cookie
++++ b/doc/README.cookie
+@@ -37,7 +37,7 @@ cookie support of w3m
+ (HDN: host domain name)
+
+
+- If the number of "." in domain name is lesser than 2, it is
++ * If the number of "." in domain name is lesser than 2, it is
+ assumed as invalid cookie (cf. RFC 2109 4.3.2), however, you can
+ use cookie_avoid_wrong_number_of_dots to avoid this
+ restriction. You can set this in "Domains to avoid [wrong number
+diff --git a/doc/README.img b/doc/README.img
+index 0c10114..f11362f 100644
+--- a/doc/README.img
++++ b/doc/README.img
+@@ -41,7 +41,7 @@ Key functions
+ Specify the following keymaps in ~/.w3m/keymap.
+ keymap X DISPLAY_IMAGE
+ keymap C-c STOP_IMAGE
+- keyamp t SET_OPTION display_image=toggle
++ keymap t SET_OPTION display_image=toggle
+
+ Commandline options
+
+diff --git a/doc/README.m17n b/doc/README.m17n
+index c064d76..da5408b 100644
+--- a/doc/README.m17n
++++ b/doc/README.m17n
+@@ -49,7 +49,7 @@ Supported encoding schemes (character set)
+ * Thai
+ TIS-620 (ISO-8859-11), CP874
+ * Other
+- US_ASCII, ISO-8859-1 10, 13 15,
++ US_ASCII, ISO-8859-1 - 10, 13 - 15,
+ KOI8-R, KOI8-U, NeXT, CP437, CP737, CP775, CP850, CP852, CP855, CP856,
+ CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP869, CP1006,
+ CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257
+diff --git a/doc/README.siteconf b/doc/README.siteconf
+new file mode 100644
+index 0000000..f173087
+--- /dev/null
++++ b/doc/README.siteconf
+@@ -0,0 +1,60 @@
++The siteconf: Site-specific preferences
++
++The siteconf consists of URL patterns and preferences associated to them.
++You can improve "decode_url" feature by giving charsets of URLs site by site,
++or bypass Google's redirector for performance and your privacy.
++
++The siteconf is read from ~/.w3m/siteconf by default.
++
++===== The syntax =====
++
++url <url>|/<re-url>/|m@<re-url>@i [exact]
++substitute_url "<destination-url>"
++url_charset <charset>
++no_referer_from on|off
++no_referer_to on|off
++
++The last match wins.
++
++===== Examples =====
++
++url "http://twitter.com/#!/"
++substitute_url "http://mobile.twitter.com/"
++
++This forwards the twitter.com to its mobile site.
++
++url "http://your.bookmark.net/"
++no_referer_from on
++
++This prevents HTTP referers from being sent when you follow links
++at the your.bookmark.net.
++
++url "http://www.google.com/url?" exact
++substitute_url "file:///cgi-bin/your-redirector.cgi?"
++
++This forwards the Google's redirector to your local CGI.
++
++url /^http:\/\/[a-z]*\.wikipedia\.org\//
++url_charset utf-8
++
++When combinated with "decode_url" option turned on, links to
++Wikipedia will be human-readable.
++
++===== Regular expressions notes =====
++
++Following expressions are all equivalent:
++
++/http:\/\/www\.example\.com\//
++m/http:\/\/www\.example\.com\//
++m@http://www\.example\.com/@
++m!http://www\.example\.com/!
++
++With a trailing 'i' modifier, you can specify a case-insensitive match.
++For example, m@^http://www\.example\.com/abc/@i matches to:
++
++http://www.example.com/abc/
++http://www.example.com/Abc/
++http://www.example.com/ABC/
++
++Hostnames, however, are always converted to lowercases before compared.
++
+diff --git a/doc/README.sixel b/doc/README.sixel
+new file mode 100644
+index 0000000..588afc4
+--- /dev/null
++++ b/doc/README.sixel
+@@ -0,0 +1,27 @@
++Sixel support of w3m
++ 2014/11/05
++ K. Araki
++
++Introduction
++
++ This is the extension for w3m to show inline images by sixel graphics.
++
++Requirements
++
++ Install 'img2sixel' command provided by libsixel project.
++ (https://github.com/saitoha/libsixel)
++
++Build
++
++ $ ./configure --enable-image ...
++ $ make
++ $ make install
++
++Usage
++
++ $ w3m -sixel http://...
++
++ You can specify options of 'img2sixel' command by "W3M_IMG2SIXEL"
++ environmental variable.
++
++ $ W3M_IMG2SIXEL="img2sixel -d atkinson" w3m -sixel http://...
+diff --git a/doc/w3m.1 b/doc/w3m.1
+index 8f071c6..0762f51 100644
+--- a/doc/w3m.1
++++ b/doc/w3m.1
+@@ -1,13 +1,11 @@
+ .nr N -1
+ .nr D 5
+-.TH W3M 1 Local
++.TH W3M 1 "2014-11-29"
+ .UC 4
+ .SH NAME
+-w3m \- a text based Web browser and pager
++w3m \- a text based web browser and pager
+ .SH SYNOPSIS
+-.B w3m
+-[options] [URL or filename]
+-.PP
++w3m [OPTION]... [ \fIfile\fP | \fIURL\fP ]...
+ .SH DESCRIPTION
+ .\" This defines appropriate quote strings for nroff and troff
+ .ds lq \&"
+@@ -17,234 +15,285 @@ w3m \- a text based Web browser and pager
+ .\" Just in case these number registers aren't set yet...
+ .if \nN==0 .nr N 10
+ .if \nD==0 .nr D 5
+-.I
+-w3m
+-is a World Wide Web (WWW) text based client. It has English and
+-Japanese help files and an option menu and can be configured to
+-use either language. It will display hypertext markup language
+-(HTML) documents containing links to files residing on the local
+-system, as well as files residing on remote systems. It can
+-display HTML tables and frames.
+-In addition, it can be used as a "pager" in much the same manner
+-as "more" or "less".
+-Current versions of
+-.I
+-w3m
+-run on
+-Unix (Solaris, SunOS, HP-UX, Linux, FreeBSD, and EWS4800)
+-and on
+-Microsoft Windows 9x/NT.
+-.PP
++
++\fIw3m\fP is a text based browser which can display local or remote
++web pages as well as other documents. It is able to process HTML
++tables and frames but it ignores JavaScript and Cascading Style
++Sheets. \fIw3m\fP can also serve as a pager for text files named as
++arguments or passed on standard input, and as a general purpose
++directory browser.
++
++\fIw3m\fP organizes its content in buffers or tabs, allowing easy
++navigation between them. With the w3m-img extension installed, \fIw3m\fP can
++display inline graphics in web pages. And whenever \fIw3m\fP's HTML
++rendering capabilities do not meet your needs, the target URL can be
++handed over to a graphical browser with a single command.
++
++For help with runtime options, press \(lqH\(rq while running \fIw3m\fP.
++
++.SH ARGUMENTS
++
++When given one or more command line arguments, \fIw3m\fP will handle
++targets according to content type. For web, \fIw3m\fP gets this
++information from HTTP headers; for relative or absolute file system
++paths, it relies on filenames.
++
++With no argument, \fIw3m\fP expects data from standard input and
++assumes \(lqtext/plain\(rq unless another MIME type is given by the user.
++
++If provided with no target and no fallback target (see for instance
++option \fB\-v\fP below), \fIw3m\fP will exit with usage information.
+ .SH OPTIONS
+-At start up, \fIw3m\fR will load any local
+-file or remote URL specified at the command
+-line. For help with runtime options, press \fB"H"\fR
+-while running \fIw3m\fR.
+-Command line options are:
+-.PP
++Command line options are introduced with a single \(lq\-\(rq character and
++may take an argument.
++.SS General options:
+ .TP
+-.B -t tab
+-set tab width
++\fB\-B\fP
++with no other target defined, use the bookmark page for startup
+ .TP
+-.B -r
+-ignore backspace effect
+-.TP
+-.B -l line
+-# of preserved line (default 10000)
+-.TP
+-.B -I charset
+-document charset
+-.TP
+-.B -O charset
+-display/output charset
++\fB\-M\fP
++monochrome display
+ .TP
+-.B -B
+-load bookmark
++\fB\-no-mouse\fP
++deactivate mouse support
+ .TP
+-.B -bookmark file
+-specify bookmark file
++\fB\-num\fP
++display each line's number
+ .TP
+-.B -T type
+-specify content-type
++\fB\-N\fP
++distribute multiple command line arguments to tabs. By default, a
++stack of buffers is used
++.TP
++\fB\-ppc \fInum\fR
++width of \fInum\fR pixels per character. Range of 4.0 to 32.0, default 8.0.
++Larger values will make tables narrower. (Implementation not verified)
+ .TP
+-.B -m
+-internet message mode
++\fB\-ppl \fInum\fR
++height of \fInum\fR pixels per line. Range of 4.0 to 64.0. (Implementation not verified)
+ .TP
+-.B -v
+-visual startup mode
++\fB\-title\fP, \fB\-title=TERM\fP
++use the buffer name as terminal title string. With specified TERM,
++this sets the title configuration style accordingly
+ .TP
+-.B -M
+-monochrome display
++\fB\-v\fP
++with no other target defined, welcome users with a built-in page
+ .TP
+-.B -N
+-open URL of command line on each new tab
++\fB\-W\fP
++toggle wrapping in searches
+ .TP
+-.B -F
+-automatically render frame
++\fB\-X\fP
++do not initialize/deinitialize the terminal
+ .TP
+-.B -dump
+-dump formatted page into stdout
++\fB+\fInum\fR
++go to line \fInum\fR; only effective for \fInum\fR larger than the number of lines in the terminal
++.SS Browser options:
+ .TP
+-.B -cols width
+-specify column width (used with -dump)
++\fB\-cols \fInum\fR
++with stdout as destination; HTML is rendered to lines of \fInum\fR characters
+ .TP
+-.B -ppc count
+-specify the number of pixels per character (4.0...32.0).
+-Larger values will make tables narrower. [default 8.0]
++\fB\-cookie\fP, \fB\-no-cookie\fP
++use stored cookies and accept new ones, or do neither
+ .TP
+-.B -ppl count
+-specify the number of pixels per line (4.0...64.0)
++\fB\-F\fP
++render frames
+ .TP
+-.B -dump_source
+-dump page source into stdout
++\fB\-graph\fP, \fB\-no-graph\fP
++use or do not use graphic characters for drawing HTML table and frame borders
+ .TP
+-.B -dump_head
+-dump response of HEAD request into stdout
++\fB\-header \fIstring\fR
++append \fIstring\fR to the HTTP(S) request. Expected to match the header syntax \f(CW Variable: Value\fP
+ .TP
+-.B -dump_both
+-dump HEAD and source into stdout
++\fB\-m\fP
++Render the body of Usenet messages according to the header \(lqContent-type\(rq
+ .TP
+-.B -dump_extra
+-dump HEAD, source, and extra information into stdout
++\fB\-no-proxy\fP
++do not use proxy
+ .TP
+-.B -post file
+-use POST method with file content
++\fB\-post \fIfile\fR
++use POST method to upload data defined in \fIfile\fR. The syntax to be used
++is \f(CWvar1=value1[&var2=value2]...\fP
+ .TP
+-.B -header string
+-insert string as a header
++\fB\-4\fP
++IPv4 only. Corresponds to dns_order=4 in configuration files
+ .TP
+-.B +<num>
+-goto <num> line
++\fB\-6\fP
++IPv6 only. Corresponds to dns_order=6 in configuration files
++.SS Text pager options:
+ .TP
+-.B -num
+-show line number
++\fB\-l \fInum\fR
++number of lines preserved internally when receiving plain text from
++stdin (default 10,000)
+ .TP
+-.B -no-proxy
+-don't use proxy
++\fB\-r\fP
++use caret notation to display special escape characters (such
++as ANSI escapes or nroff-style backspaces for bold and underlined
++characters) instead of processing them
+ .TP
+-.B -4
+-IPv4 only (-o dns_order=4)
++\fB\-s\fP
++squeeze multiple blank lines into one
+ .TP
+-.B -6
+-IPv6 only (-o dns_order=6)
++\fB\-t\fP \fInum\fP
++set tab width to \fInum\fR columns. No effect on stdout
++.SS Data type/encoding options:
+ .TP
+-.B -no-mouse
+-don't use mouse
++\fB\-I \fIcharset\fR
++user defined character encoding of input data
+ .TP
+-.B -cookie
+-use cookie.
++\fB\-O \fIcharset\fR
++user defined character encoding of output data
+ .TP
+-.B -no-cookie
+-don't use cookie
++\fB\-T \fItype\fR
++explicit characterization of input data by MIME type
++.SS Options for data output, followed by immediate exit:
+ .TP
+-.B -graph
+-use graphic character
++\fB\-dump\fP
++dump rendered page into stdout. Set implicitly when output is directed
++to a file or pipe
+ .TP
+-.B -no-graph
+-don't use graphic character
++\fB\-dump_source\fP
++dump the page's source code into stdout
+ .TP
+-.B -S
+-squeeze multiple blank lines
++\fB\-dump_head\fP
++dump response of a HEAD request for a URL into stdout
+ .TP
+-.B -W
+-toggle wrap search mode
++\fB\-dump_both\fP
++dump HEAD, and source code for a URL into stdout
+ .TP
+-.B -X
+-don't use termcap init/deinit
++\fB\-dump_extra\fP
++dump HEAD, source code, and extra information for a URL into stdout
+ .TP
+-.B -title [=TERM]
+-set buffer name to terminal title string.
+-If TERM is specified, use the TERM style title configuration.
++\fB\-help\fP
++show a summary of compiled-in features and command line options
+ .TP
+-.B -o opt=value
+-assign value to config option
++\fB\-show-option\fP
++show all available config options
+ .TP
+-.B -show-option
+-show all available config option
++\fB\-version\fP
++show the version of \fIw3m\fP
++.SS Options for overriding default settings and resources:
+ .TP
+-.B -config file
+-specify config file
++\fB\-bookmark \fIfile\fR
++use \fIfile\fR instead of the default bookmark.html file
+ .TP
+-.B -help
+-show usage
++\fB\-config \fIfile\fR
++use \fIfile\fR instead of the default config file
+ .TP
+-.B -version
+-show w3m version
++\fB\-debug\fP
++DO NOT USE
+ .TP
+-.B -reqlog
+-write request logfile
++\fB\-o \fIoption=value\fR
++modify one configuration item with an explicitly given value; without \fIoption=value\fR, equivalent to -show-option
+ .TP
+-.B -debug
+-DO NOT USE
++\fB\-reqlog\fP
++log headers of HTTP communication in file \f(CW~/.w3m/request.log\fP
+ .SH EXAMPLES
++.SS Pager-like usage
++.TP
++Combine snippets of HTML code and preview the page
++.EX
++$ cat header.html footer.html | w3m -T text/html
++.EE
++.TP
++Compare two files using tabs
++.EX
++$ w3m -N config.old config
++.EE
++.SS Browser-like usage
++.TP
++Display web content in monochrome terminal
++.EX
++$ w3m -M http://w3m.sourceforge.net
++.EE
++.TP
++Display embedded graphics
++.EX
++$ w3m -o auto_image=TRUE http://w3m.sourceforge.net
++.EE
++.TP
++Display content from Usenet
++.EX
++$ w3m -m nntp://news.aioe.org/comp.os.linux.networking
++.EE
++.TP
++Upload data for a URL using the POST method
++.EX
++$ w3m -post - http://example.com/form.php <<<'a=0&b=1'
++.EE
++.SS Filter-like usage
++.TP
++Convert an HTML file to plain text with a defined line length
++.EX
++$ w3m -cols 40 foo.html > foo.txt
++.EE
++.TP
++Output the bookmarks page as text with an appended list of links
++.EX
++$ w3m -B -o display_link_number=1 > out.txt
++.EE
++.TP
++Conversion of file format and character encoding
++.EX
++$ w3m -T text/html -I EUC-JP -O UTF-8 < foo.html > foo.txt
++.EE
++.SS Start with no input
++.TP
++Welcome users with a built-in page
++.EX
++$ w3m -v
++.EE
++.\".SH Errors
++.SH ENVIRONMENT
++\fIw3m\fP recognises the environment variable WWW_HOME as defining a
++fallback target for use if it is invoked without one.
++.SH FILES
+ .TP
+-To use w3m as a pager:
+-.br
+-$ ls | w3m
+-.br
+-.TP
+-To use w3m to translate HTML files:
+-.br
+-$ cat foo.html | w3m -T text/html
++\f(CW~/.w3m/bookmark.html\fP
++default bookmark file
+ .TP
+-or
+-.br
+-$ cat foo.html | w3m -dump -T text/html >foo.txt
+-.SH FILES
++\f(CW~/.w3m/config\fP
++user defined configuration file; overrides \f(CW/etc/w3m/config\fP
+ .TP
+-.I ${HOME}/.w3m/config
+-configuration file
++\f(CW~/.w3m/cookie\fP
++cookie jar; written on exit, read on launch
+ .TP
+-.I ${HOME}/.w3m/keymap
+-key binding configuration file
+-.\" .TP
+-.\" .I ${HOME}/.w3m/menu
+-.\" ???
++\f(CW~/.w3m/history\fP
++browser history - visited files and URLs
+ .TP
+-.I ${HOME}/.w3m/mouse
+-mouse configuration file
++\f(CW~/.w3m/keymap\fP
++user defined key bindings; overrides default key bindings
+ .TP
+-.I ${HOME}/.w3m/cookie
+-cookie file
++\f(CW~/.w3m/mailcap\fP
++external viewer configuration file
+ .TP
+-.I ${HOME}/.w3m/history
+-history file
++\f(CW~/.w3m/menu\fP
++user defined menu; overrides default menu
+ .TP
+-.I ${HOME}/.w3m/passwd
+-passowrd and username file
++\f(CW~/.w3m/mime.types\fP
++MIME types file
+ .TP
+-.I ${HOME}/.w3m/pre_form
+-form parameters file
++\f(CW~/.w3m/mouse\fP
++user defined mouse settings
+ .TP
+-.I ${HOME}/.w3m/mailcap
+-external viewer configuration file
++\f(CW~/.w3m/passwd\fP
++password and username file
+ .TP
+-.I ${HOME}/.w3m/mime.types
+-MIME types file
++\f(CW~/.w3m/pre_form\fP
++contains predefined values to fill recurrent HTML forms
+ .\" .TP
+-.\" .I ${HOME}/.w3m/urimethodmap
++.\" .I $~/.w3m/urimethodmap
+ .\" ???
+ .SH NOTES
+-This is the
+-.I
+-w3m
+-0.5.3 Release.
+-.PP
+-Please see the MANUAL.html file distributed with w3m for
+-more detailed documentation.
+-
+-Additional information about
+-.I
+-w3m
+-may be found on its Japanese language Web site located at:
+- http://w3m.sourceforge.net/index.ja.html
+-.br
+-or on its English version of the site at:
+- http://w3m.sourceforge.net/index.en.html
++This is the \fIw3m\fP 0.5.3 Release.
++.SH SEE ALSO
++README and example files are to be found in the doc directory of your \fIw3m\fP installation. Recent information about \fIw3m\fP may be found on
++.UR http://w3m.sourceforge.net
++the project's web pages at
++.UE
+ .SH ACKNOWLEDGMENTS
+-.I
+-w3m
+-has incorporated code from several sources.
++\fIw3m\fP has incorporated code from several sources.
+ Users have contributed patches and suggestions over time.
+ .SH AUTHOR
+-Akinori ITO <aito@fw.ipsj.or.jp>
++.UR aito@fw.ipsj.or.jp
++Akinori ITO
++.UE
++
+diff --git a/entity.c b/entity.c
+index fdd8f64..45dc95e 100644
+--- a/entity.c
++++ b/entity.c
+@@ -44,6 +44,8 @@ conv_entity(unsigned int c)
+ return " ";
+ if (c == 0xa0)
+ return NBSP;
++ if (c == 0xad) /* SOFT HYPHEN */
++ return "";
+ if (c < 0x100) { /* Latin1 (ISO 8859-1) */
+ if (UseAltEntity)
+ return alt_latin1[c - 0xa0];
+diff --git a/etc.c b/etc.c
+index 8fe1215..dcc6edd 100644
+--- a/etc.c
++++ b/etc.c
+@@ -1365,7 +1365,13 @@ setup_child(int child, int i, int f)
+ if (!child)
+ SETPGRP();
+ #endif /* __MINGW32_VERSION */
++ /*
++ * I don't know why but close_tty() sometimes interrupts loadGeneralFile() in loadImage()
++ * and corrupt image data can be cached in ~/.w3m.
++ */
++#if 0
+ close_tty();
++#endif
+ close_all_fds_except(i, f);
+ QuietMessage = TRUE;
+ fmInitialized = FALSE;
+diff --git a/file.c b/file.c
+index 567d41e..709a0c1 100644
+--- a/file.c
++++ b/file.c
+@@ -47,11 +47,11 @@ static JMP_BUF AbortLoading;
+ static struct table *tables[MAX_TABLE];
+ static struct table_mode table_mode[MAX_TABLE];
+
+-#ifdef USE_IMAGE
++#if defined(USE_M17N) || defined(USE_IMAGE)
+ static ParsedURL *cur_baseURL = NULL;
+-#ifdef USE_M17N
+-static char cur_document_charset;
+ #endif
++#ifdef USE_M17N
++static wc_ces cur_document_charset = 0;
+ #endif
+
+ static Str cur_title;
+@@ -215,7 +215,6 @@ currentLn(Buffer *buf)
+
+ static Buffer *
+ loadSomething(URLFile *f,
+- char *path,
+ Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf)
+ {
+ Buffer *buf;
+@@ -223,17 +222,23 @@ loadSomething(URLFile *f,
+ if ((buf = loadproc(f, defaultbuf)) == NULL)
+ return NULL;
+
+- buf->filename = path;
+ if (buf->buffername == NULL || buf->buffername[0] == '\0') {
+ buf->buffername = checkHeader(buf, "Subject:");
+- if (buf->buffername == NULL)
+- buf->buffername = conv_from_system(lastFileName(path));
++ if (buf->buffername == NULL && buf->filename != NULL)
++ buf->buffername = conv_from_system(lastFileName(buf->filename));
+ }
+ if (buf->currentURL.scheme == SCM_UNKNOWN)
+ buf->currentURL.scheme = f->scheme;
+- buf->real_scheme = f->scheme;
+ if (f->scheme == SCM_LOCAL && buf->sourcefile == NULL)
+- buf->sourcefile = path;
++ buf->sourcefile = buf->filename;
++ if (loadproc == loadHTMLBuffer
++#ifdef USE_IMAGE
++ || loadproc == loadImageBuffer
++#endif
++ )
++ buf->type = "text/html";
++ else
++ buf->type = "text/plain";
+ return buf;
+ }
+
+@@ -484,28 +489,6 @@ convertLine0(URLFile *uf, Str line, int mode)
+ return line;
+ }
+
+-/*
+- * loadFile: load file to buffer
+- */
+-Buffer *
+-loadFile(char *path)
+-{
+- Buffer *buf;
+- URLFile uf;
+- init_stream(&uf, SCM_LOCAL, NULL);
+- examineFile(path, &uf);
+- if (uf.stream == NULL)
+- return NULL;
+- buf = newBuffer(INIT_BUFFER_WIDTH);
+- current_content_length = 0;
+-#ifdef USE_M17N
+- content_charset = 0;
+-#endif
+- buf = loadSomething(&uf, path, loadBuffer, buf);
+- UFclose(&uf);
+- return buf;
+-}
+-
+ int
+ matchattr(char *p, char *attr, int len, Str *value)
+ {
+@@ -694,6 +677,7 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu)
+ #endif
+ init_stream(&f, SCM_LOCAL, newStrStream(src));
+ loadHTMLstream(&f, newBuf, NULL, TRUE);
++ UFclose(&f);
+ for (l = newBuf->lastLine; l && l->real_linenumber;
+ l = l->prev)
+ l->real_linenumber = 0;
+@@ -1697,13 +1681,15 @@ getLinkNumberStr(int correction)
+ /*
+ * loadGeneralFile: load file to buffer
+ */
++#define DO_EXTERNAL ((Buffer *(*)(URLFile *, Buffer *))doExternal)
+ Buffer *
+ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ int flag, FormList *volatile request)
+ {
+ URLFile f, *volatile of = NULL;
+ ParsedURL pu;
+- Buffer *b = NULL, *(*volatile proc)() = loadBuffer;
++ Buffer *b = NULL;
++ Buffer *(*volatile proc)(URLFile *, Buffer *) = loadBuffer;
+ char *volatile tpath;
+ char *volatile t = "text/plain", *p, *volatile real_type = NULL;
+ Buffer *volatile t_buf = NULL;
+@@ -1730,7 +1716,22 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ add_auth_cookie_flag = 0;
+
+ checkRedirection(NULL);
++
+ load_doc:
++ {
++ const char *sc_redirect;
++ parseURL2(tpath, &pu, current);
++ sc_redirect = query_SCONF_SUBSTITUTE_URL(&pu);
++ if (sc_redirect && *sc_redirect && checkRedirection(&pu)) {
++ tpath = (char *)sc_redirect;
++ request = NULL;
++ add_auth_cookie_flag = 0;
++ current = New(ParsedURL);
++ *current = pu;
++ status = HTST_NORMAL;
++ goto load_doc;
++ }
++ }
+ TRAP_OFF;
+ url_option.referer = referer;
+ url_option.flag = flag;
+@@ -1863,7 +1864,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ /* 302: Found */
+ /* 303: See Other */
+ /* 307: Temporary Redirect (HTTP/1.1) */
+- tpath = url_quote_conv(p, DocumentCharset);
++ tpath = url_encode(p, NULL, 0);
+ request = NULL;
+ UFclose(&f);
+ current = New(ParsedURL);
+@@ -2022,7 +2023,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL &&
+ checkRedirection(&pu)) {
+ /* document moved */
+- tpath = url_quote_conv(remove_space(p), DocumentCharset);
++ tpath = url_encode(remove_space(p), NULL, 0);
+ request = NULL;
+ UFclose(&f);
+ add_auth_cookie_flag = 0;
+@@ -2123,10 +2124,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ if (real_type == NULL)
+ real_type = t;
+ proc = loadBuffer;
+-#ifdef USE_IMAGE
+- cur_baseURL = New(ParsedURL);
+- copyParsedURL(cur_baseURL, &pu);
+-#endif
+
+ current_content_length = 0;
+ if ((p = checkHeader(t_buf, "Content-Length:")) != NULL)
+@@ -2197,18 +2194,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ #endif
+ else if (w3m_backend) ;
+ else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) {
+- if (!do_download && doExternal(f,
+- pu.real_file ? pu.real_file : pu.file,
+- t, &b, t_buf)) {
+- if (b && b != NO_BUFFER) {
+- b->real_scheme = f.scheme;
+- b->real_type = real_type;
+- if (b->currentURL.host == NULL && b->currentURL.file == NULL)
+- copyParsedURL(&b->currentURL, &pu);
+- }
+- UFclose(&f);
+- TRAP_OFF;
+- return b;
++ if (!do_download && searchExtViewer(t) != NULL) {
++ proc = DO_EXTERNAL;
+ }
+ else {
+ TRAP_OFF;
+@@ -2232,36 +2219,30 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ else if (w3m_dump & DUMP_FRAME)
+ return NULL;
+
++ if (t_buf == NULL)
++ t_buf = newBuffer(INIT_BUFFER_WIDTH);
++ copyParsedURL(&t_buf->currentURL, &pu);
++ t_buf->filename = pu.real_file ? pu.real_file :
++ pu.file ? conv_to_system(pu.file) : NULL;
+ if (flag & RG_FRAME) {
+- if (t_buf == NULL)
+- t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ t_buf->bufferprop |= BP_FRAME;
+ }
+ #ifdef USE_SSL
+- if (t_buf)
+- t_buf->ssl_certificate = f.ssl_certificate;
++ t_buf->ssl_certificate = f.ssl_certificate;
+ #endif
+ frame_source = flag & RG_FRAME_SRC;
+- b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf);
++ if (proc == DO_EXTERNAL) {
++ b = doExternal(f, t, t_buf);
++ } else {
++ b = loadSomething(&f, proc, t_buf);
++ }
+ UFclose(&f);
+ frame_source = 0;
+- if (b) {
++ if (b && b != NO_BUFFER) {
+ b->real_scheme = f.scheme;
+ b->real_type = real_type;
+- if (b->currentURL.host == NULL && b->currentURL.file == NULL)
+- copyParsedURL(&b->currentURL, &pu);
+- if (is_html_type(t))
+- b->type = "text/html";
+- else if (w3m_backend) {
+- Str s = Strnew_charp(t);
+- b->type = s->ptr;
+- }
+-#ifdef USE_IMAGE
+- else if (proc == loadImageBuffer)
+- b->type = "text/html";
+-#endif
+- else
+- b->type = "text/plain";
++ if (w3m_backend)
++ b->type = allocStr(t, -1);
+ if (pu.label) {
+ if (proc == loadHTMLBuffer) {
+ Anchor *a;
+@@ -2287,10 +2268,11 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
+ if (header_string)
+ header_string = NULL;
+ #ifdef USE_NNTP
+- if (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS)
++ if (b && b != NO_BUFFER && (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS))
+ reAnchorNewsheader(b);
+ #endif
+- preFormUpdateBuffer(b);
++ if (b && b != NO_BUFFER)
++ preFormUpdateBuffer(b);
+ TRAP_OFF;
+ return b;
+ }
+@@ -2469,6 +2451,7 @@ set_breakpoint(struct readbuffer *obuf, int tag_length)
+ bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor,
+ sizeof(obuf->anchor));
+ obuf->bp.img_alt = obuf->img_alt;
++ obuf->bp.input_alt = obuf->input_alt;
+ obuf->bp.in_bold = obuf->in_bold;
+ obuf->bp.in_italic = obuf->in_italic;
+ obuf->bp.in_under = obuf->in_under;
+@@ -2486,6 +2469,7 @@ back_to_breakpoint(struct readbuffer *obuf)
+ bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor,
+ sizeof(obuf->anchor));
+ obuf->img_alt = obuf->bp.img_alt;
++ obuf->input_alt = obuf->bp.input_alt;
+ obuf->in_bold = obuf->bp.in_bold;
+ obuf->in_italic = obuf->bp.in_italic;
+ obuf->in_under = obuf->bp.in_under;
+@@ -2729,7 +2713,7 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
+ Str line = obuf->line, pass = NULL;
+ char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL,
+ *hidden_under = NULL, *hidden_italic = NULL, *hidden_strike = NULL,
+- *hidden_ins = NULL, *hidden = NULL;
++ *hidden_ins = NULL, *hidden_input, *hidden = NULL;
+
+ #ifdef DEBUG
+ if (w3m_debug) {
+@@ -2761,6 +2745,12 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
+ hidden = hidden_img;
+ }
+ }
++ if (obuf->input_alt.in) {
++ if ((hidden_input = has_hidden_link(obuf, HTML_INPUT_ALT)) != NULL) {
++ if (!hidden || hidden_input < hidden)
++ hidden = hidden_input;
++ }
++ }
+ if (obuf->in_bold) {
+ if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) {
+ if (!hidden || hidden_bold < hidden)
+@@ -2812,6 +2802,8 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
+ Strcat_charp(line, "</a>");
+ if (obuf->img_alt && !hidden_img)
+ Strcat_charp(line, "</img_alt>");
++ if (obuf->input_alt.in && !hidden_input)
++ Strcat_charp(line, "</input_alt>");
+ if (obuf->in_bold && !hidden_bold)
+ Strcat_charp(line, "</b>");
+ if (obuf->in_italic && !hidden_italic)
+@@ -3022,6 +3014,18 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
+ Strcat_charp(tmp, "\">");
+ push_tag(obuf, tmp->ptr, HTML_IMG_ALT);
+ }
++ if (!hidden_input && obuf->input_alt.in) {
++ Str tmp;
++ if (obuf->input_alt.hseq > 0)
++ obuf->input_alt.hseq = - obuf->input_alt.hseq;
++ tmp = Sprintf("<INPUT_ALT hseq=\"%d\" fid=\"%d\" name=\"%s\" type=\"%s\" value=\"%s\">",
++ obuf->input_alt.hseq,
++ obuf->input_alt.fid,
++ obuf->input_alt.name->ptr,
++ obuf->input_alt.type->ptr,
++ obuf->input_alt.value->ptr);
++ push_tag(obuf, tmp->ptr, HTML_INPUT_ALT);
++ }
+ if (!hidden_bold && obuf->in_bold)
+ push_tag(obuf, "<B>", HTML_B);
+ if (!hidden_italic && obuf->in_italic)
+@@ -3228,7 +3232,7 @@ process_img(struct parsed_tag *tag, int width)
+
+ if (!parsedtag_get_value(tag, ATTR_SRC, &p))
+ return tmp;
+- p = remove_space(p);
++ p = url_encode(remove_space(p), cur_baseURL, cur_document_charset);
+ q = NULL;
+ parsedtag_get_value(tag, ATTR_ALT, &q);
+ if (!pseudoInlines && (q == NULL || (*q == '\0' && ignore_null_img_alt)))
+@@ -3322,12 +3326,7 @@ process_img(struct parsed_tag *tag, int width)
+ Image image;
+ ParsedURL u;
+
+-#ifdef USE_M17N
+- parseURL2(wc_conv(p, InnerCharset, cur_document_charset)->ptr, &u,
+- cur_baseURL);
+-#else
+ parseURL2(p, &u, cur_baseURL);
+-#endif
+ image.url = parsedURL2Str(&u)->ptr;
+ if (!uncompressed_file_type(u.file, &image.ext))
+ image.ext = filename_extension(u.file, TRUE);
+@@ -3346,8 +3345,14 @@ process_img(struct parsed_tag *tag, int width)
+ if (i < 0)
+ i = pixel_per_line;
+ }
+- nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
+- ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
++ if (enable_inline_image) {
++ nw = (w > 1) ? ((w - 1) / pixel_per_char_i + 1) : 1 ;
++ ni = (i > 1) ? ((i - 1) / pixel_per_line_i + 1) : 1 ;
++ }
++ else {
++ nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
++ ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
++ }
+ Strcat(tmp,
+ Sprintf("<pre_int><img_alt hseq=\"%d\" src=\"", cur_iseq++));
+ pre_int = TRUE;
+@@ -3378,19 +3383,21 @@ process_img(struct parsed_tag *tag, int width)
+ if (i0 >= 0)
+ Strcat(tmp, Sprintf(" height=%d", i0));
+ switch (align) {
++ case ALIGN_MIDDLE:
++ if (!enable_inline_image) {
++ top = ni / 2;
++ bottom = top;
++ if (top * 2 == ni)
++ yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
++ else
++ yoffset = (int)((ni * pixel_per_line - i) / 2);
++ break;
++ }
+ case ALIGN_TOP:
+ top = 0;
+ bottom = ni - 1;
+ yoffset = 0;
+ break;
+- case ALIGN_MIDDLE:
+- top = ni / 2;
+- bottom = top;
+- if (top * 2 == ni)
+- yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
+- else
+- yoffset = (int)((ni * pixel_per_line - i) / 2);
+- break;
+ case ALIGN_BOTTOM:
+ top = ni - 1;
+ bottom = 0;
+@@ -3408,7 +3415,12 @@ process_img(struct parsed_tag *tag, int width)
+ }
+ break;
+ }
+- xoffset = (int)((nw * pixel_per_char - w) / 2);
++
++ if (enable_inline_image)
++ xoffset = 0;
++ else
++ xoffset = (int)((nw * pixel_per_char - w) / 2);
++
+ if (xoffset)
+ Strcat(tmp, Sprintf(" xoffset=%d", xoffset));
+ if (yoffset)
+@@ -3732,6 +3744,63 @@ process_input(struct parsed_tag *tag)
+ }
+
+ Str
++process_button(struct parsed_tag *tag)
++{
++ Str tmp = NULL;
++ char *p, *q, *r, *qq = "";
++ int qlen, v;
++
++ if (cur_form_id < 0) {
++ char *s = "<form_int method=internal action=none>";
++ tmp = process_form(parse_tag(&s, TRUE));
++ }
++ if (tmp == NULL)
++ tmp = Strnew();
++
++ p = "submit";
++ parsedtag_get_value(tag, ATTR_TYPE, &p);
++ q = NULL;
++ parsedtag_get_value(tag, ATTR_VALUE, &q);
++ r = "";
++ parsedtag_get_value(tag, ATTR_NAME, &r);
++
++ v = formtype(p);
++ if (v == FORM_UNKNOWN)
++ return NULL;
++
++ if (!q) {
++ switch (v) {
++ case FORM_INPUT_SUBMIT:
++ case FORM_INPUT_BUTTON:
++ q = "SUBMIT";
++ break;
++ case FORM_INPUT_RESET:
++ q = "RESET";
++ break;
++ }
++ }
++ if (q) {
++ qq = html_quote(q);
++ qlen = strlen(q);
++ }
++
++ // Strcat_charp(tmp, "<pre_int>");
++ Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s "
++ "name=\"%s\" value=\"%s\">",
++ cur_hseq++, cur_form_id, p, html_quote(r), qq));
++ return tmp;
++}
++
++Str
++process_n_button(void)
++{
++ Str tmp = Strnew();
++ Strcat_charp(tmp, "</input_alt>");
++ // Strcat_charp(tmp, "</pre_int>");
++ return tmp;
++}
++
++Str
+ process_select(struct parsed_tag *tag)
+ {
+ Str tmp = NULL;
+@@ -4084,6 +4153,7 @@ process_form_int(struct parsed_tag *tag, int fid)
+ parsedtag_get_value(tag, ATTR_METHOD, &p);
+ q = "!CURRENT_URL!";
+ parsedtag_get_value(tag, ATTR_ACTION, &q);
++ q = url_encode(remove_space(q), cur_baseURL, cur_document_charset);
+ r = NULL;
+ #ifdef USE_M17N
+ if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r))
+@@ -4284,15 +4354,15 @@ getMetaRefreshParam(char *q, Str *refresh_uri)
+ while (*q) {
+ if (!strncasecmp(q, "url=", 4)) {
+ q += 4;
+- if (*q == '\"') /* " */
++ if (*q == '\"' || *q == '\'') /* " or ' */
+ q++;
+ r = q;
+ while (*r && !IS_SPACE(*r) && *r != ';')
+ r++;
+ s_tmp = Strnew_charp_n(q, r - q);
+
+- if (s_tmp->ptr[s_tmp->length - 1] == '\"') { /* "
+- */
++ if (s_tmp->ptr[s_tmp->length - 1] == '\"' /* " */
++ || s_tmp->ptr[s_tmp->length - 1] == '\'') { /* ' */
+ s_tmp->length--;
+ s_tmp->ptr[s_tmp->length] = '\0';
+ }
+@@ -4861,7 +4931,35 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
+ if (i > obuf->bottom_margin)
+ obuf->bottom_margin = i;
+ }
++ if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) {
++ obuf->input_alt.hseq = hseq;
++ }
++ if (parsedtag_get_value(tag, ATTR_FID, &i)) {
++ obuf->input_alt.fid = i;
++ }
++ if (parsedtag_get_value(tag, ATTR_TYPE, &p)) {
++ obuf->input_alt.type = Strnew_charp(p);
++ }
++ if (parsedtag_get_value(tag, ATTR_VALUE, &p)) {
++ obuf->input_alt.value = Strnew_charp(p);
++ }
++ if (parsedtag_get_value(tag, ATTR_NAME, &p)) {
++ obuf->input_alt.name = Strnew_charp(p);
++ }
++ obuf->input_alt.in = 1;
+ return 0;
++ case HTML_N_INPUT_ALT:
++ if (obuf->input_alt.in) {
++ if (!close_effect0(obuf, HTML_INPUT_ALT))
++ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT);
++ obuf->input_alt.hseq = 0;
++ obuf->input_alt.fid = -1;
++ obuf->input_alt.in = 0;
++ obuf->input_alt.type = NULL;
++ obuf->input_alt.name = NULL;
++ obuf->input_alt.value = NULL;
++ }
++ return 1;
+ case HTML_TABLE:
+ close_anchor(h_env, obuf);
+ obuf->table_level++;
+@@ -4970,6 +5068,16 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
+ case HTML_INPUT:
+ close_anchor(h_env, obuf);
+ tmp = process_input(tag);
++ if (tmp)
++ HTMLlineproc1(tmp->ptr, h_env);
++ return 1;
++ case HTML_BUTTON:
++ tmp = process_button(tag);
++ if (tmp)
++ HTMLlineproc1(tmp->ptr, h_env);
++ return 1;
++ case HTML_N_BUTTON:
++ tmp = process_n_button();
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+@@ -5067,11 +5175,10 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
+ }
+ return 1;
+ case HTML_BASE:
+-#ifdef USE_IMAGE
++#if defined(USE_M17N) || defined(USE_IMAGE)
+ p = NULL;
+ if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
+- if (!cur_baseURL)
+- cur_baseURL = New(ParsedURL);
++ cur_baseURL = New(ParsedURL);
+ parseURL(p, cur_baseURL, NULL);
+ }
+ #endif
+@@ -5329,6 +5436,13 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ #ifdef MENU_SELECT
+ Anchor **a_select = NULL;
+ #endif
++#if defined(USE_M17N) || defined(USE_IMAGE)
++ ParsedURL *base = baseURL(buf);
++#endif
++#ifdef USE_M17N
++ wc_ces name_charset = url_to_charset(NULL, &buf->currentURL,
++ buf->document_charset);
++#endif
+
+ if (out_size == 0) {
+ out_size = LINELEN;
+@@ -5523,16 +5637,17 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ hseq = 0;
+ id = NULL;
+ if (parsedtag_get_value(tag, ATTR_NAME, &id)) {
+- id = url_quote_conv(id, buf->document_charset);
++ id = url_quote_conv(id, name_charset);
+ registerName(buf, id, currentLn(buf), pos);
+ }
+ if (parsedtag_get_value(tag, ATTR_HREF, &p))
+- p = url_quote_conv(remove_space(p),
+- buf->document_charset);
++ p = url_encode(remove_space(p), base,
++ buf->document_charset);
+ if (parsedtag_get_value(tag, ATTR_TARGET, &q))
+ q = url_quote_conv(q, buf->document_charset);
+ if (parsedtag_get_value(tag, ATTR_REFERER, &r))
+- r = url_quote_conv(r, buf->document_charset);
++ r = url_encode(r, base,
++ buf->document_charset);
+ parsedtag_get_value(tag, ATTR_TITLE, &s);
+ parsedtag_get_value(tag, ATTR_ACCESSKEY, &t);
+ parsedtag_get_value(tag, ATTR_HSEQ, &hseq);
+@@ -5618,7 +5733,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ ParsedURL u;
+ Image *image;
+
+- parseURL2(a_img->url, &u, cur_baseURL);
++ parseURL2(a_img->url, &u, base);
+ a_img->image = image = New(Image);
+ image->url = parsedURL2Str(&u)->ptr;
+ if (!uncompressed_file_type(u.file, &image->ext))
+@@ -5639,7 +5754,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ image->map = q;
+ image->ismap = ismap;
+ image->touch = 0;
+- image->cache = getImage(image, cur_baseURL,
++ image->cache = getImage(image, base,
+ IMG_FLAG_SKIP);
+ }
+ else if (iseq < 0) {
+@@ -5689,6 +5804,21 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ putHmarker(buf->hmarklist, currentLn(buf),
+ hpos, hseq - 1);
+ }
++ else if (hseq < 0) {
++ int h = -hseq - 1;
++ int hpos = pos;
++ if (*str == '[')
++ hpos++;
++ if (buf->hmarklist &&
++ h < buf->hmarklist->nmark &&
++ buf->hmarklist->marks[h].invalid) {
++ buf->hmarklist->marks[h].pos = hpos;
++ buf->hmarklist->marks[h].line = currentLn(buf);
++ buf->hmarklist->marks[h].invalid = 0;
++ hseq = -hseq;
++ }
++ }
++
+ if (!form->target)
+ form->target = buf->baseTarget;
+ if (a_textarea &&
+@@ -5761,8 +5891,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ break;
+ if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
+ MapArea *a;
+- p = url_quote_conv(remove_space(p),
+- buf->document_charset);
++ p = url_encode(remove_space(p), base,
++ buf->document_charset);
+ t = NULL;
+ parsedtag_get_value(tag, ATTR_TARGET, &t);
+ q = "";
+@@ -5811,11 +5941,14 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ break;
+ case HTML_BASE:
+ if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
+- p = url_quote_conv(remove_space(p),
+- buf->document_charset);
++ p = url_encode(remove_space(p), NULL,
++ buf->document_charset);
+ if (!buf->baseURL)
+ buf->baseURL = New(ParsedURL);
+ parseURL(p, buf->baseURL, NULL);
++#if defined(USE_M17N) || defined(USE_IMAGE)
++ base = buf->baseURL;
++#endif
+ }
+ if (parsedtag_get_value(tag, ATTR_TARGET, &p))
+ buf->baseTarget =
+@@ -5830,8 +5963,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ int refresh_interval = getMetaRefreshParam(q, &tmp);
+ #ifdef USE_ALARM
+ if (tmp) {
+- p = url_quote_conv(remove_space(tmp->ptr),
+- buf->document_charset);
++ p = url_encode(remove_space(tmp->ptr), base,
++ buf->document_charset);
+ buf->event = setAlarmEvent(buf->event,
+ refresh_interval,
+ AL_IMPLICIT_ONCE,
+@@ -5844,8 +5977,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ FUNCNAME_reload, NULL);
+ #else
+ if (tmp && refresh_interval == 0) {
+- p = url_quote_conv(remove_space(tmp->ptr),
+- buf->document_charset);
++ p = url_encode(remove_space(tmp->ptr), base,
++ buf->document_charset);
+ pushEvent(FUNCNAME_gorURL, p);
+ }
+ #endif
+@@ -5929,7 +6062,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
+ #ifdef ID_EXT
+ id = NULL;
+ if (parsedtag_get_value(tag, ATTR_ID, &id)) {
+- id = url_quote_conv(id, buf->document_charset);
++ id = url_quote_conv(id, name_charset);
+ registerName(buf, id, currentLn(buf), pos);
+ }
+ if (renderFrameSet &&
+@@ -5982,7 +6115,8 @@ addLink(Buffer *buf, struct parsed_tag *tag)
+
+ parsedtag_get_value(tag, ATTR_HREF, &href);
+ if (href)
+- href = url_quote_conv(remove_space(href), buf->document_charset);
++ href = url_encode(remove_space(href), baseURL(buf),
++ buf->document_charset);
+ parsedtag_get_value(tag, ATTR_TITLE, &title);
+ parsedtag_get_value(tag, ATTR_TYPE, &ctype);
+ parsedtag_get_value(tag, ATTR_REL, &rel);
+@@ -6756,6 +6890,12 @@ init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf,
+ obuf->nobr_level = 0;
+ bzero((void *)&obuf->anchor, sizeof(obuf->anchor));
+ obuf->img_alt = 0;
++ obuf->input_alt.hseq = 0;
++ obuf->input_alt.fid = -1;
++ obuf->input_alt.in = 0;
++ obuf->input_alt.type = NULL;
++ obuf->input_alt.name = NULL;
++ obuf->input_alt.value = NULL;
+ obuf->in_bold = 0;
+ obuf->in_italic = 0;
+ obuf->in_under = 0;
+@@ -6791,6 +6931,15 @@ completeHTMLstream(struct html_feed_environ *h_env, struct readbuffer *obuf)
+ push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT);
+ obuf->img_alt = NULL;
+ }
++ if (obuf->input_alt.in) {
++ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT);
++ obuf->input_alt.hseq = 0;
++ obuf->input_alt.fid = -1;
++ obuf->input_alt.in = 0;
++ obuf->input_alt.type = NULL;
++ obuf->input_alt.name = NULL;
++ obuf->input_alt.value = NULL;
++ }
+ if (obuf->in_bold) {
+ push_tag(obuf, "</b>", HTML_N_B);
+ obuf->in_bold = 0;
+@@ -6963,8 +7112,6 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
+ image_flag = IMG_FLAG_AUTO;
+ else
+ image_flag = IMG_FLAG_SKIP;
+- if (newBuf->currentURL.file)
+- cur_baseURL = baseURL(newBuf);
+ #endif
+
+ if (w3m_halfload) {
+@@ -6987,6 +7134,9 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
+ htmlenv1.f = stdout;
+ else
+ htmlenv1.buf = newTextLineList();
++#if defined(USE_M17N) || defined(USE_IMAGE)
++ cur_baseURL = baseURL(newBuf);
++#endif
+
+ if (SETJMP(AbortLoading) != 0) {
+ HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1);
+@@ -7048,7 +7198,7 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
+ }
+ #endif
+ lineBuf2 = convertLine(f, lineBuf2, HTML_MODE, &charset, doc_charset);
+-#if defined(USE_M17N) && defined(USE_IMAGE)
++#ifdef USE_M17N
+ cur_document_charset = charset;
+ #endif
+ HTMLlineproc0(lineBuf2->ptr, &htmlenv1, internal);
+@@ -7060,6 +7210,12 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
+ obuf.status = R_ST_NORMAL;
+ completeHTMLstream(&htmlenv1, &obuf);
+ flushline(&htmlenv1, &obuf, 0, 2, htmlenv1.limit);
++#if defined(USE_M17N) || defined(USE_IMAGE)
++ cur_baseURL = NULL;
++#endif
++#ifdef USE_M17N
++ cur_document_charset = 0;
++#endif
+ if (htmlenv1.title)
+ newBuf->buffername = htmlenv1.title;
+ if (w3m_halfdump) {
+@@ -7096,16 +7252,17 @@ loadHTMLString(Str page)
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+ Buffer *newBuf;
+
++ init_stream(&f, SCM_LOCAL, newStrStream(page));
++
+ newBuf = newBuffer(INIT_BUFFER_WIDTH);
+ if (SETJMP(AbortLoading) != 0) {
+ TRAP_OFF;
+ discardBuffer(newBuf);
++ UFclose(&f);
+ return NULL;
+ }
+ TRAP_ON;
+
+- init_stream(&f, SCM_LOCAL, newStrStream(page));
+-
+ #ifdef USE_M17N
+ newBuf->document_charset = InnerCharset;
+ #endif
+@@ -7115,6 +7272,7 @@ loadHTMLString(Str page)
+ #endif
+
+ TRAP_OFF;
++ UFclose(&f);
+ newBuf->topLine = newBuf->firstLine;
+ newBuf->lastLine = newBuf->currentLine;
+ newBuf->currentLine = newBuf->firstLine;
+@@ -7207,7 +7365,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset)
+ q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr,
+ "/", file->ptr, NULL)->ptr;
+ Strcat_m_charp(tmp, "<a href=\"",
+- html_quote(url_quote_conv(q, *charset)),
++ html_quote(url_encode(q, NULL, *charset)),
+ "\">", p, html_quote(name->ptr + 1), "</a>\n", NULL);
+ }
+
+@@ -7331,6 +7489,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
+ URLFile f;
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+ struct stat st;
++ const ParsedURL *pu = newBuf ? &newBuf->currentURL : NULL;
+
+ loadImage(newBuf, IMG_FLAG_STOP);
+ image.url = uf->url;
+@@ -7338,20 +7497,18 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
+ image.width = -1;
+ image.height = -1;
+ image.cache = NULL;
+- cache = getImage(&image, cur_baseURL, IMG_FLAG_AUTO);
+- if (!cur_baseURL->is_nocache && cache->loaded & IMG_FLAG_LOADED &&
++ cache = getImage(&image, (ParsedURL *)pu, IMG_FLAG_AUTO);
++ if (!(pu && pu->is_nocache) && cache->loaded & IMG_FLAG_LOADED &&
+ !stat(cache->file, &st))
+ goto image_buffer;
+
+- TRAP_ON;
+ if (IStype(uf->stream) != IST_ENCODED)
+ uf->stream = newEncodedStream(uf->stream, uf->encoding);
++ TRAP_ON;
+ if (save2tmp(*uf, cache->file) < 0) {
+- UFclose(uf);
+ TRAP_OFF;
+ return NULL;
+ }
+- UFclose(uf);
+ TRAP_OFF;
+
+ cache->loaded = IMG_FLAG_LOADED;
+@@ -7371,6 +7528,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
+
+ init_stream(&f, SCM_LOCAL, newStrStream(tmp));
+ loadHTMLstream(&f, newBuf, src, TRUE);
++ UFclose(&f);
+ if (src)
+ fclose(src);
+
+@@ -7580,8 +7738,11 @@ openGeneralPagerBuffer(InputStream stream)
+ #ifdef USE_M17N
+ content_charset = 0;
+ #endif
++ t_buf = newBuffer(INIT_BUFFER_WIDTH);
++ copyParsedURL(&t_buf->currentURL, NULL);
++ t_buf->currentURL.scheme = SCM_LOCAL;
++ t_buf->currentURL.file = "-";
+ if (SearchHeader) {
+- t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ readHeader(&uf, t_buf, TRUE, NULL);
+ t = checkContentType(t_buf);
+ if (t == NULL)
+@@ -7609,14 +7770,13 @@ openGeneralPagerBuffer(InputStream stream)
+ #ifdef USE_IMAGE
+ else if (activeImage && displayImage && !useExtImageViewer &&
+ !(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6)) {
+- cur_baseURL = New(ParsedURL);
+- parseURL("-", cur_baseURL, NULL);
+ buf = loadImageBuffer(&uf, t_buf);
+ buf->type = "text/html";
+ }
+ #endif
+ else {
+- if (doExternal(uf, "-", t, &buf, t_buf)) {
++ if (searchExtViewer(t)) {
++ buf = doExternal(uf, t, t_buf);
+ UFclose(&uf);
+ if (buf == NULL || buf == NO_BUFFER)
+ return buf;
+@@ -7629,8 +7789,6 @@ openGeneralPagerBuffer(InputStream stream)
+ }
+ }
+ buf->real_type = t;
+- buf->currentURL.scheme = SCM_LOCAL;
+- buf->currentURL.file = "-";
+ return buf;
+ }
+
+@@ -7766,6 +7924,8 @@ save2tmp(URLFile uf, char *tmpf)
+ clen_t linelen = 0, trbyte = 0;
+ MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
+ static JMP_BUF env_bak;
++ volatile int retval = 0;
++ char *volatile buf = NULL;
+
+ ff = fopen(tmpf, "wb");
+ if (ff == NULL) {
+@@ -7802,30 +7962,29 @@ save2tmp(URLFile uf, char *tmpf)
+ else
+ #endif /* USE_NNTP */
+ {
+- Str buf = Strnew_size(SAVE_BUF_SIZE);
+- while (UFread(&uf, buf, SAVE_BUF_SIZE)) {
+- if (Strfputs(buf, ff) != buf->length) {
+- bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
+- TRAP_OFF;
+- fclose(ff);
+- current_content_length = 0;
+- return -2;
++ int count;
++
++ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
++ while ((count = ISread_n(uf.stream, buf, SAVE_BUF_SIZE)) > 0) {
++ if (fwrite(buf, 1, count, ff) != count) {
++ retval = -2;
++ goto _end;
+ }
+- linelen += buf->length;
++ linelen += count;
+ showProgress(&linelen, &trbyte);
+ }
+ }
+ _end:
+ bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
+ TRAP_OFF;
++ xfree(buf);
+ fclose(ff);
+ current_content_length = 0;
+- return 0;
++ return retval;
+ }
+
+-int
+-doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
+- Buffer *defaultbuf)
++Buffer *
++doExternal(URLFile uf, char *type, Buffer *defaultbuf)
+ {
+ Str tmpf, command;
+ struct mailcap *mcap;
+@@ -7834,7 +7993,7 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
+ char *header, *src = NULL, *ext = uf.ext;
+
+ if (!(mcap = searchExtViewer(type)))
+- return 0;
++ return NULL;
+
+ if (mcap->nametemplate) {
+ tmpf = unquote_mailcap(mcap->nametemplate, NULL, "", NULL, NULL);
+@@ -7867,15 +8026,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
+ UFclose(&uf);
+ myExec(command->ptr);
+ }
+- *bufp = NO_BUFFER;
+- return 1;
++ return NO_BUFFER;
+ }
+ else
+ #endif
+ {
+ if (save2tmp(uf, tmpf->ptr) < 0) {
+- *bufp = NULL;
+- return 1;
++ return NULL;
+ }
+ }
+ if (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) {
+@@ -7918,14 +8075,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
+ buf = NO_BUFFER;
+ }
+ if (buf && buf != NO_BUFFER) {
+- buf->filename = path;
+- if (buf->buffername == NULL || buf->buffername[0] == '\0')
+- buf->buffername = conv_from_system(lastFileName(path));
++ if ((buf->buffername == NULL || buf->buffername[0] == '\0') &&
++ buf->filename)
++ buf->buffername = conv_from_system(lastFileName(buf->filename));
+ buf->edit = mcap->edit;
+ buf->mailcap = mcap;
+ }
+- *bufp = buf;
+- return 1;
++ return buf;
+ }
+
+ static int
+@@ -7935,7 +8091,8 @@ _MoveFile(char *path1, char *path2)
+ FILE *f2;
+ int is_pipe;
+ clen_t linelen = 0, trbyte = 0;
+- Str buf;
++ char *buf = NULL;
++ int count;
+
+ f1 = openIS(path1);
+ if (f1 == NULL)
+@@ -7953,12 +8110,13 @@ _MoveFile(char *path1, char *path2)
+ return -1;
+ }
+ current_content_length = 0;
+- buf = Strnew_size(SAVE_BUF_SIZE);
+- while (ISread(f1, buf, SAVE_BUF_SIZE)) {
+- Strfputs(buf, f2);
+- linelen += buf->length;
++ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
++ while ((count = ISread_n(f1, buf, SAVE_BUF_SIZE)) > 0) {
++ fwrite(buf, 1, count, f2);
++ linelen += count;
+ showProgress(&linelen, &trbyte);
+ }
++ xfree(buf);
+ ISclose(f1);
+ if (is_pipe)
+ pclose(f2);
+@@ -8317,21 +8475,23 @@ uncompress_stream(URLFile *uf, char **src)
+ }
+ if (pid2 == 0) {
+ /* child2 */
+- Str buf = Strnew_size(SAVE_BUF_SIZE);
++ char *buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
++ int count;
+ FILE *f = NULL;
+
+ setup_child(TRUE, 2, UFfileno(uf));
+ if (tmpf)
+ f = fopen(tmpf, "wb");
+- while (UFread(uf, buf, SAVE_BUF_SIZE)) {
+- if (Strfputs(buf, stdout) < 0)
++ while ((count = ISread_n(uf->stream, buf, SAVE_BUF_SIZE)) > 0) {
++ if (fwrite(buf, 1, count, stdout) != count)
++ break;
++ if (f && fwrite(buf, 1, count, f) != count)
+ break;
+- if (f)
+- Strfputs(buf, f);
+ }
+ UFclose(uf);
+ if (f)
+ fclose(f);
++ xfree(buf);
+ exit(0);
+ }
+ /* child1 */
+diff --git a/fm.h b/fm.h
+index 8378939..8f594dc 100644
+--- a/fm.h
++++ b/fm.h
+@@ -76,6 +76,7 @@ typedef int wc_ces; /* XXX: not used */
+ #include "textlist.h"
+ #include "funcname1.h"
+ #include "terms.h"
++#include "istream.h"
+
+ #ifndef HAVE_BCOPY
+ void bcopy(const void *, void *, int);
+@@ -264,6 +265,18 @@ extern int REV_LB[];
+ #define IMG_FLAG_ERROR 2
+ #define IMG_FLAG_DONT_REMOVE 4
+
++#define IS_EMPTY_PARSED_URL(pu) ((pu)->scheme == SCM_UNKNOWN && !(pu)->file)
++#define SCONF_RESERVED 0
++#define SCONF_SUBSTITUTE_URL 1
++#define SCONF_URL_CHARSET 2
++#define SCONF_NO_REFERER_FROM 3
++#define SCONF_NO_REFERER_TO 4
++#define SCONF_N_FIELD 5
++#define query_SCONF_SUBSTITUTE_URL(pu) ((const char *)querySiteconf(pu, SCONF_SUBSTITUTE_URL))
++#define query_SCONF_URL_CHARSET(pu) ((const wc_ces *)querySiteconf(pu, SCONF_URL_CHARSET))
++#define query_SCONF_NO_REFERER_FROM(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_FROM))
++#define query_SCONF_NO_REFERER_TO(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_TO))
++
+ /*
+ * Macros.
+ */
+@@ -276,8 +289,6 @@ extern int REV_LB[];
+ #define inputFilenameHist(p,d,h) inputLineHist(p,d,IN_FILENAME,h)
+ #define inputChar(p) inputLine(p,"",IN_CHAR)
+
+-#define free(x) GC_free(x) /* let GC do it. */
+-
+ #ifdef __EMX__
+ #define HAVE_STRCASECMP
+ #define strcasecmp stricmp
+@@ -362,6 +373,8 @@ typedef struct _imageCache {
+ int index;
+ short width;
+ short height;
++ short a_width;
++ short a_height;
+ } ImageCache;
+
+ typedef struct _image {
+@@ -562,6 +575,13 @@ typedef struct _DownloadList {
+ #define INIT_BUFFER_WIDTH ((_INIT_BUFFER_WIDTH > 0) ? _INIT_BUFFER_WIDTH : 0)
+ #define FOLD_BUFFER_WIDTH (FoldLine ? (INIT_BUFFER_WIDTH + 1) : -1)
+
++struct input_alt_attr {
++ int hseq;
++ int fid;
++ int in;
++ Str type, name, value;
++};
++
+ typedef struct {
+ int pos;
+ int len;
+@@ -569,6 +589,7 @@ typedef struct {
+ long flag;
+ Anchor anchor;
+ Str img_alt;
++ struct input_alt_attr input_alt;
+ char fontstat[FONTSTAT_SIZE];
+ short nobr_level;
+ Lineprop prev_ctype;
+@@ -591,6 +612,7 @@ struct readbuffer {
+ short nobr_level;
+ Anchor anchor;
+ Str img_alt;
++ struct input_alt_attr input_alt;
+ char fontstat[FONTSTAT_SIZE];
+ char fontstat_stack[FONT_STACK_SIZE][FONTSTAT_SIZE];
+ int fontstat_sp;
+@@ -874,6 +896,9 @@ global char *index_file init(NULL);
+
+ global char *CurrentDir;
+ global int CurrentPid;
++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
++global char *MyProgramName init("w3m");
++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
+ /*
+ * global Buffer *Currentbuf;
+ * global Buffer *Firstbuf;
+@@ -896,6 +921,7 @@ global char *CurrentKeyData;
+ global char *CurrentCmdData;
+ global char *w3m_reqlog;
+ extern char *w3m_version;
++extern int enable_inline_image;
+
+ #define DUMP_BUFFER 0x01
+ #define DUMP_HEAD 0x02
+@@ -972,6 +998,7 @@ global int BackgroundExtViewer init(TRUE);
+ global int disable_secret_security_check init(FALSE);
+ global char *passwd_file init(PASSWD_FILE);
+ global char *pre_form_file init(PRE_FORM_FILE);
++global char *siteconf_file init(SITECONF_FILE);
+ global char *ftppasswd init(NULL);
+ global int ftppass_hostnamegen init(TRUE);
+ global int do_download init(FALSE);
+@@ -1065,7 +1092,7 @@ global char SimplePreserveSpace init(FALSE);
+ #define wc_Str_conv(x,charset0,charset1) (x)
+ #define wc_Str_conv_strict(x,charset0,charset1) (x)
+ #endif
+-global char UseAltEntity init(TRUE);
++global char UseAltEntity init(FALSE);
+ #define GRAPHIC_CHAR_ASCII 2
+ #define GRAPHIC_CHAR_DEC 1
+ #define GRAPHIC_CHAR_CHARSET 0
+@@ -1135,7 +1162,7 @@ global int view_unseenobject init(TRUE);
+ #endif
+
+ #if defined(USE_SSL) && defined(USE_SSL_VERIFY)
+-global int ssl_verify_server init(FALSE);
++global int ssl_verify_server init(TRUE);
+ global char *ssl_cert_file init(NULL);
+ global char *ssl_key_file init(NULL);
+ global char *ssl_ca_path init(NULL);
+@@ -1144,15 +1171,17 @@ global int ssl_path_modified init(FALSE);
+ #endif /* defined(USE_SSL) &&
+ * defined(USE_SSL_VERIFY) */
+ #ifdef USE_SSL
+-global char *ssl_forbid_method init(NULL);
++global char *ssl_forbid_method init("2, 3");
+ #endif
+
+ global int is_redisplay init(FALSE);
+ global int clear_buffer init(TRUE);
+ global double pixel_per_char init(DEFAULT_PIXEL_PER_CHAR);
++global int pixel_per_char_i init(DEFAULT_PIXEL_PER_CHAR);
+ global int set_pixel_per_char init(FALSE);
+ #ifdef USE_IMAGE
+ global double pixel_per_line init(DEFAULT_PIXEL_PER_LINE);
++global int pixel_per_line_i init(DEFAULT_PIXEL_PER_LINE);
+ global int set_pixel_per_line init(FALSE);
+ global double image_scale init(100);
+ #endif
+diff --git a/form.c b/form.c
+index b7556ca..62b568e 100644
+--- a/form.c
++++ b/form.c
+@@ -196,7 +196,7 @@ formtype(char *typestr)
+ if (!strcasecmp(typestr, _formtypetbl[i]))
+ return i;
+ }
+- return FORM_UNKNOWN;
++ return FORM_INPUT_TEXT;
+ }
+
+ void
+@@ -787,7 +787,7 @@ struct pre_form {
+ static struct pre_form *PreForm = NULL;
+
+ static struct pre_form *
+-add_pre_form(struct pre_form *prev, char *url, char *name, char *action)
++add_pre_form(struct pre_form *prev, char *url, Regex *re_url, char *name, char *action)
+ {
+ ParsedURL pu;
+ struct pre_form *new;
+@@ -796,21 +796,13 @@ add_pre_form(struct pre_form *prev, char *url, char *name, char *action)
+ new = prev->next = New(struct pre_form);
+ else
+ new = PreForm = New(struct pre_form);
+- if (url && *url == '/') {
+- int l = strlen(url);
+- if (l > 1 && url[l - 1] == '/')
+- new->url = allocStr(url + 1, l - 2);
+- else
+- new->url = url + 1;
+- new->re_url = newRegex(new->url, FALSE, NULL, NULL);
+- if (!new->re_url)
+- new->url = NULL;
+- }
+- else if (url) {
++ if (url && !re_url) {
+ parseURL2(url, &pu, NULL);
+ new->url = parsedURL2Str(&pu)->ptr;
+- new->re_url = NULL;
+ }
++ else
++ new->url = url;
++ new->re_url = re_url;
+ new->name = (name && *name) ? name : NULL;
+ new->action = (action && *action) ? action : NULL;
+ new->item = NULL;
+@@ -834,7 +826,7 @@ add_pre_form_item(struct pre_form *pf, struct pre_form_item *prev, int type,
+ new->name = name;
+ new->value = value;
+ if (checked && *checked && (!strcmp(checked, "0") ||
+- strcasecmp(checked, "off")
++ !strcasecmp(checked, "off")
+ || !strcasecmp(checked, "no")))
+ new->checked = 0;
+ else
+@@ -875,6 +867,7 @@ loadPreForm(void)
+ return;
+ while (1) {
+ char *p, *s, *arg;
++ Regex *re_arg;
+
+ line = Strfgets(fp);
+ if (line->length == 0)
+@@ -890,18 +883,20 @@ loadPreForm(void)
+ if (*p == '#' || *p == '\0')
+ continue; /* comment or empty line */
+ s = getWord(&p);
+- arg = getWord(&p);
+
+ if (!strcmp(s, "url")) {
++ arg = getRegexWord((const char **)&p, &re_arg);
+ if (!arg || !*arg)
+ continue;
+ p = getQWord(&p);
+- pf = add_pre_form(pf, arg, NULL, p);
++ pf = add_pre_form(pf, arg, re_arg, NULL, p);
+ pi = pf->item;
+ continue;
+ }
+ if (!pf)
+ continue;
++
++ arg = getWord(&p);
+ if (!strcmp(s, "form")) {
+ if (!arg || !*arg)
+ continue;
+@@ -913,7 +908,7 @@ loadPreForm(void)
+ }
+ if (pf->item) {
+ struct pre_form *prev = pf;
+- pf = add_pre_form(prev, "", s, p);
++ pf = add_pre_form(prev, "", NULL, s, p);
+ /* copy previous URL */
+ pf->url = prev->url;
+ pf->re_url = prev->re_url;
+diff --git a/frame.c b/frame.c
+index b431437..48c2d72 100644
+--- a/frame.c
++++ b/frame.c
+@@ -91,7 +91,8 @@ newFrame(struct parsed_tag *tag, Buffer *buf)
+ body->baseURL = baseURL(buf);
+ if (tag) {
+ if (parsedtag_get_value(tag, ATTR_SRC, &p))
+- body->url = url_quote_conv(remove_space(p), buf->document_charset);
++ body->url = url_encode(remove_space(p), body->baseURL,
++ buf->document_charset);
+ if (parsedtag_get_value(tag, ATTR_NAME, &p) && *p != '_')
+ body->name = url_quote_conv(p, buf->document_charset);
+ }
+@@ -639,7 +640,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
+ case HTML_BASE:
+ /* "BASE" is prohibit tag */
+ if (parsedtag_get_value(tag, ATTR_HREF, &q)) {
+- q = url_quote_conv(remove_space(q), charset);
++ q = url_encode(remove_space(q), NULL, charset);
+ parseURL(q, &base, NULL);
+ }
+ if (parsedtag_get_value(tag, ATTR_TARGET, &q)) {
+@@ -768,8 +769,8 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
+ if (!tag->value[j])
+ break;
+ tag->value[j] =
+- url_quote_conv(remove_space(tag->value[j]),
+- charset);
++ url_encode(remove_space(tag->value[j]),
++ &base, charset);
+ tag->need_reconstruct = TRUE;
+ parseURL2(tag->value[j], &url, &base);
+ if (url.scheme == SCM_UNKNOWN ||
+diff --git a/func.c b/func.c
+index f389e00..8b5deac 100644
+--- a/func.c
++++ b/func.c
+@@ -8,6 +8,7 @@
+ #include "fm.h"
+ #include "func.h"
+ #include "myctype.h"
++#include "regex.h"
+
+ #include "funcname.c"
+ #include "functable.c"
+@@ -434,6 +435,93 @@ getQWord(char **str)
+ return tmp->ptr;
+ }
+
++/* This extracts /regex/i or m@regex@i from the given string.
++ * Then advances *str to the end of regex.
++ * If the input does not seems to be a regex, this falls back to getQWord().
++ *
++ * Returns a word (no matter whether regex or not) in the give string.
++ * If regex_ret is non-NULL, compiles the regex and stores there.
++ *
++ * XXX: Actually this is unrelated to func.c.
++ */
++char *
++getRegexWord(const char **str, Regex **regex_ret)
++{
++ char *word = NULL;
++ const char *p, *headp, *bodyp, *tailp;
++ char delimiter;
++ int esc;
++ int igncase = 0;
++
++ p = *str;
++ SKIP_BLANKS(p);
++ headp = p;
++
++ /* Get the opening delimiter */
++ if (p[0] == 'm' && IS_PRINT(p[1]) && !IS_ALNUM(p[1]) && p[1] != '\\') {
++ delimiter = p[1];
++ p += 2;
++ }
++ else if (p[0] == '/') {
++ delimiter = '/';
++ p += 1;
++ }
++ else {
++ goto not_regex;
++ }
++ bodyp = p;
++
++ /* Scan the end of the expression */
++ for (esc = 0; *p; ++p) {
++ if (esc) {
++ esc = 0;
++ } else {
++ if (*p == delimiter)
++ break;
++ else if (*p == '\\')
++ esc = 1;
++ }
++ }
++ if (!*p && *headp == '/')
++ goto not_regex;
++ tailp = p;
++
++ /* Check the modifiers */
++ if (*p == delimiter) {
++ while (*++p && !IS_SPACE(*p)) {
++ switch (*p) {
++ case 'i':
++ igncase = 1;
++ break;
++ }
++ /* ignore unknown modifiers */
++ }
++ }
++
++ /* Save the expression */
++ word = allocStr(headp, p - headp);
++
++ /* Compile */
++ if (regex_ret) {
++ if (*tailp == delimiter)
++ word[tailp - headp] = 0;
++ *regex_ret = newRegex(word + (bodyp - headp), igncase, NULL, NULL);
++ if (*tailp == delimiter)
++ word[tailp - headp] = delimiter;
++ }
++ goto last;
++
++not_regex:
++ p = headp;
++ word = getQWord((char **)&p);
++ if (regex_ret)
++ *regex_ret = NULL;
++
++last:
++ *str = p;
++ return word;
++}
++
+ #ifdef USE_MOUSE
+ static MouseAction default_mouse_action = {
+ NULL,
+diff --git a/history.c b/history.c
+index 951ef83..e9be09b 100644
+--- a/history.c
++++ b/history.c
+@@ -17,7 +17,7 @@ historyBuffer(Hist *hist)
+ for (item = hist->list->last; item; item = item->prev) {
+ q = html_quote((char *)item->ptr);
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv((char *)item->ptr, 0));
++ p = html_quote(url_decode2((char *)item->ptr, NULL));
+ else
+ p = q;
+ Strcat_charp(src, "<li><a href=\"");
+diff --git a/html.c b/html.c
+index bca227e..d9f08e9 100644
+--- a/html.c
++++ b/html.c
+@@ -56,6 +56,9 @@ unsigned char ALST_INPUT[] =
+ ATTR_CORE
+ };
+ #define MAXA_INPUT MAXA_CORE + 12
++unsigned char ALST_BUTTON[] =
++ { ATTR_TYPE, ATTR_VALUE, ATTR_NAME, ATTR_CORE };
++#define MAXA_BUTTON MAXA_CORE + 3
+ unsigned char ALST_TEXTAREA[] =
+ { ATTR_COLS, ATTR_ROWS, ATTR_NAME, ATTR_READONLY, ATTR_CORE };
+ #define MAXA_TEXTAREA MAXA_CORE + 4
+@@ -247,24 +250,24 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
+ {"/bdo", NULL, 0, TFLG_END}, /* 121 HTML_N_BDO */
+ {"big", ALST_NOP, MAXA_NOP, 0}, /* 122 HTML_BIG */
+ {"/big", NULL, 0, TFLG_END}, /* 123 HTML_N_BIG */
+- {"button", ALST_NOP, MAXA_NOP, 0}, /* 124 HTML_BUTTON */
+- {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 125 HTML_FIELDSET */
+- {"/fieldset", NULL, 0, TFLG_END}, /* 126 HTML_N_FIELDSET */
+- {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 127 HTML_IFRAME */
+- {"label", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_LABEL */
+- {"/label", NULL, 0, TFLG_END}, /* 129 HTML_N_LABEL */
+- {"legend", ALST_NOP, MAXA_NOP, 0}, /* 130 HTML_LEGEND */
+- {"/legend", NULL, 0, TFLG_END}, /* 131 HTML_N_LEGEND */
+- {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 132 HTML_NOSCRIPT */
+- {"/noscript", NULL, 0, TFLG_END}, /* 133 HTML_N_NOSCRIPT */
+- {"object", ALST_NOP, MAXA_NOP, 0}, /* 134 HTML_OBJECT */
+- {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OPTGROUP */
+- {"/optgroup", NULL, 0, TFLG_END}, /* 136 HTML_N_OPTGROUP */
+- {"param", ALST_NOP, MAXA_NOP, 0}, /* 137 HTML_PARAM */
+- {"small", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_SMALL */
+- {"/small", NULL, 0, TFLG_END}, /* 139 HTML_N_SMALL */
++ {"button", ALST_BUTTON, MAXA_BUTTON, 0}, /* 124 HTML_BUTTON */
++ {"/button", NULL, 0, TFLG_END}, /* 125 HTML_N_BUTTON */
++ {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 126 HTML_FIELDSET */
++ {"/fieldset", NULL, 0, TFLG_END}, /* 127 HTML_N_FIELDSET */
++ {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_IFRAME */
++ {"label", ALST_NOP, MAXA_NOP, 0}, /* 129 HTML_LABEL */
++ {"/label", NULL, 0, TFLG_END}, /* 130 HTML_N_LABEL */
++ {"legend", ALST_NOP, MAXA_NOP, 0}, /* 131 HTML_LEGEND */
++ {"/legend", NULL, 0, TFLG_END}, /* 132 HTML_N_LEGEND */
++ {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 133 HTML_NOSCRIPT */
++ {"/noscript", NULL, 0, TFLG_END}, /* 134 HTML_N_NOSCRIPT */
++ {"object", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OBJECT */
++ {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 136 HTML_OPTGROUP */
++ {"/optgroup", NULL, 0, TFLG_END}, /* 137 HTML_N_OPTGROUP */
++ {"param", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_PARAM */
++ {"small", ALST_NOP, MAXA_NOP, 0}, /* 139 HTML_SMALL */
++ {"/small", NULL, 0, TFLG_END}, /* 140 HTML_N_SMALL */
+
+- {NULL, NULL, 0, 0}, /* 140 Undefined */
+ {NULL, NULL, 0, 0}, /* 141 Undefined */
+ {NULL, NULL, 0, 0}, /* 142 Undefined */
+ {NULL, NULL, 0, 0}, /* 143 Undefined */
+diff --git a/html.h b/html.h
+index 7abbd3b..b4b3df9 100644
+--- a/html.h
++++ b/html.h
+@@ -1,19 +1,17 @@
+ /* $Id: html.h,v 1.31 2010/08/14 01:29:40 htrb Exp $ */
+ #ifndef _HTML_H
+ #define _HTML_H
++#include "config.h"
+ #ifdef USE_SSL
+ #include <openssl/bio.h>
+ #include <openssl/x509.h>
+ #include <openssl/ssl.h>
+ #endif /* USE_SSL */
+
+-#include "istream.h"
+-
+ #define StrUFgets(f) StrISgets((f)->stream)
+ #define StrmyUFgets(f) StrmyISgets((f)->stream)
+ #define UFgetc(f) ISgetc((f)->stream)
+ #define UFundogetc(f) ISundogetc((f)->stream)
+-#define UFread(f,buf,len) ISread((f)->stream,buf,len)
+ #define UFclose(f) (void)(ISclose((f)->stream) == 0 && ((f)->stream = NULL))
+ #define UFfileno(f) ISfileno((f)->stream)
+
+@@ -62,11 +60,12 @@ typedef struct _ParsedURL {
+ int is_nocache;
+ } ParsedURL;
+
++union input_stream;
+ typedef struct {
+ unsigned char scheme;
+ char is_cgi;
+ char encoding;
+- InputStream stream;
++ union input_stream *stream;
+ char *ext;
+ int compression;
+ int content_encoding;
+@@ -214,21 +213,22 @@ typedef struct {
+ #define HTML_BIG 122
+ #define HTML_N_BIG 123
+ #define HTML_BUTTON 124
+-#define HTML_FIELDSET 125
+-#define HTML_N_FIELDSET 126
+-#define HTML_IFRAME 127
+-#define HTML_LABEL 128
+-#define HTML_N_LABEL 129
+-#define HTML_LEGEND 130
+-#define HTML_N_LEGEND 131
+-#define HTML_NOSCRIPT 132
+-#define HTML_N_NOSCRIPT 133
+-#define HTML_OBJECT 134
+-#define HTML_OPTGROUP 135
+-#define HTML_N_OPTGROUP 136
+-#define HTML_PARAM 137
+-#define HTML_SMALL 138
+-#define HTML_N_SMALL 139
++#define HTML_N_BUTTON 125
++#define HTML_FIELDSET 126
++#define HTML_N_FIELDSET 127
++#define HTML_IFRAME 128
++#define HTML_LABEL 129
++#define HTML_N_LABEL 130
++#define HTML_LEGEND 131
++#define HTML_N_LEGEND 132
++#define HTML_NOSCRIPT 133
++#define HTML_N_NOSCRIPT 134
++#define HTML_OBJECT 135
++#define HTML_OPTGROUP 136
++#define HTML_N_OPTGROUP 137
++#define HTML_PARAM 138
++#define HTML_SMALL 139
++#define HTML_N_SMALL 140
+
+ /* pseudo tag */
+ #define HTML_SELECT_INT 160
+diff --git a/image.c b/image.c
+index 5f5991a..91034ee 100644
+--- a/image.c
++++ b/image.c
+@@ -44,6 +44,8 @@ initImage()
+ activeImage = TRUE;
+ }
+
++int get_pixel_per_cell(int *ppc, int *ppl);
++
+ int
+ getCharSize()
+ {
+@@ -52,6 +54,24 @@ getCharSize()
+ int w = 0, h = 0;
+
+ set_environ("W3M_TTY", ttyname_tty());
++
++ if (enable_inline_image) {
++ int ppc, ppl;
++
++ if (get_pixel_per_cell(&ppc,&ppl)) {
++ pixel_per_char_i = ppc ;
++ pixel_per_line_i = ppl ;
++ pixel_per_char = (double)ppc;
++ pixel_per_line = (double)ppl;
++ }
++ else {
++ pixel_per_char_i = (int)pixel_per_char;
++ pixel_per_line_i = (int)pixel_per_line;
++ }
++
++ return TRUE;
++ }
++
+ tmp = Strnew();
+ if (!strchr(Imgdisplay, '/'))
+ Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL);
+@@ -90,17 +110,18 @@ termImage()
+ static int
+ openImgdisplay()
+ {
++ char *cmd;
++
++ if (!strchr(Imgdisplay, '/'))
++ cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr;
++ else
++ cmd = Imgdisplay;
+ Imgdisplay_pid = open_pipe_rw(&Imgdisplay_rf, &Imgdisplay_wf);
+ if (Imgdisplay_pid < 0)
+ goto err0;
+ if (Imgdisplay_pid == 0) {
+ /* child */
+- char *cmd;
+ setup_child(FALSE, 2, -1);
+- if (!strchr(Imgdisplay, '/'))
+- cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr;
+- else
+- cmd = Imgdisplay;
+ myExec(cmd);
+ /* XXX: ifdef __EMX__, use start /f ? */
+ }
+@@ -155,6 +176,10 @@ addImage(ImageCache * cache, int x, int y, int sx, int sy, int w, int h)
+ static void
+ syncImage(void)
+ {
++ if (enable_inline_image) {
++ return;
++ }
++
+ fputs("3;\n", Imgdisplay_wf); /* XSync() */
+ fputs("4;\n", Imgdisplay_wf); /* put '\n' */
+ while (fflush(Imgdisplay_wf) != 0) {
+@@ -170,12 +195,16 @@ syncImage(void)
+ n_terminal_image = 0;
+ }
+
++void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
++void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
++
+ void
+ drawImage()
+ {
+ static char buf[64];
+ int j, draw = FALSE;
+ TerminalImage *i;
++ struct stat st ;
+
+ if (!activeImage)
+ return;
+@@ -183,6 +212,47 @@ drawImage()
+ return;
+ for (j = 0; j < n_terminal_image; j++) {
+ i = &terminal_image[j];
++
++ if (enable_inline_image) {
++ #if 0
++ fprintf(stderr,"file %s x %d y %d w %d h %d sx %d sy %d sw %d sh %d (ppc %d ppl %d)\n",
++ ((enable_inline_image == 2 || getenv("WINDOWID")) &&
++ i->cache->touch) ? i->cache->file : i->cache->url,
++ i->x, i->y,
++ i->cache->width > 0 ? i->cache->width : 0,
++ i->cache->height > 0 ? i->cache->height : 0,
++ i->sx, i->sy, i->width, i->height,
++ pixel_per_char_i, pixel_per_line_i);
++ #endif
++ (enable_inline_image == 2 ? put_image_sixel : put_image_osc5379)(
++ ((enable_inline_image == 2 /* sixel */ || getenv("WINDOWID")) &&
++ /* XXX I don't know why but sometimes i->cache->file doesn't exist. */
++ i->cache->touch && stat(i->cache->file,&st) == 0) ?
++ /* local */ i->cache->file : /* remote */ i->cache->url,
++ i->x / pixel_per_char_i,
++ i->y / pixel_per_line_i,
++ #if 1
++ i->cache->a_width > 0 ?
++ (i->cache->width + i->x % pixel_per_char_i + pixel_per_char_i - 1) /
++ pixel_per_char_i :
++ #endif
++ 0,
++
++ #if 1
++ i->cache->a_height > 0 ?
++ (i->cache->height + i->y % pixel_per_line_i + pixel_per_line_i - 1) /
++ pixel_per_line_i :
++ #endif
++ 0,
++ i->sx / pixel_per_char_i,
++ i->sy / pixel_per_line_i,
++ (i->width + i->sx % pixel_per_char_i + pixel_per_char_i - 1) / pixel_per_char_i,
++ (i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i,
++ n_terminal_image);
++
++ continue ;
++ }
++
+ if (!(i->cache->loaded & IMG_FLAG_LOADED &&
+ i->width > 0 && i->height > 0))
+ continue;
+@@ -206,9 +276,15 @@ drawImage()
+ fputs("\n", Imgdisplay_wf);
+ draw = TRUE;
+ }
+- if (!draw)
+- return;
+- syncImage();
++
++ if (!enable_inline_image) {
++ if (!draw)
++ return;
++ syncImage();
++ }
++ else
++ n_terminal_image = 0;
++
+ touch_cursor();
+ refresh();
+ }
+@@ -320,6 +396,8 @@ showImageProgress(Buffer *buf)
+ }
+ }
+ if (n) {
++ if (enable_inline_image && n == l)
++ drawImage();
+ message(Sprintf("%d/%d images loaded", l, n)->ptr,
+ buf->cursorX + buf->rootX, buf->cursorY + buf->rootY);
+ refresh();
+@@ -333,6 +411,9 @@ loadImage(Buffer *buf, int flag)
+ struct stat st;
+ int i, draw = FALSE;
+ /* int wait_st; */
++#ifdef DONT_CALL_GC_AFTER_FORK
++ char *loadargs[7];
++#endif
+
+ if (maxLoadImage > MAX_LOAD_IMAGE)
+ maxLoadImage = MAX_LOAD_IMAGE;
+@@ -346,7 +427,7 @@ loadImage(Buffer *buf, int flag)
+ }
+ for (i = 0; i < n_load_image; i++) {
+ cache = image_cache[i];
+- if (!cache)
++ if (!cache || !cache->touch)
+ continue;
+ if (lstat(cache->touch, &st))
+ continue;
+@@ -377,7 +458,7 @@ loadImage(Buffer *buf, int flag)
+
+ for (i = (buf != image_buffer) ? 0 : maxLoadImage; i < n_load_image; i++) {
+ cache = image_cache[i];
+- if (!cache)
++ if (!cache || !cache->touch)
+ continue;
+ if (cache->pid) {
+ kill(cache->pid, SIGKILL);
+@@ -403,7 +484,8 @@ loadImage(Buffer *buf, int flag)
+ }
+
+ if (draw && image_buffer) {
+- drawImage();
++ if (!enable_inline_image)
++ drawImage();
+ showImageProgress(image_buffer);
+ }
+
+@@ -431,8 +513,29 @@ loadImage(Buffer *buf, int flag)
+ break;
+ }
+ image_cache[i] = cache;
++ if (!cache->touch) {
++ continue;
++ }
+
+ flush_tty();
++#ifdef DONT_CALL_GC_AFTER_FORK
++ loadargs[0] = MyProgramName;
++ loadargs[1] = "-$$getimage";
++ loadargs[2] = conv_to_system(cache->url);
++ loadargs[3] = conv_to_system(parsedURL2Str(cache->current)->ptr);
++ loadargs[4] = cache->file;
++ loadargs[5] = cache->touch;
++ loadargs[6] = NULL;
++ if ((cache->pid = fork()) == 0) {
++ setup_child(FALSE, 0, -1);
++ execvp(MyProgramName, loadargs);
++ exit(1);
++ }
++ else if (cache->pid < 0) {
++ cache->pid = 0;
++ return;
++ }
++#else /* !DONT_CALL_GC_AFTER_FORK */
+ if ((cache->pid = fork()) == 0) {
+ Buffer *b;
+ /*
+@@ -458,6 +561,7 @@ loadImage(Buffer *buf, int flag)
+ cache->pid = 0;
+ return;
+ }
++#endif /* !DONT_CALL_GC_AFTER_FORK */
+ }
+ }
+
+@@ -492,12 +596,30 @@ getImage(Image * image, ParsedURL *current, int flag)
+ cache->url = image->url;
+ cache->current = current;
+ cache->file = tmpfname(TMPF_DFL, image->ext)->ptr;
+- cache->touch = tmpfname(TMPF_DFL, NULL)->ptr;
+ cache->pid = 0;
+ cache->index = 0;
+ cache->loaded = IMG_FLAG_UNLOADED;
+- cache->width = image->width;
+- cache->height = image->height;
++ if (enable_inline_image == 1) {
++ if (image->width > 0 && image->width % pixel_per_char_i > 0)
++ image->width += (pixel_per_char_i - image->width % pixel_per_char_i);
++
++ if (image->height > 0 && image->height % pixel_per_line_i > 0)
++ image->height += (pixel_per_line_i - image->height % pixel_per_line_i);
++ if (image->height > 0 && image->width > 0) {
++ cache->loaded = IMG_FLAG_LOADED;
++ }
++ }
++ if (cache->loaded == IMG_FLAG_UNLOADED) {
++ cache->touch = tmpfname(TMPF_DFL, NULL)->ptr;
++ }
++ else {
++ cache->touch = NULL;
++ }
++
++ cache->width = image->width ;
++ cache->height = image->height ;
++ cache->a_width = image->width;
++ cache->a_height = image->height;
+ putHash_sv(image_hash, key->ptr, (void *)cache);
+ }
+ if (flag != IMG_FLAG_SKIP) {
+@@ -519,6 +641,78 @@ getImage(Image * image, ParsedURL *current, int flag)
+ return cache;
+ }
+
++static int
++parseImageHeader(char *path, u_int *width, u_int *height)
++{
++ FILE *fp;
++ u_char buf[8];
++
++ if (!(fp = fopen(path, "r"))) return FALSE;
++
++ if (fread(buf, 1, 2, fp) != 2) goto error;
++
++ if (memcmp(buf, "\xff\xd8", 2) == 0) {
++ /* JPEG */
++ if (fseek(fp, 2, SEEK_CUR) < 0) goto error; /* 0xffe0 */
++ while (fread(buf, 1, 2, fp) == 2) {
++ size_t len = ((buf[0] << 8) | buf[1]) - 2;
++ if (fseek(fp, len, SEEK_CUR) < 0) goto error;
++ if (fread(buf, 1, 2, fp) == 2 &&
++ /* SOF0 or SOF2 */
++ (memcmp(buf, "\xff\xc0", 2) == 0 || memcmp(buf, "\xff\xc2", 2) == 0)) {
++ fseek(fp, 3, SEEK_CUR);
++ if (fread(buf, 1, 2, fp) == 2) {
++ *height = (buf[0] << 8) | buf[1];
++ if (fread(buf, 1, 2, fp) == 2) {
++ *width = (buf[0] << 8) | buf[1];
++ goto success;
++ }
++ }
++ break;
++ }
++ }
++ goto error;
++ }
++
++ if (fread(buf + 2, 1, 1, fp) != 1) goto error;
++
++ if (memcmp(buf, "GIF", 3) == 0) {
++ /* GIF */
++ if (fseek(fp, 3, SEEK_CUR) < 0) goto error;
++ if (fread(buf, 1, 2, fp) == 2) {
++ *width = (buf[1] << 8) | buf[0];
++ if (fread(buf, 1, 2, fp) == 2) {
++ *height = (buf[1] << 8) | buf[0];
++ goto success;
++ }
++ }
++ goto error;
++ }
++
++ if (fread(buf + 3, 1, 5, fp) != 5) goto error;
++
++ if (memcmp(buf, "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a", 8) == 0) {
++ /* PNG */
++ if (fseek(fp, 8, SEEK_CUR) < 0) goto error;
++ if (fread(buf, 1, 4, fp) == 4) {
++ *width = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
++ if (fread(buf, 1, 4, fp) == 4) {
++ *height = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
++ goto success;
++ }
++ }
++ goto error;
++ }
++
++error:
++ fclose(fp);
++ return FALSE;
++
++success:
++ fclose(fp);
++ return TRUE;
++}
++
+ int
+ getImageSize(ImageCache * cache)
+ {
+@@ -531,6 +725,10 @@ getImageSize(ImageCache * cache)
+ if (!cache || !(cache->loaded & IMG_FLAG_LOADED) ||
+ (cache->width > 0 && cache->height > 0))
+ return FALSE;
++
++ if (parseImageHeader(cache->file, &w, &h))
++ goto got_image_size;
++
+ tmp = Strnew();
+ if (!strchr(Imgdisplay, '/'))
+ Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL);
+@@ -546,6 +744,8 @@ getImageSize(ImageCache * cache)
+
+ if (!(w > 0 && h > 0))
+ return FALSE;
++
++got_image_size:
+ w = (int)(w * image_scale / 100 + 0.5);
+ if (w == 0)
+ w = 1;
+@@ -558,11 +758,11 @@ getImageSize(ImageCache * cache)
+ }
+ else if (cache->width < 0) {
+ int tmp = (int)((double)cache->height * w / h + 0.5);
+- cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
++ cache->a_width = cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
+ }
+ else if (cache->height < 0) {
+ int tmp = (int)((double)cache->width * h / w + 0.5);
+- cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
++ cache->a_height = cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
+ }
+ if (cache->width == 0)
+ cache->width = 1;
+diff --git a/indep.c b/indep.c
+index 65b04aa..5c5de06 100644
+--- a/indep.c
++++ b/indep.c
+@@ -357,6 +357,20 @@ strcasemstr(char *str, char *srch[], char **ret_ptr)
+ return -1;
+ }
+
++int
++strmatchlen(const char *s1, const char *s2, int maxlen)
++{
++ int i;
++
++ /* To allow the maxlen to be negatie (infinity),
++ * compare by "!=" instead of "<=". */
++ for (i = 0; i != maxlen; ++i) {
++ if (!s1[i] || !s2[i] || s1[i] != s2[i])
++ break;
++ }
++ return i;
++}
++
+ char *
+ remove_space(char *str)
+ {
+@@ -707,6 +721,111 @@ shell_quote(char *str)
+ return str;
+ }
+
++void *
++xrealloc(void *ptr, size_t size)
++{
++ void *newptr = realloc(ptr, size);
++ if (newptr == NULL) {
++ fprintf(stderr, "Out of memory\n");
++ exit(-1);
++ }
++ return newptr;
++}
++
++/* Define this as a separate function in case the free() has
++ * an incompatible prototype. */
++void
++xfree(void *ptr)
++{
++ free(ptr);
++}
++
++void *
++w3m_GC_realloc_atomic(void *ptr, size_t size)
++{
++ return ptr ? GC_REALLOC(ptr, size) : GC_MALLOC_ATOMIC(size);
++}
++
++void
++w3m_GC_free(void *ptr)
++{
++ GC_FREE(ptr);
++}
++
++void
++growbuf_init(struct growbuf *gb)
++{
++ gb->ptr = NULL;
++ gb->length = 0;
++ gb->area_size = 0;
++ gb->realloc_proc = &w3m_GC_realloc_atomic;
++ gb->free_proc = &w3m_GC_free;
++}
++
++void
++growbuf_init_without_GC(struct growbuf *gb)
++{
++ gb->ptr = NULL;
++ gb->length = 0;
++ gb->area_size = 0;
++ gb->realloc_proc = &xrealloc;
++ gb->free_proc = &xfree;
++}
++
++void
++growbuf_clear(struct growbuf *gb)
++{
++ (*gb->free_proc) (gb->ptr);
++ gb->ptr = NULL;
++ gb->length = 0;
++ gb->area_size = 0;
++}
++
++Str
++growbuf_to_Str(struct growbuf *gb)
++{
++ Str s;
++
++ if (gb->free_proc == &w3m_GC_free) {
++ growbuf_reserve(gb, gb->length + 1);
++ gb->ptr[gb->length] = '\0';
++ s = New(struct _Str);
++ s->ptr = gb->ptr;
++ s->length = gb->length;
++ s->area_size = gb->area_size;
++ } else {
++ s = Strnew_charp_n(gb->ptr, gb->length);
++ (*gb->free_proc) (gb->ptr);
++ }
++ gb->ptr = NULL;
++ gb->length = 0;
++ gb->area_size = 0;
++ return s;
++}
++
++void
++growbuf_reserve(struct growbuf *gb, int leastarea)
++{
++ int newarea;
++
++ if (gb->area_size < leastarea) {
++ newarea = gb->area_size * 3 / 2;
++ if (newarea < leastarea)
++ newarea = leastarea;
++ newarea += 16;
++ gb->ptr = (*gb->realloc_proc) (gb->ptr, newarea);
++ gb->area_size = newarea;
++ }
++}
++
++void
++growbuf_append(struct growbuf *gb, const char *src, int len)
++{
++ growbuf_reserve(gb, gb->length + len);
++ memcpy(&gb->ptr[gb->length], src, len);
++ gb->length += len;
++}
++
+ static char *
+ w3m_dir(const char *name, char *dft)
+ {
+diff --git a/indep.h b/indep.h
+index b3819a3..2809832 100644
+--- a/indep.h
++++ b/indep.h
+@@ -1,7 +1,7 @@
+ /* $Id: indep.h,v 1.16 2003/09/22 21:02:19 ukai Exp $ */
+ #ifndef INDEP_H
+ #define INDEP_H
+-#include <gc.h>
++#include "alloc.h"
+ #include "Str.h"
+ #include "config.h"
+
+@@ -12,6 +12,14 @@
+ #define FALSE 0
+ #endif /* FALSE */
+
++struct growbuf {
++ char *ptr;
++ int length;
++ int area_size;
++ void *(*realloc_proc) (void *, size_t);
++ void (*free_proc) (void *);
++};
++
+ #define RAW_MODE 0
+ #define PAGER_MODE 1
+ #define HTML_MODE 2
+@@ -52,6 +60,7 @@ extern int strncasecmp(const char *s1, const char *s2, size_t n);
+ extern char *strcasestr(const char *s1, const char *s2);
+ #endif
+ extern int strcasemstr(char *str, char *srch[], char **ret_ptr);
++int strmatchlen(const char *s1, const char *s2, int maxlen);
+ extern char *remove_space(char *str);
+ extern int non_null(char *s);
+ extern void cleanup_line(Str s, int mode);
+@@ -64,6 +73,18 @@ extern Str Str_url_unquote(Str x, int is_form, int safe);
+ extern Str Str_form_quote(Str x);
+ #define Str_form_unquote(x) Str_url_unquote((x), TRUE, FALSE)
+ extern char *shell_quote(char *str);
++#define xmalloc(s) xrealloc(NULL, s)
++extern void *xrealloc(void *ptr, size_t size);
++extern void xfree(void *ptr);
++extern void *w3m_GC_realloc_atomic(void *ptr, size_t size);
++extern void w3m_GC_free(void *ptr);
++extern void growbuf_init(struct growbuf *gb);
++extern void growbuf_init_without_GC(struct growbuf *gb);
++extern void growbuf_clear(struct growbuf *gb);
++extern Str growbuf_to_Str(struct growbuf *gb);
++extern void growbuf_reserve(struct growbuf *gb, int leastarea);
++extern void growbuf_append(struct growbuf *gb, const char *src, int len);
++#define GROWBUF_ADD_CHAR(gb,ch) ((((gb)->length>=(gb)->area_size)?growbuf_reserve(gb,(gb)->length+1):(void)0),(void)((gb)->ptr[(gb)->length++] = (ch)))
+
+ extern char *w3m_auxbin_dir();
+ extern char *w3m_lib_dir();
+@@ -71,10 +92,8 @@ extern char *w3m_etc_dir();
+ extern char *w3m_conf_dir();
+ extern char *w3m_help_dir();
+
+-#define New(type) ((type*)GC_MALLOC(sizeof(type)))
+-#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type)))
+-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
+-#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
+-#define New_Reuse(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
++#define NewWithoutGC(type) ((type*)xmalloc(sizeof(type)))
++#define NewWithoutGC_N(type,n) ((type*)xmalloc((n)*sizeof(type)))
++#define NewWithoutGC_Reuse(type,ptr,n) ((type*)xrealloc(ptr,(n)*sizeof(type)))
+
+ #endif /* INDEP_H */
+diff --git a/istream.c b/istream.c
+index 8967280..3126142 100644
+--- a/istream.c
++++ b/istream.c
+@@ -22,8 +22,8 @@
+ static void basic_close(int *handle);
+ static int basic_read(int *handle, char *buf, int len);
+
+-static void file_close(struct file_handle *handle);
+-static int file_read(struct file_handle *handle, char *buf, int len);
++static void file_close(struct io_file_handle *handle);
++static int file_read(struct io_file_handle *handle, char *buf, int len);
+
+ static int str_read(Str handle, char *buf, int len);
+
+@@ -35,12 +35,14 @@ static int ssl_read(struct ssl_handle *handle, char *buf, int len);
+ static int ens_read(struct ens_handle *handle, char *buf, int len);
+ static void ens_close(struct ens_handle *handle);
+
++static void memchop(char *p, int *len);
++
+ static void
+ do_update(BaseStream base)
+ {
+ int len;
+ base->stream.cur = base->stream.next = 0;
+- len = base->read(base->handle, base->stream.buf, base->stream.size);
++ len = (*base->read) (base->handle, base->stream.buf, base->stream.size);
+ if (len <= 0)
+ base->iseos = TRUE;
+ else
+@@ -66,12 +68,12 @@ init_buffer(BaseStream base, char *buf, int bufsize)
+ StreamBuffer sb = &base->stream;
+ sb->size = bufsize;
+ sb->cur = 0;
++ sb->buf = NewWithoutGC_N(uchar, bufsize);
+ if (buf) {
+- sb->buf = (uchar *) buf;
++ memcpy(sb->buf, buf, bufsize);
+ sb->next = bufsize;
+ }
+ else {
+- sb->buf = NewAtom_N(uchar, bufsize);
+ sb->next = 0;
+ }
+ base->iseos = FALSE;
+@@ -95,10 +97,10 @@ newInputStream(int des)
+ InputStream stream;
+ if (des < 0)
+ return NULL;
+- stream = New(union input_stream);
++ stream = NewWithoutGC(union input_stream);
+ init_base_stream(&stream->base, STREAM_BUF_SIZE);
+ stream->base.type = IST_BASIC;
+- stream->base.handle = New(int);
++ stream->base.handle = NewWithoutGC(int);
+ *(int *)stream->base.handle = des;
+ stream->base.read = (int (*)())basic_read;
+ stream->base.close = (void (*)())basic_close;
+@@ -111,10 +113,10 @@ newFileStream(FILE * f, void (*closep) ())
+ InputStream stream;
+ if (f == NULL)
+ return NULL;
+- stream = New(union input_stream);
++ stream = NewWithoutGC(union input_stream);
+ init_base_stream(&stream->base, STREAM_BUF_SIZE);
+ stream->file.type = IST_FILE;
+- stream->file.handle = New(struct file_handle);
++ stream->file.handle = NewWithoutGC(struct io_file_handle);
+ stream->file.handle->f = f;
+ if (closep)
+ stream->file.handle->close = closep;
+@@ -131,10 +133,10 @@ newStrStream(Str s)
+ InputStream stream;
+ if (s == NULL)
+ return NULL;
+- stream = New(union input_stream);
++ stream = NewWithoutGC(union input_stream);
+ init_str_stream(&stream->base, s);
+ stream->str.type = IST_STR;
+- stream->str.handle = s;
++ stream->str.handle = NULL;
+ stream->str.read = (int (*)())str_read;
+ stream->str.close = NULL;
+ return stream;
+@@ -147,10 +149,10 @@ newSSLStream(SSL * ssl, int sock)
+ InputStream stream;
+ if (sock < 0)
+ return NULL;
+- stream = New(union input_stream);
++ stream = NewWithoutGC(union input_stream);
+ init_base_stream(&stream->base, SSL_BUF_SIZE);
+ stream->ssl.type = IST_SSL;
+- stream->ssl.handle = New(struct ssl_handle);
++ stream->ssl.handle = NewWithoutGC(struct ssl_handle);
+ stream->ssl.handle->ssl = ssl;
+ stream->ssl.handle->sock = sock;
+ stream->ssl.read = (int (*)())ssl_read;
+@@ -166,14 +168,14 @@ newEncodedStream(InputStream is, char encoding)
+ if (is == NULL || (encoding != ENC_QUOTE && encoding != ENC_BASE64 &&
+ encoding != ENC_UUENCODE))
+ return is;
+- stream = New(union input_stream);
++ stream = NewWithoutGC(union input_stream);
+ init_base_stream(&stream->base, STREAM_BUF_SIZE);
+ stream->ens.type = IST_ENCODED;
+- stream->ens.handle = New(struct ens_handle);
++ stream->ens.handle = NewWithoutGC(struct ens_handle);
+ stream->ens.handle->is = is;
+ stream->ens.handle->pos = 0;
+ stream->ens.handle->encoding = encoding;
+- stream->ens.handle->s = NULL;
++ growbuf_init_without_GC(&stream->ens.handle->gb);
+ stream->ens.read = (int (*)())ens_read;
+ stream->ens.close = (void (*)())ens_close;
+ return stream;
+@@ -187,8 +189,10 @@ ISclose(InputStream stream)
+ stream->base.type & IST_UNCLOSE)
+ return -1;
+ prevtrap = mySignal(SIGINT, SIG_IGN);
+- stream->base.close(stream->base.handle);
++ stream->base.close (stream->base.handle);
+ mySignal(SIGINT, prevtrap);
++ xfree(stream->base.stream.buf);
++ xfree(stream);
+ return 0;
+ }
+
+@@ -218,122 +222,97 @@ ISundogetc(InputStream stream)
+ return -1;
+ }
+
+-#define MARGIN_STR_SIZE 10
+ Str
+-StrISgets(InputStream stream)
++StrISgets2(InputStream stream, char crnl)
+ {
+- BaseStream base;
+- StreamBuffer sb;
+- Str s = NULL;
+- uchar *p;
+- int len;
++ struct growbuf gb;
+
+ if (stream == NULL)
+- return '\0';
+- base = &stream->base;
+- sb = &base->stream;
+-
+- while (!base->iseos) {
+- if (MUST_BE_UPDATED(base)) {
+- do_update(base);
+- }
+- else {
+- if ((p = memchr(&sb->buf[sb->cur], '\n', sb->next - sb->cur))) {
+- len = p - &sb->buf[sb->cur] + 1;
+- if (s == NULL)
+- s = Strnew_size(len);
+- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len);
+- sb->cur += len;
+- return s;
+- }
+- else {
+- if (s == NULL)
+- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE);
+- Strcat_charp_n(s, (char *)&sb->buf[sb->cur],
+- sb->next - sb->cur);
+- sb->cur = sb->next;
+- }
+- }
+- }
+-
+- if (s == NULL)
+- return Strnew();
+- return s;
++ return NULL;
++ growbuf_init(&gb);
++ ISgets_to_growbuf(stream, &gb, crnl);
++ return growbuf_to_Str(&gb);
+ }
+
+-Str
+-StrmyISgets(InputStream stream)
++void
++ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl)
+ {
+- BaseStream base;
+- StreamBuffer sb;
+- Str s = NULL;
+- int i, len;
++ BaseStream base = &stream->base;
++ StreamBuffer sb = &base->stream;
++ int i;
+
+- if (stream == NULL)
+- return '\0';
+- base = &stream->base;
+- sb = &base->stream;
++ gb->length = 0;
+
+ while (!base->iseos) {
+ if (MUST_BE_UPDATED(base)) {
+ do_update(base);
++ continue;
+ }
+- else {
+- if (s && Strlastchar(s) == '\r') {
+- if (sb->buf[sb->cur] == '\n')
+- Strcat_char(s, (char)sb->buf[sb->cur++]);
+- return s;
++ if (crnl && gb->length > 0 && gb->ptr[gb->length - 1] == '\r') {
++ if (sb->buf[sb->cur] == '\n') {
++ GROWBUF_ADD_CHAR(gb, '\n');
++ ++sb->cur;
+ }
+- for (i = sb->cur;
+- i < sb->next && sb->buf[i] != '\n' && sb->buf[i] != '\r';
+- i++) ;
+- if (i < sb->next) {
+- len = i - sb->cur + 1;
+- if (s == NULL)
+- s = Strnew_size(len + MARGIN_STR_SIZE);
+- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len);
+- sb->cur = i + 1;
+- if (sb->buf[i] == '\n')
+- return s;
+- }
+- else {
+- if (s == NULL)
+- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE);
+- Strcat_charp_n(s, (char *)&sb->buf[sb->cur],
+- sb->next - sb->cur);
+- sb->cur = sb->next;
++ break;
++ }
++ for (i = sb->cur; i < sb->next; ++i) {
++ if (sb->buf[i] == '\n' || (crnl && sb->buf[i] == '\r')) {
++ ++i;
++ break;
+ }
+ }
++ growbuf_append(gb, &sb->buf[sb->cur], i - sb->cur);
++ sb->cur = i;
++ if (gb->length > 0 && gb->ptr[gb->length - 1] == '\n')
++ break;
+ }
+
+- if (s == NULL)
+- return Strnew();
+- return s;
++ growbuf_reserve(gb, gb->length + 1);
++ gb->ptr[gb->length] = '\0';
++ return;
+ }
+
++#ifdef unused
+ int
+ ISread(InputStream stream, Str buf, int count)
+ {
+- int rest, len;
++ int len;
++
++ if (count + 1 > buf->area_size) {
++ char *newptr = GC_MALLOC_ATOMIC(count + 1);
++ memcpy(newptr, buf->ptr, buf->length);
++ newptr[buf->length] = '\0';
++ buf->ptr = newptr;
++ buf->area_size = count + 1;
++ }
++ len = ISread_n(stream, buf->ptr, count);
++ buf->length = (len > 0) ? len : 0;
++ buf->ptr[buf->length] = '\0';
++ return (len > 0) ? 1 : 0;
++}
++#endif
++
++int
++ISread_n(InputStream stream, char *dst, int count)
++{
++ int len, l;
+ BaseStream base;
+
+- if (stream == NULL || (base = &stream->base)->iseos)
++ if (stream == NULL || count <= 0)
++ return -1;
++ if ((base = &stream->base)->iseos)
+ return 0;
+
+- len = buffer_read(&base->stream, buf->ptr, count);
+- rest = count - len;
++ len = buffer_read(&base->stream, dst, count);
+ if (MUST_BE_UPDATED(base)) {
+- len = base->read(base->handle, &buf->ptr[len], rest);
+- if (len <= 0) {
++ l = (*base->read) (base->handle, &dst[len], count - len);
++ if (l <= 0) {
+ base->iseos = TRUE;
+- len = 0;
++ } else {
++ len += l;
+ }
+- rest -= len;
+ }
+- Strtruncate(buf, count - rest);
+- if (buf->length > 0)
+- return 1;
+- return 0;
++ return len;
+ }
+
+ int
+@@ -645,6 +624,7 @@ basic_close(int *handle)
+ #else
+ close(*(int *)handle);
+ #endif
++ xfree(handle);
+ }
+
+ static int
+@@ -658,13 +638,14 @@ basic_read(int *handle, char *buf, int len)
+ }
+
+ static void
+-file_close(struct file_handle *handle)
++file_close(struct io_file_handle *handle)
+ {
+ handle->close(handle->f);
++ xfree(handle);
+ }
+
+ static int
+-file_read(struct file_handle *handle, char *buf, int len)
++file_read(struct io_file_handle *handle, char *buf, int len)
+ {
+ return fread(buf, 1, len, handle->f);
+ }
+@@ -682,6 +663,7 @@ ssl_close(struct ssl_handle *handle)
+ close(handle->sock);
+ if (handle->ssl)
+ SSL_free(handle->ssl);
++ xfree(handle);
+ }
+
+ static int
+@@ -717,38 +699,60 @@ static void
+ ens_close(struct ens_handle *handle)
+ {
+ ISclose(handle->is);
++ growbuf_clear(&handle->gb);
++ xfree(handle);
+ }
+
+ static int
+ ens_read(struct ens_handle *handle, char *buf, int len)
+ {
+- if (handle->s == NULL || handle->pos == handle->s->length) {
++ if (handle->pos == handle->gb.length) {
+ char *p;
+- handle->s = StrmyISgets(handle->is);
+- if (handle->s->length == 0)
++ struct growbuf gbtmp;
++
++ ISgets_to_growbuf(handle->is, &handle->gb, TRUE);
++ if (handle->gb.length == 0)
+ return 0;
+- cleanup_line(handle->s, PAGER_MODE);
+ if (handle->encoding == ENC_BASE64)
+- Strchop(handle->s);
++ memchop(handle->gb.ptr, &handle->gb.length);
+ else if (handle->encoding == ENC_UUENCODE) {
+- if (!strncmp(handle->s->ptr, "begin", 5))
+- handle->s = StrmyISgets(handle->is);
+- Strchop(handle->s);
++ if (handle->gb.length >= 5 &&
++ !strncmp(handle->gb.ptr, "begin", 5))
++ ISgets_to_growbuf(handle->is, &handle->gb, TRUE);
++ memchop(handle->gb.ptr, &handle->gb.length);
+ }
+- p = handle->s->ptr;
++ growbuf_init_without_GC(&gbtmp);
++ p = handle->gb.ptr;
+ if (handle->encoding == ENC_QUOTE)
+- handle->s = decodeQP(&p);
++ decodeQP_to_growbuf(&gbtmp, &p);
+ else if (handle->encoding == ENC_BASE64)
+- handle->s = decodeB(&p);
++ decodeB_to_growbuf(&gbtmp, &p);
+ else if (handle->encoding == ENC_UUENCODE)
+- handle->s = decodeU(&p);
++ decodeU_to_growbuf(&gbtmp, &p);
++ growbuf_clear(&handle->gb);
++ handle->gb = gbtmp;
+ handle->pos = 0;
+ }
+
+- if (len > handle->s->length - handle->pos)
+- len = handle->s->length - handle->pos;
++ if (len > handle->gb.length - handle->pos)
++ len = handle->gb.length - handle->pos;
+
+- bcopy(&handle->s->ptr[handle->pos], buf, len);
++ memcpy(buf, &handle->gb.ptr[handle->pos], len);
+ handle->pos += len;
+ return len;
+ }
++
++static void
++memchop(char *p, int *len)
++{
++ char *q;
++
++ for (q = p + *len; q > p; --q) {
++ if (q[-1] != '\n' && q[-1] != '\r')
++ break;
++ }
++ if (q != p + *len)
++ *q = '\0';
++ *len = q - p;
++ return;
++}
+diff --git a/istream.h b/istream.h
+index a220d8b..5a04be0 100644
+--- a/istream.h
++++ b/istream.h
+@@ -2,13 +2,13 @@
+ #ifndef IO_STREAM_H
+ #define IO_STREAM_H
+
++#include "indep.h"
+ #include <stdio.h>
+ #ifdef USE_SSL
+ #include <openssl/bio.h>
+ #include <openssl/x509.h>
+ #include <openssl/ssl.h>
+ #endif
+-#include "Str.h"
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+@@ -20,7 +20,7 @@ struct stream_buffer {
+
+ typedef struct stream_buffer *StreamBuffer;
+
+-struct file_handle {
++struct io_file_handle {
+ FILE *f;
+ void (*close) ();
+ };
+@@ -36,7 +36,7 @@ union input_stream;
+
+ struct ens_handle {
+ union input_stream *is;
+- Str s;
++ struct growbuf gb;
+ int pos;
+ char encoding;
+ };
+@@ -53,7 +53,7 @@ struct base_stream {
+
+ struct file_stream {
+ struct stream_buffer stream;
+- struct file_handle *handle;
++ struct io_file_handle *handle;
+ char type;
+ char iseos;
+ int (*read) ();
+@@ -119,9 +119,14 @@ extern InputStream newEncodedStream(InputStream is, char encoding);
+ extern int ISclose(InputStream stream);
+ extern int ISgetc(InputStream stream);
+ extern int ISundogetc(InputStream stream);
+-extern Str StrISgets(InputStream stream);
+-extern Str StrmyISgets(InputStream stream);
++extern Str StrISgets2(InputStream stream, char crnl);
++#define StrISgets(stream) StrISgets2(stream, FALSE)
++#define StrmyISgets(stream) StrISgets2(stream, TRUE)
++void ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl);
++#ifdef unused
+ extern int ISread(InputStream stream, Str buf, int count);
++#endif
++int ISread_n(InputStream stream, char *dst, int bufsize);
+ extern int ISfileno(InputStream stream);
+ extern int ISeos(InputStream stream);
+ #ifdef USE_SSL
+diff --git a/keybind.c b/keybind.c
+index a490962..fec0c65 100644
+--- a/keybind.c
++++ b/keybind.c
+@@ -91,7 +91,7 @@ unsigned char EscBKeymap[128] = {
+ /* 0 1 2 3 4 5 6 7 */
+ nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
+ /* 8 9 : ; < = > ? */
+- nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
++ nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd,
+ /* @ A B C D E F G */
+ nulcmd, movU, movD, movR, movL, nulcmd, goLineL, pgFore,
+ /* H I J K L M N O */
+diff --git a/libwc/ambwidth_map.awk b/libwc/ambwidth_map.awk
+index 8544f58..1d9d25f 100644
+--- a/libwc/ambwidth_map.awk
++++ b/libwc/ambwidth_map.awk
+@@ -3,9 +3,15 @@ BEGIN {
+ i = 0;
+ }
+ $2 == "A" {
+- code = sprintf("0x%s", $1);
+- if (strtonum(code) < 0x10000) {
+- map[i] = code
++ code = code2 = strtonum(sprintf("0x%s", $1))
++ if (match($1, /[.]+[0-9A-Fa-f]+/)) {
++ s = substr($1, RSTART, RLENGTH)
++ sub(/[.]+/, "0x", s)
++ code2 = strtonum(s)
++ }
++ for (; code <= code2; code++) {
++ if (code >= 0x10000) { break }
++ map[i] = sprintf("0x%04X", code)
+ i++;
+ }
+ }
+@@ -15,28 +21,14 @@ END {
+ prev = strtonum(map[0]);
+ for (j = 1; j < i; j++) {
+ cur = strtonum(map[j]);
+- if (match(map[j], "[.]+")) {
++ if (cur - prev > 1) {
+ map2[n] = sprintf("%s, %s", start, map[j - 1]);
+ n++;
+- gsub("[.]+", ", 0x", map[j])
+- map2[n] = map[j];
+- n++;
+- start = map[j + 1];
+- cur = strtonum(start);
+- } else {
+- if (cur - prev > 2) {
+- map2[n] = sprintf("%s, %s", start, map[j - 1]);
+- start = map[j];
+- n++;
+- }
+-
+- if (j == i - 1) {
+- map2[n] = sprintf("%s, %s", start, map[j]);
+- n++;
+- }
++ start = map[j];
+ }
+ prev = cur;
+ }
++ if (i > 0) { map2[n] = sprintf("%s, %s", start, map[i - 1]); n++ }
+
+ printf("static wc_map ucs_ambwidth_map[] = {\n");
+ for (j = 0; j < n; j++) {
+diff --git a/libwc/charset.c b/libwc/charset.c
+index 3f0b74d..ea79b1c 100644
+--- a/libwc/charset.c
++++ b/libwc/charset.c
+@@ -1,8 +1,7 @@
+
+ #include <stdlib.h>
+ #include <ctype.h>
+-#include <gc.h>
+-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
++#include "../alloc.h"
+
+ #include "wc.h"
+
+diff --git a/libwc/gb18030.c b/libwc/gb18030.c
+index c195d49..d5c9018 100644
+--- a/libwc/gb18030.c
++++ b/libwc/gb18030.c
+@@ -151,6 +151,7 @@ wc_ucs_to_gb18030(wc_uint32 ucs)
+ return cc;
+ }
+ cc.ccs = WC_CCS_UNKNOWN;
++ cc.code = 0;
+ return cc;
+ }
+ #endif
+diff --git a/libwc/map/ucs_ambwidth.map b/libwc/map/ucs_ambwidth.map
+index 6f03ba8..35ceedb 100644
+--- a/libwc/map/ucs_ambwidth.map
++++ b/libwc/map/ucs_ambwidth.map
+@@ -1,50 +1,82 @@
+ static wc_map ucs_ambwidth_map[] = {
+ { 0x00A1, 0x00A1 },
+ { 0x00A4, 0x00A4 },
+- { 0x00A7, 0x00AA },
+- { 0x00AD, 0x00BF },
++ { 0x00A7, 0x00A8 },
++ { 0x00AA, 0x00AA },
++ { 0x00AD, 0x00AE },
++ { 0x00B0, 0x00B4 },
++ { 0x00B6, 0x00BA },
++ { 0x00BC, 0x00BF },
+ { 0x00C6, 0x00C6 },
+ { 0x00D0, 0x00D0 },
+ { 0x00D7, 0x00D8 },
+ { 0x00DE, 0x00E1 },
+- { 0x00E6, 0x00ED },
+- { 0x00F0, 0x00F3 },
+- { 0x00F7, 0x00FE },
++ { 0x00E6, 0x00E6 },
++ { 0x00E8, 0x00EA },
++ { 0x00EC, 0x00ED },
++ { 0x00F0, 0x00F0 },
++ { 0x00F2, 0x00F3 },
++ { 0x00F7, 0x00FA },
++ { 0x00FC, 0x00FC },
++ { 0x00FE, 0x00FE },
+ { 0x0101, 0x0101 },
+- { 0x0111, 0x0113 },
++ { 0x0111, 0x0111 },
++ { 0x0113, 0x0113 },
+ { 0x011B, 0x011B },
+ { 0x0126, 0x0127 },
+ { 0x012B, 0x012B },
+ { 0x0131, 0x0133 },
+ { 0x0138, 0x0138 },
+- { 0x013F, 0x0144 },
+- { 0x0148, 0x014D },
++ { 0x013F, 0x0142 },
++ { 0x0144, 0x0144 },
++ { 0x0148, 0x014B },
++ { 0x014D, 0x014D },
+ { 0x0152, 0x0153 },
+ { 0x0166, 0x0167 },
+ { 0x016B, 0x016B },
+- { 0x01CE, 0x01DC },
++ { 0x01CE, 0x01CE },
++ { 0x01D0, 0x01D0 },
++ { 0x01D2, 0x01D2 },
++ { 0x01D4, 0x01D4 },
++ { 0x01D6, 0x01D6 },
++ { 0x01D8, 0x01D8 },
++ { 0x01DA, 0x01DA },
++ { 0x01DC, 0x01DC },
+ { 0x0251, 0x0251 },
+ { 0x0261, 0x0261 },
+ { 0x02C4, 0x02C4 },
+- { 0x02C7, 0x02CD },
++ { 0x02C7, 0x02C7 },
++ { 0x02C9, 0x02CB },
++ { 0x02CD, 0x02CD },
+ { 0x02D0, 0x02D0 },
+- { 0x02D8, 0x02DF },
++ { 0x02D8, 0x02DB },
++ { 0x02DD, 0x02DD },
++ { 0x02DF, 0x02DF },
+ { 0x0300, 0x036F },
+- { 0x0391, 0x03A9 },
+- { 0x03B1, 0x03C9 },
++ { 0x0391, 0x03A1 },
++ { 0x03A3, 0x03A9 },
++ { 0x03B1, 0x03C1 },
++ { 0x03C3, 0x03C9 },
+ { 0x0401, 0x0401 },
+- { 0x0410, 0x0451 },
++ { 0x0410, 0x044F },
++ { 0x0451, 0x0451 },
+ { 0x2010, 0x2010 },
+- { 0x2013, 0x2019 },
++ { 0x2013, 0x2016 },
++ { 0x2018, 0x2019 },
+ { 0x201C, 0x201D },
+- { 0x2020, 0x2027 },
+- { 0x2030, 0x2035 },
++ { 0x2020, 0x2022 },
++ { 0x2024, 0x2027 },
++ { 0x2030, 0x2030 },
++ { 0x2032, 0x2033 },
++ { 0x2035, 0x2035 },
+ { 0x203B, 0x203B },
+ { 0x203E, 0x203E },
+ { 0x2074, 0x2074 },
+- { 0x207F, 0x2084 },
++ { 0x207F, 0x207F },
++ { 0x2081, 0x2084 },
+ { 0x20AC, 0x20AC },
+- { 0x2103, 0x2105 },
++ { 0x2103, 0x2103 },
++ { 0x2105, 0x2105 },
+ { 0x2109, 0x2109 },
+ { 0x2113, 0x2113 },
+ { 0x2116, 0x2116 },
+@@ -52,21 +84,28 @@ static wc_map ucs_ambwidth_map[] = {
+ { 0x2126, 0x2126 },
+ { 0x212B, 0x212B },
+ { 0x2153, 0x2154 },
+- { 0x215B, 0x216B },
++ { 0x215B, 0x215E },
++ { 0x2160, 0x216B },
+ { 0x2170, 0x2179 },
+ { 0x2189, 0x2189 },
+ { 0x2190, 0x2199 },
+ { 0x21B8, 0x21B9 },
+- { 0x21D2, 0x21D4 },
++ { 0x21D2, 0x21D2 },
++ { 0x21D4, 0x21D4 },
+ { 0x21E7, 0x21E7 },
+- { 0x2200, 0x2203 },
++ { 0x2200, 0x2200 },
++ { 0x2202, 0x2203 },
+ { 0x2207, 0x2208 },
+ { 0x220B, 0x220B },
+- { 0x220F, 0x2211 },
++ { 0x220F, 0x220F },
++ { 0x2211, 0x2211 },
+ { 0x2215, 0x2215 },
+ { 0x221A, 0x221A },
+ { 0x221D, 0x2220 },
+- { 0x2223, 0x222E },
++ { 0x2223, 0x2223 },
++ { 0x2225, 0x2225 },
++ { 0x2227, 0x222C },
++ { 0x222E, 0x222E },
+ { 0x2234, 0x2237 },
+ { 0x223C, 0x223D },
+ { 0x2248, 0x2248 },
+@@ -83,11 +122,13 @@ static wc_map ucs_ambwidth_map[] = {
+ { 0x22A5, 0x22A5 },
+ { 0x22BF, 0x22BF },
+ { 0x2312, 0x2312 },
+- { 0x2460, 0x254B },
++ { 0x2460, 0x24E9 },
++ { 0x24EB, 0x254B },
+ { 0x2550, 0x2573 },
+ { 0x2580, 0x258F },
+ { 0x2592, 0x2595 },
+- { 0x25A0, 0x25A9 },
++ { 0x25A0, 0x25A1 },
++ { 0x25A3, 0x25A9 },
+ { 0x25B2, 0x25B3 },
+ { 0x25B6, 0x25B7 },
+ { 0x25BC, 0x25BD },
+@@ -101,12 +142,20 @@ static wc_map ucs_ambwidth_map[] = {
+ { 0x2609, 0x2609 },
+ { 0x260E, 0x260F },
+ { 0x2614, 0x2615 },
+- { 0x261C, 0x261E },
+- { 0x2640, 0x2642 },
+- { 0x2660, 0x266F },
++ { 0x261C, 0x261C },
++ { 0x261E, 0x261E },
++ { 0x2640, 0x2640 },
++ { 0x2642, 0x2642 },
++ { 0x2660, 0x2661 },
++ { 0x2663, 0x2665 },
++ { 0x2667, 0x266A },
++ { 0x266C, 0x266D },
++ { 0x266F, 0x266F },
+ { 0x269E, 0x269F },
+ { 0x26BE, 0x26BF },
+- { 0x26C4, 0x26E3 },
++ { 0x26C4, 0x26CD },
++ { 0x26CF, 0x26E1 },
++ { 0x26E3, 0x26E3 },
+ { 0x26E8, 0x26FF },
+ { 0x273D, 0x273D },
+ { 0x2757, 0x2757 },
+diff --git a/libwc/status.c b/libwc/status.c
+index d25c924..4a2ebf8 100644
+--- a/libwc/status.c
++++ b/libwc/status.c
+@@ -1,7 +1,6 @@
+
+ #include <string.h>
+-#include <gc.h>
+-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
++#include "../alloc.h"
+
+ #include "wc.h"
+ #ifdef USE_UNICODE
+diff --git a/libwc/ucs.c b/libwc/ucs.c
+index d7b6948..5e78b4e 100644
+--- a/libwc/ucs.c
++++ b/libwc/ucs.c
+@@ -100,6 +100,7 @@ wc_ucs_to_any(wc_uint32 ucs, wc_table *t)
+ return t->conv(t->ccs, map->code2);
+ }
+ cc.ccs = WC_CCS_UNKNOWN;
++ cc.code = 0;
+ return cc;
+ }
+
+diff --git a/linein.c b/linein.c
+index b7e81b6..572b015 100644
+--- a/linein.c
++++ b/linein.c
+@@ -1026,7 +1026,7 @@ _prev(void)
+ strCurrentBuf = strBuf;
+ }
+ if (DecodeURL && (cm_mode & CPL_URL) )
+- p = url_unquote_conv(p, 0);
++ p = url_decode2(p, NULL);
+ strBuf = Strnew_charp(p);
+ CLen = CPos = setStrType(strBuf, strProp);
+ offset = 0;
+@@ -1045,7 +1045,7 @@ _next(void)
+ p = nextHist(hist);
+ if (p) {
+ if (DecodeURL && (cm_mode & CPL_URL) )
+- p = url_unquote_conv(p, 0);
++ p = url_decode2(p, NULL);
+ strBuf = Strnew_charp(p);
+ }
+ else {
+diff --git a/local.c b/local.c
+index f5a73a2..9428319 100644
+--- a/local.c
++++ b/local.c
+@@ -109,6 +109,7 @@ loadLocalDir(char *dname)
+ n++;
+ }
+ }
++ closedir(d);
+
+ if (multicolList) {
+ l = COLS / (maxlen + 2);
+@@ -359,6 +360,10 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
+ int status;
+ pid_t pid;
+ char *file = uri, *name = uri, *path_info = NULL, *tmpf = NULL;
++#ifdef HAVE_CHDIR
++ char *cgi_dir;
++#endif
++ char *cgi_basename;
+
+ #ifdef __MINGW32_VERSION
+ return NULL;
+@@ -373,7 +378,14 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
+ if (!fw)
+ return NULL;
+ }
++ if (qstr)
++ uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
++#ifdef HAVE_CHDIR
++ cgi_dir = mydirname(file);
++#endif
++ cgi_basename = mybasename(file);
+ pid = open_pipe_rw(&fr, NULL);
++ /* Don't invoke gc after here, or the program might crash in some platforms */
+ if (pid < 0)
+ return NULL;
+ else if (pid) {
+@@ -383,8 +395,6 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
+ }
+ setup_child(TRUE, 2, fw ? fileno(fw) : -1);
+
+- if (qstr)
+- uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
+ set_cgi_environ(name, file, uri);
+ if (path_info)
+ set_environ("PATH_INFO", path_info);
+@@ -415,11 +425,11 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
+ }
+
+ #ifdef HAVE_CHDIR /* ifndef __EMX__ ? */
+- chdir(mydirname(file));
++ chdir(cgi_dir);
+ #endif
+- execl(file, mybasename(file), NULL);
++ execl(file, cgi_basename, NULL);
+ fprintf(stderr, "execl(\"%s\", \"%s\", NULL): %s\n",
+- file, mybasename(file), strerror(errno));
++ file, cgi_basename, strerror(errno));
+ exit(1);
+ return NULL;
+ #endif
+diff --git a/main.c b/main.c
+index b421943..d37b243 100644
+--- a/main.c
++++ b/main.c
+@@ -11,6 +11,9 @@
+ #include <sys/wait.h>
+ #endif
+ #include <time.h>
++#if defined(__CYGWIN__) && defined(USE_BINMODE_STREAM)
++#include <io.h>
++#endif
+ #include "terms.h"
+ #include "myctype.h"
+ #include "regex.h"
+@@ -119,6 +122,8 @@ static int searchKeyNum(void);
+ #define help() fusage(stdout, 0)
+ #define usage() fusage(stderr, 1)
+
++int enable_inline_image; /* 1 == mlterm OSC 5379, 2 == sixel */
++
+ static void
+ fversion(FILE * f)
+ {
+@@ -200,10 +205,12 @@ fusage(FILE * f, int err)
+ #ifdef USE_M17N
+ fprintf(f, " -I charset document charset\n");
+ fprintf(f, " -O charset display/output charset\n");
++#if 0 /* use -O{s|j|e} instead */
+ fprintf(f, " -e EUC-JP\n");
+ fprintf(f, " -s Shift_JIS\n");
+ fprintf(f, " -j JIS\n");
+ #endif
++#endif
+ fprintf(f, " -B load bookmark\n");
+ fprintf(f, " -bookmark file specify bookmark file\n");
+ fprintf(f, " -T type specify content-type\n");
+@@ -248,7 +255,11 @@ fusage(FILE * f, int err)
+ #endif /* USE_COOKIE */
+ fprintf(f, " -graph use DEC special graphics for border of table and menu\n");
+ fprintf(f, " -no-graph use ACII character for border of table and menu\n");
++#if 1 /* pager requires -s */
++ fprintf(f, " -s squeeze multiple blank lines\n");
++#else
+ fprintf(f, " -S squeeze multiple blank lines\n");
++#endif
+ fprintf(f, " -W toggle wrap search mode\n");
+ fprintf(f, " -X don't use termcap init/deinit\n");
+ fprintf(f,
+@@ -372,6 +383,13 @@ make_optional_header_string(char *s)
+ return hs;
+ }
+
++static void *
++die_oom(size_t bytes)
++{
++ fprintf(stderr, "Out of memory: %lu bytes unavailable!\n", (unsigned long)bytes);
++ exit(1);
++}
++
+ int
+ main(int argc, char **argv, char **envp)
+ {
+@@ -397,7 +415,11 @@ main(int argc, char **argv, char **envp)
+ wc_ces CodePage;
+ #endif
+ #endif
++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
++ char **getimage_args = NULL;
++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
+ GC_INIT();
++ GC_set_oom_fn(die_oom);
+ #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET))
+ setlocale(LC_ALL, "");
+ #endif
+@@ -418,6 +440,10 @@ main(int argc, char **argv, char **envp)
+
+ CurrentDir = currentdir();
+ CurrentPid = (int)getpid();
++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
++ if (argv[0] && *argv[0])
++ MyProgramName = argv[0];
++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
+ BookmarkFile = NULL;
+ config_file = NULL;
+
+@@ -530,12 +556,14 @@ main(int argc, char **argv, char **envp)
+ PagerMax = atoi(argv[i]);
+ }
+ #ifdef USE_M17N
++#if 0 /* use -O{s|j|e} instead */
+ else if (!strcmp("-s", argv[i]))
+ DisplayCharset = WC_CES_SHIFT_JIS;
+ else if (!strcmp("-j", argv[i]))
+ DisplayCharset = WC_CES_ISO_2022_JP;
+ else if (!strcmp("-e", argv[i]))
+ DisplayCharset = WC_CES_EUC_JP;
++#endif
+ else if (!strncmp("-I", argv[i], 2)) {
+ if (argv[i][2] != '\0')
+ p = argv[i] + 2;
+@@ -660,6 +688,12 @@ main(int argc, char **argv, char **envp)
+ }
+ }
+ #endif
++ else if (!strcmp("-ri", argv[i])) {
++ enable_inline_image = 1;
++ }
++ else if (!strcmp("-sixel", argv[i])) {
++ enable_inline_image = 2;
++ }
+ else if (!strcmp("-num", argv[i]))
+ showLineNum = TRUE;
+ else if (!strcmp("-no-proxy", argv[i]))
+@@ -703,7 +737,11 @@ main(int argc, char **argv, char **envp)
+ accept_cookie = TRUE;
+ }
+ #endif /* USE_COOKIE */
++#if 1 /* pager requires -s */
++ else if (!strcmp("-s", argv[i]))
++#else
+ else if (!strcmp("-S", argv[i]))
++#endif
+ squeezeBlankLine = TRUE;
+ else if (!strcmp("-X", argv[i]))
+ Do_not_use_ti_te = TRUE;
+@@ -735,6 +773,15 @@ main(int argc, char **argv, char **envp)
+ else if (!strcmp("-reqlog",argv[i])) {
+ w3m_reqlog=rcFile("request.log");
+ }
++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
++ else if (!strcmp("-$$getimage", argv[i])) {
++ ++i;
++ getimage_args = argv + i;
++ i += 4;
++ if (i > argc)
++ usage();
++ }
++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
+ else {
+ usage();
+ }
+@@ -823,6 +870,30 @@ main(int argc, char **argv, char **envp)
+
+ if (w3m_backend)
+ backend();
++#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
++ if (getimage_args) {
++ char *image_url = conv_from_system(getimage_args[0]);
++ char *base_url = conv_from_system(getimage_args[1]);
++ ParsedURL base_pu;
++
++ parseURL2(base_url, &base_pu, NULL);
++ image_source = getimage_args[2];
++ newbuf = loadGeneralFile(image_url, &base_pu, NULL, 0, NULL);
++ if (!newbuf || !newbuf->real_type ||
++ strncasecmp(newbuf->real_type, "image/", 6))
++ unlink(getimage_args[2]);
++#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)
++ symlink(getimage_args[2], getimage_args[3]);
++#else
++ {
++ FILE *f = fopen(getimage_args[3], "w");
++ if (f)
++ fclose(f);
++ }
++#endif
++ w3m_exit(0);
++ }
++#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
+
+ if (w3m_dump)
+ mySignal(SIGINT, SIG_IGN);
+@@ -833,7 +904,12 @@ main(int argc, char **argv, char **envp)
+ mySignal(SIGPIPE, SigPipe);
+ #endif
+
++#if GC_VERSION_MAJOR >= 7 && GC_VERSION_MINOR >= 2
++ orig_GC_warn_proc = GC_get_warn_proc();
++ GC_set_warn_proc(wrap_GC_warn_proc);
++#else
+ orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc);
++#endif
+ err_msg = Strnew();
+ if (load_argc == 0) {
+ /* no URL specified */
+@@ -894,12 +970,17 @@ main(int argc, char **argv, char **envp)
+ if (i >= 0) {
+ SearchHeader = search_header;
+ DefaultType = default_type;
++ char *url;
++
++ url = load_argv[i];
++ if (getURLScheme(&url) == SCM_MISSING && !ArgvIsURL)
++ url = file_to_url(load_argv[i]);
++ else
++ url = url_encode(conv_from_system(load_argv[i]), NULL, 0);
+ if (w3m_dump == DUMP_HEAD) {
+ request = New(FormList);
+ request->method = FORM_METHOD_HEAD;
+- newbuf =
+- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
+- request);
++ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
+ }
+ else {
+ if (post_file && i == 0) {
+@@ -928,9 +1009,7 @@ main(int argc, char **argv, char **envp)
+ else {
+ request = NULL;
+ }
+- newbuf =
+- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
+- request);
++ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
+ }
+ if (newbuf == NULL) {
+ /* FIXME: gettextize? */
+@@ -945,7 +1024,7 @@ main(int argc, char **argv, char **envp)
+ break;
+ case SCM_LOCAL:
+ case SCM_LOCAL_CGI:
+- unshiftHist(LoadHist, conv_from_system(load_argv[i]));
++ unshiftHist(LoadHist, url);
+ default:
+ pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr);
+ break;
+@@ -1246,6 +1325,12 @@ dump_extra(Buffer *buf)
+ #endif
+ }
+
++static int
++cmp_anchor_hseq(const void *a, const void *b)
++{
++ return (*((const Anchor **) a))->hseq - (*((const Anchor **) b))->hseq;
++}
++
+ static void
+ do_dump(Buffer *buf)
+ {
+@@ -1266,18 +1351,20 @@ do_dump(Buffer *buf)
+ int i;
+ saveBuffer(buf, stdout, FALSE);
+ if (displayLinkNumber && buf->href) {
++ int nanchor = buf->href->nanchor;
+ printf("\nReferences:\n\n");
+- for (i = 0; i < buf->href->nanchor; i++) {
+- ParsedURL pu;
+- static Str s = NULL;
+- if (buf->href->anchors[i].slave)
++ Anchor **in_order = New_N(Anchor *, buf->href->nanchor);
++ for (i = 0; i < nanchor; i++)
++ in_order[i] = buf->href->anchors + i;
++ qsort(in_order, nanchor, sizeof(Anchor *), cmp_anchor_hseq);
++ for (i = 0; i < nanchor; i++) {
++ ParsedURL pu;
++ char *url;
++ if (in_order[i]->slave)
+ continue;
+- parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf));
+- s = parsedURL2Str(&pu);
+- if (DecodeURL)
+- s = Strnew_charp(url_unquote_conv
+- (s->ptr, Currentbuf->document_charset));
+- printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, s->ptr);
++ parseURL2(in_order[i]->url, &pu, baseURL(buf));
++ url = url_decode2(parsedURL2Str(&pu)->ptr, Currentbuf);
++ printf("[%d] %s\n", in_order[i]->hseq + 1, url);
+ }
+ }
+ }
+@@ -1566,6 +1653,18 @@ DEFUN(pgBack, PREV_PAGE, "Move to previous page")
+ * (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL);
+ }
+
++/* Move half page forward */
++DEFUN(hpgFore, NEXT_HALF_PAGE, "Scroll down half page")
++{
++ nscroll(searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
++}
++
++/* Move half page backward */
++DEFUN(hpgBack, PREV_HALF_PAGE, "Scroll up half page")
++{
++ nscroll(-searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
++}
++
+ /* 1 line up */
+ DEFUN(lup1, UP, "Scroll up one line")
+ {
+@@ -1844,6 +1943,10 @@ srch_nxtprv(int reverse)
+ result = srchcore(SearchString, routine[reverse]);
+ if (result & SR_FOUND)
+ clear_mark(Currentbuf->currentLine);
++ else {
++ if (reverse == 0)
++ Currentbuf->pos -= 1;
++ }
+ displayBuffer(Currentbuf, B_NORMAL);
+ disp_srchresult(result, (reverse ? "Backward: " : "Forward: "),
+ SearchString);
+@@ -2261,7 +2364,7 @@ DEFUN(movR1, MOVE_RIGHT1,
+ static wc_uint32
+ getChar(char *p)
+ {
+- return wc_any_to_ucs(wtf_parse1(&p));
++ return wc_any_to_ucs(wtf_parse1((wc_uchar **)&p));
+ }
+
+ static int
+@@ -2804,12 +2907,15 @@ loadLink(char *url, char *target, char *referer, FormList *request)
+ union frameset_element *f_element = NULL;
+ int flag = 0;
+ ParsedURL *base, pu;
++ const int *no_referer_ptr;
+
+ message(Sprintf("loading %s", url)->ptr, 0, 0);
+ refresh();
+
++ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL);
+ base = baseURL(Currentbuf);
+- if (base == NULL ||
++ if ((no_referer_ptr && *no_referer_ptr) ||
++ base == NULL ||
+ base->scheme == SCM_LOCAL || base->scheme == SCM_LOCAL_CGI)
+ referer = NO_REFERER;
+ if (referer == NULL)
+@@ -3568,6 +3674,33 @@ DEFUN(lastA, LINK_END, "Go to the last link")
+ displayBuffer(Currentbuf, B_NORMAL);
+ }
+
++/* go to the nth anchor */
++DEFUN(nthA, LINK_N, "Go to the nth link")
++{
++ HmarkerList *hl = Currentbuf->hmarklist;
++ BufferPoint *po;
++ Anchor *an;
++
++ int n = searchKeyNum();
++ if (n < 0 || n > hl->nmark) return;
++
++ if (Currentbuf->firstLine == NULL)
++ return;
++ if (!hl || hl->nmark == 0)
++ return;
++
++ po = hl->marks + n-1;
++ an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
++ if (an == NULL)
++ an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos);
++ if (an == NULL) return;
++
++ gotoLine(Currentbuf, po->line);
++ Currentbuf->pos = po->pos;
++ arrangeCursor(Currentbuf);
++ displayBuffer(Currentbuf, B_NORMAL);
++}
++
+ /* go to the next anchor */
+ DEFUN(nextA, NEXT_LINK, "Move to next link")
+ {
+@@ -4055,6 +4188,7 @@ goURL0(char *prompt, int relative)
+ char *url, *referer;
+ ParsedURL p_url, *current;
+ Buffer *cur_buf = Currentbuf;
++ const int *no_referer_ptr;
+
+ url = searchKeyData();
+ if (url == NULL) {
+@@ -4064,11 +4198,8 @@ goURL0(char *prompt, int relative)
+ current = baseURL(Currentbuf);
+ if (current) {
+ char *c_url = parsedURL2Str(current)->ptr;
+- if (DefaultURLString == DEFAULT_URL_CURRENT) {
+- url = c_url;
+- if (DecodeURL)
+- url = url_unquote_conv(url, 0);
+- }
++ if (DefaultURLString == DEFAULT_URL_CURRENT)
++ url = url_decode2(c_url, NULL);
+ else
+ pushHist(hist, c_url);
+ }
+@@ -4077,11 +4208,8 @@ goURL0(char *prompt, int relative)
+ char *a_url;
+ parseURL2(a->url, &p_url, current);
+ a_url = parsedURL2Str(&p_url)->ptr;
+- if (DefaultURLString == DEFAULT_URL_LINK) {
+- url = a_url;
+- if (DecodeURL)
+- url = url_unquote_conv(url, Currentbuf->document_charset);
+- }
++ if (DefaultURLString == DEFAULT_URL_LINK)
++ url = url_decode2(a_url, Currentbuf);
+ else
+ pushHist(hist, a_url);
+ }
+@@ -4089,15 +4217,22 @@ goURL0(char *prompt, int relative)
+ if (url != NULL)
+ SKIP_BLANKS(url);
+ }
+-#ifdef USE_M17N
+- if (url != NULL) {
+- if ((relative || *url == '#') && Currentbuf->document_charset)
+- url = wc_conv_strict(url, InnerCharset,
+- Currentbuf->document_charset)->ptr;
++ if (relative) {
++ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL);
++ current = baseURL(Currentbuf);
++ if ((no_referer_ptr && *no_referer_ptr) ||
++ current == NULL ||
++ current->scheme == SCM_LOCAL || current->scheme == SCM_LOCAL_CGI)
++ referer = NO_REFERER;
+ else
+- url = conv_to_system(url);
++ referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
++ url = url_encode(url, current, Currentbuf->document_charset);
++ }
++ else {
++ current = NULL;
++ referer = NULL;
++ url = url_encode(url, NULL, 0);
+ }
+-#endif
+ if (url == NULL || *url == '\0') {
+ displayBuffer(Currentbuf, B_FORCE_REDRAW);
+ return;
+@@ -4106,14 +4241,6 @@ goURL0(char *prompt, int relative)
+ gotoLabel(url + 1);
+ return;
+ }
+- if (relative) {
+- current = baseURL(Currentbuf);
+- referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
+- }
+- else {
+- current = NULL;
+- referer = NULL;
+- }
+ parseURL2(url, &p_url, current);
+ pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);
+ cmd_loadURL(url, current, referer, NULL);
+@@ -4510,8 +4637,7 @@ _peekURL(int only_img)
+ s = parsedURL2Str(&pu);
+ }
+ if (DecodeURL)
+- s = Strnew_charp(url_unquote_conv
+- (s->ptr, Currentbuf->document_charset));
++ s = Strnew_charp(url_decode2(s->ptr, Currentbuf));
+ #ifdef USE_M17N
+ s = checkType(s, &pp, NULL);
+ p = NewAtom_N(Lineprop, s->length);
+@@ -4570,7 +4696,7 @@ DEFUN(curURL, PEEK, "Peek current URL")
+ offset = 0;
+ s = currentURL();
+ if (DecodeURL)
+- s = Strnew_charp(url_unquote_conv(s->ptr, 0));
++ s = Strnew_charp(url_decode2(s->ptr, NULL));
+ #ifdef USE_M17N
+ s = checkType(s, &pp, NULL);
+ p = NewAtom_N(Lineprop, s->length);
+@@ -5398,6 +5524,58 @@ DEFUN(mouse, MOUSE, "mouse operation")
+ process_mouse(btn, x, y);
+ }
+
++DEFUN(sgrmouse, SGRMOUSE, "SGR 1006 mouse operation")
++{
++ int btn = 0, x = 0, y = 0;
++ unsigned char c;
++
++ do {
++ c = getch();
++ if (IS_DIGIT(c))
++ btn = btn * 10 + c - '0';
++ else if (c == ';')
++ break;
++ else
++ return;
++ } while (1);
++
++#if defined(__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005
++ if (cygwin_mouse_btn_swapped) {
++ if (btn == MOUSE_BTN2_DOWN)
++ btn = MOUSE_BTN3_DOWN;
++ else if (btn == MOUSE_BTN3_DOWN)
++ btn = MOUSE_BTN2_DOWN;
++ };
++#endif
++
++ do {
++ c = getch();
++ if (IS_DIGIT(c))
++ x = x * 10 + c - '0';
++ else if (c == ';')
++ break;
++ else
++ return;
++ } while (1);
++
++ do {
++ c = getch();
++ if (IS_DIGIT(c))
++ y = y * 10 + c - '0';
++ else if (c == 'M')
++ break;
++ else if (c == 'm') {
++ btn |= 3;
++ break;
++ } else
++ return;
++ } while (1);
++
++ if (x < 0 || x >= COLS || y < 0 || y > LASTLINE)
++ return;
++ process_mouse(btn, x, y);
++}
++
+ #ifdef USE_GPM
+ int
+ gpm_process_mouse(Gpm_Event * event, void *data)
+@@ -5604,7 +5782,7 @@ execdict(char *word)
+ disp_message("Execution failed", TRUE);
+ return;
+ }
+- else {
++ else if (buf != NO_BUFFER) {
+ buf->filename = w;
+ buf->buffername = Sprintf("%s %s", DICTBUFFERNAME, word)->ptr;
+ if (buf->type == NULL)
+@@ -5671,7 +5849,7 @@ set_buffer_environ(Buffer *buf)
+ set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url));
+ else
+ set_environ("W3M_CURRENT_FORM", "");
+- set_environ("W3M_CURRENT_LINE", Sprintf("%d",
++ set_environ("W3M_CURRENT_LINE", Sprintf("%ld",
+ l->real_linenumber)->ptr);
+ set_environ("W3M_CURRENT_COLUMN", Sprintf("%d",
+ buf->currentColumn +
+@@ -5747,8 +5925,14 @@ deleteFiles()
+ Firstbuf = buf;
+ }
+ }
+- while ((f = popText(fileToDelete)) != NULL)
++ while ((f = popText(fileToDelete)) != NULL) {
+ unlink(f);
++ if (enable_inline_image == 2 && strcmp(f+strlen(f)-4, ".gif") == 0) {
++ Str firstframe = Strnew_charp(f);
++ Strcat_charp(firstframe, "-1");
++ unlink(firstframe->ptr);
++ }
++ }
+ }
+
+ void
+diff --git a/map.c b/map.c
+index 90aa35a..bb240ea 100644
+--- a/map.c
++++ b/map.c
+@@ -279,7 +279,7 @@ follow_map_panel(Buffer *buf, char *name)
+ p = parsedURL2Str(&pu)->ptr;
+ q = html_quote(p);
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv(p, buf->document_charset));
++ p = html_quote(url_decode2(p, buf));
+ else
+ p = q;
+ Strcat_m_charp(mappage, "<tr valign=top><td><a href=\"", q, "\">",
+@@ -417,10 +417,7 @@ append_map_info(Buffer *buf, Str tmp, FormItemList *fi)
+ continue;
+ parseURL2(a->url, &pu, baseURL(buf));
+ q = html_quote(parsedURL2Str(&pu)->ptr);
+- if (DecodeURL)
+- p = html_quote(url_unquote_conv(a->url, buf->document_charset));
+- else
+- p = html_quote(a->url);
++ p = html_quote(url_decode2(a->url, buf));
+ Strcat_m_charp(tmp, "<tr valign=top><td>&nbsp;&nbsp;<td><a href=\"",
+ q, "\">",
+ html_quote(*a->alt ? a->alt : mybasename(a->url)),
+@@ -457,10 +454,8 @@ append_link_info(Buffer *buf, Str html, LinkList * link)
+ Strcat_charp(html, "[Rev]");
+ if (!l->url)
+ url = "(empty)";
+- else if (DecodeURL)
+- url = html_quote(url_unquote_conv(l->url, buf->document_charset));
+ else
+- url = html_quote(l->url);
++ url = html_quote(url_decode2(l->url, buf));
+ Strcat_m_charp(html, "<td>", url, NULL);
+ if (l->ctype)
+ Strcat_m_charp(html, " (", html_quote(l->ctype), ")", NULL);
+@@ -498,8 +493,7 @@ append_frame_info(Buffer *buf, Str html, struct frameset *set, int level)
+ Strcat_charp(html, p);
+ }
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv(frame.body->url,
+- buf->document_charset));
++ p = html_quote(url_decode2(frame.body->url, buf));
+ else
+ p = q;
+ Strcat_m_charp(html, " ", p, "</a></pre_int><br>\n", NULL);
+@@ -550,9 +544,7 @@ page_info_panel(Buffer *buf)
+ #ifdef USE_M17N
+ Strcat_charp(tmp, "<form method=internal action=charset>");
+ #endif
+- p = parsedURL2Str(&buf->currentURL)->ptr;
+- if (DecodeURL)
+- p = url_unquote_conv(p, 0);
++ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
+ Strcat_m_charp(tmp, "<table cellpadding=0>",
+ "<tr valign=top><td nowrap>Title<td>",
+ html_quote(buf->buffername),
+@@ -581,7 +573,7 @@ page_info_panel(Buffer *buf)
+ "<tr valign=top><td nowrap>Number of lines<td>",
+ Sprintf("%d", all)->ptr,
+ "<tr valign=top><td nowrap>Transferred bytes<td>",
+- Sprintf("%d", buf->trbyte)->ptr, NULL);
++ Sprintf("%lu", (unsigned long)buf->trbyte)->ptr, NULL);
+
+ a = retrieveCurrentAnchor(buf);
+ if (a != NULL) {
+@@ -589,7 +581,7 @@ page_info_panel(Buffer *buf)
+ p = parsedURL2Str(&pu)->ptr;
+ q = html_quote(p);
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv(p, buf->document_charset));
++ p = html_quote(url_decode2(p, buf));
+ else
+ p = q;
+ Strcat_m_charp(tmp,
+@@ -602,7 +594,7 @@ page_info_panel(Buffer *buf)
+ p = parsedURL2Str(&pu)->ptr;
+ q = html_quote(p);
+ if (DecodeURL)
+- p = html_quote(url_unquote_conv(p, buf->document_charset));
++ p = html_quote(url_decode2(p, buf));
+ else
+ p = q;
+ Strcat_m_charp(tmp,
+@@ -613,10 +605,7 @@ page_info_panel(Buffer *buf)
+ if (a != NULL) {
+ FormItemList *fi = (FormItemList *)a->url;
+ p = form2str(fi);
+- if (DecodeURL)
+- p = html_quote(url_unquote_conv(p, buf->document_charset));
+- else
+- p = html_quote(p);
++ p = html_quote(url_decode2(p, buf));
+ Strcat_m_charp(tmp,
+ "<tr valign=top><td nowrap>Method/type of current form&nbsp;<td>",
+ p, NULL);
+diff --git a/matrix.c b/matrix.c
+index 64fd0ad..bc7a5be 100644
+--- a/matrix.c
++++ b/matrix.c
+@@ -34,18 +34,12 @@
+
+ #include "config.h"
+ #include "matrix.h"
+-#include <gc.h>
++#include "alloc.h"
+
+ /*
+ * Macros from "fm.h".
+ */
+
+-#define New(type) ((type*)GC_MALLOC(sizeof(type)))
+-#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type)))
+-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
+-#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
+-#define Renew_N(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
+-
+ #define SWAPD(a,b) { double tmp = a; a = b; b = tmp; }
+ #define SWAPI(a,b) { int tmp = a; a = b; b = tmp; }
+
+diff --git a/menu.c b/menu.c
+index 774b1bd..0f66583 100644
+--- a/menu.c
++++ b/menu.c
+@@ -1365,9 +1365,7 @@ initSelectMenu(void)
+ break;
+ default:
+ Strcat_char(str, ' ');
+- p = parsedURL2Str(&buf->currentURL)->ptr;
+- if (DecodeURL)
+- p = url_unquote_conv(p, 0);
++ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
+ Strcat_charp(str, p);
+ break;
+ }
+@@ -1513,9 +1511,7 @@ initSelTabMenu(void)
+ case SCM_MISSING:
+ break;
+ default:
+- p = parsedURL2Str(&buf->currentURL)->ptr;
+- if (DecodeURL)
+- p = url_unquote_conv(p, 0);
++ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
+ Strcat_charp(str, p);
+ break;
+ }
+@@ -1845,10 +1841,8 @@ link_menu(Buffer *buf)
+ Strcat_charp(str, " ");
+ if (!l->url)
+ p = "";
+- else if (DecodeURL)
+- p = url_unquote_conv(l->url, buf->document_charset);
+ else
+- p = l->url;
++ p = url_decode2(l->url, buf);
+ Strcat_charp(str, p);
+ label[i] = str->ptr;
+ if (len < str->length)
+diff --git a/mimehead.c b/mimehead.c
+index 78997e0..d16270c 100644
+--- a/mimehead.c
++++ b/mimehead.c
+@@ -64,12 +64,22 @@ ha2d(char x, char y)
+ Str
+ decodeB(char **ww)
+ {
++ struct growbuf gb;
++
++ growbuf_init(&gb);
++ decodeB_to_growbuf(&gb, ww);
++ return growbuf_to_Str(&gb);
++}
++
++void
++decodeB_to_growbuf(struct growbuf *gb, char **ww)
++{
+ unsigned char c[4];
+ char *wp = *ww;
+ char d[3];
+ int i, n_pad;
+- Str ap = Strnew_size(strlen(wp));
+
++ growbuf_reserve(gb, strlen(wp) + 1);
+ n_pad = 0;
+ while (1) {
+ for (i = 0; i < 4; i++) {
+@@ -93,39 +103,50 @@ decodeB(char **ww)
+ for (i = 0; i < 4; i++) {
+ c[i] = c2e(c[i]);
+ if (c[i] == BAD_BASE64) {
+- *ww = wp;
+- return ap;
++ goto last;
+ }
+ }
+ d[0] = ((c[0] << 2) | (c[1] >> 4));
+ d[1] = ((c[1] << 4) | (c[2] >> 2));
+ d[2] = ((c[2] << 6) | c[3]);
+ for (i = 0; i < 3 - n_pad; i++) {
+- Strcat_char(ap, d[i]);
++ GROWBUF_ADD_CHAR(gb, d[i]);
+ }
+ if (n_pad || *wp == '\0' || *wp == '?')
+ break;
+ }
++last:
++ growbuf_reserve(gb, gb->length + 1);
++ gb->ptr[gb->length] = '\0';
+ *ww = wp;
+- return ap;
++ return;
+ }
+
+ Str
+ decodeU(char **ww)
+ {
++ struct growbuf gb;
++
++ growbuf_init(&gb);
++ decodeU_to_growbuf(&gb, ww);
++ return growbuf_to_Str(&gb);
++}
++
++void
++decodeU_to_growbuf(struct growbuf *gb, char **ww)
++{
+ unsigned char c1, c2;
+ char *w = *ww;
+ int n, i;
+- Str a;
+
+ if (*w <= 0x20 || *w >= 0x60)
+- return Strnew_size(0);
++ return;
+ n = *w - 0x20;
+- a = Strnew_size(n);
++ growbuf_reserve(gb, n + 1);
+ for (w++, i = 2; *w != '\0' && n; n--) {
+ c1 = (w[0] - 0x20) % 0x40;
+ c2 = (w[1] - 0x20) % 0x40;
+- Strcat_char(a, (c1 << i) | (c2 >> (6 - i)));
++ gb->ptr[gb->length++] = (c1 << i) | (c2 >> (6 - i));
+ if (i == 6) {
+ w += 2;
+ i = 2;
+@@ -135,7 +156,8 @@ decodeU(char **ww)
+ i += 2;
+ }
+ }
+- return a;
++ gb->ptr[gb->length] = '\0';
++ return;
+ }
+
+ /* RFC2047 (4.2. The "Q" encoding) */
+@@ -165,9 +187,19 @@ decodeQ(char **ww)
+ Str
+ decodeQP(char **ww)
+ {
++ struct growbuf gb;
++
++ growbuf_init(&gb);
++ decodeQP_to_growbuf(&gb, ww);
++ return growbuf_to_Str(&gb);
++}
++
++void
++decodeQP_to_growbuf(struct growbuf *gb, char **ww)
++{
+ char *w = *ww;
+- Str a = Strnew_size(strlen(w));
+
++ growbuf_reserve(gb, strlen(w) + 1);
+ for (; *w != '\0'; w++) {
+ if (*w == '=') {
+ w++;
+@@ -180,15 +212,16 @@ decodeQP(char **ww)
+ else {
+ if (*w == '\0' || *(w + 1) == '\0')
+ break;
+- Strcat_char(a, ha2d(*w, *(w + 1)));
++ gb->ptr[gb->length++] = ha2d(*w, *(w + 1));
+ w++;
+ }
+ }
+ else
+- Strcat_char(a, *w);
++ gb->ptr[gb->length++] = *w;
+ }
++ gb->ptr[gb->length] = '\0';
+ *ww = w;
+- return a;
++ return;
+ }
+
+ #ifdef USE_M17N
+diff --git a/parsetagx.c b/parsetagx.c
+index 6b627d2..3435f9f 100644
+--- a/parsetagx.c
++++ b/parsetagx.c
+@@ -221,6 +221,7 @@ parse_tag(char **s, int internal)
+ int j, hidden=FALSE;
+ for (j=0; j<i; j++) {
+ if (tag->attrid[j] == ATTR_TYPE &&
++ tag->value[j] &&
+ strcmp("hidden",tag->value[j]) == 0) {
+ hidden=TRUE;
+ break;
+diff --git a/po/LINGUAS b/po/LINGUAS
+index 1489115..ade7ca2 100644
+--- a/po/LINGUAS
++++ b/po/LINGUAS
+@@ -1,2 +1,2 @@
+ # Set of available languages.
+-ja
++ja de
+diff --git a/po/de.po b/po/de.po
+new file mode 100644
+index 0000000..5e84022
+--- /dev/null
++++ b/po/de.po
+@@ -0,0 +1,903 @@
++# German translation of w3m
++# Copyright (C) 2014 Fumitoshi UKAI
++# This file is distributed under the same license as the w3m package.
++# Markus Hiereth <markus.hiereth@freenet.de>, 2014.
++msgid ""
++msgstr ""
++"Project-Id-Version: w3m 0.5.3\n"
++"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
++"POT-Creation-Date: 2010-08-20 18:44+0900\n"
++"PO-Revision-Date: 2014-10-19 11:15+0200\n"
++"Last-Translator: Markus Hiereth <markus.hiereth@freenet.de>\n"
++"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
++"Language: de\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++"X-Generator: Virtaal 0.7.1\n"
++
++#: menu.c:267
++msgid " Back (b) "
++msgstr " Zurück (b) "
++
++#: menu.c:268
++msgid " Select Buffer(s) "
++msgstr " Puffer auswählen (s) "
++
++#: menu.c:270
++msgid " Select Tab (t) "
++msgstr " Reiter auswählen (t) "
++
++#: menu.c:272
++msgid " View Source (v) "
++msgstr " Codeansicht (v) "
++
++#: menu.c:273
++msgid " Edit Source (e) "
++msgstr " Code bearbeiten (e) "
++
++#: menu.c:274
++msgid " Save Source (S) "
++msgstr " Code speichern (S) "
++
++#: menu.c:275
++msgid " Reload (r) "
++msgstr " Erneut laden (r) "
++
++#: menu.c:276 menu.c:283 menu.c:287
++msgid " ---------------- "
++msgstr " ---------------------- "
++
++#: menu.c:277
++msgid " Go Link (a) "
++msgstr " Ziel öffnen.. (a) "
++
++#: menu.c:278
++msgid " on New Tab (n) "
++msgstr " ..in neuem Reiter (n) "
++
++#: menu.c:279
++msgid " Save Link (A) "
++msgstr " Ziel speichern (A) "
++
++#: menu.c:280
++msgid " View Image (i) "
++msgstr " Bild anzeigen (i) "
++
++#: menu.c:281
++msgid " Save Image (I) "
++msgstr " Bild speichern (I) "
++
++#: menu.c:282
++msgid " View Frame (f) "
++msgstr " Frames zeigen (f) "
++
++#: menu.c:284
++msgid " Bookmark (B) "
++msgstr " Lesezeichen (B) "
++
++#: menu.c:285
++msgid " Help (h) "
++msgstr " Hilfe (h) "
++
++#: menu.c:286
++msgid " Option (o) "
++msgstr " Einstellungen (o) "
++
++#: menu.c:288
++msgid " Quit (q) "
++msgstr " Programm verlassen (q) "
++
++#: rc.c:60
++msgid "External Viewer Setup"
++msgstr "Konfiguration für externe Anzeigeprogramme"
++
++#: rc.c:61
++msgid "Tab width in characters"
++msgstr "Tabulatorbreite in Zeichen"
++
++#: rc.c:62
++msgid "Indent for HTML rendering"
++msgstr "Einzug bei HTML-Darstellung"
++
++#: rc.c:63
++msgid "Number of pixels per character (4.0...32.0)"
++msgstr "Anzahl von Pixeln pro Zeichen (4.0 bis 32.0)"
++
++#: rc.c:64
++msgid "Number of pixels per line (4.0...64.0)"
++msgstr "Anzahl von Pixeln pro Zeile (4.0 bis 64.0)"
++
++#: rc.c:65
++#entsprechend Bescheibung aus MANUAL.html, mh 14.10.2014
++msgid "Number of remembered lines when used as a pager"
++msgstr "Anzahl gemerkter, über die Standardeingabe erhaltener Zeilen"
++
++#: rc.c:66
++msgid "Use URL history"
++msgstr "URL-Chronik verwenden"
++
++#: rc.c:67
++msgid "Number of remembered URL"
++msgstr "Anzahl von URLs in Chronik"
++
++#: rc.c:68
++msgid "Save URL history"
++msgstr "URL-Chronik speichern"
++
++#: rc.c:69
++msgid "Render frames automatically"
++msgstr "Frames selbstständig darstellen"
++
++#: rc.c:70
++msgid "Treat argument without scheme as URL"
++msgstr "Eingabe ohne Protokoll-Präfix als URL auffassen"
++
++#: rc.c:71
++msgid "Use _self as default target"
++msgstr "_self als Standard-Zielfenster verwenden"
++
++#: rc.c:72
++msgid "Open link on new tab if target is _blank or _new"
++msgstr "Link in neuem Reiter öffnen, falls für Zielfenster _blank oder _new definiert ist"
++
++#: rc.c:73
++msgid "Open download list panel on new tab"
++msgstr "Downloadliste in neuem Reiter öffnen"
++
++#: rc.c:74
++msgid "Display link URL automatically"
++msgstr "URL der Links selbstständig anzeigen"
++
++#: rc.c:75
++msgid "Display link numbers"
++msgstr "Linknummern anzeigen"
++
++#: rc.c:76
++msgid "Display decoded URL"
++msgstr "URL entschlüsselt anzeigen"
++
++#: rc.c:77
++msgid "Display current line number"
++msgstr "Aktuelle Zeilennummer anzeigen"
++
++#: rc.c:78
++msgid "Display inline images"
++msgstr "Eingebettete Bilder anzeigen"
++
++#: rc.c:79
++msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
++msgstr "Pseudo-ALTs zu eingebetteten Bildern ohne ALT oder TITLE anzeigen"
++
++#: rc.c:81
++msgid "Load inline images automatically"
++msgstr "Eingebettete Bilder selbstständig laden"
++
++#: rc.c:82
++msgid "Maximum processes for parallel image loading"
++msgstr "Anzahl zulässiger Prozesse zum gleichzeitigen Laden von Bildern"
++
++#: rc.c:83
++msgid "Use external image viewer"
++msgstr "Externen Bildbetrachter verwenden"
++
++#: rc.c:84
++msgid "Scale of image (%)"
++msgstr "Bilder prozentual skalieren"
++
++#: rc.c:85
++msgid "External command to display image"
++msgstr "Befehl für externen Bildbetrachter"
++
++#: rc.c:86
++msgid "Use link list of image map"
++msgstr "Bei Grafiken mit eingebetteten Links Ziele auflisten"
++
++#: rc.c:88
++msgid "Display file names in multi-column format"
++msgstr "Dateinamen auf Spalten verteilt anzeigen"
++
++#: rc.c:89
++msgid "Use ASCII equivalents to display entities"
++msgstr "ASCII-Ersatz für in HTML benannte Zeichen verwenden"
++
++#: rc.c:90
++msgid "Character type for border of table and menu"
++msgstr "Zeichen zum Einrahmen von Tabellen und Menüs"
++
++#: rc.c:91
++msgid "Fold lines in TEXTAREA"
++msgstr "In Eingabefeldern vom Typ TEXTAREA Texte umbrechen"
++
++#: rc.c:92
++msgid "Display INS, DEL, S and STRIKE element"
++msgstr "Umsetzung der Elemente INS, DEL, S und STRIKE"
++
++#: rc.c:93
++msgid "Display with color"
++msgstr "In Farbe anzeigen"
++
++#: rc.c:94
++msgid "Color of normal character"
++msgstr "Farbe für normalen Text"
++
++#: rc.c:95
++msgid "Color of anchor"
++msgstr "Farbe für Links / Element A"
++
++#: rc.c:96
++msgid "Color of image link"
++msgstr "Farbe für Bilder / Element IMG"
++
++#: rc.c:97
++msgid "Color of form"
++msgstr "Farbe für Eingaben / Element INPUT"
++
++#: rc.c:98
++msgid "Enable coloring of active link"
++msgstr "Aktiven Link farblich hervorheben"
++
++#: rc.c:99
++msgid "Color of currently active link"
++msgstr "Farbe des derzeit aktiven Links "
++
++#: rc.c:100
++msgid "Use visited link color"
++msgstr "Besuchte Links farblich hervorheben"
++
++#: rc.c:101
++msgid "Color of visited link"
++msgstr "Farbe für besuchte Links"
++
++#: rc.c:102
++msgid "Color of background"
++msgstr "Hintergrundfarbe"
++
++#: rc.c:103
++msgid "Color of mark"
++msgstr "Farbe für Textmarken"
++#msgstr "Farbe für Textmarkierungen"
++
++#: rc.c:104
++msgid "Use proxy"
++msgstr "Proxy verwenden"
++
++#: rc.c:105
++msgid "URL of HTTP proxy host"
++msgstr "URL des HTTP-Proxy-Hosts"
++
++#: rc.c:107
++msgid "URL of HTTPS proxy host"
++msgstr "URL des HTTPS-Proxy-Hosts"
++
++#: rc.c:110
++msgid "URL of GOPHER proxy host"
++msgstr "URL des GOPHER-Proxy-Hosts"
++
++#: rc.c:112
++msgid "URL of FTP proxy host"
++msgstr "URL des FTP-Proxy-Hosts"
++
++#: rc.c:113
++msgid "Domains to be accessed directly (no proxy)"
++msgstr "Ohne Proxy, direkt zu kontaktierende Domains"
++
++#: rc.c:114
++msgid "Check noproxy by network address"
++msgstr "Direkten Datentransfer ohne Proxy mittels Netzwerkadresse sicherstellen"
++
++#: rc.c:115
++msgid "Disable cache"
++msgstr "Zwischenspeicherung deaktivieren"
++
++#: rc.c:117
++msgid "News server"
++msgstr "News-Server"
++
++#: rc.c:118
++msgid "Mode of news server"
++msgstr "Modus des News-Servers"
++
++#: rc.c:119
++msgid "Number of news messages"
++msgstr "News-Anzahl"
++
++#: rc.c:121
++msgid "Order of name resolution"
++msgstr "Reihenfolge der Namens-Auflösung"
++
++#: rc.c:122
++msgid "Directory corresponding to / (document root)"
++msgstr "Wurzelverzeichnis für Dokumente (/)"
++
++#: rc.c:123
++msgid "Directory corresponding to /~user"
++msgstr "Pfad zum Benutzerverzeichnis (~)"
++
++#: rc.c:124
++msgid "Directory corresponding to /cgi-bin"
++msgstr "Verzeichnis für ausführbare Skripte (cgi-bin)"
++
++#: rc.c:125
++msgid "Confirm when quitting with q"
++msgstr "Das Programm erst nach Bestätigung verlassen"
++
++#: rc.c:126
++msgid "Close tab if buffer is last when back"
++msgstr "Reiter mit nur einem Puffer auf Zurück-Befehl hin schließen"
++
++#: rc.c:128
++msgid "Enable mark operations"
++msgstr "Arbeit mit Textmarken ermöglichen"
++#msgstr "Arbeit mit Textmarkierungen ermöglichen"
++
++#: rc.c:130
++msgid "Enable Emacs-style line editing"
++msgstr "Zeilen wie in Emacs bearbeiten"
++
++#: rc.c:131
++msgid "Enable vi-like numeric prefix"
++msgstr "Vorangestellte Zahlen wie in vi aktivieren"
++
++#: rc.c:132
++msgid "Move cursor to top line when going to label"
++msgstr "Labels nach Aufsuchen immer oben positionieren"
++
++#: rc.c:133
++msgid "Move cursor to top line when moving to next page"
++msgstr "Beim Umblättern Eingabemarke nach oben setzen"
++
++#: rc.c:134
++msgid "Fold lines of plain text file"
++msgstr "Zeilen in Textdateien umbrechen"
++
++#: rc.c:135
++msgid "Show line numbers"
++msgstr "Zeilennummern anzeigen"
++
++#: rc.c:136
++msgid "Show search string"
++msgstr "Suchbegriff anzeigen"
++
++#: rc.c:137
++msgid "List of mime.types files"
++msgstr "Liste der mime.types-Dateien"
++
++#: rc.c:138
++msgid "List of mailcap files"
++msgstr "Liste der mailcap-Dateien"
++
++#: rc.c:139
++msgid "List of urimethodmap files"
++msgstr "Liste von Dateien mit URI-Methode-Zuordnungen"
++
++#: rc.c:140
++msgid "Editor"
++msgstr "Editor"
++
++#: rc.c:141
++msgid "Mailer"
++msgstr "Mail-Programm"
++
++#: rc.c:142
++# korrespondiert mit Pulldown-Menü, daher verkürzt. mh 09.10.2014
++msgid "How to call Mailer for mailto URLs with options"
++msgstr "Umgang mit mailto-URLs"
++
++#: rc.c:143
++msgid "External Browser"
++msgstr "Externer Browser"
++
++#: rc.c:144
++msgid "Second External Browser"
++msgstr "Zweiter externer Browser"
++
++#: rc.c:145
++msgid "Third External Browser"
++msgstr "Dritter externer Browser"
++
++#: rc.c:146
++# entsprechend file:///usr/share/doc/w3m/README.passwd
++# Prüfung beanstandete auch passwd_file mit Zugriffbytes 600, mh, 05.10.2014
++msgid "Disable secret file security check"
++msgstr "Keine Prüfung der Sicherheit bei Dateien mit geheimem Inhalt"
++
++#: rc.c:147
++msgid "Password file"
++msgstr "Passwort-Datei"
++
++#: rc.c:148
++msgid "File for setting form on loading"
++msgstr "Datei mit vordefinierten Eingaben für Formulare"
++
++#: rc.c:149
++msgid "Password for anonymous FTP (your mail address)"
++msgstr "Passwort für anonyme FTP-Anmeldung (Ihre Mailadresse)"
++
++#: rc.c:150
++msgid "Generate domain part of password for FTP"
++msgstr "Domain-Teil des FTP-Passwortes erzeugen"
++
++#: rc.c:151
++msgid "User-Agent identification string"
++msgstr "Browserkennung übermitteln"
++
++#: rc.c:152
++msgid "Accept-Encoding header"
++msgstr "Accept-Encoding-Kopfzeile"
++
++#: rc.c:153
++msgid "Accept header"
++msgstr "Accept-Kopfzeile"
++
++#: rc.c:154
++msgid "Accept-Language header"
++msgstr "Accept-Language-Kopfzeile"
++
++#: rc.c:155
++msgid "Treat URL-like strings as links in all pages"
++msgstr "URL-artige Zeichenketten auf allen Seiten als Links auffassen"
++
++#: rc.c:156
++msgid "Wrap search"
++msgstr "Im Dokument umlaufend suchen"
++
++#: rc.c:157
++msgid "Display unseen objects (e.g. bgimage tag)"
++msgstr "Nicht gezeigte Objekte melden (z.B. Hintergrundbild)"
++
++#: rc.c:158
++msgid "Uncompress compressed data automatically when downloading"
++msgstr "Komprimierte Daten beim Download selbstständig dekomprimieren"
++
++#: rc.c:160
++# String nicht in Optionen-Menü gefunden. mh, 05.10.2014
++msgid "Run external viewer in a separate session"
++msgstr "Externe Anzeigeprogramme in eigener Sitzung laufen lassen"
++
++#: rc.c:162
++msgid "Run external viewer in the background"
++msgstr "Externe Anzeigeprogramme im Hintergrund laufen lassen"
++
++#: rc.c:164
++msgid "Use external program for directory listing"
++msgstr "Externes Programm zum Auflisten von Verzeichnissen verwenden"
++
++#: rc.c:165
++msgid "URL of directory listing command"
++msgstr "URL des Befehls zum Auflisten von Verzeichnissen"
++
++#: rc.c:167
++msgid "Enable dictionary lookup through CGI"
++msgstr "Wörterbuchabfrage mittels CGI aktivieren"
++
++#: rc.c:168
++msgid "URL of dictionary lookup command"
++msgstr "URL des Befehls zur Wörterbuch-Abfrage"
++
++#: rc.c:170
++msgid "Display link name for images lacking ALT"
++msgstr "Bei Bildern ohne ALT-Angabe Linkziel anzeigen"
++
++#: rc.c:171
++msgid "Index file for directories"
++msgstr "Indexdatei für Verzeichnisse"
++
++#: rc.c:172
++msgid "Prepend http:// to URL automatically"
++msgstr "Ziel-Eingaben gegebenenfalls http:// voranstellen"
++
++#: rc.c:173
++msgid "Default value for open-URL command"
++msgstr "Vorgabewert bei der Adresseneingabe"
++
++#: rc.c:174
++msgid "Decode Content-Transfer-Encoding when saving"
++msgstr "Beim Speichern entsprechend Content-Transfer-Encoding entschlüsseln"
++
++#: rc.c:175
++msgid "Preserve timestamp when saving"
++msgstr "Zeitstempel beim Speichern erhalten"
++
++#: rc.c:177
++msgid "Enable mouse"
++msgstr "Maus aktivieren"
++
++#: rc.c:178
++msgid "Scroll in reverse direction of mouse drag"
++msgstr "Mausbewegungen entgegengesetzt scrollen"
++
++#: rc.c:179
++msgid "Behavior of wheel scroll speed"
++msgstr "Umsetzung der Mausradbewegung"
++
++#: rc.c:180
++msgid "(A only)Scroll by # (%) of screen"
++msgstr "(nur A) Um # % des Fensters scrollen"
++
++#: rc.c:181
++msgid "(B only)Scroll by # lines"
++msgstr "(nur B) Um # Zeilen scrollen"
++
++#: rc.c:183
++msgid "Free memory of undisplayed buffers"
++msgstr "Speicherplatz nicht angezeigter Puffer freigeben"
++
++#: rc.c:184
++msgid "Suppress `Referer:' header"
++msgstr "Referer-Kopfzeile unterdrücken"
++
++#: rc.c:185
++msgid "Search case-insensitively"
++msgstr "Groß- und Kleinschreibung beim Suchen ignorieren"
++
++#: rc.c:186
++msgid "Use LESSOPEN"
++msgstr "LESSOPEN verwenden"
++
++#: rc.c:189
++msgid "Perform SSL server verification"
++msgstr "SSL-Server-Verifizierung durchführen"
++
++#: rc.c:190
++msgid "PEM encoded certificate file of client"
++msgstr "PEM-kodierte Zertifikatsdatei des Clients"
++
++#: rc.c:191
++msgid "PEM encoded private key file of client"
++msgstr "PEM-kodierte private Schlüsseldatei des Clients"
++
++#: rc.c:192
++msgid "Path to directory for PEM encoded certificates of CAs"
++msgstr "Pfad zum Verzeichnis für PEM-kodierte Zertifikate von CAs"
++
++#: rc.c:193
++msgid "File consisting of PEM encoded certificates of CAs"
++msgstr "Datei mit PEM-kodierten Zertifikaten von CAs"
++
++#: rc.c:195
++msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
++msgstr "Liste unzulässiger SSL-Verfahren (2: SSLv2, 3: SSLv3, t: TLSv1)"
++
++#: rc.c:198
++msgid "Enable cookie processing"
++msgstr "Cookie-Verarbeitung aktivieren"
++
++#: rc.c:199
++msgid "Print a message when receiving a cookie"
++msgstr "Den Empfang von Cookies melden"
++
++#: rc.c:200
++msgid "Accept cookies"
++msgstr "Cookies akzeptieren"
++
++#: rc.c:201
++msgid "Action to be taken on invalid cookie"
++msgstr "Reaktion auf ungültiges Cookie"
++
++#: rc.c:202
++msgid "Domains to reject cookies from"
++msgstr "Domains, deren Cookies abzulehnen sind"
++
++#: rc.c:203
++msgid "Domains to accept cookies from"
++msgstr "Domains, deren Cookies akzeptiert werden"
++
++#: rc.c:204
++# Variable vom Typ String im Abschnitt Cookies-Einstellungen, mh 10.10.2014
++#, fuzzy
++msgid "Domains to avoid [wrong number of dots]"
++msgstr "Zu meidende Domains (falsche Anzahl von Punkten)"
++
++#: rc.c:206
++msgid "Number of redirections to follow"
++msgstr "Anzahl zu akzeptierender Umleitungen"
++
++# Konfigurationsvariable vom Typ string, mh, 05.10.2014
++#: rc.c:207
++msgid "Enable processing of meta-refresh tag"
++msgstr "Meta-Refresh-Element verarbeiten"
++
++#: rc.c:210
++msgid "Enable Migemo (Roma-ji search)"
++msgstr "Romaji-Suche mittels Migemo aktivieren"
++
++#: rc.c:211
++msgid "Migemo command"
++msgstr "Migemo-Befehl"
++
++#: rc.c:215
++msgid "Display charset"
++msgstr "Zeichenkodierung der Anzeige"
++
++#: rc.c:216
++msgid "Default document charset"
++msgstr "Zeichenkodierungs-Vorgabe für Dokumente"
++
++#: rc.c:217
++msgid "Automatic charset detect when loading"
++msgstr "Selbstständige Erkennung der Zeichenkodierung beim Laden"
++
++#: rc.c:218
++msgid "System charset"
++msgstr "Zeichenkodierung des Systems"
++
++#: rc.c:219
++msgid "System charset follows locale(LC_CTYPE)"
++msgstr "Zeichenkodierung des Systems entsprechend Locale (LC_CTYPE)"
++
++#: rc.c:220
++# war zuvor
++# msgstr "Halfdump mit der zur Anzeige benutzten Zeichenkodierung exportieren"
++msgid "Output halfdump with display charset"
++msgstr "Halfdump in der zur Anzeige benutzten Kodierung"
++
++#: rc.c:221
++# Konfigurationsvariable vom Typ boolean, mh, 05.10.2014
++#, fuzzy
++msgid "Use multi column characters"
++msgstr "Spaltenübergreifende Zeichen verwenden"
++
++#: rc.c:222
++msgid "Use combining characters"
++msgstr "Kombinationszeichen verwenden"
++
++#: rc.c:223
++msgid "Use double width for some Unicode characters"
++msgstr "Einzelnen Unicode-Zeichen zwei Spalten einräumen"
++
++#: rc.c:224
++msgid "Use Unicode language tags"
++msgstr "Unicode-Sprach-Tags verwenden"
++
++#: rc.c:225
++msgid "Charset conversion using Unicode map"
++msgstr "Zeichen in Unicode kodieren"
++
++#: rc.c:226
++msgid "Charset conversion when loading"
++msgstr "Zeichenkodierung beim Laden anpassen"
++
++#: rc.c:227
++msgid "Adjust search string for document charset"
++msgstr "Zu suchende Zeichenkette der Kodierung des Dokumentes anpassen"
++
++#: rc.c:228
++msgid "Fix character width when conversion"
++msgstr "Bei Umwandlung an der Breite von Zeichen festhalten"
++
++#: rc.c:229
++msgid "Use GB 12345 Unicode map instead of GB 2312's"
++msgstr "GB-12345-Unicode statt GB 2312 verwenden"
++
++#: rc.c:230
++msgid "Use JIS X 0201 Roman for ISO-2022-JP"
++msgstr "JIS X 0201 Roman statt ISO-2022-JP verwenden"
++
++#: rc.c:231
++msgid "Use JIS C 6226:1978 for ISO-2022-JP"
++msgstr "JIS C 6226:1978 statt ISO-2022-JP verwenden"
++
++#: rc.c:232
++msgid "Use JIS X 0201 Katakana"
++msgstr "JIS X 0201 Katakana verwenden"
++
++#: rc.c:233
++msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
++msgstr "JIS X 0212:1990 verwenden (ergänzendes Kanji)"
++
++#: rc.c:234
++msgid "Use JIS X 0213:2000 (2000JIS)"
++msgstr "JIS X 0213:2000 verwenden (2000JIS)"
++
++#: rc.c:235
++msgid "Strict ISO-2022-JP/KR/CN"
++msgstr "Striktes ISO-2022-JP/KR/CN"
++
++#: rc.c:236
++msgid "Treat 4 bytes char. of GB18030 as Unicode"
++msgstr "4-Byte-Zeichen von GB 18030 als Unicode auffassen"
++
++#: rc.c:237
++msgid "Simple Preserve space"
++msgstr "Einfache Platzerhaltung"
++
++#: rc.c:240
++msgid "keymap file"
++msgstr "Tastaturbelegungs-Datei"
++
++#: rc.c:257
++msgid "black"
++msgstr "schwarz"
++
++#: rc.c:258
++msgid "red"
++msgstr "rot"
++
++#: rc.c:259
++msgid "green"
++msgstr "grün"
++
++#: rc.c:260
++msgid "yellow"
++msgstr "gelb"
++
++#: rc.c:261
++msgid "blue"
++msgstr "blau"
++
++#: rc.c:262
++msgid "magenta"
++msgstr "magenta"
++
++#: rc.c:263
++msgid "cyan"
++msgstr "cyan"
++
++#: rc.c:264
++msgid "white"
++msgstr "weiß"
++
++#: rc.c:265
++msgid "terminal"
++msgstr "wie Terminal"
++
++#: rc.c:284
++msgid "none"
++msgstr "keiner"
++
++#: rc.c:285
++msgid "current URL"
++msgstr "aktuelle URL"
++
++#: rc.c:286
++msgid "link URL"
++msgstr "Link-URL"
++
++#: rc.c:291
++msgid "simple"
++msgstr "einfach"
++
++#: rc.c:292
++msgid "use tag"
++msgstr "durch Tags"
++
++#: rc.c:293
++msgid "fontify"
++msgstr "hervorgehoben"
++
++#: rc.c:299
++msgid "A:relative to screen height"
++msgstr "A: relativ zu Fensterhöhe"
++
++#: rc.c:300
++msgid "B:fixed speed"
++msgstr "B: feste Geschwindigkeit"
++
++#: rc.c:307
++msgid "unspecified"
++msgstr "nicht spezifiziert"
++
++#: rc.c:308
++msgid "inet inet6"
++msgstr "inet inet6"
++
++#: rc.c:309
++msgid "inet6 inet"
++msgstr "inet6 inet"
++
++#: rc.c:310
++msgid "inet only"
++msgstr "nur inet"
++
++#: rc.c:311
++msgid "inet6 only"
++msgstr "nur inet6"
++
++#: rc.c:318
++msgid "discard"
++msgstr "verwerfen"
++
++#: rc.c:320
++msgid "accept"
++msgstr "annehmen"
++
++#: rc.c:322
++msgid "ask"
++msgstr "nachfragen"
++
++#: rc.c:329
++# gehört zu rc.c:142
++# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
++msgid "use internal mailer instead"
++msgstr "Mail intern erstellen"
++
++#: rc.c:331
++# gehört zu rc.c:142
++# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
++msgid "ignore options and use only the address"
++msgstr "Optionen ignorieren"
++
++#: rc.c:332
++# gehört zu rc.c:142
++# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
++msgid "use full mailto URL"
++msgstr "komplett verwenden"
++
++#: rc.c:341
++msgid "OFF"
++msgstr "AUS"
++
++#: rc.c:342
++msgid "Only ISO 2022"
++msgstr "Nur ISO-2022"
++
++#: rc.c:343
++msgid "ON"
++msgstr "AN"
++
++#: rc.c:349
++# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
++msgid "ASCII"
++msgstr "ASCII"
++
++#: rc.c:350
++# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
++# hier ist "Zeichensatz" akzeptabel mh, 09.10.2014
++msgid "charset specific"
++msgstr "zeichensatzspezifisch"
++
++#: rc.c:351
++# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
++msgid "DEC special graphics"
++msgstr "mit DEC-Grafiken"
++
++#: rc.c:714
++msgid "Display Settings"
++msgstr "Einstellungen zur Anzeige"
++
++#: rc.c:716
++msgid "Color Settings"
++msgstr "Farbeinstellungen"
++
++#: rc.c:718
++msgid "Miscellaneous Settings"
++msgstr "Weitere Einstellungen"
++
++#: rc.c:719
++msgid "Directory Settings"
++msgstr "Verzeichnis-Einstellungen"
++
++#: rc.c:720
++msgid "External Program Settings"
++msgstr "Einstellungen für externe Programme"
++
++#: rc.c:721
++msgid "Network Settings"
++msgstr "Netzwerk-Einstellungen"
++
++#: rc.c:722
++msgid "Proxy Settings"
++msgstr "Proxy-Einstellungen"
++
++#: rc.c:724
++msgid "SSL Settings"
++msgstr "SSL-Einstellungen"
++
++#: rc.c:727
++msgid "Cookie Settings"
++msgstr "Cookie-Einstellungen"
++
++#: rc.c:730
++msgid "Charset Settings"
++msgstr "Zeichenkodierungs-Einstellungen"
++
++#. TRANSLATORS:
++#. * AcceptLang default: this is used in Accept-Language: HTTP request
++#. * header. For example, ja.po should translate it as
++#. * "ja;q=1.0, en;q=0.5" like that.
++#.
++#: rc.c:1209
++msgid "en;q=1.0"
++msgstr "de;q=1.0, en;q=0.5"
+diff --git a/po/ja.po b/po/ja.po
+index d67c695..c16557a 100644
+--- a/po/ja.po
++++ b/po/ja.po
+@@ -12,7 +12,7 @@ msgstr ""
+ "PO-Revision-Date: 2010-08-20 18:45+0900\n"
+ "Last-Translator: Fumitoshi UKAI <ukai@debian.or.jp>\n"
+ "Language-Team: Japanese\n"
+-"Language: \n"
++"Language: ja\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+@@ -407,6 +407,10 @@ msgid "File for setting form on loading"
+ msgstr "文書読込時のフォーム設定用ファイル"
+
+ #: rc.c:149
++msgid "File for preferences for each site"
++msgstr "サイト別設定のファイル"
++
++#: rc.c:149
+ msgid "Password for anonymous FTP (your mail address)"
+ msgstr "FTPのパスワード(普通は自分のmail addressを使う)"
+
+diff --git a/proto.h b/proto.h
+index f8a7345..0d8beb5 100644
+--- a/proto.h
++++ b/proto.h
+@@ -11,6 +11,8 @@ extern void pushEvent(int cmd, void *data);
+ extern MySignalHandler intTrap(SIGNAL_ARG);
+ extern void pgFore(void);
+ extern void pgBack(void);
++extern void hpgFore(void);
++extern void hpgBack(void);
+ extern void lup1(void);
+ extern void ldown1(void);
+ extern void ctrCsrV(void);
+@@ -61,6 +63,7 @@ extern void submitForm(void);
+ extern void followForm(void);
+ extern void topA(void);
+ extern void lastA(void);
++extern void nthA(void);
+ extern void onA(void);
+
+ extern void nextA(void);
+@@ -162,6 +165,24 @@ extern Str searchURIMethods(ParsedURL *pu);
+ extern void chkExternalURIBuffer(Buffer *buf);
+ #endif
+ extern ParsedURL *schemeToProxy(int scheme);
++#ifdef USE_M17N
++extern wc_ces url_to_charset(const char *url, const ParsedURL *base,
++ wc_ces doc_charset);
++extern char *url_encode(const char *url, const ParsedURL *base,
++ wc_ces doc_charset);
++#if 0
++extern char *url_decode(const char *url, const ParsedURL *base,
++ wc_ces doc_charset);
++#endif
++extern char *url_decode2(const char *url, const Buffer *buf);
++#else /* !defined(USE_M17N) */
++#define url_encode(url, base, cs) url_quote(url)
++extern char *url_decode0(const char *url);
++#if 0
++#define url_decode(url, base, cs) url_decode0(url)
++#endif
++#define url_decode2(url, buf) url_decode0(url)
++#endif /* !defined(USE_M17N) */
+ extern void examineFile(char *path, URLFile *uf);
+ extern char *acceptableEncoding();
+ extern int dir_exist(char *path);
+@@ -180,7 +201,6 @@ extern void push_symbol(Str str, char symbol, int width, int n);
+ #ifdef USE_UNICODE
+ extern void update_utf8_symbol(void);
+ #endif
+-extern Buffer *loadFile(char *path);
+ extern Buffer *loadGeneralFile(char *path, ParsedURL *current, char *referer,
+ int flag, FormList *request);
+ extern int is_boundary(unsigned char *, unsigned char *);
+@@ -207,6 +227,8 @@ extern int getImageSize(ImageCache * cache);
+ extern Str process_img(struct parsed_tag *tag, int width);
+ extern Str process_anchor(struct parsed_tag *tag, char *tagbuf);
+ extern Str process_input(struct parsed_tag *tag);
++extern Str process_button(struct parsed_tag *tag);
++extern Str process_n_button(void);
+ extern Str process_select(struct parsed_tag *tag);
+ extern Str process_n_select(void);
+ extern void feed_select(char *str);
+@@ -249,8 +271,7 @@ extern Buffer *openPagerBuffer(InputStream stream, Buffer *buf);
+ extern Buffer *openGeneralPagerBuffer(InputStream stream);
+ extern Line *getNextPage(Buffer *buf, int plen);
+ extern int save2tmp(URLFile uf, char *tmpf);
+-extern int doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
+- Buffer *defaultbuf);
++extern Buffer *doExternal(URLFile uf, char *type, Buffer *defaultbuf);
+ extern int _doFileCopy(char *tmpf, char *defstr, int download);
+ #define doFileCopy(tmpf, defstr) _doFileCopy(tmpf, defstr, FALSE);
+ extern int doFileMove(char *tmpf, char *defstr);
+@@ -507,7 +528,7 @@ extern ParsedURL *baseURL(Buffer *buf);
+ extern int openSocket(char *hostname, char *remoteport_name,
+ unsigned short remoteport_num);
+ extern void parseURL(char *url, ParsedURL *p_url, ParsedURL *current);
+-extern void copyParsedURL(ParsedURL *p, ParsedURL *q);
++extern void copyParsedURL(ParsedURL *p, const ParsedURL *q);
+ extern void parseURL2(char *url, ParsedURL *pu, ParsedURL *current);
+ extern Str parsedURL2Str(ParsedURL *pu);
+ extern int getURLScheme(char **url);
+@@ -586,9 +607,12 @@ extern char *getAnchorText(Buffer *buf, AnchorList *al, Anchor *a);
+ extern Buffer *link_list_panel(Buffer *buf);
+
+ extern Str decodeB(char **ww);
++extern void decodeB_to_growbuf(struct growbuf *gb, char **ww);
+ extern Str decodeQ(char **ww);
+ extern Str decodeQP(char **ww);
++extern void decodeQP_to_growbuf(struct growbuf *gb, char **ww);
+ extern Str decodeU(char **ww);
++extern void decodeU_to_growbuf(struct growbuf *gb, char **ww);
+ #ifdef USE_M17N
+ extern Str decodeWord(char **ow, wc_ces * charset);
+ extern Str decodeMIME(Str orgstr, wc_ces * charset);
+@@ -611,6 +635,7 @@ extern char *confFile(char *base);
+ extern char *auxbinFile(char *base);
+ extern char *libFile(char *base);
+ extern char *helpFile(char *base);
++extern const void *querySiteconf(const ParsedURL *query_pu, int field);
+ extern Str localCookie(void);
+ extern Str loadLocalDir(char *dirname);
+ extern void set_environ(char *var, char *value);
+@@ -683,6 +708,7 @@ extern void reMark(void);
+
+ #ifdef USE_MOUSE
+ extern void mouse(void);
++extern void sgrmouse(void);
+ extern void mouse_init(void);
+ extern void mouse_end(void);
+ extern void mouse_active(void);
+@@ -723,6 +749,8 @@ extern int getKey(char *s);
+ extern char *getKeyData(int key);
+ extern char *getWord(char **str);
+ extern char *getQWord(char **str);
++struct regex;
++extern char *getRegexWord(const char **str, struct regex **regex_ret);
+ #ifdef USE_MOUSE
+ extern void initMouseAction(void);
+ #endif
+@@ -786,5 +814,3 @@ extern void dispVer(void);
+ void srand48(long);
+ long lrand48(void);
+ #endif
+-
+-#include "indep.h"
+diff --git a/rc.c b/rc.c
+index 8441a39..3bf6cea 100644
+--- a/rc.c
++++ b/rc.c
+@@ -9,7 +9,9 @@
+ #include <errno.h>
+ #include "parsetag.h"
+ #include "local.h"
++#include "regex.h"
+ #include <stdlib.h>
++#include <stddef.h>
+
+ struct param_ptr {
+ char *name;
+@@ -146,6 +148,7 @@ static int OptionEncode = FALSE;
+ #define CMT_DISABLE_SECRET_SECURITY_CHECK N_("Disable secret file security check")
+ #define CMT_PASSWDFILE N_("Password file")
+ #define CMT_PRE_FORM_FILE N_("File for setting form on loading")
++#define CMT_SITECONF_FILE N_("File for preferences for each site")
+ #define CMT_FTPPASS N_("Password for anonymous FTP (your mail address)")
+ #define CMT_FTPPASS_HOSTNAMEGEN N_("Generate domain part of password for FTP")
+ #define CMT_USERAGENT N_("User-Agent identification string")
+@@ -619,6 +622,8 @@ struct param_ptr params9[] = {
+ CMT_FTPPASS_HOSTNAMEGEN, NULL},
+ {"pre_form_file", P_STRING, PI_TEXT, (void *)&pre_form_file,
+ CMT_PRE_FORM_FILE, NULL},
++ {"siteconf_file", P_STRING, PI_TEXT, (void *)&siteconf_file,
++ CMT_SITECONF_FILE, NULL},
+ {"user_agent", P_STRING, PI_TEXT, (void *)&UserAgent, CMT_USERAGENT, NULL},
+ {"no_referer", P_INT, PI_ONOFF, (void *)&NoSendReferer, CMT_NOSENDREFERER,
+ NULL},
+@@ -1173,6 +1178,8 @@ do_mkdir(const char *dir, long mode)
+ #endif /* not __MINW32_VERSION */
+ #endif /* not __EMX__ */
+
++static void loadSiteconf(void);
++
+ void
+ sync_with_option(void)
+ {
+@@ -1199,6 +1206,7 @@ sync_with_option(void)
+ #endif
+ loadPasswd();
+ loadPreForm();
++ loadSiteconf();
+
+ if (AcceptLang == NULL || *AcceptLang == '\0') {
+ /* TRANSLATORS:
+@@ -1556,3 +1564,217 @@ helpFile(char *base)
+ return expandPath(Strnew_m_charp(w3m_help_dir(), "/", base, NULL)->ptr);
+ }
+ #endif
++
++/* siteconf */
++/*
++ * url "<url>"|/<re-url>/|m@<re-url>@i [exact]
++ * substitute_url "<destination-url>"
++ * url_charset <charset>
++ * no_referer_from on|off
++ * no_referer_to on|off
++ *
++ * The last match wins.
++ */
++
++struct siteconf_rec {
++ struct siteconf_rec *next;
++ char *url;
++ Regex *re_url;
++ int url_exact;
++ unsigned char mask[(SCONF_N_FIELD + 7) >> 3];
++
++ char *substitute_url;
++#ifdef USE_M17N
++ wc_ces url_charset;
++#endif
++ int no_referer_from;
++ int no_referer_to;
++};
++#define SCONF_TEST(ent, f) ((ent)->mask[(f)>>3] & (1U<<((f)&7)))
++#define SCONF_SET(ent, f) ((ent)->mask[(f)>>3] |= (1U<<((f)&7)))
++#define SCONF_CLEAR(ent, f) ((ent)->mask[(f)>>3] &= ~(1U<<((f)&7)))
++
++static struct siteconf_rec *siteconf_head = NULL;
++static struct siteconf_rec *newSiteconfRec(void);
++
++static struct siteconf_rec *
++newSiteconfRec(void)
++{
++ struct siteconf_rec *ent;
++
++ ent = New(struct siteconf_rec);
++ ent->next = NULL;
++ ent->url = NULL;
++ ent->re_url = NULL;
++ ent->url_exact = FALSE;
++ memset(ent->mask, 0, sizeof(ent->mask));
++
++ ent->substitute_url = NULL;
++#ifdef USE_M17N
++ ent->url_charset = 0;
++#endif
++ return ent;
++}
++
++static void
++loadSiteconf(void)
++{
++ char *efname;
++ FILE *fp;
++ Str line;
++ struct siteconf_rec *ent = NULL;
++
++ siteconf_head = NULL;
++ if (!siteconf_file)
++ return;
++ if ((efname = expandPath(siteconf_file)) == NULL)
++ return;
++ fp = fopen(efname, "r");
++ if (fp == NULL)
++ return;
++ while (line = Strfgets(fp), line->length > 0) {
++ char *p, *s;
++
++ Strchop(line);
++ p = line->ptr;
++ SKIP_BLANKS(p);
++ if (*p == '#' || *p == '\0')
++ continue;
++ s = getWord(&p);
++
++ /* The "url" begins a new record. */
++ if (strcmp(s, "url") == 0) {
++ char *url, *opt;
++ struct siteconf_rec *newent;
++
++ /* First, register the current record. */
++ if (ent) {
++ ent->next = siteconf_head;
++ siteconf_head = ent;
++ ent = NULL;
++ }
++
++ /* Second, create a new record. */
++ newent = newSiteconfRec();
++ url = getRegexWord((const char **)&p, &newent->re_url);
++ opt = getWord(&p);
++ SKIP_BLANKS(p);
++ if (!newent->re_url) {
++ ParsedURL pu;
++ if (!url || !*url)
++ continue;
++ parseURL2(url, &pu, NULL);
++ newent->url = parsedURL2Str(&pu)->ptr;
++ }
++ /* If we have an extra or unknown option, ignore this record
++ * for future extensions. */
++ if (strcmp(opt, "exact") == 0) {
++ newent->url_exact = TRUE;
++ }
++ else if (*opt != 0)
++ continue;
++ if (*p)
++ continue;
++ ent = newent;
++ continue;
++ }
++
++ /* If the current record is broken, skip to the next "url". */
++ if (!ent)
++ continue;
++
++ /* Fill the new record. */
++ if (strcmp(s, "substitute_url") == 0) {
++ ent->substitute_url = getQWord(&p);
++ SCONF_SET(ent, SCONF_SUBSTITUTE_URL);
++ }
++#ifdef USE_M17N
++ else if (strcmp(s, "url_charset") == 0) {
++ char *charset = getWord(&p);
++ ent->url_charset = (charset && *charset) ?
++ wc_charset_to_ces(charset) : 0;
++ SCONF_SET(ent, SCONF_URL_CHARSET);
++ }
++#endif /* USE_M17N */
++ else if (strcmp(s, "no_referer_from") == 0) {
++ ent->no_referer_from = str_to_bool(getWord(&p), 0);
++ SCONF_SET(ent, SCONF_NO_REFERER_FROM);
++ }
++ else if (strcmp(s, "no_referer_to") == 0) {
++ ent->no_referer_to = str_to_bool(getWord(&p), 0);
++ SCONF_SET(ent, SCONF_NO_REFERER_TO);
++ }
++ }
++ if (ent) {
++ ent->next = siteconf_head;
++ siteconf_head = ent;
++ ent = NULL;
++ }
++ fclose(fp);
++}
++
++const void *
++querySiteconf(const ParsedURL *query_pu, int field)
++{
++ const struct siteconf_rec *ent;
++ Str u;
++ char *firstp, *lastp;
++
++ if (field < 0 || field >= SCONF_N_FIELD)
++ return NULL;
++ if (!query_pu || IS_EMPTY_PARSED_URL(query_pu))
++ return NULL;
++ u = parsedURL2Str((ParsedURL *)query_pu);
++ if (u->length == 0)
++ return NULL;
++
++ for (ent = siteconf_head; ent; ent = ent->next) {
++ if (!SCONF_TEST(ent, field))
++ continue;
++ if (ent->re_url) {
++ if (RegexMatch(ent->re_url, u->ptr, u->length, 1)) {
++ MatchedPosition(ent->re_url, &firstp, &lastp);
++ if (!ent->url_exact)
++ goto url_found;
++ if (firstp != u->ptr || lastp == firstp)
++ continue;
++ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' ||
++ *lastp == '#' || *(lastp - 1) == '#')
++ goto url_found;
++ }
++ } else {
++ int matchlen = strmatchlen(ent->url, u->ptr, u->length);
++ if (matchlen == 0 || ent->url[matchlen] != 0)
++ continue;
++ firstp = u->ptr;
++ lastp = u->ptr + matchlen;
++ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' ||
++ *lastp == '#' || *(lastp - 1) == '#')
++ goto url_found;
++ if (!ent->url_exact && (*lastp == '/' || *(lastp - 1) == '/'))
++ goto url_found;
++ }
++ }
++ return NULL;
++
++url_found:
++ switch (field) {
++ case SCONF_SUBSTITUTE_URL:
++ if (ent->substitute_url && *ent->substitute_url) {
++ Str tmp = Strnew_charp_n(u->ptr, firstp - u->ptr);
++ Strcat_charp(tmp, ent->substitute_url);
++ Strcat_charp(tmp, lastp);
++ return tmp->ptr;
++ }
++ return NULL;
++#ifdef USE_M17N
++ case SCONF_URL_CHARSET:
++ return &ent->url_charset;
++#endif
++ case SCONF_NO_REFERER_FROM:
++ return &ent->no_referer_from;
++ case SCONF_NO_REFERER_TO:
++ return &ent->no_referer_to;
++ }
++ return NULL;
++}
+diff --git a/regex.c b/regex.c
+index 5bee4b2..5675d09 100644
+--- a/regex.c
++++ b/regex.c
+@@ -77,7 +77,7 @@ static longchar
+ set_longchar(char *str)
+ {
+ unsigned char *p = (unsigned char *)str;
+- longchar r;
++ longchar r = { };
+
+ #ifdef USE_M17N
+ if (*p & 0x80) {
+diff --git a/scripts/w3mman/w3mman.1.in b/scripts/w3mman/w3mman.1.in
+index 1c0361d..1b1d990 100644
+--- a/scripts/w3mman/w3mman.1.in
++++ b/scripts/w3mman/w3mman.1.in
+@@ -1,4 +1,4 @@
+-.TH W3MMAN 1 "Nov 5, 2005"
++.TH W3MMAN 1 "Nov 23, 2014"
+ .\" Please adjust this date whenever revising the manpage.
+ .\"
+ .\" Some roff macros, for reference:
+@@ -12,19 +12,19 @@
+ .\" .sp <n> insert n+1 empty lines
+ .\" for manpage-specific macros, see man(7)
+ .SH NAME
+-w3mman \- an interface to the on-line reference manuals by w3m(1)
++w3mman \- an interface to the on-line reference manuals via w3m(1)
+ .SH SYNOPSIS
+ .B w3mman
+-.RI "[-M " path ] " " [ section ] " page"
++.RI "[\-M " path ] " " [ section ] " page"
+ .br
+ .B w3mman
+-.RI "[-M " path "] -k " keyword
++.RI "[\-M " path "] \-k " keyword
+ .br
+ .B w3mman
+-.RI -l " file
++.RI \-l " file
+ .SH DESCRIPTION
+ .B w3mman
+-is the system's manual pager by
++is a pager for manual pages, using
+ .BR w3m (1).
+ .SH OPTIONS
+ A summary of options is included below.
+@@ -42,6 +42,7 @@ Specify
+ Specify a
+ .I file.
+ .SH ENVIRONMENT
++Two variables are available for debugging.
+ .TP
+ .B W3MMAN_W3M
+ If W3MMAN_W3M is set, its value is used instead of @W3M@.
+@@ -51,7 +52,7 @@ If W3MMAN_MAN is set, its value is used instead of @MAN@.
+ .SH FILES
+ .TP
+ .I @libexecdir@/@PACKAGE@/cgi-bin/w3mman2html.cgi
+-convert manual page to html.
++manual page to HTML convertor.
+ .SH SEE ALSO
+ .BR man (1),
+ .BR w3m (1).
+diff --git a/scripts/w3mman/w3mman2html.cgi.in b/scripts/w3mman/w3mman2html.cgi.in
+index f430307..2cd00f9 100644
+--- a/scripts/w3mman/w3mman2html.cgi.in
++++ b/scripts/w3mman/w3mman2html.cgi.in
+@@ -34,7 +34,6 @@ Content-Type: text/html
+ EOF
+ $keyword =~ s:([^-\w\200-\377.,])::g;
+ open(F, "$MAN -k $keyword 2> /dev/null |");
+- @line = ();
+ while(<F>) {
+ chop;
+ $_ = &html_quote($_);
+@@ -126,12 +125,14 @@ while(<F>) {
+ s/\&/\&amp;/g;
+ s/\</\&lt;/g;
+ s/\>/\&gt;/g;
++ # non ASCII UTF-8 codepoint
++ my $utf8="[\300-\337][\200-\277]|[\340-\357][\200-\277]{2}|[\360-\367][\200-\277]{3}|[\370-\373][\200-\277]{4}|[\374\375][\200-\277]{5}";
+
+- s@([\200-\377].)(\010{1,2}\1)+@<b>$1</b>@g;
++ s@($utf8)(\010\1)+@<b>$1</b>@g;
+ s@(\&\w+;|.)(\010\1)+@<b>$1</b>@g;
+- s@__\010{1,2}((\<b\>)?[\200-\377].(\</b\>)?)@<u>$1</u>@g;
++ s@_\010((\<b\>)?($utf8)(\</b\>)?)@<u>$1</u>@g;
+ s@_\010((\<b\>)?(\&\w+\;|.)(\</b\>)?)@<u>$1</u>@g;
+- s@((\<b\>)?[\200-\377].(\</b\>)?)\010{1,2}__@<u>$1</u>@g;
++ s@((\<b\>)?($utf8)(\</b\>)?)\010_@<u>$1</u>@g;
+ s@((\<b\>)?(\&\w+\;|.)(\</b\>)?)\010_@<u>$1</u>@g;
+ s@.\010(.)@$1@g;
+
+@@ -156,7 +157,7 @@ EOF
+ }
+
+ s@(http|ftp)://[\w.\-/~]+[\w/]@<a href="$&">$&</a>@g;
+- s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1<a href="mailto:$3">$2$3</a>@g;
++ s@\b(mailto:|)(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@<a href="mailto:$2">$1$2</a>@g;
+ s@(\W)(\~?/[\w.][\w.\-/~]*)@$1 . &file_ref($2)@ge;
+ s@(include(<\/?[bu]\>|\s)*\&lt;)([\w.\-/]+)@$1 . &include_ref($3)@ge;
+ if ($prev && m@^\s*(\<[bu]\>)*(\w[\w.\-]*)(\</[bu]\>)*(\([\dm]\w*\))@) {
+@@ -220,7 +221,7 @@ sub is_command {
+ local($p);
+
+ (! -d && -x) || return 0;
+- if (! defined(%PATH)) {
++ if (! %PATH) {
+ for $p (split(":", $ENV{'PATH'})) {
+ $p =~ s@/+$@@;
+ $PATH{$p} = 1;
+diff --git a/table.c b/table.c
+index e1243ff..d376284 100644
+--- a/table.c
++++ b/table.c
+@@ -2878,6 +2878,14 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode,
+ tmp = process_input(tag);
+ feed_table1(tbl, tmp, mode, width);
+ break;
++ case HTML_BUTTON:
++ tmp = process_button(tag);
++ feed_table1(tbl, tmp, mode, width);
++ break;
++ case HTML_N_BUTTON:
++ tmp = process_n_button();
++ feed_table1(tbl, tmp, mode, width);
++ break;
+ case HTML_SELECT:
+ tmp = process_select(tag);
+ if (tmp)
+diff --git a/table.h b/table.h
+index 83b661f..fdcdef3 100644
+--- a/table.h
++++ b/table.h
+@@ -17,7 +17,7 @@
+ #define MAX_TABLE_N 20 /* maximum number of table in same level */
+
+ #define MAXROW 50
+-#define MAXCOL 50
++#define MAXCOL 256
+
+ #define MAX_WIDTH 80
+
+diff --git a/tagtable.tab b/tagtable.tab
+index f9b7b76..f5a2c30 100644
+--- a/tagtable.tab
++++ b/tagtable.tab
+@@ -176,6 +176,7 @@ bdo HTML_BDO
+ big HTML_BIG
+ /big HTML_N_BIG
+ button HTML_BUTTON
++/button HTML_N_BUTTON
+ fieldset HTML_FIELDSET
+ /fieldset HTML_N_FIELDSET
+ iframe HTML_IFRAME
+diff --git a/terms.c b/terms.c
+index 7a3c987..79996f1 100644
+--- a/terms.c
++++ b/terms.c
+@@ -12,6 +12,7 @@
+ #include <unistd.h>
+ #include "config.h"
+ #include <string.h>
++#include <sys/wait.h>
+ #ifdef HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+@@ -222,6 +223,7 @@ static void
+ check_cygwin_console(void)
+ {
+ char *term = getenv("TERM");
++ char *ctype;
+ HANDLE hWnd;
+
+ if (term == NULL)
+@@ -236,7 +238,9 @@ check_cygwin_console(void)
+ isLocalConsole = 1;
+ }
+ }
+- if (strncmp(getenv("LANG"), "ja", 2) == 0) {
++ if (((ctype = getenv("LC_ALL")) ||
++ (ctype = getenv("LC_CTYPE")) ||
++ (ctype = getenv("LANG"))) && strncmp(ctype, "ja", 2) == 0) {
+ isWinConsole = TERM_CYGWIN_RESERVE_IME;
+ }
+ #ifdef SUPPORT_WIN9X_CONSOLE_MBCS
+@@ -463,6 +467,260 @@ writestr(char *s)
+
+ #define MOVE(line,column) writestr(tgoto(T_cm,column,line));
+
++void
++put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
++{
++ Str buf;
++ char *size ;
++
++ if (w > 0 && h > 0)
++ size = Sprintf("%dx%d",w,h)->ptr;
++ else
++ size = "";
++
++ MOVE(y,x);
++ buf = Sprintf("\x1b]5379;show_picture %s %s %dx%d+%d+%d\x07",url,size,sw,sh,sx,sy);
++ writestr(buf->ptr);
++ MOVE(Currentbuf->cursorY,Currentbuf->cursorX);
++}
++
++static void
++save_gif(const char *path, u_char *header, size_t header_size, u_char *body, size_t body_size)
++{
++ int fd;
++
++ if ((fd = open(path, O_WRONLY|O_CREAT, 0600)) >= 0) {
++ write(fd, header, header_size) ;
++ write(fd, body, body_size) ;
++ write(fd, "\x3b" , 1) ;
++ close(fd) ;
++ }
++}
++
++static u_char *
++skip_gif_header(u_char *p)
++{
++ /* Header */
++ p += 10;
++
++ if (*(p) & 0x80) {
++ p += (3 * (2 << ((*p) & 0x7)));
++ }
++ p += 3;
++
++ return p;
++}
++
++static Str
++save_first_animation_frame(const char *path)
++{
++ int fd;
++ struct stat st;
++ u_char *header;
++ size_t header_size;
++ u_char *body;
++ u_char *p;
++ ssize_t len;
++ Str new_path;
++
++ new_path = Strnew_charp(path);
++ Strcat_charp(new_path, "-1");
++ if (stat(new_path->ptr, &st) == 0) {
++ return new_path;
++ }
++
++ if ((fd = open( path, O_RDONLY)) < 0) {
++ return NULL;
++ }
++
++ if (fstat( fd, &st) != 0 || ! (header = GC_malloc( st.st_size))){
++ close( fd);
++ return NULL;
++ }
++
++ len = read(fd, header, st.st_size);
++ close(fd);
++
++ /* Header */
++
++ if (len != st.st_size || strncmp(header, "GIF89a", 6) != 0) {
++ return NULL;
++ }
++
++ p = skip_gif_header(header);
++ header_size = p - header;
++
++ /* Application Extension */
++ if (p[0] == 0x21 && p[1] == 0xff) {
++ p += 19;
++ }
++
++ /* Other blocks */
++ body = NULL;
++ while (p + 2 < header + st.st_size) {
++ if (*(p++) == 0x21 && *(p++) == 0xf9 && *(p++) == 0x04) {
++ if( body) {
++ /* Graphic Control Extension */
++ save_gif(new_path->ptr, header, header_size, body, p - 3 - body);
++ return new_path;
++ }
++ else {
++ /* skip the first frame. */
++ }
++ body = p - 3;
++ }
++ }
++
++ return NULL;
++}
++
++void ttymode_set(int mode, int imode);
++void ttymode_reset(int mode, int imode);
++
++void
++put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
++{
++ pid_t pid;
++ int do_anim;
++ MySignalHandler(*volatile previntr) (SIGNAL_ARG);
++ MySignalHandler(*volatile prevquit) (SIGNAL_ARG);
++ MySignalHandler(*volatile prevstop) (SIGNAL_ARG);
++
++ MOVE(y,x);
++ flush_tty();
++
++ do_anim = (n_terminal_image == 1 && x == 0 && y == 0 && sx == 0 && sy == 0);
++
++ previntr = mySignal(SIGINT, SIG_IGN);
++ prevquit = mySignal(SIGQUIT, SIG_IGN);
++ prevstop = mySignal(SIGTSTP, SIG_IGN);
++
++ if ((pid = fork()) == 0) {
++ char *env;
++ int n = 0;
++ char *argv[20];
++ char digit[2][11+1];
++ char clip[44+3+1];
++ Str str_url;
++
++ close(STDERR_FILENO); /* Don't output error message. */
++ if (do_anim) {
++ writestr("\x1b[?80h");
++ }
++ else if (!strstr(url, "://") && strcmp(url+strlen(url)-4, ".gif") == 0 &&
++ (str_url = save_first_animation_frame(url))) {
++ url = str_url->ptr;
++ }
++ ttymode_set(ISIG, 0);
++
++ if ((env = getenv("W3M_IMG2SIXEL"))) {
++ char *p;
++ env = Strnew_charp(env)->ptr;
++ while (n < 8 && (p = strchr(env, ' '))) {
++ *p = '\0';
++ if (*env != '\0') {
++ argv[n++] = env;
++ }
++ env = p+1;
++ }
++ if (*env != '\0') {
++ argv[n++] = env;
++ }
++ }
++ else {
++ argv[n++] = "img2sixel";
++ }
++ argv[n++] = "-l";
++ argv[n++] = do_anim ? "auto" : "disable";
++ argv[n++] = "-w";
++ sprintf(digit[0], "%d", w*pixel_per_char_i);
++ argv[n++] = digit[0];
++ argv[n++] = "-h";
++ sprintf(digit[1], "%d", h*pixel_per_line_i);
++ argv[n++] = digit[1];
++ argv[n++] = "-c";
++ sprintf(clip, "%dx%d+%d+%d", sw*pixel_per_char_i, sh*pixel_per_line_i,
++ sx*pixel_per_char_i, sy*pixel_per_line_i);
++ argv[n++] = clip;
++ argv[n++] = url;
++ if (getenv("TERM") && strcmp(getenv("TERM"), "screen") == 0 &&
++ (!getenv("SCREEN_VARIANT") || strcmp(getenv("SCREEN_VARIANT"), "sixel") != 0)) {
++ argv[n++] = "-P";
++ }
++ argv[n++] = NULL;
++ execvp(argv[0],argv);
++ exit(0);
++ }
++ else if (pid > 0) {
++ int status;
++ waitpid(pid, &status, 0);
++ ttymode_reset(ISIG, 0);
++ mySignal(SIGINT, previntr);
++ mySignal(SIGQUIT, prevquit);
++ mySignal(SIGTSTP, prevstop);
++ if (do_anim) {
++ writestr("\x1b[?80l");
++ }
++ }
++
++ MOVE(Currentbuf->cursorY,Currentbuf->cursorX);
++}
++
++int
++get_pixel_per_cell(int *ppc, int *ppl)
++{
++ fd_set rfd;
++ struct timeval tval;
++ char buf[100];
++ char *p;
++ ssize_t len;
++ ssize_t left;
++ int wp,hp,wc,hc;
++ int i;
++
++#ifdef TIOCGWINSZ
++ struct winsize ws;
++ if (ioctl(tty, TIOCGWINSZ, &ws) == 0 && ws.ws_ypixel > 0 && ws.ws_row > 0 &&
++ ws.ws_xpixel > 0 && ws.ws_col > 0) {
++ *ppc = ws.ws_xpixel / ws.ws_col;
++ *ppl = ws.ws_ypixel / ws.ws_row;
++ return 1;
++ }
++#endif
++
++ fputs("\x1b[14t\x1b[18t",ttyf); flush_tty();
++
++ p = buf;
++ left = sizeof(buf) - 1;
++ for (i = 0; i < 10; i++) {
++ tval.tv_usec = 200000; /* 0.2 sec * 10 */
++ tval.tv_sec = 0;
++ FD_ZERO(&rfd);
++ FD_SET(tty,&rfd);
++ if (select(tty+1,&rfd,NULL,NULL,&tval) <= 0 || ! FD_ISSET(tty,&rfd))
++ continue;
++
++ if ((len = read(tty,p,left)) <= 0)
++ continue;
++ p[len] = '\0';
++
++ if (sscanf(buf,"\x1b[4;%d;%dt\x1b[8;%d;%dt",&hp,&wp,&hc,&wc) == 4) {
++ if (wp > 0 && wc > 0 && hp > 0 && hc > 0) {
++ *ppc = wp / wc;
++ *ppl = hp / hc;
++ return 1;
++ }
++ else {
++ return 0;
++ }
++ }
++ p += len;
++ left -= len;
++ }
++
++ return 0;
++}
++
+ #ifdef USE_MOUSE
+ #define W3M_TERM_INFO(name, title, mouse) name, title, mouse
+ #define NEED_XTERM_ON (1)
+@@ -634,7 +892,8 @@ reset_tty(void)
+ writestr(T_se); /* reset terminal */
+ flush_tty();
+ TerminalSet(tty, &d_ioval);
+- close_tty();
++ if (tty != 2)
++ close_tty();
+ }
+
+ static MySignalHandler
+@@ -2027,8 +2286,8 @@ sleep_till_anykey(int sec, int purge)
+
+ #ifdef USE_MOUSE
+
+-#define XTERM_ON {fputs("\033[?1001s\033[?1000h",ttyf); flush_tty();}
+-#define XTERM_OFF {fputs("\033[?1000l\033[?1001r",ttyf); flush_tty();}
++#define XTERM_ON {fputs("\033[?1001s\033[?1000h\033[?1006h",ttyf); flush_tty();}
++#define XTERM_OFF {fputs("\033[?1006l\033[?1000l\033[?1001r",ttyf); flush_tty();}
+ #define CYGWIN_ON {fputs("\033[?1000h",ttyf); flush_tty();}
+ #define CYGWIN_OFF {fputs("\033[?1000l",ttyf); flush_tty();}
+
+diff --git a/url.c b/url.c
+index ed6062e..10089ca 100644
+--- a/url.c
++++ b/url.c
+@@ -121,6 +121,7 @@ static struct table2 DefaultGuess[] = {
+ };
+
+ static void add_index_file(ParsedURL *pu, URLFile *uf);
++static char * schemeNumToName(int scheme);
+
+ /* #define HTTP_DEFAULT_FILE "/index.html" */
+
+@@ -326,6 +327,7 @@ openSSLHandle(int sock, char *hostname, char **p_cert)
+ SSL_load_error_strings();
+ if (!(ssl_ctx = SSL_CTX_new(SSLv23_client_method())))
+ goto eend;
++ SSL_CTX_set_cipher_list(ssl_ctx, "DEFAULT:!LOW:!EXP");
+ option = SSL_OP_ALL;
+ if (ssl_forbid_method) {
+ if (strchr(ssl_forbid_method, '2'))
+@@ -337,7 +339,15 @@ openSSLHandle(int sock, char *hostname, char **p_cert)
+ if (strchr(ssl_forbid_method, 'T'))
+ option |= SSL_OP_NO_TLSv1;
+ }
++#ifdef SSL_OP_NO_COMPRESSION
++ option |= SSL_OP_NO_COMPRESSION;
++#endif
+ SSL_CTX_set_options(ssl_ctx, option);
++
++#ifdef SSL_MODE_RELEASE_BUFFERS
++ SSL_CTX_set_mode (ssl_ctx, SSL_MODE_RELEASE_BUFFERS);
++#endif
++
+ #ifdef USE_SSL_VERIFY
+ /* derived from openssl-0.9.5/apps/s_{client,cb}.c */
+ #if 1 /* use SSL_get_verify_result() to verify cert */
+@@ -444,6 +454,8 @@ baseURL(Buffer *buf)
+ /* <BASE> tag is defined in the document */
+ return buf->baseURL;
+ }
++ else if (IS_EMPTY_PARSED_URL(&buf->currentURL))
++ return NULL;
+ else
+ return &buf->currentURL;
+ }
+@@ -638,16 +650,21 @@ openSocket(char *const hostname,
+ #define COPYPATH_SPC_ALLOW 0
+ #define COPYPATH_SPC_IGNORE 1
+ #define COPYPATH_SPC_REPLACE 2
++#define COPYPATH_SPC_MASK 3
++#define COPYPATH_LOWERCASE 4
+
+ static char *
+ copyPath(char *orgpath, int length, int option)
+ {
+ Str tmp = Strnew();
+- while (*orgpath && length != 0) {
+- if (IS_SPACE(*orgpath)) {
+- switch (option) {
++ char ch;
++ while ((ch = *orgpath) != 0 && length != 0) {
++ if (option & COPYPATH_LOWERCASE)
++ ch = TOLOWER(ch);
++ if (IS_SPACE(ch)) {
++ switch (option & COPYPATH_SPC_MASK) {
+ case COPYPATH_SPC_ALLOW:
+- Strcat_char(tmp, *orgpath);
++ Strcat_char(tmp, ch);
+ break;
+ case COPYPATH_SPC_IGNORE:
+ /* do nothing */
+@@ -658,7 +675,7 @@ copyPath(char *orgpath, int length, int option)
+ }
+ }
+ else
+- Strcat_char(tmp, *orgpath);
++ Strcat_char(tmp, ch);
+ orgpath++;
+ length--;
+ }
+@@ -668,22 +685,14 @@ copyPath(char *orgpath, int length, int option)
+ void
+ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
+ {
+- char *p, *q;
++ char *p, *q, *qq;
+ Str tmp;
+
+ url = url_quote(url); /* quote 0x01-0x20, 0x7F-0xFF */
+
+ p = url;
++ copyParsedURL(p_url, NULL);
+ p_url->scheme = SCM_MISSING;
+- p_url->port = 0;
+- p_url->user = NULL;
+- p_url->pass = NULL;
+- p_url->host = NULL;
+- p_url->is_nocache = 0;
+- p_url->file = NULL;
+- p_url->real_file = NULL;
+- p_url->query = NULL;
+- p_url->label = NULL;
+
+ /* RFC1808: Relative Uniform Resource Locators
+ * 4. Resolving Relative URLs
+@@ -694,7 +703,7 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
+ goto do_label;
+ }
+ #if defined( __EMX__ ) || defined( __CYGWIN__ )
+- if (!strncmp(url, "file://localhost/", 17)) {
++ if (!strncasecmp(url, "file://localhost/", 17)) {
+ p_url->scheme = SCM_LOCAL;
+ p += 17 - 1;
+ url += 17 - 1;
+@@ -802,19 +811,20 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
+ /* scheme://user:pass@host or
+ * scheme://host:port
+ */
+- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
++ qq = q;
+ q = ++p;
+ while (*p && strchr("@/?#", *p) == NULL)
+ p++;
+ if (*p == '@') {
+ /* scheme://user:pass@... */
++ p_url->user = copyPath(qq, q - 1 - qq, COPYPATH_SPC_IGNORE);
+ p_url->pass = copyPath(q, p - q, COPYPATH_SPC_ALLOW);
+ q = ++p;
+- p_url->user = p_url->host;
+- p_url->host = NULL;
+ goto analyze_url;
+ }
+ /* scheme://host:port/ */
++ p_url->host = copyPath(qq, q - 1 - qq,
++ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE);
+ tmp = Strnew_charp_n(q, p - q);
+ p_url->port = atoi(tmp->ptr);
+ /* *p is one of ['\0', '/', '?', '#'] */
+@@ -829,7 +839,8 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
+ case '/':
+ case '?':
+ case '#':
+- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
++ p_url->host = copyPath(q, p - q,
++ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE);
+ p_url->port = DefaultPort[p_url->scheme];
+ break;
+ }
+@@ -956,12 +967,16 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
+ p_url->label = NULL;
+ }
+
+-#define initParsedURL(p) bzero(p,sizeof(ParsedURL))
+ #define ALLOC_STR(s) ((s)==NULL?NULL:allocStr(s,-1))
+
+ void
+-copyParsedURL(ParsedURL *p, ParsedURL *q)
++copyParsedURL(ParsedURL *p, const ParsedURL *q)
+ {
++ if (q == NULL) {
++ memset(p, 0, sizeof(ParsedURL));
++ p->scheme = SCM_UNKNOWN;
++ return;
++ }
+ p->scheme = q->scheme;
+ p->port = q->port;
+ p->is_nocache = q->is_nocache;
+@@ -1280,9 +1295,23 @@ getURLScheme(char **url)
+ }
+
+ static char *
++schemeNumToName(int scheme)
++{
++ int i;
++
++ for (i = 0; schemetable[i].cmdname != NULL; i++) {
++ if (schemetable[i].cmd == scheme)
++ return schemetable[i].cmdname;
++ }
++ return NULL;
++}
++
++static char *
+ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
+ {
+ Str s = Strnew();
++ const int *no_referer_ptr;
++ int no_referer;
+
+ Strcat_charp(s, "User-Agent: ");
+ if (UserAgent == NULL || *UserAgent == '\0')
+@@ -1306,7 +1335,12 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
+ Strcat_charp(s, "Pragma: no-cache\r\n");
+ Strcat_charp(s, "Cache-control: no-cache\r\n");
+ }
+- if (!NoSendReferer) {
++ no_referer = NoSendReferer;
++ no_referer_ptr = query_SCONF_NO_REFERER_FROM(current);
++ no_referer = NoSendReferer || (no_referer_ptr && *no_referer_ptr);
++ no_referer_ptr = query_SCONF_NO_REFERER_TO(target);
++ no_referer = no_referer || (no_referer_ptr && *no_referer_ptr);
++ if (!no_referer) {
+ #ifdef USE_SSL
+ if (current && current->scheme == SCM_HTTPS && target->scheme != SCM_HTTPS) {
+ /* Don't send Referer: if https:// -> http:// */
+@@ -1314,6 +1348,7 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
+ else
+ #endif
+ if (referer == NULL && current && current->scheme != SCM_LOCAL &&
++ current->scheme != SCM_LOCAL_CGI &&
+ (current->scheme != SCM_FTP ||
+ (current->user == NULL && current->pass == NULL))) {
+ char *p = current->label;
+@@ -1603,7 +1638,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
+ pu->host != NULL && !check_no_proxy(pu->host)) {
+ hr->flag |= HR_FLAG_PROXY;
+ sock = openSocket(FTP_proxy_parsed.host,
+- schemetable[FTP_proxy_parsed.scheme].cmdname,
++ schemeNumToName(FTP_proxy_parsed.scheme),
+ FTP_proxy_parsed.port);
+ if (sock < 0)
+ return uf;
+@@ -1645,15 +1680,15 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
+ }
+ else if (pu->scheme == SCM_HTTPS) {
+ sock = openSocket(HTTPS_proxy_parsed.host,
+- schemetable[HTTPS_proxy_parsed.scheme].
+- cmdname, HTTPS_proxy_parsed.port);
++ schemeNumToName(HTTPS_proxy_parsed.scheme),
++ HTTPS_proxy_parsed.port);
+ sslh = NULL;
+ }
+ else {
+ #endif /* USE_SSL */
+ sock = openSocket(HTTP_proxy_parsed.host,
+- schemetable[HTTP_proxy_parsed.scheme].
+- cmdname, HTTP_proxy_parsed.port);
++ schemeNumToName(HTTP_proxy_parsed.scheme),
++ HTTP_proxy_parsed.port);
+ #ifdef USE_SSL
+ sslh = NULL;
+ }
+@@ -1685,8 +1720,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
+ }
+ }
+ else {
+- sock = openSocket(pu->host,
+- schemetable[pu->scheme].cmdname, pu->port);
++ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port);
+ if (sock < 0) {
+ *status = HTST_MISSING;
+ return uf;
+@@ -1750,7 +1784,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
+ pu->host != NULL && !check_no_proxy(pu->host)) {
+ hr->flag |= HR_FLAG_PROXY;
+ sock = openSocket(GOPHER_proxy_parsed.host,
+- schemetable[GOPHER_proxy_parsed.scheme].cmdname,
++ schemeNumToName(GOPHER_proxy_parsed.scheme),
+ GOPHER_proxy_parsed.port);
+ if (sock < 0)
+ return uf;
+@@ -1758,8 +1792,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
+ tmp = HTTPrequest(pu, current, hr, extra_header);
+ }
+ else {
+- sock = openSocket(pu->host,
+- schemetable[pu->scheme].cmdname, pu->port);
++ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port);
+ if (sock < 0)
+ return uf;
+ if (pu->file == NULL)
+@@ -2234,3 +2267,66 @@ schemeToProxy(int scheme)
+ }
+ return pu;
+ }
++
++#ifdef USE_M17N
++wc_ces
++url_to_charset(const char *url, const ParsedURL *base, wc_ces doc_charset)
++{
++ const ParsedURL *pu;
++ ParsedURL pu_buf;
++ const wc_ces *csptr;
++
++ if (url && *url && *url != '#') {
++ parseURL2((char *)url, &pu_buf, (ParsedURL *)base);
++ pu = &pu_buf;
++ } else {
++ pu = base;
++ }
++ if (pu && (pu->scheme == SCM_LOCAL || pu->scheme == SCM_LOCAL_CGI))
++ return SystemCharset;
++ csptr = query_SCONF_URL_CHARSET(pu);
++ return (csptr && *csptr) ? *csptr :
++ doc_charset ? doc_charset : DocumentCharset;
++}
++
++char *
++url_encode(const char *url, const ParsedURL *base, wc_ces doc_charset)
++{
++ return url_quote_conv((char *)url,
++ url_to_charset(url, base, doc_charset));
++}
++
++#if 0 /* unused */
++char *
++url_decode(const char *url, const ParsedURL *base, wc_ces doc_charset)
++{
++ if (!DecodeURL)
++ return (char *)url;
++ return url_unquote_conv((char *)url,
++ url_to_charset(url, base, doc_charset));
++}
++#endif
++
++char *
++url_decode2(const char *url, const Buffer *buf)
++{
++ wc_ces url_charset;
++
++ if (!DecodeURL)
++ return (char *)url;
++ url_charset = buf ?
++ url_to_charset(url, baseURL((Buffer *)buf), buf->document_charset) :
++ url_to_charset(url, NULL, 0);
++ return url_unquote_conv((char *)url, url_charset);
++}
++
++#else /* !defined(USE_M17N) */
++
++char *
++url_decode0(const char *url)
++{
++ if (!DecodeURL)
++ return (char *)url;
++ return url_unquote_conv((char *)url, 0);
++}
++#endif /* !defined(USE_M17N) */
+diff --git a/version.c.in b/version.c.in
+index 31d30e4..ab25163 100644
+--- a/version.c.in
++++ b/version.c.in
+@@ -1,5 +1,5 @@
+ /* $Id: version.c.in,v 1.49 2012/05/22 09:45:56 inu Exp $ */
+-#define CURRENT_VERSION "w3m/0.5.3+cvs"
++#define CURRENT_VERSION "w3m/0.5.3+gitYYYYMMDD"
+
+ #ifndef FM_H
+ char *w3m_version = CURRENT_VERSION;
+diff --git a/w3mbookmark.c b/w3mbookmark.c
+index 4355536..fcbad11 100644
+--- a/w3mbookmark.c
++++ b/w3mbookmark.c
+@@ -99,7 +99,7 @@ create_new_bookmark(char *bmark, char *section, char *title, char *url,
+ fprintf(f, "<body>\n<h1>Bookmarks</h1>\n");
+ fprintf(f, "<h2>%s</h2>\n<ul>\n", section);
+ fprintf(f, "<li><a href=\"%s\">%s</a>\n", url, title);
+- fprintf(f, end_section);
++ fprintf(f, "%s", end_section);
+ fprintf(f, "</ul>\n</body>\n</html>\n");
+ fclose(f);
+ }
+diff --git a/w3mimg/Makefile.in b/w3mimg/Makefile.in
+index dfc550c..8e2ad73 100644
+--- a/w3mimg/Makefile.in
++++ b/w3mimg/Makefile.in
+@@ -16,9 +16,9 @@ IMGCFLAGS=@IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@
+ IMGOBJS=@IMGOBJS@
+
+ .PHONY: $(SUBDIRS)
+-all: @IMGTARGETS@ w3mimg.a
++all: w3mimg.a
+
+-w3mimg.a: $(IMGOBJS)
++w3mimg.a: w3mimg.o @IMGTARGETS@
+ $(AR) rv $@ $(IMGOBJS)
+ $(RANLIB) $@
+
+diff --git a/w3mimg/fb/fb.c b/w3mimg/fb/fb.c
+index cd11128..7b6f23b 100644
+--- a/w3mimg/fb/fb.c
++++ b/w3mimg/fb/fb.c
+@@ -12,12 +12,24 @@
+ #include <errno.h>
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
++#if defined(__linux__)
+ #include <linux/fb.h>
++#elif defined(__FreeBSD__)
++#include <sys/fbio.h>
++#endif
++#if defined(__FreeBSD__)
++#include <sys/types.h>
++#include <machine/param.h>
++#endif
+
+ #include "fb.h"
+
+ #define FB_ENV "FRAMEBUFFER"
++#if defined(__linux__)
+ #define FB_DEFDEV "/dev/fb0"
++#elif defined(__FreeBSD__)
++#define FB_DEFDEV "/dev/ttyv0"
++#endif
+
+ #define MONO_OFFSET_8BIT 0x40
+ #define COLORS_MONO_8BIT 0x40
+@@ -38,22 +50,65 @@
+
+ #define IMAGE_SIZE_MAX 10000
+
++#if defined(__linux__)
+ static struct fb_cmap *fb_cmap_create(struct fb_fix_screeninfo *,
+ struct fb_var_screeninfo *);
++#elif defined(__FreeBSD__)
++static video_color_palette_t *fb_cmap_create(video_info_t *video_info,
++ video_adapter_info_t *video_adapter_info);
++#endif
++#if defined(__linux__)
+ static void fb_cmap_destroy(struct fb_cmap *cmap);
++#elif defined(__FreeBSD__)
++static void fb_cmap_destroy(video_color_palette_t *cmap);
++#endif
++#if defined(__linux__)
+ static int fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo);
++#endif
++#if defined(__linux__)
+ static void *fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo);
++#elif defined(__FreeBSD__)
++static void *fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info);
++#endif
++#if defined(__linux__)
+ static int fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo);
++#elif defined(__FreeBSD__)
++static int fb_munmap(void *buf, video_adapter_info_t *video_adapter_info);
++#endif
++#if defined(__linux__)
+ static int fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo);
++#endif
++#if defined(__linux__)
+ static int fb_cmap_set(int fbfp, struct fb_cmap *cmap);
++#elif defined(__FreeBSD__)
++static int fb_cmap_set(int fbfp, video_color_palette_t *cmap);
++#endif
++#if defined(__linux__)
+ static int fb_cmap_get(int fbfp, struct fb_cmap *cmap);
++#elif defined(__FreeBSD__)
++static int fb_cmap_get(int fbfp, video_color_palette_t *cmap);
++#endif
+ static int fb_cmap_init(void);
+ static int fb_get_cmap_index(int r, int g, int b);
+ static unsigned long fb_get_packed_color(int r, int g, int b);
++#if defined(__FreeBSD__)
++static int fb_video_mode_get(int fbfp, int *video_mode);
++static int fb_video_info_get(int fbfp, video_info_t *video_info);
++static int fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info);
++#endif
+
++#if defined(__linux__)
+ static struct fb_fix_screeninfo fscinfo;
+ static struct fb_var_screeninfo vscinfo;
++#elif defined(__FreeBSD__)
++static video_info_t video_info;
++static video_adapter_info_t video_adapter_info;
++#endif
++#if defined(__linux__)
+ static struct fb_cmap *cmap = NULL, *cmap_org = NULL;
++#elif defined(__FreeBSD__)
++static video_color_palette_t *cmap = NULL, *cmap_org = NULL;
++#endif
+ static int is_open = FALSE;
+ static int fbfp = -1;
+ static size_t pixel_size = 0;
+@@ -63,6 +118,9 @@ int
+ fb_open(void)
+ {
+ char *fbdev = { FB_DEFDEV };
++#if defined(__FreeBSD__)
++ int video_mode;
++#endif
+
+ if (is_open == TRUE)
+ return 1;
+@@ -76,6 +134,7 @@ fb_open(void)
+ goto ERR_END;
+ }
+
++#if defined(__linux__)
+ if (fb_fscrn_get(fbfp, &fscinfo)) {
+ goto ERR_END;
+ }
+@@ -83,22 +142,67 @@ fb_open(void)
+ if (fb_vscrn_get(fbfp, &vscinfo)) {
+ goto ERR_END;
+ }
++#elif defined(__FreeBSD__)
++ if (fb_video_mode_get(fbfp, &video_mode)) {
++ goto ERR_END;
++ }
++ video_info.vi_mode = video_mode;
++
++ if (fb_video_info_get(fbfp, &video_info)) {
++ goto ERR_END;
++ }
+
++ if (fb_video_adapter_info_get(fbfp, &video_adapter_info)) {
++ goto ERR_END;
++ }
++ if (!(video_info.vi_flags & V_INFO_GRAPHICS) ||
++ !(video_info.vi_flags & V_INFO_LINEAR)) {
++ goto ERR_END;
++ }
++#endif
++
++#if defined(__linux__)
+ if ((cmap = fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) {
+ goto ERR_END;
+ }
++#elif defined(__FreeBSD__)
++ if ((cmap = fb_cmap_create(&video_info, &video_adapter_info)) == (video_color_palette_t *)-1) {
++ goto ERR_END;
++ }
++#endif
+
++#if defined(__linux__)
+ if (!(buf = fb_mmap(fbfp, &fscinfo))) {
+ fprintf(stderr, "Can't allocate memory.\n");
+ goto ERR_END;
+ }
++#elif defined(__FreeBSD__)
++ if (!(buf = fb_mmap(fbfp, &video_adapter_info))) {
++ fprintf(stderr, "Can't allocate memory.\n");
++ goto ERR_END;
++ }
++#endif
+
++#if defined(__linux__)
+ if (fscinfo.type != FB_TYPE_PACKED_PIXELS) {
+ fprintf(stderr, "This type of framebuffer is not supported.\n");
+ goto ERR_END;
+ }
++#elif defined(__FreeBSD__)
++ if (!(video_info.vi_mem_model == V_INFO_MM_PACKED ||
++ video_info.vi_mem_model == V_INFO_MM_DIRECT)) {
++ fprintf(stderr, "This type of framebuffer is not supported.\n");
++ goto ERR_END;
++ }
++#endif
+
++#if defined(__linux__)
+ if (fscinfo.visual == FB_VISUAL_PSEUDOCOLOR && vscinfo.bits_per_pixel == 8) {
++#elif defined(__FreeBSD__)
++ if (video_adapter_info.va_flags & V_ADP_PALETTE &&
++ video_info.vi_mem_model == V_INFO_MM_PACKED &&
++ video_info.vi_depth == 8) {
++#endif
+ if (fb_cmap_get(fbfp, cmap)) {
+ fprintf(stderr, "Can't get color map.\n");
+ fb_cmap_destroy(cmap);
+@@ -111,12 +215,20 @@ fb_open(void)
+
+ pixel_size = 1;
+ }
++#if defined(__linux__)
+ else if ((fscinfo.visual == FB_VISUAL_TRUECOLOR ||
+ fscinfo.visual == FB_VISUAL_DIRECTCOLOR) &&
+ (vscinfo.bits_per_pixel == 15 ||
+ vscinfo.bits_per_pixel == 16 ||
+ vscinfo.bits_per_pixel == 24 || vscinfo.bits_per_pixel == 32)) {
+ pixel_size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT;
++#elif defined(__FreeBSD__)
++ else if (video_info.vi_mem_model == V_INFO_MM_DIRECT &&
++ (video_info.vi_depth == 15 ||
++ video_info.vi_depth == 16 ||
++ video_info.vi_depth == 24 || video_info.vi_depth == 32)) {
++ pixel_size = (video_info.vi_depth + 7) / CHAR_BIT;
++#endif
+ }
+ else {
+ fprintf(stderr, "This type of framebuffer is not supported.\n");
+@@ -147,7 +259,11 @@ fb_close(void)
+ cmap = NULL;
+ }
+ if (buf != NULL) {
++#if defined(__linux__)
+ fb_munmap(buf, &fscinfo);
++#elif defined(__FreeBSD__)
++ fb_munmap(buf, &video_adapter_info);
++#endif
+ buf = NULL;
+ }
+
+@@ -259,11 +375,19 @@ fb_image_draw(FB_IMAGE * image, int x, int y, int sx, int sy, int width,
+ if (y + height > fb_height())
+ height = fb_height() - y;
+
++#if defined(__linux__)
+ offset_fb = fscinfo.line_length * y + pixel_size * x;
++#elif defined(__FreeBSD__)
++ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x;
++#endif
+ offset_img = image->rowstride * sy + pixel_size * sx;
+ for (i = 0; i < height; i++) {
+ memcpy(buf + offset_fb, image->data + offset_img, pixel_size * width);
++#if defined(__linux__)
+ offset_fb += fscinfo.line_length;
++#elif defined(__FreeBSD__)
++ offset_fb += video_adapter_info.va_line_width;
++#endif
+ offset_img += image->rowstride;
+ }
+
+@@ -336,7 +460,11 @@ fb_width(void)
+ if (is_open != TRUE)
+ return 0;
+
++#if defined(__linux__)
+ return vscinfo.xres;
++#elif defined(__FreeBSD__)
++ return video_info.vi_width;
++#endif
+ }
+
+ int
+@@ -345,7 +473,11 @@ fb_height(void)
+ if (is_open != TRUE)
+ return 0;
+
++#if defined(__linux__)
+ return vscinfo.yres;
++#elif defined(__FreeBSD__)
++ return video_info.vi_height;
++#endif
+ }
+
+ int
+@@ -369,7 +501,11 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b)
+ h = fb_height() - y;
+
+ if (tmp == NULL) {
++#if defined(__linux__)
+ tmp = malloc(fscinfo.line_length);
++#elif defined(__FreeBSD__)
++ tmp = malloc(video_adapter_info.va_line_width);
++#endif
+ if (tmp == NULL)
+ return 1;
+ }
+@@ -384,10 +520,18 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b)
+ gg = g;
+ bb = b;
+ }
++#if defined(__linux__)
+ offset_fb = fscinfo.line_length * y + pixel_size * x;
++#elif defined(__FreeBSD__)
++ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x;
++#endif
+ for (i = 0; i < h; i++) {
+ memcpy(buf + offset_fb, tmp, pixel_size * w);
++#if defined(__linux__)
+ offset_fb += fscinfo.line_length;
++#elif defined(__FreeBSD__)
++ offset_fb += video_adapter_info.va_line_width;
++#endif
+ }
+ return 0;
+ }
+@@ -400,11 +544,21 @@ fb_get_packed_color(int r, int g, int b)
+ return fb_get_cmap_index(r, g, b);
+ }
+ else {
++#if defined(__linux__)
+ return
+ ((r >> (CHAR_BIT - vscinfo.red.length)) << vscinfo.red.offset) +
+ ((g >> (CHAR_BIT - vscinfo.green.length)) << vscinfo.green.
+ offset) +
+ ((b >> (CHAR_BIT - vscinfo.blue.length)) << vscinfo.blue.offset);
++#elif defined(__FreeBSD__)
++ return
++ ((r >> (CHAR_BIT - video_info.vi_pixel_fsizes[0])) <<
++ video_info.vi_pixel_fields[0]) +
++ ((g >> (CHAR_BIT - video_info.vi_pixel_fsizes[1])) <<
++ video_info.vi_pixel_fields[1]) +
++ ((b >> (CHAR_BIT - video_info.vi_pixel_fsizes[2])) <<
++ video_info.vi_pixel_fields[2]);
++#endif
+ }
+ }
+
+@@ -433,16 +587,31 @@ fb_cmap_init(void)
+ if (cmap == NULL)
+ return 1;
+
++#if defined(__linux__)
+ if (cmap->len < COLOR_OFFSET_8BIT + COLORS_8BIT) {
+ fprintf(stderr, "Can't allocate enough color.\n");
+ return 1;
+ }
++#elif defined(__FreeBSD__)
++ if (cmap->count < COLOR_OFFSET_8BIT + COLORS_8BIT) {
++ fprintf(stderr, "Can't allocate enough color.\n");
++ return 1;
++ }
++#endif
+
+ if (cmap_org == NULL) {
++#if defined(__linux__)
+ if ((cmap_org =
+ fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) {
+ return 1;
+ }
++#elif defined(__FreeBSD__)
++ if ((cmap_org =
++ fb_cmap_create(&video_info, &video_adapter_info)) ==
++ (video_color_palette_t *)-1) {
++ return 1;
++ }
++#endif
+
+ if (fb_cmap_get(fbfp, cmap_org)) {
+ fprintf(stderr, "Can't get color map.\n");
+@@ -452,8 +621,13 @@ fb_cmap_init(void)
+ }
+ }
+
++#if defined(__linux__)
+ cmap->start = MONO_OFFSET_8BIT;
+ cmap->len = COLORS_8BIT + COLORS_MONO_8BIT;
++#elif defined(__FreeBSD__)
++ cmap->index = MONO_OFFSET_8BIT;
++ cmap->count = COLORS_8BIT + COLORS_MONO_8BIT;
++#endif
+
+ for (lp = 0; lp < COLORS_MONO_8BIT; lp++) {
+ int c;
+@@ -506,73 +680,213 @@ fb_cmap_init(void)
+
+ #define LUT_MAX (256)
+
++#if defined(__linux__)
+ static struct fb_cmap *
+ fb_cmap_create(struct fb_fix_screeninfo *fscinfo,
+ struct fb_var_screeninfo *vscinfo)
++#elif defined(__FreeBSD__)
++static video_color_palette_t *
++fb_cmap_create(video_info_t *video_info,
++ video_adapter_info_t *video_adapter_info)
++#endif
+ {
++#if defined(__linux__)
+ struct fb_cmap *cmap;
++#elif defined(__FreeBSD__)
++ video_color_palette_t *cmap;
++#endif
+ int cmaplen = LUT_MAX;
+
+ /* check the existence of colormap */
++#if defined(__linux__)
+ if (fscinfo->visual == FB_VISUAL_MONO01 ||
+ fscinfo->visual == FB_VISUAL_MONO10 ||
+ fscinfo->visual == FB_VISUAL_TRUECOLOR)
+ return NULL;
++#elif defined(__FreeBSD__)
++ if (!(video_adapter_info->va_flags & V_ADP_PALETTE))
++ return NULL;
++#endif
+
++#if defined(__linux__)
+ cmap = (struct fb_cmap *)malloc(sizeof(struct fb_cmap));
++#elif defined(__FreeBSD__)
++ cmap = (video_color_palette_t *)malloc(sizeof(video_color_palette_t));
++#endif
+ if (!cmap) {
+ perror("cmap malloc error\n");
++#if defined(__linux__)
+ return (struct fb_cmap *)-1;
++#elif defined(__FreeBSD__)
++ return (video_color_palette_t *)-1;
++#endif
+ }
++#if defined(__linux__)
+ memset(cmap, 0, sizeof(struct fb_cmap));
++#elif defined(__FreeBSD__)
++ memset(cmap, 0, sizeof(video_color_palette_t));
++#endif
++
++#if defined(__FreeBSD__)
++ if (video_info->vi_mem_model == V_INFO_MM_PACKED) {
++ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen);
++ if (!cmap->red) {
++ perror("red lut malloc error\n");
++ return (video_color_palette_t *)-1;
++ }
++ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen);
++ if (!cmap->green) {
++ perror("green lut malloc error\n");
++ free(cmap->red);
++ return (video_color_palette_t *)-1;
++ }
++ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen);
++ if (!cmap->blue) {
++ perror("blue lut malloc error\n");
++ free(cmap->red);
++ free(cmap->green);
++ return (video_color_palette_t *)-1;
++ }
++ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen);
++ if (!cmap->transparent) {
++ perror("transparent lut malloc error\n");
++ free(cmap->red);
++ free(cmap->green);
++ free(cmap->blue);
++ return (video_color_palette_t *)-1;
++ }
++ cmap->count = cmaplen;
++ return cmap;
++ }
++#endif
+
+ /* Allocates memory for a colormap */
++#if defined(__linux__)
+ if (vscinfo->red.length) {
+ cmap->red = (__u16 *) malloc(sizeof(__u16) * cmaplen);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[0]) {
++ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen);
++#endif
+ if (!cmap->red) {
+ perror("red lut malloc error\n");
++#if defined(__linux__)
+ return (struct fb_cmap *)-1;
++#elif defined(__FreeBSD__)
++ return (video_color_palette_t *)-1;
++#endif
+ }
+ }
++#if defined(__linux__)
+ if (vscinfo->green.length) {
+ cmap->green = (__u16 *) malloc(sizeof(__u16) * cmaplen);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[1]) {
++ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen);
++#endif
+ if (!cmap->green) {
++#if defined(__linux__)
+ if (vscinfo->red.length)
+ free(cmap->red);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[0])
++ free(cmap->red);
++#endif
+ perror("green lut malloc error\n");
++#if defined(__linux__)
+ return (struct fb_cmap *)-1;
++#elif defined(__FreeBSD__)
++ return (video_color_palette_t *)-1;
++#endif
+ }
+ }
++#if defined(__linux__)
+ if (vscinfo->blue.length) {
+ cmap->blue = (__u16 *) malloc(sizeof(__u16) * cmaplen);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[2]) {
++ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen);
++#endif
+ if (!cmap->blue) {
++#if defined(__linux__)
+ if (vscinfo->red.length)
+ free(cmap->red);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[0])
++ free(cmap->red);
++#endif
++#if defined(__linux__)
+ if (vscinfo->green.length)
+ free(cmap->green);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[1])
++ free(cmap->green);
++#endif
+ perror("blue lut malloc error\n");
++#if defined(__linux__)
+ return (struct fb_cmap *)-1;
++#elif defined(__FreeBSD__)
++ return (video_color_palette_t *)-1;
++#endif
+ }
+ }
++#if defined(__linux__)
+ if (vscinfo->transp.length) {
+ cmap->transp = (__u16 *) malloc(sizeof(__u16) * cmaplen);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[3]) {
++ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen);
++#endif
++#if defined(__linux__)
+ if (!cmap->transp) {
++#elif defined(__FreeBSD__)
++ if (!cmap->transparent) {
++#endif
++#if defined(__linux__)
+ if (vscinfo->red.length)
+ free(cmap->red);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[0])
++ free(cmap->red);
++#endif
++#if defined(__linux__)
+ if (vscinfo->green.length)
+ free(cmap->green);
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[1])
++ free(cmap->green);
++#endif
++#if defined(__linux__)
+ if (vscinfo->blue.length)
+ free(cmap->blue);
+ perror("transp lut malloc error\n");
++#elif defined(__FreeBSD__)
++ if (video_info->vi_pixel_fsizes[2])
++ free(cmap->blue);
++ perror("transparent lut malloc error\n");
++#endif
++#if defined(__linux__)
+ return (struct fb_cmap *)-1;
++#elif defined(__FreeBSD__)
++ return (video_color_palette_t *)-1;
++#endif
+ }
+ }
++#if defined(__linux__)
+ cmap->len = cmaplen;
++#elif defined(__FreeBSD__)
++ cmap->count = cmaplen;
++#endif
+ return cmap;
+ }
+
++#if defined(__linux__)
+ static void
+ fb_cmap_destroy(struct fb_cmap *cmap)
++#elif defined(__FreeBSD__)
++static void
++fb_cmap_destroy(video_color_palette_t *cmap)
++#endif
+ {
+ if (cmap->red)
+ free(cmap->red);
+@@ -580,28 +894,57 @@ fb_cmap_destroy(struct fb_cmap *cmap)
+ free(cmap->green);
+ if (cmap->blue)
+ free(cmap->blue);
++#if defined(__linux__)
+ if (cmap->transp)
+ free(cmap->transp);
++#elif defined(__FreeBSD__)
++ if (cmap->transparent)
++ free(cmap->transparent);
++#endif
+ free(cmap);
+ }
+
++#if defined(__linux__)
+ static int
+ fb_cmap_get(int fbfp, struct fb_cmap *cmap)
++#elif defined(__FreeBSD__)
++static int
++fb_cmap_get(int fbfp, video_color_palette_t *cmap)
++#endif
+ {
++#if defined(__linux__)
+ if (ioctl(fbfp, FBIOGETCMAP, cmap)) {
+ perror("ioctl FBIOGETCMAP error\n");
+ return -1;
+ }
++#elif defined(__FreeBSD__)
++ if (ioctl(fbfp, FBIO_GETPALETTE, cmap) == -1) {
++ perror("ioctl FBIO_GETPALETTE error\n");
++ return -1;
++ }
++#endif
+ return 0;
+ }
+
++#if defined(__linux__)
+ static int
+ fb_cmap_set(int fbfp, struct fb_cmap *cmap)
++#elif defined(__FreeBSD__)
++static int
++fb_cmap_set(int fbfp, video_color_palette_t *cmap)
++#endif
+ {
++#if defined(__linux__)
+ if (ioctl(fbfp, FBIOPUTCMAP, cmap)) {
+ perror("ioctl FBIOPUTCMAP error\n");
+ return -1;
+ }
++#elif defined(__FreeBSD__)
++ if (ioctl(fbfp, FBIO_SETPALETTE, cmap) == -1) {
++ perror("ioctl FBIO_SETPALETTE error\n");
++ return -1;
++ }
++#endif
+ return 0;
+ }
+
+@@ -612,10 +955,16 @@ fb_cmap_set(int fbfp, struct fb_cmap *cmap)
+ * fb_munmap() deletes the mappings
+ */
+
++#if defined(__linux__)
+ static void *
+ fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo)
++#elif defined(__FreeBSD__)
++static void *
++fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info)
++#endif
+ {
+ void *buf;
++#if defined(__linux__)
+ if ((buf = (unsigned char *)
+ mmap(NULL, scinfo->smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp,
+ (off_t) 0))
+@@ -623,13 +972,41 @@ fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo)
+ perror("mmap error");
+ return NULL;
+ }
++#elif defined(__FreeBSD__)
++ size_t mmap_offset;
++ size_t mmap_length;
++ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK);
++ mmap_length = (size_t)(video_adapter_info->va_window_size +
++ mmap_offset + PAGE_MASK) & (~PAGE_MASK);
++ if ((buf = (unsigned char *)
++ mmap(NULL, mmap_length, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp,
++ (off_t) 0))
++ == MAP_FAILED) {
++ perror("mmap error");
++ return NULL;
++ }
++#endif
+ return buf;
+ }
+
++#if defined(__linux__)
+ static int
+ fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo)
++#elif defined(__FreeBSD__)
++static int
++fb_munmap(void *buf, video_adapter_info_t *video_adapter_info)
++#endif
+ {
++#if defined(__linux__)
+ return munmap(buf, scinfo->smem_len);
++#elif defined(__FreeBSD__)
++ size_t mmap_offset;
++ size_t mmap_length;
++ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK);
++ mmap_length = (size_t)(video_adapter_info->va_window_size +
++ mmap_offset + PAGE_MASK) & (~PAGE_MASK);
++ return munmap((void *)((u_long)buf & (~PAGE_MASK)), mmap_length);
++#endif
+ }
+
+ /*
+@@ -637,6 +1014,7 @@ fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo)
+ *
+ * fb_fscrn_get() get information
+ */
++#if defined(__linux__)
+ static int
+ fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo)
+ {
+@@ -646,12 +1024,14 @@ fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo)
+ }
+ return 0;
+ }
++#endif
+
+ /*
+ * (struct fb_var_screeninfo) device independent variable information
+ *
+ * fb_vscrn_get() get information
+ */
++#if defined(__linux__)
+ static int
+ fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo)
+ {
+@@ -661,3 +1041,41 @@ fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo)
+ }
+ return 0;
+ }
++#endif
++
++#if defined(__FreeBSD__)
++static int
++fb_video_mode_get(int fbfp, int *video_mode)
++{
++ if (ioctl(fbfp, FBIO_GETMODE, video_mode) == -1) {
++ perror("ioctl FBIO_GETMODE error\n");
++ return -1;
++ }
++ return 0;
++}
++#endif
++
++#if defined(__FreeBSD__)
++static int
++fb_video_info_get(int fbfp, video_info_t *video_info)
++{
++ if (ioctl(fbfp, FBIO_MODEINFO, video_info) == -1) {
++ perror("ioctl FBIO_MODEINFO error\n");
++ return -1;
++ }
++ return 0;
++}
++#endif
++
++#if defined(__FreeBSD__)
++static int
++fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info)
++{
++ if (ioctl(fbfp, FBIO_ADPINFO, video_adapter_info) == -1) {
++ perror("ioctl FBIO_ADPINFO error\n");
++ return -1;
++ }
++ return 0;
++}
++#endif
++
+diff --git a/w3mimg/fb/fb.h b/w3mimg/fb/fb.h
+index 1138bb0..5d86454 100644
+--- a/w3mimg/fb/fb.h
++++ b/w3mimg/fb/fb.h
+@@ -1,7 +1,11 @@
+ /* $Id: fb.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */
+ #ifndef fb_header
+ #define fb_header
++#if defined(__linux__)
+ #include <linux/fb.h>
++#elif defined(__FreeBSD__)
++#include <sys/fbio.h>
++#endif
+
+ typedef struct {
+ int num;
+diff --git a/w3mimg/fb/fb_gdkpixbuf.c b/w3mimg/fb/fb_gdkpixbuf.c
+index 36e3b62..f1e8d97 100644
+--- a/w3mimg/fb/fb_gdkpixbuf.c
++++ b/w3mimg/fb/fb_gdkpixbuf.c
+@@ -6,7 +6,7 @@
+ #include "config.h"
+ #if defined(USE_GTK2)
+ #include <glib-object.h>
+-#include <gdk/gdk.h>
++#include <gdk-pixbuf/gdk-pixbuf.h>
+ #endif
+ #include <gdk-pixbuf/gdk-pixbuf.h>
+ #include "fb.h"
+diff --git a/w3mimg/fb/fb_w3mimg.c b/w3mimg/fb/fb_w3mimg.c
+index d3ae5a9..fb323f5 100644
+--- a/w3mimg/fb/fb_w3mimg.c
++++ b/w3mimg/fb/fb_w3mimg.c
+@@ -153,10 +153,15 @@ check_tty_console(char *tty)
+ return 0;
+ if (strncmp(tty, "/dev/", 5) == 0)
+ tty += 5;
++#if defined(__linux__)
+ if (strncmp(tty, "tty", 3) == 0 && isdigit(*(tty + 3)))
+ return 1;
+ if (strncmp(tty, "vc/", 3) == 0 && isdigit(*(tty + 3)))
+ return 1;
++#elif defined(__FreeBSD__)
++ if (strncmp(tty, "ttyv", 4) == 0 && isxdigit(*(tty + 4)))
++ return 1;
++#endif
+ return 0;
+ }
+ #else
+@@ -172,7 +177,9 @@ w3mimg_fbopen()
+ return NULL;
+ memset(wop, 0, sizeof(w3mimg_op));
+
+- if (!check_tty_console(getenv("W3M_TTY")) && strcmp("jfbterm", getenv("TERM")) != 0) {
++ if (!check_tty_console(getenv("W3M_TTY")) &&
++ strcmp("jfbterm", getenv("TERM")) != 0 &&
++ strncmp("jfbterm-", getenv("TERM"), 8) != 0) {
+ fprintf(stderr, "w3mimgdisplay/fb: tty is not console\n");
+ goto error;
+ }
+diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c
+index f5be4a8..bc8d0aa 100644
+--- a/w3mimg/x11/x11_w3mimg.c
++++ b/w3mimg/x11/x11_w3mimg.c
+@@ -14,7 +14,7 @@
+ #elif defined(USE_GDKPIXBUF)
+ #if defined(USE_GTK2)
+ #include <glib-object.h>
+-#include <gdk/gdk.h>
++#include <gdk-pixbuf/gdk-pixbuf.h>
+ #include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
+ #else
+ #include <gdk-pixbuf/gdk-pixbuf-xlib.h>
+@@ -121,16 +121,21 @@ x11_init(w3mimg_op * self)
+ if (self == NULL)
+ return 0;
+ xi = (struct x11_info *)self->priv;
++#if defined(USE_IMLIB)
+ if (xi == NULL)
+ return 0;
+-#if defined(USE_IMLIB)
+ if (!xi->id) {
+ xi->id = Imlib_init(xi->display);
+ if (!xi->id)
+ return 0;
+ }
+ #elif defined(USE_GDKPIXBUF)
+- if (!xi->init_flag) {
++ if (!xi) {
++#if defined(USE_GTK2)
++ g_type_init();
++#endif
++ }
++ else if (!xi->init_flag) {
+ #if defined(USE_GTK2)
+ g_type_init();
+ #endif
+@@ -138,7 +143,7 @@ x11_init(w3mimg_op * self)
+ xi->init_flag = TRUE;
+ }
+ #endif
+- if (!xi->imageGC) {
++ if (xi && !xi->imageGC) {
+ xi->imageGC = XCreateGC(xi->display, xi->parent, 0, NULL);
+ if (!xi->imageGC)
+ return 0;
+@@ -653,9 +658,11 @@ x11_get_image_size(w3mimg_op * self, W3MImage * img, char *fname, int *w,
+
+ if (self == NULL)
+ return 0;
++#if defined(USE_IMLIB) && defined(USE_IMLIB2)
+ xi = (struct x11_info *)self->priv;
+ if (xi == NULL)
+ return 0;
++#endif
+
+ #if defined(USE_IMLIB)
+ im = Imlib_load_image(xi->id, fname);
+@@ -755,6 +762,9 @@ w3mimg_x11open()
+ return NULL;
+ memset(wop, 0, sizeof(w3mimg_op));
+
++ if (getenv("W3M_USE_REMOTE_IMAGE"))
++ goto end;
++
+ xi = (struct x11_info *)malloc(sizeof(struct x11_info));
+ if (xi == NULL)
+ goto error;
+@@ -807,6 +817,7 @@ w3mimg_x11open()
+
+ wop->priv = xi;
+
++ end:
+ wop->init = x11_init;
+ wop->finish = x11_finish;
+ wop->active = x11_active;
diff --git a/debian/patches/030_pager-s-option.patch b/debian/patches/030_pager-s-option.patch
deleted file mode 100644
index 572e70f..0000000
--- a/debian/patches/030_pager-s-option.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-Description: Change the -s option to "squeeze multiple blank lines" for pager
- Change the -s option from "display charset Shift_JIS" to "squeeze multiple
- blank lines" to work as /usr/bin/pager. In addition, the options -j and -e
- are disabled. To specify the display charset, use -O{s|j|e} instead.
- .
- The patch was committed to the upstream on 2000-10-27. However, it was
- rejected because of Debian specific on 2010-08-03.
-Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/200010.month/1275.html
-Bug-Debian: http://bugs.debian.org/75527
-
-diff -urN w3m.orig/main.c w3m/main.c
---- w3m.orig/main.c 2010-08-04 23:06:36.000000000 +0900
-+++ w3m/main.c 2010-08-05 19:28:46.000000000 +0900
-@@ -194,10 +194,12 @@
- #ifdef USE_M17N
- fprintf(f, " -I charset document charset\n");
- fprintf(f, " -O charset display/output charset\n");
-+#if 0 /* use -O{s|j|e} instead */
- fprintf(f, " -e EUC-JP\n");
- fprintf(f, " -s Shift_JIS\n");
- fprintf(f, " -j JIS\n");
- #endif
-+#endif
- fprintf(f, " -B load bookmark\n");
- fprintf(f, " -bookmark file specify bookmark file\n");
- fprintf(f, " -T type specify content-type\n");
-@@ -242,7 +244,11 @@
- #endif /* USE_COOKIE */
- fprintf(f, " -graph use DEC special graphics for border of table and menu\n");
- fprintf(f, " -no-graph use ACII character for border of table and menu\n");
-+#if 1 /* pager requires -s */
-+ fprintf(f, " -s squeeze multiple blank lines\n");
-+#else
- fprintf(f, " -S squeeze multiple blank lines\n");
-+#endif
- fprintf(f, " -W toggle wrap search mode\n");
- fprintf(f, " -X don't use termcap init/deinit\n");
- fprintf(f,
-@@ -524,12 +530,14 @@
- PagerMax = atoi(argv[i]);
- }
- #ifdef USE_M17N
-+#if 0 /* use -O{s|j|e} instead */
- else if (!strcmp("-s", argv[i]))
- DisplayCharset = WC_CES_SHIFT_JIS;
- else if (!strcmp("-j", argv[i]))
- DisplayCharset = WC_CES_ISO_2022_JP;
- else if (!strcmp("-e", argv[i]))
- DisplayCharset = WC_CES_EUC_JP;
-+#endif
- else if (!strncmp("-I", argv[i], 2)) {
- if (argv[i][2] != '\0')
- p = argv[i] + 2;
-@@ -694,7 +702,11 @@
- accept_cookie = TRUE;
- }
- #endif /* USE_COOKIE */
-+#if 1 /* pager requires -s */
-+ else if (!strcmp("-s", argv[i]))
-+#else
- else if (!strcmp("-S", argv[i]))
-+#endif
- squeezeBlankLine = TRUE;
- else if (!strcmp("-X", argv[i]))
- Do_not_use_ti_te = TRUE;
-
-commit 7d4d6cdd31f09b964f436651217dd0e2488e5e7b
-Author: Tatsuya Kinoshita <tats@debian.org>
-Date: Sun Oct 13 14:06:32 2013 +0900
-
- Update document for the -s option change
-
-diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html
-index 41d70f1..f197cfb 100644
---- a/doc-jp/MANUAL.html
-+++ b/doc-jp/MANUAL.html
-@@ -51,15 +51,9 @@ w3m
- <dt>-l Կ
- <dd>ɸϤƤɽȤ¸Կꤹ
- 롥ǥեȤ 10000
--<dt>-s
--<dd>Shift_JIS ɤɽ롥
--<dt>-e
--<dd>EUC ɤɽ롥
--<dt>-j
--<dd>JIS(ISO-2022-JP) ɤɽ롥
--<dt>-O e|s|j|N|m|n
-+<dt>-O ʸ
- <dd>ɽѤʸɤꤹ롥
--<dt>-I e|s
-+<dt>-I ʸ
- <dd>ʸʸɤꤹ롥
- <dt>-T
- <dd>ɽʸΥפꤹ롥λ꤬ʤ硤ե
-@@ -89,7 +83,7 @@ HTML
- <dd>顼ɽ򤷤ʤ
- <dt>-F
- <dd>ե졼ưɽ롥
--<dt>-S
-+<dt>-s
- <dd>Ϣ³Ԥ1ԤˤޤȤɽ롥
- <dt>-X
- <dd>w3mλˡβ̤ʤ
-diff --git a/doc-jp/w3m.1 b/doc-jp/w3m.1
-index 89aacb6..099a803 100644
---- a/doc-jp/w3m.1
-+++ b/doc-jp/w3m.1
-@@ -39,19 +39,10 @@ text/plain
- ɸϤƤɽȤ¸Կꤹ롥
- ǥեȤ10000
- .TP
--.B \-s
--Shift_JISɤɽ롥
--.TP
--.B \-e
--EUCɤɽ롥
--.TP
--.B \-j
--JIS (ISO-2022-JP)ɤɽ롥
--.TP
--.BI \-O\ e|s|j|N|m
-+.BI \-O\ ʸ
- ɽ˻Ȥʸɤꤹ.
- .TP
--.BI \-I\ e|s
-+.BI \-I\ ʸ
- ʸʸɤꤹ롥
- .TP
- .BI \-T\
-@@ -90,7 +81,7 @@ Bookmark
- .B \-F
- ե졼ưɽ롥
- .TP
--.B \-S
-+.B \-s
- Ϣ³Ԥ1ԤˤޤȤɽ롥
- .TP
- .B \-X
-diff --git a/doc/MANUAL.html b/doc/MANUAL.html
-index aff0189..0a00b59 100644
---- a/doc/MANUAL.html
-+++ b/doc/MANUAL.html
-@@ -55,12 +55,10 @@ If you don't specify this option,
- <dt>-l number
- <dd>Specify line number preserved internally when reading text/plain document
- fron standard input. Default is 10000.
--<dt>-s
--<dd>Display documents with Shift_JIS code.
--<dt>-e
--<dd>Display documents with EUC_JP code.
--<dt>-j
--<dd>Display documents with ISO-2022-JP code.
-+<dt>-O charset
-+<dd>Specify display/output charset.
-+<dt>-I charset
-+<dd>Specify document charset.
- <dt>-T type
- <dd>Specify document type. Without this option, document type
- is determined from extension of a file. If the determination
-@@ -90,7 +88,7 @@ It is useful when reading E-mail or NetNews messages.
- <dd>Monochrome display mode.
- <dt>-F
- <dd>Automatically render frame.
--<dt>-S
-+<dt>-s
- <dd>Squeeze blank lines.
- <dt>-X
- <dd>Upon exit, do not display preserved screen.
-diff --git a/doc/w3m.1 b/doc/w3m.1
-index aeb4a60..da4fdbb 100644
---- a/doc/w3m.1
-+++ b/doc/w3m.1
-@@ -143,7 +143,7 @@ use graphic character
- .B -no-graph
- don't use graphic character
- .TP
--.B -S
-+.B -s
- squeeze multiple blank lines
- .TP
- .B -W
diff --git a/debian/patches/040_link-gtk2.patch b/debian/patches/040_link-gtk2.patch
deleted file mode 100644
index 4bbc486..0000000
--- a/debian/patches/040_link-gtk2.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Subject: Explicitly add -lX11 to IMGX11LDFLAGS only when gtk2
-From: Tatsuya Kinoshita <tats@debian.org>
-Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605761
-Bug: https://sourceforge.net/p/w3m/patches/57/
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index e4ccc3d..3b180dd 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -706,7 +706,7 @@ AC_DEFUN([AC_W3M_IMAGE],
- AC_DEFINE(USE_GDKPIXBUF)
- AC_DEFINE(USE_GTK2)
- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
- elif test x"$have_gdkpixbuf" = xyes; then
- AC_DEFINE(USE_W3MIMG_X11)
- IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
-diff --git a/configure b/configure
-index 4c1bc06..30edf21 100755
---- a/configure
-+++ b/configure
-@@ -6927,7 +6927,7 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >=
- $as_echo "#define USE_GTK2 1" >>confdefs.h
-
- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
- elif test x"$have_gdkpixbuf" = xyes; then
- $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
-
diff --git a/debian/patches/050_autotools-config.patch b/debian/patches/050_autotools-config.patch
deleted file mode 100644
index 0fc7591..0000000
--- a/debian/patches/050_autotools-config.patch
+++ /dev/null
@@ -1,2813 +0,0 @@
-Subject: Update config.guess and config.sub
-From: Tatsuya Kinoshita <tats@debian.org>
-
-Updated with autotools-dev 20140911.1
-
-Note that Debian package uses autotools-dev dh addon,
-dh_autotools-dev_updateconfig and dh_autotools-dev_restoreconfig,
-instead of this patch.
-
-diff --git a/config.guess b/config.guess
-index 51fab47..1f5c50c 100755
---- a/config.guess
-+++ b/config.guess
-@@ -1,13 +1,12 @@
- #! /bin/sh
- # Attempt to guess a canonical system name.
--# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
--# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-+# Copyright 1992-2014 Free Software Foundation, Inc.
-
--timestamp='2004-03-12'
-+timestamp='2014-03-23'
-
- # This file is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 2 of the License, or
-+# the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
-@@ -16,24 +15,22 @@ timestamp='2004-03-12'
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
--# along with this program; if not, write to the Free Software
--# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+# along with this program; if not, see <http://www.gnu.org/licenses/>.
- #
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
--# the same distribution terms that you use for the rest of that program.
--
--# Originally written by Per Bothner <per@bothner.com>.
--# Please send patches to <config-patches@gnu.org>. Submit a context
--# diff and a properly formatted ChangeLog entry.
-+# the same distribution terms that you use for the rest of that
-+# program. This Exception is an additional permission under section 7
-+# of the GNU General Public License, version 3 ("GPLv3").
-+#
-+# Originally written by Per Bothner.
- #
--# This script attempts to guess a canonical system name similar to
--# config.sub. If it succeeds, it prints the system name on stdout, and
--# exits with 0. Otherwise, it exits with 1.
-+# You can get the latest version of this script from:
-+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
- #
--# The plan is that this can be called by configure scripts if you
--# don't specify an explicit build system type.
-+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-+
-
- me=`echo "$0" | sed -e 's,.*/,,'`
-
-@@ -53,8 +50,7 @@ version="\
- GNU config.guess ($timestamp)
-
- Originally written by Per Bothner.
--Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
--Free Software Foundation, Inc.
-+Copyright 1992-2014 Free Software Foundation, Inc.
-
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-@@ -66,11 +62,11 @@ Try \`$me --help' for more information."
- while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
-- echo "$timestamp" ; exit 0 ;;
-+ echo "$timestamp" ; exit ;;
- --version | -v )
-- echo "$version" ; exit 0 ;;
-+ echo "$version" ; exit ;;
- --help | --h* | -h )
-- echo "$usage"; exit 0 ;;
-+ echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
-@@ -104,7 +100,7 @@ set_cc_for_build='
- trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
- trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
- : ${TMPDIR=/tmp} ;
-- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
-+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-@@ -123,7 +119,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
--esac ;'
-+esac ; set_cc_for_build= ;'
-
- # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
- # (ghazi@noc.rutgers.edu 1994-08-24)
-@@ -136,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
- UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
- UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-+case "${UNAME_SYSTEM}" in
-+Linux|GNU|GNU/*)
-+ # If the system lacks a compiler, then just pick glibc.
-+ # We could probably try harder.
-+ LIBC=gnu
-+
-+ eval $set_cc_for_build
-+ cat <<-EOF > $dummy.c
-+ #include <features.h>
-+ #if defined(__UCLIBC__)
-+ LIBC=uclibc
-+ #elif defined(__dietlibc__)
-+ LIBC=dietlibc
-+ #else
-+ LIBC=gnu
-+ #endif
-+ EOF
-+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
-+ ;;
-+esac
-+
- # Note: order is significant - the case branches are not exclusive.
-
- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
-- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
-@@ -158,6 +175,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
-+ sh5el) machine=sh5le-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
-@@ -166,7 +184,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-- | grep __ELF__ >/dev/null
-+ | grep -q __ELF__
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
-@@ -176,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- fi
- ;;
- *)
-- os=netbsd
-+ os=netbsd
- ;;
- esac
- # The OS release
-@@ -196,71 +214,34 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
-- exit 0 ;;
-- amd64:OpenBSD:*:*)
-- echo x86_64-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- amiga:OpenBSD:*:*)
-- echo m68k-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- arc:OpenBSD:*:*)
-- echo mipsel-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- cats:OpenBSD:*:*)
-- echo arm-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- hp300:OpenBSD:*:*)
-- echo m68k-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- mac68k:OpenBSD:*:*)
-- echo m68k-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- macppc:OpenBSD:*:*)
-- echo powerpc-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- mvme68k:OpenBSD:*:*)
-- echo m68k-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- mvme88k:OpenBSD:*:*)
-- echo m88k-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- mvmeppc:OpenBSD:*:*)
-- echo powerpc-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- pegasos:OpenBSD:*:*)
-- echo powerpc-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- pmax:OpenBSD:*:*)
-- echo mipsel-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- sgi:OpenBSD:*:*)
-- echo mipseb-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- sun3:OpenBSD:*:*)
-- echo m68k-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-- wgrisc:OpenBSD:*:*)
-- echo mipsel-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
-+ *:Bitrig:*:*)
-+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-+ exit ;;
- *:OpenBSD:*:*)
-- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-- exit 0 ;;
-+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-+ exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
-+ *:SolidBSD:*:*)
-+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-+ exit ;;
- macppc:MirBSD:*:*)
-- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-- exit 0 ;;
-+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-+ exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
-- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
-@@ -306,40 +287,46 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-- exit 0 ;;
-- Alpha*:OpenVMS:*:*)
-- echo alpha-hp-vms
-- exit 0 ;;
-+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-+ exitcode=$?
-+ trap '' 0
-+ exit $exitcode ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
-- exit 0 ;;
-+ exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
-- exit 0 ;;
-+ exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
-- exit 0;;
-+ exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
-- exit 0 ;;
-+ exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
-- exit 0 ;;
-+ exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
-- exit 0 ;;
-+ exit ;;
-+ *:z/VM:*:*)
-+ echo s390-ibm-zvmoe
-+ exit ;;
- *:OS400:*:*)
-- echo powerpc-ibm-os400
-- exit 0 ;;
-+ echo powerpc-ibm-os400
-+ exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
-- exit 0;;
-+ exit ;;
-+ arm*:riscos:*:*|arm*:RISCOS:*:*)
-+ echo arm-unknown-riscos
-+ exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
-- exit 0;;
-+ exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
-@@ -347,32 +334,51 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- else
- echo pyramid-pyramid-bsd
- fi
-- exit 0 ;;
-+ exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
-- exit 0 ;;
-+ exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
-- exit 0 ;;
-- DRS?6000:UNIX_SV:4.2*:7*)
-+ exit ;;
-+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
-- sparc) echo sparc-icl-nx7 && exit 0 ;;
-+ sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
-+ s390x:SunOS:*:*)
-+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+ exit ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit 0 ;;
-+ exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit 0 ;;
-- i86pc:SunOS:5.*:*)
-- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit 0 ;;
-+ exit ;;
-+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-+ echo i386-pc-auroraux${UNAME_RELEASE}
-+ exit ;;
-+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-+ eval $set_cc_for_build
-+ SUN_ARCH="i386"
-+ # If there is a compiler, see if it is configured for 64-bit objects.
-+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-+ # This test works for both compilers.
-+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-+ grep IS_64BIT_ARCH >/dev/null
-+ then
-+ SUN_ARCH="x86_64"
-+ fi
-+ fi
-+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+ exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit 0 ;;
-+ exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
-@@ -381,10 +387,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-- exit 0 ;;
-+ exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-@@ -396,10 +402,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
-- exit 0 ;;
-+ exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
-@@ -409,41 +415,41 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-- echo m68k-atari-mint${UNAME_RELEASE}
-- exit 0 ;;
-+ echo m68k-atari-mint${UNAME_RELEASE}
-+ exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-- echo m68k-atari-mint${UNAME_RELEASE}
-- exit 0 ;;
-+ echo m68k-atari-mint${UNAME_RELEASE}
-+ exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-- echo m68k-milan-mint${UNAME_RELEASE}
-- exit 0 ;;
-+ echo m68k-milan-mint${UNAME_RELEASE}
-+ exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-- echo m68k-hades-mint${UNAME_RELEASE}
-- exit 0 ;;
-+ echo m68k-hades-mint${UNAME_RELEASE}
-+ exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-- echo m68k-unknown-mint${UNAME_RELEASE}
-- exit 0 ;;
-+ echo m68k-unknown-mint${UNAME_RELEASE}
-+ exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
-- exit 0 ;;
-+ exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-@@ -467,35 +473,36 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- exit (-1);
- }
- EOF
-- $CC_FOR_BUILD -o $dummy $dummy.c \
-- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-- && exit 0
-+ $CC_FOR_BUILD -o $dummy $dummy.c &&
-+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-+ SYSTEM_NAME=`$dummy $dummyarg` &&
-+ { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
-- exit 0 ;;
-+ exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
-- exit 0 ;;
-+ exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
-- exit 0 ;;
-+ exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
-- exit 0 ;;
-+ exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
-- exit 0 ;;
-+ exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
-- exit 0 ;;
-+ exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
-- exit 0 ;;
-+ exit ;;
- AViiON:dgux:*:*)
-- # DG/UX returns AViiON for all architectures
-- UNAME_PROCESSOR=`/usr/bin/uname -p`
-+ # DG/UX returns AViiON for all architectures
-+ UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-@@ -508,29 +515,29 @@ EOF
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
-- exit 0 ;;
-+ exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
-- exit 0 ;;
-+ exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
-- exit 0 ;;
-+ exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
-- exit 0 ;;
-+ exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
-- exit 0 ;;
-+ exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-- exit 0 ;;
-+ exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
-- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
-+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
-- exit 0 ;;
-+ exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
-@@ -538,7 +545,7 @@ EOF
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-- exit 0 ;;
-+ exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
-@@ -553,15 +560,19 @@ EOF
- exit(0);
- }
- EOF
-- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-- echo rs6000-ibm-aix3.2.5
-+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-+ then
-+ echo "$SYSTEM_NAME"
-+ else
-+ echo rs6000-ibm-aix3.2.5
-+ fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
-- exit 0 ;;
-- *:AIX:*:[45])
-+ exit ;;
-+ *:AIX:*:[4567])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
-@@ -574,28 +585,28 @@ EOF
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-- exit 0 ;;
-+ exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
-- exit 0 ;;
-+ exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
-- exit 0 ;;
-+ exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
-- exit 0 ;; # report: romp-ibm BSD 4.3
-+ exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
-- exit 0 ;;
-+ exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
-- exit 0 ;;
-+ exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
-- exit 0 ;;
-+ exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
-- exit 0 ;;
-+ exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
-@@ -604,52 +615,52 @@ EOF
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-- case "${sc_cpu_version}" in
-- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-- 532) # CPU_PA_RISC2_0
-- case "${sc_kernel_bits}" in
-- 32) HP_ARCH="hppa2.0n" ;;
-- 64) HP_ARCH="hppa2.0w" ;;
-+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-+ case "${sc_cpu_version}" in
-+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-+ 532) # CPU_PA_RISC2_0
-+ case "${sc_kernel_bits}" in
-+ 32) HP_ARCH="hppa2.0n" ;;
-+ 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
-- esac ;;
-- esac
-+ esac ;;
-+ esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-+ sed 's/^ //' << EOF >$dummy.c
-
-- #define _HPUX_SOURCE
-- #include <stdlib.h>
-- #include <unistd.h>
-+ #define _HPUX_SOURCE
-+ #include <stdlib.h>
-+ #include <unistd.h>
-
-- int main ()
-- {
-- #if defined(_SC_KERNEL_BITS)
-- long bits = sysconf(_SC_KERNEL_BITS);
-- #endif
-- long cpu = sysconf (_SC_CPU_VERSION);
-+ int main ()
-+ {
-+ #if defined(_SC_KERNEL_BITS)
-+ long bits = sysconf(_SC_KERNEL_BITS);
-+ #endif
-+ long cpu = sysconf (_SC_CPU_VERSION);
-
-- switch (cpu)
-- {
-- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-- case CPU_PA_RISC2_0:
-- #if defined(_SC_KERNEL_BITS)
-- switch (bits)
-- {
-- case 64: puts ("hppa2.0w"); break;
-- case 32: puts ("hppa2.0n"); break;
-- default: puts ("hppa2.0"); break;
-- } break;
-- #else /* !defined(_SC_KERNEL_BITS) */
-- puts ("hppa2.0"); break;
-- #endif
-- default: puts ("hppa1.0"); break;
-- }
-- exit (0);
-- }
-+ switch (cpu)
-+ {
-+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-+ case CPU_PA_RISC2_0:
-+ #if defined(_SC_KERNEL_BITS)
-+ switch (bits)
-+ {
-+ case 64: puts ("hppa2.0w"); break;
-+ case 32: puts ("hppa2.0n"); break;
-+ default: puts ("hppa2.0"); break;
-+ } break;
-+ #else /* !defined(_SC_KERNEL_BITS) */
-+ puts ("hppa2.0"); break;
-+ #endif
-+ default: puts ("hppa1.0"); break;
-+ }
-+ exit (0);
-+ }
- EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
-@@ -657,9 +668,19 @@ EOF
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
-- # avoid double evaluation of $set_cc_for_build
-- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
-+ eval $set_cc_for_build
-+
-+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
-+ # generating 64-bit code. GNU and HP use different nomenclature:
-+ #
-+ # $ CC_FOR_BUILD=cc ./config.guess
-+ # => hppa2.0w-hp-hpux11.23
-+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-+ # => hppa64-hp-hpux11.23
-+
-+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-+ grep -q __LP64__
- then
- HP_ARCH="hppa2.0w"
- else
-@@ -667,11 +688,11 @@ EOF
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-- exit 0 ;;
-+ exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
-- exit 0 ;;
-+ exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-@@ -699,340 +720,345 @@ EOF
- exit (0);
- }
- EOF
-- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-+ { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
-- exit 0 ;;
-+ exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
-- exit 0 ;;
-+ exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
-- exit 0 ;;
-+ exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
-- exit 0 ;;
-+ exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
-- exit 0 ;;
-+ exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
-- exit 0 ;;
-+ exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
-- exit 0 ;;
-+ exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
-- exit 0 ;;
-+ exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
-- exit 0 ;;
-+ exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
-- exit 0 ;;
-+ exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
-- exit 0 ;;
-+ exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
-- exit 0 ;;
-+ exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
-- exit 0 ;;
-+ exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit 0 ;;
-+ exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
-- exit 0 ;;
-+ exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit 0 ;;
-+ exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit 0 ;;
-+ exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit 0 ;;
-+ exit ;;
- *:UNICOS/mp:*:*)
-- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit 0 ;;
-+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-+ exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-- exit 0 ;;
-+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-+ exit ;;
- 5000:UNIX_System_V:4.*:*)
-- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-- exit 0 ;;
-+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-+ exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *:FreeBSD:*:*)
-- # Determine whether the default compiler uses glibc.
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #include <features.h>
-- #if __GLIBC__ >= 2
-- LIBC=gnu
-- #else
-- LIBC=
-- #endif
--EOF
-- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-- # GNU/KFreeBSD systems have a "k" prefix to indicate we are using
-- # FreeBSD's kernel, but not the complete OS.
-- case ${LIBC} in gnu) kernel_only='k' ;; esac
-- echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
-- exit 0 ;;
-+ UNAME_PROCESSOR=`/usr/bin/uname -p`
-+ case ${UNAME_PROCESSOR} in
-+ amd64)
-+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-+ *)
-+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-+ esac
-+ exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
-- exit 0 ;;
-- i*:MINGW*:*)
-+ exit ;;
-+ *:MINGW64*:*)
-+ echo ${UNAME_MACHINE}-pc-mingw64
-+ exit ;;
-+ *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
-- exit 0 ;;
-+ exit ;;
-+ *:MSYS*:*)
-+ echo ${UNAME_MACHINE}-pc-msys
-+ exit ;;
-+ i*:windows32*:*)
-+ # uname -m includes "-pc" on this system.
-+ echo ${UNAME_MACHINE}-mingw32
-+ exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
-- exit 0 ;;
-- x86:Interix*:[34]*)
-- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-- exit 0 ;;
-+ exit ;;
-+ *:Interix*:*)
-+ case ${UNAME_MACHINE} in
-+ x86)
-+ echo i586-pc-interix${UNAME_RELEASE}
-+ exit ;;
-+ authenticamd | genuineintel | EM64T)
-+ echo x86_64-unknown-interix${UNAME_RELEASE}
-+ exit ;;
-+ IA64)
-+ echo ia64-unknown-interix${UNAME_RELEASE}
-+ exit ;;
-+ esac ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
-- exit 0 ;;
-+ exit ;;
-+ 8664:Windows_NT:*)
-+ echo x86_64-pc-mks
-+ exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
-- exit 0 ;;
-+ exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
-- exit 0 ;;
-+ exit ;;
-+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-+ echo x86_64-unknown-cygwin
-+ exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
-- exit 0 ;;
-+ exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit 0 ;;
-+ exit ;;
- *:GNU:*:*)
- # the GNU system
-- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-- exit 0 ;;
-+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-+ exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
-- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-- exit 0 ;;
-+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
-+ exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
-- exit 0 ;;
-+ exit ;;
-+ aarch64:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ aarch64_be:Linux:*:*)
-+ UNAME_MACHINE=aarch64_be
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ alpha:Linux:*:*)
-+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-+ EV5) UNAME_MACHINE=alphaev5 ;;
-+ EV56) UNAME_MACHINE=alphaev56 ;;
-+ PCA56) UNAME_MACHINE=alphapca56 ;;
-+ PCA57) UNAME_MACHINE=alphapca56 ;;
-+ EV6) UNAME_MACHINE=alphaev6 ;;
-+ EV67) UNAME_MACHINE=alphaev67 ;;
-+ EV68*) UNAME_MACHINE=alphaev68 ;;
-+ esac
-+ objdump --private-headers /bin/sh | grep -q ld.so.1
-+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ arc:Linux:*:* | arceb:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
- arm*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit 0 ;;
-+ eval $set_cc_for_build
-+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-+ | grep -q __ARM_EABI__
-+ then
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ else
-+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-+ | grep -q __ARM_PCS_VFP
-+ then
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
-+ else
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
-+ fi
-+ fi
-+ exit ;;
-+ avr32*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
- cris:Linux:*:*)
-- echo cris-axis-linux-gnu
-- exit 0 ;;
-+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-+ exit ;;
-+ crisv32:Linux:*:*)
-+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-+ exit ;;
-+ frv:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ hexagon:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ i*86:Linux:*:*)
-+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
-+ exit ;;
- ia64:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit 0 ;;
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
- m32r*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit 0 ;;
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
- m68*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit 0 ;;
-- mips:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ mips:Linux:*:* | mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
-- #undef mips
-- #undef mipsel
-+ #undef ${UNAME_MACHINE}
-+ #undef ${UNAME_MACHINE}el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-- CPU=mipsel
-+ CPU=${UNAME_MACHINE}el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-- CPU=mips
-+ CPU=${UNAME_MACHINE}
- #else
- CPU=
- #endif
- #endif
- EOF
-- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
- ;;
-- mips64:Linux:*:*)
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #undef CPU
-- #undef mips64
-- #undef mips64el
-- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-- CPU=mips64el
-- #else
-- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-- CPU=mips64
-- #else
-- CPU=
-- #endif
-- #endif
--EOF
-- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-- ;;
-- ppc:Linux:*:*)
-- echo powerpc-unknown-linux-gnu
-- exit 0 ;;
-- ppc64:Linux:*:*)
-- echo powerpc64-unknown-linux-gnu
-- exit 0 ;;
-- alpha:Linux:*:*)
-- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-- EV5) UNAME_MACHINE=alphaev5 ;;
-- EV56) UNAME_MACHINE=alphaev56 ;;
-- PCA56) UNAME_MACHINE=alphapca56 ;;
-- PCA57) UNAME_MACHINE=alphapca56 ;;
-- EV6) UNAME_MACHINE=alphaev6 ;;
-- EV67) UNAME_MACHINE=alphaev67 ;;
-- EV68*) UNAME_MACHINE=alphaev68 ;;
-- esac
-- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-- exit 0 ;;
-+ openrisc*:Linux:*:*)
-+ echo or1k-unknown-linux-${LIBC}
-+ exit ;;
-+ or32:Linux:*:* | or1k*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ padre:Linux:*:*)
-+ echo sparc-unknown-linux-${LIBC}
-+ exit ;;
-+ parisc64:Linux:*:* | hppa64:Linux:*:*)
-+ echo hppa64-unknown-linux-${LIBC}
-+ exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-- PA7*) echo hppa1.1-unknown-linux-gnu ;;
-- PA8*) echo hppa2.0-unknown-linux-gnu ;;
-- *) echo hppa-unknown-linux-gnu ;;
-+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-+ *) echo hppa-unknown-linux-${LIBC} ;;
- esac
-- exit 0 ;;
-- parisc64:Linux:*:* | hppa64:Linux:*:*)
-- echo hppa64-unknown-linux-gnu
-- exit 0 ;;
-+ exit ;;
-+ ppc64:Linux:*:*)
-+ echo powerpc64-unknown-linux-${LIBC}
-+ exit ;;
-+ ppc:Linux:*:*)
-+ echo powerpc-unknown-linux-${LIBC}
-+ exit ;;
-+ ppc64le:Linux:*:*)
-+ echo powerpc64le-unknown-linux-${LIBC}
-+ exit ;;
-+ ppcle:Linux:*:*)
-+ echo powerpcle-unknown-linux-${LIBC}
-+ exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
-- echo ${UNAME_MACHINE}-ibm-linux
-- exit 0 ;;
-+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
-+ exit ;;
- sh64*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit 0 ;;
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
- sh*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit 0 ;;
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit 0 ;;
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ tile*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ vax:Linux:*:*)
-+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
-+ exit ;;
- x86_64:Linux:*:*)
-- echo x86_64-unknown-linux-gnu
-- exit 0 ;;
-- i*86:Linux:*:*)
-- # The BFD linker knows what the default object file format is, so
-- # first see if it will tell us. cd to the root directory to prevent
-- # problems with other programs or directories called `ld' in the path.
-- # Set LC_ALL=C to ensure ld outputs messages in English.
-- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-- | sed -ne '/supported targets:/!d
-- s/[ ][ ]*/ /g
-- s/.*supported targets: *//
-- s/ .*//
-- p'`
-- case "$ld_supported_targets" in
-- elf32-i386)
-- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-- ;;
-- a.out-i386-linux)
-- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-- exit 0 ;;
-- coff-i386)
-- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-- exit 0 ;;
-- "")
-- # Either a pre-BFD a.out linker (linux-gnuoldld) or
-- # one that does not give us useful --help.
-- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-- exit 0 ;;
-- esac
-- # Determine whether the default compiler is a.out or elf
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #include <features.h>
-- #ifdef __ELF__
-- # ifdef __GLIBC__
-- # if __GLIBC__ >= 2
-- LIBC=gnu
-- # else
-- LIBC=gnulibc1
-- # endif
-- # else
-- LIBC=gnulibc1
-- # endif
-- #else
-- #ifdef __INTEL_COMPILER
-- LIBC=gnu
-- #else
-- LIBC=gnuaout
-- #endif
-- #endif
-- #ifdef __dietlibc__
-- LIBC=dietlibc
-- #endif
--EOF
-- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
-- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
-- ;;
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
-+ xtensa*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+ exit ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
-- exit 0 ;;
-+ exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
-- # Unixware is an offshoot of SVR4, but it has its own version
-- # number series starting with 2...
-- # I am not positive that other SVR4 systems won't match this,
-+ # Unixware is an offshoot of SVR4, but it has its own version
-+ # number series starting with 2...
-+ # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
-- # Use sysv4.2uw... so that sysv4* matches it.
-+ # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-- exit 0 ;;
-+ exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
-- exit 0 ;;
-+ exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
-- exit 0 ;;
-+ exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
-- exit 0 ;;
-- i*86:syllable:*:*)
-+ exit ;;
-+ i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
-- exit 0 ;;
-- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-+ exit ;;
-+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
-- exit 0 ;;
-+ exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-@@ -1040,15 +1066,16 @@ EOF
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
-- exit 0 ;;
-- i*86:*:5:[78]*)
-+ exit ;;
-+ i*86:*:5:[678]*)
-+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-- exit 0 ;;
-+ exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-@@ -1066,73 +1093,86 @@ EOF
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
-- exit 0 ;;
-+ exit ;;
- pc:*:*:*)
- # Left here for compatibility:
-- # uname -m prints for DJGPP always 'pc', but it prints nothing about
-- # the processor, so we play safe by assuming i386.
-- echo i386-pc-msdosdjgpp
-- exit 0 ;;
-+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
-+ # the processor, so we play safe by assuming i586.
-+ # Note: whatever this is, it MUST be the same as what config.sub
-+ # prints for the "djgpp" host, or else GDB configury will decide that
-+ # this is a cross-build.
-+ echo i586-pc-msdosdjgpp
-+ exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
-- exit 0 ;;
-+ exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
-- exit 0 ;;
-+ exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
-- exit 0 ;;
-+ exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
-- exit 0 ;;
-+ exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
-- exit 0 ;;
-+ exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
-- exit 0 ;;
-- M68*:*:R3V[567]*:*)
-- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
-+ exit ;;
-+ M68*:*:R3V[5678]*:*)
-+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
-+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
-+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-- && echo i486-ncr-sysv4 && exit 0 ;;
-+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-+ && { echo i486-ncr-sysv4; exit; } ;;
-+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-+ OS_REL='.3'
-+ test -r /etc/.relid \
-+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
-- exit 0 ;;
-+ exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
-- exit 0 ;;
-- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-+ exit ;;
-+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
-- exit 0 ;;
-+ exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
-- exit 0 ;;
-+ exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
-@@ -1140,68 +1180,109 @@ EOF
- else
- echo ns32k-sni-sysv
- fi
-- exit 0 ;;
-- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-- # says <Richard.M.Bartel@ccMail.Census.GOV>
-- echo i586-unisys-sysv4
-- exit 0 ;;
-+ exit ;;
-+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-+ # says <Richard.M.Bartel@ccMail.Census.GOV>
-+ echo i586-unisys-sysv4
-+ exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
-- exit 0 ;;
-+ exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
-- exit 0 ;;
-+ exit ;;
-+ i*86:VOS:*:*)
-+ # From Paul.Green@stratus.com.
-+ echo ${UNAME_MACHINE}-stratus-vos
-+ exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
-- exit 0 ;;
-+ exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
-- exit 0 ;;
-+ exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
-- echo mips-nec-sysv${UNAME_RELEASE}
-+ echo mips-nec-sysv${UNAME_RELEASE}
- else
-- echo mips-unknown-sysv${UNAME_RELEASE}
-+ echo mips-unknown-sysv${UNAME_RELEASE}
- fi
-- exit 0 ;;
-+ exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
-- exit 0 ;;
-+ exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
-- exit 0 ;;
-+ exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
-- exit 0 ;;
-+ exit ;;
-+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
-+ echo i586-pc-haiku
-+ exit ;;
-+ x86_64:Haiku:*:*)
-+ echo x86_64-unknown-haiku
-+ exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
-+ SX-7:SUPER-UX:*:*)
-+ echo sx7-nec-superux${UNAME_RELEASE}
-+ exit ;;
-+ SX-8:SUPER-UX:*:*)
-+ echo sx8-nec-superux${UNAME_RELEASE}
-+ exit ;;
-+ SX-8R:SUPER-UX:*:*)
-+ echo sx8r-nec-superux${UNAME_RELEASE}
-+ exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *:Darwin:*:*)
-- case `uname -p` in
-- *86) UNAME_PROCESSOR=i686 ;;
-- powerpc) UNAME_PROCESSOR=powerpc ;;
-- esac
-+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-+ eval $set_cc_for_build
-+ if test "$UNAME_PROCESSOR" = unknown ; then
-+ UNAME_PROCESSOR=powerpc
-+ fi
-+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-+ grep IS_64BIT_ARCH >/dev/null
-+ then
-+ case $UNAME_PROCESSOR in
-+ i386) UNAME_PROCESSOR=x86_64 ;;
-+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
-+ esac
-+ fi
-+ fi
-+ elif test "$UNAME_PROCESSOR" = i386 ; then
-+ # Avoid executing cc on OS X 10.9, as it ships with a stub
-+ # that puts up a graphical alert prompting to install
-+ # developer tools. Any system running Mac OS X 10.7 or
-+ # later (Darwin 11 and later) is required to have a 64-bit
-+ # processor. This is not true of the ARM version of Darwin
-+ # that Apple uses in portable devices.
-+ UNAME_PROCESSOR=x86_64
-+ fi
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
-@@ -1209,22 +1290,28 @@ EOF
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
-- exit 0 ;;
-+ exit ;;
-+ NEO-?:NONSTOP_KERNEL:*:*)
-+ echo neo-tandem-nsk${UNAME_RELEASE}
-+ exit ;;
-+ NSE-*:NONSTOP_KERNEL:*:*)
-+ echo nse-tandem-nsk${UNAME_RELEASE}
-+ exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
-- exit 0 ;;
-+ exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
-- exit 0 ;;
-+ exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-- exit 0 ;;
-+ exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
-@@ -1235,183 +1322,55 @@ EOF
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
-- exit 0 ;;
-+ exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
-- exit 0 ;;
-+ exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
-- exit 0 ;;
-+ exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
-- exit 0 ;;
-+ exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
-- exit 0 ;;
-+ exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
-- exit 0 ;;
-+ exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
-- exit 0 ;;
-+ exit ;;
- SEI:*:*:SEIUX)
-- echo mips-sei-seiux${UNAME_RELEASE}
-- exit 0 ;;
-+ echo mips-sei-seiux${UNAME_RELEASE}
-+ exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-- exit 0 ;;
-+ exit ;;
-+ *:*VMS:*:*)
-+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
-+ case "${UNAME_MACHINE}" in
-+ A*) echo alpha-dec-vms ; exit ;;
-+ I*) echo ia64-dec-vms ; exit ;;
-+ V*) echo vax-dec-vms ; exit ;;
-+ esac ;;
-+ *:XENIX:*:SysV)
-+ echo i386-pc-xenix
-+ exit ;;
-+ i*86:skyos:*:*)
-+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-+ exit ;;
-+ i*86:rdos:*:*)
-+ echo ${UNAME_MACHINE}-pc-rdos
-+ exit ;;
-+ i*86:AROS:*:*)
-+ echo ${UNAME_MACHINE}-pc-aros
-+ exit ;;
-+ x86_64:VMkernel:*:*)
-+ echo ${UNAME_MACHINE}-unknown-esx
-+ exit ;;
- esac
-
--#echo '(No uname command or uname output not recognized.)' 1>&2
--#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
--
--eval $set_cc_for_build
--cat >$dummy.c <<EOF
--#ifdef _SEQUENT_
--# include <sys/types.h>
--# include <sys/utsname.h>
--#endif
--main ()
--{
--#if defined (sony)
--#if defined (MIPSEB)
-- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
-- I don't know.... */
-- printf ("mips-sony-bsd\n"); exit (0);
--#else
--#include <sys/param.h>
-- printf ("m68k-sony-newsos%s\n",
--#ifdef NEWSOS4
-- "4"
--#else
-- ""
--#endif
-- ); exit (0);
--#endif
--#endif
--
--#if defined (__arm) && defined (__acorn) && defined (__unix)
-- printf ("arm-acorn-riscix"); exit (0);
--#endif
--
--#if defined (hp300) && !defined (hpux)
-- printf ("m68k-hp-bsd\n"); exit (0);
--#endif
--
--#if defined (NeXT)
--#if !defined (__ARCHITECTURE__)
--#define __ARCHITECTURE__ "m68k"
--#endif
-- int version;
-- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-- if (version < 4)
-- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-- else
-- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-- exit (0);
--#endif
--
--#if defined (MULTIMAX) || defined (n16)
--#if defined (UMAXV)
-- printf ("ns32k-encore-sysv\n"); exit (0);
--#else
--#if defined (CMU)
-- printf ("ns32k-encore-mach\n"); exit (0);
--#else
-- printf ("ns32k-encore-bsd\n"); exit (0);
--#endif
--#endif
--#endif
--
--#if defined (__386BSD__)
-- printf ("i386-pc-bsd\n"); exit (0);
--#endif
--
--#if defined (sequent)
--#if defined (i386)
-- printf ("i386-sequent-dynix\n"); exit (0);
--#endif
--#if defined (ns32000)
-- printf ("ns32k-sequent-dynix\n"); exit (0);
--#endif
--#endif
--
--#if defined (_SEQUENT_)
-- struct utsname un;
--
-- uname(&un);
--
-- if (strncmp(un.version, "V2", 2) == 0) {
-- printf ("i386-sequent-ptx2\n"); exit (0);
-- }
-- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-- printf ("i386-sequent-ptx1\n"); exit (0);
-- }
-- printf ("i386-sequent-ptx\n"); exit (0);
--
--#endif
--
--#if defined (vax)
--# if !defined (ultrix)
--# include <sys/param.h>
--# if defined (BSD)
--# if BSD == 43
-- printf ("vax-dec-bsd4.3\n"); exit (0);
--# else
--# if BSD == 199006
-- printf ("vax-dec-bsd4.3reno\n"); exit (0);
--# else
-- printf ("vax-dec-bsd\n"); exit (0);
--# endif
--# endif
--# else
-- printf ("vax-dec-bsd\n"); exit (0);
--# endif
--# else
-- printf ("vax-dec-ultrix\n"); exit (0);
--# endif
--#endif
--
--#if defined (alliant) && defined (i860)
-- printf ("i860-alliant-bsd\n"); exit (0);
--#endif
--
-- exit (1);
--}
--EOF
--
--$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
--
--# Apollos put the system type in the environment.
--
--test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
--
--# Convex versions that predate uname can use getsysinfo(1)
--
--if [ -x /usr/convex/getsysinfo ]
--then
-- case `getsysinfo -f cpu_type` in
-- c1*)
-- echo c1-convex-bsd
-- exit 0 ;;
-- c2*)
-- if getsysinfo -f scalar_acc
-- then echo c32-convex-bsd
-- else echo c2-convex-bsd
-- fi
-- exit 0 ;;
-- c34*)
-- echo c34-convex-bsd
-- exit 0 ;;
-- c38*)
-- echo c38-convex-bsd
-- exit 0 ;;
-- c4*)
-- echo c4-convex-bsd
-- exit 0 ;;
-- esac
--fi
--
- cat >&2 <<EOF
- $0: unable to guess system type
-
-@@ -1419,7 +1378,9 @@ This script, last modified $timestamp, has failed to recognize
- the operating system you are using. It is advised that you
- download the most up to date version of the config scripts from
-
-- ftp://ftp.gnu.org/pub/gnu/config/
-+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-+and
-+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
- If the version you run ($0) is already up to date, please
- send the following data and any information you think might be
-diff --git a/config.sub b/config.sub
-index ba33103..bba4efb 100755
---- a/config.sub
-+++ b/config.sub
-@@ -1,42 +1,40 @@
- #! /bin/sh
- # Configuration validation subroutine script.
--# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
--# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-+# Copyright 1992-2014 Free Software Foundation, Inc.
-
--timestamp='2004-03-12'
-+timestamp='2014-09-11'
-
--# This file is (in principle) common to ALL GNU software.
--# The presence of a machine in this file suggests that SOME GNU software
--# can handle that machine. It does not imply ALL GNU software can.
--#
--# This file is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 2 of the License, or
-+# This file is free software; you can redistribute it and/or modify it
-+# under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3 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.
-+# This program is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
--# along with this program; if not, write to the Free Software
--# Foundation, Inc., 59 Temple Place - Suite 330,
--# Boston, MA 02111-1307, USA.
--
-+# along with this program; if not, see <http://www.gnu.org/licenses/>.
-+#
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
--# the same distribution terms that you use for the rest of that program.
-+# the same distribution terms that you use for the rest of that
-+# program. This Exception is an additional permission under section 7
-+# of the GNU General Public License, version 3 ("GPLv3").
-
--# Please send patches to <config-patches@gnu.org>. Submit a context
--# diff and a properly formatted ChangeLog entry.
-+
-+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
- #
- # Configuration subroutine to validate and canonicalize a configuration type.
- # Supply the specified configuration type as an argument.
- # If it is invalid, we print an error message on stderr and exit with code 1.
- # Otherwise, we print the canonical config type on stdout and succeed.
-
-+# You can get the latest version of this script from:
-+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-+
- # This file is supposed to be the same for all GNU packages
- # and recognize all the CPU types, system types and aliases
- # that are meaningful with *any* GNU software.
-@@ -70,8 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
- version="\
- GNU config.sub ($timestamp)
-
--Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
--Free Software Foundation, Inc.
-+Copyright 1992-2014 Free Software Foundation, Inc.
-
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-@@ -83,11 +80,11 @@ Try \`$me --help' for more information."
- while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
-- echo "$timestamp" ; exit 0 ;;
-+ echo "$timestamp" ; exit ;;
- --version | -v )
-- echo "$version" ; exit 0 ;;
-+ echo "$version" ; exit ;;
- --help | --h* | -h )
-- echo "$usage"; exit 0 ;;
-+ echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
-@@ -99,7 +96,7 @@ while test $# -gt 0 ; do
- *local*)
- # First pass through any local machine types.
- echo $1
-- exit 0;;
-+ exit ;;
-
- * )
- break ;;
-@@ -118,11 +115,18 @@ esac
- # Here we must recognize all the valid KERNEL-OS combinations.
- maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
- case $maybe_os in
-- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
-+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-+ knetbsd*-gnu* | netbsd*-gnu* | \
-+ kopensolaris*-gnu* | \
-+ storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
-+ android-linux)
-+ os=-linux-android
-+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-+ ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
-@@ -145,10 +149,13 @@ case $os in
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-- -apple | -axis)
-+ -apple | -axis | -knuth | -cray | -microblaze*)
- os=
- basic_machine=$1
- ;;
-+ -bluegene*)
-+ os=-cnk
-+ ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
-@@ -163,13 +170,17 @@ case $os in
- os=-chorusos
- basic_machine=$1
- ;;
-- -chorusrdb)
-- os=-chorusrdb
-+ -chorusrdb)
-+ os=-chorusrdb
- basic_machine=$1
-- ;;
-+ ;;
- -hiux*)
- os=-hiuxwe2
- ;;
-+ -sco6)
-+ os=-sco5v6
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-@@ -186,6 +197,10 @@ case $os in
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
-+ -sco5v6*)
-+ # Don't forget version if it is 3.2v4 or newer.
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-@@ -203,6 +218,12 @@ case $os in
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
-+ -lynx*178)
-+ os=-lynxos178
-+ ;;
-+ -lynx*5)
-+ os=-lynxos5
-+ ;;
- -lynx*)
- os=-lynxos
- ;;
-@@ -227,57 +248,109 @@ case $basic_machine in
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
-+ | aarch64 | aarch64_be \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
-- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-- | c4x | clipper \
-+ | arc | arceb \
-+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-+ | avr | avr32 \
-+ | be32 | be64 \
-+ | bfin \
-+ | c4x | c8051 | clipper \
- | d10v | d30v | dlx | dsp16xx \
-- | fr30 | frv \
-+ | epiphany \
-+ | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-+ | hexagon \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
-- | m32r | m32rle | m68000 | m68k | m88k | mcore \
-+ | k1om \
-+ | le32 | le64 \
-+ | lm32 \
-+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
-+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
-- | mips64vr | mips64vrel \
-+ | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
-+ | mips64r5900 | mips64r5900el \
-+ | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
-+ | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
-+ | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
-+ | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
-+ | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
-+ | moxie \
-+ | mt \
- | msp430 \
-+ | nds32 | nds32le | nds32be \
-+ | nios | nios2 | nios2eb | nios2el \
- | ns16k | ns32k \
-- | openrisc | or32 \
-+ | open8 | or1k | or1knd | or32 \
- | pdp10 | pdp11 | pj | pjl \
-- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-+ | powerpc | powerpc64 | powerpc64le | powerpcle \
- | pyramid \
-- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-+ | riscv32 | riscv64 \
-+ | rl78 | rx \
-+ | score \
-+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
-- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
-- | strongarm \
-- | tahoe | thumb | tic4x | tic80 | tron \
-- | v850 | v850e \
-+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-+ | spu \
-+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-+ | ubicom32 \
-+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
- | we32k \
-- | x86 | xscale | xstormy16 | xtensa \
-- | z8k)
-+ | x86 | xc16x | xstormy16 | xtensa \
-+ | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
-- m6811 | m68hc11 | m6812 | m68hc12)
-- # Motorola 68HC11/12.
-+ c54x)
-+ basic_machine=tic54x-unknown
-+ ;;
-+ c55x)
-+ basic_machine=tic55x-unknown
-+ ;;
-+ c6x)
-+ basic_machine=tic6x-unknown
-+ ;;
-+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-+ ms1)
-+ basic_machine=mt-unknown
-+ ;;
-+
-+ strongarm | thumb | xscale)
-+ basic_machine=arm-unknown
-+ ;;
-+ xgate)
-+ basic_machine=$basic_machine-unknown
-+ os=-none
-+ ;;
-+ xscaleeb)
-+ basic_machine=armeb-unknown
-+ ;;
-+
-+ xscaleel)
-+ basic_machine=armel-unknown
-+ ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
-@@ -293,59 +366,86 @@ case $basic_machine in
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
-+ | aarch64-* | aarch64_be-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
-- | avr-* \
-- | bs2000-* \
-- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-- | clipper-* | cydra-* \
-+ | avr-* | avr32-* \
-+ | be32-* | be64-* \
-+ | bfin-* | bs2000-* \
-+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
-+ | c8051-* | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
-- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
-+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-+ | hexagon-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
-- | m32r-* | m32rle-* \
-+ | k1om-* \
-+ | le32-* | le64-* \
-+ | lm32-* \
-+ | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-- | m88110-* | m88k-* | mcore-* \
-+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-+ | microblaze-* | microblazeel-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
-- | mips64vr-* | mips64vrel-* \
-+ | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
-+ | mips64r5900-* | mips64r5900el-* \
-+ | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
-+ | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
-+ | mipsisa32r6-* | mipsisa32r6el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
-+ | mipsisa64r6-* | mipsisa64r6el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-+ | mipsr5900-* | mipsr5900el-* \
- | mipstx39-* | mipstx39el-* \
-+ | mmix-* \
-+ | mt-* \
- | msp430-* \
-- | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
-+ | nds32-* | nds32le-* | nds32be-* \
-+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
-+ | none-* | np1-* | ns16k-* | ns32k-* \
-+ | open8-* \
-+ | or1k*-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
- | pyramid-* \
-- | romp-* | rs6000-* \
-- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
-+ | rl78-* | romp-* | rs6000-* | rx-* \
-+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-- | tahoe-* | thumb-* \
-+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-+ | sparclite-* \
-+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-+ | tahoe-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-+ | tile*-* \
- | tron-* \
-- | v850-* | v850e-* | vax-* \
-+ | ubicom32-* \
-+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-+ | vax-* \
- | we32k-* \
-- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
-- | xtensa-* \
-+ | x86-* | x86_64-* | xc16x-* | xps100-* \
-+ | xstormy16-* | xtensa*-* \
- | ymp-* \
-- | z8k-*)
-+ | z8k-* | z80-*)
-+ ;;
-+ # Recognize the basic CPU types without company name, with glob match.
-+ xtensa*)
-+ basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
-@@ -363,7 +463,7 @@ case $basic_machine in
- basic_machine=a29k-amd
- os=-udi
- ;;
-- abacus)
-+ abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
-@@ -409,6 +509,10 @@ case $basic_machine in
- basic_machine=m68k-apollo
- os=-bsd
- ;;
-+ aros)
-+ basic_machine=i386-pc
-+ os=-aros
-+ ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
-@@ -417,10 +521,35 @@ case $basic_machine in
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
-+ blackfin)
-+ basic_machine=bfin-unknown
-+ os=-linux
-+ ;;
-+ blackfin-*)
-+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ os=-linux
-+ ;;
-+ bluegene*)
-+ basic_machine=powerpc-ibm
-+ os=-cnk
-+ ;;
-+ c54x-*)
-+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ c55x-*)
-+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ c6x-*)
-+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
-+ cegcc)
-+ basic_machine=arm-unknown
-+ os=-cegcc
-+ ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
-@@ -445,13 +574,20 @@ case $basic_machine in
- basic_machine=j90-cray
- os=-unicos
- ;;
-- cr16c)
-- basic_machine=cr16c-unknown
-+ craynv)
-+ basic_machine=craynv-cray
-+ os=-unicosmp
-+ ;;
-+ cr16 | cr16-*)
-+ basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
-+ crisv32 | crisv32-* | etraxfs*)
-+ basic_machine=crisv32-axis
-+ ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
-@@ -481,6 +617,14 @@ case $basic_machine in
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
-+ dicos)
-+ basic_machine=i686-pc
-+ os=-dicos
-+ ;;
-+ djgpp)
-+ basic_machine=i586-pc
-+ os=-msdosdjgpp
-+ ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
-@@ -592,7 +736,6 @@ case $basic_machine in
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
--# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
-@@ -631,6 +774,14 @@ case $basic_machine in
- basic_machine=m68k-isi
- os=-sysv
- ;;
-+ m68knommu)
-+ basic_machine=m68k-unknown
-+ os=-linux
-+ ;;
-+ m68knommu-*)
-+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ os=-linux
-+ ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
-@@ -642,10 +793,21 @@ case $basic_machine in
- basic_machine=ns32k-utek
- os=-sysv
- ;;
-+ microblaze*)
-+ basic_machine=microblaze-xilinx
-+ ;;
-+ mingw64)
-+ basic_machine=x86_64-pc
-+ os=-mingw64
-+ ;;
- mingw32)
-- basic_machine=i386-pc
-+ basic_machine=i686-pc
- os=-mingw32
- ;;
-+ mingw32ce)
-+ basic_machine=arm-unknown
-+ os=-mingw32ce
-+ ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
-@@ -659,10 +821,6 @@ case $basic_machine in
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
-- mmix*)
-- basic_machine=mmix-knuth
-- os=-mmixware
-- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
-@@ -671,14 +829,29 @@ case $basic_machine in
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
-+ moxiebox)
-+ basic_machine=moxie-unknown
-+ os=-moxiebox
-+ ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
-+ ms1-*)
-+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-+ ;;
-+ msys)
-+ basic_machine=i686-pc
-+ os=-msys
-+ ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
-+ nacl)
-+ basic_machine=le32-unknown
-+ os=-nacl
-+ ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
-@@ -743,9 +916,11 @@ case $basic_machine in
- np1)
- basic_machine=np1-gould
- ;;
-- nv1)
-- basic_machine=nv1-cray
-- os=-unicosmp
-+ neo-tandem)
-+ basic_machine=neo-tandem
-+ ;;
-+ nse-tandem)
-+ basic_machine=nse-tandem
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
-@@ -754,9 +929,8 @@ case $basic_machine in
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
-- or32 | or32-*)
-+ openrisc | openrisc-*)
- basic_machine=or32-unknown
-- os=-coff
- ;;
- os400)
- basic_machine=powerpc-ibm
-@@ -778,6 +952,14 @@ case $basic_machine in
- basic_machine=i860-intel
- os=-osf
- ;;
-+ parisc)
-+ basic_machine=hppa-unknown
-+ os=-linux
-+ ;;
-+ parisc-*)
-+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ os=-linux
-+ ;;
- pbd)
- basic_machine=sparc-tti
- ;;
-@@ -787,6 +969,12 @@ case $basic_machine in
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
-+ pc98)
-+ basic_machine=i386-pc
-+ ;;
-+ pc98-*)
-+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
-@@ -816,9 +1004,10 @@ case $basic_machine in
- ;;
- power) basic_machine=power-ibm
- ;;
-- ppc) basic_machine=powerpc-unknown
-+ ppc | ppcbe) basic_machine=powerpc-unknown
- ;;
-- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ppc-* | ppcbe-*)
-+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
-@@ -843,6 +1032,14 @@ case $basic_machine in
- basic_machine=i586-unknown
- os=-pw32
- ;;
-+ rdos | rdos64)
-+ basic_machine=x86_64-pc
-+ os=-rdos
-+ ;;
-+ rdos32)
-+ basic_machine=i386-pc
-+ os=-rdos
-+ ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
-@@ -869,6 +1066,10 @@ case $basic_machine in
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
-+ sde)
-+ basic_machine=mipsisa32-sde
-+ os=-elf
-+ ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
-@@ -880,6 +1081,9 @@ case $basic_machine in
- basic_machine=sh-hitachi
- os=-hms
- ;;
-+ sh5el)
-+ basic_machine=sh5le-unknown
-+ ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
-@@ -901,6 +1105,9 @@ case $basic_machine in
- basic_machine=i860-stratus
- os=-sysv4
- ;;
-+ strongarm-* | thumb-*)
-+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
- sun2)
- basic_machine=m68000-sun
- ;;
-@@ -957,17 +1164,9 @@ case $basic_machine in
- basic_machine=t90-cray
- os=-unicos
- ;;
-- tic54x | c54x*)
-- basic_machine=tic54x-unknown
-- os=-coff
-- ;;
-- tic55x | c55x*)
-- basic_machine=tic55x-unknown
-- os=-coff
-- ;;
-- tic6x | c6x*)
-- basic_machine=tic6x-unknown
-- os=-coff
-+ tile*)
-+ basic_machine=$basic_machine-unknown
-+ os=-linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
-@@ -1029,9 +1228,16 @@ case $basic_machine in
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
-+ xbox)
-+ basic_machine=i686-pc
-+ os=-mingw32
-+ ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
-+ xscale-* | xscalee[bl]-*)
-+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-+ ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
-@@ -1040,6 +1246,10 @@ case $basic_machine in
- basic_machine=z8k-unknown
- os=-sim
- ;;
-+ z80-*-coff)
-+ basic_machine=z80-unknown
-+ os=-sim
-+ ;;
- none)
- basic_machine=none-none
- os=-none
-@@ -1059,6 +1269,9 @@ case $basic_machine in
- romp)
- basic_machine=romp-ibm
- ;;
-+ mmix)
-+ basic_machine=mmix-knuth
-+ ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
-@@ -1075,13 +1288,10 @@ case $basic_machine in
- we32k)
- basic_machine=we32k-att
- ;;
-- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
-+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
-- sh64)
-- basic_machine=sh64-unknown
-- ;;
-- sparc | sparcv8 | sparcv9 | sparcv9b)
-+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
- basic_machine=sparc-sun
- ;;
- cydra)
-@@ -1125,9 +1335,12 @@ esac
- if [ x"$os" != x"" ]
- then
- case $os in
-- # First match some system type aliases
-- # that might get confused with valid system types.
-+ # First match some system type aliases
-+ # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
-+ -auroraux)
-+ os=-auroraux
-+ ;;
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
-@@ -1148,26 +1361,31 @@ case $os in
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-+ | -sym* | -kopensolaris* | -plan9* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-- | -aos* \
-+ | -aos* | -aros* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
-+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-+ | -bitrig* | -openbsd* | -solidbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-- | -chorusos* | -chorusrdb* \
-- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
-+ | -chorusos* | -chorusrdb* | -cegcc* \
-+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
-+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
-@@ -1185,7 +1403,7 @@ case $os in
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
-@@ -1206,7 +1424,7 @@ case $os in
- -opened*)
- os=-openedition
- ;;
-- -os400*)
-+ -os400*)
- os=-os400
- ;;
- -wince*)
-@@ -1255,7 +1473,7 @@ case $os in
- -sinix*)
- os=-sysv4
- ;;
-- -tpf*)
-+ -tpf*)
- os=-tpf
- ;;
- -triton*)
-@@ -1291,8 +1509,13 @@ case $os in
- -aros*)
- os=-aros
- ;;
-- -kaos*)
-- os=-kaos
-+ -zvmoe)
-+ os=-zvmoe
-+ ;;
-+ -dicos*)
-+ os=-dicos
-+ ;;
-+ -nacl*)
- ;;
- -none)
- ;;
-@@ -1316,6 +1539,12 @@ else
- # system, and we'll never get to this point.
-
- case $basic_machine in
-+ score-*)
-+ os=-elf
-+ ;;
-+ spu-*)
-+ os=-elf
-+ ;;
- *-acorn)
- os=-riscix1.2
- ;;
-@@ -1325,9 +1554,24 @@ case $basic_machine in
- arm*-semi)
- os=-aout
- ;;
-- c4x-* | tic4x-*)
-- os=-coff
-- ;;
-+ c4x-* | tic4x-*)
-+ os=-coff
-+ ;;
-+ c8051-*)
-+ os=-elf
-+ ;;
-+ hexagon-*)
-+ os=-elf
-+ ;;
-+ tic54x-*)
-+ os=-coff
-+ ;;
-+ tic55x-*)
-+ os=-coff
-+ ;;
-+ tic6x-*)
-+ os=-coff
-+ ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
-@@ -1346,13 +1590,13 @@ case $basic_machine in
- ;;
- m68000-sun)
- os=-sunos3
-- # This also exists in the configure program, but was not the
-- # default.
-- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
-+ mep-*)
-+ os=-elf
-+ ;;
- mips*-cisco)
- os=-elf
- ;;
-@@ -1371,9 +1615,15 @@ case $basic_machine in
- *-be)
- os=-beos
- ;;
-+ *-haiku)
-+ os=-haiku
-+ ;;
- *-ibm)
- os=-aix
- ;;
-+ *-knuth)
-+ os=-mmixware
-+ ;;
- *-wec)
- os=-proelf
- ;;
-@@ -1476,7 +1726,7 @@ case $basic_machine in
- -sunos*)
- vendor=sun
- ;;
-- -aix*)
-+ -cnk*|-aix*)
- vendor=ibm
- ;;
- -beos*)
-@@ -1539,7 +1789,7 @@ case $basic_machine in
- esac
-
- echo $basic_machine$os
--exit 0
-+exit
-
- # Local variables:
- # eval: (add-hook 'write-file-hooks 'time-stamp)
diff --git a/debian/patches/060_format-security.patch b/debian/patches/060_format-security.patch
deleted file mode 100644
index 6ac0425..0000000
--- a/debian/patches/060_format-security.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-Description: Appease gcc -Werror=format-security
-Author: Colin Watson <cjwatson@ubuntu.com>
-Forwarded: no
-Last-Update: 2011-10-23
-
-Index: b/acinclude.m4
-===================================================================
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -866,7 +866,7 @@
- AC_TRY_COMPILE(
- changequote(<<,>>)dnl
- <<extern char *sys_errlist[];>>,
--<<printf(sys_errlist[0]);>>,
-+<<printf("%s", sys_errlist[0]);>>,
- changequote([,])dnl
- [have_sys_errlist="yes"; AC_DEFINE(HAVE_SYS_ERRLIST)],
- [have_sys_errlist="no"])
-Index: b/configure
-===================================================================
---- a/configure
-+++ b/configure
-@@ -8986,7 +8986,7 @@
- int
- main ()
- {
--printf(sys_errlist[0]);
-+printf("%s", sys_errlist[0]);
- ;
- return 0;
- }
-Index: b/w3mbookmark.c
-===================================================================
---- a/w3mbookmark.c
-+++ b/w3mbookmark.c
-@@ -99,7 +99,7 @@
- fprintf(f, "<body>\n<h1>Bookmarks</h1>\n");
- fprintf(f, "<h2>%s</h2>\n<ul>\n", section);
- fprintf(f, "<li><a href=\"%s\">%s</a>\n", url, title);
-- fprintf(f, end_section);
-+ fprintf(f, "%s", end_section);
- fprintf(f, "</ul>\n</body>\n</html>\n");
- fclose(f);
- }
diff --git a/debian/patches/070_glibc2.14.patch b/debian/patches/070_glibc2.14.patch
deleted file mode 100644
index 25e480a..0000000
--- a/debian/patches/070_glibc2.14.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-Description: Unbreak compilation with eglibc 2.14
-Author: Reinhard Tartler <siretart@tauware.de>
-Origin: Ubuntu
-Bug-Ubuntu: https://launchpad.net/bugs/935540
-
---- w3m-0.5.3.orig/istream.c
-+++ w3m-0.5.3/istream.c
-@@ -22,8 +22,8 @@
- static void basic_close(int *handle);
- static int basic_read(int *handle, char *buf, int len);
-
--static void file_close(struct file_handle *handle);
--static int file_read(struct file_handle *handle, char *buf, int len);
-+static void file_close(struct io_file_handle *handle);
-+static int file_read(struct io_file_handle *handle, char *buf, int len);
-
- static int str_read(Str handle, char *buf, int len);
-
-@@ -114,7 +114,7 @@ newFileStream(FILE * f, void (*closep) (
- stream = New(union input_stream);
- init_base_stream(&stream->base, STREAM_BUF_SIZE);
- stream->file.type = IST_FILE;
-- stream->file.handle = New(struct file_handle);
-+ stream->file.handle = New(struct io_file_handle);
- stream->file.handle->f = f;
- if (closep)
- stream->file.handle->close = closep;
-@@ -658,13 +658,13 @@ basic_read(int *handle, char *buf, int l
- }
-
- static void
--file_close(struct file_handle *handle)
-+file_close(struct io_file_handle *handle)
- {
- handle->close(handle->f);
- }
-
- static int
--file_read(struct file_handle *handle, char *buf, int len)
-+file_read(struct io_file_handle *handle, char *buf, int len)
- {
- return fread(buf, 1, len, handle->f);
- }
---- w3m-0.5.3.orig/istream.h
-+++ w3m-0.5.3/istream.h
-@@ -20,7 +20,7 @@ struct stream_buffer {
-
- typedef struct stream_buffer *StreamBuffer;
-
--struct file_handle {
-+struct io_file_handle {
- FILE *f;
- void (*close) ();
- };
-@@ -53,7 +53,7 @@ struct base_stream {
-
- struct file_stream {
- struct stream_buffer stream;
-- struct file_handle *handle;
-+ struct io_file_handle *handle;
- char type;
- char iseos;
- int (*read) ();
diff --git a/debian/patches/080_gc72.patch b/debian/patches/080_gc72.patch
deleted file mode 100644
index 4642ce1..0000000
--- a/debian/patches/080_gc72.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Description: Support Boehm GC 7.2
-Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=080_gc72.patch;att=1;bug=758831
-From: Micah Cowan <micah@addictivecode.org>
-Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758831
-Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=555467
-Bug: http://sourceforge.net/p/w3m/patches/63/
-Bug: http://sourceforge.net/p/w3m/patches/59/
-
-Index: w3m-0.5.3/main.c
-===================================================================
---- w3m-0.5.3.orig/main.c 2014-08-21 12:22:32.000000000 -0700
-+++ w3m-0.5.3/main.c 2014-08-21 12:22:52.419420062 -0700
-@@ -845,7 +845,12 @@ main(int argc, char **argv, char **envp)
- mySignal(SIGPIPE, SigPipe);
- #endif
-
-+#if GC_VERSION_MAJOR >= 7 && GC_VERSION_MINOR >= 2
-+ orig_GC_warn_proc = GC_get_warn_proc();
-+ GC_set_warn_proc(wrap_GC_warn_proc);
-+#else
- orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc);
-+#endif
- err_msg = Strnew();
- if (load_argc == 0) {
- /* no URL specified */
diff --git a/debian/patches/090_parallel-make.patch b/debian/patches/090_parallel-make.patch
deleted file mode 100644
index 01a333a..0000000
--- a/debian/patches/090_parallel-make.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Subject: Fix parallel make issue
-From: Tatsuya Kinoshita <tats@debian.org>
-Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726188
-Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=362249
-Bug: https://sourceforge.net/p/w3m/patches/64/
-
- Depend on funcname.tab to fix parallel make issue of scripts
-
- Avoid prerequisite $(IMGOBJS) to fix parallel make issue of w3mimg
-
-diff --git a/Makefile.in b/Makefile.in
-index 52a0aae..b283f29 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -250,7 +250,7 @@ install-po:
- (cd $$subdir && $(MAKE) install); \
- done
-
--all-scripts:
-+all-scripts: funcname.tab
- for dir in $(SCRIPTSUBDIRS); \
- do \
- (cd $$dir && $(MAKE) $(MAKE_ARGS)); \
-diff --git a/w3mimg/Makefile.in b/w3mimg/Makefile.in
-index dfc550c..8e2ad73 100644
---- a/w3mimg/Makefile.in
-+++ b/w3mimg/Makefile.in
-@@ -16,9 +16,9 @@ IMGCFLAGS=@IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@
- IMGOBJS=@IMGOBJS@
-
- .PHONY: $(SUBDIRS)
--all: @IMGTARGETS@ w3mimg.a
-+all: w3mimg.a
-
--w3mimg.a: $(IMGOBJS)
-+w3mimg.a: w3mimg.o @IMGTARGETS@
- $(AR) rv $@ $(IMGOBJS)
- $(RANLIB) $@
-
diff --git a/debian/patches/100_use-cppflags.patch b/debian/patches/100_use-cppflags.patch
deleted file mode 100644
index 0b76fb2..0000000
--- a/debian/patches/100_use-cppflags.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Description: Use $(CPPFLAGS) with $(CPP)
- Use CPPFLAGS from environment (dpkg-buildflags).
- Necessary for hardening flags.
-Author: Simon Ruderich <simon@ruderich.org>
-Bug-Debian: http://bugs.debian.org/665491
-
---- w3m-0.5.3.orig/Makefile.in
-+++ w3m-0.5.3/Makefile.in
-@@ -150,7 +150,7 @@ parsetagx.o: html.c
-
- funcname.tab: $(DEFUNS)
- (echo '#define DEFUN(x,y,z) x y';\
-- sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) - | \
-+ sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) $(CPPFLAGS) - | \
- awk '$$1 ~ /^[_A-Za-z]/ { \
- for (i=2;i<=NF;i++) { print $$i, $$1} \
- }' > $@.tmp
diff --git a/debian/patches/110_form-input-text.patch b/debian/patches/110_form-input-text.patch
deleted file mode 100644
index d5c09f3..0000000
--- a/debian/patches/110_form-input-text.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Description: Assume "text" if an input type is unknown
-Author: Hilko Bengen <bengen@debian.org>
-Bug-Debian: http://bugs.debian.org/615843
-
---- w3m-git.orig/form.c 2011-02-28 15:03:36.000000000 +0100
-+++ w3m-git/form.c 2011-02-28 15:32:33.000000000 +0100
-@@ -196,7 +196,7 @@
- if (!strcasecmp(typestr, _formtypetbl[i]))
- return i;
- }
-- return FORM_UNKNOWN;
-+ return FORM_INPUT_TEXT;
- }
-
- void
diff --git a/debian/patches/120_sgrmouse.patch b/debian/patches/120_sgrmouse.patch
deleted file mode 100644
index 0cc9feb..0000000
--- a/debian/patches/120_sgrmouse.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Subject: Support SGR 1006
-From: Hayaki Saito <user@zuse.jp>
-Date: Sun, 15 Jul 2012 20:14:16 +0900
-Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/201207.month/4466.html
-
-Patch to support SGR 1006 mouse reporting, from [w3m-dev 04466]
-on 2012-07-15, provided by Hayaki Saito.
-
-diff --git a/keybind.c b/keybind.c
-index a490962..fec0c65 100644
---- a/keybind.c
-+++ b/keybind.c
-@@ -91,7 +91,7 @@ unsigned char EscBKeymap[128] = {
- /* 0 1 2 3 4 5 6 7 */
- nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
- /* 8 9 : ; < = > ? */
-- nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
-+ nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd,
- /* @ A B C D E F G */
- nulcmd, movU, movD, movR, movL, nulcmd, goLineL, pgFore,
- /* H I J K L M N O */
-diff --git a/main.c b/main.c
-index b421943..35f2f39 100644
---- a/main.c
-+++ b/main.c
-@@ -5398,6 +5398,58 @@ DEFUN(mouse, MOUSE, "mouse operation")
- process_mouse(btn, x, y);
- }
-
-+DEFUN(sgrmouse, SGRMOUSE, "SGR 1006 mouse operation")
-+{
-+ int btn = 0, x = 0, y = 0;
-+ unsigned char c;
-+
-+ do {
-+ c = getch();
-+ if (IS_DIGIT(c))
-+ btn = btn * 10 + c - '0';
-+ else if (c == ';')
-+ break;
-+ else
-+ return;
-+ } while (1);
-+
-+#if defined(__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005
-+ if (cygwin_mouse_btn_swapped) {
-+ if (btn == MOUSE_BTN2_DOWN)
-+ btn = MOUSE_BTN3_DOWN;
-+ else if (btn == MOUSE_BTN3_DOWN)
-+ btn = MOUSE_BTN2_DOWN;
-+ };
-+#endif
-+
-+ do {
-+ c = getch();
-+ if (IS_DIGIT(c))
-+ x = x * 10 + c - '0';
-+ else if (c == ';')
-+ break;
-+ else
-+ return;
-+ } while (1);
-+
-+ do {
-+ c = getch();
-+ if (IS_DIGIT(c))
-+ y = y * 10 + c - '0';
-+ else if (c == 'M')
-+ break;
-+ else if (c == 'm') {
-+ btn |= 3;
-+ break;
-+ } else
-+ return;
-+ } while (1);
-+
-+ if (x < 0 || x >= COLS || y < 0 || y > LASTLINE)
-+ return;
-+ process_mouse(btn, x, y);
-+}
-+
- #ifdef USE_GPM
- int
- gpm_process_mouse(Gpm_Event * event, void *data)
-diff --git a/proto.h b/proto.h
-index f8a7345..980d522 100644
---- a/proto.h
-+++ b/proto.h
-@@ -683,6 +683,7 @@ extern void reMark(void);
-
- #ifdef USE_MOUSE
- extern void mouse(void);
-+extern void sgrmouse(void);
- extern void mouse_init(void);
- extern void mouse_end(void);
- extern void mouse_active(void);
-diff --git a/terms.c b/terms.c
-index 7a3c987..8d928a2 100644
---- a/terms.c
-+++ b/terms.c
-@@ -2027,8 +2027,8 @@ sleep_till_anykey(int sec, int purge)
-
- #ifdef USE_MOUSE
-
--#define XTERM_ON {fputs("\033[?1001s\033[?1000h",ttyf); flush_tty();}
--#define XTERM_OFF {fputs("\033[?1000l\033[?1001r",ttyf); flush_tty();}
-+#define XTERM_ON {fputs("\033[?1001s\033[?1000h\033[?1006h",ttyf); flush_tty();}
-+#define XTERM_OFF {fputs("\033[?1006l\033[?1000l\033[?1001r",ttyf); flush_tty();}
- #define CYGWIN_ON {fputs("\033[?1000h",ttyf); flush_tty();}
- #define CYGWIN_OFF {fputs("\033[?1000l",ttyf); flush_tty();}
-
diff --git a/debian/patches/130_siteconf.patch b/debian/patches/130_siteconf.patch
deleted file mode 100644
index 9f8124f..0000000
--- a/debian/patches/130_siteconf.patch
+++ /dev/null
@@ -1,2065 +0,0 @@
-Subject: New feature: siteconf
-Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/201206.month/4464.html
-
-Patch to support the siteconf feature, from [w3m-dev 04464]
-on 2012-06-27, provided by AIDA Shinra.
-
-Updated to fix segfault of loadGeneralFile() by Tatsuya Kinoshita.
-
-diff --git a/anchor.c b/anchor.c
-index 27bbd56..39f221d 100644
---- a/anchor.c
-+++ b/anchor.c
-@@ -200,10 +200,11 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos)
- if (*(p2 - 1) == '>')
- p2--;
- }
-- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset,
-- buf->document_charset);
-- tmp = Sprintf("news:%s", file_quote(tmp->ptr));
-- return registerHref(buf, tmp->ptr, NULL, NO_REFERER, NULL, '\0', line,
-+ tmp = Strnew_charp("news:");
-+ Strcat_charp_n(tmp, p1, p2 - p1);
-+ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf),
-+ buf->document_charset),
-+ NULL, NO_REFERER, NULL, '\0', line,
- pos);
- }
- #endif /* USE_NNTP */
-@@ -213,9 +214,10 @@ _put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos)
- {
- Str tmp;
-
-- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset,
-- buf->document_charset);
-- return registerHref(buf, url_quote(tmp->ptr), NULL, NO_REFERER, NULL,
-+ tmp = Strnew_charp_n(p1, p2 - p1);
-+ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf),
-+ buf->document_charset),
-+ NULL, NO_REFERER, NULL,
- '\0', line, pos);
- }
-
-@@ -756,7 +758,7 @@ link_list_panel(Buffer *buf)
- p = parsedURL2Str(&pu)->ptr;
- u = html_quote(p);
- if (DecodeURL)
-- p = html_quote(url_unquote_conv(p, buf->document_charset));
-+ p = html_quote(url_decode2(p, buf));
- else
- p = u;
- }
-@@ -787,7 +789,7 @@ link_list_panel(Buffer *buf)
- p = parsedURL2Str(&pu)->ptr;
- u = html_quote(p);
- if (DecodeURL)
-- p = html_quote(url_unquote_conv(p, buf->document_charset));
-+ p = html_quote(url_decode2(p, buf));
- else
- p = u;
- t = getAnchorText(buf, al, a);
-@@ -809,16 +811,13 @@ link_list_panel(Buffer *buf)
- p = parsedURL2Str(&pu)->ptr;
- u = html_quote(p);
- if (DecodeURL)
-- p = html_quote(url_unquote_conv(p, buf->document_charset));
-+ p = html_quote(url_decode2(p, buf));
- else
- p = u;
- if (a->title && *a->title)
- t = html_quote(a->title);
-- else if (DecodeURL)
-- t = html_quote(url_unquote_conv
-- (a->url, buf->document_charset));
- else
-- t = html_quote(a->url);
-+ t = html_quote(url_decode2(a->url, buf));
- Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,
- "\n", NULL);
- a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos);
-@@ -842,19 +841,13 @@ link_list_panel(Buffer *buf)
- p = parsedURL2Str(&pu)->ptr;
- u = html_quote(p);
- if (DecodeURL)
-- p = html_quote(url_unquote_conv(p,
-- buf->
-- document_charset));
-+ p = html_quote(url_decode2(p, buf));
- else
- p = u;
- if (m->alt && *m->alt)
- t = html_quote(m->alt);
-- else if (DecodeURL)
-- t = html_quote(url_unquote_conv(m->url,
-- buf->
-- document_charset));
- else
-- t = html_quote(m->url);
-+ t = html_quote(url_decode2(m->url, buf));
- Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t,
- "</a><br>", p, "\n", NULL);
- }
-diff --git a/config.h.in b/config.h.in
-index 2f41eed..59997b4 100644
---- a/config.h.in
-+++ b/config.h.in
-@@ -25,6 +25,7 @@
-
- #define PASSWD_FILE RC_DIR "/passwd"
- #define PRE_FORM_FILE RC_DIR "/pre_form"
-+#define SITECONF_FILE RC_DIR "/siteconf"
- #define USER_MAILCAP RC_DIR "/mailcap"
- #define SYS_MAILCAP CONF_DIR "/mailcap"
- #define USER_MIMETYPES "~/.mime.types"
-diff --git a/display.c b/display.c
-index e00eb0c..2fe1183 100644
---- a/display.c
-+++ b/display.c
-@@ -257,7 +257,7 @@ make_lastline_link(Buffer *buf, char *title, char *url)
- parseURL2(url, &pu, baseURL(buf));
- u = parsedURL2Str(&pu);
- if (DecodeURL)
-- u = Strnew_charp(url_unquote_conv(u->ptr, buf->document_charset));
-+ u = Strnew_charp(url_decode2(u->ptr, buf));
- #ifdef USE_M17N
- u = checkType(u, &pr, NULL);
- #endif
-diff --git a/doc-jp/README.siteconf b/doc-jp/README.siteconf
-new file mode 100644
-index 0000000..58b51c7
---- /dev/null
-+++ b/doc-jp/README.siteconf
-@@ -0,0 +1,60 @@
-+siteconf: ̥ޥ
-+
-+siteconf ϡ URL Υѥȡɳդ줿꤫ޤ
-+siteconf Ȥȡʸɤꤷ "decode_url"
-+νϤꡢ Google Υ쥯򱪲󤷤ǽ
-+ץ饤Х夵ꤹ뤳ȤǤޤ
-+
-+ǥեȤǤ siteconf ~/.w3m/siteconf ɤ߹ޤޤ
-+
-+===== ʸ =====
-+
-+url <url>|/<re-url>/|m@<re-url>@i [exact]
-+substitute_url "<destination-url>"
-+url_charset <charset>
-+no_referer_from on|off
-+no_referer_to on|off
-+
-+˽񤫤줿Τͥ褵ޤ
-+
-+===== =====
-+
-+url "http://twitter.com/#!/"
-+substitute_url "http://mobile.twitter.com/"
-+
-+twitter.com Х륵Ȥžޤ
-+
-+url "http://your.bookmark.net/"
-+no_referer_from on
-+
-+your.bookmark.net ĥä󥯤éݤˡ HTTP referer
-+ʤ褦ˤޤ
-+
-+url "http://www.google.com/url?" exact
-+substitute_url "file:///cgi-bin/your-redirector.cgi?"
-+
-+Google Υ쥯 local CGI žޤ
-+
-+url /^http:\/\/[a-z]*\.wikipedia\.org\//
-+url_charset utf-8
-+
-+Ʊ "decode_url" ץ򥪥ˤȡ Wikipedia ؤ
-+󥯤 UTF-8 Ȥƥǥɤɽޤ
-+
-+===== ɽˤĤ =====
-+
-+ɽϤƱ̣ɽޤ
-+
-+/http:\/\/www\.example\.com\//
-+m/http:\/\/www\.example\.com\//
-+m@http://www\.example\.com/@
-+m!http://www\.example\.com/!
-+
-+Ǹ 'i' Ҥդȡʸʸ̤˾ȹԤޤ
-+㤨С m@^http://www\.example\.com/abc/@i ϰʲΤȤפޤ
-+
-+http://www.example.com/abc/
-+http://www.example.com/Abc/
-+http://www.example.com/ABC/
-+
-+ۥ̾ʬϾ˾ʸѴƤӤޤ
-diff --git a/doc/README.siteconf b/doc/README.siteconf
-new file mode 100644
-index 0000000..f173087
---- /dev/null
-+++ b/doc/README.siteconf
-@@ -0,0 +1,60 @@
-+The siteconf: Site-specific preferences
-+
-+The siteconf consists of URL patterns and preferences associated to them.
-+You can improve "decode_url" feature by giving charsets of URLs site by site,
-+or bypass Google's redirector for performance and your privacy.
-+
-+The siteconf is read from ~/.w3m/siteconf by default.
-+
-+===== The syntax =====
-+
-+url <url>|/<re-url>/|m@<re-url>@i [exact]
-+substitute_url "<destination-url>"
-+url_charset <charset>
-+no_referer_from on|off
-+no_referer_to on|off
-+
-+The last match wins.
-+
-+===== Examples =====
-+
-+url "http://twitter.com/#!/"
-+substitute_url "http://mobile.twitter.com/"
-+
-+This forwards the twitter.com to its mobile site.
-+
-+url "http://your.bookmark.net/"
-+no_referer_from on
-+
-+This prevents HTTP referers from being sent when you follow links
-+at the your.bookmark.net.
-+
-+url "http://www.google.com/url?" exact
-+substitute_url "file:///cgi-bin/your-redirector.cgi?"
-+
-+This forwards the Google's redirector to your local CGI.
-+
-+url /^http:\/\/[a-z]*\.wikipedia\.org\//
-+url_charset utf-8
-+
-+When combinated with "decode_url" option turned on, links to
-+Wikipedia will be human-readable.
-+
-+===== Regular expressions notes =====
-+
-+Following expressions are all equivalent:
-+
-+/http:\/\/www\.example\.com\//
-+m/http:\/\/www\.example\.com\//
-+m@http://www\.example\.com/@
-+m!http://www\.example\.com/!
-+
-+With a trailing 'i' modifier, you can specify a case-insensitive match.
-+For example, m@^http://www\.example\.com/abc/@i matches to:
-+
-+http://www.example.com/abc/
-+http://www.example.com/Abc/
-+http://www.example.com/ABC/
-+
-+Hostnames, however, are always converted to lowercases before compared.
-+
-diff --git a/file.c b/file.c
-index 567d41e..b342de0 100644
---- a/file.c
-+++ b/file.c
-@@ -47,11 +47,11 @@ static JMP_BUF AbortLoading;
- static struct table *tables[MAX_TABLE];
- static struct table_mode table_mode[MAX_TABLE];
-
--#ifdef USE_IMAGE
-+#if defined(USE_M17N) || defined(USE_IMAGE)
- static ParsedURL *cur_baseURL = NULL;
--#ifdef USE_M17N
--static char cur_document_charset;
- #endif
-+#ifdef USE_M17N
-+static wc_ces cur_document_charset = 0;
- #endif
-
- static Str cur_title;
-@@ -215,7 +215,6 @@ currentLn(Buffer *buf)
-
- static Buffer *
- loadSomething(URLFile *f,
-- char *path,
- Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf)
- {
- Buffer *buf;
-@@ -223,17 +222,23 @@ loadSomething(URLFile *f,
- if ((buf = loadproc(f, defaultbuf)) == NULL)
- return NULL;
-
-- buf->filename = path;
- if (buf->buffername == NULL || buf->buffername[0] == '\0') {
- buf->buffername = checkHeader(buf, "Subject:");
-- if (buf->buffername == NULL)
-- buf->buffername = conv_from_system(lastFileName(path));
-+ if (buf->buffername == NULL && buf->filename != NULL)
-+ buf->buffername = conv_from_system(lastFileName(buf->filename));
- }
- if (buf->currentURL.scheme == SCM_UNKNOWN)
- buf->currentURL.scheme = f->scheme;
-- buf->real_scheme = f->scheme;
- if (f->scheme == SCM_LOCAL && buf->sourcefile == NULL)
-- buf->sourcefile = path;
-+ buf->sourcefile = buf->filename;
-+ if (loadproc == loadHTMLBuffer
-+#ifdef USE_IMAGE
-+ || loadproc == loadImageBuffer
-+#endif
-+ )
-+ buf->type = "text/html";
-+ else
-+ buf->type = "text/plain";
- return buf;
- }
-
-@@ -484,28 +489,6 @@ convertLine0(URLFile *uf, Str line, int mode)
- return line;
- }
-
--/*
-- * loadFile: load file to buffer
-- */
--Buffer *
--loadFile(char *path)
--{
-- Buffer *buf;
-- URLFile uf;
-- init_stream(&uf, SCM_LOCAL, NULL);
-- examineFile(path, &uf);
-- if (uf.stream == NULL)
-- return NULL;
-- buf = newBuffer(INIT_BUFFER_WIDTH);
-- current_content_length = 0;
--#ifdef USE_M17N
-- content_charset = 0;
--#endif
-- buf = loadSomething(&uf, path, loadBuffer, buf);
-- UFclose(&uf);
-- return buf;
--}
--
- int
- matchattr(char *p, char *attr, int len, Str *value)
- {
-@@ -1697,13 +1680,15 @@ getLinkNumberStr(int correction)
- /*
- * loadGeneralFile: load file to buffer
- */
-+#define DO_EXTERNAL ((Buffer *(*)(URLFile *, Buffer *))doExternal)
- Buffer *
- loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
- int flag, FormList *volatile request)
- {
- URLFile f, *volatile of = NULL;
- ParsedURL pu;
-- Buffer *b = NULL, *(*volatile proc)() = loadBuffer;
-+ Buffer *b = NULL;
-+ Buffer *(*volatile proc)(URLFile *, Buffer *) = loadBuffer;
- char *volatile tpath;
- char *volatile t = "text/plain", *p, *volatile real_type = NULL;
- Buffer *volatile t_buf = NULL;
-@@ -1730,7 +1715,22 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
- add_auth_cookie_flag = 0;
-
- checkRedirection(NULL);
-+
- load_doc:
-+ {
-+ const char *sc_redirect;
-+ parseURL2(tpath, &pu, current);
-+ sc_redirect = query_SCONF_SUBSTITUTE_URL(&pu);
-+ if (sc_redirect && *sc_redirect && checkRedirection(&pu)) {
-+ tpath = (char *)sc_redirect;
-+ request = NULL;
-+ add_auth_cookie_flag = 0;
-+ current = New(ParsedURL);
-+ *current = pu;
-+ status = HTST_NORMAL;
-+ goto load_doc;
-+ }
-+ }
- TRAP_OFF;
- url_option.referer = referer;
- url_option.flag = flag;
-@@ -1863,7 +1863,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
- /* 302: Found */
- /* 303: See Other */
- /* 307: Temporary Redirect (HTTP/1.1) */
-- tpath = url_quote_conv(p, DocumentCharset);
-+ tpath = url_encode(p, NULL, 0);
- request = NULL;
- UFclose(&f);
- current = New(ParsedURL);
-@@ -2022,7 +2022,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
- if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL &&
- checkRedirection(&pu)) {
- /* document moved */
-- tpath = url_quote_conv(remove_space(p), DocumentCharset);
-+ tpath = url_encode(remove_space(p), NULL, 0);
- request = NULL;
- UFclose(&f);
- add_auth_cookie_flag = 0;
-@@ -2123,10 +2123,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
- if (real_type == NULL)
- real_type = t;
- proc = loadBuffer;
--#ifdef USE_IMAGE
-- cur_baseURL = New(ParsedURL);
-- copyParsedURL(cur_baseURL, &pu);
--#endif
-
- current_content_length = 0;
- if ((p = checkHeader(t_buf, "Content-Length:")) != NULL)
-@@ -2197,18 +2193,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
- #endif
- else if (w3m_backend) ;
- else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) {
-- if (!do_download && doExternal(f,
-- pu.real_file ? pu.real_file : pu.file,
-- t, &b, t_buf)) {
-- if (b && b != NO_BUFFER) {
-- b->real_scheme = f.scheme;
-- b->real_type = real_type;
-- if (b->currentURL.host == NULL && b->currentURL.file == NULL)
-- copyParsedURL(&b->currentURL, &pu);
-- }
-- UFclose(&f);
-- TRAP_OFF;
-- return b;
-+ if (!do_download && searchExtViewer(t) != NULL) {
-+ proc = DO_EXTERNAL;
- }
- else {
- TRAP_OFF;
-@@ -2232,36 +2218,30 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
- else if (w3m_dump & DUMP_FRAME)
- return NULL;
-
-+ if (t_buf == NULL)
-+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
-+ copyParsedURL(&t_buf->currentURL, &pu);
-+ t_buf->filename = pu.real_file ? pu.real_file :
-+ pu.file ? conv_to_system(pu.file) : NULL;
- if (flag & RG_FRAME) {
-- if (t_buf == NULL)
-- t_buf = newBuffer(INIT_BUFFER_WIDTH);
- t_buf->bufferprop |= BP_FRAME;
- }
- #ifdef USE_SSL
-- if (t_buf)
-- t_buf->ssl_certificate = f.ssl_certificate;
-+ t_buf->ssl_certificate = f.ssl_certificate;
- #endif
- frame_source = flag & RG_FRAME_SRC;
-- b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf);
-+ if (proc == DO_EXTERNAL) {
-+ b = doExternal(f, t, t_buf);
-+ } else {
-+ b = loadSomething(&f, proc, t_buf);
-+ }
- UFclose(&f);
- frame_source = 0;
-- if (b) {
-+ if (b && b != NO_BUFFER) {
- b->real_scheme = f.scheme;
- b->real_type = real_type;
-- if (b->currentURL.host == NULL && b->currentURL.file == NULL)
-- copyParsedURL(&b->currentURL, &pu);
-- if (is_html_type(t))
-- b->type = "text/html";
-- else if (w3m_backend) {
-- Str s = Strnew_charp(t);
-- b->type = s->ptr;
-- }
--#ifdef USE_IMAGE
-- else if (proc == loadImageBuffer)
-- b->type = "text/html";
--#endif
-- else
-- b->type = "text/plain";
-+ if (w3m_backend)
-+ b->type = allocStr(t, -1);
- if (pu.label) {
- if (proc == loadHTMLBuffer) {
- Anchor *a;
-@@ -2287,10 +2267,11 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
- if (header_string)
- header_string = NULL;
- #ifdef USE_NNTP
-- if (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS)
-+ if (b && b != NO_BUFFER && (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS))
- reAnchorNewsheader(b);
- #endif
-- preFormUpdateBuffer(b);
-+ if (b && b != NO_BUFFER)
-+ preFormUpdateBuffer(b);
- TRAP_OFF;
- return b;
- }
-@@ -3228,7 +3209,7 @@ process_img(struct parsed_tag *tag, int width)
-
- if (!parsedtag_get_value(tag, ATTR_SRC, &p))
- return tmp;
-- p = remove_space(p);
-+ p = url_encode(remove_space(p), cur_baseURL, cur_document_charset);
- q = NULL;
- parsedtag_get_value(tag, ATTR_ALT, &q);
- if (!pseudoInlines && (q == NULL || (*q == '\0' && ignore_null_img_alt)))
-@@ -3322,12 +3303,7 @@ process_img(struct parsed_tag *tag, int width)
- Image image;
- ParsedURL u;
-
--#ifdef USE_M17N
-- parseURL2(wc_conv(p, InnerCharset, cur_document_charset)->ptr, &u,
-- cur_baseURL);
--#else
- parseURL2(p, &u, cur_baseURL);
--#endif
- image.url = parsedURL2Str(&u)->ptr;
- if (!uncompressed_file_type(u.file, &image.ext))
- image.ext = filename_extension(u.file, TRUE);
-@@ -4084,6 +4060,7 @@ process_form_int(struct parsed_tag *tag, int fid)
- parsedtag_get_value(tag, ATTR_METHOD, &p);
- q = "!CURRENT_URL!";
- parsedtag_get_value(tag, ATTR_ACTION, &q);
-+ q = url_encode(remove_space(q), cur_baseURL, cur_document_charset);
- r = NULL;
- #ifdef USE_M17N
- if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r))
-@@ -5067,11 +5044,10 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
- }
- return 1;
- case HTML_BASE:
--#ifdef USE_IMAGE
-+#if defined(USE_M17N) || defined(USE_IMAGE)
- p = NULL;
- if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
-- if (!cur_baseURL)
-- cur_baseURL = New(ParsedURL);
-+ cur_baseURL = New(ParsedURL);
- parseURL(p, cur_baseURL, NULL);
- }
- #endif
-@@ -5329,6 +5305,13 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- #ifdef MENU_SELECT
- Anchor **a_select = NULL;
- #endif
-+#if defined(USE_M17N) || defined(USE_IMAGE)
-+ ParsedURL *base = baseURL(buf);
-+#endif
-+#ifdef USE_M17N
-+ wc_ces name_charset = url_to_charset(NULL, &buf->currentURL,
-+ buf->document_charset);
-+#endif
-
- if (out_size == 0) {
- out_size = LINELEN;
-@@ -5523,16 +5506,17 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- hseq = 0;
- id = NULL;
- if (parsedtag_get_value(tag, ATTR_NAME, &id)) {
-- id = url_quote_conv(id, buf->document_charset);
-+ id = url_quote_conv(id, name_charset);
- registerName(buf, id, currentLn(buf), pos);
- }
- if (parsedtag_get_value(tag, ATTR_HREF, &p))
-- p = url_quote_conv(remove_space(p),
-- buf->document_charset);
-+ p = url_encode(remove_space(p), base,
-+ buf->document_charset);
- if (parsedtag_get_value(tag, ATTR_TARGET, &q))
- q = url_quote_conv(q, buf->document_charset);
- if (parsedtag_get_value(tag, ATTR_REFERER, &r))
-- r = url_quote_conv(r, buf->document_charset);
-+ r = url_encode(r, base,
-+ buf->document_charset);
- parsedtag_get_value(tag, ATTR_TITLE, &s);
- parsedtag_get_value(tag, ATTR_ACCESSKEY, &t);
- parsedtag_get_value(tag, ATTR_HSEQ, &hseq);
-@@ -5618,7 +5602,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- ParsedURL u;
- Image *image;
-
-- parseURL2(a_img->url, &u, cur_baseURL);
-+ parseURL2(a_img->url, &u, base);
- a_img->image = image = New(Image);
- image->url = parsedURL2Str(&u)->ptr;
- if (!uncompressed_file_type(u.file, &image->ext))
-@@ -5639,7 +5623,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- image->map = q;
- image->ismap = ismap;
- image->touch = 0;
-- image->cache = getImage(image, cur_baseURL,
-+ image->cache = getImage(image, base,
- IMG_FLAG_SKIP);
- }
- else if (iseq < 0) {
-@@ -5761,8 +5745,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- break;
- if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
- MapArea *a;
-- p = url_quote_conv(remove_space(p),
-- buf->document_charset);
-+ p = url_encode(remove_space(p), base,
-+ buf->document_charset);
- t = NULL;
- parsedtag_get_value(tag, ATTR_TARGET, &t);
- q = "";
-@@ -5811,11 +5795,14 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- break;
- case HTML_BASE:
- if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
-- p = url_quote_conv(remove_space(p),
-- buf->document_charset);
-+ p = url_encode(remove_space(p), NULL,
-+ buf->document_charset);
- if (!buf->baseURL)
- buf->baseURL = New(ParsedURL);
- parseURL(p, buf->baseURL, NULL);
-+#if defined(USE_M17N) || defined(USE_IMAGE)
-+ base = buf->baseURL;
-+#endif
- }
- if (parsedtag_get_value(tag, ATTR_TARGET, &p))
- buf->baseTarget =
-@@ -5830,8 +5817,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- int refresh_interval = getMetaRefreshParam(q, &tmp);
- #ifdef USE_ALARM
- if (tmp) {
-- p = url_quote_conv(remove_space(tmp->ptr),
-- buf->document_charset);
-+ p = url_encode(remove_space(tmp->ptr), base,
-+ buf->document_charset);
- buf->event = setAlarmEvent(buf->event,
- refresh_interval,
- AL_IMPLICIT_ONCE,
-@@ -5844,8 +5831,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- FUNCNAME_reload, NULL);
- #else
- if (tmp && refresh_interval == 0) {
-- p = url_quote_conv(remove_space(tmp->ptr),
-- buf->document_charset);
-+ p = url_encode(remove_space(tmp->ptr), base,
-+ buf->document_charset);
- pushEvent(FUNCNAME_gorURL, p);
- }
- #endif
-@@ -5929,7 +5916,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
- #ifdef ID_EXT
- id = NULL;
- if (parsedtag_get_value(tag, ATTR_ID, &id)) {
-- id = url_quote_conv(id, buf->document_charset);
-+ id = url_quote_conv(id, name_charset);
- registerName(buf, id, currentLn(buf), pos);
- }
- if (renderFrameSet &&
-@@ -5982,7 +5969,8 @@ addLink(Buffer *buf, struct parsed_tag *tag)
-
- parsedtag_get_value(tag, ATTR_HREF, &href);
- if (href)
-- href = url_quote_conv(remove_space(href), buf->document_charset);
-+ href = url_encode(remove_space(href), baseURL(buf),
-+ buf->document_charset);
- parsedtag_get_value(tag, ATTR_TITLE, &title);
- parsedtag_get_value(tag, ATTR_TYPE, &ctype);
- parsedtag_get_value(tag, ATTR_REL, &rel);
-@@ -6963,8 +6951,6 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
- image_flag = IMG_FLAG_AUTO;
- else
- image_flag = IMG_FLAG_SKIP;
-- if (newBuf->currentURL.file)
-- cur_baseURL = baseURL(newBuf);
- #endif
-
- if (w3m_halfload) {
-@@ -6987,6 +6973,9 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
- htmlenv1.f = stdout;
- else
- htmlenv1.buf = newTextLineList();
-+#if defined(USE_M17N) || defined(USE_IMAGE)
-+ cur_baseURL = baseURL(newBuf);
-+#endif
-
- if (SETJMP(AbortLoading) != 0) {
- HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1);
-@@ -7048,7 +7037,7 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
- }
- #endif
- lineBuf2 = convertLine(f, lineBuf2, HTML_MODE, &charset, doc_charset);
--#if defined(USE_M17N) && defined(USE_IMAGE)
-+#ifdef USE_M17N
- cur_document_charset = charset;
- #endif
- HTMLlineproc0(lineBuf2->ptr, &htmlenv1, internal);
-@@ -7060,6 +7049,12 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
- obuf.status = R_ST_NORMAL;
- completeHTMLstream(&htmlenv1, &obuf);
- flushline(&htmlenv1, &obuf, 0, 2, htmlenv1.limit);
-+#if defined(USE_M17N) || defined(USE_IMAGE)
-+ cur_baseURL = NULL;
-+#endif
-+#ifdef USE_M17N
-+ cur_document_charset = 0;
-+#endif
- if (htmlenv1.title)
- newBuf->buffername = htmlenv1.title;
- if (w3m_halfdump) {
-@@ -7207,7 +7202,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset)
- q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr,
- "/", file->ptr, NULL)->ptr;
- Strcat_m_charp(tmp, "<a href=\"",
-- html_quote(url_quote_conv(q, *charset)),
-+ html_quote(url_encode(q, NULL, *charset)),
- "\">", p, html_quote(name->ptr + 1), "</a>\n", NULL);
- }
-
-@@ -7331,6 +7326,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
- URLFile f;
- MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
- struct stat st;
-+ const ParsedURL *pu = newBuf ? &newBuf->currentURL : NULL;
-
- loadImage(newBuf, IMG_FLAG_STOP);
- image.url = uf->url;
-@@ -7338,8 +7334,8 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
- image.width = -1;
- image.height = -1;
- image.cache = NULL;
-- cache = getImage(&image, cur_baseURL, IMG_FLAG_AUTO);
-- if (!cur_baseURL->is_nocache && cache->loaded & IMG_FLAG_LOADED &&
-+ cache = getImage(&image, (ParsedURL *)pu, IMG_FLAG_AUTO);
-+ if (!(pu && pu->is_nocache) && cache->loaded & IMG_FLAG_LOADED &&
- !stat(cache->file, &st))
- goto image_buffer;
-
-@@ -7580,8 +7576,11 @@ openGeneralPagerBuffer(InputStream stream)
- #ifdef USE_M17N
- content_charset = 0;
- #endif
-+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
-+ copyParsedURL(&t_buf->currentURL, NULL);
-+ t_buf->currentURL.scheme = SCM_LOCAL;
-+ t_buf->currentURL.file = "-";
- if (SearchHeader) {
-- t_buf = newBuffer(INIT_BUFFER_WIDTH);
- readHeader(&uf, t_buf, TRUE, NULL);
- t = checkContentType(t_buf);
- if (t == NULL)
-@@ -7609,14 +7608,13 @@ openGeneralPagerBuffer(InputStream stream)
- #ifdef USE_IMAGE
- else if (activeImage && displayImage && !useExtImageViewer &&
- !(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6)) {
-- cur_baseURL = New(ParsedURL);
-- parseURL("-", cur_baseURL, NULL);
- buf = loadImageBuffer(&uf, t_buf);
- buf->type = "text/html";
- }
- #endif
- else {
-- if (doExternal(uf, "-", t, &buf, t_buf)) {
-+ if (searchExtViewer(t)) {
-+ buf = doExternal(uf, t, t_buf);
- UFclose(&uf);
- if (buf == NULL || buf == NO_BUFFER)
- return buf;
-@@ -7629,8 +7627,6 @@ openGeneralPagerBuffer(InputStream stream)
- }
- }
- buf->real_type = t;
-- buf->currentURL.scheme = SCM_LOCAL;
-- buf->currentURL.file = "-";
- return buf;
- }
-
-@@ -7823,9 +7819,8 @@ save2tmp(URLFile uf, char *tmpf)
- return 0;
- }
-
--int
--doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
-- Buffer *defaultbuf)
-+Buffer *
-+doExternal(URLFile uf, char *type, Buffer *defaultbuf)
- {
- Str tmpf, command;
- struct mailcap *mcap;
-@@ -7834,7 +7829,7 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
- char *header, *src = NULL, *ext = uf.ext;
-
- if (!(mcap = searchExtViewer(type)))
-- return 0;
-+ return NULL;
-
- if (mcap->nametemplate) {
- tmpf = unquote_mailcap(mcap->nametemplate, NULL, "", NULL, NULL);
-@@ -7867,15 +7862,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
- UFclose(&uf);
- myExec(command->ptr);
- }
-- *bufp = NO_BUFFER;
-- return 1;
-+ return NO_BUFFER;
- }
- else
- #endif
- {
- if (save2tmp(uf, tmpf->ptr) < 0) {
-- *bufp = NULL;
-- return 1;
-+ return NULL;
- }
- }
- if (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) {
-@@ -7918,14 +7911,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
- buf = NO_BUFFER;
- }
- if (buf && buf != NO_BUFFER) {
-- buf->filename = path;
-- if (buf->buffername == NULL || buf->buffername[0] == '\0')
-- buf->buffername = conv_from_system(lastFileName(path));
-+ if ((buf->buffername == NULL || buf->buffername[0] == '\0') &&
-+ buf->filename)
-+ buf->buffername = conv_from_system(lastFileName(buf->filename));
- buf->edit = mcap->edit;
- buf->mailcap = mcap;
- }
-- *bufp = buf;
-- return 1;
-+ return buf;
- }
-
- static int
-diff --git a/fm.h b/fm.h
-index 8378939..0f56c31 100644
---- a/fm.h
-+++ b/fm.h
-@@ -264,6 +264,18 @@ extern int REV_LB[];
- #define IMG_FLAG_ERROR 2
- #define IMG_FLAG_DONT_REMOVE 4
-
-+#define IS_EMPTY_PARSED_URL(pu) ((pu)->scheme == SCM_UNKNOWN && !(pu)->file)
-+#define SCONF_RESERVED 0
-+#define SCONF_SUBSTITUTE_URL 1
-+#define SCONF_URL_CHARSET 2
-+#define SCONF_NO_REFERER_FROM 3
-+#define SCONF_NO_REFERER_TO 4
-+#define SCONF_N_FIELD 5
-+#define query_SCONF_SUBSTITUTE_URL(pu) ((const char *)querySiteconf(pu, SCONF_SUBSTITUTE_URL))
-+#define query_SCONF_URL_CHARSET(pu) ((const wc_ces *)querySiteconf(pu, SCONF_URL_CHARSET))
-+#define query_SCONF_NO_REFERER_FROM(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_FROM))
-+#define query_SCONF_NO_REFERER_TO(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_TO))
-+
- /*
- * Macros.
- */
-@@ -972,6 +984,7 @@ global int BackgroundExtViewer init(TRUE);
- global int disable_secret_security_check init(FALSE);
- global char *passwd_file init(PASSWD_FILE);
- global char *pre_form_file init(PRE_FORM_FILE);
-+global char *siteconf_file init(SITECONF_FILE);
- global char *ftppasswd init(NULL);
- global int ftppass_hostnamegen init(TRUE);
- global int do_download init(FALSE);
-diff --git a/form.c b/form.c
-index b7556ca..fa17be4 100644
---- a/form.c
-+++ b/form.c
-@@ -787,7 +787,7 @@ struct pre_form {
- static struct pre_form *PreForm = NULL;
-
- static struct pre_form *
--add_pre_form(struct pre_form *prev, char *url, char *name, char *action)
-+add_pre_form(struct pre_form *prev, char *url, Regex *re_url, char *name, char *action)
- {
- ParsedURL pu;
- struct pre_form *new;
-@@ -796,21 +796,13 @@ add_pre_form(struct pre_form *prev, char *url, char *name, char *action)
- new = prev->next = New(struct pre_form);
- else
- new = PreForm = New(struct pre_form);
-- if (url && *url == '/') {
-- int l = strlen(url);
-- if (l > 1 && url[l - 1] == '/')
-- new->url = allocStr(url + 1, l - 2);
-- else
-- new->url = url + 1;
-- new->re_url = newRegex(new->url, FALSE, NULL, NULL);
-- if (!new->re_url)
-- new->url = NULL;
-- }
-- else if (url) {
-+ if (url && !re_url) {
- parseURL2(url, &pu, NULL);
- new->url = parsedURL2Str(&pu)->ptr;
-- new->re_url = NULL;
- }
-+ else
-+ new->url = url;
-+ new->re_url = re_url;
- new->name = (name && *name) ? name : NULL;
- new->action = (action && *action) ? action : NULL;
- new->item = NULL;
-@@ -834,7 +826,7 @@ add_pre_form_item(struct pre_form *pf, struct pre_form_item *prev, int type,
- new->name = name;
- new->value = value;
- if (checked && *checked && (!strcmp(checked, "0") ||
-- strcasecmp(checked, "off")
-+ !strcasecmp(checked, "off")
- || !strcasecmp(checked, "no")))
- new->checked = 0;
- else
-@@ -875,6 +867,7 @@ loadPreForm(void)
- return;
- while (1) {
- char *p, *s, *arg;
-+ Regex *re_arg;
-
- line = Strfgets(fp);
- if (line->length == 0)
-@@ -890,18 +883,20 @@ loadPreForm(void)
- if (*p == '#' || *p == '\0')
- continue; /* comment or empty line */
- s = getWord(&p);
-- arg = getWord(&p);
-
- if (!strcmp(s, "url")) {
-+ arg = getRegexWord((const char **)&p, &re_arg);
- if (!arg || !*arg)
- continue;
- p = getQWord(&p);
-- pf = add_pre_form(pf, arg, NULL, p);
-+ pf = add_pre_form(pf, arg, re_arg, NULL, p);
- pi = pf->item;
- continue;
- }
- if (!pf)
- continue;
-+
-+ arg = getWord(&p);
- if (!strcmp(s, "form")) {
- if (!arg || !*arg)
- continue;
-@@ -913,7 +908,7 @@ loadPreForm(void)
- }
- if (pf->item) {
- struct pre_form *prev = pf;
-- pf = add_pre_form(prev, "", s, p);
-+ pf = add_pre_form(prev, "", NULL, s, p);
- /* copy previous URL */
- pf->url = prev->url;
- pf->re_url = prev->re_url;
-diff --git a/frame.c b/frame.c
-index b431437..48c2d72 100644
---- a/frame.c
-+++ b/frame.c
-@@ -91,7 +91,8 @@ newFrame(struct parsed_tag *tag, Buffer *buf)
- body->baseURL = baseURL(buf);
- if (tag) {
- if (parsedtag_get_value(tag, ATTR_SRC, &p))
-- body->url = url_quote_conv(remove_space(p), buf->document_charset);
-+ body->url = url_encode(remove_space(p), body->baseURL,
-+ buf->document_charset);
- if (parsedtag_get_value(tag, ATTR_NAME, &p) && *p != '_')
- body->name = url_quote_conv(p, buf->document_charset);
- }
-@@ -639,7 +640,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
- case HTML_BASE:
- /* "BASE" is prohibit tag */
- if (parsedtag_get_value(tag, ATTR_HREF, &q)) {
-- q = url_quote_conv(remove_space(q), charset);
-+ q = url_encode(remove_space(q), NULL, charset);
- parseURL(q, &base, NULL);
- }
- if (parsedtag_get_value(tag, ATTR_TARGET, &q)) {
-@@ -768,8 +769,8 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
- if (!tag->value[j])
- break;
- tag->value[j] =
-- url_quote_conv(remove_space(tag->value[j]),
-- charset);
-+ url_encode(remove_space(tag->value[j]),
-+ &base, charset);
- tag->need_reconstruct = TRUE;
- parseURL2(tag->value[j], &url, &base);
- if (url.scheme == SCM_UNKNOWN ||
-diff --git a/func.c b/func.c
-index f389e00..8b5deac 100644
---- a/func.c
-+++ b/func.c
-@@ -8,6 +8,7 @@
- #include "fm.h"
- #include "func.h"
- #include "myctype.h"
-+#include "regex.h"
-
- #include "funcname.c"
- #include "functable.c"
-@@ -434,6 +435,93 @@ getQWord(char **str)
- return tmp->ptr;
- }
-
-+/* This extracts /regex/i or m@regex@i from the given string.
-+ * Then advances *str to the end of regex.
-+ * If the input does not seems to be a regex, this falls back to getQWord().
-+ *
-+ * Returns a word (no matter whether regex or not) in the give string.
-+ * If regex_ret is non-NULL, compiles the regex and stores there.
-+ *
-+ * XXX: Actually this is unrelated to func.c.
-+ */
-+char *
-+getRegexWord(const char **str, Regex **regex_ret)
-+{
-+ char *word = NULL;
-+ const char *p, *headp, *bodyp, *tailp;
-+ char delimiter;
-+ int esc;
-+ int igncase = 0;
-+
-+ p = *str;
-+ SKIP_BLANKS(p);
-+ headp = p;
-+
-+ /* Get the opening delimiter */
-+ if (p[0] == 'm' && IS_PRINT(p[1]) && !IS_ALNUM(p[1]) && p[1] != '\\') {
-+ delimiter = p[1];
-+ p += 2;
-+ }
-+ else if (p[0] == '/') {
-+ delimiter = '/';
-+ p += 1;
-+ }
-+ else {
-+ goto not_regex;
-+ }
-+ bodyp = p;
-+
-+ /* Scan the end of the expression */
-+ for (esc = 0; *p; ++p) {
-+ if (esc) {
-+ esc = 0;
-+ } else {
-+ if (*p == delimiter)
-+ break;
-+ else if (*p == '\\')
-+ esc = 1;
-+ }
-+ }
-+ if (!*p && *headp == '/')
-+ goto not_regex;
-+ tailp = p;
-+
-+ /* Check the modifiers */
-+ if (*p == delimiter) {
-+ while (*++p && !IS_SPACE(*p)) {
-+ switch (*p) {
-+ case 'i':
-+ igncase = 1;
-+ break;
-+ }
-+ /* ignore unknown modifiers */
-+ }
-+ }
-+
-+ /* Save the expression */
-+ word = allocStr(headp, p - headp);
-+
-+ /* Compile */
-+ if (regex_ret) {
-+ if (*tailp == delimiter)
-+ word[tailp - headp] = 0;
-+ *regex_ret = newRegex(word + (bodyp - headp), igncase, NULL, NULL);
-+ if (*tailp == delimiter)
-+ word[tailp - headp] = delimiter;
-+ }
-+ goto last;
-+
-+not_regex:
-+ p = headp;
-+ word = getQWord((char **)&p);
-+ if (regex_ret)
-+ *regex_ret = NULL;
-+
-+last:
-+ *str = p;
-+ return word;
-+}
-+
- #ifdef USE_MOUSE
- static MouseAction default_mouse_action = {
- NULL,
-diff --git a/history.c b/history.c
-index 951ef83..e9be09b 100644
---- a/history.c
-+++ b/history.c
-@@ -17,7 +17,7 @@ historyBuffer(Hist *hist)
- for (item = hist->list->last; item; item = item->prev) {
- q = html_quote((char *)item->ptr);
- if (DecodeURL)
-- p = html_quote(url_unquote_conv((char *)item->ptr, 0));
-+ p = html_quote(url_decode2((char *)item->ptr, NULL));
- else
- p = q;
- Strcat_charp(src, "<li><a href=\"");
-diff --git a/indep.c b/indep.c
-index 65b04aa..89e86c1 100644
---- a/indep.c
-+++ b/indep.c
-@@ -357,6 +357,20 @@ strcasemstr(char *str, char *srch[], char **ret_ptr)
- return -1;
- }
-
-+int
-+strmatchlen(const char *s1, const char *s2, int maxlen)
-+{
-+ int i;
-+
-+ /* To allow the maxlen to be negatie (infinity),
-+ * compare by "!=" instead of "<=". */
-+ for (i = 0; i != maxlen; ++i) {
-+ if (!s1[i] || !s2[i] || s1[i] != s2[i])
-+ break;
-+ }
-+ return i;
-+}
-+
- char *
- remove_space(char *str)
- {
-diff --git a/indep.h b/indep.h
-index b3819a3..cf566fe 100644
---- a/indep.h
-+++ b/indep.h
-@@ -52,6 +52,7 @@ extern int strncasecmp(const char *s1, const char *s2, size_t n);
- extern char *strcasestr(const char *s1, const char *s2);
- #endif
- extern int strcasemstr(char *str, char *srch[], char **ret_ptr);
-+int strmatchlen(const char *s1, const char *s2, int maxlen);
- extern char *remove_space(char *str);
- extern int non_null(char *s);
- extern void cleanup_line(Str s, int mode);
-diff --git a/linein.c b/linein.c
-index b7e81b6..572b015 100644
---- a/linein.c
-+++ b/linein.c
-@@ -1026,7 +1026,7 @@ _prev(void)
- strCurrentBuf = strBuf;
- }
- if (DecodeURL && (cm_mode & CPL_URL) )
-- p = url_unquote_conv(p, 0);
-+ p = url_decode2(p, NULL);
- strBuf = Strnew_charp(p);
- CLen = CPos = setStrType(strBuf, strProp);
- offset = 0;
-@@ -1045,7 +1045,7 @@ _next(void)
- p = nextHist(hist);
- if (p) {
- if (DecodeURL && (cm_mode & CPL_URL) )
-- p = url_unquote_conv(p, 0);
-+ p = url_decode2(p, NULL);
- strBuf = Strnew_charp(p);
- }
- else {
-diff --git a/main.c b/main.c
-index b421943..a414391 100644
---- a/main.c
-+++ b/main.c
-@@ -894,12 +894,17 @@ main(int argc, char **argv, char **envp)
- if (i >= 0) {
- SearchHeader = search_header;
- DefaultType = default_type;
-+ char *url;
-+
-+ url = load_argv[i];
-+ if (getURLScheme(&url) == SCM_MISSING && !ArgvIsURL)
-+ url = file_to_url(load_argv[i]);
-+ else
-+ url = url_encode(conv_from_system(load_argv[i]), NULL, 0);
- if (w3m_dump == DUMP_HEAD) {
- request = New(FormList);
- request->method = FORM_METHOD_HEAD;
-- newbuf =
-- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
-- request);
-+ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
- }
- else {
- if (post_file && i == 0) {
-@@ -928,9 +933,7 @@ main(int argc, char **argv, char **envp)
- else {
- request = NULL;
- }
-- newbuf =
-- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
-- request);
-+ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
- }
- if (newbuf == NULL) {
- /* FIXME: gettextize? */
-@@ -945,7 +948,7 @@ main(int argc, char **argv, char **envp)
- break;
- case SCM_LOCAL:
- case SCM_LOCAL_CGI:
-- unshiftHist(LoadHist, conv_from_system(load_argv[i]));
-+ unshiftHist(LoadHist, url);
- default:
- pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr);
- break;
-@@ -1269,15 +1272,12 @@ do_dump(Buffer *buf)
- printf("\nReferences:\n\n");
- for (i = 0; i < buf->href->nanchor; i++) {
- ParsedURL pu;
-- static Str s = NULL;
-+ char *url;
- if (buf->href->anchors[i].slave)
- continue;
- parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf));
-- s = parsedURL2Str(&pu);
-- if (DecodeURL)
-- s = Strnew_charp(url_unquote_conv
-- (s->ptr, Currentbuf->document_charset));
-- printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, s->ptr);
-+ url = url_decode2(parsedURL2Str(&pu)->ptr, Currentbuf);
-+ printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, url);
- }
- }
- }
-@@ -2261,7 +2261,7 @@ DEFUN(movR1, MOVE_RIGHT1,
- static wc_uint32
- getChar(char *p)
- {
-- return wc_any_to_ucs(wtf_parse1(&p));
-+ return wc_any_to_ucs(wtf_parse1((wc_uchar **)&p));
- }
-
- static int
-@@ -2804,12 +2804,15 @@ loadLink(char *url, char *target, char *referer, FormList *request)
- union frameset_element *f_element = NULL;
- int flag = 0;
- ParsedURL *base, pu;
-+ const int *no_referer_ptr;
-
- message(Sprintf("loading %s", url)->ptr, 0, 0);
- refresh();
-
-+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL);
- base = baseURL(Currentbuf);
-- if (base == NULL ||
-+ if ((no_referer_ptr && *no_referer_ptr) ||
-+ base == NULL ||
- base->scheme == SCM_LOCAL || base->scheme == SCM_LOCAL_CGI)
- referer = NO_REFERER;
- if (referer == NULL)
-@@ -4055,6 +4058,7 @@ goURL0(char *prompt, int relative)
- char *url, *referer;
- ParsedURL p_url, *current;
- Buffer *cur_buf = Currentbuf;
-+ const int *no_referer_ptr;
-
- url = searchKeyData();
- if (url == NULL) {
-@@ -4064,11 +4068,8 @@ goURL0(char *prompt, int relative)
- current = baseURL(Currentbuf);
- if (current) {
- char *c_url = parsedURL2Str(current)->ptr;
-- if (DefaultURLString == DEFAULT_URL_CURRENT) {
-- url = c_url;
-- if (DecodeURL)
-- url = url_unquote_conv(url, 0);
-- }
-+ if (DefaultURLString == DEFAULT_URL_CURRENT)
-+ url = url_decode2(c_url, NULL);
- else
- pushHist(hist, c_url);
- }
-@@ -4077,11 +4078,8 @@ goURL0(char *prompt, int relative)
- char *a_url;
- parseURL2(a->url, &p_url, current);
- a_url = parsedURL2Str(&p_url)->ptr;
-- if (DefaultURLString == DEFAULT_URL_LINK) {
-- url = a_url;
-- if (DecodeURL)
-- url = url_unquote_conv(url, Currentbuf->document_charset);
-- }
-+ if (DefaultURLString == DEFAULT_URL_LINK)
-+ url = url_decode2(a_url, Currentbuf);
- else
- pushHist(hist, a_url);
- }
-@@ -4089,15 +4087,22 @@ goURL0(char *prompt, int relative)
- if (url != NULL)
- SKIP_BLANKS(url);
- }
--#ifdef USE_M17N
-- if (url != NULL) {
-- if ((relative || *url == '#') && Currentbuf->document_charset)
-- url = wc_conv_strict(url, InnerCharset,
-- Currentbuf->document_charset)->ptr;
-+ if (relative) {
-+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL);
-+ current = baseURL(Currentbuf);
-+ if ((no_referer_ptr && *no_referer_ptr) ||
-+ current == NULL ||
-+ current->scheme == SCM_LOCAL || current->scheme == SCM_LOCAL_CGI)
-+ referer = NO_REFERER;
- else
-- url = conv_to_system(url);
-+ referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
-+ url = url_encode(url, current, Currentbuf->document_charset);
-+ }
-+ else {
-+ current = NULL;
-+ referer = NULL;
-+ url = url_encode(url, NULL, 0);
- }
--#endif
- if (url == NULL || *url == '\0') {
- displayBuffer(Currentbuf, B_FORCE_REDRAW);
- return;
-@@ -4106,14 +4111,6 @@ goURL0(char *prompt, int relative)
- gotoLabel(url + 1);
- return;
- }
-- if (relative) {
-- current = baseURL(Currentbuf);
-- referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
-- }
-- else {
-- current = NULL;
-- referer = NULL;
-- }
- parseURL2(url, &p_url, current);
- pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);
- cmd_loadURL(url, current, referer, NULL);
-@@ -4510,8 +4507,7 @@ _peekURL(int only_img)
- s = parsedURL2Str(&pu);
- }
- if (DecodeURL)
-- s = Strnew_charp(url_unquote_conv
-- (s->ptr, Currentbuf->document_charset));
-+ s = Strnew_charp(url_decode2(s->ptr, Currentbuf));
- #ifdef USE_M17N
- s = checkType(s, &pp, NULL);
- p = NewAtom_N(Lineprop, s->length);
-@@ -4570,7 +4566,7 @@ DEFUN(curURL, PEEK, "Peek current URL")
- offset = 0;
- s = currentURL();
- if (DecodeURL)
-- s = Strnew_charp(url_unquote_conv(s->ptr, 0));
-+ s = Strnew_charp(url_decode2(s->ptr, NULL));
- #ifdef USE_M17N
- s = checkType(s, &pp, NULL);
- p = NewAtom_N(Lineprop, s->length);
-diff --git a/map.c b/map.c
-index 90aa35a..12701e7 100644
---- a/map.c
-+++ b/map.c
-@@ -279,7 +279,7 @@ follow_map_panel(Buffer *buf, char *name)
- p = parsedURL2Str(&pu)->ptr;
- q = html_quote(p);
- if (DecodeURL)
-- p = html_quote(url_unquote_conv(p, buf->document_charset));
-+ p = html_quote(url_decode2(p, buf));
- else
- p = q;
- Strcat_m_charp(mappage, "<tr valign=top><td><a href=\"", q, "\">",
-@@ -417,10 +417,7 @@ append_map_info(Buffer *buf, Str tmp, FormItemList *fi)
- continue;
- parseURL2(a->url, &pu, baseURL(buf));
- q = html_quote(parsedURL2Str(&pu)->ptr);
-- if (DecodeURL)
-- p = html_quote(url_unquote_conv(a->url, buf->document_charset));
-- else
-- p = html_quote(a->url);
-+ p = html_quote(url_decode2(a->url, buf));
- Strcat_m_charp(tmp, "<tr valign=top><td>&nbsp;&nbsp;<td><a href=\"",
- q, "\">",
- html_quote(*a->alt ? a->alt : mybasename(a->url)),
-@@ -457,10 +454,8 @@ append_link_info(Buffer *buf, Str html, LinkList * link)
- Strcat_charp(html, "[Rev]");
- if (!l->url)
- url = "(empty)";
-- else if (DecodeURL)
-- url = html_quote(url_unquote_conv(l->url, buf->document_charset));
- else
-- url = html_quote(l->url);
-+ url = html_quote(url_decode2(l->url, buf));
- Strcat_m_charp(html, "<td>", url, NULL);
- if (l->ctype)
- Strcat_m_charp(html, " (", html_quote(l->ctype), ")", NULL);
-@@ -498,8 +493,7 @@ append_frame_info(Buffer *buf, Str html, struct frameset *set, int level)
- Strcat_charp(html, p);
- }
- if (DecodeURL)
-- p = html_quote(url_unquote_conv(frame.body->url,
-- buf->document_charset));
-+ p = html_quote(url_decode2(frame.body->url, buf));
- else
- p = q;
- Strcat_m_charp(html, " ", p, "</a></pre_int><br>\n", NULL);
-@@ -550,9 +544,7 @@ page_info_panel(Buffer *buf)
- #ifdef USE_M17N
- Strcat_charp(tmp, "<form method=internal action=charset>");
- #endif
-- p = parsedURL2Str(&buf->currentURL)->ptr;
-- if (DecodeURL)
-- p = url_unquote_conv(p, 0);
-+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
- Strcat_m_charp(tmp, "<table cellpadding=0>",
- "<tr valign=top><td nowrap>Title<td>",
- html_quote(buf->buffername),
-@@ -589,7 +581,7 @@ page_info_panel(Buffer *buf)
- p = parsedURL2Str(&pu)->ptr;
- q = html_quote(p);
- if (DecodeURL)
-- p = html_quote(url_unquote_conv(p, buf->document_charset));
-+ p = html_quote(url_decode2(p, buf));
- else
- p = q;
- Strcat_m_charp(tmp,
-@@ -602,7 +594,7 @@ page_info_panel(Buffer *buf)
- p = parsedURL2Str(&pu)->ptr;
- q = html_quote(p);
- if (DecodeURL)
-- p = html_quote(url_unquote_conv(p, buf->document_charset));
-+ p = html_quote(url_decode2(p, buf));
- else
- p = q;
- Strcat_m_charp(tmp,
-@@ -613,10 +605,7 @@ page_info_panel(Buffer *buf)
- if (a != NULL) {
- FormItemList *fi = (FormItemList *)a->url;
- p = form2str(fi);
-- if (DecodeURL)
-- p = html_quote(url_unquote_conv(p, buf->document_charset));
-- else
-- p = html_quote(p);
-+ p = html_quote(url_decode2(p, buf));
- Strcat_m_charp(tmp,
- "<tr valign=top><td nowrap>Method/type of current form&nbsp;<td>",
- p, NULL);
-diff --git a/menu.c b/menu.c
-index 774b1bd..0f66583 100644
---- a/menu.c
-+++ b/menu.c
-@@ -1365,9 +1365,7 @@ initSelectMenu(void)
- break;
- default:
- Strcat_char(str, ' ');
-- p = parsedURL2Str(&buf->currentURL)->ptr;
-- if (DecodeURL)
-- p = url_unquote_conv(p, 0);
-+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
- Strcat_charp(str, p);
- break;
- }
-@@ -1513,9 +1511,7 @@ initSelTabMenu(void)
- case SCM_MISSING:
- break;
- default:
-- p = parsedURL2Str(&buf->currentURL)->ptr;
-- if (DecodeURL)
-- p = url_unquote_conv(p, 0);
-+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
- Strcat_charp(str, p);
- break;
- }
-@@ -1845,10 +1841,8 @@ link_menu(Buffer *buf)
- Strcat_charp(str, " ");
- if (!l->url)
- p = "";
-- else if (DecodeURL)
-- p = url_unquote_conv(l->url, buf->document_charset);
- else
-- p = l->url;
-+ p = url_decode2(l->url, buf);
- Strcat_charp(str, p);
- label[i] = str->ptr;
- if (len < str->length)
-diff --git a/po/ja.po b/po/ja.po
-index d67c695..947191c 100644
---- a/po/ja.po
-+++ b/po/ja.po
-@@ -407,6 +407,10 @@ msgid "File for setting form on loading"
- msgstr "文書読込時のフォーム設定用ファイル"
-
- #: rc.c:149
-+msgid "File for preferences for each site"
-+msgstr "サイト別設定のファイル"
-+
-+#: rc.c:149
- msgid "Password for anonymous FTP (your mail address)"
- msgstr "FTPのパスワード(普通は自分のmail addressを使う)"
-
-diff --git a/proto.h b/proto.h
-index f8a7345..7b1a7a6 100644
---- a/proto.h
-+++ b/proto.h
-@@ -162,6 +162,24 @@ extern Str searchURIMethods(ParsedURL *pu);
- extern void chkExternalURIBuffer(Buffer *buf);
- #endif
- extern ParsedURL *schemeToProxy(int scheme);
-+#ifdef USE_M17N
-+extern wc_ces url_to_charset(const char *url, const ParsedURL *base,
-+ wc_ces doc_charset);
-+extern char *url_encode(const char *url, const ParsedURL *base,
-+ wc_ces doc_charset);
-+#if 0
-+extern char *url_decode(const char *url, const ParsedURL *base,
-+ wc_ces doc_charset);
-+#endif
-+extern char *url_decode2(const char *url, const Buffer *buf);
-+#else /* !defined(USE_M17N) */
-+#define url_encode(url, base, cs) url_quote(url)
-+extern char *url_decode0(const char *url);
-+#if 0
-+#define url_decode(url, base, cs) url_decode0(url)
-+#endif
-+#define url_decode2(url, buf) url_decode0(url)
-+#endif /* !defined(USE_M17N) */
- extern void examineFile(char *path, URLFile *uf);
- extern char *acceptableEncoding();
- extern int dir_exist(char *path);
-@@ -180,7 +198,6 @@ extern void push_symbol(Str str, char symbol, int width, int n);
- #ifdef USE_UNICODE
- extern void update_utf8_symbol(void);
- #endif
--extern Buffer *loadFile(char *path);
- extern Buffer *loadGeneralFile(char *path, ParsedURL *current, char *referer,
- int flag, FormList *request);
- extern int is_boundary(unsigned char *, unsigned char *);
-@@ -249,8 +266,7 @@ extern Buffer *openPagerBuffer(InputStream stream, Buffer *buf);
- extern Buffer *openGeneralPagerBuffer(InputStream stream);
- extern Line *getNextPage(Buffer *buf, int plen);
- extern int save2tmp(URLFile uf, char *tmpf);
--extern int doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
-- Buffer *defaultbuf);
-+extern Buffer *doExternal(URLFile uf, char *type, Buffer *defaultbuf);
- extern int _doFileCopy(char *tmpf, char *defstr, int download);
- #define doFileCopy(tmpf, defstr) _doFileCopy(tmpf, defstr, FALSE);
- extern int doFileMove(char *tmpf, char *defstr);
-@@ -507,7 +523,7 @@ extern ParsedURL *baseURL(Buffer *buf);
- extern int openSocket(char *hostname, char *remoteport_name,
- unsigned short remoteport_num);
- extern void parseURL(char *url, ParsedURL *p_url, ParsedURL *current);
--extern void copyParsedURL(ParsedURL *p, ParsedURL *q);
-+extern void copyParsedURL(ParsedURL *p, const ParsedURL *q);
- extern void parseURL2(char *url, ParsedURL *pu, ParsedURL *current);
- extern Str parsedURL2Str(ParsedURL *pu);
- extern int getURLScheme(char **url);
-@@ -611,6 +627,7 @@ extern char *confFile(char *base);
- extern char *auxbinFile(char *base);
- extern char *libFile(char *base);
- extern char *helpFile(char *base);
-+extern const void *querySiteconf(const ParsedURL *query_pu, int field);
- extern Str localCookie(void);
- extern Str loadLocalDir(char *dirname);
- extern void set_environ(char *var, char *value);
-@@ -723,6 +740,8 @@ extern int getKey(char *s);
- extern char *getKeyData(int key);
- extern char *getWord(char **str);
- extern char *getQWord(char **str);
-+struct regex;
-+extern char *getRegexWord(const char **str, struct regex **regex_ret);
- #ifdef USE_MOUSE
- extern void initMouseAction(void);
- #endif
-diff --git a/rc.c b/rc.c
-index 8441a39..3bf6cea 100644
---- a/rc.c
-+++ b/rc.c
-@@ -9,7 +9,9 @@
- #include <errno.h>
- #include "parsetag.h"
- #include "local.h"
-+#include "regex.h"
- #include <stdlib.h>
-+#include <stddef.h>
-
- struct param_ptr {
- char *name;
-@@ -146,6 +148,7 @@ static int OptionEncode = FALSE;
- #define CMT_DISABLE_SECRET_SECURITY_CHECK N_("Disable secret file security check")
- #define CMT_PASSWDFILE N_("Password file")
- #define CMT_PRE_FORM_FILE N_("File for setting form on loading")
-+#define CMT_SITECONF_FILE N_("File for preferences for each site")
- #define CMT_FTPPASS N_("Password for anonymous FTP (your mail address)")
- #define CMT_FTPPASS_HOSTNAMEGEN N_("Generate domain part of password for FTP")
- #define CMT_USERAGENT N_("User-Agent identification string")
-@@ -619,6 +622,8 @@ struct param_ptr params9[] = {
- CMT_FTPPASS_HOSTNAMEGEN, NULL},
- {"pre_form_file", P_STRING, PI_TEXT, (void *)&pre_form_file,
- CMT_PRE_FORM_FILE, NULL},
-+ {"siteconf_file", P_STRING, PI_TEXT, (void *)&siteconf_file,
-+ CMT_SITECONF_FILE, NULL},
- {"user_agent", P_STRING, PI_TEXT, (void *)&UserAgent, CMT_USERAGENT, NULL},
- {"no_referer", P_INT, PI_ONOFF, (void *)&NoSendReferer, CMT_NOSENDREFERER,
- NULL},
-@@ -1173,6 +1178,8 @@ do_mkdir(const char *dir, long mode)
- #endif /* not __MINW32_VERSION */
- #endif /* not __EMX__ */
-
-+static void loadSiteconf(void);
-+
- void
- sync_with_option(void)
- {
-@@ -1199,6 +1206,7 @@ sync_with_option(void)
- #endif
- loadPasswd();
- loadPreForm();
-+ loadSiteconf();
-
- if (AcceptLang == NULL || *AcceptLang == '\0') {
- /* TRANSLATORS:
-@@ -1556,3 +1564,217 @@ helpFile(char *base)
- return expandPath(Strnew_m_charp(w3m_help_dir(), "/", base, NULL)->ptr);
- }
- #endif
-+
-+/* siteconf */
-+/*
-+ * url "<url>"|/<re-url>/|m@<re-url>@i [exact]
-+ * substitute_url "<destination-url>"
-+ * url_charset <charset>
-+ * no_referer_from on|off
-+ * no_referer_to on|off
-+ *
-+ * The last match wins.
-+ */
-+
-+struct siteconf_rec {
-+ struct siteconf_rec *next;
-+ char *url;
-+ Regex *re_url;
-+ int url_exact;
-+ unsigned char mask[(SCONF_N_FIELD + 7) >> 3];
-+
-+ char *substitute_url;
-+#ifdef USE_M17N
-+ wc_ces url_charset;
-+#endif
-+ int no_referer_from;
-+ int no_referer_to;
-+};
-+#define SCONF_TEST(ent, f) ((ent)->mask[(f)>>3] & (1U<<((f)&7)))
-+#define SCONF_SET(ent, f) ((ent)->mask[(f)>>3] |= (1U<<((f)&7)))
-+#define SCONF_CLEAR(ent, f) ((ent)->mask[(f)>>3] &= ~(1U<<((f)&7)))
-+
-+static struct siteconf_rec *siteconf_head = NULL;
-+static struct siteconf_rec *newSiteconfRec(void);
-+
-+static struct siteconf_rec *
-+newSiteconfRec(void)
-+{
-+ struct siteconf_rec *ent;
-+
-+ ent = New(struct siteconf_rec);
-+ ent->next = NULL;
-+ ent->url = NULL;
-+ ent->re_url = NULL;
-+ ent->url_exact = FALSE;
-+ memset(ent->mask, 0, sizeof(ent->mask));
-+
-+ ent->substitute_url = NULL;
-+#ifdef USE_M17N
-+ ent->url_charset = 0;
-+#endif
-+ return ent;
-+}
-+
-+static void
-+loadSiteconf(void)
-+{
-+ char *efname;
-+ FILE *fp;
-+ Str line;
-+ struct siteconf_rec *ent = NULL;
-+
-+ siteconf_head = NULL;
-+ if (!siteconf_file)
-+ return;
-+ if ((efname = expandPath(siteconf_file)) == NULL)
-+ return;
-+ fp = fopen(efname, "r");
-+ if (fp == NULL)
-+ return;
-+ while (line = Strfgets(fp), line->length > 0) {
-+ char *p, *s;
-+
-+ Strchop(line);
-+ p = line->ptr;
-+ SKIP_BLANKS(p);
-+ if (*p == '#' || *p == '\0')
-+ continue;
-+ s = getWord(&p);
-+
-+ /* The "url" begins a new record. */
-+ if (strcmp(s, "url") == 0) {
-+ char *url, *opt;
-+ struct siteconf_rec *newent;
-+
-+ /* First, register the current record. */
-+ if (ent) {
-+ ent->next = siteconf_head;
-+ siteconf_head = ent;
-+ ent = NULL;
-+ }
-+
-+ /* Second, create a new record. */
-+ newent = newSiteconfRec();
-+ url = getRegexWord((const char **)&p, &newent->re_url);
-+ opt = getWord(&p);
-+ SKIP_BLANKS(p);
-+ if (!newent->re_url) {
-+ ParsedURL pu;
-+ if (!url || !*url)
-+ continue;
-+ parseURL2(url, &pu, NULL);
-+ newent->url = parsedURL2Str(&pu)->ptr;
-+ }
-+ /* If we have an extra or unknown option, ignore this record
-+ * for future extensions. */
-+ if (strcmp(opt, "exact") == 0) {
-+ newent->url_exact = TRUE;
-+ }
-+ else if (*opt != 0)
-+ continue;
-+ if (*p)
-+ continue;
-+ ent = newent;
-+ continue;
-+ }
-+
-+ /* If the current record is broken, skip to the next "url". */
-+ if (!ent)
-+ continue;
-+
-+ /* Fill the new record. */
-+ if (strcmp(s, "substitute_url") == 0) {
-+ ent->substitute_url = getQWord(&p);
-+ SCONF_SET(ent, SCONF_SUBSTITUTE_URL);
-+ }
-+#ifdef USE_M17N
-+ else if (strcmp(s, "url_charset") == 0) {
-+ char *charset = getWord(&p);
-+ ent->url_charset = (charset && *charset) ?
-+ wc_charset_to_ces(charset) : 0;
-+ SCONF_SET(ent, SCONF_URL_CHARSET);
-+ }
-+#endif /* USE_M17N */
-+ else if (strcmp(s, "no_referer_from") == 0) {
-+ ent->no_referer_from = str_to_bool(getWord(&p), 0);
-+ SCONF_SET(ent, SCONF_NO_REFERER_FROM);
-+ }
-+ else if (strcmp(s, "no_referer_to") == 0) {
-+ ent->no_referer_to = str_to_bool(getWord(&p), 0);
-+ SCONF_SET(ent, SCONF_NO_REFERER_TO);
-+ }
-+ }
-+ if (ent) {
-+ ent->next = siteconf_head;
-+ siteconf_head = ent;
-+ ent = NULL;
-+ }
-+ fclose(fp);
-+}
-+
-+const void *
-+querySiteconf(const ParsedURL *query_pu, int field)
-+{
-+ const struct siteconf_rec *ent;
-+ Str u;
-+ char *firstp, *lastp;
-+
-+ if (field < 0 || field >= SCONF_N_FIELD)
-+ return NULL;
-+ if (!query_pu || IS_EMPTY_PARSED_URL(query_pu))
-+ return NULL;
-+ u = parsedURL2Str((ParsedURL *)query_pu);
-+ if (u->length == 0)
-+ return NULL;
-+
-+ for (ent = siteconf_head; ent; ent = ent->next) {
-+ if (!SCONF_TEST(ent, field))
-+ continue;
-+ if (ent->re_url) {
-+ if (RegexMatch(ent->re_url, u->ptr, u->length, 1)) {
-+ MatchedPosition(ent->re_url, &firstp, &lastp);
-+ if (!ent->url_exact)
-+ goto url_found;
-+ if (firstp != u->ptr || lastp == firstp)
-+ continue;
-+ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' ||
-+ *lastp == '#' || *(lastp - 1) == '#')
-+ goto url_found;
-+ }
-+ } else {
-+ int matchlen = strmatchlen(ent->url, u->ptr, u->length);
-+ if (matchlen == 0 || ent->url[matchlen] != 0)
-+ continue;
-+ firstp = u->ptr;
-+ lastp = u->ptr + matchlen;
-+ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' ||
-+ *lastp == '#' || *(lastp - 1) == '#')
-+ goto url_found;
-+ if (!ent->url_exact && (*lastp == '/' || *(lastp - 1) == '/'))
-+ goto url_found;
-+ }
-+ }
-+ return NULL;
-+
-+url_found:
-+ switch (field) {
-+ case SCONF_SUBSTITUTE_URL:
-+ if (ent->substitute_url && *ent->substitute_url) {
-+ Str tmp = Strnew_charp_n(u->ptr, firstp - u->ptr);
-+ Strcat_charp(tmp, ent->substitute_url);
-+ Strcat_charp(tmp, lastp);
-+ return tmp->ptr;
-+ }
-+ return NULL;
-+#ifdef USE_M17N
-+ case SCONF_URL_CHARSET:
-+ return &ent->url_charset;
-+#endif
-+ case SCONF_NO_REFERER_FROM:
-+ return &ent->no_referer_from;
-+ case SCONF_NO_REFERER_TO:
-+ return &ent->no_referer_to;
-+ }
-+ return NULL;
-+}
-diff --git a/url.c b/url.c
-index ed6062e..cbb4aab 100644
---- a/url.c
-+++ b/url.c
-@@ -444,6 +444,8 @@ baseURL(Buffer *buf)
- /* <BASE> tag is defined in the document */
- return buf->baseURL;
- }
-+ else if (IS_EMPTY_PARSED_URL(&buf->currentURL))
-+ return NULL;
- else
- return &buf->currentURL;
- }
-@@ -638,16 +640,21 @@ openSocket(char *const hostname,
- #define COPYPATH_SPC_ALLOW 0
- #define COPYPATH_SPC_IGNORE 1
- #define COPYPATH_SPC_REPLACE 2
-+#define COPYPATH_SPC_MASK 3
-+#define COPYPATH_LOWERCASE 4
-
- static char *
- copyPath(char *orgpath, int length, int option)
- {
- Str tmp = Strnew();
-- while (*orgpath && length != 0) {
-- if (IS_SPACE(*orgpath)) {
-- switch (option) {
-+ char ch;
-+ while ((ch = *orgpath) != 0 && length != 0) {
-+ if (option & COPYPATH_LOWERCASE)
-+ ch = TOLOWER(ch);
-+ if (IS_SPACE(ch)) {
-+ switch (option & COPYPATH_SPC_MASK) {
- case COPYPATH_SPC_ALLOW:
-- Strcat_char(tmp, *orgpath);
-+ Strcat_char(tmp, ch);
- break;
- case COPYPATH_SPC_IGNORE:
- /* do nothing */
-@@ -658,7 +665,7 @@ copyPath(char *orgpath, int length, int option)
- }
- }
- else
-- Strcat_char(tmp, *orgpath);
-+ Strcat_char(tmp, ch);
- orgpath++;
- length--;
- }
-@@ -668,22 +675,14 @@ copyPath(char *orgpath, int length, int option)
- void
- parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
- {
-- char *p, *q;
-+ char *p, *q, *qq;
- Str tmp;
-
- url = url_quote(url); /* quote 0x01-0x20, 0x7F-0xFF */
-
- p = url;
-+ copyParsedURL(p_url, NULL);
- p_url->scheme = SCM_MISSING;
-- p_url->port = 0;
-- p_url->user = NULL;
-- p_url->pass = NULL;
-- p_url->host = NULL;
-- p_url->is_nocache = 0;
-- p_url->file = NULL;
-- p_url->real_file = NULL;
-- p_url->query = NULL;
-- p_url->label = NULL;
-
- /* RFC1808: Relative Uniform Resource Locators
- * 4. Resolving Relative URLs
-@@ -694,7 +693,7 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
- goto do_label;
- }
- #if defined( __EMX__ ) || defined( __CYGWIN__ )
-- if (!strncmp(url, "file://localhost/", 17)) {
-+ if (!strncasecmp(url, "file://localhost/", 17)) {
- p_url->scheme = SCM_LOCAL;
- p += 17 - 1;
- url += 17 - 1;
-@@ -802,19 +801,20 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
- /* scheme://user:pass@host or
- * scheme://host:port
- */
-- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
-+ qq = q;
- q = ++p;
- while (*p && strchr("@/?#", *p) == NULL)
- p++;
- if (*p == '@') {
- /* scheme://user:pass@... */
-+ p_url->user = copyPath(qq, q - 1 - qq, COPYPATH_SPC_IGNORE);
- p_url->pass = copyPath(q, p - q, COPYPATH_SPC_ALLOW);
- q = ++p;
-- p_url->user = p_url->host;
-- p_url->host = NULL;
- goto analyze_url;
- }
- /* scheme://host:port/ */
-+ p_url->host = copyPath(qq, q - 1 - qq,
-+ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE);
- tmp = Strnew_charp_n(q, p - q);
- p_url->port = atoi(tmp->ptr);
- /* *p is one of ['\0', '/', '?', '#'] */
-@@ -829,7 +829,8 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
- case '/':
- case '?':
- case '#':
-- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
-+ p_url->host = copyPath(q, p - q,
-+ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE);
- p_url->port = DefaultPort[p_url->scheme];
- break;
- }
-@@ -956,12 +957,16 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
- p_url->label = NULL;
- }
-
--#define initParsedURL(p) bzero(p,sizeof(ParsedURL))
- #define ALLOC_STR(s) ((s)==NULL?NULL:allocStr(s,-1))
-
- void
--copyParsedURL(ParsedURL *p, ParsedURL *q)
-+copyParsedURL(ParsedURL *p, const ParsedURL *q)
- {
-+ if (q == NULL) {
-+ memset(p, 0, sizeof(ParsedURL));
-+ p->scheme = SCM_UNKNOWN;
-+ return;
-+ }
- p->scheme = q->scheme;
- p->port = q->port;
- p->is_nocache = q->is_nocache;
-@@ -1283,6 +1288,8 @@ static char *
- otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
- {
- Str s = Strnew();
-+ const int *no_referer_ptr;
-+ int no_referer;
-
- Strcat_charp(s, "User-Agent: ");
- if (UserAgent == NULL || *UserAgent == '\0')
-@@ -1306,7 +1313,12 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
- Strcat_charp(s, "Pragma: no-cache\r\n");
- Strcat_charp(s, "Cache-control: no-cache\r\n");
- }
-- if (!NoSendReferer) {
-+ no_referer = NoSendReferer;
-+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(current);
-+ no_referer = NoSendReferer || (no_referer_ptr && *no_referer_ptr);
-+ no_referer_ptr = query_SCONF_NO_REFERER_TO(target);
-+ no_referer = no_referer || (no_referer_ptr && *no_referer_ptr);
-+ if (!no_referer) {
- #ifdef USE_SSL
- if (current && current->scheme == SCM_HTTPS && target->scheme != SCM_HTTPS) {
- /* Don't send Referer: if https:// -> http:// */
-@@ -1314,6 +1326,7 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
- else
- #endif
- if (referer == NULL && current && current->scheme != SCM_LOCAL &&
-+ current->scheme != SCM_LOCAL_CGI &&
- (current->scheme != SCM_FTP ||
- (current->user == NULL && current->pass == NULL))) {
- char *p = current->label;
-@@ -2234,3 +2247,66 @@ schemeToProxy(int scheme)
- }
- return pu;
- }
-+
-+#ifdef USE_M17N
-+wc_ces
-+url_to_charset(const char *url, const ParsedURL *base, wc_ces doc_charset)
-+{
-+ const ParsedURL *pu;
-+ ParsedURL pu_buf;
-+ const wc_ces *csptr;
-+
-+ if (url && *url && *url != '#') {
-+ parseURL2((char *)url, &pu_buf, (ParsedURL *)base);
-+ pu = &pu_buf;
-+ } else {
-+ pu = base;
-+ }
-+ if (pu && (pu->scheme == SCM_LOCAL || pu->scheme == SCM_LOCAL_CGI))
-+ return SystemCharset;
-+ csptr = query_SCONF_URL_CHARSET(pu);
-+ return (csptr && *csptr) ? *csptr :
-+ doc_charset ? doc_charset : DocumentCharset;
-+}
-+
-+char *
-+url_encode(const char *url, const ParsedURL *base, wc_ces doc_charset)
-+{
-+ return url_quote_conv((char *)url,
-+ url_to_charset(url, base, doc_charset));
-+}
-+
-+#if 0 /* unused */
-+char *
-+url_decode(const char *url, const ParsedURL *base, wc_ces doc_charset)
-+{
-+ if (!DecodeURL)
-+ return (char *)url;
-+ return url_unquote_conv((char *)url,
-+ url_to_charset(url, base, doc_charset));
-+}
-+#endif
-+
-+char *
-+url_decode2(const char *url, const Buffer *buf)
-+{
-+ wc_ces url_charset;
-+
-+ if (!DecodeURL)
-+ return (char *)url;
-+ url_charset = buf ?
-+ url_to_charset(url, baseURL((Buffer *)buf), buf->document_charset) :
-+ url_to_charset(url, NULL, 0);
-+ return url_unquote_conv((char *)url, url_charset);
-+}
-+
-+#else /* !defined(USE_M17N) */
-+
-+char *
-+url_decode0(const char *url)
-+{
-+ if (!DecodeURL)
-+ return (char *)url;
-+ return url_unquote_conv((char *)url, 0);
-+}
-+#endif /* !defined(USE_M17N) */
diff --git a/debian/patches/140_sort-dump-links.patch b/debian/patches/140_sort-dump-links.patch
deleted file mode 100644
index f290613..0000000
--- a/debian/patches/140_sort-dump-links.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-Subject: Sort anchors by sequence number in -dump
-Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657666
-From: "Conrad J.C. Hughes (for Debian package stuff)" <debbugs@xrad.org>
-
-Resolved merge conflicts by Tatsuya Kinoshita.
-
---- a/main.c
-+++ b/main.c
-@@ -1269,6 +1269,12 @@ dump_extra(Buffer *buf)
- #endif
- }
-
-+static int
-+cmp_anchor_hseq(const void *a, const void *b)
-+{
-+ return (*((const Anchor **) a))->hseq - (*((const Anchor **) b))->hseq;
-+}
-+
- static void
- do_dump(Buffer *buf)
- {
-@@ -1289,15 +1295,20 @@ do_dump(Buffer *buf)
- int i;
- saveBuffer(buf, stdout, FALSE);
- if (displayLinkNumber && buf->href) {
-+ int nanchor = buf->href->nanchor;
- printf("\nReferences:\n\n");
-- for (i = 0; i < buf->href->nanchor; i++) {
-- ParsedURL pu;
-+ Anchor **in_order = New_N(Anchor *, buf->href->nanchor);
-+ for (i = 0; i < nanchor; i++)
-+ in_order[i] = buf->href->anchors + i;
-+ qsort(in_order, nanchor, sizeof(Anchor *), cmp_anchor_hseq);
-+ for (i = 0; i < nanchor; i++) {
-+ ParsedURL pu;
- char *url;
-- if (buf->href->anchors[i].slave)
-+ if (in_order[i]->slave)
- continue;
-- parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf));
-+ parseURL2(in_order[i]->url, &pu, baseURL(buf));
- url = url_decode2(parsedURL2Str(&pu)->ptr, Currentbuf);
-- printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, url);
-+ printf("[%d] %s\n", in_order[i]->hseq + 1, url);
- }
- }
- }
diff --git a/debian/patches/150_contact-list.patch b/debian/patches/150_contact-list.patch
deleted file mode 100644
index 09c09c5..0000000
--- a/debian/patches/150_contact-list.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Subject: Update contact list in README
-From: Tatsuya Kinoshita <tats@debian.org>
-Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696209
-
-diff --git a/doc-jp/README b/doc-jp/README
-index 074766f..e5e59b1 100644
---- a/doc-jp/README
-+++ b/doc-jp/README
-@@ -122,7 +122,6 @@ w3m
- ±
- satodai@w3m.jp
-
--ոۤMLޤǤ󤻤
-- w3m-dev@sic.med.tohoku.ac.jp (ܸ)
-- w3m-dev-en@sic.med.tohoku.ac.jp (Ѹ)
-+ոۤ򤪴󤻤
- http://w3m.sourceforge.net/
-+ https://sourceforge.net/projects/w3m/
-diff --git a/doc/README b/doc/README
-index 324ea3e..60d6d19 100644
---- a/doc/README
-+++ b/doc/README
-@@ -115,7 +115,6 @@ Current Maintainer
- Tohoku University Hospital
- satodai@w3m.jp
-
--Feel free to send your opinion to the w3m mailing-lists.
-- w3m-dev@sic.med.tohoku.ac.jp (Japanese)
-- w3m-dev-en@sic.med.tohoku.ac.jp (English)
-+Feel free to send your opinion to:
- http://w3m.sourceforge.net/
-+ https://sourceforge.net/projects/w3m/
diff --git a/debian/patches/160_ignore-shy.patch b/debian/patches/160_ignore-shy.patch
deleted file mode 100644
index 2955881..0000000
--- a/debian/patches/160_ignore-shy.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Subject: Ignore &shy; to prevent drawing hyphens everywhere
-Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441934
-From: Hilko Bengen <bengen@debian.org>
-
-diff --git a/entity.c b/entity.c
-index fdd8f64..a7c9e99 100644
---- a/entity.c
-+++ b/entity.c
-@@ -44,6 +44,8 @@ conv_entity(unsigned int c)
- return " ";
- if (c == 0xa0)
- return NBSP;
-+ if (c == 0xad) /* SOFT HYPHEN */
-+ return "";
- if (c < 0x100) { /* Latin1 (ISO 8859-1) */
- if (UseAltEntity)
- return alt_latin1[c - 0xa0];
diff --git a/debian/patches/170_w3mman2html-utf8.patch b/debian/patches/170_w3mman2html-utf8.patch
deleted file mode 100644
index 94c5f09..0000000
--- a/debian/patches/170_w3mman2html-utf8.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Subject: More UTF-8 support and fixes for w3mman2html.cgi
-Author: Piotr P. Karwasz, Justin B Rye <justin.byam.rye@gmail.com>
-Origin: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/680202
-Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771004
-
-diff --git a/scripts/w3mman/w3mman2html.cgi.in b/scripts/w3mman/w3mman2html.cgi.in
-index f430307..2cd00f9 100644
---- a/scripts/w3mman/w3mman2html.cgi.in
-+++ b/scripts/w3mman/w3mman2html.cgi.in
-@@ -34,7 +34,6 @@ Content-Type: text/html
- EOF
- $keyword =~ s:([^-\w\200-\377.,])::g;
- open(F, "$MAN -k $keyword 2> /dev/null |");
-- @line = ();
- while(<F>) {
- chop;
- $_ = &html_quote($_);
-@@ -126,12 +125,14 @@ while(<F>) {
- s/\&/\&amp;/g;
- s/\</\&lt;/g;
- s/\>/\&gt;/g;
-+ # non ASCII UTF-8 codepoint
-+ my $utf8="[\300-\337][\200-\277]|[\340-\357][\200-\277]{2}|[\360-\367][\200-\277]{3}|[\370-\373][\200-\277]{4}|[\374\375][\200-\277]{5}";
-
-- s@([\200-\377].)(\010{1,2}\1)+@<b>$1</b>@g;
-+ s@($utf8)(\010\1)+@<b>$1</b>@g;
- s@(\&\w+;|.)(\010\1)+@<b>$1</b>@g;
-- s@__\010{1,2}((\<b\>)?[\200-\377].(\</b\>)?)@<u>$1</u>@g;
-+ s@_\010((\<b\>)?($utf8)(\</b\>)?)@<u>$1</u>@g;
- s@_\010((\<b\>)?(\&\w+\;|.)(\</b\>)?)@<u>$1</u>@g;
-- s@((\<b\>)?[\200-\377].(\</b\>)?)\010{1,2}__@<u>$1</u>@g;
-+ s@((\<b\>)?($utf8)(\</b\>)?)\010_@<u>$1</u>@g;
- s@((\<b\>)?(\&\w+\;|.)(\</b\>)?)\010_@<u>$1</u>@g;
- s@.\010(.)@$1@g;
-
-@@ -156,7 +157,7 @@ EOF
- }
-
- s@(http|ftp)://[\w.\-/~]+[\w/]@<a href="$&">$&</a>@g;
-- s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1<a href="mailto:$3">$2$3</a>@g;
-+ s@\b(mailto:|)(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@<a href="mailto:$2">$1$2</a>@g;
- s@(\W)(\~?/[\w.][\w.\-/~]*)@$1 . &file_ref($2)@ge;
- s@(include(<\/?[bu]\>|\s)*\&lt;)([\w.\-/]+)@$1 . &include_ref($3)@ge;
- if ($prev && m@^\s*(\<[bu]\>)*(\w[\w.\-]*)(\</[bu]\>)*(\([\dm]\w*\))@) {
-@@ -220,7 +221,7 @@ sub is_command {
- local($p);
-
- (! -d && -x) || return 0;
-- if (! defined(%PATH)) {
-+ if (! %PATH) {
- for $p (split(":", $ENV{'PATH'})) {
- $p =~ s@/+$@@;
- $PATH{$p} = 1;
diff --git a/debian/patches/180_execdict.patch b/debian/patches/180_execdict.patch
deleted file mode 100644
index 1d3b8d6..0000000
--- a/debian/patches/180_execdict.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Subject: Fix potentially segfault of execdict()
-From: Tatsuya Kinoshita <tats@debian.org>
-
---- a/main.c
-+++ b/main.c
-@@ -5604,7 +5604,7 @@ execdict(char *word)
- disp_message("Execution failed", TRUE);
- return;
- }
-- else {
-+ else if (buf != NO_BUFFER) {
- buf->filename = w;
- buf->buffername = Sprintf("%s %s", DICTBUFFERNAME, word)->ptr;
- if (buf->type == NULL)
diff --git a/debian/patches/190_Strchop.patch b/debian/patches/190_Strchop.patch
deleted file mode 100644
index e27861f..0000000
--- a/debian/patches/190_Strchop.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Subject: Check length for Strchop()
-From: Tatsuya Kinoshita <tats@debian.org>
-
---- a/Str.c
-+++ b/Str.c
-@@ -278,8 +278,8 @@ void
- Strchop(Str s)
- {
- STR_LENGTH_CHECK(s);
-- while ((s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r') &&
-- s->length > 0) {
-+ while (s->length > 0 &&
-+ (s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r')) {
- s->length--;
- }
- s->ptr[s->length] = '\0';
diff --git a/debian/patches/200_readme-img-typo.patch b/debian/patches/200_readme-img-typo.patch
deleted file mode 100644
index e322d5b..0000000
--- a/debian/patches/200_readme-img-typo.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=725892
-Bug: https://sourceforge.net/p/w3m/patches/67/
-From: Rafael Laboissiere <rafael@laboissiere.net>
-Date: Wed, 9 Oct 2013 13:43:31 -0300
-Subject: README.img: Fix typo
-
----
- doc/README.img | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/doc/README.img b/doc/README.img
-index 0c10114..f11362f 100644
---- a/doc/README.img
-+++ b/doc/README.img
-@@ -41,7 +41,7 @@ Key functions
- Specify the following keymaps in ~/.w3m/keymap.
- keymap X DISPLAY_IMAGE
- keymap C-c STOP_IMAGE
-- keyamp t SET_OPTION display_image=toggle
-+ keymap t SET_OPTION display_image=toggle
-
- Commandline options
-
---
-1.8.4.rc3
-
diff --git a/debian/patches/210_vim-like.patch b/debian/patches/210_vim-like.patch
deleted file mode 100644
index dcb598b..0000000
--- a/debian/patches/210_vim-like.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028
-Bug: https://sourceforge.net/p/w3m/patches/68/
-Subject: vim/-perator like handling
-From: Laurence Richert <laurencerichert@yahoo.de>
-
- - half page scrolling
- - jumping to elements numbered by getLinkNumberStr() from Karsten
- Schoelzel
-
-diff --git a/main.c b/main.c
-index b421943..4b40e8e 100644
---- a/main.c
-+++ b/main.c
-@@ -1566,6 +1566,18 @@ DEFUN(pgBack, PREV_PAGE, "Move to previous page")
- * (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL);
- }
-
-+/* Move half page forward */
-+DEFUN(hpgFore, NEXT_HALF_PAGE, "Scroll down half page")
-+{
-+ nscroll(searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
-+}
-+
-+/* Move half page backward */
-+DEFUN(hpgBack, PREV_HALF_PAGE, "Scroll up half page")
-+{
-+ nscroll(-searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
-+}
-+
- /* 1 line up */
- DEFUN(lup1, UP, "Scroll up one line")
- {
-@@ -3568,6 +3580,33 @@ DEFUN(lastA, LINK_END, "Go to the last link")
- displayBuffer(Currentbuf, B_NORMAL);
- }
-
-+/* go to the nth anchor */
-+DEFUN(nthA, LINK_N, "Go to the nth link")
-+{
-+ HmarkerList *hl = Currentbuf->hmarklist;
-+ BufferPoint *po;
-+ Anchor *an;
-+
-+ int n = searchKeyNum();
-+ if (n < 0 || n > hl->nmark) return;
-+
-+ if (Currentbuf->firstLine == NULL)
-+ return;
-+ if (!hl || hl->nmark == 0)
-+ return;
-+
-+ po = hl->marks + n-1;
-+ an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
-+ if (an == NULL)
-+ an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos);
-+ if (an == NULL) return;
-+
-+ gotoLine(Currentbuf, po->line);
-+ Currentbuf->pos = po->pos;
-+ arrangeCursor(Currentbuf);
-+ displayBuffer(Currentbuf, B_NORMAL);
-+}
-+
- /* go to the next anchor */
- DEFUN(nextA, NEXT_LINK, "Move to next link")
- {
-diff --git a/proto.h b/proto.h
-index f8a7345..9d14a58 100644
---- a/proto.h
-+++ b/proto.h
-@@ -11,6 +11,8 @@ extern void pushEvent(int cmd, void *data);
- extern MySignalHandler intTrap(SIGNAL_ARG);
- extern void pgFore(void);
- extern void pgBack(void);
-+extern void hpgFore(void);
-+extern void hpgBack(void);
- extern void lup1(void);
- extern void ldown1(void);
- extern void ctrCsrV(void);
-@@ -61,6 +63,7 @@ extern void submitForm(void);
- extern void followForm(void);
- extern void topA(void);
- extern void lastA(void);
-+extern void nthA(void);
- extern void onA(void);
-
- extern void nextA(void);
diff --git a/debian/patches/220_maxcol.patch b/debian/patches/220_maxcol.patch
deleted file mode 100644
index 432e09c..0000000
--- a/debian/patches/220_maxcol.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Subject: Bump MAXCOL to 256
-From: Tatsuya Kinoshita <tats@debian.org>
-Bug: https://sourceforge.net/p/w3m/feature-requests/24/
-
-diff --git a/table.h b/table.h
-index 83b661f..fdcdef3 100644
---- a/table.h
-+++ b/table.h
-@@ -17,7 +17,7 @@
- #define MAX_TABLE_N 20 /* maximum number of table in same level */
-
- #define MAXROW 50
--#define MAXCOL 50
-+#define MAXCOL 256
-
- #define MAX_WIDTH 80
-
diff --git a/debian/patches/230_cygwin-lang.patch b/debian/patches/230_cygwin-lang.patch
deleted file mode 100644
index 5a6671e..0000000
--- a/debian/patches/230_cygwin-lang.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Subject: Do not fail when LANG is not set on Cygwin
-From: Tatsuya Kinoshita <tats@debian.org>, Jarek Czekalski <jarekczek@poczta.onet.pl>
-Bug: https://sourceforge.net/p/w3m/patches/66/
-
- Check whether the value of LC_ALL, LC_CTYPE or LANG is not NULL in
- check_cygwin_console().
-
-diff --git a/terms.c b/terms.c
-index 7a3c987..399d117 100644
---- a/terms.c
-+++ b/terms.c
-@@ -222,6 +222,7 @@ static void
- check_cygwin_console(void)
- {
- char *term = getenv("TERM");
-+ char *ctype;
- HANDLE hWnd;
-
- if (term == NULL)
-@@ -236,7 +237,9 @@ check_cygwin_console(void)
- isLocalConsole = 1;
- }
- }
-- if (strncmp(getenv("LANG"), "ja", 2) == 0) {
-+ if (((ctype = getenv("LC_ALL")) ||
-+ (ctype = getenv("LC_CTYPE")) ||
-+ (ctype = getenv("LANG"))) && strncmp(ctype, "ja", 2) == 0) {
- isWinConsole = TERM_CYGWIN_RESERVE_IME;
- }
- #ifdef SUPPORT_WIN9X_CONSOLE_MBCS
diff --git a/debian/patches/240_win64gc.patch b/debian/patches/240_win64gc.patch
deleted file mode 100644
index 5005155..0000000
--- a/debian/patches/240_win64gc.patch
+++ /dev/null
@@ -1,1235 +0,0 @@
-Subject: Workaround of GC crash on Cygwin64
-From: AIDA Shinra <shinra@j10n.org>
-Origin: http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch
-
- Patch from [w3m-dev:04469] on 2013-10-14.
-
-diff --git a/config.h.in b/config.h.in
-index 59997b4..a4110ea 100644
---- a/config.h.in
-+++ b/config.h.in
-@@ -210,6 +210,10 @@ typedef RETSIGTYPE MySignalHandler;
- #define SUPPORT_WIN9X_CONSOLE_MBCS 1
- #endif
-
-+#if defined(__CYGWIN__) && defined(__x86_64__)
-+#define DONT_CALL_GC_AFTER_FORK
-+#endif
-+
- #if defined(__DJGPP__)
- #define DEFAULT_TERM "dosansi"
- #else
-diff --git a/file.c b/file.c
-index 89c9152..6f4d5b8 100644
---- a/file.c
-+++ b/file.c
-@@ -677,6 +677,7 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu)
- #endif
- init_stream(&f, SCM_LOCAL, newStrStream(src));
- loadHTMLstream(&f, newBuf, NULL, TRUE);
-+ UFclose(&f);
- for (l = newBuf->lastLine; l && l->real_linenumber;
- l = l->prev)
- l->real_linenumber = 0;
-@@ -7238,16 +7239,17 @@ loadHTMLString(Str page)
- MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
- Buffer *newBuf;
-
-+ init_stream(&f, SCM_LOCAL, newStrStream(page));
-+
- newBuf = newBuffer(INIT_BUFFER_WIDTH);
- if (SETJMP(AbortLoading) != 0) {
- TRAP_OFF;
- discardBuffer(newBuf);
-+ UFclose(&f);
- return NULL;
- }
- TRAP_ON;
-
-- init_stream(&f, SCM_LOCAL, newStrStream(page));
--
- #ifdef USE_M17N
- newBuf->document_charset = InnerCharset;
- #endif
-@@ -7257,6 +7259,7 @@ loadHTMLString(Str page)
- #endif
-
- TRAP_OFF;
-+ UFclose(&f);
- newBuf->topLine = newBuf->firstLine;
- newBuf->lastLine = newBuf->currentLine;
- newBuf->currentLine = newBuf->firstLine;
-@@ -7486,15 +7489,13 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
- !stat(cache->file, &st))
- goto image_buffer;
-
-- TRAP_ON;
- if (IStype(uf->stream) != IST_ENCODED)
- uf->stream = newEncodedStream(uf->stream, uf->encoding);
-+ TRAP_ON;
- if (save2tmp(*uf, cache->file) < 0) {
-- UFclose(uf);
- TRAP_OFF;
- return NULL;
- }
-- UFclose(uf);
- TRAP_OFF;
-
- cache->loaded = IMG_FLAG_LOADED;
-@@ -7514,6 +7515,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
-
- init_stream(&f, SCM_LOCAL, newStrStream(tmp));
- loadHTMLstream(&f, newBuf, src, TRUE);
-+ UFclose(&f);
- if (src)
- fclose(src);
-
-@@ -7909,6 +7911,8 @@ save2tmp(URLFile uf, char *tmpf)
- clen_t linelen = 0, trbyte = 0;
- MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
- static JMP_BUF env_bak;
-+ volatile int retval = 0;
-+ char *volatile buf = NULL;
-
- ff = fopen(tmpf, "wb");
- if (ff == NULL) {
-@@ -7945,25 +7949,25 @@ save2tmp(URLFile uf, char *tmpf)
- else
- #endif /* USE_NNTP */
- {
-- Str buf = Strnew_size(SAVE_BUF_SIZE);
-- while (UFread(&uf, buf, SAVE_BUF_SIZE)) {
-- if (Strfputs(buf, ff) != buf->length) {
-- bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
-- TRAP_OFF;
-- fclose(ff);
-- current_content_length = 0;
-- return -2;
-+ int count;
-+
-+ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
-+ while ((count = ISread_n(uf.stream, buf, SAVE_BUF_SIZE)) > 0) {
-+ if (fwrite(buf, 1, count, ff) != count) {
-+ retval = -2;
-+ goto _end;
- }
-- linelen += buf->length;
-+ linelen += count;
- showProgress(&linelen, &trbyte);
- }
- }
- _end:
- bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
- TRAP_OFF;
-+ xfree(buf);
- fclose(ff);
- current_content_length = 0;
-- return 0;
-+ return retval;
- }
-
- Buffer *
-@@ -8074,7 +8078,8 @@ _MoveFile(char *path1, char *path2)
- FILE *f2;
- int is_pipe;
- clen_t linelen = 0, trbyte = 0;
-- Str buf;
-+ char *buf = NULL;
-+ int count;
-
- f1 = openIS(path1);
- if (f1 == NULL)
-@@ -8092,12 +8097,13 @@ _MoveFile(char *path1, char *path2)
- return -1;
- }
- current_content_length = 0;
-- buf = Strnew_size(SAVE_BUF_SIZE);
-- while (ISread(f1, buf, SAVE_BUF_SIZE)) {
-- Strfputs(buf, f2);
-- linelen += buf->length;
-+ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
-+ while ((count = ISread_n(f1, buf, SAVE_BUF_SIZE)) > 0) {
-+ fwrite(buf, 1, count, f2);
-+ linelen += count;
- showProgress(&linelen, &trbyte);
- }
-+ xfree(buf);
- ISclose(f1);
- if (is_pipe)
- pclose(f2);
-@@ -8456,21 +8462,23 @@ uncompress_stream(URLFile *uf, char **src)
- }
- if (pid2 == 0) {
- /* child2 */
-- Str buf = Strnew_size(SAVE_BUF_SIZE);
-+ char *buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
-+ int count;
- FILE *f = NULL;
-
- setup_child(TRUE, 2, UFfileno(uf));
- if (tmpf)
- f = fopen(tmpf, "wb");
-- while (UFread(uf, buf, SAVE_BUF_SIZE)) {
-- if (Strfputs(buf, stdout) < 0)
-+ while ((count = ISread_n(uf->stream, buf, SAVE_BUF_SIZE)) > 0) {
-+ if (fwrite(buf, 1, count, stdout) != count)
-+ break;
-+ if (f && fwrite(buf, 1, count, f) != count)
- break;
-- if (f)
-- Strfputs(buf, f);
- }
- UFclose(uf);
- if (f)
- fclose(f);
-+ xfree(buf);
- exit(0);
- }
- /* child1 */
-diff --git a/fm.h b/fm.h
-index acdab46..2216b06 100644
---- a/fm.h
-+++ b/fm.h
-@@ -76,6 +76,7 @@ typedef int wc_ces; /* XXX: not used */
- #include "textlist.h"
- #include "funcname1.h"
- #include "terms.h"
-+#include "istream.h"
-
- #ifndef HAVE_BCOPY
- void bcopy(const void *, void *, int);
-@@ -288,8 +289,6 @@ extern int REV_LB[];
- #define inputFilenameHist(p,d,h) inputLineHist(p,d,IN_FILENAME,h)
- #define inputChar(p) inputLine(p,"",IN_CHAR)
-
--#define free(x) GC_free(x) /* let GC do it. */
--
- #ifdef __EMX__
- #define HAVE_STRCASECMP
- #define strcasecmp stricmp
-@@ -895,6 +894,9 @@ global char *index_file init(NULL);
-
- global char *CurrentDir;
- global int CurrentPid;
-+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
-+global char *MyProgramName init("w3m");
-+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
- /*
- * global Buffer *Currentbuf;
- * global Buffer *Firstbuf;
-diff --git a/html.h b/html.h
-index 4a2827b..b4b3df9 100644
---- a/html.h
-+++ b/html.h
-@@ -1,19 +1,17 @@
- /* $Id: html.h,v 1.31 2010/08/14 01:29:40 htrb Exp $ */
- #ifndef _HTML_H
- #define _HTML_H
-+#include "config.h"
- #ifdef USE_SSL
- #include <openssl/bio.h>
- #include <openssl/x509.h>
- #include <openssl/ssl.h>
- #endif /* USE_SSL */
-
--#include "istream.h"
--
- #define StrUFgets(f) StrISgets((f)->stream)
- #define StrmyUFgets(f) StrmyISgets((f)->stream)
- #define UFgetc(f) ISgetc((f)->stream)
- #define UFundogetc(f) ISundogetc((f)->stream)
--#define UFread(f,buf,len) ISread((f)->stream,buf,len)
- #define UFclose(f) (void)(ISclose((f)->stream) == 0 && ((f)->stream = NULL))
- #define UFfileno(f) ISfileno((f)->stream)
-
-@@ -62,11 +60,12 @@ typedef struct _ParsedURL {
- int is_nocache;
- } ParsedURL;
-
-+union input_stream;
- typedef struct {
- unsigned char scheme;
- char is_cgi;
- char encoding;
-- InputStream stream;
-+ union input_stream *stream;
- char *ext;
- int compression;
- int content_encoding;
-diff --git a/image.c b/image.c
-index 5f5991a..9d0e9b5 100644
---- a/image.c
-+++ b/image.c
-@@ -90,17 +90,18 @@ termImage()
- static int
- openImgdisplay()
- {
-+ char *cmd;
-+
-+ if (!strchr(Imgdisplay, '/'))
-+ cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr;
-+ else
-+ cmd = Imgdisplay;
- Imgdisplay_pid = open_pipe_rw(&Imgdisplay_rf, &Imgdisplay_wf);
- if (Imgdisplay_pid < 0)
- goto err0;
- if (Imgdisplay_pid == 0) {
- /* child */
-- char *cmd;
- setup_child(FALSE, 2, -1);
-- if (!strchr(Imgdisplay, '/'))
-- cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr;
-- else
-- cmd = Imgdisplay;
- myExec(cmd);
- /* XXX: ifdef __EMX__, use start /f ? */
- }
-@@ -333,6 +334,9 @@ loadImage(Buffer *buf, int flag)
- struct stat st;
- int i, draw = FALSE;
- /* int wait_st; */
-+#ifdef DONT_CALL_GC_AFTER_FORK
-+ char *loadargs[7];
-+#endif
-
- if (maxLoadImage > MAX_LOAD_IMAGE)
- maxLoadImage = MAX_LOAD_IMAGE;
-@@ -433,6 +437,24 @@ loadImage(Buffer *buf, int flag)
- image_cache[i] = cache;
-
- flush_tty();
-+#ifdef DONT_CALL_GC_AFTER_FORK
-+ loadargs[0] = MyProgramName;
-+ loadargs[1] = "-$$getimage";
-+ loadargs[2] = conv_to_system(cache->url);
-+ loadargs[3] = conv_to_system(parsedURL2Str(cache->current)->ptr);
-+ loadargs[4] = cache->file;
-+ loadargs[5] = cache->touch;
-+ loadargs[6] = NULL;
-+ if ((cache->pid = fork()) == 0) {
-+ setup_child(FALSE, 0, -1);
-+ execvp(MyProgramName, loadargs);
-+ exit(1);
-+ }
-+ else if (cache->pid < 0) {
-+ cache->pid = 0;
-+ return;
-+ }
-+#else /* !DONT_CALL_GC_AFTER_FORK */
- if ((cache->pid = fork()) == 0) {
- Buffer *b;
- /*
-@@ -458,6 +480,7 @@ loadImage(Buffer *buf, int flag)
- cache->pid = 0;
- return;
- }
-+#endif /* !DONT_CALL_GC_AFTER_FORK */
- }
- }
-
-diff --git a/indep.c b/indep.c
-index 89e86c1..5c5de06 100644
---- a/indep.c
-+++ b/indep.c
-@@ -721,6 +721,111 @@ shell_quote(char *str)
- return str;
- }
-
-+void *
-+xrealloc(void *ptr, size_t size)
-+{
-+ void *newptr = realloc(ptr, size);
-+ if (newptr == NULL) {
-+ fprintf(stderr, "Out of memory\n");
-+ exit(-1);
-+ }
-+ return newptr;
-+}
-+
-+/* Define this as a separate function in case the free() has
-+ * an incompatible prototype. */
-+void
-+xfree(void *ptr)
-+{
-+ free(ptr);
-+}
-+
-+void *
-+w3m_GC_realloc_atomic(void *ptr, size_t size)
-+{
-+ return ptr ? GC_REALLOC(ptr, size) : GC_MALLOC_ATOMIC(size);
-+}
-+
-+void
-+w3m_GC_free(void *ptr)
-+{
-+ GC_FREE(ptr);
-+}
-+
-+void
-+growbuf_init(struct growbuf *gb)
-+{
-+ gb->ptr = NULL;
-+ gb->length = 0;
-+ gb->area_size = 0;
-+ gb->realloc_proc = &w3m_GC_realloc_atomic;
-+ gb->free_proc = &w3m_GC_free;
-+}
-+
-+void
-+growbuf_init_without_GC(struct growbuf *gb)
-+{
-+ gb->ptr = NULL;
-+ gb->length = 0;
-+ gb->area_size = 0;
-+ gb->realloc_proc = &xrealloc;
-+ gb->free_proc = &xfree;
-+}
-+
-+void
-+growbuf_clear(struct growbuf *gb)
-+{
-+ (*gb->free_proc) (gb->ptr);
-+ gb->ptr = NULL;
-+ gb->length = 0;
-+ gb->area_size = 0;
-+}
-+
-+Str
-+growbuf_to_Str(struct growbuf *gb)
-+{
-+ Str s;
-+
-+ if (gb->free_proc == &w3m_GC_free) {
-+ growbuf_reserve(gb, gb->length + 1);
-+ gb->ptr[gb->length] = '\0';
-+ s = New(struct _Str);
-+ s->ptr = gb->ptr;
-+ s->length = gb->length;
-+ s->area_size = gb->area_size;
-+ } else {
-+ s = Strnew_charp_n(gb->ptr, gb->length);
-+ (*gb->free_proc) (gb->ptr);
-+ }
-+ gb->ptr = NULL;
-+ gb->length = 0;
-+ gb->area_size = 0;
-+ return s;
-+}
-+
-+void
-+growbuf_reserve(struct growbuf *gb, int leastarea)
-+{
-+ int newarea;
-+
-+ if (gb->area_size < leastarea) {
-+ newarea = gb->area_size * 3 / 2;
-+ if (newarea < leastarea)
-+ newarea = leastarea;
-+ newarea += 16;
-+ gb->ptr = (*gb->realloc_proc) (gb->ptr, newarea);
-+ gb->area_size = newarea;
-+ }
-+}
-+
-+void
-+growbuf_append(struct growbuf *gb, const char *src, int len)
-+{
-+ growbuf_reserve(gb, gb->length + len);
-+ memcpy(&gb->ptr[gb->length], src, len);
-+ gb->length += len;
-+}
-+
- static char *
- w3m_dir(const char *name, char *dft)
- {
-diff --git a/indep.h b/indep.h
-index cf566fe..84416ed 100644
---- a/indep.h
-+++ b/indep.h
-@@ -12,6 +12,14 @@
- #define FALSE 0
- #endif /* FALSE */
-
-+struct growbuf {
-+ char *ptr;
-+ int length;
-+ int area_size;
-+ void *(*realloc_proc) (void *, size_t);
-+ void (*free_proc) (void *);
-+};
-+
- #define RAW_MODE 0
- #define PAGER_MODE 1
- #define HTML_MODE 2
-@@ -65,6 +73,18 @@ extern Str Str_url_unquote(Str x, int is_form, int safe);
- extern Str Str_form_quote(Str x);
- #define Str_form_unquote(x) Str_url_unquote((x), TRUE, FALSE)
- extern char *shell_quote(char *str);
-+#define xmalloc(s) xrealloc(NULL, s)
-+extern void *xrealloc(void *ptr, size_t size);
-+extern void xfree(void *ptr);
-+extern void *w3m_GC_realloc_atomic(void *ptr, size_t size);
-+extern void w3m_GC_free(void *ptr);
-+extern void growbuf_init(struct growbuf *gb);
-+extern void growbuf_init_without_GC(struct growbuf *gb);
-+extern void growbuf_clear(struct growbuf *gb);
-+extern Str growbuf_to_Str(struct growbuf *gb);
-+extern void growbuf_reserve(struct growbuf *gb, int leastarea);
-+extern void growbuf_append(struct growbuf *gb, const char *src, int len);
-+#define GROWBUF_ADD_CHAR(gb,ch) ((((gb)->length>=(gb)->area_size)?growbuf_reserve(gb,(gb)->length+1):(void)0),(void)((gb)->ptr[(gb)->length++] = (ch)))
-
- extern char *w3m_auxbin_dir();
- extern char *w3m_lib_dir();
-@@ -77,5 +97,8 @@ extern char *w3m_help_dir();
- #define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
- #define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
- #define New_Reuse(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
-+#define NewWithoutGC(type) ((type*)xmalloc(sizeof(type)))
-+#define NewWithoutGC_N(type,n) ((type*)xmalloc((n)*sizeof(type)))
-+#define NewWithoutGC_Reuse(type,ptr,n) ((type*)xrealloc(ptr,(n)*sizeof(type)))
-
- #endif /* INDEP_H */
-diff --git a/istream.c b/istream.c
-index d8c8e45..3126142 100644
---- a/istream.c
-+++ b/istream.c
-@@ -35,12 +35,14 @@ static int ssl_read(struct ssl_handle *handle, char *buf, int len);
- static int ens_read(struct ens_handle *handle, char *buf, int len);
- static void ens_close(struct ens_handle *handle);
-
-+static void memchop(char *p, int *len);
-+
- static void
- do_update(BaseStream base)
- {
- int len;
- base->stream.cur = base->stream.next = 0;
-- len = base->read(base->handle, base->stream.buf, base->stream.size);
-+ len = (*base->read) (base->handle, base->stream.buf, base->stream.size);
- if (len <= 0)
- base->iseos = TRUE;
- else
-@@ -66,12 +68,12 @@ init_buffer(BaseStream base, char *buf, int bufsize)
- StreamBuffer sb = &base->stream;
- sb->size = bufsize;
- sb->cur = 0;
-+ sb->buf = NewWithoutGC_N(uchar, bufsize);
- if (buf) {
-- sb->buf = (uchar *) buf;
-+ memcpy(sb->buf, buf, bufsize);
- sb->next = bufsize;
- }
- else {
-- sb->buf = NewAtom_N(uchar, bufsize);
- sb->next = 0;
- }
- base->iseos = FALSE;
-@@ -95,10 +97,10 @@ newInputStream(int des)
- InputStream stream;
- if (des < 0)
- return NULL;
-- stream = New(union input_stream);
-+ stream = NewWithoutGC(union input_stream);
- init_base_stream(&stream->base, STREAM_BUF_SIZE);
- stream->base.type = IST_BASIC;
-- stream->base.handle = New(int);
-+ stream->base.handle = NewWithoutGC(int);
- *(int *)stream->base.handle = des;
- stream->base.read = (int (*)())basic_read;
- stream->base.close = (void (*)())basic_close;
-@@ -111,10 +113,10 @@ newFileStream(FILE * f, void (*closep) ())
- InputStream stream;
- if (f == NULL)
- return NULL;
-- stream = New(union input_stream);
-+ stream = NewWithoutGC(union input_stream);
- init_base_stream(&stream->base, STREAM_BUF_SIZE);
- stream->file.type = IST_FILE;
-- stream->file.handle = New(struct io_file_handle);
-+ stream->file.handle = NewWithoutGC(struct io_file_handle);
- stream->file.handle->f = f;
- if (closep)
- stream->file.handle->close = closep;
-@@ -131,10 +133,10 @@ newStrStream(Str s)
- InputStream stream;
- if (s == NULL)
- return NULL;
-- stream = New(union input_stream);
-+ stream = NewWithoutGC(union input_stream);
- init_str_stream(&stream->base, s);
- stream->str.type = IST_STR;
-- stream->str.handle = s;
-+ stream->str.handle = NULL;
- stream->str.read = (int (*)())str_read;
- stream->str.close = NULL;
- return stream;
-@@ -147,10 +149,10 @@ newSSLStream(SSL * ssl, int sock)
- InputStream stream;
- if (sock < 0)
- return NULL;
-- stream = New(union input_stream);
-+ stream = NewWithoutGC(union input_stream);
- init_base_stream(&stream->base, SSL_BUF_SIZE);
- stream->ssl.type = IST_SSL;
-- stream->ssl.handle = New(struct ssl_handle);
-+ stream->ssl.handle = NewWithoutGC(struct ssl_handle);
- stream->ssl.handle->ssl = ssl;
- stream->ssl.handle->sock = sock;
- stream->ssl.read = (int (*)())ssl_read;
-@@ -166,14 +168,14 @@ newEncodedStream(InputStream is, char encoding)
- if (is == NULL || (encoding != ENC_QUOTE && encoding != ENC_BASE64 &&
- encoding != ENC_UUENCODE))
- return is;
-- stream = New(union input_stream);
-+ stream = NewWithoutGC(union input_stream);
- init_base_stream(&stream->base, STREAM_BUF_SIZE);
- stream->ens.type = IST_ENCODED;
-- stream->ens.handle = New(struct ens_handle);
-+ stream->ens.handle = NewWithoutGC(struct ens_handle);
- stream->ens.handle->is = is;
- stream->ens.handle->pos = 0;
- stream->ens.handle->encoding = encoding;
-- stream->ens.handle->s = NULL;
-+ growbuf_init_without_GC(&stream->ens.handle->gb);
- stream->ens.read = (int (*)())ens_read;
- stream->ens.close = (void (*)())ens_close;
- return stream;
-@@ -187,8 +189,10 @@ ISclose(InputStream stream)
- stream->base.type & IST_UNCLOSE)
- return -1;
- prevtrap = mySignal(SIGINT, SIG_IGN);
-- stream->base.close(stream->base.handle);
-+ stream->base.close (stream->base.handle);
- mySignal(SIGINT, prevtrap);
-+ xfree(stream->base.stream.buf);
-+ xfree(stream);
- return 0;
- }
-
-@@ -218,122 +222,97 @@ ISundogetc(InputStream stream)
- return -1;
- }
-
--#define MARGIN_STR_SIZE 10
- Str
--StrISgets(InputStream stream)
-+StrISgets2(InputStream stream, char crnl)
- {
-- BaseStream base;
-- StreamBuffer sb;
-- Str s = NULL;
-- uchar *p;
-- int len;
-+ struct growbuf gb;
-
- if (stream == NULL)
-- return '\0';
-- base = &stream->base;
-- sb = &base->stream;
--
-- while (!base->iseos) {
-- if (MUST_BE_UPDATED(base)) {
-- do_update(base);
-- }
-- else {
-- if ((p = memchr(&sb->buf[sb->cur], '\n', sb->next - sb->cur))) {
-- len = p - &sb->buf[sb->cur] + 1;
-- if (s == NULL)
-- s = Strnew_size(len);
-- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len);
-- sb->cur += len;
-- return s;
-- }
-- else {
-- if (s == NULL)
-- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE);
-- Strcat_charp_n(s, (char *)&sb->buf[sb->cur],
-- sb->next - sb->cur);
-- sb->cur = sb->next;
-- }
-- }
-- }
--
-- if (s == NULL)
-- return Strnew();
-- return s;
-+ return NULL;
-+ growbuf_init(&gb);
-+ ISgets_to_growbuf(stream, &gb, crnl);
-+ return growbuf_to_Str(&gb);
- }
-
--Str
--StrmyISgets(InputStream stream)
-+void
-+ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl)
- {
-- BaseStream base;
-- StreamBuffer sb;
-- Str s = NULL;
-- int i, len;
-+ BaseStream base = &stream->base;
-+ StreamBuffer sb = &base->stream;
-+ int i;
-
-- if (stream == NULL)
-- return '\0';
-- base = &stream->base;
-- sb = &base->stream;
-+ gb->length = 0;
-
- while (!base->iseos) {
- if (MUST_BE_UPDATED(base)) {
- do_update(base);
-+ continue;
- }
-- else {
-- if (s && Strlastchar(s) == '\r') {
-- if (sb->buf[sb->cur] == '\n')
-- Strcat_char(s, (char)sb->buf[sb->cur++]);
-- return s;
-+ if (crnl && gb->length > 0 && gb->ptr[gb->length - 1] == '\r') {
-+ if (sb->buf[sb->cur] == '\n') {
-+ GROWBUF_ADD_CHAR(gb, '\n');
-+ ++sb->cur;
- }
-- for (i = sb->cur;
-- i < sb->next && sb->buf[i] != '\n' && sb->buf[i] != '\r';
-- i++) ;
-- if (i < sb->next) {
-- len = i - sb->cur + 1;
-- if (s == NULL)
-- s = Strnew_size(len + MARGIN_STR_SIZE);
-- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len);
-- sb->cur = i + 1;
-- if (sb->buf[i] == '\n')
-- return s;
-- }
-- else {
-- if (s == NULL)
-- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE);
-- Strcat_charp_n(s, (char *)&sb->buf[sb->cur],
-- sb->next - sb->cur);
-- sb->cur = sb->next;
-+ break;
-+ }
-+ for (i = sb->cur; i < sb->next; ++i) {
-+ if (sb->buf[i] == '\n' || (crnl && sb->buf[i] == '\r')) {
-+ ++i;
-+ break;
- }
- }
-+ growbuf_append(gb, &sb->buf[sb->cur], i - sb->cur);
-+ sb->cur = i;
-+ if (gb->length > 0 && gb->ptr[gb->length - 1] == '\n')
-+ break;
- }
-
-- if (s == NULL)
-- return Strnew();
-- return s;
-+ growbuf_reserve(gb, gb->length + 1);
-+ gb->ptr[gb->length] = '\0';
-+ return;
- }
-
-+#ifdef unused
- int
- ISread(InputStream stream, Str buf, int count)
- {
-- int rest, len;
-+ int len;
-+
-+ if (count + 1 > buf->area_size) {
-+ char *newptr = GC_MALLOC_ATOMIC(count + 1);
-+ memcpy(newptr, buf->ptr, buf->length);
-+ newptr[buf->length] = '\0';
-+ buf->ptr = newptr;
-+ buf->area_size = count + 1;
-+ }
-+ len = ISread_n(stream, buf->ptr, count);
-+ buf->length = (len > 0) ? len : 0;
-+ buf->ptr[buf->length] = '\0';
-+ return (len > 0) ? 1 : 0;
-+}
-+#endif
-+
-+int
-+ISread_n(InputStream stream, char *dst, int count)
-+{
-+ int len, l;
- BaseStream base;
-
-- if (stream == NULL || (base = &stream->base)->iseos)
-+ if (stream == NULL || count <= 0)
-+ return -1;
-+ if ((base = &stream->base)->iseos)
- return 0;
-
-- len = buffer_read(&base->stream, buf->ptr, count);
-- rest = count - len;
-+ len = buffer_read(&base->stream, dst, count);
- if (MUST_BE_UPDATED(base)) {
-- len = base->read(base->handle, &buf->ptr[len], rest);
-- if (len <= 0) {
-+ l = (*base->read) (base->handle, &dst[len], count - len);
-+ if (l <= 0) {
- base->iseos = TRUE;
-- len = 0;
-+ } else {
-+ len += l;
- }
-- rest -= len;
- }
-- Strtruncate(buf, count - rest);
-- if (buf->length > 0)
-- return 1;
-- return 0;
-+ return len;
- }
-
- int
-@@ -645,6 +624,7 @@ basic_close(int *handle)
- #else
- close(*(int *)handle);
- #endif
-+ xfree(handle);
- }
-
- static int
-@@ -661,6 +641,7 @@ static void
- file_close(struct io_file_handle *handle)
- {
- handle->close(handle->f);
-+ xfree(handle);
- }
-
- static int
-@@ -682,6 +663,7 @@ ssl_close(struct ssl_handle *handle)
- close(handle->sock);
- if (handle->ssl)
- SSL_free(handle->ssl);
-+ xfree(handle);
- }
-
- static int
-@@ -717,38 +699,60 @@ static void
- ens_close(struct ens_handle *handle)
- {
- ISclose(handle->is);
-+ growbuf_clear(&handle->gb);
-+ xfree(handle);
- }
-
- static int
- ens_read(struct ens_handle *handle, char *buf, int len)
- {
-- if (handle->s == NULL || handle->pos == handle->s->length) {
-+ if (handle->pos == handle->gb.length) {
- char *p;
-- handle->s = StrmyISgets(handle->is);
-- if (handle->s->length == 0)
-+ struct growbuf gbtmp;
-+
-+ ISgets_to_growbuf(handle->is, &handle->gb, TRUE);
-+ if (handle->gb.length == 0)
- return 0;
-- cleanup_line(handle->s, PAGER_MODE);
- if (handle->encoding == ENC_BASE64)
-- Strchop(handle->s);
-+ memchop(handle->gb.ptr, &handle->gb.length);
- else if (handle->encoding == ENC_UUENCODE) {
-- if (!strncmp(handle->s->ptr, "begin", 5))
-- handle->s = StrmyISgets(handle->is);
-- Strchop(handle->s);
-+ if (handle->gb.length >= 5 &&
-+ !strncmp(handle->gb.ptr, "begin", 5))
-+ ISgets_to_growbuf(handle->is, &handle->gb, TRUE);
-+ memchop(handle->gb.ptr, &handle->gb.length);
- }
-- p = handle->s->ptr;
-+ growbuf_init_without_GC(&gbtmp);
-+ p = handle->gb.ptr;
- if (handle->encoding == ENC_QUOTE)
-- handle->s = decodeQP(&p);
-+ decodeQP_to_growbuf(&gbtmp, &p);
- else if (handle->encoding == ENC_BASE64)
-- handle->s = decodeB(&p);
-+ decodeB_to_growbuf(&gbtmp, &p);
- else if (handle->encoding == ENC_UUENCODE)
-- handle->s = decodeU(&p);
-+ decodeU_to_growbuf(&gbtmp, &p);
-+ growbuf_clear(&handle->gb);
-+ handle->gb = gbtmp;
- handle->pos = 0;
- }
-
-- if (len > handle->s->length - handle->pos)
-- len = handle->s->length - handle->pos;
-+ if (len > handle->gb.length - handle->pos)
-+ len = handle->gb.length - handle->pos;
-
-- bcopy(&handle->s->ptr[handle->pos], buf, len);
-+ memcpy(buf, &handle->gb.ptr[handle->pos], len);
- handle->pos += len;
- return len;
- }
-+
-+static void
-+memchop(char *p, int *len)
-+{
-+ char *q;
-+
-+ for (q = p + *len; q > p; --q) {
-+ if (q[-1] != '\n' && q[-1] != '\r')
-+ break;
-+ }
-+ if (q != p + *len)
-+ *q = '\0';
-+ *len = q - p;
-+ return;
-+}
-diff --git a/istream.h b/istream.h
-index e710e78..5a04be0 100644
---- a/istream.h
-+++ b/istream.h
-@@ -2,13 +2,13 @@
- #ifndef IO_STREAM_H
- #define IO_STREAM_H
-
-+#include "indep.h"
- #include <stdio.h>
- #ifdef USE_SSL
- #include <openssl/bio.h>
- #include <openssl/x509.h>
- #include <openssl/ssl.h>
- #endif
--#include "Str.h"
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
-@@ -36,7 +36,7 @@ union input_stream;
-
- struct ens_handle {
- union input_stream *is;
-- Str s;
-+ struct growbuf gb;
- int pos;
- char encoding;
- };
-@@ -119,9 +119,14 @@ extern InputStream newEncodedStream(InputStream is, char encoding);
- extern int ISclose(InputStream stream);
- extern int ISgetc(InputStream stream);
- extern int ISundogetc(InputStream stream);
--extern Str StrISgets(InputStream stream);
--extern Str StrmyISgets(InputStream stream);
-+extern Str StrISgets2(InputStream stream, char crnl);
-+#define StrISgets(stream) StrISgets2(stream, FALSE)
-+#define StrmyISgets(stream) StrISgets2(stream, TRUE)
-+void ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl);
-+#ifdef unused
- extern int ISread(InputStream stream, Str buf, int count);
-+#endif
-+int ISread_n(InputStream stream, char *dst, int bufsize);
- extern int ISfileno(InputStream stream);
- extern int ISeos(InputStream stream);
- #ifdef USE_SSL
-diff --git a/local.c b/local.c
-index f5a73a2..959bd66 100644
---- a/local.c
-+++ b/local.c
-@@ -359,6 +359,10 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
- int status;
- pid_t pid;
- char *file = uri, *name = uri, *path_info = NULL, *tmpf = NULL;
-+#ifdef HAVE_CHDIR
-+ char *cgi_dir;
-+#endif
-+ char *cgi_basename;
-
- #ifdef __MINGW32_VERSION
- return NULL;
-@@ -373,7 +377,14 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
- if (!fw)
- return NULL;
- }
-+ if (qstr)
-+ uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
-+#ifdef HAVE_CHDIR
-+ cgi_dir = mydirname(file);
-+#endif
-+ cgi_basename = mybasename(file);
- pid = open_pipe_rw(&fr, NULL);
-+ /* Don't invoke gc after here, or the program might crash in some platforms */
- if (pid < 0)
- return NULL;
- else if (pid) {
-@@ -383,8 +394,6 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
- }
- setup_child(TRUE, 2, fw ? fileno(fw) : -1);
-
-- if (qstr)
-- uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
- set_cgi_environ(name, file, uri);
- if (path_info)
- set_environ("PATH_INFO", path_info);
-@@ -415,11 +424,11 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
- }
-
- #ifdef HAVE_CHDIR /* ifndef __EMX__ ? */
-- chdir(mydirname(file));
-+ chdir(cgi_dir);
- #endif
-- execl(file, mybasename(file), NULL);
-+ execl(file, cgi_basename, NULL);
- fprintf(stderr, "execl(\"%s\", \"%s\", NULL): %s\n",
-- file, mybasename(file), strerror(errno));
-+ file, cgi_basename, strerror(errno));
- exit(1);
- return NULL;
- #endif
-diff --git a/main.c b/main.c
-index c49985d..ec77085 100644
---- a/main.c
-+++ b/main.c
-@@ -11,6 +11,9 @@
- #include <sys/wait.h>
- #endif
- #include <time.h>
-+#if defined(__CYGWIN__) && defined(USE_BINMODE_STREAM)
-+#include <io.h>
-+#endif
- #include "terms.h"
- #include "myctype.h"
- #include "regex.h"
-@@ -407,6 +410,10 @@ main(int argc, char **argv, char **envp)
- wc_ces CodePage;
- #endif
- #endif
-+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
-+ char **getimage_args = NULL;
-+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
-+
- GC_INIT();
- #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET))
- setlocale(LC_ALL, "");
-@@ -428,6 +435,10 @@ main(int argc, char **argv, char **envp)
-
- CurrentDir = currentdir();
- CurrentPid = (int)getpid();
-+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
-+ if (argv[0] && *argv[0])
-+ MyProgramName = argv[0];
-+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
- BookmarkFile = NULL;
- config_file = NULL;
-
-@@ -751,6 +762,15 @@ main(int argc, char **argv, char **envp)
- else if (!strcmp("-reqlog",argv[i])) {
- w3m_reqlog=rcFile("request.log");
- }
-+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
-+ else if (!strcmp("-$$getimage", argv[i])) {
-+ ++i;
-+ getimage_args = argv + i;
-+ i += 4;
-+ if (i > argc)
-+ usage();
-+ }
-+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
- else {
- usage();
- }
-@@ -839,6 +859,30 @@ main(int argc, char **argv, char **envp)
-
- if (w3m_backend)
- backend();
-+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
-+ if (getimage_args) {
-+ char *image_url = conv_from_system(getimage_args[0]);
-+ char *base_url = conv_from_system(getimage_args[1]);
-+ ParsedURL base_pu;
-+
-+ parseURL2(base_url, &base_pu, NULL);
-+ image_source = getimage_args[2];
-+ newbuf = loadGeneralFile(image_url, &base_pu, NULL, 0, NULL);
-+ if (!newbuf || !newbuf->real_type ||
-+ strncasecmp(newbuf->real_type, "image/", 6))
-+ unlink(getimage_args[2]);
-+#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)
-+ symlink(getimage_args[2], getimage_args[3]);
-+#else
-+ {
-+ FILE *f = fopen(getimage_args[3], "w");
-+ if (f)
-+ fclose(f);
-+ }
-+#endif
-+ w3m_exit(0);
-+ }
-+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
-
- if (w3m_dump)
- mySignal(SIGINT, SIG_IGN);
-diff --git a/mimehead.c b/mimehead.c
-index 78997e0..d16270c 100644
---- a/mimehead.c
-+++ b/mimehead.c
-@@ -64,12 +64,22 @@ ha2d(char x, char y)
- Str
- decodeB(char **ww)
- {
-+ struct growbuf gb;
-+
-+ growbuf_init(&gb);
-+ decodeB_to_growbuf(&gb, ww);
-+ return growbuf_to_Str(&gb);
-+}
-+
-+void
-+decodeB_to_growbuf(struct growbuf *gb, char **ww)
-+{
- unsigned char c[4];
- char *wp = *ww;
- char d[3];
- int i, n_pad;
-- Str ap = Strnew_size(strlen(wp));
-
-+ growbuf_reserve(gb, strlen(wp) + 1);
- n_pad = 0;
- while (1) {
- for (i = 0; i < 4; i++) {
-@@ -93,39 +103,50 @@ decodeB(char **ww)
- for (i = 0; i < 4; i++) {
- c[i] = c2e(c[i]);
- if (c[i] == BAD_BASE64) {
-- *ww = wp;
-- return ap;
-+ goto last;
- }
- }
- d[0] = ((c[0] << 2) | (c[1] >> 4));
- d[1] = ((c[1] << 4) | (c[2] >> 2));
- d[2] = ((c[2] << 6) | c[3]);
- for (i = 0; i < 3 - n_pad; i++) {
-- Strcat_char(ap, d[i]);
-+ GROWBUF_ADD_CHAR(gb, d[i]);
- }
- if (n_pad || *wp == '\0' || *wp == '?')
- break;
- }
-+last:
-+ growbuf_reserve(gb, gb->length + 1);
-+ gb->ptr[gb->length] = '\0';
- *ww = wp;
-- return ap;
-+ return;
- }
-
- Str
- decodeU(char **ww)
- {
-+ struct growbuf gb;
-+
-+ growbuf_init(&gb);
-+ decodeU_to_growbuf(&gb, ww);
-+ return growbuf_to_Str(&gb);
-+}
-+
-+void
-+decodeU_to_growbuf(struct growbuf *gb, char **ww)
-+{
- unsigned char c1, c2;
- char *w = *ww;
- int n, i;
-- Str a;
-
- if (*w <= 0x20 || *w >= 0x60)
-- return Strnew_size(0);
-+ return;
- n = *w - 0x20;
-- a = Strnew_size(n);
-+ growbuf_reserve(gb, n + 1);
- for (w++, i = 2; *w != '\0' && n; n--) {
- c1 = (w[0] - 0x20) % 0x40;
- c2 = (w[1] - 0x20) % 0x40;
-- Strcat_char(a, (c1 << i) | (c2 >> (6 - i)));
-+ gb->ptr[gb->length++] = (c1 << i) | (c2 >> (6 - i));
- if (i == 6) {
- w += 2;
- i = 2;
-@@ -135,7 +156,8 @@ decodeU(char **ww)
- i += 2;
- }
- }
-- return a;
-+ gb->ptr[gb->length] = '\0';
-+ return;
- }
-
- /* RFC2047 (4.2. The "Q" encoding) */
-@@ -165,9 +187,19 @@ decodeQ(char **ww)
- Str
- decodeQP(char **ww)
- {
-+ struct growbuf gb;
-+
-+ growbuf_init(&gb);
-+ decodeQP_to_growbuf(&gb, ww);
-+ return growbuf_to_Str(&gb);
-+}
-+
-+void
-+decodeQP_to_growbuf(struct growbuf *gb, char **ww)
-+{
- char *w = *ww;
-- Str a = Strnew_size(strlen(w));
-
-+ growbuf_reserve(gb, strlen(w) + 1);
- for (; *w != '\0'; w++) {
- if (*w == '=') {
- w++;
-@@ -180,15 +212,16 @@ decodeQP(char **ww)
- else {
- if (*w == '\0' || *(w + 1) == '\0')
- break;
-- Strcat_char(a, ha2d(*w, *(w + 1)));
-+ gb->ptr[gb->length++] = ha2d(*w, *(w + 1));
- w++;
- }
- }
- else
-- Strcat_char(a, *w);
-+ gb->ptr[gb->length++] = *w;
- }
-+ gb->ptr[gb->length] = '\0';
- *ww = w;
-- return a;
-+ return;
- }
-
- #ifdef USE_M17N
-diff --git a/proto.h b/proto.h
-index 7248ee5..0d8beb5 100644
---- a/proto.h
-+++ b/proto.h
-@@ -607,9 +607,12 @@ extern char *getAnchorText(Buffer *buf, AnchorList *al, Anchor *a);
- extern Buffer *link_list_panel(Buffer *buf);
-
- extern Str decodeB(char **ww);
-+extern void decodeB_to_growbuf(struct growbuf *gb, char **ww);
- extern Str decodeQ(char **ww);
- extern Str decodeQP(char **ww);
-+extern void decodeQP_to_growbuf(struct growbuf *gb, char **ww);
- extern Str decodeU(char **ww);
-+extern void decodeU_to_growbuf(struct growbuf *gb, char **ww);
- #ifdef USE_M17N
- extern Str decodeWord(char **ow, wc_ces * charset);
- extern Str decodeMIME(Str orgstr, wc_ces * charset);
-@@ -811,5 +814,3 @@ extern void dispVer(void);
- void srand48(long);
- long lrand48(void);
- #endif
--
--#include "indep.h"
diff --git a/debian/patches/250_schemebug.patch b/debian/patches/250_schemebug.patch
deleted file mode 100644
index fc740ca..0000000
--- a/debian/patches/250_schemebug.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-Subject: Define schemeNumToName() to fix scheme bug
-From: AIDA Shinra <shinra@j10n.org>
-Origin: http://www.j10n.org/files/w3m-cvs-1.1055-schemebug.patch
-Bug: http://sourceforge.net/p/w3m/patches/60/
-Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=650747
-
- Patch from [w3m-dev:04470] on 2013-10-14.
-
-diff --git a/url.c b/url.c
-index cbb4aab..d7b1d6e 100644
---- a/url.c
-+++ b/url.c
-@@ -121,6 +121,7 @@ static struct table2 DefaultGuess[] = {
- };
-
- static void add_index_file(ParsedURL *pu, URLFile *uf);
-+static char * schemeNumToName(int scheme);
-
- /* #define HTTP_DEFAULT_FILE "/index.html" */
-
-@@ -1285,6 +1286,18 @@ getURLScheme(char **url)
- }
-
- static char *
-+schemeNumToName(int scheme)
-+{
-+ int i;
-+
-+ for (i = 0; schemetable[i].cmdname != NULL; i++) {
-+ if (schemetable[i].cmd == scheme)
-+ return schemetable[i].cmdname;
-+ }
-+ return NULL;
-+}
-+
-+static char *
- otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
- {
- Str s = Strnew();
-@@ -1616,7 +1629,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
- pu->host != NULL && !check_no_proxy(pu->host)) {
- hr->flag |= HR_FLAG_PROXY;
- sock = openSocket(FTP_proxy_parsed.host,
-- schemetable[FTP_proxy_parsed.scheme].cmdname,
-+ schemeNumToName(FTP_proxy_parsed.scheme),
- FTP_proxy_parsed.port);
- if (sock < 0)
- return uf;
-@@ -1658,15 +1671,15 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
- }
- else if (pu->scheme == SCM_HTTPS) {
- sock = openSocket(HTTPS_proxy_parsed.host,
-- schemetable[HTTPS_proxy_parsed.scheme].
-- cmdname, HTTPS_proxy_parsed.port);
-+ schemeNumToName(HTTPS_proxy_parsed.scheme),
-+ HTTPS_proxy_parsed.port);
- sslh = NULL;
- }
- else {
- #endif /* USE_SSL */
- sock = openSocket(HTTP_proxy_parsed.host,
-- schemetable[HTTP_proxy_parsed.scheme].
-- cmdname, HTTP_proxy_parsed.port);
-+ schemeNumToName(HTTP_proxy_parsed.scheme),
-+ HTTP_proxy_parsed.port);
- #ifdef USE_SSL
- sslh = NULL;
- }
-@@ -1698,8 +1711,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
- }
- }
- else {
-- sock = openSocket(pu->host,
-- schemetable[pu->scheme].cmdname, pu->port);
-+ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port);
- if (sock < 0) {
- *status = HTST_MISSING;
- return uf;
-@@ -1763,7 +1775,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
- pu->host != NULL && !check_no_proxy(pu->host)) {
- hr->flag |= HR_FLAG_PROXY;
- sock = openSocket(GOPHER_proxy_parsed.host,
-- schemetable[GOPHER_proxy_parsed.scheme].cmdname,
-+ schemeNumToName(GOPHER_proxy_parsed.scheme),
- GOPHER_proxy_parsed.port);
- if (sock < 0)
- return uf;
-@@ -1771,8 +1783,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
- tmp = HTTPrequest(pu, current, hr, extra_header);
- }
- else {
-- sock = openSocket(pu->host,
-- schemetable[pu->scheme].cmdname, pu->port);
-+ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port);
- if (sock < 0)
- return uf;
- if (pu->file == NULL)
diff --git a/debian/patches/260_openssl.patch b/debian/patches/260_openssl.patch
deleted file mode 100644
index 85c32c8..0000000
--- a/debian/patches/260_openssl.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Subject: OpenSSL issues
-Author: Cristian Rodriguez <crrodriguez@opensuse.org>
-Origin: https://build.opensuse.org/request/show/141054
-Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2012-4929
-
- Mon Nov 12 18:26:45 UTC 2012 - crrodriguez@opensuse.org
- - Due to the "CRIME attack" (CVE-2012-4929) HTTPS clients
- that negotiate TLS-level compression can be abused for
- MITM attacks. (w3m-openssl.patch)
- - Use SSL_MODE_RELEASE_BUFFERS if available .
-
---- w3m.orig/url.c
-+++ w3m/url.c
-@@ -337,7 +337,15 @@ openSSLHandle(int sock, char *hostname,
- if (strchr(ssl_forbid_method, 'T'))
- option |= SSL_OP_NO_TLSv1;
- }
-+#ifdef SSL_OP_NO_COMPRESSION
-+ option |= SSL_OP_NO_COMPRESSION;
-+#endif
- SSL_CTX_set_options(ssl_ctx, option);
-+
-+#ifdef SSL_MODE_RELEASE_BUFFERS
-+ SSL_CTX_set_mode (ssl_ctx, SSL_MODE_RELEASE_BUFFERS);
-+#endif
-+
- #ifdef USE_SSL_VERIFY
- /* derived from openssl-0.9.5/apps/s_{client,cb}.c */
- #if 1 /* use SSL_get_verify_result() to verify cert */
diff --git a/debian/patches/270_refresh-url.patch b/debian/patches/270_refresh-url.patch
deleted file mode 100644
index 5d2d5a5..0000000
--- a/debian/patches/270_refresh-url.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Subject: Add support for single quoted meta refresh URL
-From: Paul Boekholt <p.boekholt@gmail.com>
-Bug: https://sourceforge.net/p/w3m/patches/53/
-
---- w3m.orig/file.c 2007-05-23 17:06:05.000000000 +0200
-+++ w3m/file.c 2008-09-06 08:46:00.000000000 +0200
-@@ -4240,15 +4240,15 @@ getMetaRefreshParam(char *q, Str *refres
- while (*q) {
- if (!strncasecmp(q, "url=", 4)) {
- q += 4;
-- if (*q == '\"') /* " */
-+ if (*q == '\"' || *q == '\'') /* " or ' */
- q++;
- r = q;
- while (*r && !IS_SPACE(*r) && *r != ';')
- r++;
- s_tmp = Strnew_charp_n(q, r - q);
-
-- if (s_tmp->ptr[s_tmp->length - 1] == '\"') { /* "
-- */
-+ if (s_tmp->ptr[s_tmp->length - 1] == '\"' /* " */
-+ || s_tmp->ptr[s_tmp->length - 1] == '\'') { /* ' */
- s_tmp->length--;
- s_tmp->ptr[s_tmp->length] = '\0';
- }
diff --git a/debian/patches/280_search-next.patch b/debian/patches/280_search-next.patch
deleted file mode 100644
index c66254b..0000000
--- a/debian/patches/280_search-next.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Subject: Fix crash after SEARCH_NEXT
-From: AIDA Shinra <shinra@j10n.org>
-Origin: http://www.j10n.org/files/w3m-cvs-1.1055-search-next.patch
-
- Patch from [w3m-dev:04473] on 2013-12-07.
-
---- w3m.orig/main.c Mon Oct 14 02:20:37 2013
-+++ w3m/main.c Sat Dec 7 00:33:36 2013
-@@ -1928,6 +1928,10 @@
- result = srchcore(SearchString, routine[reverse]);
- if (result & SR_FOUND)
- clear_mark(Currentbuf->currentLine);
-+ else {
-+ if (reverse == 0)
-+ Currentbuf->pos -= 1;
-+ }
- displayBuffer(Currentbuf, B_NORMAL);
- disp_srchresult(result, (reverse ? "Backward: " : "Forward: "),
- SearchString);
diff --git a/debian/patches/290_closedir.patch b/debian/patches/290_closedir.patch
deleted file mode 100644
index 04fafdf..0000000
--- a/debian/patches/290_closedir.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Subject: Fix a directory descriptor leak in loadLocalDir
-Author: Reinhard Max <max@suse.de>
-Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-closedir.patch
-Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=531675
-
- Mon Sep 7 16:49:56 CEST 2009 - max@suse.de
- - Added w3m-closedir.patch to fix a directory descriptor leak in
- loadLocalDir (bnc#531675).
-
---- w3m.orig/local.c
-+++ w3m/local.c
-@@ -109,6 +109,7 @@ loadLocalDir(char *dname)
- n++;
- }
- }
-+ closedir(d);
-
- if (multicolList) {
- l = COLS / (maxlen + 2);
diff --git a/debian/patches/300_manual-links.patch b/debian/patches/300_manual-links.patch
deleted file mode 100644
index 5c46065..0000000
--- a/debian/patches/300_manual-links.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Subject: Cleanup unusable links in MANUAL.html
-From: Tatsuya Kinoshita <tats@debian.org>
-Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517315
-
-diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html
-index 41d70f1..c9d0d5b 100644
---- a/doc-jp/MANUAL.html
-+++ b/doc-jp/MANUAL.html
-@@ -489,8 +489,7 @@ w3m
- w3mȤСHTTPФʤCGIץȤư뤳ȤǤޤ
- ΤȤw3mФΤդ򤷤ƥץȤưνϤ
- ɤߤɽ櫓Ǥ
--<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">֥åޡϿ</a>
--<a href="file:///$LIB/w3mhelperpanel?mode=panel">ӥ塼Խ</a>
-+֥åޡϿȳӥ塼Խ
- ϡlocal CGIΥץȤȤƼ¸Ƥޤ
- local CGIȤСw3mѤΥեϥ󥿥եȤ
- ȤȤǤޤ
-diff --git a/doc/MANUAL.html b/doc/MANUAL.html
-index aff0189..04800d8 100644
---- a/doc/MANUAL.html
-+++ b/doc/MANUAL.html
-@@ -468,8 +468,7 @@ and <a href="keymap.lynx">keymap.lynx</a>) as examples.
- You can run CGI scripts using w3m, without any HTTP server.
- It means that w3m behaves like an HTTP server and activates CGI script,
- then w3m reads the output of the script and display it. The
--<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">bookmark registration</a>
--and <a href="file:///$LIB/w3mhelperpanel?mode=panel">helper-app editor</a>
-+bookmark registration and helper-app editor
- are realized as local CGI scripts.
- Using local CGI, w3m can be used as a general purpose form interface.
- <P>
diff --git a/debian/patches/310_doc-ascii.patch b/debian/patches/310_doc-ascii.patch
deleted file mode 100644
index 88ad60b..0000000
--- a/debian/patches/310_doc-ascii.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-Subject: Prefer US-ASCII rathar than Japanese encodings in English documents
-From: Tatsuya Kinoshita <tats@debian.org>
-
-diff --git a/doc/HISTORY b/doc/HISTORY
-index b8f5b94..7f7ae2b 100644
---- a/doc/HISTORY
-+++ b/doc/HISTORY
-@@ -588,7 +588,7 @@ From: Okabe Katsuya <okabek@guitar.ocn.ne.jp>
- * space characters in a buffer are mapped into 0x80-0x9f.
- * unprintable characters (0x80-0xa0) are displayed as \xxx.
-
--From: Tsutomu Okada ($B2,ED(B $BJY(B) <okada@furuno.co.jp>
-+From: Tsutomu Okada <okada@furuno.co.jp>
- Subject: [w3m-dev 01354] minimize when #undef USE_GOPHER or USE_NNTP
-
- 2000/11/16
-@@ -1422,7 +1422,7 @@ HTML4.0 ID attribute support.
-
- From: Okabe Katsuya <okabe@fphy.hep.okayama-u.ac.jp>
- table get weird when it contains <input type=hidden>.
--$B=$@5!%(B
-+Fixed.
-
- 2000.2.12
- From: Rogue Metal - Jake Moorman <roguemtl@stampede.org>
-@@ -1649,15 +1649,15 @@ From: patakuti
- If an <input type=button> tag has no `name' attribute,
- w3m adds it an inappropriate name attribute.
-
--From: $B$d$^(B
-+From: Yama
- Now w3m can handle a frameset that has both ROWS and COLS.
-
- From: aito
- Now bookmarking is done by a separate command w3mbookmark.
-
--C-s $B$G2hLLI=<($,;_$^$C$F$$$?%P%0$N=$@5!%(B
-+Bug fix that C-s hangs.
-
--$BJ8;zF~NO;~$K(B C-g $B$GCf;_$G$-$k$h$&$K$7$?!%(B
-+Enable C-g to quit for keyboard input.
-
- From: hovav@cs.stanford.edu
- When downloading a file, an attempt to save it to a non-exist
-@@ -1699,7 +1699,7 @@ Menu behavior is changed.
- * Clicking outside the menu causes cancellation of sub-menu.
- * <, >, +, - abandoned
-
--From: $B$*$+$@(B <okada@furuno.co.jp>
-+From: Okada <okada@furuno.co.jp>
- Now C-a/C-e are bound to 'jump to the first/last item in menu.'
-
- From: "OMAE, jun" <jun-o@osb.att.ne.jp>
-diff --git a/doc/README.cookie b/doc/README.cookie
-index 56cca50..da16947 100644
---- a/doc/README.cookie
-+++ b/doc/README.cookie
-@@ -37,7 +37,7 @@ cookie support of w3m
- (HDN: host domain name)
-
-
-- If the number of "." in domain name is lesser than 2, it is
-+ * If the number of "." in domain name is lesser than 2, it is
- assumed as invalid cookie (cf. RFC 2109 4.3.2), however, you can
- use cookie_avoid_wrong_number_of_dots to avoid this
- restriction. You can set this in "Domains to avoid [wrong number
-diff --git a/doc/README.m17n b/doc/README.m17n
-index c064d76..da5408b 100644
---- a/doc/README.m17n
-+++ b/doc/README.m17n
-@@ -49,7 +49,7 @@ Supported encoding schemes (character set)
- * Thai
- TIS-620 (ISO-8859-11), CP874
- * Other
-- US_ASCII, ISO-8859-1 10, 13 15,
-+ US_ASCII, ISO-8859-1 - 10, 13 - 15,
- KOI8-R, KOI8-U, NeXT, CP437, CP737, CP775, CP850, CP852, CP855, CP856,
- CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP869, CP1006,
- CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257
diff --git a/debian/patches/320_imlib2-config.patch b/debian/patches/320_imlib2-config.patch
deleted file mode 100644
index 1c27468..0000000
--- a/debian/patches/320_imlib2-config.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-Subject: Use pkg-config to build with imlib2 1.4.6
-From: Tatsuya Kinoshita <tats@debian.org>
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index e4ccc3d..56d6338 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -649,6 +649,9 @@ AC_DEFUN([AC_W3M_IMAGE],
- fi;;
- imlib2)
- with_imlib2="yes"
-+ if test x"$PKG_CONFIG" = x; then
-+ PKG_CONFIG=pkg-config
-+ fi
- if test x"$IMLIB2_CONFIG" = x; then
- IMLIB2_CONFIG=imlib2-config
- fi;;
-@@ -728,7 +731,7 @@ AC_DEFUN([AC_W3M_IMAGE],
- IMGTARGETS="x11"
- AC_DEFINE(USE_IMLIB2)
- IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
-- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
-+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`"
- else
- AC_MSG_WARN([unable to build w3mimgdisplay with X11 support])
- fi
-@@ -756,7 +759,7 @@ AC_DEFUN([AC_W3M_IMAGE],
- AC_DEFINE(USE_IMLIB2)
- IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
- IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
-- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
-+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`"
- else
- AC_MSG_WARN([unable to build w3mimgdisplay with FB support])
- fi
-diff --git a/configure b/configure
-index 4c1bc06..01153c1 100755
---- a/configure
-+++ b/configure
-@@ -6811,6 +6811,9 @@ $as_echo "$with_imagelib" >&6; }
- fi;;
- imlib2)
- with_imlib2="yes"
-+ if test x"$PKG_CONFIG" = x; then
-+ PKG_CONFIG=pkg-config
-+ fi
- if test x"$IMLIB2_CONFIG" = x; then
- IMLIB2_CONFIG=imlib2-config
- fi;;
-@@ -6955,7 +6958,7 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >=
- $as_echo "#define USE_IMLIB2 1" >>confdefs.h
-
- IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
-- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
-+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with X11 support" >&5
- $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
-@@ -6991,7 +6994,7 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
-
- IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
- IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
-- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
-+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with FB support" >&5
- $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with FB support" >&2;}
diff --git a/debian/patches/330_Disable-weak-ciphers.patch b/debian/patches/330_Disable-weak-ciphers.patch
deleted file mode 100644
index a243c61..0000000
--- a/debian/patches/330_Disable-weak-ciphers.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Subject: Disable ciphers that use keys smaller than 128 bits
-From: Tatsuya Kinoshita <tats@debian.org>
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1325674
-
-diff --git a/url.c b/url.c
-index ed6062e..e6b51c8 100644
---- a/url.c
-+++ b/url.c
-@@ -326,6 +326,7 @@ openSSLHandle(int sock, char *hostname, char **p_cert)
- SSL_load_error_strings();
- if (!(ssl_ctx = SSL_CTX_new(SSLv23_client_method())))
- goto eend;
-+ SSL_CTX_set_cipher_list(ssl_ctx, "DEFAULT:!LOW:!EXP");
- option = SSL_OP_ALL;
- if (ssl_forbid_method) {
- if (strchr(ssl_forbid_method, '2'))
diff --git a/debian/patches/340_ssl-init.patch b/debian/patches/340_ssl-init.patch
deleted file mode 100644
index b47bbb6..0000000
--- a/debian/patches/340_ssl-init.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Subject: Force ssl_verify_server on, and disable SSLv2 and SSLv3
-Author: Ludwig Nussel <ludwig.nussel@suse.de>, Tatsuya Kinoshita <tats@debian.org>
-Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4
-
- Update README.SSL to follow default values
-
- Disable SSLv3 by default [CVE-2014-3566]
- cf. https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/
-
- Force ssl_verify_server on and disable SSLv2 support
- Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4
-
-diff --git a/doc-jp/README.SSL b/doc-jp/README.SSL
-index 4aedfde..670ed5f 100644
---- a/doc-jp/README.SSL
-+++ b/doc-jp/README.SSL
-@@ -25,9 +25,9 @@ SSL
-
- ssl_forbid_method
- ȤʤSSL᥽åɤΥꥹ(2: SSLv2, 3: SSLv3, t: TLSv1)
-- (ǥեȤ<NULL>).
-+ (ǥեȤ2, 3).
- ssl_verify_server ON/OFF
-- SSLΥǧڤԤ(ǥեȤOFF).
-+ SSLΥǧڤԤ(ǥեȤON).
- ssl_cert_file ե̾
- SSLΥ饤PEMե(ǥեȤ<NULL>).
- ssl_key_file ե̾
-diff --git a/fm.h b/fm.h
-index 8378939..ddcd4fc 100644
---- a/fm.h
-+++ b/fm.h
-@@ -1135,7 +1135,7 @@ global int view_unseenobject init(TRUE);
- #endif
-
- #if defined(USE_SSL) && defined(USE_SSL_VERIFY)
--global int ssl_verify_server init(FALSE);
-+global int ssl_verify_server init(TRUE);
- global char *ssl_cert_file init(NULL);
- global char *ssl_key_file init(NULL);
- global char *ssl_ca_path init(NULL);
-@@ -1144,7 +1144,7 @@ global int ssl_path_modified init(FALSE);
- #endif /* defined(USE_SSL) &&
- * defined(USE_SSL_VERIFY) */
- #ifdef USE_SSL
--global char *ssl_forbid_method init(NULL);
-+global char *ssl_forbid_method init("2, 3");
- #endif
-
- global int is_redisplay init(FALSE);
diff --git a/debian/patches/350_ambwidth.patch b/debian/patches/350_ambwidth.patch
deleted file mode 100644
index 4c2f926..0000000
--- a/debian/patches/350_ambwidth.patch
+++ /dev/null
@@ -1,239 +0,0 @@
-Subject: Fix incorrect generation of ucs_ambwidth_map
-Author: Tatsuya Kinoshita <tats@debian.org>
-
-diff --git a/libwc/ambwidth_map.awk b/libwc/ambwidth_map.awk
-index 8544f58..1d9d25f 100644
---- a/libwc/ambwidth_map.awk
-+++ b/libwc/ambwidth_map.awk
-@@ -3,9 +3,15 @@ BEGIN {
- i = 0;
- }
- $2 == "A" {
-- code = sprintf("0x%s", $1);
-- if (strtonum(code) < 0x10000) {
-- map[i] = code
-+ code = code2 = strtonum(sprintf("0x%s", $1))
-+ if (match($1, /[.]+[0-9A-Fa-f]+/)) {
-+ s = substr($1, RSTART, RLENGTH)
-+ sub(/[.]+/, "0x", s)
-+ code2 = strtonum(s)
-+ }
-+ for (; code <= code2; code++) {
-+ if (code >= 0x10000) { break }
-+ map[i] = sprintf("0x%04X", code)
- i++;
- }
- }
-@@ -15,28 +21,14 @@ END {
- prev = strtonum(map[0]);
- for (j = 1; j < i; j++) {
- cur = strtonum(map[j]);
-- if (match(map[j], "[.]+")) {
-+ if (cur - prev > 1) {
- map2[n] = sprintf("%s, %s", start, map[j - 1]);
- n++;
-- gsub("[.]+", ", 0x", map[j])
-- map2[n] = map[j];
-- n++;
-- start = map[j + 1];
-- cur = strtonum(start);
-- } else {
-- if (cur - prev > 2) {
-- map2[n] = sprintf("%s, %s", start, map[j - 1]);
-- start = map[j];
-- n++;
-- }
--
-- if (j == i - 1) {
-- map2[n] = sprintf("%s, %s", start, map[j]);
-- n++;
-- }
-+ start = map[j];
- }
- prev = cur;
- }
-+ if (i > 0) { map2[n] = sprintf("%s, %s", start, map[i - 1]); n++ }
-
- printf("static wc_map ucs_ambwidth_map[] = {\n");
- for (j = 0; j < n; j++) {
-diff --git a/libwc/map/ucs_ambwidth.map b/libwc/map/ucs_ambwidth.map
-index 6f03ba8..35ceedb 100644
---- a/libwc/map/ucs_ambwidth.map
-+++ b/libwc/map/ucs_ambwidth.map
-@@ -1,50 +1,82 @@
- static wc_map ucs_ambwidth_map[] = {
- { 0x00A1, 0x00A1 },
- { 0x00A4, 0x00A4 },
-- { 0x00A7, 0x00AA },
-- { 0x00AD, 0x00BF },
-+ { 0x00A7, 0x00A8 },
-+ { 0x00AA, 0x00AA },
-+ { 0x00AD, 0x00AE },
-+ { 0x00B0, 0x00B4 },
-+ { 0x00B6, 0x00BA },
-+ { 0x00BC, 0x00BF },
- { 0x00C6, 0x00C6 },
- { 0x00D0, 0x00D0 },
- { 0x00D7, 0x00D8 },
- { 0x00DE, 0x00E1 },
-- { 0x00E6, 0x00ED },
-- { 0x00F0, 0x00F3 },
-- { 0x00F7, 0x00FE },
-+ { 0x00E6, 0x00E6 },
-+ { 0x00E8, 0x00EA },
-+ { 0x00EC, 0x00ED },
-+ { 0x00F0, 0x00F0 },
-+ { 0x00F2, 0x00F3 },
-+ { 0x00F7, 0x00FA },
-+ { 0x00FC, 0x00FC },
-+ { 0x00FE, 0x00FE },
- { 0x0101, 0x0101 },
-- { 0x0111, 0x0113 },
-+ { 0x0111, 0x0111 },
-+ { 0x0113, 0x0113 },
- { 0x011B, 0x011B },
- { 0x0126, 0x0127 },
- { 0x012B, 0x012B },
- { 0x0131, 0x0133 },
- { 0x0138, 0x0138 },
-- { 0x013F, 0x0144 },
-- { 0x0148, 0x014D },
-+ { 0x013F, 0x0142 },
-+ { 0x0144, 0x0144 },
-+ { 0x0148, 0x014B },
-+ { 0x014D, 0x014D },
- { 0x0152, 0x0153 },
- { 0x0166, 0x0167 },
- { 0x016B, 0x016B },
-- { 0x01CE, 0x01DC },
-+ { 0x01CE, 0x01CE },
-+ { 0x01D0, 0x01D0 },
-+ { 0x01D2, 0x01D2 },
-+ { 0x01D4, 0x01D4 },
-+ { 0x01D6, 0x01D6 },
-+ { 0x01D8, 0x01D8 },
-+ { 0x01DA, 0x01DA },
-+ { 0x01DC, 0x01DC },
- { 0x0251, 0x0251 },
- { 0x0261, 0x0261 },
- { 0x02C4, 0x02C4 },
-- { 0x02C7, 0x02CD },
-+ { 0x02C7, 0x02C7 },
-+ { 0x02C9, 0x02CB },
-+ { 0x02CD, 0x02CD },
- { 0x02D0, 0x02D0 },
-- { 0x02D8, 0x02DF },
-+ { 0x02D8, 0x02DB },
-+ { 0x02DD, 0x02DD },
-+ { 0x02DF, 0x02DF },
- { 0x0300, 0x036F },
-- { 0x0391, 0x03A9 },
-- { 0x03B1, 0x03C9 },
-+ { 0x0391, 0x03A1 },
-+ { 0x03A3, 0x03A9 },
-+ { 0x03B1, 0x03C1 },
-+ { 0x03C3, 0x03C9 },
- { 0x0401, 0x0401 },
-- { 0x0410, 0x0451 },
-+ { 0x0410, 0x044F },
-+ { 0x0451, 0x0451 },
- { 0x2010, 0x2010 },
-- { 0x2013, 0x2019 },
-+ { 0x2013, 0x2016 },
-+ { 0x2018, 0x2019 },
- { 0x201C, 0x201D },
-- { 0x2020, 0x2027 },
-- { 0x2030, 0x2035 },
-+ { 0x2020, 0x2022 },
-+ { 0x2024, 0x2027 },
-+ { 0x2030, 0x2030 },
-+ { 0x2032, 0x2033 },
-+ { 0x2035, 0x2035 },
- { 0x203B, 0x203B },
- { 0x203E, 0x203E },
- { 0x2074, 0x2074 },
-- { 0x207F, 0x2084 },
-+ { 0x207F, 0x207F },
-+ { 0x2081, 0x2084 },
- { 0x20AC, 0x20AC },
-- { 0x2103, 0x2105 },
-+ { 0x2103, 0x2103 },
-+ { 0x2105, 0x2105 },
- { 0x2109, 0x2109 },
- { 0x2113, 0x2113 },
- { 0x2116, 0x2116 },
-@@ -52,21 +84,28 @@ static wc_map ucs_ambwidth_map[] = {
- { 0x2126, 0x2126 },
- { 0x212B, 0x212B },
- { 0x2153, 0x2154 },
-- { 0x215B, 0x216B },
-+ { 0x215B, 0x215E },
-+ { 0x2160, 0x216B },
- { 0x2170, 0x2179 },
- { 0x2189, 0x2189 },
- { 0x2190, 0x2199 },
- { 0x21B8, 0x21B9 },
-- { 0x21D2, 0x21D4 },
-+ { 0x21D2, 0x21D2 },
-+ { 0x21D4, 0x21D4 },
- { 0x21E7, 0x21E7 },
-- { 0x2200, 0x2203 },
-+ { 0x2200, 0x2200 },
-+ { 0x2202, 0x2203 },
- { 0x2207, 0x2208 },
- { 0x220B, 0x220B },
-- { 0x220F, 0x2211 },
-+ { 0x220F, 0x220F },
-+ { 0x2211, 0x2211 },
- { 0x2215, 0x2215 },
- { 0x221A, 0x221A },
- { 0x221D, 0x2220 },
-- { 0x2223, 0x222E },
-+ { 0x2223, 0x2223 },
-+ { 0x2225, 0x2225 },
-+ { 0x2227, 0x222C },
-+ { 0x222E, 0x222E },
- { 0x2234, 0x2237 },
- { 0x223C, 0x223D },
- { 0x2248, 0x2248 },
-@@ -83,11 +122,13 @@ static wc_map ucs_ambwidth_map[] = {
- { 0x22A5, 0x22A5 },
- { 0x22BF, 0x22BF },
- { 0x2312, 0x2312 },
-- { 0x2460, 0x254B },
-+ { 0x2460, 0x24E9 },
-+ { 0x24EB, 0x254B },
- { 0x2550, 0x2573 },
- { 0x2580, 0x258F },
- { 0x2592, 0x2595 },
-- { 0x25A0, 0x25A9 },
-+ { 0x25A0, 0x25A1 },
-+ { 0x25A3, 0x25A9 },
- { 0x25B2, 0x25B3 },
- { 0x25B6, 0x25B7 },
- { 0x25BC, 0x25BD },
-@@ -101,12 +142,20 @@ static wc_map ucs_ambwidth_map[] = {
- { 0x2609, 0x2609 },
- { 0x260E, 0x260F },
- { 0x2614, 0x2615 },
-- { 0x261C, 0x261E },
-- { 0x2640, 0x2642 },
-- { 0x2660, 0x266F },
-+ { 0x261C, 0x261C },
-+ { 0x261E, 0x261E },
-+ { 0x2640, 0x2640 },
-+ { 0x2642, 0x2642 },
-+ { 0x2660, 0x2661 },
-+ { 0x2663, 0x2665 },
-+ { 0x2667, 0x266A },
-+ { 0x266C, 0x266D },
-+ { 0x266F, 0x266F },
- { 0x269E, 0x269F },
- { 0x26BE, 0x26BF },
-- { 0x26C4, 0x26E3 },
-+ { 0x26C4, 0x26CD },
-+ { 0x26CF, 0x26E1 },
-+ { 0x26E3, 0x26E3 },
- { 0x26E8, 0x26FF },
- { 0x273D, 0x273D },
- { 0x2757, 0x2757 },
diff --git a/debian/patches/360_libressl.patch b/debian/patches/360_libressl.patch
deleted file mode 100644
index 15d36f5..0000000
--- a/debian/patches/360_libressl.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Subject: Disable USE_EGD for LibreSSL
-Author: Vsevolod Stakhov <vsevolod@FreeBSD.org>
-Origin: https://bz-attachments.freebsd.org/attachment.cgi?id=144635
-Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191852
-Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191956
-
-diff --git a/config.h.in b/config.h.in
-index a4110ea..3b575e4 100644
---- a/config.h.in
-+++ b/config.h.in
-@@ -85,7 +85,7 @@
- #undef INET6
- #undef HAVE_SOCKLEN_T
- #undef HAVE_OLD_SS_FAMILY
--#define USE_EGD
-+#undef USE_EGD
- #define ENABLE_REMOVE_TRAILINGSPACES
- #undef MENU_THIN_FRAME
- #undef USE_RAW_SCROLL
diff --git a/debian/patches/370_gtk2-pkg-config.patch b/debian/patches/370_gtk2-pkg-config.patch
deleted file mode 100644
index 5714fc5..0000000
--- a/debian/patches/370_gtk2-pkg-config.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Subject: Assume defined PKG_CONFIG points right location when gtk2
-Author: OBATA Akio <obache@netbsd.org>
-Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-aa?rev=1.13&content-type=text/x-cvsweb-markup
-Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-ak?rev=1.1&content-type=text/x-cvsweb-markup
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index c1d112b..d768476 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -664,8 +664,6 @@ AC_DEFUN([AC_W3M_IMAGE],
- with_gtk2="yes"
- if test x"$PKG_CONFIG" = x; then
- PKG_CONFIG=pkg-config
-- else
-- PKG_CONFIG=:
- fi;;
- esac
- done
-diff --git a/configure b/configure
-index ec7f11e..b5adbb5 100755
---- a/configure
-+++ b/configure
-@@ -6826,8 +6826,6 @@ $as_echo "$with_imagelib" >&6; }
- with_gtk2="yes"
- if test x"$PKG_CONFIG" = x; then
- PKG_CONFIG=pkg-config
-- else
-- PKG_CONFIG=:
- fi;;
- esac
- done
diff --git a/debian/patches/380_tinfo.patch b/debian/patches/380_tinfo.patch
deleted file mode 100644
index 7eb1a24..0000000
--- a/debian/patches/380_tinfo.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-Subject: Add tinfo to with_termlib
-Author: Jeroen Roovers <jer@gentoo.org>
-Origin: https://504588.bugs.gentoo.org/attachment.cgi?id=372650
-Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=504588
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index d768476..94fcbb5 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -400,10 +400,10 @@ AC_DEFUN([AC_W3M_TERMLIB],
- AC_ARG_WITH(termlib,
- [ --with-termlib[=LIBS] terminal library
- LIBS is space separated list of:
-- terminfo mytinfo termcap ncurses curses],,
-+ terminfo mytinfo termcap tinfo ncurses curses],,
- [with_termlib="yes"])
- AC_MSG_RESULT($with_termlib)
-- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
-+ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses"
- for lib in $with_termlib; do
- AC_CHECK_LIB($lib, tgetent, [W3M_LIBS="$W3M_LIBS -l$lib"; break])
- done
-diff --git a/configure b/configure
-index b5adbb5..fd916fc 100755
---- a/configure
-+++ b/configure
-@@ -1490,7 +1490,7 @@ Optional Packages:
- --with-ssl=PREFIX support https protocol
- --with-termlib=LIBS terminal library
- LIBS is space separated list of:
-- terminfo mytinfo termcap ncurses curses
-+ terminfo mytinfo termcap tinfo ncurses curses
- --with-gc=PREFIX libgc PREFIX
-
- Some influential environment variables:
-@@ -7978,7 +7978,7 @@ fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_termlib" >&5
- $as_echo "$with_termlib" >&6; }
-- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
-+ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses"
- for lib in $with_termlib; do
- as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_tgetent" | $as_tr_sh`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$lib" >&5
diff --git a/debian/patches/390_gdk-pixbuf.patch b/debian/patches/390_gdk-pixbuf.patch
deleted file mode 100644
index eb6149f..0000000
--- a/debian/patches/390_gdk-pixbuf.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-Subject: Depend on gdk-pixbuf instead of gtk when gtk2
-Author: Naohiro Aota <naota@gentoo.org>
-Origin: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-gdk-pixbuf.patch?revision=1.1
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 94fcbb5..ec91797 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -706,8 +706,8 @@ AC_DEFUN([AC_W3M_IMAGE],
- IMGTARGETS="x11"
- AC_DEFINE(USE_GDKPIXBUF)
- AC_DEFINE(USE_GTK2)
-- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-- IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-+ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
-+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
- elif test x"$have_gdkpixbuf" = xyes; then
- AC_DEFINE(USE_W3MIMG_X11)
- IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
-@@ -741,8 +741,8 @@ AC_DEFUN([AC_W3M_IMAGE],
- IMGTARGETS="${IMGTARGETS} fb"
- AC_DEFINE(USE_GDKPIXBUF)
- AC_DEFINE(USE_GTK2)
-- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
-- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
-+ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`"
-+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`"
- elif test x"$have_gdkpixbuf" = xyes; then
- AC_DEFINE(USE_W3MIMG_FB)
- IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
-diff --git a/configure b/configure
-index fd916fc..4fdcd8e 100755
---- a/configure
-+++ b/configure
-@@ -6927,8 +6927,8 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >=
-
- $as_echo "#define USE_GTK2 1" >>confdefs.h
-
-- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-- IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-+ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
-+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
- elif test x"$have_gdkpixbuf" = xyes; then
- $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
-
-@@ -6972,8 +6972,8 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
-
- $as_echo "#define USE_GTK2 1" >>confdefs.h
-
-- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
-- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
-+ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`"
-+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`"
- elif test x"$have_gdkpixbuf" = xyes; then
- $as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h
-
-diff --git a/w3mimg/fb/fb_gdkpixbuf.c b/w3mimg/fb/fb_gdkpixbuf.c
-index 36e3b62..f1e8d97 100644
---- a/w3mimg/fb/fb_gdkpixbuf.c
-+++ b/w3mimg/fb/fb_gdkpixbuf.c
-@@ -6,7 +6,7 @@
- #include "config.h"
- #if defined(USE_GTK2)
- #include <glib-object.h>
--#include <gdk/gdk.h>
-+#include <gdk-pixbuf/gdk-pixbuf.h>
- #endif
- #include <gdk-pixbuf/gdk-pixbuf.h>
- #include "fb.h"
-diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c
-index f5be4a8..cef72e2 100644
---- a/w3mimg/x11/x11_w3mimg.c
-+++ b/w3mimg/x11/x11_w3mimg.c
-@@ -14,7 +14,7 @@
- #elif defined(USE_GDKPIXBUF)
- #if defined(USE_GTK2)
- #include <glib-object.h>
--#include <gdk/gdk.h>
-+#include <gdk-pixbuf/gdk-pixbuf.h>
- #include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
- #else
- #include <gdk-pixbuf/gdk-pixbuf-xlib.h>
diff --git a/debian/patches/400_w3m-img-freebsd.patch b/debian/patches/400_w3m-img-freebsd.patch
deleted file mode 100644
index b6f0677..0000000
--- a/debian/patches/400_w3m-img-freebsd.patch
+++ /dev/null
@@ -1,831 +0,0 @@
-Subject: Support FreeBSD framebuffer
-Author: Yusuke Baba <babayaga1@y8.dion.ne.jp>
-Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html
-Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index ec91797..675cabe 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -600,7 +600,7 @@ AC_DEFUN([AC_W3M_IMAGE],
- if test x"$enable_image" = xyes; then
- enable_image=x11
- case "`uname -s`" in
-- Linux|linux|LINUX)
-+ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD)
- if test -c /dev/fb0; then
- enable_image=x11,fb
- fi;;
-diff --git a/configure b/configure
-index 4fdcd8e..2ba82d5 100755
---- a/configure
-+++ b/configure
-@@ -6755,7 +6755,7 @@ $as_echo "$enable_image" >&6; }
- if test x"$enable_image" = xyes; then
- enable_image=x11
- case "`uname -s`" in
-- Linux|linux|LINUX)
-+ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD)
- if test -c /dev/fb0; then
- enable_image=x11,fb
- fi;;
-diff --git a/w3mimg/fb/fb.c b/w3mimg/fb/fb.c
-index cd11128..7b6f23b 100644
---- a/w3mimg/fb/fb.c
-+++ b/w3mimg/fb/fb.c
-@@ -12,12 +12,24 @@
- #include <errno.h>
- #include <sys/ioctl.h>
- #include <sys/mman.h>
-+#if defined(__linux__)
- #include <linux/fb.h>
-+#elif defined(__FreeBSD__)
-+#include <sys/fbio.h>
-+#endif
-+#if defined(__FreeBSD__)
-+#include <sys/types.h>
-+#include <machine/param.h>
-+#endif
-
- #include "fb.h"
-
- #define FB_ENV "FRAMEBUFFER"
-+#if defined(__linux__)
- #define FB_DEFDEV "/dev/fb0"
-+#elif defined(__FreeBSD__)
-+#define FB_DEFDEV "/dev/ttyv0"
-+#endif
-
- #define MONO_OFFSET_8BIT 0x40
- #define COLORS_MONO_8BIT 0x40
-@@ -38,22 +50,65 @@
-
- #define IMAGE_SIZE_MAX 10000
-
-+#if defined(__linux__)
- static struct fb_cmap *fb_cmap_create(struct fb_fix_screeninfo *,
- struct fb_var_screeninfo *);
-+#elif defined(__FreeBSD__)
-+static video_color_palette_t *fb_cmap_create(video_info_t *video_info,
-+ video_adapter_info_t *video_adapter_info);
-+#endif
-+#if defined(__linux__)
- static void fb_cmap_destroy(struct fb_cmap *cmap);
-+#elif defined(__FreeBSD__)
-+static void fb_cmap_destroy(video_color_palette_t *cmap);
-+#endif
-+#if defined(__linux__)
- static int fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo);
-+#endif
-+#if defined(__linux__)
- static void *fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo);
-+#elif defined(__FreeBSD__)
-+static void *fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info);
-+#endif
-+#if defined(__linux__)
- static int fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo);
-+#elif defined(__FreeBSD__)
-+static int fb_munmap(void *buf, video_adapter_info_t *video_adapter_info);
-+#endif
-+#if defined(__linux__)
- static int fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo);
-+#endif
-+#if defined(__linux__)
- static int fb_cmap_set(int fbfp, struct fb_cmap *cmap);
-+#elif defined(__FreeBSD__)
-+static int fb_cmap_set(int fbfp, video_color_palette_t *cmap);
-+#endif
-+#if defined(__linux__)
- static int fb_cmap_get(int fbfp, struct fb_cmap *cmap);
-+#elif defined(__FreeBSD__)
-+static int fb_cmap_get(int fbfp, video_color_palette_t *cmap);
-+#endif
- static int fb_cmap_init(void);
- static int fb_get_cmap_index(int r, int g, int b);
- static unsigned long fb_get_packed_color(int r, int g, int b);
-+#if defined(__FreeBSD__)
-+static int fb_video_mode_get(int fbfp, int *video_mode);
-+static int fb_video_info_get(int fbfp, video_info_t *video_info);
-+static int fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info);
-+#endif
-
-+#if defined(__linux__)
- static struct fb_fix_screeninfo fscinfo;
- static struct fb_var_screeninfo vscinfo;
-+#elif defined(__FreeBSD__)
-+static video_info_t video_info;
-+static video_adapter_info_t video_adapter_info;
-+#endif
-+#if defined(__linux__)
- static struct fb_cmap *cmap = NULL, *cmap_org = NULL;
-+#elif defined(__FreeBSD__)
-+static video_color_palette_t *cmap = NULL, *cmap_org = NULL;
-+#endif
- static int is_open = FALSE;
- static int fbfp = -1;
- static size_t pixel_size = 0;
-@@ -63,6 +118,9 @@ int
- fb_open(void)
- {
- char *fbdev = { FB_DEFDEV };
-+#if defined(__FreeBSD__)
-+ int video_mode;
-+#endif
-
- if (is_open == TRUE)
- return 1;
-@@ -76,6 +134,7 @@ fb_open(void)
- goto ERR_END;
- }
-
-+#if defined(__linux__)
- if (fb_fscrn_get(fbfp, &fscinfo)) {
- goto ERR_END;
- }
-@@ -83,22 +142,67 @@ fb_open(void)
- if (fb_vscrn_get(fbfp, &vscinfo)) {
- goto ERR_END;
- }
-+#elif defined(__FreeBSD__)
-+ if (fb_video_mode_get(fbfp, &video_mode)) {
-+ goto ERR_END;
-+ }
-+ video_info.vi_mode = video_mode;
-+
-+ if (fb_video_info_get(fbfp, &video_info)) {
-+ goto ERR_END;
-+ }
-
-+ if (fb_video_adapter_info_get(fbfp, &video_adapter_info)) {
-+ goto ERR_END;
-+ }
-+ if (!(video_info.vi_flags & V_INFO_GRAPHICS) ||
-+ !(video_info.vi_flags & V_INFO_LINEAR)) {
-+ goto ERR_END;
-+ }
-+#endif
-+
-+#if defined(__linux__)
- if ((cmap = fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) {
- goto ERR_END;
- }
-+#elif defined(__FreeBSD__)
-+ if ((cmap = fb_cmap_create(&video_info, &video_adapter_info)) == (video_color_palette_t *)-1) {
-+ goto ERR_END;
-+ }
-+#endif
-
-+#if defined(__linux__)
- if (!(buf = fb_mmap(fbfp, &fscinfo))) {
- fprintf(stderr, "Can't allocate memory.\n");
- goto ERR_END;
- }
-+#elif defined(__FreeBSD__)
-+ if (!(buf = fb_mmap(fbfp, &video_adapter_info))) {
-+ fprintf(stderr, "Can't allocate memory.\n");
-+ goto ERR_END;
-+ }
-+#endif
-
-+#if defined(__linux__)
- if (fscinfo.type != FB_TYPE_PACKED_PIXELS) {
- fprintf(stderr, "This type of framebuffer is not supported.\n");
- goto ERR_END;
- }
-+#elif defined(__FreeBSD__)
-+ if (!(video_info.vi_mem_model == V_INFO_MM_PACKED ||
-+ video_info.vi_mem_model == V_INFO_MM_DIRECT)) {
-+ fprintf(stderr, "This type of framebuffer is not supported.\n");
-+ goto ERR_END;
-+ }
-+#endif
-
-+#if defined(__linux__)
- if (fscinfo.visual == FB_VISUAL_PSEUDOCOLOR && vscinfo.bits_per_pixel == 8) {
-+#elif defined(__FreeBSD__)
-+ if (video_adapter_info.va_flags & V_ADP_PALETTE &&
-+ video_info.vi_mem_model == V_INFO_MM_PACKED &&
-+ video_info.vi_depth == 8) {
-+#endif
- if (fb_cmap_get(fbfp, cmap)) {
- fprintf(stderr, "Can't get color map.\n");
- fb_cmap_destroy(cmap);
-@@ -111,12 +215,20 @@ fb_open(void)
-
- pixel_size = 1;
- }
-+#if defined(__linux__)
- else if ((fscinfo.visual == FB_VISUAL_TRUECOLOR ||
- fscinfo.visual == FB_VISUAL_DIRECTCOLOR) &&
- (vscinfo.bits_per_pixel == 15 ||
- vscinfo.bits_per_pixel == 16 ||
- vscinfo.bits_per_pixel == 24 || vscinfo.bits_per_pixel == 32)) {
- pixel_size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT;
-+#elif defined(__FreeBSD__)
-+ else if (video_info.vi_mem_model == V_INFO_MM_DIRECT &&
-+ (video_info.vi_depth == 15 ||
-+ video_info.vi_depth == 16 ||
-+ video_info.vi_depth == 24 || video_info.vi_depth == 32)) {
-+ pixel_size = (video_info.vi_depth + 7) / CHAR_BIT;
-+#endif
- }
- else {
- fprintf(stderr, "This type of framebuffer is not supported.\n");
-@@ -147,7 +259,11 @@ fb_close(void)
- cmap = NULL;
- }
- if (buf != NULL) {
-+#if defined(__linux__)
- fb_munmap(buf, &fscinfo);
-+#elif defined(__FreeBSD__)
-+ fb_munmap(buf, &video_adapter_info);
-+#endif
- buf = NULL;
- }
-
-@@ -259,11 +375,19 @@ fb_image_draw(FB_IMAGE * image, int x, int y, int sx, int sy, int width,
- if (y + height > fb_height())
- height = fb_height() - y;
-
-+#if defined(__linux__)
- offset_fb = fscinfo.line_length * y + pixel_size * x;
-+#elif defined(__FreeBSD__)
-+ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x;
-+#endif
- offset_img = image->rowstride * sy + pixel_size * sx;
- for (i = 0; i < height; i++) {
- memcpy(buf + offset_fb, image->data + offset_img, pixel_size * width);
-+#if defined(__linux__)
- offset_fb += fscinfo.line_length;
-+#elif defined(__FreeBSD__)
-+ offset_fb += video_adapter_info.va_line_width;
-+#endif
- offset_img += image->rowstride;
- }
-
-@@ -336,7 +460,11 @@ fb_width(void)
- if (is_open != TRUE)
- return 0;
-
-+#if defined(__linux__)
- return vscinfo.xres;
-+#elif defined(__FreeBSD__)
-+ return video_info.vi_width;
-+#endif
- }
-
- int
-@@ -345,7 +473,11 @@ fb_height(void)
- if (is_open != TRUE)
- return 0;
-
-+#if defined(__linux__)
- return vscinfo.yres;
-+#elif defined(__FreeBSD__)
-+ return video_info.vi_height;
-+#endif
- }
-
- int
-@@ -369,7 +501,11 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b)
- h = fb_height() - y;
-
- if (tmp == NULL) {
-+#if defined(__linux__)
- tmp = malloc(fscinfo.line_length);
-+#elif defined(__FreeBSD__)
-+ tmp = malloc(video_adapter_info.va_line_width);
-+#endif
- if (tmp == NULL)
- return 1;
- }
-@@ -384,10 +520,18 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b)
- gg = g;
- bb = b;
- }
-+#if defined(__linux__)
- offset_fb = fscinfo.line_length * y + pixel_size * x;
-+#elif defined(__FreeBSD__)
-+ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x;
-+#endif
- for (i = 0; i < h; i++) {
- memcpy(buf + offset_fb, tmp, pixel_size * w);
-+#if defined(__linux__)
- offset_fb += fscinfo.line_length;
-+#elif defined(__FreeBSD__)
-+ offset_fb += video_adapter_info.va_line_width;
-+#endif
- }
- return 0;
- }
-@@ -400,11 +544,21 @@ fb_get_packed_color(int r, int g, int b)
- return fb_get_cmap_index(r, g, b);
- }
- else {
-+#if defined(__linux__)
- return
- ((r >> (CHAR_BIT - vscinfo.red.length)) << vscinfo.red.offset) +
- ((g >> (CHAR_BIT - vscinfo.green.length)) << vscinfo.green.
- offset) +
- ((b >> (CHAR_BIT - vscinfo.blue.length)) << vscinfo.blue.offset);
-+#elif defined(__FreeBSD__)
-+ return
-+ ((r >> (CHAR_BIT - video_info.vi_pixel_fsizes[0])) <<
-+ video_info.vi_pixel_fields[0]) +
-+ ((g >> (CHAR_BIT - video_info.vi_pixel_fsizes[1])) <<
-+ video_info.vi_pixel_fields[1]) +
-+ ((b >> (CHAR_BIT - video_info.vi_pixel_fsizes[2])) <<
-+ video_info.vi_pixel_fields[2]);
-+#endif
- }
- }
-
-@@ -433,16 +587,31 @@ fb_cmap_init(void)
- if (cmap == NULL)
- return 1;
-
-+#if defined(__linux__)
- if (cmap->len < COLOR_OFFSET_8BIT + COLORS_8BIT) {
- fprintf(stderr, "Can't allocate enough color.\n");
- return 1;
- }
-+#elif defined(__FreeBSD__)
-+ if (cmap->count < COLOR_OFFSET_8BIT + COLORS_8BIT) {
-+ fprintf(stderr, "Can't allocate enough color.\n");
-+ return 1;
-+ }
-+#endif
-
- if (cmap_org == NULL) {
-+#if defined(__linux__)
- if ((cmap_org =
- fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) {
- return 1;
- }
-+#elif defined(__FreeBSD__)
-+ if ((cmap_org =
-+ fb_cmap_create(&video_info, &video_adapter_info)) ==
-+ (video_color_palette_t *)-1) {
-+ return 1;
-+ }
-+#endif
-
- if (fb_cmap_get(fbfp, cmap_org)) {
- fprintf(stderr, "Can't get color map.\n");
-@@ -452,8 +621,13 @@ fb_cmap_init(void)
- }
- }
-
-+#if defined(__linux__)
- cmap->start = MONO_OFFSET_8BIT;
- cmap->len = COLORS_8BIT + COLORS_MONO_8BIT;
-+#elif defined(__FreeBSD__)
-+ cmap->index = MONO_OFFSET_8BIT;
-+ cmap->count = COLORS_8BIT + COLORS_MONO_8BIT;
-+#endif
-
- for (lp = 0; lp < COLORS_MONO_8BIT; lp++) {
- int c;
-@@ -506,73 +680,213 @@ fb_cmap_init(void)
-
- #define LUT_MAX (256)
-
-+#if defined(__linux__)
- static struct fb_cmap *
- fb_cmap_create(struct fb_fix_screeninfo *fscinfo,
- struct fb_var_screeninfo *vscinfo)
-+#elif defined(__FreeBSD__)
-+static video_color_palette_t *
-+fb_cmap_create(video_info_t *video_info,
-+ video_adapter_info_t *video_adapter_info)
-+#endif
- {
-+#if defined(__linux__)
- struct fb_cmap *cmap;
-+#elif defined(__FreeBSD__)
-+ video_color_palette_t *cmap;
-+#endif
- int cmaplen = LUT_MAX;
-
- /* check the existence of colormap */
-+#if defined(__linux__)
- if (fscinfo->visual == FB_VISUAL_MONO01 ||
- fscinfo->visual == FB_VISUAL_MONO10 ||
- fscinfo->visual == FB_VISUAL_TRUECOLOR)
- return NULL;
-+#elif defined(__FreeBSD__)
-+ if (!(video_adapter_info->va_flags & V_ADP_PALETTE))
-+ return NULL;
-+#endif
-
-+#if defined(__linux__)
- cmap = (struct fb_cmap *)malloc(sizeof(struct fb_cmap));
-+#elif defined(__FreeBSD__)
-+ cmap = (video_color_palette_t *)malloc(sizeof(video_color_palette_t));
-+#endif
- if (!cmap) {
- perror("cmap malloc error\n");
-+#if defined(__linux__)
- return (struct fb_cmap *)-1;
-+#elif defined(__FreeBSD__)
-+ return (video_color_palette_t *)-1;
-+#endif
- }
-+#if defined(__linux__)
- memset(cmap, 0, sizeof(struct fb_cmap));
-+#elif defined(__FreeBSD__)
-+ memset(cmap, 0, sizeof(video_color_palette_t));
-+#endif
-+
-+#if defined(__FreeBSD__)
-+ if (video_info->vi_mem_model == V_INFO_MM_PACKED) {
-+ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen);
-+ if (!cmap->red) {
-+ perror("red lut malloc error\n");
-+ return (video_color_palette_t *)-1;
-+ }
-+ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen);
-+ if (!cmap->green) {
-+ perror("green lut malloc error\n");
-+ free(cmap->red);
-+ return (video_color_palette_t *)-1;
-+ }
-+ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen);
-+ if (!cmap->blue) {
-+ perror("blue lut malloc error\n");
-+ free(cmap->red);
-+ free(cmap->green);
-+ return (video_color_palette_t *)-1;
-+ }
-+ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen);
-+ if (!cmap->transparent) {
-+ perror("transparent lut malloc error\n");
-+ free(cmap->red);
-+ free(cmap->green);
-+ free(cmap->blue);
-+ return (video_color_palette_t *)-1;
-+ }
-+ cmap->count = cmaplen;
-+ return cmap;
-+ }
-+#endif
-
- /* Allocates memory for a colormap */
-+#if defined(__linux__)
- if (vscinfo->red.length) {
- cmap->red = (__u16 *) malloc(sizeof(__u16) * cmaplen);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[0]) {
-+ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen);
-+#endif
- if (!cmap->red) {
- perror("red lut malloc error\n");
-+#if defined(__linux__)
- return (struct fb_cmap *)-1;
-+#elif defined(__FreeBSD__)
-+ return (video_color_palette_t *)-1;
-+#endif
- }
- }
-+#if defined(__linux__)
- if (vscinfo->green.length) {
- cmap->green = (__u16 *) malloc(sizeof(__u16) * cmaplen);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[1]) {
-+ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen);
-+#endif
- if (!cmap->green) {
-+#if defined(__linux__)
- if (vscinfo->red.length)
- free(cmap->red);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[0])
-+ free(cmap->red);
-+#endif
- perror("green lut malloc error\n");
-+#if defined(__linux__)
- return (struct fb_cmap *)-1;
-+#elif defined(__FreeBSD__)
-+ return (video_color_palette_t *)-1;
-+#endif
- }
- }
-+#if defined(__linux__)
- if (vscinfo->blue.length) {
- cmap->blue = (__u16 *) malloc(sizeof(__u16) * cmaplen);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[2]) {
-+ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen);
-+#endif
- if (!cmap->blue) {
-+#if defined(__linux__)
- if (vscinfo->red.length)
- free(cmap->red);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[0])
-+ free(cmap->red);
-+#endif
-+#if defined(__linux__)
- if (vscinfo->green.length)
- free(cmap->green);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[1])
-+ free(cmap->green);
-+#endif
- perror("blue lut malloc error\n");
-+#if defined(__linux__)
- return (struct fb_cmap *)-1;
-+#elif defined(__FreeBSD__)
-+ return (video_color_palette_t *)-1;
-+#endif
- }
- }
-+#if defined(__linux__)
- if (vscinfo->transp.length) {
- cmap->transp = (__u16 *) malloc(sizeof(__u16) * cmaplen);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[3]) {
-+ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen);
-+#endif
-+#if defined(__linux__)
- if (!cmap->transp) {
-+#elif defined(__FreeBSD__)
-+ if (!cmap->transparent) {
-+#endif
-+#if defined(__linux__)
- if (vscinfo->red.length)
- free(cmap->red);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[0])
-+ free(cmap->red);
-+#endif
-+#if defined(__linux__)
- if (vscinfo->green.length)
- free(cmap->green);
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[1])
-+ free(cmap->green);
-+#endif
-+#if defined(__linux__)
- if (vscinfo->blue.length)
- free(cmap->blue);
- perror("transp lut malloc error\n");
-+#elif defined(__FreeBSD__)
-+ if (video_info->vi_pixel_fsizes[2])
-+ free(cmap->blue);
-+ perror("transparent lut malloc error\n");
-+#endif
-+#if defined(__linux__)
- return (struct fb_cmap *)-1;
-+#elif defined(__FreeBSD__)
-+ return (video_color_palette_t *)-1;
-+#endif
- }
- }
-+#if defined(__linux__)
- cmap->len = cmaplen;
-+#elif defined(__FreeBSD__)
-+ cmap->count = cmaplen;
-+#endif
- return cmap;
- }
-
-+#if defined(__linux__)
- static void
- fb_cmap_destroy(struct fb_cmap *cmap)
-+#elif defined(__FreeBSD__)
-+static void
-+fb_cmap_destroy(video_color_palette_t *cmap)
-+#endif
- {
- if (cmap->red)
- free(cmap->red);
-@@ -580,28 +894,57 @@ fb_cmap_destroy(struct fb_cmap *cmap)
- free(cmap->green);
- if (cmap->blue)
- free(cmap->blue);
-+#if defined(__linux__)
- if (cmap->transp)
- free(cmap->transp);
-+#elif defined(__FreeBSD__)
-+ if (cmap->transparent)
-+ free(cmap->transparent);
-+#endif
- free(cmap);
- }
-
-+#if defined(__linux__)
- static int
- fb_cmap_get(int fbfp, struct fb_cmap *cmap)
-+#elif defined(__FreeBSD__)
-+static int
-+fb_cmap_get(int fbfp, video_color_palette_t *cmap)
-+#endif
- {
-+#if defined(__linux__)
- if (ioctl(fbfp, FBIOGETCMAP, cmap)) {
- perror("ioctl FBIOGETCMAP error\n");
- return -1;
- }
-+#elif defined(__FreeBSD__)
-+ if (ioctl(fbfp, FBIO_GETPALETTE, cmap) == -1) {
-+ perror("ioctl FBIO_GETPALETTE error\n");
-+ return -1;
-+ }
-+#endif
- return 0;
- }
-
-+#if defined(__linux__)
- static int
- fb_cmap_set(int fbfp, struct fb_cmap *cmap)
-+#elif defined(__FreeBSD__)
-+static int
-+fb_cmap_set(int fbfp, video_color_palette_t *cmap)
-+#endif
- {
-+#if defined(__linux__)
- if (ioctl(fbfp, FBIOPUTCMAP, cmap)) {
- perror("ioctl FBIOPUTCMAP error\n");
- return -1;
- }
-+#elif defined(__FreeBSD__)
-+ if (ioctl(fbfp, FBIO_SETPALETTE, cmap) == -1) {
-+ perror("ioctl FBIO_SETPALETTE error\n");
-+ return -1;
-+ }
-+#endif
- return 0;
- }
-
-@@ -612,10 +955,16 @@ fb_cmap_set(int fbfp, struct fb_cmap *cmap)
- * fb_munmap() deletes the mappings
- */
-
-+#if defined(__linux__)
- static void *
- fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo)
-+#elif defined(__FreeBSD__)
-+static void *
-+fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info)
-+#endif
- {
- void *buf;
-+#if defined(__linux__)
- if ((buf = (unsigned char *)
- mmap(NULL, scinfo->smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp,
- (off_t) 0))
-@@ -623,13 +972,41 @@ fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo)
- perror("mmap error");
- return NULL;
- }
-+#elif defined(__FreeBSD__)
-+ size_t mmap_offset;
-+ size_t mmap_length;
-+ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK);
-+ mmap_length = (size_t)(video_adapter_info->va_window_size +
-+ mmap_offset + PAGE_MASK) & (~PAGE_MASK);
-+ if ((buf = (unsigned char *)
-+ mmap(NULL, mmap_length, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp,
-+ (off_t) 0))
-+ == MAP_FAILED) {
-+ perror("mmap error");
-+ return NULL;
-+ }
-+#endif
- return buf;
- }
-
-+#if defined(__linux__)
- static int
- fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo)
-+#elif defined(__FreeBSD__)
-+static int
-+fb_munmap(void *buf, video_adapter_info_t *video_adapter_info)
-+#endif
- {
-+#if defined(__linux__)
- return munmap(buf, scinfo->smem_len);
-+#elif defined(__FreeBSD__)
-+ size_t mmap_offset;
-+ size_t mmap_length;
-+ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK);
-+ mmap_length = (size_t)(video_adapter_info->va_window_size +
-+ mmap_offset + PAGE_MASK) & (~PAGE_MASK);
-+ return munmap((void *)((u_long)buf & (~PAGE_MASK)), mmap_length);
-+#endif
- }
-
- /*
-@@ -637,6 +1014,7 @@ fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo)
- *
- * fb_fscrn_get() get information
- */
-+#if defined(__linux__)
- static int
- fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo)
- {
-@@ -646,12 +1024,14 @@ fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo)
- }
- return 0;
- }
-+#endif
-
- /*
- * (struct fb_var_screeninfo) device independent variable information
- *
- * fb_vscrn_get() get information
- */
-+#if defined(__linux__)
- static int
- fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo)
- {
-@@ -661,3 +1041,41 @@ fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo)
- }
- return 0;
- }
-+#endif
-+
-+#if defined(__FreeBSD__)
-+static int
-+fb_video_mode_get(int fbfp, int *video_mode)
-+{
-+ if (ioctl(fbfp, FBIO_GETMODE, video_mode) == -1) {
-+ perror("ioctl FBIO_GETMODE error\n");
-+ return -1;
-+ }
-+ return 0;
-+}
-+#endif
-+
-+#if defined(__FreeBSD__)
-+static int
-+fb_video_info_get(int fbfp, video_info_t *video_info)
-+{
-+ if (ioctl(fbfp, FBIO_MODEINFO, video_info) == -1) {
-+ perror("ioctl FBIO_MODEINFO error\n");
-+ return -1;
-+ }
-+ return 0;
-+}
-+#endif
-+
-+#if defined(__FreeBSD__)
-+static int
-+fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info)
-+{
-+ if (ioctl(fbfp, FBIO_ADPINFO, video_adapter_info) == -1) {
-+ perror("ioctl FBIO_ADPINFO error\n");
-+ return -1;
-+ }
-+ return 0;
-+}
-+#endif
-+
-diff --git a/w3mimg/fb/fb.h b/w3mimg/fb/fb.h
-index 1138bb0..5d86454 100644
---- a/w3mimg/fb/fb.h
-+++ b/w3mimg/fb/fb.h
-@@ -1,7 +1,11 @@
- /* $Id: fb.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */
- #ifndef fb_header
- #define fb_header
-+#if defined(__linux__)
- #include <linux/fb.h>
-+#elif defined(__FreeBSD__)
-+#include <sys/fbio.h>
-+#endif
-
- typedef struct {
- int num;
-diff --git a/w3mimg/fb/fb_w3mimg.c b/w3mimg/fb/fb_w3mimg.c
-index d3ae5a9..fb323f5 100644
---- a/w3mimg/fb/fb_w3mimg.c
-+++ b/w3mimg/fb/fb_w3mimg.c
-@@ -153,10 +153,15 @@ check_tty_console(char *tty)
- return 0;
- if (strncmp(tty, "/dev/", 5) == 0)
- tty += 5;
-+#if defined(__linux__)
- if (strncmp(tty, "tty", 3) == 0 && isdigit(*(tty + 3)))
- return 1;
- if (strncmp(tty, "vc/", 3) == 0 && isdigit(*(tty + 3)))
- return 1;
-+#elif defined(__FreeBSD__)
-+ if (strncmp(tty, "ttyv", 4) == 0 && isxdigit(*(tty + 4)))
-+ return 1;
-+#endif
- return 0;
- }
- #else
-@@ -172,7 +177,9 @@ w3mimg_fbopen()
- return NULL;
- memset(wop, 0, sizeof(w3mimg_op));
-
-- if (!check_tty_console(getenv("W3M_TTY")) && strcmp("jfbterm", getenv("TERM")) != 0) {
-+ if (!check_tty_console(getenv("W3M_TTY")) &&
-+ strcmp("jfbterm", getenv("TERM")) != 0 &&
-+ strncmp("jfbterm-", getenv("TERM"), 8) != 0) {
- fprintf(stderr, "w3mimgdisplay/fb: tty is not console\n");
- goto error;
- }
diff --git a/debian/patches/410_textarea-segfault.patch b/debian/patches/410_textarea-segfault.patch
deleted file mode 100644
index 5322c75..0000000
--- a/debian/patches/410_textarea-segfault.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Subject: Prevent segfault when editing a textarea field with vi
-Author: Peter Poeml <poeml@suse.de>
-Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.4.1-textarea-segfault.dif?expand=1
-
- add fix for segfault that can occur when editing a textarea field
- with vi, and returning to w3m (it seems to happen if the terminal
- is not writable, as when using w3m after 'su - some_user')
-
-diff --git a/terms.c b/terms.c
-index ca81d28..672262c 100644
---- a/terms.c
-+++ b/terms.c
-@@ -637,7 +637,8 @@ reset_tty(void)
- writestr(T_se); /* reset terminal */
- flush_tty();
- TerminalSet(tty, &d_ioval);
-- close_tty();
-+ if (tty != 2)
-+ close_tty();
- }
-
- static MySignalHandler
diff --git a/debian/patches/420_uninitialized.patch b/debian/patches/420_uninitialized.patch
deleted file mode 100644
index d1ee41d..0000000
--- a/debian/patches/420_uninitialized.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-Subject: Fix a few harmless uninitialized variables
-Author: Olaf Hering <olh@suse.de>
-Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-uninitialized.patch?expand=1
-
-diff --git a/anchor.c b/anchor.c
-index 39f221d..a353bb9 100644
---- a/anchor.c
-+++ b/anchor.c
-@@ -11,7 +11,7 @@ putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return,
- {
- int n, i, j;
- Anchor *a;
-- BufferPoint bp;
-+ BufferPoint bp = { 0 };
- if (al == NULL) {
- al = New(AnchorList);
- al->anchors = NULL;
-diff --git a/libwc/gb18030.c b/libwc/gb18030.c
-index c195d49..d5c9018 100644
---- a/libwc/gb18030.c
-+++ b/libwc/gb18030.c
-@@ -151,6 +151,7 @@ wc_ucs_to_gb18030(wc_uint32 ucs)
- return cc;
- }
- cc.ccs = WC_CCS_UNKNOWN;
-+ cc.code = 0;
- return cc;
- }
- #endif
-diff --git a/libwc/ucs.c b/libwc/ucs.c
-index d7b6948..5e78b4e 100644
---- a/libwc/ucs.c
-+++ b/libwc/ucs.c
-@@ -100,6 +100,7 @@ wc_ucs_to_any(wc_uint32 ucs, wc_table *t)
- return t->conv(t->ccs, map->code2);
- }
- cc.ccs = WC_CCS_UNKNOWN;
-+ cc.code = 0;
- return cc;
- }
-
-diff --git a/regex.c b/regex.c
-index 5bee4b2..5675d09 100644
---- a/regex.c
-+++ b/regex.c
-@@ -77,7 +77,7 @@ static longchar
- set_longchar(char *str)
- {
- unsigned char *p = (unsigned char *)str;
-- longchar r;
-+ longchar r = { };
-
- #ifdef USE_M17N
- if (*p & 0x80) {
diff --git a/debian/patches/430_no-ascii-default.patch b/debian/patches/430_no-ascii-default.patch
deleted file mode 100644
index 83d196f..0000000
--- a/debian/patches/430_no-ascii-default.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Subject: Change the default to alt_entity=0
-Author: Olaf Dabrunz <od@suse.de>
-Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.5.1-no-ASCII-equivalents-by-default.patch?expand=1
-Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=247397
-
- change the default for the option "Use ASCII equivalents to
- display entities" from YES to NO.
-
-diff --git a/fm.h b/fm.h
-index 149a02f..49af0e4 100644
---- a/fm.h
-+++ b/fm.h
-@@ -1089,7 +1089,7 @@ global char SimplePreserveSpace init(FALSE);
- #define wc_Str_conv(x,charset0,charset1) (x)
- #define wc_Str_conv_strict(x,charset0,charset1) (x)
- #endif
--global char UseAltEntity init(TRUE);
-+global char UseAltEntity init(FALSE);
- #define GRAPHIC_CHAR_ASCII 2
- #define GRAPHIC_CHAR_DEC 1
- #define GRAPHIC_CHAR_CHARSET 0
diff --git a/debian/patches/440_parsetagx-crash.patch b/debian/patches/440_parsetagx-crash.patch
deleted file mode 100644
index 08c570e..0000000
--- a/debian/patches/440_parsetagx-crash.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Subject: Fix crash in parse_tag() during every start
-Author: Olaf Hering <olh@suse.de>
-Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-parsetagx-crash.patch?expand=1
-
-diff --git a/parsetagx.c b/parsetagx.c
-index 6b627d2..3435f9f 100644
---- a/parsetagx.c
-+++ b/parsetagx.c
-@@ -221,6 +221,7 @@ parse_tag(char **s, int internal)
- int j, hidden=FALSE;
- for (j=0; j<i; j++) {
- if (tag->attrid[j] == ATTR_TYPE &&
-+ tag->value[j] &&
- strcmp("hidden",tag->value[j]) == 0) {
- hidden=TRUE;
- break;
diff --git a/debian/patches/450_remoteimg.patch b/debian/patches/450_remoteimg.patch
deleted file mode 100644
index 0298e46..0000000
--- a/debian/patches/450_remoteimg.patch
+++ /dev/null
@@ -1,936 +0,0 @@
-Subject: Support OSC 5379 remote imaging and sixel graphics
-Author: Araki Ken <arakiken@users.sf.net>
-Origin: https://bitbucket.org/arakiken/w3m/branch/remoteimg
-
-diff --git a/display.c b/display.c
-index 2fe1183..d4f336a 100644
---- a/display.c
-+++ b/display.c
-@@ -487,7 +487,7 @@ displayBuffer(Buffer *buf, int mode)
- term_title(conv_to_system(buf->buffername));
- refresh();
- #ifdef USE_IMAGE
-- if (activeImage && displayImage && buf->img) {
-+ if (activeImage && displayImage && buf->img && buf->image_loaded) {
- drawImage();
- }
- #endif
-@@ -521,7 +521,15 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq,
- break;
- }
- if (hseq >= 0 && an->hseq == hseq) {
-+ int start_pos = an->start.pos;
-+ int end_pos = an->end.pos;
- for (i = an->start.pos; i < an->end.pos; i++) {
-+ if (enable_inline_image && (l->propBuf[i] & PE_IMAGE)) {
-+ if (start_pos == i)
-+ start_pos = i + 1;
-+ else if (end_pos == an->end.pos)
-+ end_pos = i - 1;
-+ }
- if (l->propBuf[i] & (PE_IMAGE | PE_ANCHOR | PE_FORM)) {
- if (active)
- l->propBuf[i] |= PE_ACTIVE;
-@@ -529,9 +537,9 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq,
- l->propBuf[i] &= ~PE_ACTIVE;
- }
- }
-- if (active)
-+ if (active && start_pos < end_pos)
- redrawLineRegion(buf, l, l->linenumber - tline + buf->rootY,
-- an->start.pos, an->end.pos);
-+ start_pos, end_pos);
- }
- else if (prevhseq >= 0 && an->hseq == prevhseq) {
- if (active)
-@@ -855,14 +863,16 @@ redrawLineImage(Buffer *buf, Line *l, int i)
- y = (int)(i * pixel_per_line);
- sx = (int)((rcol - COLPOS(l, a->start.pos)) * pixel_per_char);
- sy = (int)((l->linenumber - image->y) * pixel_per_line);
-- if (sx == 0 && x + image->xoffset >= 0)
-- x += image->xoffset;
-- else
-- sx -= image->xoffset;
-- if (sy == 0 && y + image->yoffset >= 0)
-- y += image->yoffset;
-- else
-- sy -= image->yoffset;
-+ if (! enable_inline_image) {
-+ if (sx == 0 && x + image->xoffset >= 0)
-+ x += image->xoffset;
-+ else
-+ sx -= image->xoffset;
-+ if (sy == 0 && y + image->yoffset >= 0)
-+ y += image->yoffset;
-+ else
-+ sy -= image->yoffset;
-+ }
- if (image->width > 0)
- w = image->width - sx;
- else
-diff --git a/doc/README.sixel b/doc/README.sixel
-new file mode 100644
-index 0000000..588afc4
---- /dev/null
-+++ b/doc/README.sixel
-@@ -0,0 +1,27 @@
-+Sixel support of w3m
-+ 2014/11/05
-+ K. Araki
-+
-+Introduction
-+
-+ This is the extension for w3m to show inline images by sixel graphics.
-+
-+Requirements
-+
-+ Install 'img2sixel' command provided by libsixel project.
-+ (https://github.com/saitoha/libsixel)
-+
-+Build
-+
-+ $ ./configure --enable-image ...
-+ $ make
-+ $ make install
-+
-+Usage
-+
-+ $ w3m -sixel http://...
-+
-+ You can specify options of 'img2sixel' command by "W3M_IMG2SIXEL"
-+ environmental variable.
-+
-+ $ W3M_IMG2SIXEL="img2sixel -d atkinson" w3m -sixel http://...
-diff --git a/etc.c b/etc.c
-index 8fe1215..dcc6edd 100644
---- a/etc.c
-+++ b/etc.c
-@@ -1365,7 +1365,13 @@ setup_child(int child, int i, int f)
- if (!child)
- SETPGRP();
- #endif /* __MINGW32_VERSION */
-+ /*
-+ * I don't know why but close_tty() sometimes interrupts loadGeneralFile() in loadImage()
-+ * and corrupt image data can be cached in ~/.w3m.
-+ */
-+#if 0
- close_tty();
-+#endif
- close_all_fds_except(i, f);
- QuietMessage = TRUE;
- fmInitialized = FALSE;
-diff --git a/file.c b/file.c
-index 1e363d0..709a0c1 100644
---- a/file.c
-+++ b/file.c
-@@ -3345,8 +3345,14 @@ process_img(struct parsed_tag *tag, int width)
- if (i < 0)
- i = pixel_per_line;
- }
-- nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
-- ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
-+ if (enable_inline_image) {
-+ nw = (w > 1) ? ((w - 1) / pixel_per_char_i + 1) : 1 ;
-+ ni = (i > 1) ? ((i - 1) / pixel_per_line_i + 1) : 1 ;
-+ }
-+ else {
-+ nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
-+ ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
-+ }
- Strcat(tmp,
- Sprintf("<pre_int><img_alt hseq=\"%d\" src=\"", cur_iseq++));
- pre_int = TRUE;
-@@ -3377,19 +3383,21 @@ process_img(struct parsed_tag *tag, int width)
- if (i0 >= 0)
- Strcat(tmp, Sprintf(" height=%d", i0));
- switch (align) {
-+ case ALIGN_MIDDLE:
-+ if (!enable_inline_image) {
-+ top = ni / 2;
-+ bottom = top;
-+ if (top * 2 == ni)
-+ yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
-+ else
-+ yoffset = (int)((ni * pixel_per_line - i) / 2);
-+ break;
-+ }
- case ALIGN_TOP:
- top = 0;
- bottom = ni - 1;
- yoffset = 0;
- break;
-- case ALIGN_MIDDLE:
-- top = ni / 2;
-- bottom = top;
-- if (top * 2 == ni)
-- yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
-- else
-- yoffset = (int)((ni * pixel_per_line - i) / 2);
-- break;
- case ALIGN_BOTTOM:
- top = ni - 1;
- bottom = 0;
-@@ -3407,7 +3415,12 @@ process_img(struct parsed_tag *tag, int width)
- }
- break;
- }
-- xoffset = (int)((nw * pixel_per_char - w) / 2);
-+
-+ if (enable_inline_image)
-+ xoffset = 0;
-+ else
-+ xoffset = (int)((nw * pixel_per_char - w) / 2);
-+
- if (xoffset)
- Strcat(tmp, Sprintf(" xoffset=%d", xoffset));
- if (yoffset)
-diff --git a/fm.h b/fm.h
-index 49af0e4..8f594dc 100644
---- a/fm.h
-+++ b/fm.h
-@@ -373,6 +373,8 @@ typedef struct _imageCache {
- int index;
- short width;
- short height;
-+ short a_width;
-+ short a_height;
- } ImageCache;
-
- typedef struct _image {
-@@ -919,6 +921,7 @@ global char *CurrentKeyData;
- global char *CurrentCmdData;
- global char *w3m_reqlog;
- extern char *w3m_version;
-+extern int enable_inline_image;
-
- #define DUMP_BUFFER 0x01
- #define DUMP_HEAD 0x02
-@@ -1174,9 +1177,11 @@ global char *ssl_forbid_method init("2, 3");
- global int is_redisplay init(FALSE);
- global int clear_buffer init(TRUE);
- global double pixel_per_char init(DEFAULT_PIXEL_PER_CHAR);
-+global int pixel_per_char_i init(DEFAULT_PIXEL_PER_CHAR);
- global int set_pixel_per_char init(FALSE);
- #ifdef USE_IMAGE
- global double pixel_per_line init(DEFAULT_PIXEL_PER_LINE);
-+global int pixel_per_line_i init(DEFAULT_PIXEL_PER_LINE);
- global int set_pixel_per_line init(FALSE);
- global double image_scale init(100);
- #endif
-diff --git a/image.c b/image.c
-index 9d0e9b5..91034ee 100644
---- a/image.c
-+++ b/image.c
-@@ -44,6 +44,8 @@ initImage()
- activeImage = TRUE;
- }
-
-+int get_pixel_per_cell(int *ppc, int *ppl);
-+
- int
- getCharSize()
- {
-@@ -52,6 +54,24 @@ getCharSize()
- int w = 0, h = 0;
-
- set_environ("W3M_TTY", ttyname_tty());
-+
-+ if (enable_inline_image) {
-+ int ppc, ppl;
-+
-+ if (get_pixel_per_cell(&ppc,&ppl)) {
-+ pixel_per_char_i = ppc ;
-+ pixel_per_line_i = ppl ;
-+ pixel_per_char = (double)ppc;
-+ pixel_per_line = (double)ppl;
-+ }
-+ else {
-+ pixel_per_char_i = (int)pixel_per_char;
-+ pixel_per_line_i = (int)pixel_per_line;
-+ }
-+
-+ return TRUE;
-+ }
-+
- tmp = Strnew();
- if (!strchr(Imgdisplay, '/'))
- Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL);
-@@ -156,6 +176,10 @@ addImage(ImageCache * cache, int x, int y, int sx, int sy, int w, int h)
- static void
- syncImage(void)
- {
-+ if (enable_inline_image) {
-+ return;
-+ }
-+
- fputs("3;\n", Imgdisplay_wf); /* XSync() */
- fputs("4;\n", Imgdisplay_wf); /* put '\n' */
- while (fflush(Imgdisplay_wf) != 0) {
-@@ -171,12 +195,16 @@ syncImage(void)
- n_terminal_image = 0;
- }
-
-+void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
-+void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
-+
- void
- drawImage()
- {
- static char buf[64];
- int j, draw = FALSE;
- TerminalImage *i;
-+ struct stat st ;
-
- if (!activeImage)
- return;
-@@ -184,6 +212,47 @@ drawImage()
- return;
- for (j = 0; j < n_terminal_image; j++) {
- i = &terminal_image[j];
-+
-+ if (enable_inline_image) {
-+ #if 0
-+ fprintf(stderr,"file %s x %d y %d w %d h %d sx %d sy %d sw %d sh %d (ppc %d ppl %d)\n",
-+ ((enable_inline_image == 2 || getenv("WINDOWID")) &&
-+ i->cache->touch) ? i->cache->file : i->cache->url,
-+ i->x, i->y,
-+ i->cache->width > 0 ? i->cache->width : 0,
-+ i->cache->height > 0 ? i->cache->height : 0,
-+ i->sx, i->sy, i->width, i->height,
-+ pixel_per_char_i, pixel_per_line_i);
-+ #endif
-+ (enable_inline_image == 2 ? put_image_sixel : put_image_osc5379)(
-+ ((enable_inline_image == 2 /* sixel */ || getenv("WINDOWID")) &&
-+ /* XXX I don't know why but sometimes i->cache->file doesn't exist. */
-+ i->cache->touch && stat(i->cache->file,&st) == 0) ?
-+ /* local */ i->cache->file : /* remote */ i->cache->url,
-+ i->x / pixel_per_char_i,
-+ i->y / pixel_per_line_i,
-+ #if 1
-+ i->cache->a_width > 0 ?
-+ (i->cache->width + i->x % pixel_per_char_i + pixel_per_char_i - 1) /
-+ pixel_per_char_i :
-+ #endif
-+ 0,
-+
-+ #if 1
-+ i->cache->a_height > 0 ?
-+ (i->cache->height + i->y % pixel_per_line_i + pixel_per_line_i - 1) /
-+ pixel_per_line_i :
-+ #endif
-+ 0,
-+ i->sx / pixel_per_char_i,
-+ i->sy / pixel_per_line_i,
-+ (i->width + i->sx % pixel_per_char_i + pixel_per_char_i - 1) / pixel_per_char_i,
-+ (i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i,
-+ n_terminal_image);
-+
-+ continue ;
-+ }
-+
- if (!(i->cache->loaded & IMG_FLAG_LOADED &&
- i->width > 0 && i->height > 0))
- continue;
-@@ -207,9 +276,15 @@ drawImage()
- fputs("\n", Imgdisplay_wf);
- draw = TRUE;
- }
-- if (!draw)
-- return;
-- syncImage();
-+
-+ if (!enable_inline_image) {
-+ if (!draw)
-+ return;
-+ syncImage();
-+ }
-+ else
-+ n_terminal_image = 0;
-+
- touch_cursor();
- refresh();
- }
-@@ -321,6 +396,8 @@ showImageProgress(Buffer *buf)
- }
- }
- if (n) {
-+ if (enable_inline_image && n == l)
-+ drawImage();
- message(Sprintf("%d/%d images loaded", l, n)->ptr,
- buf->cursorX + buf->rootX, buf->cursorY + buf->rootY);
- refresh();
-@@ -350,7 +427,7 @@ loadImage(Buffer *buf, int flag)
- }
- for (i = 0; i < n_load_image; i++) {
- cache = image_cache[i];
-- if (!cache)
-+ if (!cache || !cache->touch)
- continue;
- if (lstat(cache->touch, &st))
- continue;
-@@ -381,7 +458,7 @@ loadImage(Buffer *buf, int flag)
-
- for (i = (buf != image_buffer) ? 0 : maxLoadImage; i < n_load_image; i++) {
- cache = image_cache[i];
-- if (!cache)
-+ if (!cache || !cache->touch)
- continue;
- if (cache->pid) {
- kill(cache->pid, SIGKILL);
-@@ -407,7 +484,8 @@ loadImage(Buffer *buf, int flag)
- }
-
- if (draw && image_buffer) {
-- drawImage();
-+ if (!enable_inline_image)
-+ drawImage();
- showImageProgress(image_buffer);
- }
-
-@@ -435,6 +513,9 @@ loadImage(Buffer *buf, int flag)
- break;
- }
- image_cache[i] = cache;
-+ if (!cache->touch) {
-+ continue;
-+ }
-
- flush_tty();
- #ifdef DONT_CALL_GC_AFTER_FORK
-@@ -515,12 +596,30 @@ getImage(Image * image, ParsedURL *current, int flag)
- cache->url = image->url;
- cache->current = current;
- cache->file = tmpfname(TMPF_DFL, image->ext)->ptr;
-- cache->touch = tmpfname(TMPF_DFL, NULL)->ptr;
- cache->pid = 0;
- cache->index = 0;
- cache->loaded = IMG_FLAG_UNLOADED;
-- cache->width = image->width;
-- cache->height = image->height;
-+ if (enable_inline_image == 1) {
-+ if (image->width > 0 && image->width % pixel_per_char_i > 0)
-+ image->width += (pixel_per_char_i - image->width % pixel_per_char_i);
-+
-+ if (image->height > 0 && image->height % pixel_per_line_i > 0)
-+ image->height += (pixel_per_line_i - image->height % pixel_per_line_i);
-+ if (image->height > 0 && image->width > 0) {
-+ cache->loaded = IMG_FLAG_LOADED;
-+ }
-+ }
-+ if (cache->loaded == IMG_FLAG_UNLOADED) {
-+ cache->touch = tmpfname(TMPF_DFL, NULL)->ptr;
-+ }
-+ else {
-+ cache->touch = NULL;
-+ }
-+
-+ cache->width = image->width ;
-+ cache->height = image->height ;
-+ cache->a_width = image->width;
-+ cache->a_height = image->height;
- putHash_sv(image_hash, key->ptr, (void *)cache);
- }
- if (flag != IMG_FLAG_SKIP) {
-@@ -542,6 +641,78 @@ getImage(Image * image, ParsedURL *current, int flag)
- return cache;
- }
-
-+static int
-+parseImageHeader(char *path, u_int *width, u_int *height)
-+{
-+ FILE *fp;
-+ u_char buf[8];
-+
-+ if (!(fp = fopen(path, "r"))) return FALSE;
-+
-+ if (fread(buf, 1, 2, fp) != 2) goto error;
-+
-+ if (memcmp(buf, "\xff\xd8", 2) == 0) {
-+ /* JPEG */
-+ if (fseek(fp, 2, SEEK_CUR) < 0) goto error; /* 0xffe0 */
-+ while (fread(buf, 1, 2, fp) == 2) {
-+ size_t len = ((buf[0] << 8) | buf[1]) - 2;
-+ if (fseek(fp, len, SEEK_CUR) < 0) goto error;
-+ if (fread(buf, 1, 2, fp) == 2 &&
-+ /* SOF0 or SOF2 */
-+ (memcmp(buf, "\xff\xc0", 2) == 0 || memcmp(buf, "\xff\xc2", 2) == 0)) {
-+ fseek(fp, 3, SEEK_CUR);
-+ if (fread(buf, 1, 2, fp) == 2) {
-+ *height = (buf[0] << 8) | buf[1];
-+ if (fread(buf, 1, 2, fp) == 2) {
-+ *width = (buf[0] << 8) | buf[1];
-+ goto success;
-+ }
-+ }
-+ break;
-+ }
-+ }
-+ goto error;
-+ }
-+
-+ if (fread(buf + 2, 1, 1, fp) != 1) goto error;
-+
-+ if (memcmp(buf, "GIF", 3) == 0) {
-+ /* GIF */
-+ if (fseek(fp, 3, SEEK_CUR) < 0) goto error;
-+ if (fread(buf, 1, 2, fp) == 2) {
-+ *width = (buf[1] << 8) | buf[0];
-+ if (fread(buf, 1, 2, fp) == 2) {
-+ *height = (buf[1] << 8) | buf[0];
-+ goto success;
-+ }
-+ }
-+ goto error;
-+ }
-+
-+ if (fread(buf + 3, 1, 5, fp) != 5) goto error;
-+
-+ if (memcmp(buf, "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a", 8) == 0) {
-+ /* PNG */
-+ if (fseek(fp, 8, SEEK_CUR) < 0) goto error;
-+ if (fread(buf, 1, 4, fp) == 4) {
-+ *width = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
-+ if (fread(buf, 1, 4, fp) == 4) {
-+ *height = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
-+ goto success;
-+ }
-+ }
-+ goto error;
-+ }
-+
-+error:
-+ fclose(fp);
-+ return FALSE;
-+
-+success:
-+ fclose(fp);
-+ return TRUE;
-+}
-+
- int
- getImageSize(ImageCache * cache)
- {
-@@ -554,6 +725,10 @@ getImageSize(ImageCache * cache)
- if (!cache || !(cache->loaded & IMG_FLAG_LOADED) ||
- (cache->width > 0 && cache->height > 0))
- return FALSE;
-+
-+ if (parseImageHeader(cache->file, &w, &h))
-+ goto got_image_size;
-+
- tmp = Strnew();
- if (!strchr(Imgdisplay, '/'))
- Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL);
-@@ -569,6 +744,8 @@ getImageSize(ImageCache * cache)
-
- if (!(w > 0 && h > 0))
- return FALSE;
-+
-+got_image_size:
- w = (int)(w * image_scale / 100 + 0.5);
- if (w == 0)
- w = 1;
-@@ -581,11 +758,11 @@ getImageSize(ImageCache * cache)
- }
- else if (cache->width < 0) {
- int tmp = (int)((double)cache->height * w / h + 0.5);
-- cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
-+ cache->a_width = cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
- }
- else if (cache->height < 0) {
- int tmp = (int)((double)cache->width * h / w + 0.5);
-- cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
-+ cache->a_height = cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
- }
- if (cache->width == 0)
- cache->width = 1;
-diff --git a/main.c b/main.c
-index c8f1e82..32f4da2 100644
---- a/main.c
-+++ b/main.c
-@@ -122,6 +122,8 @@ static int searchKeyNum(void);
- #define help() fusage(stdout, 0)
- #define usage() fusage(stderr, 1)
-
-+int enable_inline_image; /* 1 == mlterm OSC 5379, 2 == sixel */
-+
- static void
- fversion(FILE * f)
- {
-@@ -409,7 +411,6 @@ main(int argc, char **argv, char **envp)
- #if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
- char **getimage_args = NULL;
- #endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
--
- GC_INIT();
- #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET))
- setlocale(LC_ALL, "");
-@@ -679,6 +680,12 @@ main(int argc, char **argv, char **envp)
- }
- }
- #endif
-+ else if (!strcmp("-ri", argv[i])) {
-+ enable_inline_image = 1;
-+ }
-+ else if (!strcmp("-sixel", argv[i])) {
-+ enable_inline_image = 2;
-+ }
- else if (!strcmp("-num", argv[i]))
- showLineNum = TRUE;
- else if (!strcmp("-no-proxy", argv[i]))
-@@ -5910,8 +5917,14 @@ deleteFiles()
- Firstbuf = buf;
- }
- }
-- while ((f = popText(fileToDelete)) != NULL)
-+ while ((f = popText(fileToDelete)) != NULL) {
- unlink(f);
-+ if (enable_inline_image == 2 && strcmp(f+strlen(f)-4, ".gif") == 0) {
-+ Str firstframe = Strnew_charp(f);
-+ Strcat_charp(firstframe, "-1");
-+ unlink(firstframe->ptr);
-+ }
-+ }
- }
-
- void
-diff --git a/terms.c b/terms.c
-index 672262c..79996f1 100644
---- a/terms.c
-+++ b/terms.c
-@@ -12,6 +12,7 @@
- #include <unistd.h>
- #include "config.h"
- #include <string.h>
-+#include <sys/wait.h>
- #ifdef HAVE_SYS_SELECT_H
- #include <sys/select.h>
- #endif
-@@ -466,6 +467,260 @@ writestr(char *s)
-
- #define MOVE(line,column) writestr(tgoto(T_cm,column,line));
-
-+void
-+put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
-+{
-+ Str buf;
-+ char *size ;
-+
-+ if (w > 0 && h > 0)
-+ size = Sprintf("%dx%d",w,h)->ptr;
-+ else
-+ size = "";
-+
-+ MOVE(y,x);
-+ buf = Sprintf("\x1b]5379;show_picture %s %s %dx%d+%d+%d\x07",url,size,sw,sh,sx,sy);
-+ writestr(buf->ptr);
-+ MOVE(Currentbuf->cursorY,Currentbuf->cursorX);
-+}
-+
-+static void
-+save_gif(const char *path, u_char *header, size_t header_size, u_char *body, size_t body_size)
-+{
-+ int fd;
-+
-+ if ((fd = open(path, O_WRONLY|O_CREAT, 0600)) >= 0) {
-+ write(fd, header, header_size) ;
-+ write(fd, body, body_size) ;
-+ write(fd, "\x3b" , 1) ;
-+ close(fd) ;
-+ }
-+}
-+
-+static u_char *
-+skip_gif_header(u_char *p)
-+{
-+ /* Header */
-+ p += 10;
-+
-+ if (*(p) & 0x80) {
-+ p += (3 * (2 << ((*p) & 0x7)));
-+ }
-+ p += 3;
-+
-+ return p;
-+}
-+
-+static Str
-+save_first_animation_frame(const char *path)
-+{
-+ int fd;
-+ struct stat st;
-+ u_char *header;
-+ size_t header_size;
-+ u_char *body;
-+ u_char *p;
-+ ssize_t len;
-+ Str new_path;
-+
-+ new_path = Strnew_charp(path);
-+ Strcat_charp(new_path, "-1");
-+ if (stat(new_path->ptr, &st) == 0) {
-+ return new_path;
-+ }
-+
-+ if ((fd = open( path, O_RDONLY)) < 0) {
-+ return NULL;
-+ }
-+
-+ if (fstat( fd, &st) != 0 || ! (header = GC_malloc( st.st_size))){
-+ close( fd);
-+ return NULL;
-+ }
-+
-+ len = read(fd, header, st.st_size);
-+ close(fd);
-+
-+ /* Header */
-+
-+ if (len != st.st_size || strncmp(header, "GIF89a", 6) != 0) {
-+ return NULL;
-+ }
-+
-+ p = skip_gif_header(header);
-+ header_size = p - header;
-+
-+ /* Application Extension */
-+ if (p[0] == 0x21 && p[1] == 0xff) {
-+ p += 19;
-+ }
-+
-+ /* Other blocks */
-+ body = NULL;
-+ while (p + 2 < header + st.st_size) {
-+ if (*(p++) == 0x21 && *(p++) == 0xf9 && *(p++) == 0x04) {
-+ if( body) {
-+ /* Graphic Control Extension */
-+ save_gif(new_path->ptr, header, header_size, body, p - 3 - body);
-+ return new_path;
-+ }
-+ else {
-+ /* skip the first frame. */
-+ }
-+ body = p - 3;
-+ }
-+ }
-+
-+ return NULL;
-+}
-+
-+void ttymode_set(int mode, int imode);
-+void ttymode_reset(int mode, int imode);
-+
-+void
-+put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
-+{
-+ pid_t pid;
-+ int do_anim;
-+ MySignalHandler(*volatile previntr) (SIGNAL_ARG);
-+ MySignalHandler(*volatile prevquit) (SIGNAL_ARG);
-+ MySignalHandler(*volatile prevstop) (SIGNAL_ARG);
-+
-+ MOVE(y,x);
-+ flush_tty();
-+
-+ do_anim = (n_terminal_image == 1 && x == 0 && y == 0 && sx == 0 && sy == 0);
-+
-+ previntr = mySignal(SIGINT, SIG_IGN);
-+ prevquit = mySignal(SIGQUIT, SIG_IGN);
-+ prevstop = mySignal(SIGTSTP, SIG_IGN);
-+
-+ if ((pid = fork()) == 0) {
-+ char *env;
-+ int n = 0;
-+ char *argv[20];
-+ char digit[2][11+1];
-+ char clip[44+3+1];
-+ Str str_url;
-+
-+ close(STDERR_FILENO); /* Don't output error message. */
-+ if (do_anim) {
-+ writestr("\x1b[?80h");
-+ }
-+ else if (!strstr(url, "://") && strcmp(url+strlen(url)-4, ".gif") == 0 &&
-+ (str_url = save_first_animation_frame(url))) {
-+ url = str_url->ptr;
-+ }
-+ ttymode_set(ISIG, 0);
-+
-+ if ((env = getenv("W3M_IMG2SIXEL"))) {
-+ char *p;
-+ env = Strnew_charp(env)->ptr;
-+ while (n < 8 && (p = strchr(env, ' '))) {
-+ *p = '\0';
-+ if (*env != '\0') {
-+ argv[n++] = env;
-+ }
-+ env = p+1;
-+ }
-+ if (*env != '\0') {
-+ argv[n++] = env;
-+ }
-+ }
-+ else {
-+ argv[n++] = "img2sixel";
-+ }
-+ argv[n++] = "-l";
-+ argv[n++] = do_anim ? "auto" : "disable";
-+ argv[n++] = "-w";
-+ sprintf(digit[0], "%d", w*pixel_per_char_i);
-+ argv[n++] = digit[0];
-+ argv[n++] = "-h";
-+ sprintf(digit[1], "%d", h*pixel_per_line_i);
-+ argv[n++] = digit[1];
-+ argv[n++] = "-c";
-+ sprintf(clip, "%dx%d+%d+%d", sw*pixel_per_char_i, sh*pixel_per_line_i,
-+ sx*pixel_per_char_i, sy*pixel_per_line_i);
-+ argv[n++] = clip;
-+ argv[n++] = url;
-+ if (getenv("TERM") && strcmp(getenv("TERM"), "screen") == 0 &&
-+ (!getenv("SCREEN_VARIANT") || strcmp(getenv("SCREEN_VARIANT"), "sixel") != 0)) {
-+ argv[n++] = "-P";
-+ }
-+ argv[n++] = NULL;
-+ execvp(argv[0],argv);
-+ exit(0);
-+ }
-+ else if (pid > 0) {
-+ int status;
-+ waitpid(pid, &status, 0);
-+ ttymode_reset(ISIG, 0);
-+ mySignal(SIGINT, previntr);
-+ mySignal(SIGQUIT, prevquit);
-+ mySignal(SIGTSTP, prevstop);
-+ if (do_anim) {
-+ writestr("\x1b[?80l");
-+ }
-+ }
-+
-+ MOVE(Currentbuf->cursorY,Currentbuf->cursorX);
-+}
-+
-+int
-+get_pixel_per_cell(int *ppc, int *ppl)
-+{
-+ fd_set rfd;
-+ struct timeval tval;
-+ char buf[100];
-+ char *p;
-+ ssize_t len;
-+ ssize_t left;
-+ int wp,hp,wc,hc;
-+ int i;
-+
-+#ifdef TIOCGWINSZ
-+ struct winsize ws;
-+ if (ioctl(tty, TIOCGWINSZ, &ws) == 0 && ws.ws_ypixel > 0 && ws.ws_row > 0 &&
-+ ws.ws_xpixel > 0 && ws.ws_col > 0) {
-+ *ppc = ws.ws_xpixel / ws.ws_col;
-+ *ppl = ws.ws_ypixel / ws.ws_row;
-+ return 1;
-+ }
-+#endif
-+
-+ fputs("\x1b[14t\x1b[18t",ttyf); flush_tty();
-+
-+ p = buf;
-+ left = sizeof(buf) - 1;
-+ for (i = 0; i < 10; i++) {
-+ tval.tv_usec = 200000; /* 0.2 sec * 10 */
-+ tval.tv_sec = 0;
-+ FD_ZERO(&rfd);
-+ FD_SET(tty,&rfd);
-+ if (select(tty+1,&rfd,NULL,NULL,&tval) <= 0 || ! FD_ISSET(tty,&rfd))
-+ continue;
-+
-+ if ((len = read(tty,p,left)) <= 0)
-+ continue;
-+ p[len] = '\0';
-+
-+ if (sscanf(buf,"\x1b[4;%d;%dt\x1b[8;%d;%dt",&hp,&wp,&hc,&wc) == 4) {
-+ if (wp > 0 && wc > 0 && hp > 0 && hc > 0) {
-+ *ppc = wp / wc;
-+ *ppl = hp / hc;
-+ return 1;
-+ }
-+ else {
-+ return 0;
-+ }
-+ }
-+ p += len;
-+ left -= len;
-+ }
-+
-+ return 0;
-+}
-+
- #ifdef USE_MOUSE
- #define W3M_TERM_INFO(name, title, mouse) name, title, mouse
- #define NEED_XTERM_ON (1)
-diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c
-index cef72e2..bc8d0aa 100644
---- a/w3mimg/x11/x11_w3mimg.c
-+++ b/w3mimg/x11/x11_w3mimg.c
-@@ -121,16 +121,21 @@ x11_init(w3mimg_op * self)
- if (self == NULL)
- return 0;
- xi = (struct x11_info *)self->priv;
-+#if defined(USE_IMLIB)
- if (xi == NULL)
- return 0;
--#if defined(USE_IMLIB)
- if (!xi->id) {
- xi->id = Imlib_init(xi->display);
- if (!xi->id)
- return 0;
- }
- #elif defined(USE_GDKPIXBUF)
-- if (!xi->init_flag) {
-+ if (!xi) {
-+#if defined(USE_GTK2)
-+ g_type_init();
-+#endif
-+ }
-+ else if (!xi->init_flag) {
- #if defined(USE_GTK2)
- g_type_init();
- #endif
-@@ -138,7 +143,7 @@ x11_init(w3mimg_op * self)
- xi->init_flag = TRUE;
- }
- #endif
-- if (!xi->imageGC) {
-+ if (xi && !xi->imageGC) {
- xi->imageGC = XCreateGC(xi->display, xi->parent, 0, NULL);
- if (!xi->imageGC)
- return 0;
-@@ -653,9 +658,11 @@ x11_get_image_size(w3mimg_op * self, W3MImage * img, char *fname, int *w,
-
- if (self == NULL)
- return 0;
-+#if defined(USE_IMLIB) && defined(USE_IMLIB2)
- xi = (struct x11_info *)self->priv;
- if (xi == NULL)
- return 0;
-+#endif
-
- #if defined(USE_IMLIB)
- im = Imlib_load_image(xi->id, fname);
-@@ -755,6 +762,9 @@ w3mimg_x11open()
- return NULL;
- memset(wop, 0, sizeof(w3mimg_op));
-
-+ if (getenv("W3M_USE_REMOTE_IMAGE"))
-+ goto end;
-+
- xi = (struct x11_info *)malloc(sizeof(struct x11_info));
- if (xi == NULL)
- goto error;
-@@ -807,6 +817,7 @@ w3mimg_x11open()
-
- wop->priv = xi;
-
-+ end:
- wop->init = x11_init;
- wop->finish = x11_finish;
- wop->active = x11_active;
diff --git a/debian/patches/460_printf.patch b/debian/patches/460_printf.patch
deleted file mode 100644
index 96a2dc7..0000000
--- a/debian/patches/460_printf.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-Subject: Correct printf arguments (still support <C99)
-From: Scarlett <scarlett@xavin.net>, Tatsuya Kinoshita <tats@debian.org>
-Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
-
-diff --git a/cookie.c b/cookie.c
-index 8020f6d..c11649c 100644
---- a/cookie.c
-+++ b/cookie.c
-@@ -247,7 +247,7 @@ find_cookie(ParsedURL *pu)
- Strcat(tmp, Sprintf("; $Domain=\"%s\"", p1->domain->ptr));
- if (p1->portl)
- Strcat(tmp,
-- Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)));
-+ Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)->ptr));
- }
- }
- return tmp;
-@@ -463,7 +463,7 @@ save_cookies(void)
- continue;
- fprintf(fp, "%s\t%s\t%s\t%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n",
- parsedURL2Str(&p->url)->ptr,
-- p->name->ptr, p->value->ptr, p->expires,
-+ p->name->ptr, p->value->ptr, (long)p->expires,
- p->domain->ptr, p->path->ptr, p->flag,
- p->version, str2charp(p->comment),
- (p->portl) ? portlist2str(p->portl)->ptr : "",
-diff --git a/main.c b/main.c
-index 32f4da2..76256d6 100644
---- a/main.c
-+++ b/main.c
-@@ -5841,7 +5841,7 @@ set_buffer_environ(Buffer *buf)
- set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url));
- else
- set_environ("W3M_CURRENT_FORM", "");
-- set_environ("W3M_CURRENT_LINE", Sprintf("%d",
-+ set_environ("W3M_CURRENT_LINE", Sprintf("%ld",
- l->real_linenumber)->ptr);
- set_environ("W3M_CURRENT_COLUMN", Sprintf("%d",
- buf->currentColumn +
-diff --git a/map.c b/map.c
-index 12701e7..bb240ea 100644
---- a/map.c
-+++ b/map.c
-@@ -573,7 +573,7 @@ page_info_panel(Buffer *buf)
- "<tr valign=top><td nowrap>Number of lines<td>",
- Sprintf("%d", all)->ptr,
- "<tr valign=top><td nowrap>Transferred bytes<td>",
-- Sprintf("%d", buf->trbyte)->ptr, NULL);
-+ Sprintf("%lu", (unsigned long)buf->trbyte)->ptr, NULL);
-
- a = retrieveCurrentAnchor(buf);
- if (a != NULL) {
diff --git a/debian/patches/470_alloc.patch b/debian/patches/470_alloc.patch
deleted file mode 100644
index b7cae1a..0000000
--- a/debian/patches/470_alloc.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-Subject: Add overflow detection (still support <C99)
-From: Scarlett <scarlett@xavin.net>, Tatsuya Kinoshita <tats@debian.org>
-Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
-
-diff --git a/alloc.h b/alloc.h
-new file mode 100644
-index 0000000..fa0d391
---- /dev/null
-+++ b/alloc.h
-@@ -0,0 +1,39 @@
-+/*
-+ * by Scarlett. public domain.
-+ * replacements for w3m's allocation macros which add overflow
-+ * detection and concentrate the macros in one file
-+ */
-+#ifndef W3_ALLOC_H
-+#define W3_ALLOC_H
-+#include <gc.h>
-+#include <stdlib.h>
-+#include <stdio.h>
-+#include <limits.h>
-+
-+static inline size_t
-+z_mult_no_oflow_(size_t n, size_t size)
-+{
-+ if (size != 0 && n > ULONG_MAX / size) {
-+ fprintf(stderr,
-+ "w3m: overflow in malloc, %lu*%lu\n", (unsigned long)n, (unsigned long)size);
-+ exit(1);
-+ }
-+ return n * size;
-+}
-+
-+#define New(type) \
-+ (GC_MALLOC(sizeof(type)))
-+
-+#define NewAtom(type) \
-+ (GC_MALLOC_ATOMIC(sizeof(type)))
-+
-+#define New_N(type, n) \
-+ (GC_MALLOC(z_mult_no_oflow_((n), sizeof(type))))
-+
-+#define NewAtom_N(type, n) \
-+ (GC_MALLOC_ATOMIC(z_mult_no_oflow_((n), sizeof(type))))
-+
-+#define New_Reuse(type, ptr, n) \
-+ (GC_REALLOC((ptr), z_mult_no_oflow_((n), sizeof(type))))
-+
-+#endif /* W3_ALLOC_H */
-diff --git a/indep.h b/indep.h
-index 84416ed..2809832 100644
---- a/indep.h
-+++ b/indep.h
-@@ -1,7 +1,7 @@
- /* $Id: indep.h,v 1.16 2003/09/22 21:02:19 ukai Exp $ */
- #ifndef INDEP_H
- #define INDEP_H
--#include <gc.h>
-+#include "alloc.h"
- #include "Str.h"
- #include "config.h"
-
-@@ -92,11 +92,6 @@ extern char *w3m_etc_dir();
- extern char *w3m_conf_dir();
- extern char *w3m_help_dir();
-
--#define New(type) ((type*)GC_MALLOC(sizeof(type)))
--#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type)))
--#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
--#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
--#define New_Reuse(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
- #define NewWithoutGC(type) ((type*)xmalloc(sizeof(type)))
- #define NewWithoutGC_N(type,n) ((type*)xmalloc((n)*sizeof(type)))
- #define NewWithoutGC_Reuse(type,ptr,n) ((type*)xrealloc(ptr,(n)*sizeof(type)))
-diff --git a/libwc/charset.c b/libwc/charset.c
-index 3f0b74d..ea79b1c 100644
---- a/libwc/charset.c
-+++ b/libwc/charset.c
-@@ -1,8 +1,7 @@
-
- #include <stdlib.h>
- #include <ctype.h>
--#include <gc.h>
--#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
-+#include "../alloc.h"
-
- #include "wc.h"
-
-diff --git a/libwc/status.c b/libwc/status.c
-index d25c924..4a2ebf8 100644
---- a/libwc/status.c
-+++ b/libwc/status.c
-@@ -1,7 +1,6 @@
-
- #include <string.h>
--#include <gc.h>
--#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
-+#include "../alloc.h"
-
- #include "wc.h"
- #ifdef USE_UNICODE
-diff --git a/main.c b/main.c
-index 76256d6..d37b243 100644
---- a/main.c
-+++ b/main.c
-@@ -383,6 +383,13 @@ make_optional_header_string(char *s)
- return hs;
- }
-
-+static void *
-+die_oom(size_t bytes)
-+{
-+ fprintf(stderr, "Out of memory: %lu bytes unavailable!\n", (unsigned long)bytes);
-+ exit(1);
-+}
-+
- int
- main(int argc, char **argv, char **envp)
- {
-@@ -412,6 +419,7 @@ main(int argc, char **argv, char **envp)
- char **getimage_args = NULL;
- #endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
- GC_INIT();
-+ GC_set_oom_fn(die_oom);
- #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET))
- setlocale(LC_ALL, "");
- #endif
-diff --git a/matrix.c b/matrix.c
-index 64fd0ad..bc7a5be 100644
---- a/matrix.c
-+++ b/matrix.c
-@@ -34,18 +34,12 @@
-
- #include "config.h"
- #include "matrix.h"
--#include <gc.h>
-+#include "alloc.h"
-
- /*
- * Macros from "fm.h".
- */
-
--#define New(type) ((type*)GC_MALLOC(sizeof(type)))
--#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type)))
--#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
--#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
--#define Renew_N(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
--
- #define SWAPD(a,b) { double tmp = a; a = b; b = tmp; }
- #define SWAPI(a,b) { int tmp = a; a = b; b = tmp; }
-
diff --git a/debian/patches/800_lang-en.patch b/debian/patches/800_lang-en.patch
deleted file mode 100644
index d008cca..0000000
--- a/debian/patches/800_lang-en.patch
+++ /dev/null
@@ -1,535 +0,0 @@
-Subject: Improve English documents
-Author: Markus Hiereth <post@hiereth.de>, Justin B Rye <justin.byam.rye@gmail.com>
-Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550
-Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771003
-
-diff --git a/doc/w3m.1 b/doc/w3m.1
-index 58a8965..0762f51 100644
---- a/doc/w3m.1
-+++ b/doc/w3m.1
-@@ -1,13 +1,11 @@
- .nr N -1
- .nr D 5
--.TH W3M 1 Local
-+.TH W3M 1 "2014-11-29"
- .UC 4
- .SH NAME
--w3m \- a text based Web browser and pager
-+w3m \- a text based web browser and pager
- .SH SYNOPSIS
--.B w3m
--[options] [URL or filename]
--.PP
-+w3m [OPTION]... [ \fIfile\fP | \fIURL\fP ]...
- .SH DESCRIPTION
- .\" This defines appropriate quote strings for nroff and troff
- .ds lq \&"
-@@ -17,234 +15,285 @@ w3m \- a text based Web browser and pager
- .\" Just in case these number registers aren't set yet...
- .if \nN==0 .nr N 10
- .if \nD==0 .nr D 5
--.I
--w3m
--is a World Wide Web (WWW) text based client. It has English and
--Japanese help files and an option menu and can be configured to
--use either language. It will display hypertext markup language
--(HTML) documents containing links to files residing on the local
--system, as well as files residing on remote systems. It can
--display HTML tables and frames.
--In addition, it can be used as a "pager" in much the same manner
--as "more" or "less".
--Current versions of
--.I
--w3m
--run on
--Unix (Solaris, SunOS, HP-UX, Linux, FreeBSD, and EWS4800)
--and on
--Microsoft Windows 9x/NT.
--.PP
-+
-+\fIw3m\fP is a text based browser which can display local or remote
-+web pages as well as other documents. It is able to process HTML
-+tables and frames but it ignores JavaScript and Cascading Style
-+Sheets. \fIw3m\fP can also serve as a pager for text files named as
-+arguments or passed on standard input, and as a general purpose
-+directory browser.
-+
-+\fIw3m\fP organizes its content in buffers or tabs, allowing easy
-+navigation between them. With the w3m-img extension installed, \fIw3m\fP can
-+display inline graphics in web pages. And whenever \fIw3m\fP's HTML
-+rendering capabilities do not meet your needs, the target URL can be
-+handed over to a graphical browser with a single command.
-+
-+For help with runtime options, press \(lqH\(rq while running \fIw3m\fP.
-+
-+.SH ARGUMENTS
-+
-+When given one or more command line arguments, \fIw3m\fP will handle
-+targets according to content type. For web, \fIw3m\fP gets this
-+information from HTTP headers; for relative or absolute file system
-+paths, it relies on filenames.
-+
-+With no argument, \fIw3m\fP expects data from standard input and
-+assumes \(lqtext/plain\(rq unless another MIME type is given by the user.
-+
-+If provided with no target and no fallback target (see for instance
-+option \fB\-v\fP below), \fIw3m\fP will exit with usage information.
- .SH OPTIONS
--At start up, \fIw3m\fR will load any local
--file or remote URL specified at the command
--line. For help with runtime options, press \fB"H"\fR
--while running \fIw3m\fR.
--Command line options are:
--.PP
-+Command line options are introduced with a single \(lq\-\(rq character and
-+may take an argument.
-+.SS General options:
- .TP
--.B -t tab
--set tab width
-+\fB\-B\fP
-+with no other target defined, use the bookmark page for startup
- .TP
--.B -r
--ignore backspace effect
--.TP
--.B -l line
--# of preserved line (default 10000)
--.TP
--.B -I charset
--document charset
--.TP
--.B -O charset
--display/output charset
-+\fB\-M\fP
-+monochrome display
- .TP
--.B -B
--load bookmark
-+\fB\-no-mouse\fP
-+deactivate mouse support
- .TP
--.B -bookmark file
--specify bookmark file
-+\fB\-num\fP
-+display each line's number
- .TP
--.B -T type
--specify content-type
-+\fB\-N\fP
-+distribute multiple command line arguments to tabs. By default, a
-+stack of buffers is used
-+.TP
-+\fB\-ppc \fInum\fR
-+width of \fInum\fR pixels per character. Range of 4.0 to 32.0, default 8.0.
-+Larger values will make tables narrower. (Implementation not verified)
- .TP
--.B -m
--internet message mode
-+\fB\-ppl \fInum\fR
-+height of \fInum\fR pixels per line. Range of 4.0 to 64.0. (Implementation not verified)
- .TP
--.B -v
--visual startup mode
-+\fB\-title\fP, \fB\-title=TERM\fP
-+use the buffer name as terminal title string. With specified TERM,
-+this sets the title configuration style accordingly
- .TP
--.B -M
--monochrome display
-+\fB\-v\fP
-+with no other target defined, welcome users with a built-in page
- .TP
--.B -N
--open URL of command line on each new tab
-+\fB\-W\fP
-+toggle wrapping in searches
- .TP
--.B -F
--automatically render frame
-+\fB\-X\fP
-+do not initialize/deinitialize the terminal
- .TP
--.B -dump
--dump formatted page into stdout
-+\fB+\fInum\fR
-+go to line \fInum\fR; only effective for \fInum\fR larger than the number of lines in the terminal
-+.SS Browser options:
- .TP
--.B -cols width
--specify column width (used with -dump)
-+\fB\-cols \fInum\fR
-+with stdout as destination; HTML is rendered to lines of \fInum\fR characters
- .TP
--.B -ppc count
--specify the number of pixels per character (4.0...32.0).
--Larger values will make tables narrower. [default 8.0]
-+\fB\-cookie\fP, \fB\-no-cookie\fP
-+use stored cookies and accept new ones, or do neither
- .TP
--.B -ppl count
--specify the number of pixels per line (4.0...64.0)
-+\fB\-F\fP
-+render frames
- .TP
--.B -dump_source
--dump page source into stdout
-+\fB\-graph\fP, \fB\-no-graph\fP
-+use or do not use graphic characters for drawing HTML table and frame borders
- .TP
--.B -dump_head
--dump response of HEAD request into stdout
-+\fB\-header \fIstring\fR
-+append \fIstring\fR to the HTTP(S) request. Expected to match the header syntax \f(CW Variable: Value\fP
- .TP
--.B -dump_both
--dump HEAD and source into stdout
-+\fB\-m\fP
-+Render the body of Usenet messages according to the header \(lqContent-type\(rq
- .TP
--.B -dump_extra
--dump HEAD, source, and extra information into stdout
-+\fB\-no-proxy\fP
-+do not use proxy
- .TP
--.B -post file
--use POST method with file content
-+\fB\-post \fIfile\fR
-+use POST method to upload data defined in \fIfile\fR. The syntax to be used
-+is \f(CWvar1=value1[&var2=value2]...\fP
- .TP
--.B -header string
--insert string as a header
-+\fB\-4\fP
-+IPv4 only. Corresponds to dns_order=4 in configuration files
- .TP
--.B +<num>
--goto <num> line
-+\fB\-6\fP
-+IPv6 only. Corresponds to dns_order=6 in configuration files
-+.SS Text pager options:
- .TP
--.B -num
--show line number
-+\fB\-l \fInum\fR
-+number of lines preserved internally when receiving plain text from
-+stdin (default 10,000)
- .TP
--.B -no-proxy
--don't use proxy
-+\fB\-r\fP
-+use caret notation to display special escape characters (such
-+as ANSI escapes or nroff-style backspaces for bold and underlined
-+characters) instead of processing them
- .TP
--.B -4
--IPv4 only (-o dns_order=4)
-+\fB\-s\fP
-+squeeze multiple blank lines into one
- .TP
--.B -6
--IPv6 only (-o dns_order=6)
-+\fB\-t\fP \fInum\fP
-+set tab width to \fInum\fR columns. No effect on stdout
-+.SS Data type/encoding options:
- .TP
--.B -no-mouse
--don't use mouse
-+\fB\-I \fIcharset\fR
-+user defined character encoding of input data
- .TP
--.B -cookie
--use cookie.
-+\fB\-O \fIcharset\fR
-+user defined character encoding of output data
- .TP
--.B -no-cookie
--don't use cookie
-+\fB\-T \fItype\fR
-+explicit characterization of input data by MIME type
-+.SS Options for data output, followed by immediate exit:
- .TP
--.B -graph
--use graphic character
-+\fB\-dump\fP
-+dump rendered page into stdout. Set implicitly when output is directed
-+to a file or pipe
- .TP
--.B -no-graph
--don't use graphic character
-+\fB\-dump_source\fP
-+dump the page's source code into stdout
- .TP
--.B -s
--squeeze multiple blank lines
-+\fB\-dump_head\fP
-+dump response of a HEAD request for a URL into stdout
- .TP
--.B -W
--toggle wrap search mode
-+\fB\-dump_both\fP
-+dump HEAD, and source code for a URL into stdout
- .TP
--.B -X
--don't use termcap init/deinit
-+\fB\-dump_extra\fP
-+dump HEAD, source code, and extra information for a URL into stdout
- .TP
--.B -title [=TERM]
--set buffer name to terminal title string.
--If TERM is specified, use the TERM style title configuration.
-+\fB\-help\fP
-+show a summary of compiled-in features and command line options
- .TP
--.B -o opt=value
--assign value to config option
-+\fB\-show-option\fP
-+show all available config options
- .TP
--.B -show-option
--show all available config option
-+\fB\-version\fP
-+show the version of \fIw3m\fP
-+.SS Options for overriding default settings and resources:
- .TP
--.B -config file
--specify config file
-+\fB\-bookmark \fIfile\fR
-+use \fIfile\fR instead of the default bookmark.html file
- .TP
--.B -help
--show usage
-+\fB\-config \fIfile\fR
-+use \fIfile\fR instead of the default config file
- .TP
--.B -version
--show w3m version
-+\fB\-debug\fP
-+DO NOT USE
- .TP
--.B -reqlog
--write request logfile
-+\fB\-o \fIoption=value\fR
-+modify one configuration item with an explicitly given value; without \fIoption=value\fR, equivalent to -show-option
- .TP
--.B -debug
--DO NOT USE
-+\fB\-reqlog\fP
-+log headers of HTTP communication in file \f(CW~/.w3m/request.log\fP
- .SH EXAMPLES
-+.SS Pager-like usage
-+.TP
-+Combine snippets of HTML code and preview the page
-+.EX
-+$ cat header.html footer.html | w3m -T text/html
-+.EE
-+.TP
-+Compare two files using tabs
-+.EX
-+$ w3m -N config.old config
-+.EE
-+.SS Browser-like usage
-+.TP
-+Display web content in monochrome terminal
-+.EX
-+$ w3m -M http://w3m.sourceforge.net
-+.EE
-+.TP
-+Display embedded graphics
-+.EX
-+$ w3m -o auto_image=TRUE http://w3m.sourceforge.net
-+.EE
-+.TP
-+Display content from Usenet
-+.EX
-+$ w3m -m nntp://news.aioe.org/comp.os.linux.networking
-+.EE
-+.TP
-+Upload data for a URL using the POST method
-+.EX
-+$ w3m -post - http://example.com/form.php <<<'a=0&b=1'
-+.EE
-+.SS Filter-like usage
-+.TP
-+Convert an HTML file to plain text with a defined line length
-+.EX
-+$ w3m -cols 40 foo.html > foo.txt
-+.EE
-+.TP
-+Output the bookmarks page as text with an appended list of links
-+.EX
-+$ w3m -B -o display_link_number=1 > out.txt
-+.EE
-+.TP
-+Conversion of file format and character encoding
-+.EX
-+$ w3m -T text/html -I EUC-JP -O UTF-8 < foo.html > foo.txt
-+.EE
-+.SS Start with no input
-+.TP
-+Welcome users with a built-in page
-+.EX
-+$ w3m -v
-+.EE
-+.\".SH Errors
-+.SH ENVIRONMENT
-+\fIw3m\fP recognises the environment variable WWW_HOME as defining a
-+fallback target for use if it is invoked without one.
-+.SH FILES
- .TP
--To use w3m as a pager:
--.br
--$ ls | w3m
--.br
--.TP
--To use w3m to translate HTML files:
--.br
--$ cat foo.html | w3m -T text/html
-+\f(CW~/.w3m/bookmark.html\fP
-+default bookmark file
- .TP
--or
--.br
--$ cat foo.html | w3m -dump -T text/html >foo.txt
--.SH FILES
-+\f(CW~/.w3m/config\fP
-+user defined configuration file; overrides \f(CW/etc/w3m/config\fP
- .TP
--.I ${HOME}/.w3m/config
--configuration file
-+\f(CW~/.w3m/cookie\fP
-+cookie jar; written on exit, read on launch
- .TP
--.I ${HOME}/.w3m/keymap
--key binding configuration file
--.\" .TP
--.\" .I ${HOME}/.w3m/menu
--.\" ???
-+\f(CW~/.w3m/history\fP
-+browser history - visited files and URLs
- .TP
--.I ${HOME}/.w3m/mouse
--mouse configuration file
-+\f(CW~/.w3m/keymap\fP
-+user defined key bindings; overrides default key bindings
- .TP
--.I ${HOME}/.w3m/cookie
--cookie file
-+\f(CW~/.w3m/mailcap\fP
-+external viewer configuration file
- .TP
--.I ${HOME}/.w3m/history
--history file
-+\f(CW~/.w3m/menu\fP
-+user defined menu; overrides default menu
- .TP
--.I ${HOME}/.w3m/passwd
--passowrd and username file
-+\f(CW~/.w3m/mime.types\fP
-+MIME types file
- .TP
--.I ${HOME}/.w3m/pre_form
--form parameters file
-+\f(CW~/.w3m/mouse\fP
-+user defined mouse settings
- .TP
--.I ${HOME}/.w3m/mailcap
--external viewer configuration file
-+\f(CW~/.w3m/passwd\fP
-+password and username file
- .TP
--.I ${HOME}/.w3m/mime.types
--MIME types file
-+\f(CW~/.w3m/pre_form\fP
-+contains predefined values to fill recurrent HTML forms
- .\" .TP
--.\" .I ${HOME}/.w3m/urimethodmap
-+.\" .I $~/.w3m/urimethodmap
- .\" ???
- .SH NOTES
--This is the
--.I
--w3m
--0.5.3 Release.
--.PP
--Please see the MANUAL.html file distributed with w3m for
--more detailed documentation.
--
--Additional information about
--.I
--w3m
--may be found on its Japanese language Web site located at:
-- http://w3m.sourceforge.net/index.ja.html
--.br
--or on its English version of the site at:
-- http://w3m.sourceforge.net/index.en.html
-+This is the \fIw3m\fP 0.5.3 Release.
-+.SH SEE ALSO
-+README and example files are to be found in the doc directory of your \fIw3m\fP installation. Recent information about \fIw3m\fP may be found on
-+.UR http://w3m.sourceforge.net
-+the project's web pages at
-+.UE
- .SH ACKNOWLEDGMENTS
--.I
--w3m
--has incorporated code from several sources.
-+\fIw3m\fP has incorporated code from several sources.
- Users have contributed patches and suggestions over time.
- .SH AUTHOR
--Akinori ITO <aito@fw.ipsj.or.jp>
-+.UR aito@fw.ipsj.or.jp
-+Akinori ITO
-+.UE
-+
-diff --git a/scripts/w3mman/w3mman.1.in b/scripts/w3mman/w3mman.1.in
-index 1c0361d..1b1d990 100644
---- a/scripts/w3mman/w3mman.1.in
-+++ b/scripts/w3mman/w3mman.1.in
-@@ -1,4 +1,4 @@
--.TH W3MMAN 1 "Nov 5, 2005"
-+.TH W3MMAN 1 "Nov 23, 2014"
- .\" Please adjust this date whenever revising the manpage.
- .\"
- .\" Some roff macros, for reference:
-@@ -12,19 +12,19 @@
- .\" .sp <n> insert n+1 empty lines
- .\" for manpage-specific macros, see man(7)
- .SH NAME
--w3mman \- an interface to the on-line reference manuals by w3m(1)
-+w3mman \- an interface to the on-line reference manuals via w3m(1)
- .SH SYNOPSIS
- .B w3mman
--.RI "[-M " path ] " " [ section ] " page"
-+.RI "[\-M " path ] " " [ section ] " page"
- .br
- .B w3mman
--.RI "[-M " path "] -k " keyword
-+.RI "[\-M " path "] \-k " keyword
- .br
- .B w3mman
--.RI -l " file
-+.RI \-l " file
- .SH DESCRIPTION
- .B w3mman
--is the system's manual pager by
-+is a pager for manual pages, using
- .BR w3m (1).
- .SH OPTIONS
- A summary of options is included below.
-@@ -42,6 +42,7 @@ Specify
- Specify a
- .I file.
- .SH ENVIRONMENT
-+Two variables are available for debugging.
- .TP
- .B W3MMAN_W3M
- If W3MMAN_W3M is set, its value is used instead of @W3M@.
-@@ -51,7 +52,7 @@ If W3MMAN_MAN is set, its value is used instead of @MAN@.
- .SH FILES
- .TP
- .I @libexecdir@/@PACKAGE@/cgi-bin/w3mman2html.cgi
--convert manual page to html.
-+manual page to HTML convertor.
- .SH SEE ALSO
- .BR man (1),
- .BR w3m (1).
diff --git a/debian/patches/810_lang-de.patch b/debian/patches/810_lang-de.patch
deleted file mode 100644
index 831d85b..0000000
--- a/debian/patches/810_lang-de.patch
+++ /dev/null
@@ -1,921 +0,0 @@
-Subject: Add German translation
-Author: Markus Hiereth <markus.hiereth@freenet.de>
-Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763964
-
-diff --git a/po/LINGUAS b/po/LINGUAS
-index 1489115..ade7ca2 100644
---- a/po/LINGUAS
-+++ b/po/LINGUAS
-@@ -1,2 +1,2 @@
- # Set of available languages.
--ja
-+ja de
-diff --git a/po/de.po b/po/de.po
-new file mode 100644
-index 0000000..5e84022
---- /dev/null
-+++ b/po/de.po
-@@ -0,0 +1,903 @@
-+# German translation of w3m
-+# Copyright (C) 2014 Fumitoshi UKAI
-+# This file is distributed under the same license as the w3m package.
-+# Markus Hiereth <markus.hiereth@freenet.de>, 2014.
-+msgid ""
-+msgstr ""
-+"Project-Id-Version: w3m 0.5.3\n"
-+"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
-+"POT-Creation-Date: 2010-08-20 18:44+0900\n"
-+"PO-Revision-Date: 2014-10-19 11:15+0200\n"
-+"Last-Translator: Markus Hiereth <markus.hiereth@freenet.de>\n"
-+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
-+"Language: de\n"
-+"MIME-Version: 1.0\n"
-+"Content-Type: text/plain; charset=UTF-8\n"
-+"Content-Transfer-Encoding: 8bit\n"
-+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-+"X-Generator: Virtaal 0.7.1\n"
-+
-+#: menu.c:267
-+msgid " Back (b) "
-+msgstr " Zurück (b) "
-+
-+#: menu.c:268
-+msgid " Select Buffer(s) "
-+msgstr " Puffer auswählen (s) "
-+
-+#: menu.c:270
-+msgid " Select Tab (t) "
-+msgstr " Reiter auswählen (t) "
-+
-+#: menu.c:272
-+msgid " View Source (v) "
-+msgstr " Codeansicht (v) "
-+
-+#: menu.c:273
-+msgid " Edit Source (e) "
-+msgstr " Code bearbeiten (e) "
-+
-+#: menu.c:274
-+msgid " Save Source (S) "
-+msgstr " Code speichern (S) "
-+
-+#: menu.c:275
-+msgid " Reload (r) "
-+msgstr " Erneut laden (r) "
-+
-+#: menu.c:276 menu.c:283 menu.c:287
-+msgid " ---------------- "
-+msgstr " ---------------------- "
-+
-+#: menu.c:277
-+msgid " Go Link (a) "
-+msgstr " Ziel öffnen.. (a) "
-+
-+#: menu.c:278
-+msgid " on New Tab (n) "
-+msgstr " ..in neuem Reiter (n) "
-+
-+#: menu.c:279
-+msgid " Save Link (A) "
-+msgstr " Ziel speichern (A) "
-+
-+#: menu.c:280
-+msgid " View Image (i) "
-+msgstr " Bild anzeigen (i) "
-+
-+#: menu.c:281
-+msgid " Save Image (I) "
-+msgstr " Bild speichern (I) "
-+
-+#: menu.c:282
-+msgid " View Frame (f) "
-+msgstr " Frames zeigen (f) "
-+
-+#: menu.c:284
-+msgid " Bookmark (B) "
-+msgstr " Lesezeichen (B) "
-+
-+#: menu.c:285
-+msgid " Help (h) "
-+msgstr " Hilfe (h) "
-+
-+#: menu.c:286
-+msgid " Option (o) "
-+msgstr " Einstellungen (o) "
-+
-+#: menu.c:288
-+msgid " Quit (q) "
-+msgstr " Programm verlassen (q) "
-+
-+#: rc.c:60
-+msgid "External Viewer Setup"
-+msgstr "Konfiguration für externe Anzeigeprogramme"
-+
-+#: rc.c:61
-+msgid "Tab width in characters"
-+msgstr "Tabulatorbreite in Zeichen"
-+
-+#: rc.c:62
-+msgid "Indent for HTML rendering"
-+msgstr "Einzug bei HTML-Darstellung"
-+
-+#: rc.c:63
-+msgid "Number of pixels per character (4.0...32.0)"
-+msgstr "Anzahl von Pixeln pro Zeichen (4.0 bis 32.0)"
-+
-+#: rc.c:64
-+msgid "Number of pixels per line (4.0...64.0)"
-+msgstr "Anzahl von Pixeln pro Zeile (4.0 bis 64.0)"
-+
-+#: rc.c:65
-+#entsprechend Bescheibung aus MANUAL.html, mh 14.10.2014
-+msgid "Number of remembered lines when used as a pager"
-+msgstr "Anzahl gemerkter, über die Standardeingabe erhaltener Zeilen"
-+
-+#: rc.c:66
-+msgid "Use URL history"
-+msgstr "URL-Chronik verwenden"
-+
-+#: rc.c:67
-+msgid "Number of remembered URL"
-+msgstr "Anzahl von URLs in Chronik"
-+
-+#: rc.c:68
-+msgid "Save URL history"
-+msgstr "URL-Chronik speichern"
-+
-+#: rc.c:69
-+msgid "Render frames automatically"
-+msgstr "Frames selbstständig darstellen"
-+
-+#: rc.c:70
-+msgid "Treat argument without scheme as URL"
-+msgstr "Eingabe ohne Protokoll-Präfix als URL auffassen"
-+
-+#: rc.c:71
-+msgid "Use _self as default target"
-+msgstr "_self als Standard-Zielfenster verwenden"
-+
-+#: rc.c:72
-+msgid "Open link on new tab if target is _blank or _new"
-+msgstr "Link in neuem Reiter öffnen, falls für Zielfenster _blank oder _new definiert ist"
-+
-+#: rc.c:73
-+msgid "Open download list panel on new tab"
-+msgstr "Downloadliste in neuem Reiter öffnen"
-+
-+#: rc.c:74
-+msgid "Display link URL automatically"
-+msgstr "URL der Links selbstständig anzeigen"
-+
-+#: rc.c:75
-+msgid "Display link numbers"
-+msgstr "Linknummern anzeigen"
-+
-+#: rc.c:76
-+msgid "Display decoded URL"
-+msgstr "URL entschlüsselt anzeigen"
-+
-+#: rc.c:77
-+msgid "Display current line number"
-+msgstr "Aktuelle Zeilennummer anzeigen"
-+
-+#: rc.c:78
-+msgid "Display inline images"
-+msgstr "Eingebettete Bilder anzeigen"
-+
-+#: rc.c:79
-+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
-+msgstr "Pseudo-ALTs zu eingebetteten Bildern ohne ALT oder TITLE anzeigen"
-+
-+#: rc.c:81
-+msgid "Load inline images automatically"
-+msgstr "Eingebettete Bilder selbstständig laden"
-+
-+#: rc.c:82
-+msgid "Maximum processes for parallel image loading"
-+msgstr "Anzahl zulässiger Prozesse zum gleichzeitigen Laden von Bildern"
-+
-+#: rc.c:83
-+msgid "Use external image viewer"
-+msgstr "Externen Bildbetrachter verwenden"
-+
-+#: rc.c:84
-+msgid "Scale of image (%)"
-+msgstr "Bilder prozentual skalieren"
-+
-+#: rc.c:85
-+msgid "External command to display image"
-+msgstr "Befehl für externen Bildbetrachter"
-+
-+#: rc.c:86
-+msgid "Use link list of image map"
-+msgstr "Bei Grafiken mit eingebetteten Links Ziele auflisten"
-+
-+#: rc.c:88
-+msgid "Display file names in multi-column format"
-+msgstr "Dateinamen auf Spalten verteilt anzeigen"
-+
-+#: rc.c:89
-+msgid "Use ASCII equivalents to display entities"
-+msgstr "ASCII-Ersatz für in HTML benannte Zeichen verwenden"
-+
-+#: rc.c:90
-+msgid "Character type for border of table and menu"
-+msgstr "Zeichen zum Einrahmen von Tabellen und Menüs"
-+
-+#: rc.c:91
-+msgid "Fold lines in TEXTAREA"
-+msgstr "In Eingabefeldern vom Typ TEXTAREA Texte umbrechen"
-+
-+#: rc.c:92
-+msgid "Display INS, DEL, S and STRIKE element"
-+msgstr "Umsetzung der Elemente INS, DEL, S und STRIKE"
-+
-+#: rc.c:93
-+msgid "Display with color"
-+msgstr "In Farbe anzeigen"
-+
-+#: rc.c:94
-+msgid "Color of normal character"
-+msgstr "Farbe für normalen Text"
-+
-+#: rc.c:95
-+msgid "Color of anchor"
-+msgstr "Farbe für Links / Element A"
-+
-+#: rc.c:96
-+msgid "Color of image link"
-+msgstr "Farbe für Bilder / Element IMG"
-+
-+#: rc.c:97
-+msgid "Color of form"
-+msgstr "Farbe für Eingaben / Element INPUT"
-+
-+#: rc.c:98
-+msgid "Enable coloring of active link"
-+msgstr "Aktiven Link farblich hervorheben"
-+
-+#: rc.c:99
-+msgid "Color of currently active link"
-+msgstr "Farbe des derzeit aktiven Links "
-+
-+#: rc.c:100
-+msgid "Use visited link color"
-+msgstr "Besuchte Links farblich hervorheben"
-+
-+#: rc.c:101
-+msgid "Color of visited link"
-+msgstr "Farbe für besuchte Links"
-+
-+#: rc.c:102
-+msgid "Color of background"
-+msgstr "Hintergrundfarbe"
-+
-+#: rc.c:103
-+msgid "Color of mark"
-+msgstr "Farbe für Textmarken"
-+#msgstr "Farbe für Textmarkierungen"
-+
-+#: rc.c:104
-+msgid "Use proxy"
-+msgstr "Proxy verwenden"
-+
-+#: rc.c:105
-+msgid "URL of HTTP proxy host"
-+msgstr "URL des HTTP-Proxy-Hosts"
-+
-+#: rc.c:107
-+msgid "URL of HTTPS proxy host"
-+msgstr "URL des HTTPS-Proxy-Hosts"
-+
-+#: rc.c:110
-+msgid "URL of GOPHER proxy host"
-+msgstr "URL des GOPHER-Proxy-Hosts"
-+
-+#: rc.c:112
-+msgid "URL of FTP proxy host"
-+msgstr "URL des FTP-Proxy-Hosts"
-+
-+#: rc.c:113
-+msgid "Domains to be accessed directly (no proxy)"
-+msgstr "Ohne Proxy, direkt zu kontaktierende Domains"
-+
-+#: rc.c:114
-+msgid "Check noproxy by network address"
-+msgstr "Direkten Datentransfer ohne Proxy mittels Netzwerkadresse sicherstellen"
-+
-+#: rc.c:115
-+msgid "Disable cache"
-+msgstr "Zwischenspeicherung deaktivieren"
-+
-+#: rc.c:117
-+msgid "News server"
-+msgstr "News-Server"
-+
-+#: rc.c:118
-+msgid "Mode of news server"
-+msgstr "Modus des News-Servers"
-+
-+#: rc.c:119
-+msgid "Number of news messages"
-+msgstr "News-Anzahl"
-+
-+#: rc.c:121
-+msgid "Order of name resolution"
-+msgstr "Reihenfolge der Namens-Auflösung"
-+
-+#: rc.c:122
-+msgid "Directory corresponding to / (document root)"
-+msgstr "Wurzelverzeichnis für Dokumente (/)"
-+
-+#: rc.c:123
-+msgid "Directory corresponding to /~user"
-+msgstr "Pfad zum Benutzerverzeichnis (~)"
-+
-+#: rc.c:124
-+msgid "Directory corresponding to /cgi-bin"
-+msgstr "Verzeichnis für ausführbare Skripte (cgi-bin)"
-+
-+#: rc.c:125
-+msgid "Confirm when quitting with q"
-+msgstr "Das Programm erst nach Bestätigung verlassen"
-+
-+#: rc.c:126
-+msgid "Close tab if buffer is last when back"
-+msgstr "Reiter mit nur einem Puffer auf Zurück-Befehl hin schließen"
-+
-+#: rc.c:128
-+msgid "Enable mark operations"
-+msgstr "Arbeit mit Textmarken ermöglichen"
-+#msgstr "Arbeit mit Textmarkierungen ermöglichen"
-+
-+#: rc.c:130
-+msgid "Enable Emacs-style line editing"
-+msgstr "Zeilen wie in Emacs bearbeiten"
-+
-+#: rc.c:131
-+msgid "Enable vi-like numeric prefix"
-+msgstr "Vorangestellte Zahlen wie in vi aktivieren"
-+
-+#: rc.c:132
-+msgid "Move cursor to top line when going to label"
-+msgstr "Labels nach Aufsuchen immer oben positionieren"
-+
-+#: rc.c:133
-+msgid "Move cursor to top line when moving to next page"
-+msgstr "Beim Umblättern Eingabemarke nach oben setzen"
-+
-+#: rc.c:134
-+msgid "Fold lines of plain text file"
-+msgstr "Zeilen in Textdateien umbrechen"
-+
-+#: rc.c:135
-+msgid "Show line numbers"
-+msgstr "Zeilennummern anzeigen"
-+
-+#: rc.c:136
-+msgid "Show search string"
-+msgstr "Suchbegriff anzeigen"
-+
-+#: rc.c:137
-+msgid "List of mime.types files"
-+msgstr "Liste der mime.types-Dateien"
-+
-+#: rc.c:138
-+msgid "List of mailcap files"
-+msgstr "Liste der mailcap-Dateien"
-+
-+#: rc.c:139
-+msgid "List of urimethodmap files"
-+msgstr "Liste von Dateien mit URI-Methode-Zuordnungen"
-+
-+#: rc.c:140
-+msgid "Editor"
-+msgstr "Editor"
-+
-+#: rc.c:141
-+msgid "Mailer"
-+msgstr "Mail-Programm"
-+
-+#: rc.c:142
-+# korrespondiert mit Pulldown-Menü, daher verkürzt. mh 09.10.2014
-+msgid "How to call Mailer for mailto URLs with options"
-+msgstr "Umgang mit mailto-URLs"
-+
-+#: rc.c:143
-+msgid "External Browser"
-+msgstr "Externer Browser"
-+
-+#: rc.c:144
-+msgid "Second External Browser"
-+msgstr "Zweiter externer Browser"
-+
-+#: rc.c:145
-+msgid "Third External Browser"
-+msgstr "Dritter externer Browser"
-+
-+#: rc.c:146
-+# entsprechend file:///usr/share/doc/w3m/README.passwd
-+# Prüfung beanstandete auch passwd_file mit Zugriffbytes 600, mh, 05.10.2014
-+msgid "Disable secret file security check"
-+msgstr "Keine Prüfung der Sicherheit bei Dateien mit geheimem Inhalt"
-+
-+#: rc.c:147
-+msgid "Password file"
-+msgstr "Passwort-Datei"
-+
-+#: rc.c:148
-+msgid "File for setting form on loading"
-+msgstr "Datei mit vordefinierten Eingaben für Formulare"
-+
-+#: rc.c:149
-+msgid "Password for anonymous FTP (your mail address)"
-+msgstr "Passwort für anonyme FTP-Anmeldung (Ihre Mailadresse)"
-+
-+#: rc.c:150
-+msgid "Generate domain part of password for FTP"
-+msgstr "Domain-Teil des FTP-Passwortes erzeugen"
-+
-+#: rc.c:151
-+msgid "User-Agent identification string"
-+msgstr "Browserkennung übermitteln"
-+
-+#: rc.c:152
-+msgid "Accept-Encoding header"
-+msgstr "Accept-Encoding-Kopfzeile"
-+
-+#: rc.c:153
-+msgid "Accept header"
-+msgstr "Accept-Kopfzeile"
-+
-+#: rc.c:154
-+msgid "Accept-Language header"
-+msgstr "Accept-Language-Kopfzeile"
-+
-+#: rc.c:155
-+msgid "Treat URL-like strings as links in all pages"
-+msgstr "URL-artige Zeichenketten auf allen Seiten als Links auffassen"
-+
-+#: rc.c:156
-+msgid "Wrap search"
-+msgstr "Im Dokument umlaufend suchen"
-+
-+#: rc.c:157
-+msgid "Display unseen objects (e.g. bgimage tag)"
-+msgstr "Nicht gezeigte Objekte melden (z.B. Hintergrundbild)"
-+
-+#: rc.c:158
-+msgid "Uncompress compressed data automatically when downloading"
-+msgstr "Komprimierte Daten beim Download selbstständig dekomprimieren"
-+
-+#: rc.c:160
-+# String nicht in Optionen-Menü gefunden. mh, 05.10.2014
-+msgid "Run external viewer in a separate session"
-+msgstr "Externe Anzeigeprogramme in eigener Sitzung laufen lassen"
-+
-+#: rc.c:162
-+msgid "Run external viewer in the background"
-+msgstr "Externe Anzeigeprogramme im Hintergrund laufen lassen"
-+
-+#: rc.c:164
-+msgid "Use external program for directory listing"
-+msgstr "Externes Programm zum Auflisten von Verzeichnissen verwenden"
-+
-+#: rc.c:165
-+msgid "URL of directory listing command"
-+msgstr "URL des Befehls zum Auflisten von Verzeichnissen"
-+
-+#: rc.c:167
-+msgid "Enable dictionary lookup through CGI"
-+msgstr "Wörterbuchabfrage mittels CGI aktivieren"
-+
-+#: rc.c:168
-+msgid "URL of dictionary lookup command"
-+msgstr "URL des Befehls zur Wörterbuch-Abfrage"
-+
-+#: rc.c:170
-+msgid "Display link name for images lacking ALT"
-+msgstr "Bei Bildern ohne ALT-Angabe Linkziel anzeigen"
-+
-+#: rc.c:171
-+msgid "Index file for directories"
-+msgstr "Indexdatei für Verzeichnisse"
-+
-+#: rc.c:172
-+msgid "Prepend http:// to URL automatically"
-+msgstr "Ziel-Eingaben gegebenenfalls http:// voranstellen"
-+
-+#: rc.c:173
-+msgid "Default value for open-URL command"
-+msgstr "Vorgabewert bei der Adresseneingabe"
-+
-+#: rc.c:174
-+msgid "Decode Content-Transfer-Encoding when saving"
-+msgstr "Beim Speichern entsprechend Content-Transfer-Encoding entschlüsseln"
-+
-+#: rc.c:175
-+msgid "Preserve timestamp when saving"
-+msgstr "Zeitstempel beim Speichern erhalten"
-+
-+#: rc.c:177
-+msgid "Enable mouse"
-+msgstr "Maus aktivieren"
-+
-+#: rc.c:178
-+msgid "Scroll in reverse direction of mouse drag"
-+msgstr "Mausbewegungen entgegengesetzt scrollen"
-+
-+#: rc.c:179
-+msgid "Behavior of wheel scroll speed"
-+msgstr "Umsetzung der Mausradbewegung"
-+
-+#: rc.c:180
-+msgid "(A only)Scroll by # (%) of screen"
-+msgstr "(nur A) Um # % des Fensters scrollen"
-+
-+#: rc.c:181
-+msgid "(B only)Scroll by # lines"
-+msgstr "(nur B) Um # Zeilen scrollen"
-+
-+#: rc.c:183
-+msgid "Free memory of undisplayed buffers"
-+msgstr "Speicherplatz nicht angezeigter Puffer freigeben"
-+
-+#: rc.c:184
-+msgid "Suppress `Referer:' header"
-+msgstr "Referer-Kopfzeile unterdrücken"
-+
-+#: rc.c:185
-+msgid "Search case-insensitively"
-+msgstr "Groß- und Kleinschreibung beim Suchen ignorieren"
-+
-+#: rc.c:186
-+msgid "Use LESSOPEN"
-+msgstr "LESSOPEN verwenden"
-+
-+#: rc.c:189
-+msgid "Perform SSL server verification"
-+msgstr "SSL-Server-Verifizierung durchführen"
-+
-+#: rc.c:190
-+msgid "PEM encoded certificate file of client"
-+msgstr "PEM-kodierte Zertifikatsdatei des Clients"
-+
-+#: rc.c:191
-+msgid "PEM encoded private key file of client"
-+msgstr "PEM-kodierte private Schlüsseldatei des Clients"
-+
-+#: rc.c:192
-+msgid "Path to directory for PEM encoded certificates of CAs"
-+msgstr "Pfad zum Verzeichnis für PEM-kodierte Zertifikate von CAs"
-+
-+#: rc.c:193
-+msgid "File consisting of PEM encoded certificates of CAs"
-+msgstr "Datei mit PEM-kodierten Zertifikaten von CAs"
-+
-+#: rc.c:195
-+msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
-+msgstr "Liste unzulässiger SSL-Verfahren (2: SSLv2, 3: SSLv3, t: TLSv1)"
-+
-+#: rc.c:198
-+msgid "Enable cookie processing"
-+msgstr "Cookie-Verarbeitung aktivieren"
-+
-+#: rc.c:199
-+msgid "Print a message when receiving a cookie"
-+msgstr "Den Empfang von Cookies melden"
-+
-+#: rc.c:200
-+msgid "Accept cookies"
-+msgstr "Cookies akzeptieren"
-+
-+#: rc.c:201
-+msgid "Action to be taken on invalid cookie"
-+msgstr "Reaktion auf ungültiges Cookie"
-+
-+#: rc.c:202
-+msgid "Domains to reject cookies from"
-+msgstr "Domains, deren Cookies abzulehnen sind"
-+
-+#: rc.c:203
-+msgid "Domains to accept cookies from"
-+msgstr "Domains, deren Cookies akzeptiert werden"
-+
-+#: rc.c:204
-+# Variable vom Typ String im Abschnitt Cookies-Einstellungen, mh 10.10.2014
-+#, fuzzy
-+msgid "Domains to avoid [wrong number of dots]"
-+msgstr "Zu meidende Domains (falsche Anzahl von Punkten)"
-+
-+#: rc.c:206
-+msgid "Number of redirections to follow"
-+msgstr "Anzahl zu akzeptierender Umleitungen"
-+
-+# Konfigurationsvariable vom Typ string, mh, 05.10.2014
-+#: rc.c:207
-+msgid "Enable processing of meta-refresh tag"
-+msgstr "Meta-Refresh-Element verarbeiten"
-+
-+#: rc.c:210
-+msgid "Enable Migemo (Roma-ji search)"
-+msgstr "Romaji-Suche mittels Migemo aktivieren"
-+
-+#: rc.c:211
-+msgid "Migemo command"
-+msgstr "Migemo-Befehl"
-+
-+#: rc.c:215
-+msgid "Display charset"
-+msgstr "Zeichenkodierung der Anzeige"
-+
-+#: rc.c:216
-+msgid "Default document charset"
-+msgstr "Zeichenkodierungs-Vorgabe für Dokumente"
-+
-+#: rc.c:217
-+msgid "Automatic charset detect when loading"
-+msgstr "Selbstständige Erkennung der Zeichenkodierung beim Laden"
-+
-+#: rc.c:218
-+msgid "System charset"
-+msgstr "Zeichenkodierung des Systems"
-+
-+#: rc.c:219
-+msgid "System charset follows locale(LC_CTYPE)"
-+msgstr "Zeichenkodierung des Systems entsprechend Locale (LC_CTYPE)"
-+
-+#: rc.c:220
-+# war zuvor
-+# msgstr "Halfdump mit der zur Anzeige benutzten Zeichenkodierung exportieren"
-+msgid "Output halfdump with display charset"
-+msgstr "Halfdump in der zur Anzeige benutzten Kodierung"
-+
-+#: rc.c:221
-+# Konfigurationsvariable vom Typ boolean, mh, 05.10.2014
-+#, fuzzy
-+msgid "Use multi column characters"
-+msgstr "Spaltenübergreifende Zeichen verwenden"
-+
-+#: rc.c:222
-+msgid "Use combining characters"
-+msgstr "Kombinationszeichen verwenden"
-+
-+#: rc.c:223
-+msgid "Use double width for some Unicode characters"
-+msgstr "Einzelnen Unicode-Zeichen zwei Spalten einräumen"
-+
-+#: rc.c:224
-+msgid "Use Unicode language tags"
-+msgstr "Unicode-Sprach-Tags verwenden"
-+
-+#: rc.c:225
-+msgid "Charset conversion using Unicode map"
-+msgstr "Zeichen in Unicode kodieren"
-+
-+#: rc.c:226
-+msgid "Charset conversion when loading"
-+msgstr "Zeichenkodierung beim Laden anpassen"
-+
-+#: rc.c:227
-+msgid "Adjust search string for document charset"
-+msgstr "Zu suchende Zeichenkette der Kodierung des Dokumentes anpassen"
-+
-+#: rc.c:228
-+msgid "Fix character width when conversion"
-+msgstr "Bei Umwandlung an der Breite von Zeichen festhalten"
-+
-+#: rc.c:229
-+msgid "Use GB 12345 Unicode map instead of GB 2312's"
-+msgstr "GB-12345-Unicode statt GB 2312 verwenden"
-+
-+#: rc.c:230
-+msgid "Use JIS X 0201 Roman for ISO-2022-JP"
-+msgstr "JIS X 0201 Roman statt ISO-2022-JP verwenden"
-+
-+#: rc.c:231
-+msgid "Use JIS C 6226:1978 for ISO-2022-JP"
-+msgstr "JIS C 6226:1978 statt ISO-2022-JP verwenden"
-+
-+#: rc.c:232
-+msgid "Use JIS X 0201 Katakana"
-+msgstr "JIS X 0201 Katakana verwenden"
-+
-+#: rc.c:233
-+msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
-+msgstr "JIS X 0212:1990 verwenden (ergänzendes Kanji)"
-+
-+#: rc.c:234
-+msgid "Use JIS X 0213:2000 (2000JIS)"
-+msgstr "JIS X 0213:2000 verwenden (2000JIS)"
-+
-+#: rc.c:235
-+msgid "Strict ISO-2022-JP/KR/CN"
-+msgstr "Striktes ISO-2022-JP/KR/CN"
-+
-+#: rc.c:236
-+msgid "Treat 4 bytes char. of GB18030 as Unicode"
-+msgstr "4-Byte-Zeichen von GB 18030 als Unicode auffassen"
-+
-+#: rc.c:237
-+msgid "Simple Preserve space"
-+msgstr "Einfache Platzerhaltung"
-+
-+#: rc.c:240
-+msgid "keymap file"
-+msgstr "Tastaturbelegungs-Datei"
-+
-+#: rc.c:257
-+msgid "black"
-+msgstr "schwarz"
-+
-+#: rc.c:258
-+msgid "red"
-+msgstr "rot"
-+
-+#: rc.c:259
-+msgid "green"
-+msgstr "grün"
-+
-+#: rc.c:260
-+msgid "yellow"
-+msgstr "gelb"
-+
-+#: rc.c:261
-+msgid "blue"
-+msgstr "blau"
-+
-+#: rc.c:262
-+msgid "magenta"
-+msgstr "magenta"
-+
-+#: rc.c:263
-+msgid "cyan"
-+msgstr "cyan"
-+
-+#: rc.c:264
-+msgid "white"
-+msgstr "weiß"
-+
-+#: rc.c:265
-+msgid "terminal"
-+msgstr "wie Terminal"
-+
-+#: rc.c:284
-+msgid "none"
-+msgstr "keiner"
-+
-+#: rc.c:285
-+msgid "current URL"
-+msgstr "aktuelle URL"
-+
-+#: rc.c:286
-+msgid "link URL"
-+msgstr "Link-URL"
-+
-+#: rc.c:291
-+msgid "simple"
-+msgstr "einfach"
-+
-+#: rc.c:292
-+msgid "use tag"
-+msgstr "durch Tags"
-+
-+#: rc.c:293
-+msgid "fontify"
-+msgstr "hervorgehoben"
-+
-+#: rc.c:299
-+msgid "A:relative to screen height"
-+msgstr "A: relativ zu Fensterhöhe"
-+
-+#: rc.c:300
-+msgid "B:fixed speed"
-+msgstr "B: feste Geschwindigkeit"
-+
-+#: rc.c:307
-+msgid "unspecified"
-+msgstr "nicht spezifiziert"
-+
-+#: rc.c:308
-+msgid "inet inet6"
-+msgstr "inet inet6"
-+
-+#: rc.c:309
-+msgid "inet6 inet"
-+msgstr "inet6 inet"
-+
-+#: rc.c:310
-+msgid "inet only"
-+msgstr "nur inet"
-+
-+#: rc.c:311
-+msgid "inet6 only"
-+msgstr "nur inet6"
-+
-+#: rc.c:318
-+msgid "discard"
-+msgstr "verwerfen"
-+
-+#: rc.c:320
-+msgid "accept"
-+msgstr "annehmen"
-+
-+#: rc.c:322
-+msgid "ask"
-+msgstr "nachfragen"
-+
-+#: rc.c:329
-+# gehört zu rc.c:142
-+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
-+msgid "use internal mailer instead"
-+msgstr "Mail intern erstellen"
-+
-+#: rc.c:331
-+# gehört zu rc.c:142
-+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
-+msgid "ignore options and use only the address"
-+msgstr "Optionen ignorieren"
-+
-+#: rc.c:332
-+# gehört zu rc.c:142
-+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
-+msgid "use full mailto URL"
-+msgstr "komplett verwenden"
-+
-+#: rc.c:341
-+msgid "OFF"
-+msgstr "AUS"
-+
-+#: rc.c:342
-+msgid "Only ISO 2022"
-+msgstr "Nur ISO-2022"
-+
-+#: rc.c:343
-+msgid "ON"
-+msgstr "AN"
-+
-+#: rc.c:349
-+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
-+msgid "ASCII"
-+msgstr "ASCII"
-+
-+#: rc.c:350
-+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
-+# hier ist "Zeichensatz" akzeptabel mh, 09.10.2014
-+msgid "charset specific"
-+msgstr "zeichensatzspezifisch"
-+
-+#: rc.c:351
-+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
-+msgid "DEC special graphics"
-+msgstr "mit DEC-Grafiken"
-+
-+#: rc.c:714
-+msgid "Display Settings"
-+msgstr "Einstellungen zur Anzeige"
-+
-+#: rc.c:716
-+msgid "Color Settings"
-+msgstr "Farbeinstellungen"
-+
-+#: rc.c:718
-+msgid "Miscellaneous Settings"
-+msgstr "Weitere Einstellungen"
-+
-+#: rc.c:719
-+msgid "Directory Settings"
-+msgstr "Verzeichnis-Einstellungen"
-+
-+#: rc.c:720
-+msgid "External Program Settings"
-+msgstr "Einstellungen für externe Programme"
-+
-+#: rc.c:721
-+msgid "Network Settings"
-+msgstr "Netzwerk-Einstellungen"
-+
-+#: rc.c:722
-+msgid "Proxy Settings"
-+msgstr "Proxy-Einstellungen"
-+
-+#: rc.c:724
-+msgid "SSL Settings"
-+msgstr "SSL-Einstellungen"
-+
-+#: rc.c:727
-+msgid "Cookie Settings"
-+msgstr "Cookie-Einstellungen"
-+
-+#: rc.c:730
-+msgid "Charset Settings"
-+msgstr "Zeichenkodierungs-Einstellungen"
-+
-+#. TRANSLATORS:
-+#. * AcceptLang default: this is used in Accept-Language: HTTP request
-+#. * header. For example, ja.po should translate it as
-+#. * "ja;q=1.0, en;q=0.5" like that.
-+#.
-+#: rc.c:1209
-+msgid "en;q=1.0"
-+msgstr "de;q=1.0, en;q=0.5"
diff --git a/debian/patches/820_lang-ja.patch b/debian/patches/820_lang-ja.patch
deleted file mode 100644
index 12324d0..0000000
--- a/debian/patches/820_lang-ja.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Subject: Set Language tag properly for Japanese translation
-Author: zimous <zimous@matfyz.cz>
-Origin: https://512722.bugs.gentoo.org/attachment.cgi?id=378452
-Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=512722
-
-diff --git a/po/ja.po b/po/ja.po
-index 947191c..c16557a 100644
---- a/po/ja.po
-+++ b/po/ja.po
-@@ -12,7 +12,7 @@ msgstr ""
- "PO-Revision-Date: 2010-08-20 18:45+0900\n"
- "Last-Translator: Fumitoshi UKAI <ukai@debian.or.jp>\n"
- "Language-Team: Japanese\n"
--"Language: \n"
-+"Language: ja\n"
- "MIME-Version: 1.0\n"
- "Content-Type: text/plain; charset=UTF-8\n"
- "Content-Transfer-Encoding: 8bit\n"
diff --git a/debian/patches/900_ChangeLog.patch b/debian/patches/900_ChangeLog.patch
deleted file mode 100644
index 3482292..0000000
--- a/debian/patches/900_ChangeLog.patch
+++ /dev/null
@@ -1,613 +0,0 @@
-Subject: Update ChangeLog
-From: Tatsuya Kinoshita <tats@debian.org>
-
-diff --git a/ChangeLog b/ChangeLog
-index 88358ef..7629962 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,605 @@
-+2015-01-24 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * acinclude.m4, configure, version.c.in:
-+ Update to 0.5.3+gitYYYYMMDD (generate from ChangeLog).
-+
-+2015-01-15 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * alloc.h, main.c: Drop C99 features.
-+
-+2015-01-15 Scarlett <scarlett@xavin.net>
-+
-+ Add overflow detection.
-+ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
-+ * main.c: Call exit(1) when out of memory to avoid dereferencing null
-+ pointers when gc's malloc fails.
-+ * alloc.h: Replacements for w3m's allocation macros which add
-+ overflow detection and concentrate the macros in one file.
-+ * indep.h, libwc/charset.c, libwc/status.c, matrix.c: Use the
-+ overflow-detecting allocation macros from alloc.h.
-+
-+2015-01-15 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * Str.c, cookie.c, map.c:
-+ Do not use C99 printf format specifiers and asprintf.
-+
-+2015-01-15 Scarlett <scarlett@xavin.net>
-+
-+ Correct printf arguments and use asprintf.
-+ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
-+ * Str.c: Use asprintf() instead of rolling our own printf string
-+ length detection.
-+ * cookie.c: Pass the char pointer in the string struct to printf %s
-+ instead of the string struct itself.
-+ Print time_t using %lld instead of %ld to allow for 64-bit time_t.
-+ * main.c: Print a long int using the correct format specifier.
-+ * map.c: Print size_t using the correct format specifier.
-+
-+2014-12-06 Araki Ken <arakiken@users.sf.net>
-+
-+ Support OSC 5379 remote imaging and sixel graphics.
-+ Origin: https://bitbucket.org/arakiken/w3m/branch/remoteimg (2014-11-16)
-+
-+ * doc/README.sixel, terms.c: Add README.sixel. W3M_IMG2SIXEL
-+ environmental variable enables to specify options of img2sixel.
-+
-+ * image.c, terms.c:
-+ Add n_terminal_image argument to put_image_{sixel|osc5379}().
-+ Use struct winsize to calculate ppc and ppl.
-+
-+ * terms.c: If SCREEN_VARIANT=sixel on GNU screen, exec img2sixel
-+ without -P option.
-+
-+ * terms.c: ttymode_set() -> ttymode_reset().
-+
-+ * terms.c: Fix.
-+
-+ * terms.c: Support GNU screen.
-+
-+ * terms.c: Show GIF (except animation GIF) correctly.
-+
-+ * main.c, terms.c: img2sixel exits by Ctrl+C. Enable GIF Animation if
-+ 'I' is pressed to show it.
-+
-+ * image.c: Add declaration of get_pixel_per_cell().
-+
-+ * terms.c: Show the first frame of animation gif files.
-+
-+ * terms.c: system() -> fork()&execvp()
-+
-+ * display.c: Draw underline on anchor which contains cboth text and
-+ images.
-+
-+ * etc.c: Remove close_tty() from setup_child() because close_tty()
-+ sometimes interrupts loadGeneralFile() in loadImage() and corrupt
-+ image data can be cached in ~/.w3m.
-+
-+ * image.c: Minor fix.
-+
-+ * image.c: Cache image files if at all possible and convert them to
-+ sixel when -sixel option is specified.
-+
-+ * image.c: Init pixel_per_{char|line}_i if get_pixel_per_cell() fails.
-+
-+ * display.c, file.c, fm.h, image.c, main.c, terms.c:
-+ Add -sixel option which supports image processing by img2sixel.
-+
-+ * image.c: Don't download image files whose size is specified in
-+ <img> tag.
-+
-+ * image.c: Minor fixes of parseImageHeader().
-+
-+ * image.c: Determine the format of an image file by its header data
-+ not by its file name suffix.
-+
-+ * image.c: Read width and height from jpeg, png and gif files directly
-+ instead of executing w3mimgdisplay -size.
-+
-+ * display.c: display.c: Draw underline on anchor text which is not
-+ overlapped with any image.
-+
-+ * terms.c: Clear fd_set by FD_ZERO() before select().
-+
-+ * file.c: nw and ni are rounded up instead of rounded off to show
-+ every corner of images.
-+
-+ * terms.c: Change time to wait for the response of "\x1b[14t\x1b[18t"
-+ from 0.1 sec to 0.5 sec.
-+
-+ * image.c:
-+ - clearImage() works.
-+ - Use cached image files created by w3m in getImage().
-+
-+ * file.c: Hack for alignment.
-+
-+ * fm.h, image.c, terms.c:
-+ - Adjust the image size to the terminal cell size.
-+ - If the image size is specified in html source, skip to load the image.
-+
-+ * display.c, fm.h, image.c, main.c, terms.c, w3mimg/x11/x11_w3mimg.c:
-+ Support remote image by OSC 5379 show_picture sequence.
-+
-+2014-12-06 Olaf Hering <olh@suse.de>
-+
-+ * parsetagx.c: Fix crash in parse_tag() during every start.
-+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-parsetagx-crash.patch?expand=1
-+
-+ * fm.h: Change the default to alt_entity=0.
-+ Change the default for the option "Use ASCII equivalents to
-+ display entities" from YES to NO.
-+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.5.1-no-ASCII-equivalents-by-default.patch?expand=1
-+ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=247397
-+
-+ * anchor.c, libwc/gb18030.c, libwc/ucs.c, regex.c:
-+ Fix a few harmless uninitialized variables.
-+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-uninitialized.patch?expand=1
-+
-+2014-12-06 Peter Poeml <poeml@suse.de>
-+
-+ * terms.c: Prevent segfault when editing a textarea field with vi.
-+ Add fix for segfault that can occur when editing a textarea field
-+ with vi, and returning to w3m (it seems to happen if the terminal
-+ is not writable, as when using w3m after 'su - some_user')
-+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.4.1-textarea-segfault.dif?expand=1
-+
-+2014-12-04 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * acinclude.m4: Follow updated configure.
-+
-+2014-12-03 Yusuke Baba <babayaga1@y8.dion.ne.jp>
-+
-+ * configure, w3mimg/fb/fb.c, w3mimg/fb/fb.h, w3mimg/fb/fb_w3mimg.c:
-+ Support FreeBSD framebuffer.
-+ Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html
-+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673
-+
-+2014-12-02 Naohiro Aota <naota@gentoo.org>
-+
-+ * acinclude.m4, configure, w3mimg/fb/fb_gdkpixbuf.c:
-+ * w3mimg/x11/x11_w3mimg.c:
-+ Depend on gdk-pixbuf instead of gtk when gtk2.
-+ Origin: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-gdk-pixbuf.patch?revision=1.1
-+
-+2014-12-02 Jeroen Roovers <jer@gentoo.org>
-+
-+ * acinclude.m4, configure: Add tinfo to with_termlib.
-+ Fix building against sys-libs/ncurses[tinfo].
-+ Origin: https://504588.bugs.gentoo.org/attachment.cgi?id=372650
-+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=504588
-+
-+2014-12-01 OBATA Akio <obache@netbsd.org>
-+
-+ * acinclude.m4, configure:
-+ Assume defined PKG_CONFIG points right location when gtk2.
-+ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-aa?rev=1.13&content-type=text/x-cvsweb-markup
-+ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-ak?rev=1.1&content-type=text/x-cvsweb-markup
-+
-+2014-12-01 Vsevolod Stakhov <vsevolod@FreeBSD.org>
-+
-+ * config.h.in: Disable USE_EGD for LibreSSL.
-+ Disable use of RAND_egd as it is absent in FreeBSD.
-+ This also fixes build error with LibreSSL.
-+ Origin: https://bz-attachments.freebsd.org/attachment.cgi?id=144635
-+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191852
-+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191956
-+
-+2014-12-01 zimous <zimous@matfyz.cz>
-+
-+ * po/ja.po: Set Language tag properly for Japanese translation.
-+ Origin: https://512722.bugs.gentoo.org/attachment.cgi?id=378452
-+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=512722
-+
-+2014-11-30 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * doc/w3m.1: Typo fix.
-+
-+2014-11-30 Markus Hiereth <post@hiereth.de>
-+
-+ * doc/w3m.1: Miscellaneous changes to improve English manpage.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
-+
-+2014-11-29 Markus Hiereth <post@hiereth.de>
-+
-+ * doc/w3m.1: Improve FILES.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
-+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=403634
-+
-+ * doc/w3m.1: Improve EXAMPLES.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
-+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=380560
-+
-+ * doc/w3m.1: Improve explanation about option -N.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
-+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=345084
-+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=530468
-+
-+ * doc/w3m.1: Note that -cols only affects when HTML is rendered.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
-+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=285251
-+
-+ * doc/w3m.1: Add more info on configuration.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
-+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=268211
-+
-+2014-11-29 Justin B Rye <justin.byam.rye@gmail.com>
-+
-+ * scripts/w3mman/w3mman.1.in: Tweak for W3MMAN_W3M.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771003#5
-+
-+ * scripts/w3mman/w3mman.1.in: English fixes.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#25
-+
-+2014-11-29 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-19+.
-+
-+2014-11-29 Justin B Rye <justin.byam.rye@gmail.com>
-+
-+ * scripts/w3mman/w3mman2html.cgi.in: Fix Perl warnings.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771004
-+
-+2014-10-21 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-19
-+
-+ * po/LINGUAS: Correct LINGUAS to a whitespace separated list
-+
-+2014-10-21 Markus Hiereth <markus.hiereth@freenet.de>
-+
-+ * po/LINGUAS, po/de.po: Add German translation
-+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763964
-+
-+2014-10-15 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-18
-+
-+ * doc-jp/README.SSL: Update README.SSL to follow default values
-+
-+ * config.sub: Update config.sub with autotools-dev 20140911.1
-+
-+ * fm.h: Disable SSLv3 by default [CVE-2014-3566]
-+ cf. https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/
-+
-+2014-10-15 Ludwig Nussel <ludwig.nussel@suse.de>
-+
-+ * fm.h: Force ssl_verify_server on and disable SSLv2 support
-+ Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4
-+
-+2014-10-13 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-17+
-+
-+2014-10-04 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * libwc/ambwidth_map.awk, libwc/map/ucs_ambwidth.map:
-+ Fix incorrect generation of ucs_ambwidth_map
-+
-+2014-08-22 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-17
-+
-+ * config.guess:
-+ Update config.guess to 2014-03-23 with autotools-dev 20140510.1
-+
-+ * config.sub:
-+ Update config.sub to 2014-05-01 with autotools-dev 20140510.1
-+
-+2014-08-22 Micah Cowan <micah@addictivecode.org>
-+
-+ * main.c: Support Boehm GC 7.2
-+ Replace Gentoo's patch to prevent segfaults due to infinite recursion.
-+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=080_gc72.patch;att=1;bug=758831
-+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758831
-+ Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=555467
-+ Bug: http://sourceforge.net/p/w3m/patches/63/
-+ Bug: http://sourceforge.net/p/w3m/patches/59/
-+
-+2014-08-22 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * main.c:
-+ Revert "Support Boehm GC 7.2" (w3m-0.5.2-gc72.patch from Gentoo)
-+ This reverts commit 4331db3e3e673ac4dbfe8e9f2b42a8e0478dc98a.
-+
-+2014-06-23 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-16
-+
-+ * url.c: Disable ciphers that use keys smaller than 128 bits
-+ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1325674
-+
-+2014-01-04 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-15
-+
-+2014-01-03 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-14
-+
-+ * acinclude.m4, configure: Use pkg-config to build with imlib2 1.4.6
-+
-+ * doc/HISTORY, doc/README.cookie, doc/README.m17n:
-+ Prefer US-ASCII rathar than Japanese encodings in English documents
-+
-+2013-12-27 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * doc-jp/MANUAL.html, doc/MANUAL.html:
-+ Cleanup unusable links in MANUAL.html
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517315
-+
-+ * version.c.in: Update to 0.5.3+debian-13+
-+
-+2013-12-17 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-13
-+
-+2013-12-14 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * config.guess:
-+ Update config.guess to 2013-06-10 with autotools-dev 20130810.1
-+
-+ * config.sub:
-+ Update config.sub to 2013-08-10 with autotools-dev 20130810.1
-+
-+2013-12-07 Reinhard Max <max@suse.de>
-+
-+ * local.c: Fix a directory descriptor leak in loadLocalDir
-+ Patch from openSUSE on 2009-09-07.
-+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-closedir.patch
-+ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=531675
-+
-+2013-12-07 AIDA Shinra <shinra@j10n.org>
-+
-+ * main.c: Fix crash after SEARCH_NEXT
-+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-search-next.patch>,
-+ [w3m-dev:04473] on 2013-12-07.
-+
-+2013-11-11 Paul Boekholt <p.boekholt@gmail.com>
-+
-+ * file.c: Add support for single quoted meta refresh URL
-+ Bug: https://sourceforge.net/p/w3m/patches/53/
-+
-+2013-11-07 Cristian Rodriguez <crrodriguez@opensuse.org>
-+
-+ * url.c: Use SSL_OP_NO_COMPRESSION if available
-+ Due to the "CRIME attack" (CVE-2012-4929) HTTPS clients that
-+ negotiate TLS-level compression can be abused for MITM attacks.
-+ * url.c: Use SSL_MODE_RELEASE_BUFFERS if available
-+ Patch from openSUSE on 2012-11-12:
-+ https://build.opensuse.org/request/show/141054
-+
-+2013-10-15 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * Makefile.in:
-+ Depend on funcname.tab to fix parallel make issue of scripts
-+ Bug: https://sourceforge.net/p/w3m/patches/64/
-+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=362249
-+
-+ * w3mimg/Makefile.in:
-+ Avoid prerequisite $(IMGOBJS) to fix parallel make issue of w3mimg
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726188
-+
-+ * acinclude.m4, configure:
-+ Explicitly add -lX11 to IMGX11LDFLAGS only when gtk2
-+ Bug: https://sourceforge.net/p/w3m/patches/57/
-+
-+ * w3mimg/Makefile.in: Revert "Fix parallel make issue"
-+ This reverts commit aa6f871c6dcc108118142bcc786e4a6ac3d46867.
-+
-+ * Makefile.in:
-+ Revert "Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5"
-+ This reverts commit 7410954066d68ac2ad6aea638801714447321fec.
-+
-+2013-10-14 AIDA Shinra <shinra@j10n.org>
-+
-+ * url.c: Define schemeNumToName() to fix scheme bug
-+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-schemebug.patch>,
-+ [w3m-dev:04470] on 2013-10-14.
-+ Bug: https://sourceforge.net/p/w3m/patches/60/
-+
-+ * config.h.in, file.c, fm.h, html.h, image.c, indep.c, indep.h:
-+ * istream.c, istream.h, local.c, main.c, mimehead.c, proto.h:
-+ Workaround of GC crash on Cygwin64
-+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch>,
-+ [w3m-dev:04469] on 2013-10-14.
-+
-+2013-10-14 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-12+
-+
-+2013-10-14 Jarek Czekalski <jarekczek@poczta.onet.pl>
-+
-+ * terms.c: Fix paren in check_cygwin_console()
-+ Bug: https://sourceforge.net/p/w3m/patches/66/
-+
-+2013-10-13 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-12
-+
-+ * doc-jp/MANUAL.html, doc-jp/w3m.1, doc/MANUAL.html, doc/w3m.1:
-+ Update document for the -s option change
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527
-+
-+ * terms.c: Do not fail when LANG is not set
-+ Check whether the value of LC_ALL, LC_CTYPE or LANG is not NULL in
-+ check_cygwin_console().
-+ Bug: https://sourceforge.net/p/w3m/patches/66/
-+
-+2013-10-12 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * table.h: Bump MAXCOL to 256
-+ Bug: https://sourceforge.net/p/w3m/feature-requests/24/
-+
-+2013-10-12 Laurence Richert <laurencerichert@yahoo.de>
-+
-+ * main.c, proto.h: vim/-perator like handling
-+ - half page scrolling
-+ - jumping to elements numbered by getLinkNumberStr() from Karsten
-+ Schoelzel
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028
-+
-+2013-10-12 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * doc-jp/README, doc/README:
-+ Mention project page rather than unavailable mailing lists
-+
-+2013-10-09 Rafael Laboissiere <rafael@laboissiere.net>
-+
-+ * doc/README.img: Fix typo
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=725892
-+
-+2013-08-12 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-11+
-+
-+ * ChangeLog: Update ChangeLog to use contributor's name
-+
-+2013-08-08 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-11
-+
-+2013-08-04 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * Str.c: Check length for Strchop()
-+
-+ * main.c: Fix potentially segfault of execdict()
-+
-+ * version.c.in: Update to 0.5.3+debian-10+
-+
-+ * file.c: Fix segfault of loadGeneralFile()
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718612
-+
-+2013-08-02 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-10
-+
-+2013-08-02 Piotr P. Karwasz <piotr.p@karwasz.org>
-+
-+ * scripts/w3mman/w3mman2html.cgi.in:
-+ Correct underline processing and more UTF-8 support for w3mman2html.cgi
-+ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/680202>
-+ on 2010-11-23.
-+
-+2013-08-01 Hilko Bengen <bengen@debian.org>
-+
-+ * entity.c: Ignore SOFT HYPHEN to prevent drawing hyphens everywhere
-+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441934>
-+ on 2011-03-01.
-+
-+2013-08-01 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * doc-jp/README, doc/README: Update contact list in README
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696209
-+
-+2013-07-30 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * config.guess, config.sub:
-+ Update config.guess and config.sub to supprot aarch64
-+ Updated with Debian autotools-dev version 20130515.1.
-+
-+2013-07-30 Conrad J.C. Hughes <debbugs@xrad.org>
-+
-+ * main.c: Sort anchors by sequence number in -dump
-+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657666>
-+ on 2012-01-27.
-+
-+2013-07-30 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update to 0.5.3+debian-9+
-+
-+2013-07-29 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * version.c.in: Update version to w3m/0.5.3+debian-9
-+
-+ * version.c.in: Set CURRENT_VERSION to debian version
-+
-+2013-07-28 Tatsuya Kinoshita <tats@debian.org>
-+
-+ * file.c: Fix segfault of process_button()
-+
-+2013-04-08 AIDA Shinra <shinra@j10n.org>
-+
-+ * file.c: One more patch for siteconf from [w3m-dev 04464]
-+
-+ * anchor.c, config.h.in, display.c, doc-jp/README.siteconf:
-+ * doc/README.siteconf, file.c, fm.h, form.c, frame.c, func.c:
-+ * history.c, indep.c, indep.h, linein.c, main.c, map.c, menu.c:
-+ * po/ja.po, proto.h, rc.c, url.c: Support the siteconf feature
-+ Patch to support the siteconf feature, from [w3m-dev 04463]
-+ on 2012-06-27.
-+
-+2013-04-08 Hayaki Saito <user@zuse.jp>
-+
-+ * keybind.c, main.c, proto.h, terms.c:
-+ Support SGR 1006 mouse reporting
-+ Patch to support SGR 1006 mouse reporting, from [w3m-dev 04466]
-+ on 2012-07-15.
-+
-+2012-05-19 Hilko Bengen <bengen@debian.org>
-+
-+ * form.c: Assume "text" if an input type is unknown
-+ Patch from <http://bugs.debian.org/615843> on 2011-03-01.
-+
-+2012-05-19 Simon Ruderich <simon@ruderich.org>
-+
-+ * Makefile.in: Use $(CPPFLAGS) with $(CPP)
-+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665491>
-+ on 2012-03-24.
-+
-+2012-05-03 Miroslav Šulc <fordfrog@gentoo.org>
-+
-+ * w3mimg/Makefile.in: Fix parallel make issue
-+ Patch from Gentoo
-+ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-parallel-make.patch?revision=1.1&view=markup>
-+ <https://bugs.gentoo.org/show_bug.cgi?id=353390> on 2011-02-01.
-+
-+2012-05-03 MATSUU Takuto <matsuu@gentoo.org>
-+
-+ * main.c: Support Boehm GC 7.2
-+ Patch from Gentoo
-+ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.2-gc72.patch?revision=1.1&view=markup>
-+ on 2009-12-13.
-+
-+2012-05-02 Reinhard Tartler <siretart@tauware.de>
-+
-+ * istream.c, istream.h:
-+ Fix that struct file_handle conflicts with glibc 2.14
-+ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/935540>
-+ on 2012-02-19.
-+
-+2011-10-30 Colin Watson <cjwatson@ubuntu.com>
-+
-+ * acinclude.m4, configure, w3mbookmark.c:
-+ Appease gcc -Werror=format-security.
-+ Patch from 0.5.3-3ubuntu1 on 2011-10-23.
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646321
-+
-+2011-06-19 Martin Pitt <martin.pitt@ubuntu.com>
-+
-+ * Makefile.in:
-+ Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5
-+ Patch from 0.5.2-10ubuntu1 on 2010-12-03.
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605761
-+
-+2011-06-19 Fumitoshi UKAI <ukai@debian.or.jp>
-+
-+ * main.c:
-+ Change the -s option to "squeeze multiple blank lines" for pager
-+ Change the -s option from "display charset Shift_JIS" to "squeeze
-+ multiple blank lines" to work as /usr/bin/pager. In addition, the
-+ options -j and -e are disabled. To specify the display charset,
-+ use -O{s|j|e} instead.
-+ Patch from [w3m-dev 01275] on 2000-10-26.
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527
-+
-+2011-06-19 Hiroyuki Ito <ZXB01226@nifty.com>
-+
-+ * file.c, fm.h, html.c, html.h, proto.h, table.c, tagtable.tab:
-+ Support the button element as defined in HTML 4.01
-+ Patch from upstream, [w3m-dev 04411] on 2010-09-17, to support the
-+ button element. It is discussed upstream and incomplete, but enough
-+ to login Launchpad.
-+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=136810
-+
- 2012-05-22 Tatsuya Kinoshita <tats@vega.ocn.ne.jp>
-
- * [w3m-dev 04451] w3m/entity.h should be removed when `make clean'
diff --git a/debian/patches/series b/debian/patches/series
index 1f5a350..4c59f00 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,52 +1,2 @@
010_upstream.patch
-015_debian-version.patch
-020_button.patch
-030_pager-s-option.patch
-040_link-gtk2.patch
-#050_autotools-config.patch
-060_format-security.patch
-070_glibc2.14.patch
-080_gc72.patch
-090_parallel-make.patch
-100_use-cppflags.patch
-110_form-input-text.patch
-120_sgrmouse.patch
-130_siteconf.patch
-140_sort-dump-links.patch
-150_contact-list.patch
-160_ignore-shy.patch
-170_w3mman2html-utf8.patch
-180_execdict.patch
-190_Strchop.patch
-200_readme-img-typo.patch
-210_vim-like.patch
-220_maxcol.patch
-230_cygwin-lang.patch
-240_win64gc.patch
-250_schemebug.patch
-260_openssl.patch
-270_refresh-url.patch
-280_search-next.patch
-290_closedir.patch
-300_manual-links.patch
-310_doc-ascii.patch
-320_imlib2-config.patch
-330_Disable-weak-ciphers.patch
-340_ssl-init.patch
-350_ambwidth.patch
-360_libressl.patch
-370_gtk2-pkg-config.patch
-380_tinfo.patch
-390_gdk-pixbuf.patch
-400_w3m-img-freebsd.patch
-410_textarea-segfault.patch
-420_uninitialized.patch
-430_no-ascii-default.patch
-440_parsetagx-crash.patch
-450_remoteimg.patch
-460_printf.patch
-470_alloc.patch
-800_lang-en.patch
-810_lang-de.patch
-820_lang-ja.patch
-900_ChangeLog.patch
+020_debian.patch