60.html
来自「linux 0.11中文版 有注释」· HTML 代码 · 共 725 行 · 第 1/5 页
HTML
725 行
<a name='L393'><a href='../S/60.html#L825' title='Refered from 825 in kernel/chr_drv/console.c.'>csi_m</a> (<b>void</b>)
<a name='L394'><font color='red'>{</font>
<a name='L395'> <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>;
<a name='L396'>
<a name='L397'> <b>for</b> (<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = 0; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> <= npar; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>++)
<a name='L398'> <b>switch</b> (par[<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>])
<a name='L399'> <font color='red'>{</font>
<a name='L400'> <b>case</b> 0:
<a name='L401'> attr = 0x07;
<a name='L402'> <b>break</b>;
<a name='L403'> <b>case</b> 1:
<a name='L404'> attr = 0x0f;
<a name='L405'> <b>break</b>;
<a name='L406'> <b>case</b> 4:
<a name='L407'> attr = 0x0f;
<a name='L408'> <b>break</b>;
<a name='L409'> <b>case</b> 7:
<a name='L410'> attr = 0x70;
<a name='L411'> <b>break</b>;
<a name='L412'> <b>case</b> 27:
<a name='L413'> attr = 0x07;
<a name='L414'> <b>break</b>;
<a name='L415'> <font color='red'>}</font>
<a name='L416'><font color='red'>}</font>
<a name='L417'>
<a name='L418'><i><font color='green'>//// 根据设置显示光标。</font></i>
<a name='L419'><i><font color='green'>// 根据显示内存光标对应位置pos,设置显示控制器光标的显示位置。</font></i>
<a name='L420'><b>static</b> <b>inline</b> <b>void</b>
<a name='L421'><a href='../S/60.html#L851' title='Refered from 851 in kernel/chr_drv/console.c.'>set_cursor</a> (<b>void</b>)
<a name='L422'><font color='red'>{</font>
<a name='L423'> <a href='../S/25.html#L15' title='Defined at 15 in include/asm/system.h.'>cli</a> ();
<a name='L424'><i><font color='green'>// 首先使用索引寄存器端口选择显示控制数据寄存器r14(光标当前显示位置高字节),然后写入光标</font></i>
<a name='L425'><i><font color='green'>// 当前位置高字节(向右移动9 位表示高字节移到低字节再除以2)。是相对于默认显示内存操作的。</font></i>
<a name='L426'> <a href='../S/22.html#L17' title='Defined at 17 in include/asm/io.h.'>outb_p</a> (14, video_port_reg);
<a name='L427'> <a href='../S/22.html#L17' title='Defined at 17 in include/asm/io.h.'>outb_p</a> (0xff & ((<a href='../D/915.html' title='Multiple defined in 9 places.'>pos</a> - video_mem_start) >> 9), video_port_val);
<a name='L428'><i><font color='green'>// 再使用索引寄存器选择r15,并将光标当前位置低字节写入其中。</font></i>
<a name='L429'> <a href='../S/22.html#L17' title='Defined at 17 in include/asm/io.h.'>outb_p</a> (15, video_port_reg);
<a name='L430'> <a href='../S/22.html#L17' title='Defined at 17 in include/asm/io.h.'>outb_p</a> (0xff & ((<a href='../D/915.html' title='Multiple defined in 9 places.'>pos</a> - video_mem_start) >> 1), video_port_val);
<a name='L431'> <a href='../S/25.html#L14' title='Defined at 14 in include/asm/system.h.'>sti</a> ();
<a name='L432'><font color='red'>}</font>
<a name='L433'>
<a name='L434'><i><font color='green'>//// 发送对终端VT100 的响应序列。</font></i>
<a name='L435'><i><font color='green'>// 将响应序列放入读缓冲队列中。</font></i>
<a name='L436'><b>static</b> <b>void</b>
<a name='L437'><a href='../S/60.html#L696' title='Refered from 696 in kernel/chr_drv/console.c.'>respond</a> (<b>struct</b> tty_struct *tty)
<a name='L438'><font color='red'>{</font>
<a name='L439'> <b>char</b> *p = <a href='../S/60.html#L126' title='Defined at 126 in kernel/chr_drv/console.c.'>RESPONSE</a>;
<a name='L440'>
<a name='L441'> <a href='../S/25.html#L15' title='Defined at 15 in include/asm/system.h.'>cli</a> (); <i><font color='green'>// 关中断。</font></i>
<a name='L442'> <b>while</b> (*p)
<a name='L443'> <font color='red'>{</font> <i><font color='green'>// 将字符序列放入写队列。</font></i>
<a name='L444'> <a href='../S/38.html#L52' title='Defined at 52 in include/linux/tty.h.'>PUTCH</a> (*p, <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>->read_q);
<a name='L445'> p++;
<a name='L446'> <font color='red'>}</font>
<a name='L447'> <a href='../S/25.html#L14' title='Defined at 14 in include/asm/system.h.'>sti</a> (); <i><font color='green'>// 开中断。</font></i>
<a name='L448'> <a href='../S/65.html#L192' title='Defined at 192 in kernel/chr_drv/tty_io.c.'>copy_to_cooked</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>); <i><font color='green'>// 转换成规范模式(放入辅助队列中)。</font></i>
<a name='L449'><font color='red'>}</font>
<a name='L450'>
<a name='L451'><i><font color='green'>//// 在光标处插入一空格字符。</font></i>
<a name='L452'><b>static</b> <b>void</b>
<a name='L453'><a href='../S/60.html#L536' title='Refered from 536 in kernel/chr_drv/console.c.'>insert_char</a> (<b>void</b>)
<a name='L454'><font color='red'>{</font>
<a name='L455'> <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = x;
<a name='L456'> <b>unsigned</b> <b>short</b> tmp, old = video_erase_char;
<a name='L457'> <b>unsigned</b> <b>short</b> *p = (<b>unsigned</b> <b>short</b> *) <a href='../D/915.html' title='Multiple defined in 9 places.'>pos</a>;
<a name='L458'>
<a name='L459'><i><font color='green'>// 光标开始的所有字符右移一格,并将擦除字符插入在光标所在处。</font></i>
<a name='L460'><i><font color='green'>// 若一行上都有字符的话,则行最后一个字符将不会更动??</font></i>
<a name='L461'> <b>while</b> (<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>++ < video_num_columns)
<a name='L462'> <font color='red'>{</font>
<a name='L463'> tmp = *p;
<a name='L464'> *p = old;
<a name='L465'> old = tmp;
<a name='L466'> p++;
<a name='L467'> <font color='red'>}</font>
<a name='L468'><font color='red'>}</font>
<a name='L469'>
<a name='L470'><i><font color='green'>//// 在光标处插入一行(则光标将处在新的空行上)。</font></i>
<a name='L471'><i><font color='green'>// 将屏幕从光标所在行到屏幕底向下卷动一行。</font></i>
<a name='L472'><b>static</b> <b>void</b>
<a name='L473'><a href='../S/60.html#L551' title='Refered from 551 in kernel/chr_drv/console.c.'>insert_line</a> (<b>void</b>)
<a name='L474'><font color='red'>{</font>
<a name='L475'> <b>int</b> oldtop, oldbottom;
<a name='L476'>
<a name='L477'> oldtop = top; <i><font color='green'>// 保存原top,bottom 值。</font></i>
<a name='L478'> oldbottom = bottom;
<a name='L479'> top = y; <i><font color='green'>// 设置屏幕卷动开始行。</font></i>
<a name='L480'> bottom = video_num_lines; <i><font color='green'>// 设置屏幕卷动最后行。</font></i>
<a name='L481'> <a href='../S/60.html#L241' title='Defined at 241 in kernel/chr_drv/console.c.'>scrdown</a> (); <i><font color='green'>// 从光标开始处,屏幕内容向下滚动一行。</font></i>
<a name='L482'> top = oldtop; <i><font color='green'>// 恢复原top,bottom 值。</font></i>
<a name='L483'> bottom = oldbottom;
<a name='L484'><font color='red'>}</font>
<a name='L485'>
<a name='L486'><i><font color='green'>//// 删除光标处的一个字符。</font></i>
<a name='L487'><b>static</b> <b>void</b>
<a name='L488'><a href='../S/60.html#L566' title='Refered from 566 in kernel/chr_drv/console.c.'>delete_char</a> (<b>void</b>)
<a name='L489'><font color='red'>{</font>
<a name='L490'> <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>;
<a name='L491'> <b>unsigned</b> <b>short</b> *p = (<b>unsigned</b> <b>short</b> *) <a href='../D/915.html' title='Multiple defined in 9 places.'>pos</a>;
<a name='L492'>
<a name='L493'><i><font color='green'>// 如果光标超出屏幕最右列,则返回。</font></i>
<a name='L494'> <b>if</b> (x >= video_num_columns)
<a name='L495'> <b>return</b>;
<a name='L496'><i><font color='green'>// 从光标右一个字符开始到行末所有字符左移一格。</font></i>
<a name='L497'> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = x;
<a name='L498'> <b>while</b> (++<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> < video_num_columns)
<a name='L499'> <font color='red'>{</font>
<a name='L500'> *p = *(p + 1);
<a name='L501'> p++;
<a name='L502'> <font color='red'>}</font>
<a name='L503'><i><font color='green'>// 最后一个字符处填入擦除字符(空格字符)。</font></i>
<a name='L504'> *p = video_erase_char;
<a name='L505'><font color='red'>}</font>
<a name='L506'>
<a name='L507'><i><font color='green'>//// 删除光标所在行。</font></i>
<a name='L508'><i><font color='green'>// 从光标所在行开始屏幕内容上卷一行。</font></i>
<a name='L509'><b>static</b> <b>void</b>
<a name='L510'><a href='../S/60.html#L581' title='Refered from 581 in kernel/chr_drv/console.c.'>delete_line</a> (<b>void</b>)
<a name='L511'><font color='red'>{</font>
<a name='L512'> <b>int</b> oldtop, oldbottom;
<a name='L513'>
<a name='L514'> oldtop = top; <i><font color='green'>// 保存原top,bottom 值。</font></i>
<a name='L515'> oldbottom = bottom;
<a name='L516'> top = y; <i><font color='green'>// 设置屏幕卷动开始行。</font></i>
<a name='L517'> bottom = video_num_lines; <i><font color='green'>// 设置屏幕卷动最后行。</font></i>
<a name='L518'> <a href='../S/60.html#L163' title='Defined at 163 in kernel/chr_drv/console.c.'>scrup</a> (); <i><font color='green'>// 从光标开始处,屏幕内容向上滚动一行。</font></i>
<a name='L519'> top = oldtop; <i><font color='green'>// 恢复原top,bottom 值。</font></i>
<a name='L520'> bottom = oldbottom;
<a name='L521'><font color='red'>}</font>
<a name='L522'>
<a name='L523'><i><font color='green'>//// 在光标处插入nr 个字符。</font></i>
<a name='L524'><i><font color='green'>// ANSI 转义字符序列:'ESC [n@ '。</font></i>
<a name='L525'><i><font color='green'>// 参数 nr = 上面n。</font></i>
<a name='L526'><b>static</b> <b>void</b>
<a name='L527'><a href='../S/60.html#L820' title='Refered from 820 in kernel/chr_drv/console.c.'>csi_at</a> (<b>unsigned</b> <b>int</b> nr)
<a name='L528'><font color='red'>{</font>
<a name='L529'><i><font color='green'>// 如果插入的字符数大于一行字符数,则截为一行字符数;若插入字符数nr 为0,则插入1 个字符。</font></i>
<a name='L530'> <b>if</b> (nr > video_num_columns)
<a name='L531'> nr = video_num_columns;
<a name='L532'> <b>else</b> <b>if</b> (!nr)
<a name='L533'> nr = 1;
<a name='L534'><i><font color='green'>// 循环插入指定的字符数。</font></i>
<a name='L535'> <b>while</b> (nr--)
<a name='L536'> <a href='../S/60.html#L453' title='Defined at 453 in kernel/chr_drv/console.c.'>insert_char</a> ();
<a name='L537'><font color='red'>}</font>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?