📄 tty_io.c
字号:
<a name=L101 href="source/kernel/chr_drv/tty_io.c#L101">101</a> &<a href="ident?i=tty_table">tty_table</a>[1].read_q, &<a href="ident?i=tty_table">tty_table</a>[1].write_q,<a name=L102 href="source/kernel/chr_drv/tty_io.c#L102">102</a> &<a href="ident?i=tty_table">tty_table</a>[2].read_q, &<a href="ident?i=tty_table">tty_table</a>[2].write_q<a name=L103 href="source/kernel/chr_drv/tty_io.c#L103">103</a> };<a name=L104 href="source/kernel/chr_drv/tty_io.c#L104">104</a> <a name=L105 href="source/kernel/chr_drv/tty_io.c#L105">105</a> void <a href="ident?i=tty_init">tty_init</a>(void)<a name=L106 href="source/kernel/chr_drv/tty_io.c#L106">106</a> {<a name=L107 href="source/kernel/chr_drv/tty_io.c#L107">107</a> <a href="ident?i=rs_init">rs_init</a>();<a name=L108 href="source/kernel/chr_drv/tty_io.c#L108">108</a> <a href="ident?i=con_init">con_init</a>();<a name=L109 href="source/kernel/chr_drv/tty_io.c#L109">109</a> }<a name=L110 href="source/kernel/chr_drv/tty_io.c#L110">110</a> <a name=L111 href="source/kernel/chr_drv/tty_io.c#L111">111</a> void <a href="ident?i=tty_intr">tty_intr</a>(struct <a href="ident?i=tty_struct">tty_struct</a> * tty, int mask)<a name=L112 href="source/kernel/chr_drv/tty_io.c#L112">112</a> {<a name=L113 href="source/kernel/chr_drv/tty_io.c#L113">113</a> int i;<a name=L114 href="source/kernel/chr_drv/tty_io.c#L114">114</a> <a name=L115 href="source/kernel/chr_drv/tty_io.c#L115">115</a> if (tty->pgrp <= 0)<a name=L116 href="source/kernel/chr_drv/tty_io.c#L116">116</a> return;<a name=L117 href="source/kernel/chr_drv/tty_io.c#L117">117</a> for (i=0;i<<a href="ident?i=NR_TASKS">NR_TASKS</a>;i++)<a name=L118 href="source/kernel/chr_drv/tty_io.c#L118">118</a> if (<a href="ident?i=task">task</a>[i] && <a href="ident?i=task">task</a>[i]->pgrp==tty->pgrp)<a name=L119 href="source/kernel/chr_drv/tty_io.c#L119">119</a> <a href="ident?i=task">task</a>[i]->signal |= mask;<a name=L120 href="source/kernel/chr_drv/tty_io.c#L120">120</a> }<a name=L121 href="source/kernel/chr_drv/tty_io.c#L121">121</a> <a name=L122 href="source/kernel/chr_drv/tty_io.c#L122">122</a> static void <a href="ident?i=sleep_if_empty">sleep_if_empty</a>(struct <a href="ident?i=tty_queue">tty_queue</a> * queue)<a name=L123 href="source/kernel/chr_drv/tty_io.c#L123">123</a> {<a name=L124 href="source/kernel/chr_drv/tty_io.c#L124">124</a> <a href="ident?i=cli">cli</a>();<a name=L125 href="source/kernel/chr_drv/tty_io.c#L125">125</a> while (!<a href="ident?i=current">current</a>->signal && <a href="ident?i=EMPTY">EMPTY</a>(*queue))<a name=L126 href="source/kernel/chr_drv/tty_io.c#L126">126</a> <a href="ident?i=interruptible_sleep_on">interruptible_sleep_on</a>(&queue->proc_list);<a name=L127 href="source/kernel/chr_drv/tty_io.c#L127">127</a> <a href="ident?i=sti">sti</a>();<a name=L128 href="source/kernel/chr_drv/tty_io.c#L128">128</a> }<a name=L129 href="source/kernel/chr_drv/tty_io.c#L129">129</a> <a name=L130 href="source/kernel/chr_drv/tty_io.c#L130">130</a> static void <a href="ident?i=sleep_if_full">sleep_if_full</a>(struct <a href="ident?i=tty_queue">tty_queue</a> * queue)<a name=L131 href="source/kernel/chr_drv/tty_io.c#L131">131</a> {<a name=L132 href="source/kernel/chr_drv/tty_io.c#L132">132</a> if (!<a href="ident?i=FULL">FULL</a>(*queue))<a name=L133 href="source/kernel/chr_drv/tty_io.c#L133">133</a> return;<a name=L134 href="source/kernel/chr_drv/tty_io.c#L134">134</a> <a href="ident?i=cli">cli</a>();<a name=L135 href="source/kernel/chr_drv/tty_io.c#L135">135</a> while (!<a href="ident?i=current">current</a>->signal && <a href="ident?i=LEFT">LEFT</a>(*queue)<128)<a name=L136 href="source/kernel/chr_drv/tty_io.c#L136">136</a> <a href="ident?i=interruptible_sleep_on">interruptible_sleep_on</a>(&queue->proc_list);<a name=L137 href="source/kernel/chr_drv/tty_io.c#L137">137</a> <a href="ident?i=sti">sti</a>();<a name=L138 href="source/kernel/chr_drv/tty_io.c#L138">138</a> }<a name=L139 href="source/kernel/chr_drv/tty_io.c#L139">139</a> <a name=L140 href="source/kernel/chr_drv/tty_io.c#L140">140</a> void <a href="ident?i=wait_for_keypress">wait_for_keypress</a>(void)<a name=L141 href="source/kernel/chr_drv/tty_io.c#L141">141</a> {<a name=L142 href="source/kernel/chr_drv/tty_io.c#L142">142</a> <a href="ident?i=sleep_if_empty">sleep_if_empty</a>(&<a href="ident?i=tty_table">tty_table</a>[0].secondary);<a name=L143 href="source/kernel/chr_drv/tty_io.c#L143">143</a> }<a name=L144 href="source/kernel/chr_drv/tty_io.c#L144">144</a> <a name=L145 href="source/kernel/chr_drv/tty_io.c#L145">145</a> void <a href="ident?i=copy_to_cooked">copy_to_cooked</a>(struct <a href="ident?i=tty_struct">tty_struct</a> * tty)<a name=L146 href="source/kernel/chr_drv/tty_io.c#L146">146</a> {<a name=L147 href="source/kernel/chr_drv/tty_io.c#L147">147</a> signed char c;<a name=L148 href="source/kernel/chr_drv/tty_io.c#L148">148</a> <a name=L149 href="source/kernel/chr_drv/tty_io.c#L149">149</a> while (!<a href="ident?i=EMPTY">EMPTY</a>(tty->read_q) && !<a href="ident?i=FULL">FULL</a>(tty->secondary)) {<a name=L150 href="source/kernel/chr_drv/tty_io.c#L150">150</a> <a href="ident?i=GETCH">GETCH</a>(tty->read_q,c);<a name=L151 href="source/kernel/chr_drv/tty_io.c#L151">151</a> if (c==13)<a name=L152 href="source/kernel/chr_drv/tty_io.c#L152">152</a> if (<a href="ident?i=I_CRNL">I_CRNL</a>(tty))<a name=L153 href="source/kernel/chr_drv/tty_io.c#L153">153</a> c=10;<a name=L154 href="source/kernel/chr_drv/tty_io.c#L154">154</a> else if (<a href="ident?i=I_NOCR">I_NOCR</a>(tty))<a name=L155 href="source/kernel/chr_drv/tty_io.c#L155">155</a> continue;<a name=L156 href="source/kernel/chr_drv/tty_io.c#L156">156</a> else ;<a name=L157 href="source/kernel/chr_drv/tty_io.c#L157">157</a> else if (c==10 && <a href="ident?i=I_NLCR">I_NLCR</a>(tty))<a name=L158 href="source/kernel/chr_drv/tty_io.c#L158">158</a> c=13;<a name=L159 href="source/kernel/chr_drv/tty_io.c#L159">159</a> if (<a href="ident?i=I_UCLC">I_UCLC</a>(tty))<a name=L160 href="source/kernel/chr_drv/tty_io.c#L160">160</a> c=<a href="ident?i=tolower">tolower</a>(c);<a name=L161 href="source/kernel/chr_drv/tty_io.c#L161">161</a> if (<a href="ident?i=L_CANON">L_CANON</a>(tty)) {<a name=L162 href="source/kernel/chr_drv/tty_io.c#L162">162</a> if (c==<a href="ident?i=KILL_CHAR">KILL_CHAR</a>(tty)) {<a name=L163 href="source/kernel/chr_drv/tty_io.c#L163">163</a> <b><i>/* deal with killing the input line */</i></b><a name=L164 href="source/kernel/chr_drv/tty_io.c#L164">164</a> while(!(<a href="ident?i=EMPTY">EMPTY</a>(tty->secondary) ||<a name=L165 href="source/kernel/chr_drv/tty_io.c#L165">165</a> (c=<a href="ident?i=LAST">LAST</a>(tty->secondary))==10 ||<a name=L166 href="source/kernel/chr_drv/tty_io.c#L166">166</a> c==<a href="ident?i=EOF_CHAR">EOF_CHAR</a>(tty))) {<a name=L167 href="source/kernel/chr_drv/tty_io.c#L167">167</a> if (<a href="ident?i=L_ECHO">L_ECHO</a>(tty)) {<a name=L168 href="source/kernel/chr_drv/tty_io.c#L168">168</a> if (c<32)<a name=L169 href="source/kernel/chr_drv/tty_io.c#L169">169</a> <a href="ident?i=PUTCH">PUTCH</a>(127,tty->write_q);<a name=L170 href="source/kernel/chr_drv/tty_io.c#L170">170</a> <a href="ident?i=PUTCH">PUTCH</a>(127,tty->write_q);<a name=L171 href="source/kernel/chr_drv/tty_io.c#L171">171</a> tty-><a href="ident?i=write">write</a>(tty);<a name=L172 href="source/kernel/chr_drv/tty_io.c#L172">172</a> }<a name=L173 href="source/kernel/chr_drv/tty_io.c#L173">173</a> <a href="ident?i=DEC">DEC</a>(tty->secondary.<a href="ident?i=head">head</a>);<a name=L174 href="source/kernel/chr_drv/tty_io.c#L174">174</a> }<a name=L175 href="source/kernel/chr_drv/tty_io.c#L175">175</a> continue;<a name=L176 href="source/kernel/chr_drv/tty_io.c#L176">176</a> }<a name=L177 href="source/kernel/chr_drv/tty_io.c#L177">177</a> if (c==<a href="ident?i=ERASE_CHAR">ERASE_CHAR</a>(tty)) {<a name=L178 href="source/kernel/chr_drv/tty_io.c#L178">178</a> if (<a href="ident?i=EMPTY">EMPTY</a>(tty->secondary) ||<a name=L179 href="source/kernel/chr_drv/tty_io.c#L179">179</a> (c=<a href="ident?i=LAST">LAST</a>(tty->secondary))==10 ||<a name=L180 href="source/kernel/chr_drv/tty_io.c#L180">180</a> c==<a href="ident?i=EOF_CHAR">EOF_CHAR</a>(tty))<a name=L181 href="source/kernel/chr_drv/tty_io.c#L181">181</a> continue;<a name=L182 href="source/kernel/chr_drv/tty_io.c#L182">182</a> if (<a href="ident?i=L_ECHO">L_ECHO</a>(tty)) {<a name=L183 href="source/kernel/chr_drv/tty_io.c#L183">183</a> if (c<32)<a name=L184 href="source/kernel/chr_drv/tty_io.c#L184">184</a> <a href="ident?i=PUTCH">PUTCH</a>(127,tty->write_q);<a name=L185 href="source/kernel/chr_drv/tty_io.c#L185">185</a> <a href="ident?i=PUTCH">PUTCH</a>(127,tty->write_q);<a name=L186 href="source/kernel/chr_drv/tty_io.c#L186">186</a> tty-><a href="ident?i=write">write</a>(tty);<a name=L187 href="source/kernel/chr_drv/tty_io.c#L187">187</a> }<a name=L188 href="source/kernel/chr_drv/tty_io.c#L188">188</a> <a href="ident?i=DEC">DEC</a>(tty->secondary.<a href="ident?i=head">head</a>);<a name=L189 href="source/kernel/chr_drv/tty_io.c#L189">189</a> continue;<a name=L190 href="source/kernel/chr_drv/tty_io.c#L190">190</a> }<a name=L191 href="source/kernel/chr_drv/tty_io.c#L191">191</a> if (c==<a href="ident?i=STOP_CHAR">STOP_CHAR</a>(tty)) {<a name=L192 href="source/kernel/chr_drv/tty_io.c#L192">192</a> tty->stopped=1;<a name=L193 href="source/kernel/chr_drv/tty_io.c#L193">193</a> continue;<a name=L194 href="source/kernel/chr_drv/tty_io.c#L194">194</a> }<a name=L195 href="source/kernel/chr_drv/tty_io.c#L195">195</a> if (c==<a href="ident?i=START_CHAR">START_CHAR</a>(tty)) {<a name=L196 href="source/kernel/chr_drv/tty_io.c#L196">196</a> tty->stopped=0;<a name=L197 href="source/kernel/chr_drv/tty_io.c#L197">197</a> continue;<a name=L198 href="source/kernel/chr_drv/tty_io.c#L198">198</a> }<a name=L199 href="source/kernel/chr_drv/tty_io.c#L199">199</a> }<a name=L200 href="source/kernel/chr_drv/tty_io.c#L200">200</a> if (<a href="ident?i=L_ISIG">L_ISIG</a>(tty)) {<a name=L201 href="source/kernel/chr_drv/tty_io.c#L201">201</a> if (c==<a href="ident?i=INTR_CHAR">INTR_CHAR</a>(tty)) {<a name=L202 href="source/kernel/chr_drv/tty_io.c#L202">202</a> <a href="ident?i=tty_intr">tty_intr</a>(tty,<a href="ident?i=INTMASK">INTMASK</a>);<a name=L203 href="source/kernel/chr_drv/tty_io.c#L203">203</a> continue;<a name=L204 href="source/kernel/chr_drv/tty_io.c#L204">204</a> }<a name=L205 href="source/kernel/chr_drv/tty_io.c#L205">205</a> if (c==<a href="ident?i=QUIT_CHAR">QUIT_CHAR</a>(tty)) {<a name=L206 href="source/kernel/chr_drv/tty_io.c#L206">206</a> <a href="ident?i=tty_intr">tty_intr</a>(tty,<a href="ident?i=QUITMASK">QUITMASK</a>);<a name=L207 href="source/kernel/chr_drv/tty_io.c#L207">207</a> continue;<a name=L208 href="source/kernel/chr_drv/tty_io.c#L208">208</a> }<a name=L209 href="source/kernel/chr_drv/tty_io.c#L209">209</a> }<a name=L210 href="source/kernel/chr_drv/tty_io.c#L210">210</a> if (c==10 || c==<a href="ident?i=EOF_CHAR">EOF_CHAR</a>(tty))<a name=L211 href="source/kernel/chr_drv/tty_io.c#L211">211</a> tty->secondary.data++;<a name=L212 href="source/kernel/chr_drv/tty_io.c#L212">212</a> if (<a href="ident?i=L_ECHO">L_ECHO</a>(tty)) {<a name=L213 href="source/kernel/chr_drv/tty_io.c#L213">213</a> if (c==10) {<a name=L214 href="source/kernel/chr_drv/tty_io.c#L214">214</a> <a href="ident?i=PUTCH">PUTCH</a>(10,tty->write_q);<a name=L215 href="source/kernel/chr_drv/tty_io.c#L215">215</a> <a href="ident?i=PUTCH">PUTCH</a>(13,tty->write_q);<a name=L216 href="source/kernel/chr_drv/tty_io.c#L216">216</a> } else if (c<32) {<a name=L217 href="source/kernel/chr_drv/tty_io.c#L217">217</a> if (<a href="ident?i=L_ECHOCTL">L_ECHOCTL</a>(tty)) {<a name=L218 href="source/kernel/chr_drv/tty_io.c#L218">218</a> <a href="ident?i=PUTCH">PUTCH</a>(<i>'^'</i>,tty->write_q);<a name=L219 href="source/kernel/chr_drv/tty_io.c#L219">219</a> <a href="ident?i=PUTCH">PUTCH</a>(c+64,tty->write_q);<a name=L220 href="source/kernel/chr_drv/tty_io.c#L220">220</a> }<a name=L221 href="source/kernel/chr_drv/tty_io.c#L221">221</a> } else<a name=L222 href="source/kernel/chr_drv/tty_io.c#L222">222</a> <a href="ident?i=PUTCH">PUTCH</a>(c,tty->write_q);<a name=L223 href="source/kernel/chr_drv/tty_io.c#L223">223</a> tty-><a href="ident?i=write">write</a>(tty);<a name=L224 href="source/kernel/chr_drv/tty_io.c#L224">224</a> }<a name=L225 href="source/kernel/chr_drv/tty_io.c#L225">225</a> <a href="ident?i=PUTCH">PUTCH</a>(c,tty->secondary);<a name=L226 href="source/kernel/chr_drv/tty_io.c#L226">226</a> }<a name=L227 href="source/kernel/chr_drv/tty_io.c#L227">227</a> <a href="ident?i=wake_up">wake_up</a>(&tty->secondary.proc_list);<a name=L228 href="source/kernel/chr_drv/tty_io.c#L228">228</a> }<a name=L229 href="source/kernel/chr_drv/tty_io.c#L229">229</a> <a name=L230 href="source/kernel/chr_drv/tty_io.c#L230">230</a> int <a href="ident?i=tty_read">tty_read</a>(unsigned channel, char * <a href="ident?i=buf">buf</a>, int nr)<a name=L231 href="source/kernel/chr_drv/tty_io.c#L231">231</a> {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -