]> git.plutz.net Git - flarejs/blob - index.cgi
ignore cache file
[flarejs] / index.cgi
1 #!/bin/sh
2
3 . cgilite/cgilite.sh
4 . cgilite/file.sh
5
6 _PATH="$(PATH "${PATH_INFO}")"
7
8 if [ "$_PATH" = / ]; then
9   printf 'Content-Type: text/html\r\n\r\n'
10   cat <<-EOF
11         <!DOCTYPE HTML>
12         <html><head>
13           <title>FlareJS</title>
14         </head><body>
15           <canvas id="view" width=640 height=480 style="border: 1px solid red;"></canvas>
16           <img src="images/avatar/male/clothes.png" style="display: none;" />
17           <script type="text/javascript" src="/data.js"></script>
18           <script type="text/javascript" src="/engine.js"></script>
19         </body></html>
20         EOF
21 elif [ "$_PATH" = "/data.js" -a data.js -nt "$0" ]; then
22   FILE data.js
23 elif [ "$_PATH" = "/data.js" -a ! data.js -nt "$0" ]; then
24   printf 'Content-Type: text/javascript\r\n\r\n'
25   {
26   printf 'gamedata = {\n'
27   for base in /usr/share/games/flare/mods/fantasycore /usr/share/games/flare/mods/empyrean_campaign; do
28     find $base/animations -name '*.txt' |while read -r file; do
29       file="${file#"${base}"}"
30       printf '"%s": {\n' "$file"
31       sed -E '
32         # read entire file into buffer
33         :X N; $!bX; s;$;\n;; s;^;\n;; s;\r\n;\n;g;
34
35         # Comment and empty lines
36         :Y s;\n#[^\n]*\n;\n;g; tY;
37
38         # INCLUDE, APPEND
39         s;\nAPPEND\n;\n;g;
40         s;\nINCLUDE ([^\n]+)\n;\n"INCLUDE": "\1"\n;g;
41
42         # section heading, eg. [stance]
43         s;\n\[([^\n]+)\]\n(([^]\n[]+\n)+);"\1": {\n\2 },\n;g;
44
45         # frame list start
46         s;\nframes=[0-9]+\n;\n;g;
47         s;(\nframe=[^\n]+)+;\n"frames": [&;g;
48
49         # frame list, 8 angles isometric
50         s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\nframe=[0-9]+,6,([0-9,-]+)\nframe=[0-9]+,7,([0-9,-]+)\n;[[\1], [\2], [\3], [\4], [\5], [\6], [\7], [\8]],\n;g
51         # frame list, workaround for bug in avatar/female/dagger.txt
52         s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\nframe=[0-9]+,6,([0-9,-]+)\nframe=[0-9]+,7,([0-9,-]+)\n;[[\1], [\2], [0,0,0,0,0,0], [\3], [\4], [\5], [\6], [\7]],\n;g
53         # frame list, workaround for bug in avatar/male/greatsword.txt
54         s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\nframe=[0-9]+,7,([0-9,-]+)\n;[[\1], [\2], [\3], [\4], [\5], [\6], [0,0,0,0,0,0], [\7]],\n;g
55         # frame list, workaround for bug in avatar/male/slingshot.txt
56         s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\nframe=[0-9]+,6,([0-9,-]+)\nframe=[0-9]+,7,([0-9,-]+)\n;[[\1], [\2], [\3], [0,0,0,0,0,0], [\4], [\5], [\6], [\7]],\n;g
57         # frame list, 6 angles e.g. powers/freeze.txt
58         s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\n;[[\1], [\2], [\3], [\4], [\5], [\6]],\n;g
59         # frame list, 4 angles e.g. powers/spikes.txt
60         s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\n;[[\1], [\2], [\3], [\4]],\n;g
61         # frame list, 3 angles e.g. powers/quake.txt
62         s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\n;[[\1], [\2], [\3]],\n;g
63         # frame list, 2 angles e.g. powers/blast.txt
64         s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\n;[[\1], [\2]],\n;g
65         # frame list, front angle only
66         s;frame=[0-9]+,0,([0-9,-]+)\n;[[\1]],\n;g
67
68         # frame list end
69         s;("frames": []\n,0-9 [-]+),;\1\n],;g;
70
71         # animation duration
72         s;\n(duration)=([0-9]+)ms\n;\n"\1": \2,\n;g
73         s;\n(duration)=([0-9]+)s\n;\n"\1": \2000,\n;g
74
75         :general
76           # general scalar
77           s;\n([^=\n]+)=([0-9-]+)\n;\n"\1": \2,\n;g
78
79           # general array
80           s;\n([^=\n]+)=([0-9,-]+)\n;\n"\1": [\2],\n;g
81
82           # general text
83           s;\n([^=\n]+)=([^\n]+)\n;\n"\1": "\2",\n;g
84         tgeneral;
85       ' "${base}${file}"
86       printf '},\n'
87     done
88   done
89   printf '}\n'
90   } |tee data.js
91 else
92   for base in . /usr/share/games/flare/mods/empyrean_campaign /usr/share/games/flare/mods/fantasycore /usr/share/games/flare/mods/default; do
93     [ -f "${base}/$_PATH" ] && FILE "${base}/$_PATH"
94   done
95 fi