⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 console.c

📁 linux字符驱动源码
💻 C
📖 第 1 页 / 共 5 页
字号:
<a name=L265 href="source/kernel/chr_drv/console.c?v=0.97#L265">265</a> <b><i> * bounds, the cursor is placed at the nearest margin.</i></b><a name=L266 href="source/kernel/chr_drv/console.c?v=0.97#L266">266</a> <b><i> */</i></b><a name=L267 href="source/kernel/chr_drv/console.c?v=0.97#L267">267</a> static void <a href="ident?v=0.97;i=gotoxy">gotoxy</a>(int currcons, int new_x, int new_y)<a name=L268 href="source/kernel/chr_drv/console.c?v=0.97#L268">268</a> {<a name=L269 href="source/kernel/chr_drv/console.c?v=0.97#L269">269</a>         int max_y;<a name=L270 href="source/kernel/chr_drv/console.c?v=0.97#L270">270</a> <a name=L271 href="source/kernel/chr_drv/console.c?v=0.97#L271">271</a>         if (new_x &lt; 0)<a name=L272 href="source/kernel/chr_drv/console.c?v=0.97#L272">272</a>                 <a href="ident?v=0.97;i=x">x</a> = 0;<a name=L273 href="source/kernel/chr_drv/console.c?v=0.97#L273">273</a>         else<a name=L274 href="source/kernel/chr_drv/console.c?v=0.97#L274">274</a>                 if (new_x &gt;= <a href="ident?v=0.97;i=video_num_columns">video_num_columns</a>)<a name=L275 href="source/kernel/chr_drv/console.c?v=0.97#L275">275</a>                         <a href="ident?v=0.97;i=x">x</a> = <a href="ident?v=0.97;i=video_num_columns">video_num_columns</a> - 1;<a name=L276 href="source/kernel/chr_drv/console.c?v=0.97#L276">276</a>                 else<a name=L277 href="source/kernel/chr_drv/console.c?v=0.97#L277">277</a>                         <a href="ident?v=0.97;i=x">x</a> = new_x;<a name=L278 href="source/kernel/chr_drv/console.c?v=0.97#L278">278</a>         if (<a href="ident?v=0.97;i=decom">decom</a>) {<a name=L279 href="source/kernel/chr_drv/console.c?v=0.97#L279">279</a>                 new_y += <a href="ident?v=0.97;i=top">top</a>;<a name=L280 href="source/kernel/chr_drv/console.c?v=0.97#L280">280</a>                 max_y = <a href="ident?v=0.97;i=bottom">bottom</a>;<a name=L281 href="source/kernel/chr_drv/console.c?v=0.97#L281">281</a>         } else<a name=L282 href="source/kernel/chr_drv/console.c?v=0.97#L282">282</a>                 max_y = <a href="ident?v=0.97;i=video_num_lines">video_num_lines</a>;<a name=L283 href="source/kernel/chr_drv/console.c?v=0.97#L283">283</a>         if (new_y &lt; 0)<a name=L284 href="source/kernel/chr_drv/console.c?v=0.97#L284">284</a>                 <a href="ident?v=0.97;i=y">y</a> = 0;<a name=L285 href="source/kernel/chr_drv/console.c?v=0.97#L285">285</a>         else<a name=L286 href="source/kernel/chr_drv/console.c?v=0.97#L286">286</a>                 if (new_y &gt;= max_y)<a name=L287 href="source/kernel/chr_drv/console.c?v=0.97#L287">287</a>                         <a href="ident?v=0.97;i=y">y</a> = max_y - 1;<a name=L288 href="source/kernel/chr_drv/console.c?v=0.97#L288">288</a>                 else<a name=L289 href="source/kernel/chr_drv/console.c?v=0.97#L289">289</a>                         <a href="ident?v=0.97;i=y">y</a> = new_y;<a name=L290 href="source/kernel/chr_drv/console.c?v=0.97#L290">290</a>         <a href="ident?v=0.97;i=pos">pos</a> = <a href="ident?v=0.97;i=origin">origin</a> + <a href="ident?v=0.97;i=y">y</a>*<a href="ident?v=0.97;i=video_size_row">video_size_row</a> + (<a href="ident?v=0.97;i=x">x</a>&lt;&lt;1);<a name=L291 href="source/kernel/chr_drv/console.c?v=0.97#L291">291</a>         <a href="ident?v=0.97;i=need_wrap">need_wrap</a> = 0;<a name=L292 href="source/kernel/chr_drv/console.c?v=0.97#L292">292</a> }<a name=L293 href="source/kernel/chr_drv/console.c?v=0.97#L293">293</a> <a name=L294 href="source/kernel/chr_drv/console.c?v=0.97#L294">294</a> static void <a href="ident?v=0.97;i=set_origin">set_origin</a>(int currcons)<a name=L295 href="source/kernel/chr_drv/console.c?v=0.97#L295">295</a> {<a name=L296 href="source/kernel/chr_drv/console.c?v=0.97#L296">296</a>         if (<a href="ident?v=0.97;i=video_type">video_type</a> != <a href="ident?v=0.97;i=VIDEO_TYPE_EGAC">VIDEO_TYPE_EGAC</a> &amp;&amp; <a href="ident?v=0.97;i=video_type">video_type</a> != <a href="ident?v=0.97;i=VIDEO_TYPE_EGAM">VIDEO_TYPE_EGAM</a>)<a name=L297 href="source/kernel/chr_drv/console.c?v=0.97#L297">297</a>                 return;<a name=L298 href="source/kernel/chr_drv/console.c?v=0.97#L298">298</a>         if (currcons != <a href="ident?v=0.97;i=fg_console">fg_console</a> || <a href="ident?v=0.97;i=console_blanked">console_blanked</a> || <a href="ident?v=0.97;i=vtmode">vtmode</a> == <a href="ident?v=0.97;i=KD_GRAPHICS">KD_GRAPHICS</a>)<a name=L299 href="source/kernel/chr_drv/console.c?v=0.97#L299">299</a>                 return;<a name=L300 href="source/kernel/chr_drv/console.c?v=0.97#L300">300</a>         <a href="ident?v=0.97;i=cli">cli</a>();<a name=L301 href="source/kernel/chr_drv/console.c?v=0.97#L301">301</a>         <a href="ident?v=0.97;i=outb_p">outb_p</a>(12, <a href="ident?v=0.97;i=video_port_reg">video_port_reg</a>);<a name=L302 href="source/kernel/chr_drv/console.c?v=0.97#L302">302</a>         <a href="ident?v=0.97;i=outb_p">outb_p</a>(0xff&amp;((<a href="ident?v=0.97;i=origin">origin</a>-<a href="ident?v=0.97;i=video_mem_base">video_mem_base</a>)&gt;&gt;9), <a href="ident?v=0.97;i=video_port_val">video_port_val</a>);<a name=L303 href="source/kernel/chr_drv/console.c?v=0.97#L303">303</a>         <a href="ident?v=0.97;i=outb_p">outb_p</a>(13, <a href="ident?v=0.97;i=video_port_reg">video_port_reg</a>);<a name=L304 href="source/kernel/chr_drv/console.c?v=0.97#L304">304</a>         <a href="ident?v=0.97;i=outb_p">outb_p</a>(0xff&amp;((<a href="ident?v=0.97;i=origin">origin</a>-<a href="ident?v=0.97;i=video_mem_base">video_mem_base</a>)&gt;&gt;1), <a href="ident?v=0.97;i=video_port_val">video_port_val</a>);<a name=L305 href="source/kernel/chr_drv/console.c?v=0.97#L305">305</a>         <a href="ident?v=0.97;i=sti">sti</a>();<a name=L306 href="source/kernel/chr_drv/console.c?v=0.97#L306">306</a> }<a name=L307 href="source/kernel/chr_drv/console.c?v=0.97#L307">307</a> <a name=L308 href="source/kernel/chr_drv/console.c?v=0.97#L308">308</a> static void <a href="ident?v=0.97;i=scrup">scrup</a>(int currcons, unsigned int t, unsigned int b)<a name=L309 href="source/kernel/chr_drv/console.c?v=0.97#L309">309</a> {<a name=L310 href="source/kernel/chr_drv/console.c?v=0.97#L310">310</a>         int hardscroll = 1;<a name=L311 href="source/kernel/chr_drv/console.c?v=0.97#L311">311</a> <a name=L312 href="source/kernel/chr_drv/console.c?v=0.97#L312">312</a>         if (b &gt; <a href="ident?v=0.97;i=video_num_lines">video_num_lines</a> || t &gt;= b)<a name=L313 href="source/kernel/chr_drv/console.c?v=0.97#L313">313</a>                 return;<a name=L314 href="source/kernel/chr_drv/console.c?v=0.97#L314">314</a>         if (<a href="ident?v=0.97;i=video_type">video_type</a> != <a href="ident?v=0.97;i=VIDEO_TYPE_EGAC">VIDEO_TYPE_EGAC</a> &amp;&amp; <a href="ident?v=0.97;i=video_type">video_type</a> != <a href="ident?v=0.97;i=VIDEO_TYPE_EGAM">VIDEO_TYPE_EGAM</a>)<a name=L315 href="source/kernel/chr_drv/console.c?v=0.97#L315">315</a>                 hardscroll = 0;<a name=L316 href="source/kernel/chr_drv/console.c?v=0.97#L316">316</a>         else if (t || b != <a href="ident?v=0.97;i=video_num_lines">video_num_lines</a>)<a name=L317 href="source/kernel/chr_drv/console.c?v=0.97#L317">317</a>                 hardscroll = 0;<a name=L318 href="source/kernel/chr_drv/console.c?v=0.97#L318">318</a>         if (hardscroll) {<a name=L319 href="source/kernel/chr_drv/console.c?v=0.97#L319">319</a>                 <a href="ident?v=0.97;i=origin">origin</a> += <a href="ident?v=0.97;i=video_size_row">video_size_row</a>;<a name=L320 href="source/kernel/chr_drv/console.c?v=0.97#L320">320</a>                 <a href="ident?v=0.97;i=pos">pos</a> += <a href="ident?v=0.97;i=video_size_row">video_size_row</a>;<a name=L321 href="source/kernel/chr_drv/console.c?v=0.97#L321">321</a>                 <a href="ident?v=0.97;i=scr_end">scr_end</a> += <a href="ident?v=0.97;i=video_size_row">video_size_row</a>;<a name=L322 href="source/kernel/chr_drv/console.c?v=0.97#L322">322</a>                 if (<a href="ident?v=0.97;i=scr_end">scr_end</a> &gt; <a href="ident?v=0.97;i=video_mem_end">video_mem_end</a>) {<a name=L323 href="source/kernel/chr_drv/console.c?v=0.97#L323">323</a>                         __asm__(<i>"cld\n\t"</i><a name=L324 href="source/kernel/chr_drv/console.c?v=0.97#L324">324</a>                                 <i>"rep\n\t"</i><a name=L325 href="source/kernel/chr_drv/console.c?v=0.97#L325">325</a>                                 <i>"movsl\n\t"</i><a name=L326 href="source/kernel/chr_drv/console.c?v=0.97#L326">326</a>                                 <i>"movl _video_num_columns,%1\n\t"</i><a name=L327 href="source/kernel/chr_drv/console.c?v=0.97#L327">327</a>                                 <i>"rep\n\t"</i><a name=L328 href="source/kernel/chr_drv/console.c?v=0.97#L328">328</a>                                 <i>"stosw"</i><a name=L329 href="source/kernel/chr_drv/console.c?v=0.97#L329">329</a>                                 ::<i>"a"</i> (<a href="ident?v=0.97;i=video_erase_char">video_erase_char</a>),<a name=L330 href="source/kernel/chr_drv/console.c?v=0.97#L330">330</a>                                 <i>"c"</i> ((<a href="ident?v=0.97;i=video_num_lines">video_num_lines</a>-1)*<a href="ident?v=0.97;i=video_num_columns">video_num_columns</a>&gt;&gt;1),<a name=L331 href="source/kernel/chr_drv/console.c?v=0.97#L331">331</a>                                 <i>"D"</i> (<a href="ident?v=0.97;i=video_mem_start">video_mem_start</a>),<a name=L332 href="source/kernel/chr_drv/console.c?v=0.97#L332">332</a>                                 <i>"S"</i> (<a href="ident?v=0.97;i=origin">origin</a>)<a name=L333 href="source/kernel/chr_drv/console.c?v=0.97#L333">333</a>                                 :<i>"cx"</i>,<i>"di"</i>,<i>"si"</i>);<a name=L334 href="source/kernel/chr_drv/console.c?v=0.97#L334">334</a>                         <a href="ident?v=0.97;i=scr_end">scr_end</a> -= <a href="ident?v=0.97;i=origin">origin</a>-<a href="ident?v=0.97;i=video_mem_start">video_mem_start</a>;<a name=L335 href="source/kernel/chr_drv/console.c?v=0.97#L335">335</a>                         <a href="ident?v=0.97;i=pos">pos</a> -= <a href="ident?v=0.97;i=origin">origin</a>-<a href="ident?v=0.97;i=video_mem_start">video_mem_start</a>;<a name=L336 href="source/kernel/chr_drv/console.c?v=0.97#L336">336</a>                         <a href="ident?v=0.97;i=origin">origin</a> = <a href="ident?v=0.97;i=video_mem_start">video_mem_start</a>;<a name=L337 href="source/kernel/chr_drv/console.c?v=0.97#L337">337</a>                 } else {<a name=L338 href="source/kernel/chr_drv/console.c?v=0.97#L338">338</a>                         __asm__(<i>"cld\n\t"</i><a name=L339 href="source/kernel/chr_drv/console.c?v=0.97#L339">339</a>                                 <i>"rep\n\t"</i><a name=L340 href="source/kernel/chr_drv/console.c?v=0.97#L340">340</a>                                 <i>"stosw"</i><a name=L341 href="source/kernel/chr_drv/console.c?v=0.97#L341">341</a>                                 ::<i>"a"</i> (<a href="ident?v=0.97;i=video_erase_char">video_erase_char</a>),<a name=L342 href="source/kernel/chr_drv/console.c?v=0.97#L342">342</a>                                 <i>"c"</i> (<a href="ident?v=0.97;i=video_num_columns">video_num_columns</a>),<a name=L343 href="source/kernel/chr_drv/console.c?v=0.97#L343">343</a>                                 <i>"D"</i> (<a href="ident?v=0.97;i=scr_end">scr_end</a>-<a href="ident?v=0.97;i=video_size_row">video_size_row</a>)<a name=L344 href="source/kernel/chr_drv/console.c?v=0.97#L344">344</a>                                 :<i>"cx"</i>,<i>"di"</i>);<a name=L345 href="source/kernel/chr_drv/console.c?v=0.97#L345">345</a>                 }<a name=L346 href="source/kernel/chr_drv/console.c?v=0.97#L346">346</a>                 <a href="ident?v=0.97;i=set_origin">set_origin</a>(currcons);<a name=L347 href="source/kernel/chr_drv/console.c?v=0.97#L347">347</a>         } else {<a name=L348 href="source/kernel/chr_drv/console.c?v=0.97#L348">348</a>                 __asm__(<i>"cld\n\t"</i><a name=L349 href="source/kernel/chr_drv/console.c?v=0.97#L349">349</a>                         <i>"rep\n\t"</i><a name=L350 href="source/kernel/chr_drv/console.c?v=0.97#L350">350</a>                         <i>"movsl\n\t"</i><a name=L351 href="source/kernel/chr_drv/console.c?v=0.97#L351">351</a>                         <i>"movl _video_num_columns,%%ecx\n\t"</i><a name=L352 href="source/kernel/chr_drv/console.c?v=0.97#L352">352</a>                         <i>"rep\n\t"</i><a name=L353 href="source/kernel/chr_drv/console.c?v=0.97#L353">353</a>                         <i>"stosw"</i><a name=L354 href="source/kernel/chr_drv/console.c?v=0.97#L354">354</a>                         ::<i>"a"</i> (<a href="ident?v=0.97;i=video_erase_char">video_erase_char</a>),<a name=L355 href="source/kernel/chr_drv/console.c?v=0.97#L355">355</a>                         <i>"c"</i> ((b-t-1)*<a href="ident?v=0.97;i=video_num_columns">video_num_columns</a>&gt;&gt;1),<a name=L356 href="source/kernel/chr_drv/console.c?v=0.97#L356">356</a>                         <i>"D"</i> (<a href="ident?v=0.97;i=origin">origin</a>+<a href="ident?v=0.97;i=video_size_row">video_size_row</a>*t),<a name=L357 href="source/kernel/chr_drv/console.c?v=0.97#L357">357</a>                         <i>"S"</i> (<a href="ident?v=0.97;i=origin">origin</a>+<a href="ident?v=0.97;i=video_size_row">video_size_row</a>*(t+1))<a name=L358 href="source/kernel/chr_drv/console.c?v=0.97#L358">358</a>                         :<i>"cx"</i>,<i>"di"</i>,<i>"si"</i>);<a name=L359 href="source/kernel/chr_drv/console.c?v=0.97#L359">359</a>         }<a name=L360 href="source/kernel/chr_drv/console.c?v=0.97#L360">360</a> }<a name=L361 href="source/kernel/chr_drv/console.c?v=0.97#L361">361</a> <a name=L362 href="source/kernel/chr_drv/console.c?v=0.97#L362">362</a> static void <a href="ident?v=0.97;i=scrdown">scrdown</a>(int currcons, unsigned int t, unsigned int b)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -