<a name="l1"></a><span class=cF0>The editor mostly stays in a </span><a href="/Wb/Kernel/SerialDev/Message.HC#l142"><span class=cF4>GetKey</span></a><span class=cF0>()/</span><a href="/Wb/Kernel/KeyDev.HC#l1"><span class=cF4>PutKey</span></a><span class=cF0>() loop. The putkey portion is
<a name="l6"></a></span><a href="/Wb/Kernel/KeyDev.HC#l70"><span class=cF4>KeyDevAdd</span></a><span class=cF0>() defines a putkey device with a priority. "Device" might be a
<a name="l11"></a></span><span class=cF2>0x20000000</span><span class=cF0> </span><a href="/Wb/Home/HomeKeyPlugIns.HC#l11"><span class=cF4>MyPutKey</span></a><span class=cF0>() user hndlr
<a name="l12"></a></span><span class=cF2>0x40000000</span><span class=cF0> </span><a href="/Wb/Kernel/KeyDev.HC#l108"><span class=cF4>KDInputFilterPutKey</span></a><span class=cF0>() for </span><a href="/Wb/Kernel/Job.HC#l482"><span class=cF4>In</span></a><span class=cF0>(), </span><a href="/Wb/Kernel/Job.HC#l464"><span class=cF4>InStr</span></a><span class=cF0>(), and </span><a href="/Wb/Kernel/Job.HC#l474"><span class=cF4>InFile</span></a><span class=cF0>() handling.
<a name="l13"></a></span><span class=cF2>0x60000000</span><span class=cF0> </span><a href="/Wb/Kernel/KeyDev.HC#l88"><span class=cF4>KDRawPutKey</span></a><span class=cF0>() nonwindowed direct to video mem debug output.
<a name="l19"></a></span><a href="/Wb/Kernel/KernelA.HH#l1367"><span class=cF4>CDoc</span></a><span class=cF2>.user_put_key</span><span class=cF0> and </span><a href="/Wb/Kernel/KernelA.HH#l1367"><span class=cF4>CDoc</span></a><span class=cF2>.user_put_s</span><span class=cF0> are call back routines which offer some
<a name="l20"></a>neat tricks. See </span><a href="/Wb/Apps/Psalmody/JukeBox.HC#l1"><span class=cF4>::/Apps/Psalmody/JukeBox.HC</span></a><span class=cF0>. There is a var </span><a href="/Wb/Kernel/KernelA.HH#l1367"><span class=cF4>CDoc</span></a><span class=cF2>.user_put_dat