diff options
author | Fumitoshi UKAI <ukai@debian.or.jp> | 2003-01-29 17:10:17 +0000 |
---|---|---|
committer | Fumitoshi UKAI <ukai@debian.or.jp> | 2003-01-29 17:10:17 +0000 |
commit | b0a661730f022b85ef0dfd6244a7cef05357856d (patch) | |
tree | 1455f40baac66a86894f2f8eb969c93c62e2ff1e | |
parent | [w3m-dev 03707] Don't stop loading image when moving to next page. (diff) | |
download | w3m-b0a661730f022b85ef0dfd6244a7cef05357856d.tar.gz w3m-b0a661730f022b85ef0dfd6244a7cef05357856d.zip |
[w3m-dev 03708] Re: Don't stop loading image when moving to next page.
* config.h.dist (lstat): define ifndef HAVE_LSTAT
* configure (config.h) ditto
* display.c (fmTerm): new loadImage
(save_current_buf): only ifdef USE_BUFINFO
(displayBuffer): new loadImage
* etc.c (setup_child): TrapSignal
* file.c (loadGeneralFile): TRAP_OFF, TRAP_ON
(loadHTMLstream): ditto
(loadGopherDir): ditto
(loadBuffer): ditto
(loadImageBuffer): ditto
(getNextPage): ditto
(save2tmp): ditto
* fm.h (TrapSignal): added
(TRAP_ON): added
(TRAP_OFF): added
* form.c (HAVE_LSTAT): deleted
* frame.c (createFrameFile): TRAP_OFF, TRAP_ON
* image.c (image_buffer): added
(deleteImage): new loadImage
(getAllImage): initialize image_buffer
(loadImage): rewrite
* main.c (main): new loadImage
(checkDownloadList): remove ifdef HAVE_LSTAT
* news.c (loadNwesgroup): TRAP_ON, TRAP_OFF
* proto.h (loadImage): add buf arg
* url.c (openSocket): TRAP_ON, TRAP_OFF
(check_no_proxy): TRAP_ON, TRAP_OFF
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
Diffstat (limited to '')
-rw-r--r-- | ChangeLog | 38 | ||||
-rw-r--r-- | config.h.dist | 4 | ||||
-rwxr-xr-x | configure | 6 | ||||
-rw-r--r-- | display.c | 18 | ||||
-rw-r--r-- | etc.c | 3 | ||||
-rw-r--r-- | file.c | 132 | ||||
-rw-r--r-- | fm.h | 14 | ||||
-rw-r--r-- | form.c | 9 | ||||
-rw-r--r-- | frame.c | 15 | ||||
-rw-r--r-- | image.c | 124 | ||||
-rw-r--r-- | main.c | 12 | ||||
-rw-r--r-- | news.c | 12 | ||||
-rw-r--r-- | proto.h | 4 | ||||
-rw-r--r-- | url.c | 27 |
14 files changed, 182 insertions, 236 deletions
@@ -1,11 +1,43 @@ -2003-01-29 NAKAJIMA Mikio <minakaji@osaka.email.ne.jp> +2003-01-30 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> + + * [w3m-dev 03708] Re: Don't stop loading image when moving to next page. + * config.h.dist (lstat): define ifndef HAVE_LSTAT + * configure (config.h) ditto + * display.c (fmTerm): new loadImage + (save_current_buf): only ifdef USE_BUFINFO + (displayBuffer): new loadImage + * etc.c (setup_child): TrapSignal + * file.c (loadGeneralFile): TRAP_OFF, TRAP_ON + (loadHTMLstream): ditto + (loadGopherDir): ditto + (loadBuffer): ditto + (loadImageBuffer): ditto + (getNextPage): ditto + (save2tmp): ditto + * fm.h (TrapSignal): added + (TRAP_ON): added + (TRAP_OFF): added + * form.c (HAVE_LSTAT): deleted + * frame.c (createFrameFile): TRAP_OFF, TRAP_ON + * image.c (image_buffer): added + (deleteImage): new loadImage + (getAllImage): initialize image_buffer + (loadImage): rewrite + * main.c (main): new loadImage + (checkDownloadList): remove ifdef HAVE_LSTAT + * news.c (loadNwesgroup): TRAP_ON, TRAP_OFF + * proto.h (loadImage): add buf arg + * url.c (openSocket): TRAP_ON, TRAP_OFF + (check_no_proxy): TRAP_ON, TRAP_OFF + +2003-01-29 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> * [w3m-dev 03707] Don't stop loading image when moving to next page. * display.c (save_current_buf): required when defined USE_IMAGE (displayBuffer): stop only buffer changed * image.c (loadImage): IMG_FLAG_START load from maxLoadImage -2003-01-29 NAKAJIMA Mikio <minakaji@osaka.email.ne.jp> +2003-01-29 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> * [w3m-dev 03706] X-Image-URL: support, bug fix of reshapeBuffer() * buffer.c (reshapeBuffer): rewrite @@ -6899,4 +6931,4 @@ a * [w3m-dev 03276] compile error on EWS4800 * release-0-2-1 * import w3m-0.2.1 -$Id: ChangeLog,v 1.722 2003/01/28 16:45:15 ukai Exp $ +$Id: ChangeLog,v 1.723 2003/01/29 17:10:17 ukai Exp $ diff --git a/config.h.dist b/config.h.dist index 58a60da..fbe8d22 100644 --- a/config.h.dist +++ b/config.h.dist @@ -238,6 +238,10 @@ typedef void MySignalHandler; #endif /* HAVE_SRANDOM */ #endif +#ifndef HAVE_LSTAT +#define lstat stat +#endif + #if defined( __CYGWIN32__ ) && !defined( __CYGWIN__ ) #define __CYGWIN__ #endif @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: configure,v 1.95 2003/01/22 16:36:11 ukai Exp $ +# $Id: configure,v 1.96 2003/01/29 17:10:25 ukai Exp $ # Configuration. # @@ -2504,6 +2504,10 @@ $def_ipv6_ss_family #endif /* HAVE_SRANDOM */ #endif +#ifndef HAVE_LSTAT +#define lstat stat +#endif + #if defined( __CYGWIN32__ ) && !defined( __CYGWIN__ ) #define __CYGWIN__ #endif @@ -1,4 +1,4 @@ -/* $Id: display.c,v 1.58 2003/01/28 16:45:18 ukai Exp $ */ +/* $Id: display.c,v 1.59 2003/01/29 17:10:27 ukai Exp $ */ #include <signal.h> #include "fm.h" @@ -164,7 +164,7 @@ fmTerm(void) refresh(); #ifdef USE_IMAGE if (activeImage) - loadImage(IMG_FLAG_STOP); + loadImage(NULL, IMG_FLAG_STOP); #endif #ifdef USE_MOUSE if (use_mouse) @@ -210,7 +210,7 @@ static int graph_mode = 0; static Linecolor color_mode = 0; #endif -#if defined(USE_BUFINFO) || defined(USE_IMAGE) +#ifdef USE_BUFINFO static Buffer *save_current_buf = NULL; #endif @@ -431,10 +431,7 @@ displayBuffer(Buffer *buf, int mode) if (draw_image_flag) clear(); clearImage(); - if (buf != save_current_buf) - loadImage(IMG_FLAG_STOP); - else - loadImage(IMG_FLAG_START); + loadImage(buf, IMG_FLAG_STOP); image_touch++; draw_image_flag = FALSE; } @@ -472,17 +469,12 @@ displayBuffer(Buffer *buf, int mode) refresh(); #ifdef USE_IMAGE if (activeImage && displayImage && buf->img) { - /* - * loadImage(IMG_FLAG_START); - */ drawImage(); } #endif -#if defined(USE_BUFINFO) || defined(USE_IMAGE) - if (buf != save_current_buf) { #ifdef USE_BUFINFO + if (buf != save_current_buf) { saveBufferInfo(); -#endif save_current_buf = buf; } #endif @@ -1,4 +1,4 @@ -/* $Id: etc.c,v 1.60 2003/01/25 17:42:17 ukai Exp $ */ +/* $Id: etc.c,v 1.61 2003/01/29 17:10:30 ukai Exp $ */ #include "fm.h" #include <pwd.h> #include "myctype.h" @@ -1367,6 +1367,7 @@ setup_child(int child, int i, int f) close_all_fds_except(i, f); QuietMessage = TRUE; fmInitialized = FALSE; + TrapSignal = FALSE; } pid_t @@ -1,4 +1,4 @@ -/* $Id: file.c,v 1.210 2003/01/28 16:41:05 ukai Exp $ */ +/* $Id: file.c,v 1.211 2003/01/29 17:10:32 ukai Exp $ */ #include "fm.h" #include <sys/types.h> #include "myctype.h" @@ -1583,10 +1583,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, checkRedirection(NULL); load_doc: - if (fmInitialized) - term_raw(); - if (prevtrap) - signal(SIGINT, prevtrap); + TRAP_OFF; url_option.referer = referer; url_option.flag = flag; f = openURL(tpath, &pu, current, &url_option, request, extra_header, of, @@ -1654,10 +1651,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, } if (status == HTST_MISSING) { - if (fmInitialized) - term_raw(); - if (prevtrap) - signal(SIGINT, prevtrap); + TRAP_OFF; UFclose(&f); return NULL; } @@ -1665,9 +1659,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, /* openURL() succeeded */ if (SETJMP(AbortLoading) != 0) { /* transfer interrupted */ - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; if (b) discardBuffer(b); UFclose(&f); @@ -1682,9 +1674,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, } if (header_string) header_string = NULL; - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; if (pu.scheme == SCM_HTTP || #ifdef USE_SSL pu.scheme == SCM_HTTPS || @@ -1754,9 +1744,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, if (ss == NULL) { /* abort */ UFclose(&f); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; return NULL; } UFclose(&f); @@ -1778,9 +1766,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, if (ss == NULL) { /* abort */ UFclose(&f); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; return NULL; } UFclose(&f); @@ -1818,9 +1804,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, case 'm': page = loadGopherDir(&f, &pu, &code); t = "gopher:directory"; - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; goto page_loaded; case 's': t = "audio/basic"; @@ -1865,9 +1849,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, UFclose(&f); else { UFclose(&f); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; doFileMove(tmpf, guess_save_name(t_buf, pu.file)); } return NO_BUFFER; @@ -1971,9 +1953,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, if (do_download) { /* download only */ char *file; - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; if (DecodeCTE && IStype(f.stream) != IST_ENCODED) f.stream = newEncodedStream(f.stream, f.encoding); if (pu.scheme == SCM_LOCAL) { @@ -2016,9 +1996,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, b->real_type = t; } UFclose(&f); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; return b; } #endif @@ -2044,15 +2022,11 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, copyParsedURL(&b->currentURL, &pu); } UFclose(&f); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; return b; } else { - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; if (pu.scheme == SCM_LOCAL) { UFclose(&f); _doFileCopy(pu.real_file, @@ -2140,9 +2114,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, reAnchorNewsheader(b); #endif preFormUpdateBuffer(b); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; return b; } @@ -6572,9 +6544,7 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1); goto phase2; } - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; #ifdef JP_CHARSET if (newBuf != NULL && newBuf->document_code != '\0') @@ -6645,25 +6615,19 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal) if (htmlenv1.title) newBuf->buffername = htmlenv1.title; if (w3m_halfdump) { - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; print_internal_information(&htmlenv1); return; } if (w3m_backend) { - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; print_internal_information(&htmlenv1); backend_halfdump_buf = htmlenv1.buf; return; } phase2: newBuf->trbyte = trbyte + linelen; - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; #ifdef JP_CHARSET newBuf->document_code = code; content_charset = '\0'; @@ -6686,22 +6650,16 @@ loadHTMLString(Str page) newBuf = newBuffer(INIT_BUFFER_WIDTH); if (SETJMP(AbortLoading) != 0) { - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; discardBuffer(newBuf); return NULL; } - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; init_stream(&f, SCM_LOCAL, newStrStream(page)); loadHTMLstream(&f, newBuf, NULL, TRUE); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; newBuf->topLine = newBuf->firstLine; newBuf->lastLine = newBuf->currentLine; newBuf->currentLine = newBuf->firstLine; @@ -6740,9 +6698,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, char *code) if (SETJMP(AbortLoading) != 0) goto gopher_end; - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; #ifdef JP_CHARSET *code = DocumentCode; @@ -6804,9 +6760,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, char *code) } gopher_end: - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; Strcat_charp(tmp, "</table>\n</body>\n</html>\n"); return tmp; @@ -6839,9 +6793,7 @@ loadBuffer(URLFile *uf, Buffer *volatile newBuf) if (SETJMP(AbortLoading) != 0) { goto _end; } - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; if (newBuf->sourcefile == NULL && (uf->scheme != SCM_LOCAL || newBuf->mailcap)) { @@ -6906,9 +6858,7 @@ loadBuffer(URLFile *uf, Buffer *volatile newBuf) lineBuf2->length, FOLD_BUFFER_WIDTH, nlines); } _end: - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; newBuf->topLine = newBuf->firstLine; newBuf->lastLine = newBuf->currentLine; newBuf->currentLine = newBuf->firstLine; @@ -6931,10 +6881,10 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) Str tmp, tmpf; FILE *src = NULL; URLFile f; - MySignalHandler(*prevtrap) (); + MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; struct stat st; - loadImage(IMG_FLAG_STOP); + loadImage(newBuf, IMG_FLAG_STOP); image.url = uf->url; image.ext = uf->ext; image.width = -1; @@ -6945,22 +6895,16 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf) !stat(cache->file, &st)) goto image_buffer; - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; if (IStype(uf->stream) != IST_ENCODED) uf->stream = newEncodedStream(uf->stream, uf->encoding); if (save2tmp(*uf, cache->file) < 0) { UFclose(uf); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; return NULL; } UFclose(uf); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; cache->loaded = IMG_FLAG_LOADED; cache->index = 0; @@ -7242,9 +7186,7 @@ getNextPage(Buffer *buf, int plen) if (SETJMP(AbortLoading) != 0) { goto pager_end; } - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; init_stream(&uf, SCM_UNKNOWN, NULL); for (i = 0; i < plen; i++) { @@ -7307,9 +7249,7 @@ getNextPage(Buffer *buf, int plen) } } pager_end: - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; buf->trbyte = trbyte + linelen; #ifdef JP_CHARSET @@ -7342,9 +7282,7 @@ save2tmp(URLFile uf, char *tmpf) if (SETJMP(AbortLoading) != 0) { goto _end; } - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; check = 0; #ifdef USE_NNTP if (uf.scheme == SCM_NEWS) { @@ -7379,9 +7317,7 @@ save2tmp(URLFile uf, char *tmpf) } _end: bcopy(env_bak, AbortLoading, sizeof(JMP_BUF)); - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; fclose(ff); current_content_length = 0; return 0; @@ -1,4 +1,4 @@ -/* $Id: fm.h,v 1.109 2003/01/27 16:18:52 ukai Exp $ */ +/* $Id: fm.h,v 1.110 2003/01/29 17:10:37 ukai Exp $ */ /* * w3m: WWW wo Miru utility * @@ -778,6 +778,18 @@ global char MetaRefresh init(FALSE); global char fmInitialized init(FALSE); global char QuietMessage init(FALSE); +global char TrapSignal init(TRUE); +#define TRAP_ON if (TrapSignal) { \ + prevtrap = signal(SIGINT, KeyAbort); \ + if (fmInitialized) \ + term_cbreak(); \ +} +#define TRAP_OFF if (TrapSignal) { \ + if (fmInitialized) \ + term_raw(); \ + if (prevtrap) \ + signal(SIGINT, prevtrap); \ +} extern unsigned char GlobalKeymap[]; extern unsigned char EscKeymap[]; @@ -1,4 +1,4 @@ -/* $Id: form.c,v 1.29 2003/01/20 15:22:59 ukai Exp $ */ +/* $Id: form.c,v 1.30 2003/01/29 17:10:38 ukai Exp $ */ /* * HTML forms */ @@ -9,13 +9,6 @@ #include "local.h" #include "regex.h" -#ifndef HAVE_LSTAT -/* lstat is identical to stat, only the link itself is statted, not the file - * that is obtained by tracing the links. But on OS/2 systems, there is no - * differences. */ -#define lstat stat -#endif /* not HAVE_LSTAT */ - extern Str *textarea_str; #ifdef MENU_SELECT extern FormSelectOption *select_option; @@ -1,4 +1,4 @@ -/* $Id: frame.c,v 1.30 2003/01/20 15:30:20 ukai Exp $ */ +/* $Id: frame.c,v 1.31 2003/01/29 17:10:39 ukai Exp $ */ #include "fm.h" #include "parsetagx.h" #include "myctype.h" @@ -424,15 +424,10 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level, if (level == 0) { if (SETJMP(AbortLoading) != 0) { - if (fmInitialized) - term_raw(); - signal(SIGINT, prevtrap); + TRAP_OFF; return -1; } - prevtrap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); - + TRAP_ON; f->name = "_top"; } @@ -852,9 +847,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level, fputs("</table>\n", f1); if (level == 0) { fputs("</body></html>\n", f1); - signal(SIGINT, prevtrap); - if (fmInitialized) - term_raw(); + TRAP_OFF; } return 0; } @@ -1,4 +1,4 @@ -/* $Id: image.c,v 1.28 2003/01/28 16:45:19 ukai Exp $ */ +/* $Id: image.c,v 1.30 2003/01/29 17:10:40 ukai Exp $ */ #include "fm.h" #include <sys/types.h> @@ -243,6 +243,7 @@ static Hash_sv *image_hash = NULL; static Hash_sv *image_file = NULL; static GeneralList *image_list = NULL; static ImageCache **image_cache = NULL; +static Buffer *image_buffer = NULL; void deleteImage(Buffer *buf) @@ -263,7 +264,7 @@ deleteImage(Buffer *buf) a->image->cache->index < 0) unlink(a->image->cache->file); } - loadImage(IMG_FLAG_STOP); + loadImage(NULL, IMG_FLAG_STOP); } void @@ -274,6 +275,7 @@ getAllImage(Buffer *buf) ParsedURL *current; int i; + image_buffer = buf; if (!buf) return; buf->image_loaded = TRUE; @@ -318,11 +320,11 @@ showImageProgress(Buffer *buf) } void -loadImage(int flag) +loadImage(Buffer *buf, int flag) { ImageCache *cache; struct stat st; - int wait_st, i; + int wait_st, i, draw = FALSE; if (maxLoadImage > MAX_LOAD_IMAGE) maxLoadImage = MAX_LOAD_IMAGE; @@ -334,74 +336,71 @@ loadImage(int flag) image_cache = New_N(ImageCache *, MAX_LOAD_IMAGE); bzero(image_cache, sizeof(ImageCache *) * MAX_LOAD_IMAGE); } - - if (flag == IMG_FLAG_STOP || flag == IMG_FLAG_START) { - if (flag == IMG_FLAG_STOP) - i = 0; - else - i = maxLoadImage; - for ( ; i < n_load_image; i++) { - cache = image_cache[i]; - if (!cache) - continue; - if (cache->pid) { - kill(cache->pid, SIGKILL); + for (i = 0; i < n_load_image; i++) { + cache = image_cache[i]; + if (!cache) + continue; + if (lstat(cache->touch, &st)) + continue; + if (cache->pid) { + kill(cache->pid, SIGKILL); +/* #ifdef HAVE_WAITPID - waitpid(cache->pid, &wait_st, 0); + waitpid(cache->pid, &wait_st, 0); #else - wait(&wait_st); + wait(&wait_st); #endif - cache->pid = 0; +*/ + cache->pid = 0; + } + if (!stat(cache->file, &st)) { + cache->loaded = IMG_FLAG_LOADED; + if (getImageSize(cache)) { + if (image_buffer) + image_buffer->need_reshape = TRUE; } - unlink(cache->touch); - image_cache[i] = NULL; + draw = TRUE; } - image_list = NULL; - image_file = NULL; - n_load_image = maxLoadImage; - return; + else + cache->loaded = IMG_FLAG_ERROR; + unlink(cache->touch); + image_cache[i] = NULL; } - { - int draw = FALSE; - for (i = 0; i < n_load_image; i++) { - cache = image_cache[i]; - if (!cache) - continue; -#ifdef HAVE_LSTAT - if (lstat(cache->touch, &st)) -#else - if (stat(cache->touch, &st)) -#endif - continue; - if (cache->pid) { - kill(cache->pid, SIGKILL); + for (i = (buf != image_buffer) ? 0 : maxLoadImage; i < n_load_image; i++) { + cache = image_cache[i]; + if (!cache) + continue; + if (cache->pid) { + kill(cache->pid, SIGKILL); +/* #ifdef HAVE_WAITPID - waitpid(cache->pid, &wait_st, 0); + waitpid(cache->pid, &wait_st, 0); #else - wait(&wait_st); + wait(&wait_st); #endif - cache->pid = 0; - } - if (!stat(cache->file, &st)) { - cache->loaded = IMG_FLAG_LOADED; - if (getImageSize(cache)) { - if (CurrentTab && Currentbuf) - Currentbuf->need_reshape = TRUE; - } - draw = TRUE; - } - else - cache->loaded = IMG_FLAG_ERROR; - unlink(cache->touch); - image_cache[i] = NULL; - } - if (draw && CurrentTab && Currentbuf) { - drawImage(); - showImageProgress(Currentbuf); +*/ + cache->pid = 0; } + unlink(cache->touch); + image_cache[i] = NULL; } + if (flag == IMG_FLAG_STOP) { + image_list = NULL; + image_file = NULL; + n_load_image = maxLoadImage; + image_buffer = NULL; + return; + } + + if (draw && image_buffer) { + drawImage(); + showImageProgress(image_buffer); + } + + image_buffer = buf; + if (!image_list) return; for (i = 0; i < n_load_image; i++) { @@ -416,8 +415,8 @@ loadImage(int flag) } image_list = NULL; image_file = NULL; - if (CurrentTab && Currentbuf) - displayBuffer(Currentbuf, B_NORMAL); + if (image_buffer) + displayBuffer(image_buffer, B_NORMAL); return; } if (cache->loaded == IMG_FLAG_UNLOADED) @@ -428,7 +427,10 @@ loadImage(int flag) flush_tty(); if ((cache->pid = fork()) == 0) { Buffer *b; +/* setup_child(TRUE, 0, -1); +*/ + setup_child(FALSE, 0, -1); image_source = cache->file; b = loadGeneralFile(cache->url, cache->current, NULL, 0, NULL); if (!b || !b->real_type || strncasecmp(b->real_type, "image/", 6)) @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.202 2003/01/28 16:34:25 ukai Exp $ */ +/* $Id: main.c,v 1.203 2003/01/29 17:10:41 ukai Exp $ */ #define MAINPROGRAM #include "fm.h" #include <signal.h> @@ -1039,7 +1039,7 @@ main(int argc, char **argv, char **envp) if (activeImage && displayImage && Currentbuf->img && !Currentbuf->image_loaded) { do { - loadImage(IMG_FLAG_NEXT); + loadImage(Currentbuf, IMG_FLAG_NEXT); } while (sleep_till_anykey(1, 0) <= 0); } #endif @@ -6089,11 +6089,7 @@ checkDownloadList(void) if (!FirstDL) return FALSE; for (d = FirstDL; d != NULL; d = d->next) { -#ifdef HAVE_LSTAT if (!d->ok && !lstat(d->lock, &st)) -#else - if (!d->ok && !stat(d->lock, &st)) -#endif return TRUE; } return FALSE; @@ -6131,11 +6127,7 @@ DownloadListBuffer(void) DOWNLOAD_LIST_TITLE "</h1>\n" "<form method=internal action=download><hr>\n"); for (d = LastDL; d != NULL; d = d->prev) { -#ifdef HAVE_LSTAT if (lstat(d->lock, &st)) -#else - if (stat(d->lock, &st)) -#endif d->ok = TRUE; Strcat_charp(src, "<pre>\n"); Strcat(src, Sprintf("%s\n --> %s\n ", html_quote(d->url), @@ -1,4 +1,4 @@ -/* $Id: news.c,v 1.14 2003/01/15 16:24:25 ukai Exp $ */ +/* $Id: news.c,v 1.15 2003/01/29 17:10:49 ukai Exp $ */ #include "fm.h" #include "myctype.h" #include <stdio.h> @@ -314,7 +314,7 @@ loadNewsgroup(ParsedURL *pu, char *code) char *volatile scheme, *volatile group, *volatile list; int status, i, first, last; volatile int flag = 0, start = 0, end = 0; - MySignalHandler(*volatile trap) (SIGNAL_ARG) = NULL; + MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; if (current_news.host == NULL || !pu->file || *pu->file == '\0') return NULL; @@ -346,9 +346,7 @@ loadNewsgroup(ParsedURL *pu, char *code) Strcat_charp(page, "</table>\n<p>Transfer Interrupted!\n"); goto news_end; } - trap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; tmp = news_command(¤t_news, "GROUP", group, &status); if (status != 211) @@ -489,9 +487,7 @@ loadNewsgroup(ParsedURL *pu, char *code) news_end: Strcat_charp(page, "</body>\n</html>\n"); - if (fmInitialized) - term_raw(); - signal(SIGINT, trap); + TRAP_OFF; return page; } @@ -1,4 +1,4 @@ -/* $Id: proto.h,v 1.84 2003/01/23 18:37:21 ukai Exp $ */ +/* $Id: proto.h,v 1.85 2003/01/29 17:10:51 ukai Exp $ */ /* * This file was automatically generated by version 1.7 of cextract. * Manual editing not recommended. @@ -184,7 +184,7 @@ extern void restore_fonteffect(struct html_feed_environ *h_env, #ifdef USE_IMAGE extern void deleteImage(Buffer *buf); extern void getAllImage(Buffer *buf); -extern void loadImage(int flag); +extern void loadImage(Buffer *buf, int flag); extern ImageCache *getImage(Image * image, ParsedURL *current, int flag); extern int getImageSize(ImageCache * cache); #endif @@ -1,4 +1,4 @@ -/* $Id: url.c,v 1.69 2003/01/17 17:06:06 ukai Exp $ */ +/* $Id: url.c,v 1.70 2003/01/29 17:10:53 ukai Exp $ */ #include "fm.h" #include <sys/types.h> #include <sys/socket.h> @@ -457,7 +457,7 @@ openSocket(char *const hostname, int a1, a2, a3, a4; unsigned long adr; #endif /* not INET6 */ - MySignalHandler(*volatile trap) (SIGNAL_ARG) = NULL; + MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; if (fmInitialized) { message(Sprintf("Opening socket...")->ptr, 0, 0); @@ -471,9 +471,7 @@ openSocket(char *const hostname, close(sock); goto error; } - trap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; if (hostname == NULL) { #ifdef SOCK_DEBUG sock_log("openSocket() failed. reason: Bad hostname \"%s\"\n", @@ -618,15 +616,10 @@ openSocket(char *const hostname, } #endif /* not INET6 */ - if (fmInitialized) - term_raw(); - signal(SIGINT, trap); + TRAP_OFF; return sock; error: - if (fmInitialized) - term_raw(); - signal(SIGINT, trap); - + TRAP_OFF; return -1; } @@ -1955,7 +1948,7 @@ check_no_proxy(char *domain) { TextListItem *tl; volatile int ret = 0; - MySignalHandler(*volatile trap) (SIGNAL_ARG) = NULL; + MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL; if (NO_proxy_domains == NULL || NO_proxy_domains->nitem == 0 || domain == NULL) @@ -1974,9 +1967,7 @@ check_no_proxy(char *domain) ret = 0; goto end; } - trap = signal(SIGINT, KeyAbort); - if (fmInitialized) - term_cbreak(); + TRAP_ON; { #ifndef INET6 struct hostent *he; @@ -2053,9 +2044,7 @@ check_no_proxy(char *domain) #endif /* INET6 */ } end: - if (fmInitialized) - term_raw(); - signal(SIGINT, trap); + TRAP_OFF; return ret; } |