# Keyboard Mapping for Atari Keyboards, German Layout
# ---------------------------------------------------
#
# Copyright 1994 Roman Hodek
#
# This file is subject to the terms and conditions of the GNU General Public
# License. See the file README.legal in the main directory of this archive
# for more details.
#
# Notes:
# ------
#
# This file assumes that the currently active mapping is the Atari default
# mapping (US layout) in my version as found in drivers/char/defkeymap.c
# (conditionalized to machine type). Only the necessary alternations are
# done!
#
# Dead keys (i.e. pressing ^ and e gives œ, an e with hat) are not
# used, because I consider this annoying. All characters needed for
# German are possible without deadkeys. If you want them, apply the following
# replacements:
# grave -> dead_grave
# apostrophe -> dead_acute
# asciicircum -> dead_circumflex
# asciitelde -> dead_tilde
#
# Lines commented out by '!' are settings that are done implicitly by
# loadkeys.
#
# There is no natural way to generate Meta codes for the characters [,],{,},
# @ and \, that already need Alt to be pressed together with one of the
# umlaut keys. I've choosen the following scheme, though it may not be
# very intuitive in all cases (who knows a better solution??):
# 1) The key with Alt (and maybe shift) gives the character engraved to the
# right (i.e. [,@,\,...)
# 2) The key with Control (and maybe shift) gives the control character
# corresponding the the character engraved to the _right_, if one exists.
# This happens because the umlaut characters have no corresponding control
# character anyway.
# 3) The key with Control and Alt (and maybe shift) gives the Meta equivalent
# (with 8. bit set or prepended by ESC) of the character engraved to the
# right. Again, Meta's of the umlaut characters do not exist, since they
# already have their 8. bit set.
# One could argue that it would be more consistent to require Alt and Control
# to be pressed to get the control characters (case 2). That's true, but in
# my opinion, it is even more inconsistent to generate Meta codes without the
# Alt key pressed (but just with Control). And it would be very bad, if the
# Meta versions of [,{,@,... could not be typed at all!
#
# I've kept the convention that the digit keys 2..8 on the main keyboard
# generate the control characters not corresponding to letters (^@, ^[ .. ^_
# and ^?=DEL) when pressed with Control. It is convention, too, that the shift
# key must not be pressed for this effect. Also, Meta+Control plus these keys
# give the Metas of these controls.
#
# The standard loadkeys (at least the version I have) doesn't understand the
# combination of Meta and Control in symbolic names (i.e. Meta_Control_a is
# invalid, but some names like Meta_Backspace or Meta_Tab are). For this
# reason, I replaced the offending names by their numeric equivalent. This
# depends on KT_META being 8!
#
# The umlaut keys cannot be set via ?diaeresis, because this would make them
# to be of type KT_LATIN1, and they should be type KT_LETTER to be affected
# by CAPSLOCK. Their definition is thus in hex :-(
#
keycode 2 = one exclam
! control keycode 2 = VoidSymbol
! shift control keycode 2 = VoidSymbol
alt keycode 2 = Meta_one
shift alt keycode 2 = Meta_exclam
keycode 3 = two quotedbl
control keycode 3 = nul # = Control_at
! shift control keycode 3 = VoidSymbol
alt keycode 3 = Meta_two
shift alt keycode 3 = Meta_quotedbl
alt control keycode 3 = 0x0800 # Meta_Control_at
keycode 4 = three section
control keycode 4 = Escape # = Control_bracketleft
! shift control keycode 4 = VoidSymbol
alt keycode 4 = Meta_three
! shift alt keycode 4 = VoidSymbol # already has 8. bit set!
alt control keycode 4 = Meta_Escape # = Meta_Control_bracketleft
keycode 5 = four dollar
control keycode 5 = Control_backslash
! shift control keycode 5 = VoidSymbol
alt keycode 5 = Meta_four
shift alt keycode 5 = Meta_dollar
alt control keycode 5 = 0x081c # Meta_Control_backslash
keycode 6 = five percent
control keycode 6 = Control_bracketright
! shift control keycode 6 = VoidSymbol
alt keycode 6 = Meta_five
shift alt keycode 6 = Meta_percent
alt control keycode 6 = 0x081d # Meta_Control_bracketright
keycode 7 = six ampersand
control keycode 7 = Control_asciicircum
! shift control keycode 7 = VoidSymbol
alt keycode 7 = Meta_six
shift alt keycode 7 = Meta_ampersand
alt control keycode 7 = 0x081e # Meta_Control_asciicircum
keycode 8 = seven slash
control keycode 8 = Control_underscore
! shift control keycode 8 = VoidSymbol
alt keycode 8 = Meta_seven
shift alt keycode 8 = Meta_slash
alt control keycode 8 = 0x081f # Meta_Control_underscore
keycode 9 = eight parenleft
control keycode 9 = Delete
! shift control keycode 9 = VoidSymbol
alt keycode 9 = Meta_eight
shift alt keycode 9 = Meta_parenleft
alt control keycode 9 = Meta_Delete
keycode 10 = nine parenright
! control keycode 10 = VoidSymbol
! shift control keycode 10 = VoidSymbol
alt keycode 10 = Meta_nine
shift alt keycode 10 = Meta_parenright
keycode 11 = zero equal
! control keycode 11 = VoidSymbol
! shift control keycode 11 = VoidSymbol
alt keycode 11 = Meta_zero
shift alt keycode 11 = Meta_equal
keycode 12 = ssharp question
! control keycode 12 = VoidSymbol
! shift control keycode 12 = VoidSymbol
! alt keycode 12 = VoidSymbol # already has 8. bit set!
shift alt keycode 12 = Meta_question
keycode 13 = apostrophe grave
! control keycode 13 = VoidSymbol
! shift control keycode 13 = VoidSymbol
alt keycode 13 = Meta_apostrophe
shift alt keycode 13 = Meta_grave
keycode 14 = Delete Delete
control keycode 14 = Delete
control shift keycode 14 = Delete
alt keycode 14 = Meta_Delete
alt shift keycode 14 = Meta_Delete
alt control keycode 14 = Meta_Delete
alt control shift keycode 14 = Meta_Delete
keycode 21 = z
# rest done by loadkeys!
keycode 26 = 0x0bfc 0x0bdc # udiaeresis Udiaeresis with type KT_LETTER
control keycode 26 = nul # = Control_at
shift control keycode 26 = Control_backslash
alt keycode 26 = at
shift alt keycode 26 = backslash
# Who knows a better way to implement these?
alt control keycode 26 = Meta_at
shift alt control keycode 26 = Meta_backslash
keycode 27 = plus asterisk
! control keycode 27 = VoidSymbol
! shift control keycode 27 = VoidSymbol
alt keycode 27 = Meta_plus
shift alt keycode 27 = Meta_asterisk
keycode 39 = 0x0bf6 0x0bd6 # odiaeresis Odiaeresis with type KT_LETTER
control keycode 39 = Escape # = Control_bracketleft
! shift control keycode 39 = VoidSymbol
alt keycode 39 = bracketleft
shift alt keycode 39 = braceleft
# Who knows a better way to implement these?
alt control keycode 39 = Meta_bracketleft
shift alt control keycode 39 = Meta_braceleft
keycode 40 = 0x0be4 0x0bc4 # adiaeresis Adiaeresis with type KT_LETTER
control keycode 40 = Control_bracketright
! shift control keycode 40 = VoidSymbol
alt keycode 40 = bracketright
shift alt keycode 40 = braceright
# Who knows a better way to implement these?
alt control keycode 40 = Meta_bracketright
shift alt control keycode 40 = Meta_braceright
keycode 41 = numbersign asciicircum
control keycode 41 = Control_asciicircum # for convenience
shift control keycode 41 = Control_asciicircum
alt keycode 41 = Meta_numbersign
shift alt keycode 41 = Meta_asciicircum
alt control keycode 41 = 0x081e # Meta_Control_asciicircum
shift alt control keycode 41 = 0x081e # Meta_Control_asciicircum
keycode 43 = asciitilde bar
! control keycode 43 = VoidSymbol
! shift control keycode 43 = VoidSymbol
alt keycode 43 = Meta_asciitilde
shift alt keycode 43 = Meta_bar
keycode 44 = y
# rest done by loadkeys!
keycode 51 = comma semicolon
! control keycode 51 = VoidSymbol
! shift control keycode 51 = VoidSymbol
alt keycode 51 = Meta_comma
shift alt keycode 51 = Meta_semicolon
keycode 52 = period colon
! control keycode 52 = VoidSymbol
! shift control keycode 52 = VoidSymbol
alt keycode 52 = Meta_period
shift alt keycode 52 = Meta_colon
keycode 53 = minus underscore
control keycode 53 = Control_underscore # for convenience
shift control keycode 53 = Control_underscore
alt keycode 53 = Meta_minus
shift alt keycode 53 = Meta_underscore
alt control keycode 53 = 0x081f # Meta_Control_underscore
shift alt control keycode 53 = 0x081f # Meta_Control_underscore
# These two are for Emacs-style editing: Alt+Cursor Left/Right send
# Meta b or f to jump over words.
alt keycode 75 = Meta_b
alt keycode 77 = Meta_f
keycode 83 = Remove Remove
control keycode 83 = Remove
control shift keycode 83 = Remove
alt keycode 83 = Meta_d
alt shift keycode 83 = Meta_d
alt control keycode 83 = Boot
alt shift control keycode 83 = 0x0804 # Meta_Control_d
keycode 96 = less greater
! control keycode 96 = VoidSymbol
! shift control keycode 96 = VoidSymbol
alt keycode 96 = Meta_less
shift alt keycode 96 = Meta_greater