summaryrefslogtreecommitdiffstats
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 @@
+TOOLS_DIR=../../../../tools/
+all: rockbox_icon.h tools_icon.h
+
+%.h: %.bmp
+ $(TOOLS_DIR)/bmp2rb -f 4 $^ > $@
+
+clean:
+ 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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<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">
+ <defs id="defs5678">
+ <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"/>
+ <linearGradient y2="0" x2="28" y1="57.5" x1="28" gradientUnits="userSpaceOnUse" id="linearGradient8081">
+ <stop id="stop8083" style="stop-color:#ffd700;stop-opacity:1;" offset="0"/>
+ <stop offset="0.25242719" style="stop-color:#ffea00;stop-opacity:1;" id="stop8087"/>
+ <stop id="stop8085" style="stop-color:#b06d00;stop-opacity:1;" offset="1"/>
+ </linearGradient>
+ <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"/>
+ <linearGradient id="linearGradient6924">
+ <stop style="stop-color:#ffffff;stop-opacity:0.73885351;" offset="0" id="stop6926"/>
+ <stop id="stop10395" offset="0.24999999" style="stop-color:#ffffff;stop-opacity:0;"/>
+ <stop id="stop10393" offset="0.5" style="stop-color:#cccccc;stop-opacity:0;"/>
+ <stop style="stop-color:#9a9a9a;stop-opacity:1;" offset="1" id="stop6928"/>
+ </linearGradient>
+ <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)"/>
+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient4640" gradientUnits="userSpaceOnUse" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308"/>
+ <filter inkscape:collect="always" x="-0.10337079" width="1.2067416" y="-0.10337079" height="1.2067416" id="filter4626">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.42488862" id="feGaussianBlur4628"/>
+ </filter>
+ <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4632">
+ <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"/>
+ </clipPath>
+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient4604" gradientUnits="userSpaceOnUse" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308"/>
+ <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"/>
+ <filter inkscape:collect="always" id="filter4584">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="1.0829419" id="feGaussianBlur4586"/>
+ </filter>
+ <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4588">
+ <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"/>
+ </clipPath>
+ <filter inkscape:collect="always" id="filter4551">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.15501048" id="feGaussianBlur4553"/>
+ </filter>
+ <linearGradient inkscape:collect="always" id="linearGradient4529">
+ <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop4531"/>
+ <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop4533"/>
+ </linearGradient>
+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient4537" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308" gradientUnits="userSpaceOnUse"/>
+ <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)"/>
+ <linearGradient inkscape:collect="always" id="linearGradient4509">
+ <stop style="stop-color:#ffe900;stop-opacity:1;" offset="0" id="stop4511"/>
+ <stop style="stop-color:#ffe900;stop-opacity:0;" offset="1" id="stop4513"/>
+ </linearGradient>
+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4509" id="linearGradient4515" x1="75.585938" y1="85.083641" x2="89.453125" y2="79.224266" gradientUnits="userSpaceOnUse"/>
+ <filter inkscape:collect="always" id="filter4501">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.48665741" id="feGaussianBlur4503"/>
+ </filter>
+ <linearGradient inkscape:collect="always" id="linearGradient4465">
+ <stop style="stop-color:#ffa300;stop-opacity:1;" offset="0" id="stop4467"/>
+ <stop style="stop-color:#ffa300;stop-opacity:0;" offset="1" id="stop4469"/>
+ </linearGradient>
+ <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)"/>
+ <linearGradient inkscape:collect="always" id="linearGradient4434">
+ <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop4436"/>
+ <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop4438"/>
+ </linearGradient>
+ <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"/>
+ <filter inkscape:collect="always" id="filter4404">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.15249406" id="feGaussianBlur4406"/>
+ </filter>
+ <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"/>
+ <linearGradient inkscape:collect="always" id="linearGradient4322">
+ <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop4324"/>
+ <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop4326"/>
+ </linearGradient>
+ <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"/>
+ <filter inkscape:collect="always" x="-0.074906364" width="1.1498127" y="-0.11235955" height="1.224719" id="filter4238">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="1.1235955" id="feGaussianBlur4240"/>
+ </filter>
+ <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4242">
+ <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"/>
+ </clipPath>
+ <linearGradient id="linearGradient2575" gradientUnits="userSpaceOnUse" x1="28" y1="57.5" x2="28" y2="0">
+ <stop offset="0" style="stop-color:#FFEA00" id="stop2577"/>
+ <stop offset="1" style="stop-color:#cd8000;stop-opacity:1;" id="stop2579"/>
+ </linearGradient>
+ <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)"/>
+ <linearGradient id="linearGradient6511">
+ <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop6513"/>
+ <stop style="stop-color:#393939;stop-opacity:1;" offset="1" id="stop6515"/>
+ </linearGradient>
+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient6511" id="linearGradient6517" x1="38.074299" y1="4.2695875" x2="38.074299" y2="-10.42289" gradientUnits="userSpaceOnUse"/>
+ <linearGradient id="linearGradient3916">
+ <stop style="stop-color:#d3d6d6;stop-opacity:1;" offset="0" id="stop3918"/>
+ <stop style="stop-color:#f7f7f7;stop-opacity:1;" offset="1" id="stop3921"/>
+ </linearGradient>
+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient3916" id="linearGradient3943" gradientUnits="userSpaceOnUse" x1="34.165016" y1="4.863008" x2="34.165016" y2="-14.006344"/>
+ <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"/>
+ <filter inkscape:collect="always" x="-0.26177245" width="1.5235449" y="-0.075698018" height="1.151396" id="filter3838">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.41890191" id="feGaussianBlur3840"/>
+ </filter>
+ <filter inkscape:collect="always" x="-0.26177242" width="1.5235448" y="-0.075698018" height="1.151396" id="filter3834">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.41890191" id="feGaussianBlur3836"/>
+ </filter>
+ <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3850">
+ <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"/>
+ </clipPath>
+ <linearGradient id="linearGradient3904">
+ <stop style="stop-color:#141515;stop-opacity:1;" offset="0" id="stop3906"/>
+ <stop style="stop-color:#535557;stop-opacity:0;" offset="1" id="stop3908"/>
+ </linearGradient>
+ <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"/>
+ <linearGradient inkscape:collect="always" id="linearGradient3220">
+ <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3222"/>
+ <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3224"/>
+ </linearGradient>
+ <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"/>
+ <radialGradient gradientUnits="userSpaceOnUse" r="139.55859" cy="112.3047" cx="102" id="radialGradient9613">
+ <stop id="stop9615" style="stop-color:#535557" offset="0"/>
+ <stop id="stop9617" style="stop-color:#898A8C" offset="0.13804179"/>
+ <stop id="stop9619" style="stop-color:#ECECEC" offset="0.20296688"/>
+ <stop id="stop9621" style="stop-color:#FAFAFA" offset="0.33539036"/>
+ <stop id="stop9623" style="stop-color:#FFFFFF" offset="0.39464113"/>
+ <stop id="stop9625" style="stop-color:#FAFAFA" offset="0.5313"/>
+ <stop id="stop9627" style="stop-color:#EBECEC" offset="0.8449"/>
+ <stop id="stop9629" style="stop-color:#E1E2E3" offset="1"/>
+ </radialGradient>
+ <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"/>
+ <filter inkscape:collect="always" id="filter4503">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.43775175" id="feGaussianBlur4505"/>
+ </filter>
+ <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4092">
+ <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"/>
+ </clipPath>
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="11.9185" y1="119.0576" x2="98.418404" y2="44.057598">
+ <stop offset="0" style="stop-color:#C9C9C9" id="stop49"/>
+ <stop offset="0.0229" style="stop-color:#B2B2B2" id="stop51"/>
+ <stop offset="0.05" style="stop-color:#9F9F9F" id="stop53"/>
+ <stop offset="0.0819" style="stop-color:#929292" id="stop55"/>
+ <stop offset="0.1225" style="stop-color:#8A8A8A" id="stop57"/>
+ <stop offset="0.2012" style="stop-color:#888888" id="stop59"/>
+ <stop offset="1" style="stop-color:#686868;stop-opacity:1;" id="stop63"/>
+ </linearGradient>
+ <linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="31.4995" y1="80.0439" x2="32.347698" y2="80.671898" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0" style="stop-color:#000000" id="stop183"/>
+ <stop offset="1" style="stop-color:#000000;stop-opacity:0;" id="stop185"/>
+ </linearGradient>
+ <linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="23.9844" y1="120.7646" x2="12.7283" y2="109.8655" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0" style="stop-color:#EEEEEE" id="stop176"/>
+ <stop offset="1" style="stop-color:#535353;stop-opacity:1;" id="stop178"/>
+ </linearGradient>
+ <linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="18.776899" y1="129.5986" x2="18.776899" y2="114.6055" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0" style="stop-color:#000000" id="stop169"/>
+ <stop offset="1" style="stop-color:#000000;stop-opacity:0;" id="stop171"/>
+ </linearGradient>
+ <radialGradient id="XMLID_8_" cx="64.988297" cy="15.9429" r="19.6182" gradientUnits="userSpaceOnUse" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop162"/>
+ <stop offset="1" style="stop-color:#888A85" id="stop164"/>
+ </radialGradient>
+ <linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="40.711899" y1="75.171898" x2="48.5495" y2="80.899803" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0.213" style="stop-color:#555753" id="stop155"/>
+ <stop offset="1" style="stop-color:#000000" id="stop157"/>
+ </linearGradient>
+ <linearGradient id="path30758_1_" gradientUnits="userSpaceOnUse" x1="16.7803" y1="80.697304" x2="67.723602" y2="80.697304" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0" style="stop-color:#888888" id="stop149"/>
+ <stop offset="0.8935" style="stop-color:#DDDDDD" id="stop151"/>
+ </linearGradient>
+ <linearGradient id="path34280_1_" gradientUnits="userSpaceOnUse" x1="93.023399" y1="39.3867" x2="93.023399" y2="25.928699" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0" style="stop-color:#555555" id="stop141"/>
+ <stop offset="0.3965" style="stop-color:#888888" id="stop143"/>
+ <stop offset="1" style="stop-color:#555555" id="stop145"/>
+ </linearGradient>
+ <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)">
+ <stop offset="0" style="stop-color:#888888" id="stop135"/>
+ <stop offset="1" style="stop-color:#555555" id="stop137"/>
+ </linearGradient>
+ <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">
+ <stop offset="0" style="stop-color:#888A85" id="stop127"/>
+ <stop offset="0.6213" style="stop-color:#FFFFFF" id="stop129"/>
+ <stop offset="1" style="stop-color:#555753" id="stop131"/>
+ </radialGradient>
+ <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">
+ <stop offset="0" style="stop-color:#888A85" id="stop119"/>
+ <stop offset="0.6213" style="stop-color:#FFFFFF" id="stop121"/>
+ <stop offset="1" style="stop-color:#555753" id="stop123"/>
+ </radialGradient>
+ <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">
+ <stop offset="0" style="stop-color:#888A85" id="stop111"/>
+ <stop offset="0.6213" style="stop-color:#FFFFFF" id="stop113"/>
+ <stop offset="1" style="stop-color:#555753" id="stop115"/>
+ </radialGradient>
+ <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">
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop103"/>
+ <stop offset="0.5266" style="stop-color:#BABDB6" id="stop105"/>
+ <stop offset="1" style="stop-color:#888A85" id="stop107"/>
+ </radialGradient>
+ <radialGradient id="rect10551_3_" cx="78.776398" cy="44.608398" r="14.3205" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#2E3436" id="stop95"/>
+ <stop offset="0.72189999" style="stop-color:#000000;stop-opacity:1;" id="stop97"/>
+ <stop offset="1" style="stop-color:#2E3436" id="stop99"/>
+ </radialGradient>
+ <linearGradient id="rect10551_1_" gradientUnits="userSpaceOnUse" x1="77.216797" y1="44.765598" x2="73.449203" y2="30.555201">
+ <stop offset="0.7219" style="stop-color:#DDDDDD" id="stop89"/>
+ <stop offset="1" style="stop-color:#EEEEEC" id="stop91"/>
+ </linearGradient>
+ <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">
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop82"/>
+ <stop id="stop13256" style="stop-color:#c3c4c2;stop-opacity:1;" offset="0.5"/>
+ <stop offset="1" style="stop-color:#000000;stop-opacity:1;" id="stop84"/>
+ </radialGradient>
+ <linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="15.7207" y1="125.7861" x2="24.9356" y2="108.3428" gradientTransform="translate(-80,0)">
+ <stop offset="0" style="stop-color:#000000" id="stop75"/>
+ <stop offset="0.8935" style="stop-color:#FFFFFF" id="stop77"/>
+ </linearGradient>
+ <linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="40.527802" y1="55.75" x2="52.981899" y2="64.646004" gradientTransform="translate(-80,0)">
+ <stop offset="0" style="stop-color:#ffffff;stop-opacity:0;" id="stop68"/>
+ <stop offset="0.8935" style="stop-color:#FFFFFF" id="stop70"/>
+ </linearGradient>
+ <linearGradient id="path2388_1_" gradientUnits="userSpaceOnUse" x1="14.9214" y1="124.6768" x2="107.7549" y2="-17.989599" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0" style="stop-color:#DDDDDD" id="stop32"/>
+ <stop offset="0.6864" style="stop-color:#888888" id="stop34"/>
+ <stop offset="0.8935" style="stop-color:#DDDDDD" id="stop36"/>
+ </linearGradient>
+ <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">
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop26"/>
+ <stop offset="1" style="stop-color:#3E3E3E" id="stop28"/>
+ </radialGradient>
+ <linearGradient id="XMLID_1_" gradientUnits="userSpaceOnUse" x1="92.627899" y1="26.589399" x2="104.5325" y2="31.2349" gradientTransform="translate(229.83849,405.96228)">
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop19"/>
+ <stop offset="0.6391" style="stop-color:#888888" id="stop21"/>
+ </linearGradient>
+ <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)">
+ <stop offset="0" style="stop-color:#555555" id="stop5"/>
+ <stop offset="0.6864" style="stop-color:#888888" id="stop7"/>
+ </linearGradient>
+ <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"/>
+ <mask maskUnits="userSpaceOnUse" id="mask10545">
+ <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"/>
+ </mask>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <linearGradient inkscape:collect="always" xlink:href="#rect10551_1_" id="linearGradient11396" gradientUnits="userSpaceOnUse" x1="77.216797" y1="44.765598" x2="73.449203" y2="30.555201"/>
+ <radialGradient inkscape:collect="always" xlink:href="#rect10551_3_" id="radialGradient11398" gradientUnits="userSpaceOnUse" cx="78.776398" cy="44.608398" r="14.3205"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <linearGradient inkscape:collect="always" xlink:href="#XMLID_3_" id="linearGradient11424" gradientUnits="userSpaceOnUse" x1="11.9185" y1="119.0576" x2="98.418404" y2="44.057598"/>
+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient11510" gradientUnits="userSpaceOnUse" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308"/>
+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4529" id="linearGradient11512" gradientUnits="userSpaceOnUse" x1="9.3031492" y1="133.25163" x2="-5.8540711" y2="130.59308"/>
+ <filter inkscape:collect="always" id="filter11957">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="2.339831" id="feGaussianBlur11959"/>
+ </filter>
+ <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"/>
+ <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"/>
+ <linearGradient inkscape:collect="always" xlink:href="#XMLID_3_" id="linearGradient12051" gradientUnits="userSpaceOnUse" x1="11.9185" y1="119.0576" x2="98.418404" y2="44.057598"/>
+ <filter inkscape:collect="always" id="filter12490">
+ <feGaussianBlur inkscape:collect="always" stdDeviation="2.3509538" id="feGaussianBlur12492"/>
+ </filter>
+ </defs>
+ <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"/>
+ <metadata id="metadata5681">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g inkscape:label="Livello 1" inkscape:groupmode="layer" id="layer1">
+ <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"/>
+ <g id="g11357" transform="matrix(1.0223499,0.1802679,-0.1801715,1.0218034,-142.50883,-466.04399)">
+ <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"/>
+ <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"/>
+ <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 "/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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_"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ </g>
+ <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"/>
+ <g id="g10397" transform="matrix(0.9660937,-2.5302336e-2,2.3546854e-2,0.9608617,2.3338765,6.1294086)">
+ <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"/>
+ <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"/>
+ <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)"/>
+ <g transform="matrix(0.8167445,-0.8167445,0.8167445,0.8167445,5.2761549,23.749521)" clip-path="url(#clipPath3850)" id="g3842">
+ <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"/>
+ <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)"/>
+ <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"/>
+ </g>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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)"/>
+ <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"/>
+ <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"/>
+ <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)"/>
+ <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"/>
+ <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)"/>
+ <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"/>
+ <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"/>
+ <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)"/>
+ <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)"/>
+ <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)"/>
+ <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"/>
+ <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)"/>
+ <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"/>
+ <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)"/>
+ <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)"/>
+ </g>
+ </g>
+</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 @@
+#!/bin/bash
+#
+# This script contains the code used to produce all the images.
+# Because of the variety of tools needed to achieve that, the result is also
+# included in the repository but this makes it easier to modify the data
+# to add more content
+#
+
+# path to root of repository
+ROOT_DIR=../../../../
+
+# final resolution
+NWZ_WIDTH=130
+NWZ_HEIGHT=130
+
+# path to rockbox icon
+RB_ICON_PATH=$ROOT_DIR/docs/logo/rockbox-icon.svg
+# path to tools icon (currently stolen from KDE Oxygen icon set)
+TOOL_ICON_PATH=Oxygen480-categories-preferences-system.svg
+
+# convert_svg width height input output
+function convert_svg
+{
+ local width="$1"
+ local height="$2"
+ local input="$3"
+ local output="$4"
+ TMP=tmp.png
+ # convert from SVG to PNG
+ inkscape -z -e $TMP -w $width -h $height $input
+ if [ "$?" != 0 ]; then
+ echo "SVG -> PNG conversion failed"
+ exit 1
+ fi
+ # convert from PNG to BMP, force using "version 3" because the OF don't like
+ # "recent" BMP
+ convert -channel RGB $TMP -define bmp:format=bmp3 ${output}_icon.bmp
+ if [ "$?" != 0 ]; then
+ rm -f $TMP
+ echo "PNG -> BMP conversion failed"
+ exit 1
+ fi
+ # remove temporary
+ rm -f $TMP
+}
+
+# start by creating the bitmap files from rockbox-icon.svg for all resolutions
+# we make a detour by svg because inkscape can only export to SVG
+# NOTE: we use image magick to convert to bmp but the OF tools don't like BMPv5
+# and contrary to what the documentation says, image magick tends to produce
+# those by default unless asked otherwise
+convert_svg $NWZ_WIDTH $NWZ_HEIGHT $RB_ICON_PATH rockbox
+convert_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 @@
#include "nwz_lib.h"
#include "nwz_plattools.h"
#include <time.h>
+#include <errno.h>
+
+/* all images must have the following size */
+#define ICON_WIDTH 130
+#define ICON_HEIGHT 130
+
+/* images */
+#include "data/rockbox_icon.h"
+#if BMPWIDTH_rockbox_icon != ICON_WIDTH || BMPHEIGHT_rockbox_icon != ICON_HEIGHT
+#error rockbox_icon has the wrong resolution
+#endif
+#include "data/tools_icon.h"
+#if BMPWIDTH_tools_icon != ICON_WIDTH || BMPHEIGHT_tools_icon != ICON_HEIGHT
+#error tools_icon has the wrong resolution
+#endif
+/* buffer for Sony image, filled from NVP */
+unsigned short sony_icon[ICON_WIDTH * ICON_HEIGHT];
+/* resolution */
+static int width, height, bpp;
+
+/* return icon y position (x is always centered) */
+int get_icon_y(void)
+{
+ /* adjust so that this contains the Sony logo and produces a nice logo
+ * when used with rockbox */
+ if(height == 320)
+ return 70;
+ else if(height == 320)
+ return 100;
+ else
+ return height / 2 - ICON_HEIGHT + 30; /* guess, probably won't work */
+}
+
+/* Sony logo extraction */
+bool extract_sony_logo(void)
+{
+ /* only support bpp of 16 */
+ if(bpp != 16)
+ return false;
+ /* load the entire image from the nvp */
+ int bti_size = nwz_nvp_read(NWZ_NVP_BTI, NULL);
+ if(bti_size < 0)
+ return false;
+ unsigned short *bti = malloc(bti_size);
+ if(nwz_nvp_read(NWZ_NVP_BTI, bti) != bti_size)
+ return false;
+ /* compute the offset in the image of the logo itself */
+ int x_off = (width - ICON_WIDTH) / 2; /* logo is centered horizontally */
+ int y_off = get_icon_y();
+ /* extract part of the image */
+ for(int y = 0; y < ICON_HEIGHT; y++)
+ {
+ memcpy(sony_icon + ICON_WIDTH * y,
+ bti + width * (y + y_off) + x_off, ICON_WIDTH * sizeof(unsigned short));
+ }
+ free(bti);
+ return true;
+}
/* Important Note: this bootloader is carefully written so that in case of
* error, the OF is run. This seems like the safest option since the OF is
@@ -36,13 +94,28 @@ enum boot_mode
BOOT_OF
};
+void draw_icon(int left, int top, const unsigned short *icon, unsigned short *fb_mmap)
+{
+ for(int y = 0; y < ICON_HEIGHT; y++)
+ {
+ memcpy(fb_mmap + width * (y + top) + left, icon + ICON_WIDTH * y,
+ ICON_WIDTH * sizeof(unsigned short));
+ }
+}
+
enum boot_mode get_boot_mode(void)
{
- /* get time */
- struct timeval deadline;
- if(gettimeofday(&deadline, NULL) != 0)
+ if(bpp != 16)
+ {
+ nwz_lcdmsg(true, 0, 2, "Unsupported bpp");
+ sleep(2);
+ return BOOT_OF;
+ }
+ /* open framebuffer */
+ int fb_fd = nwz_fb_open(true);
+ if(fb_fd < 0)
{
- nwz_lcdmsg(false, 0, 2, "Cannot get time");
+ nwz_lcdmsg(true, 0, 2, "Cannot open input device");
sleep(2);
return BOOT_OF;
}
@@ -50,70 +123,131 @@ enum boot_mode get_boot_mode(void)
int input_fd = nwz_key_open();
if(input_fd < 0)
{
- nwz_lcdmsg(false, 0, 2, "Cannot open input device");
+ nwz_fb_close(fb_fd);
+ nwz_lcdmsg(true, 0, 2, "Cannot open input device");
+ sleep(2);
+ return BOOT_OF;
+ }
+ int fb_size = width * height * bpp / 2;
+ void *fb_mmap = nwz_fb_mmap(fb_fd, 0, fb_size);
+ void *fb_mmap_p1 = nwz_fb_mmap(fb_fd, NWZ_FB_LCD_PAGE_OFFSET, fb_size);
+ if(fb_mmap == NULL || fb_mmap_p1 == NULL)
+ {
+ nwz_fb_close(fb_fd);
+ nwz_key_close(input_fd);
+ nwz_lcdmsg(true, 0, 2, "Cannot map framebuffer");
sleep(2);
return BOOT_OF;
}
- deadline.tv_sec += 5;
/* wait for user action */
enum boot_mode mode = BOOT_OF;
+ /* NOTE on drawing: since screen is redrawn automatically, and we invoke
+ * external programs to draw, we can't hope to fit it in the frame time
+ * and it will flicker. To avoid this, we use the fact that all programs
+ * only write to page 0. So we setup the lcd to update from page 1. When
+ * we need to update the screen, we ask it to draw from page 0, then copy
+ * page 0 to page 1 and then switch back to page 1 */
+ memset(fb_mmap_p1, 0xff, fb_size); /* clear page 1 */
+ nwz_fb_set_page(fb_fd, 1);
+ bool redraw = true;
while(true)
{
- /* get time */
- struct timeval cur_time;
- if(gettimeofday(&cur_time, NULL) != 0)
+ if(redraw)
{
- nwz_lcdmsg(false, 0, 4, "Cannot get time");
- sleep(2);
- break;
+ /* redraw screen on page 0: clear screen */
+ memset(fb_mmap, 0, fb_size);
+ /* display top text */
+ nwz_display_text_center(width, 0, true, NWZ_COLOR(255, 201, 0),
+ NWZ_COLOR(0, 0, 0), 0, "SELECT PLAYER");
+ /* display icon */
+ const unsigned short *icon = (mode == BOOT_OF) ? sony_icon :
+ (mode == BOOT_ROCKBOX) ? rockbox_icon : tools_icon;
+ draw_icon((width - ICON_WIDTH) / 2, get_icon_y(), icon, fb_mmap);
+ /* display bottom description */
+ const char *desc = (mode == BOOT_OF) ? "SONY" :
+ (mode == BOOT_ROCKBOX) ? "ROCKBOX" : "DEBUG TOOLS";
+ nwz_display_text_center(width, get_icon_y() + ICON_HEIGHT + 30, true,
+ NWZ_COLOR(255, 201, 0), NWZ_COLOR(0, 0, 0), 0, desc);
+ /* display arrows */
+ int arrow_y = get_icon_y() + ICON_HEIGHT / 2 - NWZ_FONT_H(true) / 2;
+ nwz_display_text(NWZ_FONT_W(true) / 2, arrow_y, true,
+ NWZ_COLOR(255, 201, 0), NWZ_COLOR(0, 0, 0), 0, "<");
+ nwz_display_text(width - 3 * NWZ_FONT_W(true) / 2, arrow_y, true,
+ NWZ_COLOR(255, 201, 0), NWZ_COLOR(0, 0, 0), 0, ">");
+ /* switch to page 1 */
+ nwz_fb_set_page(fb_fd, 0);
+ /* copy page 0 to page 1 */
+ memcpy(fb_mmap_p1, fb_mmap, fb_size);
+ /* switch back to page 1 */
+ nwz_fb_set_page(fb_fd, 1);
+
+ redraw = false;
}
- /* check timeout */
- if(cur_time.tv_sec > deadline.tv_sec)
- break;
- if(cur_time.tv_sec == deadline.tv_sec && cur_time.tv_usec >= deadline.tv_usec)
- break;
- /* print message */
- int sec_left = deadline.tv_sec - cur_time.tv_sec;
- sec_left += (deadline.tv_usec - cur_time.tv_usec + 999999) / 1000000; /* round up */
- nwz_lcdmsgf(false, 0, 2, "Booting OF in %d seconds ", sec_left);
- nwz_lcdmsg(false, 0, 3, "Press BACK to run tools");
- nwz_lcdmsg(false, 0, 3, "Press PLAY to boot RB");
- /* wait for a key (1s) */
- int ret = nwz_key_wait_event(input_fd, 1000000);
+
+ /* wait for a key */
+ int ret = nwz_key_wait_event(input_fd, -1);
if(ret != 1)
continue;
struct input_event evt;
if(nwz_key_read_event(input_fd, &evt) != 1)
continue;
+ /* only act on release */
if(nwz_key_event_is_press(&evt))
continue;
- if(nwz_key_event_get_keycode(&evt) == NWZ_KEY_PLAY)
- {
- mode = BOOT_ROCKBOX;
+ int key_code = nwz_key_event_get_keycode(&evt);
+ /* play -> stop loop and return mode */
+ if(key_code == NWZ_KEY_PLAY)
break;
+ /* left/right/up/down: change mode */
+ if(key_code == NWZ_KEY_LEFT || key_code == NWZ_KEY_DOWN)
+ {
+ if(mode == BOOT_ROCKBOX)
+ mode = BOOT_OF;
+ else if(mode == BOOT_OF)
+ mode = BOOT_TOOLS;
+ else
+ mode = BOOT_ROCKBOX;
+ redraw = true;
}
- else if(nwz_key_event_get_keycode(&evt) == NWZ_KEY_BACK)
+ if(key_code == NWZ_KEY_RIGHT || key_code == NWZ_KEY_UP)
{
- mode = BOOT_TOOLS;
- break;
+ if(mode == BOOT_ROCKBOX)
+ mode = BOOT_TOOLS;
+ else if(mode == BOOT_OF)
+ mode = BOOT_ROCKBOX;
+ else
+ mode = BOOT_OF;
+ redraw = true;
}
}
+ /* switch back to page 0 */
+ nwz_fb_set_page(fb_fd, 0);
nwz_key_close(input_fd);
+ nwz_fb_close(fb_fd);
return mode;
}
static char *boot_rb_argv[] =
{
- "lcdmsg",
- "-c",
- "-l",
- "0,3",
- "Hello from RB",
+ "rockbox.sony",
NULL
};
int NWZ_TOOL_MAIN(all_tools)(int argc, char **argv);
+void error_screen(const char *msg)
+{
+ nwz_lcdmsg(true, 0, 0, msg);
+ sleep(3);
+}
+
+void create_sony_logo(void)
+{
+ for(int y = 0; y < ICON_HEIGHT; y++)
+ for(int x = 0; x < ICON_WIDTH; x++)
+ sony_icon[y * ICON_WIDTH + x] = 0xf81f;
+}
+
int main(int argc, char **argv)
{
/* make sure backlight is on and we are running the standard lcd mode */
@@ -125,9 +259,20 @@ int main(int argc, char **argv)
bl.level = NWZ_FB_BL_MAX_LEVEL;
nwz_fb_set_brightness(fb_fd, &bl);
nwz_fb_set_standard_mode(fb_fd);
+ /* get resolution */
+ /* we also need to get the native resolution */
+ if(nwz_fb_get_resolution(fb_fd, &width, &height, &bpp) != 0)
+ {
+ /* safe one */
+ width = 240;
+ height = 320;
+ bpp = 16;
+ }
nwz_fb_close(fb_fd);
}
- nwz_lcdmsg(true, 0, 0, "dualboot");
+ /* extract logo */
+ if(!extract_sony_logo())
+ create_sony_logo();
/* run all tools menu */
enum boot_mode mode = get_boot_mode();
if(mode == BOOT_TOOLS)
@@ -137,19 +282,19 @@ int main(int argc, char **argv)
}
else if(mode == BOOT_ROCKBOX)
{
- /* boot rockox */
- nwz_lcdmsg(true, 0, 3, "Booting rockbox...");
- /* in the future, we will run rockbox here, for now we just print a
- * message */
- execvp("/usr/local/bin/lcdmsg", boot_rb_argv);
+ /* Rockbox expects /.rockbox to contain themes, rocks, etc, but we
+ * cannot easily create this symlink because the root filesystem is
+ * mounted read-only. Although we could remount it read-write temporarily,
+ * this is neededlessly complicated and we defer this job to the dualboot
+ * install script */
+ execvp("/contents/.rockbox/rockbox.sony", boot_rb_argv);
/* fallback to OF in case of failure */
- nwz_lcdmsg(false, 0, 4, "failed.");
+ error_screen("Cannot boot Rockbox");
sleep(5);
}
/* boot OF */
- nwz_lcdmsg(true, 0, 3, "Booting OF...");
execvp("/usr/local/bin/SpiderApp.of", argv);
- nwz_lcdmsg(false, 0, 4, "failed.");
+ error_screen("Cannot boot OF");
sleep(5);
/* if we reach this point, everything failed, so return an error so that
* 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,
nwz_run(path_display, args, true);
}
+void nwz_display_text_center(int width, int y, bool big_font, nwz_color_t fg,
+ nwz_color_t bg, int alpha, const char *text)
+{
+ int txt_w = NWZ_FONT_W(big_font) * strlen(text);
+ nwz_display_text((width - txt_w) / 2, y, big_font, fg, bg, alpha, text);
+}
+
void nwz_display_textf(int x, int y, bool big_font, nwz_color_t foreground_col,
nwz_color_t background_col, int alpha, const char *fmt, ...)
{
@@ -167,6 +174,17 @@ void nwz_display_textf(int x, int y, bool big_font, nwz_color_t foreground_col,
nwz_display_text(x, y, big_font, foreground_col, background_col, alpha, buffer);
}
+void nwz_display_textf_center(int width, int y, bool big_font, nwz_color_t fg,
+ nwz_color_t bg, int alpha, const char *fmt, ...)
+{
+ char buffer[1024];
+ va_list args;
+ va_start(args, fmt);
+ vsprintf(buffer, fmt, args);
+ va_end(args);
+ nwz_display_text_center(width, y, big_font, fg, bg, alpha, buffer);
+}
+
void nwz_display_bitmap(int x, int y, const char *file, int left, int top,
int width, int height, nwz_color_t key_col, int bmp_alpha)
{
@@ -319,27 +337,32 @@ int nwz_fb_set_brightness(int fd, struct nwz_fb_brightness *bl)
return 1;
}
-int nwz_fb_set_standard_mode(int fd)
+int nwz_fb_set_page(int fd, int page)
{
- /* disable timer (apparently useless with LCD) */
- struct nwz_fb_update_timer update_timer;
- update_timer.timerflag = NWZ_FB_TIMER_OFF;
- update_timer.timeout = NWZ_FB_DEFAULT_TIMEOUT;
- if(ioctl(fd, NWZ_FB_UPDATE_TIMER, &update_timer) < 0)
- return -1;
- /* set page 0 mode to no transparency and no rotation */
+ /* set page mode to no transparency and no rotation */
struct nwz_fb_image_info mode_info;
mode_info.tc_enable = 0;
mode_info.t_color = 0;
mode_info.alpha = 0;
mode_info.rot = 0;
- mode_info.page = 0;
+ mode_info.page = page;
mode_info.update = NWZ_FB_ONLY_2D_MODE;
if(ioctl(fd, NWZ_FB_UPDATE, &mode_info) < 0)
return -2;
return 0;
}
+int nwz_fb_set_standard_mode(int fd)
+{
+ /* disable timer (apparently useless with LCD) */
+ struct nwz_fb_update_timer update_timer;
+ update_timer.timerflag = NWZ_FB_TIMER_OFF;
+ update_timer.timeout = NWZ_FB_DEFAULT_TIMEOUT;
+ if(ioctl(fd, NWZ_FB_UPDATE_TIMER, &update_timer) < 0)
+ return -1;
+ return nwz_fb_set_page(fd, 0);
+}
+
int nwz_fb_get_resolution(int fd, int *x, int *y, int *bpp)
{
struct fb_var_screeninfo vinfo;
@@ -354,6 +377,11 @@ int nwz_fb_get_resolution(int fd, int *x, int *y, int *bpp)
return 0;
}
+void *nwz_fb_mmap(int fd, int offset, int size)
+{
+ return mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (off_t)offset);
+}
+
int nwz_adc_open(void)
{
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 @@
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
+#include <sys/mman.h>
#include "nwz_keys.h"
#include "nwz_fb.h"
@@ -72,11 +73,19 @@ typedef int nwz_color_t;
#define NWZ_COLOR_GREEN(col) (((col) >> 8) & 0xff)
#define NWZ_COLOR_BLUE(col) ((col) & 0xff)
#define NWZ_COLOR_NO_KEY (1 << 24)
+
+#define NWZ_FONT_W(big_font) ((big_font) ? 14 : 8)
+#define NWZ_FONT_H(big_font) ((big_font) ? 24 : 14)
+
void nwz_display_clear(nwz_color_t color);
void nwz_display_text(int x, int y, bool big_font, nwz_color_t foreground_col,
nwz_color_t background_col, int background_alpha, const char *text);
+void nwz_display_text_center(int width, int y, bool big_font, nwz_color_t foreground_col,
+ nwz_color_t background_col, int background_alpha, const char *text);
void nwz_display_textf(int x, int y, bool big_font, nwz_color_t foreground_col,
nwz_color_t background_col, int background_alpha, const char *fmt, ...);
+void nwz_display_textf_center(int width, int y, bool big_font, nwz_color_t foreground_col,
+ nwz_color_t background_col, int background_alpha, const char *fmt, ...);
void nwz_display_bitmap(int x, int y, const char *file, int left, int top,
int width, int height, nwz_color_t key, int bmp_alpha);
@@ -113,6 +122,10 @@ int nwz_fb_set_brightness(int fd, struct nwz_fb_brightness *bl);
/* setup framebuffer to its standard mode: LCD output, page 0, no transparency
* and no rotation, 2D only updates */
int nwz_fb_set_standard_mode(int fd);
+/* change framebuffer page and update screen */
+int nwz_fb_set_page(int fd, int page);
+/* map framebuffer */
+void *nwz_fb_mmap(int fd, int offset, int size);
/* open adc device */
int 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
# FIXME document this
#
-
# go to /tmp
cd /tmp
@@ -30,6 +29,9 @@ if [ "$?" != 0 ]; then
exit 0
fi
+# redirect all output to a log file
+exec > "$CONTENTS/install_dualboot_log.txt" 2>&1
+
# import constants
. /install_script/constant.txt
_UPDATE_FN_=`nvpstr ufn`
@@ -66,6 +68,7 @@ fi
lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,9 "Install rockbox"
fwpchk -f /contents/$_UPDATE_FN_.UPG -c -1 $SPIDERAPP_PATH
if [ "$?" != 0 ]; then
+ umount "$ROOTFS_TMP_DIR"
lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: no file to extract"
sleep 3
exit 0
@@ -74,40 +77,45 @@ fi
# make it executable and change user/group
chmod 775 $SPIDERAPP_PATH
if [ "$?" != 0 ]; then
+ umount "$ROOTFS_TMP_DIR"
lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot make it executable"
sleep 3
exit 0
fi
chown 500:500 $SPIDERAPP_PATH
if [ "$?" != 0 ]; then
+ umount "$ROOTFS_TMP_DIR"
lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot change owner"
sleep 3
exit 0
fi
-# # change main application
-# lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,9 "Modify app list"
-# sed -i 's/Rockbox/SpiderApp/' $ROOTFS_TMP_DIR/etc/AppList.conf
-# if [ "$?" != 0 ]; then
-# lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,14 "ERROR: sed failed"
-# sleep 3
-# exit 0
-# fi
-# # and fix ownership
-# chown 500:500 $ROOTFS_TMP_DIR/etc/AppList.conf
-# if [ "$?" != 0 ]; then
-# lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,14 "ERROR: cannot change group"
-# sleep 3
-# exit 0
-# fi
-cat $ROOTFS_TMP_DIR/etc/AppList.conf >$CONTENTS/AppList.conf
-ls -l $ROOTFS_TMP_DIR/usr/local/bin/ >$CONTENTS/ls.txt
-ls -l $ROOTFS_TMP_DIR/etc/ >$CONTENTS/ls2.txt
+# create a symlink from /.rockbox to /contents/.rockbox (see dualboot code
+# for why)
+lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,10 "Create rockbox symlink"
+rm -f "$ROOTFS_TMP_DIR/.rockbox"
+ln -s "$CONTENTS/.rockbox" "$ROOTFS_TMP_DIR/.rockbox"
+if [ "$?" != 0 ]; then
+ umount "$ROOTFS_TMP_DIR"
+ lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot create rockbox symlink"
+ sleep 3
+ exit 0
+fi
+
+# change user/group
+chown -h 500:500 "$ROOTFS_TMP_DIR/.rockbox"
+if [ "$?" != 0 ]; then
+ umount "$ROOTFS_TMP_DIR"
+ lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: cannot change symlink owner"
+ sleep 3
+ exit 0
+fi
# unmount root partition
-lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,10 "Unmount root filesystem"
+lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,11 "Unmount root filesystem"
sync
if [ "$?" != 0 ]; then
+ umount "$ROOTFS_TMP_DIR"
lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "ERROR: sync failed"
sleep 3
exit 0
@@ -125,5 +133,6 @@ lcdmsg -f /usr/local/bin/font_08x12.bmp -l 0,15 "Rebooting in 3 seconds."
sleep 3
sync
+echo "Installation successful"
# finish
exit 0