From: Michael Haardt (michael@gandalf.moria)
Date: 04/06/93


From: michael@gandalf.moria (Michael Haardt)
Subject: [patch] Re: swapping Ctrl/Caps ??
Date: Tue, 06 Apr 1993 10:45:44 +0100

lok@cs.tu-berlin.de (Andreas Stang) writes:
> I spend the afternoon trying to get `Ctrl' on the `Caps Lock' key, but it
> didn't work. Is there anybody who has an Idea how to modify keyboard.c?
> (0.99pl6 and US-Keyboard)

The following patch works for me (German keyboard and 0.99.7). It swaps
the left control key with the caps lock key:

Michael (u31b3hs@pool.informatik.rwth-aachen.de)
==============================
*** kernel/chr_drv/keyboard.c~ Sun Apr 4 14:19:24 1993
--- kernel/chr_drv/keyboard.c Sun Apr 4 17:49:03 1993
***************
*** 26,31 ****
--- 26,33 ----
  #endif
  #endif
  
+ #define SWAP_CTRL_CAPS
+
  /*
   * The default IO slowdown is doing 'inb()'s from 0x61, which should be
   * safe. But as that is the keyboard controller chip address, we do our
***************
*** 190,196 ****
--- 192,207 ----
        if (kbd_dead(KGD_E0))
                set_kbd_flag(KG_RCTRL);
        else
+ #ifdef SWAP_CTRL_CAPS
+ {
+ if (kbd_flag(KG_CAPSLOCK))
+ return; /* key already pressed: defeat repeat */
+ set_kbd_flag(KG_CAPSLOCK);
+ chg_vc_kbd_flag(kbd,VC_CAPSLOCK);
+ }
+ #else
                set_kbd_flag(KG_LCTRL);
+ #endif
  }
  
  static void alt(int sc)
***************
*** 206,212 ****
--- 217,227 ----
        if (kbd_dead(KGD_E0))
                clr_kbd_flag(KG_RCTRL);
        else
+ #ifdef SWAP_CTRL_CAPS
+ clr_kbd_flag(KG_CAPSLOCK);
+ #else
                clr_kbd_flag(KG_LCTRL);
+ #endif
  }
  
  static void unalt(int sc)
***************
*** 244,258 ****
--- 259,281 ----
  
  static void caps(int sc)
  {
+ #ifdef SWAP_CTRL_CAPS
+ set_kbd_flag(KG_LCTRL);
+ #else
        if (kbd_flag(KG_CAPSLOCK))
                return; /* key already pressed: defeat repeat */
        set_kbd_flag(KG_CAPSLOCK);
        chg_vc_kbd_flag(kbd,VC_CAPSLOCK);
+ #endif
  }
  
  static void uncaps(int sc)
  {
+ #ifdef SWAP_CTRL_CAPS
+ clr_kbd_flag(KG_LCTRL);
+ #else
        clr_kbd_flag(KG_CAPSLOCK);
+ #endif
  }
  
  static void show_ptregs(void)