diff options
| -rw-r--r-- | ChangeLog | 28 | ||||
| -rw-r--r-- | config.h.dist | 2 | ||||
| -rwxr-xr-x | configure | 41 | ||||
| -rw-r--r-- | doc-jp/README.img | 33 | ||||
| -rw-r--r-- | doc/README.img | 32 | ||||
| -rw-r--r-- | file.c | 36 | ||||
| -rw-r--r-- | fm.h | 3 | ||||
| -rw-r--r-- | form.c | 6 | ||||
| -rw-r--r-- | image.c | 63 | ||||
| -rw-r--r-- | local.c | 19 | ||||
| -rw-r--r-- | rc.c | 6 | 
11 files changed, 183 insertions, 86 deletions
| @@ -1,3 +1,29 @@ +2002-02-04  Hironori Sakamoto <hsaka@mth.biglobe.ne.jp> + +	* [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 <sys/stat.h> +	* 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 <sys/stat.h> +		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  <ukai@debian.or.jp>  	* [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 @@ -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 <sys/types.h> +#include <sys/stat.h> +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 <stdlib.h> @@ -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. @@ -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 <sys/types.h>  #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><img_alt hseq=\"%d\" src=\"", cur_iseq++)); +	pre_int = TRUE;      }      else  #endif @@ -2879,8 +2881,10 @@ process_img(struct parsed_tag *tag, int width)  	if (w < 0)  	    w = 12 * pixel_per_char;  	nw = w ? (int)((w - 1) / pixel_per_char + 1) : 1; -	if (r) +	if (r) {  	    Strcat_charp(tmp, "<pre_int>"); +	    pre_int = TRUE; +	}  	Strcat_charp(tmp, "<img_alt src=\"");      }      Strcat_charp(tmp, html_quote(p)); @@ -2982,6 +2986,10 @@ process_img(struct parsed_tag *tag, int width)  	}  	if (w > 200 && i < 13) {  	    /* must be a horizontal line */ +	    if (!pre_int) { +		Strcat_charp(tmp, "<pre_int>"); +		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, "</img_alt>"); -#ifdef USE_IMAGE -    if (use_image) { -	Strcat_charp(tmp, "</pre_int>"); -    } -    else -#endif -    if (r) +    if (pre_int)  	Strcat_charp(tmp, "</pre_int>");      if (r) {  	Strcat_charp(tmp, "</input_alt>"); @@ -5728,17 +5730,21 @@ print_internal_information(struct html_feed_environ *henv)  	    s = Sprintf("<form_int fid=\"%d\" action=\"%s\" method=\"%s\"",  			i, fp->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("<option_int selectnumber=%d"  			    " value=\"%s\"%s>%s</option_int>",  			    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("<textarea_int textareanumber=%d>%s</textarea_int>", @@ -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 @@ -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"); @@ -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 <sys/types.h> +#include <sys/stat.h>  #include <signal.h>  #include <errno.h>  #include <unistd.h> @@ -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; @@ -333,18 +334,51 @@ 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)  {      ImageCache *cache;      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); @@ -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 <string.h>  #include <stdio.h>  #include <stdlib.h>  #include <sys/types.h> +#include <sys/stat.h>  #include <signal.h>  #include <errno.h>  #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, "<br>\n");  	}      } @@ -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, | 
