Check-in by ben on 2025-04-11 21:04:36 Fix navigation to avoid moving the cursor to blank spots in the periodic table. Add Wikipedia link when displaying an individual element. Bump version to 2. INSERTED DELETED 48 22 periodic.awk 48 22 TOTAL over 1 changed file Index: periodic.awk ================================================================== --- periodic.awk +++ periodic.awk @@ -1,6 +1,6 @@ -# periodic.awk version 1 by Ben Collver +# periodic.awk version 2 by Ben Collver # # Generate static gopher content for the periodic table of elements. # # Edit gopher_dir, gopher_host, and gopher_port in function main() # @@ -165,47 +165,67 @@ # navigation str = "Left" if (table_col[element] > 1) { - key = table_row[element] "_" (table_col[element] - 1) - path = gopher_dir "/element/" table[key] "/" - printf "[1|%s|%s|%s|%s]\n", str, path, gopher_host, gopher_port >>f - } else { - printf "%s\n", str >>f + for (i = table_col[element] - 1; i >= 1; i--) { + key = table_row[element] "_" i + if (length(table[key]) > 0) { + path = gopher_dir "/element/" table[key] "/" + str = sprintf("[1|Left|%s|%s|%s]", path, \ + gopher_host, gopher_port) + break + } + } } + print str >>f str = "Up" if (table_row[element] > 1) { - key = (table_row[element] - 1) "_" table_col[element] - path = gopher_dir "/element/" table[key] "/" - printf "[1|%s|%s|%s|%s]\n", str, path, gopher_host, gopher_port >>f - } else { - printf "%s\n", str >>f + for (i = table_row[element] - 1; i >= 1; i--) { + key = i "_" table_col[element] + if (length(table[key]) > 0) { + path = gopher_dir "/element/" table[key] "/" + str = sprintf("[1|Up|%s|%s|%s]", path, gopher_host, \ + gopher_port) + break + } + } } + print str >>f str = "Down" if (table_row[element] < table["rows"]) { - key = (table_row[element] + 1) "_" table_col[element] - path = gopher_dir "/element/" table[key] "/" - printf "[1|%s|%s|%s|%s]\n", str, path, gopher_host, gopher_port >>f - } else { - printf "%s\n", str >>f + for (i = table_row[element] + 1; i <= table["rows"]; i++) { + key = i "_" table_col[element] + if (length(table[key]) > 0) { + path = gopher_dir "/element/" table[key] "/" + str = sprintf("[1|Down|%s|%s|%s]", path, gopher_host, \ + gopher_port) + break + } + } } + print str >>f str = "Right" if (table_col[element] < table["cols"]) { - key = table_row[element] "_" (table_col[element] + 1) - path = gopher_dir "/element/" table[key] "/" - printf "[1|%s|%s|%s|%s]\n", str, path, gopher_host, gopher_port >>f - } else { - printf "%s\n", str >>f + for (i = table_col[element] + 1; i <= table["cols"]; i++) { + key = table_row[element] "_" i + if (length(table[key]) > 0) { + path = gopher_dir "/element/" table[key] "/" + str = sprintf("[1|Right|%s|%s|%s]", path, \ + gopher_host, gopher_port) + break + } + } } + print str >>f str = "List All" path = gopher_dir "/list/atomic/" - printf "[1|%s|%s|%s|%s]\n", str, path, gopher_host, gopher_port >>f + printf "[1|%s|%s|%s|%s]\n\n", str, path, gopher_host, gopher_port >>f # element detail cmd = "figlet " symbol printf "+--------------------+\n" >>f @@ -223,10 +243,12 @@ str = center(20, name) printf "|%s|\n", str >>f str = center(20, mass) printf "|%s|\n", str >>f printf "+--------------------+\n\n" >>f + str = sprintf("%-23s %s", "Wiki Article:", name) + print_wiki_item(f, str, name) print format_field(f, element, "Electron Configuration") >>f print format_field(f, element, "Electronegativity") >>f print format_field(f, element, "Atomic Radius") >>f print format_field(f, element, "Ionization Energy") >>f print format_field(f, element, "Electron Affinity") >>f @@ -825,10 +847,14 @@ printf "[9|Code (.zip)|%s/periodic.zip|%s|%s]\n", gopher_dir, gopher_host, gopher_port >>f close(f) return } + +function print_wiki_item(f, label, id) { + printf "[0|%s|/%s|gopherpedia.com|70]\n", label, id >>f +} function print_wrap(str, wraplen, outfile, after, before, buf, chunk) { buf = str while (length(buf) > wraplen) { chunk = substr(buf, 0, wraplen)