Introduction
Introduction Statistics Contact Development Disclaimer Help
ifdbgames.sh - brcon2024-hackathons - Bitreichcon 2024 Hackathons
git clone git://bitreich.org/brcon2024-hackathons git://enlrupgkhuxnvlhsf6lc3fz…
Log
Files
Refs
Tags
Submodules
---
ifdbgames.sh (9193B)
---
1 #!/bin/sh
2 getrawdata() {
3 printf "getrawdata: start\n" 1>&2
4 sqlite3 "$1" <<-EOF
5 .separator "\x1f" "\x1e"
6
7 with ratings as (
8 select gameid, avg(rating) rawavg, round(avg(rat…
9 )
10 select
11 games.id,
12 games.title,
13 games.sort_title,
14 games.author,
15 games.sort_author,
16 games.tags,
17 iif(time(games.published) = '00:00:00',strftime(…
18 games.license,
19 games.desc,
20 games.genre,
21 games.forgiveness,
22 games.language,
23 games.website,
24 games.downloadnotes,
25
26 gamelinks.title,
27 gamelinks.desc,
28 gamelinks.url,
29
30 filetypes.externid,
31 filetypes.fmtname,
32 filetypes.desc,
33
34 extreviews.url,
35 extreviews.sourcename,
36 extreviews.sourceurl,
37 reviews.summary,
38 reviews.review,
39 reviews.rating,
40
41 ratings.stars,
42 ratings.cnt
43 from games
44 left outer join gamelinks on gamelinks.gameid = games.id
45 left outer join filetypes on filetypes.id = gamelinks.fm…
46 left outer join extreviews on extreviews.gameid = games.…
47 left outer join reviews on reviews.id = extreviews.revie…
48 left outer join ratings on ratings.gameid = games.id
49 order by games.id, gamelinks.displayorder, extreviews.di…
50 EOF
51 printf "getrawdata: end\n" 1>&2
52 }
53
54 # Sadly OpenBSD's awk has some problems with some multibyte characters i…
55 # dataset Maybe the encoding in the database is wonky. I don't know. Let…
56 # ignore it! And just use gawk. I want to see something in the end. I do…
57 # have to be correct. :)
58 getrawdata "$1" | \
59 gawk -v"FS=\x1f" -v"RS=\x1e" '
60 function removehtmltags(s) {
61 gsub("<[^>]+>", "", s)
62 return s
63 }
64 # TODO Do it, future_pazz0!
65 function resolvehtmlentities(s) {
66 return s
67 }
68 function trim(s) {
69 gsub("^[ ]+", "", s)
70 gsub("[ ]+$", "", s)
71 return s
72 }
73 function foldinto(input, w, indentstr, file,
74 p, t, l, linel, line, n) {
75 l = length(input)
76 p = 1
77 line = indentstr
78 n = 0
79 while (p <= l) {
80 for (t = p; t <= l && !index(" \t\n", substr(input, t, 1…
81
82 # Doesnt fit in the current line
83 if (length(line) + t - p + 1 > w) {
84 print line >> file
85 line = indentstr
86 n++
87 }
88
89 # Doesnt fit anyways
90 if (t - p > w) {
91 print line >> file
92 } else {
93 if (line && line != indentstr)
94 line = line " "
95 line = line substr(input, p, t - p)
96 }
97
98 for (; t <= l && index(" \t\n", substr(input, t, 1)); t+…
99 if (substr(input, t, 1) == "\n" && substr(input,…
100 print line >> file
101 line = indentstr
102 print indentstr >> file
103 n++
104 }
105 }
106 p = t
107 }
108 if (line)
109 print line >> file
110 }
111 function flushdescription2(file,
112 i) {
113 cmd = "groff -Tutf8 -ms > " file
114
115 print ".nr LL 80n" | cmd
116 print ".nr LT 80n" | cmd
117
118 print ".SH\n" data[2] | cmd
119 print ".IP Author(s)\n" data[4] | cmd
120 if (data[10])
121 print ".IP Genre\n" data[10] | cmd
122 if (data[13])
123 print ".IP Website\n" data[13] | cmd
124 if (data[12])
125 print ".IP Language\n" data[12] | cmd
126 if (data[7])
127 print ".IP \"First Publication Date\"\n" data[7] | cmd
128 if (data[8])
129 print ".IP License\n" data[8] | cmd
130 if (data[11])
131 print ".IP \"Forgiveness Rating\"\n" data[11] | cmd
132 if (ratings["stars"])
133 printf(".IP Rating\n%s (based on %s rating%s)\n", rating…
134
135 if (data[9]) {
136 print ".SH\nAbout the Story" | cmd
137 gsub("\n\n", "\n.LP\n", data[9])
138 print ".LP\n" data[9] | cmd
139 }
140
141 if (reviews["length"]) {
142 print ".SH\nEditorial Reviews" | cmd
143 for (i = 1; i <= reviews["length"]; i++) {
144 print ".SH\n" reviews[i, "sourcename"] | cmd
145 print ".IP URL\n" reviews[i, "url"] | cmd
146 if (reviews[i, "summary"])
147 print ".SH\n" reviews[i, "summary"] | cmd
148 if (reviews[i, "review"])
149 print ".IP\n" reviews[i, "review"] | cmd
150 }
151 }
152 if (links["length"]) {
153 print ".SH\nExternal Links" | cmd
154 if (data[14])
155 print ".LP\n" data[14] | cmd
156 for (i = 1; i <= links["length"]; i++) {
157 print ".SH\n" links[i, "title"] | cmd
158 print ".IP URL\n" links[i, "url"] | cmd
159 if (links[i, "desc"])
160 print ".IP\n" links[i, "desc"] | cmd
161 if (links[i, "fmtdesc"]) {
162 print ".IP\n" links[i, "fmtdesc"] | cmd
163 print ".IP\n" links[i, "fmtdesclink"] | …
164 }
165 }
166 }
167
168 close(cmd)
169 }
170 function keyvalue(key, value, file, w) {
171 if (length(key ": " value) <= w) {
172 printf("%s: %s\n", key, value) >> file
173 return
174 }
175 printf("%s:\n", key) >> file
176 foldinto(sprintf("%s\n", value), w, " ", file)
177 }
178 function flushdescription_(file,
179 i, refs, temp) {
180 # file = data[1] ".txt"
181 # file = "/dev/stdout"
182
183 printf("") > file
184 foldinto(sprintf("%s\n", data[2]), 80, "", file)
185 printf("--------------------------------------------------------…
186
187 keyvalue("Author(s)", data[4], file, 80)
188 # foldinto(sprintf("Author(s): %s\n", data[4]), 80, " ", file)
189 if (data[10])
190 printf("Genre: %s\n", data[10]) >> file
191 if (data[13])
192 printf("Website: %s\n", data[13]) >> file
193 if (data[12])
194 printf("Language: %s\n", data[12]) >> file
195 if (data[7])
196 printf("First Publication Date: %s\n", data[7]) >> file
197 if (data[8])
198 printf("License: %s\n", data[8]) >> file
199 if (data[11])
200 printf("Forgiveness Rating: %s\n", data[11]) >> file
201 if (ratings["stars"])
202 printf("Rating: %s (based on %s rating%s)\n", ratings["s…
203
204 if (data[9]) {
205 printf("\n\nABOUT THE STORY\n\n") >> file
206 foldinto(data[9], 80, " ", file)
207 }
208
209 if (links["length"]) {
210 printf("\n\nEXTERNAL LINKS\n") >> file
211 for (i = 1; i <= links["length"]; i++) {
212 printf("\n %s <%s>\n", links[i, "title"], links…
213 if (links[i, "desc"])
214 foldinto(links[i, "desc"], 80, " ", f…
215 if (links[i, "fmtdesc"]) {
216 temp = links[i, "fmtdesc"]
217 if (links[i, "fmtdesclink"]) {
218 if (!refs["set", links[i, "fmtde…
219 refs["length"]++
220 refs[refs["length"]] = l…
221 refs["set", links[i, "fm…
222 }
223 temp = temp sprintf("[%s]", refs…
224 }
225 foldinto(temp, 80, " ", file)
226 }
227 }
228 }
229
230 if (reviews["length"]) {
231 printf("\n\nEDITORIAL REVIEWS\n") >> file
232 for (i = 1; i <= reviews["length"]; i++) {
233 printf("\n %s\n", reviews[i, "sourcename"]) >> …
234 printf(" ") >> file
235 if (reviews[i, "summary"])
236 printf("%s ", reviews[i, "summary"]) >> …
237 printf("<%s>\n", reviews[i, "url"]) >> file
238 if (reviews[i, "review"])
239 foldinto(reviews[i, "review"], 80, " > …
240 }
241 }
242
243 if (refs["length"]) {
244 printf("\n\nREFERENCES\n\n") >> file
245 for (i = 1; i <= refs["length"]; i++)
246 printf(" [%s] <%s>\n", i, refs[i]) >> file
247 }
248
249 close(file)
250 }
251 function gphescape(s, f) {
252 gsub(" ", " ", s)
253 gsub("\n", " ", s)
254 if (f)
255 gsub("^\\[", "[|&", s)
256 else
257 gsub("\\|", "\\|", s)
258 return s
259 }
260 function gphitem(type, text, selector, server, port, file) {
261 printf("[%c|%s|%s|%s|%s]\n", type, gphescape(text), gphescape(se…
262 }
263 function flushmenu(file) {
264 printf("") > file
265 gphitem("0", sprintf("About \"%s\"", data[2]), "./" data[1] ".tx…
266 foldinto(sprintf("%s\n", data[2]), 80, "", file)
267
268 close(file)
269 }
270 function getlink(s,
271 i) {
272 if (!match(s, /href="[^"]*"/))
273 return ""
274 return substr(s, RSTART + length("href=\""), RLENGTH - length("h…
275 }
276 function flush(tuid) {
277 print tuid > "/dev/stderr"
278 flushdescription_(tuid ".txt")
279 # flushmenu(tuid ".gph")
280 printf("%s\t%s\n", tuid ".txt", data[2]) >> "index.txt"
281 }
282 BEGIN {
283 printf("") > "index.txt"
284 }
285 tuid && $1 != tuid {
286 flush(tuid)
287
288 delete links
289 delete reviews
290 delete ratings
291 delete data
292 }
293 $1 != tuid {
294 for (i = 1; i <= 14; i++) {
295 $i = removehtmltags($i)
296 $i = resolvehtmlentities($i)
297 data[i] = $i
298 }
299 ratings["stars"] = $27
300 ratings["count"] = $28
301 tuid = $1
302 }
303 $17 && !links["url", $17] {
304 links["length"]++
305 links[links["length"], "title"] = removehtmltags($15)
306 links[links["length"], "desc"] = removehtmltags($16)
307 links[links["length"], "url"] = removehtmltags($17)
308
309 links[links["length"], "externid"] = removehtmltags($18)
310 links[links["length"], "fmtname"] = removehtmltags($19)
311 links[links["length"], "fmtdesc"] = removehtmltags($20)
312 links[links["length"], "fmtdesclink"] = getlink($20)
313
314 links["url", $17]++
315 }
316 $21 && !reviews["url", $21] {
317 reviews["length"]++
318 reviews[reviews["length"], "url"] = removehtmltags($21)
319 reviews[reviews["length"], "sourcename"] = removehtmltags($22)
320 reviews[reviews["length"], "sourceurl"] = removehtmltags($23)
321 reviews[reviews["length"], "summary"] = removehtmltags($24)
322 reviews[reviews["length"], "review"] = removehtmltags($25)
323 reviews[reviews["length"], "rating"] = removehtmltags($26)
324
325 reviews["url", $21]++
326 }
327 END {
328 flush(tuid)
329 }
330 '
331
332 sort -t ' ' -k2 index.txt | \
333 gawk -v"FS=\t" '
334 function gphescape(s, f) {
335 gsub(" ", " ", s)
336 gsub("\n", " ", s)
337 if (f)
338 gsub("^\\[", "[|&", s)
339 else
340 gsub("\\|", "\\|", s)
341 return s
342 }
343 function gphitem(type, text, selector, server, port, file) {
344 printf("[%c|%s|%s|%s|%s]\n", type, gphescape(text), gphescape(se…
345 }
346 {
347 gphitem("0", $2, "./" $1, "servere", "port", "index.gph")
348 }
349 '
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.