From naddy@bigeye.rhein-neckar.de  Mon Feb 15 21:32:43 1999
Received: from news-ma.rhein-neckar.de (news-ma.rhein-neckar.de [193.197.90.3])
          by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id VAA04227
          for <FreeBSD-gnats-submit@freebsd.org>; Mon, 15 Feb 1999 21:32:41 -0800 (PST)
          (envelope-from naddy@bigeye.rhein-neckar.de)
Received: from mips.rhein-neckar.de (uucp@localhost)
	by news-ma.rhein-neckar.de (8.8.8/8.8.8) with bsmtp id GAA20389
	for FreeBSD-gnats-submit@freebsd.org; Tue, 16 Feb 1999 06:32:39 +0100 (CET)
	(envelope-from naddy@bigeye.rhein-neckar.de)
Received: from bigeye.rhein-neckar.de ([193.197.90.235]) by mips.rhein-neckar.de
	 with esmtp id m10Cavj-000WyYC
	(Debian Smail-3.2.0.101 1997-Dec-17 #2); Tue, 16 Feb 1999 04:12:11 +0100 (CET)
Received: (from naddy@localhost)
	by bigeye.rhein-neckar.de (8.9.3/8.9.3) id EAA00626;
	Tue, 16 Feb 1999 04:13:51 +0100 (CET)
	(envelope-from naddy)
Message-Id: <199902160313.EAA00626@bigeye.rhein-neckar.de>
Date: Tue, 16 Feb 1999 04:13:51 +0100 (CET)
From: Christian Weisgerber <naddy@mips.rhein-neckar.de>
Reply-To: naddy@mips.rhein-neckar.de
To: FreeBSD-gnats-submit@freebsd.org
Subject: [PATCH] syscons: switch to previous console
X-Send-Pr-Version: 3.2

>Number:         10113
>Category:       kern
>Synopsis:       [PATCH] syscons: switch to previous console
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    yokota
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Feb 15 21:40:01 PST 1999
>Closed-Date:    Wed Jun 23 01:25:42 PDT 1999
>Last-Modified:  Wed Jun 23 01:26:22 PDT 1999
>Originator:     Christian Weisgerber
>Release:        FreeBSD 4.0-CURRENT i386
>Organization:
>Environment:

>Description:

The syscons console driver has a special key to switch to the next
virtual console but none to switch to the previous console.

The appended patch adds this missing functionality. Files touched:
  sys/i386/include/console.h            console driver symbol PREV
  sys/dev/syscons/syscons.c             actual functionality
  usr.sbin/kbdcontrol/lex.h             internal symbol TPREV
  usr.sbin/kbdcontrol/lex.l             map "pscr" to TPREV
  usr.sbin/kbdcontrol/kbdcontrol.c      tie "pscr", TPREV, and PREV

>How-To-Repeat:

For testing purposes, I created a keymap with the switch previous/next
screen special keys on cursor left/right:

--- /usr/share/syscons/keymaps/us.iso.kbd	Mon Feb 15 20:21:50 1999
+++ test.kbd	Tue Feb 16 02:03:49 1999
@@ -99,8 +99,8 @@
   094   fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49  O
   095   fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50  O
   096   fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51  O
-  097   fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53  O
-  098   fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55  O
+  097   fkey53 pscr   pscr   pscr   fkey53 fkey53 fkey53 fkey53  O
+  098   fkey55 nscr   nscr   nscr   fkey55 fkey55 fkey55 fkey55  O
   099   fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57  O
   100   fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58  O
   101   fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59  O

>Fix:
	
--- sys/i386/include/console.h.orig	Sat Feb  6 13:33:53 1999
+++ sys/i386/include/console.h	Tue Feb 16 03:16:37 1999
@@ -440,6 +440,7 @@
 #define L_ACC		DCAR		/* last accent key		*/
 
 #define STBY		0x98		/* Go into standby mode (apm)   */
+#define PREV		0x99		/* switch to previous screen 	*/
 
 #define F(x)		((x)+F_FN-1)
 #define	S(x)		((x)+F_SCR-1)
--- sys/dev/syscons/syscons.c.orig	Sat Feb  6 13:33:48 1999
+++ sys/dev/syscons/syscons.c	Tue Feb 16 02:43:56 1999
@@ -3718,6 +3718,18 @@
 		}
 		break;
 
+	    case PREV:
+    		this_scr = get_scr_num();
+		for (i = (this_scr - 1 < 0) ? MAXCONS - 1 : this_scr - 1;
+                     i != this_scr; i = (i - 1 < 0) ? MAXCONS - 1 : i - 1) {
+		    struct tty *tp = VIRTUAL_TTY(i);
+		    if (tp->t_state & TS_ISOPEN) {
+			switch_scr(cur_console, i);
+			break;
+		    }
+		}
+		break;
+
 	    default:
 		if (KEYCHAR(c) >= F_SCR && KEYCHAR(c) <= L_SCR) {
 		    switch_scr(cur_console, KEYCHAR(c) - F_SCR);
--- usr.sbin/kbdcontrol/lex.h.orig	Mon Aug  3 13:33:22 1998
+++ usr.sbin/kbdcontrol/lex.h	Tue Feb 16 01:29:06 1999
@@ -53,6 +53,7 @@
 #define TSUSP		278
 #define TACC		279
 #define TSPSC		280
+#define TPREV		281
 
 extern int number;
 extern char letter;
--- usr.sbin/kbdcontrol/lex.l.orig	Thu Aug  6 11:44:23 1998
+++ usr.sbin/kbdcontrol/lex.l	Tue Feb 16 03:16:40 1999
@@ -51,6 +51,7 @@
 btab		{ return TBTAB; }
 lctrl|ctrl 	{ return TLCTR; }
 nscr 		{ return TNEXT; }
+pscr 		{ return TPREV; }
 rctrl 		{ return TRCTR; }
 ralt 		{ return TRALT; }
 alock 		{ return TALK; }
--- usr.sbin/kbdcontrol/kbdcontrol.c.orig	Sun Jan 24 02:38:37 1999
+++ usr.sbin/kbdcontrol/kbdcontrol.c	Tue Feb 16 03:24:54 1999
@@ -163,6 +163,8 @@
 		return LCTR | 0x100;
 	case TNEXT:
 		return NEXT | 0x100;
+	case TPREV:
+		return PREV | 0x100;
 	case TRCTR:
 		return RCTR | 0x100;
 	case TRALT:
@@ -360,6 +362,9 @@
 		break;
 	case NEXT | 0x100:
 		fprintf(fp, " nscr  ");
+		break;
+	case PREV | 0x100:
+		fprintf(fp, " pscr  ");
 		break;
 	case RCTR | 0x100:
 		fprintf(fp, " rctrl ");
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->yokota 
Responsible-Changed-By: yokota 
Responsible-Changed-When: Thu Mar 11 06:49:31 PST 1999 
Responsible-Changed-Why:  
I will incorporate this in the next syscons update. 
State-Changed-From-To: open->closed 
State-Changed-By: yokota 
State-Changed-When: Wed Jun 23 01:25:42 PDT 1999 
State-Changed-Why:  
Added to syscons.c rev 1.307.  Thanks. 
>Unformatted:
