summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/nwztools/plattools/data/Makefile8
-rw-r--r--utils/nwztools/plattools/data/Oxygen480-categories-preferences-system.svg334
-rwxr-xr-xutils/nwztools/plattools/data/make_images.sh53
-rw-r--r--utils/nwztools/plattools/data/rockbox_icon.bmpbin0 -> 51014 bytes
-rw-r--r--utils/nwztools/plattools/data/tools_icon.bmpbin0 -> 51014 bytes
-rw-r--r--utils/nwztools/plattools/dualboot.c235
-rw-r--r--utils/nwztools/plattools/nwz_lib.c46
-rw-r--r--utils/nwztools/plattools/nwz_lib.h13
-rw-r--r--utils/nwztools/scripts/install_dualboot.sh49
9 files changed, 664 insertions, 74 deletions
diff --git a/utils/nwztools/plattools/data/Makefile b/utils/nwztools/plattools/data/Makefile
new file mode 100644
index 0000000000..86f3bb339c
--- /dev/null
+++ b/utils/nwztools/plattools/data/Makefile
@@ -0,0 +1,8 @@
1TOOLS_DIR=../../../../tools/
2all: rockbox_icon.h tools_icon.h
3
4%.h: %.bmp
5 $(TOOLS_DIR)/bmp2rb -f 4 $^ > $@
6
7clean:
8 rm -rf *.h
diff --git a/utils/nwztools/plattools/data/Oxygen480-categories-preferences-system.svg b/utils/nwztools/plattools/data/Oxygen480-categories-preferences-system.svg
new file mode 100644
index 0000000000..0835251992
--- /dev/null
+++ b/utils/nwztools/plattools/data/Oxygen480-categories-preferences-system.svg
@@ -0,0 +1,334 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="128" height="128" id="svg5676" sodipodi:version="0.32" inkscape:version="0.45+devel" sodipodi:docname="settings-wip.svgz" inkscape:output_extension="org.inkscape.output.svgz.inkscape" version="1.0">
4 <defs id="defs5678">
5 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4322" id="linearGradient4338" gradientUnits="userSpaceOnUse" gradientTransform="translate(-2.6296821,21.172877)" x1="5.1934605" y1="88.98745" x2="5.1934605" y2="145.64882"/>
6 <linearGradient y2="0" x2="28" y1="57.5" x1="28" gradientUnits="userSpaceOnUse" id="linearGradient8081">
7 <stop id="stop8083" style="stop-color:#ffd700;stop-opacity:1;" offset="0"/>
8 <stop offset="0.25242719" style="stop-color:#ffea00;stop-opacity:1;" id="stop8087"/>
9 <stop id="stop8085" style="stop-color:#b06d00;stop-opacity:1;" offset="1"/>
10 </linearGradient>
11 <linearGradient inkscape:collect="always" xlink:href="#linearGradient8081" id="linearGradient7698" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0872079,0,0,1.0872079,-59.143229,30.210796)" x1="58.557281" y1="107.76735" x2="63.943447" y2="107.76735"/>
12 <linearGradient id="linearGradient6924">
13 <stop style="stop-color:#ffffff;stop-opacity:0.73885351;" offset="0" id="stop6926"/>
14 <stop id="stop10395" offset="0.24999999" style="stop-color:#ffffff;stop-opacity:0;"/>
15 <stop id="stop10393" offset="0.5" style="stop-color:#cccccc;stop-opacity:0;"/>
16 <stop style="stop-color:#9a9a9a;stop-opacity:1;" offset="1" id="stop6928"/>
17 </linearGradient>
18 <linearGradient inkscape:collect="always" xlink:href="#linearGradient6924" id="linearGradient6930" x1="8.3827581" y1="8.3199806" x2="15.021504" y2="14.958727" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.2050468,0,0,1.2050468,-2.1016162,-2.0259658)"/>
19 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient4640" gradientUnits="userSpaceOnUse" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308"/>
20 <filter inkscape:collect="always" x="-0.10337079" width="1.2067416" y="-0.10337079" height="1.2067416" id="filter4626">
21 <feGaussianBlur inkscape:collect="always" stdDeviation="0.42488862" id="feGaussianBlur4628"/>
22 </filter>
23 <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4632">
24 <rect style="opacity:0.83895126;fill:url(#linearGradient4636);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter4626)" id="rect4634" width="13.334369" height="3.7415669" x="-2.9263651" y="130.97287" rx="0" ry="0" inkscape:transform-center-x="-16.434708" inkscape:transform-center-y="-5.5242717"/>
25 </clipPath>
26 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient4604" gradientUnits="userSpaceOnUse" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308"/>
27 <radialGradient inkscape:collect="always" xlink:href="#linearGradient4434" id="radialGradient4602" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.3939752,0.4817163,48.449986)" cx="4.7494926" cy="132.25244" fx="4.7494926" fy="132.25244" r="5.3222656"/>
28 <filter inkscape:collect="always" id="filter4584">
29 <feGaussianBlur inkscape:collect="always" stdDeviation="1.0829419" id="feGaussianBlur4586"/>
30 </filter>
31 <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4588">
32 <path sodipodi:nodetypes="ccsccccsccc" id="path4590" d="M 13.037731,82.09273 L 18.342123,87.397123 C 21.331352,87.817882 24.407038,89.18508 26.895219,91.673261 C 29.411177,94.189215 30.893289,97.328601 31.294715,100.34972 L 56.289372,125.34436 C 62.090282,131.14528 77.301422,116.01036 71.462392,110.17133 L 46.467742,85.176682 C 43.446635,84.775254 40.307258,83.29314 37.791293,80.777186 C 35.303111,78.289007 33.935917,75.213314 33.515156,72.22409 L 28.210762,66.919697 L 13.037731,82.09273 z" style="opacity:1;fill:url(#linearGradient4592);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"/>
33 </clipPath>
34 <filter inkscape:collect="always" id="filter4551">
35 <feGaussianBlur inkscape:collect="always" stdDeviation="0.15501048" id="feGaussianBlur4553"/>
36 </filter>
37 <linearGradient inkscape:collect="always" id="linearGradient4529">
38 <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop4531"/>
39 <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop4533"/>
40 </linearGradient>
41 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient4537" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308" gradientUnits="userSpaceOnUse"/>
42 <linearGradient inkscape:collect="always" xlink:href="#linearGradient2575" id="linearGradient4525" x1="58.557281" y1="107.76735" x2="63.943447" y2="107.76735" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0872079,0,0,1.0872079,-71.164046,29.503688)"/>
43 <linearGradient inkscape:collect="always" id="linearGradient4509">
44 <stop style="stop-color:#ffe900;stop-opacity:1;" offset="0" id="stop4511"/>
45 <stop style="stop-color:#ffe900;stop-opacity:0;" offset="1" id="stop4513"/>
46 </linearGradient>
47 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4509" id="linearGradient4515" x1="75.585938" y1="85.083641" x2="89.453125" y2="79.224266" gradientUnits="userSpaceOnUse"/>
48 <filter inkscape:collect="always" id="filter4501">
49 <feGaussianBlur inkscape:collect="always" stdDeviation="0.48665741" id="feGaussianBlur4503"/>
50 </filter>
51 <linearGradient inkscape:collect="always" id="linearGradient4465">
52 <stop style="stop-color:#ffa300;stop-opacity:1;" offset="0" id="stop4467"/>
53 <stop style="stop-color:#ffa300;stop-opacity:0;" offset="1" id="stop4469"/>
54 </linearGradient>
55 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4465" id="linearGradient4471" x1="83.886719" y1="77.661766" x2="86.300743" y2="86.671021" gradientUnits="userSpaceOnUse" gradientTransform="translate(-4,-4)"/>
56 <linearGradient inkscape:collect="always" id="linearGradient4434">
57 <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop4436"/>
58 <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop4438"/>
59 </linearGradient>
60 <radialGradient inkscape:collect="always" xlink:href="#linearGradient4434" id="radialGradient4440" cx="4.7494926" cy="132.25244" fx="4.7494926" fy="132.25244" r="5.3222656" gradientTransform="matrix(1,0,0,0.3939752,-7.0710881e-2,74.137847)" gradientUnits="userSpaceOnUse"/>
61 <filter inkscape:collect="always" id="filter4404">
62 <feGaussianBlur inkscape:collect="always" stdDeviation="0.15249406" id="feGaussianBlur4406"/>
63 </filter>
64 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4322" id="linearGradient4342" gradientUnits="userSpaceOnUse" gradientTransform="translate(1.6836694,24.213436)" x1="3.5450988" y1="107.64014" x2="3.190912" y2="104.64899"/>
65 <linearGradient inkscape:collect="always" id="linearGradient4322">
66 <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop4324"/>
67 <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop4326"/>
68 </linearGradient>
69 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4322" id="linearGradient4346" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-2.6879854,-4.0690534)" x1="5.1934605" y1="103.9544" x2="5.1348171" y2="115.65614"/>
70 <filter inkscape:collect="always" x="-0.074906364" width="1.1498127" y="-0.11235955" height="1.224719" id="filter4238">
71 <feGaussianBlur inkscape:collect="always" stdDeviation="1.1235955" id="feGaussianBlur4240"/>
72 </filter>
73 <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4242">
74 <path sodipodi:nodetypes="ccsccccsccc" id="path4244" d="M -4,77.788157 L -4,83.381653 C -2.645772,85.179573 -1.744968,87.522089 -1.744968,90.145881 C -1.744968,92.798965 -2.618764,95.23565 -4,97.040192 L -4,123.39712 C -4,129.51419 12,129.55437 12,123.39712 L 12,97.040192 C 10.618764,95.23565 9.744972,92.798965 9.744968,90.145881 C 9.744968,87.522089 10.645776,85.179573 12,83.381653 L 12,77.788157 L -4,77.788157 z" style="opacity:1;fill:url(#linearGradient4247);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"/>
75 </clipPath>
76 <linearGradient id="linearGradient2575" gradientUnits="userSpaceOnUse" x1="28" y1="57.5" x2="28" y2="0">
77 <stop offset="0" style="stop-color:#FFEA00" id="stop2577"/>
78 <stop offset="1" style="stop-color:#cd8000;stop-opacity:1;" id="stop2579"/>
79 </linearGradient>
80 <linearGradient inkscape:collect="always" xlink:href="#linearGradient2575" id="linearGradient4190" x1="36" y1="100" x2="28" y2="100" gradientUnits="userSpaceOnUse" spreadMethod="reflect" gradientTransform="matrix(0.9483145,-0.9483145,0.9483145,0.9483145,-36.790528,30.877897)"/>
81 <linearGradient id="linearGradient6511">
82 <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop6513"/>
83 <stop style="stop-color:#393939;stop-opacity:1;" offset="1" id="stop6515"/>
84 </linearGradient>
85 <linearGradient inkscape:collect="always" xlink:href="#linearGradient6511" id="linearGradient6517" x1="38.074299" y1="4.2695875" x2="38.074299" y2="-10.42289" gradientUnits="userSpaceOnUse"/>
86 <linearGradient id="linearGradient3916">
87 <stop style="stop-color:#d3d6d6;stop-opacity:1;" offset="0" id="stop3918"/>
88 <stop style="stop-color:#f7f7f7;stop-opacity:1;" offset="1" id="stop3921"/>
89 </linearGradient>
90 <linearGradient inkscape:collect="always" xlink:href="#linearGradient3916" id="linearGradient3943" gradientUnits="userSpaceOnUse" x1="34.165016" y1="4.863008" x2="34.165016" y2="-14.006344"/>
91 <linearGradient inkscape:collect="always" xlink:href="#linearGradient3904" id="linearGradient6112" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.1550511,0,0,1.1550511,-41.26484,21.101778)" x1="38.827515" y1="104.49192" x2="36.460194" y2="17.509802"/>
92 <filter inkscape:collect="always" x="-0.26177245" width="1.5235449" y="-0.075698018" height="1.151396" id="filter3838">
93 <feGaussianBlur inkscape:collect="always" stdDeviation="0.41890191" id="feGaussianBlur3840"/>
94 </filter>
95 <filter inkscape:collect="always" x="-0.26177242" width="1.5235448" y="-0.075698018" height="1.151396" id="filter3834">
96 <feGaussianBlur inkscape:collect="always" stdDeviation="0.41890191" id="feGaussianBlur3836"/>
97 </filter>
98 <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3850">
99 <path id="path3852" d="M 5.6835937,-4 C 6.7672977,-0.13901249 7.6835937,4 7.6835937,8 C 7.6835937,25.92781 15.683594,26.507796 15.683594,8 C 15.683594,4 16.274299,-0.44557713 17.683594,-4 C 16.034701,-11.286281 10.22872,-24.562662 5.6835937,-4 z" style="opacity:1;fill:#b4b4b4;fill-opacity:1;stroke:none;stroke-width:0.47008219;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" sodipodi:nodetypes="ccccc"/>
100 </clipPath>
101 <linearGradient id="linearGradient3904">
102 <stop style="stop-color:#141515;stop-opacity:1;" offset="0" id="stop3906"/>
103 <stop style="stop-color:#535557;stop-opacity:0;" offset="1" id="stop3908"/>
104 </linearGradient>
105 <linearGradient inkscape:collect="always" xlink:href="#linearGradient3904" id="linearGradient6119" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.1550511,0,0,1.1550511,-40.633471,-152.2263)" x1="36.460194" y1="108.28275" x2="39.503891" y2="69.41713"/>
106 <linearGradient inkscape:collect="always" id="linearGradient3220">
107 <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3222"/>
108 <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3224"/>
109 </linearGradient>
110 <linearGradient inkscape:collect="always" xlink:href="#linearGradient3220" id="linearGradient6122" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.6737798,0,0,1.4175761,-25.92314,-147.94457)" x1="36.460194" y1="89.611626" x2="36.460194" y2="17.509802"/>
111 <radialGradient gradientUnits="userSpaceOnUse" r="139.55859" cy="112.3047" cx="102" id="radialGradient9613">
112 <stop id="stop9615" style="stop-color:#535557" offset="0"/>
113 <stop id="stop9617" style="stop-color:#898A8C" offset="0.13804179"/>
114 <stop id="stop9619" style="stop-color:#ECECEC" offset="0.20296688"/>
115 <stop id="stop9621" style="stop-color:#FAFAFA" offset="0.33539036"/>
116 <stop id="stop9623" style="stop-color:#FFFFFF" offset="0.39464113"/>
117 <stop id="stop9625" style="stop-color:#FAFAFA" offset="0.5313"/>
118 <stop id="stop9627" style="stop-color:#EBECEC" offset="0.8449"/>
119 <stop id="stop9629" style="stop-color:#E1E2E3" offset="1"/>
120 </radialGradient>
121 <linearGradient inkscape:collect="always" xlink:href="#radialGradient9613" id="linearGradient6125" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.8398488,-0.8398488,0.8167445,0.8167445,-15.712841,44.354581)" spreadMethod="reflect" x1="32.228344" y1="47.999996" x2="35.935673" y2="47.999996"/>
122 <filter inkscape:collect="always" id="filter4503">
123 <feGaussianBlur inkscape:collect="always" stdDeviation="0.43775175" id="feGaussianBlur4505"/>
124 </filter>
125 <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4092">
126 <path style="fill:#9c0f56" d="M 59.849,42.398 C 57.593,46.987 10.717,106.259 8.774,111.066 C 4.67,121.218 16.431,133.433 25.989,124.269 C 32.291,118.227 66.959,56.111 72.129,51.415 C 75.623,48.241 95.004,41.083 95.004,41.083 L 80.924,18.23 C 80.924,18.23 62.724,36.552 59.849,42.398 z" inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="csssscc" id="path4094"/>
127 </clipPath>
128 <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="11.9185" y1="119.0576" x2="98.418404" y2="44.057598">
129 <stop offset="0" style="stop-color:#C9C9C9" id="stop49"/>
130 <stop offset="0.0229" style="stop-color:#B2B2B2" id="stop51"/>
131 <stop offset="0.05" style="stop-color:#9F9F9F" id="stop53"/>
132 <stop offset="0.0819" style="stop-color:#929292" id="stop55"/>
133 <stop offset="0.1225" style="stop-color:#8A8A8A" id="stop57"/>
134 <stop offset="0.2012" style="stop-color:#888888" id="stop59"/>
135 <stop offset="1" style="stop-color:#686868;stop-opacity:1;" id="stop63"/>
136 </linearGradient>
137 <linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="31.4995" y1="80.0439" x2="32.347698" y2="80.671898" gradientTransform="translate(229.83849,405.96228)">
138 <stop offset="0" style="stop-color:#000000" id="stop183"/>
139 <stop offset="1" style="stop-color:#000000;stop-opacity:0;" id="stop185"/>
140 </linearGradient>
141 <linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="23.9844" y1="120.7646" x2="12.7283" y2="109.8655" gradientTransform="translate(229.83849,405.96228)">
142 <stop offset="0" style="stop-color:#EEEEEE" id="stop176"/>
143 <stop offset="1" style="stop-color:#535353;stop-opacity:1;" id="stop178"/>
144 </linearGradient>
145 <linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="18.776899" y1="129.5986" x2="18.776899" y2="114.6055" gradientTransform="translate(229.83849,405.96228)">
146 <stop offset="0" style="stop-color:#000000" id="stop169"/>
147 <stop offset="1" style="stop-color:#000000;stop-opacity:0;" id="stop171"/>
148 </linearGradient>
149 <radialGradient id="XMLID_8_" cx="64.988297" cy="15.9429" r="19.6182" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)">
150 <stop offset="0" style="stop-color:#FFFFFF" id="stop162"/>
151 <stop offset="1" style="stop-color:#888A85" id="stop164"/>
152 </radialGradient>
153 <linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="40.711899" y1="75.171898" x2="48.5495" y2="80.899803" gradientTransform="translate(229.83849,405.96228)">
154 <stop offset="0.213" style="stop-color:#555753" id="stop155"/>
155 <stop offset="1" style="stop-color:#000000" id="stop157"/>
156 </linearGradient>
157 <linearGradient id="path30758_1_" gradientUnits="userSpaceOnUse" x1="16.7803" y1="80.697304" x2="67.723602" y2="80.697304" gradientTransform="translate(229.83849,405.96228)">
158 <stop offset="0" style="stop-color:#888888" id="stop149"/>
159 <stop offset="0.8935" style="stop-color:#DDDDDD" id="stop151"/>
160 </linearGradient>
161 <linearGradient id="path34280_1_" gradientUnits="userSpaceOnUse" x1="93.023399" y1="39.3867" x2="93.023399" y2="25.928699" gradientTransform="translate(229.83849,405.96228)">
162 <stop offset="0" style="stop-color:#555555" id="stop141"/>
163 <stop offset="0.3965" style="stop-color:#888888" id="stop143"/>
164 <stop offset="1" style="stop-color:#555555" id="stop145"/>
165 </linearGradient>
166 <linearGradient id="rect22846_1_" gradientUnits="userSpaceOnUse" x1="247.60249" y1="-288.60791" x2="261.97269" y2="-288.60791" gradientTransform="matrix(0.9428,-0.2511,-0.2421,-0.9089,6.0921912,215.38258)">
167 <stop offset="0" style="stop-color:#888888" id="stop135"/>
168 <stop offset="1" style="stop-color:#555555" id="stop137"/>
169 </linearGradient>
170 <radialGradient id="rect14944_1_" cx="274.56641" cy="36.065399" r="6.8733001" gradientTransform="matrix(0.523,-0.2146,-2.627,-7.0521,27.4228,356.0237)" gradientUnits="userSpaceOnUse">
171 <stop offset="0" style="stop-color:#888A85" id="stop127"/>
172 <stop offset="0.6213" style="stop-color:#FFFFFF" id="stop129"/>
173 <stop offset="1" style="stop-color:#555753" id="stop131"/>
174 </radialGradient>
175 <radialGradient id="rect14938_1_" cx="290.8428" cy="36.069801" r="6.8736" gradientTransform="matrix(0.4892,-0.2059,-2.5913,-7.0931,29.692,361.6149)" gradientUnits="userSpaceOnUse">
176 <stop offset="0" style="stop-color:#888A85" id="stop119"/>
177 <stop offset="0.6213" style="stop-color:#FFFFFF" id="stop121"/>
178 <stop offset="1" style="stop-color:#555753" id="stop123"/>
179 </radialGradient>
180 <radialGradient id="rect10553_1_" cx="292.49219" cy="43.388699" r="6.8727999" gradientTransform="matrix(0.498,-0.2212,-2.9368,-8.3284,56.2613,466.2682)" gradientUnits="userSpaceOnUse">
181 <stop offset="0" style="stop-color:#888A85" id="stop111"/>
182 <stop offset="0.6213" style="stop-color:#FFFFFF" id="stop113"/>
183 <stop offset="1" style="stop-color:#555753" id="stop115"/>
184 </radialGradient>
185 <radialGradient id="rect14950_1_" cx="92.734398" cy="20.4307" r="4.1451998" gradientTransform="matrix(0.6131,-0.2916,-5.2659,-7.9645,125.0096,227.992)" gradientUnits="userSpaceOnUse">
186 <stop offset="0" style="stop-color:#FFFFFF" id="stop103"/>
187 <stop offset="0.5266" style="stop-color:#BABDB6" id="stop105"/>
188 <stop offset="1" style="stop-color:#888A85" id="stop107"/>
189 </radialGradient>
190 <radialGradient id="rect10551_3_" cx="78.776398" cy="44.608398" r="14.3205" gradientUnits="userSpaceOnUse">
191 <stop offset="0" style="stop-color:#2E3436" id="stop95"/>
192 <stop offset="0.72189999" style="stop-color:#000000;stop-opacity:1;" id="stop97"/>
193 <stop offset="1" style="stop-color:#2E3436" id="stop99"/>
194 </radialGradient>
195 <linearGradient id="rect10551_1_" gradientUnits="userSpaceOnUse" x1="77.216797" y1="44.765598" x2="73.449203" y2="30.555201">
196 <stop offset="0.7219" style="stop-color:#DDDDDD" id="stop89"/>
197 <stop offset="1" style="stop-color:#EEEEEC" id="stop91"/>
198 </linearGradient>
199 <radialGradient id="XMLID_6_" cx="77.004028" cy="13.140214" r="64.405701" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" fx="77.004028" fy="13.140214">
200 <stop offset="0" style="stop-color:#FFFFFF" id="stop82"/>
201 <stop id="stop13256" style="stop-color:#c3c4c2;stop-opacity:1;" offset="0.5"/>
202 <stop offset="1" style="stop-color:#000000;stop-opacity:1;" id="stop84"/>
203 </radialGradient>
204 <linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="15.7207" y1="125.7861" x2="24.9356" y2="108.3428" gradientTransform="translate(-80,0)">
205 <stop offset="0" style="stop-color:#000000" id="stop75"/>
206 <stop offset="0.8935" style="stop-color:#FFFFFF" id="stop77"/>
207 </linearGradient>
208 <linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="40.527802" y1="55.75" x2="52.981899" y2="64.646004" gradientTransform="translate(-80,0)">
209 <stop offset="0" style="stop-color:#ffffff;stop-opacity:0;" id="stop68"/>
210 <stop offset="0.8935" style="stop-color:#FFFFFF" id="stop70"/>
211 </linearGradient>
212 <linearGradient id="path2388_1_" gradientUnits="userSpaceOnUse" x1="14.9214" y1="124.6768" x2="107.7549" y2="-17.989599" gradientTransform="translate(229.83849,405.96228)">
213 <stop offset="0" style="stop-color:#DDDDDD" id="stop32"/>
214 <stop offset="0.6864" style="stop-color:#888888" id="stop34"/>
215 <stop offset="0.8935" style="stop-color:#DDDDDD" id="stop36"/>
216 </linearGradient>
217 <radialGradient id="path5936_1_" cx="172.123" cy="4.7476001" r="4.6967001" gradientTransform="matrix(6.7917,-1.4855,-1.2014,-5.506,-845.12621,725.19548)" gradientUnits="userSpaceOnUse">
218 <stop offset="0" style="stop-color:#FFFFFF" id="stop26"/>
219 <stop offset="1" style="stop-color:#3E3E3E" id="stop28"/>
220 </radialGradient>
221 <linearGradient id="XMLID_1_" gradientUnits="userSpaceOnUse" x1="92.627899" y1="26.589399" x2="104.5325" y2="31.2349" gradientTransform="translate(229.83849,405.96228)">
222 <stop offset="0" style="stop-color:#FFFFFF" id="stop19"/>
223 <stop offset="0.6391" style="stop-color:#888888" id="stop21"/>
224 </linearGradient>
225 <linearGradient id="rect25493_1_" gradientUnits="userSpaceOnUse" x1="258.88379" y1="-326.0903" x2="286.16019" y2="-287.6532" gradientTransform="matrix(0.9065,-0.2414,-0.2421,-0.9089,10.723991,214.40698)">
226 <stop offset="0" style="stop-color:#555555" id="stop5"/>
227 <stop offset="0.6864" style="stop-color:#888888" id="stop7"/>
228 </linearGradient>
229 <linearGradient inkscape:collect="always" xlink:href="#XMLID_5_" id="linearGradient10549" gradientUnits="userSpaceOnUse" gradientTransform="translate(-80,0)" x1="15.7207" y1="125.7861" x2="24.9356" y2="108.3428"/>
230 <mask maskUnits="userSpaceOnUse" id="mask10545">
231 <path style="fill:url(#linearGradient10549)" id="path10547" d="M -0.051,18.554 L -0.847,9.66 C -0.847,9.66 8.141,4.482 10.38,3.193 C 3.985,-0.79 -3.654,1.07 -3.741,1.093 C -10.903,2.996 -15.908,8.865 -15.908,15.222 C -15.908,15.461 -15.901,15.701 -15.887,15.94 C -15.887,15.941 -15.887,15.941 -15.887,15.942 C -15.887,16.299 -16.25,36.73 -19.253,42.838 C -20.334,45.036 -30.401,58.18 -42.058,73.4 C -54.195,89.247 -69.3,108.968 -70.298,111.44 C -70.839,112.778 -71.079,114.126 -71.079,115.435 C -71.079,119.221 -69.06,122.663 -66.483,124.621 C -66.083,123.92 -65.655,123.178 -65.197,122.392 C -67.02,121.101 -68.463,119.074 -68.895,116.783 C -69.291,114.687 -68.831,112.48 -67.631,110.726 C -66.46,109.013 -64.659,107.855 -62.561,107.463 C -60.935,107.16 -59.182,107.593 -57.621,108.682 C -57.428,108.817 -57.245,108.966 -57.063,109.118 C -46.315,92.233 -27.938,65.35 3.195,23.824 C 1.323,20.784 -0.051,18.554 -0.051,18.554 z"/>
232 </mask>
233 <linearGradient inkscape:collect="always" xlink:href="#rect25493_1_" id="linearGradient11382" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9065,-0.2414,-0.2421,-0.9089,10.723991,214.40698)" x1="258.88379" y1="-326.0903" x2="286.16019" y2="-287.6532"/>
234 <linearGradient inkscape:collect="always" xlink:href="#XMLID_1_" id="linearGradient11384" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="92.627899" y1="26.589399" x2="104.5325" y2="31.2349"/>
235 <radialGradient inkscape:collect="always" xlink:href="#path5936_1_" id="radialGradient11386" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.7917,-1.4855,-1.2014,-5.506,-845.12621,725.19548)" cx="172.123" cy="4.7476001" r="4.6967001"/>
236 <linearGradient inkscape:collect="always" xlink:href="#path2388_1_" id="linearGradient11388" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="14.9214" y1="124.6768" x2="107.7549" y2="-17.989599"/>
237 <linearGradient inkscape:collect="always" xlink:href="#XMLID_4_" id="linearGradient11390" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="77.040016" y1="14.124305" x2="92.612343" y2="4.8821697"/>
238 <linearGradient inkscape:collect="always" xlink:href="#XMLID_4_" id="linearGradient11392" gradientUnits="userSpaceOnUse" gradientTransform="translate(-80,0)" x1="40.527802" y1="55.75" x2="52.981899" y2="64.646004"/>
239 <radialGradient inkscape:collect="always" xlink:href="#XMLID_6_" id="radialGradient11394" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.4337031,0.4442839,-0.7150071,0.6987259,282.84098,375.70944)" cx="77.004028" cy="13.140214" fx="77.004028" fy="13.140214" r="64.405701"/>
240 <linearGradient inkscape:collect="always" xlink:href="#rect10551_1_" id="linearGradient11396" gradientUnits="userSpaceOnUse" x1="77.216797" y1="44.765598" x2="73.449203" y2="30.555201"/>
241 <radialGradient inkscape:collect="always" xlink:href="#rect10551_3_" id="radialGradient11398" gradientUnits="userSpaceOnUse" cx="78.776398" cy="44.608398" r="14.3205"/>
242 <radialGradient inkscape:collect="always" xlink:href="#rect14950_1_" id="radialGradient11400" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.6131,-0.2916,-5.2659,-7.9645,125.0096,227.992)" cx="92.734398" cy="20.4307" r="4.1451998"/>
243 <radialGradient inkscape:collect="always" xlink:href="#rect10553_1_" id="radialGradient11402" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.498,-0.2212,-2.9368,-8.3284,56.2613,466.2682)" cx="292.49219" cy="43.388699" r="6.8727999"/>
244 <radialGradient inkscape:collect="always" xlink:href="#rect14938_1_" id="radialGradient11404" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.4892,-0.2059,-2.5913,-7.0931,29.692,361.6149)" cx="290.8428" cy="36.069801" r="6.8736"/>
245 <radialGradient inkscape:collect="always" xlink:href="#rect14944_1_" id="radialGradient11406" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.523,-0.2146,-2.627,-7.0521,27.4228,356.0237)" cx="274.56641" cy="36.065399" r="6.8733001"/>
246 <linearGradient inkscape:collect="always" xlink:href="#rect22846_1_" id="linearGradient11408" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9428,-0.2511,-0.2421,-0.9089,6.0921912,215.38258)" x1="247.60249" y1="-288.60791" x2="261.97269" y2="-288.60791"/>
247 <linearGradient inkscape:collect="always" xlink:href="#path34280_1_" id="linearGradient11410" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="93.023399" y1="39.3867" x2="93.023399" y2="25.928699"/>
248 <linearGradient inkscape:collect="always" xlink:href="#path30758_1_" id="linearGradient11412" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="16.7803" y1="80.697304" x2="67.723602" y2="80.697304"/>
249 <linearGradient inkscape:collect="always" xlink:href="#XMLID_7_" id="linearGradient11414" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="40.711899" y1="75.171898" x2="48.5495" y2="80.899803"/>
250 <radialGradient inkscape:collect="always" xlink:href="#XMLID_8_" id="radialGradient11416" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" cx="64.988297" cy="15.9429" r="19.6182"/>
251 <linearGradient inkscape:collect="always" xlink:href="#XMLID_9_" id="linearGradient11418" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="18.776899" y1="129.5986" x2="18.776899" y2="114.6055"/>
252 <linearGradient inkscape:collect="always" xlink:href="#XMLID_10_" id="linearGradient11420" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="17.509325" y1="123.23078" x2="18.875885" y2="107.20945"/>
253 <linearGradient inkscape:collect="always" xlink:href="#XMLID_11_" id="linearGradient11422" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="31.4995" y1="80.0439" x2="32.347698" y2="80.671898"/>
254 <linearGradient inkscape:collect="always" xlink:href="#XMLID_3_" id="linearGradient11424" gradientUnits="userSpaceOnUse" x1="11.9185" y1="119.0576" x2="98.418404" y2="44.057598"/>
255 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient11510" gradientUnits="userSpaceOnUse" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308"/>
256 <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient11512" gradientUnits="userSpaceOnUse" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308"/>
257 <filter inkscape:collect="always" id="filter11957">
258 <feGaussianBlur inkscape:collect="always" stdDeviation="2.339831" id="feGaussianBlur11959"/>
259 </filter>
260 <linearGradient inkscape:collect="always" xlink:href="#XMLID_4_" id="linearGradient12019" gradientUnits="userSpaceOnUse" gradientTransform="translate(-80,0)" x1="40.527802" y1="55.75" x2="52.981899" y2="64.646004"/>
261 <linearGradient inkscape:collect="always" xlink:href="#path34280_1_" id="linearGradient12037" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)" x1="93.023399" y1="39.3867" x2="93.023399" y2="25.928699"/>
262 <linearGradient inkscape:collect="always" xlink:href="#XMLID_3_" id="linearGradient12051" gradientUnits="userSpaceOnUse" x1="11.9185" y1="119.0576" x2="98.418404" y2="44.057598"/>
263 <filter inkscape:collect="always" id="filter12490">
264 <feGaussianBlur inkscape:collect="always" stdDeviation="2.3509538" id="feGaussianBlur12492"/>
265 </filter>
266 </defs>
267 <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="13" inkscape:cy="18.5" inkscape:document-units="px" inkscape:current-layer="g11357" inkscape:window-width="1024" inkscape:window-height="697" inkscape:window-x="0" inkscape:window-y="0" height="128px" width="128px"/>
268 <metadata id="metadata5681">
269 <rdf:RDF>
270 <cc:Work rdf:about="">
271 <dc:format>image/svg+xml</dc:format>
272 <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
273 </cc:Work>
274 </rdf:RDF>
275 </metadata>
276 <g inkscape:label="Livello 1" inkscape:groupmode="layer" id="layer1">
277 <path style="fill:#000000;fill-opacity:1;filter:url(#filter12490);opacity:0.8" d="M 97.46875,6 C 97.18152,6.0094408 97.00831,6.0304757 97,6.03125 C 88.50154,6.7547259 81.81102,12.649899 80.96875,19.9375 C 80.96299,19.970198 76.86754,40.857308 72.875,46.3125 C 69.74177,50.594872 11.13376,102.7197 8.28125,107.28125 C 6.43475,110.23375 6.09196,113.64754 6.8125,116.75 C 6.81481,116.75995 6.81016,116.77131 6.8125,116.78125 C 7.27817,118.76618 8.16525,120.60725 9.40625,122.125 C 9.47154,122.20534 9.55786,122.26531 9.625,122.34375 C 9.73846,122.47566 9.85017,122.62373 9.96875,122.75 C 10.13123,122.9234 10.29696,123.08786 10.46875,123.25 C 10.78531,123.54834 11.12253,123.83716 11.46875,124.09375 C 11.51009,124.12442 11.55201,124.15746 11.59375,124.1875 C 11.75577,124.30387 11.92581,124.39345 12.09375,124.5 C 12.34901,124.66192 12.60676,124.83089 12.875,124.96875 C 12.90463,124.98396 12.93897,124.98509 12.96875,125 C 13.16389,125.09785 13.36099,125.19684 13.5625,125.28125 C 13.66656,125.32459 13.76932,125.36661 13.875,125.40625 C 13.96058,125.43847 14.03838,125.47026 14.125,125.5 C 14.26755,125.5489 14.41722,125.58297 14.5625,125.625 C 15.11282,125.78408 15.69527,125.91534 16.28125,125.96875 C 16.62585,125.99943 16.98844,126.00883 17.34375,126 C 17.49276,125.99631 17.6305,125.97967 17.78125,125.96875 C 18.30718,125.93117 18.83023,125.84877 19.375,125.71875 C 19.49773,125.68971 19.62642,125.65895 19.75,125.625 C 19.94658,125.5707 20.14518,125.50448 20.34375,125.4375 C 20.68974,125.32116 21.02361,125.18743 21.375,125.03125 C 21.51637,124.96837 21.67036,124.91327 21.8125,124.84375 C 22.01661,124.74364 22.23195,124.64533 22.4375,124.53125 C 22.50876,124.4917 22.58484,124.44751 22.65625,124.40625 C 22.93651,124.24411 23.21755,124.06393 23.5,123.875 C 23.72992,123.72139 24.01123,123.49888 24.3125,123.25 C 24.51715,123.08053 24.76474,122.86659 25,122.65625 C 25.31217,122.37641 25.73134,121.97195 26.09375,121.625 C 26.40496,121.32709 26.7476,121.00087 27.09375,120.65625 C 27.10095,120.64393 27.11785,120.63734 27.125,120.625 C 40.39609,107.39872 78.3196,61.213642 83.8125,57.75 C 87.95646,55.136652 109.0625,51.3125 109.0625,51.3125 C 113.21925,49.41573 118.90506,43.445638 121.3125,34.4375 C 121.72869,32.077134 121.4811,29.596922 121.375,30.03125 L 108.59375,35.78125 L 100.21875,29.0625 L 98.78125,25.40625 L 99.28125,19.21875 L 113.34375,13.96875 L 113.125,12.15625 C 107.67312,6.0868239 99.47934,5.9339145 97.46875,6 z M 17.8125,106.1875 C 21.2472,106.15572 24.40096,109.89596 24.375,114.15625 C 24.3535,117.67982 20.93573,121.18715 17.5,121.21875 C 14.06408,121.25138 10.73518,117.39784 10.6875,113.53125 C 10.68465,113.29896 10.66822,113.04283 10.6875,112.8125 C 10.70682,112.58223 10.74047,112.35167 10.78125,112.125 C 10.90349,111.44483 11.13404,110.80542 11.4375,110.1875 C 11.53867,109.98155 11.63003,109.78948 11.75,109.59375 C 12.94961,107.63625 15.09816,106.21329 17.8125,106.1875 z" id="path11963"/>
278 <g id="g11357" transform="matrix(1.0223499,0.1802679,-0.1801715,1.0218034,-142.50883,-466.04399)">
279 <path style="fill:url(#linearGradient11382)" d="M 322.52649,444.25728 C 326.15949,443.01428 332.35849,434.45128 332.98149,424.78428 C 333.00949,424.35428 333.65649,426.67828 333.65649,428.98828 C 332.87949,437.94128 328.47049,444.55028 324.84449,447.04628 L 322.52649,444.25728 z" inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="csssc" id="rect25493"/>
280 <path style="fill:#888a85" d="M 332.98149,424.78428 L 321.82849,432.38828 L 312.74849,427.41628 C 312.08149,428.88428 315.95449,447.98028 320.22749,446.96228 C 328.04849,445.09828 332.16349,435.78528 332.98149,424.78428 z" inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="cccsc" id="path3285"/>
281 <path style="fill:url(#linearGradient11384)" id="path23" d="M 322.07549,432.68428 L 323.06949,441.37828 L 324.97749,444.59028 C 326.91449,443.03428 328.49449,440.87628 329.72849,438.28428 C 331.33649,434.63428 332.30349,430.21428 332.65649,425.47228 L 322.07549,432.68428 z" enable-background="new "/>
282 <path style="opacity:0.51380005;fill:url(#radialGradient11386)" d="M 313.59749,428.19228 C 313.59449,428.19728 313.57749,428.21928 313.57649,428.22628 C 313.57149,428.23928 313.56449,428.27228 313.56049,428.28828 C 313.04649,430.36728 316.00549,448.15728 320.19449,447.15928 C 321.12049,446.93828 322.00949,446.60928 322.83249,446.18928 L 320.58049,431.94628 L 313.59749,428.19228 z" enable-background="new " inkscape:r_cy="true" inkscape:r_cx="true" id="path5936"/>
283 <path style="fill:url(#linearGradient11388)" d="M 305.84149,406.08928 C 297.90049,408.19828 292.53349,414.90528 292.95349,421.96328 C 292.95349,421.99528 292.56249,442.51428 289.68749,448.36028 C 287.43149,452.94928 240.55549,512.22128 238.61249,517.02828 C 234.50849,527.18028 246.26949,539.39528 255.82749,530.23128 C 262.12949,524.18928 296.79749,462.07328 301.96749,457.37728 C 305.46149,454.20328 324.84249,447.04528 324.84249,447.04528 L 310.76249,424.19228 L 310.04449,416.17028 L 322.15949,409.19128 C 315.08849,403.65028 305.90349,406.07228 305.84149,406.08928 z M 247.46049,514.40928 C 250.71349,513.80428 254.33749,516.82428 255.02549,520.87228 C 255.59449,524.22028 252.93349,528.13028 249.67949,528.73528 C 246.42549,529.34128 242.61749,526.22128 241.92549,522.55928 C 241.26149,519.04028 243.34849,515.17628 247.46049,514.40928 z" inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="cccssssccccssssccssss" id="path2388"/>
284 <path transform="translate(309.83849,405.96228)" mask="url(#mask10545)" style="fill:url(#linearGradient11392)" id="path72" d="M -0.051,18.554 L -0.847,9.66 C -0.847,9.66 8.141,4.482 10.38,3.193 C 3.985,-0.79 -3.654,1.07 -3.741,1.093 C -10.903,2.996 -15.908,8.865 -15.908,15.222 C -15.908,15.461 -15.901,15.701 -15.887,15.94 C -15.887,15.941 -15.887,15.941 -15.887,15.942 C -15.887,16.299 -16.25,36.73 -19.253,42.838 C -20.334,45.036 -30.401,58.18 -42.058,73.4 C -54.195,89.247 -69.3,108.968 -70.298,111.44 C -70.839,112.778 -71.079,114.126 -71.079,115.435 C -71.079,119.221 -69.06,122.663 -66.483,124.621 C -66.083,123.92 -65.655,123.178 -65.197,122.392 C -67.02,121.101 -68.463,119.074 -68.895,116.783 C -69.291,114.687 -68.831,112.48 -67.631,110.726 C -66.46,109.013 -64.659,107.855 -62.561,107.463 C -60.935,107.16 -59.182,107.593 -57.621,108.682 C -57.428,108.817 -57.245,108.966 -57.063,109.118 C -46.315,92.233 -27.938,65.35 3.195,23.824 C 1.323,20.784 -0.051,18.554 -0.051,18.554 z"/>
285 <path style="fill:url(#radialGradient11394)" id="path86" d="M 310.76249,424.19228 L 310.04449,416.17028 L 322.15949,409.19128 C 320.21949,407.64028 317.84449,406.51628 315.23549,405.92928 C 312.04649,405.90828 308.79349,406.38428 306.47749,407.16528 C 298.74149,409.77428 294.69849,415.49528 294.85149,422.31128 L 303.63249,437.15128 L 306.31749,435.47228 L 312.56749,446.29728 L 310.37649,447.80128 L 313.73849,451.42828 L 324.84249,447.04628 L 310.76249,424.19228 z"/>
286 <polygon transform="translate(229.83849,405.96228)" style="fill:url(#linearGradient11396)" points="65.82,36.446 76.487,27.791 85.179,40.128 72.511,46.783 65.82,36.446 " inkscape:r_cy="true" inkscape:r_cx="true" id="rect10551_2_"/>
287 <polygon transform="translate(229.83849,405.96228)" style="fill:url(#radialGradient11398)" points="65.82,36.446 76.487,29.791 83.179,40.128 72.511,46.783 65.82,36.446 " inkscape:r_cy="true" inkscape:r_cx="true" id="rect10551"/>
288 <polygon transform="translate(229.83849,405.96228)" style="fill:url(#radialGradient11400)" points="68.311,35.653 74.616,32.078 80.237,40.809 73.932,44.384 68.311,35.653 " inkscape:r_cy="true" inkscape:r_cx="true" id="rect14950"/>
289 <polygon transform="translate(229.83849,405.96228)" style="fill:url(#radialGradient11402)" points="67.891,36.615 77.497,32.233 77.891,33.323 68.284,37.705 67.891,36.615 " inkscape:r_cy="true" inkscape:r_cx="true" id="rect10553"/>
290 <polygon transform="translate(229.83849,405.96228)" style="fill:url(#radialGradient11404)" points="72.212,42.972 81.653,38.899 82.001,39.827 72.56,43.9 72.212,42.972 " inkscape:r_cy="true" inkscape:r_cx="true" id="rect14938"/>
291 <polygon transform="translate(229.83849,405.96228)" style="fill:url(#radialGradient11406)" points="69.661,39.991 79.757,35.751 80.11,36.673 70.015,40.914 69.661,39.991 " inkscape:r_cy="true" inkscape:r_cx="true" id="rect14944"/>
292 <path style="fill:url(#linearGradient11410)" d="M 320.80249,431.89128 C 320.76149,432.16128 322.10049,439.91928 322.18149,440.18928 C 322.85449,444.45728 323.83149,444.59528 324.03549,445.34928 C 324.76349,444.93528 324.29249,445.39528 324.92349,444.84628 C 324.80849,444.48028 323.48549,441.99528 322.95849,441.11128 C 322.71249,438.97728 321.93149,433.00328 321.86449,432.43528 C 321.45549,432.21328 321.29849,432.12528 320.80249,431.89128 z" inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccccccc" id="path34280"/>
293 <path style="fill:url(#linearGradient11412)" d="M 246.62049,511.92528 C 251.42949,510.02428 257.88249,515.30428 257.53849,521.11028 C 260.82449,517.31028 296.88449,460.33528 297.44649,457.74428 C 298.30649,453.77728 294.17949,450.82228 290.89849,452.88728 C 288.60949,454.32628 246.30749,512.04828 246.62049,511.92528 z" inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccsss" id="path30758"/>
294 <path style="fill:url(#linearGradient11414);stroke:#000000" id="path159" d="M 292.02849,454.56028 C 289.53249,456.91828 266.85449,487.60628 250.66249,509.77928 C 252.02149,510.08228 253.37949,510.67028 254.63749,511.58128 C 256.37949,512.84228 257.66849,514.51428 258.50849,516.33428 C 267.27449,503.42428 294.06749,460.80328 295.50149,457.24628 C 295.53749,457.05828 295.56249,456.87128 295.56249,456.69028 C 295.56249,455.85828 295.18949,455.11828 294.50449,454.63828 C 293.74349,454.10528 292.82549,454.08928 292.02849,454.56028 z"/>
295 <path style="fill:url(#radialGradient11416)" id="path166" d="M 294.94349,422.46628 C 294.86849,425.66728 294.31649,443.48028 291.48249,449.24328 C 291.40649,449.39728 291.28449,449.60828 291.13649,449.84928 C 291.56049,449.26728 291.86549,448.81828 292.01449,448.54228 C 294.75749,443.48028 297.55549,430.48328 297.76449,427.23428 L 294.94349,422.46628 z"/>
296 <path style="opacity:0.5;fill:url(#linearGradient11418)" id="path173" d="M 258.69149,526.59428 C 259.24949,525.08628 259.45349,523.49328 259.17549,521.97428 C 258.59949,518.81928 256.61749,515.87328 253.87449,514.09028 C 251.69549,512.67428 249.24349,512.11128 246.97049,512.50528 C 244.03849,513.01528 241.52249,514.52228 239.88549,516.74928 C 238.45149,518.70028 237.78049,521.08528 237.96049,523.44028 C 239.33149,531.34628 248.26549,537.48228 255.82849,530.23128 C 256.49049,529.59728 257.46949,528.33628 258.69149,526.59428 z M 249.67949,528.73528 C 246.42549,529.34128 242.61749,526.22128 241.92549,522.55928 C 241.26049,519.03928 243.34749,515.17528 247.46049,514.40928 C 250.71349,513.80428 254.33749,516.82428 255.02549,520.87228 C 255.59449,524.22028 252.93349,528.13028 249.67949,528.73528 z"/>
297 <path style="fill:url(#linearGradient11420)" id="path180" d="M 256.01149,520.70428 C 255.59949,518.27928 254.18149,516.01528 252.21849,514.64428 C 250.65849,513.55528 248.90449,513.12328 247.27849,513.42528 C 245.18049,513.81728 243.38049,514.97528 242.20849,516.68828 C 241.00949,518.44128 240.54849,520.64928 240.94449,522.74528 C 241.75449,527.03328 246.08849,530.42228 249.86349,529.71928 C 253.62049,529.02028 256.66649,524.55528 256.01149,520.70428 z M 249.67949,528.73528 C 246.42549,529.34128 242.61749,526.22128 241.92549,522.55928 C 241.26049,519.03928 243.34749,515.17528 247.46049,514.40928 C 250.71349,513.80428 254.33749,516.82428 255.02549,520.87228 C 255.59449,524.22028 252.93349,528.13028 249.67949,528.73528 z"/>
298 <path style="opacity:0.4;fill:url(#linearGradient11422)" id="path187" d="M 285.39049,455.48028 C 285.64549,454.95828 285.88049,454.31028 286.09549,453.56728 C 274.64749,469.16528 240.27149,512.92628 238.61349,517.02828 C 238.29049,517.82728 238.07649,518.63728 237.94149,519.45128 C 242.96749,511.10428 283.36449,459.62828 285.39049,455.48028 z"/>
299 <path transform="translate(229.83849,405.96228)" clip-path="url(#clipPath4092)" style="fill:url(#linearGradient11424);filter:url(#filter4503)" id="path65" d="M 72.13,49.416 C 66.96,54.112 32.292,116.228 25.99,122.27 C 18.09,129.844 8.695,122.813 7.986,114.414 C 7.207,123.618 17.468,132.44 25.99,124.27 C 32.292,118.228 66.96,56.112 72.13,51.416 C 75.624,48.242 95.005,41.084 95.005,41.084 L 94.004,39.459 C 90.005,40.965 75.147,46.674 72.13,49.416 z"/>
300 <path style="fill:url(#linearGradient11408)" d="M 310.04449,416.17028 L 322.15949,409.19128 L 322.67749,410.88528 L 310.13349,418.26728 L 310.04449,416.17028 z" inkscape:r_cy="true" inkscape:r_cx="true" sodipodi:nodetypes="ccccc" id="rect22846"/>
301 <path style="fill:url(#linearGradient11390);fill-opacity:1" id="path46" d="M 310.21449,416.07228 L 322.15949,409.19128 C 321.63949,408.78428 321.10749,408.43228 320.56949,408.10728 L 310.04449,414.17028 L 310.21449,416.07228 z"/>
302 </g>
303 <path style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.47008219000000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998000000000;stroke-opacity:1;filter:url(#filter11957);opacity:0.80000000000000004" d="M 10.375,9 L 4.21875,15.46875 L 9.125,23.1875 C 13.08003,25.264868 17.14186,27.693549 20.375,30.75 L 69.625,77.3125 L 65.5625,81.5625 L 70.8125,86.53125 C 73.7103,86.859904 76.69384,88.078409 79.15625,90.40625 C 81.64614,92.760071 83.16605,95.732279 83.625,98.625 L 108.34375,122.03125 C 114.08456,127.45836 128.43479,112.52526 122.65625,107.0625 L 97.90625,83.6875 C 94.97813,83.378226 91.9274,82.010074 89.4375,79.65625 C 86.9751,77.328414 85.57063,74.424084 85.09375,71.5625 L 79.84375,66.59375 L 75.78125,70.84375 L 26.53125,24.28125 C 23.29811,21.224799 20.16307,17.382339 18.375,13.53125 L 10.375,9 z" id="path11428"/>
304 <g id="g10397" transform="matrix(0.9660937,-2.5302336e-2,2.3546854e-2,0.9608617,2.3338765,6.1294086)">
305 <path id="rect3006" d="M 1.750754,7.673054 L 6.651221,15.840499 C 10.689771,18.10883 14.818666,20.740966 18.085644,24.007944 L 103.30145,109.22375 L 109.83541,102.68979 L 24.6196,17.473988 C 21.352622,14.20701 18.204176,10.093654 16.452155,6.039565 L 8.28471,1.139098 L 1.750754,7.673054 z" style="fill:url(#linearGradient6125);fill-opacity:1;stroke:none;stroke-width:0.47008219;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" sodipodi:nodetypes="ccccccccc"/>
306 <rect transform="matrix(0.7071068,-0.7071068,-0.7071068,-0.7071068,0,0)" style="fill:url(#linearGradient6122);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" id="rect3912" width="1.1166428" height="98.671562" x="-1.357038" y="-123.11634"/>
307 <rect style="opacity:0.3857678;fill:url(#linearGradient6119);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" id="rect4944" width="1.6020314" height="63.508739" x="0.89394951" y="-85.707031" transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,0,0)"/>
308 <g transform="matrix(0.8167445,-0.8167445,0.8167445,0.8167445,5.2761549,23.749521)" clip-path="url(#clipPath3850)" id="g3842">
309 <path style="fill:#535557;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3834)" d="M 4.296875,-4.12891 L 5.6640625,-4.12891 C 8.3203089,-0.31380448 8.5987355,3.8409896 7.6171875,8.17578 L 4.9804688,9.1523436 L 4.296875,-4.12891 z" id="path3726" sodipodi:nodetypes="ccccc"/>
310 <path sodipodi:nodetypes="ccccc" id="path3728" d="M 18.977324,-4.12891 L 17.610137,-4.12891 C 14.95389,-0.31380448 14.675464,3.8409896 15.657012,8.17578 L 18.293731,9.1523436 L 18.977324,-4.12891 z" style="fill:#535557;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3838)"/>
311 <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3838)" d="M 18.977324,-4.12891 L 18.231618,-4.0598566 C 16.117808,-1.3279433 15.743286,-1.0597872 15.864172,4.9302704 L 18.293731,9.1523436 L 18.977324,-4.12891 z" id="path3969" sodipodi:nodetypes="ccccc"/>
312 </g>
313 <rect transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,0,0)" y="41.331993" x="0.84851468" height="109.04897" width="1.9142449" id="rect3886" style="fill:url(#linearGradient6112);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"/>
314 <path transform="matrix(0.8167445,-0.8167445,0.8167445,0.8167445,-14.584136,43.609812)" id="path3925" d="M 32,-12 L 30,-4 C 34.143852,8.2009511 38.115959,5.0342786 42,-4 L 40,-12 L 32,-12 z" style="fill:url(#linearGradient3943);fill-opacity:1;stroke:url(#linearGradient6517);stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" sodipodi:nodetypes="ccccc"/>
315 <path sodipodi:nodetypes="ccsccccsccc" id="rect3956" d="M 63.529919,78.09273 L 68.834311,83.397123 C 71.82354,83.817882 74.899226,85.18508 77.387407,87.673261 C 79.903365,90.189215 81.385477,93.328601 81.786903,96.34972 L 106.78156,121.34436 C 112.58247,127.14528 127.79361,112.01036 121.95458,106.17133 L 96.95993,81.176682 C 93.938823,80.775254 90.799446,79.29314 88.283481,76.777186 C 85.795299,74.289007 84.428105,71.213314 84.007344,68.22409 L 78.70295,62.919697 L 63.529919,78.09273 z" style="opacity:1;fill:url(#linearGradient4190);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"/>
316 <path transform="matrix(0.9483145,-0.9483145,0.9483145,0.9483145,-6.4444639,0.531831)" clip-path="url(#clipPath4242)" sodipodi:nodetypes="cccccc" id="path4196" d="M -8,120 C 1.7462188,130.07566 10.00314,126.89342 16,120 L 12,136 L -16,128 L -20,112 L -8,120 z" style="fill:#ffa700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4238)"/>
317 <rect transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,0,0)" y="100.16766" x="-10.297462" height="1.1132338" width="21.457907" id="rect4249" style="opacity:0.48689138;fill:#ffa500;fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"/>
318 <path sodipodi:nodetypes="ccccccc" id="rect4320" d="M 72.972033,68.720893 L 75.892922,65.800004 L 81.066844,70.973925 C 80.921148,71.564914 80.822369,72.165286 81.579665,72.936868 L 79.073097,75.857759 C 78.372014,75.392484 77.997186,74.796708 78.21501,73.963871 L 72.972033,68.720893 z" style="opacity:0.83895126;fill:url(#linearGradient4346);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1"/>
319 <path sodipodi:nodetypes="ccccc" id="rect4340" d="M 4.6713727,129.88196 L 7.2816355,129.49996 C 7.2464436,130.37087 7.2584731,130.8014 7.8438776,132.01123 L 5.1273299,132.01123 C 4.7973883,130.83537 4.6035939,130.49599 4.6713727,129.88196 z" style="opacity:0.74531836;fill:url(#linearGradient4342);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter4404)" transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-4,-4)"/>
320 <rect transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,0,0)" y="126.0467" x="-0.6434837" height="0.390625" width="10.644531" id="rect4432" style="opacity:1;fill:url(#radialGradient4440);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"/>
321 <path sodipodi:nodetypes="ccc" id="path4454" d="M 83.597656,68.53125 L 68.753906,82.984375 C 84.820174,88.576948 78.33289,74.329762 83.597656,68.53125 z" style="fill:url(#linearGradient4471);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4501)"/>
322 <path transform="matrix(-1,0,0,-1,169.63281,168.51104)" style="fill:url(#linearGradient4515);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4501)" d="M 87.597656,72.53125 L 72.753906,86.984375 C 88.820174,92.576948 82.33289,78.329762 87.597656,72.53125 z" id="path4505" sodipodi:nodetypes="ccc"/>
323 <rect transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,0,0)" ry="2.9279406" rx="2.9279406" y="132.02951" x="-7.5001087" height="29.279404" width="5.8558812" id="rect4517" style="opacity:0.83895126;fill:url(#linearGradient4525);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1"/>
324 <rect inkscape:transform-center-y="-5.5242717" inkscape:transform-center-x="-16.434708" transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-4,-4)" ry="0.5577029" rx="2.9279406" y="130.97287" x="-1.1929667" height="1.1048541" width="11.60097" id="rect4527" style="opacity:0.83895126;fill:url(#linearGradient4537);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter4551)"/>
325 <path transform="translate(50.492188,-4.0046875)" clip-path="url(#clipPath4588)" id="path4559" d="M 13.83125,81.09375 L 12.33125,82.59375 L 17.64375,87.90625 C 20.632979,88.327007 23.718069,89.699319 26.20625,92.1875 C 28.722207,94.703451 30.179824,97.822631 30.58125,100.84375 L 55.58125,125.84375 C 59.791769,130.05428 68.947177,123.22603 71.425,116.9375 C 68.058606,122.54366 60.345306,127.60781 56.58125,123.84375 L 31.58125,98.84375 C 31.179824,95.822631 29.722207,92.703451 27.20625,90.1875 C 24.718069,87.699319 21.632979,86.327007 18.64375,85.90625 L 13.83125,81.09375 z" style="opacity:1;fill:#996100;fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter4584)"/>
326 <rect style="opacity:0.576779;fill:url(#radialGradient4602);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" id="rect4596" width="10.644531" height="0.390625" x="-0.091056541" y="100.35886" transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,0,0)"/>
327 <rect clip-path="url(#clipPath4632)" style="opacity:0.576779;fill:url(#linearGradient4604);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter4626)" id="rect4598" width="12.602244" height="4.0530515" x="-1.1929667" y="129.5918" rx="0" ry="0" transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-21.221011,-22.313001)" inkscape:transform-center-x="-16.434708" inkscape:transform-center-y="-5.5242717"/>
328 <rect inkscape:transform-center-y="-5.5242717" inkscape:transform-center-x="-16.434708" transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-21.321011,-22.413001)" ry="0" rx="0" y="130.07516" x="3.1573973" height="1.7051741" width="7.9066095" id="rect4638" style="opacity:0.576779;fill:url(#linearGradient4640);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter4626)" clip-path="url(#clipPath4632)"/>
329 <path sodipodi:nodetypes="ccccc" style="fill:url(#linearGradient6930);fill-opacity:1;stroke:none;stroke-width:0.30655462;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" d="M 2.9032773,7.9724105 L 7.1391831,15.032254 C 18.678358,20.720438 19.246981,15.680572 15.610994,6.5604419 L 8.5511516,2.3245361 L 2.9032773,7.9724105 z" id="path6537"/>
330 <rect style="opacity:0.83895126;fill:url(#linearGradient7698);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" id="rect7696" width="5.8558812" height="29.279404" x="4.5207062" y="132.73663" rx="2.9279406" ry="2.9279406" transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,0,0)"/>
331 <rect style="opacity:0.95131088;fill:url(#linearGradient4338);fill-opacity:1;stroke:none;stroke-width:0.37;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" id="rect4336" width="2.5833137" height="38.179485" x="0.94721299" y="126.14276" transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,0,0)"/>
332 </g>
333 </g>
334</svg> \ No newline at end of file
diff --git a/utils/nwztools/plattools/data/make_images.sh b/utils/nwztools/plattools/data/make_images.sh
new file mode 100755
index 0000000000..7ac21dc17a
--- /dev/null
+++ b/utils/nwztools/plattools/data/make_images.sh
@@ -0,0 +1,53 @@
1#!/bin/bash
2#
3# This script contains the code used to produce all the images.
4# Because of the variety of tools needed to achieve that, the result is also
5# included in the repository but this makes it easier to modify the data
6# to add more content
7#
8
9# path to root of repository
10ROOT_DIR=../../../../
11
12# final resolution
13NWZ_WIDTH=130
14NWZ_HEIGHT=130
15
16# path to rockbox icon
17RB_ICON_PATH=$ROOT_DIR/docs/logo/rockbox-icon.svg
18# path to tools icon (currently stolen from KDE Oxygen icon set)
19TOOL_ICON_PATH=Oxygen480-categories-preferences-system.svg
20
21# convert_svg width height input output
22function convert_svg
23{
24 local width="$1"
25 local height="$2"
26 local input="$3"
27 local output="$4"
28 TMP=tmp.png
29 # convert from SVG to PNG
30 inkscape -z -e $TMP -w $width -h $height $input
31 if [ "$?" != 0 ]; then
32 echo "SVG -> PNG conversion failed"
33 exit 1
34 fi
35 # convert from PNG to BMP, force using "version 3" because the OF don't like
36 # "recent" BMP
37 convert -channel RGB $TMP -define bmp:format=bmp3 ${output}_icon.bmp
38 if [ "$?" != 0 ]; then
39 rm -f $TMP
40 echo "PNG -> BMP conversion failed"
41 exit 1
42 fi
43 # remove temporary
44 rm -f $TMP
45}
46
47# start by creating the bitmap files from rockbox-icon.svg for all resolutions
48# we make a detour by svg because inkscape can only export to SVG
49# NOTE: we use image magick to convert to bmp but the OF tools don't like BMPv5
50# and contrary to what the documentation says, image magick tends to produce
51# those by default unless asked otherwise
52convert_svg $NWZ_WIDTH $NWZ_HEIGHT $RB_ICON_PATH rockbox
53convert_svg $NWZ_WIDTH $NWZ_HEIGHT $TOOL_ICON_PATH tools
diff --git a/utils/nwztools/plattools/data/rockbox_icon.bmp b/utils/nwztools/plattools/data/rockbox_icon.bmp
new file mode 100644
index 0000000000..69e6792e7b
--- /dev/null
+++ b/utils/nwztools/plattools/data/rockbox_icon.bmp
Binary files differ
diff --git a/utils/nwztools/plattools/data/tools_icon.bmp b/utils/nwztools/plattools/data/tools_icon.bmp
new file mode 100644
index 0000000000..f9fccf0306
--- /dev/null
+++ b/utils/nwztools/plattools/data/tools_icon.bmp
Binary files differ
diff --git a/utils/nwztools/plattools/dualboot.c b/utils/nwztools/plattools/dualboot.c
index a5d04fa4ed..c6d07c7508 100644
--- a/utils/nwztools/plattools/dualboot.c
+++ b/utils/nwztools/plattools/dualboot.c
@@ -24,6 +24,64 @@
24#include "nwz_lib.h" 24#include "nwz_lib.h"
25#include "nwz_plattools.h" 25#include "nwz_plattools.h"
26#include <time.h> 26#include <time.h>
27#include <errno.h>
28
29/* all images must have the following size */
30#define ICON_WIDTH 130
31#define ICON_HEIGHT 130
32
33/* images */
34#include "data/rockbox_icon.h"
35#if BMPWIDTH_rockbox_icon != ICON_WIDTH || BMPHEIGHT_rockbox_icon != ICON_HEIGHT
36#error rockbox_icon has the wrong resolution
37#endif
38#include "data/tools_icon.h"
39#if BMPWIDTH_tools_icon != ICON_WIDTH || BMPHEIGHT_tools_icon != ICON_HEIGHT
40#error tools_icon has the wrong resolution
41#endif
42/* buffer for Sony image, filled from NVP */
43unsigned short sony_icon[ICON_WIDTH * ICON_HEIGHT];
44/* resolution */
45static int width, height, bpp;
46
47/* return icon y position (x is always centered) */
48int get_icon_y(void)
49{
50 /* adjust so that this contains the Sony logo and produces a nice logo
51 * when used with rockbox */
52 if(height == 320)
53 return 70;
54 else if(height == 320)
55 return 100;
56 else
57 return height / 2 - ICON_HEIGHT + 30; /* guess, probably won't work */
58}
59
60/* Sony logo extraction */
61bool extract_sony_logo(void)
62{
63 /* only support bpp of 16 */
64 if(bpp != 16)
65 return false;
66 /* load the entire image from the nvp */
67 int bti_size = nwz_nvp_read(NWZ_NVP_BTI, NULL);
68 if(bti_size < 0)
69 return false;
70 unsigned short *bti = malloc(bti_size);
71 if(nwz_nvp_read(NWZ_NVP_BTI, bti) != bti_size)
72 return false;
73 /* compute the offset in the image of the logo itself */
74 int x_off = (width - ICON_WIDTH) / 2; /* logo is centered horizontally */
75 int y_off = get_icon_y();
76 /* extract part of the image */
77 for(int y = 0; y < ICON_HEIGHT; y++)
78 {
79 memcpy(sony_icon + ICON_WIDTH * y,
80 bti + width * (y + y_off) + x_off, ICON_WIDTH * sizeof(unsigned short));
81 }
82 free(bti);
83 return true;
84}
27 85
28/* Important Note: this bootloader is carefully written so that in case of 86/* Important Note: this bootloader is carefully written so that in case of
29 * error, the OF is run. This seems like the safest option since the OF is 87 * error, the OF is run. This seems like the safest option since the OF is
@@ -36,13 +94,28 @@ enum boot_mode
36 BOOT_OF 94 BOOT_OF
37}; 95};
38 96
97void draw_icon(int left, int top, const unsigned short *icon, unsigned short *fb_mmap)
98{
99 for(int y = 0; y < ICON_HEIGHT; y++)
100 {
101 memcpy(fb_mmap + width * (y + top) + left, icon + ICON_WIDTH * y,
102 ICON_WIDTH * sizeof(unsigned short));
103 }
104}
105
39enum boot_mode get_boot_mode(void) 106enum boot_mode get_boot_mode(void)
40{ 107{
41 /* get time */ 108 if(bpp != 16)
42 struct timeval deadline; 109 {
43 if(gettimeofday(&deadline, NULL) != 0) 110 nwz_lcdmsg(true, 0, 2, "Unsupported bpp");
111 sleep(2);
112 return BOOT_OF;
113 }
114 /* open framebuffer */
115 int fb_fd = nwz_fb_open(true);
116 if(fb_fd < 0)
44 { 117 {
45 nwz_lcdmsg(false, 0, 2, "Cannot get time"); 118 nwz_lcdmsg(true, 0, 2, "Cannot open input device");
46 sleep(2); 119 sleep(2);
47 return BOOT_OF; 120 return BOOT_OF;
48 } 121 }
@@ -50,70 +123,131 @@ enum boot_mode get_boot_mode(void)
50 int input_fd = nwz_key_open(); 123 int input_fd = nwz_key_open();
51 if(input_fd < 0) 124 if(input_fd < 0)
52 { 125 {
53 nwz_lcdmsg(false, 0, 2, "Cannot open input device"); 126 nwz_fb_close(fb_fd);
127 nwz_lcdmsg(true, 0, 2, "Cannot open input device");
128 sleep(2);
129 return BOOT_OF;
130 }
131 int fb_size = width * height * bpp / 2;
132 void *fb_mmap = nwz_fb_mmap(fb_fd, 0, fb_size);
133 void *fb_mmap_p1 = nwz_fb_mmap(fb_fd, NWZ_FB_LCD_PAGE_OFFSET, fb_size);
134 if(fb_mmap == NULL || fb_mmap_p1 == NULL)
135 {
136 nwz_fb_close(fb_fd);
137 nwz_key_close(input_fd);
138 nwz_lcdmsg(true, 0, 2, "Cannot map framebuffer");
54 sleep(2); 139 sleep(2);
55 return BOOT_OF; 140 return BOOT_OF;
56 } 141 }
57 deadline.tv_sec += 5;
58 /* wait for user action */ 142 /* wait for user action */
59 enum boot_mode mode = BOOT_OF; 143 enum boot_mode mode = BOOT_OF;
144 /* NOTE on drawing: since screen is redrawn automatically, and we invoke
145 * external programs to draw, we can't hope to fit it in the frame time
146 * and it will flicker. To avoid this, we use the fact that all programs
147 * only write to page 0. So we setup the lcd to update from page 1. When
148 * we need to update the screen, we ask it to draw from page 0, then copy
149 * page 0 to page 1 and then switch back to page 1 */
150 memset(fb_mmap_p1, 0xff, fb_size); /* clear page 1 */
151 nwz_fb_set_page(fb_fd, 1);
152 bool redraw = true;
60 while(true) 153 while(true)
61 { 154 {
62 /* get time */ 155 if(redraw)
63 struct timeval cur_time;
64 if(gettimeofday(&cur_time, NULL) != 0)
65 { 156 {
66 nwz_lcdmsg(false, 0, 4, "Cannot get time"); 157 /* redraw screen on page 0: clear screen */
67 sleep(2); 158 memset(fb_mmap, 0, fb_size);
68 break; 159 /* display top text */
160 nwz_display_text_center(width, 0, true, NWZ_COLOR(255, 201, 0),
161 NWZ_COLOR(0, 0, 0), 0, "SELECT PLAYER");
162 /* display icon */
163 const unsigned short *icon = (mode == BOOT_OF) ? sony_icon :
164 (mode == BOOT_ROCKBOX) ? rockbox_icon : tools_icon;
165 draw_icon((width - ICON_WIDTH) / 2, get_icon_y(), icon, fb_mmap);
166 /* display bottom description */
167 const char *desc = (mode == BOOT_OF) ? "SONY" :
168 (mode == BOOT_ROCKBOX) ? "ROCKBOX" : "DEBUG TOOLS";
169 nwz_display_text_center(width, get_icon_y() + ICON_HEIGHT + 30, true,
170 NWZ_COLOR(255, 201, 0), NWZ_COLOR(0, 0, 0), 0, desc);
171 /* display arrows */
172 int arrow_y = get_icon_y() + ICON_HEIGHT / 2 - NWZ_FONT_H(true) / 2;
173 nwz_display_text(NWZ_FONT_W(true) / 2, arrow_y, true,
174 NWZ_COLOR(255, 201, 0), NWZ_COLOR(0, 0, 0), 0, "<");
175 nwz_display_text(width - 3 * NWZ_FONT_W(true) / 2, arrow_y, true,
176 NWZ_COLOR(255, 201, 0), NWZ_COLOR(0, 0, 0), 0, ">");
177 /* switch to page 1 */
178 nwz_fb_set_page(fb_fd, 0);
179 /* copy page 0 to page 1 */
180 memcpy(fb_mmap_p1, fb_mmap, fb_size);
181 /* switch back to page 1 */
182 nwz_fb_set_page(fb_fd, 1);
183
184 redraw = false;
69 } 185 }
70 /* check timeout */ 186
71 if(cur_time.tv_sec > deadline.tv_sec) 187 /* wait for a key */
72 break; 188 int ret = nwz_key_wait_event(input_fd, -1);
73 if(cur_time.tv_sec == deadline.tv_sec && cur_time.tv_usec >= deadline.tv_usec)
74 break;
75 /* print message */
76 int sec_left = deadline.tv_sec - cur_time.tv_sec;
77 sec_left += (deadline.tv_usec - cur_time.tv_usec + 999999) / 1000000; /* round up */
78 nwz_lcdmsgf(false, 0, 2, "Booting OF in %d seconds ", sec_left);
79 nwz_lcdmsg(false, 0, 3, "Press BACK to run tools");
80 nwz_lcdmsg(false, 0, 3, "Press PLAY to boot RB");
81 /* wait for a key (1s) */
82 int ret = nwz_key_wait_event(input_fd, 1000000);
83 if(ret != 1) 189 if(ret != 1)
84 continue; 190 continue;
85 struct input_event evt; 191 struct input_event evt;
86 if(nwz_key_read_event(input_fd, &evt) != 1) 192 if(nwz_key_read_event(input_fd, &evt) != 1)
87 continue; 193 continue;
194 /* only act on release */
88 if(nwz_key_event_is_press(&evt)) 195 if(nwz_key_event_is_press(&evt))
89 continue; 196 continue;
90 if(nwz_key_event_get_keycode(&evt) == NWZ_KEY_PLAY) 197 int key_code = nwz_key_event_get_keycode(&evt);
91 { 198 /* play -> stop loop and return mode */
92 mode = BOOT_ROCKBOX; 199 if(key_code == NWZ_KEY_PLAY)
93 break; 200 break;
201 /* left/right/up/down: change mode */
202 if(key_code == NWZ_KEY_LEFT || key_code == NWZ_KEY_DOWN)
203 {
204 if(mode == BOOT_ROCKBOX)
205 mode = BOOT_OF;
206 else if(mode == BOOT_OF)
207 mode = BOOT_TOOLS;
208 else
209 mode = BOOT_ROCKBOX;
210 redraw = true;
94 } 211 }
95 else if(nwz_key_event_get_keycode(&evt) == NWZ_KEY_BACK) 212 if(key_code == NWZ_KEY_RIGHT || key_code == NWZ_KEY_UP)
96 { 213 {
97 mode = BOOT_TOOLS; 214 if(mode == BOOT_ROCKBOX)
98 break; 215 mode = BOOT_TOOLS;
216 else if(mode == BOOT_OF)
217 mode = BOOT_ROCKBOX;
218 else
219 mode = BOOT_OF;
220 redraw = true;
99 } 221 }
100 } 222 }
223 /* switch back to page 0 */
224 nwz_fb_set_page(fb_fd, 0);
101 nwz_key_close(input_fd); 225 nwz_key_close(input_fd);
226 nwz_fb_close(fb_fd);
102 return mode; 227 return mode;
103} 228}
104 229
105static char *boot_rb_argv[] = 230static char *boot_rb_argv[] =
106{ 231{
107 "lcdmsg", 232 "rockbox.sony",
108 "-c",
109 "-l",
110 "0,3",
111 "Hello from RB",
112 NULL 233 NULL
113}; 234};
114 235
115int NWZ_TOOL_MAIN(all_tools)(int argc, char **argv); 236int NWZ_TOOL_MAIN(all_tools)(int argc, char **argv);
116 237
238void error_screen(const char *msg)
239{
240 nwz_lcdmsg(true, 0, 0, msg);
241 sleep(3);
242}
243
244void create_sony_logo(void)
245{
246 for(int y = 0; y < ICON_HEIGHT; y++)
247 for(int x = 0; x < ICON_WIDTH; x++)
248 sony_icon[y * ICON_WIDTH + x] = 0xf81f;
249}
250
117int main(int argc, char **argv) 251int main(int argc, char **argv)
118{ 252{
119 /* make sure backlight is on and we are running the standard lcd mode */ 253 /* make sure backlight is on and we are running the standard lcd mode */
@@ -125,9 +259,20 @@ int main(int argc, char **argv)
125 bl.level = NWZ_FB_BL_MAX_LEVEL; 259 bl.level = NWZ_FB_BL_MAX_LEVEL;
126 nwz_fb_set_brightness(fb_fd, &bl); 260 nwz_fb_set_brightness(fb_fd, &bl);
127 nwz_fb_set_standard_mode(fb_fd); 261 nwz_fb_set_standard_mode(fb_fd);
262 /* get resolution */
263 /* we also need to get the native resolution */
264 if(nwz_fb_get_resolution(fb_fd, &width, &height, &bpp) != 0)
265 {
266 /* safe one */
267 width = 240;
268 height = 320;
269 bpp = 16;
270 }
128 nwz_fb_close(fb_fd); 271 nwz_fb_close(fb_fd);
129 } 272 }
130 nwz_lcdmsg(true, 0, 0, "dualboot"); 273 /* extract logo */
274 if(!extract_sony_logo())
275 create_sony_logo();
131 /* run all tools menu */ 276 /* run all tools menu */
132 enum boot_mode mode = get_boot_mode(); 277 enum boot_mode mode = get_boot_mode();
133 if(mode == BOOT_TOOLS) 278 if(mode == BOOT_TOOLS)
@@ -137,19 +282,19 @@ int main(int argc, char **argv)
137 } 282 }
138 else if(mode == BOOT_ROCKBOX) 283 else if(mode == BOOT_ROCKBOX)
139 { 284 {
140 /* boot rockox */ 285 /* Rockbox expects /.rockbox to contain themes, rocks, etc, but we
141 nwz_lcdmsg(true, 0, 3, "Booting rockbox..."); 286 * cannot easily create this symlink because the root filesystem is
142 /* in the future, we will run rockbox here, for now we just print a 287 * mounted read-only. Although we could remount it read-write temporarily,
143 * message */ 288 * this is neededlessly complicated and we defer this job to the dualboot
144 execvp("/usr/local/bin/lcdmsg", boot_rb_argv); 289 * install script */
290 execvp("/contents/.rockbox/rockbox.sony", boot_rb_argv);
145 /* fallback to OF in case of failure */ 291 /* fallback to OF in case of failure */
146 nwz_lcdmsg(false, 0, 4, "failed."); 292 error_screen("Cannot boot Rockbox");
147 sleep(5); 293 sleep(5);
148 } 294 }
149 /* boot OF */ 295 /* boot OF */
150 nwz_lcdmsg(true, 0, 3, "Booting OF...");
151 execvp("/usr/local/bin/SpiderApp.of", argv); 296 execvp("/usr/local/bin/SpiderApp.of", argv);
152 nwz_lcdmsg(false, 0, 4, "failed."); 297 error_screen("Cannot boot OF");
153 sleep(5); 298 sleep(5);
154 /* if we reach this point, everything failed, so return an error so that 299 /* if we reach this point, everything failed, so return an error so that
155 * sysmgrd knows something is wrong */ 300 * sysmgrd knows something is wrong */
diff --git a/utils/nwztools/plattools/nwz_lib.c b/utils/nwztools/plattools/nwz_lib.c
index 70dc070fc9..a81d352ff0 100644
--- a/utils/nwztools/plattools/nwz_lib.c
+++ b/utils/nwztools/plattools/nwz_lib.c
@@ -156,6 +156,13 @@ void nwz_display_text(int x, int y, bool big_font, nwz_color_t foreground_col,
156 nwz_run(path_display, args, true); 156 nwz_run(path_display, args, true);
157} 157}
158 158
159void nwz_display_text_center(int width, int y, bool big_font, nwz_color_t fg,
160 nwz_color_t bg, int alpha, const char *text)
161{
162 int txt_w = NWZ_FONT_W(big_font) * strlen(text);
163 nwz_display_text((width - txt_w) / 2, y, big_font, fg, bg, alpha, text);
164}
165
159void nwz_display_textf(int x, int y, bool big_font, nwz_color_t foreground_col, 166void nwz_display_textf(int x, int y, bool big_font, nwz_color_t foreground_col,
160 nwz_color_t background_col, int alpha, const char *fmt, ...) 167 nwz_color_t background_col, int alpha, const char *fmt, ...)
161{ 168{
@@ -167,6 +174,17 @@ void nwz_display_textf(int x, int y, bool big_font, nwz_color_t foreground_col,
167 nwz_display_text(x, y, big_font, foreground_col, background_col, alpha, buffer); 174 nwz_display_text(x, y, big_font, foreground_col, background_col, alpha, buffer);
168} 175}
169 176
177void nwz_display_textf_center(int width, int y, bool big_font, nwz_color_t fg,
178 nwz_color_t bg, int alpha, const char *fmt, ...)
179{
180 char buffer[1024];
181 va_list args;
182 va_start(args, fmt);
183 vsprintf(buffer, fmt, args);
184 va_end(args);
185 nwz_display_text_center(width, y, big_font, fg, bg, alpha, buffer);
186}
187
170void nwz_display_bitmap(int x, int y, const char *file, int left, int top, 188void nwz_display_bitmap(int x, int y, const char *file, int left, int top,
171 int width, int height, nwz_color_t key_col, int bmp_alpha) 189 int width, int height, nwz_color_t key_col, int bmp_alpha)
172{ 190{
@@ -319,27 +337,32 @@ int nwz_fb_set_brightness(int fd, struct nwz_fb_brightness *bl)
319 return 1; 337 return 1;
320} 338}
321 339
322int nwz_fb_set_standard_mode(int fd) 340int nwz_fb_set_page(int fd, int page)
323{ 341{
324 /* disable timer (apparently useless with LCD) */ 342 /* set page mode to no transparency and no rotation */
325 struct nwz_fb_update_timer update_timer;
326 update_timer.timerflag = NWZ_FB_TIMER_OFF;
327 update_timer.timeout = NWZ_FB_DEFAULT_TIMEOUT;
328 if(ioctl(fd, NWZ_FB_UPDATE_TIMER, &update_timer) < 0)
329 return -1;
330 /* set page 0 mode to no transparency and no rotation */
331 struct nwz_fb_image_info mode_info; 343 struct nwz_fb_image_info mode_info;
332 mode_info.tc_enable = 0; 344 mode_info.tc_enable = 0;
333 mode_info.t_color = 0; 345 mode_info.t_color = 0;
334 mode_info.alpha = 0; 346 mode_info.alpha = 0;
335 mode_info.rot = 0; 347 mode_info.rot = 0;
336 mode_info.page = 0; 348 mode_info.page = page;
337 mode_info.update = NWZ_FB_ONLY_2D_MODE; 349 mode_info.update = NWZ_FB_ONLY_2D_MODE;
338 if(ioctl(fd, NWZ_FB_UPDATE, &mode_info) < 0) 350 if(ioctl(fd, NWZ_FB_UPDATE, &mode_info) < 0)
339 return -2; 351 return -2;
340 return 0; 352 return 0;
341} 353}
342 354
355int nwz_fb_set_standard_mode(int fd)
356{
357 /* disable timer (apparently useless with LCD) */
358 struct nwz_fb_update_timer update_timer;
359 update_timer.timerflag = NWZ_FB_TIMER_OFF;
360 update_timer.timeout = NWZ_FB_DEFAULT_TIMEOUT;
361 if(ioctl(fd, NWZ_FB_UPDATE_TIMER, &update_timer) < 0)
362 return -1;
363 return nwz_fb_set_page(fd, 0);
364}
365
343int nwz_fb_get_resolution(int fd, int *x, int *y, int *bpp) 366int nwz_fb_get_resolution(int fd, int *x, int *y, int *bpp)
344{ 367{
345 struct fb_var_screeninfo vinfo; 368 struct fb_var_screeninfo vinfo;
@@ -354,6 +377,11 @@ int nwz_fb_get_resolution(int fd, int *x, int *y, int *bpp)
354 return 0; 377 return 0;
355} 378}
356 379
380void *nwz_fb_mmap(int fd, int offset, int size)
381{
382 return mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (off_t)offset);
383}
384
357int nwz_adc_open(void) 385int nwz_adc_open(void)
358{ 386{
359 return open(NWZ_ADC_DEV, O_RDONLY); 387 return open(NWZ_ADC_DEV, O_RDONLY);
diff --git a/utils/nwztools/plattools/nwz_lib.h b/utils/nwztools/plattools/nwz_lib.h
index 18d7f9dd07..23bb80986d 100644
--- a/utils/nwztools/plattools/nwz_lib.h
+++ b/utils/nwztools/plattools/nwz_lib.h
@@ -32,6 +32,7 @@
32#include <fcntl.h> 32#include <fcntl.h>
33#include <string.h> 33#include <string.h>
34#include <stdlib.h> 34#include <stdlib.h>
35#include <sys/mman.h>
35 36
36#include "nwz_keys.h" 37#include "nwz_keys.h"
37#include "nwz_fb.h" 38#include "nwz_fb.h"
@@ -72,11 +73,19 @@ typedef int nwz_color_t;
72#define NWZ_COLOR_GREEN(col) (((col) >> 8) & 0xff) 73#define NWZ_COLOR_GREEN(col) (((col) >> 8) & 0xff)
73#define NWZ_COLOR_BLUE(col) ((col) & 0xff) 74#define NWZ_COLOR_BLUE(col) ((col) & 0xff)
74#define NWZ_COLOR_NO_KEY (1 << 24) 75#define NWZ_COLOR_NO_KEY (1 << 24)
76
77#define NWZ_FONT_W(big_font) ((big_font) ? 14 : 8)
78#define NWZ_FONT_H(big_font) ((big_font) ? 24 : 14)
79
75void nwz_display_clear(nwz_color_t color); 80void nwz_display_clear(nwz_color_t color);
76void nwz_display_text(int x, int y, bool big_font, nwz_color_t foreground_col, 81void nwz_display_text(int x, int y, bool big_font, nwz_color_t foreground_col,
77 nwz_color_t background_col, int background_alpha, const char *text); 82 nwz_color_t background_col, int background_alpha, const char *text);
83void nwz_display_text_center(int width, int y, bool big_font, nwz_color_t foreground_col,
84 nwz_color_t background_col, int background_alpha, const char *text);
78void nwz_display_textf(int x, int y, bool big_font, nwz_color_t foreground_col, 85void nwz_display_textf(int x, int y, bool big_font, nwz_color_t foreground_col,
79 nwz_color_t background_col, int background_alpha, const char *fmt, ...); 86 nwz_color_t background_col, int background_alpha, const char *fmt, ...);
87void nwz_display_textf_center(int width, int y, bool big_font, nwz_color_t foreground_col,
88 nwz_color_t background_col, int background_alpha, const char *fmt, ...);
80void nwz_display_bitmap(int x, int y, const char *file, int left, int top, 89void nwz_display_bitmap(int x, int y, const char *file, int left, int top,
81 int width, int height, nwz_color_t key, int bmp_alpha); 90 int width, int height, nwz_color_t key, int bmp_alpha);
82 91
@@ -113,6 +122,10 @@ int nwz_fb_set_brightness(int fd, struct nwz_fb_brightness *bl);
113/* setup framebuffer to its standard mode: LCD output, page 0, no transparency 122/* setup framebuffer to its standard mode: LCD output, page 0, no transparency
114 * and no rotation, 2D only updates */ 123 * and no rotation, 2D only updates */
115int nwz_fb_set_standard_mode(int fd); 124int nwz_fb_set_standard_mode(int fd);
125/* change framebuffer page and update screen */
126int nwz_fb_set_page(int fd, int page);
127/* map framebuffer */
128void *nwz_fb_mmap(int fd, int offset, int size);
116 129
117/* open adc device */ 130/* open adc device */
118int nwz_adc_open(void); 131int nwz_adc_open(void);
diff --git a/utils/nwztools/scripts/install_dualboot.sh b/utils/nwztools/scripts/install_dualboot.sh
index ece5b9e3a3..08c24b7b5f 100644
--- a/utils/nwztools/scripts/install_dualboot.sh
+++ b/utils/nwztools/scripts/install_dualboot.sh
@@ -10,7 +10,6 @@ nvpflag fup 0xFFFFFFFF
10# FIXME document this 10# FIXME document this
11# 11#
12 12
13
14# go to /tmp 13# go to /tmp
15cd /tmp 14cd /tmp
16 15
@@ -30,6 +29,9 @@ if [ "$?" != 0 ]; then
30 exit 0 29 exit 0
31fi 30fi
32 31
32# redirect all output to a log file
33exec > "$CONTENTS/install_dualboot_log.txt" 2>&1
34
33# import constants 35# import constants
34. /install_script/constant.txt 36. /install_script/constant.txt
35_UPDATE_FN_=`nvpstr ufn` 37_UPDATE_FN_=`nvpstr ufn`
@@ -66,6 +68,7 @@ fi
66lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,9 "Install rockbox" 68lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,9 "Install rockbox"
67fwpchk -f /contents/$_UPDATE_FN_.UPG -c -1 $SPIDERAPP_PATH 69fwpchk -f /contents/$_UPDATE_FN_.UPG -c -1 $SPIDERAPP_PATH
68if [ "$?" != 0 ]; then 70if [ "$?" != 0 ]; then
71 umount "$ROOTFS_TMP_DIR"
69 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: no file to extract" 72 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: no file to extract"
70 sleep 3 73 sleep 3
71 exit 0 74 exit 0
@@ -74,40 +77,45 @@ fi
74# make it executable and change user/group 77# make it executable and change user/group
75chmod 775 $SPIDERAPP_PATH 78chmod 775 $SPIDERAPP_PATH
76if [ "$?" != 0 ]; then 79if [ "$?" != 0 ]; then
80 umount "$ROOTFS_TMP_DIR"
77 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot make it executable" 81 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot make it executable"
78 sleep 3 82 sleep 3
79 exit 0 83 exit 0
80fi 84fi
81chown 500:500 $SPIDERAPP_PATH 85chown 500:500 $SPIDERAPP_PATH
82if [ "$?" != 0 ]; then 86if [ "$?" != 0 ]; then
87 umount "$ROOTFS_TMP_DIR"
83 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot change owner" 88 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot change owner"
84 sleep 3 89 sleep 3
85 exit 0 90 exit 0
86fi 91fi
87 92
88# # change main application 93# create a symlink from /.rockbox to /contents/.rockbox (see dualboot code
89# lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,9 "Modify app list" 94# for why)
90# sed -i 's/Rockbox/SpiderApp/' $ROOTFS_TMP_DIR/etc/AppList.conf 95lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,10 "Create rockbox symlink"
91# if [ "$?" != 0 ]; then 96rm -f "$ROOTFS_TMP_DIR/.rockbox"
92# lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,14 "ERROR: sed failed" 97ln -s "$CONTENTS/.rockbox" "$ROOTFS_TMP_DIR/.rockbox"
93# sleep 3 98if [ "$?" != 0 ]; then
94# exit 0 99 umount "$ROOTFS_TMP_DIR"
95# fi 100 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot create rockbox symlink"
96# # and fix ownership 101 sleep 3
97# chown 500:500 $ROOTFS_TMP_DIR/etc/AppList.conf 102 exit 0
98# if [ "$?" != 0 ]; then 103fi
99# lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,14 "ERROR: cannot change group" 104
100# sleep 3 105# change user/group
101# exit 0 106chown -h 500:500 "$ROOTFS_TMP_DIR/.rockbox"
102# fi 107if [ "$?" != 0 ]; then
103cat $ROOTFS_TMP_DIR/etc/AppList.conf >$CONTENTS/AppList.conf 108 umount "$ROOTFS_TMP_DIR"
104ls -l $ROOTFS_TMP_DIR/usr/local/bin/ >$CONTENTS/ls.txt 109 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot change symlink owner"
105ls -l $ROOTFS_TMP_DIR/etc/ >$CONTENTS/ls2.txt 110 sleep 3
111 exit 0
112fi
106 113
107# unmount root partition 114# unmount root partition
108lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,10 "Unmount root filesystem" 115lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,11 "Unmount root filesystem"
109sync 116sync
110if [ "$?" != 0 ]; then 117if [ "$?" != 0 ]; then
118 umount "$ROOTFS_TMP_DIR"
111 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: sync failed" 119 lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: sync failed"
112 sleep 3 120 sleep 3
113 exit 0 121 exit 0
@@ -125,5 +133,6 @@ lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "Rebooting in 3 seconds."
125sleep 3 133sleep 3
126sync 134sync
127 135
136echo "Installation successful"
128# finish 137# finish
129exit 0 138exit 0