games.dcgi - brcon2024-hackathons - Bitreichcon 2024 Hackathons | |
git clone git://bitreich.org/brcon2024-hackathons git://enlrupgkhuxnvlhsf6lc3fz… | |
Log | |
Files | |
Refs | |
Tags | |
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), e… | |
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, po… | |
62 item("1", "IF-Archive mirror on gopher.661.org", "/if-archive/",… | |
63 printf("--------------------------------------------------------… | |
64 item("7", "Search", pathinfo, server, port); | |
65 if (query) | |
66 printf("Current Search: %s\n", escape(query)); | |
67 | |
68 printf("--------------------------------------------------------… | |
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 star… | |
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("--------------------------------------------------------… | |
104 | |
105 if (page > 1) | |
106 item("1", "Previous Page", pathinfo "?" query ":" (int(p… | |
107 if (data["tuid"]) | |
108 item("1", "Next Page", pathinfo "?" query ":" (int(page)… | |
109 }' |