%\documentclass[pdftex]{article} \usepackage{hyperref} . %\documentclass[pdftex,onecolumn,11pt,oneside]{article} \documentclass[onecolumn,11pt,oneside]{article}%seminar} %\usepackage[pdftex]{hyperref} \usepackage{isolatin1} %\ifx\pdfoutput\undefined \usepackage[dvips]{graphicx} %\else %\usepackage[pdftex]{graphicx} %\usepackage[pdftex]{hyperref} %\usepackage{type1cm} %\fi %\pdfoutput=1 \usepackage{color,graphicx,shortvrb,epsfig,verbatim,tabularx} \usepackage{url} \usepackage{hyperref} \urlstyle{sf} \usepackage{fancyheadings} \usepackage{program} \usepackage{ulem} \usepackage{amsfonts} \usepackage{xspace} \usepackage[english,francais]{babel} \pagestyle{fancy} \newcommand{\trtitle}{Drakfont\\ fonts importation for mandrake linux} \DeclareGraphicsRule{.ps}{eps}{.ps}{} \DeclareGraphicsExtensions{.ps} \renewcommand\star{{\ttfamily*}} \let\package\textsf \newlength{\gxlen} \settowidth{\gxlen}{\package{graphicx}: } \newcommand\gs{\makebox[\gxlen][l]{\package{graphics}:}} \newcommand\gx{\makebox[\gxlen][l]{\package{graphicx}:}} \MakeShortVerb{\|} \begin{document} \title{$Drakfont$ fonts importation for mandrake linux} \begin{figure}%[ht] \begin{center} %\caption{Exemple d'image} \mbox{\epsfig{file=mandrake.ps}}\\ %,height=1in,width=2in}}\\ %\mbox{\epsfig{file=carte_.ps,height=1in,width=2in}} \end{center} \end{figure} %\begin{figure} %\begin{center} %\end{center} %\end{figure} \author{Dupont Sebastien \\ sdupont@mandrakesoft.com} \date{05/10/2001} \pagestyle{myheadings} \markright{\scriptsize \trtitle} \title{\bf \trtitle} \maketitle \section{drakfont Future Overview} \paragraph{Fonts import :\\} \begin{itemize} \item pfb ( Adobe Type 1 binary ) \item pfa ( Adobe Type 1 ASCII ) \item ttf ( True-Type ) \item pcf.gz \item Speedo \item pfa ( Adobe Type 1 ASCII ) \item ttf ( True-Type ) \item and Bitmap (PCF, BDF, and SNF) \end{itemize} \paragraph{Features} \begin{itemize} \item Install fonts from any directory \item Get windows fonts on any vfat partitions \item UN-installation of any fonts (even if not installed through drakfont) \end{itemize} \paragraph{Support} \begin{itemize} \item Xfs \item ghostscript \& printer \item Staroffice \& printer \item abiword \item Koffice, Gnumeric, ... studying \item all fonts supported by printer \item ( aliases by RENDER in Xfree86 .... -> later ) \end{itemize} \section{Window interface:} \begin{itemize} \item \item Fontselectiondialog widget \item Command buttons under Fontselectiondialog (like the actual frontend). \item Commands buttons: \item import from windows partition. \item import from all fat32 partitions and look for winnt/windows/font \item and import all (delete doublon) but don't import if already exist. \item import from directory \item look for if it exist before for each font and not delete the original. \item (replace all, no, none) \item expert options: \item ask the directory, and look for if it exist before \item if it exist ask: (replace all, no, none) \item uninstall with list per font type \item Expert additional switch \item option support: ghostscript, Staroffice, etc... \item check-button. (by default all check) \item Printer Application Fonts Support... \item check-button. (by default all check) \end{itemize} \section{Command line} \paragraph{Font Importation and monitoring application\\} \-\-windows\_import : import from all available windows partitions. \\ \-\-strong : strong verification of font.\\ \-\-install : accept any font file and any directory.\\ \-\-uninstall : uninstall any font or any directory of font.\\ \-\-replace : replace all font if already exist\\ \-\-application : 0 none application.\\ : 1 all application available supported.\\ : name\_of\_application" like staroffice for only this one.\\ \section{Graphics} to visualize the conceptual graphics please see:\\ drakfont.jpg\\ drakfont\_install\.jpg\\ \& drakfont\_uninstall.jpg\\ %\begin{figure}%[ht] %\begin{center} %\caption{Exemple d'image} %\mbox{\epsfig{file=drakfont_install.ps}}\\ %,height=1in,width=2in}}\\ %\mbox{\epsfig{file=carte_.ps,height=1in,width=2in}} %\end{center} %\end{figure} %\begin{figure}%[ht] %\begin{center} %\caption{Exemple d'image} %\mbox{\epsfig{file=drakfont_uninstall.eps}}\\ %,height=1in,width=2in}}\\ %\mbox{\epsfig{file=carte_.ps,height=1in,width=2in}} %\end{center} %\end{figure} \end{document} kx/?h=topic/MDK-2006_0-update'>summary</a><a href='/software/drakx/refs/?h=topic/MDK-2006_0-update&id=f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'>refs</a><a href='/software/drakx/log/perl-install/modules.pm?h=topic/MDK-2006_0-update'>log</a><a class='active' href='/software/drakx/tree/perl-install/modules.pm?h=topic/MDK-2006_0-update&id=f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'>tree</a><a href='/software/drakx/commit/perl-install/modules.pm?h=topic/MDK-2006_0-update&id=f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'>commit</a><a href='/software/drakx/diff/perl-install/modules.pm?h=topic/MDK-2006_0-update&id=f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'>diff</a><a href='/software/drakx/stats/perl-install/modules.pm?h=topic/MDK-2006_0-update'>stats</a></td><td class='form'><form class='right' method='get' action='/software/drakx/log/perl-install/modules.pm'> <input type='hidden' name='h' value='topic/MDK-2006_0-update'/><input type='hidden' name='id' value='f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'/><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=topic/MDK-2006_0-update&id=f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'>root</a>/<a href='/software/drakx/tree/perl-install?h=topic/MDK-2006_0-update&id=f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'>perl-install</a>/<a href='/software/drakx/tree/perl-install/modules.pm?h=topic/MDK-2006_0-update&id=f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'>modules.pm</a></div><div class='content'>blob: b33617a417a249e09a37ad518aeb7cebf791fd8b (<a href='/software/drakx/plain/perl-install/modules.pm?h=topic/MDK-2006_0-update&id=f55cc79408ffe0be4c50ac72f5f9761c96a9d8c4'>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> </pre></td> <td class='lines'><pre><code><span class="hl kwa">package</span> modules<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> common<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> <span class="hl kwc">log</span><span class="hl opt">;</span> <span class="hl kwa">use</span> list_modules<span class="hl opt">;</span> <span class="hl kwa">use</span> modules<span class="hl opt">::</span>any_conf<span class="hl opt">;</span> <span class="hl kwa">sub</span> modules_descriptions<span class="hl opt">() {</span> <span class="hl kwc">my</span> <span class="hl kwb">$f</span> <span class="hl opt">=</span> <span class="hl str">'/lib/modules/'</span> <span class="hl opt">.</span> c<span class="hl opt">::</span>kernel_version<span class="hl opt">() .</span> <span class="hl str">'/modules.description'</span><span class="hl opt">;</span> <span class="hl opt">-</span>e <span class="hl kwb">$f</span> <span class="hl kwc">or</span> <span class="hl kwb">$f</span> <span class="hl opt">=</span> <span class="hl str">'/lib/modules.description'</span><span class="hl opt">;</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwd">/(\S+)\s+(.*)/</span> <span class="hl opt">}</span> cat_<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">sub</span> module2description <span class="hl opt">{ +{</span> modules_descriptions<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 kwa">sub</span> category2modules_and_description <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$categories</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">%modules_descriptions</span> <span class="hl opt">=</span> modules_descriptions<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 kwb">$modules_descriptions</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">} }</span> category2modules<span class="hl opt">(</span><span class="hl kwb">$categories</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwc">my</span> <span class="hl kwb">%mappings_24_26</span> <span class="hl opt">= (</span> <span class="hl str">"usb-ohci"</span> <span class="hl opt">=></span> <span class="hl str">"ohci-hcd"</span><span class="hl opt">,</span> <span class="hl str">"usb-uhci"</span> <span class="hl opt">=></span> <span class="hl str">"uhci-hcd"</span><span class="hl opt">,</span> <span class="hl str">"uhci"</span> <span class="hl opt">=></span> <span class="hl str">"uhci-hcd"</span><span class="hl opt">,</span> <span class="hl str">"printer"</span> <span class="hl opt">=></span> <span class="hl str">"usblp"</span><span class="hl opt">,</span> <span class="hl str">"bcm4400"</span> <span class="hl opt">=></span> <span class="hl str">"b44"</span><span class="hl opt">,</span> <span class="hl str">"3c559"</span> <span class="hl opt">=></span> <span class="hl str">"3c359"</span><span class="hl opt">,</span> <span class="hl str">"3c90x"</span> <span class="hl opt">=></span> <span class="hl str">"3c59x"</span><span class="hl opt">,</span> <span class="hl str">"dc395x_trm"</span> <span class="hl opt">=></span> <span class="hl str">"dc395x"</span><span class="hl opt">,</span> <span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">%mappings_26_24</span> <span class="hl opt">=</span> <span class="hl kwc">reverse</span> <span class="hl kwb">%mappings_24_26</span><span class="hl opt">;</span> <span class="hl kwb">$mappings_26_24</span><span class="hl opt">{</span><span class="hl str">'uhci-hcd'</span><span class="hl opt">} =</span> <span class="hl str">'usb-uhci'</span><span class="hl opt">;</span> <span class="hl kwa">sub</span> mapping_24_26 <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$modname</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$mappings_24_26</span><span class="hl opt">{</span><span class="hl kwb">$modname</span><span class="hl opt">} ||</span> <span class="hl kwb">$modname</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> mapping_26_24 <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$modname</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwb">$mappings_26_24</span><span class="hl opt">{</span><span class="hl kwb">$modname</span><span class="hl opt">} ||</span> <span class="hl kwb">$modname</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> cond_mapping_24_26 <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$modname</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> c<span class="hl opt">::</span>kernel_version<span class="hl opt">() =~</span> <span class="hl kwd">/^\Q2.6/</span> <span class="hl opt">&&</span> <span class="hl kwb">$mappings_24_26</span><span class="hl opt">{</span><span class="hl kwb">$modname</span><span class="hl opt">} ||</span> <span class="hl kwb">$modname</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#-###############################################################################</span> <span class="hl slc">#- module loading</span> <span class="hl slc">#-###############################################################################</span> <span class="hl slc"># handles dependencies</span> <span class="hl kwa">sub</span> load_raw <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$l, $h_options</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>testing<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">"i would load module</span> <span class="hl ipl">$_</span> <span class="hl str">(</span><span class="hl ipl">$h_options</span><span class="hl str">->{</span><span class="hl ipl">$_</span><span class="hl str">})"</span><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 opt">}</span> <span class="hl kwa">elsif</span> <span class="hl opt">($::</span>isStandalone <span class="hl opt">|| $::</span>move<span class="hl opt">) {</span> run_program<span class="hl opt">::</span>run<span class="hl opt">(</span><span class="hl str">'/sbin/modprobe'</span><span class="hl opt">,</span> <span class="hl kwb">$_,</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">$h_options</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 opt">!</span>run_program<span class="hl opt">::</span>run<span class="hl opt">(</span><span class="hl str">'/sbin/modprobe'</span><span class="hl opt">,</span> <span class="hl str">'-n'</span><span class="hl opt">,</span> <span class="hl kwb">$_</span><span class="hl opt">)</span> <span class="hl slc">#- ignore missing modules</span> <span class="hl kwc">or die</span> <span class="hl str">"insmod'ing module</span> <span class="hl ipl">$_</span> <span class="hl str">failed"</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 kwa">else</span> <span class="hl opt">{</span> load_raw_install<span class="hl opt">(</span><span class="hl kwb">$l, $h_options</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwc">sleep</span> <span class="hl num">2</span> <span class="hl kwa">if</span> any <span class="hl opt">{</span> <span class="hl kwd">/^(usb-storage|mousedev|printer)$/</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> load_with_options <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$l, $h_options</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">map</span> <span class="hl opt">{</span> dependencies_closure<span class="hl opt">(</span>cond_mapping_24_26<span class="hl opt">(</span><span class="hl kwb">$_</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 kwb">@l</span> <span class="hl opt">=</span> remove_loaded_modules<span class="hl opt">(</span><span class="hl kwb">@l</span><span class="hl opt">)</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> load_raw<span class="hl opt">(</span>\<span class="hl kwb">@l, $h_options</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> load <span class="hl opt">{</span> <span class="hl kwc">my</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> load_with_options<span class="hl opt">(</span>\<span class="hl kwb">@l,</span> <span class="hl opt">{});</span> <span class="hl opt">}</span> <span class="hl slc"># eg: load_and_configure($modules_conf, 'vfat', 'reiserfs', [ ne2k => 'io=0xXXX', 'dma=5' ])</span> <span class="hl kwa">sub</span> load_and_configure <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$conf, $module, $o_options</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">$category</span> <span class="hl opt">=</span> module2category<span class="hl opt">(</span><span class="hl kwb">$module</span><span class="hl opt">) ||</span> <span class="hl str">''</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$network_devices</span> <span class="hl opt">=</span> <span class="hl kwb">$category</span> <span class="hl opt">=~</span> <span class="hl kwd">m!network/(main|gigabit|usb|wireless)!</span> <span class="hl opt">&& [</span> detect_devices<span class="hl opt">::</span>getNet<span class="hl opt">() ];</span> <span class="hl kwc">my</span> <span class="hl kwb">@l</span> <span class="hl opt">=</span> remove_loaded_modules<span class="hl opt">(</span>dependencies_closure<span class="hl opt">(</span>cond_mapping_24_26<span class="hl opt">(</span><span class="hl kwb">$module</span><span class="hl opt">)))</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> load_raw<span class="hl opt">(</span>\<span class="hl kwb">@l,</span> <span class="hl opt">{</span> <span class="hl kwb">$module</span> <span class="hl opt">=></span> <span class="hl kwb">$o_options</span> <span class="hl opt">});</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$network_devices</span><span class="hl opt">) {</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">set_alias</span><span class="hl opt">(</span><span class="hl kwb">$_, $module</span><span class="hl opt">)</span> <span class="hl kwa">foreach</span> difference2<span class="hl opt">([</span> detect_devices<span class="hl opt">::</span>getNet<span class="hl opt">() ],</span> <span class="hl kwb">$network_devices</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl opt">(</span>c<span class="hl opt">::</span>kernel_version<span class="hl opt">() =~</span> <span class="hl kwd">/^\Q2.6/</span> <span class="hl opt">&&</span> member<span class="hl opt">(</span><span class="hl kwb">$module,</span> <span class="hl str">'imm'</span><span class="hl opt">,</span> <span class="hl str">'ppa'</span><span class="hl opt">)</span> <span class="hl opt">&& ! -</span>d <span class="hl str">"/proc/sys/dev/parport/parport0/devices/</span><span class="hl ipl">$module</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">"</span><span class="hl ipl">$module</span> <span class="hl str">loaded but is not useful, removing"</span><span class="hl opt">);</span> unload<span class="hl opt">(</span><span class="hl kwb">$module</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 kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">set_options</span><span class="hl opt">(</span><span class="hl kwb">$module, $o_options</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl kwb">$o_options</span><span class="hl opt">;</span> when_load<span class="hl opt">(</span><span class="hl kwb">$conf, $module</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> unload <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 kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">"rmmod</span> <span class="hl ipl">$_</span><span class="hl str">"</span><span class="hl opt">)</span> <span class="hl kwa">foreach</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> run_program<span class="hl opt">::</span>run<span class="hl opt">(</span><span class="hl str">"rmmod"</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 kwb">@_</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> load_category <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$conf, $category, $o_wait_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">@try_modules</span> <span class="hl opt">= (</span> if_<span class="hl opt">(</span><span class="hl kwb">$category</span> <span class="hl opt">=~</span> <span class="hl kwd">/scsi/</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 str">'parport_pc'</span><span class="hl opt">,</span> <span class="hl str">'imm'</span><span class="hl opt">,</span> <span class="hl str">'ppa'</span><span class="hl opt">),</span> if_<span class="hl opt">(</span>detect_devices<span class="hl opt">::</span>usbStorage<span class="hl opt">(),</span> <span class="hl str">'usb-storage'</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> if_<span class="hl opt">(</span><span class="hl kwb">$category</span> <span class="hl opt">=~</span> <span class="hl kwd">/scsi/</span><span class="hl opt">,</span> <span class="hl str">'mesh'</span><span class="hl opt">,</span> <span class="hl str">'mac53c94'</span><span class="hl opt">),</span> if_<span class="hl opt">(</span><span class="hl kwb">$category</span> <span class="hl opt">=~</span> <span class="hl kwd">/net/</span><span class="hl opt">,</span> <span class="hl str">'bmac'</span><span class="hl opt">,</span> <span class="hl str">'gmac'</span><span class="hl opt">,</span> <span class="hl str">'mace'</span><span class="hl opt">,</span> <span class="hl str">'airport'</span><span class="hl opt">),</span> if_<span class="hl opt">(</span><span class="hl kwb">$category</span> <span class="hl opt">=~</span> <span class="hl kwd">/sound/</span><span class="hl opt">,</span> <span class="hl str">'dmasound_pmac'</span><span class="hl opt">),</span> <span class="hl opt">),</span> <span class="hl opt">);</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$o_wait_message</span><span class="hl opt">->(</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>description<span class="hl opt">},</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>driver<span class="hl opt">})</span> <span class="hl kwa">if</span> <span class="hl kwb">$o_wait_message</span><span class="hl opt">;</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> load_and_configure<span class="hl opt">(</span><span class="hl kwb">$conf, $_</span><span class="hl opt">->{</span>driver<span class="hl opt">},</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>options<span class="hl opt">}) };</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>error<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><span class="hl kwc">try</span><span class="hl opt">} =</span> <span class="hl num">1</span> <span class="hl kwa">if</span> member<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>driver<span class="hl opt">},</span> <span class="hl str">'hptraid'</span><span class="hl opt">,</span> <span class="hl str">'ohci1394'</span><span class="hl opt">);</span> <span class="hl slc">#- don't warn when this fails</span> <span class="hl opt">!(</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>error<span class="hl opt">} &&</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span><span class="hl kwc">try</span><span class="hl opt">});</span> <span class="hl opt">}</span> probe_category<span class="hl opt">(</span><span class="hl kwb">$category</span><span class="hl opt">),</span> <span class="hl kwc">map</span> <span class="hl opt">{ {</span> driver <span class="hl opt">=></span> <span class="hl kwb">$_,</span> description <span class="hl opt">=></span> <span class="hl kwb">$_,</span> <span class="hl kwc">try</span> <span class="hl opt">=></span> <span class="hl num">1</span> <span class="hl opt">} }</span> <span class="hl kwb">@try_modules</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> probe_category <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$category</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">@modules</span> <span class="hl opt">=</span> category2modules<span class="hl opt">(</span><span class="hl kwb">$category</span><span class="hl opt">);</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$category</span> <span class="hl kwc">eq</span> <span class="hl str">'network/isdn'</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$b</span> <span class="hl opt">=</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>driver<span class="hl opt">} =~</span> <span class="hl kwd">/ISDN:([^,]*),?([^,]*)(?:,firmware=(.*))?/</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$b</span><span class="hl opt">) {</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>driver<span class="hl opt">} =</span> <span class="hl kwb">$1</span><span class="hl opt">;</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>type<span class="hl opt">} =</span> <span class="hl kwb">$2</span><span class="hl opt">;</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>type<span class="hl opt">} =~</span> <span class="hl kwd">s/type=//</span><span class="hl opt">;</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>firmware<span class="hl opt">} =</span> <span class="hl kwb">$3</span><span class="hl opt">;</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>driver<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">"hisax"</span> <span class="hl kwc">and</span> <span class="hl kwb">$_</span><span class="hl opt">->{</span>options<span class="hl opt">} .=</span> <span class="hl str">" id=HiSax"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwb">$b</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> member<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">->{</span>driver<span class="hl opt">},</span> <span class="hl kwb">@modules</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> detect_devices<span class="hl opt">::</span>probeall<span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl slc">#-###############################################################################</span> <span class="hl slc">#- modules.conf functions</span> <span class="hl slc">#-###############################################################################</span> <span class="hl kwa">sub</span> write_preload_conf <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$conf</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 str">'scsi_hostadapter'</span> <span class="hl kwa">if</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">get_probeall</span><span class="hl opt">(</span><span class="hl str">'scsi_hostadapter'</span><span class="hl opt">);</span> <span class="hl kwc">push</span> <span class="hl kwb">@l,</span> intersection<span class="hl opt">([</span> <span class="hl str">qw(bttv cx8800 saa7134)</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 kwb">$_</span><span class="hl opt">->{</span>driver<span class="hl opt">} }</span> detect_devices<span class="hl opt">::</span>probeall<span class="hl opt">() ]);</span> <span class="hl kwc">my</span> <span class="hl kwb">@l_26</span> <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 kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$agp</span><span class="hl opt">) =</span> probe_category<span class="hl opt">(</span><span class="hl str">'various/agpgart'</span><span class="hl opt">)) {</span> <span class="hl kwc">push</span> <span class="hl kwb">@l_26, $agp</span><span class="hl opt">->{</span>driver<span class="hl opt">};</span> <span class="hl opt">}</span> append_to_modules_loaded_at_startup<span class="hl opt">(</span><span class="hl str">"$::prefix/etc/modules"</span><span class="hl opt">,</span> <span class="hl kwb">@l</span><span class="hl opt">);</span> append_to_modules_loaded_at_startup<span class="hl opt">(</span><span class="hl str">"$::prefix/etc/modprobe.preload"</span><span class="hl opt">,</span> <span class="hl kwb">@l_26</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> append_to_modules_loaded_at_startup <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$file, @l</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">join</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">'^\s*'</span> <span class="hl opt">.</span> <span class="hl kwb">$_</span> <span class="hl opt">.</span> <span class="hl str">'\s*$'</span> <span class="hl opt">}</span> <span class="hl kwb">@l</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">"to put in</span> <span class="hl ipl">$file</span> <span class="hl str">"</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">@l</span><span class="hl opt">));</span> substInFile <span class="hl opt">{</span> <span class="hl kwb">$_</span> <span class="hl opt">=</span> <span class="hl str">''</span> <span class="hl kwa">if</span> <span class="hl kwb">$l</span> <span class="hl opt">&&</span> <span class="hl kwd">/$l/</span><span class="hl opt">;</span> <span class="hl kwb">$_</span> <span class="hl opt">.=</span> <span class="hl kwc">join</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">"</span><span class="hl ipl">$_\n</span><span class="hl str">"</span> <span class="hl opt">}</span> <span class="hl kwb">@l</span> <span class="hl kwa">if</span> <span class="hl kwc">eof</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwb">$file</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl slc">#-###############################################################################</span> <span class="hl slc">#- internal functions</span> <span class="hl slc">#-###############################################################################</span> <span class="hl kwa">sub</span> loaded_modules<span class="hl opt">() {</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwd">/(\S+)/</span> <span class="hl opt">}</span> cat_<span class="hl opt">(</span><span class="hl str">"/proc/modules"</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> remove_loaded_modules <span class="hl opt">{</span> <span class="hl kwc">my</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> difference2<span class="hl opt">([</span> uniq<span class="hl opt">(</span><span class="hl kwb">@l</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">$s</span> <span class="hl opt">=</span> <span class="hl kwb">$_</span><span class="hl opt">;</span> <span class="hl kwb">$s</span> <span class="hl opt">=~</span> <span class="hl kwd">s/_/-/g</span><span class="hl opt">;</span> <span class="hl kwb">$s, $_</span> <span class="hl opt">}</span> loaded_modules<span class="hl opt">() ])</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> read_already_loaded <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$conf</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> when_load<span class="hl opt">(</span><span class="hl kwb">$conf, $_</span><span class="hl opt">)</span> <span class="hl kwa">foreach</span> <span class="hl kwc">reverse</span> loaded_modules<span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl kwc">my</span> <span class="hl kwb">$module_extension</span> <span class="hl opt">=</span> c<span class="hl opt">::</span>kernel_version<span class="hl opt">() =~</span> <span class="hl kwd">/^\Q2.4/</span> ? <span class="hl str">'o'</span> <span class="hl opt">:</span> <span class="hl str">'ko'</span><span class="hl opt">;</span> <span class="hl kwa">sub</span> name2file <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$name</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl str">"</span><span class="hl ipl">$name</span><span class="hl str">.</span><span class="hl ipl">$module_extension</span><span class="hl str">"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> when_load <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$conf, $name</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">$category</span> <span class="hl opt">=</span> module2category<span class="hl opt">(</span><span class="hl kwb">$name</span><span class="hl opt">)) {</span> when_load_category<span class="hl opt">(</span><span class="hl kwb">$conf, $name, $category</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">my</span> <span class="hl kwb">$above</span> <span class="hl opt">=</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">get_above</span><span class="hl opt">(</span><span class="hl kwb">$name</span><span class="hl opt">)) {</span> load<span class="hl opt">(</span><span class="hl kwb">$above</span><span class="hl opt">);</span> <span class="hl slc">#- eg: for snd-pcm-oss set by set_sound_slot()</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> when_load_category <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$conf, $name, $category</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">$category</span> <span class="hl opt">=~</span> m<span class="hl opt">,</span>disk<span class="hl opt">/(</span>scsi<span class="hl opt">|</span>hardware_raid<span class="hl opt">|</span>usb<span class="hl opt">|</span>firewire<span class="hl opt">),) {</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">add_probeall</span><span class="hl opt">(</span><span class="hl str">'scsi_hostadapter'</span><span class="hl opt">,</span> <span class="hl kwb">$name</span><span class="hl opt">);</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> load<span class="hl opt">(</span><span class="hl str">'sd_mod'</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">$category</span> <span class="hl kwc">eq</span> <span class="hl str">'bus/usb'</span><span class="hl opt">) {</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">add_probeall</span><span class="hl opt">(</span><span class="hl str">'usb-interface'</span><span class="hl opt">,</span> <span class="hl kwb">$name</span><span class="hl opt">);</span> <span class="hl opt">-</span>f <span class="hl str">'/proc/bus/usb/devices'</span> <span class="hl kwc">or eval</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> fs<span class="hl opt">;</span> fs<span class="hl opt">::</span>mount<span class="hl opt">(</span><span class="hl str">'none'</span><span class="hl opt">,</span> <span class="hl str">'/proc/bus/usb'</span><span class="hl opt">,</span> <span class="hl str">'usbdevfs'</span><span class="hl opt">);</span> <span class="hl slc">#- ensure keyboard is working, the kernel must do the job the BIOS was doing</span> <span class="hl kwc">sleep</span> <span class="hl num">4</span><span class="hl opt">;</span> load<span class="hl opt">(</span><span class="hl str">"usbkbd"</span><span class="hl opt">,</span> <span class="hl str">"keybdev"</span><span class="hl opt">)</span> <span class="hl kwa">if</span> detect_devices<span class="hl opt">::</span>usbKeyboards<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">$category</span> <span class="hl kwc">eq</span> <span class="hl str">'bus/firewire'</span><span class="hl opt">) {</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">set_alias</span><span class="hl opt">(</span><span class="hl str">'ieee1394-controller'</span><span class="hl opt">,</span> <span class="hl kwb">$name</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">$category</span> <span class="hl opt">=~</span> <span class="hl kwd">/sound/</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$sound_alias</span> <span class="hl opt">=</span> find <span class="hl opt">{</span> <span class="hl kwd">/^sound-slot-[0-9]+$/</span> <span class="hl opt">&&</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">get_alias</span><span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">)</span> <span class="hl kwc">eq</span> <span class="hl kwb">$name</span> <span class="hl opt">}</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">modules</span><span class="hl opt">;</span> <span class="hl kwb">$sound_alias</span> <span class="hl opt">||=</span> <span class="hl str">'sound-slot-0'</span><span class="hl opt">;</span> <span class="hl kwb">$conf</span><span class="hl opt">-></span><span class="hl kwd">set_sound_slot</span><span class="hl opt">(</span><span class="hl kwb">$sound_alias, $name</span><span class="hl opt">);</span> <span class="hl opt">}</span> <span class="hl opt">}</span> <span class="hl slc">#-###############################################################################</span> <span class="hl slc">#- isInstall functions</span> <span class="hl slc">#-###############################################################################</span> <span class="hl kwa">sub</span> cz_file<span class="hl opt">() {</span> <span class="hl str">"/lib/modules"</span> <span class="hl opt">. (</span>arch<span class="hl opt">()</span> <span class="hl kwc">eq</span> <span class="hl str">'sparc64'</span> <span class="hl opt">&&</span> <span class="hl str">"64"</span><span class="hl opt">) .</span> <span class="hl str">".cz-"</span> <span class="hl opt">.</span> c<span class="hl opt">::</span>kernel_version<span class="hl opt">();</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> extract_modules <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$dir, @modules</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">$cz</span> <span class="hl opt">=</span> cz_file<span class="hl opt">();</span> <span class="hl kwa">if</span> <span class="hl opt">(!-</span>e <span class="hl kwb">$cz</span><span class="hl opt">) {</span> <span class="hl kwc">unlink</span> <span class="hl kwb">$_</span> <span class="hl kwa">foreach</span> glob_<span class="hl opt">(</span><span class="hl str">"/lib/modules*.cz*"</span><span class="hl opt">);</span> <span class="hl kwa">require</span> install_any<span class="hl opt">;</span> install_any<span class="hl opt">::</span>getAndSaveFile<span class="hl opt">(</span><span class="hl str">"install/stage2/live</span><span class="hl ipl">$cz</span><span class="hl str">"</span><span class="hl opt">,</span> <span class="hl kwb">$cz</span><span class="hl opt">)</span> <span class="hl kwc">or die</span> <span class="hl str">"failed to get modules</span> <span class="hl ipl">$cz</span><span class="hl str">:</span> <span class="hl ipl">$!</span><span class="hl str">"</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwc">eval</span> <span class="hl opt">{</span> <span class="hl kwa">require</span> packdrake<span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$packer</span> <span class="hl opt">=</span> new packdrake<span class="hl opt">(</span><span class="hl kwb">$cz,</span> quiet <span class="hl opt">=></span> <span class="hl num">1</span><span class="hl opt">);</span> <span class="hl kwb">$packer</span><span class="hl opt">-></span><span class="hl kwd">extract_archive</span><span class="hl opt">(</span><span class="hl kwb">$dir,</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> name2file<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwb">@modules</span><span class="hl opt">);</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$dir</span> <span class="hl opt">.</span> <span class="hl str">'/'</span> <span class="hl opt">.</span> name2file<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwb">@modules</span><span class="hl opt">;</span> <span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> load_raw_install <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$l, $options</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> extract_modules<span class="hl opt">(</span><span class="hl str">'/tmp'</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">@failed</span> <span class="hl opt">=</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">$m</span> <span class="hl opt">=</span> <span class="hl str">'/tmp/'</span> <span class="hl opt">.</span> name2file<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>e <span class="hl kwb">$m</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl kwb">$stdout</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$rc</span> <span class="hl opt">=</span> run_program<span class="hl opt">::</span>run<span class="hl opt">([</span><span class="hl str">"/usr/bin/insmod_"</span><span class="hl opt">,</span> <span class="hl str">"insmod"</span><span class="hl opt">],</span> <span class="hl str">'2>'</span><span class="hl opt">,</span> \<span class="hl kwb">$stdout, $m,</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">$options</span><span class="hl opt">->{</span><span class="hl kwb">$_</span><span class="hl opt">}));</span> <span class="hl kwc">log</span><span class="hl opt">::</span>l<span class="hl opt">(</span>chomp_<span class="hl opt">(</span><span class="hl kwb">$stdout</span><span class="hl opt">))</span> <span class="hl kwa">if</span> <span class="hl kwb">$stdout</span><span class="hl opt">;</span> <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$rc</span><span class="hl opt">) {</span> <span class="hl kwc">unlink</span> <span class="hl kwb">$m</span><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 str">'error'</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">"missing module</span> <span class="hl ipl">$_</span><span class="hl str">"</span><span class="hl opt">);</span> <span class="hl str">'error'</span><span class="hl opt">;</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 kwc">die</span> <span class="hl str">"insmod'ing module "</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">@failed</span><span class="hl opt">) .</span> <span class="hl str">" failed"</span> <span class="hl kwa">if</span> <span class="hl kwb">@failed</span><span class="hl opt">;</span> <span class="hl opt">}</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-03-08 21:37:51 +0000</div> </div> <!-- id=cgit --> </body> </html>