[PATCH] for 2.4.9 console driver: user defined terminal answerbacks

Andy Greenhalgh (andy.greenhalgh@bazaar.uklinux.net)
Sun, 14 Oct 2001 11:39:33 +0100


I've put together a simple patch for the console driver of the 2.4.9
kernel
(listed below). The same patch can also be applied to the 2.2.17 kernel
but
I guess that's becoming less relevant. The patch enables what I believe
to
be correct vt102 answerback behaviour i.e. an answerback string of up to
20
characters in response to ascii ENQ (0x05). Later DEC terminals would
respond to an answerback request of \E[c if I remember rightly, however
I
have tried to remain faithful to the philosophy of providing a vt102
emulation. In truth I did patch this as well, but took it out after
succumbing to a puritanical whim. The answerback is user defined by
setting
the top most string in the kernel function key string table:
func_table[255]. This kernel data structure can be accessed by the
existing
console_ioctl interface. In practice users can set the answerback by the
use
of loadkeys (string F246).

All errors are of course my own and confident though I am, I would
suggest
you initially proceed with caution as I can not accept liability for any
untoward consequences :-(. Also, please CC any responses as
unfortunately I
am not subscribed to this mail list due to the limitations of eking out
an
existence on a humble dial-up connection.

Best wishes

Andy

--- console.c_orig_ Sun Sep 2 13:53:20 2001
+++ console.c Sun Sep 2 14:26:17 2001
@@ -113,7 +113,7 @@
* (such as cursor movement) and should not be displayed as a
* glyph unless the disp_ctrl mode is explicitly enabled.
*/
-#define CTRL_ACTION 0x0d00ff81
+#define CTRL_ACTION 0x0d00ffa1
#define CTRL_ALWAYS 0x0800f501 /* Cannot be overridden by disp_ctrl */

/*
@@ -1148,6 +1148,23 @@
respond_string(VT102ID, tty);
}

+/* User defined answerback: string F246 in loadkeys
+ Truncated at 20 chars for correct vt102 behavior */
+static inline void answerback(struct tty_struct * tty)
+{
+ char buf[21];
+
+ if (func_table[255]) {
+ if (strlen(func_table[255]) > 20) {
+ strncpy(buf, func_table[255], 20);
+ buf[20] = '\0';
+ respond_string(buf, tty);
+ }
+ else
+ respond_string(func_table[255], tty);
+ }
+}
+
void mouse_report(struct tty_struct * tty, int butt, int mrx, int mry)
{
char buf[8];
@@ -1430,6 +1447,9 @@
*/
switch (c) {
case 0:
+ return;
+ case 5:
+ answerback(tty);
return;
case 7:
if (bell_duration)

-- 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
The beer-cooled computer does not harm the ozone layer.
		-- John M. Ford, a.k.a. Dr. Mike

[If I can read my notes from the Ask Dr. Mike session at Baycon, I believe he added that the beer-cooled computer uses "Forget Only Memory". Ed.]

andy.greenhalgh@bazaar.uklinux.net +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/