📄 console.c
字号:
<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 > <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->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->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>31 && c<127) {<a name=L456 href="source/kernel/chr_drv/console.c#L456">456</a> if (<a href="ident?i=x">x</a>>=<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>&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<<1;<a name=L484 href="source/kernel/chr_drv/console.c#L484">484</a> if (<a href="ident?i=x">x</a>><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><<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> && <a href="ident?i=npar">npar</a><<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>=<i>''</i> && c<=<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 + -