AmendHub

Download:

jcs

/

detritus

/

amendments

/

24

*: Improve drawing


jcs made amendment 24 about 1 year ago
--- browser.c Mon Nov 4 09:29:10 2024 +++ browser.c Mon Nov 4 14:36:26 2024 @@ -58,6 +58,7 @@ void browser_atexit(struct focusable *focusable); void browser_go(struct browser *browser, short dir); page_handle browser_create_page(struct browser *browser, char *uristr); void browser_draw_status(struct browser *browser); +void browser_finished_loading(struct browser *browser); void browser_follow_redir(struct browser *browser); void browser_stop_loading_page(struct browser *browser); void browser_free_links(struct browser *browser); @@ -67,24 +68,16 @@ browser_idle(struct focusable *focusable, EventRecord { struct browser *browser = (struct browser *)focusable->cookie; struct uri_handler *handler; - struct URI *redir; TEIdle(browser->uri_te); if (browser->loading_page) { HLock(browser->loading_page); handler = (*(browser->loading_page))->handler; - - if (!handler->process(browser->loading_page)) { - if ((*(browser->loading_page))->redir_to) - browser_follow_redir(browser); - else { - browser_stop_loading_page(browser); - browser->redirs = 0; - } - } - HUnlock(browser->loading_page); + + if (!handler->process(browser->loading_page)) + browser_finished_loading(browser); } } @@ -289,6 +282,42 @@ browser_close(struct focusable *focusable) } void +browser_finished_loading(struct browser *browser) +{ + struct URI *redir; + struct page *page; + size_t size; + + HLock(browser->loading_page); + + if ((*(browser->loading_page))->redir_to) { + browser_follow_redir(browser); + HUnlock(browser->loading_page); + return; + } + + browser_stop_loading_page(browser); + browser->redirs = 0; + + /* release some memory if we can */ + HLock(browser->current_page); + page = *(browser->current_page); + if (page->content_size > page->content_len) { + size = page->content_len; + page->content_size = size; + HUnlock(browser->current_page); + SetHandleSize(browser->current_page, sizeof(struct page) + size); + HLock(browser->current_page); + page = *(browser->current_page); + } + + browser_statusf(page->browser, "Finished loading %ld bytes", + page->content_len); + + HUnlock(browser->current_page); +} + +void browser_stop_loading_page(struct browser *browser) { page_handle pageh; @@ -647,6 +676,8 @@ browser_go(struct browser *browser, short dir) struct page *page; short len; char *uristr; + + browser_statusf(browser, ""); if (dir == 0) { HLock(browser->uri_te); @@ -888,6 +919,7 @@ browser_commit_to_page(struct browser *browser, page_h HUnlock(browser->uri_te); TEUpdate(&r, browser->uri_te); + TVAutoCalc(browser->output_tv, true); TVClear(browser->output_tv); TVUpdateScrollbar(browser->output_tv, browser->output_tv_scroller); @@ -927,15 +959,16 @@ browser_commit_to_page(struct browser *browser, page_h size_t browser_grow_page_content(page_handle pageh, size_t len) { - unsigned long size; + unsigned long size, gsize; HLock(pageh); size = (*pageh)->content_size + MAX(len, PAGE_CONTENT_CHUNK_SIZE); HUnlock(pageh); - SetHandleSize(pageh, sizeof(struct page) + size); + gsize = sizeof(struct page) + size; + SetHandleSize(pageh, gsize); if (MemError() != 0) { - warn("Out of memory growing page handle"); + warn("Out of memory growing page to %ld bytes", gsize); return 0; } --- finger.c Mon Nov 4 11:37:48 2024 +++ finger.c Mon Nov 4 14:28:05 2024 @@ -268,7 +268,6 @@ parse: TVAutoCalc(page->browser->output_tv, false); ret = parse_content(page); - TVAutoCalc(page->browser->output_tv, true); TVCalcLines(page->browser->output_tv); TVUpdate(page->browser->output_tv); TVUpdateScrollbar(page->browser->output_tv, @@ -279,17 +278,6 @@ parse: return true; } - browser_statusf(page->browser, "Finished loading %ld bytes", - page->content_len); - - /* release some memory if we can */ - if (page->content_size > page->content_len) { - size = page->content_len; - page->content_size = size; - HUnlock(pageh); - SetHandleSize(pageh, sizeof(struct page) + size); - } - request_fail: HUnlock(pageh); return false; @@ -298,7 +286,7 @@ request_fail: static bool parse_content(struct page *page) { - long n; + long n, plines = 0; page->browser->style = STYLE_PRE; @@ -313,6 +301,7 @@ parse_content(struct page *page) page->content_pos++; n++; } + plines++; } else if (page->content[n] == '\n') { /* lone \n */ if (n > page->content_pos) @@ -321,6 +310,15 @@ parse_content(struct page *page) n - page->content_pos); browser_print(page->browser, "\r", 1); page->content_pos = n + 1; + plines++; + } + + if (plines == 25) { + TVCalcLines(page->browser->output_tv); + TVUpdate(page->browser->output_tv); + TVUpdateScrollbar(page->browser->output_tv, + page->browser->output_tv_scroller); + plines = 0; } } --- gemini.c Mon Nov 4 11:14:02 2024 +++ gemini.c Mon Nov 4 14:28:38 2024 @@ -258,10 +258,7 @@ gemini_process(page_handle pageh) while (status != 0) { if ((status & 0x1) && page->content_pos == page->content_len) { /* closed */ - if (error == 0) - browser_statusf(page->browser, - "Finished reading %ld bytes", page->content_len); - else + if (error != 0) browser_statusf(page->browser, "Error: TLS handshake failed: %d (TLS status 0x%x)", error, status); --- gopher.c Mon Nov 4 13:57:29 2024 +++ gopher.c Mon Nov 4 14:29:11 2024 @@ -289,7 +289,6 @@ parse: TVAutoCalc(page->browser->output_tv, false); ret = parse_content(page); - TVAutoCalc(page->browser->output_tv, true); TVCalcLines(page->browser->output_tv); TVUpdate(page->browser->output_tv); TVUpdateScrollbar(page->browser->output_tv, @@ -299,17 +298,6 @@ parse: HUnlock(pageh); return true; } - - browser_statusf(page->browser, "Finished loading %ld bytes", - page->content_len); - - /* release some memory if we can */ - if (page->content_size > page->content_len) { - size = page->content_len; - page->content_size = size; - HUnlock(pageh); - SetHandleSize(pageh, sizeof(struct page) + size); - } request_fail: HUnlock(pageh); @@ -319,7 +307,7 @@ request_fail: static bool parse_content(struct page *page) { - long n; + long n, plines = 0; if (page->type[0] == '1') { /* gopher menu */ @@ -330,6 +318,15 @@ parse_content(struct page *page) gopher_print_menu(page, page->content + page->content_pos, n - page->content_pos); page->content_pos = n + 1; + plines++; + + if (plines == 25) { + TVCalcLines(page->browser->output_tv); + TVUpdate(page->browser->output_tv); + TVUpdateScrollbar(page->browser->output_tv, + page->browser->output_tv_scroller); + plines = 0; + } } } @@ -352,6 +349,7 @@ parse_content(struct page *page) page->content_pos++; n++; } + plines++; } else if (page->content[n] == '\n') { /* lone \n */ if (n > page->content_pos) @@ -360,6 +358,15 @@ parse_content(struct page *page) n - page->content_pos); browser_print(page->browser, "\r", 1); page->content_pos = n + 1; + plines++; + } + + if (plines == 25) { + TVCalcLines(page->browser->output_tv); + TVUpdate(page->browser->output_tv); + TVUpdateScrollbar(page->browser->output_tv, + page->browser->output_tv_scroller); + plines = 0; } }