diff options
| author | Tatsuya Kinoshita <tats@vega.ocn.ne.jp> | 2012-05-22 14:06:58 +0000 | 
|---|---|---|
| committer | Tatsuya Kinoshita <tats@vega.ocn.ne.jp> | 2012-05-24 14:06:47 +0000 | 
| commit | 620796f8d750bc58e1cf1327ff54aed32e302c73 (patch) | |
| tree | 52aa23dbe058c0c580a508bf24e61611bf805cdf | |
| parent | Adding upstream version 0.5.3 (diff) | |
| download | w3m-620796f8d750bc58e1cf1327ff54aed32e302c73.tar.gz w3m-620796f8d750bc58e1cf1327ff54aed32e302c73.zip | |
Remove garbage files
Diffstat (limited to '')
86 files changed, 0 insertions, 15309 deletions
| diff --git a/.#file.c.1.243 b/.#file.c.1.243 deleted file mode 100644 index 411aa7a..0000000 --- a/.#file.c.1.243 +++ /dev/null @@ -1,8188 +0,0 @@ -/* $Id: file.c,v 1.243 2006/05/29 12:54:26 inu Exp $ */ -#include "fm.h" -#include <sys/types.h> -#include "myctype.h" -#include <signal.h> -#include <setjmp.h> -#if defined(HAVE_WAITPID) || defined(HAVE_WAIT3) -#include <sys/wait.h> -#endif -#include <stdio.h> -#include <time.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <utime.h> -/* foo */ - -#include "html.h" -#include "parsetagx.h" -#include "local.h" -#include "regex.h" - -#ifndef max -#define max(a,b)        ((a) > (b) ? (a) : (b)) -#endif				/* not max */ -#ifndef min -#define min(a,b)        ((a) > (b) ? (b) : (a)) -#endif				/* not min */ - -static int frame_source = 0; - -static char *guess_filename(char *file); -static int _MoveFile(char *path1, char *path2); -static void uncompress_stream(URLFile *uf, char **src); -static FILE *lessopen_stream(char *path); -static Buffer *loadcmdout(char *cmd, -			  Buffer *(*loadproc) (URLFile *, Buffer *), -			  Buffer *defaultbuf); -#ifndef USE_ANSI_COLOR -#define addnewline(a,b,c,d,e,f,g) _addnewline(a,b,c,e,f,g) -#endif -static void addnewline(Buffer *buf, char *line, Lineprop *prop, -		       Linecolor *color, int pos, int width, int nlines); -static void addLink(Buffer *buf, struct parsed_tag *tag); - -static JMP_BUF AbortLoading; - -static struct table *tables[MAX_TABLE]; -static struct table_mode table_mode[MAX_TABLE]; - -#ifdef USE_IMAGE -static ParsedURL *cur_baseURL = NULL; -#ifdef USE_M17N -static char cur_document_charset; -#endif -#endif - -static Str cur_title; -static Str cur_select; -static Str select_str; -static int select_is_multiple; -static int n_selectitem; -static Str cur_option; -static Str cur_option_value; -static Str cur_option_label; -static int cur_option_selected; -static int cur_status; -#ifdef MENU_SELECT -/* menu based <select>  */ -FormSelectOption *select_option; -static int max_select = MAX_SELECT; -static int n_select; -static int cur_option_maxwidth; -#endif				/* MENU_SELECT */ - -static Str cur_textarea; -Str *textarea_str; -static int cur_textarea_size; -static int cur_textarea_rows; -static int cur_textarea_readonly; -static int n_textarea; -static int ignore_nl_textarea; -static int max_textarea = MAX_TEXTAREA; - -static int http_response_code; - -#ifdef USE_M17N -static wc_ces content_charset = 0; -static wc_ces meta_charset = 0; -static char *check_charset(char *p); -static char *check_accept_charset(char *p); -#endif - -#define set_prevchar(x,y,n) Strcopy_charp_n((x),(y),(n)) -#define set_space_to_prevchar(x) Strcopy_charp_n((x)," ",1) - -struct link_stack { -    int cmd; -    short offset; -    short pos; -    struct link_stack *next; -}; - -static struct link_stack *link_stack = NULL; - -#define FORMSTACK_SIZE 10 -#define FRAMESTACK_SIZE 10 - -#ifdef USE_NNTP -#define Str_news_endline(s) ((s)->ptr[0]=='.'&&((s)->ptr[1]=='\n'||(s)->ptr[1]=='\r'||(s)->ptr[1]=='\0')) -#endif				/* USE_NNTP */ - -#define INITIAL_FORM_SIZE 10 -static FormList **forms; -static int *form_stack; -static int form_max = -1; -static int forms_size = 0; -#define cur_form_id ((form_sp >= 0)? form_stack[form_sp] : -1) -static int form_sp = 0; - -static clen_t current_content_length; - -static int cur_hseq; -#ifdef USE_IMAGE -static int cur_iseq; -#endif - -#define MAX_UL_LEVEL	9 -#define UL_SYMBOL(x)	(N_GRAPH_SYMBOL + (x)) -#define UL_SYMBOL_DISC		UL_SYMBOL(9) -#define UL_SYMBOL_CIRCLE	UL_SYMBOL(10) -#define UL_SYMBOL_SQUARE	UL_SYMBOL(11) -#define IMG_SYMBOL		UL_SYMBOL(12) -#define HR_SYMBOL	26 - -#ifdef USE_COOKIE -/* This array should be somewhere else */ -/* FIXME: gettextize? */ -char *violations[COO_EMAX] = { -    "internal error", -    "tail match failed", -    "wrong number of dots", -    "RFC 2109 4.3.2 rule 1", -    "RFC 2109 4.3.2 rule 2.1", -    "RFC 2109 4.3.2 rule 2.2", -    "RFC 2109 4.3.2 rule 3", -    "RFC 2109 4.3.2 rule 4", -    "RFC XXXX 4.3.2 rule 5" -}; -#endif - -/* *INDENT-OFF* */ -static struct compression_decoder { -    int type; -    char *ext; -    char *mime_type; -    int auxbin_p; -    char *cmd; -    char *name; -    char *encoding; -    char *encodings[4]; -} compression_decoders[] = { -    { CMP_COMPRESS, ".gz", "application/x-gzip", -      0, GUNZIP_CMDNAME, GUNZIP_NAME, "gzip",  -      {"gzip", "x-gzip", NULL} },  -    { CMP_COMPRESS, ".Z", "application/x-compress", -      0, GUNZIP_CMDNAME, GUNZIP_NAME, "compress", -      {"compress", "x-compress", NULL} },  -    { CMP_BZIP2, ".bz2", "application/x-bzip", -      0, BUNZIP2_CMDNAME, BUNZIP2_NAME, "bzip, bzip2", -      {"x-bzip", "bzip", "bzip2", NULL} },  -    { CMP_DEFLATE, ".deflate", "application/x-deflate", -      1, INFLATE_CMDNAME, INFLATE_NAME, "deflate", -      {"deflate", "x-deflate", NULL} },  -    { CMP_NOCOMPRESS, NULL, NULL, 0, NULL, NULL, NULL, {NULL}}, -}; -/* *INDENT-ON* */ - -#define SAVE_BUF_SIZE 1536 - -static MySignalHandler -KeyAbort(SIGNAL_ARG) -{ -    LONGJMP(AbortLoading, 1); -    SIGNAL_RETURN; -} - -static void -UFhalfclose(URLFile *f) -{ -    switch (f->scheme) { -    case SCM_FTP: -	closeFTP(); -	break; -#ifdef USE_NNTP -    case SCM_NEWS: -    case SCM_NNTP: -	closeNews(); -	break; -#endif -    default: -	UFclose(f); -	break; -    } -} - -int -currentLn(Buffer *buf) -{ -    if (buf->currentLine) -	/*     return buf->currentLine->real_linenumber + 1;      */ -	return buf->currentLine->linenumber + 1; -    else -	return 1; -} - -static Buffer * -loadSomething(URLFile *f, -	      char *path, -	      Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf) -{ -    Buffer *buf; - -    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->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; -    return buf; -} - -int -dir_exist(char *path) -{ -    struct stat stbuf; - -    if (path == NULL || *path == '\0') -	return 0; -    if (stat(path, &stbuf) == -1) -	return 0; -    return IS_DIRECTORY(stbuf.st_mode); -} - -static int -is_dump_text_type(char *type) -{ -    struct mailcap *mcap; -    return (type && (mcap = searchExtViewer(type)) && -	    (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT))); -} - -static int -is_text_type(char *type) -{ -    return (type == NULL || type[0] == '\0' || -	    strncasecmp(type, "text/", 5) == 0 || -	    strncasecmp(type, "message/", sizeof("message/") - 1) == 0); -} - -static int -is_plain_text_type(char *type) -{ -    return ((type && strcasecmp(type, "text/plain") == 0) || -	    (is_text_type(type) && !is_dump_text_type(type))); -} - -static void -check_compression(char *path, URLFile *uf) -{ -    int len; -    struct compression_decoder *d; - -    if (path == NULL) -	return; - -    len = strlen(path); -    uf->compression = CMP_NOCOMPRESS; -    for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) { -	int elen; -	if (d->ext == NULL) -	    continue; -	elen = strlen(d->ext); -	if (len > elen && strcasecmp(&path[len - elen], d->ext) == 0) { -	    uf->compression = d->type; -	    uf->guess_type = d->mime_type; -	    break; -	} -    } -} - -static char * -compress_application_type(int compression) -{ -    struct compression_decoder *d; - -    for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) { -	if (d->type == compression) -	    return d->mime_type; -    } -    return NULL; -} - -static char * -uncompressed_file_type(char *path, char **ext) -{ -    int len, slen; -    Str fn; -    char *t0; -    struct compression_decoder *d; - -    if (path == NULL) -	return NULL; - -    slen = 0; -    len = strlen(path); -    for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) { -	if (d->ext == NULL) -	    continue; -	slen = strlen(d->ext); -	if (len > slen && strcasecmp(&path[len - slen], d->ext) == 0) -	    break; -    } -    if (d->type == CMP_NOCOMPRESS) -	return NULL; - -    fn = Strnew_charp(path); -    Strshrink(fn, slen); -    if (ext) -	*ext = filename_extension(fn->ptr, 0); -    t0 = guessContentType(fn->ptr); -    if (t0 == NULL) -	t0 = "text/plain"; -    return t0; -} - -static int -setModtime(char *path, time_t modtime) -{ -    struct utimbuf t; -    struct stat st; - -    if (stat(path, &st) == 0) -	t.actime = st.st_atime; -    else -	t.actime = time(NULL); -    t.modtime = modtime; -    return utime(path, &t); -} - -void -examineFile(char *path, URLFile *uf) -{ -    struct stat stbuf; - -    uf->guess_type = NULL; -    if (path == NULL || *path == '\0' || -	stat(path, &stbuf) == -1 || NOT_REGULAR(stbuf.st_mode)) { -	uf->stream = NULL; -	return; -    } -    uf->stream = openIS(path); -    if (!do_download) { -	if (use_lessopen && getenv("LESSOPEN") != NULL) { -	    FILE *fp; -	    uf->guess_type = guessContentType(path); -	    if (uf->guess_type == NULL) -		uf->guess_type = "text/plain"; -	    if (strcasecmp(uf->guess_type, "text/html") == 0) -		return; -	    if ((fp = lessopen_stream(path))) { -		UFclose(uf); -		uf->stream = newFileStream(fp, (void (*)())pclose); -		uf->guess_type = "text/plain"; -		return; -	    } -	} -	check_compression(path, uf); -	if (uf->compression != CMP_NOCOMPRESS) { -	    char *ext = uf->ext; -	    char *t0 = uncompressed_file_type(path, &ext); -	    uf->guess_type = t0; -	    uf->ext = ext; -	    uncompress_stream(uf, NULL); -	    return; -	} -    } -} - -#define S_IXANY	(S_IXUSR|S_IXGRP|S_IXOTH) - -int -check_command(char *cmd, int auxbin_p) -{ -    static char *path = NULL; -    Str dirs; -    char *p, *np; -    Str pathname; -    struct stat st; - -    if (path == NULL) -	path = getenv("PATH"); -    if (auxbin_p) -	dirs = Strnew_charp(w3m_auxbin_dir()); -    else -	dirs = Strnew_charp(path); -    for (p = dirs->ptr; p != NULL; p = np) { -	np = strchr(p, PATH_SEPARATOR); -	if (np) -	    *np++ = '\0'; -	pathname = Strnew(); -	Strcat_charp(pathname, p); -	Strcat_char(pathname, '/'); -	Strcat_charp(pathname, cmd); -	if (stat(pathname->ptr, &st) == 0 && S_ISREG(st.st_mode) -	    && (st.st_mode & S_IXANY) != 0) -	    return 1; -    } -    return 0; -} - -char * -acceptableEncoding() -{ -    static Str encodings = NULL; -    struct compression_decoder *d; -    TextList *l; -    char *p; - -    if (encodings != NULL) -	return encodings->ptr; -    l = newTextList(); -    for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) { -	if (check_command(d->cmd, d->auxbin_p)) { -	    pushText(l, d->encoding); -	} -    } -    encodings = Strnew(); -    while ((p = popText(l)) != NULL) { -	if (encodings->length) -	    Strcat_charp(encodings, ", "); -	Strcat_charp(encodings, p); -    } -    return encodings->ptr; -} - -/*  - * convert line - */ -#ifdef USE_M17N -Str -convertLine(URLFile *uf, Str line, int mode, wc_ces * charset, -	    wc_ces doc_charset) -#else -Str -convertLine0(URLFile *uf, Str line, int mode) -#endif -{ -#ifdef USE_M17N -    line = wc_Str_conv_with_detect(line, charset, doc_charset, InnerCharset); -#endif -    if (mode != RAW_MODE) -	cleanup_line(line, mode); -#ifdef USE_NNTP -    if (uf && uf->scheme == SCM_NEWS) -	Strchop(line); -#endif				/* USE_NNTP */ -    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) -{ -    int quoted; -    char *q = NULL; - -    if (strncasecmp(p, attr, len) == 0) { -	p += len; -	SKIP_BLANKS(p); -	if (value) { -	    *value = Strnew(); -	    if (*p == '=') { -		p++; -		SKIP_BLANKS(p); -		quoted = 0; -		while (!IS_ENDL(*p) && (quoted || *p != ';')) { -		    if (!IS_SPACE(*p)) -			q = p; -		    if (*p == '"') -			quoted = (quoted) ? 0 : 1; -		    else -			Strcat_char(*value, *p); -		    p++; -		} -		if (q) -		    Strshrink(*value, p - q - 1); -	    } -	    return 1; -	} -	else { -	    if (IS_ENDT(*p)) { -		return 1; -	    } -	} -    } -    return 0; -} - -#ifdef USE_IMAGE -#ifdef USE_XFACE -static char * -xface2xpm(char *xface) -{ -    Image image; -    ImageCache *cache; -    FILE *f; -    struct stat st; - -    SKIP_BLANKS(xface); -    image.url = xface; -    image.ext = ".xpm"; -    image.width = 48; -    image.height = 48; -    image.cache = NULL; -    cache = getImage(&image, NULL, IMG_FLAG_AUTO); -    if (cache->loaded & IMG_FLAG_LOADED && !stat(cache->file, &st)) -	return cache->file; -    cache->loaded = IMG_FLAG_ERROR; - -    f = popen(Sprintf("%s > %s", shell_quote(auxbinFile(XFACE2XPM)), -		      shell_quote(cache->file))->ptr, "w"); -    if (!f) -	return NULL; -    fputs(xface, f); -    pclose(f); -    if (stat(cache->file, &st) || !st.st_size) -	return NULL; -    cache->loaded = IMG_FLAG_LOADED | IMG_FLAG_DONT_REMOVE; -    cache->index = 0; -    return cache->file; -} -#endif -#endif - -void -readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu) -{ -    char *p, *q; -#ifdef USE_COOKIE -    char *emsg; -#endif -    char c; -    Str lineBuf2 = NULL; -    Str tmp; -    TextList *headerlist; -#ifdef USE_M17N -    wc_ces charset = WC_CES_US_ASCII, mime_charset; -#endif -    char *tmpf; -    FILE *src = NULL; -    Lineprop *propBuffer; - -    headerlist = newBuf->document_header = newTextList(); -    if (uf->scheme == SCM_HTTP -#ifdef USE_SSL -	|| uf->scheme == SCM_HTTPS -#endif				/* USE_SSL */ -	) -	http_response_code = -1; -    else -	http_response_code = 0; - -    if (thru && !newBuf->header_source -#ifdef USE_IMAGE -	&& !image_source -#endif -	) { -	tmpf = tmpfname(TMPF_DFL, NULL)->ptr; -	src = fopen(tmpf, "w"); -	if (src) -	    newBuf->header_source = tmpf; -    } -    while ((tmp = StrmyUFgets(uf))->length) { -#ifdef USE_NNTP -	if (uf->scheme == SCM_NEWS && tmp->ptr[0] == '.') -	    Strshrinkfirst(tmp, 1); -#endif -#ifdef HTTP_DEBUG -	{ -	    FILE *ff; -	    ff = fopen("zzrequest", "a"); -	    Strfputs(tmp, ff); -	    fclose(ff); -	} -#endif				/* HTTP_DEBUG */ -	if (src) -	    Strfputs(tmp, src); -	cleanup_line(tmp, HEADER_MODE); -	if (tmp->ptr[0] == '\n' || tmp->ptr[0] == '\r' || tmp->ptr[0] == '\0') { -	    if (!lineBuf2) -		/* there is no header */ -		break; -	    /* last header */ -	} -	else if (!(w3m_dump & DUMP_HEAD)) { -	    if (lineBuf2) { -		Strcat(lineBuf2, tmp); -	    } -	    else { -		lineBuf2 = tmp; -	    } -	    c = UFgetc(uf); -	    UFundogetc(uf); -	    if (c == ' ' || c == '\t') -		/* header line is continued */ -		continue; -	    lineBuf2 = decodeMIME(lineBuf2, &mime_charset); -	    lineBuf2 = convertLine(NULL, lineBuf2, RAW_MODE, -				   mime_charset ? &mime_charset : &charset, -				   mime_charset ? mime_charset -				   : DocumentCharset); -	    /* separated with line and stored */ -	    tmp = Strnew_size(lineBuf2->length); -	    for (p = lineBuf2->ptr; *p; p = q) { -		for (q = p; *q && *q != '\r' && *q != '\n'; q++) ; -		lineBuf2 = checkType(Strnew_charp_n(p, q - p), &propBuffer, -				     NULL); -		Strcat(tmp, lineBuf2); -		if (thru) -		    addnewline(newBuf, lineBuf2->ptr, propBuffer, NULL, -			       lineBuf2->length, FOLD_BUFFER_WIDTH, -1); -		for (; *q && (*q == '\r' || *q == '\n'); q++) ; -	    } -#ifdef USE_IMAGE -	    if (thru && activeImage && displayImage) { -		Str src = NULL; -		if (!strncasecmp(tmp->ptr, "X-Image-URL:", 12)) { -		    tmpf = &tmp->ptr[12]; -		    SKIP_BLANKS(tmpf); -		    src = Strnew_m_charp("<img src=\"", html_quote(tmpf), -					 "\" alt=\"X-Image-URL\">", NULL); -		} -#ifdef USE_XFACE -		else if (!strncasecmp(tmp->ptr, "X-Face:", 7)) { -		    tmpf = xface2xpm(&tmp->ptr[7]); -		    if (tmpf) -			src = Strnew_m_charp("<img src=\"file:", -					     html_quote(tmpf), -					     "\" alt=\"X-Face\"", -					     " width=48 height=48>", NULL); -		} -#endif -		if (src) { -		    URLFile f; -		    Line *l; -#ifdef USE_M17N -		    wc_ces old_charset = newBuf->document_charset; -#endif -		    init_stream(&f, SCM_LOCAL, newStrStream(src)); -		    loadHTMLstream(&f, newBuf, NULL, TRUE); -		    for (l = newBuf->lastLine; l && l->real_linenumber; -			 l = l->prev) -			l->real_linenumber = 0; -#ifdef USE_M17N -		    newBuf->document_charset = old_charset; -#endif -		} -	    } -#endif -	    lineBuf2 = tmp; -	} -	else { -	    lineBuf2 = tmp; -	} -	if ((uf->scheme == SCM_HTTP -#ifdef USE_SSL -	     || uf->scheme == SCM_HTTPS -#endif				/* USE_SSL */ -	    ) && http_response_code == -1) { -	    p = lineBuf2->ptr; -	    while (*p && !IS_SPACE(*p)) -		p++; -	    while (*p && IS_SPACE(*p)) -		p++; -	    http_response_code = atoi(p); -	    if (fmInitialized) { -		message(lineBuf2->ptr, 0, 0); -		refresh(); -	    } -	} -	if (!strncasecmp(lineBuf2->ptr, "content-transfer-encoding:", 26)) { -	    p = lineBuf2->ptr + 26; -	    while (IS_SPACE(*p)) -		p++; -	    if (!strncasecmp(p, "base64", 6)) -		uf->encoding = ENC_BASE64; -	    else if (!strncasecmp(p, "quoted-printable", 16)) -		uf->encoding = ENC_QUOTE; -	    else if (!strncasecmp(p, "uuencode", 8) || -		     !strncasecmp(p, "x-uuencode", 10)) -		uf->encoding = ENC_UUENCODE; -	    else -		uf->encoding = ENC_7BIT; -	} -	else if (!strncasecmp(lineBuf2->ptr, "content-encoding:", 17)) { -	    struct compression_decoder *d; -	    p = lineBuf2->ptr + 17; -	    while (IS_SPACE(*p)) -		p++; -	    uf->compression = CMP_NOCOMPRESS; -	    for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) { -		char **e; -		for (e = d->encodings; *e != NULL; e++) { -		    if (strncasecmp(p, *e, strlen(*e)) == 0) { -			uf->compression = d->type; -			break; -		    } -		} -		if (uf->compression != CMP_NOCOMPRESS) -		    break; -	    } -	    uf->content_encoding = uf->compression; -	} -#ifdef USE_COOKIE -	else if (use_cookie && accept_cookie && -		 pu && check_cookie_accept_domain(pu->host) && -		 (!strncasecmp(lineBuf2->ptr, "Set-Cookie:", 11) || -		  !strncasecmp(lineBuf2->ptr, "Set-Cookie2:", 12))) { -	    Str name = Strnew(), value = Strnew(), domain = NULL, path = NULL, -		comment = NULL, commentURL = NULL, port = NULL, tmp2; -	    int version, quoted, flag = 0; -	    time_t expires = (time_t) - 1; - -	    q = NULL; -	    if (lineBuf2->ptr[10] == '2') { -		p = lineBuf2->ptr + 12; -		version = 1; -	    } -	    else { -		p = lineBuf2->ptr + 11; -		version = 0; -	    } -#ifdef DEBUG -	    fprintf(stderr, "Set-Cookie: [%s]\n", p); -#endif				/* DEBUG */ -	    SKIP_BLANKS(p); -	    while (*p != '=' && !IS_ENDT(*p)) -		Strcat_char(name, *(p++)); -	    Strremovetrailingspaces(name); -	    if (*p == '=') { -		p++; -		SKIP_BLANKS(p); -		quoted = 0; -		while (!IS_ENDL(*p) && (quoted || *p != ';')) { -		    if (!IS_SPACE(*p)) -			q = p; -		    if (*p == '"') -			quoted = (quoted) ? 0 : 1; -		    Strcat_char(value, *(p++)); -		} -		if (q) -		    Strshrink(value, p - q - 1); -	    } -	    while (*p == ';') { -		p++; -		SKIP_BLANKS(p); -		if (matchattr(p, "expires", 7, &tmp2)) { -		    /* version 0 */ -		    expires = mymktime(tmp2->ptr); -		} -		else if (matchattr(p, "max-age", 7, &tmp2)) { -		    /* XXX Is there any problem with max-age=0? (RFC 2109 ss. 4.2.1, 4.2.2 */ -		    expires = time(NULL) + atol(tmp2->ptr); -		} -		else if (matchattr(p, "domain", 6, &tmp2)) { -		    domain = tmp2; -		} -		else if (matchattr(p, "path", 4, &tmp2)) { -		    path = tmp2; -		} -		else if (matchattr(p, "secure", 6, NULL)) { -		    flag |= COO_SECURE; -		} -		else if (matchattr(p, "comment", 7, &tmp2)) { -		    comment = tmp2; -		} -		else if (matchattr(p, "version", 7, &tmp2)) { -		    version = atoi(tmp2->ptr); -		} -		else if (matchattr(p, "port", 4, &tmp2)) { -		    /* version 1, Set-Cookie2 */ -		    port = tmp2; -		} -		else if (matchattr(p, "commentURL", 10, &tmp2)) { -		    /* version 1, Set-Cookie2 */ -		    commentURL = tmp2; -		} -		else if (matchattr(p, "discard", 7, NULL)) { -		    /* version 1, Set-Cookie2 */ -		    flag |= COO_DISCARD; -		} -		quoted = 0; -		while (!IS_ENDL(*p) && (quoted || *p != ';')) { -		    if (*p == '"') -			quoted = (quoted) ? 0 : 1; -		    p++; -		} -	    } -	    if (pu && name->length > 0) { -		int err; -		if (show_cookie) { -		    if (flag & COO_SECURE) -		        disp_message_nsec("Received a secured cookie", FALSE, 1, -				      TRUE, FALSE); -		    else -		        disp_message_nsec(Sprintf("Received cookie: %s=%s", -					      name->ptr, value->ptr)->ptr, -				      FALSE, 1, TRUE, FALSE); -		} -		err = -		    add_cookie(pu, name, value, expires, domain, path, flag, -			       comment, version, port, commentURL); -		if (err) { -		    char *ans = (accept_bad_cookie == ACCEPT_BAD_COOKIE_ACCEPT) -			? "y" : NULL; -		    if (fmInitialized && (err & COO_OVERRIDE_OK) && -			accept_bad_cookie == ACCEPT_BAD_COOKIE_ASK) { -			Str msg = Sprintf("Accept bad cookie from %s for %s?", -					  pu->host, -					  ((domain && domain->ptr) -					   ? domain->ptr : "<localdomain>")); -			if (msg->length > COLS - 10) -			    Strshrink(msg, msg->length - (COLS - 10)); -			Strcat_charp(msg, " (y/n)"); -			ans = inputAnswer(msg->ptr); -		    } -		    if (ans == NULL || TOLOWER(*ans) != 'y' || -			(err = -			 add_cookie(pu, name, value, expires, domain, path, -				    flag | COO_OVERRIDE, comment, version, -				    port, commentURL))) { -			err = (err & ~COO_OVERRIDE_OK) - 1; -			if (err >= 0 && err < COO_EMAX) -			    emsg = Sprintf("This cookie was rejected " -					   "to prevent security violation. [%s]", -					   violations[err])->ptr; -			else -			    emsg = -				"This cookie was rejected to prevent security violation."; -			record_err_message(emsg); -			if (show_cookie) -			    disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE); -		    } -		    else -			if (show_cookie) -			    disp_message_nsec(Sprintf -					  ("Accepting invalid cookie: %s=%s", -					   name->ptr, value->ptr)->ptr, FALSE, -					  1, TRUE, FALSE); -		} -	    } -	} -#endif				/* USE_COOKIE */ -	else if (!strncasecmp(lineBuf2->ptr, "w3m-control:", 12) && -		 uf->scheme == SCM_LOCAL_CGI) { -	    Str funcname = Strnew(); -	    int f; - -	    p = lineBuf2->ptr + 12; -	    SKIP_BLANKS(p); -	    while (*p && !IS_SPACE(*p)) -		Strcat_char(funcname, *(p++)); -	    SKIP_BLANKS(p); -	    f = getFuncList(funcname->ptr); -	    if (f >= 0) { -		tmp = Strnew_charp(p); -		Strchop(tmp); -		pushEvent(f, tmp->ptr); -	    } -	} -	if (headerlist) -	    pushText(headerlist, lineBuf2->ptr); -	Strfree(lineBuf2); -	lineBuf2 = NULL; -    } -    if (thru) -	addnewline(newBuf, "", propBuffer, NULL, 0, -1, -1); -    if (src) -	fclose(src); -} - -char * -checkHeader(Buffer *buf, char *field) -{ -    int len; -    TextListItem *i; -    char *p; - -    if (buf == NULL || field == NULL || buf->document_header == NULL) -	return NULL; -    len = strlen(field); -    for (i = buf->document_header->first; i != NULL; i = i->next) { -	if (!strncasecmp(i->ptr, field, len)) { -	    p = i->ptr + len; -	    return remove_space(p); -	} -    } -    return NULL; -} - -char * -checkContentType(Buffer *buf) -{ -    char *p; -    Str r; -    p = checkHeader(buf, "Content-Type:"); -    if (p == NULL) -	return NULL; -    r = Strnew(); -    while (*p && *p != ';' && !IS_SPACE(*p)) -	Strcat_char(r, *p++); -#ifdef USE_M17N -    if ((p = strcasestr(p, "charset")) != NULL) { -	p += 7; -	SKIP_BLANKS(p); -	if (*p == '=') { -	    p++; -	    SKIP_BLANKS(p); -	    if (*p == '"') -		p++; -	    content_charset = wc_guess_charset(p, 0); -	} -    } -#endif -    return r->ptr; -} - -struct auth_param { -    char *name; -    Str val; -}; - -struct http_auth { -    int pri; -    char *scheme; -    struct auth_param *param; -    Str (*cred) (struct http_auth * ha, Str uname, Str pw, ParsedURL *pu, -		 HRequest *hr, FormList *request); -}; - -enum { -    AUTHCHR_NUL, -    AUTHCHR_SEP, -    AUTHCHR_TOKEN, -}; - -static int -skip_auth_token(char **pp) -{ -    char *p; -    int first = AUTHCHR_NUL, typ; - -    for (p = *pp ;; ++p) { -	switch (*p) { -	case '\0': -	    goto endoftoken; -	default: -	    if ((unsigned char)*p > 037) { -		typ = AUTHCHR_TOKEN; -		break; -	    } -	    /* thru */ -	case '\177': -	case '[': -	case ']': -	case '(': -	case ')': -	case '<': -	case '>': -	case '@': -	case ';': -	case ':': -	case '\\': -	case '"': -	case '/': -	case '?': -	case '=': -	case ' ': -	case '\t': -	case ',': -	    typ = AUTHCHR_SEP; -	    break; -	} - -	if (!first) -	    first = typ; -	else if (first != typ) -	    break; -    } -endoftoken: -    *pp = p; -    return first; -} - -static Str -extract_auth_val(char **q) -{ -    unsigned char *qq = *(unsigned char **)q; -    int quoted = 0; -    Str val = Strnew(); - -    SKIP_BLANKS(qq); -    if (*qq == '"') { -	quoted = TRUE; -	Strcat_char(val, *qq++); -    } -    while (*qq != '\0') { -	if (quoted && *qq == '"') { -	    Strcat_char(val, *qq++); -	    break; -	} -	if (!quoted) { -	    switch (*qq) { -	    case '[': -	    case ']': -	    case '(': -	    case ')': -	    case '<': -	    case '>': -	    case '@': -	    case ';': -	    case ':': -	    case '\\': -	    case '"': -	    case '/': -	    case '?': -	    case '=': -	    case ' ': -	    case '\t': -		qq++; -	    case ',': -		goto end_token; -	    default: -		if (*qq <= 037 || *qq == 0177) { -		    qq++; -		    goto end_token; -		} -	    } -	} -	else if (quoted && *qq == '\\') -	    Strcat_char(val, *qq++); -	Strcat_char(val, *qq++); -    } -  end_token: -    *q = (char *)qq; -    return val; -} - -static Str -qstr_unquote(Str s) -{ -    char *p; - -    if (s == NULL) -	return NULL; -    p = s->ptr; -    if (*p == '"') { -	Str tmp = Strnew(); -	for (p++; *p != '\0'; p++) { -	    if (*p == '\\') -		p++; -	    Strcat_char(tmp, *p); -	} -	if (Strlastchar(tmp) == '"') -	    Strshrink(tmp, 1); -	return tmp; -    } -    else -	return s; -} - -static char * -extract_auth_param(char *q, struct auth_param *auth) -{ -    struct auth_param *ap; -    char *p; - -    for (ap = auth; ap->name != NULL; ap++) { -	ap->val = NULL; -    } - -    while (*q != '\0') { -	SKIP_BLANKS(q); -	for (ap = auth; ap->name != NULL; ap++) { -	    size_t len; - -	    len = strlen(ap->name); -	    if (strncasecmp(q, ap->name, len) == 0 && -		(IS_SPACE(q[len]) || q[len] == '=')) { -		p = q + len; -		SKIP_BLANKS(p); -		if (*p != '=') -		    return q; -		q = p + 1; -		ap->val = extract_auth_val(&q); -		break; -	    } -	} -	if (ap->name == NULL) { -	    /* skip unknown param */ -	    int token_type; -	    p = q; -	    if ((token_type = skip_auth_token(&q)) == AUTHCHR_TOKEN && -		(IS_SPACE(*q) || *q == '=')) { -		SKIP_BLANKS(q); -		if (*q != '=') -		    return p; -		q++; -		extract_auth_val(&q); -	    } -	    else -		return p; -	} -	if (*q != '\0') { -	    SKIP_BLANKS(q); -	    if (*q == ',') -		q++; -	    else -		break; -	} -    } -    return q; -} - -static Str -get_auth_param(struct auth_param *auth, char *name) -{ -    struct auth_param *ap; -    for (ap = auth; ap->name != NULL; ap++) { -	if (strcasecmp(name, ap->name) == 0) -	    return ap->val; -    } -    return NULL; -} - -static Str -AuthBasicCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu, -	      HRequest *hr, FormList *request) -{ -    Str s = Strdup(uname); -    Strcat_char(s, ':'); -    Strcat(s, pw); -    return Strnew_m_charp("Basic ", encodeB(s->ptr)->ptr, NULL); -} - -#ifdef USE_DIGEST_AUTH -#include <openssl/md5.h> - -/* RFC2617: 3.2.2 The Authorization Request Header - *  - * credentials      = "Digest" digest-response - * digest-response  = 1#( username | realm | nonce | digest-uri - *                    | response | [ algorithm ] | [cnonce] | - *                     [opaque] | [message-qop] | - *                         [nonce-count]  | [auth-param] ) - * - * username         = "username" "=" username-value - * username-value   = quoted-string - * digest-uri       = "uri" "=" digest-uri-value - * digest-uri-value = request-uri   ; As specified by HTTP/1.1 - * message-qop      = "qop" "=" qop-value - * cnonce           = "cnonce" "=" cnonce-value - * cnonce-value     = nonce-value - * nonce-count      = "nc" "=" nc-value - * nc-value         = 8LHEX - * response         = "response" "=" request-digest - * request-digest = <"> 32LHEX <"> - * LHEX             =  "0" | "1" | "2" | "3" | - *                     "4" | "5" | "6" | "7" | - *                     "8" | "9" | "a" | "b" | - *                     "c" | "d" | "e" | "f" - */ - -static Str -digest_hex(char *p) -{ -    char *h = "0123456789abcdef"; -    Str tmp = Strnew_size(MD5_DIGEST_LENGTH * 2 + 1); -    int i; -    for (i = 0; i < MD5_DIGEST_LENGTH; i++, p++) { -	Strcat_char(tmp, h[(*p >> 4) & 0x0f]); -	Strcat_char(tmp, h[*p & 0x0f]); -    } -    return tmp; -} - -enum { -    QOP_NONE, -    QOP_AUTH, -    QOP_AUTH_INT, -}; - -static Str -AuthDigestCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu, -	       HRequest *hr, FormList *request) -{ -    Str tmp, a1buf, a2buf, rd, s; -    char md5[MD5_DIGEST_LENGTH + 1]; -    Str uri = HTTPrequestURI(pu, hr); -    char nc[] = "00000001"; - -    Str algorithm = qstr_unquote(get_auth_param(ha->param, "algorithm")); -    Str nonce = qstr_unquote(get_auth_param(ha->param, "nonce")); -    Str cnonce /* = qstr_unquote(get_auth_param(ha->param, "cnonce")) */; -    /* cnonce is what client should generate. */ -    Str qop = qstr_unquote(get_auth_param(ha->param, "qop")); - -    static union { -	int r[4]; -	char s[sizeof(int) * 4]; -    } cnonce_seed; -    int qop_i = QOP_NONE; - -    cnonce_seed.r[0] = rand(); -    cnonce_seed.r[1] = rand(); -    cnonce_seed.r[2] = rand(); -    MD5(cnonce_seed.s, sizeof(cnonce_seed.s), md5); -    cnonce = digest_hex(md5); -    cnonce_seed.r[3]++; - -    if (qop) { -	char *p; -	size_t i; - -	p = qop->ptr; -	SKIP_BLANKS(p); - -	for (;;) { -	    if ((i = strcspn(p, " \t,")) > 0) { -		if (i == sizeof("auth-int") - sizeof("") && !strncasecmp(p, "auth-int", i)) { -		    if (qop_i < QOP_AUTH_INT) -			qop_i = QOP_AUTH_INT; -		} -		else if (i == sizeof("auth") - sizeof("") && !strncasecmp(p, "auth", i)) { -		    if (qop_i < QOP_AUTH) -			qop_i = QOP_AUTH; -		} -	    } - -	    if (p[i]) { -		p += i + 1; -		SKIP_BLANKS(p); -	    } -	    else -		break; -	} -    } - -    /* A1 = unq(username-value) ":" unq(realm-value) ":" passwd */ -    tmp = Strnew_m_charp(uname->ptr, ":", -			 qstr_unquote(get_auth_param(ha->param, "realm"))->ptr, -			 ":", pw->ptr, NULL); -    MD5(tmp->ptr, strlen(tmp->ptr), md5); -    a1buf = digest_hex(md5); - -    if (algorithm) { -	if (strcasecmp(algorithm->ptr, "MD5-sess") == 0) { -	    /* A1 = H(unq(username-value) ":" unq(realm-value) ":" passwd) -	     *      ":" unq(nonce-value) ":" unq(cnonce-value) -	     */ -	    if (nonce == NULL) -		return NULL; -	    tmp = Strnew_m_charp(a1buf->ptr, ":", -				 qstr_unquote(nonce)->ptr, -				 ":", qstr_unquote(cnonce)->ptr, NULL); -	    MD5(tmp->ptr, strlen(tmp->ptr), md5); -	    a1buf = digest_hex(md5); -	} -	else if (strcasecmp(algorithm->ptr, "MD5") == 0) -	    /* ok default */ -	    ; -	else -	    /* unknown algorithm */ -	    return NULL; -    } - -    /* A2 = Method ":" digest-uri-value */ -    tmp = Strnew_m_charp(HTTPrequestMethod(hr)->ptr, ":", uri->ptr, NULL); -    if (qop_i == QOP_AUTH_INT) { -	/*  A2 = Method ":" digest-uri-value ":" H(entity-body) */ -	if (request && request->body) { -	    if (request->method == FORM_METHOD_POST && request->enctype == FORM_ENCTYPE_MULTIPART) { -		FILE *fp = fopen(request->body, "r"); -		if (fp != NULL) { -		    Str ebody; -		    ebody = Strfgetall(fp); -		    MD5(ebody->ptr, strlen(ebody->ptr), md5); -		} -		else { -		    MD5("", 0, md5); -		} -	    } -	    else { -		MD5(request->body, request->length, md5); -	    } -	} -	else { -	    MD5("", 0, md5); -	} -	Strcat_char(tmp, ':'); -	Strcat(tmp, digest_hex(md5)); -    } -    MD5(tmp->ptr, strlen(tmp->ptr), md5); -    a2buf = digest_hex(md5); - -    if (qop_i >= QOP_AUTH) { -	/* request-digest  = <"> < KD ( H(A1),     unq(nonce-value) -	 *                      ":" nc-value -	 *                      ":" unq(cnonce-value) -	 *                      ":" unq(qop-value) -	 *                      ":" H(A2) -	 *                      ) <"> -	 */ -	if (nonce == NULL) -	    return NULL; -	tmp = Strnew_m_charp(a1buf->ptr, ":", qstr_unquote(nonce)->ptr, -			     ":", nc, -			     ":", qstr_unquote(cnonce)->ptr, -			     ":", qop_i == QOP_AUTH ? "auth" : "auth-int", -			     ":", a2buf->ptr, NULL); -	MD5(tmp->ptr, strlen(tmp->ptr), md5); -	rd = digest_hex(md5); -    } -    else { -	/* compatibility with RFC 2069 -	 * request_digest = KD(H(A1),  unq(nonce), H(A2)) -	 */ -	tmp = Strnew_m_charp(a1buf->ptr, ":", -			     qstr_unquote(get_auth_param(ha->param, "nonce"))-> -			     ptr, ":", a2buf->ptr, NULL); -	MD5(tmp->ptr, strlen(tmp->ptr), md5); -	rd = digest_hex(md5); -    } - -    /* -     * digest-response  = 1#( username | realm | nonce | digest-uri -     *                          | response | [ algorithm ] | [cnonce] | -     *                          [opaque] | [message-qop] | -     *                          [nonce-count]  | [auth-param] ) -     */ - -    tmp = Strnew_m_charp("Digest username=\"", uname->ptr, "\"", NULL); -    Strcat_m_charp(tmp, ", realm=", -		   get_auth_param(ha->param, "realm")->ptr, NULL); -    Strcat_m_charp(tmp, ", nonce=", -		   get_auth_param(ha->param, "nonce")->ptr, NULL); -    Strcat_m_charp(tmp, ", uri=\"", uri->ptr, "\"", NULL); -    Strcat_m_charp(tmp, ", response=\"", rd->ptr, "\"", NULL); - -    if (algorithm) -	Strcat_m_charp(tmp, ", algorithm=", -		       get_auth_param(ha->param, "algorithm")->ptr, NULL); - -    if (cnonce) -	Strcat_m_charp(tmp, ", cnonce=\"", cnonce->ptr, "\"", NULL); - -    if ((s = get_auth_param(ha->param, "opaque")) != NULL) -	Strcat_m_charp(tmp, ", opaque=", s->ptr, NULL); - -    if (qop_i >= QOP_AUTH) { -	Strcat_m_charp(tmp, ", qop=", -		       qop_i == QOP_AUTH ? "auth" : "auth-int", -		       NULL); -	/* XXX how to count? */ -	/* Since nonce is unique up to each *-Authenticate and w3m does not re-use *-Authenticate: headers, -	   nonce-count should be always "00000001". */ -	Strcat_m_charp(tmp, ", nc=", nc, NULL); -    } - -    return tmp; -} -#endif - -/* *INDENT-OFF* */ -struct auth_param none_auth_param[] = { -    {NULL, NULL} -}; - -struct auth_param basic_auth_param[] = { -    {"realm", NULL}, -    {NULL, NULL} -}; - -#ifdef USE_DIGEST_AUTH -/* RFC2617: 3.2.1 The WWW-Authenticate Response Header - * challenge        =  "Digest" digest-challenge - *  - * digest-challenge  = 1#( realm | [ domain ] | nonce | - *                       [ opaque ] |[ stale ] | [ algorithm ] | - *                        [ qop-options ] | [auth-param] ) - * - * domain            = "domain" "=" <"> URI ( 1*SP URI ) <"> - * URI               = absoluteURI | abs_path - * nonce             = "nonce" "=" nonce-value - * nonce-value       = quoted-string - * opaque            = "opaque" "=" quoted-string - * stale             = "stale" "=" ( "true" | "false" ) - * algorithm         = "algorithm" "=" ( "MD5" | "MD5-sess" | - *                        token ) - * qop-options       = "qop" "=" <"> 1#qop-value <"> - * qop-value         = "auth" | "auth-int" | token - */ -struct auth_param digest_auth_param[] = { -    {"realm", NULL}, -    {"domain", NULL}, -    {"nonce", NULL}, -    {"opaque", NULL}, -    {"stale", NULL}, -    {"algorithm", NULL}, -    {"qop", NULL}, -    {NULL, NULL} -}; -#endif -/* for RFC2617: HTTP Authentication */ -struct http_auth www_auth[] = { -    { 1, "Basic ", basic_auth_param, AuthBasicCred }, -#ifdef USE_DIGEST_AUTH -    { 10, "Digest ", digest_auth_param, AuthDigestCred }, -#endif -    { 0, NULL, NULL, NULL,} -}; -/* *INDENT-ON* */ - -static struct http_auth * -findAuthentication(struct http_auth *hauth, Buffer *buf, char *auth_field) -{ -    struct http_auth *ha; -    int len = strlen(auth_field), slen; -    TextListItem *i; -    char *p0, *p; - -    bzero(hauth, sizeof(struct http_auth)); -    for (i = buf->document_header->first; i != NULL; i = i->next) { -	if (strncasecmp(i->ptr, auth_field, len) == 0) { -	    for (p = i->ptr + len; p != NULL && *p != '\0';) { -		SKIP_BLANKS(p); -		p0 = p; -		for (ha = &www_auth[0]; ha->scheme != NULL; ha++) { -		    slen = strlen(ha->scheme); -		    if (strncasecmp(p, ha->scheme, slen) == 0) { -			p += slen; -			SKIP_BLANKS(p); -			if (hauth->pri < ha->pri) { -			    *hauth = *ha; -			    p = extract_auth_param(p, hauth->param); -			    break; -			} -			else { -			    /* weak auth */ -			    p = extract_auth_param(p, none_auth_param); -			} -		    } -		} -		if (p0 == p) { -		    /* all unknown auth failed */ -		    int token_type; -		    if ((token_type = skip_auth_token(&p)) == AUTHCHR_TOKEN && IS_SPACE(*p)) { -			SKIP_BLANKS(p); -			p = extract_auth_param(p, none_auth_param); -		    } -		    else -			break; -		} -	    } -	} -    } -    return hauth->scheme ? hauth : NULL; -} - -static void -getAuthCookie(struct http_auth *hauth, char *auth_header, -	      TextList *extra_header, ParsedURL *pu, HRequest *hr, -	      FormList *request, -	      volatile Str *uname, volatile Str *pwd) -{ -    Str ss = NULL; -    Str tmp; -    TextListItem *i; -    int a_found; -    int auth_header_len = strlen(auth_header); -    char *realm = NULL; -    int proxy; - -    if (hauth) -	realm = qstr_unquote(get_auth_param(hauth->param, "realm"))->ptr; - -    if (!realm) -	return; - -    a_found = FALSE; -    for (i = extra_header->first; i != NULL; i = i->next) { -	if (!strncasecmp(i->ptr, auth_header, auth_header_len)) { -	    a_found = TRUE; -	    break; -	} -    } -    proxy = !strncasecmp("Proxy-Authorization:", auth_header, -			 auth_header_len); -    if (a_found) { -	/* This means that *-Authenticate: header is received after -	 * Authorization: header is sent to the server.  -	 */ -	if (fmInitialized) { -	    message("Wrong username or password", 0, 0); -	    refresh(); -	} -	else -	    fprintf(stderr, "Wrong username or password\n"); -	sleep(1); -	/* delete Authenticate: header from extra_header */ -	delText(extra_header, i); -	invalidate_auth_user_passwd(pu, realm, *uname, *pwd, proxy); -    } -    *uname = NULL; -    *pwd = NULL; - -    if (!a_found && find_auth_user_passwd(pu, realm, (Str*)uname, (Str*)pwd,  -					  proxy)) { -	/* found username & password in passwd file */ ; -    } -    else { -	if (QuietMessage) -	    return; -	/* input username and password */ -	sleep(2); -	if (fmInitialized) { -	    char *pp; -	    term_raw(); -	    /* FIXME: gettextize? */ -	    if ((pp = inputStr(Sprintf("Username for %s: ", realm)->ptr, -			       NULL)) == NULL) -		return; -	    *uname = Str_conv_to_system(Strnew_charp(pp)); -	    if ((pp = inputLine(Sprintf("Password for %s: ", realm)->ptr, NULL, -				IN_PASSWORD)) == NULL) { -		*uname = NULL; -		return; -	    } -	    *pwd = Str_conv_to_system(Strnew_charp(pp)); -	    term_cbreak(); -	} -	else { -	    /* -	     * If post file is specified as '-', stdin is closed at this -	     * point. -	     * In this case, w3m cannot read username from stdin. -	     * So exit with error message. -	     * (This is same behavior as lwp-request.) -	     */ -	    if (feof(stdin) || ferror(stdin)) { -		/* FIXME: gettextize? */ -		fprintf(stderr, "w3m: Authorization required for %s\n", -			realm); -		exit(1); -	    } -	     -	    /* FIXME: gettextize? */ -	    printf(proxy ? "Proxy Username for %s: " : "Username for %s: ", -		   realm); -	    fflush(stdout); -	    *uname = Strfgets(stdin); -	    Strchop(*uname); -#ifdef HAVE_GETPASSPHRASE -	    *pwd = Strnew_charp((char *) -				getpassphrase(proxy ? "Proxy Password: " : -					      "Password: ")); -#else -	    *pwd = Strnew_charp((char *) -				getpass(proxy ? "Proxy Password: " : -					"Password: ")); -#endif -	} -    } -    ss = hauth->cred(hauth, *uname, *pwd, pu, hr, request); -    if (ss) { -	tmp = Strnew_charp(auth_header); -	Strcat_m_charp(tmp, " ", ss->ptr, "\r\n", NULL); -	pushText(extra_header, tmp->ptr); -    } -    else { -	*uname = NULL; -	*pwd = NULL; -    } -    return; -} - -static int -same_url_p(ParsedURL *pu1, ParsedURL *pu2) -{ -    return (pu1->scheme == pu2->scheme && pu1->port == pu2->port && -	    (pu1->host ? pu2->host ? !strcasecmp(pu1->host, pu2->host) : 0 : 1) -	    && (pu1->file ? pu2-> -		file ? !strcmp(pu1->file, pu2->file) : 0 : 1)); -} - -static int -checkRedirection(ParsedURL *pu) -{ -    static ParsedURL *puv = NULL; -    static int nredir = 0; -    static int nredir_size = 0; -    Str tmp; - -    if (pu == NULL) { -	nredir = 0; -	nredir_size = 0; -	puv = NULL; -	return TRUE; -    } -    if (nredir >= FollowRedirection) { -	/* FIXME: gettextize? */ -	tmp = Sprintf("Number of redirections exceeded %d at %s", -		      FollowRedirection, parsedURL2Str(pu)->ptr); -	disp_err_message(tmp->ptr, FALSE); -	return FALSE; -    } -    else if (nredir_size > 0 && -	     (same_url_p(pu, &puv[(nredir - 1) % nredir_size]) || -	      (!(nredir % 2) -	       && same_url_p(pu, &puv[(nredir / 2) % nredir_size])))) { -	/* FIXME: gettextize? */ -	tmp = Sprintf("Redirection loop detected (%s)", -		      parsedURL2Str(pu)->ptr); -	disp_err_message(tmp->ptr, FALSE); -	return FALSE; -    } -    if (!puv) { -	nredir_size = FollowRedirection / 2 + 1; -	puv = New_N(ParsedURL, nredir_size); -	memset(puv, 0, sizeof(ParsedURL) * nredir_size); -    } -    copyParsedURL(&puv[nredir % nredir_size], pu); -    nredir++; -    return TRUE; -} - -/*  - * loadGeneralFile: load file to buffer - */ -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; -    char *volatile tpath; -    char *volatile t = "text/plain", *p, *volatile real_type = NULL; -    Buffer *volatile t_buf = NULL; -    int volatile searchHeader = SearchHeader; -    int volatile searchHeader_through = TRUE; -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; -    TextList *extra_header = newTextList(); -    volatile Str uname = NULL; -    volatile Str pwd = NULL; -    volatile Str realm = NULL; -    int volatile add_auth_cookie_flag; -    unsigned char status = HTST_NORMAL; -    URLOption url_option; -    Str tmp; -    Str volatile page = NULL; -#ifdef USE_M17N -    wc_ces charset = WC_CES_US_ASCII; -#endif -    HRequest hr; -    ParsedURL *volatile auth_pu; - -    tpath = path; -    prevtrap = NULL; -    add_auth_cookie_flag = 0; - -    checkRedirection(NULL); -  load_doc: -    TRAP_OFF; -    url_option.referer = referer; -    url_option.flag = flag; -    f = openURL(tpath, &pu, current, &url_option, request, extra_header, of, -		&hr, &status); -    of = NULL; -#ifdef USE_M17N -    content_charset = 0; -#endif -    if (f.stream == NULL) { -	switch (f.scheme) { -	case SCM_LOCAL: -	    { -		struct stat st; -		if (stat(pu.real_file, &st) < 0) -		    return NULL; -		if (S_ISDIR(st.st_mode)) { -		    if (UseExternalDirBuffer) { -			Str cmd = Sprintf("%s?dir=%s#current", -					  DirBufferCommand, pu.file); -			b = loadGeneralFile(cmd->ptr, NULL, NO_REFERER, 0, -					    NULL); -			if (b != NULL && b != NO_BUFFER) { -			    copyParsedURL(&b->currentURL, &pu); -			    b->filename = b->currentURL.real_file; -			} -			return b; -		    } -		    else { -			page = loadLocalDir(pu.real_file); -			t = "local:directory"; -#ifdef USE_M17N -			charset = SystemCharset; -#endif -		    } -		} -	    } -	    break; -	case SCM_FTPDIR: -	    page = loadFTPDir(&pu, &charset); -	    t = "ftp:directory"; -	    break; -#ifdef USE_NNTP -	case SCM_NEWS_GROUP: -	    page = loadNewsgroup(&pu, &charset); -	    t = "news:group"; -	    break; -#endif -	case SCM_UNKNOWN: -#ifdef USE_EXTERNAL_URI_LOADER -	    tmp = searchURIMethods(&pu); -	    if (tmp != NULL) { -		b = loadGeneralFile(tmp->ptr, current, referer, flag, request); -		if (b != NULL && b != NO_BUFFER) -		    copyParsedURL(&b->currentURL, &pu); -		return b; -	    } -#endif -	    /* FIXME: gettextize? */ -	    disp_err_message(Sprintf("Unknown URI: %s", -				     parsedURL2Str(&pu)->ptr)->ptr, FALSE); -	    break; -	} -	if (page && page->length > 0) -	    goto page_loaded; -	return NULL; -    } - -    if (status == HTST_MISSING) { -	TRAP_OFF; -	UFclose(&f); -	return NULL; -    } - -    /* openURL() succeeded */ -    if (SETJMP(AbortLoading) != 0) { -	/* transfer interrupted */ -	TRAP_OFF; -	if (b) -	    discardBuffer(b); -	UFclose(&f); -	return NULL; -    } - -    b = NULL; -    if (f.is_cgi) { -	/* local CGI */ -	searchHeader = TRUE; -	searchHeader_through = FALSE; -    } -    if (header_string) -	header_string = NULL; -    TRAP_ON; -    if (pu.scheme == SCM_HTTP || -#ifdef USE_SSL -	pu.scheme == SCM_HTTPS || -#endif				/* USE_SSL */ -	(( -#ifdef USE_GOPHER -	     (pu.scheme == SCM_GOPHER && non_null(GOPHER_proxy)) || -#endif				/* USE_GOPHER */ -	     (pu.scheme == SCM_FTP && non_null(FTP_proxy)) -	 ) && !Do_not_use_proxy && !check_no_proxy(pu.host))) { - -	if (fmInitialized) { -	    term_cbreak(); -	    /* FIXME: gettextize? */ -	    message(Sprintf("%s contacted. Waiting for reply...", pu.host)-> -		    ptr, 0, 0); -	    refresh(); -	} -	if (t_buf == NULL) -	    t_buf = newBuffer(INIT_BUFFER_WIDTH); -#if 0				/* USE_SSL */ -	if (IStype(f.stream) == IST_SSL) { -	    Str s = ssl_get_certificate(f.stream, pu.host); -	    if (s == NULL) -		return NULL; -	    else -		t_buf->ssl_certificate = s->ptr; -	} -#endif -	readHeader(&f, t_buf, FALSE, &pu); -	if (((http_response_code >= 301 && http_response_code <= 303) -	     || http_response_code == 307) -	    && (p = checkHeader(t_buf, "Location:")) != NULL -	    && checkRedirection(&pu)) { -	    /* document moved */ -	    /* 301: Moved Permanently */ -	    /* 302: Found */ -	    /* 303: See Other */ -	    /* 307: Temporary Redirect (HTTP/1.1) */ -	    tpath = url_quote_conv(p, DocumentCharset); -	    request = NULL; -	    UFclose(&f); -	    current = New(ParsedURL); -	    copyParsedURL(current, &pu); -	    t_buf = newBuffer(INIT_BUFFER_WIDTH); -	    t_buf->bufferprop |= BP_REDIRECTED; -	    status = HTST_NORMAL; -	    goto load_doc; -	} -	t = checkContentType(t_buf); -	if (t == NULL && pu.file != NULL) { -	    if (!((http_response_code >= 400 && http_response_code <= 407) || -		  (http_response_code >= 500 && http_response_code <= 505))) -		t = guessContentType(pu.file); -	} -	if (t == NULL) -	    t = "text/plain"; -	if (add_auth_cookie_flag && realm && uname && pwd) { -	    /* If authorization is required and passed */ -	    add_auth_user_passwd(&pu, qstr_unquote(realm)->ptr, uname, pwd,  -				  0); -	    add_auth_cookie_flag = 0; -	} -	if ((p = checkHeader(t_buf, "WWW-Authenticate:")) != NULL && -	    http_response_code == 401) { -	    /* Authentication needed */ -	    struct http_auth hauth; -	    if (findAuthentication(&hauth, t_buf, "WWW-Authenticate:") != NULL -		&& (realm = get_auth_param(hauth.param, "realm")) != NULL) { -		auth_pu = &pu; -		getAuthCookie(&hauth, "Authorization:", extra_header, -			      auth_pu, &hr, request, &uname, &pwd); -		if (uname == NULL) { -		    /* abort */ -		    TRAP_OFF; -		    goto page_loaded; -		} -		UFclose(&f); -		add_auth_cookie_flag = 1; -		status = HTST_NORMAL; -		goto load_doc; -	    } -	} -	if ((p = checkHeader(t_buf, "Proxy-Authenticate:")) != NULL && -	    http_response_code == 407) { -	    /* Authentication needed */ -	    struct http_auth hauth; -	    if (findAuthentication(&hauth, t_buf, "Proxy-Authenticate:") -		!= NULL -		&& (realm = get_auth_param(hauth.param, "realm")) != NULL) { -		auth_pu = schemeToProxy(pu.scheme); -		getAuthCookie(&hauth, "Proxy-Authorization:", -			      extra_header, auth_pu, &hr, request,  -			      &uname, &pwd); -		if (uname == NULL) { -		    /* abort */ -		    TRAP_OFF; -		    goto page_loaded; -		} -		UFclose(&f); -		add_auth_cookie_flag = 1; -		status = HTST_NORMAL; -		goto load_doc; -	    } -	} -	/* XXX: RFC2617 3.2.3 Authentication-Info: ? */ - -	if (status == HTST_CONNECT) { -	    of = &f; -	    goto load_doc; -	} - -	f.modtime = mymktime(checkHeader(t_buf, "Last-Modified:")); -    } -#ifdef USE_NNTP -    else if (pu.scheme == SCM_NEWS || pu.scheme == SCM_NNTP) { -	if (t_buf == NULL) -	    t_buf = newBuffer(INIT_BUFFER_WIDTH); -	readHeader(&f, t_buf, TRUE, &pu); -	t = checkContentType(t_buf); -	if (t == NULL) -	    t = "text/plain"; -    } -#endif				/* USE_NNTP */ -#ifdef USE_GOPHER -    else if (pu.scheme == SCM_GOPHER) { -	switch (*pu.file) { -	case '0': -	    t = "text/plain"; -	    break; -	case '1': -	case 'm': -	    page = loadGopherDir(&f, &pu, &charset); -	    t = "gopher:directory"; -	    TRAP_OFF; -	    goto page_loaded; -	case 's': -	    t = "audio/basic"; -	    break; -	case 'g': -	    t = "image/gif"; -	    break; -	case 'h': -	    t = "text/html"; -	    break; -	} -    } -#endif				/* USE_GOPHER */ -    else if (pu.scheme == SCM_FTP) { -	check_compression(path, &f); -	if (f.compression != CMP_NOCOMPRESS) { -	    char *t1 = uncompressed_file_type(pu.file, NULL); -	    real_type = f.guess_type; -#if 0 -	    if (t1 && strncasecmp(t1, "application/", 12) == 0) { -		f.compression = CMP_NOCOMPRESS; -		t = real_type; -	    } -	    else -#endif -	    if (t1) -		t = t1; -	    else -		t = real_type; -	} -	else { -	    real_type = guessContentType(pu.file); -	    if (real_type == NULL) -		real_type = "text/plain"; -	    t = real_type; -	} -#if 0 -	if (!strncasecmp(t, "application/", 12)) { -	    char *tmpf = tmpfname(TMPF_DFL, NULL)->ptr; -	    current_content_length = 0; -	    if (save2tmp(f, tmpf) < 0) -		UFclose(&f); -	    else { -		UFclose(&f); -		TRAP_OFF; -		doFileMove(tmpf, guess_save_name(t_buf, pu.file)); -	    } -	    return NO_BUFFER; -	} -#endif -    } -    else if (pu.scheme == SCM_DATA) { -	t = f.guess_type; -    } -    else if (searchHeader) { -	searchHeader = SearchHeader = FALSE; -	if (t_buf == NULL) -	    t_buf = newBuffer(INIT_BUFFER_WIDTH); -	readHeader(&f, t_buf, searchHeader_through, &pu); -	if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL && -	    checkRedirection(&pu)) { -	    /* document moved */ -	    tpath = url_quote_conv(remove_space(p), DocumentCharset); -	    request = NULL; -	    UFclose(&f); -	    add_auth_cookie_flag = 0; -	    current = New(ParsedURL); -	    copyParsedURL(current, &pu); -	    t_buf = newBuffer(INIT_BUFFER_WIDTH); -	    t_buf->bufferprop |= BP_REDIRECTED; -	    status = HTST_NORMAL; -	    goto load_doc; -	} -#ifdef AUTH_DEBUG -	if ((p = checkHeader(t_buf, "WWW-Authenticate:")) != NULL) { -	    /* Authentication needed */ -	    struct http_auth hauth; -	    if (findAuthentication(&hauth, t_buf, "WWW-Authenticate:") != NULL -		&& (realm = get_auth_param(hauth.param, "realm")) != NULL) { -		auth_pu = &pu; -		getAuthCookie(&hauth, "Authorization:", extra_header, -			      auth_pu, &hr, request, &uname, &pwd); -		if (uname == NULL) { -		    /* abort */ -		    TRAP_OFF; -		    goto page_loaded; -		} -		UFclose(&f); -		add_auth_cookie_flag = 1; -		status = HTST_NORMAL; -		goto load_doc; -	    } -	} -#endif /* defined(AUTH_DEBUG) */ -	t = checkContentType(t_buf); -	if (t == NULL) -	    t = "text/plain"; -    } -    else if (DefaultType) { -	t = DefaultType; -	DefaultType = NULL; -    } -    else { -	t = guessContentType(pu.file); -	if (t == NULL) -	    t = "text/plain"; -	real_type = t; -	if (f.guess_type) -	    t = f.guess_type; -    } - -  page_loaded: -    if (page) { -	FILE *src; -#ifdef USE_IMAGE -	if (image_source) -	    return NULL; -#endif -	tmp = tmpfname(TMPF_SRC, ".html"); -	src = fopen(tmp->ptr, "w"); -	if (src) { -	    Str s; -	    s = wc_Str_conv_strict(page, InnerCharset, charset); -	    Strfputs(s, src); -	    fclose(src); -	} -	if (do_download) { -	    char *file; -	    if (!src) -		return NULL; -	    file = guess_filename(pu.file); -#ifdef USE_GOPHER -	    if (f.scheme == SCM_GOPHER) -		file = Sprintf("%s.html", file)->ptr; -#endif -#ifdef USE_NNTP -	    if (f.scheme == SCM_NEWS_GROUP) -		file = Sprintf("%s.html", file)->ptr; -#endif -	    doFileMove(tmp->ptr, file); -	    return NO_BUFFER; -	} -	b = loadHTMLString(page); -	if (b) { -	    copyParsedURL(&b->currentURL, &pu); -	    b->real_scheme = pu.scheme; -	    b->real_type = t; -	    if (src) -		b->sourcefile = tmp->ptr; -#ifdef USE_M17N -	    b->document_charset = charset; -#endif -	} -	return b; -    } - -    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) -	current_content_length = strtoclen(p); -    if (do_download) { -	/* download only */ -	char *file; -	TRAP_OFF; -	if (DecodeCTE && IStype(f.stream) != IST_ENCODED) -	    f.stream = newEncodedStream(f.stream, f.encoding); -	if (pu.scheme == SCM_LOCAL) { -	    struct stat st; -	    if (PreserveTimestamp && !stat(pu.real_file, &st)) -		f.modtime = st.st_mtime; -	    file = conv_from_system(guess_save_name(NULL, pu.real_file)); -	} -	else -	    file = guess_save_name(t_buf, pu.file); -	if (doFileSave(f, file) == 0) -	    UFhalfclose(&f); -	else -	    UFclose(&f); -	return NO_BUFFER; -    } - -    if (f.content_encoding != CMP_NOCOMPRESS) { -	uncompress_stream(&f, &pu.real_file); -    } -    else if (f.compression != CMP_NOCOMPRESS) { -	if (!(w3m_dump & DUMP_SOURCE) && -	    (w3m_dump & ~DUMP_FRAME || is_text_type(t) -	     || searchExtViewer(t))) { -	    if (t_buf == NULL) -		t_buf = newBuffer(INIT_BUFFER_WIDTH); -	    uncompress_stream(&f, &t_buf->sourcefile); -	    uncompressed_file_type(pu.file, &f.ext); -	} -	else { -	    t = compress_application_type(f.compression); -	    f.compression = CMP_NOCOMPRESS; -	} -    } -#ifdef USE_IMAGE -    if (image_source) { -	Buffer *b = NULL; -	if (IStype(f.stream) != IST_ENCODED) -	    f.stream = newEncodedStream(f.stream, f.encoding); -	if (save2tmp(f, image_source) == 0) { -	    b = newBuffer(INIT_BUFFER_WIDTH); -	    b->sourcefile = image_source; -	    b->real_type = t; -	} -	UFclose(&f); -	TRAP_OFF; -	return b; -    } -#endif - -    if (!strcasecmp(t, "text/html")) -	proc = loadHTMLBuffer; -    else if (is_plain_text_type(t)) -	proc = loadBuffer; -#ifdef USE_IMAGE -    else if (activeImage && displayImage && !useExtImageViewer && -	     !(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6)) -	proc = loadImageBuffer; -#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; -	} -	else { -	    TRAP_OFF; -	    if (pu.scheme == SCM_LOCAL) { -		UFclose(&f); -		_doFileCopy(pu.real_file, -			    conv_from_system(guess_save_name -					     (NULL, pu.real_file)), TRUE); -	    } -	    else { -		if (DecodeCTE && IStype(f.stream) != IST_ENCODED) -		    f.stream = newEncodedStream(f.stream, f.encoding); -		if (doFileSave(f, guess_save_name(t_buf, pu.file)) == 0) -		    UFhalfclose(&f); -		else -		    UFclose(&f); -	    } -	    return NO_BUFFER; -	} -    } -    else if (w3m_dump & DUMP_FRAME) -	return 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; -#endif -    frame_source = flag & RG_FRAME_SRC; -    b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf); -    UFclose(&f); -    frame_source = 0; -    if (b) { -	b->real_scheme = f.scheme; -	b->real_type = real_type; -	if (b->currentURL.host == NULL && b->currentURL.file == NULL) -	    copyParsedURL(&b->currentURL, &pu); -	if (!strcasecmp(t, "text/html")) -	    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 (pu.label) { -	    if (proc == loadHTMLBuffer) { -		Anchor *a; -		a = searchURLLabel(b, pu.label); -		if (a != NULL) { -		    gotoLine(b, a->start.line); -		    if (label_topline) -			b->topLine = lineSkip(b, b->topLine, -					      b->currentLine->linenumber -					      - b->topLine->linenumber, FALSE); -		    b->pos = a->start.pos; -		    arrangeCursor(b); -		} -	    } -	    else {		/* plain text */ -		int l = atoi(pu.label); -		gotoLine(b, l); -		b->pos = 0; -		arrangeCursor(b); -	    } -	} -    } -    if (header_string) -	header_string = NULL; -#ifdef USE_NNTP -    if (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS) -	reAnchorNewsheader(b); -#endif -    preFormUpdateBuffer(b); -    TRAP_OFF; -    return b; -} - -#define TAG_IS(s,tag,len)\ -  (strncasecmp(s,tag,len)==0&&(s[len] == '>' || IS_SPACE((int)s[len]))) - -static char * -has_hidden_link(struct readbuffer *obuf, int cmd) -{ -    Str line = obuf->line; -    struct link_stack *p; - -    if (Strlastchar(line) != '>') -	return NULL; - -    for (p = link_stack; p; p = p->next) -	if (p->cmd == cmd) -	    break; -    if (!p) -	return NULL; - -    if (obuf->pos == p->pos) -	return line->ptr + p->offset; - -    return NULL; -} - -static void -push_link(int cmd, int offset, int pos) -{ -    struct link_stack *p; -    p = New(struct link_stack); -    p->cmd = cmd; -    p->offset = offset; -    p->pos = pos; -    p->next = link_stack; -    link_stack = p; -} - -static int -is_period_char(unsigned char *ch) -{ -    switch (*ch) { -    case ',': -    case '.': -    case ':': -    case ';': -    case '?': -    case '!': -    case ')': -    case ']': -    case '}': -    case '>': -	return 1; -    default: -	return 0; -    } -} - -static int -is_beginning_char(unsigned char *ch) -{ -    switch (*ch) { -    case '(': -    case '[': -    case '{': -    case '`': -    case '<': -	return 1; -    default: -	return 0; -    } -} - -static int -is_word_char(unsigned char *ch) -{ -    Lineprop ctype = get_mctype(ch); - -#ifdef USE_M17N -    if (ctype & (PC_CTRL | PC_KANJI | PC_UNKNOWN)) -	return 0; -    if (ctype & (PC_WCHAR1 | PC_WCHAR2)) -	return 1; -#else -    if (ctype == PC_CTRL) -	return 0; -#endif - -    if (IS_ALNUM(*ch)) -	return 1; - -    switch (*ch) { -    case ',': -    case '.': -    case ':': -    case '\"':			/* " */ -    case '\'': -    case '$': -    case '%': -    case '*': -    case '+': -    case '-': -    case '@': -    case '~': -    case '_': -	return 1; -    } -#ifdef USE_M17N -    if (*ch == NBSP_CODE) -	return 1; -#else -    if (*ch == TIMES_CODE || *ch == DIVIDE_CODE || *ch == ANSP_CODE) -	return 0; -    if (*ch >= AGRAVE_CODE || *ch == NBSP_CODE) -	return 1; -#endif -    return 0; -} - -#ifdef USE_M17N -static int -is_combining_char(unsigned char *ch) -{ -    Lineprop ctype = get_mctype(ch); - -    if (ctype & PC_WCHAR2) -	return 1; -    return 0; -} -#endif - -int -is_boundary(unsigned char *ch1, unsigned char *ch2) -{ -    if (!*ch1 || !*ch2) -	return 1; - -    if (*ch1 == ' ' && *ch2 == ' ') -	return 0; - -    if (*ch1 != ' ' && is_period_char(ch2)) -	return 0; - -    if (*ch2 != ' ' && is_beginning_char(ch1)) -	return 0; - -#ifdef USE_M17N -    if (is_combining_char(ch2)) -	return 0; -#endif -    if (is_word_char(ch1) && is_word_char(ch2)) -	return 0; - -    return 1; -} - - -static void -set_breakpoint(struct readbuffer *obuf, int tag_length) -{ -    obuf->bp.len = obuf->line->length; -    obuf->bp.pos = obuf->pos; -    obuf->bp.tlen = tag_length; -    obuf->bp.flag = obuf->flag; -#ifdef FORMAT_NICE -    obuf->bp.flag &= ~RB_FILL; -#endif				/* FORMAT_NICE */ -    obuf->bp.top_margin = obuf->top_margin; -    obuf->bp.bottom_margin = obuf->bottom_margin; - -    if (!obuf->bp.init_flag) -	return; - -    bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor, -	  sizeof(obuf->anchor)); -    obuf->bp.img_alt = obuf->img_alt; -    obuf->bp.in_bold = obuf->in_bold; -    obuf->bp.in_under = obuf->in_under; -    obuf->bp.nobr_level = obuf->nobr_level; -    obuf->bp.prev_ctype = obuf->prev_ctype; -    obuf->bp.init_flag = 0; -} - -static void -back_to_breakpoint(struct readbuffer *obuf) -{ -    obuf->flag = obuf->bp.flag; -    bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor, -	  sizeof(obuf->anchor)); -    obuf->img_alt = obuf->bp.img_alt; -    obuf->in_bold = obuf->bp.in_bold; -    obuf->in_under = obuf->bp.in_under; -    obuf->prev_ctype = obuf->bp.prev_ctype; -    obuf->pos = obuf->bp.pos; -    obuf->top_margin = obuf->bp.top_margin; -    obuf->bottom_margin = obuf->bp.bottom_margin; -    if (obuf->flag & RB_NOBR) -	obuf->nobr_level = obuf->bp.nobr_level; -} - -static void -append_tags(struct readbuffer *obuf) -{ -    int i; -    int len = obuf->line->length; -    int set_bp = 0; - -    for (i = 0; i < obuf->tag_sp; i++) { -	switch (obuf->tag_stack[i]->cmd) { -	case HTML_A: -	case HTML_IMG_ALT: -	case HTML_B: -	case HTML_U: -	    push_link(obuf->tag_stack[i]->cmd, obuf->line->length, obuf->pos); -	    break; -	} -	Strcat_charp(obuf->line, obuf->tag_stack[i]->cmdname); -	switch (obuf->tag_stack[i]->cmd) { -	case HTML_NOBR: -	    if (obuf->nobr_level > 1) -		break; -	case HTML_WBR: -	    set_bp = 1; -	    break; -	} -    } -    obuf->tag_sp = 0; -    if (set_bp) -	set_breakpoint(obuf, obuf->line->length - len); -} - -static void -push_tag(struct readbuffer *obuf, char *cmdname, int cmd) -{ -    obuf->tag_stack[obuf->tag_sp] = New(struct cmdtable); -    obuf->tag_stack[obuf->tag_sp]->cmdname = allocStr(cmdname, -1); -    obuf->tag_stack[obuf->tag_sp]->cmd = cmd; -    obuf->tag_sp++; -    if (obuf->tag_sp >= TAG_STACK_SIZE || obuf->flag & (RB_SPECIAL & ~RB_NOBR)) -	append_tags(obuf); -} - -static void -push_nchars(struct readbuffer *obuf, int width, -	    char *str, int len, Lineprop mode) -{ -    append_tags(obuf); -    Strcat_charp_n(obuf->line, str, len); -    obuf->pos += width; -    if (width > 0) { -	set_prevchar(obuf->prevchar, str, len); -	obuf->prev_ctype = mode; -    } -    obuf->flag |= RB_NFLUSHED; -} - -#define push_charp(obuf, width, str, mode)\ -push_nchars(obuf, width, str, strlen(str), mode) - -#define push_str(obuf, width, str, mode)\ -push_nchars(obuf, width, str->ptr, str->length, mode) - -static void -check_breakpoint(struct readbuffer *obuf, int pre_mode, char *ch) -{ -    int tlen, len = obuf->line->length; - -    append_tags(obuf); -    if (pre_mode) -	return; -    tlen = obuf->line->length - len; -    if (tlen > 0 -	|| is_boundary((unsigned char *)obuf->prevchar->ptr, -		       (unsigned char *)ch)) -	set_breakpoint(obuf, tlen); -} - -static void -push_char(struct readbuffer *obuf, int pre_mode, char ch) -{ -    check_breakpoint(obuf, pre_mode, &ch); -    Strcat_char(obuf->line, ch); -    obuf->pos++; -    set_prevchar(obuf->prevchar, &ch, 1); -    if (ch != ' ') -	obuf->prev_ctype = PC_ASCII; -    obuf->flag |= RB_NFLUSHED; -} - -#define PUSH(c) push_char(obuf, obuf->flag & RB_SPECIAL, c) - -static void -push_spaces(struct readbuffer *obuf, int pre_mode, int width) -{ -    int i; - -    if (width <= 0) -	return; -    check_breakpoint(obuf, pre_mode, " "); -    for (i = 0; i < width; i++) -	Strcat_char(obuf->line, ' '); -    obuf->pos += width; -    set_space_to_prevchar(obuf->prevchar); -    obuf->flag |= RB_NFLUSHED; -} - -static void -proc_mchar(struct readbuffer *obuf, int pre_mode, -	   int width, char **str, Lineprop mode) -{ -    check_breakpoint(obuf, pre_mode, *str); -    obuf->pos += width; -    Strcat_charp_n(obuf->line, *str, get_mclen(*str)); -    if (width > 0) { -	set_prevchar(obuf->prevchar, *str, 1); -	if (**str != ' ') -	    obuf->prev_ctype = mode; -    } -    (*str) += get_mclen(*str); -    obuf->flag |= RB_NFLUSHED; -} - -void -push_render_image(Str str, int width, int limit, -		  struct html_feed_environ *h_env) -{ -    struct readbuffer *obuf = h_env->obuf; -    int indent = h_env->envs[h_env->envc].indent; - -    push_spaces(obuf, 1, (limit - width) / 2); -    push_str(obuf, width, str, PC_ASCII); -    push_spaces(obuf, 1, (limit - width + 1) / 2); -    if (width > 0) -	flushline(h_env, obuf, indent, 0, h_env->limit); -} - -static int -sloppy_parse_line(char **str) -{ -    if (**str == '<') { -	while (**str && **str != '>') -	    (*str)++; -	if (**str == '>') -	    (*str)++; -	return 1; -    } -    else { -	while (**str && **str != '<') -	    (*str)++; -	return 0; -    } -} - -static void -passthrough(struct readbuffer *obuf, char *str, int back) -{ -    int cmd; -    Str tok = Strnew(); -    char *str_bak; - -    if (back) { -	Str str_save = Strnew_charp(str); -	Strshrink(obuf->line, obuf->line->ptr + obuf->line->length - str); -	str = str_save->ptr; -    } -    while (*str) { -	str_bak = str; -	if (sloppy_parse_line(&str)) { -	    char *q = str_bak; -	    cmd = gethtmlcmd(&q); -	    if (back) { -		struct link_stack *p; -		for (p = link_stack; p; p = p->next) { -		    if (p->cmd == cmd) { -			link_stack = p->next; -			break; -		    } -		} -		back = 0; -	    } -	    else { -		Strcat_charp_n(tok, str_bak, str - str_bak); -		push_tag(obuf, tok->ptr, cmd); -		Strclear(tok); -	    } -	} -	else { -	    push_nchars(obuf, 0, str_bak, str - str_bak, obuf->prev_ctype); -	} -    } -} - -#if 0 -int -is_blank_line(char *line, int indent) -{ -    int i, is_blank = 0; - -    for (i = 0; i < indent; i++) { -	if (line[i] == '\0') { -	    is_blank = 1; -	} -	else if (line[i] != ' ') { -	    break; -	} -    } -    if (i == indent && line[i] == '\0') -	is_blank = 1; -    return is_blank; -} -#endif - -void -fillline(struct readbuffer *obuf, int indent) -{ -    push_spaces(obuf, 1, indent - obuf->pos); -    obuf->flag &= ~RB_NFLUSHED; -} - -void -flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, -	  int force, int width) -{ -    TextLineList *buf = h_env->buf; -    FILE *f = h_env->f; -    Str line = obuf->line, pass = NULL; -    char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL, -	*hidden_under = NULL, *hidden = NULL; - -#ifdef DEBUG -    if (w3m_debug) { -	FILE *df = fopen("zzzproc1", "a"); -	fprintf(df, "flushline(%s,%d,%d,%d)\n", obuf->line->ptr, indent, force, -		width); -	if (buf) { -	    TextLineListItem *p; -	    for (p = buf->first; p; p = p->next) { -		fprintf(df, "buf=\"%s\"\n", p->ptr->line->ptr); -	    } -	} -	fclose(df); -    } -#endif - -    if (!(obuf->flag & (RB_SPECIAL & ~RB_NOBR)) && Strlastchar(line) == ' ') { -	Strshrink(line, 1); -	obuf->pos--; -    } - -    append_tags(obuf); - -    if (obuf->anchor.url) -	hidden = hidden_anchor = has_hidden_link(obuf, HTML_A); -    if (obuf->img_alt) { -	if ((hidden_img = has_hidden_link(obuf, HTML_IMG_ALT)) != NULL) { -	    if (!hidden || hidden_img < hidden) -		hidden = hidden_img; -	} -    } -    if (obuf->in_bold) { -	if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) { -	    if (!hidden || hidden_bold < hidden) -		hidden = hidden_bold; -	} -    } -    if (obuf->in_under) { -	if ((hidden_under = has_hidden_link(obuf, HTML_U)) != NULL) { -	    if (!hidden || hidden_under < hidden) -		hidden = hidden_under; -	} -    } -    if (hidden) { -	pass = Strnew_charp(hidden); -	Strshrink(line, line->ptr + line->length - hidden); -    } - -    if (!(obuf->flag & (RB_SPECIAL & ~RB_NOBR)) && obuf->pos > width) { -	char *tp = &line->ptr[obuf->bp.len - obuf->bp.tlen]; -	char *ep = &line->ptr[line->length]; - -	if (obuf->bp.pos == obuf->pos && tp <= ep && -	    tp > line->ptr && tp[-1] == ' ') { -	    bcopy(tp, tp - 1, ep - tp + 1); -	    line->length--; -	    obuf->pos--; -	} -    } - -    if (obuf->anchor.url && !hidden_anchor) -	Strcat_charp(line, "</a>"); -    if (obuf->img_alt && !hidden_img) -	Strcat_charp(line, "</img_alt>"); -    if (obuf->in_bold && !hidden_bold) -	Strcat_charp(line, "</b>"); -    if (obuf->in_under && !hidden_under) -	Strcat_charp(line, "</u>"); - -    if (obuf->top_margin > 0) { -	int i; -	struct html_feed_environ h; -	struct readbuffer o; -	struct environment e[1]; - -	init_henv(&h, &o, e, 1, NULL, width, indent); -	o.line = Strnew_size(width + 20); -	o.pos = obuf->pos; -	o.flag = obuf->flag; -	o.top_margin = -1; -	o.bottom_margin = -1; -	Strcat_charp(o.line, "<pre_int>"); -	for (i = 0; i < o.pos; i++) -	    Strcat_char(o.line, ' '); -	Strcat_charp(o.line, "</pre_int>"); -	for (i = 0; i < obuf->top_margin; i++) -	    flushline(h_env, &o, indent, force, width); -    } - -    if (force == 1 || obuf->flag & RB_NFLUSHED) { -	TextLine *lbuf = newTextLine(line, obuf->pos); -	if (RB_GET_ALIGN(obuf) == RB_CENTER) { -	    align(lbuf, width, ALIGN_CENTER); -	} -	else if (RB_GET_ALIGN(obuf) == RB_RIGHT) { -	    align(lbuf, width, ALIGN_RIGHT); -	} -	else if (RB_GET_ALIGN(obuf) == RB_LEFT && obuf->flag & RB_INTABLE) { -	    align(lbuf, width, ALIGN_LEFT); -	} -#ifdef FORMAT_NICE -	else if (obuf->flag & RB_FILL) { -	    char *p; -	    int rest, rrest; -	    int nspace, d, i; - -	    rest = width - get_Str_strwidth(line); -	    if (rest > 1) { -		nspace = 0; -		for (p = line->ptr + indent; *p; p++) { -		    if (*p == ' ') -			nspace++; -		} -		if (nspace > 0) { -		    int indent_here = 0; -		    d = rest / nspace; -		    p = line->ptr; -		    while (IS_SPACE(*p)) { -			p++; -			indent_here++; -		    } -		    rrest = rest - d * nspace; -		    line = Strnew_size(width + 1); -		    for (i = 0; i < indent_here; i++) -			Strcat_char(line, ' '); -		    for (; *p; p++) { -			Strcat_char(line, *p); -			if (*p == ' ') { -			    for (i = 0; i < d; i++) -				Strcat_char(line, ' '); -			    if (rrest > 0) { -				Strcat_char(line, ' '); -				rrest--; -			    } -			} -		    } -		    lbuf = newTextLine(line, width); -		} -	    } -	} -#endif				/* FORMAT_NICE */ -#ifdef TABLE_DEBUG -	if (w3m_debug) { -	    FILE *f = fopen("zzzproc1", "a"); -	    fprintf(f, "pos=%d,%d, maxlimit=%d\n", -		    visible_length(lbuf->line->ptr), lbuf->pos, -		    h_env->maxlimit); -	    fclose(f); -	} -#endif -	if (lbuf->pos > h_env->maxlimit) -	    h_env->maxlimit = lbuf->pos; -	if (buf) -	    pushTextLine(buf, lbuf); -	else if (f) { -	    Strfputs(Str_conv_to_halfdump(lbuf->line), f); -	    fputc('\n', f); -	} -	if (obuf->flag & RB_SPECIAL || obuf->flag & RB_NFLUSHED) -	    h_env->blank_lines = 0; -	else -	    h_env->blank_lines++; -    } -    else { -	char *p = line->ptr, *q; -	Str tmp = Strnew(), tmp2 = Strnew(); - -#define APPEND(str) \ -	if (buf) \ -	    appendTextLine(buf,(str),0); \ -	else if (f) \ -	    Strfputs((str),f) - -	while (*p) { -	    q = p; -	    if (sloppy_parse_line(&p)) { -		Strcat_charp_n(tmp, q, p - q); -		if (force == 2) { -		    APPEND(tmp); -		} -		else -		    Strcat(tmp2, tmp); -		Strclear(tmp); -	    } -	} -	if (force == 2) { -	    if (pass) { -		APPEND(pass); -	    } -	    pass = NULL; -	} -	else { -	    if (pass) -		Strcat(tmp2, pass); -	    pass = tmp2; -	} -    } - -    if (obuf->bottom_margin > 0) { -	int i; -	struct html_feed_environ h; -	struct readbuffer o; -	struct environment e[1]; - -	init_henv(&h, &o, e, 1, NULL, width, indent); -	o.line = Strnew_size(width + 20); -	o.pos = obuf->pos; -	o.flag = obuf->flag; -	o.top_margin = -1; -	o.bottom_margin = -1; -	Strcat_charp(o.line, "<pre_int>"); -	for (i = 0; i < o.pos; i++) -	    Strcat_char(o.line, ' '); -	Strcat_charp(o.line, "</pre_int>"); -	for (i = 0; i < obuf->bottom_margin; i++) -	    flushline(h_env, &o, indent, force, width); -    } -    if (obuf->top_margin < 0 || obuf->bottom_margin < 0) -	return; - -    obuf->line = Strnew_size(256); -    obuf->pos = 0; -    obuf->top_margin = 0; -    obuf->bottom_margin = 0; -    set_space_to_prevchar(obuf->prevchar); -    obuf->bp.init_flag = 1; -    obuf->flag &= ~RB_NFLUSHED; -    set_breakpoint(obuf, 0); -    obuf->prev_ctype = PC_ASCII; -    link_stack = NULL; -    fillline(obuf, indent); -    if (pass) -	passthrough(obuf, pass->ptr, 0); -    if (!hidden_anchor && obuf->anchor.url) { -	Str tmp; -	if (obuf->anchor.hseq > 0) -	    obuf->anchor.hseq = -obuf->anchor.hseq; -	tmp = Sprintf("<A HSEQ=\"%d\" HREF=\"", obuf->anchor.hseq); -	Strcat_charp(tmp, html_quote(obuf->anchor.url)); -	if (obuf->anchor.target) { -	    Strcat_charp(tmp, "\" TARGET=\""); -	    Strcat_charp(tmp, html_quote(obuf->anchor.target)); -	} -	if (obuf->anchor.referer) { -	    Strcat_charp(tmp, "\" REFERER=\""); -	    Strcat_charp(tmp, html_quote(obuf->anchor.referer)); -	} -	if (obuf->anchor.title) { -	    Strcat_charp(tmp, "\" TITLE=\""); -	    Strcat_charp(tmp, html_quote(obuf->anchor.title)); -	} -	if (obuf->anchor.accesskey) { -	    char *c = html_quote_char(obuf->anchor.accesskey); -	    Strcat_charp(tmp, "\" ACCESSKEY=\""); -	    if (c) -		Strcat_charp(tmp, c); -	    else -		Strcat_char(tmp, obuf->anchor.accesskey); -	} -	Strcat_charp(tmp, "\">"); -	push_tag(obuf, tmp->ptr, HTML_A); -    } -    if (!hidden_img && obuf->img_alt) { -	Str tmp = Strnew_charp("<IMG_ALT SRC=\""); -	Strcat_charp(tmp, html_quote(obuf->img_alt->ptr)); -	Strcat_charp(tmp, "\">"); -	push_tag(obuf, tmp->ptr, HTML_IMG_ALT); -    } -    if (!hidden_bold && obuf->in_bold) -	push_tag(obuf, "<B>", HTML_B); -    if (!hidden_under && obuf->in_under) -	push_tag(obuf, "<U>", HTML_U); -} - -void -do_blankline(struct html_feed_environ *h_env, struct readbuffer *obuf, -	     int indent, int indent_incr, int width) -{ -    if (h_env->blank_lines == 0) -	flushline(h_env, obuf, indent, 1, width); -} - -void -purgeline(struct html_feed_environ *h_env) -{ -    char *p, *q; -    Str tmp; - -    if (h_env->buf == NULL || h_env->blank_lines == 0) -	return; - -    p = rpopTextLine(h_env->buf)->line->ptr; -    tmp = Strnew(); -    while (*p) { -	q = p; -	if (sloppy_parse_line(&p)) { -	    Strcat_charp_n(tmp, q, p - q); -	} -    } -    appendTextLine(h_env->buf, tmp, 0); -    h_env->blank_lines--; -} - -static int -close_effect0(struct readbuffer *obuf, int cmd) -{ -    int i; -    char *p; - -    for (i = obuf->tag_sp - 1; i >= 0; i--) { -	if (obuf->tag_stack[i]->cmd == cmd) -	    break; -    } -    if (i >= 0) { -	obuf->tag_sp--; -	bcopy(&obuf->tag_stack[i + 1], &obuf->tag_stack[i], -	      (obuf->tag_sp - i) * sizeof(struct cmdtable *)); -	return 1; -    } -    else if ((p = has_hidden_link(obuf, cmd)) != NULL) { -	passthrough(obuf, p, 1); -	return 1; -    } -    return 0; -} - -static void -close_anchor(struct html_feed_environ *h_env, struct readbuffer *obuf) -{ -    if (obuf->anchor.url) { -	int i; -	char *p = NULL; -	int is_erased = 0; - -	for (i = obuf->tag_sp - 1; i >= 0; i--) { -	    if (obuf->tag_stack[i]->cmd == HTML_A) -		break; -	} -	if (i < 0 && obuf->anchor.hseq > 0 && Strlastchar(obuf->line) == ' ') { -	    Strshrink(obuf->line, 1); -	    obuf->pos--; -	    is_erased = 1; -	} - -	if (i >= 0 || (p = has_hidden_link(obuf, HTML_A))) { -	    if (obuf->anchor.hseq > 0) { -		HTMLlineproc1(ANSP, h_env); -		set_space_to_prevchar(obuf->prevchar); -	    } -	    else { -		if (i >= 0) { -		    obuf->tag_sp--; -		    bcopy(&obuf->tag_stack[i + 1], &obuf->tag_stack[i], -			  (obuf->tag_sp - i) * sizeof(struct cmdtable *)); -		} -		else { -		    passthrough(obuf, p, 1); -		} -		bzero((void *)&obuf->anchor, sizeof(obuf->anchor)); -		return; -	    } -	    is_erased = 0; -	} -	if (is_erased) { -	    Strcat_char(obuf->line, ' '); -	    obuf->pos++; -	} - -	push_tag(obuf, "</a>", HTML_N_A); -    } -    bzero((void *)&obuf->anchor, sizeof(obuf->anchor)); -} - -void -save_fonteffect(struct html_feed_environ *h_env, struct readbuffer *obuf) -{ -    if (obuf->fontstat_sp < FONT_STACK_SIZE) -	bcopy(obuf->fontstat, obuf->fontstat_stack[obuf->fontstat_sp], -	      FONTSTAT_SIZE); -    obuf->fontstat_sp++; -    if (obuf->in_bold) -	push_tag(obuf, "</b>", HTML_N_B); -    if (obuf->in_under) -	push_tag(obuf, "</u>", HTML_N_U); -    bzero(obuf->fontstat, FONTSTAT_SIZE); -} - -void -restore_fonteffect(struct html_feed_environ *h_env, struct readbuffer *obuf) -{ -    if (obuf->fontstat_sp > 0) -	obuf->fontstat_sp--; -    if (obuf->fontstat_sp < FONT_STACK_SIZE) -	bcopy(obuf->fontstat_stack[obuf->fontstat_sp], obuf->fontstat, -	      FONTSTAT_SIZE); -    if (obuf->in_bold) -	push_tag(obuf, "<b>", HTML_B); -    if (obuf->in_under) -	push_tag(obuf, "<u>", HTML_U); -} - -static Str -process_title(struct parsed_tag *tag) -{ -    cur_title = Strnew(); -    return NULL; -} - -static Str -process_n_title(struct parsed_tag *tag) -{ -    Str tmp; - -    if (!cur_title) -	return NULL; -    Strremovefirstspaces(cur_title); -    Strremovetrailingspaces(cur_title); -    tmp = Strnew_m_charp("<title_alt title=\"", -			 html_quote(cur_title->ptr), "\">", NULL); -    cur_title = NULL; -    return tmp; -} - -static void -feed_title(char *str) -{ -    if (!cur_title) -	return; -    while (*str) { -	if (*str == '&') -	    Strcat_charp(cur_title, getescapecmd(&str)); -	else if (*str == '\n' || *str == '\r') { -	    Strcat_char(cur_title, ' '); -	    str++; -	} -	else -	    Strcat_char(cur_title, *(str++)); -    } -} - -Str -process_img(struct parsed_tag *tag, int width) -{ -    char *p, *q, *r, *r2 = NULL, *s, *t; -#ifdef USE_IMAGE -    int w, i, nw, ni = 1, n, w0 = -1, i0 = -1; -    int align, xoffset, yoffset, top, bottom, ismap = 0; -    int use_image = activeImage && displayImage; -#else -    int w, i, nw, n; -#endif -    int pre_int = FALSE; -    Str tmp = Strnew(); - -    if (!parsedtag_get_value(tag, ATTR_SRC, &p)) -	return tmp; -    p = remove_space(p); -    q = NULL; -    parsedtag_get_value(tag, ATTR_ALT, &q); -    t = q; -    parsedtag_get_value(tag, ATTR_TITLE, &t); -    w = -1; -    if (parsedtag_get_value(tag, ATTR_WIDTH, &w)) { -	if (w < 0) { -	    if (width > 0) -		w = (int)(-width * pixel_per_char * w / 100 + 0.5); -	    else -		w = -1; -	} -#ifdef USE_IMAGE -	if (use_image) { -	    if (w > 0) { -		w = (int)(w * image_scale / 100 + 0.5); -		if (w == 0) -		    w = 1; -		else if (w > MAX_IMAGE_SIZE) -		    w = MAX_IMAGE_SIZE; -	    } -	} -#endif -    } -#ifdef USE_IMAGE -    if (use_image) { -	i = -1; -	if (parsedtag_get_value(tag, ATTR_HEIGHT, &i)) { -	    if (i > 0) { -		i = (int)(i * image_scale / 100 + 0.5); -		if (i == 0) -		    i = 1; -		else if (i > MAX_IMAGE_SIZE) -		    i = MAX_IMAGE_SIZE; -	    } -	    else { -		i = -1; -	    } -	} -	align = -1; -	parsedtag_get_value(tag, ATTR_ALIGN, &align); -	ismap = 0; -	if (parsedtag_exists(tag, ATTR_ISMAP)) -	    ismap = 1; -    } -    else -#endif -	parsedtag_get_value(tag, ATTR_HEIGHT, &i); -    r = NULL; -    parsedtag_get_value(tag, ATTR_USEMAP, &r); - -    tmp = Strnew_size(128); -#ifdef USE_IMAGE -    if (use_image) { -	switch (align) { -	case ALIGN_LEFT: -	    Strcat_charp(tmp, "<div_int align=left>"); -	    break; -	case ALIGN_CENTER: -	    Strcat_charp(tmp, "<div_int align=center>"); -	    break; -	case ALIGN_RIGHT: -	    Strcat_charp(tmp, "<div_int align=right>"); -	    break; -	} -    } -#endif -    if (r) { -	Str tmp2; -	r2 = strchr(r, '#'); -	s = "<form_int method=internal action=map>"; -	tmp2 = process_form(parse_tag(&s, TRUE)); -	if (tmp2) -	    Strcat(tmp, tmp2); -	Strcat(tmp, Sprintf("<input_alt fid=\"%d\" " -			    "type=hidden name=link value=\"", cur_form_id)); -	Strcat_charp(tmp, html_quote((r2) ? r2 + 1 : r)); -	Strcat(tmp, Sprintf("\"><input_alt hseq=\"%d\" fid=\"%d\" " -			    "type=submit no_effect=true>", -			    cur_hseq++, cur_form_id)); -    } -#ifdef USE_IMAGE -    if (use_image) { -	w0 = w; -	i0 = i; -	if (w < 0 || i < 0) { -	    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); -	    image.cache = NULL; -	    image.width = w; -	    image.height = i; - -	    image.cache = getImage(&image, cur_baseURL, IMG_FLAG_SKIP); -	    if (image.cache && image.cache->width > 0 && -		image.cache->height > 0) { -		w = w0 = image.cache->width; -		i = i0 = image.cache->height; -	    } -	    if (w < 0) -		w = 8 * pixel_per_char; -	    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; -	Strcat(tmp, -	       Sprintf("<pre_int><img_alt hseq=\"%d\" src=\"", cur_iseq++)); -	pre_int = TRUE; -    } -    else -#endif -    { -	if (w < 0) -	    w = 12 * pixel_per_char; -	nw = w ? (int)((w - 1) / pixel_per_char + 1) : 1; -	if (r) { -	    Strcat_charp(tmp, "<pre_int>"); -	    pre_int = TRUE; -	} -	Strcat_charp(tmp, "<img_alt src=\""); -    } -    Strcat_charp(tmp, html_quote(p)); -    Strcat_charp(tmp, "\""); -    if (t) { -	Strcat_charp(tmp, " title=\""); -	Strcat_charp(tmp, html_quote(t)); -	Strcat_charp(tmp, "\""); -    } -#ifdef USE_IMAGE -    if (use_image) { -	if (w0 >= 0) -	    Strcat(tmp, Sprintf(" width=%d", w0)); -	if (i0 >= 0) -	    Strcat(tmp, Sprintf(" height=%d", i0)); -	switch (align) { -	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; -	    yoffset = (int)(ni * pixel_per_line - i); -	    break; -	default: -	    top = ni - 1; -	    bottom = 0; -	    if (ni == 1 && ni * pixel_per_line > i) -		yoffset = 0; -	    else { -		yoffset = (int)(ni * pixel_per_line - i); -		if (yoffset <= -2) -		    yoffset++; -	    } -	    break; -	} -	xoffset = (int)((nw * pixel_per_char - w) / 2); -	if (xoffset) -	    Strcat(tmp, Sprintf(" xoffset=%d", xoffset)); -	if (yoffset) -	    Strcat(tmp, Sprintf(" yoffset=%d", yoffset)); -	if (top) -	    Strcat(tmp, Sprintf(" top_margin=%d", top)); -	if (bottom) -	    Strcat(tmp, Sprintf(" bottom_margin=%d", bottom)); -	if (r) { -	    Strcat_charp(tmp, " usemap=\""); -	    Strcat_charp(tmp, html_quote((r2) ? r2 + 1 : r)); -	    Strcat_charp(tmp, "\""); -	} -	if (ismap) -	    Strcat_charp(tmp, " ismap"); -    } -#endif -    Strcat_charp(tmp, ">"); -    if (q != NULL && *q == '\0' && ignore_null_img_alt) -	q = NULL; -    if (q != NULL) { -	n = get_strwidth(q); -#ifdef USE_IMAGE -	if (use_image) { -	    if (n > nw) { -		char *r; -		for (r = q, n = 0; r; r += get_mclen(r), n += get_mcwidth(r)) { -		    if (n + get_mcwidth(r) > nw) -			break; -		} -		Strcat_charp(tmp, html_quote(Strnew_charp_n(q, r - q)->ptr)); -	    } -	    else -		Strcat_charp(tmp, html_quote(q)); -	} -	else -#endif -	    Strcat_charp(tmp, html_quote(q)); -	goto img_end; -    } -    if (w > 0 && i > 0) { -	/* guess what the image is! */ -	if (w < 32 && i < 48) { -	    /* must be an icon or space */ -	    n = 1; -	    if (strcasestr(p, "space") || strcasestr(p, "blank")) -		Strcat_charp(tmp, "_"); -	    else { -		if (w * i < 8 * 16) -		    Strcat_charp(tmp, "*"); -		else { -		    if (!pre_int) { -			Strcat_charp(tmp, "<pre_int>"); -			pre_int = TRUE; -		    } -		    push_symbol(tmp, IMG_SYMBOL, symbol_width, 1); -		    n = symbol_width; -		} -	    } -	    goto img_end; -	} -	if (w > 200 && i < 13) { -	    /* must be a horizontal line */ -	    if (!pre_int) { -		Strcat_charp(tmp, "<pre_int>"); -		pre_int = TRUE; -	    } -	    w = w / pixel_per_char / symbol_width; -	    if (w <= 0) -		w = 1; -	    push_symbol(tmp, HR_SYMBOL, symbol_width, w); -	    n = w * symbol_width; -	    goto img_end; -	} -    } -    for (q = p; *q; q++) ; -    while (q > p && *q != '/') -	q--; -    if (*q == '/') -	q++; -    Strcat_char(tmp, '['); -    n = 1; -    p = q; -    for (; *q; q++) { -	if (!IS_ALNUM(*q) && *q != '_' && *q != '-') { -	    break; -	} -	Strcat_char(tmp, *q); -	n++; -	if (n + 1 >= nw) -	    break; -    } -    Strcat_char(tmp, ']'); -    n++; -  img_end: -#ifdef USE_IMAGE -    if (use_image) { -	for (; n < nw; n++) -	    Strcat_char(tmp, ' '); -    } -#endif -    Strcat_charp(tmp, "</img_alt>"); -    if (pre_int) -	Strcat_charp(tmp, "</pre_int>"); -    if (r) { -	Strcat_charp(tmp, "</input_alt>"); -	process_n_form(); -    } -#ifdef USE_IMAGE -    if (use_image) { -	switch (align) { -	case ALIGN_RIGHT: -	case ALIGN_CENTER: -	case ALIGN_LEFT: -	    Strcat_charp(tmp, "</div_int>"); -	    break; -	} -    } -#endif -    return tmp; -} - -Str -process_anchor(struct parsed_tag *tag, char *tagbuf) -{ -    if (parsedtag_need_reconstruct(tag)) { -	parsedtag_set_value(tag, ATTR_HSEQ, Sprintf("%d", cur_hseq++)->ptr); -	return parsedtag2str(tag); -    } -    else { -	Str tmp = Sprintf("<a hseq=\"%d\"", cur_hseq++); -	Strcat_charp(tmp, tagbuf + 2); -	return tmp; -    } -} - -Str -process_input(struct parsed_tag *tag) -{ -    int i, w, v, x, y, z, iw, ih; -    char *q, *p, *r, *p2, *s; -    Str tmp = NULL; -    char *qq = ""; -    int qlen = 0; - -    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 = "text"; -    parsedtag_get_value(tag, ATTR_TYPE, &p); -    q = NULL; -    parsedtag_get_value(tag, ATTR_VALUE, &q); -    r = ""; -    parsedtag_get_value(tag, ATTR_NAME, &r); -    w = 20; -    parsedtag_get_value(tag, ATTR_SIZE, &w); -    i = 20; -    parsedtag_get_value(tag, ATTR_MAXLENGTH, &i); -    p2 = NULL; -    parsedtag_get_value(tag, ATTR_ALT, &p2); -    x = parsedtag_exists(tag, ATTR_CHECKED); -    y = parsedtag_exists(tag, ATTR_ACCEPT); -    z = parsedtag_exists(tag, ATTR_READONLY); - -    v = formtype(p); -    if (v == FORM_UNKNOWN) -	return NULL; - -    if (!q) { -	switch (v) { -	case FORM_INPUT_IMAGE: -	case FORM_INPUT_SUBMIT: -	case FORM_INPUT_BUTTON: -	    q = "SUBMIT"; -	    break; -	case FORM_INPUT_RESET: -	    q = "RESET"; -	    break; -	    /* if no VALUE attribute is specified in  -	     * <INPUT TYPE=CHECKBOX> tag, then the value "on" is used  -	     * as a default value. It is not a part of HTML4.0  -	     * specification, but an imitation of Netscape behaviour.  -	     */ -	case FORM_INPUT_CHECKBOX: -	    q = "on"; -	} -    } -    /* VALUE attribute is not allowed in <INPUT TYPE=FILE> tag. */ -    if (v == FORM_INPUT_FILE) -	q = NULL; -    if (q) { -	qq = html_quote(q); -	qlen = get_strwidth(q); -    } - -    Strcat_charp(tmp, "<pre_int>"); -    switch (v) { -    case FORM_INPUT_PASSWORD: -    case FORM_INPUT_TEXT: -    case FORM_INPUT_FILE: -    case FORM_INPUT_CHECKBOX: -	Strcat_char(tmp, '['); -	break; -    case FORM_INPUT_RADIO: -	Strcat_char(tmp, '('); -    } -    Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s " -			"name=\"%s\" width=%d maxlength=%d value=\"%s\"", -			cur_hseq++, cur_form_id, p, html_quote(r), w, i, qq)); -    if (x) -	Strcat_charp(tmp, " checked"); -    if (y) -	Strcat_charp(tmp, " accept"); -    if (z) -	Strcat_charp(tmp, " readonly"); -    Strcat_char(tmp, '>'); - -    if (v == FORM_INPUT_HIDDEN) -	Strcat_charp(tmp, "</input_alt></pre_int>"); -    else { -	switch (v) { -	case FORM_INPUT_PASSWORD: -	case FORM_INPUT_TEXT: -	case FORM_INPUT_FILE: -	    Strcat_charp(tmp, "<u>"); -	    break; -	case FORM_INPUT_IMAGE: -	    s = NULL; -	    parsedtag_get_value(tag, ATTR_SRC, &s); -	    if (s) { -		Strcat(tmp, Sprintf("<img src=\"%s\"", html_quote(s))); -		if (p2) -		    Strcat(tmp, Sprintf(" alt=\"%s\"", html_quote(p2))); -		if (parsedtag_get_value(tag, ATTR_WIDTH, &iw)) -		    Strcat(tmp, Sprintf(" width=\"%d\"", iw)); -		if (parsedtag_get_value(tag, ATTR_HEIGHT, &ih)) -		    Strcat(tmp, Sprintf(" height=\"%d\"", ih)); -		Strcat_charp(tmp, ">"); -		Strcat_charp(tmp, "</input_alt></pre_int>"); -		return tmp; -	    } -	case FORM_INPUT_SUBMIT: -	case FORM_INPUT_BUTTON: -	case FORM_INPUT_RESET: -	    Strcat_charp(tmp, "["); -	    break; -	} -	switch (v) { -	case FORM_INPUT_PASSWORD: -	    i = 0; -	    if (q) { -		for (; i < qlen && i < w; i++) -		    Strcat_char(tmp, '*'); -	    } -	    for (; i < w; i++) -		Strcat_char(tmp, ' '); -	    break; -	case FORM_INPUT_TEXT: -	case FORM_INPUT_FILE: -	    if (q) -		Strcat(tmp, textfieldrep(Strnew_charp(q), w)); -	    else { -		for (i = 0; i < w; i++) -		    Strcat_char(tmp, ' '); -	    } -	    break; -	case FORM_INPUT_SUBMIT: -	case FORM_INPUT_BUTTON: -	    if (p2) -		Strcat_charp(tmp, html_quote(p2)); -	    else -		Strcat_charp(tmp, qq); -	    break; -	case FORM_INPUT_RESET: -	    Strcat_charp(tmp, qq); -	    break; -	case FORM_INPUT_RADIO: -	case FORM_INPUT_CHECKBOX: -	    if (x) -		Strcat_char(tmp, '*'); -	    else -		Strcat_char(tmp, ' '); -	    break; -	} -	switch (v) { -	case FORM_INPUT_PASSWORD: -	case FORM_INPUT_TEXT: -	case FORM_INPUT_FILE: -	    Strcat_charp(tmp, "</u>"); -	    break; -	case FORM_INPUT_IMAGE: -	case FORM_INPUT_SUBMIT: -	case FORM_INPUT_BUTTON: -	case FORM_INPUT_RESET: -	    Strcat_charp(tmp, "]"); -	} -	Strcat_charp(tmp, "</input_alt>"); -	switch (v) { -	case FORM_INPUT_PASSWORD: -	case FORM_INPUT_TEXT: -	case FORM_INPUT_FILE: -	case FORM_INPUT_CHECKBOX: -	    Strcat_char(tmp, ']'); -	    break; -	case FORM_INPUT_RADIO: -	    Strcat_char(tmp, ')'); -	} -	Strcat_charp(tmp, "</pre_int>"); -    } -    return tmp; -} - -Str -process_select(struct parsed_tag *tag) -{ -    Str tmp = NULL; -    char *p; - -    if (cur_form_id < 0) { -	char *s = "<form_int method=internal action=none>"; -	tmp = process_form(parse_tag(&s, TRUE)); -    } - -    p = ""; -    parsedtag_get_value(tag, ATTR_NAME, &p); -    cur_select = Strnew_charp(p); -    select_is_multiple = parsedtag_exists(tag, ATTR_MULTIPLE); - -#ifdef MENU_SELECT -    if (!select_is_multiple) { -	select_str = Sprintf("<pre_int>[<input_alt hseq=\"%d\" " -			     "fid=\"%d\" type=select name=\"%s\" selectnumber=%d", -			     cur_hseq++, cur_form_id, html_quote(p), n_select); -	Strcat_charp(select_str, ">"); -	if (n_select == max_select) { -	    max_select *= 2; -	    select_option = -		New_Reuse(FormSelectOption, select_option, max_select); -	} -	select_option[n_select].first = NULL; -	select_option[n_select].last = NULL; -	cur_option_maxwidth = 0; -    } -    else -#endif				/* MENU_SELECT */ -	select_str = Strnew(); -    cur_option = NULL; -    cur_status = R_ST_NORMAL; -    n_selectitem = 0; -    return tmp; -} - -Str -process_n_select(void) -{ -    if (cur_select == NULL) -	return NULL; -    process_option(); -#ifdef MENU_SELECT -    if (!select_is_multiple) { -	if (select_option[n_select].first) { -	    FormItemList sitem; -	    chooseSelectOption(&sitem, select_option[n_select].first); -	    Strcat(select_str, textfieldrep(sitem.label, cur_option_maxwidth)); -	} -	Strcat_charp(select_str, "</input_alt>]</pre_int>"); -	n_select++; -    } -    else -#endif				/* MENU_SELECT */ -	Strcat_charp(select_str, "<br>"); -    cur_select = NULL; -    n_selectitem = 0; -    return select_str; -} - -void -feed_select(char *str) -{ -    Str tmp = Strnew(); -    int prev_status = cur_status; -    static int prev_spaces = -1; -    char *p; - -    if (cur_select == NULL) -	return; -    while (read_token(tmp, &str, &cur_status, 0, 0)) { -	if (cur_status != R_ST_NORMAL || prev_status != R_ST_NORMAL) -	    continue; -	p = tmp->ptr; -	if (tmp->ptr[0] == '<' && Strlastchar(tmp) == '>') { -	    struct parsed_tag *tag; -	    char *q; -	    if (!(tag = parse_tag(&p, FALSE))) -		continue; -	    switch (tag->tagid) { -	    case HTML_OPTION: -		process_option(); -		cur_option = Strnew(); -		if (parsedtag_get_value(tag, ATTR_VALUE, &q)) -		    cur_option_value = Strnew_charp(q); -		else -		    cur_option_value = NULL; -		if (parsedtag_get_value(tag, ATTR_LABEL, &q)) -		    cur_option_label = Strnew_charp(q); -		else -		    cur_option_label = NULL; -		cur_option_selected = parsedtag_exists(tag, ATTR_SELECTED); -		prev_spaces = -1; -		break; -	    case HTML_N_OPTION: -		/* do nothing */ -		break; -	    default: -		/* never happen */ -		break; -	    } -	} -	else if (cur_option) { -	    while (*p) { -		if (IS_SPACE(*p) && prev_spaces != 0) { -		    p++; -		    if (prev_spaces > 0) -			prev_spaces++; -		} -		else { -		    if (IS_SPACE(*p)) -			prev_spaces = 1; -		    else -			prev_spaces = 0; -		    if (*p == '&') -			Strcat_charp(cur_option, getescapecmd(&p)); -		    else -			Strcat_char(cur_option, *(p++)); -		} -	    } -	} -    } -} - -void -process_option(void) -{ -    char begin_char = '[', end_char = ']'; -    int len; - -    if (cur_select == NULL || cur_option == NULL) -	return; -    while (cur_option->length > 0 && IS_SPACE(Strlastchar(cur_option))) -	Strshrink(cur_option, 1); -    if (cur_option_value == NULL) -	cur_option_value = cur_option; -    if (cur_option_label == NULL) -	cur_option_label = cur_option; -#ifdef MENU_SELECT -    if (!select_is_multiple) { -	len = get_Str_strwidth(cur_option_label); -	if (len > cur_option_maxwidth) -	    cur_option_maxwidth = len; -	addSelectOption(&select_option[n_select], -			cur_option_value, -			cur_option_label, cur_option_selected); -	return; -    } -#endif				/* MENU_SELECT */ -    if (!select_is_multiple) { -	begin_char = '('; -	end_char = ')'; -    } -    Strcat(select_str, Sprintf("<br><pre_int>%c<input_alt hseq=\"%d\" " -			       "fid=\"%d\" type=%s name=\"%s\" value=\"%s\"", -			       begin_char, cur_hseq++, cur_form_id, -			       select_is_multiple ? "checkbox" : "radio", -			       html_quote(cur_select->ptr), -			       html_quote(cur_option_value->ptr))); -    if (cur_option_selected) -	Strcat_charp(select_str, " checked>*</input_alt>"); -    else -	Strcat_charp(select_str, "> </input_alt>"); -    Strcat_char(select_str, end_char); -    Strcat_charp(select_str, html_quote(cur_option_label->ptr)); -    Strcat_charp(select_str, "</pre_int>"); -    n_selectitem++; -} - -Str -process_textarea(struct parsed_tag *tag, int width) -{ -    Str tmp = NULL; -    char *p; - -    if (cur_form_id < 0) { -	char *s = "<form_int method=internal action=none>"; -	tmp = process_form(parse_tag(&s, TRUE)); -    } - -    p = ""; -    parsedtag_get_value(tag, ATTR_NAME, &p); -    cur_textarea = Strnew_charp(p); -    cur_textarea_size = 20; -    if (parsedtag_get_value(tag, ATTR_COLS, &p)) { -	cur_textarea_size = atoi(p); -	if (p[strlen(p) - 1] == '%') -	    cur_textarea_size = width * cur_textarea_size / 100 - 2; -	if (cur_textarea_size <= 0) -	    cur_textarea_size = 20; -    } -    cur_textarea_rows = 1; -    if (parsedtag_get_value(tag, ATTR_ROWS, &p)) { -	cur_textarea_rows = atoi(p); -	if (cur_textarea_rows <= 0) -	    cur_textarea_rows = 1; -    } -    cur_textarea_readonly = parsedtag_exists(tag, ATTR_READONLY); -    if (n_textarea >= max_textarea) { -	max_textarea *= 2; -	textarea_str = New_Reuse(Str, textarea_str, max_textarea); -    } -    textarea_str[n_textarea] = Strnew(); -    ignore_nl_textarea = TRUE; - -    return tmp; -} - -Str -process_n_textarea(void) -{ -    Str tmp; -    int i; - -    if (cur_textarea == NULL) -	return NULL; - -    tmp = Strnew(); -    Strcat(tmp, Sprintf("<pre_int>[<input_alt hseq=\"%d\" fid=\"%d\" " -			"type=textarea name=\"%s\" size=%d rows=%d " -			"top_margin=%d textareanumber=%d", -			cur_hseq, cur_form_id, -			html_quote(cur_textarea->ptr), -			cur_textarea_size, cur_textarea_rows, -			cur_textarea_rows - 1, n_textarea)); -    if (cur_textarea_readonly) -	Strcat_charp(tmp, " readonly"); -    Strcat_charp(tmp, "><u>"); -    for (i = 0; i < cur_textarea_size; i++) -	Strcat_char(tmp, ' '); -    Strcat_charp(tmp, "</u></input_alt>]</pre_int>\n"); -    cur_hseq++; -    n_textarea++; -    cur_textarea = NULL; - -    return tmp; -} - -void -feed_textarea(char *str) -{ -    if (cur_textarea == NULL) -	return; -    if (ignore_nl_textarea) { -	if (*str == '\r') -	    str++; -	if (*str == '\n') -	    str++; -    } -    ignore_nl_textarea = FALSE; -    while (*str) { -	if (*str == '&') -	    Strcat_charp(textarea_str[n_textarea], getescapecmd(&str)); -	else if (*str == '\n') { -	    Strcat_charp(textarea_str[n_textarea], "\r\n"); -	    str++; -	} -	else if (*str != '\r') -	    Strcat_char(textarea_str[n_textarea], *(str++)); -    } -} - -Str -process_hr(struct parsed_tag *tag, int width, int indent_width) -{ -    Str tmp = Strnew_charp("<nobr>"); -    int w = 0; -    int x = ALIGN_CENTER; - -    if (width > indent_width) -	width -= indent_width; -    if (parsedtag_get_value(tag, ATTR_WIDTH, &w)) -	w = REAL_WIDTH(w, width); -    else -	w = width; - -    parsedtag_get_value(tag, ATTR_ALIGN, &x); -    switch (x) { -    case ALIGN_CENTER: -	Strcat_charp(tmp, "<div_int align=center>"); -	break; -    case ALIGN_RIGHT: -	Strcat_charp(tmp, "<div_int align=right>"); -	break; -    case ALIGN_LEFT: -	Strcat_charp(tmp, "<div_int align=left>"); -	break; -    } -    w /= symbol_width; -    if (w <= 0) -	w = 1; -    push_symbol(tmp, HR_SYMBOL, symbol_width, w); -    Strcat_charp(tmp, "</div_int></nobr>"); -    return tmp; -} - -#ifdef USE_M17N -static char * -check_charset(char *p) -{ -    return wc_guess_charset(p, 0) ? p : NULL; -} - -static char * -check_accept_charset(char *ac) -{ -    char *s = ac, *e; - -    while (*s) { -	while (*s && (IS_SPACE(*s) || *s == ',')) -	    s++; -	if (!*s) -	    break; -	e = s; -	while (*e && !(IS_SPACE(*e) || *e == ',')) -	    e++; -	if (wc_guess_charset(Strnew_charp_n(s, e - s)->ptr, 0)) -	    return ac; -	s = e; -    } -    return NULL; -} -#endif - -static Str -process_form_int(struct parsed_tag *tag, int fid) -{ -    char *p, *q, *r, *s, *tg, *n; - -    p = "get"; -    parsedtag_get_value(tag, ATTR_METHOD, &p); -    q = "!CURRENT_URL!"; -    parsedtag_get_value(tag, ATTR_ACTION, &q); -    r = NULL; -#ifdef USE_M17N -    if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r)) -	r = check_accept_charset(r); -    if (!r && parsedtag_get_value(tag, ATTR_CHARSET, &r)) -	r = check_charset(r); -#endif -    s = NULL; -    parsedtag_get_value(tag, ATTR_ENCTYPE, &s); -    tg = NULL; -    parsedtag_get_value(tag, ATTR_TARGET, &tg); -    n = NULL; -    parsedtag_get_value(tag, ATTR_NAME, &n); - -    if (fid < 0) { -	form_max++; -	form_sp++; -	fid = form_max; -    } -    else {			/* <form_int> */ -	if (form_max < fid) -	    form_max = fid; -	form_sp = fid; -    } -    if (forms_size == 0) { -	forms_size = INITIAL_FORM_SIZE; -	forms = New_N(FormList *, forms_size); -	form_stack = NewAtom_N(int, forms_size); -    } -    else if (forms_size <= form_max) { -	forms_size += form_max; -	forms = New_Reuse(FormList *, forms, forms_size); -	form_stack = New_Reuse(int, form_stack, forms_size); -    } -    form_stack[form_sp] = fid; - -    if (w3m_halfdump) { -	Str tmp = Sprintf("<form_int fid=\"%d\" action=\"%s\" method=\"%s\"", -			  fid, html_quote(q), html_quote(p)); -	if (s) -	    Strcat(tmp, Sprintf(" enctype=\"%s\"", html_quote(s))); -	if (tg) -	    Strcat(tmp, Sprintf(" target=\"%s\"", html_quote(tg))); -	if (n) -	    Strcat(tmp, Sprintf(" name=\"%s\"", html_quote(n))); -#ifdef USE_M17N -	if (r) -	    Strcat(tmp, Sprintf(" accept-charset=\"%s\"", html_quote(r))); -#endif -	Strcat_charp(tmp, ">"); -	return tmp; -    } - -    forms[fid] = newFormList(q, p, r, s, tg, n, NULL); -    return NULL; -} - -Str -process_form(struct parsed_tag *tag) -{ -    return process_form_int(tag, -1); -} - -Str -process_n_form(void) -{ -    if (form_sp >= 0) -	form_sp--; -    return NULL; -} - -static void -clear_ignore_p_flag(int cmd, struct readbuffer *obuf) -{ -    static int clear_flag_cmd[] = { -	HTML_HR, HTML_UNKNOWN -    }; -    int i; - -    for (i = 0; clear_flag_cmd[i] != HTML_UNKNOWN; i++) { -	if (cmd == clear_flag_cmd[i]) { -	    obuf->flag &= ~RB_IGNORE_P; -	    return; -	} -    } -} - -static void -set_alignment(struct readbuffer *obuf, struct parsed_tag *tag) -{ -    long flag = -1; -    int align; - -    if (parsedtag_get_value(tag, ATTR_ALIGN, &align)) { -	switch (align) { -	case ALIGN_CENTER: -	    flag = RB_CENTER; -	    break; -	case ALIGN_RIGHT: -	    flag = RB_RIGHT; -	    break; -	case ALIGN_LEFT: -	    flag = RB_LEFT; -	} -    } -    RB_SAVE_FLAG(obuf); -    if (flag != -1) { -	RB_SET_ALIGN(obuf, flag); -    } -} - -#ifdef ID_EXT -static void -process_idattr(struct readbuffer *obuf, int cmd, struct parsed_tag *tag) -{ -    char *id = NULL, *framename = NULL; -    Str idtag = NULL; - -    /*  -     * HTML_TABLE is handled by the other process. -     */ -    if (cmd == HTML_TABLE) -	return; - -    parsedtag_get_value(tag, ATTR_ID, &id); -    parsedtag_get_value(tag, ATTR_FRAMENAME, &framename); -    if (id == NULL) -	return; -    if (framename) -	idtag = Sprintf("<_id id=\"%s\" framename=\"%s\">", -			html_quote(id), html_quote(framename)); -    else -	idtag = Sprintf("<_id id=\"%s\">", html_quote(id)); -    push_tag(obuf, idtag->ptr, HTML_NOP); -} -#endif				/* ID_EXT */ - -#define CLOSE_P if (obuf->flag & RB_P) { \ -      flushline(h_env, obuf, envs[h_env->envc].indent,0,h_env->limit);\ -      RB_RESTORE_FLAG(obuf);\ -      obuf->flag &= ~RB_P;\ -    } - -#define CLOSE_A \ -    CLOSE_P; \ -    close_anchor(h_env, obuf); - -#define CLOSE_DT \ -    if (obuf->flag & RB_IN_DT) { \ -      obuf->flag &= ~RB_IN_DT; \ -      HTMLlineproc1("</b>", h_env); \ -    } - -#define PUSH_ENV(cmd) \ -    if (++h_env->envc_real < h_env->nenv) { \ -      ++h_env->envc; \ -      envs[h_env->envc].env = cmd; \ -      envs[h_env->envc].count = 0; \ -      if (h_env->envc <= MAX_INDENT_LEVEL) \ -        envs[h_env->envc].indent = envs[h_env->envc - 1].indent + INDENT_INCR; \ -      else \ -        envs[h_env->envc].indent = envs[h_env->envc - 1].indent; \ -    } - -#define POP_ENV \ -    if (h_env->envc_real-- < h_env->nenv) \ -      h_env->envc--; - -static int -ul_type(struct parsed_tag *tag, int default_type) -{ -    char *p; -    if (parsedtag_get_value(tag, ATTR_TYPE, &p)) { -	if (!strcasecmp(p, "disc")) -	    return (int)'d'; -	else if (!strcasecmp(p, "circle")) -	    return (int)'c'; -	else if (!strcasecmp(p, "square")) -	    return (int)'s'; -    } -    return default_type; -} - -int -getMetaRefreshParam(char *q, Str *refresh_uri) -{ -    int refresh_interval; -    char *r; -    Str s_tmp = NULL; - -    if (q == NULL || refresh_uri == NULL) -	return 0; - -    refresh_interval = atoi(q); -    if (refresh_interval < 0) -	return 0; - -    while (*q) { -	if (!strncasecmp(q, "url=", 4)) { -	    q += 4; -	    if (*q == '\"')	/* " */ -		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] == '\"') {	/* "  -								 */ -		s_tmp->length--; -		s_tmp->ptr[s_tmp->length] = '\0'; -	    } -	    q = r; -	} -	while (*q && *q != ';') -	    q++; -	if (*q == ';') -	    q++; -	while (*q && *q == ' ') -	    q++; -    } -    *refresh_uri = s_tmp; -    return refresh_interval; -} - -int -HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) -{ -    char *p, *q, *r; -    int i, w, x, y, z, count, width; -    struct readbuffer *obuf = h_env->obuf; -    struct environment *envs = h_env->envs; -    Str tmp; -    int hseq; -    int cmd; -#ifdef ID_EXT -    char *id = NULL; -#endif				/* ID_EXT */ - -    cmd = tag->tagid; - -    if (obuf->flag & RB_PRE) { -	switch (cmd) { -	case HTML_NOBR: -	case HTML_N_NOBR: -	case HTML_PRE_INT: -	case HTML_N_PRE_INT: -	    return 1; -	} -    } - -    switch (cmd) { -    case HTML_B: -	obuf->in_bold++; -	if (obuf->in_bold > 1) -	    return 1; -	return 0; -    case HTML_N_B: -	if (obuf->in_bold == 1 && close_effect0(obuf, HTML_B)) -	    obuf->in_bold = 0; -	if (obuf->in_bold > 0) { -	    obuf->in_bold--; -	    if (obuf->in_bold == 0) -		return 0; -	} -	return 1; -    case HTML_U: -	obuf->in_under++; -	if (obuf->in_under > 1) -	    return 1; -	return 0; -    case HTML_N_U: -	if (obuf->in_under == 1 && close_effect0(obuf, HTML_U)) -	    obuf->in_under = 0; -	if (obuf->in_under > 0) { -	    obuf->in_under--; -	    if (obuf->in_under == 0) -		return 0; -	} -	return 1; -    case HTML_EM: -	HTMLlineproc1("<b>", h_env); -	return 1; -    case HTML_N_EM: -	HTMLlineproc1("</b>", h_env); -	return 1; -    case HTML_Q: -	HTMLlineproc1("`", h_env); -	return 1; -    case HTML_N_Q: -	HTMLlineproc1("'", h_env); -	return 1; -    case HTML_P: -    case HTML_N_P: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 1, h_env->limit); -	    do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			 h_env->limit); -	} -	obuf->flag |= RB_IGNORE_P; -	if (cmd == HTML_P) { -	    set_alignment(obuf, tag); -	    obuf->flag |= RB_P; -	} -	return 1; -    case HTML_BR: -	flushline(h_env, obuf, envs[h_env->envc].indent, 1, h_env->limit); -	h_env->blank_lines = 0; -	return 1; -    case HTML_H: -	if (!(obuf->flag & (RB_PREMODE | RB_IGNORE_P))) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	    do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			 h_env->limit); -	} -	HTMLlineproc1("<b>", h_env); -	set_alignment(obuf, tag); -	return 1; -    case HTML_N_H: -	HTMLlineproc1("</b>", h_env); -	if (!(obuf->flag & RB_PREMODE)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	} -	do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	RB_RESTORE_FLAG(obuf); -	close_anchor(h_env, obuf); -	obuf->flag |= RB_IGNORE_P; -	return 1; -    case HTML_UL: -    case HTML_OL: -    case HTML_BLQ: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	    if (!(obuf->flag & RB_PREMODE) && -		(h_env->envc == 0 || cmd == HTML_BLQ)) -		do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			     h_env->limit); -	} -	PUSH_ENV(cmd); -	if (cmd == HTML_UL || cmd == HTML_OL) { -	    if (parsedtag_get_value(tag, ATTR_START, &count)) { -		envs[h_env->envc].count = count - 1; -	    } -	} -	if (cmd == HTML_OL) { -	    envs[h_env->envc].type = '1'; -	    if (parsedtag_get_value(tag, ATTR_TYPE, &p)) { -		envs[h_env->envc].type = (int)*p; -	    } -	} -	if (cmd == HTML_UL) -	    envs[h_env->envc].type = ul_type(tag, 0); -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	return 1; -    case HTML_N_UL: -    case HTML_N_OL: -    case HTML_N_DL: -    case HTML_N_BLQ: -	CLOSE_DT; -	CLOSE_A; -	if (h_env->envc > 0) { -	    flushline(h_env, obuf, envs[h_env->envc - 1].indent, 0, -		      h_env->limit); -	    POP_ENV; -	    if (!(obuf->flag & RB_PREMODE) && -		(h_env->envc == 0 || cmd == HTML_N_DL || cmd == HTML_N_BLQ)) { -		do_blankline(h_env, obuf, -			     envs[h_env->envc].indent, -			     INDENT_INCR, h_env->limit); -		obuf->flag |= RB_IGNORE_P; -	    } -	} -	close_anchor(h_env, obuf); -	return 1; -    case HTML_DL: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	    if (!(obuf->flag & RB_PREMODE)) -		do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			     h_env->limit); -	} -	PUSH_ENV(cmd); -	if (parsedtag_exists(tag, ATTR_COMPACT)) -	    envs[h_env->envc].env = HTML_DL_COMPACT; -	obuf->flag |= RB_IGNORE_P; -	return 1; -    case HTML_LI: -	CLOSE_A; -	CLOSE_DT; -	if (h_env->envc > 0) { -	    Str num; -	    flushline(h_env, obuf, -		      envs[h_env->envc - 1].indent, 0, h_env->limit); -	    envs[h_env->envc].count++; -	    if (parsedtag_get_value(tag, ATTR_VALUE, &p)) { -		count = atoi(p); -		if (count > 0) -		    envs[h_env->envc].count = count; -		else -		    envs[h_env->envc].count = 0; -	    } -	    switch (envs[h_env->envc].env) { -	    case HTML_UL: -		envs[h_env->envc].type = ul_type(tag, envs[h_env->envc].type); -		for (i = 0; i < INDENT_INCR - 3; i++) -		    push_charp(obuf, 1, NBSP, PC_ASCII); -		tmp = Strnew(); -		switch (envs[h_env->envc].type) { -		case 'd': -		    push_symbol(tmp, UL_SYMBOL_DISC, symbol_width, 1); -		    break; -		case 'c': -		    push_symbol(tmp, UL_SYMBOL_CIRCLE, symbol_width, 1); -		    break; -		case 's': -		    push_symbol(tmp, UL_SYMBOL_SQUARE, symbol_width, 1); -		    break; -		default: -		    push_symbol(tmp, -				UL_SYMBOL((h_env->envc_real - -					   1) % MAX_UL_LEVEL), symbol_width, -				1); -		    break; -		} -		if (symbol_width == 1) -		    push_charp(obuf, 1, NBSP, PC_ASCII); -		push_str(obuf, symbol_width, tmp, PC_ASCII); -		push_charp(obuf, 1, NBSP, PC_ASCII); -		set_space_to_prevchar(obuf->prevchar); -		break; -	    case HTML_OL: -		if (parsedtag_get_value(tag, ATTR_TYPE, &p)) -		    envs[h_env->envc].type = (int)*p; -		switch ((envs[h_env->envc].count > 0)? envs[h_env->envc].type: '1') { -		case 'i': -		    num = romanNumeral(envs[h_env->envc].count); -		    break; -		case 'I': -		    num = romanNumeral(envs[h_env->envc].count); -		    Strupper(num); -		    break; -		case 'a': -		    num = romanAlphabet(envs[h_env->envc].count); -		    break; -		case 'A': -		    num = romanAlphabet(envs[h_env->envc].count); -		    Strupper(num); -		    break; -		default: -		    num = Sprintf("%d", envs[h_env->envc].count); -		    break; -		} -		if (INDENT_INCR >= 4) -		    Strcat_charp(num, ". "); -		else -		    Strcat_char(num, '.'); -		push_spaces(obuf, 1, INDENT_INCR - num->length); -		push_str(obuf, num->length, num, PC_ASCII); -		if (INDENT_INCR >= 4) -		    set_space_to_prevchar(obuf->prevchar); -		break; -	    default: -		push_spaces(obuf, 1, INDENT_INCR); -		break; -	    } -	} -	else { -	    flushline(h_env, obuf, 0, 0, h_env->limit); -	} -	obuf->flag |= RB_IGNORE_P; -	return 1; -    case HTML_DT: -	CLOSE_A; -	if (h_env->envc == 0 || -	    (h_env->envc_real < h_env->nenv && -	     envs[h_env->envc].env != HTML_DL && -	     envs[h_env->envc].env != HTML_DL_COMPACT)) { -	    PUSH_ENV(HTML_DL); -	} -	if (h_env->envc > 0) { -	    flushline(h_env, obuf, -		      envs[h_env->envc - 1].indent, 0, h_env->limit); -	} -	if (!(obuf->flag & RB_IN_DT)) { -	    HTMLlineproc1("<b>", h_env); -	    obuf->flag |= RB_IN_DT; -	} -	obuf->flag |= RB_IGNORE_P; -	return 1; -    case HTML_DD: -	CLOSE_A; -	CLOSE_DT; -	if (envs[h_env->envc].env == HTML_DL_COMPACT) { -	    if (obuf->pos > envs[h_env->envc].indent) -		flushline(h_env, obuf, envs[h_env->envc].indent, 0, -			  h_env->limit); -	    else -		push_spaces(obuf, 1, envs[h_env->envc].indent - obuf->pos); -	} -	else -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	/* obuf->flag |= RB_IGNORE_P; */ -	return 1; -    case HTML_TITLE: -	close_anchor(h_env, obuf); -	process_title(tag); -	obuf->flag |= RB_TITLE; -	obuf->end_tag = HTML_N_TITLE; -	return 1; -    case HTML_N_TITLE: -	if (!(obuf->flag & RB_TITLE)) -	    return 1; -	obuf->flag &= ~RB_TITLE; -	obuf->end_tag = 0; -	tmp = process_n_title(tag); -	if (tmp) -	    HTMLlineproc1(tmp->ptr, h_env); -	return 1; -    case HTML_TITLE_ALT: -	if (parsedtag_get_value(tag, ATTR_TITLE, &p)) -	    h_env->title = html_unquote(p); -	return 0; -    case HTML_FRAMESET: -	PUSH_ENV(cmd); -	push_charp(obuf, 9, "--FRAME--", PC_ASCII); -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	return 0; -    case HTML_N_FRAMESET: -	if (h_env->envc > 0) { -	    POP_ENV; -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	} -	return 0; -    case HTML_NOFRAMES: -	CLOSE_A; -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	obuf->flag |= (RB_NOFRAMES | RB_IGNORE_P); -	/* istr = str; */ -	return 1; -    case HTML_N_NOFRAMES: -	CLOSE_A; -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	obuf->flag &= ~RB_NOFRAMES; -	return 1; -    case HTML_FRAME: -	q = r = NULL; -	parsedtag_get_value(tag, ATTR_SRC, &q); -	parsedtag_get_value(tag, ATTR_NAME, &r); -	if (q) { -	    q = html_quote(q); -	    push_tag(obuf, Sprintf("<a hseq=\"%d\" href=\"%s\">", -				   cur_hseq++, q)->ptr, HTML_A); -	    if (r) -		q = html_quote(r); -	    push_charp(obuf, get_strwidth(q), q, PC_ASCII); -	    push_tag(obuf, "</a>", HTML_N_A); -	} -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	return 0; -    case HTML_HR: -	close_anchor(h_env, obuf); -	tmp = process_hr(tag, h_env->limit, envs[h_env->envc].indent); -	HTMLlineproc1(tmp->ptr, h_env); -	set_space_to_prevchar(obuf->prevchar); -	return 1; -    case HTML_PRE: -	x = parsedtag_exists(tag, ATTR_FOR_TABLE); -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	    if (!x) -		do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			     h_env->limit); -	} -	else -	    fillline(obuf, envs[h_env->envc].indent); -	obuf->flag |= (RB_PRE | RB_IGNORE_P); -	/* istr = str; */ -	return 1; -    case HTML_N_PRE: -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	if (!(obuf->flag & RB_IGNORE_P)) { -	    do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			 h_env->limit); -	    obuf->flag |= RB_IGNORE_P; -	} -	obuf->flag &= ~RB_PRE; -	close_anchor(h_env, obuf); -	return 1; -    case HTML_PRE_INT: -	i = obuf->line->length; -	append_tags(obuf); -	if (!(obuf->flag & RB_SPECIAL)) { -	    set_breakpoint(obuf, obuf->line->length - i); -	} -	obuf->flag |= RB_PRE_INT; -	return 0; -    case HTML_N_PRE_INT: -	push_tag(obuf, "</pre_int>", HTML_N_PRE_INT); -	obuf->flag &= ~RB_PRE_INT; -	if (!(obuf->flag & RB_SPECIAL) && obuf->pos > obuf->bp.pos) { -	    set_prevchar(obuf->prevchar, "", 0); -	    obuf->prev_ctype = PC_CTRL; -	} -	return 1; -    case HTML_NOBR: -	obuf->flag |= RB_NOBR; -	obuf->nobr_level++; -	return 0; -    case HTML_N_NOBR: -	if (obuf->nobr_level > 0) -	    obuf->nobr_level--; -	if (obuf->nobr_level == 0) -	    obuf->flag &= ~RB_NOBR; -	return 0; -    case HTML_PRE_PLAIN: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	    do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			 h_env->limit); -	} -	obuf->flag |= (RB_PRE | RB_IGNORE_P); -	return 1; -    case HTML_N_PRE_PLAIN: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	    do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			 h_env->limit); -	    obuf->flag |= RB_IGNORE_P; -	} -	obuf->flag &= ~RB_PRE; -	return 1; -    case HTML_LISTING: -    case HTML_XMP: -    case HTML_PLAINTEXT: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	    do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			 h_env->limit); -	} -	obuf->flag |= (RB_PLAIN | RB_IGNORE_P); -	switch (cmd) { -	case HTML_LISTING: -	    obuf->end_tag = HTML_N_LISTING; -	    break; -	case HTML_XMP: -	    obuf->end_tag = HTML_N_XMP; -	    break; -	case HTML_PLAINTEXT: -	    obuf->end_tag = MAX_HTMLTAG; -	    break; -	} -	return 1; -    case HTML_N_LISTING: -    case HTML_N_XMP: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) { -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	    do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			 h_env->limit); -	    obuf->flag |= RB_IGNORE_P; -	} -	obuf->flag &= ~RB_PLAIN; -	obuf->end_tag = 0; -	return 1; -    case HTML_SCRIPT: -	obuf->flag |= RB_SCRIPT; -	obuf->end_tag = HTML_N_SCRIPT; -	return 1; -    case HTML_STYLE: -	obuf->flag |= RB_STYLE; -	obuf->end_tag = HTML_N_STYLE; -	return 1; -    case HTML_N_SCRIPT: -	obuf->flag &= ~RB_SCRIPT; -	obuf->end_tag = 0; -	return 1; -    case HTML_N_STYLE: -	obuf->flag &= ~RB_STYLE; -	obuf->end_tag = 0; -	return 1; -    case HTML_A: -	if (obuf->anchor.url) -	    close_anchor(h_env, obuf); - -	hseq = 0; - -	if (parsedtag_get_value(tag, ATTR_HREF, &p)) -	    obuf->anchor.url = Strnew_charp(p)->ptr; -	if (parsedtag_get_value(tag, ATTR_TARGET, &p)) -	    obuf->anchor.target = Strnew_charp(p)->ptr; -	if (parsedtag_get_value(tag, ATTR_REFERER, &p)) -	    obuf->anchor.referer = Strnew_charp(p)->ptr; -	if (parsedtag_get_value(tag, ATTR_TITLE, &p)) -	    obuf->anchor.title = Strnew_charp(p)->ptr; -	if (parsedtag_get_value(tag, ATTR_ACCESSKEY, &p)) -	    obuf->anchor.accesskey = (unsigned char)*p; -	if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) -	    obuf->anchor.hseq = hseq; - -	if (hseq == 0 && obuf->anchor.url) { -	    obuf->anchor.hseq = cur_hseq; -	    tmp = process_anchor(tag, h_env->tagbuf->ptr); -	    push_tag(obuf, tmp->ptr, HTML_A); -	    return 1; -	} -	return 0; -    case HTML_N_A: -	close_anchor(h_env, obuf); -	return 1; -    case HTML_IMG: -	tmp = process_img(tag, h_env->limit); -	HTMLlineproc1(tmp->ptr, h_env); -	return 1; -    case HTML_IMG_ALT: -	if (parsedtag_get_value(tag, ATTR_SRC, &p)) -	    obuf->img_alt = Strnew_charp(p); -#ifdef USE_IMAGE -	i = 0; -	if (parsedtag_get_value(tag, ATTR_TOP_MARGIN, &i)) { -	    if (i > obuf->top_margin) -		obuf->top_margin = i; -	} -	i = 0; -	if (parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &i)) { -	    if (i > obuf->bottom_margin) -		obuf->bottom_margin = i; -	} -#endif -	return 0; -    case HTML_N_IMG_ALT: -	if (obuf->img_alt) { -	    if (!close_effect0(obuf, HTML_IMG_ALT)) -		push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT); -	    obuf->img_alt = NULL; -	} -	return 1; -    case HTML_INPUT_ALT: -	i = 0; -	if (parsedtag_get_value(tag, ATTR_TOP_MARGIN, &i)) { -	    if (i > obuf->top_margin) -		obuf->top_margin = i; -	} -	i = 0; -	if (parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &i)) { -	    if (i > obuf->bottom_margin) -		obuf->bottom_margin = i; -	} -	return 0; -    case HTML_TABLE: -	close_anchor(h_env, obuf); -	obuf->table_level++; -	if (obuf->table_level >= MAX_TABLE) -	    break; -	w = BORDER_NONE; -	/* x: cellspacing, y: cellpadding */ -	x = 2; -	y = 1; -	z = 0; -	width = 0; -	if (parsedtag_exists(tag, ATTR_BORDER)) { -	    if (parsedtag_get_value(tag, ATTR_BORDER, &w)) { -		if (w > 2) -		    w = BORDER_THICK; -		else if (w < 0) {	/* weird */ -		    w = BORDER_THIN; -		} -	    } -	    else -		w = BORDER_THIN; -	} -	if (parsedtag_get_value(tag, ATTR_WIDTH, &i)) { -	    if (obuf->table_level == 0) -		width = REAL_WIDTH(i, h_env->limit - envs[h_env->envc].indent); -	    else -		width = RELATIVE_WIDTH(i); -	} -	if (parsedtag_exists(tag, ATTR_HBORDER)) -	    w = BORDER_NOWIN; -	parsedtag_get_value(tag, ATTR_CELLSPACING, &x); -	parsedtag_get_value(tag, ATTR_CELLPADDING, &y); -	parsedtag_get_value(tag, ATTR_VSPACE, &z); -#ifdef ID_EXT -	parsedtag_get_value(tag, ATTR_ID, &id); -#endif				/* ID_EXT */ -	tables[obuf->table_level] = begin_table(w, x, y, z); -#ifdef ID_EXT -	if (id != NULL) -	    tables[obuf->table_level]->id = Strnew_charp(id); -#endif				/* ID_EXT */ -	table_mode[obuf->table_level].pre_mode = 0; -	table_mode[obuf->table_level].indent_level = 0; -	table_mode[obuf->table_level].nobr_level = 0; -	table_mode[obuf->table_level].caption = 0; -	table_mode[obuf->table_level].end_tag = 0;	/* HTML_UNKNOWN */ -#ifndef TABLE_EXPAND -	tables[obuf->table_level]->total_width = width; -#else -	tables[obuf->table_level]->real_width = width; -	tables[obuf->table_level]->total_width = 0; -#endif -	return 1; -    case HTML_N_TABLE: -	/* should be processed in HTMLlineproc() */ -	return 1; -    case HTML_CENTER: -	CLOSE_A; -	if (!(obuf->flag & (RB_PREMODE | RB_IGNORE_P))) -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	RB_SAVE_FLAG(obuf); -	RB_SET_ALIGN(obuf, RB_CENTER); -	return 1; -    case HTML_N_CENTER: -	CLOSE_A; -	if (!(obuf->flag & RB_PREMODE)) -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	RB_RESTORE_FLAG(obuf); -	return 1; -    case HTML_DIV: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	set_alignment(obuf, tag); -	return 1; -    case HTML_N_DIV: -	CLOSE_A; -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	RB_RESTORE_FLAG(obuf); -	return 1; -    case HTML_DIV_INT: -	CLOSE_P; -	if (!(obuf->flag & RB_IGNORE_P)) -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	set_alignment(obuf, tag); -	return 1; -    case HTML_N_DIV_INT: -	CLOSE_P; -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	RB_RESTORE_FLAG(obuf); -	return 1; -    case HTML_FORM: -	CLOSE_A; -	if (!(obuf->flag & RB_IGNORE_P)) -	    flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	tmp = process_form(tag); -	if (tmp) -	    HTMLlineproc1(tmp->ptr, h_env); -	return 1; -    case HTML_N_FORM: -	CLOSE_A; -	flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); -	obuf->flag |= RB_IGNORE_P; -	process_n_form(); -	return 1; -    case HTML_INPUT: -	close_anchor(h_env, obuf); -	tmp = process_input(tag); -	if (tmp) -	    HTMLlineproc1(tmp->ptr, h_env); -	return 1; -    case HTML_SELECT: -	close_anchor(h_env, obuf); -	tmp = process_select(tag); -	if (tmp) -	    HTMLlineproc1(tmp->ptr, h_env); -	obuf->flag |= RB_INSELECT; -	obuf->end_tag = HTML_N_SELECT; -	return 1; -    case HTML_N_SELECT: -	obuf->flag &= ~RB_INSELECT; -	obuf->end_tag = 0; -	tmp = process_n_select(); -	if (tmp) -	    HTMLlineproc1(tmp->ptr, h_env); -	return 1; -    case HTML_OPTION: -	/* nothing */ -	return 1; -    case HTML_TEXTAREA: -	close_anchor(h_env, obuf); -	tmp = process_textarea(tag, h_env->limit); -	if (tmp) -	    HTMLlineproc1(tmp->ptr, h_env); -	obuf->flag |= RB_INTXTA; -	obuf->end_tag = HTML_N_TEXTAREA; -	return 1; -    case HTML_N_TEXTAREA: -	obuf->flag &= ~RB_INTXTA; -	obuf->end_tag = 0; -	tmp = process_n_textarea(); -	if (tmp) -	    HTMLlineproc1(tmp->ptr, h_env); -	return 1; -    case HTML_ISINDEX: -	p = ""; -	q = "!CURRENT_URL!"; -	parsedtag_get_value(tag, ATTR_PROMPT, &p); -	parsedtag_get_value(tag, ATTR_ACTION, &q); -	tmp = Strnew_m_charp("<form method=get action=\"", -			     html_quote(q), -			     "\">", -			     html_quote(p), -			     "<input type=text name=\"\" accept></form>", -			     NULL); -	HTMLlineproc1(tmp->ptr, h_env); -	return 1; -    case HTML_META: -	p = q = NULL; -	parsedtag_get_value(tag, ATTR_HTTP_EQUIV, &p); -	parsedtag_get_value(tag, ATTR_CONTENT, &q); -#ifdef USE_M17N -	if (p && q && !strcasecmp(p, "Content-Type") && -	    (q = strcasestr(q, "charset")) != NULL) { -	    q += 7; -	    SKIP_BLANKS(q); -	    if (*q == '=') { -		q++; -		SKIP_BLANKS(q); -		meta_charset = wc_guess_charset(q, 0); -	    } -	} -	else -#endif -	if (p && q && !strcasecmp(p, "refresh")) { -	    int refresh_interval; -	    tmp = NULL; -	    refresh_interval = getMetaRefreshParam(q, &tmp); -	    if (tmp) { -		q = html_quote(tmp->ptr); -		tmp = Sprintf("Refresh (%d sec) <a href=\"%s\">%s</a>", -			      refresh_interval, q, q); -	    } -	    else if (refresh_interval > 0) -		tmp = Sprintf("Refresh (%d sec)", refresh_interval); -	    if (tmp) { -		HTMLlineproc1(tmp->ptr, h_env); -		do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, -			     h_env->limit); -		if (!is_redisplay && -		    !((obuf->flag & RB_NOFRAMES) && RenderFrame)) { -		    tag->need_reconstruct = TRUE; -		    return 0; -		} -	    } -	} -	return 1; -    case HTML_BASE: -#ifdef USE_IMAGE -	p = NULL; -	if (parsedtag_get_value(tag, ATTR_HREF, &p)) { -	    if (!cur_baseURL) -		cur_baseURL = New(ParsedURL); -	    parseURL(p, cur_baseURL, NULL); -	} -#endif -    case HTML_MAP: -    case HTML_N_MAP: -    case HTML_AREA: -	return 0; -    case HTML_DEL: -	if (displayInsDel) -	    HTMLlineproc1("<U>[DEL:</U>", h_env); -	else -	    obuf->flag |= RB_DEL; -	return 1; -    case HTML_N_DEL: -	if (displayInsDel) -	    HTMLlineproc1("<U>:DEL]</U>", h_env); -	else -	    obuf->flag &= ~RB_DEL; -	return 1; -    case HTML_S: -	if (displayInsDel) -	    HTMLlineproc1("<U>[S:</U>", h_env); -	else -	    obuf->flag |= RB_S; -	return 1; -    case HTML_N_S: -	if (displayInsDel) -	    HTMLlineproc1("<U>:S]</U>", h_env); -	else -	    obuf->flag &= ~RB_S; -	return 1; -    case HTML_INS: -	if (displayInsDel) -	    HTMLlineproc1("<U>[INS:</U>", h_env); -	return 1; -    case HTML_N_INS: -	if (displayInsDel) -	    HTMLlineproc1("<U>:INS]</U>", h_env); -	return 1; -    case HTML_SUP: -	if (!(obuf->flag & (RB_DEL | RB_S))) -	    HTMLlineproc1("^", h_env); -	return 1; -    case HTML_N_SUP: -	return 1; -    case HTML_SUB: -	if (!(obuf->flag & (RB_DEL | RB_S))) -	    HTMLlineproc1("[", h_env); -	return 1; -    case HTML_N_SUB: -	if (!(obuf->flag & (RB_DEL | RB_S))) -	    HTMLlineproc1("]", h_env); -	return 1; -    case HTML_FONT: -    case HTML_N_FONT: -    case HTML_NOP: -	return 1; -    case HTML_BGSOUND: -	if (view_unseenobject) { -	    if (parsedtag_get_value(tag, ATTR_SRC, &p)) { -		Str s; -		q = html_quote(p); -		s = Sprintf("<A HREF=\"%s\">bgsound(%s)</A>", q, q); -		HTMLlineproc1(s->ptr, h_env); -	    } -	} -	return 1; -    case HTML_EMBED: -	if (view_unseenobject) { -	    if (parsedtag_get_value(tag, ATTR_SRC, &p)) { -		Str s; -		q = html_quote(p); -		s = Sprintf("<A HREF=\"%s\">embed(%s)</A>", q, q); -		HTMLlineproc1(s->ptr, h_env); -	    } -	} -	return 1; -    case HTML_APPLET: -	if (view_unseenobject) { -	    if (parsedtag_get_value(tag, ATTR_ARCHIVE, &p)) { -		Str s; -		q = html_quote(p); -		s = Sprintf("<A HREF=\"%s\">applet archive(%s)</A>", q, q); -		HTMLlineproc1(s->ptr, h_env); -	    } -	} -	return 1; -    case HTML_BODY: -	if (view_unseenobject) { -	    if (parsedtag_get_value(tag, ATTR_BACKGROUND, &p)) { -		Str s; -		q = html_quote(p); -		s = Sprintf("<IMG SRC=\"%s\" ALT=\"bg image(%s)\"><BR>", q, q); -		HTMLlineproc1(s->ptr, h_env); -	    } -	} -    case HTML_N_HEAD: -	if (obuf->flag & RB_TITLE) -	    HTMLlineproc1("</title>", h_env); -    case HTML_HEAD: -    case HTML_N_BODY: -	return 1; -    default: -	/* obuf->prevchar = '\0'; */ -	return 0; -    } -    /* not reached */ -    return 0; -} - -#define PPUSH(p,c) {outp[pos]=(p);outc[pos]=(c);pos++;} -#define PSIZE	\ -    if (out_size <= pos + 1) {	\ -	out_size = pos * 3 / 2;	\ -	outc = New_Reuse(char, outc, out_size);	\ -	outp = New_Reuse(Lineprop, outp, out_size);	\ -    } - -static TextLineListItem *_tl_lp2; - -static Str -textlist_feed() -{ -    TextLine *p; -    if (_tl_lp2 != NULL) { -	p = _tl_lp2->ptr; -	_tl_lp2 = _tl_lp2->next; -	return p->line; -    } -    return NULL; -} - -static void -HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) -{ -    static char *outc = NULL; -    static Lineprop *outp = NULL; -    static int out_size = 0; -    Anchor *a_href = NULL, *a_img = NULL, *a_form = NULL; -    char *p, *q, *r, *s, *t, *str; -    Lineprop mode, effect; -    int pos; -    int nlines; -#ifdef DEBUG -    FILE *debug = NULL; -#endif -    struct frameset *frameset_s[FRAMESTACK_SIZE]; -    int frameset_sp = -1; -    union frameset_element *idFrame = NULL; -    char *id = NULL; -    int hseq, form_id; -    Str line; -    char *endp; -    char symbol = '\0'; -    int internal = 0; -    Anchor **a_textarea = NULL; -#ifdef MENU_SELECT -    Anchor **a_select = NULL; -#endif - -    if (out_size == 0) { -	out_size = LINELEN; -	outc = NewAtom_N(char, out_size); -	outp = NewAtom_N(Lineprop, out_size); -    } - -    n_textarea = -1; -    if (!max_textarea) {	/* halfload */ -	max_textarea = MAX_TEXTAREA; -	textarea_str = New_N(Str, max_textarea); -	a_textarea = New_N(Anchor *, max_textarea); -    } -#ifdef MENU_SELECT -    n_select = -1; -    if (!max_select) {		/* halfload */ -	max_select = MAX_SELECT; -	select_option = New_N(FormSelectOption, max_select); -	a_select = New_N(Anchor *, max_select); -    } -#endif - -#ifdef DEBUG -    if (w3m_debug) -	debug = fopen("zzzerr", "a"); -#endif - -    effect = 0; -    nlines = 0; -    while ((line = feed()) != NULL) { -#ifdef DEBUG -	if (w3m_debug) { -	    Strfputs(line, debug); -	    fputc('\n', debug); -	} -#endif -	if (n_textarea >= 0 && *(line->ptr) != '<') {	/* halfload */ -	    Strcat(textarea_str[n_textarea], line); -	    continue; -	} -      proc_again: -	if (++nlines == llimit) -	    break; -	pos = 0; -#ifdef ENABLE_REMOVE_TRAILINGSPACES -	Strremovetrailingspaces(line); -#endif -	str = line->ptr; -	endp = str + line->length; -	while (str < endp) { -	    PSIZE; -	    mode = get_mctype(str); -	    if (effect & PC_SYMBOL && *str != '<') { -#ifdef USE_M17N -		char **buf = set_symbol(symbol_width0); -		int len; - -		p = buf[(int)symbol]; -		len = get_mclen(p); -		mode = get_mctype(p); -		PPUSH(mode | effect, *(p++)); -		if (--len) { -		    mode = (mode & ~PC_WCHAR1) | PC_WCHAR2; -		    while (len--) { -			PSIZE; -			PPUSH(mode | effect, *(p++)); -		    } -		} -#else -		PPUSH(PC_ASCII | effect, SYMBOL_BASE + symbol); -#endif -		str += symbol_width; -	    } -#ifdef USE_M17N -	    else if (mode == PC_CTRL || mode == PC_UNDEF) { -#else -	    else if (mode == PC_CTRL || IS_INTSPACE(*str)) { -#endif -		PPUSH(PC_ASCII | effect, ' '); -		str++; -	    } -#ifdef USE_M17N -	    else if (mode & PC_UNKNOWN) { -		PPUSH(PC_ASCII | effect, ' '); -		str += get_mclen(str); -	    } -#endif -	    else if (*str != '<' && *str != '&') { -#ifdef USE_M17N -		int len = get_mclen(str); -#endif -		PPUSH(mode | effect, *(str++)); -#ifdef USE_M17N -		if (--len) { -		    mode = (mode & ~PC_WCHAR1) | PC_WCHAR2; -		    while (len--) { -			PSIZE; -			PPUSH(mode | effect, *(str++)); -		    } -		} -#endif -	    } -	    else if (*str == '&') { -		/*  -		 * & escape processing -		 */ -		p = getescapecmd(&str); -		while (*p) { -		    PSIZE; -		    mode = get_mctype((unsigned char *)p); -#ifdef USE_M17N -		    if (mode == PC_CTRL || mode == PC_UNDEF) { -#else -		    if (mode == PC_CTRL || IS_INTSPACE(*str)) { -#endif -			PPUSH(PC_ASCII | effect, ' '); -			p++; -		    } -#ifdef USE_M17N -		    else if (mode & PC_UNKNOWN) { -			PPUSH(PC_ASCII | effect, ' '); -			p += get_mclen(p); -		    } -#endif -		    else { -#ifdef USE_M17N -			int len = get_mclen(p); -#endif -			PPUSH(mode | effect, *(p++)); -#ifdef USE_M17N -			if (--len) { -			    mode = (mode & ~PC_WCHAR1) | PC_WCHAR2; -			    while (len--) { -				PSIZE; -				PPUSH(mode | effect, *(p++)); -			    } -			} -#endif -		    } -		} -	    } -	    else { -		/* tag processing */ -		struct parsed_tag *tag; -		if (!(tag = parse_tag(&str, TRUE))) -		    continue; -		switch (tag->tagid) { -		case HTML_B: -		    effect |= PE_BOLD; -		    break; -		case HTML_N_B: -		    effect &= ~PE_BOLD; -		    break; -		case HTML_U: -		    effect |= PE_UNDER; -		    break; -		case HTML_N_U: -		    effect &= ~PE_UNDER; -		    break; -		case HTML_A: -		    if (renderFrameSet && -			parsedtag_get_value(tag, ATTR_FRAMENAME, &p)) { -			p = url_quote_conv(p, buf->document_charset); -			if (!idFrame || strcmp(idFrame->body->name, p)) { -			    idFrame = search_frame(renderFrameSet, p); -			    if (idFrame && idFrame->body->attr != F_BODY) -				idFrame = NULL; -			} -		    } -		    p = r = s = NULL; -		    q = buf->baseTarget; -		    t = ""; -		    hseq = 0; -		    id = NULL; -		    if (parsedtag_get_value(tag, ATTR_NAME, &id)) { -			id = url_quote_conv(id, buf->document_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); -		    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); -		    parsedtag_get_value(tag, ATTR_TITLE, &s); -		    parsedtag_get_value(tag, ATTR_ACCESSKEY, &t); -		    parsedtag_get_value(tag, ATTR_HSEQ, &hseq); -		    if (hseq > 0) -			buf->hmarklist = -			    putHmarker(buf->hmarklist, currentLn(buf), -				       pos, hseq - 1); -		    else if (hseq < 0) { -			int h = -hseq - 1; -			if (buf->hmarklist && -			    h < buf->hmarklist->nmark && -			    buf->hmarklist->marks[h].invalid) { -			    buf->hmarklist->marks[h].pos = pos; -			    buf->hmarklist->marks[h].line = currentLn(buf); -			    buf->hmarklist->marks[h].invalid = 0; -			    hseq = -hseq; -			} -		    } -		    if (id && idFrame) -			idFrame->body->nameList = -			    putAnchor(idFrame->body->nameList, id, NULL, -				      (Anchor **)NULL, NULL, NULL, '\0', -				      currentLn(buf), pos); -		    if (p) { -			effect |= PE_ANCHOR; -			a_href = registerHref(buf, p, q, r, s, -					      *t, currentLn(buf), pos); -			a_href->hseq = ((hseq > 0) ? hseq : -hseq) - 1; -			a_href->slave = (hseq > 0) ? FALSE : TRUE; -		    } -		    break; -		case HTML_N_A: -		    effect &= ~PE_ANCHOR; -		    if (a_href) { -			a_href->end.line = currentLn(buf); -			a_href->end.pos = pos; -			if (a_href->start.line == a_href->end.line && -			    a_href->start.pos == a_href->end.pos) { -			    if (buf->hmarklist && -				a_href->hseq < buf->hmarklist->nmark) -				buf->hmarklist->marks[a_href->hseq].invalid = 1; -			    a_href->hseq = -1; -			} -			a_href = NULL; -		    } -		    break; - -		case HTML_LINK: -		    addLink(buf, tag); -		    break; - -		case HTML_IMG_ALT: -		    if (parsedtag_get_value(tag, ATTR_SRC, &p)) { -#ifdef USE_IMAGE -			int w = -1, h = -1, iseq = 0, ismap = 0; -			int xoffset = 0, yoffset = 0, top = 0, bottom = 0; -			parsedtag_get_value(tag, ATTR_HSEQ, &iseq); -			parsedtag_get_value(tag, ATTR_WIDTH, &w); -			parsedtag_get_value(tag, ATTR_HEIGHT, &h); -			parsedtag_get_value(tag, ATTR_XOFFSET, &xoffset); -			parsedtag_get_value(tag, ATTR_YOFFSET, &yoffset); -			parsedtag_get_value(tag, ATTR_TOP_MARGIN, &top); -			parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &bottom); -			if (parsedtag_exists(tag, ATTR_ISMAP)) -			    ismap = 1; -			q = NULL; -			parsedtag_get_value(tag, ATTR_USEMAP, &q); -			if (iseq > 0) { -			    buf->imarklist = putHmarker(buf->imarklist, -							currentLn(buf), pos, -							iseq - 1); -			} -#endif -			s = NULL; -			parsedtag_get_value(tag, ATTR_TITLE, &s); -			p = url_quote_conv(remove_space(p), -					   buf->document_charset); -			a_img = registerImg(buf, p, s, currentLn(buf), pos); -#ifdef USE_IMAGE -			a_img->hseq = iseq; -			a_img->image = NULL; -			if (iseq > 0) { -			    ParsedURL u; -			    Image *image; - -			    parseURL2(a_img->url, &u, cur_baseURL); -			    a_img->image = image = New(Image); -			    image->url = parsedURL2Str(&u)->ptr; -			    if (!uncompressed_file_type(u.file, &image->ext)) -				image->ext = filename_extension(u.file, TRUE); -			    image->cache = NULL; -			    image->width = -				(w > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : w; -			    image->height = -				(h > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : h; -			    image->xoffset = xoffset; -			    image->yoffset = yoffset; -			    image->y = currentLn(buf) - top; -			    if (image->xoffset < 0 && pos == 0) -				image->xoffset = 0; -			    if (image->yoffset < 0 && image->y == 1) -				image->yoffset = 0; -			    image->rows = 1 + top + bottom; -			    image->map = q; -			    image->ismap = ismap; -			    image->touch = 0; -			    image->cache = getImage(image, cur_baseURL, -						    IMG_FLAG_SKIP); -			} -			else if (iseq < 0) { -			    BufferPoint *po = buf->imarklist->marks - iseq - 1; -			    Anchor *a = retrieveAnchor(buf->img, -						       po->line, po->pos); -			    if (a) { -				a_img->url = a->url; -				a_img->image = a->image; -			    } -			} -#endif -		    } -		    effect |= PE_IMAGE; -		    break; -		case HTML_N_IMG_ALT: -		    effect &= ~PE_IMAGE; -		    if (a_img) { -			a_img->end.line = currentLn(buf); -			a_img->end.pos = pos; -		    } -		    a_img = NULL; -		    break; -		case HTML_INPUT_ALT: -		    { -			FormList *form; -			int top = 0, bottom = 0; -			int textareanumber = -1; -#ifdef MENU_SELECT -			int selectnumber = -1; -#endif -			hseq = 0; -			form_id = -1; - -			parsedtag_get_value(tag, ATTR_HSEQ, &hseq); -			parsedtag_get_value(tag, ATTR_FID, &form_id); -			parsedtag_get_value(tag, ATTR_TOP_MARGIN, &top); -			parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &bottom); -			if (form_id < 0 || form_id > form_max || forms == NULL) -			    break;	/* outside of <form>..</form> */ -			form = forms[form_id]; -			if (hseq > 0) { -			    int hpos = pos; -			    if (*str == '[') -				hpos++; -			    buf->hmarklist = -				putHmarker(buf->hmarklist, currentLn(buf), -					   hpos, hseq - 1); -			} -			if (!form->target) -			    form->target = buf->baseTarget; -			if (a_textarea && -			    parsedtag_get_value(tag, ATTR_TEXTAREANUMBER, -						&textareanumber)) { -			    if (textareanumber >= max_textarea) { -				max_textarea = 2 * textareanumber; -				textarea_str = New_Reuse(Str, textarea_str, -							 max_textarea); -				a_textarea = New_Reuse(Anchor *, a_textarea, -						       max_textarea); -			    } -			} -#ifdef MENU_SELECT -			if (a_select && -			    parsedtag_get_value(tag, ATTR_SELECTNUMBER, -						&selectnumber)) { -			    if (selectnumber >= max_select) { -				max_select = 2 * selectnumber; -				select_option = New_Reuse(FormSelectOption, -							  select_option, -							  max_select); -				a_select = New_Reuse(Anchor *, a_select, -						     max_select); -			    } -			} -#endif -			a_form = -			    registerForm(buf, form, tag, currentLn(buf), pos); -			if (a_textarea && textareanumber >= 0) -			    a_textarea[textareanumber] = a_form; -#ifdef MENU_SELECT -			if (a_select && selectnumber >= 0) -			    a_select[selectnumber] = a_form; -#endif -			if (a_form) { -			    a_form->hseq = hseq - 1; -			    a_form->y = currentLn(buf) - top; -			    a_form->rows = 1 + top + bottom; -			    if (!parsedtag_exists(tag, ATTR_NO_EFFECT)) -				effect |= PE_FORM; -			    break; -			} -		    } -		case HTML_N_INPUT_ALT: -		    effect &= ~PE_FORM; -		    if (a_form) { -			a_form->end.line = currentLn(buf); -			a_form->end.pos = pos; -			if (a_form->start.line == a_form->end.line && -			    a_form->start.pos == a_form->end.pos) -			    a_form->hseq = -1; -		    } -		    a_form = NULL; -		    break; -		case HTML_MAP: -		    if (parsedtag_get_value(tag, ATTR_NAME, &p)) { -			MapList *m = New(MapList); -			m->name = Strnew_charp(p); -			m->area = newGeneralList(); -			m->next = buf->maplist; -			buf->maplist = m; -		    } -		    break; -		case HTML_N_MAP: -		    /* nothing to do */ -		    break; -		case HTML_AREA: -		    if (buf->maplist == NULL)	/* outside of <map>..</map> */ -			break; -		    if (parsedtag_get_value(tag, ATTR_HREF, &p)) { -			MapArea *a; -			p = url_quote_conv(remove_space(p), -					   buf->document_charset); -			t = NULL; -			parsedtag_get_value(tag, ATTR_TARGET, &t); -			q = ""; -			parsedtag_get_value(tag, ATTR_ALT, &q); -			r = NULL; -			s = NULL; -#ifdef USE_IMAGE -			parsedtag_get_value(tag, ATTR_SHAPE, &r); -			parsedtag_get_value(tag, ATTR_COORDS, &s); -#endif -			a = newMapArea(p, t, q, r, s); -			pushValue(buf->maplist->area, (void *)a); -		    } -		    break; -		case HTML_FRAMESET: -		    frameset_sp++; -		    if (frameset_sp >= FRAMESTACK_SIZE) -			break; -		    frameset_s[frameset_sp] = newFrameSet(tag); -		    if (frameset_s[frameset_sp] == NULL) -			break; -		    if (frameset_sp == 0) { -			if (buf->frameset == NULL) { -			    buf->frameset = frameset_s[frameset_sp]; -			} -			else -			    pushFrameTree(&(buf->frameQ), -					  frameset_s[frameset_sp], NULL); -		    } -		    else -			addFrameSetElement(frameset_s[frameset_sp - 1], -					   *(union frameset_element *) -					   &frameset_s[frameset_sp]); -		    break; -		case HTML_N_FRAMESET: -		    if (frameset_sp >= 0) -			frameset_sp--; -		    break; -		case HTML_FRAME: -		    if (frameset_sp >= 0 && frameset_sp < FRAMESTACK_SIZE) { -			union frameset_element element; - -			element.body = newFrame(tag, buf); -			addFrameSetElement(frameset_s[frameset_sp], element); -		    } -		    break; -		case HTML_BASE: -		    if (parsedtag_get_value(tag, ATTR_HREF, &p)) { -			p = url_quote_conv(remove_space(p), -					   buf->document_charset); -			if (!buf->baseURL) -			    buf->baseURL = New(ParsedURL); -			parseURL(p, buf->baseURL, NULL); -		    } -		    if (parsedtag_get_value(tag, ATTR_TARGET, &p)) -			buf->baseTarget = -			    url_quote_conv(p, buf->document_charset); -		    break; -		case HTML_META: -		    p = q = NULL; -		    parsedtag_get_value(tag, ATTR_HTTP_EQUIV, &p); -		    parsedtag_get_value(tag, ATTR_CONTENT, &q); -		    if (p && q && !strcasecmp(p, "refresh") && MetaRefresh) { -			Str tmp = NULL; -			int refresh_interval = getMetaRefreshParam(q, &tmp); -#ifdef USE_ALARM -			if (tmp) { -			    p = url_quote_conv(remove_space(tmp->ptr), -					       buf->document_charset); -			    buf->event = setAlarmEvent(buf->event, -						       refresh_interval, -						       AL_IMPLICIT_ONCE, -						       FUNCNAME_gorURL, p); -			} -			else if (refresh_interval > 0) -			    buf->event = setAlarmEvent(buf->event, -						       refresh_interval, -						       AL_IMPLICIT, -						       FUNCNAME_reload, NULL); -#else -			if (tmp && refresh_interval == 0) { -			    p = url_quote_conv(remove_space(tmp->ptr), -					       buf->document_charset); -			    pushEvent(FUNCNAME_gorURL, p); -			} -#endif -		    } -		    break; -		case HTML_INTERNAL: -		    internal = HTML_INTERNAL; -		    break; -		case HTML_N_INTERNAL: -		    internal = HTML_N_INTERNAL; -		    break; -		case HTML_FORM_INT: -		    if (parsedtag_get_value(tag, ATTR_FID, &form_id)) -			process_form_int(tag, form_id); -		    break; -		case HTML_TEXTAREA_INT: -		    if (parsedtag_get_value(tag, ATTR_TEXTAREANUMBER, -					    &n_textarea) -			&& n_textarea < max_textarea) { -			textarea_str[n_textarea] = Strnew(); -		    } -		    else -			n_textarea = -1; -		    break; -		case HTML_N_TEXTAREA_INT: -		    if (n_textarea >= 0) { -			FormItemList *item = -			    (FormItemList *)a_textarea[n_textarea]->url; -			item->init_value = item->value = -			    textarea_str[n_textarea]; -		    } -		    break; -#ifdef MENU_SELECT -		case HTML_SELECT_INT: -		    if (parsedtag_get_value(tag, ATTR_SELECTNUMBER, &n_select) -			&& n_select < max_select) { -			select_option[n_select].first = NULL; -			select_option[n_select].last = NULL; -		    } -		    else -			n_select = -1; -		    break; -		case HTML_N_SELECT_INT: -		    if (n_select >= 0) { -			FormItemList *item = -			    (FormItemList *)a_select[n_select]->url; -			item->select_option = select_option[n_select].first; -			chooseSelectOption(item, item->select_option); -			item->init_selected = item->selected; -			item->init_value = item->value; -			item->init_label = item->label; -		    } -		    break; -		case HTML_OPTION_INT: -		    if (n_select >= 0) { -			int selected; -			q = ""; -			parsedtag_get_value(tag, ATTR_LABEL, &q); -			p = q; -			parsedtag_get_value(tag, ATTR_VALUE, &p); -			selected = parsedtag_exists(tag, ATTR_SELECTED); -			addSelectOption(&select_option[n_select], -					Strnew_charp(p), Strnew_charp(q), -					selected); -		    } -		    break; -#endif -		case HTML_TITLE_ALT: -		    if (parsedtag_get_value(tag, ATTR_TITLE, &p)) -			buf->buffername = html_unquote(p); -		    break; -		case HTML_SYMBOL: -		    effect |= PC_SYMBOL; -		    if (parsedtag_get_value(tag, ATTR_TYPE, &p)) -			symbol = (char)atoi(p); -		    break; -		case HTML_N_SYMBOL: -		    effect &= ~PC_SYMBOL; -		    break; -		} -#ifdef	ID_EXT -		id = NULL; -		if (parsedtag_get_value(tag, ATTR_ID, &id)) { -		    id = url_quote_conv(id, buf->document_charset); -		    registerName(buf, id, currentLn(buf), pos); -		} -		if (renderFrameSet && -		    parsedtag_get_value(tag, ATTR_FRAMENAME, &p)) { -		    p = url_quote_conv(p, buf->document_charset); -		    if (!idFrame || strcmp(idFrame->body->name, p)) { -			idFrame = search_frame(renderFrameSet, p); -			if (idFrame && idFrame->body->attr != F_BODY) -			    idFrame = NULL; -		    } -		} -		if (id && idFrame) -		    idFrame->body->nameList = -			putAnchor(idFrame->body->nameList, id, NULL, -				  (Anchor **)NULL, NULL, NULL, '\0', -				  currentLn(buf), pos); -#endif				/* ID_EXT */ -	    } -	} -	/* end of processing for one line */ -	if (!internal) -	    addnewline(buf, outc, outp, NULL, pos, -1, nlines); -	if (internal == HTML_N_INTERNAL) -	    internal = 0; -	if (str != endp) { -	    line = Strsubstr(line, str - line->ptr, endp - str); -	    goto proc_again; -	} -    } -#ifdef DEBUG -    if (w3m_debug) -	fclose(debug); -#endif -    for (form_id = 1; form_id <= form_max; form_id++) -	forms[form_id]->next = forms[form_id - 1]; -    buf->formlist = (form_max >= 0) ? forms[form_max] : NULL; -    if (n_textarea) -	addMultirowsForm(buf, buf->formitem); -#ifdef USE_IMAGE -    addMultirowsImg(buf, buf->img); -#endif -} - -static void -addLink(Buffer *buf, struct parsed_tag *tag) -{ -    char *href = NULL, *title = NULL, *ctype = NULL, *rel = NULL, *rev = NULL; -    char type = LINK_TYPE_NONE; -    LinkList *l; - -    parsedtag_get_value(tag, ATTR_HREF, &href); -    if (href) -	href = url_quote_conv(remove_space(href), buf->document_charset); -    parsedtag_get_value(tag, ATTR_TITLE, &title); -    parsedtag_get_value(tag, ATTR_TYPE, &ctype); -    parsedtag_get_value(tag, ATTR_REL, &rel); -    if (rel != NULL) { -	/* forward link type */ -	type = LINK_TYPE_REL; -	if (title == NULL) -	    title = rel; -    } -    parsedtag_get_value(tag, ATTR_REV, &rev); -    if (rev != NULL) { -	/* reverse link type */ -	type = LINK_TYPE_REV; -	if (title == NULL) -	    title = rev; -    } - -    l = New(LinkList); -    l->url = href; -    l->title = title; -    l->ctype = ctype; -    l->type = type; -    l->next = NULL; -    if (buf->linklist) { -	LinkList *i; -	for (i = buf->linklist; i->next; i = i->next) ; -	i->next = l; -    } -    else -	buf->linklist = l; -} - -void -HTMLlineproc2(Buffer *buf, TextLineList *tl) -{ -    _tl_lp2 = tl->first; -    HTMLlineproc2body(buf, textlist_feed, -1); -} - -static InputStream _file_lp2; - -static Str -file_feed() -{ -    Str s; -    s = StrISgets(_file_lp2); -    if (s->length == 0) { -	ISclose(_file_lp2); -	return NULL; -    } -    return s; -} - -void -HTMLlineproc3(Buffer *buf, InputStream stream) -{ -    _file_lp2 = stream; -    HTMLlineproc2body(buf, file_feed, -1); -} - -static void -proc_escape(struct readbuffer *obuf, char **str_return) -{ -    char *str = *str_return, *estr; -    int ech = getescapechar(str_return); -    int width, n_add = *str_return - str; -    Lineprop mode = PC_ASCII; - -    if (ech < 0) { -	*str_return = str; -	proc_mchar(obuf, obuf->flag & RB_SPECIAL, 1, str_return, PC_ASCII); -	return; -    } -    mode = IS_CNTRL(ech) ? PC_CTRL : PC_ASCII; - -    estr = conv_entity(ech); -    check_breakpoint(obuf, obuf->flag & RB_SPECIAL, estr); -    width = get_strwidth(estr); -    if (width == 1 && ech == (unsigned char)*estr && -	ech != '&' && ech != '<' && ech != '>') { -	if (IS_CNTRL(ech)) -	    mode = PC_CTRL; -	push_charp(obuf, width, estr, mode); -    } -    else -	push_nchars(obuf, width, str, n_add, mode); -    set_prevchar(obuf->prevchar, estr, strlen(estr)); -    obuf->prev_ctype = mode; -} - - -static int -need_flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, -	       Lineprop mode) -{ -    char ch; - -    if (obuf->flag & RB_PRE_INT) { -	if (obuf->pos > h_env->limit) -	    return 1; -	else -	    return 0; -    } - -    ch = Strlastchar(obuf->line); -    /* if (ch == ' ' && obuf->tag_sp > 0) */ -    if (ch == ' ') -	return 0; - -    if (obuf->pos > h_env->limit) -	return 1; - -    return 0; -} - -static int -table_width(struct html_feed_environ *h_env, int table_level) -{ -    int width; -    if (table_level < 0) -	return 0; -    width = tables[table_level]->total_width; -    if (table_level > 0 || width > 0) -	return width; -    return h_env->limit - h_env->envs[h_env->envc].indent; -} - -/* HTML processing first pass */ -void -HTMLlineproc0(char *line, struct html_feed_environ *h_env, int internal) -{ -    Lineprop mode; -    int cmd; -    struct readbuffer *obuf = h_env->obuf; -    int indent, delta; -    struct parsed_tag *tag; -    Str tokbuf; -    struct table *tbl = NULL; -    struct table_mode *tbl_mode = NULL; -    int tbl_width = 0; -#ifdef USE_M17N -    int is_hangul, prev_is_hangul = 0; -#endif - -#ifdef DEBUG -    if (w3m_debug) { -	FILE *f = fopen("zzzproc1", "a"); -	fprintf(f, "%c%c%c%c", -		(obuf->flag & RB_PREMODE) ? 'P' : ' ', -		(obuf->table_level >= 0) ? 'T' : ' ', -		(obuf->flag & RB_INTXTA) ? 'X' : ' ', -		(obuf->flag & (RB_SCRIPT | RB_STYLE)) ? 'S' : ' '); -	fprintf(f, "HTMLlineproc1(\"%s\",%d,%lx)\n", line, h_env->limit, -		(unsigned long)h_env); -	fclose(f); -    } -#endif - -    tokbuf = Strnew(); - -  table_start: -    if (obuf->table_level >= 0) { -	int level = min(obuf->table_level, MAX_TABLE - 1); -	tbl = tables[level]; -	tbl_mode = &table_mode[level]; -	tbl_width = table_width(h_env, level); -    } - -    while (*line != '\0') { -	char *str, *p; -	int is_tag = FALSE; -	int pre_mode = (obuf->table_level >= 0) ? tbl_mode->pre_mode : -	    obuf->flag; -	int end_tag = (obuf->table_level >= 0) ? tbl_mode->end_tag : -	    obuf->end_tag; - -	if (*line == '<' || obuf->status != R_ST_NORMAL) { -	    /*  -	     * Tag processing -	     */ -	    if (obuf->status == R_ST_EOL) -		obuf->status = R_ST_NORMAL; -	    else { -		read_token(h_env->tagbuf, &line, &obuf->status, -			   pre_mode & RB_PREMODE, obuf->status != R_ST_NORMAL); -		if (obuf->status != R_ST_NORMAL) -		    return; -	    } -	    if (h_env->tagbuf->length == 0) -		continue; -	    str = h_env->tagbuf->ptr; -	    if (*str == '<') { -		if (str[1] && REALLY_THE_BEGINNING_OF_A_TAG(str)) -		    is_tag = TRUE; -		else if (!(pre_mode & (RB_PLAIN | RB_INTXTA | RB_INSELECT | -				       RB_SCRIPT | RB_STYLE | RB_TITLE))) { -		    line = Strnew_m_charp(str + 1, line, NULL)->ptr; -		    str = "<"; -		} -	    } -	} -	else { -	    read_token(tokbuf, &line, &obuf->status, pre_mode & RB_PREMODE, 0); -	    if (obuf->status != R_ST_NORMAL)	/* R_ST_AMP ? */ -		obuf->status = R_ST_NORMAL; -	    str = tokbuf->ptr; -	} - -	if (pre_mode & (RB_PLAIN | RB_INTXTA | RB_INSELECT | RB_SCRIPT | -			RB_STYLE | RB_TITLE)) { -	    if (is_tag) { -		p = str; -		if ((tag = parse_tag(&p, internal))) { -		    if (tag->tagid == end_tag || -			(pre_mode & RB_INSELECT && tag->tagid == HTML_N_FORM) -			|| (pre_mode & RB_TITLE -			    && (tag->tagid == HTML_N_HEAD -				|| tag->tagid == HTML_BODY))) -			goto proc_normal; -		} -	    } -	    /* title */ -	    if (pre_mode & RB_TITLE) { -		feed_title(str); -		continue; -	    } -	    /* select */ -	    if (pre_mode & RB_INSELECT) { -		if (obuf->table_level >= 0) -		    goto proc_normal; -		feed_select(str); -		continue; -	    } -	    if (is_tag) { -		if (strncmp(str, "<!--", 4) && (p = strchr(str + 1, '<'))) { -		    str = Strnew_charp_n(str, p - str)->ptr; -		    line = Strnew_m_charp(p, line, NULL)->ptr; -		} -		is_tag = FALSE; -	    } -	    if (obuf->table_level >= 0) -		goto proc_normal; -	    /* textarea */ -	    if (pre_mode & RB_INTXTA) { -		feed_textarea(str); -		continue; -	    } -	    /* script */ -	    if (pre_mode & RB_SCRIPT) -		continue; -	    /* style */ -	    if (pre_mode & RB_STYLE) -		continue; -	} - -      proc_normal: -	if (obuf->table_level >= 0) { -	    /*  -	     * within table: in <table>..</table>, all input tokens -	     * are fed to the table renderer, and then the renderer -	     * makes HTML output. -	     */ -	    switch (feed_table(tbl, str, tbl_mode, tbl_width, internal)) { -	    case 0: -		/* </table> tag */ -		obuf->table_level--; -		if (obuf->table_level >= MAX_TABLE - 1) -		    continue; -		end_table(tbl); -		if (obuf->table_level >= 0) { -		    struct table *tbl0 = tables[obuf->table_level]; -		    str = Sprintf("<table_alt tid=%d>", tbl0->ntable)->ptr; -		    pushTable(tbl0, tbl); -		    tbl = tbl0; -		    tbl_mode = &table_mode[obuf->table_level]; -		    tbl_width = table_width(h_env, obuf->table_level); -		    feed_table(tbl, str, tbl_mode, tbl_width, TRUE); -		    continue; -		    /* continue to the next */ -		} -		if (obuf->flag & RB_DEL) -		    continue; -		/* all tables have been read */ -		if (tbl->vspace > 0 && !(obuf->flag & RB_IGNORE_P)) { -		    int indent = h_env->envs[h_env->envc].indent; -		    flushline(h_env, obuf, indent, 0, h_env->limit); -		    do_blankline(h_env, obuf, indent, 0, h_env->limit); -		} -		save_fonteffect(h_env, obuf); -		renderTable(tbl, tbl_width, h_env); -		restore_fonteffect(h_env, obuf); -		obuf->flag &= ~RB_IGNORE_P; -		if (tbl->vspace > 0) { -		    int indent = h_env->envs[h_env->envc].indent; -		    do_blankline(h_env, obuf, indent, 0, h_env->limit); -		    obuf->flag |= RB_IGNORE_P; -		} -		set_space_to_prevchar(obuf->prevchar); -		continue; -	    case 1: -		/* <table> tag */ -		break; -	    default: -		continue; -	    } -	} - -	if (is_tag) { -/*** Beginning of a new tag ***/ -	    if ((tag = parse_tag(&str, internal))) -		cmd = tag->tagid; -	    else -		continue; -	    /* process tags */ -	    if (HTMLtagproc1(tag, h_env) == 0) { -		/* preserve the tag for second-stage processing */ -		if (parsedtag_need_reconstruct(tag)) -		    h_env->tagbuf = parsedtag2str(tag); -		push_tag(obuf, h_env->tagbuf->ptr, cmd); -	    } -#ifdef ID_EXT -	    else { -		process_idattr(obuf, cmd, tag); -	    } -#endif				/* ID_EXT */ -	    obuf->bp.init_flag = 1; -	    clear_ignore_p_flag(cmd, obuf); -	    if (cmd == HTML_TABLE) -		goto table_start; -	    else -		continue; -	} - -	if (obuf->flag & (RB_DEL | RB_S)) -	    continue; -	while (*str) { -	    mode = get_mctype(str); -	    delta = get_mcwidth(str); -	    if (obuf->flag & (RB_SPECIAL & ~RB_NOBR)) { -		char ch = *str; -		if (!(obuf->flag & RB_PLAIN) && (*str == '&')) { -		    char *p = str; -		    int ech = getescapechar(&p); -		    if (ech == '\n' || ech == '\r') { -			ch = '\n'; -			str = p - 1; -		    } -		    else if (ech == '\t') { -			ch = '\t'; -			str = p - 1; -		    } -		} -		if (ch != '\n') -		    obuf->flag &= ~RB_IGNORE_P; -		if (ch == '\n') { -		    str++; -		    if (obuf->flag & RB_IGNORE_P) { -			obuf->flag &= ~RB_IGNORE_P; -			continue; -		    } -		    if (obuf->flag & RB_PRE_INT) -			PUSH(' '); -		    else -			flushline(h_env, obuf, h_env->envs[h_env->envc].indent, -				  1, h_env->limit); -		} -		else if (ch == '\t') { -		    do { -			PUSH(' '); -		    } while ((h_env->envs[h_env->envc].indent + obuf->pos) -			     % Tabstop != 0); -		    str++; -		} -		else if (obuf->flag & RB_PLAIN) { -		    char *p = html_quote_char(*str); -		    if (p) { -			push_charp(obuf, 1, p, PC_ASCII); -			str++; -		    } -		    else { -			proc_mchar(obuf, 1, delta, &str, mode); -		    } -		} -		else { -		    if (*str == '&') -			proc_escape(obuf, &str); -		    else -			proc_mchar(obuf, 1, delta, &str, mode); -		} -		if (obuf->flag & (RB_SPECIAL & ~RB_PRE_INT)) -		    continue; -	    } -	    else { -		if (!IS_SPACE(*str)) -		    obuf->flag &= ~RB_IGNORE_P; -		if ((mode == PC_ASCII || mode == PC_CTRL) && IS_SPACE(*str)) { -		    if (*obuf->prevchar->ptr != ' ') { -			PUSH(' '); -		    } -		    str++; -		} -		else { -#ifdef USE_M17N -		    if (mode == PC_KANJI1) -			is_hangul = wtf_is_hangul((wc_uchar *) str); -		    else -			is_hangul = 0; -		    if (mode == PC_KANJI1 && -			!is_hangul && !prev_is_hangul && -			obuf->pos > h_env->envs[h_env->envc].indent && -			Strlastchar(obuf->line) == ' ') { -			while (obuf->line->length >= 2 && -			       !strncmp(obuf->line->ptr + obuf->line->length - -					2, "  ", 2) -			       && obuf->pos >= h_env->envs[h_env->envc].indent) { -			    Strshrink(obuf->line, 1); -			    obuf->pos--; -			} -			if (obuf->line->length >= 3 && -			    obuf->prev_ctype == PC_KANJI1 && -			    Strlastchar(obuf->line) == ' ' && -			    obuf->pos >= h_env->envs[h_env->envc].indent) { -			    Strshrink(obuf->line, 1); -			    obuf->pos--; -			} -		    } -		    prev_is_hangul = is_hangul; -#endif -		    if (*str == '&') -			proc_escape(obuf, &str); -		    else -			proc_mchar(obuf, obuf->flag & RB_SPECIAL, delta, &str, -				   mode); -		} -	    } -	    if (need_flushline(h_env, obuf, mode)) { -		char *bp = obuf->line->ptr + obuf->bp.len; -		char *tp = bp - obuf->bp.tlen; -		int i = 0; - -		if (tp > obuf->line->ptr && tp[-1] == ' ') -		    i = 1; - -		indent = h_env->envs[h_env->envc].indent; -		if (obuf->bp.pos - i > indent) { -		    Str line; -		    append_tags(obuf); -		    line = Strnew_charp(bp); -		    Strshrink(obuf->line, obuf->line->length - obuf->bp.len); -#ifdef FORMAT_NICE -		    if (obuf->pos - i > h_env->limit) -			obuf->flag |= RB_FILL; -#endif				/* FORMAT_NICE */ -		    back_to_breakpoint(obuf); -		    flushline(h_env, obuf, indent, 0, h_env->limit); -#ifdef FORMAT_NICE -		    obuf->flag &= ~RB_FILL; -#endif				/* FORMAT_NICE */ -		    HTMLlineproc1(line->ptr, h_env); -		} -	    } -	} -    } -    if (!(obuf->flag & (RB_SPECIAL | RB_INTXTA | RB_INSELECT))) { -	char *tp; -	int i = 0; - -	if (obuf->bp.pos == obuf->pos) { -	    tp = &obuf->line->ptr[obuf->bp.len - obuf->bp.tlen]; -	} -	else { -	    tp = &obuf->line->ptr[obuf->line->length]; -	} - -	if (tp > obuf->line->ptr && tp[-1] == ' ') -	    i = 1; -	indent = h_env->envs[h_env->envc].indent; -	if (obuf->pos - i > h_env->limit) { -#ifdef FORMAT_NICE -	    obuf->flag |= RB_FILL; -#endif				/* FORMAT_NICE */ -	    flushline(h_env, obuf, indent, 0, h_env->limit); -#ifdef FORMAT_NICE -	    obuf->flag &= ~RB_FILL; -#endif				/* FORMAT_NICE */ -	} -    } -} - -extern char *NullLine; -extern Lineprop NullProp[]; - -#ifndef USE_ANSI_COLOR -#define addnewline2(a,b,c,d,e,f) _addnewline2(a,b,c,e,f) -#endif -static void -addnewline2(Buffer *buf, char *line, Lineprop *prop, Linecolor *color, int pos, -	    int nlines) -{ -    Line *l; -    l = New(Line); -    l->next = NULL; -    l->lineBuf = line; -    l->propBuf = prop; -#ifdef USE_ANSI_COLOR -    l->colorBuf = color; -#endif -    l->len = pos; -    l->width = -1; -    l->size = pos; -    l->bpos = 0; -    l->bwidth = 0; -    l->prev = buf->currentLine; -    if (buf->currentLine) { -	l->next = buf->currentLine->next; -	buf->currentLine->next = l; -    } -    else -	l->next = NULL; -    if (buf->lastLine == NULL || buf->lastLine == buf->currentLine) -	buf->lastLine = l; -    buf->currentLine = l; -    if (buf->firstLine == NULL) -	buf->firstLine = l; -    l->linenumber = ++buf->allLine; -    if (nlines < 0) { -	/*     l->real_linenumber = l->linenumber;     */ -	l->real_linenumber = 0; -    } -    else { -	l->real_linenumber = nlines; -    } -    l = NULL; -} - -static void -addnewline(Buffer *buf, char *line, Lineprop *prop, Linecolor *color, int pos, -	   int width, int nlines) -{ -    char *s; -    Lineprop *p; -#ifdef USE_ANSI_COLOR -    Linecolor *c; -#endif -    Line *l; -    int i, bpos, bwidth; - -    if (pos > 0) { -	s = allocStr(line, pos); -	p = NewAtom_N(Lineprop, pos); -	bcopy((void *)prop, (void *)p, pos * sizeof(Lineprop)); -    } -    else { -	s = NullLine; -	p = NullProp; -    } -#ifdef USE_ANSI_COLOR -    if (pos > 0 && color) { -	c = NewAtom_N(Linecolor, pos); -	bcopy((void *)color, (void *)c, pos * sizeof(Linecolor)); -    } -    else { -	c = NULL; -    } -#endif -    addnewline2(buf, s, p, c, pos, nlines); -    if (pos <= 0 || width <= 0) -	return; -    bpos = 0; -    bwidth = 0; -    while (1) { -	l = buf->currentLine; -	l->bpos = bpos; -	l->bwidth = bwidth; -	i = columnLen(l, width); -	if (i == 0) { -	    i++; -#ifdef USE_M17N -	    while (i < l->len && p[i] & PC_WCHAR2) -		i++; -#endif -	} -	l->len = i; -	l->width = COLPOS(l, l->len); -	if (pos <= i) -	    return; -	bpos += l->len; -	bwidth += l->width; -	s += i; -	p += i; -#ifdef USE_ANSI_COLOR -	if (c) -	    c += i; -#endif -	pos -= i; -	addnewline2(buf, s, p, c, pos, nlines); -    } -} - -/*  - * loadHTMLBuffer: read file and make new buffer - */ -Buffer * -loadHTMLBuffer(URLFile *f, Buffer *newBuf) -{ -    FILE *src = NULL; -    Str tmp; - -    if (newBuf == NULL) -	newBuf = newBuffer(INIT_BUFFER_WIDTH); -    if (newBuf->sourcefile == NULL && -	(f->scheme != SCM_LOCAL || newBuf->mailcap)) { -	tmp = tmpfname(TMPF_SRC, ".html"); -	src = fopen(tmp->ptr, "w"); -	if (src) -	    newBuf->sourcefile = tmp->ptr; -    } - -    loadHTMLstream(f, newBuf, src, newBuf->bufferprop & BP_FRAME); - -    newBuf->topLine = newBuf->firstLine; -    newBuf->lastLine = newBuf->currentLine; -    newBuf->currentLine = newBuf->firstLine; -    if (n_textarea) -	formResetBuffer(newBuf, newBuf->formitem); -    if (src) -	fclose(src); - -    return newBuf; -} - -static char *_size_unit[] = { "b", "kb", "Mb", "Gb", "Tb", -    "Pb", "Eb", "Zb", "Bb", "Yb", NULL -}; - -char * -convert_size(clen_t size, int usefloat) -{ -    float csize; -    int sizepos = 0; -    char **sizes = _size_unit; - -    csize = (float)size; -    while (csize >= 999.495 && sizes[sizepos + 1]) { -	csize = csize / 1024.0; -	sizepos++; -    } -    return Sprintf(usefloat ? "%.3g%s" : "%.0f%s", -		   floor(csize * 100.0 + 0.5) / 100.0, sizes[sizepos])->ptr; -} - -char * -convert_size2(clen_t size1, clen_t size2, int usefloat) -{ -    char **sizes = _size_unit; -    float csize, factor = 1; -    int sizepos = 0; - -    csize = (float)((size1 > size2) ? size1 : size2); -    while (csize / factor >= 999.495 && sizes[sizepos + 1]) { -	factor *= 1024.0; -	sizepos++; -    } -    return Sprintf(usefloat ? "%.3g/%.3g%s" : "%.0f/%.0f%s", -		   floor(size1 / factor * 100.0 + 0.5) / 100.0, -		   floor(size2 / factor * 100.0 + 0.5) / 100.0, -		   sizes[sizepos])->ptr; -} - -void -showProgress(clen_t * linelen, clen_t * trbyte) -{ -    int i, j, rate, duration, eta, pos; -    static time_t last_time, start_time; -    time_t cur_time; -    Str messages; -    char *fmtrbyte, *fmrate; - -    if (!fmInitialized) -	return; - -    if (*linelen < 1024) -	return; -    if (current_content_length > 0) { -	double ratio; -	cur_time = time(0); -	if (*trbyte == 0) { -	    move(LASTLINE, 0); -	    clrtoeolx(); -	    start_time = cur_time; -	} -	*trbyte += *linelen; -	*linelen = 0; -	if (cur_time == last_time) -	    return; -	last_time = cur_time; -	move(LASTLINE, 0); -	ratio = 100.0 * (*trbyte) / current_content_length; -	fmtrbyte = convert_size2(*trbyte, current_content_length, 1); -	duration = cur_time - start_time; -	if (duration) { -	    rate = *trbyte / duration; -	    fmrate = convert_size(rate, 1); -	    eta = rate ? (current_content_length - *trbyte) / rate : -1; -	    messages = Sprintf("%11s %3.0f%% " -			       "%7s/s " -			       "eta %02d:%02d:%02d     ", -			       fmtrbyte, ratio, -			       fmrate, -			       eta / (60 * 60), (eta / 60) % 60, eta % 60); -	} -	else { -	    messages = Sprintf("%11s %3.0f%%                          ", -			       fmtrbyte, ratio); -	} -	addstr(messages->ptr); -	pos = 42; -	i = pos + (COLS - pos - 1) * (*trbyte) / current_content_length; -	move(LASTLINE, pos); -	standout(); -	addch(' '); -	for (j = pos + 1; j <= i; j++) -	    addch('|'); -	standend(); -	/* no_clrtoeol(); */ -	refresh(); -    } -    else { -	cur_time = time(0); -	if (*trbyte == 0) { -	    move(LASTLINE, 0); -	    clrtoeolx(); -	    start_time = cur_time; -	} -	*trbyte += *linelen; -	*linelen = 0; -	if (cur_time == last_time) -	    return; -	last_time = cur_time; -	move(LASTLINE, 0); -	fmtrbyte = convert_size(*trbyte, 1); -	duration = cur_time - start_time; -	if (duration) { -	    fmrate = convert_size(*trbyte / duration, 1); -	    messages = Sprintf("%7s loaded %7s/s", fmtrbyte, fmrate); -	} -	else { -	    messages = Sprintf("%7s loaded", fmtrbyte); -	} -	message(messages->ptr, 0, 0); -	refresh(); -    } -} - -void -init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf, -	  struct environment *envs, int nenv, TextLineList *buf, -	  int limit, int indent) -{ -    envs[0].indent = indent; - -    obuf->line = Strnew(); -    obuf->cprop = 0; -    obuf->pos = 0; -    obuf->prevchar = Strnew_size(8); -    set_space_to_prevchar(obuf->prevchar); -    obuf->flag = RB_IGNORE_P; -    obuf->flag_sp = 0; -    obuf->status = R_ST_NORMAL; -    obuf->table_level = -1; -    obuf->nobr_level = 0; -    bzero((void *)&obuf->anchor, sizeof(obuf->anchor)); -    obuf->img_alt = 0; -    obuf->in_bold = 0; -    obuf->in_under = 0; -    obuf->prev_ctype = PC_ASCII; -    obuf->tag_sp = 0; -    obuf->fontstat_sp = 0; -    obuf->top_margin = 0; -    obuf->bottom_margin = 0; -    obuf->bp.init_flag = 1; -    set_breakpoint(obuf, 0); - -    h_env->buf = buf; -    h_env->f = NULL; -    h_env->obuf = obuf; -    h_env->tagbuf = Strnew(); -    h_env->limit = limit; -    h_env->maxlimit = 0; -    h_env->envs = envs; -    h_env->nenv = nenv; -    h_env->envc = 0; -    h_env->envc_real = 0; -    h_env->title = NULL; -    h_env->blank_lines = 0; -} - -void -completeHTMLstream(struct html_feed_environ *h_env, struct readbuffer *obuf) -{ -    close_anchor(h_env, obuf); -    if (obuf->img_alt) { -	push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT); -	obuf->img_alt = NULL; -    } -    if (obuf->in_bold) { -	push_tag(obuf, "</b>", HTML_N_B); -	obuf->in_bold = 0; -    } -    if (obuf->in_under) { -	push_tag(obuf, "</u>", HTML_N_U); -	obuf->in_under = 0; -    } -    if (obuf->flag & RB_INTXTA) -	HTMLlineproc1("</textarea>", h_env); -    /* for unbalanced select tag */ -    if (obuf->flag & RB_INSELECT) -	HTMLlineproc1("</select>", h_env); -    if (obuf->flag & RB_TITLE) -	HTMLlineproc1("</title>", h_env); - -    /* for unbalanced table tag */ -    if (obuf->table_level >= MAX_TABLE) -	obuf->table_level = MAX_TABLE - 1; - -    while (obuf->table_level >= 0) { -	table_mode[obuf->table_level].pre_mode -	    &= ~(TBLM_SCRIPT | TBLM_STYLE | TBLM_PLAIN); -	HTMLlineproc1("</table>", h_env); -    } -} - -static void -print_internal_information(struct html_feed_environ *henv) -{ -    int i; -    Str s; -    TextLineList *tl = newTextLineList(); - -    s = Strnew_charp("<internal>"); -    pushTextLine(tl, newTextLine(s, 0)); -    if (henv->title) { -	s = Strnew_m_charp("<title_alt title=\"", -			   html_quote(henv->title), "\">", NULL); -	pushTextLine(tl, newTextLine(s, 0)); -    } -#if 0 -    if (form_max >= 0) { -	FormList *fp; -	for (i = 0; i <= form_max; i++) { -	    fp = forms[i]; -	    s = Sprintf("<form_int fid=\"%d\" action=\"%s\" method=\"%s\"", -			i, html_quote(fp->action->ptr), -			(fp->method == FORM_METHOD_POST) ? "post" -			: ((fp->method == -			    FORM_METHOD_INTERNAL) ? "internal" : "get")); -	    if (fp->target) -		Strcat(s, Sprintf(" target=\"%s\"", html_quote(fp->target))); -	    if (fp->enctype == FORM_ENCTYPE_MULTIPART) -		Strcat_charp(s, " enctype=\"multipart/form-data\""); -#ifdef USE_M17N -	    if (fp->charset) -		Strcat(s, Sprintf(" accept-charset=\"%s\"", -				  html_quote(fp->charset))); -#endif -	    Strcat_charp(s, ">"); -	    pushTextLine(tl, newTextLine(s, 0)); -	} -    } -#endif -#ifdef MENU_SELECT -    if (n_select > 0) { -	FormSelectOptionItem *ip; -	for (i = 0; i < n_select; i++) { -	    s = Sprintf("<select_int selectnumber=%d>", i); -	    pushTextLine(tl, newTextLine(s, 0)); -	    for (ip = select_option[i].first; ip; ip = ip->next) { -		s = Sprintf("<option_int value=\"%s\" label=\"%s\"%s>", -			    html_quote(ip->value ? ip->value->ptr : -				       ip->label->ptr), -			    html_quote(ip->label->ptr), -			    ip->checked ? " selected" : ""); -		pushTextLine(tl, newTextLine(s, 0)); -	    } -	    s = Strnew_charp("</select_int>"); -	    pushTextLine(tl, newTextLine(s, 0)); -	} -    } -#endif				/* MENU_SELECT */ -    if (n_textarea > 0) { -	for (i = 0; i < n_textarea; i++) { -	    s = Sprintf("<textarea_int textareanumber=%d>", i); -	    pushTextLine(tl, newTextLine(s, 0)); -	    s = Strnew_charp(html_quote(textarea_str[i]->ptr)); -	    Strcat_charp(s, "</textarea_int>"); -	    pushTextLine(tl, newTextLine(s, 0)); -	} -    } -    s = Strnew_charp("</internal>"); -    pushTextLine(tl, newTextLine(s, 0)); - -    if (henv->buf) -	appendTextLineList(henv->buf, tl); -    else if (henv->f) { -	TextLineListItem *p; -	for (p = tl->first; p; p = p->next) -	    fprintf(henv->f, "%s\n", Str_conv_to_halfdump(p->ptr->line)->ptr); -    } -} - -void -loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) -{ -    struct environment envs[MAX_ENV_LEVEL]; -    clen_t linelen = 0; -    clen_t trbyte = 0; -    Str lineBuf2 = Strnew(); -#ifdef USE_M17N -    wc_ces charset = WC_CES_US_ASCII; -    wc_ces volatile doc_charset = DocumentCharset; -#endif -    struct html_feed_environ htmlenv1; -    struct readbuffer obuf; -#ifdef USE_IMAGE -    int volatile image_flag; -#endif -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; - -#ifdef USE_M17N -    if (fmInitialized && graph_ok()) { -	symbol_width = symbol_width0 = 1; -    } -    else { -	symbol_width0 = 0; -	get_symbol(DisplayCharset, &symbol_width0); -	symbol_width = WcOption.use_wide ? symbol_width0 : 1; -    } -#else -    symbol_width = symbol_width0 = 1; -#endif - -    cur_title = NULL; -    n_textarea = 0; -    cur_textarea = NULL; -    max_textarea = MAX_TEXTAREA; -    textarea_str = New_N(Str, max_textarea); -#ifdef MENU_SELECT -    n_select = 0; -    max_select = MAX_SELECT; -    select_option = New_N(FormSelectOption, max_select); -#endif				/* MENU_SELECT */ -    cur_select = NULL; -    form_sp = -1; -    form_max = -1; -    forms_size = 0; -    forms = NULL; -    cur_hseq = 1; -#ifdef USE_IMAGE -    cur_iseq = 1; -    if (newBuf->image_flag) -	image_flag = newBuf->image_flag; -    else if (activeImage && displayImage && autoImage) -	image_flag = IMG_FLAG_AUTO; -    else -	image_flag = IMG_FLAG_SKIP; -    if (newBuf->currentURL.file) -	cur_baseURL = baseURL(newBuf); -#endif - -    if (w3m_halfload) { -	newBuf->buffername = "---"; -#ifdef USE_M17N -	newBuf->document_charset = InnerCharset; -#endif -	max_textarea = 0; -#ifdef MENU_SELECT -	max_select = 0; -#endif -	HTMLlineproc3(newBuf, f->stream); -	w3m_halfload = FALSE; -	return; -    } - -    init_henv(&htmlenv1, &obuf, envs, MAX_ENV_LEVEL, NULL, newBuf->width, 0); - -    if (w3m_halfdump) -	htmlenv1.f = stdout; -    else -	htmlenv1.buf = newTextLineList(); - -    if (SETJMP(AbortLoading) != 0) { -	HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1); -	goto phase2; -    } -    TRAP_ON; - -#ifdef USE_M17N -    if (newBuf != NULL) { -	if (newBuf->bufferprop & BP_FRAME) -	    charset = InnerCharset; -	else if (newBuf->document_charset) -	    charset = doc_charset = newBuf->document_charset; -    } -    if (content_charset && UseContentCharset) -	doc_charset = content_charset; -    meta_charset = 0; -#endif -#if	0 -    do_blankline(&htmlenv1, &obuf, 0, 0, htmlenv1.limit); -    obuf.flag = RB_IGNORE_P; -#endif -    if (IStype(f->stream) != IST_ENCODED) -	f->stream = newEncodedStream(f->stream, f->encoding); -    while ((lineBuf2 = StrmyUFgets(f))->length) { -#ifdef USE_NNTP -	if (f->scheme == SCM_NEWS && lineBuf2->ptr[0] == '.') { -	    Strshrinkfirst(lineBuf2, 1); -	    if (lineBuf2->ptr[0] == '\n' || lineBuf2->ptr[0] == '\r' || -		lineBuf2->ptr[0] == '\0') { -		/* -		 * iseos(f->stream) = TRUE; -		 */ -		break; -	    } -	} -#endif				/* USE_NNTP */ -	if (src) -	    Strfputs(lineBuf2, src); -	linelen += lineBuf2->length; -	if (w3m_dump & DUMP_EXTRA) -	    printf("W3m-in-progress: %s?n", convert_size2(linelen, current_content_length, TRUE)); -	if (w3m_dump & DUMP_SOURCE) -	    continue; -	showProgress(&linelen, &trbyte); -	/* -	 * if (frame_source) -	 * continue; -	 */ -#ifdef USE_M17N -	if (meta_charset) {	/* <META> */ -	    if (content_charset == 0 && UseContentCharset) { -		doc_charset = meta_charset; -		charset = WC_CES_US_ASCII; -	    } -	    meta_charset = 0; -	} -#endif -	lineBuf2 = convertLine(f, lineBuf2, HTML_MODE, &charset, doc_charset); -#if defined(USE_M17N) && defined(USE_IMAGE) -	cur_document_charset = charset; -#endif -	HTMLlineproc0(lineBuf2->ptr, &htmlenv1, internal); -    } -    if (obuf.status != R_ST_NORMAL) { -	obuf.status = R_ST_EOL; -	HTMLlineproc0("\n", &htmlenv1, internal); -    } -    obuf.status = R_ST_NORMAL; -    completeHTMLstream(&htmlenv1, &obuf); -    flushline(&htmlenv1, &obuf, 0, 2, htmlenv1.limit); -    if (htmlenv1.title) -	newBuf->buffername = htmlenv1.title; -    if (w3m_halfdump) { -	TRAP_OFF; -	print_internal_information(&htmlenv1); -	return; -    } -    if (w3m_backend) { -	TRAP_OFF; -	print_internal_information(&htmlenv1); -	backend_halfdump_buf = htmlenv1.buf; -	return; -    } -  phase2: -    newBuf->trbyte = trbyte + linelen; -    TRAP_OFF; -#ifdef USE_M17N -    if (!(newBuf->bufferprop & BP_FRAME)) -	newBuf->document_charset = charset; -#endif -#ifdef USE_IMAGE -    newBuf->image_flag = image_flag; -#endif -    HTMLlineproc2(newBuf, htmlenv1.buf); -} - -/*  - * loadHTMLString: read string and make new buffer - */ -Buffer * -loadHTMLString(Str page) -{ -    URLFile f; -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; -    Buffer *newBuf; - -    newBuf = newBuffer(INIT_BUFFER_WIDTH); -    if (SETJMP(AbortLoading) != 0) { -	TRAP_OFF; -	discardBuffer(newBuf); -	return NULL; -    } -    TRAP_ON; - -    init_stream(&f, SCM_LOCAL, newStrStream(page)); - -#ifdef USE_M17N -    newBuf->document_charset = InnerCharset; -#endif -    loadHTMLstream(&f, newBuf, NULL, TRUE); -#ifdef USE_M17N -    newBuf->document_charset = WC_CES_US_ASCII; -#endif - -    TRAP_OFF; -    newBuf->topLine = newBuf->firstLine; -    newBuf->lastLine = newBuf->currentLine; -    newBuf->currentLine = newBuf->firstLine; -    newBuf->type = "text/html"; -    newBuf->real_type = newBuf->type; -    if (n_textarea) -	formResetBuffer(newBuf, newBuf->formitem); -    return newBuf; -} - -#ifdef USE_GOPHER - -/*  - * loadGopherDir: get gopher directory - */ -Str -loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset) -{ -    Str volatile tmp; -    Str lbuf, name, file, host, port; -    char *volatile p, *volatile q; -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; -#ifdef USE_M17N -    wc_ces doc_charset = DocumentCharset; -#endif - -    tmp = parsedURL2Str(pu); -    p = html_quote(tmp->ptr); -    tmp = -	convertLine(NULL, Strnew_charp(file_unquote(tmp->ptr)), RAW_MODE, -		    charset, doc_charset); -    q = html_quote(tmp->ptr); -    tmp = Strnew_m_charp("<html>\n<head>\n<base href=\"", p, "\">\n<title>", q, -			 "</title>\n</head>\n<body>\n<h1>Index of ", q, -			 "</h1>\n<table>\n", NULL); - -    if (SETJMP(AbortLoading) != 0) -	goto gopher_end; -    TRAP_ON; - -    while (1) { -	if (lbuf = StrUFgets(uf), lbuf->length == 0) -	    break; -	if (lbuf->ptr[0] == '.' && -	    (lbuf->ptr[1] == '\n' || lbuf->ptr[1] == '\r')) -	    break; -	lbuf = convertLine(uf, lbuf, HTML_MODE, charset, doc_charset); -	p = lbuf->ptr; -	for (q = p; *q && *q != '\t'; q++) ; -	name = Strnew_charp_n(p, q - p); -	if (!*q) -	    continue; -	p = q + 1; -	for (q = p; *q && *q != '\t'; q++) ; -	file = Strnew_charp_n(p, q - p); -	if (!*q) -	    continue; -	p = q + 1; -	for (q = p; *q && *q != '\t'; q++) ; -	host = Strnew_charp_n(p, q - p); -	if (!*q) -	    continue; -	p = q + 1; -	for (q = p; *q && *q != '\t' && *q != '\r' && *q != '\n'; q++) ; -	port = Strnew_charp_n(p, q - p); - -	switch (name->ptr[0]) { -	case '0': -	    p = "[text file]"; -	    break; -	case '1': -	    p = "[directory]"; -	    break; -	case 'm': -	    p = "[message]"; -	    break; -	case 's': -	    p = "[sound]"; -	    break; -	case 'g': -	    p = "[gif]"; -	    break; -	case 'h': -	    p = "[HTML]"; -	    break; -	default: -	    p = "[unsupported]"; -	    break; -	} -	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)), -		       "\">", p, html_quote(name->ptr + 1), "</a>\n", NULL); -    } - -  gopher_end: -    TRAP_OFF; - -    Strcat_charp(tmp, "</table>\n</body>\n</html>\n"); -    return tmp; -} -#endif				/* USE_GOPHER */ - -/*  - * loadBuffer: read file and make new buffer - */ -Buffer * -loadBuffer(URLFile *uf, Buffer *volatile newBuf) -{ -    FILE *volatile src = NULL; -#ifdef USE_M17N -    wc_ces charset = WC_CES_US_ASCII; -    wc_ces volatile doc_charset = DocumentCharset; -#endif -    Str lineBuf2; -    volatile char pre_lbuf = '\0'; -    int nlines; -    Str tmpf; -    clen_t linelen = 0, trbyte = 0; -    Lineprop *propBuffer = NULL; -#ifdef USE_ANSI_COLOR -    Linecolor *colorBuffer = NULL; -#endif -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; - -    if (newBuf == NULL) -	newBuf = newBuffer(INIT_BUFFER_WIDTH); -    lineBuf2 = Strnew(); - -    if (SETJMP(AbortLoading) != 0) { -	goto _end; -    } -    TRAP_ON; - -    if (newBuf->sourcefile == NULL && -	(uf->scheme != SCM_LOCAL || newBuf->mailcap)) { -	tmpf = tmpfname(TMPF_SRC, NULL); -	src = fopen(tmpf->ptr, "w"); -	if (src) -	    newBuf->sourcefile = tmpf->ptr; -    } -#ifdef USE_M17N -    if (newBuf->document_charset) -	charset = doc_charset = newBuf->document_charset; -    if (content_charset && UseContentCharset) -	doc_charset = content_charset; -#endif - -    nlines = 0; -    if (IStype(uf->stream) != IST_ENCODED) -	uf->stream = newEncodedStream(uf->stream, uf->encoding); -    while ((lineBuf2 = StrmyISgets(uf->stream))->length) { -#ifdef USE_NNTP -	if (uf->scheme == SCM_NEWS && lineBuf2->ptr[0] == '.') { -	    Strshrinkfirst(lineBuf2, 1); -	    if (lineBuf2->ptr[0] == '\n' || lineBuf2->ptr[0] == '\r' || -		lineBuf2->ptr[0] == '\0') { -		/* -		 * iseos(uf->stream) = TRUE; -		 */ -		break; -	    } -	} -#endif				/* USE_NNTP */ -	if (src) -	    Strfputs(lineBuf2, src); -	linelen += lineBuf2->length; -	if (w3m_dump & DUMP_SOURCE) -	    continue; -	showProgress(&linelen, &trbyte); -	if (frame_source) -	    continue; -	lineBuf2 = -	    convertLine(uf, lineBuf2, PAGER_MODE, &charset, doc_charset); -	if (squeezeBlankLine) { -	    if (lineBuf2->ptr[0] == '\n' && pre_lbuf == '\n') { -		++nlines; -		continue; -	    } -	    pre_lbuf = lineBuf2->ptr[0]; -	} -	++nlines; -	Strchop(lineBuf2); -	lineBuf2 = checkType(lineBuf2, &propBuffer, NULL); -	addnewline(newBuf, lineBuf2->ptr, propBuffer, colorBuffer, -		   lineBuf2->length, FOLD_BUFFER_WIDTH, nlines); -    } -  _end: -    TRAP_OFF; -    newBuf->topLine = newBuf->firstLine; -    newBuf->lastLine = newBuf->currentLine; -    newBuf->currentLine = newBuf->firstLine; -    newBuf->trbyte = trbyte + linelen; -#ifdef USE_M17N -    newBuf->document_charset = charset; -#endif -    if (src) -	fclose(src); - -    return newBuf; -} - -#ifdef USE_IMAGE -Buffer * -loadImageBuffer(URLFile *uf, Buffer *newBuf) -{ -    Image image; -    ImageCache *cache; -    Str tmp, tmpf; -    FILE *src = NULL; -    URLFile f; -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; -    struct stat st; - -    loadImage(newBuf, IMG_FLAG_STOP); -    image.url = uf->url; -    image.ext = uf->ext; -    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 && -	!stat(cache->file, &st)) -	goto image_buffer; - -    TRAP_ON; -    if (IStype(uf->stream) != IST_ENCODED) -	uf->stream = newEncodedStream(uf->stream, uf->encoding); -    if (save2tmp(*uf, cache->file) < 0) { -	UFclose(uf); -	TRAP_OFF; -	return NULL; -    } -    UFclose(uf); -    TRAP_OFF; - -    cache->loaded = IMG_FLAG_LOADED; -    cache->index = 0; - -  image_buffer: -    if (newBuf == NULL) -	newBuf = newBuffer(INIT_BUFFER_WIDTH); -    cache->loaded |= IMG_FLAG_DONT_REMOVE; -    if (newBuf->sourcefile == NULL && uf->scheme != SCM_LOCAL) -	newBuf->sourcefile = cache->file; - -    tmp = Sprintf("<img src=\"%s\"><br><br>", html_quote(image.url)); -    tmpf = tmpfname(TMPF_SRC, ".html"); -    src = fopen(tmpf->ptr, "w"); -    newBuf->mailcap_source = tmpf->ptr; - -    init_stream(&f, SCM_LOCAL, newStrStream(tmp)); -    loadHTMLstream(&f, newBuf, src, TRUE); -    if (src) -	fclose(src); - -    newBuf->topLine = newBuf->firstLine; -    newBuf->lastLine = newBuf->currentLine; -    newBuf->currentLine = newBuf->firstLine; -    newBuf->image_flag = IMG_FLAG_AUTO; -    return newBuf; -} -#endif - -static Str -conv_symbol(Line *l) -{ -    Str tmp = NULL; -    char *p = l->lineBuf, *ep = p + l->len; -    Lineprop *pr = l->propBuf; -#ifdef USE_M17N -    int w; -    char **symbol = NULL; -#else -    char **symbol = get_symbol(); -#endif - -    for (; p < ep; p++, pr++) { -	if (*pr & PC_SYMBOL) { -#ifdef USE_M17N -	    char c = ((char)wtf_get_code((wc_uchar *) p) & 0x7f) - SYMBOL_BASE; -	    int len = get_mclen(p); -#else -	    char c = *p - SYMBOL_BASE; -#endif -	    if (tmp == NULL) { -		tmp = Strnew_size(l->len); -		Strcopy_charp_n(tmp, l->lineBuf, p - l->lineBuf); -#ifdef USE_M17N -		w = (*pr & PC_KANJI) ? 2 : 1; -		symbol = get_symbol(DisplayCharset, &w); -#endif -	    } -	    Strcat_charp(tmp, symbol[(int)c]); -#ifdef USE_M17N -	    p += len - 1; -	    pr += len - 1; -#endif -	} -	else if (tmp != NULL) -	    Strcat_char(tmp, *p); -    } -    if (tmp) -	return tmp; -    else -	return Strnew_charp_n(l->lineBuf, l->len); -} - -/*  - * saveBuffer: write buffer to file - */ -static void -_saveBuffer(Buffer *buf, Line *l, FILE * f, int cont) -{ -    Str tmp; -    int is_html = FALSE; -#ifdef USE_M17N -    int set_charset = !DisplayCharset; -    wc_ces charset = DisplayCharset ? DisplayCharset : WC_CES_US_ASCII; -#endif - -    if (buf->type && !strcasecmp(buf->type, "text/html")) -	is_html = TRUE; - -  pager_next: -    for (; l != NULL; l = l->next) { -	if (is_html) -	    tmp = conv_symbol(l); -	else -	    tmp = Strnew_charp_n(l->lineBuf, l->len); -	tmp = wc_Str_conv(tmp, InnerCharset, charset); -	Strfputs(tmp, f); -	if (Strlastchar(tmp) != '\n' && !(cont && l->next && l->next->bpos)) -	    putc('\n', f); -    } -    if (buf->pagerSource && !(buf->bufferprop & BP_CLOSE)) { -	l = getNextPage(buf, PagerMax); -#ifdef USE_M17N -	if (set_charset) -	    charset = buf->document_charset; -#endif -	goto pager_next; -    } -} - -void -saveBuffer(Buffer *buf, FILE * f, int cont) -{ -    _saveBuffer(buf, buf->firstLine, f, cont); -} - -void -saveBufferBody(Buffer *buf, FILE * f, int cont) -{ -    Line *l = buf->firstLine; - -    while (l != NULL && l->real_linenumber == 0) -	l = l->next; -    _saveBuffer(buf, l, f, cont); -} - -static Buffer * -loadcmdout(char *cmd, -	   Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf) -{ -    FILE *f, *popen(const char *, const char *); -    Buffer *buf; -    URLFile uf; - -    if (cmd == NULL || *cmd == '\0') -	return NULL; -    f = popen(cmd, "r"); -    if (f == NULL) -	return NULL; -    init_stream(&uf, SCM_UNKNOWN, newFileStream(f, (void (*)())pclose)); -    buf = loadproc(&uf, defaultbuf); -    UFclose(&uf); -    return buf; -} - -/*  - * getshell: execute shell command and get the result into a buffer - */ -Buffer * -getshell(char *cmd) -{ -    Buffer *buf; - -    buf = loadcmdout(cmd, loadBuffer, NULL); -    if (buf == NULL) -	return NULL; -    buf->filename = cmd; -    buf->buffername = Sprintf("%s %s", SHELLBUFFERNAME, -			      conv_from_system(cmd))->ptr; -    return buf; -} - -/*  - * getpipe: execute shell command and connect pipe to the buffer - */ -Buffer * -getpipe(char *cmd) -{ -    FILE *f, *popen(const char *, const char *); -    Buffer *buf; - -    if (cmd == NULL || *cmd == '\0') -	return NULL; -    f = popen(cmd, "r"); -    if (f == NULL) -	return NULL; -    buf = newBuffer(INIT_BUFFER_WIDTH); -    buf->pagerSource = newFileStream(f, (void (*)())pclose); -    buf->filename = cmd; -    buf->buffername = Sprintf("%s %s", PIPEBUFFERNAME, -			      conv_from_system(cmd))->ptr; -    buf->bufferprop |= BP_PIPE; -#ifdef USE_M17N -    buf->document_charset = WC_CES_US_ASCII; -#endif -    return buf; -} - -/*  - * Open pager buffer - */ -Buffer * -openPagerBuffer(InputStream stream, Buffer *buf) -{ - -    if (buf == NULL) -	buf = newBuffer(INIT_BUFFER_WIDTH); -    buf->pagerSource = stream; -    buf->buffername = getenv("MAN_PN"); -    if (buf->buffername == NULL) -	buf->buffername = PIPEBUFFERNAME; -    else -	buf->buffername = conv_from_system(buf->buffername); -    buf->bufferprop |= BP_PIPE; -#ifdef USE_M17N -    if (content_charset && UseContentCharset) -	buf->document_charset = content_charset; -    else -	buf->document_charset = WC_CES_US_ASCII; -#endif -    buf->currentLine = buf->firstLine; - -    return buf; -} - -Buffer * -openGeneralPagerBuffer(InputStream stream) -{ -    Buffer *buf; -    char *t = "text/plain"; -    Buffer *t_buf = NULL; -    URLFile uf; - -    init_stream(&uf, SCM_UNKNOWN, stream); - -#ifdef USE_M17N -    content_charset = 0; -#endif -    if (SearchHeader) { -	t_buf = newBuffer(INIT_BUFFER_WIDTH); -	readHeader(&uf, t_buf, TRUE, NULL); -	t = checkContentType(t_buf); -	if (t == NULL) -	    t = "text/plain"; -	if (t_buf) { -	    t_buf->topLine = t_buf->firstLine; -	    t_buf->currentLine = t_buf->lastLine; -	} -	SearchHeader = FALSE; -    } -    else if (DefaultType) { -	t = DefaultType; -	DefaultType = NULL; -    } -    if (!strcasecmp(t, "text/html")) { -	buf = loadHTMLBuffer(&uf, t_buf); -	buf->type = "text/html"; -    } -    else if (is_plain_text_type(t)) { -	if (IStype(stream) != IST_ENCODED) -	    stream = newEncodedStream(stream, uf.encoding); -	buf = openPagerBuffer(stream, t_buf); -	buf->type = "text/plain"; -    } -#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)) { -	    UFclose(&uf); -	    if (buf == NULL || buf == NO_BUFFER) -		return buf; -	} -	else {			/* unknown type is regarded as text/plain */ -	    if (IStype(stream) != IST_ENCODED) -		stream = newEncodedStream(stream, uf.encoding); -	    buf = openPagerBuffer(stream, t_buf); -	    buf->type = "text/plain"; -	} -    } -    buf->real_type = t; -    buf->currentURL.scheme = SCM_LOCAL; -    buf->currentURL.file = "-"; -    return buf; -} - -Line * -getNextPage(Buffer *buf, int plen) -{ -    Line *volatile top = buf->topLine, *volatile last = buf->lastLine, -	*volatile cur = buf->currentLine; -    int i; -    int volatile nlines = 0; -    clen_t linelen = 0, trbyte = buf->trbyte; -    Str lineBuf2; -    char volatile pre_lbuf = '\0'; -    URLFile uf; -#ifdef USE_M17N -    wc_ces charset; -    wc_ces volatile doc_charset = DocumentCharset; -    wc_uint8 old_auto_detect = WcOption.auto_detect; -#endif -    int volatile squeeze_flag = FALSE; -    Lineprop *propBuffer = NULL; - -#ifdef USE_ANSI_COLOR -    Linecolor *colorBuffer = NULL; -#endif -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; - -    if (buf->pagerSource == NULL) -	return NULL; - -    if (last != NULL) { -	nlines = last->real_linenumber; -	pre_lbuf = *(last->lineBuf); -	if (pre_lbuf == '\0') -	    pre_lbuf = '\n'; -	buf->currentLine = last; -    } - -#ifdef USE_M17N -    charset = buf->document_charset; -    if (buf->document_charset != WC_CES_US_ASCII) -	doc_charset = buf->document_charset; -    else if (UseContentCharset) { -	content_charset = 0; -	checkContentType(buf); -	if (content_charset) -	    doc_charset = content_charset; -    } -    WcOption.auto_detect = buf->auto_detect; -#endif - -    if (SETJMP(AbortLoading) != 0) { -	goto pager_end; -    } -    TRAP_ON; - -    init_stream(&uf, SCM_UNKNOWN, NULL); -    for (i = 0; i < plen; i++) { -	lineBuf2 = StrmyISgets(buf->pagerSource); -	if (lineBuf2->length == 0) { -	    /* Assume that `cmd == buf->filename' */ -	    if (buf->filename) -		buf->buffername = Sprintf("%s %s", -					  CPIPEBUFFERNAME, -					  conv_from_system(buf->filename))-> -		    ptr; -	    else if (getenv("MAN_PN") == NULL) -		buf->buffername = CPIPEBUFFERNAME; -	    buf->bufferprop |= BP_CLOSE; -	    break; -	} -	linelen += lineBuf2->length; -	showProgress(&linelen, &trbyte); -	lineBuf2 = -	    convertLine(&uf, lineBuf2, PAGER_MODE, &charset, doc_charset); -	if (squeezeBlankLine) { -	    squeeze_flag = FALSE; -	    if (lineBuf2->ptr[0] == '\n' && pre_lbuf == '\n') { -		++nlines; -		--i; -		squeeze_flag = TRUE; -		continue; -	    } -	    pre_lbuf = lineBuf2->ptr[0]; -	} -	++nlines; -	Strchop(lineBuf2); -	lineBuf2 = checkType(lineBuf2, &propBuffer, &colorBuffer); -	addnewline(buf, lineBuf2->ptr, propBuffer, colorBuffer, -		   lineBuf2->length, FOLD_BUFFER_WIDTH, nlines); -	if (!top) { -	    top = buf->firstLine; -	    cur = top; -	} -	if (buf->lastLine->real_linenumber - buf->firstLine->real_linenumber -	    >= PagerMax) { -	    Line *l = buf->firstLine; -	    do { -		if (top == l) -		    top = l->next; -		if (cur == l) -		    cur = l->next; -		if (last == l) -		    last = NULL; -		l = l->next; -	    } while (l && l->bpos); -	    buf->firstLine = l; -	    buf->firstLine->prev = NULL; -	} -    } -  pager_end: -    TRAP_OFF; - -    buf->trbyte = trbyte + linelen; -#ifdef USE_M17N -    buf->document_charset = charset; -    WcOption.auto_detect = old_auto_detect; -#endif -    buf->topLine = top; -    buf->currentLine = cur; -    if (!last) -	last = buf->firstLine; -    else if (last && (last->next || !squeeze_flag)) -	last = last->next; -    return last; -} - -int -save2tmp(URLFile uf, char *tmpf) -{ -    FILE *ff; -    int check; -    clen_t linelen = 0, trbyte = 0; -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; -    static JMP_BUF env_bak; - -    ff = fopen(tmpf, "wb"); -    if (ff == NULL) { -	/* fclose(f); */ -	return -1; -    } -    bcopy(AbortLoading, env_bak, sizeof(JMP_BUF)); -    if (SETJMP(AbortLoading) != 0) { -	goto _end; -    } -    TRAP_ON; -    check = 0; -#ifdef USE_NNTP -    if (uf.scheme == SCM_NEWS) { -	char c; -	while (c = UFgetc(&uf), !iseos(uf.stream)) { -	    if (c == '\n') { -		if (check == 0) -		    check++; -		else if (check == 3) -		    break; -	    } -	    else if (c == '.' && check == 1) -		check++; -	    else if (c == '\r' && check == 2) -		check++; -	    else -		check = 0; -	    putc(c, ff); -	    linelen += sizeof(c); -	    showProgress(&linelen, &trbyte); -	} -    } -    else -#endif				/* USE_NNTP */ -    { -	Str buf = Strnew_size(SAVE_BUF_SIZE); -	while (UFread(&uf, buf, SAVE_BUF_SIZE)) { -	    Strfputs(buf, ff); -	    linelen += buf->length; -	    showProgress(&linelen, &trbyte); -	} -    } -  _end: -    bcopy(env_bak, AbortLoading, sizeof(JMP_BUF)); -    TRAP_OFF; -    fclose(ff); -    current_content_length = 0; -    return 0; -} - -int -doExternal(URLFile uf, char *path, char *type, Buffer **bufp, -	   Buffer *defaultbuf) -{ -    Str tmpf, command; -    struct mailcap *mcap; -    int mc_stat; -    Buffer *buf = NULL; -    char *header, *src = NULL, *ext = uf.ext; - -    if (!(mcap = searchExtViewer(type))) -	return 0; - -    if (mcap->nametemplate) { -	tmpf = unquote_mailcap(mcap->nametemplate, NULL, "", NULL, NULL); -	if (tmpf->ptr[0] == '.') -	    ext = tmpf->ptr; -    } -    tmpf = tmpfname(TMPF_DFL, (ext && *ext) ? ext : NULL); - -    if (IStype(uf.stream) != IST_ENCODED) -	uf.stream = newEncodedStream(uf.stream, uf.encoding); -    header = checkHeader(defaultbuf, "Content-Type:"); -    if (header) -	header = conv_to_system(header); -    command = unquote_mailcap(mcap->viewer, type, tmpf->ptr, header, &mc_stat); -#ifndef __EMX__ -    if (!(mc_stat & MCSTAT_REPNAME)) { -	Str tmp = Sprintf("(%s) < %s", command->ptr, shell_quote(tmpf->ptr)); -	command = tmp; -    } -#endif - -#ifdef HAVE_SETPGRP -    if (!(mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) && -	!(mcap->flags & MAILCAP_NEEDSTERMINAL) && BackgroundExtViewer) { -	flush_tty(); -	if (!fork()) { -	    setup_child(FALSE, 0, UFfileno(&uf)); -	    if (save2tmp(uf, tmpf->ptr) < 0) -		exit(1); -	    UFclose(&uf); -	    myExec(command->ptr); -	} -	*bufp = NO_BUFFER; -	return 1; -    } -    else -#endif -    { -	if (save2tmp(uf, tmpf->ptr) < 0) { -	    *bufp = NULL; -	    return 1; -	} -    } -    if (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) { -	if (defaultbuf == NULL) -	    defaultbuf = newBuffer(INIT_BUFFER_WIDTH); -	if (defaultbuf->sourcefile) -	    src = defaultbuf->sourcefile; -	else -	    src = tmpf->ptr; -	defaultbuf->sourcefile = NULL; -	defaultbuf->mailcap = mcap; -    } -    if (mcap->flags & MAILCAP_HTMLOUTPUT) { -	buf = loadcmdout(command->ptr, loadHTMLBuffer, defaultbuf); -	if (buf && buf != NO_BUFFER) { -	    buf->type = "text/html"; -	    buf->mailcap_source = buf->sourcefile; -	    buf->sourcefile = src; -	} -    } -    else if (mcap->flags & MAILCAP_COPIOUSOUTPUT) { -	buf = loadcmdout(command->ptr, loadBuffer, defaultbuf); -	if (buf && buf != NO_BUFFER) { -	    buf->type = "text/plain"; -	    buf->mailcap_source = buf->sourcefile; -	    buf->sourcefile = src; -	} -    } -    else { -	if (mcap->flags & MAILCAP_NEEDSTERMINAL || !BackgroundExtViewer) { -	    fmTerm(); -	    mySystem(command->ptr, 0); -	    fmInit(); -	    if (CurrentTab && Currentbuf) -		displayBuffer(Currentbuf, B_FORCE_REDRAW); -	} -	else { -	    mySystem(command->ptr, 1); -	} -	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)); -	buf->edit = mcap->edit; -	buf->mailcap = mcap; -    } -    *bufp = buf; -    return 1; -} - -static int -_MoveFile(char *path1, char *path2) -{ -    InputStream f1; -    FILE *f2; -    int is_pipe; -    clen_t linelen = 0, trbyte = 0; -    Str buf; - -    f1 = openIS(path1); -    if (f1 == NULL) -	return -1; -    if (*path2 == '|' && PermitSaveToPipe) { -	is_pipe = TRUE; -	f2 = popen(path2 + 1, "w"); -    } -    else { -	is_pipe = FALSE; -	f2 = fopen(path2, "wb"); -    } -    if (f2 == NULL) { -	ISclose(f1); -	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; -	showProgress(&linelen, &trbyte); -    } -    ISclose(f1); -    if (is_pipe) -	pclose(f2); -    else -	fclose(f2); -    return 0; -} - -int -_doFileCopy(char *tmpf, char *defstr, int download) -{ -    Str msg; -    Str filen; -    char *p, *q = NULL; -    pid_t pid; -    char *lock; -#if !(defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)) -    FILE *f; -#endif -    struct stat st; -    clen_t size = 0; -    int is_pipe = FALSE; - -    if (fmInitialized) { -	p = searchKeyData(); -	if (p == NULL || *p == '\0') { -	    /* FIXME: gettextize? */ -	    q = inputLineHist("(Download)Save file to: ", -			      defstr, IN_COMMAND, SaveHist); -	    if (q == NULL || *q == '\0') -		return FALSE; -	    p = conv_to_system(q); -	} -	if (*p == '|' && PermitSaveToPipe) -	    is_pipe = TRUE; -	else { -	    if (q) { -		p = unescape_spaces(Strnew_charp(q))->ptr; -		p = conv_to_system(q); -	    } -	    p = expandPath(p); -	    if (checkOverWrite(p) < 0) -		return -1; -	} -	if (checkCopyFile(tmpf, p) < 0) { -	    /* FIXME: gettextize? */ -	    msg = Sprintf("Can't copy. %s and %s are identical.", -			  conv_from_system(tmpf), conv_from_system(p)); -	    disp_err_message(msg->ptr, FALSE); -	    return -1; -	} -	if (!download) { -	    if (_MoveFile(tmpf, p) < 0) { -		/* FIXME: gettextize? */ -		msg = Sprintf("Can't save to %s", conv_from_system(p)); -		disp_err_message(msg->ptr, FALSE); -	    } -	    return -1; -	} -	lock = tmpfname(TMPF_DFL, ".lock")->ptr; -#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT) -	symlink(p, lock); -#else -	f = fopen(lock, "w"); -	if (f) -	    fclose(f); -#endif -	flush_tty(); -	pid = fork(); -	if (!pid) { -	    setup_child(FALSE, 0, -1); -	    if (!_MoveFile(tmpf, p) && PreserveTimestamp && !is_pipe && -		!stat(tmpf, &st)) -		setModtime(p, st.st_mtime); -	    unlink(lock); -	    exit(0); -	} -	if (!stat(tmpf, &st)) -	    size = st.st_size; -	addDownloadList(pid, conv_from_system(tmpf), p, lock, size); -    } -    else { -	q = searchKeyData(); -	if (q == NULL || *q == '\0') { -	    /* FIXME: gettextize? */ -	    printf("(Download)Save file to: "); -	    fflush(stdout); -	    filen = Strfgets(stdin); -	    if (filen->length == 0) -		return -1; -	    q = filen->ptr; -	} -	for (p = q + strlen(q) - 1; IS_SPACE(*p); p--) ; -	*(p + 1) = '\0'; -	if (*q == '\0') -	    return -1; -	p = q; -	if (*p == '|' && PermitSaveToPipe) -	    is_pipe = TRUE; -	else { -	    p = expandPath(p); -	    if (checkOverWrite(p) < 0) -		return -1; -	} -	if (checkCopyFile(tmpf, p) < 0) { -	    /* FIXME: gettextize? */ -	    printf("Can't copy. %s and %s are identical.", tmpf, p); -	    return -1; -	} -	if (_MoveFile(tmpf, p) < 0) { -	    /* FIXME: gettextize? */ -	    printf("Can't save to %s\n", p); -	    return -1; -	} -	if (PreserveTimestamp && !is_pipe && !stat(tmpf, &st)) -	    setModtime(p, st.st_mtime); -    } -    return 0; -} - -int -doFileMove(char *tmpf, char *defstr) -{ -    int ret = doFileCopy(tmpf, defstr); -    unlink(tmpf); -    return ret; -} - -int -doFileSave(URLFile uf, char *defstr) -{ -    Str msg; -    Str filen; -    char *p, *q; -    pid_t pid; -    char *lock; -    char *tmpf = NULL;  -#if !(defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)) -    FILE *f; -#endif - -    if (fmInitialized) { -	p = searchKeyData(); -	if (p == NULL || *p == '\0') { -	    /* FIXME: gettextize? */ -	    p = inputLineHist("(Download)Save file to: ", -			      defstr, IN_FILENAME, SaveHist); -	    if (p == NULL || *p == '\0') -		return -1; -	    p = conv_to_system(p); -	} -	if (checkOverWrite(p) < 0) -	    return -1; -	if (checkSaveFile(uf.stream, p) < 0) { -	    /* FIXME: gettextize? */ -	    msg = Sprintf("Can't save. Load file and %s are identical.", -			  conv_from_system(p)); -	    disp_err_message(msg->ptr, FALSE); -	    return -1; -	} -	/* -	 * if (save2tmp(uf, p) < 0) { -	 * msg = Sprintf("Can't save to %s", conv_from_system(p)); -	 * disp_err_message(msg->ptr, FALSE); -	 * } -	 */ -	lock = tmpfname(TMPF_DFL, ".lock")->ptr; -#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT) -	symlink(p, lock); -#else -	f = fopen(lock, "w"); -	if (f) -	    fclose(f); -#endif -	flush_tty(); -	pid = fork(); -	if (!pid) { -	    if (uf.content_encoding != CMP_NOCOMPRESS) { -		uncompress_stream(&uf, &tmpf); -		if (tmpf) -		    unlink(tmpf); -	    } -	    setup_child(FALSE, 0, UFfileno(&uf)); -	    if (!save2tmp(uf, p) && PreserveTimestamp && uf.modtime != -1) -		setModtime(p, uf.modtime); -	    UFclose(&uf); -	    unlink(lock); -	    exit(0); -	} -	addDownloadList(pid, uf.url, p, lock, current_content_length); -    } -    else { -	q = searchKeyData(); -	if (q == NULL || *q == '\0') { -	    /* FIXME: gettextize? */ -	    printf("(Download)Save file to: "); -	    fflush(stdout); -	    filen = Strfgets(stdin); -	    if (filen->length == 0) -		return -1; -	    q = filen->ptr; -	} -	for (p = q + strlen(q) - 1; IS_SPACE(*p); p--) ; -	*(p + 1) = '\0'; -	if (*q == '\0') -	    return -1; -	p = expandPath(q); -	if (checkOverWrite(p) < 0) -	    return -1; -	if (checkSaveFile(uf.stream, p) < 0) { -	    /* FIXME: gettextize? */ -	    printf("Can't save. Load file and %s are identical.", p); -	    return -1; -	} -	if (uf.content_encoding != CMP_NOCOMPRESS) { -	    uncompress_stream(&uf, &tmpf); -	    if (tmpf) -		unlink(tmpf); -	} -	if (save2tmp(uf, p) < 0) { -	    /* FIXME: gettextize? */ -	    printf("Can't save to %s\n", p); -	    return -1; -	} -	if (PreserveTimestamp && uf.modtime != -1) -	    setModtime(p, uf.modtime); -    } -    return 0; -} - -int -checkCopyFile(char *path1, char *path2) -{ -    struct stat st1, st2; - -    if (*path2 == '|' && PermitSaveToPipe) -	return 0; -    if ((stat(path1, &st1) == 0) && (stat(path2, &st2) == 0)) -	if (st1.st_ino == st2.st_ino) -	    return -1; -    return 0; -} - -int -checkSaveFile(InputStream stream, char *path2) -{ -    struct stat st1, st2; -    int des = ISfileno(stream); - -    if (des < 0) -	return 0; -    if (*path2 == '|' && PermitSaveToPipe) -	return 0; -    if ((fstat(des, &st1) == 0) && (stat(path2, &st2) == 0)) -	if (st1.st_ino == st2.st_ino) -	    return -1; -    return 0; -} - -int -checkOverWrite(char *path) -{ -    struct stat st; -    char *ans; - -    if (stat(path, &st) < 0) -	return 0; -    /* FIXME: gettextize? */ -    ans = inputAnswer("File exists. Overwrite? (y/n)"); -    if (ans && TOLOWER(*ans) == 'y') -	return 0; -    else -	return -1; -} - -char * -inputAnswer(char *prompt) -{ -    char *ans; - -    if (QuietMessage) -	return "n"; -    if (fmInitialized) { -	term_raw(); -	ans = inputChar(prompt); -    } -    else { -	printf(prompt); -	fflush(stdout); -	ans = Strfgets(stdin)->ptr; -    } -    return ans; -} - -static void -uncompress_stream(URLFile *uf, char **src) -{ -    pid_t pid1; -    FILE *f1; -    char *expand_cmd = GUNZIP_CMDNAME; -    char *expand_name = GUNZIP_NAME; -    char *tmpf = NULL; -    char *ext = NULL; -    struct compression_decoder *d; - -    if (IStype(uf->stream) != IST_ENCODED) { -	uf->stream = newEncodedStream(uf->stream, uf->encoding); -	uf->encoding = ENC_7BIT; -    } -    for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) { -	if (uf->compression == d->type) { -	    if (d->auxbin_p) -		expand_cmd = auxbinFile(d->cmd); -	    else -		expand_cmd = d->cmd; -	    expand_name = d->name; -	    ext = d->ext; -	    break; -	} -    } -    uf->compression = CMP_NOCOMPRESS; - -    if (uf->scheme != SCM_LOCAL -#ifdef USE_IMAGE -	&& !image_source -#endif -	) { -	tmpf = tmpfname(TMPF_DFL, ext)->ptr; -    } - -    /* child1 -- stdout|f1=uf -> parent */ -    pid1 = open_pipe_rw(&f1, NULL); -    if (pid1 < 0) { -	UFclose(uf); -	return; -    } -    if (pid1 == 0) { -	/* child */ -	pid_t pid2; -	FILE *f2 = stdin; - -	/* uf -> child2 -- stdout|stdin -> child1 */ -	pid2 = open_pipe_rw(&f2, NULL); -	if (pid2 < 0) { -	    UFclose(uf); -	    exit(1); -	} -	if (pid2 == 0) { -	    /* child2 */ -	    Str buf = Strnew_size(SAVE_BUF_SIZE); -	    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) -		    break; -		if (f) -		    Strfputs(buf, f); -	    } -	    UFclose(uf); -	    if (f) -		fclose(f); -	    exit(0); -	} -	/* child1 */ -	dup2(1, 2);		/* stderr>&stdout */ -	setup_child(TRUE, -1, -1); -	execlp(expand_cmd, expand_name, NULL); -	exit(1); -    } -    if (tmpf) { -	if (src) -	    *src = tmpf; -	else -	    uf->scheme = SCM_LOCAL; -    } -    UFhalfclose(uf); -    uf->stream = newFileStream(f1, (void (*)())fclose); -} - -static FILE * -lessopen_stream(char *path) -{ -    char *lessopen; -    FILE *fp; - -    lessopen = getenv("LESSOPEN"); -    if (lessopen == NULL) { -	return NULL; -    } -    if (lessopen[0] == '\0') { -	return NULL; -    } - -    if (lessopen[0] == '|') { -	/* pipe mode */ -	Str tmpf; -	int c; - -	++lessopen; -	tmpf = Sprintf(lessopen, shell_quote(path)); -	fp = popen(tmpf->ptr, "r"); -	if (fp == NULL) { -	    return NULL; -	} -	c = getc(fp); -	if (c == EOF) { -	    fclose(fp); -	    return NULL; -	} -	ungetc(c, fp); -    } -    else { -	/* filename mode */ -	/* not supported m(__)m */ -	fp = NULL; -    } -    return fp; -} - -#if 0 -void -reloadBuffer(Buffer *buf) -{ -    URLFile uf; - -    if (buf->sourcefile == NULL || buf->pagerSource != NULL) -	return; -    init_stream(&uf, SCM_UNKNOWN, NULL); -    examineFile(buf->mailcap_source ? buf->mailcap_source : buf->sourcefile, -		&uf); -    if (uf.stream == NULL) -	return; -    is_redisplay = TRUE; -    buf->allLine = 0; -    buf->href = NULL; -    buf->name = NULL; -    buf->img = NULL; -    buf->formitem = NULL; -    buf->linklist = NULL; -    buf->maplist = NULL; -    if (buf->hmarklist) -	buf->hmarklist->nmark = 0; -    if (buf->imarklist) -	buf->imarklist->nmark = 0; -    if (!strcasecmp(buf->type, "text/html")) -	loadHTMLBuffer(&uf, buf); -    else -	loadBuffer(&uf, buf); -    UFclose(&uf); -    is_redisplay = FALSE; -} -#endif - -static char * -guess_filename(char *file) -{ -    char *p = NULL, *s; - -    if (file != NULL) -	p = mybasename(file); -    if (p == NULL || *p == '\0') -	return DEF_SAVE_FILE; -    s = p; -    if (*p == '#') -	p++; -    while (*p != '\0') { -	if ((*p == '#' && *(p + 1) != '\0') || *p == '?') { -	    *p = '\0'; -	    break; -	} -	p++; -    } -    return s; -} - -char * -guess_save_name(Buffer *buf, char *path) -{ -    if (buf && buf->document_header) { -	Str name = NULL; -	char *p, *q; -	if ((p = checkHeader(buf, "Content-Disposition:")) != NULL && -	    (q = strcasestr(p, "filename")) != NULL && -	    (q == p || IS_SPACE(*(q - 1)) || *(q - 1) == ';') && -	    matchattr(q, "filename", 8, &name)) -	    path = name->ptr; -	else if ((p = checkHeader(buf, "Content-Type:")) != NULL && -		 (q = strcasestr(p, "name")) != NULL && -		 (q == p || IS_SPACE(*(q - 1)) || *(q - 1) == ';') && -		 matchattr(q, "name", 4, &name)) -	    path = name->ptr; -    } -    return guess_filename(path); -} - -/* Local Variables:    */ -/* c-basic-offset: 4   */ -/* tab-width: 8        */ -/* End:                */ diff --git a/.#main.c.1.253 b/.#main.c.1.253 deleted file mode 100644 index 9a4c755..0000000 --- a/.#main.c.1.253 +++ /dev/null @@ -1,6600 +0,0 @@ -/* $Id: main.c,v 1.253 2006/12/10 10:49:23 inu Exp $ */ -#define MAINPROGRAM -#include "fm.h" -#include <signal.h> -#include <setjmp.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> -#include <fcntl.h> -#if defined(HAVE_WAITPID) || defined(HAVE_WAIT3) -#include <sys/wait.h> -#endif -#include <time.h> -#include "terms.h" -#include "myctype.h" -#include "regex.h" -#ifdef USE_MOUSE -#ifdef USE_GPM -#include <gpm.h> -#endif				/* USE_GPM */ -#if defined(USE_GPM) || defined(USE_SYSMOUSE) -extern int do_getch(); -#define getch()	do_getch() -#endif				/* defined(USE_GPM) || defined(USE_SYSMOUSE) */ -#endif - -#define DSTR_LEN	256 - -Hist *LoadHist; -Hist *SaveHist; -Hist *URLHist; -Hist *ShellHist; -Hist *TextHist; - -typedef struct _Event { -    int cmd; -    void *data; -    struct _Event *next; -} Event; -static Event *CurrentEvent = NULL; -static Event *LastEvent = NULL; - -#ifdef USE_ALARM -static AlarmEvent DefaultAlarm = { -    0, AL_UNSET, FUNCNAME_nulcmd, NULL -}; -static AlarmEvent *CurrentAlarm = &DefaultAlarm; -static MySignalHandler SigAlarm(SIGNAL_ARG); -#endif - -#ifdef SIGWINCH -static int need_resize_screen = FALSE; -static MySignalHandler resize_hook(SIGNAL_ARG); -static void resize_screen(void); -#endif - -#ifdef SIGPIPE -static MySignalHandler SigPipe(SIGNAL_ARG); -#endif - -#ifdef USE_MARK -static char *MarkString = NULL; -#endif -static char *SearchString = NULL; -int (*searchRoutine) (Buffer *, char *); - -JMP_BUF IntReturn; - -static void delBuffer(Buffer *buf); -static void cmd_loadfile(char *path); -static void cmd_loadURL(char *url, ParsedURL *current, char *referer, -			FormList *request); -static void cmd_loadBuffer(Buffer *buf, int prop, int linkid); -static void keyPressEventProc(int c); -int show_params_p = 0; -void show_params(FILE * fp); - -static char *getCurWord(Buffer *buf, int *spos, int *epos, -			const char *badchars); - -static int display_ok = FALSE; -static void do_dump(Buffer *); -int prec_num = 0; -int prev_key = -1; -int on_target = 1; -static int add_download_list = FALSE; - -void set_buffer_environ(Buffer *); -static void save_buffer_position(Buffer *buf); - -static void _followForm(int); -static void _goLine(char *); -static void _newT(void); -static void followTab(TabBuffer * tab); -static void moveTab(TabBuffer * t, TabBuffer * t2, int right); -static void _nextA(int); -static void _prevA(int); -static int check_target = TRUE; -#define PREC_NUM (prec_num ? prec_num : 1) -#define PREC_LIMIT 10000 -static int searchKeyNum(void); - -#define help() fusage(stdout, 0) -#define usage() fusage(stderr, 1) - -static void -fversion(FILE * f) -{ -    fprintf(f, "w3m version %s, options %s\n", w3m_version, -#if LANG == JA -	    "lang=ja" -#else -	    "lang=en" -#endif -#ifdef USE_M17N -	    ",m17n" -#endif -#ifdef USE_IMAGE -	    ",image" -#endif -#ifdef USE_COLOR -	    ",color" -#ifdef USE_ANSI_COLOR -	    ",ansi-color" -#endif -#endif -#ifdef USE_MOUSE -	    ",mouse" -#ifdef USE_GPM -	    ",gpm" -#endif -#ifdef USE_SYSMOUSE -	    ",sysmouse" -#endif -#endif -#ifdef USE_MENU -	    ",menu" -#endif -#ifdef USE_COOKIE -	    ",cookie" -#endif -#ifdef USE_SSL -	    ",ssl" -#ifdef USE_SSL_VERIFY -	    ",ssl-verify" -#endif -#endif -#ifdef USE_EXTERNAL_URI_LOADER -	    ",external-uri-loader" -#endif -#ifdef USE_W3MMAILER -	    ",w3mmailer" -#endif -#ifdef USE_NNTP -	    ",nntp" -#endif -#ifdef USE_GOPHER -	    ",gopher" -#endif -#ifdef INET6 -	    ",ipv6" -#endif -#ifdef USE_ALARM -	    ",alarm" -#endif -#ifdef USE_MARK -	    ",mark" -#endif -#ifdef USE_MIGEMO -	    ",migemo" -#endif -	); -} - -static void -fusage(FILE * f, int err) -{ -    fversion(f); -    /* FIXME: gettextize? */ -    fprintf(f, "usage: w3m [options] [URL or filename]\noptions:\n"); -    fprintf(f, "    -t tab           set tab width\n"); -    fprintf(f, "    -r               ignore backspace effect\n"); -    fprintf(f, "    -l line          # of preserved line (default 10000)\n"); -#ifdef USE_M17N -    fprintf(f, "    -I charset       document charset\n"); -    fprintf(f, "    -O charset       display/output charset\n"); -#ifndef DEBIAN			/* disabled by ukai: -s is used for squeeze multi lines */ -    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"); -    fprintf(f, "    -m               internet message mode\n"); -    fprintf(f, "    -v               visual startup mode\n"); -#ifdef USE_COLOR -    fprintf(f, "    -M               monochrome display\n"); -#endif				/* USE_COLOR */ -    fprintf(f, -	    "    -N               open URL of command line on each new tab\n"); -    fprintf(f, "    -F               automatically render frame\n"); -    fprintf(f, -	    "    -cols width      specify column width (used with -dump)\n"); -    fprintf(f, -	    "    -ppc count       specify the number of pixels per character (4.0...32.0)\n"); -#ifdef USE_IMAGE -    fprintf(f, -	    "    -ppl count       specify the number of pixels per line (4.0...64.0)\n"); -#endif -    fprintf(f, "    -dump            dump formatted page into stdout\n"); -    fprintf(f, -	    "    -dump_head       dump response of HEAD request into stdout\n"); -    fprintf(f, "    -dump_source     dump page source into stdout\n"); -    fprintf(f, "    -dump_both       dump HEAD and source into stdout\n"); -    fprintf(f, -	    "    -dump_extra      dump HEAD, source, and extra information into stdout\n"); -    fprintf(f, "    -post file       use POST method with file content\n"); -    fprintf(f, "    -header string   insert string as a header\n"); -    fprintf(f, "    +<num>           goto <num> line\n"); -    fprintf(f, "    -num             show line number\n"); -    fprintf(f, "    -no-proxy        don't use proxy\n"); -#ifdef INET6 -    fprintf(f, "    -4               IPv4 only (-o dns_order=4)\n"); -    fprintf(f, "    -6               IPv6 only (-o dns_order=6)\n"); -#endif -#ifdef USE_MOUSE -    fprintf(f, "    -no-mouse        don't use mouse\n"); -#endif				/* USE_MOUSE */ -#ifdef USE_COOKIE -    fprintf(f, -	    "    -cookie          use cookie (-no-cookie: don't use cookie)\n"); -#endif				/* USE_COOKIE */ -    fprintf(f, "    -pauth user:pass proxy authentication\n"); -    fprintf(f, "    -graph           use graphic character\n"); -    fprintf(f, "    -no-graph        don't use graphic character\n"); -#ifdef DEBIAN			/* replaced by ukai: 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, -	    "    -title[=TERM]    set buffer name to terminal title string\n"); -    fprintf(f, "    -o opt=value     assign value to config option\n"); -    fprintf(f, "    -show-option     print all config options\n"); -    fprintf(f, "    -config file     specify config file\n"); -    fprintf(f, "    -help            print this usage message\n"); -    fprintf(f, "    -version         print w3m version\n"); -    fprintf(f, "    -reqlog          write request logfile\n"); -    fprintf(f, "    -debug           DO NOT USE\n"); -    if (show_params_p) -	show_params(f); -    exit(err); -} - -#ifdef USE_M17N -#ifdef __EMX__ -static char *getCodePage(void); -#endif -#endif - -static GC_warn_proc orig_GC_warn_proc = NULL; -#define GC_WARN_KEEP_MAX (20) - -static void -wrap_GC_warn_proc(char *msg, GC_word arg) -{ -    if (fmInitialized) { -	/* *INDENT-OFF* */ -	static struct { -	    char *msg; -	    GC_word arg; -	} msg_ring[GC_WARN_KEEP_MAX]; -	/* *INDENT-ON* */ -	static int i = 0; -	static int n = 0; -	static int lock = 0; -	int j; - -	j = (i + n) % (sizeof(msg_ring) / sizeof(msg_ring[0])); -	msg_ring[j].msg = msg; -	msg_ring[j].arg = arg; - -	if (n < sizeof(msg_ring) / sizeof(msg_ring[0])) -	    ++n; -	else -	    ++i; - -	if (!lock) { -	    lock = 1; - -	    for (; n > 0; --n, ++i) { -		i %= sizeof(msg_ring) / sizeof(msg_ring[0]); - -		printf(msg_ring[i].msg,	(unsigned long)msg_ring[i].arg); -		sleep_till_anykey(1, 1); -	    } - -	    lock = 0; -	} -    } -    else if (orig_GC_warn_proc) -	orig_GC_warn_proc(msg, arg); -    else -	fprintf(stderr, msg, (unsigned long)arg); -} - -#ifdef SIGCHLD -static void -sig_chld(int signo) -{ -    int p_stat; -#ifdef HAVE_WAITPID -    pid_t pid; - -    while ((pid = waitpid(-1, &p_stat, WNOHANG)) > 0) { -	; -    } -#elif HAVE_WAIT3 -    int pid; - -    while ((pid = wait3(&p_stat, WNOHANG, NULL)) > 0) { -	; -    } -#else -    wait(&p_stat); -#endif -    mySignal(SIGCHLD, sig_chld); -    return; -} -#endif - -Str -make_optional_header_string(char *s) -{ -    char *p; -    Str hs; - -    if (strchr(s, '\n') || strchr(s, '\r')) -	return NULL; -    for (p = s; *p && *p != ':'; p++) ; -    if (*p != ':' || p == s) -	return NULL; -    hs = Strnew_size(strlen(s) + 3); -    Strcopy_charp_n(hs, s, p - s); -    if (!Strcasecmp_charp(hs, "content-type")) -	override_content_type = TRUE; -    Strcat_charp(hs, ": "); -    if (*(++p)) {		/* not null header */ -	SKIP_BLANKS(p);		/* skip white spaces */ -	Strcat_charp(hs, p); -    } -    Strcat_charp(hs, "\r\n"); -    return hs; -} - -int -main(int argc, char **argv, char **envp) -{ -    Buffer *newbuf = NULL; -    char *p, c; -    int i; -    InputStream redin; -    char *line_str = NULL; -    char **load_argv; -    FormList *request; -    int load_argc = 0; -    int load_bookmark = FALSE; -    int visual_start = FALSE; -    int open_new_tab = FALSE; -    char search_header = FALSE; -    char *default_type = NULL; -    char *post_file = NULL; -    Str err_msg; -#ifdef USE_M17N -    char *Locale = NULL; -    wc_uint8 auto_detect; -#ifdef __EMX__ -    wc_ces CodePage; -#endif -#endif -    GC_init(); -#if ENABLE_NLS -    setlocale(LC_ALL, ""); -    bindtextdomain(PACKAGE, LOCALEDIR); -    textdomain(PACKAGE); -#endif - -#ifndef HAVE_SYS_ERRLIST -    prepare_sys_errlist(); -#endif				/* not HAVE_SYS_ERRLIST */ - -    NO_proxy_domains = newTextList(); -    fileToDelete = newTextList(); - -    load_argv = New_N(char *, argc - 1); -    load_argc = 0; - -    CurrentDir = currentdir(); -    CurrentPid = (int)getpid(); -    BookmarkFile = NULL; -    config_file = NULL; - -    /* argument search 1 */ -    for (i = 1; i < argc; i++) { -	if (*argv[i] == '-') { -	    if (!strcmp("-config", argv[i])) { -		argv[i] = "-dummy"; -		if (++i >= argc) -		    usage(); -		config_file = argv[i]; -		argv[i] = "-dummy"; -	    } -	    else if (!strcmp("-h", argv[i]) || !strcmp("-help", argv[i])) -		help(); -	    else if (!strcmp("-V", argv[i]) || !strcmp("-version", argv[i])) { -		fversion(stdout); -		exit(0); -	    } -	} -    } - -#ifdef USE_M17N -    if (non_null(Locale = getenv("LC_ALL")) || -	non_null(Locale = getenv("LC_CTYPE")) || -	non_null(Locale = getenv("LANG"))) { -	DisplayCharset = wc_guess_locale_charset(Locale, DisplayCharset); -	DocumentCharset = wc_guess_locale_charset(Locale, DocumentCharset); -	SystemCharset = wc_guess_locale_charset(Locale, SystemCharset); -    } -#ifdef __EMX__ -    CodePage = wc_guess_charset(getCodePage(), 0); -    if (CodePage) -	DisplayCharset = DocumentCharset = SystemCharset = CodePage; -#endif -#endif - -    /* initializations */ -    init_rc(); - -    LoadHist = newHist(); -    SaveHist = newHist(); -    ShellHist = newHist(); -    TextHist = newHist(); -    URLHist = newHist(); - -#ifdef USE_M17N -    if (FollowLocale && Locale) { -	DisplayCharset = wc_guess_locale_charset(Locale, DisplayCharset); -	SystemCharset = wc_guess_locale_charset(Locale, SystemCharset); -    } -    auto_detect = WcOption.auto_detect; -    BookmarkCharset = DocumentCharset; -#endif - -    if (!non_null(HTTP_proxy) && -	((p = getenv("HTTP_PROXY")) || -	 (p = getenv("http_proxy")) || (p = getenv("HTTP_proxy")))) -	HTTP_proxy = p; -#ifdef USE_SSL -    if (!non_null(HTTPS_proxy) && -	((p = getenv("HTTPS_PROXY")) || -	 (p = getenv("https_proxy")) || (p = getenv("HTTPS_proxy")))) -	HTTPS_proxy = p; -    if (HTTPS_proxy == NULL && non_null(HTTP_proxy)) -	HTTPS_proxy = HTTP_proxy; -#endif				/* USE_SSL */ -#ifdef USE_GOPHER -    if (!non_null(GOPHER_proxy) && -	((p = getenv("GOPHER_PROXY")) || -	 (p = getenv("gopher_proxy")) || (p = getenv("GOPHER_proxy")))) -	GOPHER_proxy = p; -#endif				/* USE_GOPHER */ -    if (!non_null(FTP_proxy) && -	((p = getenv("FTP_PROXY")) || -	 (p = getenv("ftp_proxy")) || (p = getenv("FTP_proxy")))) -	FTP_proxy = p; -    if (!non_null(NO_proxy) && -	((p = getenv("NO_PROXY")) || -	 (p = getenv("no_proxy")) || (p = getenv("NO_proxy")))) -	NO_proxy = p; -#ifdef USE_NNTP -    if (!non_null(NNTP_server) && (p = getenv("NNTPSERVER")) != NULL) -	NNTP_server = p; -    if (!non_null(NNTP_mode) && (p = getenv("NNTPMODE")) != NULL) -	NNTP_mode = p; -#endif - -    if (!non_null(Editor) && (p = getenv("EDITOR")) != NULL) -	Editor = p; -    if (!non_null(Mailer) && (p = getenv("MAILER")) != NULL) -	Mailer = p; - -    /* argument search 2 */ -    i = 1; -    while (i < argc) { -	if (*argv[i] == '-') { -	    if (!strcmp("-t", argv[i])) { -		if (++i >= argc) -		    usage(); -		if (atoi(argv[i]) > 0) -		    Tabstop = atoi(argv[i]); -	    } -	    else if (!strcmp("-r", argv[i])) -		ShowEffect = FALSE; -	    else if (!strcmp("-l", argv[i])) { -		if (++i >= argc) -		    usage(); -		if (atoi(argv[i]) > 0) -		    PagerMax = atoi(argv[i]); -	    } -#ifdef USE_M17N -#ifndef DEBIAN			/* XXX: use -o kanjicode={S|J|E} */ -	    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; -		else { -		    if (++i >= argc) -			usage(); -		    p = argv[i]; -		} -		DocumentCharset = wc_guess_charset_short(p, DocumentCharset); -		WcOption.auto_detect = WC_OPT_DETECT_OFF; -		UseContentCharset = FALSE; -	    } -	    else if (!strncmp("-O", argv[i], 2)) { -		if (argv[i][2] != '\0') -		    p = argv[i] + 2; -		else { -		    if (++i >= argc) -			usage(); -		    p = argv[i]; -		} -		DisplayCharset = wc_guess_charset_short(p, DisplayCharset); -	    } -#endif -	    else if (!strcmp("-graph", argv[i])) -		UseGraphicChar = TRUE; -	    else if (!strcmp("-no-graph", argv[i])) -		UseGraphicChar = FALSE; -	    else if (!strcmp("-T", argv[i])) { -		if (++i >= argc) -		    usage(); -		DefaultType = default_type = argv[i]; -	    } -	    else if (!strcmp("-m", argv[i])) -		SearchHeader = search_header = TRUE; -	    else if (!strcmp("-v", argv[i])) -		visual_start = TRUE; -	    else if (!strcmp("-N", argv[i])) -		open_new_tab = TRUE; -#ifdef USE_COLOR -	    else if (!strcmp("-M", argv[i])) -		useColor = FALSE; -#endif				/* USE_COLOR */ -	    else if (!strcmp("-B", argv[i])) -		load_bookmark = TRUE; -	    else if (!strcmp("-bookmark", argv[i])) { -		if (++i >= argc) -		    usage(); -		BookmarkFile = argv[i]; -		if (BookmarkFile[0] != '~' && BookmarkFile[0] != '/') { -		    Str tmp = Strnew_charp(CurrentDir); -		    if (Strlastchar(tmp) != '/') -			Strcat_char(tmp, '/'); -		    Strcat_charp(tmp, BookmarkFile); -		    BookmarkFile = cleanupName(tmp->ptr); -		} -	    } -	    else if (!strcmp("-F", argv[i])) -		RenderFrame = TRUE; -	    else if (!strcmp("-W", argv[i])) { -		if (WrapDefault) -		    WrapDefault = FALSE; -		else -		    WrapDefault = TRUE; -	    } -	    else if (!strcmp("-dump", argv[i])) -		w3m_dump = DUMP_BUFFER; -	    else if (!strcmp("-dump_source", argv[i])) -		w3m_dump = DUMP_SOURCE; -	    else if (!strcmp("-dump_head", argv[i])) -		w3m_dump = DUMP_HEAD; -	    else if (!strcmp("-dump_both", argv[i])) -		w3m_dump = (DUMP_HEAD | DUMP_SOURCE); -	    else if (!strcmp("-dump_extra", argv[i])) -		w3m_dump = (DUMP_HEAD | DUMP_SOURCE | DUMP_EXTRA); -	    else if (!strcmp("-halfdump", argv[i])) -		w3m_dump = DUMP_HALFDUMP; -	    else if (!strcmp("-halfload", argv[i])) { -		w3m_dump = 0; -		w3m_halfload = TRUE; -		DefaultType = default_type = "text/html"; -	    } -	    else if (!strcmp("-backend", argv[i])) { -		w3m_backend = TRUE; -	    } -	    else if (!strcmp("-backend_batch", argv[i])) { -		w3m_backend = TRUE; -		if (++i >= argc) -		    usage(); -		if (!backend_batch_commands) -		    backend_batch_commands = newTextList(); -		pushText(backend_batch_commands, argv[i]); -	    } -	    else if (!strcmp("-cols", argv[i])) { -		if (++i >= argc) -		    usage(); -		COLS = atoi(argv[i]); -	    } -	    else if (!strcmp("-ppc", argv[i])) { -		double ppc; -		if (++i >= argc) -		    usage(); -		ppc = atof(argv[i]); -		if (ppc >= MINIMUM_PIXEL_PER_CHAR && -		    ppc <= MAXIMUM_PIXEL_PER_CHAR) { -		    pixel_per_char = ppc; -		    set_pixel_per_char = TRUE; -		} -	    } -#ifdef USE_IMAGE -	    else if (!strcmp("-ppl", argv[i])) { -		double ppc; -		if (++i >= argc) -		    usage(); -		ppc = atof(argv[i]); -		if (ppc >= MINIMUM_PIXEL_PER_CHAR && -		    ppc <= MAXIMUM_PIXEL_PER_CHAR * 2) { -		    pixel_per_line = ppc; -		    set_pixel_per_line = TRUE; -		} -	    } -#endif -	    else if (!strcmp("-num", argv[i])) -		showLineNum = TRUE; -	    else if (!strcmp("-no-proxy", argv[i])) -		use_proxy = FALSE; -#ifdef INET6 -	    else if (!strcmp("-4", argv[i]) || !strcmp("-6", argv[i])) -		set_param_option(Sprintf("dns_order=%c", argv[i][1])->ptr); -#endif -	    else if (!strcmp("-post", argv[i])) { -		if (++i >= argc) -		    usage(); -		post_file = argv[i]; -	    } -	    else if (!strcmp("-header", argv[i])) { -		Str hs; -		if (++i >= argc) -		    usage(); -		if ((hs = make_optional_header_string(argv[i])) != NULL) { -		    if (header_string == NULL) -			header_string = hs; -		    else -			Strcat(header_string, hs); -		} -		while (argv[i][0]) { -		    argv[i][0] = '\0'; -		    argv[i]++; -		} -	    } -#ifdef USE_MOUSE -	    else if (!strcmp("-no-mouse", argv[i])) { -		use_mouse = FALSE; -	    } -#endif				/* USE_MOUSE */ -#ifdef USE_COOKIE -	    else if (!strcmp("-no-cookie", argv[i])) { -		use_cookie = FALSE; -		accept_cookie = FALSE; -	    } -	    else if (!strcmp("-cookie", argv[i])) { -		use_cookie = TRUE; -		accept_cookie = TRUE; -	    } -#endif				/* USE_COOKIE */ -	    else if (!strcmp("-pauth", argv[i])) { -		if (++i >= argc) -		    usage(); -		proxy_auth_cookie = Strnew_m_charp("Basic ", -						   encodeB(argv[i])->ptr, -						   NULL); -		while (argv[i][0]) { -		    argv[i][0] = '\0'; -		    argv[i]++; -		} -	    } -#ifdef DEBIAN -	    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; -	    else if (!strcmp("-title", argv[i])) -		displayTitleTerm = getenv("TERM"); -	    else if (!strncmp("-title=", argv[i], 7)) -		displayTitleTerm = argv[i] + 7; -	    else if (!strcmp("-o", argv[i]) || -		     !strcmp("-show-option", argv[i])) { -		if (!strcmp("-show-option", argv[i]) || ++i >= argc || -		    !strcmp(argv[i], "?")) { -		    show_params(stdout); -		    exit(0); -		} -		if (!set_param_option(argv[i])) { -		    /* option set failed */ -		    /* FIXME: gettextize? */ -		    fprintf(stderr, "%s: bad option\n", argv[i]); -		    show_params_p = 1; -		    usage(); -		} -	    } -	    else if (!strcmp("-dummy", argv[i])) { -		/* do nothing */ -	    } -	    else if (!strcmp("-debug", argv[i])) { -		w3m_debug = TRUE; -	    } -	    else if (!strcmp("-reqlog",argv[i])) { -		w3m_reqlog=rcFile("request.log"); -	    } -	    else { -		usage(); -	    } -	} -	else if (*argv[i] == '+') { -	    line_str = argv[i] + 1; -	} -	else { -	    load_argv[load_argc++] = argv[i]; -	} -	i++; -    } - -#ifdef	__WATT32__ -    if (w3m_debug) -	dbug_init(); -    sock_init(); -#endif - -    FirstTab = NULL; -    LastTab = NULL; -    nTab = 0; -    CurrentTab = NULL; -    CurrentKey = -1; -    if (BookmarkFile == NULL) -	BookmarkFile = rcFile(BOOKMARK); - -    if (!isatty(1) && !w3m_dump) { -	/* redirected output */ -	w3m_dump = DUMP_BUFFER; -    } -    if (w3m_dump) { -	if (COLS == 0) -	    COLS = 80; -    } - -#ifdef USE_BINMODE_STREAM -    setmode(fileno(stdout), O_BINARY); -#endif -    if (!w3m_dump && !w3m_backend) { -	fmInit(); -#ifdef SIGWINCH -	mySignal(SIGWINCH, resize_hook); -#else				/* not SIGWINCH */ -	setlinescols(); -	setupscreen(); -#endif				/* not SIGWINCH */ -    } -#ifdef USE_IMAGE -    else if (w3m_halfdump && displayImage) -	activeImage = TRUE; -#endif - -    sync_with_option(); -#ifdef USE_COOKIE -    initCookie(); -#endif				/* USE_COOKIE */ -#ifdef USE_HISTORY -    if (UseHistory) -	loadHistory(URLHist); -#endif				/* not USE_HISTORY */ - -#ifdef USE_M17N -    wtf_init(DocumentCharset, DisplayCharset); -    /*  if (w3m_dump) -     *    WcOption.pre_conv = WC_TRUE;  -     */ -#endif - -    if (w3m_backend) -	backend(); - -    if (w3m_dump) -	mySignal(SIGINT, SIG_IGN); -#ifdef SIGCHLD -    mySignal(SIGCHLD, sig_chld); -#endif -#ifdef SIGPIPE -    mySignal(SIGPIPE, SigPipe); -#endif - -    orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc); -    err_msg = Strnew(); -    if (load_argc == 0) { -	/* no URL specified */ -	if (!isatty(0)) { -	    redin = newFileStream(fdopen(dup(0), "rb"), (void (*)())pclose); -	    newbuf = openGeneralPagerBuffer(redin); -	    dup2(1, 0); -	} -	else if (load_bookmark) { -	    newbuf = loadGeneralFile(BookmarkFile, NULL, NO_REFERER, 0, NULL); -	    if (newbuf == NULL) -		Strcat_charp(err_msg, "w3m: Can't load bookmark.\n"); -	} -	else if (visual_start) { -	    /* FIXME: gettextize? */ -	    Str s_page; -	    s_page = -		Strnew_charp -		("<title>W3M startup page</title><center><b>Welcome to "); -	    Strcat_charp(s_page, "<a href='http://w3m.sourceforge.net/'>"); -	    Strcat_m_charp(s_page, -			   "w3m</a>!<p><p>This is w3m version ", -			   w3m_version, -			   "<br>Written by <a href='mailto:aito@fw.ipsj.or.jp'>Akinori Ito</a>", -			   NULL); -#ifdef DEBIAN -	    Strcat_m_charp(s_page, -			   "<p>Debian package is maintained by <a href='mailto:ukai@debian.or.jp'>Fumitoshi UKAI</a>.", -			   "You can read <a href='file:///usr/share/doc/w3m/'>w3m documents on your local system</a>.", -			   NULL); -#endif				/* DEBIAN */ -	    newbuf = loadHTMLString(s_page); -	    if (newbuf == NULL) -		Strcat_charp(err_msg, "w3m: Can't load string.\n"); -	    else if (newbuf != NO_BUFFER) -		newbuf->bufferprop |= (BP_INTERNAL | BP_NO_URL); -	} -	else if ((p = getenv("HTTP_HOME")) != NULL || -		 (p = getenv("WWW_HOME")) != NULL) { -	    newbuf = loadGeneralFile(p, NULL, NO_REFERER, 0, NULL); -	    if (newbuf == NULL) -		Strcat(err_msg, Sprintf("w3m: Can't load %s.\n", p)); -	    else if (newbuf != NO_BUFFER) -		pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr); -	} -	else { -	    if (fmInitialized) -		fmTerm(); -	    usage(); -	} -	if (newbuf == NULL) { -	    if (fmInitialized) -		fmTerm(); -	    if (err_msg->length) -		fprintf(stderr, "%s", err_msg->ptr); -	    w3m_exit(2); -	} -	i = -1; -    } -    else { -	i = 0; -    } -    for (; i < load_argc; i++) { -	if (i >= 0) { -	    SearchHeader = search_header; -	    DefaultType = default_type; -	    if (w3m_dump == DUMP_HEAD) { -		request = New(FormList); -		request->method = FORM_METHOD_HEAD; -		newbuf = -		    loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0, -				    request); -	    } -	    else { -		if (post_file && i == 0) { -		    FILE *fp; -		    Str body; -		    if (!strcmp(post_file, "-")) -			fp = stdin; -		    else -			fp = fopen(post_file, "r"); -		    if (fp == NULL) { -			/* FIXME: gettextize? */ -			Strcat(err_msg, -			       Sprintf("w3m: Can't open %s.\n", post_file)); -			continue; -		    } -		    body = Strfgetall(fp); -		    if (fp != stdin) -			fclose(fp); -		    request = -			newFormList(NULL, "post", NULL, NULL, NULL, NULL, -				    NULL); -		    request->body = body->ptr; -		    request->boundary = NULL; -		    request->length = body->length; -		} -		else { -		    request = NULL; -		} -		newbuf = -		    loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0, -				    request); -	    } -	    if (newbuf == NULL) { -		/* FIXME: gettextize? */ -		Strcat(err_msg, -		       Sprintf("w3m: Can't load %s.\n", load_argv[i])); -		continue; -	    } -	    else if (newbuf == NO_BUFFER) -		continue; -	    switch (newbuf->real_scheme) { -	    case SCM_MAILTO: -		break; -	    case SCM_LOCAL: -	    case SCM_LOCAL_CGI: -		unshiftHist(LoadHist, conv_from_system(load_argv[i])); -	    default: -		pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr); -		break; -	    } -	} -	else if (newbuf == NO_BUFFER) -	    continue; -	if (newbuf->pagerSource || -	    (newbuf->real_scheme == SCM_LOCAL && newbuf->header_source && -	     newbuf->currentURL.file && strcmp(newbuf->currentURL.file, "-"))) -	    newbuf->search_header = search_header; -	if (CurrentTab == NULL) { -	    FirstTab = LastTab = CurrentTab = newTab(); -	    nTab = 1; -	    Firstbuf = Currentbuf = newbuf; -	} -	else if (open_new_tab) { -	    _newT(); -	    Currentbuf->nextBuffer = newbuf; -	    delBuffer(Currentbuf); -	} -	else { -	    Currentbuf->nextBuffer = newbuf; -	    Currentbuf = newbuf; -	} -	if (!w3m_dump || w3m_dump == DUMP_BUFFER) { -	    if (Currentbuf->frameset != NULL && RenderFrame) -		rFrame(); -	} -	if (w3m_dump) -	    do_dump(Currentbuf); -	else { -	    Currentbuf = newbuf; -#ifdef USE_BUFINFO -	    saveBufferInfo(); -#endif -	} -    } -    if (w3m_dump) { -	if (err_msg->length) -	    fprintf(stderr, "%s", err_msg->ptr); -#ifdef USE_COOKIE -	save_cookies(); -#endif				/* USE_COOKIE */ -	w3m_exit(0); -    } - -    if (add_download_list) { -	add_download_list = FALSE; -	CurrentTab = LastTab; -	if (!FirstTab) { -	    FirstTab = LastTab = CurrentTab = newTab(); -	    nTab = 1; -	} -	if (!Firstbuf || Firstbuf == NO_BUFFER) { -	    Firstbuf = Currentbuf = newBuffer(INIT_BUFFER_WIDTH); -	    Currentbuf->bufferprop = BP_INTERNAL | BP_NO_URL; -	    Currentbuf->buffername = DOWNLOAD_LIST_TITLE; -	} -	else -	    Currentbuf = Firstbuf; -	ldDL(); -    } -    else -	CurrentTab = FirstTab; -    if (!FirstTab || !Firstbuf || Firstbuf == NO_BUFFER) { -	if (newbuf == NO_BUFFER) { -	    if (fmInitialized) -		/* FIXME: gettextize? */ -		inputChar("Hit any key to quit w3m:"); -	} -	if (fmInitialized) -	    fmTerm(); -	if (err_msg->length) -	    fprintf(stderr, "%s", err_msg->ptr); -	if (newbuf == NO_BUFFER) { -#ifdef USE_COOKIE -	    save_cookies(); -#endif				/* USE_COOKIE */ -	    if (!err_msg->length) -		w3m_exit(0); -	} -	w3m_exit(2); -    } -    if (err_msg->length) -	disp_message_nsec(err_msg->ptr, FALSE, 1, TRUE, FALSE); - -    SearchHeader = FALSE; -    DefaultType = NULL; -#ifdef USE_M17N -    UseContentCharset = TRUE; -    WcOption.auto_detect = auto_detect; -#endif - -    Currentbuf = Firstbuf; -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -    if (line_str) { -	_goLine(line_str); -    } -    for (;;) { -	if (add_download_list) { -	    add_download_list = FALSE; -	    ldDL(); -	} -	if (Currentbuf->submit) { -	    Anchor *a = Currentbuf->submit; -	    Currentbuf->submit = NULL; -	    gotoLine(Currentbuf, a->start.line); -	    Currentbuf->pos = a->start.pos; -	    _followForm(TRUE); -	    continue; -	} -	/* event processing */ -	if (CurrentEvent) { -	    CurrentKey = -1; -	    CurrentKeyData = NULL; -	    CurrentCmdData = (char *)CurrentEvent->data; -	    w3mFuncList[CurrentEvent->cmd].func(); -	    CurrentCmdData = NULL; -	    CurrentEvent = CurrentEvent->next; -	    continue; -	} -	/* get keypress event */ -#ifdef USE_ALARM -	if (Currentbuf->event) { -	    if (Currentbuf->event->status != AL_UNSET) { -		CurrentAlarm = Currentbuf->event; -		if (CurrentAlarm->sec == 0) {	/* refresh (0sec) */ -		    Currentbuf->event = NULL; -		    CurrentKey = -1; -		    CurrentKeyData = NULL; -		    CurrentCmdData = (char *)CurrentAlarm->data; -		    w3mFuncList[CurrentAlarm->cmd].func(); -		    CurrentCmdData = NULL; -		    continue; -		} -	    } -	    else -		Currentbuf->event = NULL; -	} -	if (!Currentbuf->event) -	    CurrentAlarm = &DefaultAlarm; -#endif -#ifdef USE_MOUSE -	mouse_action.in_action = FALSE; -	if (use_mouse) -	    mouse_active(); -#endif				/* USE_MOUSE */ -#ifdef USE_ALARM -	if (CurrentAlarm->sec > 0) { -	    mySignal(SIGALRM, SigAlarm); -	    alarm(CurrentAlarm->sec); -	} -#endif -#ifdef SIGWINCH -	mySignal(SIGWINCH, resize_hook); -#endif -#ifdef USE_IMAGE -	if (activeImage && displayImage && Currentbuf->img && -	    !Currentbuf->image_loaded) { -	    do { -#ifdef SIGWINCH -		if (need_resize_screen) -		    resize_screen(); -#endif -		loadImage(Currentbuf, IMG_FLAG_NEXT); -	    } while (sleep_till_anykey(1, 0) <= 0); -	} -#ifdef SIGWINCH -	else -#endif -#endif -#ifdef SIGWINCH -	{ -	    do { -		if (need_resize_screen) -		    resize_screen(); -	    } while (sleep_till_anykey(1, 0) <= 0); -	} -#endif -	c = getch(); -#ifdef USE_ALARM -	if (CurrentAlarm->sec > 0) { -	    alarm(0); -	} -#endif -#ifdef USE_MOUSE -	if (use_mouse) -	    mouse_inactive(); -#endif				/* USE_MOUSE */ -	if (IS_ASCII(c)) {	/* Ascii */ -	    if(((prec_num && c == '0') || '1' <= c) && (c <= '9')) { -		prec_num = prec_num * 10 + (int)(c - '0'); -		if (prec_num > PREC_LIMIT) -	    	prec_num = PREC_LIMIT; -	    } -	    else { -		set_buffer_environ(Currentbuf); -		save_buffer_position(Currentbuf); -		keyPressEventProc((int)c); -		prec_num = 0; -	    } -	} -	prev_key = CurrentKey; -	CurrentKey = -1; -	CurrentKeyData = NULL; -    } -} - -static void -keyPressEventProc(int c) -{ -    CurrentKey = c; -    w3mFuncList[(int)GlobalKeymap[c]].func(); -} - -void -pushEvent(int cmd, void *data) -{ -    Event *event; - -    event = New(Event); -    event->cmd = cmd; -    event->data = data; -    event->next = NULL; -    if (CurrentEvent) -	LastEvent->next = event; -    else -	CurrentEvent = event; -    LastEvent = event; -} - -static void -dump_source(Buffer *buf) -{ -    FILE *f; -    char c; -    if (buf->sourcefile == NULL) -	return; -    f = fopen(buf->sourcefile, "r"); -    if (f == NULL) -	return; -    while (c = fgetc(f), !feof(f)) { -	putchar(c); -    } -    fclose(f); -} - -static void -dump_head(Buffer *buf) -{ -    TextListItem *ti; - -    if (buf->document_header == NULL) { -	if (w3m_dump & DUMP_EXTRA) -	    printf("\n"); -	return; -    } -    for (ti = buf->document_header->first; ti; ti = ti->next) { -#ifdef USE_M17N -	printf("%s", -	       wc_conv_strict(ti->ptr, InnerCharset, -			      buf->document_charset)->ptr); -#else -	printf("%s", ti->ptr); -#endif -    } -    puts(""); -} - -static void -dump_extra(Buffer *buf) -{ -    printf("W3m-current-url: %s\n", parsedURL2Str(&buf->currentURL)->ptr); -    if (buf->baseURL) -	printf("W3m-base-url: %s\n", parsedURL2Str(buf->baseURL)->ptr); -#ifdef USE_M17N -    printf("W3m-document-charset: %s\n", -	   wc_ces_to_charset(buf->document_charset)); -#endif -#ifdef USE_SSL -    if (buf->ssl_certificate) { -	Str tmp = Strnew(); -	char *p; -	for (p = buf->ssl_certificate; *p; p++) { -	    Strcat_char(tmp, *p); -	    if (*p == '\n') { -		for (; *(p + 1) == '\n'; p++) ; -		if (*(p + 1)) -		    Strcat_char(tmp, '\t'); -	    } -	} -	if (Strlastchar(tmp) != '\n') -	    Strcat_char(tmp, '\n'); -	printf("W3m-ssl-certificate: %s", tmp->ptr); -    } -#endif -} - -static void -do_dump(Buffer *buf) -{ -    MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; - -    prevtrap = mySignal(SIGINT, intTrap); -    if (SETJMP(IntReturn) != 0) { -	mySignal(SIGINT, prevtrap); -	return; -    } -    if (w3m_dump & DUMP_EXTRA) -	dump_extra(buf); -    if (w3m_dump & DUMP_HEAD) -	dump_head(buf); -    if (w3m_dump & DUMP_SOURCE) -	dump_source(buf); -    if (w3m_dump == DUMP_BUFFER) -	saveBuffer(buf, stdout, FALSE); -    mySignal(SIGINT, prevtrap); -} - -DEFUN(nulcmd, NOTHING NULL @@@, "Do nothing") -{				/* do nothing */ -} - -#ifdef __EMX__ -DEFUN(pcmap, PCMAP, "pcmap") -{ -    w3mFuncList[(int)PcKeymap[(int)getch()]].func(); -} -#else				/* not __EMX__ */ -void -pcmap(void) -{ -} -#endif - -static void -escKeyProc(int c, int esc, unsigned char *map) -{ -    if (CurrentKey >= 0 && CurrentKey & K_MULTI) { -	unsigned char **mmap; -	mmap = (unsigned char **)getKeyData(MULTI_KEY(CurrentKey)); -	if (!mmap) -	    return; -	switch (esc) { -	case K_ESCD: -	    map = mmap[3]; -	    break; -	case K_ESCB: -	    map = mmap[2]; -	    break; -	case K_ESC: -	    map = mmap[1]; -	    break; -	default: -	    map = mmap[0]; -	    break; -	} -	esc |= (CurrentKey & ~0xFFFF); -    } -    CurrentKey = esc | c; -    w3mFuncList[(int)map[c]].func(); -} - -DEFUN(escmap, ESCMAP, "ESC map") -{ -    char c; -    c = getch(); -    if (IS_ASCII(c)) -	escKeyProc((int)c, K_ESC, EscKeymap); -} - -DEFUN(escbmap, ESCBMAP, "ESC [ map") -{ -    char c; -    c = getch(); -    if (IS_DIGIT(c)) { -	escdmap(c); -	return; -    } -    if (IS_ASCII(c)) -	escKeyProc((int)c, K_ESCB, EscBKeymap); -} - -void -escdmap(char c) -{ -    int d; -    d = (int)c - (int)'0'; -    c = getch(); -    if (IS_DIGIT(c)) { -	d = d * 10 + (int)c - (int)'0'; -	c = getch(); -    } -    if (c == '~') -	escKeyProc((int)d, K_ESCD, EscDKeymap); -} - -DEFUN(multimap, MULTIMAP, "multimap") -{ -    char c; -    c = getch(); -    if (IS_ASCII(c)) { -	CurrentKey = K_MULTI | (CurrentKey << 16) | c; -	escKeyProc((int)c, 0, NULL); -    } -} - -void -tmpClearBuffer(Buffer *buf) -{ -    if (buf->pagerSource == NULL && writeBufferCache(buf) == 0) { -	buf->firstLine = NULL; -	buf->topLine = NULL; -	buf->currentLine = NULL; -	buf->lastLine = NULL; -    } -} - -static Str currentURL(void); - -#ifdef USE_BUFINFO -void -saveBufferInfo() -{ -    FILE *fp; - -    if (w3m_dump) -	return; -    if ((fp = fopen(rcFile("bufinfo"), "w")) == NULL) { -	return; -    } -    fprintf(fp, "%s\n", currentURL()->ptr); -    fclose(fp); -} -#endif - -static void -pushBuffer(Buffer *buf) -{ -    Buffer *b; - -#ifdef USE_IMAGE -    deleteImage(Currentbuf); -#endif -    if (clear_buffer) -	tmpClearBuffer(Currentbuf); -    if (Firstbuf == Currentbuf) { -	buf->nextBuffer = Firstbuf; -	Firstbuf = Currentbuf = buf; -    } -    else if ((b = prevBuffer(Firstbuf, Currentbuf)) != NULL) { -	b->nextBuffer = buf; -	buf->nextBuffer = Currentbuf; -	Currentbuf = buf; -    } -#ifdef USE_BUFINFO -    saveBufferInfo(); -#endif - -} - -static void -delBuffer(Buffer *buf) -{ -    if (buf == NULL) -	return; -    if (Currentbuf == buf) -	Currentbuf = buf->nextBuffer; -    Firstbuf = deleteBuffer(Firstbuf, buf); -    if (!Currentbuf) -	Currentbuf = Firstbuf; -} - -static void -repBuffer(Buffer *oldbuf, Buffer *buf) -{ -    Firstbuf = replaceBuffer(Firstbuf, oldbuf, buf); -    Currentbuf = buf; -} - - -MySignalHandler -intTrap(SIGNAL_ARG) -{				/* Interrupt catcher */ -    LONGJMP(IntReturn, 0); -    SIGNAL_RETURN; -} - -#ifdef SIGWINCH -static MySignalHandler -resize_hook(SIGNAL_ARG) -{ -    need_resize_screen = TRUE; -    mySignal(SIGWINCH, resize_hook); -    SIGNAL_RETURN; -} - -static void -resize_screen(void) -{ -    need_resize_screen = FALSE; -    setlinescols(); -    setupscreen(); -    if (CurrentTab) -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -} -#endif				/* SIGWINCH */ - -#ifdef SIGPIPE -static MySignalHandler -SigPipe(SIGNAL_ARG) -{ -#ifdef USE_MIGEMO -    init_migemo(); -#endif -    mySignal(SIGPIPE, SigPipe); -    SIGNAL_RETURN; -} -#endif - -/*  - * Command functions: These functions are called with a keystroke. - */ - -#define MAX(a, b)  ((a) > (b) ? (a) : (b)) -#define MIN(a, b)  ((a) < (b) ? (a) : (b)) - -static void -nscroll(int n, int mode) -{ -    Buffer *buf = Currentbuf; -    Line *top = buf->topLine, *cur = buf->currentLine; -    int lnum, tlnum, llnum, diff_n; - -    if (buf->firstLine == NULL) -	return; -    lnum = cur->linenumber; -    buf->topLine = lineSkip(buf, top, n, FALSE); -    if (buf->topLine == top) { -	lnum += n; -	if (lnum < buf->topLine->linenumber) -	    lnum = buf->topLine->linenumber; -	else if (lnum > buf->lastLine->linenumber) -	    lnum = buf->lastLine->linenumber; -    } -    else { -	tlnum = buf->topLine->linenumber; -	llnum = buf->topLine->linenumber + buf->LINES - 1; -	if (nextpage_topline) -	    diff_n = 0; -	else -	    diff_n = n - (tlnum - top->linenumber); -	if (lnum < tlnum) -	    lnum = tlnum + diff_n; -	if (lnum > llnum) -	    lnum = llnum + diff_n; -    } -    gotoLine(buf, lnum); -    arrangeLine(buf); -    if (n > 0) { -	if (buf->currentLine->bpos && -	    buf->currentLine->bwidth >= buf->currentColumn + buf->visualpos) -	    cursorDown(buf, 1); -	else { -	    while (buf->currentLine->next && buf->currentLine->next->bpos && -		   buf->currentLine->bwidth + buf->currentLine->width < -		   buf->currentColumn + buf->visualpos) -		cursorDown0(buf, 1); -	} -    } -    else { -	if (buf->currentLine->bwidth + buf->currentLine->width < -	    buf->currentColumn + buf->visualpos) -	    cursorUp(buf, 1); -	else { -	    while (buf->currentLine->prev && buf->currentLine->bpos && -		   buf->currentLine->bwidth >= -		   buf->currentColumn + buf->visualpos) -		cursorUp0(buf, 1); -	} -    } -    displayBuffer(buf, mode); -} - -/* Move page forward */ -DEFUN(pgFore, NEXT_PAGE, "Move to next page") -{ -    if (vi_prec_num) -	nscroll(searchKeyNum() * (Currentbuf->LINES - 1), B_NORMAL); -    else -	nscroll(prec_num ? searchKeyNum() : searchKeyNum() -		* (Currentbuf->LINES - 1), prec_num ? B_SCROLL : B_NORMAL); -} - -/* Move page backward */ -DEFUN(pgBack, PREV_PAGE, "Move to previous page") -{ -    if (vi_prec_num) -	nscroll(-searchKeyNum() * (Currentbuf->LINES - 1), B_NORMAL); -    else -	nscroll(-(prec_num ? searchKeyNum() : searchKeyNum() -		  * (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL); -} - -/* 1 line up */ -DEFUN(lup1, UP, "Scroll up one line") -{ -    nscroll(searchKeyNum(), B_SCROLL); -} - -/* 1 line down */ -DEFUN(ldown1, DOWN, "Scroll down one line") -{ -    nscroll(-searchKeyNum(), B_SCROLL); -} - -/* move cursor position to the center of screen */ -DEFUN(ctrCsrV, CENTER_V, "Move to the center column") -{ -    int offsety; -    if (Currentbuf->firstLine == NULL) -	return; -    offsety = Currentbuf->LINES / 2 - Currentbuf->cursorY; -    if (offsety != 0) { -#if 0 -	Currentbuf->currentLine = lineSkip(Currentbuf, -					   Currentbuf->currentLine, offsety, -					   FALSE); -#endif -	Currentbuf->topLine = -	    lineSkip(Currentbuf, Currentbuf->topLine, -offsety, FALSE); -	arrangeLine(Currentbuf); -	displayBuffer(Currentbuf, B_NORMAL); -    } -} - -DEFUN(ctrCsrH, CENTER_H, "Move to the center line") -{ -    int offsetx; -    if (Currentbuf->firstLine == NULL) -	return; -    offsetx = Currentbuf->cursorX - Currentbuf->COLS / 2; -    if (offsetx != 0) { -	columnSkip(Currentbuf, offsetx); -	arrangeCursor(Currentbuf); -	displayBuffer(Currentbuf, B_NORMAL); -    } -} - -/* Redraw screen */ -DEFUN(rdrwSc, REDRAW, "Redraw screen") -{ -    clear(); -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -static void -clear_mark(Line *l) -{ -    int pos; -    if (!l) -	return; -    for (pos = 0; pos < l->size; pos++) -	l->propBuf[pos] &= ~PE_MARK; -} - -/* search by regular expression */ -static int -srchcore(char *volatile str, int (*func) (Buffer *, char *)) -{ -    MySignalHandler(*prevtrap) (); -    volatile int i, result = SR_NOTFOUND; - -    if (str != NULL && str != SearchString) -	SearchString = str; -    if (SearchString == NULL || *SearchString == '\0') -	return SR_NOTFOUND; - -    str = conv_search_string(SearchString, DisplayCharset); -    prevtrap = mySignal(SIGINT, intTrap); -    crmode(); -    if (SETJMP(IntReturn) == 0) { -	for (i = 0; i < PREC_NUM; i++) { -	    result = func(Currentbuf, str); -	    if (i < PREC_NUM - 1 && result & SR_FOUND) -		clear_mark(Currentbuf->currentLine); -	} -    } -    mySignal(SIGINT, prevtrap); -    term_raw(); -    return result; -} - -static void -disp_srchresult(int result, char *prompt, char *str) -{ -    if (str == NULL) -	str = ""; -    if (result & SR_NOTFOUND) -	disp_message(Sprintf("Not found: %s", str)->ptr, TRUE); -    else if (result & SR_WRAPPED) -	disp_message(Sprintf("Search wrapped: %s", str)->ptr, TRUE); -    else if (show_srch_str) -	disp_message(Sprintf("%s%s", prompt, str)->ptr, TRUE); -} - -static int -dispincsrch(int ch, Str buf, Lineprop *prop) -{ -    static Buffer sbuf; -    static Line *currentLine; -    static int pos; -    char *str; -    int do_next_search = FALSE; - -    if (ch == 0 && buf == NULL) { -	SAVE_BUFPOSITION(&sbuf);	/* search starting point */ -	currentLine = sbuf.currentLine; -	pos = sbuf.pos; -	return -1; -    } - -    str = buf->ptr; -    switch (ch) { -    case 022:			/* C-r */ -	searchRoutine = backwardSearch; -	do_next_search = TRUE; -	break; -    case 023:			/* C-s */ -	searchRoutine = forwardSearch; -	do_next_search = TRUE; -	break; - -#ifdef USE_MIGEMO -    case 034: -	migemo_active = -migemo_active; -	goto done; -#endif - -    default: -	if (ch >= 0) -	    return ch;		/* use InputKeymap */ -    } - -    if (do_next_search) { -	if (*str) { -	    if (searchRoutine == forwardSearch) -		Currentbuf->pos += 1; -	    SAVE_BUFPOSITION(&sbuf); -	    if (srchcore(str, searchRoutine) == SR_NOTFOUND -		&& searchRoutine == forwardSearch) { -		Currentbuf->pos -= 1; -		SAVE_BUFPOSITION(&sbuf); -	    } -	    arrangeCursor(Currentbuf); -	    displayBuffer(Currentbuf, B_FORCE_REDRAW); -	    clear_mark(Currentbuf->currentLine); -	    return -1; -	} -	else -	    return 020;		/* _prev completion for C-s C-s */ -    } -    else if (*str) { -	RESTORE_BUFPOSITION(&sbuf); -	arrangeCursor(Currentbuf); -	srchcore(str, searchRoutine); -	arrangeCursor(Currentbuf); -	currentLine = Currentbuf->currentLine; -	pos = Currentbuf->pos; -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -    clear_mark(Currentbuf->currentLine); -#ifdef USE_MIGEMO -  done: -    while (*str++ != '\0') { -	if (migemo_active > 0) -	    *prop++ |= PE_UNDER; -	else -	    *prop++ &= ~PE_UNDER; -    } -#endif -    return -1; -} - -void -isrch(int (*func) (Buffer *, char *), char *prompt) -{ -    char *str; -    Buffer sbuf; -    SAVE_BUFPOSITION(&sbuf); -    dispincsrch(0, NULL, NULL);	/* initialize incremental search state */ - -    searchRoutine = func; -    str = inputLineHistSearch(prompt, NULL, IN_STRING, TextHist, dispincsrch); -    if (str == NULL) { -	RESTORE_BUFPOSITION(&sbuf); -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -void -srch(int (*func) (Buffer *, char *), char *prompt) -{ -    char *str; -    int result; -    int disp = FALSE; -    int pos; - -    str = searchKeyData(); -    if (str == NULL || *str == '\0') { -	str = inputStrHist(prompt, NULL, TextHist); -	if (str != NULL && *str == '\0') -	    str = SearchString; -	if (str == NULL) { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -	disp = TRUE; -    } -    pos = Currentbuf->pos; -    if (func == forwardSearch) -	Currentbuf->pos += 1; -    result = srchcore(str, func); -    if (result & SR_FOUND) -	clear_mark(Currentbuf->currentLine); -    else -	Currentbuf->pos = pos; -    displayBuffer(Currentbuf, B_NORMAL); -    if (disp) -	disp_srchresult(result, prompt, str); -    searchRoutine = func; -} - -/* Search regular expression forward */ - -DEFUN(srchfor, SEARCH SEARCH_FORE WHEREIS, "Search forward") -{ -    srch(forwardSearch, "Forward: "); -} - -DEFUN(isrchfor, ISEARCH, "Incremental search forward") -{ -    isrch(forwardSearch, "I-search: "); -} - -/* Search regular expression backward */ - -DEFUN(srchbak, SEARCH_BACK, "Search backward") -{ -    srch(backwardSearch, "Backward: "); -} - -DEFUN(isrchbak, ISEARCH_BACK, "Incremental search backward") -{ -    isrch(backwardSearch, "I-search backward: "); -} - -static void -srch_nxtprv(int reverse) -{ -    int result; -    /* *INDENT-OFF* */ -    static int (*routine[2]) (Buffer *, char *) = { -	forwardSearch, backwardSearch -    }; -    /* *INDENT-ON* */ - -    if (searchRoutine == NULL) { -	/* FIXME: gettextize? */ -	disp_message("No previous regular expression", TRUE); -	return; -    } -    if (reverse != 0) -	reverse = 1; -    if (searchRoutine == backwardSearch) -	reverse ^= 1; -    if (reverse == 0) -	Currentbuf->pos += 1; -    result = srchcore(SearchString, routine[reverse]); -    if (result & SR_FOUND) -	clear_mark(Currentbuf->currentLine); -    displayBuffer(Currentbuf, B_NORMAL); -    disp_srchresult(result, (reverse ? "Backward: " : "Forward: "), -		    SearchString); -} - -/* Search next matching */ -DEFUN(srchnxt, SEARCH_NEXT, "Search next regexp") -{ -    srch_nxtprv(0); -} - -/* Search previous matching */ -DEFUN(srchprv, SEARCH_PREV, "Search previous regexp") -{ -    srch_nxtprv(1); -} - -static void -shiftvisualpos(Buffer *buf, int shift) -{ -    Line *l = buf->currentLine; -    buf->visualpos -= shift; -    if (buf->visualpos - l->bwidth >= buf->COLS) -	buf->visualpos = l->bwidth + buf->COLS - 1; -    else if (buf->visualpos - l->bwidth < 0) -	buf->visualpos = l->bwidth; -    arrangeLine(buf); -    if (buf->visualpos - l->bwidth == -shift && buf->cursorX == 0) -	buf->visualpos = l->bwidth; -} - -/* Shift screen left */ -DEFUN(shiftl, SHIFT_LEFT, "Shift screen left") -{ -    int column; - -    if (Currentbuf->firstLine == NULL) -	return; -    column = Currentbuf->currentColumn; -    columnSkip(Currentbuf, searchKeyNum() * (-Currentbuf->COLS + 1) + 1); -    shiftvisualpos(Currentbuf, Currentbuf->currentColumn - column); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* Shift screen right */ -DEFUN(shiftr, SHIFT_RIGHT, "Shift screen right") -{ -    int column; - -    if (Currentbuf->firstLine == NULL) -	return; -    column = Currentbuf->currentColumn; -    columnSkip(Currentbuf, searchKeyNum() * (Currentbuf->COLS - 1) - 1); -    shiftvisualpos(Currentbuf, Currentbuf->currentColumn - column); -    displayBuffer(Currentbuf, B_NORMAL); -} - -DEFUN(col1R, RIGHT, "Shift screen one column right") -{ -    Buffer *buf = Currentbuf; -    Line *l = buf->currentLine; -    int j, column, n = searchKeyNum(); - -    if (l == NULL) -	return; -    for (j = 0; j < n; j++) { -	column = buf->currentColumn; -	columnSkip(Currentbuf, 1); -	if (column == buf->currentColumn) -	    break; -	shiftvisualpos(Currentbuf, 1); -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - -DEFUN(col1L, LEFT, "Shift screen one column") -{ -    Buffer *buf = Currentbuf; -    Line *l = buf->currentLine; -    int j, n = searchKeyNum(); - -    if (l == NULL) -	return; -    for (j = 0; j < n; j++) { -	if (buf->currentColumn == 0) -	    break; -	columnSkip(Currentbuf, -1); -	shiftvisualpos(Currentbuf, -1); -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - -DEFUN(setEnv, SETENV, "Set environment variable") -{ -    char *env; -    char *var, *value; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    env = searchKeyData(); -    if (env == NULL || *env == '\0' || strchr(env, '=') == NULL) { -	if (env != NULL && *env != '\0') -	    env = Sprintf("%s=", env)->ptr; -	env = inputStrHist("Set environ: ", env, TextHist); -	if (env == NULL || *env == '\0') { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -    } -    if ((value = strchr(env, '=')) != NULL && value > env) { -	var = allocStr(env, value - env); -	value++; -	set_environ(var, value); -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - -DEFUN(pipeBuf, PIPE_BUF, "Send rendered document to pipe") -{ -    Buffer *buf; -    char *cmd, *tmpf; -    FILE *f; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    cmd = searchKeyData(); -    if (cmd == NULL || *cmd == '\0') { -	/* FIXME: gettextize? */ -	cmd = inputLineHist("Pipe buffer to: ", "", IN_COMMAND, ShellHist); -    } -    if (cmd != NULL) -	cmd = conv_to_system(cmd); -    if (cmd == NULL || *cmd == '\0') { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    tmpf = tmpfname(TMPF_DFL, NULL)->ptr; -    f = fopen(tmpf, "w"); -    if (f == NULL) { -	/* FIXME: gettextize? */ -	disp_message(Sprintf("Can't save buffer to %s", cmd)->ptr, TRUE); -	return; -    } -    saveBuffer(Currentbuf, f, TRUE); -    fclose(f); -    buf = getpipe(myExtCommand(cmd, shell_quote(tmpf), TRUE)->ptr); -    if (buf == NULL) { -	disp_message("Execution failed", TRUE); -	return; -    } -    else { -	buf->filename = cmd; -	buf->buffername = Sprintf("%s %s", PIPEBUFFERNAME, -				  conv_from_system(cmd))->ptr; -	buf->bufferprop |= (BP_INTERNAL | BP_NO_URL); -	if (buf->type == NULL) -	    buf->type = "text/plain"; -	buf->currentURL.file = "-"; -	pushBuffer(buf); -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* Execute shell command and read output ac pipe. */ -DEFUN(pipesh, PIPE_SHELL, "Execute shell command and browse") -{ -    Buffer *buf; -    char *cmd; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    cmd = searchKeyData(); -    if (cmd == NULL || *cmd == '\0') { -	cmd = inputLineHist("(read shell[pipe])!", "", IN_COMMAND, ShellHist); -    } -    if (cmd != NULL) -	cmd = conv_to_system(cmd); -    if (cmd == NULL || *cmd == '\0') { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    buf = getpipe(cmd); -    if (buf == NULL) { -	disp_message("Execution failed", TRUE); -	return; -    } -    else { -	buf->bufferprop |= (BP_INTERNAL | BP_NO_URL); -	if (buf->type == NULL) -	    buf->type = "text/plain"; -	pushBuffer(buf); -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* Execute shell command and load entire output to buffer */ -DEFUN(readsh, READ_SHELL, "Execute shell command and load") -{ -    Buffer *buf; -    MySignalHandler(*prevtrap) (); -    char *cmd; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    cmd = searchKeyData(); -    if (cmd == NULL || *cmd == '\0') { -	cmd = inputLineHist("(read shell)!", "", IN_COMMAND, ShellHist); -    } -    if (cmd != NULL) -	cmd = conv_to_system(cmd); -    if (cmd == NULL || *cmd == '\0') { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    prevtrap = mySignal(SIGINT, intTrap); -    crmode(); -    buf = getshell(cmd); -    mySignal(SIGINT, prevtrap); -    term_raw(); -    if (buf == NULL) { -	/* FIXME: gettextize? */ -	disp_message("Execution failed", TRUE); -	return; -    } -    else { -	buf->bufferprop |= (BP_INTERNAL | BP_NO_URL); -	if (buf->type == NULL) -	    buf->type = "text/plain"; -	pushBuffer(buf); -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* Execute shell command */ -DEFUN(execsh, EXEC_SHELL SHELL, "Execute shell command") -{ -    char *cmd; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    cmd = searchKeyData(); -    if (cmd == NULL || *cmd == '\0') { -	cmd = inputLineHist("(exec shell)!", "", IN_COMMAND, ShellHist); -    } -    if (cmd != NULL) -	cmd = conv_to_system(cmd); -    if (cmd != NULL && *cmd != '\0') { -	fmTerm(); -	printf("\n"); -	system(cmd); -	/* FIXME: gettextize? */ -	printf("\n[Hit any key]"); -	fflush(stdout); -	fmInit(); -	getch(); -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* Load file */ -DEFUN(ldfile, LOAD, "Load local file") -{ -    char *fn; - -    fn = searchKeyData(); -    if (fn == NULL || *fn == '\0') { -	/* FIXME: gettextize? */ -	fn = inputFilenameHist("(Load)Filename? ", NULL, LoadHist); -    } -    if (fn != NULL) -	fn = conv_to_system(fn); -    if (fn == NULL || *fn == '\0') { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    cmd_loadfile(fn); -} - -/* Load help file */ -DEFUN(ldhelp, HELP, "View help") -{ -#ifdef USE_HELP_CGI -    char *lang; -    int n; -    Str tmp; - -    lang = AcceptLang; -    n = strcspn(lang, ";, \t"); -    tmp = Sprintf("file:///$LIB/" HELP_CGI CGI_EXTENSION "?version=%s&lang=%s", -		  Str_form_quote(Strnew_charp(w3m_version))->ptr, -		  Str_form_quote(Strnew_charp_n(lang, n))->ptr); -    cmd_loadURL(tmp->ptr, NULL, NO_REFERER, NULL); -#else -    cmd_loadURL(helpFile(HELP_FILE), NULL, NO_REFERER, NULL); -#endif -} - -static void -cmd_loadfile(char *fn) -{ -    Buffer *buf; - -    buf = loadGeneralFile(file_to_url(fn), NULL, NO_REFERER, 0, NULL); -    if (buf == NULL) { -	/* FIXME: gettextize? */ -	char *emsg = Sprintf("%s not found", conv_from_system(fn))->ptr; -	disp_err_message(emsg, FALSE); -    } -    else if (buf != NO_BUFFER) { -	pushBuffer(buf); -	if (RenderFrame && Currentbuf->frameset != NULL) -	    rFrame(); -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* Move cursor left */ -static void -_movL(int n) -{ -    int i, m = searchKeyNum(); -    if (Currentbuf->firstLine == NULL) -	return; -    for (i = 0; i < m; i++) -	cursorLeft(Currentbuf, n); -    displayBuffer(Currentbuf, B_NORMAL); -} - -DEFUN(movL, MOVE_LEFT, -      "Move cursor left (a half screen shift at the left edge)") -{ -    _movL(Currentbuf->COLS / 2); -} - -DEFUN(movL1, MOVE_LEFT1, "Move cursor left (1 columns shift at the left edge)") -{ -    _movL(1); -} - -/* Move cursor downward */ -static void -_movD(int n) -{ -    int i, m = searchKeyNum(); -    if (Currentbuf->firstLine == NULL) -	return; -    for (i = 0; i < m; i++) -	cursorDown(Currentbuf, n); -    displayBuffer(Currentbuf, B_NORMAL); -} - -DEFUN(movD, MOVE_DOWN, -      "Move cursor down (a half screen scroll at the end of screen)") -{ -    _movD((Currentbuf->LINES + 1) / 2); -} - -DEFUN(movD1, MOVE_DOWN1, -      "Move cursor down (1 line scroll at the end of screen)") -{ -    _movD(1); -} - -/* move cursor upward */ -static void -_movU(int n) -{ -    int i, m = searchKeyNum(); -    if (Currentbuf->firstLine == NULL) -	return; -    for (i = 0; i < m; i++) -	cursorUp(Currentbuf, n); -    displayBuffer(Currentbuf, B_NORMAL); -} - -DEFUN(movU, MOVE_UP, -      "Move cursor up (a half screen scroll at the top of screen)") -{ -    _movU((Currentbuf->LINES + 1) / 2); -} - -DEFUN(movU1, MOVE_UP1, "Move cursor up (1 line scrol at the top of screen)") -{ -    _movU(1); -} - -/* Move cursor right */ -static void -_movR(int n) -{ -    int i, m = searchKeyNum(); -    if (Currentbuf->firstLine == NULL) -	return; -    for (i = 0; i < m; i++) -	cursorRight(Currentbuf, n); -    displayBuffer(Currentbuf, B_NORMAL); -} - -DEFUN(movR, MOVE_RIGHT, -      "Move cursor right (a half screen shift at the right edge)") -{ -    _movR(Currentbuf->COLS / 2); -} - -DEFUN(movR1, MOVE_RIGHT1, -      "Move cursor right (1 columns shift at the right edge)") -{ -    _movR(1); -} - -/* movLW, movRW */ -/*  - * From: Takashi Nishimoto <g96p0935@mse.waseda.ac.jp> Date: Mon, 14 Jun - * 1999 09:29:56 +0900  - */ -#define IS_WORD_CHAR(c,p) (IS_ALNUM(c) && CharType(p) == PC_ASCII) - -static int -prev_nonnull_line(Line *line) -{ -    Line *l; - -    for (l = line; l != NULL && l->len == 0; l = l->prev) ; -    if (l == NULL || l->len == 0) -	return -1; - -    Currentbuf->currentLine = l; -    if (l != line) -	Currentbuf->pos = Currentbuf->currentLine->len; -    return 0; -} - -DEFUN(movLW, PREV_WORD, "Move to previous word") -{ -    char *lb; -    Lineprop *pb; -    Line *pline; -    int ppos; -    int i, n = searchKeyNum(); - -    if (Currentbuf->firstLine == NULL) -	return; - -    for (i = 0; i < n; i++) { -	pline = Currentbuf->currentLine; -	ppos = Currentbuf->pos; - -	if (prev_nonnull_line(Currentbuf->currentLine) < 0) -	    goto end; - -	while (1) { -	    lb = Currentbuf->currentLine->lineBuf; -	    pb = Currentbuf->currentLine->propBuf; -	    while (Currentbuf->pos > 0 && -		   !IS_WORD_CHAR(lb[Currentbuf->pos - 1], -				 pb[Currentbuf->pos - 1])) { -		Currentbuf->pos--; -	    } -	    if (Currentbuf->pos > 0) -		break; -	    if (prev_nonnull_line(Currentbuf->currentLine->prev) < 0) { -		Currentbuf->currentLine = pline; -		Currentbuf->pos = ppos; -		goto end; -	    } -	    Currentbuf->pos = Currentbuf->currentLine->len; -	} - -	lb = Currentbuf->currentLine->lineBuf; -	pb = Currentbuf->currentLine->propBuf; -	while (Currentbuf->pos > 0 && -	       IS_WORD_CHAR(lb[Currentbuf->pos - 1], -			    pb[Currentbuf->pos - 1])) { -	    Currentbuf->pos--; -	} -    } -  end: -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -static int -next_nonnull_line(Line *line) -{ -    Line *l; - -    for (l = line; l != NULL && l->len == 0; l = l->next) ; - -    if (l == NULL || l->len == 0) -	return -1; - -    Currentbuf->currentLine = l; -    if (l != line) -	Currentbuf->pos = 0; -    return 0; -} - -DEFUN(movRW, NEXT_WORD, "Move to next word") -{ -    char *lb; -    Lineprop *pb; -    Line *pline; -    int ppos; -    int i, n = searchKeyNum(); - -    if (Currentbuf->firstLine == NULL) -	return; - -    for (i = 0; i < n; i++) { -	pline = Currentbuf->currentLine; -	ppos = Currentbuf->pos; - -	if (next_nonnull_line(Currentbuf->currentLine) < 0) -	    goto end; - -	lb = Currentbuf->currentLine->lineBuf; -	pb = Currentbuf->currentLine->propBuf; - -	while (lb[Currentbuf->pos] && -	       IS_WORD_CHAR(lb[Currentbuf->pos], pb[Currentbuf->pos])) -	    Currentbuf->pos++; - -	while (1) { -	    while (lb[Currentbuf->pos] && -		   !IS_WORD_CHAR(lb[Currentbuf->pos], pb[Currentbuf->pos])) -		Currentbuf->pos++; -	    if (lb[Currentbuf->pos]) -		break; -	    if (next_nonnull_line(Currentbuf->currentLine->next) < 0) { -		Currentbuf->currentLine = pline; -		Currentbuf->pos = ppos; -		goto end; -	    } -	    Currentbuf->pos = 0; -	    lb = Currentbuf->currentLine->lineBuf; -	    pb = Currentbuf->currentLine->propBuf; -	} -    } -  end: -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -static void -_quitfm(int confirm) -{ -    char *ans = "y"; - -    if (checkDownloadList()) -	/* FIXME: gettextize? */ -	ans = inputChar("Download process retains. " -			"Do you want to exit w3m? (y/n)"); -    else if (confirm) -	/* FIXME: gettextize? */ -	ans = inputChar("Do you want to exit w3m? (y/n)"); -    if (!(ans && TOLOWER(*ans) == 'y')) { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } - -    term_title("");		/* XXX */ -#ifdef USE_IMAGE -    if (activeImage) -	termImage(); -#endif -    fmTerm(); -#ifdef USE_COOKIE -    save_cookies(); -#endif				/* USE_COOKIE */ -#ifdef USE_HISTORY -    if (UseHistory && SaveURLHist) -	saveHistory(URLHist, URLHistSize); -#endif				/* USE_HISTORY */ -    w3m_exit(0); -} - -/* Quit */ -DEFUN(quitfm, ABORT EXIT, "Quit w3m without confirmation") -{ -    _quitfm(FALSE); -} - -/* Question and Quit */ -DEFUN(qquitfm, QUIT, "Quit w3m") -{ -    _quitfm(confirm_on_quit); -} - -/* Select buffer */ -DEFUN(selBuf, SELECT, "Go to buffer selection panel") -{ -    Buffer *buf; -    int ok; -    char cmd; - -    ok = FALSE; -    do { -	buf = selectBuffer(Firstbuf, Currentbuf, &cmd); -	switch (cmd) { -	case 'B': -	    ok = TRUE; -	    break; -	case '\n': -	case ' ': -	    Currentbuf = buf; -	    ok = TRUE; -	    break; -	case 'D': -	    delBuffer(buf); -	    if (Firstbuf == NULL) { -		/* No more buffer */ -		Firstbuf = nullBuffer(); -		Currentbuf = Firstbuf; -	    } -	    break; -	case 'q': -	    qquitfm(); -	    break; -	case 'Q': -	    quitfm(); -	    break; -	} -    } while (!ok); - -    for (buf = Firstbuf; buf != NULL; buf = buf->nextBuffer) { -	if (buf == Currentbuf) -	    continue; -#ifdef USE_IMAGE -	deleteImage(buf); -#endif -	if (clear_buffer) -	    tmpClearBuffer(buf); -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* Suspend (on BSD), or run interactive shell (on SysV) */ -DEFUN(susp, INTERRUPT SUSPEND, "Stop loading document") -{ -#ifndef SIGSTOP -    char *shell; -#endif				/* not SIGSTOP */ -    move(LASTLINE, 0); -    clrtoeolx(); -    refresh(); -    fmTerm(); -#ifndef SIGSTOP -    shell = getenv("SHELL"); -    if (shell == NULL) -	shell = "/bin/sh"; -    system(shell); -#else				/* SIGSTOP */ -    kill((pid_t) 0, SIGSTOP); -#endif				/* SIGSTOP */ -    fmInit(); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* Go to specified line */ -static void -_goLine(char *l) -{ -    if (l == NULL || *l == '\0' || Currentbuf->currentLine == NULL) { -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -	return; -    } -    Currentbuf->pos = 0; -    if (((*l == '^') || (*l == '$')) && prec_num) { -	gotoRealLine(Currentbuf, prec_num); -    } -    else if (*l == '^') { -	Currentbuf->topLine = Currentbuf->currentLine = Currentbuf->firstLine; -    } -    else if (*l == '$') { -	Currentbuf->topLine = -	    lineSkip(Currentbuf, Currentbuf->lastLine, -		     -(Currentbuf->LINES + 1) / 2, TRUE); -	Currentbuf->currentLine = Currentbuf->lastLine; -    } -    else -	gotoRealLine(Currentbuf, atoi(l)); -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(goLine, GOTO_LINE, "Go to specified line") -{ - -    char *str = searchKeyData(); -    if (prec_num) -	_goLine("^"); -    else if (str) -	_goLine(str); -    else -	/* FIXME: gettextize? */ -	_goLine(inputStr("Goto line: ", "")); -} - - -DEFUN(goLineF, BEGIN, "Go to the first line") -{ -    _goLine("^"); -} - -DEFUN(goLineL, END, "Go to the last line") -{ -    _goLine("$"); -} - -/* Go to the beginning of the line */ -DEFUN(linbeg, LINE_BEGIN, "Go to the beginning of line") -{ -    if (Currentbuf->firstLine == NULL) -	return; -    while (Currentbuf->currentLine->prev && Currentbuf->currentLine->bpos) -	cursorUp0(Currentbuf, 1); -    Currentbuf->pos = 0; -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* Go to the bottom of the line */ -DEFUN(linend, LINE_END, "Go to the end of line") -{ -    if (Currentbuf->firstLine == NULL) -	return; -    while (Currentbuf->currentLine->next -	   && Currentbuf->currentLine->next->bpos) -	cursorDown0(Currentbuf, 1); -    Currentbuf->pos = Currentbuf->currentLine->len - 1; -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -static int -cur_real_linenumber(Buffer *buf) -{ -    Line *l, *cur = buf->currentLine; -    int n; - -    if (!cur) -	return 1; -    n = cur->real_linenumber ? cur->real_linenumber : 1; -    for (l = buf->firstLine; l && l != cur && l->real_linenumber == 0; l = l->next) {	/* header */ -	if (l->bpos == 0) -	    n++; -    } -    return n; -} - -/* Run editor on the current buffer */ -DEFUN(editBf, EDIT, "Edit current document") -{ -    char *fn = Currentbuf->filename; -    Str cmd; - -    if (fn == NULL || Currentbuf->pagerSource != NULL ||	/* Behaving as a pager */ -	(Currentbuf->type == NULL && Currentbuf->edit == NULL) ||	/* Reading shell */ -	Currentbuf->real_scheme != SCM_LOCAL || !strcmp(Currentbuf->currentURL.file, "-") ||	/* file is std input  */ -	Currentbuf->bufferprop & BP_FRAME) {	/* Frame */ -	disp_err_message("Can't edit other than local file", TRUE); -	return; -    } -    if (Currentbuf->edit) -	cmd = unquote_mailcap(Currentbuf->edit, Currentbuf->real_type, fn, -			      checkHeader(Currentbuf, "Content-Type:"), NULL); -    else -	cmd = myEditor(Editor, shell_quote(fn), -		       cur_real_linenumber(Currentbuf)); -    fmTerm(); -    system(cmd->ptr); -    fmInit(); - -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -    reload(); -} - -/* Run editor on the current screen */ -DEFUN(editScr, EDIT_SCREEN, "Edit currently rendered document") -{ -    char *tmpf; -    FILE *f; - -    tmpf = tmpfname(TMPF_DFL, NULL)->ptr; -    f = fopen(tmpf, "w"); -    if (f == NULL) { -	/* FIXME: gettextize? */ -	disp_err_message(Sprintf("Can't open %s", tmpf)->ptr, TRUE); -	return; -    } -    saveBuffer(Currentbuf, f, TRUE); -    fclose(f); -    fmTerm(); -    system(myEditor(Editor, shell_quote(tmpf), -		    cur_real_linenumber(Currentbuf))->ptr); -    fmInit(); -    unlink(tmpf); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -#ifdef USE_MARK - -/* Set / unset mark */ -DEFUN(_mark, MARK, "Set/unset mark") -{ -    Line *l; -    if (!use_mark) -	return; -    if (Currentbuf->firstLine == NULL) -	return; -    l = Currentbuf->currentLine; -    l->propBuf[Currentbuf->pos] ^= PE_MARK; -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* Go to next mark */ -DEFUN(nextMk, NEXT_MARK, "Move to next word") -{ -    Line *l; -    int i; - -    if (!use_mark) -	return; -    if (Currentbuf->firstLine == NULL) -	return; -    i = Currentbuf->pos + 1; -    l = Currentbuf->currentLine; -    if (i >= l->len) { -	i = 0; -	l = l->next; -    } -    while (l != NULL) { -	for (; i < l->len; i++) { -	    if (l->propBuf[i] & PE_MARK) { -		Currentbuf->currentLine = l; -		Currentbuf->pos = i; -		arrangeCursor(Currentbuf); -		displayBuffer(Currentbuf, B_NORMAL); -		return; -	    } -	} -	l = l->next; -	i = 0; -    } -    /* FIXME: gettextize? */ -    disp_message("No mark exist after here", TRUE); -} - -/* Go to previous mark */ -DEFUN(prevMk, PREV_MARK, "Move to previous mark") -{ -    Line *l; -    int i; - -    if (!use_mark) -	return; -    if (Currentbuf->firstLine == NULL) -	return; -    i = Currentbuf->pos - 1; -    l = Currentbuf->currentLine; -    if (i < 0) { -	l = l->prev; -	if (l != NULL) -	    i = l->len - 1; -    } -    while (l != NULL) { -	for (; i >= 0; i--) { -	    if (l->propBuf[i] & PE_MARK) { -		Currentbuf->currentLine = l; -		Currentbuf->pos = i; -		arrangeCursor(Currentbuf); -		displayBuffer(Currentbuf, B_NORMAL); -		return; -	    } -	} -	l = l->prev; -	if (l != NULL) -	    i = l->len - 1; -    } -    /* FIXME: gettextize? */ -    disp_message("No mark exist before here", TRUE); -} - -/* Mark place to which the regular expression matches */ -DEFUN(reMark, REG_MARK, "Set mark using regexp") -{ -    Line *l; -    char *str; -    char *p, *p1, *p2; - -    if (!use_mark) -	return; -    str = searchKeyData(); -    if (str == NULL || *str == '\0') { -	str = inputStrHist("(Mark)Regexp: ", MarkString, TextHist); -	if (str == NULL || *str == '\0') { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -    } -    str = conv_search_string(str, DisplayCharset); -    if ((str = regexCompile(str, 1)) != NULL) { -	disp_message(str, TRUE); -	return; -    } -    MarkString = str; -    for (l = Currentbuf->firstLine; l != NULL; l = l->next) { -	p = l->lineBuf; -	for (;;) { -	    if (regexMatch(p, &l->lineBuf[l->len] - p, p == l->lineBuf) == 1) { -		matchedPosition(&p1, &p2); -		l->propBuf[p1 - l->lineBuf] |= PE_MARK; -		p = p2; -	    } -	    else -		break; -	} -    } - -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} -#endif				/* USE_MARK */ - -static Buffer * -loadNormalBuf(Buffer *buf, int renderframe) -{ -    pushBuffer(buf); -    if (renderframe && RenderFrame && Currentbuf->frameset != NULL) -	rFrame(); -    return buf; -} - -static Buffer * -loadLink(char *url, char *target, char *referer, FormList *request) -{ -    Buffer *buf, *nfbuf; -    union frameset_element *f_element = NULL; -    int flag = 0; -    ParsedURL *base, pu; - -    message(Sprintf("loading %s", url)->ptr, 0, 0); -    refresh(); - -    base = baseURL(Currentbuf); -    if (base == NULL || -	base->scheme == SCM_LOCAL || base->scheme == SCM_LOCAL_CGI) -	referer = NO_REFERER; -    if (referer == NULL) -	referer = parsedURL2Str(&Currentbuf->currentURL)->ptr; -    buf = loadGeneralFile(url, baseURL(Currentbuf), referer, flag, request); -    if (buf == NULL) { -	char *emsg = Sprintf("Can't load %s", url)->ptr; -	disp_err_message(emsg, FALSE); -	return NULL; -    } - -    parseURL2(url, &pu, base); -    pushHashHist(URLHist, parsedURL2Str(&pu)->ptr); - -    if (buf == NO_BUFFER) { -	return NULL; -    } -    if (!on_target)		/* open link as an indivisual page */ -	return loadNormalBuf(buf, TRUE); - -    if (do_download)		/* download (thus no need to render frame) */ -	return loadNormalBuf(buf, FALSE); - -    if (target == NULL ||	/* no target specified (that means this page is not a frame page) */ -	!strcmp(target, "_top") ||	/* this link is specified to be opened as an indivisual * page */ -	!(Currentbuf->bufferprop & BP_FRAME)	/* This page is not a frame page */ -	) { -	return loadNormalBuf(buf, TRUE); -    } -    nfbuf = Currentbuf->linkBuffer[LB_N_FRAME]; -    if (nfbuf == NULL) { -	/* original page (that contains <frameset> tag) doesn't exist */ -	return loadNormalBuf(buf, TRUE); -    } - -    f_element = search_frame(nfbuf->frameset, target); -    if (f_element == NULL) { -	/* specified target doesn't exist in this frameset */ -	return loadNormalBuf(buf, TRUE); -    } - -    /* frame page */ - -    /* stack current frameset */ -    pushFrameTree(&(nfbuf->frameQ), copyFrameSet(nfbuf->frameset), Currentbuf); -    /* delete frame view buffer */ -    delBuffer(Currentbuf); -    Currentbuf = nfbuf; -    /* nfbuf->frameset = copyFrameSet(nfbuf->frameset); */ -    resetFrameElement(f_element, buf, referer, request); -    discardBuffer(buf); -    rFrame(); -    { -	Anchor *al = NULL; -	char *label = pu.label; - -	if (label && f_element->element->attr == F_BODY) { -	    al = searchAnchor(f_element->body->nameList, label); -	} -	if (!al) { -	    label = Strnew_m_charp("_", target, NULL)->ptr; -	    al = searchURLLabel(Currentbuf, label); -	} -	if (al) { -	    gotoLine(Currentbuf, al->start.line); -	    if (label_topline) -		Currentbuf->topLine = lineSkip(Currentbuf, Currentbuf->topLine, -					       Currentbuf->currentLine-> -					       linenumber - -					       Currentbuf->topLine->linenumber, -					       FALSE); -	    Currentbuf->pos = al->start.pos; -	    arrangeCursor(Currentbuf); -	} -    } -    displayBuffer(Currentbuf, B_NORMAL); -    return buf; -} - -static void -gotoLabel(char *label) -{ -    Buffer *buf; -    Anchor *al; -    int i; - -    al = searchURLLabel(Currentbuf, label); -    if (al == NULL) { -	/* FIXME: gettextize? */ -	disp_message(Sprintf("%s is not found", label)->ptr, TRUE); -	return; -    } -    buf = newBuffer(Currentbuf->width); -    copyBuffer(buf, Currentbuf); -    for (i = 0; i < MAX_LB; i++) -	buf->linkBuffer[i] = NULL; -    buf->currentURL.label = allocStr(label, -1); -    pushHashHist(URLHist, parsedURL2Str(&buf->currentURL)->ptr); -    (*buf->clone)++; -    pushBuffer(buf); -    gotoLine(Currentbuf, al->start.line); -    if (label_topline) -	Currentbuf->topLine = lineSkip(Currentbuf, Currentbuf->topLine, -				       Currentbuf->currentLine->linenumber -				       - Currentbuf->topLine->linenumber, -				       FALSE); -    Currentbuf->pos = al->start.pos; -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -    return; -} - -/* follow HREF link */ -DEFUN(followA, GOTO_LINK, "Go to current link") -{ -    Line *l; -    Anchor *a; -    ParsedURL u; -#ifdef USE_IMAGE -    int x = 0, y = 0, map = 0; -#endif -    char *url; - -    if (Currentbuf->firstLine == NULL) -	return; -    l = Currentbuf->currentLine; - -#ifdef USE_IMAGE -    a = retrieveCurrentImg(Currentbuf); -    if (a && a->image && a->image->map) { -	_followForm(FALSE); -	return; -    } -    if (a && a->image && a->image->ismap) { -	getMapXY(Currentbuf, a, &x, &y); -	map = 1; -    } -#else -    a = retrieveCurrentMap(Currentbuf); -    if (a) { -	_followForm(FALSE); -	return; -    } -#endif -    a = retrieveCurrentAnchor(Currentbuf); -    if (a == NULL) { -	_followForm(FALSE); -	return; -    } -    if (*a->url == '#') {	/* index within this buffer */ -	gotoLabel(a->url + 1); -	return; -    } -    parseURL2(a->url, &u, baseURL(Currentbuf)); -    if (Strcmp(parsedURL2Str(&u), parsedURL2Str(&Currentbuf->currentURL)) == 0) { -	/* index within this buffer */ -	if (u.label) { -	    gotoLabel(u.label); -	    return; -	} -    } -    if (!strncasecmp(a->url, "mailto:", 7) -#ifdef USE_W3MMAILER -	&& non_null(Mailer) && strchr(a->url, '?') == NULL -#endif -	) { -	/* invoke external mailer */ -	Str to = Strnew_charp(a->url + 7); -#ifndef USE_W3MMAILER -	char *pos; -	if (!non_null(Mailer)) { -	    /* FIXME: gettextize? */ -	    disp_err_message("no mailer is specified", TRUE); -	    return; -	} -	if ((pos = strchr(to->ptr, '?')) != NULL) -	    Strtruncate(to, pos - to->ptr); -#endif -	fmTerm(); -	system(myExtCommand(Mailer, shell_quote(file_unquote(to->ptr)), -			    FALSE)->ptr); -	fmInit(); -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -	pushHashHist(URLHist, a->url); -	return; -    } -#if 0 -    else if (!strncasecmp(a->url, "news:", 5) && strchr(a->url, '@') == NULL) { -	/* news:newsgroup is not supported */ -	/* FIXME: gettextize? */ -	disp_err_message("news:newsgroup_name is not supported", TRUE); -	return; -    } -#endif				/* USE_NNTP */ -    url = a->url; -#ifdef USE_IMAGE -    if (map) -	url = Sprintf("%s?%d,%d", a->url, x, y)->ptr; -#endif - -    if (check_target && open_tab_blank && a->target && -	(!strcasecmp(a->target, "_new") || !strcasecmp(a->target, "_blank"))) { -	Buffer *buf; - -	_newT(); -	buf = Currentbuf; -	loadLink(url, a->target, a->referer, NULL); -	if (buf != Currentbuf) -	    delBuffer(buf); -	else -	    deleteTab(CurrentTab); -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -	return; -    } -    loadLink(url, a->target, a->referer, NULL); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* follow HREF link in the buffer */ -void -bufferA(void) -{ -    on_target = FALSE; -    followA(); -    on_target = TRUE; -} - -/* view inline image */ -DEFUN(followI, VIEW_IMAGE, "View image") -{ -    Line *l; -    Anchor *a; -    Buffer *buf; - -    if (Currentbuf->firstLine == NULL) -	return; -    l = Currentbuf->currentLine; - -    a = retrieveCurrentImg(Currentbuf); -    if (a == NULL) -	return; -    /* FIXME: gettextize? */ -    message(Sprintf("loading %s", a->url)->ptr, 0, 0); -    refresh(); -    buf = loadGeneralFile(a->url, baseURL(Currentbuf), NULL, 0, NULL); -    if (buf == NULL) { -	/* FIXME: gettextize? */ -	char *emsg = Sprintf("Can't load %s", a->url)->ptr; -	disp_err_message(emsg, FALSE); -    } -    else if (buf != NO_BUFFER) { -	pushBuffer(buf); -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - -static FormItemList * -save_submit_formlist(FormItemList *src) -{ -    FormList *list; -    FormList *srclist; -    FormItemList *srcitem; -    FormItemList *item; -    FormItemList *ret = NULL; -#ifdef MENU_SELECT -    FormSelectOptionItem *opt; -    FormSelectOptionItem *curopt; -    FormSelectOptionItem *srcopt; -#endif				/* MENU_SELECT */ - -    if (src == NULL) -	return NULL; -    srclist = src->parent; -    list = New(FormList); -    list->method = srclist->method; -    list->action = Strdup(srclist->action); -#ifdef USE_M17N -    list->charset = srclist->charset; -#endif -    list->enctype = srclist->enctype; -    list->nitems = srclist->nitems; -    list->body = srclist->body; -    list->boundary = srclist->boundary; -    list->length = srclist->length; - -    for (srcitem = srclist->item; srcitem; srcitem = srcitem->next) { -	item = New(FormItemList); -	item->type = srcitem->type; -	item->name = Strdup(srcitem->name); -	item->value = Strdup(srcitem->value); -	item->checked = srcitem->checked; -	item->accept = srcitem->accept; -	item->size = srcitem->size; -	item->rows = srcitem->rows; -	item->maxlength = srcitem->maxlength; -	item->readonly = srcitem->readonly; -#ifdef MENU_SELECT -	opt = curopt = NULL; -	for (srcopt = srcitem->select_option; srcopt; srcopt = srcopt->next) { -	    if (!srcopt->checked) -		continue; -	    opt = New(FormSelectOptionItem); -	    opt->value = Strdup(srcopt->value); -	    opt->label = Strdup(srcopt->label); -	    opt->checked = srcopt->checked; -	    if (item->select_option == NULL) { -		item->select_option = curopt = opt; -	    } -	    else { -		curopt->next = opt; -		curopt = curopt->next; -	    } -	} -	item->select_option = opt; -	if (srcitem->label) -	    item->label = Strdup(srcitem->label); -#endif				/* MENU_SELECT */ -	item->parent = list; -	item->next = NULL; - -	if (list->lastitem == NULL) { -	    list->item = list->lastitem = item; -	} -	else { -	    list->lastitem->next = item; -	    list->lastitem = item; -	} - -	if (srcitem == src) -	    ret = item; -    } - -    return ret; -} - -#ifdef USE_M17N -static Str -conv_form_encoding(Str val, FormItemList *fi, Buffer *buf) -{ -    wc_ces charset = SystemCharset; - -    if (fi->parent->charset) -	charset = fi->parent->charset; -    else if (buf->document_charset && buf->document_charset != WC_CES_US_ASCII) -	charset = buf->document_charset; -    return wc_Str_conv_strict(val, InnerCharset, charset); -} -#else -#define conv_form_encoding(val, fi, buf) (val) -#endif - -static void -query_from_followform(Str *query, FormItemList *fi, int multipart) -{ -    FormItemList *f2; -    FILE *body = NULL; - -    if (multipart) { -	*query = tmpfname(TMPF_DFL, NULL); -	body = fopen((*query)->ptr, "w"); -	if (body == NULL) { -	    return; -	} -	fi->parent->body = (*query)->ptr; -	fi->parent->boundary = -	    Sprintf("------------------------------%d%ld%ld%ld", CurrentPid, -		    fi->parent, fi->parent->body, fi->parent->boundary)->ptr; -    } -    *query = Strnew(); -    for (f2 = fi->parent->item; f2; f2 = f2->next) { -	if (f2->name == NULL) -	    continue; -	/* <ISINDEX> is translated into single text form */ -	if (f2->name->length == 0 && -	    (multipart || f2->type != FORM_INPUT_TEXT)) -	    continue; -	switch (f2->type) { -	case FORM_INPUT_RESET: -	    /* do nothing */ -	    continue; -	case FORM_INPUT_SUBMIT: -	case FORM_INPUT_IMAGE: -	    if (f2 != fi || f2->value == NULL) -		continue; -	    break; -	case FORM_INPUT_RADIO: -	case FORM_INPUT_CHECKBOX: -	    if (!f2->checked) -		continue; -	} -	if (multipart) { -	    if (f2->type == FORM_INPUT_IMAGE) { -		int x = 0, y = 0; -#ifdef USE_IMAGE -		getMapXY(Currentbuf, retrieveCurrentImg(Currentbuf), &x, &y); -#endif -		*query = Strdup(conv_form_encoding(f2->name, fi, Currentbuf)); -		Strcat_charp(*query, ".x"); -		form_write_data(body, fi->parent->boundary, (*query)->ptr, -				Sprintf("%d", x)->ptr); -		*query = Strdup(conv_form_encoding(f2->name, fi, Currentbuf)); -		Strcat_charp(*query, ".y"); -		form_write_data(body, fi->parent->boundary, (*query)->ptr, -				Sprintf("%d", y)->ptr); -	    } -	    else if (f2->name && f2->name->length > 0 && f2->value != NULL) { -		/* not IMAGE */ -		*query = conv_form_encoding(f2->value, fi, Currentbuf); -		if (f2->type == FORM_INPUT_FILE) -		    form_write_from_file(body, fi->parent->boundary, -					 conv_form_encoding(f2->name, fi, -							    Currentbuf)->ptr, -					 (*query)->ptr, -					 Str_conv_to_system(f2->value)->ptr); -		else -		    form_write_data(body, fi->parent->boundary, -				    conv_form_encoding(f2->name, fi, -						       Currentbuf)->ptr, -				    (*query)->ptr); -	    } -	} -	else { -	    /* not multipart */ -	    if (f2->type == FORM_INPUT_IMAGE) { -		int x = 0, y = 0; -#ifdef USE_IMAGE -		getMapXY(Currentbuf, retrieveCurrentImg(Currentbuf), &x, &y); -#endif -		Strcat(*query, -		       Str_form_quote(conv_form_encoding -				      (f2->name, fi, Currentbuf))); -		Strcat(*query, Sprintf(".x=%d&", x)); -		Strcat(*query, -		       Str_form_quote(conv_form_encoding -				      (f2->name, fi, Currentbuf))); -		Strcat(*query, Sprintf(".y=%d", y)); -	    } -	    else { -		/* not IMAGE */ -		if (f2->name && f2->name->length > 0) { -		    Strcat(*query, -			   Str_form_quote(conv_form_encoding -					  (f2->name, fi, Currentbuf))); -		    Strcat_char(*query, '='); -		} -		if (f2->value != NULL) { -		    if (fi->parent->method == FORM_METHOD_INTERNAL) -			Strcat(*query, Str_form_quote(f2->value)); -		    else { -			Strcat(*query, -			       Str_form_quote(conv_form_encoding -					      (f2->value, fi, Currentbuf))); -		    } -		} -	    } -	    if (f2->next) -		Strcat_char(*query, '&'); -	} -    } -    if (multipart) { -	fprintf(body, "--%s--\r\n", fi->parent->boundary); -	fclose(body); -    } -    else { -	/* remove trailing & */ -	while (Strlastchar(*query) == '&') -	    Strshrink(*query, 1); -    } -} - -/* submit form */ -DEFUN(submitForm, SUBMIT, "Submit form") -{ -    _followForm(TRUE); -} - -/* process form */ -void -followForm(void) -{ -    _followForm(FALSE); -} - -static void -_followForm(int submit) -{ -    Line *l; -    Anchor *a, *a2; -    char *p; -    FormItemList *fi, *f2; -    Str tmp, tmp2; -    int multipart = 0, i; - -    if (Currentbuf->firstLine == NULL) -	return; -    l = Currentbuf->currentLine; - -    a = retrieveCurrentForm(Currentbuf); -    if (a == NULL) -	return; -    fi = (FormItemList *)a->url; -    switch (fi->type) { -    case FORM_INPUT_TEXT: -	if (submit) -	    goto do_submit; -	if (fi->readonly) -	    /* FIXME: gettextize? */ -	    disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE); -	/* FIXME: gettextize? */ -	p = inputStrHist("TEXT:", fi->value ? fi->value->ptr : NULL, TextHist); -	if (p == NULL || fi->readonly) -	    break; -	fi->value = Strnew_charp(p); -	formUpdateBuffer(a, Currentbuf, fi); -	if (fi->accept || fi->parent->nitems == 1) -	    goto do_submit; -	break; -    case FORM_INPUT_FILE: -	if (submit) -	    goto do_submit; -	if (fi->readonly) -	    /* FIXME: gettextize? */ -	    disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE); -	/* FIXME: gettextize? */ -	p = inputFilenameHist("Filename:", fi->value ? fi->value->ptr : NULL, -			      NULL); -	if (p == NULL || fi->readonly) -	    break; -	fi->value = Strnew_charp(p); -	formUpdateBuffer(a, Currentbuf, fi); -	if (fi->accept || fi->parent->nitems == 1) -	    goto do_submit; -	break; -    case FORM_INPUT_PASSWORD: -	if (submit) -	    goto do_submit; -	if (fi->readonly) { -	    /* FIXME: gettextize? */ -	    disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE); -	    break; -	} -	/* FIXME: gettextize? */ -	p = inputLine("Password:", fi->value ? fi->value->ptr : NULL, -		      IN_PASSWORD); -	if (p == NULL) -	    break; -	fi->value = Strnew_charp(p); -	formUpdateBuffer(a, Currentbuf, fi); -	if (fi->accept) -	    goto do_submit; -	break; -    case FORM_TEXTAREA: -	if (submit) -	    goto do_submit; -	if (fi->readonly) -	    /* FIXME: gettextize? */ -	    disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE); -	input_textarea(fi); -	formUpdateBuffer(a, Currentbuf, fi); -	break; -    case FORM_INPUT_RADIO: -	if (submit) -	    goto do_submit; -	if (fi->readonly) { -	    /* FIXME: gettextize? */ -	    disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE); -	    break; -	} -	formRecheckRadio(a, Currentbuf, fi); -	break; -    case FORM_INPUT_CHECKBOX: -	if (submit) -	    goto do_submit; -	if (fi->readonly) { -	    /* FIXME: gettextize? */ -	    disp_message_nsec("Read only field!", FALSE, 1, TRUE, FALSE); -	    break; -	} -	fi->checked = !fi->checked; -	formUpdateBuffer(a, Currentbuf, fi); -	break; -#ifdef MENU_SELECT -    case FORM_SELECT: -	if (submit) -	    goto do_submit; -	if (!formChooseOptionByMenu(fi, -				    Currentbuf->cursorX - Currentbuf->pos + -				    a->start.pos + Currentbuf->rootX, -				    Currentbuf->cursorY + Currentbuf->rootY)) -	    break; -	formUpdateBuffer(a, Currentbuf, fi); -	if (fi->parent->nitems == 1) -	    goto do_submit; -	break; -#endif				/* MENU_SELECT */ -    case FORM_INPUT_IMAGE: -    case FORM_INPUT_SUBMIT: -    case FORM_INPUT_BUTTON: -      do_submit: -	tmp = Strnew(); -	tmp2 = Strnew(); -	multipart = (fi->parent->method == FORM_METHOD_POST && -		     fi->parent->enctype == FORM_ENCTYPE_MULTIPART); -	query_from_followform(&tmp, fi, multipart); - -	tmp2 = Strdup(fi->parent->action); -	if (!Strcmp_charp(tmp2, "!CURRENT_URL!")) { -	    /* It means "current URL" */ -	    tmp2 = parsedURL2Str(&Currentbuf->currentURL); -	    if ((p = strchr(tmp2->ptr, '?')) != NULL) -		Strshrink(tmp2, (tmp2->ptr + tmp2->length) - p); -	} - -	if (fi->parent->method == FORM_METHOD_GET) { -	    if ((p = strchr(tmp2->ptr, '?')) != NULL) -		Strshrink(tmp2, (tmp2->ptr + tmp2->length) - p); -	    Strcat_charp(tmp2, "?"); -	    Strcat(tmp2, tmp); -	    loadLink(tmp2->ptr, a->target, NULL, NULL); -	} -	else if (fi->parent->method == FORM_METHOD_POST) { -	    Buffer *buf; -	    if (multipart) { -		struct stat st; -		stat(fi->parent->body, &st); -		fi->parent->length = st.st_size; -	    } -	    else { -		fi->parent->body = tmp->ptr; -		fi->parent->length = tmp->length; -	    } -	    buf = loadLink(tmp2->ptr, a->target, NULL, fi->parent); -	    if (multipart) { -		unlink(fi->parent->body); -	    } -	    if (buf && !(buf->bufferprop & BP_REDIRECTED)) {	/* buf must be Currentbuf */ -		/* BP_REDIRECTED means that the buffer is obtained through -		 * Location: header. In this case, buf->form_submit must not be set -		 * because the page is not loaded by POST method but GET method. -		 */ -		buf->form_submit = save_submit_formlist(fi); -	    } -	} -	else if ((fi->parent->method == FORM_METHOD_INTERNAL && (!Strcmp_charp(fi->parent->action, "map") || !Strcmp_charp(fi->parent->action, "none"))) || Currentbuf->bufferprop & BP_INTERNAL) {	/* internal */ -	    do_internal(tmp2->ptr, tmp->ptr); -	} -	else { -	    disp_err_message("Can't send form because of illegal method.", -			     FALSE); -	} -	break; -    case FORM_INPUT_RESET: -	for (i = 0; i < Currentbuf->formitem->nanchor; i++) { -	    a2 = &Currentbuf->formitem->anchors[i]; -	    f2 = (FormItemList *)a2->url; -	    if (f2->parent == fi->parent && -		f2->name && f2->value && -		f2->type != FORM_INPUT_SUBMIT && -		f2->type != FORM_INPUT_HIDDEN && -		f2->type != FORM_INPUT_RESET) { -		f2->value = f2->init_value; -		f2->checked = f2->init_checked; -#ifdef MENU_SELECT -		f2->label = f2->init_label; -		f2->selected = f2->init_selected; -#endif				/* MENU_SELECT */ -		formUpdateBuffer(a2, Currentbuf, f2); -	    } -	} -	break; -    case FORM_INPUT_HIDDEN: -    default: -	break; -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* go to the top anchor */ -DEFUN(topA, LINK_BEGIN, "Go to the first link") -{ -    HmarkerList *hl = Currentbuf->hmarklist; -    BufferPoint *po; -    Anchor *an; -    int hseq = 0; - -    if (Currentbuf->firstLine == NULL) -	return; -    if (!hl || hl->nmark == 0) -	return; - -    if (prec_num > hl->nmark) -	hseq = hl->nmark - 1; -    else if (prec_num > 0) -	hseq = prec_num - 1; -    do { -	if (hseq >= hl->nmark) -	    return; -	po = hl->marks + hseq; -	an = retrieveAnchor(Currentbuf->href, po->line, po->pos); -	if (an == NULL) -	    an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos); -	hseq++; -    } while (an == NULL); - -    gotoLine(Currentbuf, po->line); -    Currentbuf->pos = po->pos; -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* go to the last anchor */ -DEFUN(lastA, LINK_END, "Go to the last link") -{ -    HmarkerList *hl = Currentbuf->hmarklist; -    BufferPoint *po; -    Anchor *an; -    int hseq; - -    if (Currentbuf->firstLine == NULL) -	return; -    if (!hl || hl->nmark == 0) -	return; - -    if (prec_num >= hl->nmark) -	hseq = 0; -    else if (prec_num > 0) -	hseq = hl->nmark - prec_num; -    else -	hseq = hl->nmark - 1; -    do { -	if (hseq < 0) -	    return; -	po = hl->marks + hseq; -	an = retrieveAnchor(Currentbuf->href, po->line, po->pos); -	if (an == NULL) -	    an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos); -	hseq--; -    } while (an == NULL); - -    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") -{ -    _nextA(FALSE); -} - -/* go to the previous anchor */ -DEFUN(prevA, PREV_LINK, "Move to previous link") -{ -    _prevA(FALSE); -} - -/* go to the next visited anchor */ -DEFUN(nextVA, NEXT_VISITED, "Move to next visited link") -{ -    _nextA(TRUE); -} - -/* go to the previous visited anchor */ -DEFUN(prevVA, PREV_VISITED, "Move to previous visited link") -{ -    _prevA(TRUE); -} - -/* go to the next [visited] anchor */ -static void -_nextA(int visited) -{ -    HmarkerList *hl = Currentbuf->hmarklist; -    BufferPoint *po; -    Anchor *an, *pan; -    int i, x, y, n = searchKeyNum(); -    ParsedURL url; - -    if (Currentbuf->firstLine == NULL) -	return; -    if (!hl || hl->nmark == 0) -	return; - -    an = retrieveCurrentAnchor(Currentbuf); -    if (visited != TRUE && an == NULL) -	an = retrieveCurrentForm(Currentbuf); - -    y = Currentbuf->currentLine->linenumber; -    x = Currentbuf->pos; - -    if (visited == TRUE) { -	n = hl->nmark; -    } - -    for (i = 0; i < n; i++) { -	pan = an; -	if (an && an->hseq >= 0) { -	    int hseq = an->hseq + 1; -	    do { -		if (hseq >= hl->nmark) { -		    if (visited == TRUE) -			return; -		    an = pan; -		    goto _end; -		} -		po = &hl->marks[hseq]; -		an = retrieveAnchor(Currentbuf->href, po->line, po->pos); -		if (visited != TRUE && an == NULL) -		    an = retrieveAnchor(Currentbuf->formitem, po->line, -					po->pos); -		hseq++; -		if (visited == TRUE && an) { -		    parseURL2(an->url, &url, baseURL(Currentbuf)); -		    if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) { -			goto _end; -		    } -		} -	    } while (an == NULL || an == pan); -	} -	else { -	    an = closest_next_anchor(Currentbuf->href, NULL, x, y); -	    if (visited != TRUE) -		an = closest_next_anchor(Currentbuf->formitem, an, x, y); -	    if (an == NULL) { -		if (visited == TRUE) -		    return; -		an = pan; -		break; -	    } -	    x = an->start.pos; -	    y = an->start.line; -	    if (visited == TRUE) { -		parseURL2(an->url, &url, baseURL(Currentbuf)); -		if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) { -		    goto _end; -		} -	    } -	} -    } -    if (visited == TRUE) -	return; - -  _end: -    if (an == NULL || an->hseq < 0) -	return; -    po = &hl->marks[an->hseq]; -    gotoLine(Currentbuf, po->line); -    Currentbuf->pos = po->pos; -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* go to the previous anchor */ -static void -_prevA(int visited) -{ -    HmarkerList *hl = Currentbuf->hmarklist; -    BufferPoint *po; -    Anchor *an, *pan; -    int i, x, y, n = searchKeyNum(); -    ParsedURL url; - -    if (Currentbuf->firstLine == NULL) -	return; -    if (!hl || hl->nmark == 0) -	return; - -    an = retrieveCurrentAnchor(Currentbuf); -    if (visited != TRUE && an == NULL) -	an = retrieveCurrentForm(Currentbuf); - -    y = Currentbuf->currentLine->linenumber; -    x = Currentbuf->pos; - -    if (visited == TRUE) { -	n = hl->nmark; -    } - -    for (i = 0; i < n; i++) { -	pan = an; -	if (an && an->hseq >= 0) { -	    int hseq = an->hseq - 1; -	    do { -		if (hseq < 0) { -		    if (visited == TRUE) -			return; -		    an = pan; -		    goto _end; -		} -		po = hl->marks + hseq; -		an = retrieveAnchor(Currentbuf->href, po->line, po->pos); -		if (visited != TRUE && an == NULL) -		    an = retrieveAnchor(Currentbuf->formitem, po->line, -					po->pos); -		hseq--; -		if (visited == TRUE && an) { -		    parseURL2(an->url, &url, baseURL(Currentbuf)); -		    if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) { -			goto _end; -		    } -		} -	    } while (an == NULL || an == pan); -	} -	else { -	    an = closest_prev_anchor(Currentbuf->href, NULL, x, y); -	    if (visited != TRUE) -		an = closest_prev_anchor(Currentbuf->formitem, an, x, y); -	    if (an == NULL) { -		if (visited == TRUE) -		    return; -		an = pan; -		break; -	    } -	    x = an->start.pos; -	    y = an->start.line; -	    if (visited == TRUE && an) { -		parseURL2(an->url, &url, baseURL(Currentbuf)); -		if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) { -		    goto _end; -		} -	    } -	} -    } -    if (visited == TRUE) -	return; - -  _end: -    if (an == NULL || an->hseq < 0) -	return; -    po = hl->marks + an->hseq; -    gotoLine(Currentbuf, po->line); -    Currentbuf->pos = po->pos; -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* go to the next left/right anchor */ -static void -nextX(int d, int dy) -{ -    HmarkerList *hl = Currentbuf->hmarklist; -    Anchor *an, *pan; -    Line *l; -    int i, x, y, n = searchKeyNum(); - -    if (Currentbuf->firstLine == NULL) -	return; -    if (!hl || hl->nmark == 0) -	return; - -    an = retrieveCurrentAnchor(Currentbuf); -    if (an == NULL) -	an = retrieveCurrentForm(Currentbuf); - -    l = Currentbuf->currentLine; -    x = Currentbuf->pos; -    y = l->linenumber; -    pan = NULL; -    for (i = 0; i < n; i++) { -	if (an) -	    x = (d > 0) ? an->end.pos : an->start.pos - 1; -	an = NULL; -	while (1) { -	    for (; x >= 0 && x < l->len; x += d) { -		an = retrieveAnchor(Currentbuf->href, y, x); -		if (!an) -		    an = retrieveAnchor(Currentbuf->formitem, y, x); -		if (an) { -		    pan = an; -		    break; -		} -	    } -	    if (!dy || an) -		break; -	    l = (dy > 0) ? l->next : l->prev; -	    if (!l) -		break; -	    x = (d > 0) ? 0 : l->len - 1; -	    y = l->linenumber; -	} -	if (!an) -	    break; -    } - -    if (pan == NULL) -	return; -    gotoLine(Currentbuf, y); -    Currentbuf->pos = pan->start.pos; -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* go to the next downward/upward anchor */ -static void -nextY(int d) -{ -    HmarkerList *hl = Currentbuf->hmarklist; -    Anchor *an, *pan; -    int i, x, y, n = searchKeyNum(); -    int hseq; - -    if (Currentbuf->firstLine == NULL) -	return; -    if (!hl || hl->nmark == 0) -	return; - -    an = retrieveCurrentAnchor(Currentbuf); -    if (an == NULL) -	an = retrieveCurrentForm(Currentbuf); - -    x = Currentbuf->pos; -    y = Currentbuf->currentLine->linenumber + d; -    pan = NULL; -    hseq = -1; -    for (i = 0; i < n; i++) { -	if (an) -	    hseq = abs(an->hseq); -	an = NULL; -	for (; y >= 0 && y <= Currentbuf->lastLine->linenumber; y += d) { -	    an = retrieveAnchor(Currentbuf->href, y, x); -	    if (!an) -		an = retrieveAnchor(Currentbuf->formitem, y, x); -	    if (an && hseq != abs(an->hseq)) { -		pan = an; -		break; -	    } -	} -	if (!an) -	    break; -    } - -    if (pan == NULL) -	return; -    gotoLine(Currentbuf, pan->start.line); -    arrangeLine(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* go to the next left anchor */ -DEFUN(nextL, NEXT_LEFT, "Move to next left link") -{ -    nextX(-1, 0); -} - -/* go to the next left-up anchor */ -DEFUN(nextLU, NEXT_LEFT_UP, "Move to next left (or upward) link") -{ -    nextX(-1, -1); -} - -/* go to the next right anchor */ -DEFUN(nextR, NEXT_RIGHT, "Move to next right link") -{ -    nextX(1, 0); -} - -/* go to the next right-down anchor */ -DEFUN(nextRD, NEXT_RIGHT_DOWN, "Move to next right (or downward) link") -{ -    nextX(1, 1); -} - -/* go to the next downward anchor */ -DEFUN(nextD, NEXT_DOWN, "Move to next downward link") -{ -    nextY(1); -} - -/* go to the next upward anchor */ -DEFUN(nextU, NEXT_UP, "Move to next upward link") -{ -    nextY(-1); -} - -/* go to the next bufferr */ -DEFUN(nextBf, NEXT, "Move to next buffer") -{ -    Buffer *buf; -    int i; - -    for (i = 0; i < PREC_NUM; i++) { -	buf = prevBuffer(Firstbuf, Currentbuf); -	if (!buf) { -	    if (i == 0) -		return; -	    break; -	} -	Currentbuf = buf; -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* go to the previous bufferr */ -DEFUN(prevBf, PREV, "Move to previous buffer") -{ -    Buffer *buf; -    int i; - -    for (i = 0; i < PREC_NUM; i++) { -	buf = Currentbuf->nextBuffer; -	if (!buf) { -	    if (i == 0) -		return; -	    break; -	} -	Currentbuf = buf; -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -static int -checkBackBuffer(Buffer *buf) -{ -    Buffer *fbuf = buf->linkBuffer[LB_N_FRAME]; - -    if (fbuf) { -	if (fbuf->frameQ) -	    return TRUE;	/* Currentbuf has stacked frames */ -	/* when no frames stacked and next is frame source, try next's -	 * nextBuffer */ -	if (RenderFrame && fbuf == buf->nextBuffer) { -	    if (fbuf->nextBuffer != NULL) -		return TRUE; -	    else -		return FALSE; -	} -    } - -    if (buf->nextBuffer) -	return TRUE; - -    return FALSE; -} - -/* delete current buffer and back to the previous buffer */ -DEFUN(backBf, BACK, "Back to previous buffer") -{ -    Buffer *buf = Currentbuf->linkBuffer[LB_N_FRAME]; - -    if (!checkBackBuffer(Currentbuf)) { -	if (close_tab_back && nTab >= 1) { -	    deleteTab(CurrentTab); -	    displayBuffer(Currentbuf, B_FORCE_REDRAW); -	} -	else -	    /* FIXME: gettextize? */ -	    disp_message("Can't back...", TRUE); -	return; -    } - -    delBuffer(Currentbuf); - -    if (buf) { -	if (buf->frameQ) { -	    struct frameset *fs; -	    long linenumber = buf->frameQ->linenumber; -	    long top = buf->frameQ->top_linenumber; -	    int pos = buf->frameQ->pos; -	    int currentColumn = buf->frameQ->currentColumn; -	    AnchorList *formitem = buf->frameQ->formitem; - -	    fs = popFrameTree(&(buf->frameQ)); -	    deleteFrameSet(buf->frameset); -	    buf->frameset = fs; - -	    if (buf == Currentbuf) { -		rFrame(); -		Currentbuf->topLine = lineSkip(Currentbuf, -					       Currentbuf->firstLine, top - 1, -					       FALSE); -		gotoLine(Currentbuf, linenumber); -		Currentbuf->pos = pos; -		Currentbuf->currentColumn = currentColumn; -		arrangeCursor(Currentbuf); -		formResetBuffer(Currentbuf, formitem); -	    } -	} -	else if (RenderFrame && buf == Currentbuf) { -	    delBuffer(Currentbuf); -	} -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(deletePrevBuf, DELETE_PREVBUF, -      "Delete previous buffer (mainly for local-CGI)") -{ -    Buffer *buf = Currentbuf->nextBuffer; -    if (buf) -	delBuffer(buf); -} - -static void -cmd_loadURL(char *url, ParsedURL *current, char *referer, FormList *request) -{ -    Buffer *buf; - -    if (!strncasecmp(url, "mailto:", 7) -#ifdef USE_W3MMAILER -	&& non_null(Mailer) && strchr(url, '?') == NULL -#endif -	) { -	/* invoke external mailer */ -	Str to = Strnew_charp(url + 7); -#ifndef USE_W3MMAILER -	char *pos; -	if (!non_null(Mailer)) { -	    /* FIXME: gettextize? */ -	    disp_err_message("no mailer is specified", TRUE); -	    return; -	} -	if ((pos = strchr(to->ptr, '?')) != NULL) -	    Strtruncate(to, pos - to->ptr); -#endif -	fmTerm(); -	system(myExtCommand(Mailer, shell_quote(file_unquote(to->ptr)), -			    FALSE)->ptr); -	fmInit(); -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -	pushHashHist(URLHist, url); -	return; -    } -#if 0 -    if (!strncasecmp(url, "news:", 5) && strchr(url, '@') == NULL) { -	/* news:newsgroup is not supported */ -	/* FIXME: gettextize? */ -	disp_err_message("news:newsgroup_name is not supported", TRUE); -	return; -    } -#endif				/* USE_NNTP */ - -    refresh(); -    buf = loadGeneralFile(url, current, referer, 0, request); -    if (buf == NULL) { -	/* FIXME: gettextize? */ -	char *emsg = Sprintf("Can't load %s", conv_from_system(url))->ptr; -	disp_err_message(emsg, FALSE); -    } -    else if (buf != NO_BUFFER) { -	pushBuffer(buf); -	if (RenderFrame && Currentbuf->frameset != NULL) -	    rFrame(); -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - - -/* go to specified URL */ -static void -goURL0(char *prompt, int relative) -{ -    char *url, *referer; -    ParsedURL p_url, *current; -    Buffer *cur_buf = Currentbuf; - -    url = searchKeyData(); -    if (url == NULL) { -	Hist *hist = copyHist(URLHist); -	Anchor *a; - -	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); -	    } -	    else -		pushHist(hist, c_url); -	} -	a = retrieveCurrentAnchor(Currentbuf); -	if (a) { -	    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); -	    } -	    else -		pushHist(hist, a_url); -	} -	url = inputLineHist(prompt, url, IN_URL, hist); -	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; -	else -	    url = conv_to_system(url); -    } -#endif -    if (url == NULL || *url == '\0') { -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -	return; -    } -    if (*url == '#') { -	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); -    if (Currentbuf != cur_buf)	/* success */ -	pushHashHist(URLHist, parsedURL2Str(&Currentbuf->currentURL)->ptr); -} - -DEFUN(goURL, GOTO, "Go to URL") -{ -    goURL0("Goto URL: ", FALSE); -} - -DEFUN(gorURL, GOTO_RELATIVE, "Go to relative URL") -{ -    goURL0("Goto relative URL: ", TRUE); -} - -static void -cmd_loadBuffer(Buffer *buf, int prop, int linkid) -{ -    if (buf == NULL) { -	disp_err_message("Can't load string", FALSE); -    } -    else if (buf != NO_BUFFER) { -	buf->bufferprop |= (BP_INTERNAL | prop); -	if (!(buf->bufferprop & BP_NO_URL)) -	    copyParsedURL(&buf->currentURL, &Currentbuf->currentURL); -	if (linkid != LB_NOLINK) { -	    buf->linkBuffer[REV_LB[linkid]] = Currentbuf; -	    Currentbuf->linkBuffer[linkid] = buf; -	} -	pushBuffer(buf); -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* load bookmark */ -DEFUN(ldBmark, BOOKMARK VIEW_BOOKMARK, "Read bookmark") -{ -    cmd_loadURL(BookmarkFile, NULL, NO_REFERER, NULL); -} - - -/* Add current to bookmark */ -DEFUN(adBmark, ADD_BOOKMARK, "Add current page to bookmark") -{ -    Str tmp; -    FormList *request; - -    tmp = Sprintf("mode=panel&cookie=%s&bmark=%s&url=%s&title=%s" -#ifdef USE_M17N -		    "&charset=%s" -#endif -		    , -		  (Str_form_quote(localCookie()))->ptr, -		  (Str_form_quote(Strnew_charp(BookmarkFile)))->ptr, -		  (Str_form_quote(parsedURL2Str(&Currentbuf->currentURL)))-> -		  ptr, -#ifdef USE_M17N -		  (Str_form_quote(wc_conv_strict(Currentbuf->buffername, -						 InnerCharset, -						 BookmarkCharset)))->ptr, -		  wc_ces_to_charset(BookmarkCharset)); -#else -		  (Str_form_quote(Strnew_charp(Currentbuf->buffername)))->ptr); -#endif -    request = newFormList(NULL, "post", NULL, NULL, NULL, NULL, NULL); -    request->body = tmp->ptr; -    request->length = tmp->length; -    cmd_loadURL("file:///$LIB/" W3MBOOKMARK_CMDNAME, NULL, NO_REFERER, -		request); -} - -/* option setting */ -DEFUN(ldOpt, OPTIONS, "Option setting panel") -{ -    cmd_loadBuffer(load_option_panel(), BP_NO_URL, LB_NOLINK); -} - -/* set an option */ -DEFUN(setOpt, SET_OPTION, "Set option") -{ -    char *opt; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    opt = searchKeyData(); -    if (opt == NULL || *opt == '\0' || strchr(opt, '=') == NULL) { -	if (opt != NULL && *opt != '\0') { -	    char *v = get_param_option(opt); -	    opt = Sprintf("%s=%s", opt, v ? v : "")->ptr; -	} -	opt = inputStrHist("Set option: ", opt, TextHist); -	if (opt == NULL || *opt == '\0') { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -    } -    if (set_param_option(opt)) -	sync_with_option(); -    displayBuffer(Currentbuf, B_REDRAW_IMAGE); -} - -/* error message list */ -DEFUN(msgs, MSGS, "Display error messages") -{ -    cmd_loadBuffer(message_list_panel(), BP_NO_URL, LB_NOLINK); -} - -/* page info */ -DEFUN(pginfo, INFO, "View info of current document") -{ -    Buffer *buf; - -    if ((buf = Currentbuf->linkBuffer[LB_N_INFO]) != NULL) { -	Currentbuf = buf; -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    if ((buf = Currentbuf->linkBuffer[LB_INFO]) != NULL) -	delBuffer(buf); -    buf = page_info_panel(Currentbuf); -    cmd_loadBuffer(buf, BP_NORMAL, LB_INFO); -} - -void -follow_map(struct parsed_tagarg *arg) -{ -    char *name = tag_get_value(arg, "link"); -#if defined(MENU_MAP) || defined(USE_IMAGE) -    Anchor *an; -    MapArea *a; -    int x, y; -    ParsedURL p_url; - -    an = retrieveCurrentImg(Currentbuf); -    x = Currentbuf->cursorX + Currentbuf->rootX; -    y = Currentbuf->cursorY + Currentbuf->rootY; -    a = follow_map_menu(Currentbuf, name, an, x, y); -    if (a == NULL || a->url == NULL || *(a->url) == '\0') { -#endif -#ifndef MENU_MAP -	Buffer *buf = follow_map_panel(Currentbuf, name); - -	if (buf != NULL) -	    cmd_loadBuffer(buf, BP_NORMAL, LB_NOLINK); -#endif -#if defined(MENU_MAP) || defined(USE_IMAGE) -	return; -    } -    if (*(a->url) == '#') { -	gotoLabel(a->url + 1); -	return; -    } -    parseURL2(a->url, &p_url, baseURL(Currentbuf)); -    pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr); -    if (check_target && open_tab_blank && a->target && -	(!strcasecmp(a->target, "_new") || !strcasecmp(a->target, "_blank"))) { -	Buffer *buf; - -	_newT(); -	buf = Currentbuf; -	cmd_loadURL(a->url, baseURL(Currentbuf), -		    parsedURL2Str(&Currentbuf->currentURL)->ptr, NULL); -	if (buf != Currentbuf) -	    delBuffer(buf); -	else -	    deleteTab(CurrentTab); -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -	return; -    } -    cmd_loadURL(a->url, baseURL(Currentbuf), -		parsedURL2Str(&Currentbuf->currentURL)->ptr, NULL); -#endif -} - -#ifdef USE_MENU -/* link menu */ -DEFUN(linkMn, LINK_MENU, "Popup link element menu") -{ -    LinkList *l = link_menu(Currentbuf); -    ParsedURL p_url; - -    if (!l || !l->url) -	return; -    if (*(l->url) == '#') { -	gotoLabel(l->url + 1); -	return; -    } -    parseURL2(l->url, &p_url, baseURL(Currentbuf)); -    pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr); -    cmd_loadURL(l->url, baseURL(Currentbuf), -		parsedURL2Str(&Currentbuf->currentURL)->ptr, NULL); -} - -static void -anchorMn(Anchor *(*menu_func) (Buffer *), int go) -{ -    Anchor *a; -    BufferPoint *po; - -    if (!Currentbuf->href || !Currentbuf->hmarklist) -	return; -    a = menu_func(Currentbuf); -    if (!a || a->hseq < 0) -	return; -    po = &Currentbuf->hmarklist->marks[a->hseq]; -    gotoLine(Currentbuf, po->line); -    Currentbuf->pos = po->pos; -    arrangeCursor(Currentbuf); -    displayBuffer(Currentbuf, B_NORMAL); -    if (go) -	followA(); -} - -/* accesskey */ -DEFUN(accessKey, ACCESSKEY, "Popup acceskey menu") -{ -    anchorMn(accesskey_menu, TRUE); -} - -/* list menu */ -DEFUN(listMn, LIST_MENU, "Popup link list menu and go to selected link") -{ -    anchorMn(list_menu, TRUE); -} - -DEFUN(movlistMn, MOVE_LIST_MENU, -      "Popup link list menu and move cursor to selected link") -{ -    anchorMn(list_menu, FALSE); -} -#endif - -/* link,anchor,image list */ -DEFUN(linkLst, LIST, "Show all links and images") -{ -    Buffer *buf; - -    buf = link_list_panel(Currentbuf); -    if (buf != NULL) { -#ifdef USE_M17N -	buf->document_charset = Currentbuf->document_charset; -#endif -	cmd_loadBuffer(buf, BP_NORMAL, LB_NOLINK); -    } -} - -#ifdef USE_COOKIE -/* cookie list */ -DEFUN(cooLst, COOKIE, "View cookie list") -{ -    Buffer *buf; - -    buf = cookie_list_panel(); -    if (buf != NULL) -	cmd_loadBuffer(buf, BP_NO_URL, LB_NOLINK); -} -#endif				/* USE_COOKIE */ - -#ifdef USE_HISTORY -/* History page */ -DEFUN(ldHist, HISTORY, "View history of URL") -{ -    cmd_loadBuffer(historyBuffer(URLHist), BP_NO_URL, LB_NOLINK); -} -#endif				/* USE_HISTORY */ - -/* download HREF link */ -DEFUN(svA, SAVE_LINK, "Save link to file") -{ -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    do_download = TRUE; -    followA(); -    do_download = FALSE; -} - -/* download IMG link */ -DEFUN(svI, SAVE_IMAGE, "Save image to file") -{ -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    do_download = TRUE; -    followI(); -    do_download = FALSE; -} - -/* save buffer */ -DEFUN(svBuf, PRINT SAVE_SCREEN, "Save rendered document to file") -{ -    char *qfile = NULL, *file; -    FILE *f; -    int is_pipe; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    file = searchKeyData(); -    if (file == NULL || *file == '\0') { -	/* FIXME: gettextize? */ -	qfile = inputLineHist("Save buffer to: ", NULL, IN_COMMAND, SaveHist); -	if (qfile == NULL || *qfile == '\0') { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -    } -    file = conv_to_system(qfile ? qfile : file); -    if (*file == '|') { -	is_pipe = TRUE; -	f = popen(file + 1, "w"); -    } -    else { -	if (qfile) { -	    file = unescape_spaces(Strnew_charp(qfile))->ptr; -	    file = conv_to_system(file); -	} -	file = expandPath(file); -	if (checkOverWrite(file) < 0) { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -	f = fopen(file, "w"); -	is_pipe = FALSE; -    } -    if (f == NULL) { -	/* FIXME: gettextize? */ -	char *emsg = Sprintf("Can't open %s", conv_from_system(file))->ptr; -	disp_err_message(emsg, TRUE); -	return; -    } -    saveBuffer(Currentbuf, f, TRUE); -    if (is_pipe) -	pclose(f); -    else -	fclose(f); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* save source */ -DEFUN(svSrc, DOWNLOAD SAVE, "Save document source to file") -{ -    char *file; - -    if (Currentbuf->sourcefile == NULL) -	return; -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    PermitSaveToPipe = TRUE; -    if (Currentbuf->real_scheme == SCM_LOCAL) -	file = conv_from_system(guess_save_name(NULL, -						Currentbuf->currentURL. -						real_file)); -    else -	file = guess_save_name(Currentbuf, Currentbuf->currentURL.file); -    doFileCopy(Currentbuf->sourcefile, file); -    PermitSaveToPipe = FALSE; -    displayBuffer(Currentbuf, B_NORMAL); -} - -static void -_peekURL(int only_img) -{ - -    Anchor *a; -    ParsedURL pu; -    static Str s = NULL; -#ifdef USE_M17N -    static Lineprop *p = NULL; -    Lineprop *pp; -#endif -    static int offset = 0, n; - -    if (Currentbuf->firstLine == NULL) -	return; -    if (CurrentKey == prev_key && s != NULL) { -	if (s->length - offset >= COLS) -	    offset++; -	else if (s->length <= offset)	/* bug ? */ -	    offset = 0; -	goto disp; -    } -    else { -	offset = 0; -    } -    s = NULL; -    a = (only_img ? NULL : retrieveCurrentAnchor(Currentbuf)); -    if (a == NULL) { -	a = (only_img ? NULL : retrieveCurrentForm(Currentbuf)); -	if (a == NULL) { -	    a = retrieveCurrentImg(Currentbuf); -	    if (a == NULL) -		return; -	} -	else -	    s = Strnew_charp(form2str((FormItemList *)a->url)); -    } -    if (s == NULL) { -	parseURL2(a->url, &pu, baseURL(Currentbuf)); -	s = parsedURL2Str(&pu); -    } -    if (DecodeURL) -	s = Strnew_charp(url_unquote_conv -			 (s->ptr, Currentbuf->document_charset)); -#ifdef USE_M17N -    s = checkType(s, &pp, NULL); -    p = NewAtom_N(Lineprop, s->length); -    bcopy((void *)pp, (void *)p, s->length * sizeof(Lineprop)); -#endif -  disp: -    n = searchKeyNum(); -    if (n > 1 && s->length > (n - 1) * (COLS - 1)) -	offset = (n - 1) * (COLS - 1); -#ifdef USE_M17N -    while (offset < s->length && p[offset] & PC_WCHAR2) -	offset++; -#endif -    disp_message_nomouse(&s->ptr[offset], TRUE); -} - -/* peek URL */ -DEFUN(peekURL, PEEK_LINK, "Peek link URL") -{ -    _peekURL(0); -} - -/* peek URL of image */ -DEFUN(peekIMG, PEEK_IMG, "Peek image URL") -{ -    _peekURL(1); -} - -/* show current URL */ -static Str -currentURL(void) -{ -    if (Currentbuf->bufferprop & BP_INTERNAL) -	return Strnew_size(0); -    return parsedURL2Str(&Currentbuf->currentURL); -} - -DEFUN(curURL, PEEK, "Peek current URL") -{ -    static Str s = NULL; -#ifdef USE_M17N -    static Lineprop *p = NULL; -    Lineprop *pp; -#endif -    static int offset = 0, n; - -    if (Currentbuf->bufferprop & BP_INTERNAL) -	return; -    if (CurrentKey == prev_key && s != NULL) { -	if (s->length - offset >= COLS) -	    offset++; -	else if (s->length <= offset)	/* bug ? */ -	    offset = 0; -    } -    else { -	offset = 0; -	s = currentURL(); -	if (DecodeURL) -	    s = Strnew_charp(url_unquote_conv(s->ptr, 0)); -#ifdef USE_M17N -	s = checkType(s, &pp, NULL); -	p = NewAtom_N(Lineprop, s->length); -	bcopy((void *)pp, (void *)p, s->length * sizeof(Lineprop)); -#endif -    } -    n = searchKeyNum(); -    if (n > 1 && s->length > (n - 1) * (COLS - 1)) -	offset = (n - 1) * (COLS - 1); -#ifdef USE_M17N -    while (offset < s->length && p[offset] & PC_WCHAR2) -	offset++; -#endif -    disp_message_nomouse(&s->ptr[offset], TRUE); -} -/* view HTML source */ - -DEFUN(vwSrc, SOURCE VIEW, "View HTML source") -{ -    Buffer *buf; - -    if (Currentbuf->type == NULL || Currentbuf->bufferprop & BP_FRAME) -	return; -    if ((buf = Currentbuf->linkBuffer[LB_SOURCE]) != NULL || -	(buf = Currentbuf->linkBuffer[LB_N_SOURCE]) != NULL) { -	Currentbuf = buf; -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    if (Currentbuf->sourcefile == NULL) { -	if (Currentbuf->pagerSource && -	    !strcasecmp(Currentbuf->type, "text/plain")) { -#ifdef USE_M17N -	    wc_ces old_charset; -	    wc_bool old_fix_width_conv; -#endif -	    FILE *f; -	    Str tmpf = tmpfname(TMPF_SRC, NULL); -	    f = fopen(tmpf->ptr, "w"); -	    if (f == NULL) -		return; -#ifdef USE_M17N -	    old_charset = DisplayCharset; -	    old_fix_width_conv = WcOption.fix_width_conv; -	    DisplayCharset = (Currentbuf->document_charset != WC_CES_US_ASCII) -		? Currentbuf->document_charset : 0; -	    WcOption.fix_width_conv = WC_FALSE; -#endif -	    saveBufferBody(Currentbuf, f, TRUE); -#ifdef USE_M17N -	    DisplayCharset = old_charset; -	    WcOption.fix_width_conv = old_fix_width_conv; -#endif -	    fclose(f); -	    Currentbuf->sourcefile = tmpf->ptr; -	} -	else { -	    return; -	} -    } - -    buf = newBuffer(INIT_BUFFER_WIDTH); - -    if (!strcasecmp(Currentbuf->type, "text/html")) { -	buf->type = "text/plain"; -	if (Currentbuf->real_type && -	    !strcasecmp(Currentbuf->real_type, "text/html")) -	    buf->real_type = "text/plain"; -	else -	    buf->real_type = Currentbuf->real_type; -	buf->buffername = Sprintf("source of %s", Currentbuf->buffername)->ptr; -	buf->linkBuffer[LB_N_SOURCE] = Currentbuf; -	Currentbuf->linkBuffer[LB_SOURCE] = buf; -    } -    else if (!strcasecmp(Currentbuf->type, "text/plain")) { -	buf->type = "text/html"; -	if (Currentbuf->real_type && -	    !strcasecmp(Currentbuf->real_type, "text/plain")) -	    buf->real_type = "text/html"; -	else -	    buf->real_type = Currentbuf->real_type; -	buf->buffername = Sprintf("HTML view of %s", -				  Currentbuf->buffername)->ptr; -	buf->linkBuffer[LB_SOURCE] = Currentbuf; -	Currentbuf->linkBuffer[LB_N_SOURCE] = buf; -    } -    else { -	return; -    } -    buf->currentURL = Currentbuf->currentURL; -    buf->real_scheme = Currentbuf->real_scheme; -    buf->filename = Currentbuf->filename; -    buf->sourcefile = Currentbuf->sourcefile; -    buf->header_source = Currentbuf->header_source; -    buf->search_header = Currentbuf->search_header; -#ifdef USE_M17N -    buf->document_charset = Currentbuf->document_charset; -#endif -    buf->clone = Currentbuf->clone; -    (*buf->clone)++; - -    buf->need_reshape = TRUE; -    reshapeBuffer(buf); -    pushBuffer(buf); -    displayBuffer(Currentbuf, B_NORMAL); -} - -/* reload */ -DEFUN(reload, RELOAD, "Reload buffer") -{ -    Buffer *buf, *fbuf = NULL, sbuf; -#ifdef USE_M17N -    wc_ces old_charset; -#endif -    Str url; -    FormList *request; -    int multipart; - -    if (Currentbuf->bufferprop & BP_INTERNAL) { -	if (!strcmp(Currentbuf->buffername, DOWNLOAD_LIST_TITLE)) { -	    ldDL(); -	    return; -	} -	/* FIXME: gettextize? */ -	disp_err_message("Can't reload...", TRUE); -	return; -    } -    if (Currentbuf->currentURL.scheme == SCM_LOCAL && -	!strcmp(Currentbuf->currentURL.file, "-")) { -	/* file is std input */ -	/* FIXME: gettextize? */ -	disp_err_message("Can't reload stdin", TRUE); -	return; -    } -    copyBuffer(&sbuf, Currentbuf); -    if (Currentbuf->bufferprop & BP_FRAME && -	(fbuf = Currentbuf->linkBuffer[LB_N_FRAME])) { -	if (fmInitialized) { -	    message("Rendering frame", 0, 0); -	    refresh(); -	} -	if (!(buf = renderFrame(fbuf, 1))) { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -	if (fbuf->linkBuffer[LB_FRAME]) { -	    if (buf->sourcefile && -		fbuf->linkBuffer[LB_FRAME]->sourcefile && -		!strcmp(buf->sourcefile, -			fbuf->linkBuffer[LB_FRAME]->sourcefile)) -		fbuf->linkBuffer[LB_FRAME]->sourcefile = NULL; -	    delBuffer(fbuf->linkBuffer[LB_FRAME]); -	} -	fbuf->linkBuffer[LB_FRAME] = buf; -	buf->linkBuffer[LB_N_FRAME] = fbuf; -	pushBuffer(buf); -	Currentbuf = buf; -	if (Currentbuf->firstLine) -	    restorePosition(Currentbuf, &sbuf); -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -	return; -    } -    else if (Currentbuf->frameset != NULL) -	fbuf = Currentbuf->linkBuffer[LB_FRAME]; -    multipart = 0; -    if (Currentbuf->form_submit) { -	request = Currentbuf->form_submit->parent; -	if (request->method == FORM_METHOD_POST -	    && request->enctype == FORM_ENCTYPE_MULTIPART) { -	    Str query; -	    struct stat st; -	    multipart = 1; -	    query_from_followform(&query, Currentbuf->form_submit, multipart); -	    stat(request->body, &st); -	    request->length = st.st_size; -	} -    } -    else { -	request = NULL; -    } -    url = parsedURL2Str(&Currentbuf->currentURL); -    /* FIXME: gettextize? */ -    message("Reloading...", 0, 0); -    refresh(); -#ifdef USE_M17N -    old_charset = DocumentCharset; -    if (Currentbuf->document_charset != WC_CES_US_ASCII) -	DocumentCharset = Currentbuf->document_charset; -#endif -    SearchHeader = Currentbuf->search_header; -    DefaultType = Currentbuf->real_type; -    buf = loadGeneralFile(url->ptr, NULL, NO_REFERER, RG_NOCACHE, request); -#ifdef USE_M17N -    DocumentCharset = old_charset; -#endif -    SearchHeader = FALSE; -    DefaultType = NULL; - -    if (multipart) -	unlink(request->body); -    if (buf == NULL) { -	/* FIXME: gettextize? */ -	disp_err_message("Can't reload...", TRUE); -	return; -    } -    else if (buf == NO_BUFFER) { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    if (fbuf != NULL) -	Firstbuf = deleteBuffer(Firstbuf, fbuf); -    repBuffer(Currentbuf, buf); -    if ((buf->type != NULL) && (sbuf.type != NULL) && -	((!strcasecmp(buf->type, "text/plain") && -	  !strcasecmp(sbuf.type, "text/html")) || -	 (!strcasecmp(buf->type, "text/html") && -	  !strcasecmp(sbuf.type, "text/plain")))) { -	vwSrc(); -	if (Currentbuf != buf) -	    Firstbuf = deleteBuffer(Firstbuf, buf); -    } -    Currentbuf->search_header = sbuf.search_header; -    Currentbuf->form_submit = sbuf.form_submit; -    if (Currentbuf->firstLine) -	restorePosition(Currentbuf, &sbuf); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* reshape */ -DEFUN(reshape, RESHAPE, "Re-render buffer") -{ -    Currentbuf->need_reshape = TRUE; -    reshapeBuffer(Currentbuf); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -#ifdef USE_M17N -static void -_docCSet(wc_ces charset) -{ -    if (Currentbuf->bufferprop & BP_INTERNAL) -	return; -    if (Currentbuf->sourcefile == NULL) { -	disp_message("Can't reload...", FALSE); -	return; -    } -    Currentbuf->document_charset = charset; -    Currentbuf->need_reshape = TRUE; -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -void -change_charset(struct parsed_tagarg *arg) -{ -    Buffer *buf = Currentbuf->linkBuffer[LB_N_INFO]; -    wc_ces charset; - -    if (buf == NULL) -	return; -    delBuffer(Currentbuf); -    Currentbuf = buf; -    if (Currentbuf->bufferprop & BP_INTERNAL) -	return; -    charset = Currentbuf->document_charset; -    for (; arg; arg = arg->next) { -	if (!strcmp(arg->arg, "charset")) -	    charset = atoi(arg->value); -    } -    _docCSet(charset); -} - -DEFUN(docCSet, CHARSET, "Change the current document charset") -{ -    char *cs; -    wc_ces charset; - -    cs = searchKeyData(); -    if (cs == NULL || *cs == '\0') -	/* FIXME: gettextize? */ -	cs = inputStr("Document charset: ", -		      wc_ces_to_charset(Currentbuf->document_charset)); -    charset = wc_guess_charset_short(cs, 0); -    if (charset == 0) { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    _docCSet(charset); -} - -DEFUN(defCSet, DEFAULT_CHARSET, "Change the default document charset") -{ -    char *cs; -    wc_ces charset; - -    cs = searchKeyData(); -    if (cs == NULL || *cs == '\0') -	/* FIXME: gettextize? */ -	cs = inputStr("Default document charset: ", -		      wc_ces_to_charset(DocumentCharset)); -    charset = wc_guess_charset_short(cs, 0); -    if (charset != 0) -	DocumentCharset = charset; -    displayBuffer(Currentbuf, B_NORMAL); -} -#endif - -/* mark URL-like patterns as anchors */ -void -chkURLBuffer(Buffer *buf) -{ -    static char *url_like_pat[] = { -	"https?://[a-zA-Z0-9][a-zA-Z0-9:%\\-\\./?=~_\\&+@#,\\$;]*[a-zA-Z0-9_/=\\-]", -	"file:/[a-zA-Z0-9:%\\-\\./=_\\+@#,\\$;]*", -#ifdef USE_GOPHER -	"gopher://[a-zA-Z0-9][a-zA-Z0-9:%\\-\\./_]*", -#endif				/* USE_GOPHER */ -	"ftp://[a-zA-Z0-9][a-zA-Z0-9:%\\-\\./=_+@#,\\$]*[a-zA-Z0-9_/]", -#ifdef USE_NNTP -	"news:[^<> 	][^<> 	]*", -	"nntp://[a-zA-Z0-9][a-zA-Z0-9:%\\-\\./_]*", -#endif				/* USE_NNTP */ -#ifndef USE_W3MMAILER		/* see also chkExternalURIBuffer() */ -	"mailto:[^<> 	][^<> 	]*@[a-zA-Z0-9][a-zA-Z0-9\\-\\._]*[a-zA-Z0-9]", -#endif -#ifdef INET6 -	"https?://[a-zA-Z0-9:%\\-\\./_@]*\\[[a-fA-F0-9:][a-fA-F0-9:\\.]*\\][a-zA-Z0-9:%\\-\\./?=~_\\&+@#,\\$;]*", -	"ftp://[a-zA-Z0-9:%\\-\\./_@]*\\[[a-fA-F0-9:][a-fA-F0-9:\\.]*\\][a-zA-Z0-9:%\\-\\./=_+@#,\\$]*", -#endif				/* INET6 */ -	NULL -    }; -    int i; -    for (i = 0; url_like_pat[i]; i++) { -	reAnchor(buf, url_like_pat[i]); -    } -#ifdef USE_EXTERNAL_URI_LOADER -    chkExternalURIBuffer(buf); -#endif -    buf->check_url |= CHK_URL; -} - -DEFUN(chkURL, MARK_URL, "Mark URL-like strings as anchors") -{ -    chkURLBuffer(Currentbuf); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(chkWORD, MARK_WORD, "Mark current word as anchor") -{ -    char *p; -    int spos, epos; -    p = getCurWord(Currentbuf, &spos, &epos, ":\"\'`<>()[]{}&|;*?$"); -    if (p == NULL) -	return; -    reAnchorWord(Currentbuf, Currentbuf->currentLine, spos, epos); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -#ifdef USE_NNTP -/* mark Message-ID-like patterns as NEWS anchors */ -void -chkNMIDBuffer(Buffer *buf) -{ -    static char *url_like_pat[] = { -	"<[!-;=?-~]+@[a-zA-Z0-9\\.\\-_]+>", -	NULL, -    }; -    int i; -    for (i = 0; url_like_pat[i]; i++) { -	reAnchorNews(buf, url_like_pat[i]); -    } -    buf->check_url |= CHK_NMID; -} - -DEFUN(chkNMID, MARK_MID, "Mark Message-ID-like strings as anchors") -{ -    chkNMIDBuffer(Currentbuf); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} -#endif				/* USE_NNTP */ - -/* render frame */ -DEFUN(rFrame, FRAME, "Render frame") -{ -    Buffer *buf; - -    if ((buf = Currentbuf->linkBuffer[LB_FRAME]) != NULL) { -	Currentbuf = buf; -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    if (Currentbuf->frameset == NULL) { -	if ((buf = Currentbuf->linkBuffer[LB_N_FRAME]) != NULL) { -	    Currentbuf = buf; -	    displayBuffer(Currentbuf, B_NORMAL); -	} -	return; -    } -    if (fmInitialized) { -	message("Rendering frame", 0, 0); -	refresh(); -    } -    buf = renderFrame(Currentbuf, 0); -    if (buf == NULL) { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    buf->linkBuffer[LB_N_FRAME] = Currentbuf; -    Currentbuf->linkBuffer[LB_FRAME] = buf; -    pushBuffer(buf); -    if (fmInitialized && display_ok) -	displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -/* spawn external browser */ -static void -invoke_browser(char *url) -{ -    Str cmd; -    char *browser = NULL; -    int bg = 0, len; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    browser = searchKeyData(); -    if (browser == NULL || *browser == '\0') { -	switch (prec_num) { -	case 0: -	case 1: -	    browser = ExtBrowser; -	    break; -	case 2: -	    browser = ExtBrowser2; -	    break; -	case 3: -	    browser = ExtBrowser3; -	    break; -	} -	if (browser == NULL || *browser == '\0') { -	    browser = inputStr("Browse command: ", NULL); -	    if (browser != NULL) -		browser = conv_to_system(browser); -	} -    } -    else { -	browser = conv_to_system(browser); -    } -    if (browser == NULL || *browser == '\0') { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } - -    if ((len = strlen(browser)) >= 2 && browser[len - 1] == '&' && -	browser[len - 2] != '\\') { -	browser = allocStr(browser, len - 2); -	bg = 1; -    } -    cmd = myExtCommand(browser, shell_quote(url), FALSE); -    Strremovetrailingspaces(cmd); -    fmTerm(); -    mySystem(cmd->ptr, bg); -    fmInit(); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(extbrz, EXTERN, "Execute external browser") -{ -    if (Currentbuf->bufferprop & BP_INTERNAL) { -	/* FIXME: gettextize? */ -	disp_err_message("Can't browse...", TRUE); -	return; -    } -    if (Currentbuf->currentURL.scheme == SCM_LOCAL && -	!strcmp(Currentbuf->currentURL.file, "-")) { -	/* file is std input */ -	/* FIXME: gettextize? */ -	disp_err_message("Can't browse stdin", TRUE); -	return; -    } -    invoke_browser(parsedURL2Str(&Currentbuf->currentURL)->ptr); -} - -DEFUN(linkbrz, EXTERN_LINK, "View current link using external browser") -{ -    Anchor *a; -    ParsedURL pu; - -    if (Currentbuf->firstLine == NULL) -	return; -    a = retrieveCurrentAnchor(Currentbuf); -    if (a == NULL) -	return; -    parseURL2(a->url, &pu, baseURL(Currentbuf)); -    invoke_browser(parsedURL2Str(&pu)->ptr); -} - -/* show current line number and number of lines in the entire document */ -DEFUN(curlno, LINE_INFO, "Show current line number") -{ -    Line *l = Currentbuf->currentLine; -    Str tmp; -    int cur = 0, all = 0, col = 0, len = 0; - -    if (l != NULL) { -	cur = l->real_linenumber; -	col = l->bwidth + Currentbuf->currentColumn + Currentbuf->cursorX + 1; -	while (l->next && l->next->bpos) -	    l = l->next; -	if (l->width < 0) -	    l->width = COLPOS(l, l->len); -	len = l->bwidth + l->width; -    } -    if (Currentbuf->lastLine) -	all = Currentbuf->lastLine->real_linenumber; -    if (Currentbuf->pagerSource && !(Currentbuf->bufferprop & BP_CLOSE)) -	tmp = Sprintf("line %d col %d/%d", cur, col, len); -    else -	tmp = Sprintf("line %d/%d (%d%%) col %d/%d", cur, all, -		      (int)((double)cur * 100.0 / (double)(all ? all : 1) -			    + 0.5), col, len); -#ifdef USE_M17N -    Strcat_charp(tmp, "  "); -    Strcat_charp(tmp, wc_ces_to_charset_desc(Currentbuf->document_charset)); -#endif - -    disp_message(tmp->ptr, FALSE); -} - -#ifdef USE_IMAGE -DEFUN(dispI, DISPLAY_IMAGE, "Restart loading and drawing of images") -{ -    if (!displayImage) -	initImage(); -    if (!activeImage) -	return; -    displayImage = TRUE; -    /* -     * if (!(Currentbuf->type && !strcmp(Currentbuf->type, "text/html"))) -     * return; -     */ -    Currentbuf->image_flag = IMG_FLAG_AUTO; -    Currentbuf->need_reshape = TRUE; -    displayBuffer(Currentbuf, B_REDRAW_IMAGE); -} - -DEFUN(stopI, STOP_IMAGE, "Stop loading and drawing of images") -{ -    if (!activeImage) -	return; -    /* -     * if (!(Currentbuf->type && !strcmp(Currentbuf->type, "text/html"))) -     * return; -     */ -    Currentbuf->image_flag = IMG_FLAG_SKIP; -    displayBuffer(Currentbuf, B_REDRAW_IMAGE); -} -#endif - -#ifdef USE_MOUSE - -static int -mouse_scroll_line(void) -{ -    if (relative_wheel_scroll) -	return (relative_wheel_scroll_ratio * LASTLINE + 99) / 100; -    else -	return fixed_wheel_scroll_count; -} - -static TabBuffer * -posTab(int x, int y) -{ -    TabBuffer *tab; - -    if (mouse_action.menu_str && x < mouse_action.menu_width && y == 0) -	return NO_TABBUFFER; -    if (y > LastTab->y) -	return NULL; -    for (tab = FirstTab; tab; tab = tab->nextTab) { -	if (tab->x1 <= x && x <= tab->x2 && tab->y == y) -	    return tab; -    } -    return NULL; -} - -static void -do_mouse_action(int btn, int x, int y) -{ -    MouseActionMap *map = NULL; -    int ny = -1; - -    if (nTab > 1 || mouse_action.menu_str) -	ny = LastTab->y + 1; - -    switch (btn) { -    case MOUSE_BTN1_DOWN: -	btn = 0; -	break; -    case MOUSE_BTN2_DOWN: -	btn = 1; -	break; -    case MOUSE_BTN3_DOWN: -	btn = 2; -	break; -    default: -	return; -    } -    if (y < ny) { -	if (mouse_action.menu_str && x >= 0 && x < mouse_action.menu_width) { -	    if (mouse_action.menu_map[btn]) -		map = &mouse_action.menu_map[btn][x]; -	} -	else -	    map = &mouse_action.tab_map[btn]; -    } -    else if (y == LASTLINE) { -	if (mouse_action.lastline_str && x >= 0 && -	    x < mouse_action.lastline_width) { -	    if (mouse_action.lastline_map[btn]) -		map = &mouse_action.lastline_map[btn][x]; -	} -    } -    else if (y > ny) { -	if (y == Currentbuf->cursorY + Currentbuf->rootY && -	    (x == Currentbuf->cursorX + Currentbuf->rootX -#ifdef USE_M17N -	     || (WcOption.use_wide && Currentbuf->currentLine != NULL && -		 (CharType(Currentbuf->currentLine->propBuf[Currentbuf->pos]) -		  == PC_KANJI1) -		 && x == Currentbuf->cursorX + Currentbuf->rootX + 1) -#endif -	    )) { -	    if (retrieveCurrentAnchor(Currentbuf) || -		retrieveCurrentForm(Currentbuf)) { -		map = &mouse_action.active_map[btn]; -		if (!(map && map->func)) -		    map = &mouse_action.anchor_map[btn]; -	    } -	} -	else { -	    int cx = Currentbuf->cursorX, cy = Currentbuf->cursorY; -	    cursorXY(Currentbuf, x - Currentbuf->rootX, y - Currentbuf->rootY); -	    if (y == Currentbuf->cursorY + Currentbuf->rootY && -		(x == Currentbuf->cursorX + Currentbuf->rootX -#ifdef USE_M17N -		 || (WcOption.use_wide && Currentbuf->currentLine != NULL && -		     (CharType(Currentbuf->currentLine-> -			       propBuf[Currentbuf->pos]) == PC_KANJI1) -		     && x == Currentbuf->cursorX + Currentbuf->rootX + 1) -#endif -		) && -		(retrieveCurrentAnchor(Currentbuf) || -		 retrieveCurrentForm(Currentbuf))) -		map = &mouse_action.anchor_map[btn]; -	    cursorXY(Currentbuf, cx, cy); -	} -    } -    if (!(map && map->func)) -	map = &mouse_action.default_map[btn]; -    if (map && map->func) { -	mouse_action.in_action = TRUE; -	mouse_action.cursorX = x; -	mouse_action.cursorY = y; -	CurrentKey = -1; -	CurrentKeyData = NULL; -	CurrentCmdData = map->data; -	(*map->func) (); -	CurrentCmdData = NULL; -    } -} - -static void -process_mouse(int btn, int x, int y) -{ -    int delta_x, delta_y, i; -    static int press_btn = MOUSE_BTN_RESET, press_x, press_y; -    TabBuffer *t; -    int ny = -1; - -    if (nTab > 1 || mouse_action.menu_str) -	ny = LastTab->y + 1; -    if (btn == MOUSE_BTN_UP) { -	switch (press_btn) { -	case MOUSE_BTN1_DOWN: -	    if (press_y == y && press_x == x) -		do_mouse_action(press_btn, x, y); -	    else if (ny > 0 && y < ny) { -		if (press_y < ny) { -		    moveTab(posTab(press_x, press_y), posTab(x, y), -			    (press_y == y) ? (press_x < x) : (press_y < y)); -		    return; -		} -		else if (press_x >= Currentbuf->rootX) { -		    Buffer *buf = Currentbuf; -		    int cx = Currentbuf->cursorX, cy = Currentbuf->cursorY; - -		    t = posTab(x, y); -		    if (t == NULL) -			return; -		    if (t == NO_TABBUFFER) -			t = NULL;	/* open new tab */ -		    cursorXY(Currentbuf, press_x - Currentbuf->rootX, -			     press_y - Currentbuf->rootY); -		    if (Currentbuf->cursorY == press_y - Currentbuf->rootY && -			(Currentbuf->cursorX == press_x - Currentbuf->rootX -#ifdef USE_M17N -			 || (WcOption.use_wide && -			     Currentbuf->currentLine != NULL && -			     (CharType(Currentbuf->currentLine-> -				       propBuf[Currentbuf->pos]) == PC_KANJI1) -			     && Currentbuf->cursorX == press_x -			     - Currentbuf->rootX - 1) -#endif -			)) { -			displayBuffer(Currentbuf, B_NORMAL); -			followTab(t); -		    } -		    if (buf == Currentbuf) -			cursorXY(Currentbuf, cx, cy); -		} -		return; -	    } -	    else { -		delta_x = x - press_x; -		delta_y = y - press_y; - -		if (abs(delta_x) < abs(delta_y) / 3) -		    delta_x = 0; -		if (abs(delta_y) < abs(delta_x) / 3) -		    delta_y = 0; -		if (reverse_mouse) { -		    delta_y = -delta_y; -		    delta_x = -delta_x; -		} -		if (delta_y > 0) { -		    prec_num = delta_y; -		    ldown1(); -		} -		else if (delta_y < 0) { -		    prec_num = -delta_y; -		    lup1(); -		} -		if (delta_x > 0) { -		    prec_num = delta_x; -		    col1L(); -		} -		else if (delta_x < 0) { -		    prec_num = -delta_x; -		    col1R(); -		} -	    } -	    break; -	case MOUSE_BTN2_DOWN: -	case MOUSE_BTN3_DOWN: -	    if (press_y == y && press_x == x) -		do_mouse_action(press_btn, x, y); -	    break; -	case MOUSE_BTN4_DOWN_RXVT: -	    for (i = 0; i < mouse_scroll_line(); i++) -		ldown1(); -	    break; -	case MOUSE_BTN5_DOWN_RXVT: -	    for (i = 0; i < mouse_scroll_line(); i++) -		lup1(); -	    break; -	} -    } -    else if (btn == MOUSE_BTN4_DOWN_XTERM) { -	for (i = 0; i < mouse_scroll_line(); i++) -	    ldown1(); -    } -    else if (btn == MOUSE_BTN5_DOWN_XTERM) { -	for (i = 0; i < mouse_scroll_line(); i++) -	    lup1(); -    } - -    if (btn != MOUSE_BTN4_DOWN_RXVT || press_btn == MOUSE_BTN_RESET) { -	press_btn = btn; -	press_x = x; -	press_y = y; -    } -    else { -	press_btn = MOUSE_BTN_RESET; -    } -} - -DEFUN(msToggle, MOUSE_TOGGLE, "Toggle activity of mouse") -{ -    if (use_mouse) { -	use_mouse = FALSE; -    } -    else { -	use_mouse = TRUE; -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(mouse, MOUSE, "mouse operation") -{ -    int btn, x, y; - -    btn = (unsigned char)getch() - 32; -#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 -    x = (unsigned char)getch() - 33; -    if (x < 0) -	x += 0x100; -    y = (unsigned char)getch() - 33; -    if (y < 0) -	y += 0x100; - -    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) -{ -    int btn = MOUSE_BTN_RESET, x, y; -    if (event->type & GPM_UP) -	btn = MOUSE_BTN_UP; -    else if (event->type & GPM_DOWN) { -	switch (event->buttons) { -	case GPM_B_LEFT: -	    btn = MOUSE_BTN1_DOWN; -	    break; -	case GPM_B_MIDDLE: -	    btn = MOUSE_BTN2_DOWN; -	    break; -	case GPM_B_RIGHT: -	    btn = MOUSE_BTN3_DOWN; -	    break; -	} -    } -    else { -	GPM_DRAWPOINTER(event); -	return 0; -    } -    x = event->x; -    y = event->y; -    process_mouse(btn, x - 1, y - 1); -    return 0; -} -#endif				/* USE_GPM */ - -#ifdef USE_SYSMOUSE -int -sysm_process_mouse(int x, int y, int nbs, int obs) -{ -    int btn; -    int bits; - -    if (obs & ~nbs) -	btn = MOUSE_BTN_UP; -    else if (nbs & ~obs) { -	bits = nbs & ~obs; -	btn = bits & 0x1 ? MOUSE_BTN1_DOWN : -	    (bits & 0x2 ? MOUSE_BTN2_DOWN : -	     (bits & 0x4 ? MOUSE_BTN3_DOWN : 0)); -    } -    else			/* nbs == obs */ -	return 0; -    process_mouse(btn, x, y); -    return 0; -} -#endif				/* USE_SYSMOUSE */ - -DEFUN(movMs, MOVE_MOUSE, "Move cursor to mouse cursor (for mouse action)") -{ -    if (!mouse_action.in_action) -	return; -    if ((nTab > 1 || mouse_action.menu_str) && -	mouse_action.cursorY < LastTab->y + 1) -	return; -    else if (mouse_action.cursorX >= Currentbuf->rootX && -	     mouse_action.cursorY < LASTLINE) { -	cursorXY(Currentbuf, mouse_action.cursorX - Currentbuf->rootX, -		 mouse_action.cursorY - Currentbuf->rootY); -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - -#ifdef USE_MENU -#ifdef KANJI_SYMBOLS -#define FRAME_WIDTH 2 -#else -#define FRAME_WIDTH 1 -#endif - -DEFUN(menuMs, MENU_MOUSE, "Popup menu at mouse cursor (for mouse action)") -{ -    if (!mouse_action.in_action) -	return; -    if ((nTab > 1 || mouse_action.menu_str) && -	mouse_action.cursorY < LastTab->y + 1) -	mouse_action.cursorX -= FRAME_WIDTH + 1; -    else if (mouse_action.cursorX >= Currentbuf->rootX && -	     mouse_action.cursorY < LASTLINE) { -	cursorXY(Currentbuf, mouse_action.cursorX - Currentbuf->rootX, -		 mouse_action.cursorY - Currentbuf->rootY); -	displayBuffer(Currentbuf, B_NORMAL); -    } -    mainMn(); -} -#endif - -DEFUN(tabMs, TAB_MOUSE, "Move to tab on mouse cursor (for mouse action)") -{ -    TabBuffer *tab; - -    if (!mouse_action.in_action) -	return; -    tab = posTab(mouse_action.cursorX, mouse_action.cursorY); -    if (!tab || tab == NO_TABBUFFER) -	return; -    CurrentTab = tab; -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(closeTMs, CLOSE_TAB_MOUSE, -      "Close tab on mouse cursor (for mouse action)") -{ -    TabBuffer *tab; - -    if (!mouse_action.in_action) -	return; -    tab = posTab(mouse_action.cursorX, mouse_action.cursorY); -    if (!tab || tab == NO_TABBUFFER) -	return; -    deleteTab(tab); -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} -#endif				/* USE_MOUSE */ - -DEFUN(dispVer, VERSION, "Display version of w3m") -{ -    disp_message(Sprintf("w3m version %s", w3m_version)->ptr, TRUE); -} - -DEFUN(wrapToggle, WRAP_TOGGLE, "Toggle wrap search mode") -{ -    if (WrapSearch) { -	WrapSearch = FALSE; -	/* FIXME: gettextize? */ -	disp_message("Wrap search off", TRUE); -    } -    else { -	WrapSearch = TRUE; -	/* FIXME: gettextize? */ -	disp_message("Wrap search on", TRUE); -    } -} - -static int -is_wordchar(int c, const char *badchars) -{ -    if (badchars) -	return !(IS_SPACE(c) || strchr(badchars, c)); -    else -	return IS_ALPHA(c); -} - -static char * -getCurWord(Buffer *buf, int *spos, int *epos, const char *badchars) -{ -    char *p; -    Line *l = buf->currentLine; -    int b, e; - -    *spos = 0; -    *epos = 0; -    if (l == NULL) -	return NULL; -    p = l->lineBuf; -    e = buf->pos; -    while (e > 0 && !is_wordchar(p[e], badchars)) -	e--; -    if (!is_wordchar(p[e], badchars)) -	return NULL; -    b = e; -    while (b > 0 && is_wordchar(p[b - 1], badchars)) -	b--; -    while (e < l->len && is_wordchar(p[e], badchars)) -	e++; -    *spos = b; -    *epos = e; -    return &p[b]; -} - -static char * -GetWord(Buffer *buf) -{ -    int b, e; -    char *p; - -    if ((p = getCurWord(buf, &b, &e, 0)) != NULL) { -	return Strnew_charp_n(p, e - b)->ptr; -    } -    return NULL; -} - -#ifdef USE_DICT -static void -execdict(char *word) -{ -    char *w, *dictcmd; -    Buffer *buf; - -    if (!UseDictCommand || word == NULL || *word == '\0') { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    w = conv_to_system(word); -    if (*w == '\0') { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    dictcmd = Sprintf("%s?%s", DictCommand, -		      Str_form_quote(Strnew_charp(w))->ptr)->ptr; -    buf = loadGeneralFile(dictcmd, NULL, NO_REFERER, 0, NULL); -    if (buf == NULL) { -	disp_message("Execution failed", TRUE); -	return; -    } -    else { -	buf->filename = w; -	buf->buffername = Sprintf("%s %s", DICTBUFFERNAME, word)->ptr; -	if (buf->type == NULL) -	    buf->type = "text/plain"; -	pushBuffer(buf); -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(dictword, DICT_WORD, "Execute dictionary command (see README.dict)") -{ -    execdict(inputStr("(dictionary)!", "")); -} - -DEFUN(dictwordat, DICT_WORD_AT, -      "Execute dictionary command for word at cursor") -{ -    execdict(GetWord(Currentbuf)); -} -#endif				/* USE_DICT */ - -void -set_buffer_environ(Buffer *buf) -{ -    static Buffer *prev_buf = NULL; -    static Line *prev_line = NULL; -    static int prev_pos = -1; -    Line *l; - -    if (buf == NULL) -	return; -    if (buf != prev_buf) { -	set_environ("W3M_SOURCEFILE", buf->sourcefile); -	set_environ("W3M_FILENAME", buf->filename); -	set_environ("W3M_TITLE", buf->buffername); -	set_environ("W3M_URL", parsedURL2Str(&buf->currentURL)->ptr); -	set_environ("W3M_TYPE", buf->real_type ? buf->real_type : "unknown"); -#ifdef USE_M17N -	set_environ("W3M_CHARSET", wc_ces_to_charset(buf->document_charset)); -#endif -    } -    l = buf->currentLine; -    if (l && (buf != prev_buf || l != prev_line || buf->pos != prev_pos)) { -	Anchor *a; -	ParsedURL pu; -	char *s = GetWord(buf); -	set_environ("W3M_CURRENT_WORD", s ? s : ""); -	a = retrieveCurrentAnchor(buf); -	if (a) { -	    parseURL2(a->url, &pu, baseURL(buf)); -	    set_environ("W3M_CURRENT_LINK", parsedURL2Str(&pu)->ptr); -	} -	else -	    set_environ("W3M_CURRENT_LINK", ""); -	a = retrieveCurrentImg(buf); -	if (a) { -	    parseURL2(a->url, &pu, baseURL(buf)); -	    set_environ("W3M_CURRENT_IMG", parsedURL2Str(&pu)->ptr); -	} -	else -	    set_environ("W3M_CURRENT_IMG", ""); -	a = retrieveCurrentForm(buf); -	if (a) -	    set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url)); -	else -	    set_environ("W3M_CURRENT_FORM", ""); -	set_environ("W3M_CURRENT_LINE", Sprintf("%d", -						l->real_linenumber)->ptr); -	set_environ("W3M_CURRENT_COLUMN", Sprintf("%d", -						  buf->currentColumn + -						  buf->cursorX + 1)->ptr); -    } -    else if (!l) { -	set_environ("W3M_CURRENT_WORD", ""); -	set_environ("W3M_CURRENT_LINK", ""); -	set_environ("W3M_CURRENT_IMG", ""); -	set_environ("W3M_CURRENT_FORM", ""); -	set_environ("W3M_CURRENT_LINE", "0"); -	set_environ("W3M_CURRENT_COLUMN", "0"); -    } -    prev_buf = buf; -    prev_line = l; -    prev_pos = buf->pos; -} - -char * -searchKeyData(void) -{ -    char *data = NULL; - -    if (CurrentKeyData != NULL && *CurrentKeyData != '\0') -	data = CurrentKeyData; -    else if (CurrentCmdData != NULL && *CurrentCmdData != '\0') -	data = CurrentCmdData; -    else if (CurrentKey >= 0) -	data = getKeyData(CurrentKey); -    CurrentKeyData = NULL; -    CurrentCmdData = NULL; -    if (data == NULL || *data == '\0') -	return NULL; -    return allocStr(data, -1); -} - -static int -searchKeyNum(void) -{ -    char *d; -    int n = 1; - -    d = searchKeyData(); -    if (d != NULL) -	n = atoi(d); -    return n * PREC_NUM; -} - -#ifdef __EMX__ -#ifdef USE_M17N -static char * -getCodePage(void) -{ -    unsigned long CpList[8], CpSize; - -    if (!getenv("WINDOWID") && !DosQueryCp(sizeof(CpList), CpList, &CpSize)) -	return Sprintf("CP%d", *CpList)->ptr; -    return NULL; -} -#endif -#endif - -void -deleteFiles() -{ -    Buffer *buf; -    char *f; - -    for (CurrentTab = FirstTab; CurrentTab; CurrentTab = CurrentTab->nextTab) { -	while (Firstbuf && Firstbuf != NO_BUFFER) { -	    buf = Firstbuf->nextBuffer; -	    discardBuffer(Firstbuf); -	    Firstbuf = buf; -	} -    } -    while ((f = popText(fileToDelete)) != NULL) -	unlink(f); -} - -void -w3m_exit(int i) -{ -#ifdef USE_MIGEMO -    init_migemo();		/* close pipe to migemo */ -#endif -    stopDownload(); -    deleteFiles(); -#ifdef USE_SSL -    free_ssl_ctx(); -#endif -    disconnectFTP(); -#ifdef USE_NNTP -    disconnectNews(); -#endif -    exit(i); -} - -DEFUN(execCmd, COMMAND, "Execute w3m command(s)") -{ -    char *data, *p; -    int cmd; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    data = searchKeyData(); -    if (data == NULL || *data == '\0') { -	data = inputStrHist("command [; ...]: ", "", TextHist); -	if (data == NULL) { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -    } -    /* data: FUNC [DATA] [; FUNC [DATA] ...] */ -    while (*data) { -	SKIP_BLANKS(data); -	if (*data == ';') { -	    data++; -	    continue; -	} -	p = getWord(&data); -	cmd = getFuncList(p); -	if (cmd < 0) -	    break; -	p = getQWord(&data); -	CurrentKey = -1; -	CurrentKeyData = NULL; -	CurrentCmdData = *p ? p : NULL; -#ifdef USE_MOUSE -	if (use_mouse) -	    mouse_inactive(); -#endif -	w3mFuncList[cmd].func(); -#ifdef USE_MOUSE -	if (use_mouse) -	    mouse_active(); -#endif -	CurrentCmdData = NULL; -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - -#ifdef USE_ALARM -static MySignalHandler -SigAlarm(SIGNAL_ARG) -{ -    char *data; - -    if (CurrentAlarm->sec > 0) { -	CurrentKey = -1; -	CurrentKeyData = NULL; -	CurrentCmdData = data = (char *)CurrentAlarm->data; -#ifdef USE_MOUSE -	if (use_mouse) -	    mouse_inactive(); -#endif -	w3mFuncList[CurrentAlarm->cmd].func(); -#ifdef USE_MOUSE -	if (use_mouse) -	    mouse_active(); -#endif -	CurrentCmdData = NULL; -	if (CurrentAlarm->status == AL_IMPLICIT_ONCE) { -	    CurrentAlarm->sec = 0; -	    CurrentAlarm->status = AL_UNSET; -	} -	if (Currentbuf->event) { -	    if (Currentbuf->event->status != AL_UNSET) -		CurrentAlarm = Currentbuf->event; -	    else -		Currentbuf->event = NULL; -	} -	if (!Currentbuf->event) -	    CurrentAlarm = &DefaultAlarm; -	if (CurrentAlarm->sec > 0) { -	    mySignal(SIGALRM, SigAlarm); -	    alarm(CurrentAlarm->sec); -	} -    } -    SIGNAL_RETURN; -} - - -DEFUN(setAlarm, ALARM, "Set alarm") -{ -    char *data; -    int sec = 0, cmd = -1; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    data = searchKeyData(); -    if (data == NULL || *data == '\0') { -	data = inputStrHist("(Alarm)sec command: ", "", TextHist); -	if (data == NULL) { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -    } -    if (*data != '\0') { -	sec = atoi(getWord(&data)); -	if (sec > 0) -	    cmd = getFuncList(getWord(&data)); -    } -    if (cmd >= 0) { -	data = getQWord(&data); -	setAlarmEvent(&DefaultAlarm, sec, AL_EXPLICIT, cmd, data); -	disp_message_nsec(Sprintf("%dsec %s %s", sec, w3mFuncList[cmd].id, -				  data)->ptr, FALSE, 1, FALSE, TRUE); -    } -    else { -	setAlarmEvent(&DefaultAlarm, 0, AL_UNSET, FUNCNAME_nulcmd, NULL); -    } -    displayBuffer(Currentbuf, B_NORMAL); -} - -AlarmEvent * -setAlarmEvent(AlarmEvent * event, int sec, short status, int cmd, void *data) -{ -    if (event == NULL) -	event = New(AlarmEvent); -    event->sec = sec; -    event->status = status; -    event->cmd = cmd; -    event->data = data; -    return event; -} -#endif - -DEFUN(reinit, REINIT, "Reload configuration files") -{ -    char *resource = searchKeyData(); - -    if (resource == NULL) { -	init_rc(); -	sync_with_option(); -#ifdef USE_COOKIE -	initCookie(); -#endif -	displayBuffer(Currentbuf, B_REDRAW_IMAGE); -	return; -    } - -    if (!strcasecmp(resource, "CONFIG") || !strcasecmp(resource, "RC")) { -	init_rc(); -	sync_with_option(); -	displayBuffer(Currentbuf, B_REDRAW_IMAGE); -	return; -    } - -#ifdef USE_COOKIE -    if (!strcasecmp(resource, "COOKIE")) { -	initCookie(); -	return; -    } -#endif - -    if (!strcasecmp(resource, "KEYMAP")) { -	initKeymap(TRUE); -	return; -    } - -    if (!strcasecmp(resource, "MAILCAP")) { -	initMailcap(); -	return; -    } - -#ifdef USE_MOUSE -    if (!strcasecmp(resource, "MOUSE")) { -	initMouseAction(); -	displayBuffer(Currentbuf, B_REDRAW_IMAGE); -	return; -    } -#endif - -#ifdef USE_MENU -    if (!strcasecmp(resource, "MENU")) { -	initMenu(); -	return; -    } -#endif - -    if (!strcasecmp(resource, "MIMETYPES")) { -	initMimeTypes(); -	return; -    } - -#ifdef USE_EXTERNAL_URI_LOADER -    if (!strcasecmp(resource, "URIMETHODS")) { -	initURIMethods(); -	return; -    } -#endif - -    disp_err_message(Sprintf("Don't know how to reinitialize '%s'", resource)-> -		     ptr, FALSE); -} - -DEFUN(defKey, DEFINE_KEY, -      "Define a binding between a key stroke and a user command") -{ -    char *data; - -    CurrentKeyData = NULL;	/* not allowed in w3m-control: */ -    data = searchKeyData(); -    if (data == NULL || *data == '\0') { -	data = inputStrHist("Key definition: ", "", TextHist); -	if (data == NULL || *data == '\0') { -	    displayBuffer(Currentbuf, B_NORMAL); -	    return; -	} -    } -    setKeymap(allocStr(data, -1), -1, TRUE); -    displayBuffer(Currentbuf, B_NORMAL); -} - -TabBuffer * -newTab(void) -{ -    TabBuffer *n; - -    n = New(TabBuffer); -    if (n == NULL) -	return NULL; -    n->nextTab = NULL; -    n->currentBuffer = NULL; -    n->firstBuffer = NULL; -    return n; -} - -static void -_newT(void) -{ -    TabBuffer *tag; -    Buffer *buf; -    int i; - -    tag = newTab(); -    if (!tag) -	return; - -    buf = newBuffer(Currentbuf->width); -    copyBuffer(buf, Currentbuf); -    buf->nextBuffer = NULL; -    for (i = 0; i < MAX_LB; i++) -	buf->linkBuffer[i] = NULL; -    (*buf->clone)++; -    tag->firstBuffer = tag->currentBuffer = buf; - -    tag->nextTab = CurrentTab->nextTab; -    tag->prevTab = CurrentTab; -    if (CurrentTab->nextTab) -	CurrentTab->nextTab->prevTab = tag; -    else -	LastTab = tag; -    CurrentTab->nextTab = tag; -    CurrentTab = tag; -    nTab++; -} - -DEFUN(newT, NEW_TAB, "Open new tab") -{ -    _newT(); -    displayBuffer(Currentbuf, B_REDRAW_IMAGE); -} - -static TabBuffer * -numTab(int n) -{ -    TabBuffer *tab; -    int i; - -    if (n == 0) -	return CurrentTab; -    if (n == 1) -	return FirstTab; -    if (nTab <= 1) -	return NULL; -    for (tab = FirstTab, i = 1; tab && i < n; tab = tab->nextTab, i++) ; -    return tab; -} - -void -calcTabPos(void) -{ -    TabBuffer *tab; -#if 0 -    int lcol = 0, rcol = 2, col; -#else -    int lcol = 0, rcol = 0, col; -#endif -    int n1, n2, na, nx, ny, ix, iy; - -#ifdef USE_MOUSE -    lcol = mouse_action.menu_str ? mouse_action.menu_width : 0; -#endif - -    if (nTab <= 0) -	return; -    n1 = (COLS - rcol - lcol) / TabCols; -    if (n1 >= nTab) { -	n2 = 1; -	ny = 1; -    } -    else { -	if (n1 < 0) -	    n1 = 0; -	n2 = COLS / TabCols; -	if (n2 == 0) -	    n2 = 1; -	ny = (nTab - n1 - 1) / n2 + 2; -    } -    na = n1 + n2 * (ny - 1); -    n1 -= (na - nTab) / ny; -    if (n1 < 0) -	n1 = 0; -    na = n1 + n2 * (ny - 1); -    tab = FirstTab; -    for (iy = 0; iy < ny && tab; iy++) { -	if (iy == 0) { -	    nx = n1; -	    col = COLS - rcol - lcol; -	} -	else { -	    nx = n2 - (na - nTab + (iy - 1)) / (ny - 1); -	    col = COLS; -	} -	for (ix = 0; ix < nx && tab; ix++, tab = tab->nextTab) { -	    tab->x1 = col * ix / nx; -	    tab->x2 = col * (ix + 1) / nx - 1; -	    tab->y = iy; -	    if (iy == 0) { -		tab->x1 += lcol; -		tab->x2 += lcol; -	    } -	} -    } -} - -TabBuffer * -deleteTab(TabBuffer * tab) -{ -    Buffer *buf, *next; - -    if (nTab <= 1) -	return FirstTab; -    if (tab->prevTab) { -	if (tab->nextTab) -	    tab->nextTab->prevTab = tab->prevTab; -	else -	    LastTab = tab->prevTab; -	tab->prevTab->nextTab = tab->nextTab; -	if (tab == CurrentTab) -	    CurrentTab = tab->prevTab; -    } -    else {			/* tab == FirstTab */ -	tab->nextTab->prevTab = NULL; -	FirstTab = tab->nextTab; -	if (tab == CurrentTab) -	    CurrentTab = tab->nextTab; -    } -    nTab--; -    buf = tab->firstBuffer; -    while (buf && buf != NO_BUFFER) { -	next = buf->nextBuffer; -	discardBuffer(buf); -	buf = next; -    } -    return FirstTab; -} - -DEFUN(closeT, CLOSE_TAB, "Close current tab") -{ -    TabBuffer *tab; - -    if (nTab <= 1) -	return; -    if (prec_num) -	tab = numTab(PREC_NUM); -    else -	tab = CurrentTab; -    if (tab) -	deleteTab(tab); -    displayBuffer(Currentbuf, B_REDRAW_IMAGE); -} - -DEFUN(nextT, NEXT_TAB, "Move to next tab") -{ -    int i; - -    if (nTab <= 1) -	return; -    for (i = 0; i < PREC_NUM; i++) { -	if (CurrentTab->nextTab) -	    CurrentTab = CurrentTab->nextTab; -	else -	    CurrentTab = FirstTab; -    } -    displayBuffer(Currentbuf, B_REDRAW_IMAGE); -} - -DEFUN(prevT, PREV_TAB, "Move to previous tab") -{ -    int i; - -    if (nTab <= 1) -	return; -    for (i = 0; i < PREC_NUM; i++) { -	if (CurrentTab->prevTab) -	    CurrentTab = CurrentTab->prevTab; -	else -	    CurrentTab = LastTab; -    } -    displayBuffer(Currentbuf, B_REDRAW_IMAGE); -} - -void -followTab(TabBuffer * tab) -{ -    Buffer *buf; -    Anchor *a; - -#ifdef USE_IMAGE -    a = retrieveCurrentImg(Currentbuf); -    if (!(a && a->image && a->image->map)) -#endif -	a = retrieveCurrentAnchor(Currentbuf); -    if (a == NULL) -	return; - -    if (tab == CurrentTab) { -	check_target = FALSE; -	followA(); -	check_target = TRUE; -	return; -    } -    _newT(); -    buf = Currentbuf; -    check_target = FALSE; -    followA(); -    check_target = TRUE; -    if (tab == NULL) { -	if (buf != Currentbuf) -	    delBuffer(buf); -	else -	    deleteTab(CurrentTab); -    } -    else if (buf != Currentbuf) { -	/* buf <- p <- ... <- Currentbuf = c */ -	Buffer *c, *p; - -	c = Currentbuf; -	p = prevBuffer(c, buf); -	p->nextBuffer = NULL; -	Firstbuf = buf; -	deleteTab(CurrentTab); -	CurrentTab = tab; -	for (buf = p; buf; buf = p) { -	    p = prevBuffer(c, buf); -	    pushBuffer(buf); -	} -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(tabA, TAB_LINK, "Open current link on new tab") -{ -    followTab(prec_num ? numTab(PREC_NUM) : NULL); -} - -static void -tabURL0(TabBuffer * tab, char *prompt, int relative) -{ -    Buffer *buf; - -    if (tab == CurrentTab) { -	goURL0(prompt, relative); -	return; -    } -    _newT(); -    buf = Currentbuf; -    goURL0(prompt, relative); -    if (tab == NULL) { -	if (buf != Currentbuf) -	    delBuffer(buf); -	else -	    deleteTab(CurrentTab); -    } -    else if (buf != Currentbuf) { -	/* buf <- p <- ... <- Currentbuf = c */ -	Buffer *c, *p; - -	c = Currentbuf; -	p = prevBuffer(c, buf); -	p->nextBuffer = NULL; -	Firstbuf = buf; -	deleteTab(CurrentTab); -	CurrentTab = tab; -	for (buf = p; buf; buf = p) { -	    p = prevBuffer(c, buf); -	    pushBuffer(buf); -	} -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(tabURL, TAB_GOTO, "Open URL on new tab") -{ -    tabURL0(prec_num ? numTab(PREC_NUM) : NULL, -	    "Goto URL on new tab: ", FALSE); -} - -DEFUN(tabrURL, TAB_GOTO_RELATIVE, "Open relative URL on new tab") -{ -    tabURL0(prec_num ? numTab(PREC_NUM) : NULL, -	    "Goto relative URL on new tab: ", TRUE); -} - -void -moveTab(TabBuffer * t, TabBuffer * t2, int right) -{ -    if (t2 == NO_TABBUFFER) -	t2 = FirstTab; -    if (!t || !t2 || t == t2 || t == NO_TABBUFFER) -	return; -    if (t->prevTab) { -	if (t->nextTab) -	    t->nextTab->prevTab = t->prevTab; -	else -	    LastTab = t->prevTab; -	t->prevTab->nextTab = t->nextTab; -    } -    else { -	t->nextTab->prevTab = NULL; -	FirstTab = t->nextTab; -    } -    if (right) { -	t->nextTab = t2->nextTab; -	t->prevTab = t2; -	if (t2->nextTab) -	    t2->nextTab->prevTab = t; -	else -	    LastTab = t; -	t2->nextTab = t; -    } -    else { -	t->prevTab = t2->prevTab; -	t->nextTab = t2; -	if (t2->prevTab) -	    t2->prevTab->nextTab = t; -	else -	    FirstTab = t; -	t2->prevTab = t; -    } -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(tabR, TAB_RIGHT, "Move current tab right") -{ -    TabBuffer *tab; -    int i; - -    for (tab = CurrentTab, i = 0; tab && i < PREC_NUM; -	 tab = tab->nextTab, i++) ; -    moveTab(CurrentTab, tab ? tab : LastTab, TRUE); -} - -DEFUN(tabL, TAB_LEFT, "Move current tab left") -{ -    TabBuffer *tab; -    int i; - -    for (tab = CurrentTab, i = 0; tab && i < PREC_NUM; -	 tab = tab->prevTab, i++) ; -    moveTab(CurrentTab, tab ? tab : FirstTab, FALSE); -} - -void -addDownloadList(pid_t pid, char *url, char *save, char *lock, clen_t size) -{ -    DownloadList *d; - -    d = New(DownloadList); -    d->pid = pid; -    d->url = url; -    if (save[0] != '/' && save[0] != '~') -	save = Strnew_m_charp(CurrentDir, "/", save, NULL)->ptr; -    d->save = expandPath(save); -    d->lock = lock; -    d->size = size; -    d->time = time(0); -    d->ok = FALSE; -    d->next = NULL; -    d->prev = LastDL; -    if (LastDL) -	LastDL->next = d; -    else -	FirstDL = d; -    LastDL = d; -    add_download_list = TRUE; -} - -int -checkDownloadList(void) -{ -    DownloadList *d; -    struct stat st; - -    if (!FirstDL) -	return FALSE; -    for (d = FirstDL; d != NULL; d = d->next) { -	if (!d->ok && !lstat(d->lock, &st)) -	    return TRUE; -    } -    return FALSE; -} - -static char * -convert_size3(clen_t size) -{ -    Str tmp = Strnew(); -    int n; - -    do { -	n = size % 1000; -	size /= 1000; -	tmp = Sprintf(size ? ",%.3d%s" : "%d%s", n, tmp->ptr); -    } while (size); -    return tmp->ptr; -} - -static Buffer * -DownloadListBuffer(void) -{ -    DownloadList *d; -    Str src = NULL; -    struct stat st; -    time_t cur_time; -    int duration, rate, eta; -    size_t size; - -    if (!FirstDL) -	return NULL; -    cur_time = time(0); -    /* FIXME: gettextize? */ -    src = Strnew_charp("<html><head><title>" DOWNLOAD_LIST_TITLE -		       "</title></head>\n<body><h1 align=center>" -		       DOWNLOAD_LIST_TITLE "</h1>\n" -		       "<form method=internal action=download><hr>\n"); -    for (d = LastDL; d != NULL; d = d->prev) { -	if (lstat(d->lock, &st)) -	    d->ok = TRUE; -	Strcat_charp(src, "<pre>\n"); -	Strcat(src, Sprintf("%s\n  --> %s\n  ", html_quote(d->url), -			    html_quote(conv_from_system(d->save)))); -	duration = cur_time - d->time; -	if (!stat(d->save, &st)) { -	    size = st.st_size; -	    if (d->ok) { -		d->size = size; -		duration = st.st_mtime - d->time; -	    } -	} -	else -	    size = 0; -	if (d->size) { -	    int i, l = COLS - 6; -	    if (size < d->size) -		i = 1.0 * l * size / d->size; -	    else -		i = l; -	    l -= i; -	    while (i-- > 0) -		Strcat_char(src, '#'); -	    while (l-- > 0) -		Strcat_char(src, '_'); -	    Strcat_char(src, '\n'); -	} -	if (!d->ok && size < d->size) -	    Strcat(src, Sprintf("  %s / %s bytes (%d%%)", -				convert_size3(size), convert_size3(d->size), -				(int)(100.0 * size / d->size))); -	else -	    Strcat(src, Sprintf("  %s bytes loaded", convert_size3(size))); -	if (duration > 0) { -	    rate = size / duration; -	    Strcat(src, Sprintf("  %02d:%02d:%02d  rate %s/sec", -				duration / (60 * 60), (duration / 60) % 60, -				duration % 60, convert_size(rate, 1))); -	    if (!d->ok && size < d->size && rate) { -		eta = (d->size - size) / rate; -		Strcat(src, Sprintf("  eta %02d:%02d:%02d", eta / (60 * 60), -				    (eta / 60) % 60, eta % 60)); -	    } -	} -	Strcat_char(src, '\n'); -	if (d->ok) { -	    Strcat(src, Sprintf("<input type=submit name=ok%d value=OK>", -				d->pid)); -	    if (size < d->size) -		Strcat_charp(src, " Download incompleted"); -	    else -		Strcat_charp(src, " Download completed"); -	} -	else -	    Strcat(src, Sprintf("<input type=submit name=stop%d value=STOP>", -				d->pid)); -	Strcat_charp(src, "\n</pre><hr>\n"); -    } -    Strcat_charp(src, "</form></body></html>"); -    return loadHTMLString(src); -} - -void -download_action(struct parsed_tagarg *arg) -{ -    DownloadList *d; -    pid_t pid; - -    for (; arg; arg = arg->next) { -	if (!strncmp(arg->arg, "stop", 4)) { -	    pid = (pid_t) atoi(&arg->arg[4]); -	    kill(pid, SIGKILL); -	} -	else if (!strncmp(arg->arg, "ok", 2)) -	    pid = (pid_t) atoi(&arg->arg[2]); -	else -	    continue; -	for (d = FirstDL; d; d = d->next) { -	    if (d->pid == pid) { -		unlink(d->lock); -		if (d->prev) -		    d->prev->next = d->next; -		else -		    FirstDL = d->next; -		if (d->next) -		    d->next->prev = d->prev; -		else -		    LastDL = d->prev; -		break; -	    } -	} -    } -    ldDL(); -} - -void -stopDownload(void) -{ -    DownloadList *d; - -    if (!FirstDL) -	return; -    for (d = FirstDL; d != NULL; d = d->next) { -	if (d->ok) -	    continue; -	kill(d->pid, SIGKILL); -	unlink(d->lock); -    } -} - -/* download panel */ -DEFUN(ldDL, DOWNLOAD_LIST, "Display download list panel") -{ -    Buffer *buf; -    int replace = FALSE, new_tab = FALSE; -#ifdef USE_ALARM -    int reload; -#endif - -    if (Currentbuf->bufferprop & BP_INTERNAL && -	!strcmp(Currentbuf->buffername, DOWNLOAD_LIST_TITLE)) -	replace = TRUE; -    if (!FirstDL) { -	if (replace) { -	    if (Currentbuf == Firstbuf && Currentbuf->nextBuffer == NULL) { -		if (nTab > 1) -		    deleteTab(CurrentTab); -	    } -	    else -		delBuffer(Currentbuf); -	    displayBuffer(Currentbuf, B_FORCE_REDRAW); -	} -	return; -    } -#ifdef USE_ALARM -    reload = checkDownloadList(); -#endif -    buf = DownloadListBuffer(); -    if (!buf) { -	displayBuffer(Currentbuf, B_NORMAL); -	return; -    } -    buf->bufferprop |= (BP_INTERNAL | BP_NO_URL); -    if (replace) -	restorePosition(buf, Currentbuf); -    if (!replace && open_tab_dl_list) { -	_newT(); -	new_tab = TRUE; -    } -    pushBuffer(buf); -    if (replace || new_tab) -	deletePrevBuf(); -#ifdef USE_ALARM -    if (reload) -	Currentbuf->event = setAlarmEvent(Currentbuf->event, 1, AL_IMPLICIT, -					  FUNCNAME_reload, NULL); -#endif -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -static void -save_buffer_position(Buffer *buf) -{ -    BufferPos *b = buf->undo; - -    if (!buf->firstLine) -	return; -    if (b && b->top_linenumber == TOP_LINENUMBER(buf) && -	b->cur_linenumber == CUR_LINENUMBER(buf) && -	b->currentColumn == buf->currentColumn && b->pos == buf->pos) -	return; -    b = New(BufferPos); -    b->top_linenumber = TOP_LINENUMBER(buf); -    b->cur_linenumber = CUR_LINENUMBER(buf); -    b->currentColumn = buf->currentColumn; -    b->pos = buf->pos; -    b->bpos = buf->currentLine ? buf->currentLine->bpos : 0; -    b->next = NULL; -    b->prev = buf->undo; -    if (buf->undo) -	buf->undo->next = b; -    buf->undo = b; -} - -static void -resetPos(BufferPos * b) -{ -    Buffer buf; -    Line top, cur; - -    top.linenumber = b->top_linenumber; -    cur.linenumber = b->cur_linenumber; -    cur.bpos = b->bpos; -    buf.topLine = ⊤ -    buf.currentLine = &cur; -    buf.pos = b->pos; -    buf.currentColumn = b->currentColumn; -    restorePosition(Currentbuf, &buf); -    Currentbuf->undo = b; -    displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -DEFUN(undoPos, UNDO, "Cancel the last cursor movement") -{ -    BufferPos *b = Currentbuf->undo; -    int i; - -    if (!Currentbuf->firstLine) -	return; -    if (!b || !b->prev) -	return; -    for (i = 0; i < PREC_NUM && b->prev; i++, b = b->prev) ; -    resetPos(b); -} - -DEFUN(redoPos, REDO, "Cancel the last undo") -{ -    BufferPos *b = Currentbuf->undo; -    int i; - -    if (!Currentbuf->firstLine) -	return; -    if (!b || !b->next) -	return; -    for (i = 0; i < PREC_NUM && b->next; i++, b = b->next) ; -    resetPos(b); -} diff --git a/Bonus/CVS/Entries b/Bonus/CVS/Entries deleted file mode 100644 index b22f196..0000000 --- a/Bonus/CVS/Entries +++ /dev/null @@ -1,15 +0,0 @@ -/2ch.cgi/1.3/Sat Apr 26 17:01:02 2003// -/README/1.4/Wed Jan 15 15:51:29 2003// -/README.eng/1.4/Wed Jan 15 15:51:30 2003// -/backslash_to_slash.cgi/1.1/Tue Apr 15 14:46:23 2003// -/goodict.cgi/1.2/Sat Apr 12 14:28:56 2003// -/google.cgi/1.1/Fri Jan 10 16:24:01 2003// -/html2latex/1.2/Fri Nov  9 04:59:18 2001// -/htmldump/1.1.1.1/Thu Nov  8 05:16:01 2001// -/makeref/1.1.1.1/Thu Nov  8 05:16:01 2001// -/oldconfigure.sh/1.3/Wed Mar 12 17:20:47 2003// -/scanhist.rb/1.1.1.1/Thu Nov  8 05:16:01 2001// -/smb.cgi/1.3/Fri Jan 31 16:25:12 2003// -/utf8.cgi/1.1/Thu Feb 27 15:14:42 2003// -/wrap3m/1.1.1.1/Thu Nov  8 05:16:01 2001// -D diff --git a/Bonus/CVS/Repository b/Bonus/CVS/Repository deleted file mode 100644 index a8a0516..0000000 --- a/Bonus/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/Bonus diff --git a/Bonus/CVS/Root b/Bonus/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/Bonus/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/CVS/Entries b/CVS/Entries deleted file mode 100644 index 55c22e0..0000000 --- a/CVS/Entries +++ /dev/null @@ -1,114 +0,0 @@ -/.cvsignore/1.12/Fri Sep 26 20:45:53 2003// -/README/1.1.1.1/Thu Nov  8 05:14:08 2001// -/Str.c/1.8/Tue Dec 24 17:20:46 2002// -/Str.h/1.6/Fri Apr  7 13:35:35 2006// -/TODO/1.21/Sun Apr  4 16:47:20 2004// -/anchor.c/1.33/Sat Apr  8 11:33:16 2006// -/charset-list/1.1/Mon Sep 22 21:02:16 2003// -/config.guess/1.2/Wed Aug  4 17:32:27 2004// -/config.h.dist/1.36/Fri Apr  9 17:18:49 2004// -/config.sub/1.2/Wed Aug  4 17:32:27 2004// -/ctrlcode.h/1.3/Mon Sep 22 21:02:17 2003// -/entity.c/1.7/Wed Sep 24 18:48:59 2003// -/entity.tab/1.1/Fri Nov  9 04:59:17 2001// -/form.h/1.6/Mon Sep 22 21:02:18 2003// -/frame.c/1.34/Fri Sep 26 17:59:51 2003// -/frame.h/1.6/Sat Jan 25 17:42:17 2003// -/func.c/1.27/Fri Sep 26 17:59:51 2003// -/func.h/1.4/Tue Dec  3 16:01:33 2002// -/funcname0.awk/1.1.1.1/Thu Nov  8 05:14:56 2001// -/funcname1.awk/1.1.1.1/Thu Nov  8 05:14:56 2001// -/funcname2.awk/1.1.1.1/Thu Nov  8 05:14:56 2001// -/functable.awk/1.1/Mon Dec 10 17:02:44 2001// -/hash.c/1.5/Mon Apr  7 16:27:10 2003// -/hash.h/1.6/Wed Sep 24 18:48:59 2003// -/history.c/1.11/Fri Sep 26 17:59:51 2003// -/history.h/1.5/Sat Jan 26 17:24:01 2002// -/indep.h/1.16/Mon Sep 22 21:02:19 2003// -/inflate.c/1.7/Thu Jan 31 18:28:24 2002// -/islang.c/1.3/Sat Feb 26 17:06:44 2005// -/istream.h/1.12/Mon Oct 20 16:41:56 2003// -/local.h/1.3/Tue Nov 20 17:49:23 2001// -/map.c/1.30/Wed Sep 24 18:49:00 2003// -/matrix.c/1.8/Mon Apr  7 16:27:10 2003// -/matrix.h/1.7/Thu Jul 18 14:59:02 2002// -/menu.h/1.2/Tue Nov 20 17:49:23 2001// -/mimehead.c/1.10/Sun Oct  5 18:52:51 2003// -/mkinstalldirs/1.1/Tue Sep 23 18:42:25 2003// -/myctype.c/1.7/Mon Sep 22 21:02:20 2003// -/myctype.h/1.6/Mon Sep 22 21:02:20 2003// -/news.c/1.17/Sun Oct  5 18:52:51 2003// -/parsetag.c/1.4/Tue Nov 20 17:49:23 2001// -/parsetag.h/1.2/Tue Nov 20 17:49:23 2001// -/parsetagx.h/1.4/Sat Nov 24 02:01:26 2001// -/posubst.in/1.1/Thu Sep 25 18:15:47 2003// -/regex.h/1.6/Mon Sep 22 21:02:21 2003// -/scrsize.c/1.2/Sat Nov 24 02:01:26 2001// -/search.c/1.31/Tue Mar 23 16:44:02 2004// -/table.h/1.12/Mon Sep 22 21:02:21 2003// -/terms.h/1.10/Thu Jul 15 16:32:39 2004// -/textlist.c/1.6/Mon Apr  7 16:27:11 2003// -/textlist.h/1.6/Mon Jan 20 15:30:22 2003// -/w3mhelp-lynx_en.html.in/1.1/Fri Dec 21 22:02:39 2001// -/w3mhelp-lynx_ja.html.in/1.1/Fri Dec 21 22:02:39 2001// -/w3mhelp-w3m_en.html.in/1.1/Fri Dec 21 22:02:39 2001// -/w3mhelp-w3m_ja.html.in/1.1/Fri Dec 21 22:02:39 2001// -D/Bonus//// -D/Patches//// -D/Symbols//// -D/doc//// -D/doc-jp//// -D/gc//// -D/intl//// -D/libwc//// -D/po//// -D/scripts//// -D/w3m-doc//// -D/w3mimg//// -/keybind.c/1.10/Sat Jun 10 09:52:18 2006// -/keybind_lynx.c/1.8/Sat Jun 10 09:52:18 2006// -/parsetagx.c/1.18/Sat Jun 10 09:52:18 2006// -/mailcap.c/1.13/Tue Jan 23 12:24:11 2007// -/Makefile.in/1.44/Tue Jan  4 09:22:18 2011// -/acinclude.m4/1.45/Tue Jan  4 09:22:18 2011// -/aclocal.m4/1.46/Tue Jan  4 09:22:18 2011// -/backend.c/1.15/Tue Jan  4 09:22:19 2011// -/buffer.c/1.30/Tue Jan  4 09:22:19 2011// -/config.h.in/1.21/Tue Jan  4 09:22:19 2011// -/cookie.c/1.11/Tue Jan  4 09:22:20 2011// -/display.c/1.71/Tue Jan  4 09:22:20 2011// -/etc.c/1.81/Tue Jan  4 09:22:20 2011// -/file.c/1.265/Tue Jan  4 09:22:21 2011// -/fm.h/1.149/Tue Jan  4 09:22:21 2011// -/form.c/1.35/Tue Jan  4 09:22:21 2011// -/ftp.c/1.42/Tue Jan  4 09:22:21 2011// -/html.c/1.32/Tue Jan  4 09:22:21 2011// -/html.h/1.31/Tue Jan  4 09:22:21 2011// -/image.c/1.37/Tue Jan  4 09:22:22 2011// -/indep.c/1.38/Tue Jan  4 09:22:22 2011// -/istream.c/1.27/Tue Jan  4 09:22:22 2011// -/linein.c/1.35/Tue Jan  4 09:22:22 2011// -/local.c/1.35/Tue Jan  4 09:22:22 2011// -/menu.c/1.46/Tue Jan  4 09:22:23 2011// -/mktable.c/1.16/Tue Jan  4 09:22:23 2011// -/proto.h/1.104/Tue Jan  4 09:22:23 2011// -/rc.c/1.116/Tue Jan  4 09:22:23 2011// -/regex.c/1.23/Tue Jan  4 09:22:23 2011// -/symbol.c/1.4/Tue Jan  4 09:22:23 2011// -/table.c/1.58/Tue Jan  4 09:22:23 2011// -/tagtable.tab/1.14/Tue Jan  4 09:22:23 2011// -/terms.c/1.63/Tue Jan  4 09:22:23 2011// -/url.c/1.100/Tue Jan  4 09:22:24 2011// -/w3mbookmark.c/1.12/Tue Jan  4 09:22:24 2011// -/w3mhelperpanel.c/1.14/Tue Jan  4 09:22:24 2011// -/w3mimgdisplay.c/1.19/Tue Jan  4 09:22:24 2011// -/main.c/1.270/Tue Jan  4 09:42:19 2011// -/ABOUT-NLS/1.2/Tue Jan  4 12:39:27 2011// -/config.rpath/1.2/Tue Jan  4 12:39:29 2011// -/entity.h/1.6/Tue Jan  4 12:39:29 2011// -/install-sh/1.8/Tue Jan  4 12:39:29 2011// -/ChangeLog/1.1050/Sat Jan 15 07:52:48 2011// -/NEWS/1.80/Sat Jan 15 03:01:36 2011// -/configure/1.164/Sat Jan 15 03:04:22 2011// -/configure.ac/1.12/Sat Jan 15 03:01:55 2011// -/version.c.in/1.48/Sat Jan 15 07:52:48 2011// diff --git a/CVS/Repository b/CVS/Repository deleted file mode 100644 index 625add0..0000000 --- a/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m diff --git a/CVS/Root b/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/Patches/CVS/Entries b/Patches/CVS/Entries deleted file mode 100644 index 1784810..0000000 --- a/Patches/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/Patches/CVS/Repository b/Patches/CVS/Repository deleted file mode 100644 index cd4278c..0000000 --- a/Patches/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/Patches diff --git a/Patches/CVS/Root b/Patches/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/Patches/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/Symbols/CVS/Entries b/Symbols/CVS/Entries deleted file mode 100644 index dc12f1a..0000000 --- a/Symbols/CVS/Entries +++ /dev/null @@ -1,11 +0,0 @@ -/alt.sym/1.1/Mon Sep 22 21:02:22 2003// -/big5.sym/1.1/Mon Sep 22 21:02:22 2003// -/cp850.sym/1.1/Mon Sep 22 21:02:22 2003// -/euccn.sym/1.1/Mon Sep 22 21:02:22 2003// -/eucjp.sym/1.1/Mon Sep 22 21:02:22 2003// -/euckr.sym/1.1/Mon Sep 22 21:02:22 2003// -/euctw.sym/1.1/Mon Sep 22 21:02:22 2003// -/graph.sym/1.1/Mon Sep 22 21:02:22 2003// -/sym.pl/1.1/Mon Sep 22 21:02:22 2003// -/utf8.sym/1.1/Mon Sep 22 21:02:22 2003// -D diff --git a/Symbols/CVS/Repository b/Symbols/CVS/Repository deleted file mode 100644 index 9d32bc6..0000000 --- a/Symbols/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/Symbols diff --git a/Symbols/CVS/Root b/Symbols/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/Symbols/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/doc-jp/CVS/Entries b/doc-jp/CVS/Entries deleted file mode 100644 index cfd3d8e..0000000 --- a/doc-jp/CVS/Entries +++ /dev/null @@ -1,26 +0,0 @@ -/FAQ.html/1.9/Sat Apr  8 11:26:23 2006// -/HISTORY/1.1.1.1/Thu Nov  8 05:16:27 2001// -/README.SSL/1.4/Tue May 13 17:17:54 2003// -/README.cygwin/1.4/Sun Feb 23 16:00:17 2003// -/README.dict/1.4/Wed Apr 24 18:46:48 2002// -/README.func/1.22/Mon Sep 22 21:02:23 2003// -/README.keymap/1.1.1.1/Thu Nov  8 05:16:34 2001// -/README.mailcap/1.2/Fri Nov  9 04:59:18 2001// -/README.menu/1.2/Wed Nov 27 16:28:37 2002// -/README.migemo/1.2/Tue May 13 17:17:54 2003// -/README.mouse/1.1/Mon Nov 25 17:23:47 2002// -/README.pre_form/1.3/Mon May 12 16:24:53 2003// -/README.tab/1.1/Tue Nov  5 17:24:48 2002// -/STORY.html/1.3/Tue May 13 17:17:54 2003// -/keymap.lynx/1.4/Fri Dec 13 03:02:04 2002// -/menu.default/1.4/Fri Apr  7 15:22:07 2006// -/menu.submenu/1.3/Fri Apr  7 15:22:07 2006// -/keymap.default/1.8/Sat Jun 10 09:52:18 2006// -/MANUAL.html/1.9/Tue Jan  4 09:22:24 2011// -/README.img/1.7/Tue Jan  4 09:22:24 2011// -/README.m17n/1.3/Tue Jan  4 09:22:24 2011// -/README.passwd/1.1/Tue Aug  3 10:02:16 2010// -/w3m.1/1.7/Tue Jan  4 09:22:24 2011// -/README.cookie/1.4/Sat Jan 15 01:57:39 2011// -/README/1.26/Sat Jan 15 02:17:10 2011// -D diff --git a/doc-jp/CVS/Repository b/doc-jp/CVS/Repository deleted file mode 100644 index f7f574e..0000000 --- a/doc-jp/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/doc-jp diff --git a/doc-jp/CVS/Root b/doc-jp/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/doc-jp/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/doc/CVS/Entries b/doc/CVS/Entries deleted file mode 100644 index 8cae998..0000000 --- a/doc/CVS/Entries +++ /dev/null @@ -1,21 +0,0 @@ -/HISTORY/1.2/Tue Jul  9 05:54:46 2002// -/README.cygwin/1.5/Sun Feb 23 16:00:16 2003// -/README.dict/1.4/Wed Apr 24 18:46:48 2002// -/README.func/1.21/Mon Sep 22 21:02:22 2003// -/README.mouse/1.1/Mon Nov 25 17:23:45 2002// -/README.pre_form/1.3/Mon May 12 16:24:53 2003// -/README.tab/1.1/Tue Nov  5 17:24:47 2002// -/STORY.html/1.3/Wed Nov 21 04:29:14 2001// -/keymap.lynx/1.4/Fri Dec 13 03:02:04 2002// -/menu.default/1.4/Fri Apr  7 15:05:49 2006// -/menu.submenu/1.3/Fri Apr  7 15:05:49 2006// -/keymap.default/1.8/Sat Jun 10 09:52:18 2006// -/FAQ.html/1.9/Tue Jan  4 09:22:24 2011// -/MANUAL.html/1.6/Tue Jan  4 09:22:24 2011// -/README.img/1.6/Tue Jan  4 09:22:24 2011// -/README.m17n/1.3/Tue Jan  4 09:22:24 2011// -/README.passwd/1.1/Tue Aug  3 10:02:16 2010// -/README.cookie/1.2/Sat Jan 15 01:57:39 2011// -/README/1.26/Sat Jan 15 02:17:25 2011// -/w3m.1/1.9/Sat Jan 15 06:37:24 2011// -D diff --git a/doc/CVS/Repository b/doc/CVS/Repository deleted file mode 100644 index 5431c7e..0000000 --- a/doc/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/doc diff --git a/doc/CVS/Root b/doc/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/doc/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/gc/CVS/Entries b/gc/CVS/Entries deleted file mode 100644 index 7eb3836..0000000 --- a/gc/CVS/Entries +++ /dev/null @@ -1,5 +0,0 @@ -D/Mac_files//// -D/cord//// -D/doc//// -D/include//// -D/tests//// diff --git a/gc/CVS/Repository b/gc/CVS/Repository deleted file mode 100644 index e390d2f..0000000 --- a/gc/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/gc diff --git a/gc/CVS/Root b/gc/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/gc/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/gc/Mac_files/CVS/Entries b/gc/Mac_files/CVS/Entries deleted file mode 100644 index 1784810..0000000 --- a/gc/Mac_files/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/gc/Mac_files/CVS/Repository b/gc/Mac_files/CVS/Repository deleted file mode 100644 index 3832d0b..0000000 --- a/gc/Mac_files/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/gc/Mac_files diff --git a/gc/Mac_files/CVS/Root b/gc/Mac_files/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/gc/Mac_files/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/gc/cord/CVS/Entries b/gc/cord/CVS/Entries deleted file mode 100644 index a7ce60a..0000000 --- a/gc/cord/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D/private//// diff --git a/gc/cord/CVS/Repository b/gc/cord/CVS/Repository deleted file mode 100644 index 656cb33..0000000 --- a/gc/cord/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/gc/cord diff --git a/gc/cord/CVS/Root b/gc/cord/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/gc/cord/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/gc/cord/private/CVS/Entries b/gc/cord/private/CVS/Entries deleted file mode 100644 index 1784810..0000000 --- a/gc/cord/private/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/gc/cord/private/CVS/Repository b/gc/cord/private/CVS/Repository deleted file mode 100644 index 8bf419d..0000000 --- a/gc/cord/private/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/gc/cord/private diff --git a/gc/cord/private/CVS/Root b/gc/cord/private/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/gc/cord/private/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/gc/doc/CVS/Entries b/gc/doc/CVS/Entries deleted file mode 100644 index 1784810..0000000 --- a/gc/doc/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/gc/doc/CVS/Repository b/gc/doc/CVS/Repository deleted file mode 100644 index 24977cc..0000000 --- a/gc/doc/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/gc/doc diff --git a/gc/doc/CVS/Root b/gc/doc/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/gc/doc/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/gc/include/CVS/Entries b/gc/include/CVS/Entries deleted file mode 100644 index a7ce60a..0000000 --- a/gc/include/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D/private//// diff --git a/gc/include/CVS/Repository b/gc/include/CVS/Repository deleted file mode 100644 index cbc551f..0000000 --- a/gc/include/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/gc/include diff --git a/gc/include/CVS/Root b/gc/include/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/gc/include/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/gc/include/private/CVS/Entries b/gc/include/private/CVS/Entries deleted file mode 100644 index 1784810..0000000 --- a/gc/include/private/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/gc/include/private/CVS/Repository b/gc/include/private/CVS/Repository deleted file mode 100644 index 55fc1f1..0000000 --- a/gc/include/private/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/gc/include/private diff --git a/gc/include/private/CVS/Root b/gc/include/private/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/gc/include/private/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/gc/tests/CVS/Entries b/gc/tests/CVS/Entries deleted file mode 100644 index 1784810..0000000 --- a/gc/tests/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/gc/tests/CVS/Repository b/gc/tests/CVS/Repository deleted file mode 100644 index aa9da7e..0000000 --- a/gc/tests/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/gc/tests diff --git a/gc/tests/CVS/Root b/gc/tests/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/gc/tests/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/intl/CVS/Entries b/intl/CVS/Entries deleted file mode 100644 index 1784810..0000000 --- a/intl/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/intl/CVS/Repository b/intl/CVS/Repository deleted file mode 100644 index eb89a50..0000000 --- a/intl/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/intl diff --git a/intl/CVS/Root b/intl/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/intl/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/libwc/CVS/Entries b/libwc/CVS/Entries deleted file mode 100644 index bdd6455..0000000 --- a/libwc/CVS/Entries +++ /dev/null @@ -1,53 +0,0 @@ -/.cvsignore/1.1/Mon Sep 22 22:53:53 2003// -/big5.c/1.1/Mon Sep 22 21:02:23 2003// -/big5.h/1.1/Mon Sep 22 21:02:23 2003// -/ccs.h/1.1/Mon Sep 22 21:02:23 2003// -/ces.c/1.1/Mon Sep 22 21:02:23 2003// -/char_conv.c/1.1/Mon Sep 22 21:02:23 2003// -/combining.c/1.1/Mon Sep 22 21:02:23 2003// -/conv.c/1.1/Mon Sep 22 21:02:23 2003// -/detect.c/1.3/Wed Apr  5 14:18:54 2006// -/gb18030.c/1.1/Mon Sep 22 21:02:23 2003// -/gb18030.h/1.1/Mon Sep 22 21:02:23 2003// -/gbk.c/1.1/Mon Sep 22 21:02:23 2003// -/gbk.h/1.1/Mon Sep 22 21:02:23 2003// -/hkscs.c/1.1/Mon Sep 22 21:02:23 2003// -/hkscs.h/1.1/Mon Sep 22 21:02:23 2003// -/hz.c/1.1/Mon Sep 22 21:02:23 2003// -/hz.h/1.1/Mon Sep 22 21:02:23 2003// -/iso2022.c/1.1/Mon Sep 22 21:02:23 2003// -/iso2022.h/1.1/Mon Sep 22 21:02:23 2003// -/jis.c/1.1/Mon Sep 22 21:02:23 2003// -/jis.h/1.1/Mon Sep 22 21:02:23 2003// -/johab.c/1.1/Mon Sep 22 21:02:23 2003// -/johab.h/1.1/Mon Sep 22 21:02:23 2003// -/priv.c/1.1/Mon Sep 22 21:02:23 2003// -/priv.h/1.1/Mon Sep 22 21:02:23 2003// -/putc.c/1.1/Mon Sep 22 21:02:23 2003// -/search.c/1.1/Mon Sep 22 21:02:23 2003// -/search.h/1.1/Mon Sep 22 21:02:23 2003// -/sjis.c/1.1/Mon Sep 22 21:02:23 2003// -/sjis.h/1.1/Mon Sep 22 21:02:23 2003// -/test.c/1.1/Mon Sep 22 21:02:23 2003// -/ucs.map/1.1/Mon Sep 22 21:02:23 2003// -/uhc.c/1.1/Mon Sep 22 21:02:23 2003// -/uhc.h/1.1/Mon Sep 22 21:02:23 2003// -/utf7.c/1.1/Mon Sep 22 21:02:23 2003// -/utf7.h/1.1/Mon Sep 22 21:02:23 2003// -/utf8.c/1.1/Mon Sep 22 21:02:23 2003// -/utf8.h/1.1/Mon Sep 22 21:02:23 2003// -/viet.c/1.1/Mon Sep 22 21:02:23 2003// -/viet.h/1.1/Mon Sep 22 21:02:23 2003// -/wc.h/1.1/Mon Sep 22 21:02:23 2003// -/wtf.c/1.1/Mon Sep 22 21:02:23 2003// -/wtf.h/1.1/Mon Sep 22 21:02:23 2003// -D/map//// -/EastAsianWidth.txt/1.1/Sun Jul 25 09:55:05 2010// -/Makefile.in/1.7/Tue Jan  4 09:22:27 2011// -/ambwidth_map.awk/1.1/Sun Jul 25 09:55:05 2010// -/ces.h/1.2/Tue Jan  4 09:22:27 2011// -/charset.c/1.4/Tue Jan  4 09:22:27 2011// -/status.c/1.2/Tue Jan  4 09:22:27 2011// -/ucs.c/1.4/Tue Jan  4 09:22:27 2011// -/ucs.h/1.4/Tue Jan  4 09:22:27 2011// -/wc_types.h/1.3/Tue Jan  4 09:22:27 2011// diff --git a/libwc/CVS/Repository b/libwc/CVS/Repository deleted file mode 100644 index 6ad67c0..0000000 --- a/libwc/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/libwc diff --git a/libwc/CVS/Root b/libwc/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/libwc/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/libwc/map/CVS/Entries b/libwc/map/CVS/Entries deleted file mode 100644 index 7e3a839..0000000 --- a/libwc/map/CVS/Entries +++ /dev/null @@ -1,112 +0,0 @@ -/big5_ucs.map/1.1/Mon Sep 22 21:02:24 2003// -/cns11643_ucs.map/1.1/Mon Sep 22 21:02:24 2003// -/cp1006_ucs.map/1.1/Mon Sep 22 21:02:24 2003// -/cp1250_ucs.map/1.1/Mon Sep 22 21:02:24 2003// -/cp1251_ucs.map/1.1/Mon Sep 22 21:02:24 2003// -/cp1252_ucs.map/1.1/Mon Sep 22 21:02:24 2003// -/cp1253_ucs.map/1.1/Mon Sep 22 21:02:24 2003// -/cp1254_ucs.map/1.1/Mon Sep 22 21:02:24 2003// -/cp1255_combining.map/1.1/Mon Sep 22 21:02:25 2003// -/cp1255_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp1256_combining.map/1.1/Mon Sep 22 21:02:25 2003// -/cp1256_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp1257_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp1258_combining.map/1.1/Mon Sep 22 21:02:25 2003// -/cp1258_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp437_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp737_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp775_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp850_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp852_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp855_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp856_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp857_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp860_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp861_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp862_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp863_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp864_combining.map/1.1/Mon Sep 22 21:02:25 2003// -/cp864_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp865_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp866_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp869_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/cp874_combining.map/1.1/Mon Sep 22 21:02:25 2003// -/cp874_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/gb12345_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/gb18030_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/gb2312_gbk.map/1.1/Mon Sep 22 21:02:25 2003// -/gb2312_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/gbk_ucs.map/1.1/Mon Sep 22 21:02:25 2003// -/hkscs_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/hkscs_ucs_p2.map/1.1/Mon Sep 22 21:02:26 2003// -/iso885910_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso885911_combining.map/1.1/Mon Sep 22 21:02:26 2003// -/iso885911_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso885913_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso885914_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso885915_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso885916_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88591_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88592_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88593_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88594_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88595_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88596_combining.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88596_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88597_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88598_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/iso88599_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/jisx0201k_jisx0208.map/1.1/Mon Sep 22 21:02:26 2003// -/jisx0201k_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/jisx0208_jisx02131.map/1.1/Mon Sep 22 21:02:26 2003// -/jisx0208x0212x0213_ucs.map/1.1/Mon Sep 22 21:02:26 2003// -/jisx02132_sjis.map/1.1/Mon Sep 22 21:02:28 2003// -/jisx0213_ucs_p2.map/1.1/Mon Sep 22 21:02:28 2003// -/johab_ucs.map/1.1/Mon Sep 22 21:02:28 2003// -/koi8r_ucs.map/1.1/Mon Sep 22 21:02:28 2003// -/koi8u_ucs.map/1.1/Mon Sep 22 21:02:28 2003// -/ksx1001_ucs.map/1.1/Mon Sep 22 21:02:28 2003// -/mk_big5_txt.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_big5_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_cns_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_combining_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_cp1258_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_cp950_txt.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_gb18030_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_gb_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_gbk_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_hkscs_p2_txt.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_hkscs_txt.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_hkscs_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_hkscs_ucs_p2_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_jis_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_jisx0213_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_johab_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_ks_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_sjis_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_tis_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_uhc_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/mk_viet_ucs_map.pl/1.1/Mon Sep 22 21:02:28 2003// -/nextstep_ucs.map/1.1/Mon Sep 22 21:02:28 2003// -/sjis_ext_ucs.map/1.1/Mon Sep 22 21:02:28 2003// -/tcvn57123_tcvn5712.map/1.1/Mon Sep 22 21:02:28 2003// -/tcvn5712_combining.map/1.1/Mon Sep 22 21:02:28 2003// -/tcvn5712_ucs.map/1.1/Mon Sep 22 21:02:28 2003// -/ucs_combining.map/1.1/Mon Sep 22 21:02:28 2003// -/ucs_fullwidth.map/1.1/Mon Sep 22 21:02:28 2003// -/ucs_hangul.map/1.1/Mon Sep 22 21:02:28 2003// -/ucs_precompose.map/1.1/Mon Sep 22 21:02:28 2003// -/uhc_ucs.map/1.1/Mon Sep 22 21:02:28 2003// -/viscii11_ucs.map/1.1/Mon Sep 22 21:02:29 2003// -/vps_ucs.map/1.1/Mon Sep 22 21:02:29 2003// -/mk_ucs_case_map.pl/1.1/Tue Aug 24 10:11:51 2010// -/mk_ucs_isdigit_map.pl/1.1/Tue Aug 24 10:11:51 2010// -/ucs_ambwidth.map/1.1/Sun Jul 25 09:55:05 2010// -/ucs_case.map/1.1/Tue Aug 24 10:11:51 2010// -/ucs_isalpha.map/1.1/Tue Aug 24 10:11:51 2010// -/ucs_isdigit.map/1.1/Tue Aug 24 10:11:51 2010// -/ucs_islower.map/1.1/Tue Aug 24 10:11:51 2010// -/ucs_isupper.map/1.1/Tue Aug 24 10:11:51 2010// -/ucs_wide.map/1.2/Tue Jan  4 09:22:28 2011// -D diff --git a/libwc/map/CVS/Repository b/libwc/map/CVS/Repository deleted file mode 100644 index 487f8e5..0000000 --- a/libwc/map/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/libwc/map diff --git a/libwc/map/CVS/Root b/libwc/map/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/libwc/map/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/po/CVS/Entries b/po/CVS/Entries deleted file mode 100644 index 1e7831b..0000000 --- a/po/CVS/Entries +++ /dev/null @@ -1,16 +0,0 @@ -/.cvsignore/1.2/Thu Sep 25 18:35:43 2003// -/LINGUAS/1.1/Wed Sep 24 18:35:06 2003// -/POTFILES.in/1.2/Wed Sep 24 18:35:06 2003// -/boldquot.sed/1.1/Tue Sep 23 18:42:25 2003// -/en@boldquot.header/1.1/Tue Sep 23 18:42:25 2003// -/en@quot.header/1.1/Tue Sep 23 18:42:25 2003// -/insert-header.sin/1.1/Tue Sep 23 18:42:25 2003// -/quot.sed/1.1/Tue Sep 23 18:42:25 2003// -/remove-potcdate.sin/1.1/Tue Sep 23 18:42:25 2003// -/Makevars/1.2/Tue Jan  4 09:22:28 2011// -/ChangeLog/1.2/Tue Jan  4 12:39:29 2011// -/Makefile.in.in/1.3/Tue Jan  4 12:39:29 2011// -/Rules-quot/1.2/Tue Jan  4 12:39:29 2011// -/ja.po/1.14/Sat Jan 15 04:29:58 2011// -/w3m.pot/1.14/Sat Jan 15 02:20:26 2011// -D diff --git a/po/CVS/Repository b/po/CVS/Repository deleted file mode 100644 index 139f7dd..0000000 --- a/po/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/po diff --git a/po/CVS/Root b/po/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/po/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/scripts/CVS/Entries b/scripts/CVS/Entries deleted file mode 100644 index 2d1a4e5..0000000 --- a/scripts/CVS/Entries +++ /dev/null @@ -1,13 +0,0 @@ -/.cvsignore/1.10/Mon Sep 22 22:53:53 2003// -/dirlist.cgi.in/1.7/Fri Feb  7 15:06:17 2003// -/w3mhelp-funcdesc.en.pl.in/1.4/Mon Mar 22 17:03:13 2004// -/w3mhelp-funcdesc.ja.pl.in/1.4/Mon Mar 22 17:03:13 2004// -/w3mhelp-funcname.pl.in/1.3/Mon Apr  7 15:19:43 2003// -/w3mmail.cgi.in/1.14/Mon Aug 30 16:32:24 2004// -/xface2xbm.in/1.3/Mon Nov 18 17:33:01 2002// -/xface2xpm.in/1.1/Tue Apr  9 14:45:58 2002// -D/bm2menu//// -D/multipart//// -D/w3mman//// -/Makefile.in/1.11/Tue Jan  4 09:22:28 2011// -/w3mhelp.cgi.in/1.29/Tue Jan  4 09:22:28 2011// diff --git a/scripts/CVS/Repository b/scripts/CVS/Repository deleted file mode 100644 index 578c817..0000000 --- a/scripts/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/scripts diff --git a/scripts/CVS/Root b/scripts/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/scripts/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/scripts/bm2menu/CVS/Entries b/scripts/bm2menu/CVS/Entries deleted file mode 100644 index 448ac0a..0000000 --- a/scripts/bm2menu/CVS/Entries +++ /dev/null @@ -1,3 +0,0 @@ -/README/1.1/Thu Nov 15 00:32:14 2001// -/bm2menu.pl/1.1/Thu Nov 15 00:32:14 2001// -D diff --git a/scripts/bm2menu/CVS/Repository b/scripts/bm2menu/CVS/Repository deleted file mode 100644 index c3eaf83..0000000 --- a/scripts/bm2menu/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/scripts/bm2menu diff --git a/scripts/bm2menu/CVS/Root b/scripts/bm2menu/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/scripts/bm2menu/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/scripts/multipart/CVS/Entries b/scripts/multipart/CVS/Entries deleted file mode 100644 index b503f2a..0000000 --- a/scripts/multipart/CVS/Entries +++ /dev/null @@ -1,6 +0,0 @@ -/.cvsignore/1.2/Mon Sep 22 22:53:53 2003// -/README/1.2/Wed Nov 21 09:21:59 2001// -/mailcap/1.1/Thu Nov 15 00:32:14 2001// -/multipart.cgi.in/1.11/Tue Feb 18 15:26:39 2003// -/Makefile.in/1.6/Tue Jan  4 09:22:28 2011// -D diff --git a/scripts/multipart/CVS/Repository b/scripts/multipart/CVS/Repository deleted file mode 100644 index cb383c6..0000000 --- a/scripts/multipart/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/scripts/multipart diff --git a/scripts/multipart/CVS/Root b/scripts/multipart/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/scripts/multipart/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/scripts/w3mman/CVS/Entries b/scripts/w3mman/CVS/Entries deleted file mode 100644 index 2cc31ff..0000000 --- a/scripts/w3mman/CVS/Entries +++ /dev/null @@ -1,8 +0,0 @@ -/.cvsignore/1.3/Mon Sep 22 22:53:53 2003// -/README/1.3/Wed Dec 18 16:48:02 2002// -/hlink.cgi/1.1/Thu Nov 15 00:32:14 2001// -/w3mman.1.in/1.6/Fri Apr  7 15:33:56 2006// -/w3mman.in/1.5/Fri Apr  7 15:33:56 2006// -/Makefile.in/1.5/Tue Jan  4 09:22:28 2011// -/w3mman2html.cgi.in/1.9/Tue Jan  4 09:22:28 2011// -D diff --git a/scripts/w3mman/CVS/Repository b/scripts/w3mman/CVS/Repository deleted file mode 100644 index 430e75e..0000000 --- a/scripts/w3mman/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/scripts/w3mman diff --git a/scripts/w3mman/CVS/Root b/scripts/w3mman/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/scripts/w3mman/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/w3m-doc/CVS/Entries b/w3m-doc/CVS/Entries deleted file mode 100644 index f0a18f0..0000000 --- a/w3m-doc/CVS/Entries +++ /dev/null @@ -1,18 +0,0 @@ -/README.html/1.1.1.1/Thu Nov  8 05:18:53 2001// -/community.html.in/1.2/Tue Nov 27 03:54:49 2001// -/configuration.html.in/1.2/Tue Nov 27 03:54:49 2001// -/contain.wd/1.3/Tue Nov 27 03:54:49 2001// -/copyright.html.in/1.2/Tue Nov 27 03:54:49 2001// -/define.wd/1.2/Tue Nov 27 03:54:49 2001// -/detail.html.in/1.3/Tue Nov 27 03:54:49 2001// -/development.html.in/1.1/Fri Nov  9 04:59:18 2001// -/faq.html.in/1.2/Tue Nov 27 03:54:49 2001// -/function.html.in/1.2/Tue Nov 27 03:54:49 2001// -/index.html.in/1.3/Tue Nov 27 03:54:49 2001// -/install.html.in/1.3/Tue Jul  9 06:14:14 2002// -/mkdocs/1.2/Tue Nov 27 03:54:49 2001// -/operation.html.in/1.2/Tue Nov 27 03:54:49 2001// -/outline.html.in/1.2/Tue Nov 27 03:54:49 2001// -/prologue.html.in/1.3/Tue Oct 29 14:28:30 2002// -/w3mdoc.pl/1.1.1.1/Thu Nov  8 05:18:52 2001// -D/sample//// diff --git a/w3m-doc/CVS/Repository b/w3m-doc/CVS/Repository deleted file mode 100644 index 2dd7815..0000000 --- a/w3m-doc/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/w3m-doc diff --git a/w3m-doc/CVS/Root b/w3m-doc/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/w3m-doc/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/w3m-doc/sample/CVS/Entries b/w3m-doc/sample/CVS/Entries deleted file mode 100644 index 1207c1a..0000000 --- a/w3m-doc/sample/CVS/Entries +++ /dev/null @@ -1,9 +0,0 @@ -/README/1.1.1.1/Thu Nov  8 05:18:53 2001// -/define.wd/1.1.1.1/Thu Nov  8 05:18:53 2001// -/html.wd/1.1.1.1/Thu Nov  8 05:18:53 2001// -/keymap.cgi/1.1.1.1/Thu Nov  8 05:18:54 2001// -/s.wd/1.1.1.1/Thu Nov  8 05:18:54 2001// -/sample.html/1.1.1.1/Thu Nov  8 05:18:54 2001// -/sample.wd/1.1.1.1/Thu Nov  8 05:18:53 2001// -/w3mdoc.pl/1.1.1.1/Thu Nov  8 05:18:53 2001// -D diff --git a/w3m-doc/sample/CVS/Repository b/w3m-doc/sample/CVS/Repository deleted file mode 100644 index d328633..0000000 --- a/w3m-doc/sample/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/w3m-doc/sample diff --git a/w3m-doc/sample/CVS/Root b/w3m-doc/sample/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/w3m-doc/sample/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/w3mimg/CVS/Entries b/w3mimg/CVS/Entries deleted file mode 100644 index ad83b16..0000000 --- a/w3mimg/CVS/Entries +++ /dev/null @@ -1,7 +0,0 @@ -/.cvsignore/1.1/Mon Sep 22 22:53:53 2003// -D/fb//// -D/x11//// -/Makefile.in/1.11/Tue Jan  4 09:22:28 2011// -/w3mimg.c/1.6/Tue Jan  4 09:22:28 2011// -/w3mimg.h/1.9/Tue Jan  4 09:22:28 2011// -D/win//// diff --git a/w3mimg/CVS/Repository b/w3mimg/CVS/Repository deleted file mode 100644 index d59666d..0000000 --- a/w3mimg/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/w3mimg diff --git a/w3mimg/CVS/Root b/w3mimg/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/w3mimg/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/w3mimg/fb/CVS/Entries b/w3mimg/fb/CVS/Entries deleted file mode 100644 index 549e962..0000000 --- a/w3mimg/fb/CVS/Entries +++ /dev/null @@ -1,11 +0,0 @@ -/.cvsignore/1.1/Mon Sep 22 22:53:53 2003// -/Makefile.in/1.4/Mon Apr 26 17:00:38 2004// -/fb.c/1.16/Sun Jul 13 16:19:10 2003// -/fb.h/1.7/Mon Jul  7 15:48:17 2003// -/fb_gdkpixbuf.c/1.21/Mon Nov  8 17:14:06 2004// -/fb_img.c/1.6/Mon Jul  7 15:48:17 2003// -/fb_img.h/1.9/Wed Aug  4 17:32:28 2004// -/fb_imlib2.c/1.10/Wed Aug  4 17:32:28 2004// -/fb_w3mimg.c/1.14/Wed Aug  4 17:32:28 2004// -/readme.txt/1.2/Mon Jul 22 16:17:32 2002// -D diff --git a/w3mimg/fb/CVS/Repository b/w3mimg/fb/CVS/Repository deleted file mode 100644 index 336666e..0000000 --- a/w3mimg/fb/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/w3mimg/fb diff --git a/w3mimg/fb/CVS/Root b/w3mimg/fb/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/w3mimg/fb/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/w3mimg/win/CVS/Entries b/w3mimg/win/CVS/Entries deleted file mode 100644 index 5025b4b..0000000 --- a/w3mimg/win/CVS/Entries +++ /dev/null @@ -1,4 +0,0 @@ -/Makefile.in/1.1/Tue Dec 21 10:13:55 2010// -/win_w3mimg.cpp/1.2/Fri Dec 24 09:52:06 2010// -/.cvsignore/1.1/Wed Jan  5 09:52:10 2011// -D diff --git a/w3mimg/win/CVS/Repository b/w3mimg/win/CVS/Repository deleted file mode 100644 index 06901a3..0000000 --- a/w3mimg/win/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/w3mimg/win diff --git a/w3mimg/win/CVS/Root b/w3mimg/win/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/w3mimg/win/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m diff --git a/w3mimg/x11/CVS/Entries b/w3mimg/x11/CVS/Entries deleted file mode 100644 index a3cf134..0000000 --- a/w3mimg/x11/CVS/Entries +++ /dev/null @@ -1,4 +0,0 @@ -/.cvsignore/1.1/Mon Sep 22 22:53:53 2003// -/Makefile.in/1.4/Mon Apr 26 17:00:38 2004// -/x11_w3mimg.c/1.29/Mon Nov  8 17:14:06 2004// -D diff --git a/w3mimg/x11/CVS/Repository b/w3mimg/x11/CVS/Repository deleted file mode 100644 index 1268050..0000000 --- a/w3mimg/x11/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -w3m/w3mimg/x11 diff --git a/w3mimg/x11/CVS/Root b/w3mimg/x11/CVS/Root deleted file mode 100644 index 121fa06..0000000 --- a/w3mimg/x11/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:ext:inu@w3m.cvs.sourceforge.net:/cvsroot/w3m | 
