📄 console.c
字号:
<a name=L303 href="source/kernel/chr_drv/console.c#L303">303</a> for (i=0;i<=<a href="ident?i=npar">npar</a>;i++)<a name=L304 href="source/kernel/chr_drv/console.c#L304">304</a> switch (<a href="ident?i=par">par</a>[i]) {<a name=L305 href="source/kernel/chr_drv/console.c#L305">305</a> case 0:<a href="ident?i=attr">attr</a>=0x07;break;<a name=L306 href="source/kernel/chr_drv/console.c#L306">306</a> case 1:<a href="ident?i=attr">attr</a>=0x0f;break;<a name=L307 href="source/kernel/chr_drv/console.c#L307">307</a> case 4:<a href="ident?i=attr">attr</a>=0x0f;break;<a name=L308 href="source/kernel/chr_drv/console.c#L308">308</a> case 7:<a href="ident?i=attr">attr</a>=0x70;break;<a name=L309 href="source/kernel/chr_drv/console.c#L309">309</a> case 27:<a href="ident?i=attr">attr</a>=0x07;break;<a name=L310 href="source/kernel/chr_drv/console.c#L310">310</a> }<a name=L311 href="source/kernel/chr_drv/console.c#L311">311</a> }<a name=L312 href="source/kernel/chr_drv/console.c#L312">312</a> <a name=L313 href="source/kernel/chr_drv/console.c#L313">313</a> static inline void <a href="ident?i=set_cursor">set_cursor</a>(void)<a name=L314 href="source/kernel/chr_drv/console.c#L314">314</a> {<a name=L315 href="source/kernel/chr_drv/console.c#L315">315</a> <a href="ident?i=cli">cli</a>();<a name=L316 href="source/kernel/chr_drv/console.c#L316">316</a> <a href="ident?i=outb_p">outb_p</a>(14, <a href="ident?i=video_port_reg">video_port_reg</a>);<a name=L317 href="source/kernel/chr_drv/console.c#L317">317</a> <a href="ident?i=outb_p">outb_p</a>(0xff&((<a href="ident?i=pos">pos</a>-<a href="ident?i=video_mem_start">video_mem_start</a>)>>9), <a href="ident?i=video_port_val">video_port_val</a>);<a name=L318 href="source/kernel/chr_drv/console.c#L318">318</a> <a href="ident?i=outb_p">outb_p</a>(15, <a href="ident?i=video_port_reg">video_port_reg</a>);<a name=L319 href="source/kernel/chr_drv/console.c#L319">319</a> <a href="ident?i=outb_p">outb_p</a>(0xff&((<a href="ident?i=pos">pos</a>-<a href="ident?i=video_mem_start">video_mem_start</a>)>>1), <a href="ident?i=video_port_val">video_port_val</a>);<a name=L320 href="source/kernel/chr_drv/console.c#L320">320</a> <a href="ident?i=sti">sti</a>();<a name=L321 href="source/kernel/chr_drv/console.c#L321">321</a> }<a name=L322 href="source/kernel/chr_drv/console.c#L322">322</a> <a name=L323 href="source/kernel/chr_drv/console.c#L323">323</a> static void <a href="ident?i=respond">respond</a>(struct <a href="ident?i=tty_struct">tty_struct</a> * tty)<a name=L324 href="source/kernel/chr_drv/console.c#L324">324</a> {<a name=L325 href="source/kernel/chr_drv/console.c#L325">325</a> char * p = <a href="ident?i=RESPONSE">RESPONSE</a>;<a name=L326 href="source/kernel/chr_drv/console.c#L326">326</a> <a name=L327 href="source/kernel/chr_drv/console.c#L327">327</a> <a href="ident?i=cli">cli</a>();<a name=L328 href="source/kernel/chr_drv/console.c#L328">328</a> while (*p) {<a name=L329 href="source/kernel/chr_drv/console.c#L329">329</a> <a href="ident?i=PUTCH">PUTCH</a>(*p,tty->read_q);<a name=L330 href="source/kernel/chr_drv/console.c#L330">330</a> p++;<a name=L331 href="source/kernel/chr_drv/console.c#L331">331</a> }<a name=L332 href="source/kernel/chr_drv/console.c#L332">332</a> <a href="ident?i=sti">sti</a>();<a name=L333 href="source/kernel/chr_drv/console.c#L333">333</a> <a href="ident?i=copy_to_cooked">copy_to_cooked</a>(tty);<a name=L334 href="source/kernel/chr_drv/console.c#L334">334</a> }<a name=L335 href="source/kernel/chr_drv/console.c#L335">335</a> <a name=L336 href="source/kernel/chr_drv/console.c#L336">336</a> static void <a href="ident?i=insert_char">insert_char</a>(void)<a name=L337 href="source/kernel/chr_drv/console.c#L337">337</a> {<a name=L338 href="source/kernel/chr_drv/console.c#L338">338</a> int i=<a href="ident?i=x">x</a>;<a name=L339 href="source/kernel/chr_drv/console.c#L339">339</a> unsigned short tmp, old = <a href="ident?i=video_erase_char">video_erase_char</a>;<a name=L340 href="source/kernel/chr_drv/console.c#L340">340</a> unsigned short * p = (unsigned short *) <a href="ident?i=pos">pos</a>;<a name=L341 href="source/kernel/chr_drv/console.c#L341">341</a> <a name=L342 href="source/kernel/chr_drv/console.c#L342">342</a> while (i++<<a href="ident?i=video_num_columns">video_num_columns</a>) {<a name=L343 href="source/kernel/chr_drv/console.c#L343">343</a> tmp=*p;<a name=L344 href="source/kernel/chr_drv/console.c#L344">344</a> *p=old;<a name=L345 href="source/kernel/chr_drv/console.c#L345">345</a> old=tmp;<a name=L346 href="source/kernel/chr_drv/console.c#L346">346</a> p++;<a name=L347 href="source/kernel/chr_drv/console.c#L347">347</a> }<a name=L348 href="source/kernel/chr_drv/console.c#L348">348</a> }<a name=L349 href="source/kernel/chr_drv/console.c#L349">349</a> <a name=L350 href="source/kernel/chr_drv/console.c#L350">350</a> static void <a href="ident?i=insert_line">insert_line</a>(void)<a name=L351 href="source/kernel/chr_drv/console.c#L351">351</a> {<a name=L352 href="source/kernel/chr_drv/console.c#L352">352</a> int oldtop,oldbottom;<a name=L353 href="source/kernel/chr_drv/console.c#L353">353</a> <a name=L354 href="source/kernel/chr_drv/console.c#L354">354</a> oldtop=<a href="ident?i=top">top</a>;<a name=L355 href="source/kernel/chr_drv/console.c#L355">355</a> oldbottom=<a href="ident?i=bottom">bottom</a>;<a name=L356 href="source/kernel/chr_drv/console.c#L356">356</a> <a href="ident?i=top">top</a>=<a href="ident?i=y">y</a>;<a name=L357 href="source/kernel/chr_drv/console.c#L357">357</a> <a href="ident?i=bottom">bottom</a> = <a href="ident?i=video_num_lines">video_num_lines</a>;<a name=L358 href="source/kernel/chr_drv/console.c#L358">358</a> <a href="ident?i=scrdown">scrdown</a>();<a name=L359 href="source/kernel/chr_drv/console.c#L359">359</a> <a href="ident?i=top">top</a>=oldtop;<a name=L360 href="source/kernel/chr_drv/console.c#L360">360</a> <a href="ident?i=bottom">bottom</a>=oldbottom;<a name=L361 href="source/kernel/chr_drv/console.c#L361">361</a> }<a name=L362 href="source/kernel/chr_drv/console.c#L362">362</a> <a name=L363 href="source/kernel/chr_drv/console.c#L363">363</a> static void <a href="ident?i=delete_char">delete_char</a>(void)<a name=L364 href="source/kernel/chr_drv/console.c#L364">364</a> {<a name=L365 href="source/kernel/chr_drv/console.c#L365">365</a> int i;<a name=L366 href="source/kernel/chr_drv/console.c#L366">366</a> unsigned short * p = (unsigned short *) <a href="ident?i=pos">pos</a>;<a name=L367 href="source/kernel/chr_drv/console.c#L367">367</a> <a name=L368 href="source/kernel/chr_drv/console.c#L368">368</a> if (<a href="ident?i=x">x</a>>=<a href="ident?i=video_num_columns">video_num_columns</a>)<a name=L369 href="source/kernel/chr_drv/console.c#L369">369</a> return;<a name=L370 href="source/kernel/chr_drv/console.c#L370">370</a> i = <a href="ident?i=x">x</a>;<a name=L371 href="source/kernel/chr_drv/console.c#L371">371</a> while (++i < <a href="ident?i=video_num_columns">video_num_columns</a>) {<a name=L372 href="source/kernel/chr_drv/console.c#L372">372</a> *p = *(p+1);<a name=L373 href="source/kernel/chr_drv/console.c#L373">373</a> p++;<a name=L374 href="source/kernel/chr_drv/console.c#L374">374</a> }<a name=L375 href="source/kernel/chr_drv/console.c#L375">375</a> *p = <a href="ident?i=video_erase_char">video_erase_char</a>;<a name=L376 href="source/kernel/chr_drv/console.c#L376">376</a> }<a name=L377 href="source/kernel/chr_drv/console.c#L377">377</a> <a name=L378 href="source/kernel/chr_drv/console.c#L378">378</a> static void <a href="ident?i=delete_line">delete_line</a>(void)<a name=L379 href="source/kernel/chr_drv/console.c#L379">379</a> {<a name=L380 href="source/kernel/chr_drv/console.c#L380">380</a> int oldtop,oldbottom;<a name=L381 href="source/kernel/chr_drv/console.c#L381">381</a> <a name=L382 href="source/kernel/chr_drv/console.c#L382">382</a> oldtop=<a href="ident?i=top">top</a>;<a name=L383 href="source/kernel/chr_drv/console.c#L383">383</a> oldbottom=<a href="ident?i=bottom">bottom</a>;<a name=L384 href="source/kernel/chr_drv/console.c#L384">384</a> <a href="ident?i=top">top</a>=<a href="ident?i=y">y</a>;<a name=L385 href="source/kernel/chr_drv/console.c#L385">385</a> <a href="ident?i=bottom">bottom</a> = <a href="ident?i=video_num_lines">video_num_lines</a>;<a name=L386 href="source/kernel/chr_drv/console.c#L386">386</a> <a href="ident?i=scrup">scrup</a>();<a name=L387 href="source/kernel/chr_drv/console.c#L387">387</a> <a href="ident?i=top">top</a>=oldtop;<a name=L388 href="source/kernel/chr_drv/console.c#L388">388</a> <a href="ident?i=bottom">bottom</a>=oldbottom;<a name=L389 href="source/kernel/chr_drv/console.c#L389">389</a> }<a name=L390 href="source/kernel/chr_drv/console.c#L390">390</a> <a name=L391 href="source/kernel/chr_drv/console.c#L391">391</a> static void <a href="ident?i=csi_at">csi_at</a>(unsigned int nr)<a name=L392 href="source/kernel/chr_drv/console.c#L392">392</a> {<a name=L393 href="source/kernel/chr_drv/console.c#L393">393</a> if (nr > <a href="ident?i=video_num_columns">video_num_columns</a>)<a name=L394 href="source/kernel/chr_drv/console.c#L394">394</a> nr = <a href="ident?i=video_num_columns">video_num_columns</a>;<a name=L395 href="source/kernel/chr_drv/console.c#L395">395</a> else if (!nr)<a name=L396 href="source/kernel/chr_drv/console.c#L396">396</a> nr = 1;<a name=L397 href="source/kernel/chr_drv/console.c#L397">397</a> while (nr--)<a name=L398 href="source/kernel/chr_drv/console.c#L398">398</a> <a href="ident?i=insert_char">insert_char</a>();<a name=L399 href="source/kernel/chr_drv/console.c#L399">399</a> }<a name=L400 href="source/kernel/chr_drv/console.c#L400">400</a> <a name=L401 href="source/kernel/chr_drv/console.c#L401">401</a> static void <a href="ident?i=csi_L">csi_L</a>(unsigned int nr)<a name=L402 href="source/kernel/chr_drv/console.c#L402">402</a> {<a name=L403 href="source/kernel/chr_drv/console.c#L403">403</a> if (nr > <a href="ident?i=video_num_lines">video_num_lines</a>)<a name=L404 href="source/kernel/chr_drv/console.c#L404">404</a> nr = <a href="ident?i=video_num_lines">video_num_lines</a>;<a name=L405 href="source/kernel/chr_drv/console.c#L405">405</a> else if (!nr)<a name=L406 href="source/kernel/chr_drv/console.c#L406">406</a> nr = 1;<a name=L407 href="source/kernel/chr_drv/console.c#L407">407</a> while (nr--)<a name=L408 href="source/kernel/chr_drv/console.c#L408">408</a> <a href="ident?i=insert_line">insert_line</a>();<a name=L409 href="source/kernel/chr_drv/console.c#L409">409</a> }<a name=L410 href="source/kernel/chr_drv/console.c#L410">410</a> <a name=L411 href="source/kernel/chr_drv/console.c#L411">411</a> static void <a href="ident?i=csi_P">csi_P</a>(unsigned int nr)<a name=L412 href="source/kernel/chr_drv/console.c#L412">412</a> {<a name=L413 href="source/kernel/chr_drv/console.c#L413">413</a> if (nr > <a href="ident?i=video_num_columns">video_num_columns</a>)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -