AmendHub

Download:

jcs

/

detritus

/

amendments

/

41

gopher: Add icon for menus pointing to other servers

Also tweak icon spacing to keep fixed-width text aligned

jcs made amendment 41 about 1 year ago
--- detritus.π.r Fri Nov 15 13:48:07 2024 +++ detritus.π.r Fri Nov 15 15:26:43 2024 @@ -106,6 +106,8 @@ data 'SICN' (1024, purgeable) { $"4040 4040 7FC0 0000 0000 0000 0000 0000" /* @@@@.¿.......... */ $"0400 0A00 1100 2080 4340 84A0 4F40 2260" /* ...... ÄC@цO@"` */ $"11E0 0A60 0400 0000 0000 0000 0000 0000" /* ...`............ */ + $"0000 7800 87C0 8020 8F20 8720 8D20 9C20" /* ..x.á¿Ä è á ç ú */ + $"9820 FFE0 0000 0000 0000 0000 0000 0000" /* ò .............. */ }; data 'DLOG' (128) { --- gopher.c Fri Nov 15 12:38:04 2024 +++ gopher.c Fri Nov 15 15:24:41 2024 @@ -20,8 +20,6 @@ #include "detritus.h" -#define GOPHER_PORT 70 - #define GOPHER_ICON_SICN_ID 1024 #define GOPHER_ICON_TEXT_ID 0 #define GOPHER_ICON_FOLDER_ID 1 @@ -32,10 +30,8 @@ #define GOPHER_ICON_SOUND_ID 6 #define GOPHER_ICON_IMAGE_ID 7 #define GOPHER_ICON_DOC_ID 8 +#define GOPHER_ICON_GOPHER_ID 10 -/* printing line-by-line is slow, so only recalc every n lines */ -#define RECALC_EVERY_N_LINES 25 - static const char showable_types[] = "013i"; struct gopher_page { @@ -226,7 +222,7 @@ gopher_process(page_handle pageh) static void gopher_print_menu(struct page *page, char *line, size_t len) { - static char uri[URI_MAX_STR_LEN + 1], prefix[5]; + static char uri[URI_MAX_STR_LEN + 1]; struct gopher_page *gopher; BitMap icon; FontInfo sizing; @@ -264,6 +260,12 @@ gopher_print_menu(struct page *page, char *line, size_ browser_print(page->browser, label, strlen(label), true); break; default: + 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); + switch (type) { case '0': /* text file */ @@ -271,7 +273,10 @@ gopher_print_menu(struct page *page, char *line, size_ break; case '1': /* submenu */ - icon_off = GOPHER_ICON_FOLDER_ID; + if (strcasecmp(hostname, page->uri->hostname) == 0) + icon_off = GOPHER_ICON_FOLDER_ID; + else + icon_off = GOPHER_ICON_GOPHER_ID; break; case '3': /* error page */ @@ -340,17 +345,11 @@ gopher_print_menu(struct page *page, char *line, size_ sizing.ascent = 10; sizing.descent = 2; - sizing.widMax = 20; + sizing.widMax = 18; browser_print_bitmap(page->browser, &icon, &sizing); HUnlock(gopher->sicn); - 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); - page->browser->style |= STYLE_BOLD; browser_print_link(page->browser, uri, tlen, label, strlen(label), true);