#!/usr/bin/perl use diagnostics; use strict; use lib qw(/usr/bin/perl-install . c c/blib/arch); use pkgs_deps; use pkgs; pkgs_deps::main(pkgs::psUsingDirectory()); ' href='/favicon.ico'/> <link rel='alternate' title='Atom feed' href='https://gitweb.mageia.org/software/drakx/atom/perl-install/install_steps_interactive.pm?h=17.25' type='application/atom+xml'/> <link rel='vcs-git' href='git://git.mageia.org/software/drakx' title='drakx Git repository'/> <link rel='vcs-git' href='ssh://git@git.mageia.org/software/drakx' title='drakx Git repository'/> </head> <body> <div id='cgit'><table id='header'> <tr> <td class='logo' rowspan='2'><a href='/'><img src='//nav.mageia.org/css/mageia-logo-nav-3.png' alt='cgit logo'/></a></td> <td class='main'><a href='/'>index</a> : <a title='drakx' href='/software/drakx/'>drakx</a></td><td class='form'><form method='get'> <input type='hidden' name='id' value='292bdfb0285b757882b4e933c413d834b4324d4b'/><select name='h' onchange='this.form.submit();'> <option value='distro/mdv2007.1'>distro/mdv2007.1</option> <option value='distro/mdv2008.0'>distro/mdv2008.0</option> <option value='distro/mdv2008.1'>distro/mdv2008.1</option> <option value='distro/mdv2009.0'>distro/mdv2009.0</option> <option value='distro/mdv2009.1'>distro/mdv2009.1</option> <option value='distro/mdv2010.0'>distro/mdv2010.0</option> <option value='distro/mes5'>distro/mes5</option> <option value='distro/mes5-2.6.33'>distro/mes5-2.6.33</option> <option value='distro/mes6'>distro/mes6</option> <option value='distro/mga1'>distro/mga1</option> <option value='distro/mga2'>distro/mga2</option> <option value='distro/mga3'>distro/mga3</option> <option value='distro/mga4'>distro/mga4</option> <option value='distro/mga5'>distro/mga5</option> <option value='distro/mga6'>distro/mga6</option> <option value='distro/mga7'>distro/mga7</option> <option value='distro/mga8'>distro/mga8</option> <option value='distro/mga9'>distro/mga9</option> <option value='master'>master</option> <option value='topic/Corpo_2_1'>topic/Corpo_2_1</option> <option value='topic/KA9_0'>topic/KA9_0</option> <option value='topic/MDK-10-update'>topic/MDK-10-update</option> <option value='topic/MDK-10_1-update'>topic/MDK-10_1-update</option> <option value='topic/MDK-10_2-update'>topic/MDK-10_2-update</option> <option value='topic/MDK-2006_0-update'>topic/MDK-2006_0-update</option> <option value='topic/MDK92-branch'>topic/MDK92-branch</option> <option value='topic/MDKC_1_0'>topic/MDKC_1_0</option> <option value='topic/PCMCIA_CS_DISTRO'>topic/PCMCIA_CS_DISTRO</option> <option value='topic/R9_0-64bit-branch'>topic/R9_0-64bit-branch</option> <option value='topic/R9_1_HP-branch'>topic/R9_1_HP-branch</option> <option value='topic/a'>topic/a</option> <option value='topic/before_matchbox_wm'>topic/before_matchbox_wm</option> <option value='topic/bug-13680'>topic/bug-13680</option> <option value='topic/dietlibc'>topic/dietlibc</option> <option value='topic/efi'>topic/efi</option> <option value='topic/extlinux'>topic/extlinux</option> <option value='topic/firewall'>topic/firewall</option> <option value='topic/gdk-pixbuf-0-branch'>topic/gdk-pixbuf-0-branch</option> <option value='topic/gi-ppc'>topic/gi-ppc</option> <option value='topic/ia64-8_1'>topic/ia64-8_1</option> <option value='topic/mandrakesoft'>topic/mandrakesoft</option> <option value='topic/mlcd4'>topic/mlcd4</option> <option value='topic/ppp'>topic/ppp</option> <option value='topic/rp-pppoe'>topic/rp-pppoe</option> <option value='topic/switching_to_dnf'>topic/switching_to_dnf</option> <option value='topic/switching_to_urpmi'>topic/switching_to_urpmi</option> <option value='topic/unlabeled-1.1.1'>topic/unlabeled-1.1.1</option> <option value='topic/v_webmin_0_87'>topic/v_webmin_0_87</option> <option value='topic/x86_64-branch'>topic/x86_64-branch</option> <option value='user/animtim/designWork'>user/animtim/designWork</option> <option value='user/colin/rescue-systemd'>user/colin/rescue-systemd</option> <option value='user/ennael/mga6'>user/ennael/mga6</option> <option value='user/erwan/bug-13680'>user/erwan/bug-13680</option> <option value='user/jibz/aarch64'>user/jibz/aarch64</option> <option value='user/martinw/mga6'>user/martinw/mga6</option> <option value='user/pterjan/arm64'>user/pterjan/arm64</option> </select> <input type='submit' value='switch'/></form></td></tr> <tr><td class='sub'>Mageia Installer and base platform for many utilities</td><td class='sub right'>Thierry Vignaud [tv]</td></tr></table> <table class='tabs'><tr><td> <a href='/software/drakx/?h=17.25'>summary</a><a href='/software/drakx/refs/?h=17.25&id=292bdfb0285b757882b4e933c413d834b4324d4b'>refs</a><a href='/software/drakx/log/perl-install/install_steps_interactive.pm?h=17.25'>log</a><a class='active' href='/software/drakx/tree/perl-install/install_steps_interactive.pm?h=17.25&id=292bdfb0285b757882b4e933c413d834b4324d4b'>tree</a><a href='/software/drakx/commit/perl-install/install_steps_interactive.pm?h=17.25&id=292bdfb0285b757882b4e933c413d834b4324d4b'>commit</a><a href='/software/drakx/diff/perl-install/install_steps_interactive.pm?h=17.25&id=292bdfb0285b757882b4e933c413d834b4324d4b'>diff</a><a href='/software/drakx/stats/perl-install/install_steps_interactive.pm?h=17.25'>stats</a></td><td class='form'><form class='right' method='get' action='/software/drakx/log/perl-install/install_steps_interactive.pm'> <input type='hidden' name='h' value='17.25'/><input type='hidden' name='id' value='292bdfb0285b757882b4e933c413d834b4324d4b'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/software/drakx/tree/?h=17.25&id=292bdfb0285b757882b4e933c413d834b4324d4b'>root</a>/<a href='/software/drakx/tree/perl-install?h=17.25&id=292bdfb0285b757882b4e933c413d834b4324d4b'>perl-install</a>/<a href='/software/drakx/tree/perl-install/install_steps_interactive.pm?h=17.25&id=292bdfb0285b757882b4e933c413d834b4324d4b'>install_steps_interactive.pm</a></div><div class='content'>blob: efb2954f395562bd6810f5e3c6ea985837cf698c (<a href='/software/drakx/plain/perl-install/install_steps_interactive.pm?h=17.25&id=292bdfb0285b757882b4e933c413d834b4324d4b'>plain</a>) <table summary='blob content' class='blob'> <tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a> <a id='n2' href='#n2'>2</a> <a id='n3' href='#n3'>3</a> <a id='n4' href='#n4'>4</a> <a id='n5' href='#n5'>5</a> <a id='n6' href='#n6'>6</a> <a id='n7' href='#n7'>7</a> <a id='n8' href='#n8'>8</a> <a id='n9' href='#n9'>9</a> <a id='n10' href='#n10'>10</a> <a id='n11' href='#n11'>11</a> <a id='n12' href='#n12'>12</a> <a id='n13' href='#n13'>13</a> <a id='n14' href='#n14'>14</a> <a id='n15' href='#n15'>15</a> <a id='n16' href='#n16'>16</a> <a id='n17' href='#n17'>17</a> <a id='n18' href='#n18'>18</a> <a id='n19' href='#n19'>19</a> <a id='n20' href='#n20'>20</a> <a id='n21' href='#n21'>21</a> <a id='n22' href='#n22'>22</a> <a id='n23' href='#n23'>23</a> <a id='n24' href='#n24'>24</a> <a id='n25' href='#n25'>25</a> <a id='n26' href='#n26'>26</a> <a id='n27' href='#n27'>27</a> <a id='n28' href='#n28'>28</a> <a id='n29' href='#n29'>29</a> <a id='n30' href='#n30'>30</a> <a id='n31' href='#n31'>31</a> <a id='n32' href='#n32'>32</a> <a id='n33' href='#n33'>33</a> <a id='n34' href='#n34'>34</a> <a id='n35' href='#n35'>35</a> <a id='n36' href='#n36'>36</a> <a id='n37' href='#n37'>37</a> <a id='n38' href='#n38'>38</a> <a id='n39' href='#n39'>39</a> <a id='n40' href='#n40'>40</a> <a id='n41' href='#n41'>41</a> <a id='n42' href='#n42'>42</a> <a id='n43' href='#n43'>43</a> <a id='n44' href='#n44'>44</a> <a id='n45' href='#n45'>45</a> <a id='n46' href='#n46'>46</a> <a id='n47' href='#n47'>47</a> <a id='n48' href='#n48'>48</a> <a id='n49' href='#n49'>49</a> <a id='n50' href='#n50'>50</a> <a id='n51' href='#n51'>51</a> <a id='n52' href='#n52'>52</a> <a id='n53' href='#n53'>53</a> <a id='n54' href='#n54'>54</a> <a id='n55' href='#n55'>55</a> <a id='n56' href='#n56'>56</a> <a id='n57' href='#n57'>57</a> <a id='n58' href='#n58'>58</a> <a id='n59' href='#n59'>59</a> <a id='n60' href='#n60'>60</a> <a id='n61' href='#n61'>61</a> <a id='n62' href='#n62'>62</a> <a id='n63' href='#n63'>63</a> <a id='n64' href='#n64'>64</a> <a id='n65' href='#n65'>65</a> <a id='n66' href='#n66'>66</a> <a id='n67' href='#n67'>67</a> <a id='n68' href='#n68'>68</a> <a id='n69' href='#n69'>69</a> <a id='n70' href='#n70'>70</a> <a id='n71' href='#n71'>71</a> <a id='n72' href='#n72'>72</a> <a id='n73' href='#n73'>73</a> <a id='n74' href='#n74'>74</a> <a id='n75' href='#n75'>75</a> <a id='n76' href='#n76'>76</a> <a id='n77' href='#n77'>77</a> <a id='n78' href='#n78'>78</a> <a id='n79' href='#n79'>79</a> <a id='n80' href='#n80'>80</a> <a id='n81' href='#n81'>81</a> <a id='n82' href='#n82'>82</a> <a id='n83' href='#n83'>83</a> <a id='n84' href='#n84'>84</a> <a id='n85' href='#n85'>85</a> <a id='n86' href='#n86'>86</a> <a id='n87' href='#n87'>87</a> <a id='n88' href='#n88'>88</a> <a id='n89' href='#n89'>89</a> <a id='n90' href='#n90'>90</a> <a id='n91' href='#n91'>91</a> <a id='n92' href='#n92'>92</a> <a id='n93' href='#n93'>93</a> <a id='n94' href='#n94'>94</a> <a id='n95' href='#n95'>95</a> <a id='n96' href='#n96'>96</a> <a id='n97' href='#n97'>97</a> <a id='n98' href='#n98'>98</a> <a id='n99' href='#n99'>99</a> <a id='n100' href='#n100'>100</a> <a id='n101' href='#n101'>101</a> <a id='n102' href='#n102'>102</a> <a id='n103' href='#n103'>103</a> <a id='n104' href='#n104'>104</a> <a id='n105' href='#n105'>105</a> <a id='n106' href='#n106'>106</a> <a id='n107' href='#n107'>107</a> <a id='n108' href='#n108'>108</a> <a id='n109' href='#n109'>109</a> <a id='n110' href='#n110'>110</a> <a id='n111' href='#n111'>111</a> <a id='n112' href='#n112'>112</a> <a id='n113' href='#n113'>113</a> <a id='n114' href='#n114'>114</a> <a id='n115' href='#n115'>115</a> <a id='n116' href='#n116'>116</a> <a id='n117' href='#n117'>117</a> <a id='n118' href='#n118'>118</a> <a id='n119' href='#n119'>119</a> <a id='n120' href='#n120'>120</a> <a id='n121' href='#n121'>121</a> <a id='n122' href='#n122'>122</a> <a id='n123' href='#n123'>123</a> <a id='n124' href='#n124'>124</a> <a id='n125' href='#n125'>125</a> <a id='n126' href='#n126'>126</a> <a id='n127' href='#n127'>127</a> <a id='n128' href='#n128'>128</a> <a id='n129' href='#n129'>129</a> <a id='n130' href='#n130'>130</a> <a id='n131' href='#n131'>131</a> <a id='n132' href='#n132'>132</a> <a id='n133' href='#n133'>133</a> <a id='n134' href='#n134'>134</a> <a id='n135' href='#n135'>135</a> <a id='n136' href='#n136'>136</a> <a id='n137' href='#n137'>137</a> <a id='n138' href='#n138'>138</a> <a id='n139' href='#n139'>139</a> <a id='n140' href='#n140'>140</a> <a id='n141' href='#n141'>141</a> <a id='n142' href='#n142'>142</a> <a id='n143' href='#n143'>143</a> <a id='n144' href='#n144'>144</a> <a id='n145' href='#n145'>145</a> <a id='n146' href='#n146'>146</a> <a id='n147' href='#n147'>147</a> <a id='n148' href='#n148'>148</a> <a id='n149' href='#n149'>149</a> <a id='n150' href='#n150'>150</a> <a id='n151' href='#n151'>151</a> <a id='n152' href='#n152'>152</a> <a id='n153' href='#n153'>153</a> <a id='n154' href='#n154'>154</a> <a id='n155' href='#n155'>155</a> <a id='n156' href='#n156'>156</a> <a id='n157' href='#n157'>157</a> <a id='n158' href='#n158'>158</a> <a id='n159' href='#n159'>159</a> <a id='n160' href='#n160'>160</a> <a id='n161' href='#n161'>161</a> <a id='n162' href='#n162'>162</a> <a id='n163' href='#n163'>163</a> <a id='n164' href='#n164'>164</a> <a id='n165' href='#n165'>165</a> <a id='n166' href='#n166'>166</a> <a id='n167' href='#n167'>167</a> <a id='n168' href='#n168'>168</a> <a id='n169' href='#n169'>169</a> <a id='n170' href='#n170'>170</a> <a id='n171' href='#n171'>171</a> <a id='n172' href='#n172'>172</a> <a id='n173' href='#n173'>173</a> <a id='n174' href='#n174'>174</a> <a id='n175' href='#n175'>175</a> <a id='n176' href='#n176'>176</a> <a id='n177' href='#n177'>177</a> <a id='n178' href='#n178'>178</a> <a id='n179' href='#n179'>179</a> <a id='n180' href='#n180'>180</a> <a id='n181' href='#n181'>181</a> <a id='n182' href='#n182'>182</a> <a id='n183' href='#n183'>183</a> <a id='n184' href='#n184'>184</a> <a id='n185' href='#n185'>185</a> <a id='n186' href='#n186'>186</a> <a id='n187' href='#n187'>187</a> <a id='n188' href='#n188'>188</a> <a id='n189' href='#n189'>189</a> <a id='n190' href='#n190'>190</a> <a id='n191' href='#n191'>191</a> <a id='n192' href='#n192'>192</a> <a id='n193' href='#n193'>193</a> <a id='n194' href='#n194'>194</a> <a id='n195' href='#n195'>195</a> <a id='n196' href='#n196'>196</a> <a id='n197' href='#n197'>197</a> <a id='n198' href='#n198'>198</a> <a id='n199' href='#n199'>199</a> <a id='n200' href='#n200'>200</a> <a id='n201' href='#n201'>201</a> <a id='n202' href='#n202'>202</a> <a id='n203' href='#n203'>203</a> <a id='n204' href='#n204'>204</a> <a id='n205' href='#n205'>205</a> <a id='n206' href='#n206'>206</a> <a id='n207' href='#n207'>207</a> <a id='n208' href='#n208'>208</a> <a id='n209' href='#n209'>209</a> <a id='n210' href='#n210'>210</a> <a id='n211' href='#n211'>211</a> <a id='n212' href='#n212'>212</a> <a id='n213' href='#n213'>213</a> <a id='n214' href='#n214'>214</a> <a id='n215' href='#n215'>215</a> <a id='n216' href='#n216'>216</a> <a id='n217' href='#n217'>217</a> <a id='n218' href='#n218'>218</a> <a id='n219' href='#n219'>219</a> <a id='n220' href='#n220'>220</a> <a id='n221' href='#n221'>221</a> <a id='n222' href='#n222'>222</a> <a id='n223' href='#n223'>223</a> <a id='n224' href='#n224'>224</a> <a id='n225' href='#n225'>225</a> <a id='n226' href='#n226'>226</a> <a id='n227' href='#n227'>227</a> <a id='n228' href='#n228'>228</a> <a id='n229' href='#n229'>229</a> <a id='n230' href='#n230'>230</a> <a id='n231' href='#n231'>231</a> <a id='n232' href='#n232'>232</a> <a id='n233' href='#n233'>233</a> <a id='n234' href='#n234'>234</a> <a id='n235' href='#n235'>235</a> <a id='n236' href='#n236'>236</a> <a id='n237' href='#n237'>237</a> <a id='n238' href='#n238'>238</a> <a id='n239' href='#n239'>239</a> <a id='n240' href='#n240'>240</a> <a id='n241' href='#n241'>241</a> <a id='n242' href='#n242'>242</a> <a id='n243' href='#n243'>243</a> <a id='n244' href='#n244'>244</a> <a id='n245' href='#n245'>245</a> <a id='n246' href='#n246'>246</a> <a id='n247' href='#n247'>247</a> <a id='n248' href='#n248'>248</a> <a id='n249' href='#n249'>249</a> <a id='n250' href='#n250'>250</a> <a id='n251' href='#n251'>251</a> <a id='n252' href='#n252'>252</a> <a id='n253' href='#n253'>253</a> <a id='n254' href='#n254'>254</a> <a id='n255' href='#n255'>255</a> <a id='n256' href='#n256'>256</a> <a id='n257' href='#n257'>257</a> <a id='n258' href='#n258'>258</a> <a id='n259' href='#n259'>259</a> <a id='n260' href='#n260'>260</a> <a id='n261' href='#n261'>261</a> <a id='n262' href='#n262'>262</a> <a id='n263' href='#n263'>263</a> <a id='n264' href='#n264'>264</a> <a id='n265' href='#n265'>265</a> <a id='n266' href='#n266'>266</a> <a id='n267' href='#n267'>267</a> <a id='n268' href='#n268'>268</a> <a id='n269' href='#n269'>269</a> <a id='n270' href='#n270'>270</a> <a id='n271' href='#n271'>271</a> <a id='n272' href='#n272'>272</a> <a id='n273' href='#n273'>273</a> <a id='n274' href='#n274'>274</a> <a id='n275' href='#n275'>275</a> <a id='n276' href='#n276'>276</a> <a id='n277' href='#n277'>277</a> <a id='n278' href='#n278'>278</a> <a id='n279' href='#n279'>279</a> <a id='n280' href='#n280'>280</a> <a id='n281' href='#n281'>281</a> <a id='n282' href='#n282'>282</a> <a id='n283' href='#n283'>283</a> <a id='n284' href='#n284'>284</a> <a id='n285' href='#n285'>285</a> <a id='n286' href='#n286'>286</a> <a id='n287' href='#n287'>287</a> <a id='n288' href='#n288'>288</a> <a id='n289' href='#n289'>289</a> <a id='n290' href='#n290'>290</a> <a id='n291' href='#n291'>291</a> <a id='n292' href='#n292'>292</a> <a id='n293' href='#n293'>293</a> <a id='n294' href='#n294'>294</a> <a id='n295' href='#n295'>295</a> <a id='n296' href='#n296'>296</a> <a id='n297' href='#n297'>297</a> <a id='n298' href='#n298'>298</a> <a id='n299' href='#n299'>299</a> <a id='n300' href='#n300'>300</a> <a id='n301' href='#n301'>301</a> <a id='n302' href='#n302'>302</a> <a id='n303' href='#n303'>303</a> <a id='n304' href='#n304'>304</a> <a id='n305' href='#n305'>305</a> <a id='n306' href='#n306'>306</a> <a id='n307' href='#n307'>307</a> <a id='n308' href='#n308'>308</a> <a id='n309' href='#n309'>309</a> <a id='n310' href='#n310'>310</a> <a id='n311' href='#n311'>311</a> <a id='n312' href='#n312'>312</a> <a id='n313' href='#n313'>313</a> <a id='n314' href='#n314'>314</a> <a id='n315' href='#n315'>315</a> <a id='n316' href='#n316'>316</a> <a id='n317' href='#n317'>317</a> <a id='n318' href='#n318'>318</a> <a id='n319' href='#n319'>319</a> <a id='n320' href='#n320'>320</a> <a id='n321' href='#n321'>321</a> <a id='n322' href='#n322'>322</a> <a id='n323' href='#n323'>323</a> <a id='n324' href='#n324'>324</a> <a id='n325' href='#n325'>325</a> <a id='n326' href='#n326'>326</a> <a id='n327' href='#n327'>327</a> <a id='n328' href='#n328'>328</a> <a id='n329' href='#n329'>329</a> <a id='n330' href='#n330'>330</a> <a id='n331' href='#n331'>331</a> <a id='n332' href='#n332'>332</a> <a id='n333' href='#n333'>333</a> <a id='n334' href='#n334'>334</a> <a id='n335' href='#n335'>335</a> <a id='n336' href='#n336'>336</a> <a id='n337' href='#n337'>337</a> <a id='n338' href='#n338'>338</a> <a id='n339' href='#n339'>339</a> <a id='n340' href='#n340'>340</a> <a id='n341' href='#n341'>341</a> <a id='n342' href='#n342'>342</a> <a id='n343' href='#n343'>343</a> <a id='n344' href='#n344'>344</a> <a id='n345' href='#n345'>345</a> <a id='n346' href='#n346'>346</a> <a id='n347' href='#n347'>347</a> <a id='n348' href='#n348'>348</a> <a id='n349' href='#n349'>349</a> <a id='n350' href='#n350'>350</a> <a id='n351' href='#n351'>351</a> <a id='n352' href='#n352'>352</a> <a id='n353' href='#n353'>353</a> <a id='n354' href='#n354'>354</a> <a id='n355' href='#n355'>355</a> <a id='n356' href='#n356'>356</a> <a id='n357' href='#n357'>357</a> <a id='n358' href='#n358'>358</a> <a id='n359' href='#n359'>359</a> <a id='n360' href='#n360'>360</a> <a id='n361' href='#n361'>361</a> <a id='n362' href='#n362'>362</a> <a id='n363' href='#n363'>363</a> <a id='n364' href='#n364'>364</a> <a id='n365' href='#n365'>365</a> <a id='n366' href='#n366'>366</a> <a id='n367' href='#n367'>367</a> <a id='n368' href='#n368'>368</a> <a id='n369' href='#n369'>369</a> <a id='n370' href='#n370'>370</a> <a id='n371' href='#n371'>371</a> <a id='n372' href='#n372'>372</a> <a id='n373' href='#n373'>373</a> <a id='n374' href='#n374'>374</a> <a id='n375' href='#n375'>375</a> <a id='n376' href='#n376'>376</a> <a id='n377' href='#n377'>377</a> <a id='n378' href='#n378'>378</a> <a id='n379' href='#n379'>379</a> <a id='n380' href='#n380'>380</a> <a id='n381' href='#n381'>381</a> <a id='n382' href='#n382'>382</a> <a id='n383' href='#n383'>383</a> <a id='n384' href='#n384'>384</a> <a id='n385' href='#n385'>385</a> <a id='n386' href='#n386'>386</a> <a id='n387' href='#n387'>387</a> <a id='n388' href='#n388'>388</a> <a id='n389' href='#n389'>389</a> <a id='n390' href='#n390'>390</a> <a id='n391' href='#n391'>391</a> <a id='n392' href='#n392'>392</a> <a id='n393' href='#n393'>393</a> <a id='n394' href='#n394'>394</a> <a id='n395' href='#n395'>395</a> <a id='n396' href='#n396'>396</a> <a id='n397' href='#n397'>397</a> <a id='n398' href='#n398'>398</a> <a id='n399' href='#n399'>399</a> <a id='n400' href='#n400'>400</a> <a id='n401' href='#n401'>401</a> <a id='n402' href='#n402'>402</a> <a id='n403' href='#n403'>403</a> <a id='n404' href='#n404'>404</a> <a id='n405' href='#n405'>405</a> <a id='n406' href='#n406'>406</a> <a id='n407' href='#n407'>407</a> <a id='n408' href='#n408'>408</a> <a id='n409' href='#n409'>409</a> <a id='n410' href='#n410'>410</a> <a id='n411' href='#n411'>411</a> <a id='n412' href='#n412'>412</a> <a id='n413' href='#n413'>413</a> <a id='n414' href='#n414'>414</a> <a id='n415' href='#n415'>415</a> <a id='n416' href='#n416'>416</a> <a id='n417' href='#n417'>417</a> <a id='n418' href='#n418'>418</a> <a id='n419' href='#n419'>419</a> <a id='n420' href='#n420'>420</a> <a id='n421' href='#n421'>421</a> <a id='n422' href='#n422'>422</a> <a id='n423' href='#n423'>423</a> <a id='n424' href='#n424'>424</a> <a id='n425' href='#n425'>425</a> <a id='n426' href='#n426'>426</a> <a id='n427' href='#n427'>427</a> <a id='n428' href='#n428'>428</a> <a id='n429' href='#n429'>429</a> <a id='n430' href='#n430'>430</a> <a id='n431' href='#n431'>431</a> <a id='n432' href='#n432'>432</a> <a id='n433' href='#n433'>433</a> <a id='n434' href='#n434'>434</a> <a id='n435' href='#n435'>435</a> <a id='n436' href='#n436'>436</a> <a id='n437' href='#n437'>437</a> <a id='n438' href='#n438'>438</a> <a id='n439' href='#n439'>439</a> <a id='n440' href='#n440'>440</a> <a id='n441' href='#n441'>441</a> <a id='n442' href='#n442'>442</a> <a id='n443' href='#n443'>443</a> <a id='n444' href='#n444'>444</a> <a id='n445' href='#n445'>445</a> <a id='n446' href='#n446'>446</a> <a id='n447' href='#n447'>447</a> <a id='n448' href='#n448'>448</a> <a id='n449' href='#n449'>449</a> <a id='n450' href='#n450'>450</a> <a id='n451' href='#n451'>451</a> <a id='n452' href='#n452'>452</a> <a id='n453' href='#n453'>453</a> <a id='n454' href='#n454'>454</a> <a id='n455' href='#n455'>455</a> <a id='n456' href='#n456'>456</a> <a id='n457' href='#n457'>457</a> <a id='n458' href='#n458'>458</a> <a id='n459' href='#n459'>459</a> <a id='n460' href='#n460'>460</a> <a id='n461' href='#n461'>461</a> <a id='n462' href='#n462'>462</a> <a id='n463' href='#n463'>463</a> <a id='n464' href='#n464'>464</a> <a id='n465' href='#n465'>465</a> <a id='n466' href='#n466'>466</a> <a id='n467' href='#n467'>467</a> <a id='n468' href='#n468'>468</a> <a id='n469' href='#n469'>469</a> <a id='n470' href='#n470'>470</a> <a id='n471' href='#n471'>471</a> <a id='n472' href='#n472'>472</a> <a id='n473' href='#n473'>473</a> <a id='n474' href='#n474'>474</a> <a id='n475' href='#n475'>475</a> <a id='n476' href='#n476'>476</a> <a id='n477' href='#n477'>477</a> <a id='n478' href='#n478'>478</a> <a id='n479' href='#n479'>479</a> <a id='n480' href='#n480'>480</a> <a id='n481' href='#n481'>481</a> <a id='n482' href='#n482'>482</a> <a id='n483' href='#n483'>483</a> <a id='n484' href='#n484'>484</a> <a id='n485' href='#n485'>485</a> <a id='n486' href='#n486'>486</a> <a id='n487' href='#n487'>487</a> <a id='n488' href='#n488'>488</a> <a id='n489' href='#n489'>489</a> <a id='n490' href='#n490'>490</a> <a id='n491' href='#n491'>491</a> <a id='n492' href='#n492'>492</a> <a id='n493' href='#n493'>493</a> <a id='n494' href='#n494'>494</a> <a id='n495' href='#n495'>495</a> <a id='n496' href='#n496'>496</a> <a id='n497' href='#n497'>497</a> <a id='n498' href='#n498'>498</a> <a id='n499' href='#n499'>499</a> <a id='n500' href='#n500'>500</a> <a id='n501' href='#n501'>501</a> <a id='n502' href='#n502'>502</a> <a id='n503' href='#n503'>503</a> <a id='n504' href='#n504'>504</a> <a id='n505' href='#n505'>505</a> <a id='n506' href='#n506'>506</a> <a id='n507' href='#n507'>507</a> <a id='n508' href='#n508'>508</a> <a id='n509' href='#n509'>509</a> <a id='n510' href='#n510'>510</a> <a id='n511' href='#n511'>511</a> <a id='n512' href='#n512'>512</a> <a id='n513' href='#n513'>513</a> <a id='n514' href='#n514'>514</a> <a id='n515' href='#n515'>515</a> <a id='n516' href='#n516'>516</a> <a id='n517' href='#n517'>517</a> <a id='n518' href='#n518'>518</a> <a id='n519' href='#n519'>519</a> <a id='n520' href='#n520'>520</a> <a id='n521' href='#n521'>521</a> <a id='n522' href='#n522'>522</a> <a id='n523' href='#n523'>523</a> <a id='n524' href='#n524'>524</a> <a id='n525' href='#n525'>525</a> <a id='n526' href='#n526'>526</a> <a id='n527' href='#n527'>527</a> <a id='n528' href='#n528'>528</a> <a id='n529' href='#n529'>529</a> <a id='n530' href='#n530'>530</a> <a id='n531' href='#n531'>531</a> <a id='n532' href='#n532'>532</a> <a id='n533' href='#n533'>533</a> <a id='n534' href='#n534'>534</a> <a id='n535' href='#n535'>535</a> <a id='n536' href='#n536'>536</a> <a id='n537' href='#n537'>537</a> <a id='n538' href='#n538'>538</a> <a id='n539' href='#n539'>539</a> <a id='n540' href='#n540'>540</a> <a id='n541' href='#n541'>541</a> <a id='n542' href='#n542'>542</a> <a id='n543' href='#n543'>543</a> <a id='n544' href='#n544'>544</a> <a id='n545' href='#n545'>545</a> <a id='n546' href='#n546'>546</a> <a id='n547' href='#n547'>547</a> <a id='n548' href='#n548'>548</a> <a id='n549' href='#n549'>549</a> <a id='n550' href='#n550'>550</a> <a id='n551' href='#n551'>551</a> <a id='n552' href='#n552'>552</a> <a id='n553' href='#n553'>553</a> <a id='n554' href='#n554'>554</a> <a id='n555' href='#n555'>555</a> <a id='n556' href='#n556'>556</a> <a id='n557' href='#n557'>557</a> <a id='n558' href='#n558'>558</a> <a id='n559' href='#n559'>559</a> <a id='n560' href='#n560'>560</a> <a id='n561' href='#n561'>561</a> <a id='n562' href='#n562'>562</a> <a id='n563' href='#n563'>563</a> <a id='n564' href='#n564'>564</a> <a id='n565' href='#n565'>565</a> <a id='n566' href='#n566'>566</a> <a id='n567' href='#n567'>567</a> <a id='n568' href='#n568'>568</a> <a id='n569' href='#n569'>569</a> <a id='n570' href='#n570'>570</a> <a id='n571' href='#n571'>571</a> <a id='n572' href='#n572'>572</a> <a id='n573' href='#n573'>573</a> <a id='n574' href='#n574'>574</a> <a id='n575' href='#n575'>575</a> <a id='n576' href='#n576'>576</a> <a id='n577' href='#n577'>577</a> <a id='n578' href='#n578'>578</a> <a id='n579' href='#n579'>579</a> <a id='n580' href='#n580'>580</a> <a id='n581' href='#n581'>581</a> <a id='n582' href='#n582'>582</a> <a id='n583' href='#n583'>583</a> <a id='n584' href='#n584'>584</a> <a id='n585' href='#n585'>585</a> <a id='n586' href='#n586'>586</a> <a id='n587' href='#n587'>587</a> <a id='n588' href='#n588'>588</a> <a id='n589' href='#n589'>589</a> <a id='n590' href='#n590'>590</a> <a id='n591' href='#n591'>591</a> <a id='n592' href='#n592'>592</a> <a id='n593' href='#n593'>593</a> <a id='n594' href='#n594'>594</a> <a id='n595' href='#n595'>595</a> <a id='n596' href='#n596'>596</a> <a id='n597' href='#n597'>597</a> <a id='n598' href='#n598'>598</a> <a id='n599' href='#n599'>599</a> <a id='n600' href='#n600'>600</a> <a id='n601' href='#n601'>601</a> <a id='n602' href='#n602'>602</a> <a id='n603' href='#n603'>603</a> <a id='n604' href='#n604'>604</a> <a id='n605' href='#n605'>605</a> <a id='n606' href='#n606'>606</a> <a id='n607' href='#n607'>607</a> <a id='n608' href='#n608'>608</a> <a id='n609' href='#n609'>609</a> <a id='n610' href='#n610'>610</a> <a id='n611' href='#n611'>611</a> <a id='n612' href='#n612'>612</a> <a id='n613' href='#n613'>613</a> <a id='n614' href='#n614'>614</a> <a id='n615' href='#n615'>615</a> <a id='n616' href='#n616'>616</a> <a id='n617' href='#n617'>617</a> <a id='n618' href='#n618'>618</a> <a id='n619' href='#n619'>619</a> <a id='n620' href='#n620'>620</a> <a id='n621' href='#n621'>621</a> <a id='n622' href='#n622'>622</a> <a id='n623' href='#n623'>623</a> <a id='n624' href='#n624'>624</a> <a id='n625' href='#n625'>625</a> <a id='n626' href='#n626'>626</a> <a id='n627' href='#n627'>627</a> <a id='n628' href='#n628'>628</a> <a id='n629' href='#n629'>629</a> <a id='n630' href='#n630'>630</a> <a id='n631' href='#n631'>631</a> <a id='n632' href='#n632'>632</a> <a id='n633' href='#n633'>633</a> <a id='n634' href='#n634'>634</a> <a id='n635' href='#n635'>635</a> <a id='n636' href='#n636'>636</a> <a id='n637' href='#n637'>637</a> <a id='n638' href='#n638'>638</a> <a id='n639' href='#n639'>639</a> <a id='n640' href='#n640'>640</a> <a id='n641' href='#n641'>641</a> <a id='n642' href='#n642'>642</a> <a id='n643' href='#n643'>643</a> <a id='n644' href='#n644'>644</a> <a id='n645' href='#n645'>645</a> <a id='n646' href='#n646'>646</a> <a id='n647' href='#n647'>647</a> <a id='n648' href='#n648'>648</a> <a id='n649' href='#n649'>649</a> <a id='n650' href='#n650'>650</a> <a id='n651' href='#n651'>651</a> <a id='n652' href='#n652'>652</a> <a id='n653' href='#n653'>653</a> <a id='n654' href='#n654'>654</a> <a id='n655' href='#n655'>655</a> <a id='n656' href='#n656'>656</a> <a id='n657' href='#n657'>657</a> <a id='n658' href='#n658'>658</a> <a id='n659' href='#n659'>659</a> <a id='n660' href='#n660'>660</a> <a id='n661' href='#n661'>661</a> <a id='n662' href='#n662'>662</a> <a id='n663' href='#n663'>663</a> <a id='n664' href='#n664'>664</a> <a id='n665' href='#n665'>665</a> <a id='n666' href='#n666'>666</a> <a id='n667' href='#n667'>667</a> <a id='n668' href='#n668'>668</a> <a id='n669' href='#n669'>669</a> <a id='n670' href='#n670'>670</a> <a id='n671' href='#n671'>671</a> <a id='n672' href='#n672'>672</a> <a id='n673' href='#n673'>673</a> <a id='n674' href='#n674'>674</a> <a id='n675' href='#n675'>675</a> <a id='n676' href='#n676'>676</a> <a id='n677' href='#n677'>677</a> <a id='n678' href='#n678'>678</a> <a id='n679' href='#n679'>679</a> <a id='n680' href='#n680'>680</a> <a id='n681' href='#n681'>681</a> <a id='n682' href='#n682'>682</a> <a id='n683' href='#n683'>683</a> <a id='n684' href='#n684'>684</a> <a id='n685' href='#n685'>685</a> <a id='n686' href='#n686'>686</a> <a id='n687' href='#n687'>687</a> <a id='n688' href='#n688'>688</a> <a id='n689' href='#n689'>689</a> <a id='n690' href='#n690'>690</a> <a id='n691' href='#n691'>691</a> <a id='n692' href='#n692'>692</a> <a id='n693' href='#n693'>693</a> <a id='n694' href='#n694'>694</a> <a id='n695' href='#n695'>695</a> <a id='n696' href='#n696'>696</a> <a id='n697' href='#n697'>697</a> <a id='n698' href='#n698'>698</a> <a id='n699' href='#n699'>699</a> <a id='n700' href='#n700'>700</a> <a id='n701' href='#n701'>701</a> <a id='n702' href='#n702'>702</a> <a id='n703' href='#n703'>703</a> <a id='n704' href='#n704'>704</a> <a id='n705' href='#n705'>705</a> <a id='n706' href='#n706'>706</a> <a id='n707' href='#n707'>707</a> <a id='n708' href='#n708'>708</a> <a id='n709' href='#n709'>709</a> <a id='n710' href='#n710'>710</a> <a id='n711' href='#n711'>711</a> <a id='n712' href='#n712'>712</a> <a id='n713' href='#n713'>713</a> <a id='n714' href='#n714'>714</a> <a id='n715' href='#n715'>715</a> <a id='n716' href='#n716'>716</a> <a id='n717' href='#n717'>717</a> <a id='n718' href='#n718'>718</a> <a id='n719' href='#n719'>719</a> <a id='n720' href='#n720'>720</a> <a id='n721' href='#n721'>721</a> <a id='n722' href='#n722'>722</a> <a id='n723' href='#n723'>723</a> <a id='n724' href='#n724'>724</a> <a id='n725' href='#n725'>725</a> <a id='n726' href='#n726'>726</a> <a id='n727' href='#n727'>727</a> <a id='n728' href='#n728'>728</a> <a id='n729' href='#n729'>729</a> <a id='n730' href='#n730'>730</a> <a id='n731' href='#n731'>731</a> <a id='n732' href='#n732'>732</a> <a id='n733' href='#n733'>733</a> <a id='n734' href='#n734'>734</a> <a id='n735' href='#n735'>735</a> <a id='n736' href='#n736'>736</a> <a id='n737' href='#n737'>737</a> <a id='n738' href='#n738'>738</a> <a id='n739' href='#n739'>739</a> <a id='n740' href='#n740'>740</a> <a id='n741' href='#n741'>741</a> <a id='n742' href='#n742'>742</a> <a id='n743' href='#n743'>743</a> <a id='n744' href='#n744'>744</a> <a id='n745' href='#n745'>745</a> <a id='n746' href='#n746'>746</a> <a id='n747' href='#n747'>747</a> <a id='n748' href='#n748'>748</a> <a id='n749' href='#n749'>749</a> <a id='n750' href='#n750'>750</a> <a id='n751' href='#n751'>751</a> <a id='n752' href='#n752'>752</a> <a id='n753' href='#n753'>753</a> <a id='n754' href='#n754'>754</a> <a id='n755' href='#n755'>755</a> <a id='n756' href='#n756'>756</a> <a id='n757' href='#n757'>757</a> <a id='n758' href='#n758'>758</a> <a id='n759' href='#n759'>759</a> <a id='n760' href='#n760'>760</a> <a id='n761' href='#n761'>761</a> <a id='n762' href='#n762'>762</a> <a id='n763' href='#n763'>763</a> <a id='n764' href='#n764'>764</a> <a id='n765' href='#n765'>765</a> <a id='n766' href='#n766'>766</a> <a id='n767' href='#n767'>767</a> <a id='n768' href='#n768'>768</a> <a id='n769' href='#n769'>769</a> <a id='n770' href='#n770'>770</a> <a id='n771' href='#n771'>771</a> <a id='n772' href='#n772'>772</a> <a id='n773' href='#n773'>773</a> <a id='n774' href='#n774'>774</a> <a id='n775' href='#n775'>775</a> <a id='n776' href='#n776'>776</a> <a id='n777' href='#n777'>777</a> <a id='n778' href='#n778'>778</a> <a id='n779' href='#n779'>779</a> <a id='n780' href='#n780'>780</a> <a id='n781' href='#n781'>781</a> <a id='n782' href='#n782'>782</a> <a id='n783' href='#n783'>783</a> <a id='n784' href='#n784'>784</a> <a id='n785' href='#n785'>785</a> <a id='n786' href='#n786'>786</a> <a id='n787' href='#n787'>787</a> <a id='n788' href='#n788'>788</a> <a id='n789' href='#n789'>789</a> <a id='n790' href='#n790'>790</a> <a id='n791' href='#n791'>791</a> <a id='n792' href='#n792'>792</a> <a id='n793' href='#n793'>793</a> <a id='n794' href='#n794'>794</a> <a id='n795' href='#n795'>795</a> <a id='n796' href='#n796'>796</a> <a id='n797' href='#n797'>797</a> <a id='n798' href='#n798'>798</a> <a id='n799' href='#n799'>799</a> <a id='n800' href='#n800'>800</a> <a id='n801' href='#n801'>801</a> <a id='n802' href='#n802'>802</a> <a id='n803' href='#n803'>803</a> <a id='n804' href='#n804'>804</a> <a id='n805' href='#n805'>805</a> <a id='n806' href='#n806'>806</a> <a id='n807' href='#n807'>807</a> <a id='n808' href='#n808'>808</a> <a id='n809' href='#n809'>809</a> <a id='n810' href='#n810'>810</a> <a id='n811' href='#n811'>811</a> <a id='n812' href='#n812'>812</a> <a id='n813' href='#n813'>813</a> <a id='n814' href='#n814'>814</a> <a id='n815' href='#n815'>815</a> <a id='n816' href='#n816'>816</a> <a id='n817' href='#n817'>817</a> <a id='n818' href='#n818'>818</a> <a id='n819' href='#n819'>819</a> <a id='n820' href='#n820'>820</a> <a id='n821' href='#n821'>821</a> <a id='n822' href='#n822'>822</a> <a id='n823' href='#n823'>823</a> <a id='n824' href='#n824'>824</a> <a id='n825' href='#n825'>825</a> <a id='n826' href='#n826'>826</a> <a id='n827' href='#n827'>827</a> <a id='n828' href='#n828'>828</a> <a id='n829' href='#n829'>829</a> <a id='n830' href='#n830'>830</a> <a id='n831' href='#n831'>831</a> <a id='n832' href='#n832'>832</a> <a id='n833' href='#n833'>833</a> <a id='n834' href='#n834'>834</a> <a id='n835' href='#n835'>835</a> <a id='n836' href='#n836'>836</a> <a id='n837' href='#n837'>837</a> <a id='n838' href='#n838'>838</a> <a id='n839' href='#n839'>839</a> <a id='n840' href='#n840'>840</a> <a id='n841' href='#n841'>841</a> <a id='n842' href='#n842'>842</a> <a id='n843' href='#n843'>843</a> <a id='n844' href='#n844'>844</a> <a id='n845' href='#n845'>845</a> <a id='n846' href='#n846'>846</a> <a id='n847' href='#n847'>847</a> <a id='n848' href='#n848'>848</a> <a id='n849' href='#n849'>849</a> <a id='n850' href='#n850'>850</a> <a id='n851' href='#n851'>851</a> <a id='n852' href='#n852'>852</a> <a id='n853' href='#n853'>853</a> <a id='n854' href='#n854'>854</a> <a id='n855' href='#n855'>855</a> <a id='n856' href='#n856'>856</a> <a id='n857' href='#n857'>857</a> <a id='n858' href='#n858'>858</a> <a id='n859' href='#n859'>859</a> <a id='n860' href='#n860'>860</a> <a id='n861' href='#n861'>861</a> <a id='n862' href='#n862'>862</a> <a id='n863' href='#n863'>863</a> <a id='n864' href='#n864'>864</a> <a id='n865' href='#n865'>865</a> <a id='n866' href='#n866'>866</a> <a id='n867' href='#n867'>867</a> <a id='n868' href='#n868'>868</a> <a id='n869' href='#n869'>869</a> <a id='n870' href='#n870'>870</a> <a id='n871' href='#n871'>871</a> <a id='n872' href='#n872'>872</a> <a id='n873' href='#n873'>873</a> <a id='n874' href='#n874'>874</a> <a id='n875' href='#n875'>875</a> <a id='n876' href='#n876'>876</a> <a id='n877' href='#n877'>877</a> <a id='n878' href='#n878'>878</a> <a id='n879' href='#n879'>879</a> <a id='n880' href='#n880'>880</a> <a id='n881' href='#n881'>881</a> <a id='n882' href='#n882'>882</a> <a id='n883' href='#n883'>883</a> <a id='n884' href='#n884'>884</a> <a id='n885' href='#n885'>885</a> <a id='n886' href='#n886'>886</a> <a id='n887' href='#n887'>887</a> <a id='n888' href='#n888'>888</a> <a id='n889' href='#n889'>889</a> <a id='n890' href='#n890'>890</a> <a id='n891' href='#n891'>891</a> <a id='n892' href='#n892'>892</a> <a id='n893' href='#n893'>893</a> <a id='n894' href='#n894'>894</a> <a id='n895' href='#n895'>895</a> <a id='n896' href='#n896'>896</a> <a id='n897' href='#n897'>897</a> <a id='n898' href='#n898'>898</a> <a id='n899' href='#n899'>899</a> <a id='n900' href='#n900'>900</a> <a id='n901' href='#n901'>901</a> <a id='n902' href='#n902'>902</a> <a id='n903' href='#n903'>903</a> <a id='n904' href='#n904'>904</a> <a id='n905' href='#n905'>905</a> <a id='n906' href='#n906'>906</a> <a id='n907' href='#n907'>907</a> <a id='n908' href='#n908'>908</a> <a id='n909' href='#n909'>909</a> <a id='n910' href='#n910'>910</a> <a id='n911' href='#n911'>911</a> <a id='n912' href='#n912'>912</a> <a id='n913' href='#n913'>913</a> <a id='n914' href='#n914'>914</a> <a id='n915' href='#n915'>915</a> <a id='n916' href='#n916'>916</a> <a id='n917' href='#n917'>917</a> <a id='n918' href='#n918'>918</a> <a id='n919' href='#n919'>919</a> <a id='n920' href='#n920'>920</a> <a id='n921' href='#n921'>921</a> <a id='n922' href='#n922'>922</a> <a id='n923' href='#n923'>923</a> <a id='n924' href='#n924'>924</a> <a id='n925' href='#n925'>925</a> <a id='n926' href='#n926'>926</a> <a id='n927' href='#n927'>927</a> <a id='n928' href='#n928'>928</a> <a id='n929' href='#n929'>929</a> <a id='n930' href='#n930'>930</a> <a id='n931' href='#n931'>931</a> <a id='n932' href='#n932'>932</a> <a id='n933' href='#n933'>933</a> <a id='n934' href='#n934'>934</a> <a id='n935' href='#n935'>935</a> <a id='n936' href='#n936'>936</a> <a id='n937' href='#n937'>937</a> <a id='n938' href='#n938'>938</a> <a id='n939' href='#n939'>939</a> <a id='n940' href='#n940'>940</a> <a id='n941' href='#n941'>941</a> <a id='n942' href='#n942'>942</a> <a id='n943' href='#n943'>943</a> <a id='n944' href='#n944'>944</a> <a id='n945' href='#n945'>945</a> <a id='n946' href='#n946'>946</a> <a id='n947' href='#n947'>947</a> <a id='n948' href='#n948'>948</a> <a id='n949' href='#n949'>949</a> <a id='n950' href='#n950'>950</a> <a id='n951' href='#n951'>951</a> <a id='n952' href='#n952'>952</a> <a id='n953' href='#n953'>953</a> <a id='n954' href='#n954'>954</a> <a id='n955' href='#n955'>955</a> <a id='n956' href='#n956'>956</a> <a id='n957' href='#n957'>957</a> <a id='n958' href='#n958'>958</a> <a id='n959' href='#n959'>959</a> <a id='n960' href='#n960'>960</a> <a id='n961' href='#n961'>961</a> <a id='n962' href='#n962'>962</a> <a id='n963' href='#n963'>963</a> <a id='n964' href='#n964'>964</a> <a id='n965' href='#n965'>965</a> <a id='n966' href='#n966'>966</a> <a id='n967' href='#n967'>967</a> <a id='n968' href='#n968'>968</a> <a id='n969' href='#n969'>969</a> <a id='n970' href='#n970'>970</a> <a id='n971' href='#n971'>971</a> <a id='n972' href='#n972'>972</a> <a id='n973' href='#n973'>973</a> <a id='n974' href='#n974'>974</a> <a id='n975' href='#n975'>975</a> <a id='n976' href='#n976'>976</a> <a id='n977' href='#n977'>977</a> <a id='n978' href='#n978'>978</a> <a id='n979' href='#n979'>979</a> <a id='n980' href='#n980'>980</a> <a id='n981' href='#n981'>981</a> <a id='n982' href='#n982'>982</a> <a id='n983' href='#n983'>983</a> <a id='n984' href='#n984'>984</a> <a id='n985' href='#n985'>985</a> <a id='n986' href='#n986'>986</a> <a id='n987' href='#n987'>987</a> <a id='n988' href='#n988'>988</a> <a id='n989' href='#n989'>989</a> <a id='n990' href='#n990'>990</a> <a id='n991' href='#n991'>991</a> <a id='n992' href='#n992'>992</a> <a id='n993' href='#n993'>993</a> <a id='n994' href='#n994'>994</a> <a id='n995' href='#n995'>995</a> <a id='n996' href='#n996'>996</a> <a id='n997' href='#n997'>997</a> <a id='n998' href='#n998'>998</a> <a id='n999' href='#n999'>999</a> <a id='n1000' href='#n1000'>1000</a> <a id='n1001' href='#n1001'>1001</a> <a id='n1002' href='#n1002'>1002</a> <a id='n1003' href='#n1003'>1003</a> <a id='n1004' href='#n1004'>1004</a> <a id='n1005' href='#n1005'>1005</a> <a id='n1006' href='#n1006'>1006</a> <a id='n1007' href='#n1007'>1007</a> <a id='n1008' href='#n1008'>1008</a> <a id='n1009' href='#n1009'>1009</a> <a id='n1010' href='#n1010'>1010</a> <a id='n1011' href='#n1011'>1011</a> <a id='n1012' href='#n1012'>1012</a> <a id='n1013' href='#n1013'>1013</a> <a id='n1014' href='#n1014'>1014</a> <a id='n1015' href='#n1015'>1015</a> <a id='n1016' href='#n1016'>1016</a> <a id='n1017' href='#n1017'>1017</a> <a id='n1018' href='#n1018'>1018</a> <a id='n1019' href='#n1019'>1019</a> <a id='n1020' href='#n1020'>1020</a> <a id='n1021' href='#n1021'>1021</a> <a id='n1022' href='#n1022'>1022</a> <a id='n1023' href='#n1023'>1023</a> <a id='n1024' href='#n1024'>1024</a> <a id='n1025' href='#n1025'>1025</a> <a id='n1026' href='#n1026'>1026</a> <a id='n1027' href='#n1027'>1027</a> <a id='n1028' href='#n1028'>1028</a> <a id='n1029' href='#n1029'>1029</a> <a id='n1030' href='#n1030'>1030</a> <a id='n1031' href='#n1031'>1031</a> <a id='n1032' href='#n1032'>1032</a> <a id='n1033' href='#n1033'>1033</a> <a id='n1034' href='#n1034'>1034</a> <a id='n1035' href='#n1035'>1035</a> <a id='n1036' href='#n1036'>1036</a> <a id='n1037' href='#n1037'>1037</a> <a id='n1038' href='#n1038'>1038</a> <a id='n1039' href='#n1039'>1039</a> <a id='n1040' href='#n1040'>1040</a> <a id='n1041' href='#n1041'>1041</a> <a id='n1042' href='#n1042'>1042</a> <a id='n1043' href='#n1043'>1043</a> <a id='n1044' href='#n1044'>1044</a> <a id='n1045' href='#n1045'>1045</a> <a id='n1046' href='#n1046'>1046</a> <a id='n1047' href='#n1047'>1047</a> <a id='n1048' href='#n1048'>1048</a> <a id='n1049' href='#n1049'>1049</a> <a id='n1050' href='#n1050'>1050</a> <a id='n1051' href='#n1051'>1051</a> <a id='n1052' href='#n1052'>1052</a> <a id='n1053' href='#n1053'>1053</a> <a id='n1054' href='#n1054'>1054</a> <a id='n1055' href='#n1055'>1055</a> <a id='n1056' href='#n1056'>1056</a> <a id='n1057' href='#n1057'>1057</a> <a id='n1058' href='#n1058'>1058</a> <a id='n1059' href='#n1059'>1059</a> <a id='n1060' href='#n1060'>1060</a> <a id='n1061' href='#n1061'>1061</a> <a id='n1062' href='#n1062'>1062</a> <a id='n1063' href='#n1063'>1063</a> <a id='n1064' href='#n1064'>1064</a> <a id='n1065' href='#n1065'>1065</a> <a id='n1066' href='#n1066'>1066</a> <a id='n1067' href='#n1067'>1067</a> <a id='n1068' href='#n1068'>1068</a> <a id='n1069' href='#n1069'>1069</a> <a id='n1070' href='#n1070'>1070</a> <a id='n1071' href='#n1071'>1071</a> <a id='n1072' href='#n1072'>1072</a> <a id='n1073' href='#n1073'>1073</a> <a id='n1074' href='#n1074'>1074</a> <a id='n1075' href='#n1075'>1075</a> <a id='n1076' href='#n1076'>1076</a> <a id='n1077' href='#n1077'>1077</a> <a id='n1078' href='#n1078'>1078</a> <a id='n1079' href='#n1079'>1079</a> <a id='n1080' href='#n1080'>1080</a> <a id='n1081' href='#n1081'>1081</a> <a id='n1082' href='#n1082'>1082</a> <a id='n1083' href='#n1083'>1083</a> <a id='n1084' href='#n1084'>1084</a> <a id='n1085' href='#n1085'>1085</a> <a id='n1086' href='#n1086'>1086</a> <a id='n1087' href='#n1087'>1087</a> <a id='n1088' href='#n1088'>1088</a> <a id='n1089' href='#n1089'>1089</a> <a id='n1090' href='#n1090'>1090</a> <a id='n1091' href='#n1091'>1091</a> <a id='n1092' href='#n1092'>1092</a> <a id='n1093' href='#n1093'>1093</a> <a id='n1094' href='#n1094'>1094</a> <a id='n1095' href='#n1095'>1095</a> <a id='n1096' href='#n1096'>1096</a> <a id='n1097' href='#n1097'>1097</a> <a id='n1098' href='#n1098'>1098</a> <a id='n1099' href='#n1099'>1099</a> <a id='n1100' href='#n1100'>1100</a> <a id='n1101' href='#n1101'>1101</a> <a id='n1102' href='#n1102'>1102</a> <a id='n1103' href='#n1103'>1103</a> <a id='n1104' href='#n1104'>1104</a> <a id='n1105' href='#n1105'>1105</a> <a id='n1106' href='#n1106'>1106</a> <a id='n1107' href='#n1107'>1107</a> <a id='n1108' href='#n1108'>1108</a> <a id='n1109' href='#n1109'>1109</a> <a id='n1110' href='#n1110'>1110</a> <a id='n1111' href='#n1111'>1111</a> <a id='n1112' href='#n1112'>1112</a> <a id='n1113' href='#n1113'>1113</a> <a id='n1114' href='#n1114'>1114</a> <a id='n1115' href='#n1115'>1115</a> <a id='n1116' href='#n1116'>1116</a> <a id='n1117' href='#n1117'>1117</a> <a id='n1118' href='#n1118'>1118</a> <a id='n1119' href='#n1119'>1119</a> <a id='n1120' href='#n1120'>1120</a> <a id='n1121' href='#n1121'>1121</a> <a id='n1122' href='#n1122'>1122</a> <a id='n1123' href='#n1123'>1123</a> <a id='n1124' href='#n1124'>1124</a> <a id='n1125' href='#n1125'>1125</a> <a id='n1126' href='#n1126'>1126</a> <a id='n1127' href='#n1127'>1127</a> <a id='n1128' href='#n1128'>1128</a> <a id='n1129' href='#n1129'>1129</a> <a id='n1130' href='#n1130'>1130</a> <a id='n1131' href='#n1131'>1131</a> <a id='n1132' href='#n1132'>1132</a> <a id='n1133' href='#n1133'>1133</a> <a id='n1134' href='#n1134'>1134</a> <a id='n1135' href='#n1135'>1135</a> <a id='n1136' href='#n1136'>1136</a> <a id='n1137' href='#n1137'>1137</a> <a id='n1138' href='#n1138'>1138</a> <a id='n1139' href='#n1139'>1139</a> <a id='n1140' href='#n1140'>1140</a> <a id='n1141' href='#n1141'>1141</a> <a id='n1142' href='#n1142'>1142</a> <a id='n1143' href='#n1143'>1143</a> <a id='n1144' href='#n1144'>1144</a> <a id='n1145' href='#n1145'>1145</a> <a id='n1146' href='#n1146'>1146</a> <a id='n1147' href='#n1147'>1147</a> <a id='n1148' href='#n1148'>1148</a> <a id='n1149' href='#n1149'>1149</a> <a id='n1150' href='#n1150'>1150</a> <a id='n1151' href='#n1151'>1151</a> <a id='n1152' href='#n1152'>1152</a> <a id='n1153' href='#n1153'>1153</a> <a id='n1154' href='#n1154'>1154</a> <a id='n1155' href='#n1155'>1155</a> <a id='n1156' href='#n1156'>1156</a> <a id='n1157' href='#n1157'>1157</a> <a id='n1158' href='#n1158'>1158</a> <a id='n1159' href='#n1159'>1159</a> <a id='n1160' href='#n1160'>1160</a> <a id='n1161' href='#n1161'>1161</a> <a id='n1162' href='#n1162'>1162</a> <a id='n1163' href='#n1163'>1163</a> <a id='n1164' href='#n1164'>1164</a> <a id='n1165' href='#n1165'>1165</a> <a id='n1166' href='#n1166'>1166</a> <a id='n1167' href='#n1167'>1167</a> <a id='n1168' href='#n1168'>1168</a> <a id='n1169' href='#n1169'>1169</a> <a id='n1170' href='#n1170'>1170</a> <a id='n1171' href='#n1171'>1171</a> <a id='n1172' href='#n1172'>1172</a> <a id='n1173' href='#n1173'>1173</a> <a id='n1174' href='#n1174'>1174</a> <a id='n1175' href='#n1175'>1175</a> <a id='n1176' href='#n1176'>1176</a> <a id='n1177' href='#n1177'>1177</a> <a id='n1178' href='#n1178'>1178</a> <a id='n1179' href='#n1179'>1179</a> <a id='n1180' href='#n1180'>1180</a> <a id='n1181' href='#n1181'>1181</a> <a id='n1182' href='#n1182'>1182</a> <a id='n1183' href='#n1183'>1183</a> <a id='n1184' href='#n1184'>1184</a> <a id='n1185' href='#n1185'>1185</a> <a id='n1186' href='#n1186'>1186</a> <a id='n1187' href='#n1187'>1187</a> <a id='n1188' href='#n1188'>1188</a> <a id='n1189' href='#n1189'>1189</a> <a id='n1190' href='#n1190'>1190</a> <a id='n1191' href='#n1191'>1191</a> <a id='n1192' href='#n1192'>1192</a> <a id='n1193' href='#n1193'>1193</a> <a id='n1194' href='#n1194'>1194</a> <a id='n1195' href='#n1195'>1195</a> <a id='n1196' href='#n1196'>1196</a> <a id='n1197' href='#n1197'>1197</a> <a id='n1198' href='#n1198'>1198</a> <a id='n1199' href='#n1199'>1199</a> <a id='n1200' href='#n1200'>1200</a> <a id='n1201' href='#n1201'>1201</a> <a id='n1202' href='#n1202'>1202</a> <a id='n1203' href='#n1203'>1203</a> <a id='n1204' href='#n1204'>1204</a> <a id='n1205' href='#n1205'>1205</a> <a id='n1206' href='#n1206'>1206</a> <a id='n1207' href='#n1207'>1207</a> <a id='n1208' href='#n1208'>1208</a> <a id='n1209' href='#n1209'>1209</a> <a id='n1210' href='#n1210'>1210</a> <a id='n1211' href='#n1211'>1211</a> <a id='n1212' href='#n1212'>1212</a> <a id='n1213' href='#n1213'>1213</a> <a id='n1214' href='#n1214'>1214</a> <a id='n1215' href='#n1215'>1215</a> <a id='n1216' href='#n1216'>1216</a> <a id='n1217' href='#n1217'>1217</a> <a id='n1218' href='#n1218'>1218</a> <a id='n1219' href='#n1219'>1219</a> <a id='n1220' href='#n1220'>1220</a> <a id='n1221' href='#n1221'>1221</a> <a id='n1222' href='#n1222'>1222</a> <a id='n1223' href='#n1223'>1223</a> <a id='n1224' href='#n1224'>1224</a> <a id='n1225' href='#n1225'>1225</a> <a id='n1226' href='#n1226'>1226</a> <a id='n1227' href='#n1227'>1227</a> <a id='n1228' href='#n1228'>1228</a> <a id='n1229' href='#n1229'>1229</a> <a id='n1230' href='#n1230'>1230</a> <a id='n1231' href='#n1231'>1231</a> <a id='n1232' href='#n1232'>1232</a> <a id='n1233' href='#n1233'>1233</a> <a id='n1234' href='#n1234'>1234</a> <a id='n1235' href='#n1235'>1235</a> <a id='n1236' href='#n1236'>1236</a> <a id='n1237' href='#n1237'>1237</a> <a id='n1238' href='#n1238'>1238</a> <a id='n1239' href='#n1239'>1239</a> <a id='n1240' href='#n1240'>1240</a> <a id='n1241' href='#n1241'>1241</a> <a id='n1242' href='#n1242'>1242</a> <a id='n1243' href='#n1243'>1243</a> <a id='n1244' href='#n1244'>1244</a> <a id='n1245' href='#n1245'>1245</a> <a id='n1246' href='#n1246'>1246</a> <a id='n1247' href='#n1247'>1247</a> <a id='n1248' href='#n1248'>1248</a> <a id='n1249' href='#n1249'>1249</a> <a id='n1250' href='#n1250'>1250</a> <a id='n1251' href='#n1251'>1251</a> <a id='n1252' href='#n1252'>1252</a> <a id='n1253' href='#n1253'>1253</a> <a id='n1254' href='#n1254'>1254</a> <a id='n1255' href='#n1255'>1255</a> <a id='n1256' href='#n1256'>1256</a> <a id='n1257' href='#n1257'>1257</a> <a id='n1258' href='#n1258'>1258</a> <a id='n1259' href='#n1259'>1259</a> <a id='n1260' href='#n1260'>1260</a> <a id='n1261' href='#n1261'>1261</a> <a id='n1262' href='#n1262'>1262</a> <a id='n1263' href='#n1263'>1263</a> <a id='n1264' href='#n1264'>1264</a> <a id='n1265' href='#n1265'>1265</a> <a id='n1266' href='#n1266'>1266</a> <a id='n1267' href='#n1267'>1267</a> <a id='n1268' href='#n1268'>1268</a> <a id='n1269' href='#n1269'>1269</a> <a id='n1270' href='#n1270'>1270</a> <a id='n1271' href='#n1271'>1271</a> <a id='n1272' href='#n1272'>1272</a> <a id='n1273' href='#n1273'>1273</a> <a id='n1274' href='#n1274'>1274</a> <a id='n1275' href='#n1275'>1275</a> <a id='n1276' href='#n1276'>1276</a> <a id='n1277' href='#n1277'>1277</a> <a id='n1278' href='#n1278'>1278</a> <a id='n1279' href='#n1279'>1279</a> <a id='n1280' href='#n1280'>1280</a> <a id='n1281' href='#n1281'>1281</a> <a id='n1282' href='#n1282'>1282</a> <a id='n1283' href='#n1283'>1283</a> <a id='n1284' href='#n1284'>1284</a> <a id='n1285' href='#n1285'>1285</a> <a id='n1286' href='#n1286'>1286</a> <a id='n1287' href='#n1287'>1287</a> <a id='n1288' href='#n1288'>1288</a> <a id='n1289' href='#n1289'>1289</a> <a id='n1290' href='#n1290'>1290</a> <a id='n1291' href='#n1291'>1291</a> <a id='n1292' href='#n1292'>1292</a> <a id='n1293' href='#n1293'>1293</a> <a id='n1294' href='#n1294'>1294</a> <a id='n1295' href='#n1295'>1295</a> <a id='n1296' href='#n1296'>1296</a> <a id='n1297' href='#n1297'>1297</a> <a id='n1298' href='#n1298'>1298</a> <a id='n1299' href='#n1299'>1299</a> <a id='n1300' href='#n1300'>1300</a> <a id='n1301' href='#n1301'>1301</a> <a id='n1302' href='#n1302'>1302</a> <a id='n1303' href='#n1303'>1303</a> <a id='n1304' href='#n1304'>1304</a> <a id='n1305' href='#n1305'>1305</a> <a id='n1306' href='#n1306'>1306</a> <a id='n1307' href='#n1307'>1307</a> <a id='n1308' href='#n1308'>1308</a> <a id='n1309' href='#n1309'>1309</a> <a id='n1310' href='#n1310'>1310</a> <a id='n1311' href='#n1311'>1311</a> <a id='n1312' href='#n1312'>1312</a> <a id='n1313' href='#n1313'>1313</a> <a id='n1314' href='#n1314'>1314</a> <a id='n1315' href='#n1315'>1315</a> <a id='n1316' href='#n1316'>1316</a> <a id='n1317' href='#n1317'>1317</a> <a id='n1318' href='#n1318'>1318</a> <a id='n1319' href='#n1319'>1319</a> <a id='n1320' href='#n1320'>1320</a> <a id='n1321' href='#n1321'>1321</a> <a id='n1322' href='#n1322'>1322</a> <a id='n1323' href='#n1323'>1323</a> <a id='n1324' href='#n1324'>1324</a> <a id='n1325' href='#n1325'>1325</a> <a id='n1326' href='#n1326'>1326</a> <a id='n1327' href='#n1327'>1327</a> <a id='n1328' href='#n1328'>1328</a> <a id='n1329' href='#n1329'>1329</a> <a id='n1330' href='#n1330'>1330</a> <a id='n1331' href='#n1331'>1331</a> <a id='n1332' href='#n1332'>1332</a> <a id='n1333' href='#n1333'>1333</a> <a id='n1334' href='#n1334'>1334</a> <a id='n1335' href='#n1335'>1335</a> <a id='n1336' href='#n1336'>1336</a> <a id='n1337' href='#n1337'>1337</a> <a id='n1338' href='#n1338'>1338</a> <a id='n1339' href='#n1339'>1339</a> <a id='n1340' href='#n1340'>1340</a> <a id='n1341' href='#n1341'>1341</a> <a id='n1342' href='#n1342'>1342</a> <a id='n1343' href='#n1343'>1343</a> <a id='n1344' href='#n1344'>1344</a> <a id='n1345' href='#n1345'>1345</a> <a id='n1346' href='#n1346'>1346</a> <a id='n1347' href='#n1347'>1347</a> <a id='n1348' href='#n1348'>1348</a> <a id='n1349' href='#n1349'>1349</a> <a id='n1350' href='#n1350'>1350</a> <a id='n1351' href='#n1351'>1351</a> <a id='n1352' href='#n1352'>1352</a> <a id='n1353' href='#n1353'>1353</a> <a id='n1354' href='#n1354'>1354</a> <a id='n1355' href='#n1355'>1355</a> </pre></td> <td class='lines'><pre><code><span class="hl kwa">package</span> install_steps_interactive<span class="hl opt">;</span> <span class="hl slc"># $Id$</span> <span class="hl kwa">use</span> strict<span class="hl opt">;</span> <span class="hl kwa">use</span> vars <span class="hl str">qw(</span><span class="hl ipl">@ISA</span> <span class="hl str"></span><span class="hl ipl">$new_bootstrap</span><span class="hl str">)</span><span class="hl opt">;</span> <span class="hl kwb">@ISA</span> <span class="hl opt">=</span> <span class="hl str">qw(install_steps)</span><span class="hl opt">;</span> <span class="hl slc">#-######################################################################################</span> <span class="hl slc">#- misc imports</span> <span class="hl slc">#-######################################################################################</span> <span class="hl kwa">use</span> common<span class="hl opt">;</span> <span class="hl kwa">use</span> partition_table<span class="hl opt">;</span> <span class="hl kwa">use</span> fs<span class="hl opt">::</span>type<span class="hl opt">;</span> <span class="hl kwa">use</span> install_steps<span class="hl opt">;</span> <span class="hl kwa">use</span> install_interactive<span class="hl opt">;</span> <span class="hl kwa">use</span> install_any<span class="hl opt">;</span> <span class="hl kwa">use</span> install_messages<span class="hl opt">;</span> <span class="hl kwa">use</span> detect_devices<span class="hl opt">;</span> <span class="hl kwa">use</span> run_program<span class="hl opt">;</span> <span class="hl kwa">use</span> devices<span class="hl opt">;</span> <span class="hl kwa">use</span> fsedit<span class="hl opt">;</span> <span class="hl kwa">use</span> loopback<span class="hl opt">;</span> <span class="hl kwa">use</span> mouse<span class="hl opt">;</span> <span class="hl kwa">use</span> modules<span class="hl opt">;</span> <span class="hl kwa">use</span> modules<span class="hl opt">::</span>interactive<span class="hl opt">;</span> <span class="hl kwa">use</span> lang<span class="hl opt">;</span> <span class="hl kwa">use</span> keyboard<span class="hl opt">;</span> <span class="hl kwa">use</span> any<span class="hl opt">;</span> <span class="hl kwa">use</span> <span class="hl kwc">log</span><span class="hl opt">;</span> <span class="hl slc">#-######################################################################################</span> <span class="hl slc">#- In/Out Steps Functions</span> <span class="hl slc">#-######################################################################################</span> <span class="hl kwa">sub</span> errorInStep <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $err</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span>N<span class="hl opt">(</span><span class="hl str">"Error"</span><span class="hl opt">), [</span> N<span class="hl opt">(</span><span class="hl str">"An error occurred"</span><span class="hl opt">),</span> formatError<span class="hl opt">(</span><span class="hl kwb">$err</span><span class="hl opt">) ]);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> kill_action <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwc">kill</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#-######################################################################################</span> <span class="hl slc">#- Steps Functions</span> <span class="hl slc">#-######################################################################################</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> selectLanguage <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>lang<span class="hl opt">} =</span> any<span class="hl opt">::</span>selectLanguage<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>lang<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>langs<span class="hl opt">} ||= {});</span> install_steps<span class="hl opt">::</span>selectLanguage<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">isa</span><span class="hl opt">(</span><span class="hl str">'interactive::gtk'</span><span class="hl opt">)) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> formatAlaTeX<span class="hl opt">(</span> <span class="hl str">"If you see this message it is because you chose a language for</span> <span class="hl str">which DrakX does not include a translation yet; however the fact</span> <span class="hl str">that it is listed means there is some support for it anyway.</span> <span class="hl str"></span> <span class="hl str">That is, once GNU/Linux will be installed, you will be able to at</span> <span class="hl str">least read and write in that language; and possibly more (various</span> <span class="hl str">fonts, spell checkers, various programs translated etc. that</span> <span class="hl str">varies from language to language)."</span><span class="hl opt">))</span> <span class="hl kwa">if</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>lang<span class="hl opt">} !~</span> <span class="hl kwd">/^en/</span> <span class="hl opt">&& !</span>lang<span class="hl opt">::</span>load_mo<span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl slc">#- no need to have this in po since it is never translated</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> <span class="hl str">"The characters of your language can't be displayed in console,</span> <span class="hl str">so the messages will be displayed in english during installation"</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl kwb">$ENV</span><span class="hl opt">{</span>LANGUAGE<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">'C'</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> acceptLicense <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>release_notes<span class="hl opt">} =</span> <span class="hl kwa">do</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$f</span> <span class="hl opt">=</span> install_any<span class="hl opt">::</span>getFile<span class="hl opt">(</span><span class="hl str">'release-notes.txt'</span><span class="hl opt">);</span> <span class="hl kwc">join</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">, <</span><span class="hl kwb">$f</span><span class="hl opt">>);</span> <span class="hl opt">};</span> <span class="hl kwa">return if</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>useless_thing_accepted<span class="hl opt">};</span> <span class="hl kwc">my</span> <span class="hl kwb">$r</span> <span class="hl opt">= $::</span>testing ? <span class="hl str">'Accept'</span> <span class="hl opt">:</span> <span class="hl str">'Refuse'</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> title <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"License agreement"</span><span class="hl opt">),</span> cancel <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Quit"</span><span class="hl opt">),</span> messages <span class="hl opt">=></span> formatAlaTeX<span class="hl opt">(</span>install_messages<span class="hl opt">::</span>main_license<span class="hl opt">() .</span> <span class="hl str">"</span><span class="hl esc">\n\n\n</span><span class="hl str">"</span> <span class="hl opt">.</span> install_messages<span class="hl opt">::</span>warning_about_patents<span class="hl opt">()),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'acceptLicense'</span><span class="hl opt">,</span> more_buttons <span class="hl opt">=> [ [</span> N<span class="hl opt">(</span><span class="hl str">"Release Notes"</span><span class="hl opt">),</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span>N<span class="hl opt">(</span><span class="hl str">"Release Notes"</span><span class="hl opt">),</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>release_notes<span class="hl opt">}) },</span> <span class="hl num">1</span> <span class="hl opt">] ],</span> callbacks <span class="hl opt">=> {</span> ok_disabled <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$r</span> <span class="hl kwc">eq</span> <span class="hl str">'Refuse'</span> <span class="hl opt">} },</span> <span class="hl opt">},</span> <span class="hl opt">[ {</span> list <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Accept"</span><span class="hl opt">),</span> N_<span class="hl opt">(</span><span class="hl str">"Refuse"</span><span class="hl opt">) ],</span> val <span class="hl opt">=></span> \<span class="hl kwb">$r,</span> type <span class="hl opt">=></span> <span class="hl str">'list'</span><span class="hl opt">,</span> format <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> translate<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) } } ])</span> <span class="hl kwc">or</span> <span class="hl kwa">do</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">($::</span>globetrotter<span class="hl opt">) {</span> <span class="hl kwc">system</span><span class="hl opt">(</span><span class="hl str">"killall XFree86"</span><span class="hl opt">);</span> <span class="hl kwc">exec</span><span class="hl opt">(</span><span class="hl str">"/sbin/reboot"</span><span class="hl opt">);</span> <span class="hl opt">}</span> install_any<span class="hl opt">::</span>ejectCdrom<span class="hl opt">();</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwa">exit</span><span class="hl opt">;</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> selectKeyboard <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $clicked</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$from_usb</span> <span class="hl opt">=</span> keyboard<span class="hl opt">::</span>from_usb<span class="hl opt">();</span> <span class="hl kwc">my</span> <span class="hl kwb">$l</span> <span class="hl opt">=</span> keyboard<span class="hl opt">::</span>lang2keyboards<span class="hl opt">(</span>lang<span class="hl opt">::</span>langs<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>langs<span class="hl opt">}));</span> <span class="hl kwa">if</span> <span class="hl opt">($::</span>expert <span class="hl opt">||</span> <span class="hl kwb">$clicked</span> <span class="hl opt">|| !(</span><span class="hl kwb">$from_usb</span> <span class="hl opt">||</span> <span class="hl kwb">@$l</span> <span class="hl opt">&&</span> <span class="hl kwb">$l</span><span class="hl opt">->[</span><span class="hl num">0</span><span class="hl opt">][</span><span class="hl num">1</span><span class="hl opt">] >=</span> <span class="hl num">90</span><span class="hl opt">) ||</span> listlength<span class="hl opt">(</span>lang<span class="hl opt">::</span>langs<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>langs<span class="hl opt">})) ></span> <span class="hl num">1</span><span class="hl opt">) {</span> add2hash<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>keyboard<span class="hl opt">},</span> <span class="hl kwb">$from_usb</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">@best</span> <span class="hl opt">=</span> uniq<span class="hl opt">(</span><span class="hl kwb">$from_usb</span> ? <span class="hl kwb">$from_usb</span><span class="hl opt">->{</span>KEYBOARD<span class="hl opt">} : (), (</span><span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->[</span><span class="hl num">0</span><span class="hl opt">] }</span> <span class="hl kwb">@$l</span><span class="hl opt">),</span> <span class="hl str">'us_intl'</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$format</span> <span class="hl opt">=</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> translate<span class="hl opt">(</span>keyboard<span class="hl opt">::</span>KEYBOARD2text<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">])) };</span> <span class="hl kwc">my</span> <span class="hl kwb">$other</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$ext_keyboard</span> <span class="hl opt">=</span> <span class="hl kwc">my</span> <span class="hl kwb">$KEYBOARD</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>keyboard<span class="hl opt">}{</span>KEYBOARD<span class="hl opt">};</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">(</span> <span class="hl opt">{</span> title <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Keyboard"</span><span class="hl opt">),</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Please choose your keyboard layout."</span><span class="hl opt">),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'selectKeyboard'</span><span class="hl opt">,</span> advanced_messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Here is the full list of available keyboards"</span><span class="hl opt">),</span> advanced_label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"More"</span><span class="hl opt">),</span> callbacks <span class="hl opt">=> {</span> changed <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$other</span> <span class="hl opt">=</span> <span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] ==</span> <span class="hl num">1</span> <span class="hl opt">} },</span> <span class="hl opt">},</span> <span class="hl opt">[</span> if_<span class="hl opt">(</span><span class="hl kwb">@best</span> <span class="hl opt">></span> <span class="hl num">1</span><span class="hl opt">, {</span> val <span class="hl opt">=></span> \<span class="hl kwb">$KEYBOARD,</span> type <span class="hl opt">=></span> <span class="hl str">'list'</span><span class="hl opt">,</span> format <span class="hl opt">=></span> <span class="hl kwb">$format,</span> <span class="hl kwc">sort</span> <span class="hl opt">=></span> <span class="hl num">1</span><span class="hl opt">,</span> list <span class="hl opt">=> [</span> <span class="hl kwb">@best</span> <span class="hl opt">] }),</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> \<span class="hl kwb">$ext_keyboard,</span> type <span class="hl opt">=></span> <span class="hl str">'list'</span><span class="hl opt">,</span> format <span class="hl opt">=></span> <span class="hl kwb">$format,</span> list <span class="hl opt">=> [</span> difference2<span class="hl opt">([</span> keyboard<span class="hl opt">::</span>KEYBOARDs<span class="hl opt">() ],</span> \<span class="hl kwb">@best</span><span class="hl opt">) ],</span> advanced <span class="hl opt">=></span> <span class="hl kwb">@best</span> <span class="hl opt">></span> <span class="hl num">1</span> <span class="hl opt">}</span> <span class="hl opt">]);</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>keyboard<span class="hl opt">}{</span>KEYBOARD<span class="hl opt">} =</span> <span class="hl kwb">$other</span> ? <span class="hl kwb">$ext_keyboard</span> <span class="hl opt">:</span> <span class="hl kwb">$KEYBOARD</span><span class="hl opt">;</span> <span class="hl kwc">delete</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>keyboard<span class="hl opt">}{</span>unsafe<span class="hl opt">};</span> <span class="hl opt">}</span> keyboard<span class="hl opt">::</span>group_toggle_choose<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>keyboard<span class="hl opt">})</span> <span class="hl kwc">or</span> <span class="hl kwa">goto</span> <span class="hl opt">&</span>selectKeyboard<span class="hl opt">;</span> install_steps<span class="hl opt">::</span>selectKeyboard<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> selectInstallClass <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl kwb">@l</span> <span class="hl opt">=</span> install_any<span class="hl opt">::</span>find_root_parts<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>fstab<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">})) {</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"proposing to upgrade partitions "</span> <span class="hl opt">.</span> <span class="hl kwc">join</span><span class="hl opt">(</span><span class="hl str">" "</span><span class="hl opt">,</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>part<span class="hl opt">}{</span>device<span class="hl opt">} }</span> <span class="hl kwb">@l</span><span class="hl opt">));</span> <span class="hl kwc">my</span> <span class="hl kwb">@releases</span> <span class="hl opt">=</span> uniq<span class="hl opt">(</span><span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>release<span class="hl opt">} }</span> <span class="hl kwb">@l</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">@releases</span> <span class="hl opt">!=</span> <span class="hl kwb">@l</span><span class="hl opt">) {</span> <span class="hl slc">#- same release name so adding the device to differentiate them:</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>release<span class="hl opt">} .=</span> <span class="hl str">" (</span><span class="hl ipl">$_</span><span class="hl str">->{part}{device})"</span> <span class="hl kwa">foreach</span> <span class="hl kwb">@l</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwc">my</span> <span class="hl kwb">$p</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> title <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Install/Upgrade"</span><span class="hl opt">),</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Is this an install or an upgrade?"</span><span class="hl opt">),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'selectInstallClass'</span><span class="hl opt">,</span> <span class="hl opt">},</span> <span class="hl opt">[ {</span> val <span class="hl opt">=></span> \<span class="hl kwb">$p,</span> list <span class="hl opt">=> [</span> <span class="hl kwb">@l,</span> N_<span class="hl opt">(</span><span class="hl str">"Install"</span><span class="hl opt">) ],</span> type <span class="hl opt">=></span> <span class="hl str">'list'</span><span class="hl opt">,</span> format <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwc">ref</span><span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">])</span> ? N<span class="hl opt">(</span><span class="hl str">"Upgrade</span> <span class="hl ipl">%s</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]{</span>release<span class="hl opt">}) :</span> translate<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) }</span> <span class="hl opt">} ]);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwc">ref</span> <span class="hl kwb">$p</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$part</span> <span class="hl opt">=</span> <span class="hl kwb">$p</span><span class="hl opt">->{</span>part<span class="hl opt">};</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"choosing to upgrade partition</span> <span class="hl ipl">$part</span><span class="hl str">->{device}"</span><span class="hl opt">);</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>migrate_device_names<span class="hl opt">} =</span> install_any<span class="hl opt">::</span>use_root_part<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>all_hds<span class="hl opt">},</span> <span class="hl kwb">$part, $o</span><span class="hl opt">);</span> <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>mntpoint<span class="hl opt">} } @{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>fstab<span class="hl opt">}}) {</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$options, $_unknown</span><span class="hl opt">) =</span> fs<span class="hl opt">::</span>mount_options<span class="hl opt">::</span><span class="hl kwc">unpack</span><span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">);</span> <span class="hl kwb">$options</span><span class="hl opt">->{</span>encrypted<span class="hl opt">}</span> <span class="hl kwc">or</span> <span class="hl kwa">next</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> focus_first <span class="hl opt">=></span> <span class="hl num">1</span> <span class="hl opt">},</span> <span class="hl opt">[ {</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Encryption key for</span> <span class="hl ipl">%s</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>mntpoint<span class="hl opt">}),</span> hidden <span class="hl opt">=></span> <span class="hl num">1</span><span class="hl opt">,</span> val <span class="hl opt">=></span> \<span class="hl kwb">$_</span><span class="hl opt">->{</span>encrypt_key<span class="hl opt">} } ]);</span> <span class="hl opt">}</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>isUpgrade<span class="hl opt">} =</span> <span class="hl kwb">$p</span><span class="hl opt">->{</span>release_file<span class="hl opt">} =~</span> <span class="hl kwd">/redhat/</span> ? <span class="hl str">'redhat'</span> <span class="hl opt">:</span> <span class="hl str">'mandrake'</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> selectMouse <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $force</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$force</span> <span class="hl opt">||=</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>unsafe<span class="hl opt">};</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$force</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$prev</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>type<span class="hl opt">} .</span> <span class="hl str">'|'</span> <span class="hl opt">.</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>name<span class="hl opt">};</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Please choose your type of mouse."</span><span class="hl opt">),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'selectMouse'</span><span class="hl opt">,</span> <span class="hl opt">},</span> <span class="hl opt">[ {</span> list <span class="hl opt">=> [</span> mouse<span class="hl opt">::</span>fullnames<span class="hl opt">() ],</span> separator <span class="hl opt">=></span> <span class="hl str">'|'</span><span class="hl opt">,</span> val <span class="hl opt">=></span> \<span class="hl kwb">$prev,</span> format <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwc">join</span><span class="hl opt">(</span><span class="hl str">'|'</span><span class="hl opt">,</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> translate<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwc">split</span><span class="hl opt">(</span><span class="hl str">'\|'</span><span class="hl opt">,</span> <span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">])) } } ]);</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">} =</span> mouse<span class="hl opt">::</span>fullname2mouse<span class="hl opt">(</span><span class="hl kwb">$prev</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$force</span> <span class="hl opt">&&</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>type<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">'serial'</span><span class="hl opt">) {</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>device<span class="hl opt">} =</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_listf_raw</span><span class="hl opt">({</span> title <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Mouse Port"</span><span class="hl opt">),</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Please choose which serial port your mouse is connected to."</span><span class="hl opt">),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'selectSerialPort'</span><span class="hl opt">,</span> <span class="hl opt">},</span> \<span class="hl opt">&</span>mouse<span class="hl opt">::</span>serial_port2text<span class="hl opt">,</span> <span class="hl opt">[</span> mouse<span class="hl opt">::</span>serial_ports<span class="hl opt">() ])</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span> <span class="hl opt">&</span>selectMouse<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>arch<span class="hl opt">() =~</span> <span class="hl kwd">/ppc/</span> <span class="hl opt">&&</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>nbuttons<span class="hl opt">} ==</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl slc">#- set a sane default F11/F12</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>button2_key<span class="hl opt">} =</span> <span class="hl num">87</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>button3_key<span class="hl opt">} =</span> <span class="hl num">88</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Buttons emulation"</span><span class="hl opt">),</span> <span class="hl opt">[</span> <span class="hl opt">{</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Button 2 Emulation"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>button2_key<span class="hl opt">},</span> list <span class="hl opt">=> [</span> mouse<span class="hl opt">::</span>ppc_one_button_keys<span class="hl opt">() ],</span> format <span class="hl opt">=></span> \<span class="hl opt">&</span>mouse<span class="hl opt">::</span>ppc_one_button_key2text <span class="hl opt">},</span> <span class="hl opt">{</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Button 3 Emulation"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>button3_key<span class="hl opt">},</span> list <span class="hl opt">=> [</span> mouse<span class="hl opt">::</span>ppc_one_button_keys<span class="hl opt">() ],</span> format <span class="hl opt">=></span> \<span class="hl opt">&</span>mouse<span class="hl opt">::</span>ppc_one_button_key2text <span class="hl opt">},</span> <span class="hl opt">])</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>device<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">"usbmouse"</span><span class="hl opt">) {</span> modules<span class="hl opt">::</span>interactive<span class="hl opt">::</span>load_category<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl str">'bus/usb'</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> devices<span class="hl opt">::</span>make<span class="hl opt">(</span><span class="hl str">"usbmouse"</span><span class="hl opt">);</span> modules<span class="hl opt">::</span>load<span class="hl opt">(</span><span class="hl str">qw(hid mousedev usbmouse)</span><span class="hl opt">);</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">SUPER</span><span class="hl opt">::</span>selectMouse<span class="hl opt">;</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> setupSCSI <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(!$::</span>noauto <span class="hl opt">&&</span> arch<span class="hl opt">() =~</span> <span class="hl kwd">/i.86/</span><span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>pcmcia<span class="hl opt">} ||=</span> detect_devices<span class="hl opt">::</span>real_pcmcia_probe<span class="hl opt">()) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span>N<span class="hl opt">(</span><span class="hl str">"PCMCIA"</span><span class="hl opt">),</span> N<span class="hl opt">(</span><span class="hl str">"Configuring PCMCIA cards..."</span><span class="hl opt">));</span> <span class="hl kwc">my</span> <span class="hl kwb">$results</span> <span class="hl opt">=</span> install_any<span class="hl opt">::</span>configure_pcmcia<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>pcmcia<span class="hl opt">});</span> <span class="hl kwc">undef</span> <span class="hl kwb">$w</span><span class="hl opt">;</span> <span class="hl kwb">$results</span> <span class="hl kwc">and</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> <span class="hl kwb">$results</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$_w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span>N<span class="hl opt">(</span><span class="hl str">"IDE"</span><span class="hl opt">),</span> N<span class="hl opt">(</span><span class="hl str">"Configuring IDE"</span><span class="hl opt">));</span> modules<span class="hl opt">::</span>load<span class="hl opt">(</span>modules<span class="hl opt">::</span>category2modules<span class="hl opt">(</span><span class="hl str">'disk/cdrom'</span><span class="hl opt">));</span> <span class="hl opt">}</span> modules<span class="hl opt">::</span>interactive<span class="hl opt">::</span>load_category<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl str">'bus/firewire'</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$have_non_scsi</span> <span class="hl opt">=</span> detect_devices<span class="hl opt">::</span>hds<span class="hl opt">();</span> <span class="hl slc">#- at_least_one scsi device if we have no disks</span> modules<span class="hl opt">::</span>interactive<span class="hl opt">::</span>load_category<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl str">'disk/ide|scsi|hardware_raid|firewire'</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">, !</span><span class="hl kwb">$have_non_scsi</span><span class="hl opt">);</span> modules<span class="hl opt">::</span>interactive<span class="hl opt">::</span>load_category<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl str">'disk/ide|scsi|hardware_raid|firewire'</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">!</span>detect_devices<span class="hl opt">::</span>hds<span class="hl opt">();</span> <span class="hl slc">#- we really want a disk!</span> install_interactive<span class="hl opt">::</span>tellAboutProprietaryModules<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> install_any<span class="hl opt">::</span>getHds<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> ask_mntpoint_s <span class="hl opt">{</span> <span class="hl slc">#- }{}</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $fstab</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">@fstab</span> <span class="hl opt">=</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> isTrueFS<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwb">@$fstab</span><span class="hl opt">;</span> <span class="hl kwb">@fstab</span> <span class="hl opt">=</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> isSwap<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwb">@$fstab</span> <span class="hl kwa">if</span> <span class="hl kwb">@fstab</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwb">@fstab</span> <span class="hl opt">=</span> <span class="hl kwb">@$fstab</span> <span class="hl kwa">if</span> <span class="hl kwb">@fstab</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwc">die</span> N<span class="hl opt">(</span><span class="hl str">"No partition available"</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl kwb">@fstab</span> <span class="hl opt">==</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$_w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Scanning partitions to find mount points"</span><span class="hl opt">));</span> install_any<span class="hl opt">::</span>suggest_mount_points<span class="hl opt">(</span><span class="hl kwb">$fstab, $o</span><span class="hl opt">->{</span>prefix<span class="hl opt">},</span> <span class="hl str">'uniq'</span><span class="hl opt">);</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"default mntpoint</span> <span class="hl ipl">$_</span><span class="hl str">->{mntpoint}</span> <span class="hl ipl">$_</span><span class="hl str">->{device}"</span><span class="hl opt">)</span> <span class="hl kwa">foreach</span> <span class="hl kwb">@fstab</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">@fstab</span> <span class="hl opt">==</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwb">$fstab</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]{</span>mntpoint<span class="hl opt">} =</span> <span class="hl str">'/'</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Choose the mount points"</span><span class="hl opt">),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'ask_mntpoint_s'</span><span class="hl opt">,</span> <span class="hl opt">},</span> <span class="hl opt">[</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl opt">{</span> label <span class="hl opt">=></span> partition_table<span class="hl opt">::</span>description<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">),</span> val <span class="hl opt">=></span> \<span class="hl kwb">$_</span><span class="hl opt">->{</span>mntpoint<span class="hl opt">},</span> not_edit <span class="hl opt">=></span> <span class="hl num">0</span><span class="hl opt">,</span> list <span class="hl opt">=> [</span> <span class="hl str">''</span><span class="hl opt">,</span> fsedit<span class="hl opt">::</span>suggestions_mntpoint<span class="hl opt">(</span>fs<span class="hl opt">::</span>get<span class="hl opt">::</span>empty_all_hds<span class="hl opt">()) ],</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwb">@fstab</span> <span class="hl opt">])</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">SUPER</span><span class="hl opt">::</span>ask_mntpoint_s<span class="hl opt">(</span><span class="hl kwb">$fstab</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> doPartitionDisks <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>arch<span class="hl opt">() =~</span> <span class="hl kwd">/ppc/</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$generation</span> <span class="hl opt">=</span> detect_devices<span class="hl opt">::</span>get_mac_generation<span class="hl opt">();</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$generation</span> <span class="hl opt">=~</span> <span class="hl kwd">/NewWorld/</span><span class="hl opt">) {</span> <span class="hl slc">#- mac partition table</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwc">defined</span> <span class="hl kwb">$partition_table</span><span class="hl opt">::</span>mac<span class="hl opt">::</span>bootstrap_part<span class="hl opt">) {</span> <span class="hl slc">#- don't do anything if we've got the bootstrap setup</span> <span class="hl slc">#- otherwise, go ahead and create one somewhere in the drive free space</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$freepart</span> <span class="hl opt">=</span> <span class="hl kwb">$partition_table</span><span class="hl opt">::</span>mac<span class="hl opt">::</span>freepart<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$freepart</span> <span class="hl opt">&&</span> <span class="hl kwb">$freepart</span><span class="hl opt">->{</span>size<span class="hl opt">} >=</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"creating bootstrap partition on drive /dev/</span><span class="hl ipl">$freepart</span><span class="hl str">->{hd}{device}, block</span> <span class="hl ipl">$freepart</span><span class="hl str">->{start}"</span><span class="hl opt">);</span> <span class="hl kwb">$partition_table</span><span class="hl opt">::</span>mac<span class="hl opt">::</span>bootstrap_part <span class="hl opt">=</span> <span class="hl kwb">$freepart</span><span class="hl opt">->{</span>part<span class="hl opt">};</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"bootstrap now at</span> <span class="hl ipl">$partition_table</span><span class="hl str">::mac::bootstrap_part"</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$p</span> <span class="hl opt">= {</span> start <span class="hl opt">=></span> <span class="hl kwb">$freepart</span><span class="hl opt">->{</span>start<span class="hl opt">},</span> size <span class="hl opt">=></span> <span class="hl num">1</span> <span class="hl opt"><<</span> <span class="hl num">11</span><span class="hl opt">,</span> mntpoint <span class="hl opt">=></span> <span class="hl str">''</span> <span class="hl opt">};</span> fs<span class="hl opt">::</span>type<span class="hl opt">::</span>set_pt_type<span class="hl opt">(</span><span class="hl kwb">$p,</span> <span class="hl num">0x401</span><span class="hl opt">);</span> fsedit<span class="hl opt">::</span>add<span class="hl opt">(</span><span class="hl kwb">$freepart</span><span class="hl opt">->{</span>hd<span class="hl opt">},</span> <span class="hl kwb">$p, $o</span><span class="hl opt">->{</span>all_hds<span class="hl opt">}, {</span> force <span class="hl opt">=></span> <span class="hl num">1</span><span class="hl opt">,</span> primaryOrExtended <span class="hl opt">=></span> <span class="hl str">'Primary'</span> <span class="hl opt">});</span> <span class="hl kwb">$new_bootstrap</span> <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"No free space for 1MB bootstrap! Install will continue, but to boot your system, you'll need to create the bootstrap partition in DiskDrake"</span><span class="hl opt">));</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">elsif</span> <span class="hl opt">(</span><span class="hl kwb">$generation</span> <span class="hl opt">=~</span> <span class="hl kwd">/IBM/</span><span class="hl opt">) {</span> <span class="hl slc">#- dos partition table</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"You'll need to create a PPC PReP Boot bootstrap! Install will continue, but to boot your system, you'll need to create the bootstrap partition in DiskDrake"</span><span class="hl opt">));</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>isUpgrade<span class="hl opt">}) {</span> install_interactive<span class="hl opt">::</span>partitionWizard<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> rebootNeeded <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"You need to reboot for the partition table modifications to take place"</span><span class="hl opt">));</span> install_steps<span class="hl opt">::</span>rebootNeeded<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> choosePartitionsToFormat <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $fstab</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">SUPER</span><span class="hl opt">::</span>choosePartitionsToFormat<span class="hl opt">(</span><span class="hl kwb">$fstab</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">@l</span> <span class="hl opt">=</span> <span class="hl kwc">grep</span> <span class="hl opt">{ !</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>isMounted<span class="hl opt">} &&</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>mntpoint<span class="hl opt">} &&</span> <span class="hl opt">(!</span>isSwap<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) || $::</span>expert<span class="hl opt">) &&</span> <span class="hl opt">(!</span>isFat_or_NTFS<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) ||</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>notFormatted<span class="hl opt">} || $::</span>expert<span class="hl opt">) &&</span> <span class="hl opt">(!</span>isOtherAvailableFS<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) || $::</span>expert <span class="hl opt">||</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>toFormat<span class="hl opt">});</span> <span class="hl opt">}</span> <span class="hl kwb">@$fstab</span><span class="hl opt">;</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>toFormat<span class="hl opt">} =</span> <span class="hl num">1</span> <span class="hl kwa">foreach</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> isSwap<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) && !$::</span>expert <span class="hl opt">}</span> <span class="hl kwb">@$fstab</span><span class="hl opt">;</span> <span class="hl kwa">return if</span> <span class="hl kwb">@l</span> <span class="hl opt">==</span> <span class="hl num">0</span> <span class="hl opt">|| !$::</span>expert <span class="hl opt">&&</span> every <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>toFormat<span class="hl opt">} }</span> <span class="hl kwb">@l</span><span class="hl opt">;</span> <span class="hl slc">#- keep it temporary until the guy has accepted</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>toFormatTmp<span class="hl opt">} =</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>toFormat<span class="hl opt">} ||</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>toFormatUnsure<span class="hl opt">}</span> <span class="hl kwa">foreach</span> <span class="hl kwb">@l</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">(</span> <span class="hl opt">{</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Choose the partitions you want to format"</span><span class="hl opt">),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'formatPartitions'</span><span class="hl opt">,</span> advanced_messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Check bad blocks?"</span><span class="hl opt">),</span> <span class="hl opt">},</span> <span class="hl opt">[</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$e</span> <span class="hl opt">=</span> <span class="hl kwb">$_</span><span class="hl opt">;</span> <span class="hl opt">({</span> text <span class="hl opt">=></span> partition_table<span class="hl opt">::</span>description<span class="hl opt">(</span><span class="hl kwb">$e</span><span class="hl opt">),</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span><span class="hl opt">,</span> val <span class="hl opt">=></span> \<span class="hl kwb">$e</span><span class="hl opt">->{</span>toFormatTmp<span class="hl opt">}</span> <span class="hl opt">},</span> if_<span class="hl opt">(!</span>isLoopback<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) && !</span>member<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>fs_type<span class="hl opt">},</span> <span class="hl str">'reiserfs'</span><span class="hl opt">,</span> <span class="hl str">'xfs'</span><span class="hl opt">,</span> <span class="hl str">'jfs'</span><span class="hl opt">), {</span> text <span class="hl opt">=></span> partition_table<span class="hl opt">::</span>description<span class="hl opt">(</span><span class="hl kwb">$e</span><span class="hl opt">),</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span><span class="hl opt">,</span> advanced <span class="hl opt">=></span> <span class="hl num">1</span><span class="hl opt">,</span> disabled <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{ !</span><span class="hl kwb">$e</span><span class="hl opt">->{</span>toFormatTmp<span class="hl opt">} },</span> val <span class="hl opt">=></span> \<span class="hl kwb">$e</span><span class="hl opt">->{</span>toFormatCheck<span class="hl opt">}</span> <span class="hl opt">})) }</span> <span class="hl kwb">@l</span> <span class="hl opt">]</span> <span class="hl opt">)</span> <span class="hl kwc">or die</span> <span class="hl str">'already displayed'</span><span class="hl opt">;</span> <span class="hl slc">#- ok now we can really set toFormat</span> <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwb">@l</span><span class="hl opt">) {</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>toFormat<span class="hl opt">} =</span> <span class="hl kwc">delete</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>toFormatTmp<span class="hl opt">};</span> set_isFormatted<span class="hl opt">(</span><span class="hl kwb">$_,</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> formatMountPartitions <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $_fstab</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$w</span><span class="hl opt">;</span> catch_cdie <span class="hl opt">{</span> fs<span class="hl opt">::</span>formatMount_all<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>all_hds<span class="hl opt">}{</span>raids<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>fstab<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">},</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$msg</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$w</span> <span class="hl opt">||=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> <span class="hl kwb">$msg</span><span class="hl opt">);</span> <span class="hl kwb">$w</span><span class="hl opt">-></span><span class="hl kwd">set</span><span class="hl opt">(</span><span class="hl kwb">$msg</span><span class="hl opt">);</span> <span class="hl opt">});</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$@</span> <span class="hl opt">=~</span> <span class="hl kwd">/fsck failed on (\S+)/</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Failed to check filesystem</span> <span class="hl ipl">%s</span><span class="hl str">. Do you want to repair the errors? (beware, you can lose data)"</span><span class="hl opt">,</span> <span class="hl kwb">$1</span><span class="hl opt">),</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl opt">};</span> <span class="hl kwc">undef</span> <span class="hl kwb">$w</span><span class="hl opt">;</span> <span class="hl slc">#- help perl (otherwise wait_message stays forever in newt)</span> <span class="hl kwc">die</span> N<span class="hl opt">(</span><span class="hl str">"Not enough swap space to fulfill installation, please add some"</span><span class="hl opt">)</span> <span class="hl kwa">if</span> availableMemory<span class="hl opt">() <</span> <span class="hl num">40</span> <span class="hl opt">*</span> <span class="hl num">1024</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> setPackages <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $rebuild_needed</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> <span class="hl kwb">$rebuild_needed</span> ? N<span class="hl opt">(</span><span class="hl str">"Looking for available packages and rebuilding rpm database..."</span><span class="hl opt">) :</span> N<span class="hl opt">(</span><span class="hl str">"Looking for available packages..."</span><span class="hl opt">));</span> install_any<span class="hl opt">::</span>setPackages<span class="hl opt">(</span><span class="hl kwb">$o, $rebuild_needed</span><span class="hl opt">);</span> <span class="hl kwb">$w</span><span class="hl opt">-></span><span class="hl kwd">set</span><span class="hl opt">(</span>N<span class="hl opt">(</span><span class="hl str">"Looking at packages already installed..."</span><span class="hl opt">));</span> pkgs<span class="hl opt">::</span>selectPackagesAlreadyInstalled<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>packages<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">});</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$rebuild_needed</span><span class="hl opt">) {</span> <span class="hl kwb">$w</span><span class="hl opt">-></span><span class="hl kwd">set</span><span class="hl opt">(</span>N<span class="hl opt">(</span><span class="hl str">"Finding packages to upgrade..."</span><span class="hl opt">));</span> pkgs<span class="hl opt">::</span>selectPackagesToUpgrade<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>packages<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">});</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> deselectFoundMedia <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $p</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> install_any<span class="hl opt">::</span>deselectFoundMedia<span class="hl opt">(</span><span class="hl kwb">$o, $p</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> mirror2text <span class="hl opt">{</span> <span class="hl kwb">$crypto</span><span class="hl opt">::</span>mirrors<span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}</span> ? <span class="hl kwb">$crypto</span><span class="hl opt">::</span>mirrors<span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}[</span><span class="hl num">0</span><span class="hl opt">] .</span> <span class="hl str">'|'</span> <span class="hl opt">.</span> <span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] :</span> <span class="hl str">"-|URL"</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> askSupplMirror <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $message</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$u</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>updates<span class="hl opt">} ||= {};</span> <span class="hl kwa">require</span> crypto<span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">@mirrors</span> <span class="hl opt">=</span> <span class="hl kwa">do</span> <span class="hl opt">{</span> <span class="hl slc">#- Direct the user to the community mirror tree for an install from a mini-iso</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>distro_type<span class="hl opt">} ||=</span> <span class="hl str">'community'</span><span class="hl opt">;</span> <span class="hl slc">#- get the list of mirrors locally, to avoid weird bugs with making an</span> <span class="hl slc">#- http request before ftp at this point of the install</span> crypto<span class="hl opt">::</span>mirrors<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>distro_type<span class="hl opt">},</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl opt">};</span> <span class="hl kwc">push</span> <span class="hl kwb">@mirrors,</span> <span class="hl str">'-'</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">(</span> <span class="hl opt">{</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Choose a mirror from which to get the packages"</span><span class="hl opt">),</span> cancel <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Cancel"</span><span class="hl opt">),</span> <span class="hl opt">},</span> <span class="hl opt">[ {</span> separator <span class="hl opt">=></span> <span class="hl str">'|'</span><span class="hl opt">,</span> format <span class="hl opt">=></span> \<span class="hl opt">&</span>mirror2text<span class="hl opt">,</span> list <span class="hl opt">=></span> \<span class="hl kwb">@mirrors,</span> val <span class="hl opt">=></span> \<span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">},</span> <span class="hl opt">}, ],</span> <span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">} =</span> <span class="hl str">''</span><span class="hl opt">;</span> <span class="hl kwc">delete</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>updates<span class="hl opt">};</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">'-'</span><span class="hl opt">) {</span> <span class="hl kwa">return</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_entry</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> <span class="hl kwb">$message</span><span class="hl opt">) ||</span> <span class="hl str">''</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwc">my</span> <span class="hl kwb">$url</span> <span class="hl opt">=</span> <span class="hl str">"ftp://</span><span class="hl ipl">$u</span><span class="hl str">->{mirror}</span><span class="hl ipl">$crypto</span><span class="hl str">::mirrors{</span><span class="hl ipl">$u</span><span class="hl str">->{mirror}}[1]"</span><span class="hl opt">;</span> <span class="hl kwb">$url</span> <span class="hl opt">=~</span> <span class="hl kwd">s!/(?:media/)?main/?\z!!</span><span class="hl opt">;</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"mirror chosen [</span><span class="hl ipl">$url</span><span class="hl str">]"</span><span class="hl opt">);</span> <span class="hl kwa">return</span> <span class="hl kwb">$url</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> selectSupplMedia <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $suppl_method</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> install_any<span class="hl opt">::</span>selectSupplMedia<span class="hl opt">(</span><span class="hl kwb">$o, $suppl_method</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> choosePackages <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $packages, $compssUsers, $_first_time</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl slc">#- this is done at the very beginning to take into account</span> <span class="hl slc">#- selection of CD by user if using a cdrom.</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">chooseCD</span><span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">)</span> <span class="hl kwa">if</span> install_any<span class="hl opt">::</span>method_allows_medium_change<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span><span class="hl kwa">method</span><span class="hl opt">});</span> <span class="hl kwc">my</span> <span class="hl kwb">$w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Looking for available packages..."</span><span class="hl opt">));</span> <span class="hl kwc">my</span> <span class="hl kwb">$availableC</span> <span class="hl opt">= &</span>install_steps<span class="hl opt">::</span>choosePackages<span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$individual</span><span class="hl opt">;</span> <span class="hl kwa">require</span> pkgs<span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$min_size</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>selectedSize<span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">);</span> <span class="hl kwa">unless</span> <span class="hl opt">(</span><span class="hl kwb">$min_size</span> <span class="hl opt"><</span> <span class="hl kwb">$availableC</span><span class="hl opt">) {</span> <span class="hl kwc">undef</span> <span class="hl kwb">$w</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Your system does not have enough space left for installation or upgrade (</span><span class="hl ipl">%d</span> <span class="hl str">></span> <span class="hl ipl">%d</span><span class="hl str">)"</span><span class="hl opt">,</span> <span class="hl kwb">$min_size, $availableC</span><span class="hl opt">));</span> install_steps<span class="hl opt">::</span>rebootNeeded<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwc">my</span> <span class="hl kwb">$min_mark</span> <span class="hl opt">=</span> <span class="hl num">4</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$b</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>saveSelected<span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">%all_compssUsers_flags</span> <span class="hl opt">=</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span> <span class="hl opt">=></span> <span class="hl num">1</span> <span class="hl opt">}</span> <span class="hl kwc">map</span> <span class="hl opt">{ @{</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>flags<span class="hl opt">}} }</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$_level</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>setSelectedFromCompssList<span class="hl opt">(</span><span class="hl kwb">$packages,</span> \<span class="hl kwb">%all_compssUsers_flags, $min_mark,</span> <span class="hl num">0</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$max_size</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>selectedSize<span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">) +</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl slc">#- avoid division by zero.</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"max size (level</span> <span class="hl ipl">$min_mark</span><span class="hl str">) is : "</span> <span class="hl opt">.</span> formatXiB<span class="hl opt">(</span><span class="hl kwb">$max_size</span><span class="hl opt">));</span> pkgs<span class="hl opt">::</span>restoreSelected<span class="hl opt">(</span><span class="hl kwb">$b</span><span class="hl opt">);</span> <span class="hl kwc">undef</span> <span class="hl kwb">$w</span><span class="hl opt">;</span> chooseGroups<span class="hl opt">:</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">chooseGroups</span><span class="hl opt">(</span><span class="hl kwb">$packages, $compssUsers, $min_mark,</span> \<span class="hl kwb">$individual, $max_size</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">!</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>isUpgrade<span class="hl opt">} &&</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>meta_class<span class="hl opt">}</span> <span class="hl kwc">ne</span> <span class="hl str">'desktop'</span><span class="hl opt">;</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>packages_<span class="hl opt">}{</span>ind<span class="hl opt">}) =</span> pkgs<span class="hl opt">::</span>setSelectedFromCompssList<span class="hl opt">(</span><span class="hl kwb">$packages, $o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">},</span> <span class="hl kwb">$min_mark, $availableC</span><span class="hl opt">);</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">choosePackagesTree</span><span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">goto</span> chooseGroups <span class="hl kwa">if</span> <span class="hl kwb">$individual</span><span class="hl opt">;</span> install_any<span class="hl opt">::</span>warnAboutRemovedPackages<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>packages<span class="hl opt">});</span> install_any<span class="hl opt">::</span>warnAboutNaughtyServers<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">goto</span> chooseGroups <span class="hl kwa">if</span> <span class="hl opt">!</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>isUpgrade<span class="hl opt">} &&</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>meta_class<span class="hl opt">}</span> <span class="hl kwc">ne</span> <span class="hl str">'firewall'</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> choosePackagesTree <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $packages, $o_limit_to_medium</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_many_from_list</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Choose the packages you want to install"</span><span class="hl opt">),</span> <span class="hl opt">{</span> list <span class="hl opt">=> [</span> <span class="hl kwc">grep</span> <span class="hl opt">{ !</span><span class="hl kwb">$o_limit_to_medium</span> <span class="hl opt">||</span> pkgs<span class="hl opt">::</span>packageMedium<span class="hl opt">(</span><span class="hl kwb">$packages, $_</span><span class="hl opt">) ==</span> <span class="hl kwb">$o_limit_to_medium</span> <span class="hl opt">}</span> <span class="hl opt">@{</span><span class="hl kwb">$packages</span><span class="hl opt">->{</span>depslist<span class="hl opt">}} ],</span> value <span class="hl opt">=></span> \<span class="hl opt">&</span>URPM<span class="hl opt">::</span>Package<span class="hl opt">::</span>flag_selected<span class="hl opt">,</span> label <span class="hl opt">=></span> \<span class="hl opt">&</span>URPM<span class="hl opt">::</span>Package<span class="hl opt">::</span>name<span class="hl opt">,</span> <span class="hl kwc">sort</span> <span class="hl opt">=></span> <span class="hl num">1</span><span class="hl opt">,</span> <span class="hl opt">});</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> loadSavePackagesOnFloppy <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $packages</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Please choose load or save package selection on floppy.</span> <span class="hl str">The format is the same as auto_install generated floppies."</span><span class="hl opt">),</span> <span class="hl opt">[ {</span> val <span class="hl opt">=></span> \ <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl kwb">$choice</span><span class="hl opt">),</span> list <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Load from floppy"</span><span class="hl opt">),</span> N_<span class="hl opt">(</span><span class="hl str">"Save on floppy"</span><span class="hl opt">) ],</span> format <span class="hl opt">=></span> \<span class="hl opt">&</span>translate<span class="hl opt">,</span> type <span class="hl opt">=></span> <span class="hl str">'list'</span> <span class="hl opt">} ])</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$choice</span> <span class="hl kwc">eq</span> <span class="hl str">'Load from floppy'</span><span class="hl opt">) {</span> <span class="hl kwa">while</span> <span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span>N<span class="hl opt">(</span><span class="hl str">"Package selection"</span><span class="hl opt">),</span> N<span class="hl opt">(</span><span class="hl str">"Loading from floppy"</span><span class="hl opt">));</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"load package selection from floppy"</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$O</span> <span class="hl opt">=</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> install_any<span class="hl opt">::</span>loadO<span class="hl opt">(</span><span class="hl kwc">undef</span><span class="hl opt">,</span> <span class="hl str">'floppy'</span><span class="hl opt">) };</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$@</span><span class="hl opt">) {</span> <span class="hl kwc">undef</span> <span class="hl kwb">$w</span><span class="hl opt">;</span> <span class="hl slc">#- close wait message.</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_okcancel</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Insert a floppy containing package selection"</span><span class="hl opt">))</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> install_any<span class="hl opt">::</span>unselectMostPackages<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl kwa">foreach</span> <span class="hl opt">(@{</span><span class="hl kwb">$O</span><span class="hl opt">->{</span>default_packages<span class="hl opt">} || []}) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$pkg</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>packageByName<span class="hl opt">(</span><span class="hl kwb">$packages, $_</span><span class="hl opt">);</span> pkgs<span class="hl opt">::</span>selectPackage<span class="hl opt">(</span><span class="hl kwb">$packages, $pkg</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl kwb">$pkg</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">return</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"save package selection to floppy"</span><span class="hl opt">);</span> install_any<span class="hl opt">::</span>g_default_packages<span class="hl opt">(</span><span class="hl kwb">$o,</span> <span class="hl str">'quiet'</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> chooseGroups <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $packages, $compssUsers, $min_level, $individual, $max_size</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl slc">#- for all groups available, determine package which belongs to each one.</span> <span class="hl slc">#- this will enable getting the size of each groups more quickly due to</span> <span class="hl slc">#- limitation of current implementation.</span> <span class="hl slc">#- use an empty state for each one (no flag update should be propagated).</span> <span class="hl kwc">my</span> <span class="hl kwb">$b</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>saveSelected<span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">);</span> install_any<span class="hl opt">::</span>unselectMostPackages<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> pkgs<span class="hl opt">::</span>setSelectedFromCompssList<span class="hl opt">(</span><span class="hl kwb">$packages,</span> <span class="hl opt">{},</span> <span class="hl kwb">$min_level, $max_size</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$system_size</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>selectedSize<span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$sizes, $pkgs</span><span class="hl opt">) =</span> pkgs<span class="hl opt">::</span>computeGroupSize<span class="hl opt">(</span><span class="hl kwb">$packages, $min_level</span><span class="hl opt">);</span> pkgs<span class="hl opt">::</span>restoreSelected<span class="hl opt">(</span><span class="hl kwb">$b</span><span class="hl opt">);</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"system_size:</span> <span class="hl ipl">$system_size</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">%stable_flags</span> <span class="hl opt">=</span> grep_each <span class="hl opt">{ $::</span>b <span class="hl opt">} %{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}};</span> <span class="hl kwc">delete</span> <span class="hl kwb">$stable_flags</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">}</span> <span class="hl kwa">foreach</span> <span class="hl kwc">map</span> <span class="hl opt">{ @{</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>flags<span class="hl opt">}} } @{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>compssUsers<span class="hl opt">}};</span> <span class="hl kwc">my</span> <span class="hl kwb">$compute_size</span> <span class="hl opt">=</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">%pkgs</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">%flags</span> <span class="hl opt">=</span> <span class="hl kwb">%stable_flags</span><span class="hl opt">;</span> <span class="hl kwb">@flags</span><span class="hl opt">{</span><span class="hl kwb">@_</span><span class="hl opt">} = ();</span> <span class="hl kwc">my</span> <span class="hl kwb">$total_size</span><span class="hl opt">;</span> A<span class="hl opt">:</span> <span class="hl kwa">while</span> <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$k, $size</span><span class="hl opt">) =</span> <span class="hl kwc">each</span> <span class="hl kwb">%$sizes</span><span class="hl opt">) {</span> Or<span class="hl opt">:</span> <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwc">split</span> <span class="hl str">"</span><span class="hl esc">\t</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl kwb">$k</span><span class="hl opt">) {</span> <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwc">split</span> <span class="hl str">"&&"</span><span class="hl opt">) {</span> <span class="hl kwc">exists</span> <span class="hl kwb">$flags</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">}</span> <span class="hl kwc">or</span> <span class="hl kwa">next</span> Or<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwb">$total_size</span> <span class="hl opt">+=</span> <span class="hl kwb">$size</span><span class="hl opt">;</span> <span class="hl kwb">$pkgs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">} =</span> <span class="hl num">1</span> <span class="hl kwa">foreach</span> <span class="hl opt">@{</span><span class="hl kwb">$pkgs</span><span class="hl opt">->{</span><span class="hl kwb">$k</span><span class="hl opt">}};</span> <span class="hl kwa">next</span> A<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"computed size</span> <span class="hl ipl">$total_size</span> <span class="hl str">(flags "</span> <span class="hl opt">.</span> <span class="hl kwc">join</span><span class="hl opt">(</span><span class="hl str">' '</span><span class="hl opt">,</span> <span class="hl kwc">keys</span> <span class="hl kwb">%flags</span><span class="hl opt">) .</span> <span class="hl str">")"</span><span class="hl opt">);</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"chooseGroups: "</span><span class="hl opt">,</span> <span class="hl kwc">join</span><span class="hl opt">(</span><span class="hl str">" "</span><span class="hl opt">,</span> <span class="hl kwc">sort keys</span> <span class="hl kwb">%pkgs</span><span class="hl opt">));</span> <span class="hl kwc">int</span> <span class="hl kwb">$total_size</span><span class="hl opt">;</span> <span class="hl opt">};</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$size, $unselect_all</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$available_size</span> <span class="hl opt">=</span> install_any<span class="hl opt">::</span>getAvailableSpace<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) /</span> sqr<span class="hl opt">(</span><span class="hl num">1024</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$size_to_display</span> <span class="hl opt">=</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$lsize</span> <span class="hl opt">=</span> <span class="hl kwb">$system_size</span> <span class="hl opt">+</span> <span class="hl kwb">$compute_size</span><span class="hl opt">->(</span><span class="hl kwc">map</span> <span class="hl opt">{ @{</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>flags<span class="hl opt">}} }</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">} }</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">);</span> <span class="hl slc">#- if a profile is deselected, deselect everything (easier than deselecting the profile packages)</span> <span class="hl kwb">$unselect_all</span> <span class="hl opt">||=</span> <span class="hl kwb">$size</span> <span class="hl opt">></span> <span class="hl kwb">$lsize</span><span class="hl opt">;</span> <span class="hl kwb">$size</span> <span class="hl opt">=</span> <span class="hl kwb">$lsize</span><span class="hl opt">;</span> N<span class="hl opt">(</span><span class="hl str">"Total size:</span> <span class="hl ipl">%d</span> <span class="hl str">/</span> <span class="hl ipl">%d</span> <span class="hl str">MB"</span><span class="hl opt">,</span> pkgs<span class="hl opt">::</span>correctSize<span class="hl opt">(</span><span class="hl kwb">$size</span> <span class="hl opt">/</span> sqr<span class="hl opt">(</span><span class="hl num">1024</span><span class="hl opt">)),</span> <span class="hl kwb">$available_size</span><span class="hl opt">);</span> <span class="hl opt">};</span> <span class="hl kwa">while</span> <span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$available_size</span> <span class="hl opt"><</span> <span class="hl num">200</span><span class="hl opt">) {</span> <span class="hl slc"># too small to choose anything. Defaulting to no group chosen</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">} =</span> <span class="hl num">0</span> <span class="hl kwa">foreach</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">;</span> <span class="hl kwa">last</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">reallyChooseGroups</span><span class="hl opt">(</span><span class="hl kwb">$size_to_display, $individual, $compssUsers</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwa">last if</span> <span class="hl opt">$::</span>testing <span class="hl opt">||</span> pkgs<span class="hl opt">::</span>correctSize<span class="hl opt">(</span><span class="hl kwb">$size</span> <span class="hl opt">/</span> sqr<span class="hl opt">(</span><span class="hl num">1024</span><span class="hl opt">)) <</span> <span class="hl kwb">$available_size</span> <span class="hl opt">||</span> every <span class="hl opt">{ !</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">} }</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Selected size is larger than available space"</span><span class="hl opt">));</span> <span class="hl opt">}</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span><span class="hl kwb">$_</span><span class="hl opt">} =</span> <span class="hl num">0</span> <span class="hl kwa">foreach</span> <span class="hl kwc">map</span> <span class="hl opt">{ @{</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>flags<span class="hl opt">}} }</span> <span class="hl kwc">grep</span> <span class="hl opt">{ !</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">} }</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span><span class="hl kwb">$_</span><span class="hl opt">} =</span> <span class="hl num">1</span> <span class="hl kwa">foreach</span> <span class="hl kwc">map</span> <span class="hl opt">{ @{</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>flags<span class="hl opt">}} }</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">} }</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">;</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"compssUsersChoice selected: "</span><span class="hl opt">,</span> <span class="hl kwc">join</span><span class="hl opt">(</span><span class="hl str">', '</span><span class="hl opt">,</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl str">qq("</span><span class="hl ipl">$_</span><span class="hl str">->{path}|</span><span class="hl ipl">$_</span><span class="hl str">->{label}")</span> <span class="hl opt">}</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">} }</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">));</span> <span class="hl slc">#- do not try to deselect package (by default no groups are selected).</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>isUpgrade<span class="hl opt">}</span> <span class="hl kwc">or</span> <span class="hl kwb">$unselect_all</span> <span class="hl kwc">and</span> install_any<span class="hl opt">::</span>unselectMostPackages<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl slc">#- if no group have been chosen, ask for using base system only, or no X, or normal.</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>isUpgrade<span class="hl opt">} && !</span>any <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">} }</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$docs</span> <span class="hl opt">= !</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>excludedocs<span class="hl opt">};</span> <span class="hl kwc">my</span> <span class="hl kwb">$minimal</span> <span class="hl opt">= !</span>any <span class="hl opt">{</span> <span class="hl kwb">$_</span> <span class="hl opt">}</span> <span class="hl kwc">values</span> <span class="hl opt">%{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}};</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from</span><span class="hl opt">(</span>N<span class="hl opt">(</span><span class="hl str">"Type of install"</span><span class="hl opt">),</span> N<span class="hl opt">(</span><span class="hl str">"You haven't selected any group of packages.</span> <span class="hl str">Please choose the minimal installation you want:"</span><span class="hl opt">),</span> <span class="hl opt">[</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span>X<span class="hl opt">},</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span><span class="hl opt">,</span> text <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"With X"</span><span class="hl opt">),</span> disabled <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$minimal</span> <span class="hl opt">} },</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> \<span class="hl kwb">$docs,</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span><span class="hl opt">,</span> text <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"With basic documentation (recommended!)"</span><span class="hl opt">),</span> disabled <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$minimal</span> <span class="hl opt">} },</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> \<span class="hl kwb">$minimal,</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span><span class="hl opt">,</span> text <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Truly minimal install (especially no urpmi)"</span><span class="hl opt">) },</span> <span class="hl opt">],</span> changed <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span>X<span class="hl opt">} =</span> <span class="hl kwb">$docs</span> <span class="hl opt">=</span> <span class="hl num">0</span> <span class="hl kwa">if</span> <span class="hl kwb">$minimal</span> <span class="hl opt">},</span> <span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span> <span class="hl opt">&</span>chooseGroups<span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>excludedocs<span class="hl opt">} = !</span><span class="hl kwb">$docs</span> <span class="hl opt">||</span> <span class="hl kwb">$minimal</span><span class="hl opt">;</span> <span class="hl slc">#- reselect according to user selection.</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$minimal</span><span class="hl opt">) {</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span><span class="hl kwb">$_</span><span class="hl opt">} =</span> <span class="hl num">0</span> <span class="hl kwa">foreach</span> <span class="hl kwc">keys</span> <span class="hl opt">%{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}};</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$X</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span>X<span class="hl opt">};</span> <span class="hl slc">#- don't let setDefaultPackages modify this one</span> install_any<span class="hl opt">::</span>setDefaultPackages<span class="hl opt">(</span><span class="hl kwb">$o,</span> <span class="hl str">'clean'</span><span class="hl opt">);</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span>X<span class="hl opt">} =</span> <span class="hl kwb">$X</span><span class="hl opt">;</span> <span class="hl opt">}</span> install_any<span class="hl opt">::</span>unselectMostPackages<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> reallyChooseGroups <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $size_to_display, $individual, $compssUsers</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$size_text</span> <span class="hl opt">= &</span><span class="hl kwb">$size_to_display</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$path, $all</span><span class="hl opt">);</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Package Group Selection"</span><span class="hl opt">),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'choosePackages'</span><span class="hl opt">,</span> callbacks <span class="hl opt">=> {</span> changed <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$size_text</span> <span class="hl opt">= &</span><span class="hl kwb">$size_to_display</span> <span class="hl opt">} },</span> <span class="hl opt">}, [</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> \<span class="hl kwb">$size_text,</span> type <span class="hl opt">=></span> <span class="hl str">'label'</span> <span class="hl opt">}, {},</span> <span class="hl opt">(</span><span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$old</span> <span class="hl opt">=</span> <span class="hl kwb">$path</span><span class="hl opt">;</span> <span class="hl kwb">$path</span> <span class="hl opt">=</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>path<span class="hl opt">};</span> if_<span class="hl opt">(</span><span class="hl kwb">$old</span> <span class="hl kwc">ne</span> <span class="hl kwb">$path,</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> translate<span class="hl opt">(</span><span class="hl kwb">$path</span><span class="hl opt">) }),</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> \<span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">},</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span><span class="hl opt">,</span> disabled <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$all</span> <span class="hl opt">},</span> text <span class="hl opt">=></span> translate<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>label<span class="hl opt">}),</span> help <span class="hl opt">=></span> translate<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>descr<span class="hl opt">}),</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">),</span> if_<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>meta_class<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">'desktop'</span><span class="hl opt">, {</span> text <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"All"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> \<span class="hl kwb">$all,</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span> <span class="hl opt">}),</span> if_<span class="hl opt">(</span><span class="hl kwb">$individual,</span> <span class="hl opt">{</span> text <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Individual package selection"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwb">$individual,</span> advanced <span class="hl opt">=></span> <span class="hl num">1</span><span class="hl opt">,</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span> <span class="hl opt">}),</span> <span class="hl opt">]);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$all</span><span class="hl opt">) {</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>selected<span class="hl opt">} =</span> <span class="hl num">1</span> <span class="hl kwa">foreach</span> <span class="hl kwb">@$compssUsers</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> chooseCD <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $packages</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">@mediums</span> <span class="hl opt">=</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span> <span class="hl opt">!=</span> <span class="hl kwb">$install_any</span><span class="hl opt">::</span>boot_medium <span class="hl opt">}</span> pkgs<span class="hl opt">::</span>allMediums<span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">@mediumsDescr</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">%mediumsDescr</span><span class="hl opt">;</span> <span class="hl slc">#- the boot medium is already selected.</span> <span class="hl kwb">$mediumsDescr</span><span class="hl opt">{</span>pkgs<span class="hl opt">::</span>mediumDescr<span class="hl opt">(</span><span class="hl kwb">$packages, $install_any</span><span class="hl opt">::</span>boot_medium<span class="hl opt">)} =</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl slc">#- build mediumDescr according to mediums, this avoid asking multiple times</span> <span class="hl slc">#- all the medium grouped together on only one CD.</span> <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwb">@mediums</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$descr</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>mediumDescr<span class="hl opt">(</span><span class="hl kwb">$packages, $_</span><span class="hl opt">);</span> <span class="hl kwb">$packages</span><span class="hl opt">->{</span>mediums<span class="hl opt">}{</span><span class="hl kwb">$_</span><span class="hl opt">}{</span>ignored<span class="hl opt">}</span> <span class="hl kwc">and</span> <span class="hl kwa">next</span><span class="hl opt">;</span> <span class="hl kwc">exists</span> <span class="hl kwb">$mediumsDescr</span><span class="hl opt">{</span><span class="hl kwb">$descr</span><span class="hl opt">}</span> <span class="hl kwc">or push</span> <span class="hl kwb">@mediumsDescr, $descr</span><span class="hl opt">;</span> <span class="hl kwb">$mediumsDescr</span><span class="hl opt">{</span><span class="hl kwb">$descr</span><span class="hl opt">} ||=</span> <span class="hl kwb">$packages</span><span class="hl opt">->{</span>mediums<span class="hl opt">}{</span><span class="hl kwb">$_</span><span class="hl opt">}{</span>selected<span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>install_any<span class="hl opt">::</span>method_is_from_ISO_images<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span><span class="hl kwa">method</span><span class="hl opt">})) {</span> <span class="hl kwb">$mediumsDescr</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">} =</span> install_any<span class="hl opt">::</span>method_is_from_ISO_images<span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">->{</span>mediums<span class="hl opt">}{</span><span class="hl kwb">$_</span><span class="hl opt">}{</span><span class="hl kwa">method</span><span class="hl opt">})</span> ? to_bool<span class="hl opt">(</span>install_any<span class="hl opt">::</span>find_ISO_image_labelled<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">)) :</span> <span class="hl num">1</span> <span class="hl kwa">foreach</span> <span class="hl kwb">@mediumsDescr</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">elsif</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span><span class="hl kwa">method</span><span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">"cdrom"</span><span class="hl opt">) {</span> <span class="hl slc">#- if no other medium available or a poor beginner, we are choosing for him!</span> <span class="hl slc">#- note first CD is always selected and should not be unselected!</span> <span class="hl kwa">return if</span> <span class="hl kwb">@mediumsDescr</span> <span class="hl opt">== () || !$::</span>expert<span class="hl opt">;</span> <span class="hl slc"># $o->set_help('chooseCD');</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_many_from_list</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"If you have all the CDs in the list below, click Ok.</span> <span class="hl str">If you have none of those CDs, click Cancel.</span> <span class="hl str">If only some CDs are missing, unselect them, then click Ok."</span><span class="hl opt">),</span> <span class="hl opt">{</span> list <span class="hl opt">=></span> \<span class="hl kwb">@mediumsDescr,</span> label <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> N<span class="hl opt">(</span><span class="hl str">"Cd-Rom labeled</span> <span class="hl esc">\"</span><span class="hl str"></span><span class="hl ipl">%s\</span><span class="hl str">"</span><span class="hl str">",</span> <span class="hl ipl">$_</span><span class="hl str">[0]) },</span> <span class="hl str"> val => sub { \</span><span class="hl ipl">$mediumsDescr</span><span class="hl str">{</span><span class="hl ipl">$_</span><span class="hl str">[0]} },</span> <span class="hl str"> }) or do {</span> <span class="hl str"></span> <span class="hl ipl">$mediumsDescr</span><span class="hl str">{</span><span class="hl ipl">$_</span><span class="hl str">} = 0 foreach</span> <span class="hl ipl">@mediumsDescr</span><span class="hl str">; #- force unselection of other CDs.</span> <span class="hl str"> };</span> <span class="hl str"> }</span> <span class="hl str"></span> <span class="hl str"> #- restore true selection of medium (which may have been grouped together)</span> <span class="hl str"> foreach (</span><span class="hl ipl">@mediums</span><span class="hl str">) {</span> <span class="hl str"> my</span> <span class="hl ipl">$descr</span> <span class="hl str">= pkgs::mediumDescr(</span><span class="hl ipl">$packages,</span> <span class="hl str"></span><span class="hl ipl">$_</span><span class="hl str">);</span> <span class="hl str"></span> <span class="hl ipl">$packages</span><span class="hl str">->{mediums}{</span><span class="hl ipl">$_</span><span class="hl str">}{ignored} and next;</span> <span class="hl str"></span> <span class="hl ipl">$packages</span><span class="hl str">->{mediums}{</span><span class="hl ipl">$_</span><span class="hl str">}{selected} =</span> <span class="hl ipl">$mediumsDescr</span><span class="hl str">{</span><span class="hl ipl">$descr</span><span class="hl str">};</span> <span class="hl str"> log::l("</span><span class="hl kwc">select</span> status of medium <span class="hl kwb">$_</span> <span class="hl kwa">is</span> <span class="hl kwb">$packages</span><span class="hl opt">->{</span>mediums<span class="hl opt">}{</span><span class="hl kwb">$_</span><span class="hl opt">}{</span>selected<span class="hl opt">}</span><span class="hl str">");</span> <span class="hl str"> }</span> <span class="hl str">}</span> <span class="hl str"></span> <span class="hl str">#------------------------------------------------------------------------------</span> <span class="hl str">sub installPackages {</span> <span class="hl str"> my (</span><span class="hl ipl">$o,</span> <span class="hl str"></span><span class="hl ipl">$packages</span><span class="hl str">) =</span> <span class="hl ipl">@_</span><span class="hl str">;</span> <span class="hl str"> my (</span><span class="hl ipl">$current,</span> <span class="hl str"></span><span class="hl ipl">$total</span><span class="hl str">) = (0, 0);</span> <span class="hl str"></span> <span class="hl str"> my</span> <span class="hl ipl">$w</span> <span class="hl str">=</span> <span class="hl ipl">$o</span><span class="hl str">->wait_message(N("</span>Installing<span class="hl str">"), N("</span>Preparing installation<span class="hl str">"));</span> <span class="hl str"></span> <span class="hl str"> my</span> <span class="hl ipl">$old</span> <span class="hl str">= \&pkgs::installCallback;</span> <span class="hl str"> local *pkgs::installCallback = sub {</span> <span class="hl str"> my (</span><span class="hl ipl">$data,</span> <span class="hl str"></span><span class="hl ipl">$type,</span> <span class="hl str"></span><span class="hl ipl">$id,</span> <span class="hl str"></span><span class="hl ipl">$subtype,</span> <span class="hl str"></span><span class="hl ipl">$_amount,</span> <span class="hl str"></span><span class="hl ipl">$total_</span><span class="hl str">) =</span> <span class="hl ipl">@_</span><span class="hl str">;</span> <span class="hl str"> if (</span><span class="hl ipl">$type</span> <span class="hl str">eq 'user' &&</span> <span class="hl ipl">$subtype</span> <span class="hl str">eq 'install') {</span> <span class="hl str"></span> <span class="hl ipl">$total</span> <span class="hl str">=</span> <span class="hl ipl">$total_</span><span class="hl str">;</span> <span class="hl str"> } elsif (</span><span class="hl ipl">$type</span> <span class="hl str">eq 'inst' &&</span> <span class="hl ipl">$subtype</span> <span class="hl str">eq 'start') {</span> <span class="hl str"> my</span> <span class="hl ipl">$p</span> <span class="hl str">=</span> <span class="hl ipl">$data</span><span class="hl str">->{depslist}[</span><span class="hl ipl">$id</span><span class="hl str">];</span> <span class="hl str"></span> <span class="hl ipl">$w</span><span class="hl str">->set(N("</span>Installing <span class="hl kwa">package</span> <span class="hl kwb">%s\n%d%%</span><span class="hl str">",</span> <span class="hl ipl">$p</span><span class="hl str">->name,</span> <span class="hl ipl">$total</span> <span class="hl str">&& 100 *</span> <span class="hl ipl">$current</span> <span class="hl str">/</span> <span class="hl ipl">$total</span><span class="hl str">));</span> <span class="hl str"></span> <span class="hl ipl">$current</span> <span class="hl str">+=</span> <span class="hl ipl">$p</span><span class="hl str">->size;</span> <span class="hl str"> } else { goto</span> <span class="hl ipl">$old</span> <span class="hl str">}</span> <span class="hl str"> };</span> <span class="hl str"></span> <span class="hl str"> #- the modification is not local as the box should be living for other package installation.</span> <span class="hl str"> #- BEWARE this is somewhat duplicated (but not exactly from gtk code).</span> <span class="hl str"> undef *install_any::changeMedium;</span> <span class="hl str"> *install_any::changeMedium = sub {</span> <span class="hl str"> my (</span><span class="hl ipl">$method,</span> <span class="hl str"></span><span class="hl ipl">$medium</span><span class="hl str">) =</span> <span class="hl ipl">@_</span><span class="hl str">;</span> <span class="hl str"></span> <span class="hl str"> #- if not using a cdrom medium or an iso image, always abort.</span> <span class="hl str"> return if !install_any::method_allows_medium_change(</span><span class="hl ipl">$method</span><span class="hl str">);</span> <span class="hl str"></span> <span class="hl str"> my</span> <span class="hl ipl">$name</span> <span class="hl str">= pkgs::mediumDescr(</span><span class="hl ipl">$o</span><span class="hl str">->{packages},</span> <span class="hl ipl">$medium</span><span class="hl str">);</span> <span class="hl str"> local $| = 1; print "</span><span class="hl esc">\a</span><span class="hl str">";</span> <span class="hl str"> my</span> <span class="hl ipl">$r</span> <span class="hl str">=</span> <span class="hl ipl">$name</span> <span class="hl str">!~ /commercial/i || (</span><span class="hl ipl">$o</span><span class="hl str">->{useless_thing_accepted2} ||=</span> <span class="hl ipl">$o</span><span class="hl str">->ask_from_list_('', formatAlaTeX(install_messages::com_license()), [ N_("</span>Accept<span class="hl str">"), N_("</span>Refuse<span class="hl str">") ], "</span>Accept<span class="hl str">") eq "</span>Accept<span class="hl str">");</span> <span class="hl str"> if (</span><span class="hl ipl">$method</span> <span class="hl str">=~ /-iso</span><span class="hl ipl">$/</span><span class="hl str">) {</span> <span class="hl str"></span> <span class="hl ipl">$r</span> <span class="hl str">= install_any::changeIso(</span><span class="hl ipl">$name</span><span class="hl str">);</span> <span class="hl str"> } else {</span> <span class="hl str"></span> <span class="hl ipl">$r</span> <span class="hl str">&&=</span> <span class="hl ipl">$o</span><span class="hl str">->ask_okcancel('', N("</span>Change your Cd-Rom<span class="hl opt">!</span> Please insert the Cd-Rom labelled <span class="hl esc">\"</span><span class="hl kwb">%s\</span><span class="hl str">" in your drive and press Ok when done.</span> <span class="hl str">If you don't have it, press Cancel to avoid installation from this Cd-Rom."</span><span class="hl opt">,</span> <span class="hl kwb">$name</span><span class="hl opt">),</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">return</span> <span class="hl kwb">$r</span><span class="hl opt">;</span> <span class="hl opt">};</span> <span class="hl kwc">my</span> <span class="hl kwb">$install_result</span><span class="hl opt">;</span> catch_cdie <span class="hl opt">{</span> <span class="hl kwb">$install_result</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">install_steps</span><span class="hl opt">::</span>installPackages<span class="hl opt">(</span><span class="hl kwb">$packages</span><span class="hl opt">) }</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$@</span> <span class="hl opt">=~</span> <span class="hl kwd">/^error ordering package list: (.*)/</span><span class="hl opt">) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">, [</span> N<span class="hl opt">(</span><span class="hl str">"There was an error ordering packages:"</span><span class="hl opt">),</span> <span class="hl kwb">$1,</span> N<span class="hl opt">(</span><span class="hl str">"Go on anyway?"</span><span class="hl opt">) ],</span> <span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwc">and</span> <span class="hl kwa">return</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">${</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]} =</span> <span class="hl str">"already displayed"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">elsif</span> <span class="hl opt">(</span><span class="hl kwb">$@</span> <span class="hl opt">=~</span> <span class="hl kwd">/^error installing package list: (.*)/</span><span class="hl opt">) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">, [</span> N<span class="hl opt">(</span><span class="hl str">"There was an error installing packages:"</span><span class="hl opt">),</span> <span class="hl kwb">$1,</span> N<span class="hl opt">(</span><span class="hl str">"Go on anyway?"</span><span class="hl opt">) ],</span> <span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwc">and</span> <span class="hl kwa">return</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">${</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]} =</span> <span class="hl str">"already displayed"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl opt">};</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$pkgs</span><span class="hl opt">::</span>cancel_install<span class="hl opt">) {</span> <span class="hl kwb">$pkgs</span><span class="hl opt">::</span>cancel_install <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwc">die</span> <span class="hl str">"setstep choosePackages</span><span class="hl esc">\n</span><span class="hl str">"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwb">$install_result</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> afterInstallPackages<span class="hl opt">($) {</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$_w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Post-install configuration"</span><span class="hl opt">));</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">SUPER</span><span class="hl opt">::</span>afterInstallPackages<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> updateModulesFromFloppy <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_okcancel</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Please insert the Update Modules floppy in drive</span> <span class="hl ipl">%s</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>updatemodules<span class="hl opt">}),</span> <span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">SUPER</span><span class="hl opt">::</span>updateModulesFromFloppy<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> configureNetwork <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>ethernet<span class="hl opt">;</span> modules<span class="hl opt">::</span>load_category<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> network<span class="hl opt">::</span>ethernet<span class="hl opt">::</span>get_eth_categories<span class="hl opt">());</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>meta_class<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">'firewall'</span><span class="hl opt">) {</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>netconnect<span class="hl opt">;</span> network<span class="hl opt">::</span>netconnect<span class="hl opt">::</span>main<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netcnx<span class="hl opt">} ||= {},</span> <span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netc<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>intf<span class="hl opt">},</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>network<span class="hl opt">;</span> network<span class="hl opt">::</span>network<span class="hl opt">::</span>easy_dhcp<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netc<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>intf<span class="hl opt">})</span> <span class="hl kwc">and</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netcnx<span class="hl opt">}{</span>type<span class="hl opt">} =</span> <span class="hl str">'lan'</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">SUPER</span><span class="hl opt">::</span>configureNetwork<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> installUpdates <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$u</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>updates<span class="hl opt">} ||= {};</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">hasNetwork</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>is_empty_hash_ref<span class="hl opt">(</span><span class="hl kwb">$u</span><span class="hl opt">)) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno_</span><span class="hl opt">({</span> messages <span class="hl opt">=></span> formatAlaTeX<span class="hl opt">(</span> N<span class="hl opt">(</span><span class="hl str">"You now have the opportunity to download updated packages. These packages</span> <span class="hl str">have been updated after the distribution was released. They may</span> <span class="hl str">contain security or bug fixes.</span> <span class="hl str"></span> <span class="hl str">To download these packages, you will need to have a working Internet </span> <span class="hl str">connection.</span> <span class="hl str"></span> <span class="hl str">Do you want to install the updates?"</span><span class="hl opt">)),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'installUpdates'</span><span class="hl opt">,</span> <span class="hl opt">})</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#- bring all interface up for installing crypto packages.</span> install_interactive<span class="hl opt">::</span>upNetwork<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl slc">#- update medium available and working.</span> <span class="hl kwc">my</span> <span class="hl kwb">$update_medium</span><span class="hl opt">;</span> <span class="hl kwa">do</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> crypto<span class="hl opt">;</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">@mirrors</span> <span class="hl opt">=</span> <span class="hl kwa">do</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$_w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Contacting Mandrakelinux web site to get the list of available mirrors..."</span><span class="hl opt">));</span> crypto<span class="hl opt">::</span>mirrors<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>distro_type<span class="hl opt">});</span> <span class="hl opt">};</span> <span class="hl slc">#- if no mirror have been found, use current time zone and propose among available.</span> <span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">} ||=</span> crypto<span class="hl opt">::</span>bestMirror<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>timezone<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>distro_type<span class="hl opt">});</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Choose a mirror from which to get the packages"</span><span class="hl opt">),</span> cancel <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Cancel"</span><span class="hl opt">),</span> <span class="hl opt">}, [ {</span> separator <span class="hl opt">=></span> <span class="hl str">'|'</span><span class="hl opt">,</span> format <span class="hl opt">=></span> \<span class="hl opt">&</span>crypto<span class="hl opt">::</span>mirror2text<span class="hl opt">,</span> list <span class="hl opt">=></span> \<span class="hl kwb">@mirrors,</span> val <span class="hl opt">=></span> \<span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">},</span> <span class="hl opt">},</span> <span class="hl opt">],</span> <span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">} =</span> <span class="hl str">''</span><span class="hl opt">;</span> <span class="hl opt">};</span> <span class="hl kwa">return if</span> <span class="hl kwb">$@</span> <span class="hl opt">|| !</span><span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">};</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">}) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$_w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Contacting the mirror to get the list of available packages..."</span><span class="hl opt">));</span> <span class="hl kwb">$update_medium</span> <span class="hl opt">=</span> crypto<span class="hl opt">::</span>getPackages<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>packages<span class="hl opt">},</span> <span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">});</span> <span class="hl opt">}</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwa">while</span> <span class="hl kwb">$@</span> <span class="hl opt">|| !</span><span class="hl kwb">$update_medium</span> <span class="hl opt">&&</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Unable to contact mirror</span> <span class="hl ipl">%s</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl kwb">$u</span><span class="hl opt">->{</span>mirror<span class="hl opt">}) . (</span><span class="hl kwb">$@</span> ? <span class="hl str">" :</span><span class="hl esc">\n</span><span class="hl str"></span><span class="hl ipl">$@</span><span class="hl str">"</span> <span class="hl opt">:</span> <span class="hl str">""</span><span class="hl opt">) .</span> <span class="hl str">"</span><span class="hl esc">\n\n</span><span class="hl str">"</span> <span class="hl opt">.</span> N<span class="hl opt">(</span><span class="hl str">"Would you like to try again?"</span><span class="hl opt">));</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$update_medium</span><span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">choosePackagesTree</span><span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>packages<span class="hl opt">},</span> <span class="hl kwb">$update_medium</span><span class="hl opt">)) {</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>isUpgrade<span class="hl opt">} =</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl slc">#- now force upgrade mode, else update will be installed instead of upgraded.</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">pkg_install</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl slc">#- make sure to not try to install the packages (which are automatically selected by getPackage above).</span> <span class="hl slc">#- this is possible by deselecting the medium (which can be re-selected above).</span> <span class="hl kwc">delete</span> <span class="hl kwb">$update_medium</span><span class="hl opt">->{</span>selected<span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl slc">#- update urpmi even, because there is an hdlist available and everything is good,</span> <span class="hl slc">#- this will allow user to update the medium but update his machine later.</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">install_urpmi</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#- stop interface using ppp only. FIXME REALLY TOCHECK isdn (costly network) ?</span> <span class="hl slc"># FIXME damien install_interactive::downNetwork($o, 'pppOnly');</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> configureTimezone <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $clicked</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">require</span> timezone<span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>timezone<span class="hl opt">} =</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_treelist</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Which is your timezone?"</span><span class="hl opt">),</span> <span class="hl str">'/'</span><span class="hl opt">, [</span> timezone<span class="hl opt">::</span>getTimeZones<span class="hl opt">() ],</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>timezone<span class="hl opt">}) ||</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$ntp</span> <span class="hl opt">=</span> to_bool<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>ntp<span class="hl opt">});</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'configureTimezoneGMT'</span> <span class="hl opt">}, [</span> <span class="hl opt">{</span> text <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Hardware clock set to GMT"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>UTC<span class="hl opt">},</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span> <span class="hl opt">},</span> <span class="hl opt">{</span> text <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Automatic time synchronization (using NTP)"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> \<span class="hl kwb">$ntp,</span> type <span class="hl opt">=></span> <span class="hl str">'bool'</span> <span class="hl opt">},</span> <span class="hl opt">])</span> <span class="hl kwc">or</span> <span class="hl kwa">goto</span> <span class="hl opt">&</span>configureTimezone <span class="hl kwa">if</span> <span class="hl opt">$::</span>expert <span class="hl opt">||</span> <span class="hl kwb">$clicked</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$ntp</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$servers</span> <span class="hl opt">=</span> timezone<span class="hl opt">::</span>ntp_servers<span class="hl opt">();</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>ntp<span class="hl opt">} ||=</span> <span class="hl str">'pool.ntp.org'</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({},</span> <span class="hl opt">[ {</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"NTP Server"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>ntp<span class="hl opt">},</span> list <span class="hl opt">=> [</span> <span class="hl kwc">keys</span> <span class="hl kwb">%$servers</span> <span class="hl opt">],</span> not_edit <span class="hl opt">=></span> <span class="hl num">0</span><span class="hl opt">,</span> format <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$servers</span><span class="hl opt">->{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}</span> ? <span class="hl str">"</span><span class="hl ipl">$servers</span><span class="hl str">->{</span><span class="hl ipl">$_</span><span class="hl str">[0]} (</span><span class="hl ipl">$_</span><span class="hl str">[0])"</span> <span class="hl opt">:</span> <span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] } } ]</span> <span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">goto</span> <span class="hl opt">&</span>configureTimezone<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>ntp<span class="hl opt">} =</span> <span class="hl str">''</span><span class="hl opt">;</span> <span class="hl opt">}</span> install_steps<span class="hl opt">::</span>configureTimezone<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> configureServices <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $clicked</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">require</span> services<span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>services<span class="hl opt">} =</span> services<span class="hl opt">::</span>ask<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">$::</span>expert <span class="hl opt">||</span> <span class="hl kwb">$clicked</span><span class="hl opt">;</span> install_steps<span class="hl opt">::</span>configureServices<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> summaryBefore <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl slc">#- auto-detection</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">configurePrinter</span><span class="hl opt">(</span><span class="hl num">0</span><span class="hl opt">);</span> install_any<span class="hl opt">::</span>preConfigureTimezone<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl slc">#- get back network configuration.</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>network<span class="hl opt">;</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> network<span class="hl opt">::</span>network<span class="hl opt">::</span>read_all_conf<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netc<span class="hl opt">} ||= {},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>intf<span class="hl opt">} ||= {},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netcnx<span class="hl opt">} ||= {});</span> <span class="hl opt">};</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"summaryBefore: network configuration: "</span><span class="hl opt">,</span> formatError<span class="hl opt">(</span><span class="hl kwb">$@</span><span class="hl opt">))</span> <span class="hl kwa">if</span> <span class="hl kwb">$@</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> summary_prompt <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $l, $check_complete</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwb">@$l</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$val</span> <span class="hl opt">=</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>val<span class="hl opt">};</span> <span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>format<span class="hl opt">},</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>val<span class="hl opt">}) = (</span><span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$val</span><span class="hl opt">->() ||</span> N<span class="hl opt">(</span><span class="hl str">"not configured"</span><span class="hl opt">) },</span> <span class="hl str">''</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_</span><span class="hl opt">({</span> messages <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Summary"</span><span class="hl opt">),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'summary'</span><span class="hl opt">,</span> cancel <span class="hl opt">=></span> <span class="hl str">''</span><span class="hl opt">,</span> callbacks <span class="hl opt">=> {</span> complete <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{ !</span><span class="hl kwb">$check_complete</span><span class="hl opt">->() } },</span> <span class="hl opt">},</span> <span class="hl kwb">$l</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> summary <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">@l</span><span class="hl opt">;</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"System"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Keyboard"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>keyboard<span class="hl opt">} &&</span> translate<span class="hl opt">(</span>keyboard<span class="hl opt">::</span>keyboard2text<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>keyboard<span class="hl opt">})) },</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">selectKeyboard</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">) },</span> <span class="hl opt">};</span> <span class="hl kwc">my</span> <span class="hl kwb">$timezone_manually_set</span><span class="hl opt">;</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"System"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Country / Region"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> lang<span class="hl opt">::</span>c2name<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>country<span class="hl opt">}) },</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> any<span class="hl opt">::</span>selectCountry<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>locale<span class="hl opt">})</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$pkg_locale</span> <span class="hl opt">=</span> lang<span class="hl opt">::</span>locale_to_main_locale<span class="hl opt">(</span>lang<span class="hl opt">::</span>getlocale_for_country<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>lang<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>country<span class="hl opt">}));</span> <span class="hl kwc">my</span> <span class="hl kwb">@pkgs</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>packagesProviding<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>packages<span class="hl opt">},</span> <span class="hl str">"locales-</span><span class="hl ipl">$pkg_locale</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">pkg_install</span><span class="hl opt">(</span><span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">-></span><span class="hl kwd">name</span> <span class="hl opt">}</span> <span class="hl kwb">@pkgs</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl kwb">@pkgs</span><span class="hl opt">;</span> lang<span class="hl opt">::</span><span class="hl kwc">write</span><span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">});</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwb">$timezone_manually_set</span><span class="hl opt">) {</span> <span class="hl kwc">delete</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">};</span> install_any<span class="hl opt">::</span>preConfigureTimezone<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl slc">#- now we can precise the timezone thanks to the country</span> <span class="hl opt">}</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"System"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Timezone"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>timezone<span class="hl opt">}{</span>timezone<span class="hl opt">} },</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$timezone_manually_set</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">configureTimezone</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">) ||</span> <span class="hl kwb">$timezone_manually_set</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"System"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Mouse"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> translate<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>type<span class="hl opt">}) .</span> <span class="hl str">' '</span> <span class="hl opt">.</span> translate<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}{</span>name<span class="hl opt">}) },</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">selectMouse</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">);</span> mouse<span class="hl opt">::</span><span class="hl kwc">write</span><span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">do_pkgs</span><span class="hl opt">,</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">}) },</span> <span class="hl opt">};</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Hardware"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Printer"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>is_empty_hash_ref<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">}{</span>configured<span class="hl opt">})) {</span> <span class="hl kwa">require</span> pkgs<span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$p</span> <span class="hl opt">=</span> pkgs<span class="hl opt">::</span>packageByName<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>packages<span class="hl opt">},</span> <span class="hl str">'cups'</span><span class="hl opt">);</span> <span class="hl kwb">$p</span> <span class="hl opt">&&</span> <span class="hl kwb">$p</span><span class="hl opt">-></span><span class="hl kwd">flag_installed</span> ? N<span class="hl opt">(</span><span class="hl str">"Remote CUPS server"</span><span class="hl opt">) :</span> N<span class="hl opt">(</span><span class="hl str">"No printer"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">elsif</span> <span class="hl opt">(</span><span class="hl kwc">defined</span><span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">}{</span>configured<span class="hl opt">}{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">}{</span>DEFAULT<span class="hl opt">}}) &&</span> <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl kwb">$p</span> <span class="hl opt">=</span> find <span class="hl opt">{</span> <span class="hl kwb">$_</span> <span class="hl opt">&& (</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>make<span class="hl opt">} ||</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>model<span class="hl opt">}) }</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">}{</span>configured<span class="hl opt">}{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">}{</span>DEFAULT<span class="hl opt">}}{</span>queuedata<span class="hl opt">})) {</span> <span class="hl str">"</span><span class="hl ipl">$p</span><span class="hl str">->{make}</span> <span class="hl ipl">$p</span><span class="hl str">->{model}"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">elsif</span> <span class="hl opt">(</span><span class="hl kwb">$p</span> <span class="hl opt">=</span> find <span class="hl opt">{</span> <span class="hl kwb">$_</span> <span class="hl opt">&& (</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>make<span class="hl opt">} ||</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>model<span class="hl opt">}) }</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>queuedata<span class="hl opt">} } (</span><span class="hl kwc">values</span> <span class="hl opt">%{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">}{</span>configured<span class="hl opt">}})) {</span> <span class="hl str">"</span><span class="hl ipl">$p</span><span class="hl str">->{make}</span> <span class="hl ipl">$p</span><span class="hl str">->{model}"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> N<span class="hl opt">(</span><span class="hl str">"Remote CUPS server"</span><span class="hl opt">);</span> <span class="hl slc">#- fall back in case of something wrong.</span> <span class="hl opt">}</span> <span class="hl opt">},</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">configurePrinter</span><span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">) },</span> <span class="hl opt">};</span> <span class="hl kwc">my</span> <span class="hl kwb">@sound_cards</span> <span class="hl opt">=</span> detect_devices<span class="hl opt">::</span>getSoundDevices<span class="hl opt">();</span> <span class="hl kwc">my</span> <span class="hl kwb">$sound_index</span> <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">foreach</span> <span class="hl kwc">my</span> <span class="hl kwb">$device</span> <span class="hl opt">(</span><span class="hl kwb">@sound_cards</span><span class="hl opt">) {</span> <span class="hl kwb">$device</span><span class="hl opt">->{</span>sound_slot_index<span class="hl opt">} =</span> <span class="hl kwb">$sound_index</span><span class="hl opt">;</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Hardware"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Sound card"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$device</span><span class="hl opt">->{</span>driver<span class="hl opt">} &&</span> modules<span class="hl opt">::</span>module2description<span class="hl opt">(</span><span class="hl kwb">$device</span><span class="hl opt">->{</span>driver<span class="hl opt">}) ||</span> <span class="hl kwb">$device</span><span class="hl opt">->{</span>description<span class="hl opt">};</span> <span class="hl opt">},</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> harddrake<span class="hl opt">::</span>sound<span class="hl opt">;</span> harddrake<span class="hl opt">::</span>sound<span class="hl opt">::</span>config<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl kwb">$device</span><span class="hl opt">);</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl kwb">$sound_index++</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(!</span><span class="hl kwb">@sound_cards</span> <span class="hl opt">&& (</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span>GAMES<span class="hl opt">} ||</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>rpmsrate_flags_chosen<span class="hl opt">}{</span>AUDIO<span class="hl opt">})) {</span> <span class="hl slc">#- if no sound card are detected AND the user selected things needing a sound card,</span> <span class="hl slc">#- propose a special case for ISA cards</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Hardware"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Sound card"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{},</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Do you have an ISA sound card?"</span><span class="hl opt">))) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">do_pkgs</span><span class="hl opt">-></span><span class="hl kwd">install</span><span class="hl opt">(</span><span class="hl str">qw(alsa-utils sndconfig)</span><span class="hl opt">);</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Run</span> <span class="hl esc">\"</span><span class="hl str">alsaconf</span><span class="hl esc">\"</span> <span class="hl str">or</span> <span class="hl esc">\"</span><span class="hl str">sndconfig</span><span class="hl esc">\"</span> <span class="hl str">after installation to configure your sound card"</span><span class="hl opt">));</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"No sound card detected. Try</span> <span class="hl esc">\"</span><span class="hl str">harddrake</span><span class="hl esc">\"</span> <span class="hl str">after installation"</span><span class="hl opt">));</span> <span class="hl opt">}</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwa">foreach</span> <span class="hl kwc">my</span> <span class="hl kwb">$tv</span> <span class="hl opt">(</span>detect_devices<span class="hl opt">::</span>getTVcards<span class="hl opt">()) {</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Hardware"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"TV card"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$tv</span><span class="hl opt">->{</span>description<span class="hl opt">} },</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> harddrake<span class="hl opt">::</span>v4l<span class="hl opt">;</span> harddrake<span class="hl opt">::</span>v4l<span class="hl opt">::</span>config<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl kwb">$tv</span><span class="hl opt">->{</span>driver<span class="hl opt">});</span> <span class="hl opt">}</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Hardware"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Graphical interface"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>raw_X<span class="hl opt">}</span> ? Xconfig<span class="hl opt">::</span>various<span class="hl opt">::</span>to_string<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>raw_X<span class="hl opt">}) :</span> <span class="hl str">''</span> <span class="hl opt">},</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> configureX<span class="hl opt">(</span><span class="hl kwb">$o,</span> <span class="hl str">'expert'</span><span class="hl opt">) },</span> <span class="hl opt">};</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Network & Internet"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Network"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netcnx<span class="hl opt">}{</span>type<span class="hl opt">} },</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwc">local</span> <span class="hl opt">$::</span>expert <span class="hl opt">= $::</span>expert<span class="hl opt">;</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>netconnect<span class="hl opt">;</span> network<span class="hl opt">::</span>netconnect<span class="hl opt">::</span>main<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netcnx<span class="hl opt">} ||= {},</span> <span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>modules_conf<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netc<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>intf<span class="hl opt">},</span> <span class="hl num">0</span><span class="hl opt">,</span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl slc">#- in case netcnx type is not updated.</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>network<span class="hl opt">;</span> network<span class="hl opt">::</span>network<span class="hl opt">::</span>probe_netcnx_type<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netc<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>intf<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>netcnx<span class="hl opt">});</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl opt">$::</span>o-<span class="hl opt">>{</span>miscellaneous<span class="hl opt">} ||= {};</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Network & Internet"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Proxies"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{ $::</span>o-<span class="hl opt">>{</span>miscellaneous<span class="hl opt">}{</span>http_proxy<span class="hl opt">} || $::</span>o-<span class="hl opt">>{</span>miscellaneous<span class="hl opt">}{</span>ftp_proxy<span class="hl opt">}</span> ? N<span class="hl opt">(</span><span class="hl str">"configured"</span><span class="hl opt">) :</span> N<span class="hl opt">(</span><span class="hl str">"not configured"</span><span class="hl opt">) },</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>network<span class="hl opt">;</span> network<span class="hl opt">::</span>network<span class="hl opt">::</span>miscellaneous_choose<span class="hl opt">(</span><span class="hl kwb">$o,</span> <span class="hl opt">$::</span>o-<span class="hl opt">>{</span>miscellaneous<span class="hl opt">});</span> network<span class="hl opt">::</span>network<span class="hl opt">::</span>proxy_configure<span class="hl opt">($::</span>o-<span class="hl opt">>{</span>miscellaneous<span class="hl opt">})</span> <span class="hl kwa">if</span> <span class="hl opt">!$::</span>testing<span class="hl opt">;</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Security"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Security Level"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> security<span class="hl opt">::</span>level<span class="hl opt">;</span> security<span class="hl opt">::</span>level<span class="hl opt">::</span>to_string<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">});</span> <span class="hl opt">},</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> security<span class="hl opt">::</span>level<span class="hl opt">;</span> security<span class="hl opt">::</span>level<span class="hl opt">::</span>level_choose<span class="hl opt">(</span><span class="hl kwb">$o,</span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">},</span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>libsafe<span class="hl opt">},</span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>security_user<span class="hl opt">})</span> <span class="hl kwc">and</span> install_any<span class="hl opt">::</span>set_security<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Security"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Firewall"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>shorewall<span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$shorewall</span> <span class="hl opt">=</span> network<span class="hl opt">::</span>shorewall<span class="hl opt">::</span><span class="hl kwc">read</span><span class="hl opt">(</span><span class="hl kwb">$o,</span> <span class="hl str">'silent'</span><span class="hl opt">);</span> <span class="hl kwb">$shorewall</span> <span class="hl opt">&& !</span><span class="hl kwb">$shorewall</span><span class="hl opt">->{</span>disabled<span class="hl opt">}</span> ? N<span class="hl opt">(</span><span class="hl str">"activated"</span><span class="hl opt">) :</span> N<span class="hl opt">(</span><span class="hl str">"disabled"</span><span class="hl opt">);</span> <span class="hl opt">},</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> network<span class="hl opt">::</span>drakfirewall<span class="hl opt">;</span> network<span class="hl opt">::</span>drakfirewall<span class="hl opt">::</span>main<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>security<span class="hl opt">} <=</span> <span class="hl num">3</span><span class="hl opt">);</span> <span class="hl opt">},</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> detect_devices<span class="hl opt">::</span>getNet<span class="hl opt">();</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Boot"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Bootloader"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl slc">#-PO: example: lilo-graphic on /dev/hda1</span> N<span class="hl opt">(</span><span class="hl str">"</span><span class="hl ipl">%s</span> <span class="hl str">on</span> <span class="hl ipl">%s</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>bootloader<span class="hl opt">}{</span><span class="hl kwa">method</span><span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>bootloader<span class="hl opt">}{</span>boot<span class="hl opt">});</span> <span class="hl opt">},</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> any<span class="hl opt">::</span>setupBootloader<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>bootloader<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>all_hds<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>fstab<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">});</span> any<span class="hl opt">::</span>installBootloader<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>bootloader<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>all_hds<span class="hl opt">});</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> <span class="hl opt">{</span> group <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"System"</span><span class="hl opt">),</span> label <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Services"</span><span class="hl opt">),</span> val <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> services<span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$l, $activated</span><span class="hl opt">) =</span> services<span class="hl opt">::</span>services<span class="hl opt">();</span> N<span class="hl opt">(</span><span class="hl str">"Services:</span> <span class="hl ipl">%d</span> <span class="hl str">activated for</span> <span class="hl ipl">%d</span> <span class="hl str">registered"</span><span class="hl opt">,</span> <span class="hl kwc">int</span><span class="hl opt">(</span><span class="hl kwb">@$activated</span><span class="hl opt">),</span> <span class="hl kwc">int</span><span class="hl opt">(</span><span class="hl kwb">@$l</span><span class="hl opt">));</span> <span class="hl opt">},</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> services<span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>services<span class="hl opt">} =</span> services<span class="hl opt">::</span>ask<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">)</span> <span class="hl kwc">and</span> services<span class="hl opt">::</span>doit<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>services<span class="hl opt">});</span> <span class="hl opt">},</span> <span class="hl opt">};</span> <span class="hl kwc">my</span> <span class="hl kwb">$check_complete</span> <span class="hl opt">=</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>raw_X<span class="hl opt">} || !$::</span>testing <span class="hl opt">&& !</span>pkgs<span class="hl opt">::</span>packageByName<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>packages<span class="hl opt">},</span> <span class="hl str">'xorg-x11'</span><span class="hl opt">)-></span><span class="hl kwd">flag_installed</span> <span class="hl opt">||</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"You have not configured X. Are you sure you really want this?"</span><span class="hl opt">));</span> <span class="hl opt">};</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">summary_prompt</span><span class="hl opt">(</span>\<span class="hl kwb">@l, $check_complete</span><span class="hl opt">);</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">}) {</span> <span class="hl slc">#- Clean up $o->{printer} so that the records for an auto-installation</span> <span class="hl slc">#- contain only the important stuff</span> <span class="hl kwa">require</span> printer<span class="hl opt">::</span>printerdrake<span class="hl opt">;</span> printer<span class="hl opt">::</span>printerdrake<span class="hl opt">::</span>final_cleanup<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">});</span> <span class="hl opt">}</span> install_steps<span class="hl opt">::</span>configureTimezone<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">!</span><span class="hl kwb">$timezone_manually_set</span><span class="hl opt">;</span> <span class="hl slc">#- do not forget it.</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> configurePrinter <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $clicked</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">require</span> printer<span class="hl opt">::</span>main<span class="hl opt">;</span> <span class="hl kwa">require</span> printer<span class="hl opt">::</span>printerdrake<span class="hl opt">;</span> <span class="hl kwa">require</span> printer<span class="hl opt">::</span>detect<span class="hl opt">;</span> <span class="hl slc">#- $clicked = 0: Preparation of "Summary" step, check whether there are</span> <span class="hl slc">#- are local printers. Continue for automatically setting up print</span> <span class="hl slc">#- queues if so, return otherwise</span> <span class="hl slc">#- $clicked = 1: User clicked "Configure" button in "Summary", enter</span> <span class="hl slc">#- Printerdrake for manual configuration</span> <span class="hl kwc">my</span> <span class="hl kwb">$go_on</span> <span class="hl opt">=</span> <span class="hl kwb">$clicked</span> ? <span class="hl num">2</span> <span class="hl opt">:</span> <span class="hl kwb">$o</span> <span class="hl opt">&&</span> printer<span class="hl opt">::</span>detect<span class="hl opt">::</span>local_detect<span class="hl opt">();</span> <span class="hl kwb">$go_on</span><span class="hl opt">--</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl slc">#- install packages needed for printer::getinfo()</span> <span class="hl opt">$::</span>testing <span class="hl kwc">or</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">do_pkgs</span><span class="hl opt">-></span><span class="hl kwd">install</span><span class="hl opt">(</span><span class="hl str">'foomatic-db-engine'</span><span class="hl opt">);</span> <span class="hl slc">#- take default configuration, this include choosing the right spooler</span> <span class="hl slc">#- currently used by the system.</span> <span class="hl kwc">my</span> <span class="hl kwb">$printer</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>printer<span class="hl opt">} ||= {};</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> add2hash<span class="hl opt">(</span><span class="hl kwb">$printer,</span> printer<span class="hl opt">::</span>main<span class="hl opt">::</span>getinfo<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>prefix<span class="hl opt">})) };</span> <span class="hl kwb">$printer</span><span class="hl opt">->{</span>PAPERSIZE<span class="hl opt">} =</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>lang<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">'en_US'</span> <span class="hl opt">||</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>locale<span class="hl opt">}{</span>country<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">'CA'</span> ? <span class="hl str">'Letter'</span> <span class="hl opt">:</span> <span class="hl str">'A4'</span><span class="hl opt">;</span> printer<span class="hl opt">::</span>printerdrake<span class="hl opt">::</span>main<span class="hl opt">(</span><span class="hl kwb">$printer, $o</span><span class="hl opt">->{</span>security<span class="hl opt">},</span> <span class="hl kwb">$o, $clicked,</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> install_interactive<span class="hl opt">::</span>upNetwork<span class="hl opt">(</span><span class="hl kwb">$o,</span> <span class="hl str">'pppAvoided'</span><span class="hl opt">) });</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> setRootPassword <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $clicked</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$sup</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>superuser<span class="hl opt">} ||= {};</span> <span class="hl kwb">$sup</span><span class="hl opt">->{</span>password2<span class="hl opt">} ||=</span> <span class="hl kwb">$sup</span><span class="hl opt">->{</span>password<span class="hl opt">} ||=</span> <span class="hl str">""</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">} >=</span> <span class="hl num">1</span> <span class="hl opt">||</span> <span class="hl kwb">$clicked</span><span class="hl opt">) {</span> <span class="hl kwa">require</span> authentication<span class="hl opt">;</span> authentication<span class="hl opt">::</span>ask_root_password_and_authentication<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>netc<span class="hl opt">},</span> <span class="hl kwb">$sup, $o</span><span class="hl opt">->{</span>authentication<span class="hl opt">} ||= {},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>meta_class<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">});</span> <span class="hl opt">}</span> install_steps<span class="hl opt">::</span>setRootPassword<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl slc">#-addUser</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> addUser <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $clicked</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>users<span class="hl opt">} ||= [];</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">} <</span> <span class="hl num">1</span><span class="hl opt">) {</span> <span class="hl kwc">push</span> <span class="hl opt">@{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>users<span class="hl opt">}}, {</span> password <span class="hl opt">=></span> <span class="hl str">'mandrake'</span><span class="hl opt">,</span> realname <span class="hl opt">=></span> <span class="hl str">'default'</span><span class="hl opt">,</span> icon <span class="hl opt">=></span> <span class="hl str">'automagic'</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">!</span>member<span class="hl opt">(</span><span class="hl str">'mandrake'</span><span class="hl opt">,</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>name<span class="hl opt">} } @{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>users<span class="hl opt">}});</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">} >=</span> <span class="hl num">1</span> <span class="hl opt">||</span> <span class="hl kwb">$clicked</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">@suggested_names</span> <span class="hl opt">= @{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>users<span class="hl opt">}}</span> ? <span class="hl opt">() :</span> <span class="hl kwc">grep</span> <span class="hl opt">{ !</span><span class="hl kwd">/lost\+found/</span> <span class="hl opt">}</span> all<span class="hl opt">(</span><span class="hl str">"$::prefix/home"</span><span class="hl opt">);</span> any<span class="hl opt">::</span>ask_users<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>users<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">},</span> \<span class="hl kwb">@suggested_names</span><span class="hl opt">);</span> <span class="hl opt">}</span> add2hash<span class="hl opt">(</span><span class="hl kwb">$o,</span> any<span class="hl opt">::</span>get_autologin<span class="hl opt">());</span> any<span class="hl opt">::</span>autologin<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">);</span> install_steps<span class="hl opt">::</span>addUser<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> setupBootloaderBefore <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$_w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Preparing bootloader..."</span><span class="hl opt">));</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">SUPER</span><span class="hl opt">::</span>setupBootloaderBefore<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> setupBootloader <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $ent_number</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>arch<span class="hl opt">() =~</span> <span class="hl kwd">/ppc/</span><span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>detect_devices<span class="hl opt">::</span>get_mac_generation<span class="hl opt">() !~</span> <span class="hl kwd">/NewWorld/</span> <span class="hl opt">&&</span> detect_devices<span class="hl opt">::</span>get_mac_model<span class="hl opt">() !~</span> <span class="hl kwd">/IBM/</span><span class="hl opt">) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_warn</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"You appear to have an OldWorld or Unknown machine, the yaboot bootloader will not work for you. The install will continue, but you'll need to use BootX or some other means to boot your machine. The kernel argument for the root fs is: root=</span><span class="hl ipl">%s</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl str">'/dev/'</span> <span class="hl opt">.</span> fs<span class="hl opt">::</span>get<span class="hl opt">::</span>root_<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>fstab<span class="hl opt">})->{</span>device<span class="hl opt">}));</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"OldWorld or Unknown Machine - no yaboot setup"</span><span class="hl opt">);</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>arch<span class="hl opt">() =~</span> <span class="hl kwd">/^alpha/</span><span class="hl opt">) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Do you want to use aboot?"</span><span class="hl opt">),</span> <span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> catch_cdie <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">SUPER</span><span class="hl opt">::</span>setupBootloader <span class="hl opt">}</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Error installing aboot, </span> <span class="hl str">try to force installation even if that destroys the first partition?"</span><span class="hl opt">));</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$ent_number</span> <span class="hl opt">==</span> <span class="hl num">1</span><span class="hl opt">) {</span> any<span class="hl opt">::</span>setupBootloader_simple<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>bootloader<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>all_hds<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>fstab<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">})</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> any<span class="hl opt">::</span>setupBootloader<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>bootloader<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>all_hds<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>fstab<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">})</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl opt">}</span> any<span class="hl opt">::</span>installBootloader<span class="hl opt">(</span><span class="hl kwb">$o, $o</span><span class="hl opt">->{</span>bootloader<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>all_hds<span class="hl opt">})</span> <span class="hl kwc">or die</span> <span class="hl str">"already displayed"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> miscellaneous <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $_clicked</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>meta_class<span class="hl opt">}</span> <span class="hl kwc">ne</span> <span class="hl str">'desktop'</span> <span class="hl opt">&&</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>meta_class<span class="hl opt">}</span> <span class="hl kwc">ne</span> <span class="hl str">'firewall'</span> <span class="hl opt">&& !</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>isUpgrade<span class="hl opt">}) {</span> <span class="hl kwa">require</span> security<span class="hl opt">::</span>level<span class="hl opt">;</span> security<span class="hl opt">::</span>level<span class="hl opt">::</span>level_choose<span class="hl opt">(</span><span class="hl kwb">$o,</span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">},</span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>libsafe<span class="hl opt">},</span> \<span class="hl kwb">$o</span><span class="hl opt">->{</span>security_user<span class="hl opt">});</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>security<span class="hl opt">} ></span> <span class="hl num">2</span> <span class="hl opt">&&</span> find <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>fs_type<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">'vfat'</span> <span class="hl opt">} @{</span><span class="hl kwb">$o</span><span class="hl opt">->{</span>fstab<span class="hl opt">}}) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_okcancel</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"In this security level, access to the files in the Windows partition is restricted to the administrator."</span><span class="hl opt">))</span> <span class="hl kwc">or</span> <span class="hl kwa">goto</span> <span class="hl opt">&</span>miscellaneous<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> install_steps<span class="hl opt">::</span>miscellaneous<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> configureX <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $expert</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> install_steps<span class="hl opt">::</span>configureXBefore<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl kwc">symlink</span> <span class="hl str">"</span><span class="hl ipl">$o</span><span class="hl str">->{prefix}/etc/gtk"</span><span class="hl opt">,</span> <span class="hl str">"/etc/gtk"</span><span class="hl opt">;</span> <span class="hl kwa">require</span> Xconfig<span class="hl opt">::</span>main<span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl kwb">$raw_X</span> <span class="hl opt">=</span> Xconfig<span class="hl opt">::</span>main<span class="hl opt">::</span>configure_everything_or_configure_chooser<span class="hl opt">(</span><span class="hl kwb">$o,</span> install_any<span class="hl opt">::</span>X_options_from_o<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">), !</span><span class="hl kwb">$expert, $o</span><span class="hl opt">->{</span>keyboard<span class="hl opt">},</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>mouse<span class="hl opt">})) {</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>raw_X<span class="hl opt">} =</span> <span class="hl kwb">$raw_X</span><span class="hl opt">;</span> install_steps<span class="hl opt">::</span>configureXAfter<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> generateAutoInstFloppy <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $replay</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">@imgs</span> <span class="hl opt">=</span> install_any<span class="hl opt">::</span>getAndSaveAutoInstallFloppies<span class="hl opt">(</span><span class="hl kwb">$o, $replay</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$floppy</span> <span class="hl opt">=</span> detect_devices<span class="hl opt">::</span>floppy<span class="hl opt">();</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_okcancel</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Insert a blank floppy in drive</span> <span class="hl ipl">%s</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl kwb">$floppy</span><span class="hl opt">),</span> <span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$i</span><span class="hl opt">;</span> <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwb">@imgs</span><span class="hl opt">) {</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$i++</span><span class="hl opt">) {</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_okcancel</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Please insert another floppy for drivers disk"</span><span class="hl opt">),</span> <span class="hl num">1</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwc">my</span> <span class="hl kwb">$_w</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">wait_message</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Creating auto install floppy..."</span><span class="hl opt">));</span> <span class="hl kwa">require</span> commands<span class="hl opt">;</span> commands<span class="hl opt">::</span>dd<span class="hl opt">(</span><span class="hl str">"if=</span><span class="hl ipl">$_</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl str">'of='</span> <span class="hl opt">.</span> devices<span class="hl opt">::</span>make<span class="hl opt">(</span><span class="hl kwb">$floppy</span><span class="hl opt">));</span> common<span class="hl opt">::</span>sync<span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl slc">#------------------------------------------------------------------------------</span> <span class="hl kwa">sub</span> exitInstall <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$o, $alldone</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwa">return</span> <span class="hl kwb">$o</span><span class="hl opt">->{</span>step<span class="hl opt">} =</span> <span class="hl str">''</span> <span class="hl kwa">if</span> <span class="hl opt">!</span><span class="hl kwb">$alldone</span> <span class="hl opt">&& !</span><span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_yesorno</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"Some steps are not completed.</span> <span class="hl str"></span> <span class="hl str">Do you really want to quit now?"</span><span class="hl opt">),</span> <span class="hl num">0</span><span class="hl opt">);</span> install_steps<span class="hl opt">::</span>exitInstall<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">);</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwa">exit unless</span> <span class="hl kwb">$alldone</span><span class="hl opt">;</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_no_check</span><span class="hl opt">(</span> <span class="hl opt">{</span> messages <span class="hl opt">=></span> formatAlaTeX<span class="hl opt">(</span>install_messages<span class="hl opt">::</span>install_completed<span class="hl opt">()),</span> interactive_help_id <span class="hl opt">=></span> <span class="hl str">'exitInstall'</span><span class="hl opt">,</span> ok <span class="hl opt">=></span> N<span class="hl opt">(</span><span class="hl str">"Reboot"</span><span class="hl opt">),</span> <span class="hl opt">},</span> <span class="hl opt">[</span> if_<span class="hl opt">(</span>arch<span class="hl opt">() !~</span> <span class="hl kwd">/^ppc/</span><span class="hl opt">,</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> \ <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl kwb">$_t1</span> <span class="hl opt">=</span> N<span class="hl opt">(</span><span class="hl str">"Generate auto install floppy"</span><span class="hl opt">)),</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$t</span> <span class="hl opt">=</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">ask_from_list_</span><span class="hl opt">(</span><span class="hl str">''</span><span class="hl opt">,</span> N<span class="hl opt">(</span><span class="hl str">"The auto install can be fully automated if wanted,</span> <span class="hl str">in that case it will take over the hard drive!!</span> <span class="hl str">(this is meant for installing on another box).</span> <span class="hl str"></span> <span class="hl str">You may prefer to replay the installation.</span> <span class="hl str">"</span><span class="hl opt">), [</span> N_<span class="hl opt">(</span><span class="hl str">"Replay"</span><span class="hl opt">),</span> N_<span class="hl opt">(</span><span class="hl str">"Automated"</span><span class="hl opt">) ]);</span> <span class="hl kwb">$t</span> <span class="hl kwc">and</span> <span class="hl kwb">$o</span><span class="hl opt">-></span><span class="hl kwd">generateAutoInstFloppy</span><span class="hl opt">(</span><span class="hl kwb">$t</span> <span class="hl kwc">eq</span> <span class="hl str">'Replay'</span><span class="hl opt">);</span> <span class="hl opt">},</span> advanced <span class="hl opt">=></span> <span class="hl num">1</span> <span class="hl opt">}),</span> <span class="hl opt">{</span> val <span class="hl opt">=></span> \ <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl kwb">$_t2</span> <span class="hl opt">=</span> N<span class="hl opt">(</span><span class="hl str">"Save packages selection"</span><span class="hl opt">)),</span> clicked <span class="hl opt">=></span> <span class="hl kwa">sub</span> <span class="hl opt">{</span> install_any<span class="hl opt">::</span>g_default_packages<span class="hl opt">(</span><span class="hl kwb">$o</span><span class="hl opt">) },</span> advanced <span class="hl opt">=></span> <span class="hl num">1</span> <span class="hl opt">},</span> <span class="hl opt">]</span> <span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl kwb">$alldone</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#-######################################################################################</span> <span class="hl slc">#- Misc Steps Functions</span> <span class="hl slc">#-######################################################################################</span> <span class="hl num">1</span><span class="hl opt">;</span> </code></pre></td></tr></table> </div> <!-- class=content --> <div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.1</a> (<a href='https://git-scm.com/'>git 2.21.0</a>) at 2025-02-27 06:40:36 +0000</div> </div> <!-- id=cgit --> </body> </html>