games.dcgi - brcon2024-hackathons - Bitreichcon 2024 Hackathons HTML git clone git://bitreich.org/brcon2024-hackathons git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/brcon2024-hackathons DIR Log DIR Files DIR Refs DIR Tags DIR Submodules --- games.dcgi (2560B) --- 1 #!/bin/sh 2 if [ -n "${X_GOPHER_SEARCH}" ]; 3 then 4 PAGE=1 5 QUERY="${X_GOPHER_SEARCH}" 6 elif [ -n "${QUERY_STRING}" ]; 7 then 8 PAGE="${QUERY_STRING##*:}" 9 if ! printf "%s\n" "${PAGE}" | grep -q '^[0-9][0-9]*$'; 10 then 11 PAGE=1 12 elif [ "${PAGE}" -lt 1 ]; 13 then 14 PAGE=1 15 fi 16 QUERY="${QUERY_STRING%:*}" 17 else 18 PAGE=1 19 QUERY="" 20 fi 21 22 export PAGE 23 export QUERY 24 25 { 26 if [ -z "${QUERY}" ]; 27 then 28 curl -sgG \ 29 --data-urlencode "pg=${PAGE}" \ 30 --url "https://ifdb.org/search?xml&game&browse" 31 else 32 curl -sgG \ 33 --data-urlencode "searchfor=${QUERY}" \ 34 --data-urlencode "pg=${PAGE}" \ 35 --url "https://ifdb.org/search?xml&game" 36 fi 37 } | \ 38 xml2tsv | \ 39 awk ' 40 function escape(s, f) { 41 gsub(" ", " ", s); 42 gsub("\n", " ", s); 43 if (f) 44 gsub("\\|", "\\|", s); 45 return s; 46 } 47 function item(type, text, selector, server, port) { 48 printf("[%c|%s|%s|%s|%s]\n", escape(type, 1), escape(text, 1), escape(selector, 1), escape(server, 1), escape(port, 1)); 49 } 50 BEGIN { 51 FS = "\t"; 52 53 server = "server"; 54 port = "port"; 55 page = ENVIRON["PAGE"]; 56 query = ENVIRON["QUERY"]; 57 pathinfo = ENVIRON["PATH_INFO"]; 58 59 item("1", "..", "..", server, port); 60 printf("%s\n", "Inofficial IFDB Gopher frontend"); 61 item("h", "IFDB on the WWW", "URL:https://ifdb.org/", server, port); 62 item("1", "IF-Archive mirror on gopher.661.org", "/if-archive/", "gopher.661.org", "70"); 63 printf("----------------------------------------------------------------------\n") 64 item("7", "Search", pathinfo, server, port); 65 if (query) 66 printf("Current Search: %s\n", escape(query)); 67 68 printf("----------------------------------------------------------------------\n") 69 } 70 function fold(s, w, 71 i, l) { 72 s = escape(s); 73 l = length(s); 74 75 for (i = 1; i <= l; i += w) 76 printf("%s\n", substr(s, i, w)); 77 } 78 function flush(, 79 i, url) { 80 item("1", data["title"] (data["numRatings"] ? sprintf(" (%s stars)", data["starRating"]) : ""), "./game.dcgi?tuid:" data["tuid"], server, port); 81 } 82 $1 == "searchReply/error" { 83 exit 84 } 85 $1 == "/searchReply/games/game" { 86 if (data["tuid"]) { 87 flush(); 88 delete data; 89 } 90 } 91 index($1, "/searchReply/games/game/") == 1 { 92 data[substr($1, length("/searchReply/games/game/") + 1)] = $2; 93 next; 94 } 95 END { 96 if (data["tuid"]) 97 flush(); 98 else if (page > 1) 99 printf("No more entries!\n"); 100 else 101 printf("No entries!\n"); 102 103 printf("----------------------------------------------------------------------\n") 104 105 if (page > 1) 106 item("1", "Previous Page", pathinfo "?" query ":" (int(page) - 1), server, port); 107 if (data["tuid"]) 108 item("1", "Next Page", pathinfo "?" query ":" (int(page) + 1), server, port); 109 }'