From a8831d96bdd3caf44bccbc0356daa8c1195c5c6b Mon Sep 17 00:00:00 2001 From: Fumitoshi UKAI Date: Mon, 4 Feb 2002 15:18:41 +0000 Subject: [w3m-dev 02984] inline image improvements and cleanups * config.h.dist (HAVE_SYMLINK) added * config.h.dist (HAVE_LSTAT): added * configure: symlink() check * configure: lstat() check * fm.h (maxLoadImage): added * form.c (form_write_from_file): s/HAVE_READLINK/HAVE_LSTAT/ * image.c: include * image.c (MAX_LOAD_IMAGE): default 8 * image.c (max_load_image): deleted * image.c (n_load_image): added * image.c (showImageProgress): added * image.c (loadImage): check load image count s/HAVE_READLINK/HAVE_LSTAT/ (HAVE_SYMLINK) showImageProgress * local.c: include s/HAVE_READLINK/HAVE_LSTAT/ * rc.c (CMT_MAX_LOAD_IMAGE): added * rc.c (max_load_image): added * doc/README.img: update * doc-jp/README.img: update * file.c (process_img): pre_int fix From: Hironori Sakamoto --- ChangeLog | 28 ++++++++++++++++++++++++- config.h.dist | 2 ++ configure | 41 +++++++++++++++++++++++++++++++++++- doc-jp/README.img | 33 ++++++++++------------------- doc/README.img | 32 ++++++++++------------------ file.c | 36 ++++++++++++++++++------------- fm.h | 3 ++- form.c | 6 +++--- image.c | 63 +++++++++++++++++++++++++++++++++++++++++++------------ local.c | 19 ++++++++++------- rc.c | 6 +++++- 11 files changed, 183 insertions(+), 86 deletions(-) diff --git a/ChangeLog b/ChangeLog index 64baaed..f7f5a99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2002-02-04 Hironori Sakamoto + + * [w3m-dev 02984] inline image improvements and cleanups + * config.h.dist (HAVE_SYMLINK) added + * config.h.dist (HAVE_LSTAT): added + * configure: symlink() check + * configure: lstat() check + * fm.h (maxLoadImage): added + * form.c (form_write_from_file): s/HAVE_READLINK/HAVE_LSTAT/ + * image.c: include + * image.c (MAX_LOAD_IMAGE): default 8 + * image.c (max_load_image): deleted + * image.c (n_load_image): added + * image.c (showImageProgress): added + * image.c (loadImage): check load image count + s/HAVE_READLINK/HAVE_LSTAT/ (HAVE_SYMLINK) + showImageProgress + * local.c: include + s/HAVE_READLINK/HAVE_LSTAT/ + * rc.c (CMT_MAX_LOAD_IMAGE): added + * rc.c (max_load_image): added + * doc/README.img: update + * doc-jp/README.img: update + + * file.c (process_img): pre_int fix + 2002-02-04 Fumitoshi UKAI * [w3m-dev 02985] inputAnswer() and no "ssl_forbid_method" @@ -2762,4 +2788,4 @@ * release-0-2-1 * import w3m-0.2.1 -$Id: ChangeLog,v 1.297 2002/02/04 14:49:21 ukai Exp $ +$Id: ChangeLog,v 1.298 2002/02/04 15:18:41 ukai Exp $ diff --git a/config.h.dist b/config.h.dist index 745961d..ac01f1a 100644 --- a/config.h.dist +++ b/config.h.dist @@ -175,7 +175,9 @@ MODEL=Linux.i686-monster-ja #define HAVE_STRFTIME #define HAVE_GETCWD #define HAVE_GETWD +#define HAVE_SYMLINK #define HAVE_READLINK +#define HAVE_LSTAT #define HAVE_SETENV #define HAVE_PUTENV #define HAVE_SRAND48 diff --git a/configure b/configure index 31bafb2..52a7b3d 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: configure,v 1.60 2002/02/03 06:23:37 ukai Exp $ +# $Id: configure,v 1.61 2002/02/04 15:18:41 ukai Exp $ # Configuration. # @@ -1421,6 +1421,23 @@ else def_have_getwd="#undef HAVE_GETWD" fi +####### symlink +cat > _zmachdep.c << EOF +main() +{ + char path[64],lpath[64]; + symlink(path,lpath); +} +EOF +if $cc $cflags -o _zmachdep _zmachdep.c > /dev/null 2>&1 +then + echo "You have symlink()." + def_have_symlink="#define HAVE_SYMLINK" +else + echo "You don't have symlink()." + def_have_symlink="#undef HAVE_SYMLINK" +fi + ####### readlink cat > _zmachdep.c << EOF main() @@ -1438,6 +1455,26 @@ else def_have_readlink="#undef HAVE_READLINK" fi +####### lstat +cat > _zmachdep.c << EOF +#include +#include +main() +{ + struct stat st; + char path[64]; + lstat(path,&st); +} +EOF +if $cc $cflags -o _zmachdep _zmachdep.c > /dev/null 2>&1 +then + echo "You have lstat()." + def_have_lstat="#define HAVE_LSTAT" +else + echo "You don't have lstat()." + def_have_lstat="#undef HAVE_LSTAT" +fi + ####### setenv cat > _zmachdep.c << EOF #include @@ -2136,7 +2173,9 @@ $def_have_wait3 $def_have_strftime $def_have_getcwd $def_have_getwd +$def_have_symlink $def_have_readlink +$def_have_lstat $def_have_setenv $def_have_putenv $def_have_srand48 diff --git a/doc-jp/README.img b/doc-jp/README.img index 175e1e4..75c7b1f 100644 --- a/doc-jp/README.img +++ b/doc-jp/README.img @@ -1,15 +1,11 @@ w3m でインライン画像を表示 - 2002/01/31 + 2002/02/04 坂本 浩則 はじめに - w3m でインライン画像を表示する拡張です。以下に置いてあります。 - - http://www2u.biglobe.ne.jp/~hsaka/w3m/index-ja.html#img - patch/w3m-0.2.4-img-2.2.patch.gz - patch/README.img-ja + w3m でインライン画像を表示する拡張です。 機能 @@ -64,6 +60,8 @@ w3m auto_image インライン画像を自動で読み込みます。デフォルトは ON。 OFF の場合は、コマンド DISPLAY_IMAGE で読み込みを開始します。 + max_load_image + 画像を読み込む時の最大プロセス数。デフォルトは 4。1〜8 まで設定可能。 ext_image_viewer コマンド VIEW_IMAGE('I')の場合や Content-type: image/* である 画像ファイルを外部ビューワで表示します。デフォルトは ON。 @@ -79,28 +77,13 @@ w3m 必要なもの - * w3m-0.2.4.tar.gz + * w3m-0.2.5+cvs-1.287 以上 http://w3m.sourceforge.net/ http://sourceforge.net/projects/w3m/ http://prdownloads.sourceforge.net/w3m/ * Imlib-1.9.8 (1.9.10 以上推奨) libungif-4.1.0b1 推奨 -インストール - - gunzip -c DIST/w3m-0.2.4.tar.gz | tar -xvf - - cd w3m-0.2.4 - gunzip -c DIST/w3m-0.2.4-img-2.2.patch.gz | patch -p1 - configure - # Inline image support (you need Imlib library) - # と聞かれますので y と答えてください。 - # menu は有効にしてください。 - make - # w3mimgdisplay, w3mimgsize を make する時に Imlib が必要です。 - make install - # w3mimgdisplay, w3mimgsize は必ず $LIB(PREFIX/lib/w3m) へ - # install してください。 - w3mimgdisplay の設定 w3mimgdisplay は以下のオプションを受け付けますので端末に合わせて @@ -123,6 +106,12 @@ w3mimgdisplay 更新記録 +2002/02/04 + * ドキュメント改訂 + +2002/02/01 w3m-0.2.5+cvs-1.287 + * 本家の CVS へマージ。 + 2002/01/31 w3m-0.2.4-img-2.2 * w3m-0.2.4+cvs-1.278 ベース。 diff --git a/doc/README.img b/doc/README.img index 569c612..aed8450 100644 --- a/doc/README.img +++ b/doc/README.img @@ -1,16 +1,11 @@ Inline image support of w3m - 2002/01/31 + 2002/02/04 H. Sakamoto Introduction This is the extension for w3m to support inline image. - The patch for w3m-0.2.4 is available on the following site. - - http://www2u.biglobe.ne.jp/~hsaka/w3m/index.html#img - patch/w3m-0.2.4-2.2.patch.gz - patch/README.img Support @@ -65,6 +60,9 @@ Option panel auto_image Automatic loading of inline image. The default is ON. If it is OFF, loading starts with a command DISPLAY_IMAGE. + max_load_image + Maximum process for downloading of inline image. The default is 4. + 1 to 8 can be set. ext_image_viewer Use external image viewer, when a command VIEW_IMAGE or view of image file which header is "Content-type: image/*". @@ -79,27 +77,13 @@ Option panel Required programs - * w3m-0.2.4 + * w3m-0.2.5+cvs-1.287 or later http://w3m.sourceforge.net/ http://sourceforge.net/projects/w3m/ http://prdownloads.sourceforge.net/w3m/ * Imlib-1.9.8 (1.9.10 is recommendable.) libungif-4.1.0b1 is recommendable. -Install - - gunzip -c DIST/w3m-0.2.4.tar.gz | tar -xvf - - cd w3m-0.2.4 - gunzip -c DIST/w3m-0.2.4-img-2.2.patch.gz | patch -p1 - configure - # When you are asked "Inline image support (you need Imlib library)", - # answer "y". - # Select menu. - make - # To make "w3mimgdisplay" and "w3mimgsize", Imlib is required. - make install - # Must install "w3mimgdisplay" and "w3mimgsize" to $LIB(PREFIX/lib/w3m). - Setting w3mimgdisplay "w3mimgdisplay" has the following options. Set options to fit terminal. @@ -120,6 +104,12 @@ Setting w3mimgdisplay Change log +2002/02/04 + * Revised this document. + +2002/02/01 w3m-0.2.5+cvs-1.287 + * Merged in the CVS repository of the original w3m. + 2002/01/31 w3m-0.2.4-img-2.2 * Based on w3m-0.2.4+cvs-1.278. diff --git a/file.c b/file.c index f2f10bc..7bffb9c 100644 --- a/file.c +++ b/file.c @@ -1,4 +1,4 @@ -/* $Id: file.c,v 1.61 2002/02/04 14:49:21 ukai Exp $ */ +/* $Id: file.c,v 1.62 2002/02/04 15:18:42 ukai Exp $ */ #include "fm.h" #include #include "myctype.h" @@ -2761,6 +2761,7 @@ process_img(struct parsed_tag *tag, int width) #else int w, i, nw, n; #endif + int pre_int = FALSE; Str tmp = Strnew(); if (!parsedtag_get_value(tag, ATTR_SRC, &p)) @@ -2872,6 +2873,7 @@ process_img(struct parsed_tag *tag, int width) ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1; Strcat(tmp, Sprintf(""); + pre_int = TRUE; + } Strcat_charp(tmp, " 200 && i < 13) { /* must be a horizontal line */ + if (!pre_int) { + Strcat_charp(tmp, ""); + pre_int = TRUE; + } #ifndef KANJI_SYMBOLS Strcat_charp(tmp, "<_RULE TYPE=10>"); #endif /* not KANJI_SYMBOLS */ @@ -3021,13 +3029,7 @@ process_img(struct parsed_tag *tag, int width) } #endif Strcat_charp(tmp, ""); -#ifdef USE_IMAGE - if (use_image) { - Strcat_charp(tmp, ""); - } - else -#endif - if (r) + if (pre_int) Strcat_charp(tmp, ""); if (r) { Strcat_charp(tmp, ""); @@ -5728,17 +5730,21 @@ print_internal_information(struct html_feed_environ *henv) s = Sprintf("action->ptr, (fp->method == FORM_METHOD_POST) ? "post" - : ((fp->method == FORM_METHOD_INTERNAL) ? "internal" : "get")); + : ((fp->method == + FORM_METHOD_INTERNAL) ? "internal" : "get")); if (fp->target) Strcat(s, Sprintf(" target=\"%s\"", fp->target)); #ifdef JP_CHARSET if (fp->charset) - Strcat(s, Sprintf(" accept-charset=\"%s\"", code_to_str(fp->charset))); + Strcat(s, + Sprintf(" accept-charset=\"%s\"", + code_to_str(fp->charset))); #endif if (fp->enctype == FORM_ENCTYPE_MULTIPART) Strcat_charp(s, " enctype=multipart/form-data"); if (fp->boundary) - Strcat_m_charp(s, " boundary=\"", html_quote(fp->boundary), "\"", NULL); + Strcat_m_charp(s, " boundary=\"", html_quote(fp->boundary), + "\"", NULL); Strcat_charp(s, ">"); pushTextLine(tl, newTextLine(s, 0)); } @@ -5751,14 +5757,14 @@ print_internal_information(struct html_feed_environ *henv) s = Sprintf("%s", i, - html_quote(ip->value ? ip->value->ptr : ip->label->ptr), - ip->checked ? " selected" : "", + html_quote(ip->value ? ip->value->ptr : ip->label-> + ptr), ip->checked ? " selected" : "", ip->label->ptr); pushTextLine(tl, newTextLine(s, 0)); } } } -#endif /* MENU_SELECT */ +#endif /* MENU_SELECT */ if (n_textarea > 0) { for (i = 0; i < n_textarea; i++) { s = Sprintf("%s", diff --git a/fm.h b/fm.h index bf9b07d..7e974cf 100644 --- a/fm.h +++ b/fm.h @@ -1,4 +1,4 @@ -/* $Id: fm.h,v 1.48 2002/02/03 06:38:49 ukai Exp $ */ +/* $Id: fm.h,v 1.49 2002/02/04 15:18:42 ukai Exp $ */ /* * w3m: WWW wo Miru utility * @@ -824,6 +824,7 @@ global int activeImage init(FALSE); global int displayImage init(TRUE); global int autoImage init(TRUE); global int useExtImageViewer init(TRUE); +global int maxLoadImage init(4); #endif global char *Editor init(DEF_EDITOR); #ifndef USE_W3MMAILER diff --git a/form.c b/form.c index 9d50f7a..623e928 100644 --- a/form.c +++ b/form.c @@ -1,4 +1,4 @@ -/* $Id: form.c,v 1.11 2001/12/27 18:22:59 ukai Exp $ */ +/* $Id: form.c,v 1.12 2002/02/04 15:18:42 ukai Exp $ */ /* * HTML forms */ @@ -635,10 +635,10 @@ form_write_from_file(FILE * f, char *boundary, char *name, char *filename, fprintf(f, "Content-Type: %s\r\n\r\n", type ? type : "application/octet-stream"); -#ifdef HAVE_READLINK /* readline == lstat ? (ukai) */ +#ifdef HAVE_LSTAT if (lstat(file, &st) < 0) goto write_end; -#endif /* HAVE_READLINK */ +#endif /* HAVE_LSTAT */ if (S_ISDIR(st.st_mode)) goto write_end; fd = fopen(file, "r"); diff --git a/image.c b/image.c index 618abfa..52f2528 100644 --- a/image.c +++ b/image.c @@ -1,7 +1,8 @@ -/* $Id: image.c,v 1.3 2002/02/03 06:38:49 ukai Exp $ */ +/* $Id: image.c,v 1.4 2002/02/04 15:18:42 ukai Exp $ */ #include "fm.h" #include +#include #include #include #include @@ -264,9 +265,9 @@ clearImage() /* load image */ #ifndef MAX_LOAD_IMAGE -#define MAX_LOAD_IMAGE 4 +#define MAX_LOAD_IMAGE 8 #endif -static int max_load_image = MAX_LOAD_IMAGE; +static int n_load_image = 0; static Hash_sv *image_hash = NULL; static Hash_sv *image_file = NULL; static GeneralList *image_list = NULL; @@ -332,6 +333,32 @@ getAllImage(Buffer *buf) } } +void +showImageProgress(Buffer *buf) +{ + AnchorList *al; + Anchor *a; + int i, l, n; + + if (!buf) + return; + al = buf->img; + if (!al) + return; + for (i = 0, l = 0, n = 0, a = al->anchors; i < al->nanchor; i++, a++) { + if (a->image && a->hseq >= 0) { + n++; + if (a->image->cache && a->image->cache->loaded == IMG_FLAG_LOADED) + l++; + } + } + if (n) { + message(Sprintf("%d/%d images loaded", l, n)->ptr, + buf->cursorX + buf->rootX, buf->cursorY); + refresh(); + } +} + void loadImage(int flag) { @@ -339,12 +366,19 @@ loadImage(int flag) struct stat st; int wait_st, i; + if (maxLoadImage > MAX_LOAD_IMAGE) + maxLoadImage = MAX_LOAD_IMAGE; + else if (maxLoadImage < 1) + maxLoadImage = 1; + if (n_load_image == 0) + n_load_image = maxLoadImage; if (!image_cache) { - image_cache = New_N(ImageCache *, max_load_image); - bzero(image_cache, sizeof(ImageCache *) * max_load_image); + image_cache = New_N(ImageCache *, MAX_LOAD_IMAGE); + bzero(image_cache, sizeof(ImageCache *) * MAX_LOAD_IMAGE); } + if (flag == IMG_FLAG_STOP) { - for (i = 0; i < max_load_image; i++) { + for (i = 0; i < n_load_image; i++) { cache = image_cache[i]; if (!cache) continue; @@ -365,16 +399,17 @@ loadImage(int flag) if (image_lock) unlink(image_lock); need_load_image = FALSE; + n_load_image = maxLoadImage; return; } if (need_load_image) { int draw = FALSE; - for (i = 0; i < max_load_image; i++) { + for (i = 0; i < n_load_image; i++) { cache = image_cache[i]; if (!cache) continue; -#ifdef HAVE_READLINK +#ifdef HAVE_LSTAT if (lstat(cache->touch, &st)) #else if (stat(cache->touch, &st)) @@ -404,6 +439,8 @@ loadImage(int flag) } if (flag == IMG_FLAG_NEXT && draw) drawImage(); + if (Currentbuf) + showImageProgress(Currentbuf); } if (image_lock) @@ -413,19 +450,19 @@ loadImage(int flag) if (!image_list) return; - for (i = 0; i < max_load_image; i++) { + for (i = 0; i < n_load_image; i++) { if (image_cache[i]) continue; while (1) { cache = (ImageCache *) popValue(image_list); if (!cache) { - for (i = 0; i < max_load_image; i++) { + for (i = 0; i < n_load_image; i++) { if (image_cache[i]) goto load_image_end; } image_list = NULL; image_file = NULL; - if (Currentbuf && Currentbuf->need_reshape) + if (Currentbuf) displayBuffer(Currentbuf, B_NORMAL); return; } @@ -442,7 +479,7 @@ loadImage(int flag) flush_tty(); if ((cache->pid = fork()) == 0) { Buffer *b; -#ifndef HAVE_READLINK +#if !(defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)) FILE *f; #endif reset_signals(); @@ -454,7 +491,7 @@ loadImage(int flag) b = loadGeneralFile(cache->url, cache->current, NULL, 0, NULL); if (!b || !b->real_type || strncasecmp(b->real_type, "image/", 6)) unlink(cache->file); -#ifdef HAVE_READLINK +#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT) symlink(cache->file, cache->touch); if (lstat(image_lock, &st)) { symlink(cache->file, image_lock); diff --git a/local.c b/local.c index ede5aaf..d204ab3 100644 --- a/local.c +++ b/local.c @@ -1,9 +1,10 @@ -/* $Id: local.c,v 1.13 2001/12/03 18:29:37 ukai Exp $ */ +/* $Id: local.c,v 1.14 2002/02/04 15:18:42 ukai Exp $ */ #include "fm.h" #include #include #include #include +#include #include #include #ifdef HAVE_READLINK @@ -43,10 +44,12 @@ dirBuffer(char *dname) char **flist; char *p, *qdir; Str fbuf = Strnew(); -#ifdef HAVE_READLINK +#ifdef HAVE_LSTAT struct stat lst; +#ifdef HAVE_READLINK char lbuf[1024]; #endif /* HAVE_READLINK */ +#endif /* HAVE_LSTAT */ int i, l, nrow = 0, n = 0, maxlen = 0; int nfile, nfile_max = 100; Str dirname; @@ -94,10 +97,10 @@ dirBuffer(char *dname) if (Strlastchar(fbuf) != '/') Strcat_char(fbuf, '/'); Strcat_charp(fbuf, p); -#ifdef HAVE_READLINK /* readlink == lstat() ? (ukai) */ +#ifdef HAVE_LSTAT if (lstat(fbuf->ptr, &lst) < 0) continue; -#endif /* READLINK */ +#endif /* HAVE_LSTAT */ if (stat(fbuf->ptr, &st) < 0) continue; if (multicolList) { @@ -107,10 +110,10 @@ dirBuffer(char *dname) else { if (S_ISDIR(st.st_mode)) Strcat_charp(tmp, "[DIR]  "); -#ifdef HAVE_READLINK +#ifdef HAVE_LSTAT else if (S_ISLNK(lst.st_mode)) Strcat_charp(tmp, "[LINK] "); -#endif /* HAVE_READLINE */ +#endif /* HAVE_LSTAT */ else Strcat_charp(tmp, "[FILE] "); } @@ -131,7 +134,7 @@ dirBuffer(char *dname) } } else { -#ifdef HAVE_READLINK +#if defined(HAVE_LSTAT) && defined(HAVE_READLINK) if (S_ISLNK(lst.st_mode)) { if ((l = readlink(fbuf->ptr, lbuf, sizeof(lbuf))) > 0) { lbuf[l] = '\0'; @@ -141,7 +144,7 @@ dirBuffer(char *dname) Strcat_char(tmp, '/'); } } -#endif /* HAVE_READLINK */ +#endif /* HAVE_LSTAT && HAVE_READLINK */ Strcat_charp(tmp, "
\n"); } } diff --git a/rc.c b/rc.c index a572e28..782a1df 100644 --- a/rc.c +++ b/rc.c @@ -1,4 +1,4 @@ -/* $Id: rc.c,v 1.38 2002/01/31 17:54:56 ukai Exp $ */ +/* $Id: rc.c,v 1.39 2002/02/04 15:18:42 ukai Exp $ */ /* * Initialization file etc. */ @@ -70,6 +70,7 @@ static char *config_file = NULL; #ifdef USE_IMAGE #define CMT_DISP_IMAGE "インライン画像を表示" #define CMT_AUTO_IMAGE "インライン画像を自動で読み込む" +#define CMT_MAX_LOAD_IMAGE "画像読み込み時の最大プロセス数" #define CMT_EXT_IMAGE_VIEWER "画像を外部ビューワで表示" #define CMT_IMAGE_SCALE "画像のスケール(%)" #define CMT_IMGDISPLAY "画像を表示するためのコマンド" @@ -203,6 +204,7 @@ static char *config_file = NULL; #ifdef USE_IMAGE #define CMT_DISP_IMAGE "Display of inline image" #define CMT_AUTO_IMAGE "Automatic loading of inline image" +#define CMT_MAX_LOAD_IMAGE "Maximum process for parallel image loading" #define CMT_EXT_IMAGE_VIEWER "Use external image viewer" #define CMT_IMAGE_SCALE "Scale of image (%)" #define CMT_IMGDISPLAY "External command to display image" @@ -465,6 +467,8 @@ struct param_ptr params1[] = { {"display_image", P_INT, PI_ONOFF, (void *)&displayImage, CMT_DISP_IMAGE, NULL}, {"auto_image", P_INT, PI_ONOFF, (void *)&autoImage, CMT_AUTO_IMAGE, NULL}, + {"max_load_image", P_INT, PI_TEXT, (void *)&maxLoadImage, + CMT_MAX_LOAD_IMAGE, NULL}, {"ext_image_viewer", P_INT, PI_ONOFF, (void *)&useExtImageViewer, CMT_EXT_IMAGE_VIEWER, NULL}, {"image_scale", P_SCALE, PI_TEXT, (void *)&image_scale, CMT_IMAGE_SCALE, -- cgit v1.2.3