AmendHub

Download:

jcs

/

detritus

/

amendments

/

23

gopher: Implement URL: handling, print all types the same but 'i'


jcs made amendment 23 about 1 year ago
--- gopher.c Mon Nov 4 10:52:28 2024 +++ gopher.c Mon Nov 4 13:57:29 2024 @@ -257,7 +257,8 @@ gopher_process(page_handle pageh) page->content_len += slen; browser_statusf(page->browser, "Read %ld bytes", page->content_len); - if (page->content_len >= 3 && + if ((page->type[0] == '0' || page->type[0] == '1' || + page->type[0] == 3) && page->content_len >= 3 && (page->content_len == 3 || page->content[page->content_len - 4] == '\n') && page->content[page->content_len - 3] == '.' && @@ -343,10 +344,9 @@ parse_content(struct page *page) /* text file, convert newlines and display */ for (n = page->content_pos; n < page->content_len; n++) { if (page->content[n] == '\r') { - if (n > page->content_pos) - browser_print(page->browser, - page->content + page->content_pos, - n - page->content_pos + 1); + browser_print(page->browser, + page->content + page->content_pos, + n - page->content_pos + 1); page->content_pos = n + 1; if (page->content[n + 1] == '\n') { page->content_pos++; @@ -388,6 +388,7 @@ gopher_print_menu(struct page *page, char *line, size_ { static char uri[URI_MAX_STR_LEN + 1], prefix[5]; char type, *label, *selector = NULL, *hostname = NULL; + size_t tlen; unsigned short port = 0; long n; @@ -412,40 +413,24 @@ gopher_print_menu(struct page *page, char *line, size_ page->browser->style = STYLE_PRE; switch (type) { - case '0': - /* text file */ - case '1': - /* gopher submenu */ - case '2': - /* CCSO nameserver? */ - case '7': - /* search */ - case 'd': - /* document */ - - snprintf(prefix, sizeof(prefix), "[%c] ", type); - browser_print(page->browser, prefix, 4); - - len = snprintf(uri, sizeof(uri), "gopher://%s/%c%s", hostname, - type, selector); - browser_print_link(page->browser, uri, len, label, strlen(label)); - browser_print(page->browser, "\r", 1); - break; case 'i': /* informational */ browser_print(page->browser, label, strlen(label)); browser_print(page->browser, "\r", 1); break; default: - browser_print(page->browser, "type: ", 0); - browser_print(page->browser, (char *)&type, 1); - //browser_print(page->browser, " label:", 0); - //browser_print(page->browser, label, 0); - //browser_print(page->browser, " selector:", 0); - //browser_print(page->browser, selector, 0); - //browser_print(page->browser, " host:", 0); - //browser_print(page->browser, hostname, 0); + snprintf(prefix, sizeof(prefix), "[%c] ", type); + browser_print(page->browser, prefix, 4); + + if (type == 'h' && strncmp(selector, "URL:", 4) == 0) + tlen = strlcpy(uri, selector + 4, sizeof(uri)); + else + tlen = snprintf(uri, sizeof(uri), "gopher://%s/%c%s", hostname, + type, selector); + + browser_print_link(page->browser, uri, tlen, label, strlen(label)); browser_print(page->browser, "\r", 1); + break; } for (n = 1; n < len; n++) {