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

📄 console.c

📁 linux0.11 version(301k)
💻 C
📖 第 1 页 / 共 5 页
字号:
<a name=L414 href="source/kernel/chr_drv/console.c#L414">414</a>                 nr = <a href="ident?i=video_num_columns">video_num_columns</a>;<a name=L415 href="source/kernel/chr_drv/console.c#L415">415</a>         else if (!nr)<a name=L416 href="source/kernel/chr_drv/console.c#L416">416</a>                 nr = 1;<a name=L417 href="source/kernel/chr_drv/console.c#L417">417</a>         while (nr--)<a name=L418 href="source/kernel/chr_drv/console.c#L418">418</a>                 <a href="ident?i=delete_char">delete_char</a>();<a name=L419 href="source/kernel/chr_drv/console.c#L419">419</a> }<a name=L420 href="source/kernel/chr_drv/console.c#L420">420</a> <a name=L421 href="source/kernel/chr_drv/console.c#L421">421</a> static void <a href="ident?i=csi_M">csi_M</a>(unsigned int nr)<a name=L422 href="source/kernel/chr_drv/console.c#L422">422</a> {<a name=L423 href="source/kernel/chr_drv/console.c#L423">423</a>         if (nr &gt; <a href="ident?i=video_num_lines">video_num_lines</a>)<a name=L424 href="source/kernel/chr_drv/console.c#L424">424</a>                 nr = <a href="ident?i=video_num_lines">video_num_lines</a>;<a name=L425 href="source/kernel/chr_drv/console.c#L425">425</a>         else if (!nr)<a name=L426 href="source/kernel/chr_drv/console.c#L426">426</a>                 nr=1;<a name=L427 href="source/kernel/chr_drv/console.c#L427">427</a>         while (nr--)<a name=L428 href="source/kernel/chr_drv/console.c#L428">428</a>                 <a href="ident?i=delete_line">delete_line</a>();<a name=L429 href="source/kernel/chr_drv/console.c#L429">429</a> }<a name=L430 href="source/kernel/chr_drv/console.c#L430">430</a> <a name=L431 href="source/kernel/chr_drv/console.c#L431">431</a> static int <a href="ident?i=saved_x">saved_x</a>=0;<a name=L432 href="source/kernel/chr_drv/console.c#L432">432</a> static int <a href="ident?i=saved_y">saved_y</a>=0;<a name=L433 href="source/kernel/chr_drv/console.c#L433">433</a> <a name=L434 href="source/kernel/chr_drv/console.c#L434">434</a> static void <a href="ident?i=save_cur">save_cur</a>(void)<a name=L435 href="source/kernel/chr_drv/console.c#L435">435</a> {<a name=L436 href="source/kernel/chr_drv/console.c#L436">436</a>         <a href="ident?i=saved_x">saved_x</a>=<a href="ident?i=x">x</a>;<a name=L437 href="source/kernel/chr_drv/console.c#L437">437</a>         <a href="ident?i=saved_y">saved_y</a>=<a href="ident?i=y">y</a>;<a name=L438 href="source/kernel/chr_drv/console.c#L438">438</a> }<a name=L439 href="source/kernel/chr_drv/console.c#L439">439</a> <a name=L440 href="source/kernel/chr_drv/console.c#L440">440</a> static void <a href="ident?i=restore_cur">restore_cur</a>(void)<a name=L441 href="source/kernel/chr_drv/console.c#L441">441</a> {<a name=L442 href="source/kernel/chr_drv/console.c#L442">442</a>         <a href="ident?i=gotoxy">gotoxy</a>(<a href="ident?i=saved_x">saved_x</a>, <a href="ident?i=saved_y">saved_y</a>);<a name=L443 href="source/kernel/chr_drv/console.c#L443">443</a> }<a name=L444 href="source/kernel/chr_drv/console.c#L444">444</a> <a name=L445 href="source/kernel/chr_drv/console.c#L445">445</a> void <a href="ident?i=con_write">con_write</a>(struct <a href="ident?i=tty_struct">tty_struct</a> * tty)<a name=L446 href="source/kernel/chr_drv/console.c#L446">446</a> {<a name=L447 href="source/kernel/chr_drv/console.c#L447">447</a>         int nr;<a name=L448 href="source/kernel/chr_drv/console.c#L448">448</a>         char c;<a name=L449 href="source/kernel/chr_drv/console.c#L449">449</a> <a name=L450 href="source/kernel/chr_drv/console.c#L450">450</a>         nr = <a href="ident?i=CHARS">CHARS</a>(tty-&gt;write_q);<a name=L451 href="source/kernel/chr_drv/console.c#L451">451</a>         while (nr--) {<a name=L452 href="source/kernel/chr_drv/console.c#L452">452</a>                 <a href="ident?i=GETCH">GETCH</a>(tty-&gt;write_q,c);<a name=L453 href="source/kernel/chr_drv/console.c#L453">453</a>                 switch(<a href="ident?i=state">state</a>) {<a name=L454 href="source/kernel/chr_drv/console.c#L454">454</a>                         case 0:<a name=L455 href="source/kernel/chr_drv/console.c#L455">455</a>                                 if (c&gt;31 &amp;&amp; c&lt;127) {<a name=L456 href="source/kernel/chr_drv/console.c#L456">456</a>                                         if (<a href="ident?i=x">x</a>&gt;=<a href="ident?i=video_num_columns">video_num_columns</a>) {<a name=L457 href="source/kernel/chr_drv/console.c#L457">457</a>                                                 <a href="ident?i=x">x</a> -= <a href="ident?i=video_num_columns">video_num_columns</a>;<a name=L458 href="source/kernel/chr_drv/console.c#L458">458</a>                                                 <a href="ident?i=pos">pos</a> -= <a href="ident?i=video_size_row">video_size_row</a>;<a name=L459 href="source/kernel/chr_drv/console.c#L459">459</a>                                                 <a href="ident?i=lf">lf</a>();<a name=L460 href="source/kernel/chr_drv/console.c#L460">460</a>                                         }<a name=L461 href="source/kernel/chr_drv/console.c#L461">461</a>                                         __asm__(<i>"movb _attr,%%ah\n\t"</i><a name=L462 href="source/kernel/chr_drv/console.c#L462">462</a>                                                 <i>"movw %%ax,%1\n\t"</i><a name=L463 href="source/kernel/chr_drv/console.c#L463">463</a>                                                 ::<i>"a"</i> (c),<i>"m"</i> (*(short *)<a href="ident?i=pos">pos</a>)<a name=L464 href="source/kernel/chr_drv/console.c#L464">464</a>                                                 :<i>"ax"</i>);<a name=L465 href="source/kernel/chr_drv/console.c#L465">465</a>                                         <a href="ident?i=pos">pos</a> += 2;<a name=L466 href="source/kernel/chr_drv/console.c#L466">466</a>                                         <a href="ident?i=x">x</a>++;<a name=L467 href="source/kernel/chr_drv/console.c#L467">467</a>                                 } else if (c==27)<a name=L468 href="source/kernel/chr_drv/console.c#L468">468</a>                                         <a href="ident?i=state">state</a>=1;<a name=L469 href="source/kernel/chr_drv/console.c#L469">469</a>                                 else if (c==10 || c==11 || c==12)<a name=L470 href="source/kernel/chr_drv/console.c#L470">470</a>                                         <a href="ident?i=lf">lf</a>();<a name=L471 href="source/kernel/chr_drv/console.c#L471">471</a>                                 else if (c==13)<a name=L472 href="source/kernel/chr_drv/console.c#L472">472</a>                                         <a href="ident?i=cr">cr</a>();<a name=L473 href="source/kernel/chr_drv/console.c#L473">473</a>                                 else if (c==<a href="ident?i=ERASE_CHAR">ERASE_CHAR</a>(tty))<a name=L474 href="source/kernel/chr_drv/console.c#L474">474</a>                                         <a href="ident?i=del">del</a>();<a name=L475 href="source/kernel/chr_drv/console.c#L475">475</a>                                 else if (c==8) {<a name=L476 href="source/kernel/chr_drv/console.c#L476">476</a>                                         if (<a href="ident?i=x">x</a>) {<a name=L477 href="source/kernel/chr_drv/console.c#L477">477</a>                                                 <a href="ident?i=x">x</a>--;<a name=L478 href="source/kernel/chr_drv/console.c#L478">478</a>                                                 <a href="ident?i=pos">pos</a> -= 2;<a name=L479 href="source/kernel/chr_drv/console.c#L479">479</a>                                         }<a name=L480 href="source/kernel/chr_drv/console.c#L480">480</a>                                 } else if (c==9) {<a name=L481 href="source/kernel/chr_drv/console.c#L481">481</a>                                         c=8-(<a href="ident?i=x">x</a>&amp;7);<a name=L482 href="source/kernel/chr_drv/console.c#L482">482</a>                                         <a href="ident?i=x">x</a> += c;<a name=L483 href="source/kernel/chr_drv/console.c#L483">483</a>                                         <a href="ident?i=pos">pos</a> += c&lt;&lt;1;<a name=L484 href="source/kernel/chr_drv/console.c#L484">484</a>                                         if (<a href="ident?i=x">x</a>&gt;<a href="ident?i=video_num_columns">video_num_columns</a>) {<a name=L485 href="source/kernel/chr_drv/console.c#L485">485</a>                                                 <a href="ident?i=x">x</a> -= <a href="ident?i=video_num_columns">video_num_columns</a>;<a name=L486 href="source/kernel/chr_drv/console.c#L486">486</a>                                                 <a href="ident?i=pos">pos</a> -= <a href="ident?i=video_size_row">video_size_row</a>;<a name=L487 href="source/kernel/chr_drv/console.c#L487">487</a>                                                 <a href="ident?i=lf">lf</a>();<a name=L488 href="source/kernel/chr_drv/console.c#L488">488</a>                                         }<a name=L489 href="source/kernel/chr_drv/console.c#L489">489</a>                                         c=9;<a name=L490 href="source/kernel/chr_drv/console.c#L490">490</a>                                 } else if (c==7)<a name=L491 href="source/kernel/chr_drv/console.c#L491">491</a>                                         <a href="ident?i=sysbeep">sysbeep</a>();<a name=L492 href="source/kernel/chr_drv/console.c#L492">492</a>                                 break;<a name=L493 href="source/kernel/chr_drv/console.c#L493">493</a>                         case 1:<a name=L494 href="source/kernel/chr_drv/console.c#L494">494</a>                                 <a href="ident?i=state">state</a>=0;<a name=L495 href="source/kernel/chr_drv/console.c#L495">495</a>                                 if (c==<i>'['</i>)<a name=L496 href="source/kernel/chr_drv/console.c#L496">496</a>                                         <a href="ident?i=state">state</a>=2;<a name=L497 href="source/kernel/chr_drv/console.c#L497">497</a>                                 else if (c==<i>'E'</i>)<a name=L498 href="source/kernel/chr_drv/console.c#L498">498</a>                                         <a href="ident?i=gotoxy">gotoxy</a>(0,<a href="ident?i=y">y</a>+1);<a name=L499 href="source/kernel/chr_drv/console.c#L499">499</a>                                 else if (c==<i>'M'</i>)<a name=L500 href="source/kernel/chr_drv/console.c#L500">500</a>                                         <a href="ident?i=ri">ri</a>();<a name=L501 href="source/kernel/chr_drv/console.c#L501">501</a>                                 else if (c==<i>'D'</i>)<a name=L502 href="source/kernel/chr_drv/console.c#L502">502</a>                                         <a href="ident?i=lf">lf</a>();<a name=L503 href="source/kernel/chr_drv/console.c#L503">503</a>                                 else if (c==<i>'Z'</i>)<a name=L504 href="source/kernel/chr_drv/console.c#L504">504</a>                                         <a href="ident?i=respond">respond</a>(tty);<a name=L505 href="source/kernel/chr_drv/console.c#L505">505</a>                                 else if (<a href="ident?i=x">x</a>==<i>'7'</i>)<a name=L506 href="source/kernel/chr_drv/console.c#L506">506</a>                                         <a href="ident?i=save_cur">save_cur</a>();<a name=L507 href="source/kernel/chr_drv/console.c#L507">507</a>                                 else if (<a href="ident?i=x">x</a>==<i>'8'</i>)<a name=L508 href="source/kernel/chr_drv/console.c#L508">508</a>                                         <a href="ident?i=restore_cur">restore_cur</a>();<a name=L509 href="source/kernel/chr_drv/console.c#L509">509</a>                                 break;<a name=L510 href="source/kernel/chr_drv/console.c#L510">510</a>                         case 2:<a name=L511 href="source/kernel/chr_drv/console.c#L511">511</a>                                 for(<a href="ident?i=npar">npar</a>=0;<a href="ident?i=npar">npar</a>&lt;<a href="ident?i=NPAR">NPAR</a>;<a href="ident?i=npar">npar</a>++)<a name=L512 href="source/kernel/chr_drv/console.c#L512">512</a>                                         <a href="ident?i=par">par</a>[<a href="ident?i=npar">npar</a>]=0;<a name=L513 href="source/kernel/chr_drv/console.c#L513">513</a>                                 <a href="ident?i=npar">npar</a>=0;<a name=L514 href="source/kernel/chr_drv/console.c#L514">514</a>                                 <a href="ident?i=state">state</a>=3;<a name=L515 href="source/kernel/chr_drv/console.c#L515">515</a>                                 if (<a href="ident?i=ques">ques</a>=(c==<i>'?'</i>))<a name=L516 href="source/kernel/chr_drv/console.c#L516">516</a>                                         break;<a name=L517 href="source/kernel/chr_drv/console.c#L517">517</a>                         case 3:<a name=L518 href="source/kernel/chr_drv/console.c#L518">518</a>                                 if (c==<i>';'</i> &amp;&amp; <a href="ident?i=npar">npar</a>&lt;<a href="ident?i=NPAR">NPAR</a>-1) {<a name=L519 href="source/kernel/chr_drv/console.c#L519">519</a>                                         <a href="ident?i=npar">npar</a>++;<a name=L520 href="source/kernel/chr_drv/console.c#L520">520</a>                                         break;<a name=L521 href="source/kernel/chr_drv/console.c#L521">521</a>                                 } else if (c&gt;=<i>''</i> &amp;&amp; c&lt;=<i>'9'</i>) {<a name=L522 href="source/kernel/chr_drv/console.c#L522">522</a>                                         <a href="ident?i=par">par</a>[<a href="ident?i=npar">npar</a>]=10*<a href="ident?i=par">par</a>[<a href="ident?i=npar">npar</a>]+c-<i>''</i>;<a name=L523 href="source/kernel/chr_drv/console.c#L523">523</a>                                         break;<a name=L524 href="source/kernel/chr_drv/console.c#L524">524</a>                            

⌨️ 快捷键说明

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