📄 console.c
字号:
<a name=L363 href="source/kernel/chr_drv/console.c?v=0.97#L363">363</a> {<a name=L364 href="source/kernel/chr_drv/console.c?v=0.97#L364">364</a> if (b > <a href="ident?v=0.97;i=video_num_lines">video_num_lines</a> || t >= b)<a name=L365 href="source/kernel/chr_drv/console.c?v=0.97#L365">365</a> return;<a name=L366 href="source/kernel/chr_drv/console.c?v=0.97#L366">366</a> __asm__(<i>"std\n\t"</i><a name=L367 href="source/kernel/chr_drv/console.c?v=0.97#L367">367</a> <i>"rep\n\t"</i><a name=L368 href="source/kernel/chr_drv/console.c?v=0.97#L368">368</a> <i>"movsl\n\t"</i><a name=L369 href="source/kernel/chr_drv/console.c?v=0.97#L369">369</a> <i>"addl $2,%%edi\n\t"</i> <b><i>/* %edi has been decremented by 4 */</i></b><a name=L370 href="source/kernel/chr_drv/console.c?v=0.97#L370">370</a> <i>"movl _video_num_columns,%%ecx\n\t"</i><a name=L371 href="source/kernel/chr_drv/console.c?v=0.97#L371">371</a> <i>"rep\n\t"</i><a name=L372 href="source/kernel/chr_drv/console.c?v=0.97#L372">372</a> <i>"stosw\n\t"</i><a name=L373 href="source/kernel/chr_drv/console.c?v=0.97#L373">373</a> <i>"cld"</i><a name=L374 href="source/kernel/chr_drv/console.c?v=0.97#L374">374</a> ::<i>"a"</i> (<a href="ident?v=0.97;i=video_erase_char">video_erase_char</a>),<a name=L375 href="source/kernel/chr_drv/console.c?v=0.97#L375">375</a> <i>"c"</i> ((b-t-1)*<a href="ident?v=0.97;i=video_num_columns">video_num_columns</a>>>1),<a name=L376 href="source/kernel/chr_drv/console.c?v=0.97#L376">376</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>*b-4),<a name=L377 href="source/kernel/chr_drv/console.c?v=0.97#L377">377</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>*(b-1)-4)<a name=L378 href="source/kernel/chr_drv/console.c?v=0.97#L378">378</a> :<i>"ax"</i>,<i>"cx"</i>,<i>"di"</i>,<i>"si"</i>);<a name=L379 href="source/kernel/chr_drv/console.c?v=0.97#L379">379</a> }<a name=L380 href="source/kernel/chr_drv/console.c?v=0.97#L380">380</a> <a name=L381 href="source/kernel/chr_drv/console.c?v=0.97#L381">381</a> static void <a href="ident?v=0.97;i=lf">lf</a>(int currcons)<a name=L382 href="source/kernel/chr_drv/console.c?v=0.97#L382">382</a> {<a name=L383 href="source/kernel/chr_drv/console.c?v=0.97#L383">383</a> if (<a href="ident?v=0.97;i=y">y</a>+1<<a href="ident?v=0.97;i=bottom">bottom</a>) {<a name=L384 href="source/kernel/chr_drv/console.c?v=0.97#L384">384</a> <a href="ident?v=0.97;i=y">y</a>++;<a name=L385 href="source/kernel/chr_drv/console.c?v=0.97#L385">385</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=L386 href="source/kernel/chr_drv/console.c?v=0.97#L386">386</a> return;<a name=L387 href="source/kernel/chr_drv/console.c?v=0.97#L387">387</a> } else <a name=L388 href="source/kernel/chr_drv/console.c?v=0.97#L388">388</a> <a href="ident?v=0.97;i=scrup">scrup</a>(currcons,<a href="ident?v=0.97;i=top">top</a>,<a href="ident?v=0.97;i=bottom">bottom</a>);<a name=L389 href="source/kernel/chr_drv/console.c?v=0.97#L389">389</a> <a href="ident?v=0.97;i=need_wrap">need_wrap</a> = 0;<a name=L390 href="source/kernel/chr_drv/console.c?v=0.97#L390">390</a> }<a name=L391 href="source/kernel/chr_drv/console.c?v=0.97#L391">391</a> <a name=L392 href="source/kernel/chr_drv/console.c?v=0.97#L392">392</a> static void <a href="ident?v=0.97;i=ri">ri</a>(int currcons)<a name=L393 href="source/kernel/chr_drv/console.c?v=0.97#L393">393</a> {<a name=L394 href="source/kernel/chr_drv/console.c?v=0.97#L394">394</a> if (<a href="ident?v=0.97;i=y">y</a>><a href="ident?v=0.97;i=top">top</a>) {<a name=L395 href="source/kernel/chr_drv/console.c?v=0.97#L395">395</a> <a href="ident?v=0.97;i=y">y</a>--;<a name=L396 href="source/kernel/chr_drv/console.c?v=0.97#L396">396</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=L397 href="source/kernel/chr_drv/console.c?v=0.97#L397">397</a> return;<a name=L398 href="source/kernel/chr_drv/console.c?v=0.97#L398">398</a> } else<a name=L399 href="source/kernel/chr_drv/console.c?v=0.97#L399">399</a> <a href="ident?v=0.97;i=scrdown">scrdown</a>(currcons,<a href="ident?v=0.97;i=top">top</a>,<a href="ident?v=0.97;i=bottom">bottom</a>);<a name=L400 href="source/kernel/chr_drv/console.c?v=0.97#L400">400</a> <a href="ident?v=0.97;i=need_wrap">need_wrap</a> = 0;<a name=L401 href="source/kernel/chr_drv/console.c?v=0.97#L401">401</a> }<a name=L402 href="source/kernel/chr_drv/console.c?v=0.97#L402">402</a> <a name=L403 href="source/kernel/chr_drv/console.c?v=0.97#L403">403</a> static inline void <a href="ident?v=0.97;i=cr">cr</a>(int currcons)<a name=L404 href="source/kernel/chr_drv/console.c?v=0.97#L404">404</a> {<a name=L405 href="source/kernel/chr_drv/console.c?v=0.97#L405">405</a> <a href="ident?v=0.97;i=pos">pos</a> -= <a href="ident?v=0.97;i=x">x</a><<1;<a name=L406 href="source/kernel/chr_drv/console.c?v=0.97#L406">406</a> <a href="ident?v=0.97;i=need_wrap">need_wrap</a> = <a href="ident?v=0.97;i=x">x</a> = 0;<a name=L407 href="source/kernel/chr_drv/console.c?v=0.97#L407">407</a> }<a name=L408 href="source/kernel/chr_drv/console.c?v=0.97#L408">408</a> <a name=L409 href="source/kernel/chr_drv/console.c?v=0.97#L409">409</a> static inline void <a href="ident?v=0.97;i=bs">bs</a>(int currcons)<a name=L410 href="source/kernel/chr_drv/console.c?v=0.97#L410">410</a> {<a name=L411 href="source/kernel/chr_drv/console.c?v=0.97#L411">411</a> if (<a href="ident?v=0.97;i=x">x</a>) {<a name=L412 href="source/kernel/chr_drv/console.c?v=0.97#L412">412</a> <a href="ident?v=0.97;i=pos">pos</a> -= 2;<a name=L413 href="source/kernel/chr_drv/console.c?v=0.97#L413">413</a> <a href="ident?v=0.97;i=x">x</a>--;<a name=L414 href="source/kernel/chr_drv/console.c?v=0.97#L414">414</a> <a href="ident?v=0.97;i=need_wrap">need_wrap</a> = 0;<a name=L415 href="source/kernel/chr_drv/console.c?v=0.97#L415">415</a> }<a name=L416 href="source/kernel/chr_drv/console.c?v=0.97#L416">416</a> }<a name=L417 href="source/kernel/chr_drv/console.c?v=0.97#L417">417</a> <a name=L418 href="source/kernel/chr_drv/console.c?v=0.97#L418">418</a> static inline void <a href="ident?v=0.97;i=del">del</a>(int currcons)<a name=L419 href="source/kernel/chr_drv/console.c?v=0.97#L419">419</a> {<a name=L420 href="source/kernel/chr_drv/console.c?v=0.97#L420">420</a> if (<a href="ident?v=0.97;i=x">x</a>) {<a name=L421 href="source/kernel/chr_drv/console.c?v=0.97#L421">421</a> <a href="ident?v=0.97;i=pos">pos</a> -= 2;<a name=L422 href="source/kernel/chr_drv/console.c?v=0.97#L422">422</a> <a href="ident?v=0.97;i=x">x</a>--;<a name=L423 href="source/kernel/chr_drv/console.c?v=0.97#L423">423</a> *(unsigned short *)<a href="ident?v=0.97;i=pos">pos</a> = <a href="ident?v=0.97;i=video_erase_char">video_erase_char</a>;<a name=L424 href="source/kernel/chr_drv/console.c?v=0.97#L424">424</a> <a href="ident?v=0.97;i=need_wrap">need_wrap</a> = 0;<a name=L425 href="source/kernel/chr_drv/console.c?v=0.97#L425">425</a> }<a name=L426 href="source/kernel/chr_drv/console.c?v=0.97#L426">426</a> }<a name=L427 href="source/kernel/chr_drv/console.c?v=0.97#L427">427</a> <a name=L428 href="source/kernel/chr_drv/console.c?v=0.97#L428">428</a> static void <a href="ident?v=0.97;i=csi_J">csi_J</a>(int currcons, int vpar)<a name=L429 href="source/kernel/chr_drv/console.c?v=0.97#L429">429</a> {<a name=L430 href="source/kernel/chr_drv/console.c?v=0.97#L430">430</a> unsigned long <a href="ident?v=0.97;i=count">count</a>;<a name=L431 href="source/kernel/chr_drv/console.c?v=0.97#L431">431</a> unsigned long start;<a name=L432 href="source/kernel/chr_drv/console.c?v=0.97#L432">432</a> <a name=L433 href="source/kernel/chr_drv/console.c?v=0.97#L433">433</a> switch (vpar) {<a name=L434 href="source/kernel/chr_drv/console.c?v=0.97#L434">434</a> case 0: <b><i>/* erase from cursor to end of display */</i></b><a name=L435 href="source/kernel/chr_drv/console.c?v=0.97#L435">435</a> <a href="ident?v=0.97;i=count">count</a> = (<a href="ident?v=0.97;i=scr_end">scr_end</a>-<a href="ident?v=0.97;i=pos">pos</a>)>>1;<a name=L436 href="source/kernel/chr_drv/console.c?v=0.97#L436">436</a> start = <a href="ident?v=0.97;i=pos">pos</a>;<a name=L437 href="source/kernel/chr_drv/console.c?v=0.97#L437">437</a> break;<a name=L438 href="source/kernel/chr_drv/console.c?v=0.97#L438">438</a> case 1: <b><i>/* erase from start to cursor */</i></b><a name=L439 href="source/kernel/chr_drv/console.c?v=0.97#L439">439</a> <a href="ident?v=0.97;i=count">count</a> = ((<a href="ident?v=0.97;i=pos">pos</a>-<a href="ident?v=0.97;i=origin">origin</a>)>>1)+1;<a name=L440 href="source/kernel/chr_drv/console.c?v=0.97#L440">440</a> start = <a href="ident?v=0.97;i=origin">origin</a>;<a name=L441 href="source/kernel/chr_drv/console.c?v=0.97#L441">441</a> break;<a name=L442 href="source/kernel/chr_drv/console.c?v=0.97#L442">442</a> case 2: <b><i>/* erase whole display */</i></b><a name=L443 href="source/kernel/chr_drv/console.c?v=0.97#L443">443</a> <a href="ident?v=0.97;i=count">count</a> = <a href="ident?v=0.97;i=video_num_columns">video_num_columns</a> * <a href="ident?v=0.97;i=video_num_lines">video_num_lines</a>;<a name=L444 href="source/kernel/chr_drv/console.c?v=0.97#L444">444</a> start = <a href="ident?v=0.97;i=origin">origin</a>;<a name=L445 href="source/kernel/chr_drv/console.c?v=0.97#L445">445</a> break;<a name=L446 href="source/kernel/chr_drv/console.c?v=0.97#L446">446</a> default:<a name=L447 href="source/kernel/chr_drv/console.c?v=0.97#L447">447</a> return;<a name=L448 href="source/kernel/chr_drv/console.c?v=0.97#L448">448</a> }<a name=L449 href="source/kernel/chr_drv/console.c?v=0.97#L449">449</a> __asm__(<i>"cld\n\t"</i><a name=L450 href="source/kernel/chr_drv/console.c?v=0.97#L450">450</a> <i>"rep\n\t"</i><a name=L451 href="source/kernel/chr_drv/console.c?v=0.97#L451">451</a> <i>"stosw\n\t"</i><a name=L452 href="source/kernel/chr_drv/console.c?v=0.97#L452">452</a> ::<i>"c"</i> (<a href="ident?v=0.97;i=count">count</a>),<a name=L453 href="source/kernel/chr_drv/console.c?v=0.97#L453">453</a> <i>"D"</i> (start),<i>"a"</i> (<a href="ident?v=0.97;i=video_erase_char">video_erase_char</a>)<a name=L454 href="source/kernel/chr_drv/console.c?v=0.97#L454">454</a> :<i>"cx"</i>,<i>"di"</i>);<a name=L455 href="source/kernel/chr_drv/console.c?v=0.97#L455">455</a> <a href="ident?v=0.97;i=need_wrap">need_wrap</a> = 0;<a name=L456 href="source/kernel/chr_drv/console.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -