summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorflorian <florian@b9310e46-f624-0410-8ea1-cfbb3a30dc96>2008-05-06 11:41:19 +0000
committerflorian <florian@b9310e46-f624-0410-8ea1-cfbb3a30dc96>2008-05-06 11:41:19 +0000
commitea758f5173b5a8c16407f334b498eee21a7d1df6 (patch)
treeac4aa815d30dbcfd139b89efbae37910735e54c2
parent154796bb5b276fe4ea11b7a1e878ada8a16024e1 (diff)
git-svn-id: https://svn.neo-layout.org@505 b9310e46-f624-0410-8ea1-cfbb3a30dc96
-rw-r--r--windows/README.txt23
-rw-r--r--windows/autohotkey/README.txt86
-rw-r--r--windows/autohotkey/neo20-all-in-one.ahk3198
-rw-r--r--windows/autohotkey/neo20-all-in-one.exebin0 -> 222462 bytes
-rw-r--r--windows/autohotkey/neo20_mod-test.ahk2210
-rw-r--r--windows/kbdneo2/Quelldateien/README.txt17
-rw-r--r--windows/kbdneo2/Quelldateien/kbdneo2.c804
-rw-r--r--windows/kbdneo2/Quelldateien/kbdneo2.def4
-rw-r--r--windows/kbdneo2/Quelldateien/kbdneo2.h109
-rw-r--r--windows/kbdneo2/Quelldateien/kbdneo2.rc11
-rw-r--r--windows/kbdneo2/Quelldateien/makefile15
-rw-r--r--windows/kbdneo2/Quelldateien/makefile.inc1
-rw-r--r--windows/kbdneo2/Quelldateien/sources2
-rw-r--r--windows/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dllbin0 -> 9728 bytes
-rw-r--r--windows/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dllbin0 -> 9728 bytes
-rw-r--r--windows/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dllbin0 -> 9728 bytes
-rw-r--r--windows/kbdneo2/Treiber/64bit_Windows_Server_2003_und_Windows_XP/NEO20.dllbin0 -> 10752 bytes
-rw-r--r--windows/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dllbin0 -> 10752 bytes
-rw-r--r--windows/kbdneo2/Treiber/README.txt16
-rw-r--r--windows/msklc/NEO20_amd64.msibin0 -> 114688 bytes
-rw-r--r--windows/msklc/NEO20_i386.msibin0 -> 114688 bytes
-rw-r--r--windows/msklc/NEO20_ia64.msibin0 -> 114688 bytes
-rw-r--r--windows/msklc/README.txt35
-rw-r--r--windows/msklc/TODO.txt22
-rw-r--r--windows/msklc/amd64/NEO20.dllbin0 -> 9216 bytes
-rw-r--r--windows/msklc/i386/NEO20.dllbin0 -> 8192 bytes
-rw-r--r--windows/msklc/ia64/NEO20.dllbin0 -> 9728 bytes
-rw-r--r--windows/msklc/setup.exebin0 -> 142848 bytes
-rw-r--r--windows/msklc/wow64/NEO20.dllbin0 -> 9216 bytes
-rw-r--r--windows/neo_portable.zipbin0 -> 442716 bytes
30 files changed, 6553 insertions, 0 deletions
diff --git a/windows/README.txt b/windows/README.txt
new file mode 100644
index 0000000..528c668
--- /dev/null
+++ b/windows/README.txt
@@ -0,0 +1,23 @@
+== Neo 2.0 für Windows ==
+Für viele Windowsversionen sind hier Treiber zu finden.
+
+== Windows 98 ==
+Für Windows 95 und 98 gibt es nur die Version 1 von NEO. Und zwar hier:
+http://www.eigenheimstrasse.de:8668/space/Computerecke/NEO-Tastaturlayout/Download/Windows
+
+
+
+
+== autohotkey ==
+Hierfür braucht man keine Administratorrechte, es muss jedoch zuerst ein Programm namens „autohotkey“ (http://www.autohotkey.com) installiert werden. Dazu benötigt man keine Administratorrechte, wenn man das Programm beispielsweise in das Verzeichnis „Eigene Dateien“ installiert.
+
+== kbdneo2 ==
+Hier entsteht mit Hilfe des WinDDK (http://www.microsoft.com/whdc/devtools/ddk/default.mspx) ein Windowstreiber mit allen 6 Ebenen, der also der MSKLC-Variante überlegen ist.
+In dem Ordner befinden sich der Treiber für viele Windowsversionen und auch die Quelldateien. Bitte die jeweilige README.txt beachten.
+
+== msklc ==
+Im Verzeichnis msklc sind Dateien, die mit dem MS Keyboard Layout Creator erstellt wurden. Nach Installation der dort abgelegten Dateien, ist das NEO-Layout in das Windowssystem integriert, als wäre es eins der vielen anderen Layouts verschiedener Sprachen. Man benötigt für die Installation jedoch Administratorrechte, weshalb man diese Variante nicht überall installieren kann. Außerdem ist diese Variante nicht mehr aktuell.
+
+== neo_portable.zip ==
+Wenn man den Inhalt des zip-Archivs auf einen USB-Stick entpackt, startet sich
+Neo automatisch, sobald man den USB-Stick in den USB-Port steckt. \ No newline at end of file
diff --git a/windows/autohotkey/README.txt b/windows/autohotkey/README.txt
new file mode 100644
index 0000000..4b4c207
--- /dev/null
+++ b/windows/autohotkey/README.txt
@@ -0,0 +1,86 @@
+Version 24.02.2008
+
+== Installation ==
+=== Direkte Installation ===
+Einfach das Archiv neo20-all-in-one.exe herunterladen und die Datei irgendwo
+speichern (am besten auf dem Desktop z.B.). Danach einen Doppelklick auf
+diese .exe-Datei und NEO steht in voller Funktionalität zur Verfügung!
+Das alles geht ohne Admin-Rechte und ist auf jedem Rechner sofort ausführbar.
+Achtung: Da sich NEO in der Entwicklung befindet, kann es vorkommen, dass die
+exe-Datei gegenüber der Datei neo20-all-in-one.ahk leicht veraltet sein kann.
+Entwickler sollten daher Autohotkey selbst runterladen, wie unten beschrieben.
+
+Um kurzzeitig zu QWERTZ zu wechseln, kann mit Shift+Pause das Skript pausiert
+werden.
+
+Momentan befindet sich in der Testphase, ob die 6. Ebene über Shift+Mod4 oder
+über Mod3+Mod4 angesprochen werden soll (Shift+Mod4 zum Markieren bleibt
+erhalten). Die Datei neo20_mod-test.ahk spricht die 6. Ebene über Mod3+Mod4 an,
+ist jedoch nicht aktuell.
+
+=== Autohotkey herunter laden ===
+Man braucht als erstes das Programm namens »autohotkey«
+(http://www.autohotkey.com/download/AutohotkeyInstall.exe).
+Um dieses zu installieren benötigt man KEINE Administratorrechte, wenn man das
+Programm beispielsweise in das Verzeichnis »Eigene Dateien/NEO« installiert.
+Oder in ein anderes Verzeichnis, für das man Schreibrechte hat.
+
+=== ahk-Dateien ===
+Danach kann man das ahk-Skript »neo20-all-in-one.ahk«
+mit einem Doppelklick starten. Man erhält dann ein Systray-Icon, mit dem man
+das Skript vorübergehend deaktivieren (Suspend) oder komplett beenden kann.
+
+Wenn das Öffnen nicht direkt funktioniert: Öffnen mit -> Autohotkey.exe
+auswählen -> Immer mit diesem Programm öffnen.
+
+=== Automatischer Start ===
+Bei Bedarf kann man sich eine Verknüpfung mit neo20-all-in-one.ahk in den
+Autostart-Ordner legen, dann hat man die Belegung direkt bei der Anmeldung.
+
+== Wie es funktioniert ==
+Das Programm kann alle Tastendrucke abfangen und statt dessen andere Tasten
+simulieren. Die Zeile
+ a::send b
+fängt z. B. die Taste »a« ab und sendet statt dessen ein »b«.
+Die ahk-Dateien lassen sich mit einem Texteditor bearbeiten, man muss
+dann nur das Skript neu starten um die Änderungen zu übernehmen.
+
+== Bekannte Fehler ==
+Da die Compose-Taste auf rechter Mod3 + Tab liegt, mußte die Tabulator-Taste
+umgemappt werden. Dadurch funktioniert leider die ShiftAltTab nicht mehr.
+AltTab reagiert hingegen wie gewohnt.
+
+Bisher reagieren nur die Buchstaben der 1. und 2. Ebene richtig auf
+CapsLock (also immer groß schreiben – CapsLock erreicht man unter Neo, wenn
+man erst die rechte und dann die linke Mod3-Tasten gleichzeitig drückt).
+
+== Ziffernblock ==
+Der Ziffernblock reagiert nicht auf Tastenkombinationen mit Strg, Alt usw.
+
+Der Ziffernblock auf der 2. Ebene ist wahlweise
+- bei AUSgeschaltetem Numlock
+- bei EINgeschaltetem Numlock mit Shift
+zu erreichen.
+Der Ziffernblock auf der 3. Ebene funktioniert bei EINgeschaltetem
+Numlock mit Mod3 (Caps/#).
+Der Ziffernblock auf der 4. Ebene ist wahlweise
+- bei AUSgeschaltetem Numlock mit Mod3 + Shift
+- bei EINgeschaltetem Numlock über Mod4
+zu erreichen.
+Da die 2. Ebene über Shift ebenfalls bei EINgeschaltetem Numlock
+funktioniert ist das Ausschalten des Ziffernblocks nicht unbedingt
+nötig.
+
+== Besonderheiten bei der ahk-Windowsversion von Neo ==
+Ebene 4 des Ziffernblocks lässt sich außer über Mod3+Shift auch über
+Mod4 ansprechen.
+
+== Warnung ==
+ACHTUNG! Bei Windows ist folgendes festgelegt:
+AltGr + Pos1 = Abmelden
+AltGr + Ende = Computer ausschalten
+--> diese Kombinationen treten auf bei AUSgeschaltetem Numlock mit Mod4
+
+== FAQ ==
+Bei Problemen erst mal in die FAQ schauen, das meiste ist bekannt.
+Hier: https://neo.eigenheimstrasse.de/svn/FAQ.txt
diff --git a/windows/autohotkey/neo20-all-in-one.ahk b/windows/autohotkey/neo20-all-in-one.ahk
new file mode 100644
index 0000000..8a30849
--- /dev/null
+++ b/windows/autohotkey/neo20-all-in-one.ahk
@@ -0,0 +1,3198 @@
+/*
+ Titel: NEO 2.0 beta Autohotkey-Treiber
+ $Revision: 490 $
+ $Date: 2008-04-19 22:51:27 +0200 (Sa, 19 Apr 2008) $
+ Autor: Stefan Mayer <stm (at) neo-layout.org>
+ Basiert auf: neo20-all-in-one.ahk vom 29.06.2007
+
+ TODO: - ausgiebig testen...
+ - Menü des Tasksymbols
+ - Bessere Lösung für das leeren von PriorDeadKey finden, damit die Sondertasten
+ nicht mehr abgefangen werden müssen.
+ - Ebene 4 und 5 tauschen (im Programmcode, in der Doku ists schon)
+ - CapsLock auf 1. und 2. Ebene einbauen:
+ Die Buchstaben reagieren richtig auf CapsLock, da hier "sendinput {blind}"
+ verwendet wird. Bei anderen Tasten muss CapsLock in der ersten und zweiten Ebene
+ explizit abgefragt werden.
+ (Lässt sich das elegant in eine Funktion auslagern?)
+ Ideen: - Symbol ändern (Neo-Logo abwarten)
+ - bei Ebene 4 rechte Hand (Numpad) z.B. Numpad5 statt 5 senden
+ CHANGES: - SUBSCRIPT von 0 bis 9 sowie (auf Ziffernblock) + und -
+ • auch bei Ziffernblock auf der 5. Ebene
+ - Kein Parsen über die Zwischenablage mehr
+ - Vista-kompatibel
+ - Compose-Taste
+ • Brüche (auf Zahlenreihe und Hardware-Ziffernblock)
+ • römische Zahlen
+ • Ligaturen und Copyright
+*/
+
+; aus Noras script kopiert:
+#usehook on
+#singleinstance force
+#LTrim
+ ; Quelltext kann eingerückt werden,
+ ; msgbox ist trotzdem linksbündig
+
+SetTitleMatchMode 2
+SendMode InputThenPlay
+
+name = Neo 2.0
+enable = Aktiviere %name%
+disable = Deaktiviere %name%
+
+; Überprüfung auf deutsches Tastaturlayout
+; ----------------------------------------
+
+regread, inputlocale, HKEY_CURRENT_USER, Keyboard Layout\Preload, 1
+regread, inputlocalealias, HKEY_CURRENT_USER
+ , Keyboard Layout\Substitutes, %inputlocale%
+if inputlocalealias <>
+ inputlocale = %inputlocalealias%
+if inputlocale <> 00000407
+{
+ suspend
+ regread, inputlocale, HKEY_LOCAL_MACHINE
+ , SYSTEM\CurrentControlSet\Control\Keyboard Layouts\%inputlocale%
+ , Layout Text
+ msgbox, 48, Warnung!,
+ (
+ Nicht kompatibles Tastaturlayout:
+ `t%inputlocale%
+ `nDas deutsche QWERTZ muss als Standardlayout eingestellt
+ sein, damit %name% wie erwartet funktioniert.
+ `nÄndern Sie die Tastatureinstellung unter
+ `tSystemsteuerung
+ `t-> Regions- und Sprachoptionen
+ `t-> Sprachen
+ `t-> Details... `n
+ )
+ exitapp
+}
+
+; Menü des Systray-Icons
+; ----------------------
+
+menu, tray, nostandard
+menu, tray, add, Öffnen, open
+ menu, helpmenu, add, About, about
+ menu, helpmenu, add, Autohotkey-Hilfe, help
+ menu, helpmenu, add
+ menu, helpmenu, add, http://&autohotkey.com/, autohotkey
+ menu, helpmenu, add, http://www.neo-layout.org/, neo
+ menu, tray, add, Hilfe, :helpmenu
+menu, tray, add
+menu, tray, add, %disable%, togglesuspend
+menu, tray, default, %disable%
+menu, tray, add
+menu, tray, add, Edit, edit
+menu, tray, add, Reload, reload
+menu, tray, add
+menu, tray, add, Nicht im Systray anzeigen, hide
+menu, tray, add, %name% beenden, exitprogram
+menu, tray, tip, %name%
+
+
+/*
+ Variablen initialisieren
+*/
+
+Ebene = 1
+PriorDeadKey := ""
+
+
+/*
+ ------------------------------------------------------
+ Modifier
+ ------------------------------------------------------
+*/
+
+; CapsLock durch Mod3+Mod3
+*#::
+*CapsLock::
+ if GetKeyState("#","P") and GetKeyState("CapsLock","P")
+ {
+ if GetKeyState("CapsLock","T")
+ {
+ setcapslockstate, off
+ }
+ else
+ {
+ setcapslockstate, on
+ }
+ }
+return
+
+; KP_Decimal durch Mod4+Mod4
+*<::
+*SC138::
+ if GetKeyState("<","P") and GetKeyState("SC138","P")
+ {
+ send {numpaddot}
+ }
+ return
+
+/*
+ Ablauf bei toten Tasten:
+ 1. Ebene Aktualisieren
+ 2. Abhängig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen
+
+ Ablauf bei "lebenden" (sagt man das?) Tasten:
+ 1. Ebene Aktualisieren
+ 2. Abhängig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben
+ 3. "PriorDeadKey" mit leerem String überschreiben
+
+ ------------------------------------------------------
+ Reihe 1
+ ------------------------------------------------------
+*/
+
+*^::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ SendUnicodeChar(0x02C6) ; circumflex, tot
+ PriorDeadKey := "c1"
+ }
+ else if Ebene = 2
+ {
+ SendUnicodeChar(0x02C7) ; caron, tot
+ PriorDeadKey := "c2"
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x02D8) ; brevis
+ PriorDeadKey := "c3"
+ }
+ else if Ebene = 4
+ {
+ send - ; querstrich, tot
+ PriorDeadKey := "c4"
+ }
+ else if Ebene = 5
+ {
+ SendUnicodeChar(0x00B7) ; Mittenpunkt, tot
+ PriorDeadKey := "c5"
+ }
+ else if Ebene = 6
+ {
+ Send . ; punkt darunter (colon)
+ PriorDeadKey := "c6"
+ }
+return
+
+*1::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex 1
+ BSSendUnicodeChar(0x00B9)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2081)
+ Else If (CompKey = "r_small_1")
+ Comp3UnicodeChar(0x217A) ; römisch xi
+ Else If (CompKey = "r_capital_1")
+ Comp3UnicodeChar(0x216A) ; römisch XI
+ Else
+ send {blind}1
+ If (PriorDeadKey = "comp")
+ CompKey := "1"
+ Else If (CompKey = "r_small")
+ CompKey := "r_small_1"
+ Else If (CompKey = "r_capital")
+ CompKey := "r_capital_1"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send °
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x2640) ; Piktogramm weiblich
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ SendUnicodeChar(0x2022) ; bullet
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*2::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00B2)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2082)
+ Else If (CompKey = "r_small")
+ CompUnicodeChar(0x2171) ; römisch ii
+ Else If (CompKey = "r_capital")
+ CompUnicodeChar(0x2161) ; römisch II
+ Else If (CompKey = "r_small_1")
+ Comp3UnicodeChar(0x217B) ; römisch xii
+ Else If (CompKey = "r_capital_1")
+ Comp3UnicodeChar(0x216B) ; römisch XII
+ Else
+ send {blind}2
+ If (PriorDeadKey = "comp")
+ CompKey := "2"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ SendUnicodeChar(0x2116) ; numero
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x26A5) ; Piktogramm Zwitter
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ SendUnicodeChar(0x2023) ; aufzaehlungspfeil
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*3::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00B3)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2083)
+ Else If (CompKey = "1")
+ CompUnicodeChar(0x2153) ; 1/3
+ Else If (CompKey = "2")
+ CompUnicodeChar(0x2154) ; 2/3
+ Else If (CompKey = "r_small")
+ CompUnicodeChar(0x2172) ; römisch iii
+ Else If (CompKey = "r_capital")
+ CompUnicodeChar(0x2162) ; römisch III
+ Else
+ send {blind}3
+ If (PriorDeadKey = "comp")
+ CompKey := "3"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send §
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x2642) ; Piktogramm männlich
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*4::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2074)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2084)
+ Else If (CompKey = "r_small")
+ CompUnicodeChar(0x2173) ; römisch iv
+ Else If (CompKey = "r_capital")
+ CompUnicodeChar(0x2163) ; römisch IV
+ Else
+ send {blind}4
+ If (PriorDeadKey = "comp")
+ CompKey := "4"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send »
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send ›
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Send {PgUp} ; Prev
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ Send +{Prev}
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*5::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2075)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2085)
+ Else If (CompKey = "1")
+ CompUnicodeChar(0x2155) ; 1/5
+ Else If (CompKey = "2")
+ CompUnicodeChar(0x2156) ; 2/5
+ Else If (CompKey = "3")
+ CompUnicodeChar(0x2157) ; 3/5
+ Else If (CompKey = "4")
+ CompUnicodeChar(0x2158) ; 4/5
+ Else If (CompKey = "r_small")
+ CompUnicodeChar(0x2174) ; römisch v
+ Else If (CompKey = "r_capital")
+ CompUnicodeChar(0x2164) ; römisch V
+ Else
+ send {blind}5
+ If (PriorDeadKey = "comp")
+ CompKey := "5"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send «
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send ‹
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x21D2) ; Implikation
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*6::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2076)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2086)
+ Else If (CompKey = "1")
+ CompUnicodeChar(0x2159) ; 1/6
+ Else If (CompKey = "5")
+ CompUnicodeChar(0x215A) ; 5/6
+ Else If (CompKey = "r_small")
+ CompUnicodeChar(0x2175) ; römisch vi
+ Else If (CompKey = "r_capital")
+ CompUnicodeChar(0x2165) ; römisch VI
+ Else
+ send {blind}6
+ If (PriorDeadKey = "comp")
+ CompKey := "6"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send €
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send £
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ send ¤
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x21D4) ; Äquivalenz
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*7::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2077)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2087)
+ Else If (CompKey = "r_small")
+ CompUnicodeChar(0x2176) ; römisch vii
+ Else If (CompKey = "r_capital")
+ CompUnicodeChar(0x2166) ; römisch VII
+ Else
+ send {blind}7
+ If (PriorDeadKey = "comp")
+ CompKey := "7"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send $
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send ¢
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ send ¥CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ Send ¬
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*8::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2078)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2088)
+ Else If (CompKey = "1")
+ CompUnicodeChar(0x215B) ; 1/8
+ Else If (CompKey = "3")
+ CompUnicodeChar(0x215C) ; 3/8
+ Else If (CompKey = "5")
+ CompUnicodeChar(0x215D) ; 5/8
+ Else If (CompKey = "7")
+ CompUnicodeChar(0x215E) ; 7/8
+ Else If (CompKey = "r_small")
+ CompUnicodeChar(0x2177) ; römisch viii
+ Else If (CompKey = "r_capital")
+ CompUnicodeChar(0x2167) ; römisch VIII
+ Else
+ send {blind}8
+ If (PriorDeadKey = "comp")
+ CompKey := "8"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send „
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send ‚
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Send /
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x2203) ; Existenzquantor
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*9::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2079)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2089)
+ Else If (CompKey = "r_small")
+ CompUnicodeChar(0x2178) ; römisch ix
+ Else If (CompKey = "r_capital")
+ CompUnicodeChar(0x2168) ; römisch IX
+ Else
+ send {blind}9
+ If (PriorDeadKey = "comp")
+ CompKey := "9"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send “
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send ‘
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Send *
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x2200) ; Allquantor
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*0::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2070)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2080)
+ Else If (CompKey = "r_small_1")
+ Comp3UnicodeChar(0x2179) ; römisch x
+ Else If (CompKey = "r_capital_1")
+ Comp3UnicodeChar(0x2169) ; römisch X
+ Else
+ send {blind}0
+ If (PriorDeadKey = "comp")
+ CompKey := "0"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send ”
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send ’
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Send -
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x2228) ; logisch oder
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*ß::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}- ; Bind
+ else if Ebene = 2
+ SendUnicodeChar(0x2013) ; Ged
+ else if Ebene = 3
+ SendUnicodeChar(0x2014)
+ else if Ebene = 4
+ SendUnicodeChar(0x254C)
+ else if Ebene = 5
+ SendUnicodeChar(0x2011)
+ else if Ebene = 6
+ SendUnicodeChar(0x2227) ; logisch und
+ PriorDeadKey := "" CompKey := ""
+return
+
+*´::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {´}{space} ; akut, tot
+ PriorDeadKey := "a1"
+ }
+ else if Ebene = 2
+ {
+ send ``{space}
+ PriorDeadKey := "a2"
+ }
+ else if Ebene = 3
+ {
+ send ¸ ; cedilla
+ PriorDeadKey := "a3"
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x02DB) ; ogonek
+ PriorDeadKey := "a4"
+ }
+ else if Ebene = 5
+ {
+ SendUnicodeChar(0x02D9) ; punkt oben drüber
+ PriorDeadKey := "a5"
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x02DA) ; ring obendrauf
+ PriorDeadKey := "a6"
+ }
+return
+
+
+/*
+ ------------------------------------------------------
+ Reihe 2
+ ------------------------------------------------------
+*/
+
+*q::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}x
+ else if Ebene = 2
+ sendinput {blind}X
+ else if Ebene = 4
+ SendUnicodeChar(0x03BE) ;xi
+ else if Ebene = 6
+ SendUnicodeChar(0x039E) ; Xi
+ PriorDeadKey := "" CompKey := ""
+return
+
+
+*w::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E7F)
+ Else
+ sendinput {blind}v
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E7E)
+ Else
+ sendinput {blind}V
+ }
+ else if Ebene = 3
+ send _
+ else if Ebene = 5
+ Send {Backspace}
+ else if Ebene = 6
+ Send +{Backspace}
+ PriorDeadKey := "" CompKey := ""
+return
+
+
+
+*e::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x0142)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x013A)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x013E)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x013C)
+ Else If (PriorDeadKey = "c5") ; Mittenpunkt
+ BSSendUnicodeChar(0x0140)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E37)
+ Else
+ sendinput {blind}l
+ If (PriorDeadKey = "comp") ; compose
+ CompKey := "l_small"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0139)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x013D)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x013B)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x0141)
+ Else If (PriorDeadKey = "c5") ; Mittenpunkt
+ BSSendUnicodeChar(0x013F)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E36)
+ Else
+ sendinput {blind}L
+ If (PriorDeadKey = "comp") ; compose
+ CompKey := "l_capital"
+ Else CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send [
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x03BB) ;lambda
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Sendinput {Blind}{Up}
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ Sendinput {Blind}+{Up}
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+
+*r::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0109)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x010D)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0107)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x00E7)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x010B)
+ Else If ( (CompKey = "o_small") or (CompKey = "o_capital") )
+ Send {bs}©
+ Else
+ sendinput {blind}c
+ If (PriorDeadKey = "comp")
+ CompKey := "c_small"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0108)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x010C)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0106)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x00E6)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x010A)
+ Else If ( (CompKey = "o_small") or (CompKey = "o_capital") )
+ Send {bs}©
+ Else
+ sendinput {blind}C
+ If (PriorDeadKey = "comp")
+ CompKey = "c_capital"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send ]
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x03C7) ;chi
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Send {Del}
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x039B) ; Lambda
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*t::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0175)
+ Else
+ sendinput {blind}w
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0174)
+ Else
+ sendinput {blind}W
+ }
+ else if Ebene = 3
+ send {^}{space} ; untot
+ else if Ebene = 5
+ Send {Insert}
+ else if Ebene = 6
+ Send +{Insert}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*z::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0137)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E33)
+ Else
+ sendinput {blind}k
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0136)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E32)
+ Else
+ sendinput {blind}K
+ }
+ else if Ebene = 3
+ sendraw !
+ else if Ebene = 4
+ SendUnicodeChar(0x03BA) ;kappa
+ else if Ebene = 5
+ Send ¡
+ PriorDeadKey := "" CompKey := ""
+return
+
+*u::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0125)
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0127)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E23)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E25)
+ Else sendinput {blind}h
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0124)
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0126)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E22)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E24)
+ Else sendinput {blind}H
+ }
+ else if Ebene = 3
+ {
+ If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x2264) ; kleiner gleich
+ Else
+ send {blind}<
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x03C8) ;psi
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2077)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2087)
+ Else
+ Send 7
+ }
+ else if Ebene = 6
+ SendUnicodeChar(0x03A8) ; Psi
+ PriorDeadKey := "" CompKey := ""
+return
+
+*i::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x011D)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x011F)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0123)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0121)
+ Else sendinput {blind}g
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x011C)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x011E)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0122)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0120)
+ Else sendinput {blind}G
+ }
+ else if Ebene = 3
+ {
+ If (PriorDeadKey = "c4") ; Querstrich
+ SendUnicodeChar(0x2265) ; größer gleich
+ Else
+ send >
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x03B3) ;gamma
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2078)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2088)
+ Else
+ Send 8
+ }
+ else if Ebene = 6
+ SendUnicodeChar(0x0393) ; Gamma
+ PriorDeadKey := "" CompKey := ""
+return
+
+*o::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "t5") ; durchgestrichen
+ BSSendUnicodeChar(0x0192)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E1F)
+ Else sendinput {blind}f
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "t5") ; durchgestrichen
+ BSSendUnicodeChar(0x0191)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E1E)
+ Else sendinput {blind}F
+ }
+ else if Ebene = 3
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2259) ; entspricht
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x2245) ; ungefähr gleich
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x2260) ; ungleich
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x2261) ; identisch
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x225A) ; EQUIANGULAR TO
+ Else If (PriorDeadKey = "a6") ; ring drüber
+ BSSendUnicodeChar(0x2257) ; ring equal to
+ Else
+ send `=
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x03C6) ;phi
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2079)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2089)
+ Else
+ Send 9
+ }
+ else if Ebene = 6
+ SendUnicodeChar(0x03A6) ; Phi
+ PriorDeadKey := "" CompKey := ""
+return
+
+*p::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}q
+ else if Ebene = 2
+ sendinput {blind}Q
+ else if Ebene = 3
+ send {&}
+ else if Ebene = 4
+ SendUnicodeChar(0x0278) ; Varphi? (latin letter phi)
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x207A)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x208A)
+ Else
+ Send {+}
+ }
+ else if Ebene = 6
+ SendUnicodeChar(0x2202) ; "geschweiftes d" (partielle Ableitung)
+ PriorDeadKey := "" CompKey := ""
+return
+
+*ü::
+ EbeneAktualisieren()
+ if Ebene = 1
+ if GetKeyState("CapsLock","T")
+ {
+ SendUnicodeChar(0x1E9E) ; versal-ß
+ }
+ else
+ {
+ send ß
+ }
+ else if Ebene = 2
+ if GetKeyState("CapsLock","T")
+ {
+ send ß
+ }
+ else
+ {
+ SendUnicodeChar(0x1E9E) ; versal-ß
+ }
+ else if Ebene = 3
+ SendUnicodeChar(0x017F) ; langes s
+ else if Ebene = 4
+ SendUnicodeChar(0x03C2) ; varsigma
+ else if Ebene = 5
+ SendUnicodeChar(0x0259) ; schwa
+ else if Ebene = 6
+ SendUnicodeChar(0x018F) ; Schwa
+ PriorDeadKey := "" CompKey := ""
+return
+
+
+*+::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ SendUnicodeChar(0x02DC) ; tilde, tot
+ PriorDeadKey := "t1"
+ }
+ else if Ebene = 2
+ {
+ SendUnicodeChar(0x00AF) ; macron, tot
+ PriorDeadKey := "t2"
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x00A8) ; Diaerese
+ PriorDeadKey := "t3"
+ }
+ else if Ebene = 4
+ {
+ send " ;doppelakut
+ PriorDeadKey := "t4"
+ }
+ else if Ebene = 5
+ {
+ SendUnicodeChar(0x002F) ; Schrägstrich, tot
+ PriorDeadKey := "t5"
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x02CF) ; komma drunter, tot
+ PriorDeadKey := "t6"
+ }
+return
+
+
+/*
+ ------------------------------------------------------
+ Reihe 3
+ ------------------------------------------------------
+*/
+
+*a::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00FB)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00FA)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00F9)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}ü
+ Else If (PriorDeadKey = "t4") ; doppelakut
+ BSSendUnicodeChar(0x0171)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x016D)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x016B)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0173)
+ Else If (PriorDeadKey = "a6") ; Ring
+ BSSendUnicodeChar(0x016F)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x0169)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x01D4)
+ Else
+ sendinput {blind}u
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00DB)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00DA)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00D9)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}Ü
+ Else If (PriorDeadKey = "a6") ; Ring
+ BSSendUnicodeChar(0x016E)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x016C)
+ Else If (PriorDeadKey = "t4") ; doppelakut
+ BSSendUnicodeChar(0x0170)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x01D3)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x016A)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0172)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x0168)
+ Else
+ sendinput {blind}U
+ }
+ else if Ebene = 3
+ send \
+ else if Ebene = 5
+ Send {blind}{Home}
+ else if Ebene = 6
+ Send {blind}+{Home}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*s::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00EE)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00ED)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00EC)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}ï
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x012B)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x012D)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x012F)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x0129)
+ Else If (PriorDeadKey = "a5") ; (ohne) punkt darüber
+ BSSendUnicodeChar(0x0131)
+ Else
+ sendinput {blind}i
+ If (PriorDeadKey = "comp") ; compose
+ CompKey := "i_small"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00CE)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00CD)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00CC)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}Ï
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x012A)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x012C)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x012E)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x0128)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0130)
+ Else
+ sendinput {blind}I
+ If (PriorDeadKey = "comp") ; compose
+ CompKey := "i_capital"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send `/
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x03B9) ;iota
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Sendinput {Blind}{Left}
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ Sendinput {Blind}+{Left}
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*d::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00E2)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00E1)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00E0)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ send {bs}ä
+ Else If (PriorDeadKey = "a6") ; Ring
+ Send {bs}å
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00E3)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0105)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x0101)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x0103)
+ Else
+ sendinput {blind}a
+ If (PriorDeadKey = "comp") ; compose
+ CompKey := "a_small"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00C2)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00C1)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00C0)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ send {bs}Ä
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00C3)
+ Else If (PriorDeadKey = "a6") ; Ring
+ Send {bs}Å
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x0100)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x0102)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0104)
+ Else
+ sendinput {blind}A
+ If (PriorDeadKey = "comp") ; compose
+ CompKey := "a_capital"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ sendraw {
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x03B1) ;alpha
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Sendinput {Blind}{Down}
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ Sendinput {Blind}+{Down}
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*f::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00EA)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00E9)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00E8)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}ë
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0119)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x0113)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x0115)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x011B)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0117)
+ Else If (CompKey = "a_small") ; compose
+ {
+ Send {bs}æ
+ CompKey := ""
+ }
+ Else If (CompKey = "o_small") ; compose
+ {
+ Send {bs}œ
+ CompKey := ""
+ }
+ Else
+ sendinput {blind}e
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00CA)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00C9)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00C8)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}Ë
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x011A)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x0112)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x0114)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0118)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0116)
+ Else If (CompKey = "a_capital") ; compose
+ {
+ Send {bs}Æ
+ CompKey := ""
+ }
+ Else If (CompKey = "o_capital") ; compose
+ {
+ Send {bs}Œ
+ CompKey := ""
+ }
+ Else
+ sendinput {blind}E
+ }
+ else if Ebene = 3
+ sendraw }
+ else if Ebene = 4
+ SendUnicodeChar(0x03B5) ;epsilon
+ else if Ebene = 5
+ Sendinput {Blind}{Right}
+ else if Ebene = 6
+ Sendinput {Blind}+{Right}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*g::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00F4)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00F3)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00F2)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}ö
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00F5)
+ Else If (PriorDeadKey = "t4") ; doppelakut
+ BSSendUnicodeChar(0x0151)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x00F8)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x014D)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x014F)
+ Else
+ sendinput {blind}o
+ If (PriorDeadKey = "comp") ; compose
+ CompKey := "o_small"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00D4)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00D3)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00D2)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x00D8)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00D5)
+ Else If (PriorDeadKey = "t4") ; doppelakut
+ BSSendUnicodeChar(0x0150)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ send {bs}Ö
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x014C)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x014E)
+ Else
+ sendinput {blind}O
+ If (PriorDeadKey = "comp") ; compose
+ CompKey := "o_capital"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send *
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x03C9) ;omega
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Send {blind}{End}
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ Send {blind}+{End}
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*h::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x015D)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x015B)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0161)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x015F)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E61)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E63)
+ Else
+ sendinput {blind}s
+ If (PriorDeadKey = "comp")
+ CompKey := "s_small"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x015C)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0160)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x015A)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x015E)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E60)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E62)
+ Else
+ sendinput {blind}S
+ If (PriorDeadKey = "comp")
+ CompKey := "s_capital"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send ?
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x03C3) ;sigma
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ Send ¿
+ CompKey := ""
+ }
+ else if Ebene = 6
+ {
+ SendUnicodeChar(0x03A3) ; Sigma
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*j::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0144)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00F1)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0148)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0146)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E45)
+ Else
+ sendinput {blind}n
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0147)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00D1)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0143)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0145)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E44)
+ Else
+ sendinput {blind}N
+ }
+ else if Ebene = 3
+ send (
+ else if Ebene = 4
+ SendUnicodeChar(0x03BD) ;nu
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2074)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2084)
+ Else
+ Send 4
+ }
+ PriorDeadKey := "" CompKey := ""
+return
+
+*k::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0155)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0159)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0157)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0E59)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E5B)
+ Else
+ sendinput {blind}r
+ If (PriorDeadKey = "comp")
+ CompKey := "r_small"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0158)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0154)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0156)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E58)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E5A)
+ Else
+ sendinput {blind}R
+ If (PriorDeadKey = "comp")
+ CompKey := "r_capital"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send )
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x03C1) ;rho
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2075)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2085)
+ Else
+ Send 5
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*l::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0165)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0163)
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0167)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E6B)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E6D)
+ Else
+ sendinput {blind}t
+ If (PriorDeadKey = "comp")
+ CompKey := "t_small"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0164)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0162)
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0166)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E6A)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E6C)
+ Else
+ sendinput {blind}T
+ If (PriorDeadKey = "comp")
+ CompKey := "t_capital"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send {blind}- ; Bind
+ CompKey := ""
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x03C4) ;tau
+ CompKey := ""
+ }
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2076)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2086)
+ Else
+ Send 6
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*ö::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0111)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x00F0)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x010F)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E0B)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E0D)
+ Else
+ sendinput {blind}d
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0110)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x00D0)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x010E)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E0A)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E0D)
+ Else sendinput {blind}D
+ }
+ else if Ebene = 3
+ send :
+ else if Ebene = 4
+ SendUnicodeChar(0x03B4) ;delta
+ else if Ebene = 5
+ Send `,
+ else if Ebene = 6
+ SendUnicodeChar(0x0394) ; Delta
+ PriorDeadKey := "" CompKey := ""
+return
+
+*ä::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "t3") ; Diaerese
+ Send {bs}ÿ
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00FD)
+ Else If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0177)
+ Else
+ sendinput {blind}y
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00DD)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send {bs}Ÿ
+ Else If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0176)
+ Else
+ sendinput {blind}Y
+ }
+ else if Ebene = 3
+ send @
+ else if Ebene = 4
+ SendUnicodeChar(0x03C5) ;upsilon
+ else if Ebene = 5
+ Send þ ; thorn
+ else if Ebene = 6
+ Send Þ ; Thorn
+ PriorDeadKey := "" CompKey := ""
+return
+
+;SC02B (#) wird zu Mod3
+
+
+/*
+ ------------------------------------------------------
+ Reihe 4
+ ------------------------------------------------------
+*/
+
+;SC056 (<) wird zu Mod4
+
+*y::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}ü
+ else if Ebene = 2
+ sendinput {blind}Ü
+ else if Ebene = 3
+ send {blind}{#}
+ else if Ebene = 5
+ Send {Esc}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*x::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}ö
+ else if Ebene = 2
+ sendinput {blind}Ö
+ else if Ebene = 3
+ send $
+ else if Ebene = 5
+ Send {Tab}
+ else if Ebene = 6
+ Send +{Tab}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*c::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}ä
+ else if Ebene = 2
+ sendinput {blind}Ä
+ else if Ebene = 3
+ send |
+ else if Ebene = 4
+ SendUnicodeChar(0x03B7) ;eta
+ else if Ebene = 5
+ Send {PgDn} ; Next
+ else if Ebene = 6
+ Send +{PgDn}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*v::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E57)
+ Else
+ sendinput {blind}p
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E56)
+ Else
+ sendinput {blind}P
+ }
+ else if Ebene = 3
+ {
+ If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x2248)
+ Else
+ sendraw ~
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x03C0) ;pi
+ else if Ebene = 5
+ Send {Enter}
+ else if Ebene = 6
+ SendUnicodeChar(0x03A0) ; Pi
+ PriorDeadKey := "" CompKey := ""
+return
+
+*b::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x017E)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x017A)
+ Else If (PriorDeadKey = "a5") ; punkt drüber
+ BSSendUnicodeChar(0x017C)
+ Else If (PriorDeadKey = "c6") ; punkt drunter
+ BSSendUnicodeChar(0x1E93)
+ Else
+ sendinput {blind}z
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x017D)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0179)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x017B)
+ Else If (PriorDeadKey = "c6") ; punkt drunter
+ BSSendUnicodeChar(0x1E92)
+ Else
+ sendinput {blind}Z
+ }
+ else if Ebene = 3
+ send ``{space} ; untot
+ else if Ebene = 4
+ SendUnicodeChar(0x03B6) ;zeta
+ else if Ebene = 6
+ SendUnicodeChar(0x03A9) ; Omega
+ PriorDeadKey := "" CompKey := ""
+return
+
+*n::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E03)
+ Else
+ sendinput {blind}b
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E02)
+ Else
+ sendinput {blind}B
+ }
+ else if Ebene = 3
+ send {blind}{+}
+ else if Ebene = 4
+ SendUnicodeChar(0x03B2) ;beta
+ else if Ebene = 6
+ SendUnicodeChar(0x221E) ;infty
+ PriorDeadKey := "" CompKey := ""
+return
+
+*m::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E41)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E43)
+ Else If ( (CompKey = "t_small") or (CompKey = "t_capital") ) ; compose
+ CompUnicodeChar(0x2122) ; TM
+ Else If ( (CompKey = "s_small") or (CompKey = "s_capital") ) ; compose
+ CompUnicodeChar(0x2120) ; SM
+ Else
+ sendinput {blind}m
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E40)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E42)
+ Else If ( (CompKey = "t_capital") or (CompKey = "t_small") ) ; compose
+ CompUnicodeChar(0x2122) ; TM
+ Else If ( (CompKey = "s_capital") or (CompKey = "s_small") ) ; compose
+ CompUnicodeChar(0x2120) ; SM
+ Else
+ sendinput {blind}M
+ }
+ else if Ebene = 3
+ send `%
+ else if Ebene = 4
+ SendUnicodeChar(0x03BC) ;micro, mu wäre 0x00B5
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00B9)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2081)
+ Else
+ Send 1
+ }
+ else if Ebene = 6
+ SendUnicodeChar(0x222B) ; Int
+ PriorDeadKey := "" CompKey := ""
+return
+
+*,::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind},
+ else if Ebene = 3
+ send "
+ else if Ebene = 4
+ SendUnicodeChar(0x03F1) ; varrho
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00B2)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2082)
+ Else
+ Send 2
+ }
+ else if Ebene = 6
+ SendUnicodeChar(0x221A) ; sqrt
+ PriorDeadKey := "" CompKey := ""
+return
+
+*.::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}.
+ else if Ebene = 2
+ SendUnicodeChar(0x2026) ; ellipse
+ else if Ebene = 3
+ send '
+ else if Ebene = 4
+ SendUnicodeChar(0x03B8) ;theta
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00B3)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2083)
+ Else
+ Send 3
+ }
+ else if Ebene = 6
+ SendUnicodeChar(0x0398) ; Theta
+ PriorDeadKey := "" CompKey := ""
+return
+
+
+*-::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0135)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x01F0)
+ Else If (CompKey = "i_small") ; compose
+ CompUnicodeChar(0x0133) ; ij
+ Else If (CompKey = "l_small") ; compose
+ CompUnicodeChar(0x01C9) ; lj
+ Else If (CompKey = "l_capital") ; compose
+ CompUnicodeChar(0x01C8) ; Lj
+ Else
+ sendinput {blind}j
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0134)
+ Else If (CompKey = "i_capital") ; compose
+ CompUnicodeChar(0x0132) ; IJ
+ Else If (CompKey = "l_capital") ; compose
+ CompUnicodeChar(0x01C7) ; LJ
+ Else
+ sendinput {blind}J
+ }
+ else if Ebene = 3
+ send `;
+ else if Ebene = 4
+ SendUnicodeChar(0x03D1) ; vartheta
+ else if Ebene = 5
+ Send .
+ else if Ebene = 6
+ SendUnicodeChar(0x2207) ; Nabla
+ PriorDeadKey := "" CompKey := ""
+return
+
+/*
+ ------------------------------------------------------
+ Numpad
+ ------------------------------------------------------
+
+ folgende Tasten verhalten sich bei ein- und ausgeschaltetem
+ NumLock gleich:
+*/
+
+*NumpadDiv::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ send {NumpadDiv}
+ else if Ebene = 3
+ send ÷
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2215) ; slash
+ PriorDeadKey := "" CompKey := ""
+return
+
+*NumpadMult::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ send {NumpadMult}
+ else if Ebene = 3
+ send ×
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x22C5) ; cdot
+ PriorDeadKey := "" CompKey := ""
+return
+
+*NumpadSub::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x207B)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x208B)
+ Else
+ send {blind}{NumpadSub}
+ }
+ else if Ebene = 3
+ SendUnicodeChar(0x2212) ; echtes minus
+ PriorDeadKey := "" CompKey := ""
+return
+
+*NumpadAdd::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x207A)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x208A)
+ Else
+ send {blind}{NumpadAdd}
+ }
+ else if Ebene = 3
+ send ±
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2213) ; -+
+ PriorDeadKey := "" CompKey := ""
+return
+
+*NumpadEnter::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ send {NumpadEnter}
+ else if Ebene = 3
+ SendUnicodeChar(0x2260) ; neq
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2248) ; approx
+ PriorDeadKey := "" CompKey := ""
+return
+
+/*
+ folgende Tasten verhalten sich bei ein- und ausgeschaltetem NumLock
+ unterschiedlich:
+
+ bei NumLock ein
+*/
+
+
+
+*Numpad7::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {blind}{Numpad7}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_7"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadHome}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2195) ; Hoch-Runter-Pfeil
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x226A) ; ll
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*Numpad8::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x215B) ; 1/8
+ Else If (CompKey = "Num_3")
+ CompUnicodeChar(0x215C) ; 3/8
+ Else If (CompKey = "Num_5")
+ CompUnicodeChar(0x215D) ; 5/8
+ Else If (CompKey = "Num_7")
+ CompUnicodeChar(0x215E) ; 7/8
+ Else
+ send {blind}{Numpad8}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_8"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadUp}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2191) ; uparrow
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2229) ; intersection
+ CompKey := ""
+ }
+ PriorDeadKey := "" CompKey := ""
+return
+
+*Numpad9::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {blind}{Numpad9}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_9"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadPgUp}
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x226B) ; gg
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+
+
+*Numpad4::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x00BC) ; 1/4
+ Else If (CompKey = "Num_3")
+ CompUnicodeChar(0x00BE) ; 3/4
+ Else
+ send {blind}{Numpad4}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_4"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadLeft}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2190) ; leftarrow
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2282) ; subset of
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*Numpad5::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x2155) ; 1/5
+ Else If (CompKey = "Num_2")
+ CompUnicodeChar(0x2156) ; 2/5
+ Else If (CompKey = "Num_3")
+ CompUnicodeChar(0x2157) ; 3/5
+ Else If (CompKey = "Num_4")
+ CompUnicodeChar(0x2158) ; 4/5
+ Else
+ send {blind}{Numpad5}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_5"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadClear}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send †
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x220A) ; small element of
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*Numpad6::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x2159) ; 1/6
+ Else If (CompKey = "Num_5")
+ CompUnicodeChar(0x215A) ; 5/6
+ Else
+ send {blind}{Numpad6}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_6"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadRight}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2192) ; rightarrow
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2283) ; superset of
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*Numpad1::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {blind}{Numpad1}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_1"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadEnd}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2194) ; Links-Rechts-Pfeil
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2264) ; leq
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*Numpad2::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x00BD) ; 1/2
+ Else
+ send {blind}{Numpad2}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_2"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadDown}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2193) ; downarrow
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x222A) ; vereinigt
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*Numpad3::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x2153) ; 1/3
+ Else If (CompKey = "Num_2")
+ CompUnicodeChar(0x2154) ; 2/3
+ Else
+ send {blind}{Numpad3}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_3"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ send {NumpadPgDn}
+ else if Ebene = 3
+ SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2265) ; geq
+ PriorDeadKey := "" CompKey := ""
+return
+
+*Numpad0::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {blind}{Numpad0}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_0"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadIns}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send `%
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ send ‰
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadDot::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadDot}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadDel}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send .
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ send `,
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+/*
+ bei NumLock aus
+*/
+
+*NumpadHome::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadHome}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {Numpad7}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_7"
+ Else
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x226A) ; ll
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadUp::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadUp}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x215B) ; 1/8
+ Else If (CompKey = "Num_3")
+ CompUnicodeChar(0x215C) ; 3/8
+ Else If (CompKey = "Num_5")
+ CompUnicodeChar(0x215D) ; 5/8
+ Else If (CompKey = "Num_7")
+ CompUnicodeChar(0x215E) ; 7/8
+ Else
+ send {Numpad8}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_8"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2191) ; uparrow
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2229) ; intersection
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadPgUp::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadPgUp}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {Numpad9}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_9"
+ Else
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x226B) ; gg
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadLeft::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadLeft}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x00BC) ; 1/4
+ Else If (CompKey = "Num_3")
+ CompUnicodeChar(0x00BE) ; 3/4
+ Else
+ send {Numpad4}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_4"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2190) ; leftarrow
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2282) ; subset of
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadClear::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadClear}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x2155) ; 1/5
+ Else If (CompKey = "Num_2")
+ CompUnicodeChar(0x2156) ; 2/5
+ Else If (CompKey = "Num_3")
+ CompUnicodeChar(0x2157) ; 3/5
+ Else If (CompKey = "Num_4")
+ CompUnicodeChar(0x2158) ; 4/5
+ Else
+ send {Numpad5}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_5"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send †
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x220A) ; small element of
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadRight::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadRight}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x2159) ; 1/6
+ Else If (CompKey = "Num_5")
+ CompUnicodeChar(0x215A) ; 5/6
+ Else
+ send {Numpad6}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_6"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2192) ; rightarrow
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2283) ; superset of
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadEnd::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadEnd}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {Numpad1}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_1"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x21CB) ; LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2264) ; leq
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadDown::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadDown}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x00BD) ; 1/2
+ Else
+ send {Numpad2}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_2"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x2193) ; downarrow
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x222A) ; vereinigt
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadPgDn::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadPgDn}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ If (CompKey = "Num_1")
+ CompUnicodeChar(0x2153) ; 1/3
+ Else If (CompKey = "Num_2")
+ CompUnicodeChar(0x2154) ; 2/3
+ Else
+ send {Numpad3}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_3"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ SendUnicodeChar(0x2265) ; geq
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadIns::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadIns}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {Numpad0}
+ If (PriorDeadKey = "comp")
+ CompKey := "Num_0"
+ Else
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send `%
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ send ‰
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+*NumpadDel::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {NumpadDel}
+ CompKey := ""
+ }
+ else if Ebene = 2
+ {
+ send {NumpadDot}
+ CompKey := ""
+ }
+ else if Ebene = 3
+ {
+ send .
+ CompKey := ""
+ }
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ {
+ send `,
+ CompKey := ""
+ }
+ PriorDeadKey := ""
+return
+
+
+/*
+ ------------------------------------------------------
+ Sondertasten
+ ------------------------------------------------------
+*/
+
+*Space::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (CompKey = "r_small_1")
+ Comp3UnicodeChar(0x2170) ; römisch i
+ Else If (CompKey = "r_capital_1")
+ Comp3UnicodeChar(0x2160) ; römisch I
+ Else
+ Send {blind}{Space}
+ }
+ if Ebene = 2
+ Send {blind}{Space}
+ if Ebene = 3
+ Send {blind}{Space}
+ if Ebene = 4
+ SendUnicodeChar(0x00A0) ; geschütztes Leerzeichen
+ else if Ebene = 5
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2070)
+ Else If (PriorDeadKey = "c4") ; toter -
+ BSSendUnicodeChar(0x2080)
+ Else
+ Send 0
+ }
+ else if Ebene = 6
+ SendUnicodeChar(0x202F) ; schmales Leerzeichen
+ PriorDeadKey := "" CompKey := ""
+return
+
+/*
+ Folgende Tasten sind nur aufgeführt, um PriorDeadKey zu leeren.
+ Irgendwie sieht das noch nicht schön aus. Vielleicht lässt sich dieses
+ Problem irgendwie eleganter lösen...
+
+ Nachtrag:
+ Weil es mit Alt+Tab Probleme gab, wird hier jetzt erstmal rumgeflickschustert,
+ bis eine allgemeinere Lösung gefunden wurde.
+*/
+
+*Enter::
+ sendinput {Blind}{Enter}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*Backspace::
+ sendinput {Blind}{Backspace}
+ PriorDeadKey := "" CompKey := ""
+return
+
+
+
+/*
+Auf Mod3+Tab liegt Compose. AltTab funktioniert, jedoch ShiftAltTab nicht.
+Wenigstens kommt es jetzt nicht mehr zu komischen Ergebnissen, wenn man Tab
+nach einem DeadKey drückt...
+*/
+
+*Tab::
+ if ( GetKeyState("SC038","P") )
+ {
+ SC038 & Tab::AltTab ; http://de.autohotkey.com/docs/Hotkeys.htm#AltTabDetail
+ }
+ else if GetKeyState("#","P")
+ {
+ PriorDeadKey := "comp"
+ CompKey := ""
+ }
+ else
+ {
+ send {blind}{Tab}
+ PriorDeadKey := ""
+ CompKey := ""
+ }
+return
+
+*SC038:: ; LAlt, damit AltTab funktioniert
+ send {blind}{LAlt}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*Home::
+ sendinput {Blind}{Home}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*End::
+ sendinput {Blind}{End}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*PgUp::
+ sendinput {Blind}{PgUp}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*PgDn::
+ sendinput {Blind}{PgDn}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*Up::
+ sendinput {Blind}{Up}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*Down::
+ sendinput {Blind}{Down}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*Left::
+ sendinput {Blind}{Left}
+ PriorDeadKey := "" CompKey := ""
+return
+
+*Right::
+ sendinput {Blind}{Right}
+ PriorDeadKey := "" CompKey := ""
+return
+
+
+/*
+ ------------------------------------------------------
+ Funktionen
+ ------------------------------------------------------
+*/
+
+EbeneAktualisieren()
+{
+ global
+ Ebene = 1
+
+ ; ist Shift down?
+ if ( GetKeyState("Shift","P") )
+ {
+ Ebene += 1
+ }
+ ; ist Mod3 down?
+ if ( GetKeyState("CapsLock","P") or GetKeyState("#","P") )
+ {
+ Ebene += 2
+ }
+
+ ; ist Mod4 down? Mod3 hat Vorrang!
+ else if ( GetKeyState("<","P") or GetKeyState("SC138","P") )
+ {
+ Ebene += 4
+ }
+}
+
+
+/*************************
+ Alte Methoden
+*************************/
+
+/*
+Unicode(code)
+{
+ saved_clipboard := ClipboardAll
+ Transform, Clipboard, Unicode, %code%
+ sendplay ^v
+ Clipboard := saved_clipboard
+}
+
+BSUnicode(code)
+{
+ saved_clipboard := ClipboardAll
+ Transform, Clipboard, Unicode, %code%
+ sendplay {bs}^v
+ Clipboard := saved_clipboard
+}
+*/
+
+SendUnicodeChar(charCode)
+{
+ VarSetCapacity(ki, 28 * 2, 0)
+
+ EncodeInteger(&ki + 0, 1)
+ EncodeInteger(&ki + 6, charCode)
+ EncodeInteger(&ki + 8, 4)
+ EncodeInteger(&ki +28, 1)
+ EncodeInteger(&ki +34, charCode)
+ EncodeInteger(&ki +36, 4|2)
+
+ DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
+}
+
+BSSendUnicodeChar(charCode)
+{
+ send {bs}
+ VarSetCapacity(ki, 28 * 2, 0)
+
+ EncodeInteger(&ki + 0, 1)
+ EncodeInteger(&ki + 6, charCode)
+ EncodeInteger(&ki + 8, 4)
+ EncodeInteger(&ki +28, 1)
+ EncodeInteger(&ki +34, charCode)
+ EncodeInteger(&ki +36, 4|2)
+
+ DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
+}
+
+CompUnicodeChar(charCode)
+{
+ send {bs}
+ VarSetCapacity(ki, 28 * 2, 0)
+
+ EncodeInteger(&ki + 0, 1)
+ EncodeInteger(&ki + 6, charCode)
+ EncodeInteger(&ki + 8, 4)
+ EncodeInteger(&ki +28, 1)
+ EncodeInteger(&ki +34, charCode)
+ EncodeInteger(&ki +36, 4|2)
+
+ DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
+}
+
+Comp3UnicodeChar(charCode)
+{
+ send {bs}
+ send {bs}
+ VarSetCapacity(ki, 28 * 2, 0)
+
+ EncodeInteger(&ki + 0, 1)
+ EncodeInteger(&ki + 6, charCode)
+ EncodeInteger(&ki + 8, 4)
+ EncodeInteger(&ki +28, 1)
+ EncodeInteger(&ki +34, charCode)
+ EncodeInteger(&ki +36, 4|2)
+
+ DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
+}
+
+
+EncodeInteger(ref, val)
+{
+ DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)
+}
+
+
+/*
+ ------------------------------------------------------
+ Shift+Pause "pausiert" das Script.
+ ------------------------------------------------------
+*/
+
++pause::suspend
+
+; ------------------------------------
+
+togglesuspend:
+ if state <>
+ {
+ state =
+ menu, tray, rename, %enable%, %disable%
+ }
+ else
+ {
+ state = : Deaktiviert
+ menu, tray, rename, %disable%, %enable%
+ }
+
+ menu, tray, tip, %name%%state%
+ suspend
+return
+
+
+help:
+ Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm
+return
+
+
+about:
+ msgbox, 64, %name% – Ergonomische Tastaturbelegung,
+ (
+ %name%
+ `nDas Neo-Layout ersetzt das übliche deutsche
+ Tastaturlayout mit der Alternative Neo,
+ beschrieben auf http://neo-layout.org/.
+ `nDazu sind keine Administratorrechte nötig.
+ `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke
+ abgefangen und statt dessen eine Übersetzung weitergeschickt.
+ `nDies geschieht transparent für den Anwender,
+ es muss nichts installiert werden.
+ `nDie Zeichenübersetzung kann leicht über das Icon im
+ Systemtray deaktiviert werden. `n
+ )
+return
+
+
+neo:
+ run http://neo-layout.org/
+return
+
+autohotkey:
+ run http://autohotkey.com/
+return
+
+open:
+ ListLines ; shows the Autohotkey window
+return
+
+edit:
+ edit
+return
+
+reload:
+ Reload
+return
+
+hide:
+ menu, tray, noicon
+return
+
+exitprogram:
+ exitapp
+return \ No newline at end of file
diff --git a/windows/autohotkey/neo20-all-in-one.exe b/windows/autohotkey/neo20-all-in-one.exe
new file mode 100644
index 0000000..31a37b5
--- /dev/null
+++ b/windows/autohotkey/neo20-all-in-one.exe
Binary files differ
diff --git a/windows/autohotkey/neo20_mod-test.ahk b/windows/autohotkey/neo20_mod-test.ahk
new file mode 100644
index 0000000..bb7b736
--- /dev/null
+++ b/windows/autohotkey/neo20_mod-test.ahk
@@ -0,0 +1,2210 @@
+/*
+ Titel: NEO 2.0 beta Autohotkey-Treiber
+ $Revision: 483 $
+ $Date: 2008-04-15 12:53:09 +0200 (Di, 15 Apr 2008) $
+ Autor: Stefan Mayer <stm@neo-layout.org>
+ Basiert auf: neo20-all-in-one.ahk vom 29.06.2007
+
+ TODO: - ausgiebig testen...
+ - Menü des Tasksymbols
+ - Bessere Lösung für das leeren von PriorDeadKey finden, damit die Sondertasten
+ nicht mehr abgefangen werden müssen.
+ - Ebene 4 und 5 tauschen (im Programmcode, in der Doku ists schon)
+ - CapsLock auf 1. und 2. Ebene einbauen:
+ Die Buchstaben reagieren richtig auf CapsLock, da hier "sendinput {blind}"
+ verwendet wird. Bei anderen Tasten muss CapsLock in der ersten und zweiten Ebene
+ explizit abgefragt werden.
+ (Lässt sich das elegant in eine Funktion auslagern?)
+ |------------------|
+ | - Compose-Taste |
+ |------------------|
+ Ideen: - Symbol ändern (Neo-Logo abwarten)
+ - bei Ebene 4 rechte Hand (Numpad) z.B. Numpad5 statt 5 senden
+ CHANGES: - Kein Parsen über die Zwischenablage mehr
+ - Vista-kompatibel
+ - Ebene 6 über Mod3+Mod4
+*/
+
+; aus Noras script kopiert:
+#usehook on
+#singleinstance force
+#LTrim
+ ; Quelltext kann eingerückt werden,
+ ; msgbox ist trotzdem linksbündig
+
+SendMode Input
+SetTitleMatchMode 2
+
+;name = NEO 2.0
+;enable = Aktiviere %name%
+;disable = Deaktiviere %name%
+
+; Überprüfung auf deutsches Tastaturlayout
+; ----------------------------------------
+
+regread, inputlocale, HKEY_CURRENT_USER, Keyboard Layout\Preload, 1
+regread, inputlocalealias, HKEY_CURRENT_USER
+ , Keyboard Layout\Substitutes, %inputlocale%
+if inputlocalealias <>
+ inputlocale = %inputlocalealias%
+if inputlocale <> 00000407
+{
+ suspend
+ regread, inputlocale, HKEY_LOCAL_MACHINE
+ , SYSTEM\CurrentControlSet\Control\Keyboard Layouts\%inputlocale%
+ , Layout Text
+ msgbox, 48, Warnung!,
+ (
+ Nicht kompatibles Tastaturlayout:
+ `t%inputlocale%
+ `nDas deutsche QWERTZ muss als Standardlayout eingestellt
+ sein, damit %name% wie erwartet funktioniert.
+ `nÄndern Sie die Tastatureinstellung unter
+ `tSystemsteuerung
+ `t-> Regions- und Sprachoptionen
+ `t-> Sprachen
+ `t-> Details... `n
+ )
+ exitapp
+}
+
+/*
+ Variablen initialisieren
+*/
+
+Ebene = 1
+PriorDeadKey := ""
+
+
+/*
+ ------------------------------------------------------
+ Modifier
+ ------------------------------------------------------
+*/
+
+; CapsLock durch Mod3+Mod3
+*#::
+*CapsLock::
+ if GetKeyState("#","P") and GetKeyState("CapsLock","P")
+ {
+ if GetKeyState("CapsLock","T")
+ {
+ setcapslockstate, off
+ }
+ else
+ {
+ setcapslockstate, on
+ }
+ }
+return
+
+; KP_Decimal durch Mod4+Mod4
+*<::
+*SC138::
+ if GetKeyState("<","P") and GetKeyState("SC138","P")
+ {
+ send {numpaddot}
+ }
+ return
+
+
+/*
+ Ablauf bei toten Tasten:
+ 1. Ebene Aktualisieren
+ 2. Abhängig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen
+
+ Ablauf bei "lebenden" (sagt man das?) Tasten:
+ 1. Ebene Aktualisieren
+ 2. Abhängig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben
+ 3. "PriorDeadKey" mit leerem String überschreiben
+
+ ------------------------------------------------------
+ Reihe 1
+ ------------------------------------------------------
+*/
+
+*^::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ SendUnicodeChar(0x02C6) ; circumflex, tot
+ PriorDeadKey := "c1"
+ }
+ else if Ebene = 2
+ {
+ SendUnicodeChar(0x02C7) ; caron, tot
+ PriorDeadKey := "c2"
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x02D8) ; brevis
+ PriorDeadKey := "c3"
+ }
+ else if Ebene = 4
+ {
+ send - ; querstrich, tot
+ PriorDeadKey := "c4"
+ }
+ else if Ebene = 5
+ {
+ SendUnicodeChar(0x00B7) ; Mittenpunkt, tot
+ PriorDeadKey := "c5"
+ }
+ else if Ebene = 7
+ {
+ Send . ; punkt darunter (colon)
+ PriorDeadKey := "c6"
+ }
+return
+
+*1::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex 1
+ BSSendUnicodeChar(0x00B9)
+ Else
+ send {blind}1
+ }
+ else if Ebene = 2
+ send °
+ else if Ebene = 4
+ SendUnicodeChar(0x2640) ; Piktogramm weiblich
+ else if Ebene = 5
+ SendUnicodeChar(0x2022) ; bullet
+ else if Ebene = 7
+ Send ¬
+ PriorDeadKey := ""
+return
+
+*2::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00B2)
+ Else
+ send {blind}2
+ }
+ else if Ebene = 2
+ SendUnicodeChar(0x2116) ; numero
+ else if Ebene = 4
+ SendUnicodeChar(0x26A5) ; Piktogramm Zwitter
+ else if Ebene = 5
+ SendUnicodeChar(0x2023) ; aufzaehlungspfeil
+ else if Ebene = 7
+ SendUnicodeChar(0x2228) ; logisch oder
+ PriorDeadKey := ""
+return
+
+*3::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00B3)
+ Else
+ send {blind}3
+ }
+ else if Ebene = 2
+ send §
+ else if Ebene = 4
+ SendUnicodeChar(0x2642) ; Piktogramm männlich
+ else if Ebene = 7
+ SendUnicodeChar(0x2227) ; logisch und
+ PriorDeadKey := ""
+return
+
+*4::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2074)
+ Else
+ send {blind}4
+ }
+ else if Ebene = 2
+ send »
+ else if Ebene = 3
+ send ›
+ else if Ebene = 5
+ Send {PgUp} ; Prev
+ else if Ebene = 6
+ Send +{Prev}
+ else if Ebene = 7
+ SendUnicodeChar(0x22A5) ; Up Tack
+ PriorDeadKey := ""
+return
+
+*5::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2075)
+ Else
+ send {blind}5
+ }
+ else if Ebene = 2
+ send «
+ else if Ebene = 3
+ send ‹
+ else if Ebene = 7
+ SendUnicodeChar(0x2221) ; gemessener Winkel
+ PriorDeadKey := ""
+return
+
+*6::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2076)
+ Else
+ send {blind}6
+ }
+ else if Ebene = 2
+ send $
+ else if Ebene = 3
+ send £
+ else if Ebene = 5
+ send ¤
+ else if Ebene = 7
+ SendUnicodeChar(0x2225) ; parallel zu
+ PriorDeadKey := ""
+return
+
+*7::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2077)
+ Else
+ send {blind}7
+ }
+ else if Ebene = 2
+ send €
+ else if Ebene = 3
+ send ¢
+ else if Ebene = 4
+ SendUnicodeChar(0x03F0) ; varkappa
+ else if Ebene = 5
+ send ¥
+ else if Ebene = 7
+ SendUnicodeChar(0x2209) ; nicht Element von
+ PriorDeadKey := ""
+return
+
+*8::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2078)
+ Else
+ send {blind}8
+ }
+ else if Ebene = 2
+ send „
+ else if Ebene = 3
+ send ‚
+ else if Ebene = 5
+ Send /
+ else if Ebene = 7
+ SendUnicodeChar(0x2204) ; Nicht-Existenzquantor
+ PriorDeadKey := ""
+return
+
+*9::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2079)
+ Else
+ send {blind}9
+ }
+ else if Ebene = 2
+ send “
+ else if Ebene = 3
+ send ‘
+ else if Ebene = 5
+ Send *
+ else if Ebene = 7
+ SendUnicodeChar(0x2226) ; Nicht parallel zu
+ PriorDeadKey := ""
+return
+
+*0::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2070)
+ Else
+ send {blind}0
+ }
+ else if Ebene = 2
+ send ”
+ else if Ebene = 3
+ send ’
+ else if Ebene = 5
+ Send -
+ else if Ebene = 7
+ SendUnicodeChar(0x2205) ; Leere Menge
+ PriorDeadKey := ""
+return
+
+*ß::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}- ; Bind
+ else if Ebene = 2
+ SendUnicodeChar(0x2013) ; Ged
+ else if Ebene = 3
+ SendUnicodeChar(0x2014)
+ else if Ebene = 4
+ SendUnicodeChar(0x2011)
+ else if Ebene = 7
+ SendUnicodeChar(0x254C)
+ PriorDeadKey := ""
+return
+
+*´::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ send {´}{space} ; akut, tot
+ PriorDeadKey := "a1"
+ }
+ else if Ebene = 2
+ {
+ send ``{space}
+ PriorDeadKey := "a2"
+ }
+ else if Ebene = 3
+ {
+ send ¸ ; cedilla
+ PriorDeadKey := "a3"
+ }
+ else if Ebene = 4
+ {
+ SendUnicodeChar(0x02DB) ; ogonek
+ PriorDeadKey := "a4"
+ }
+ else if Ebene = 5
+ {
+ SendUnicodeChar(0x02D9) ; punkt oben drüber
+ PriorDeadKey := "a5"
+ }
+ else if Ebene = 7
+ {
+ SendUnicodeChar(0x02DA) ; ring obendrauf
+ PriorDeadKey := "a6"
+ }
+return
+
+
+/*
+ ------------------------------------------------------
+ Reihe 2
+ ------------------------------------------------------
+*/
+
+*q::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}x
+ else if Ebene = 2
+ sendinput {blind}X
+ else if Ebene = 3
+ send @
+ else if Ebene = 4
+ SendUnicodeChar(0x03BE) ;xi
+ else if Ebene = 5
+ send @ ; Redundanz
+ else if Ebene = 7
+ SendUnicodeChar(0x039E) ; Xi
+ PriorDeadKey := ""
+return
+
+
+*w::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E7F)
+ Else
+ sendinput {blind}v
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E7E)
+ Else
+ sendinput {blind}V
+ }
+ else if Ebene = 3
+ send _
+ else if Ebene = 4
+ SendUnicodeChar(0x03F5) ; varepsilon
+ else if Ebene = 5
+ Send {Backspace}
+ else if Ebene = 7
+ SendUnicodeChar(0x2259) ; estimates
+ PriorDeadKey := ""
+return
+
+
+
+*e::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x0142)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x013A)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x013E)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x013C)
+ Else If (PriorDeadKey = "c5") ; Mittenpunkt
+ BSSendUnicodeChar(0x0140)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E37)
+ Else
+ sendinput {blind}l
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0139)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x013D)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x013B)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x0141)
+ Else If (PriorDeadKey = "c5") ; Mittenpunkt
+ BSSendUnicodeChar(0x013F)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E36)
+ Else
+ sendinput {blind}L
+ }
+ else if Ebene = 3
+ send [
+ else if Ebene = 4
+ SendUnicodeChar(0x03BB) ;lambda
+ else if Ebene = 5
+ Sendinput {Blind}{Up}
+ else if Ebene = 6
+ Sendinput {Blind}+{Up}
+ else if Ebene = 7
+ SendUnicodeChar(0x039B) ; Lambda
+ PriorDeadKey := ""
+return
+
+
+*r::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0109)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x010D)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0107)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x00E7)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x010B)
+ Else
+ sendinput {blind}c
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0108)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x010C)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0106)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x00E6)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x010A)
+ Else
+ sendinput {blind}C
+ }
+ else if Ebene = 3
+ send ]
+ else if Ebene = 4
+ SendUnicodeChar(0x03C7) ;chi
+ else if Ebene = 5
+ Send {Tab}
+ else if Ebene = 6
+ Send +{Tab}
+ else if Ebene = 7
+ SendUnicodeChar(0x2102) ; Komplexe Zahlen
+ PriorDeadKey := ""
+return
+
+*t::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0175)
+ Else
+ sendinput {blind}w
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0174)
+ Else
+ sendinput {blind}W
+ }
+ else if Ebene = 3
+ send {^}{space} ; untot
+ else if Ebene = 4
+ SendUnicodeChar(0x03C9) ; omega
+ else if Ebene = 5
+ Send {Insert}
+ else if Ebene = 6
+ Send +{Insert}
+ else if Ebene = 7
+ SendUnicodeChar(0x03A9) ; Omega
+ PriorDeadKey := ""
+return
+
+*z::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0137)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E33)
+ Else
+ sendinput {blind}k
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0136)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E32)
+ Else
+ sendinput {blind}K
+ }
+ else if Ebene = 3
+ sendraw !
+ else if Ebene = 4
+ SendUnicodeChar(0x03BA) ;kappa
+ else if Ebene = 5
+ Send ¡
+ else if Ebene = 7
+ SendUnicodeChar(0x221A) ; Wurzelzeichen
+ PriorDeadKey := ""
+return
+
+*u::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0125)
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0127)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E23)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E25)
+ Else sendinput {blind}h
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0124)
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0126)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E22)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E24)
+ Else sendinput {blind}H
+ }
+ else if Ebene = 3
+ {
+ If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x2264) ; kleiner gleich
+ Else
+ send {blind}<
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x03C8) ;psi
+ else if Ebene = 5
+ Send 7
+ else if Ebene = 7
+ SendUnicodeChar(0x03A8) ; Psi
+ PriorDeadKey := ""
+return
+
+*i::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x011D)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x011F)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0123)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0121)
+ Else sendinput {blind}g
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x011C)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x011E)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0122)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0120)
+ Else sendinput {blind}G
+ }
+ else if Ebene = 3
+ {
+ If (PriorDeadKey = "c4") ; Querstrich
+ SendUnicodeChar(0x2265) ; größer gleich
+ Else
+ send >
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x03B3) ;gamma
+ else if Ebene = 5
+ Send 8
+ else if Ebene = 7
+ SendUnicodeChar(0x0393) ; Gamma
+ PriorDeadKey := ""
+return
+
+*o::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "t5") ; durchgestrichen
+ BSSendUnicodeChar(0x0192)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E1F)
+ Else sendinput {blind}f
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "t5") ; durchgestrichen
+ BSSendUnicodeChar(0x0191)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E1E)
+ Else sendinput {blind}F
+ }
+ else if Ebene = 3
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x2259) ; entspricht
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x2245) ; ungefähr gleich
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x2260) ; ungleich
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x2261) ; identisch
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x225A) ; EQUIANGULAR TO
+ Else If (PriorDeadKey = "a6") ; ring drüber
+ BSSendUnicodeChar(0x2257) ; ring equal to
+ Else
+ send `=
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x0278) ; latin small letter phi
+ else if Ebene = 5
+ Send 9
+ else if Ebene = 7
+ SendUnicodeChar(0x03A6) ; Phi
+ PriorDeadKey := ""
+return
+
+*p::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}q
+ else if Ebene = 2
+ sendinput {blind}Q
+ else if Ebene = 3
+ send {&}
+ else if Ebene = 4
+ SendUnicodeChar(0x03C6) ; phi
+ else if Ebene = 5
+ Send {+}
+ else if Ebene = 7
+ SendUnicodeChar(0x211A) ; Rationale Zahlen
+ PriorDeadKey := ""
+return
+
+*ü::
+ EbeneAktualisieren()
+ if Ebene = 1
+ if GetKeyState("CapsLock","T")
+ {
+ SendUnicodeChar(0x1E9E) ; versal-ß
+ }
+ else
+ {
+ send ß
+ }
+ else if Ebene = 2
+ if GetKeyState("CapsLock","T")
+ {
+ send ß
+ }
+ else
+ {
+ SendUnicodeChar(0x1E9E) ; versal-ß
+ }
+ else if Ebene = 3
+ SendUnicodeChar(0x017F) ; langes s
+ else if Ebene = 4
+ SendUnicodeChar(0x03C2) ; varsigma
+ else if Ebene = 7
+ SendUnicodeChar(0x2218) ; Ring Operator
+ PriorDeadKey := ""
+return
+
+
+*+::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ SendUnicodeChar(0x02DC) ; tilde, tot
+ PriorDeadKey := "t1"
+ }
+ else if Ebene = 2
+ {
+ SendUnicodeChar(0x00AF) ; macron, tot
+ PriorDeadKey := "t2"
+ }
+ else if Ebene = 3
+ {
+ SendUnicodeChar(0x00A8) ; Diaerese
+ PriorDeadKey := "t3"
+ }
+ else if Ebene = 4
+ {
+ send " ;doppelakut
+ PriorDeadKey := "t4"
+ }
+ else if Ebene = 5
+ {
+ SendUnicodeChar(0x002F) ; Schrägstrich, tot
+ PriorDeadKey := "t5"
+ }
+ else if Ebene = 7
+ {
+ SendUnicodeChar(0x02CF) ; komma drunter, tot
+ PriorDeadKey := "t6"
+ }
+return
+
+
+/*
+ ------------------------------------------------------
+ Reihe 3
+ ------------------------------------------------------
+*/
+
+*a::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00FB)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00FA)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00F9)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}ü
+ Else If (PriorDeadKey = "t4") ; doppelakut
+ BSSendUnicodeChar(0x0171)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x016D)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x016B)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0173)
+ Else If (PriorDeadKey = "a6") ; Ring
+ BSSendUnicodeChar(0x016F)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x0169)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x01D4)
+ Else
+ sendinput {blind}u
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00DB)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00DA)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00D9)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}Ü
+ Else If (PriorDeadKey = "a6") ; Ring
+ BSSendUnicodeChar(0x016E)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x016C)
+ Else If (PriorDeadKey = "t4") ; doppelakut
+ BSSendUnicodeChar(0x0170)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x01D3)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x016A)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0172)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x0168)
+ Else
+ sendinput {blind}U
+ }
+ else if Ebene = 3
+ send \
+ else if Ebene = 5
+ Send {blind}{Home}
+ else if Ebene = 6
+ Send {blind}+{Home}
+ else if Ebene = 7
+ SendUnicodeChar(0x222E) ; Contour Integral
+ PriorDeadKey := ""
+return
+
+*s::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00EE)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00ED)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00EC)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}ï
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x012B)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x012D)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x012F)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x0129)
+ Else If (PriorDeadKey = "a5") ; (ohne) punkt darüber
+ BSSendUnicodeChar(0x0131)
+ Else
+ sendinput {blind}i
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00CE)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00CD)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00CC)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}Ï
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x012A)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x012C)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x012E)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x0128)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0130)
+ Else
+ sendinput {blind}I
+ }
+ else if Ebene = 3
+ send `/
+ else if Ebene = 4
+ SendUnicodeChar(0x03B9) ;iota
+ else if Ebene = 5
+ Sendinput {Blind}{Left}
+ else if Ebene = 6
+ Sendinput {Blind}+{Left}
+ else if Ebene = 7
+ sendUnicodeChar(0x222B) ; Integral
+ PriorDeadKey := ""
+return
+
+*d::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00E2)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00E1)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00E0)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ send {bs}ä
+ Else If (PriorDeadKey = "a6") ; Ring
+ Send {bs}å
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00E3)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0105)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x0101)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x0103)
+ Else
+ sendinput {blind}a
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00C2)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00C1)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00C0)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ send {bs}Ä
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00C3)
+ Else If (PriorDeadKey = "a6") ; Ring
+ Send {bs}Å
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x0100)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x0102)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0104)
+ Else
+ sendinput {blind}A
+ }
+ else if Ebene = 3
+ sendraw {
+ else if Ebene = 4
+ SendUnicodeChar(0x03B1) ;alpha
+ else if Ebene = 5
+ Sendinput {Blind}{Down}
+ else if Ebene = 6
+ Sendinput {Blind}+{Down}
+ else if Ebene = 7
+ SendUnicodeChar(0x2200) ; For All
+ PriorDeadKey := ""
+return
+
+*f::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00EA)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00E9)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00E8)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}ë
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0119)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x0113)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x0115)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x011B)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0117)
+ Else
+ sendinput {blind}e
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00CA)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00C9)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00C8)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}Ë
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x011A)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x0112)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x0114)
+ Else If (PriorDeadKey = "a4") ; ogonek
+ BSSendUnicodeChar(0x0118)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0116)
+ Else
+ sendinput {blind}E
+ }
+ else if Ebene = 3
+ sendraw }
+ else if Ebene = 4
+ SendUnicodeChar(0x03B5) ;epsilon
+ else if Ebene = 5
+ Sendinput {Blind}{Right}
+ else if Ebene = 6
+ Sendinput {Blind}+{Right}
+ else if Ebene = 7
+ SendUnicodeChar(0x2203) ; Existensquantor
+ PriorDeadKey := ""
+return
+
+*g::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00F4)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00F3)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00F2)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send, {bs}ö
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00F5)
+ Else If (PriorDeadKey = "t4") ; doppelakut
+ BSSendUnicodeChar(0x0151)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x00F8)
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x014D)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x014F)
+ Else
+ sendinput {blind}o
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x00D4)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00D3)
+ Else If (PriorDeadKey = "a2") ; grave
+ BSSendUnicodeChar(0x00D2)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x00D8)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00D5)
+ Else If (PriorDeadKey = "t4") ; doppelakut
+ BSSendUnicodeChar(0x0150)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ send {bs}Ö
+ Else If (PriorDeadKey = "t2") ; macron
+ BSSendUnicodeChar(0x014C)
+ Else If (PriorDeadKey = "c3") ; brevis
+ BSSendUnicodeChar(0x014E)
+ Else
+ sendinput {blind}O
+ }
+ else if Ebene = 3
+ send *
+ else if Ebene = 4
+ SendUnicodeChar(0x03C9) ;omega
+ else if Ebene = 5
+ Send {blind}{End}
+ else if Ebene = 6
+ Send {blind}+{End}
+ else if Ebene = 7
+ SendUnicodeChar(0x2208) ; Element von
+ PriorDeadKey := ""
+return
+
+*h::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x015D)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x015B)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0161)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x015F)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E61)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E63)
+ Else
+ sendinput {blind}s
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x015C)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0160)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x015A)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x015E)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E60)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E62)
+ Else
+ sendinput {blind}S
+ }
+ else if Ebene = 3
+ send ?
+ else if Ebene = 4
+ SendUnicodeChar(0x03C3) ;sigma
+ else if Ebene = 5
+ Send ¿
+ else if Ebene = 7
+ SendUnicodeChar(0x03A3) ; Sigma
+ PriorDeadKey := ""
+return
+
+*j::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0144)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00F1)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0148)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0146)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E45)
+ Else
+ sendinput {blind}n
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0147)
+ Else If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x00D1)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0143)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0145)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E44)
+ Else
+ sendinput {blind}N
+ }
+ else if Ebene = 3
+ send (
+ else if Ebene = 4
+ SendUnicodeChar(0x03BD) ;nu
+ else if Ebene = 5
+ Send 4
+ else if Ebene = 7
+ SendUnicodeChar(0x2115) ; Natürliche Zahlen
+ PriorDeadKey := ""
+return
+
+*k::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0155)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0159)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0157)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x0E59)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E5B)
+ Else
+ sendinput {blind}r
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0158)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0154)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0156)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E58)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E5A)
+ Else
+ sendinput {blind}R
+ }
+ else if Ebene = 3
+ send )
+ else if Ebene = 4
+ SendUnicodeChar(0x03C1) ;rho
+ else if Ebene = 5
+ Send 5
+ else if Ebene = 7
+ SendUnicodeChar(0x211D) ; Rationale Zahlen
+ PriorDeadKey := ""
+return
+
+*l::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0165)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0163)
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0167)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E6B)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E6D)
+ Else
+ sendinput {blind}t
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x0164)
+ Else If (PriorDeadKey = "a3") ; cedilla
+ BSSendUnicodeChar(0x0162)
+ Else If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0166)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E6A)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E6C)
+ Else
+ sendinput {blind}T
+ }
+ else if Ebene = 3
+ send {blind}- ; Bind
+ else if Ebene = 4
+ SendUnicodeChar(0x03C4) ;tau
+ else if Ebene = 5
+ Send 6
+ else if Ebene = 7
+ SendUnicodeChar(0x2202) ; partielle Ableitung
+ PriorDeadKey := ""
+return
+
+*ö::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0111)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x00F0)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x010F)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E0B)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E0D)
+ Else
+ sendinput {blind}d
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c4") ; Querstrich
+ BSSendUnicodeChar(0x0110)
+ Else If (PriorDeadKey = "t5") ; Schrägstrich
+ BSSendUnicodeChar(0x00D0)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x010E)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E0A)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E0D)
+ Else sendinput {blind}D
+ }
+ else if Ebene = 3
+ send :
+ else if Ebene = 4
+ SendUnicodeChar(0x03B4) ;delta
+ else if Ebene = 5
+ Send `,
+ else if Ebene = 7
+ SendUnicodeChar(0x0394) ; Delta
+ PriorDeadKey := ""
+return
+
+*ä::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "t3") ; Diaerese
+ Send {bs}ÿ
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00FD)
+ Else If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0177)
+ Else
+ sendinput {blind}y
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x00DD)
+ Else If (PriorDeadKey = "t3") ; Diaerese
+ Send {bs}Ÿ
+ Else If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0176)
+ Else
+ sendinput {blind}Y
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x03C5) ;upsilon
+ else if Ebene = 5
+ SendUnicodeChar(0x2207) ; nabla
+ PriorDeadKey := ""
+return
+
+;SC02B (#) wird zu Mod3
+
+
+/*
+ ------------------------------------------------------
+ Reihe 4
+ ------------------------------------------------------
+*/
+
+;SC056 (<) wird zu Mod4
+
+*y::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}ü
+ else if Ebene = 2
+ sendinput {blind}Ü
+ else if Ebene = 3
+ send {#}
+ else if Ebene = 5
+ Send {Esc}
+ else if Ebene = 7
+ SendUnicodeChar(0x221D) ; proportional zu
+ PriorDeadKey := ""
+return
+
+*x::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}ö
+ else if Ebene = 2
+ sendinput {blind}Ö
+ else if Ebene = 3
+ send $
+ else if Ebene = 5
+ Send {Del}
+ else if Ebene = 6
+ Send +{Del}
+ else if Ebene = 7
+ SendUnicodeChar(0x2111) ; Black-Letter Capital I
+ PriorDeadKey := ""
+return
+
+*c::
+ EbeneAktualisieren()
+ if Ebene = 1
+ sendinput {blind}ä
+ else if Ebene = 2
+ sendinput {blind}Ä
+ else if Ebene = 3
+ send |
+ else if Ebene = 4
+ SendUnicodeChar(0x03B7) ;eta
+ else if Ebene = 5
+ Send {PgDn} ; Next
+ else if Ebene = 6
+ Send +{PgDn}
+ else if Ebene = 7
+ SendUnicodeChar(0x211C) ; Black-Letter Capital I
+ PriorDeadKey := ""
+return
+
+*v::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E57)
+ Else
+ sendinput {blind}p
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E56)
+ Else
+ sendinput {blind}P
+ }
+ else if Ebene = 3
+ {
+ If (PriorDeadKey = "t1") ; tilde
+ BSSendUnicodeChar(0x2248)
+ Else
+ sendraw ~
+ }
+ else if Ebene = 4
+ SendUnicodeChar(0x03C0) ;pi
+ else if Ebene = 5
+ Send {Enter}
+ else if Ebene = 7
+ SendUnicodeChar(0x03A0) ; Pi
+ PriorDeadKey := ""
+return
+
+*b::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x017E)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x017A)
+ Else If (PriorDeadKey = "a5") ; punkt drüber
+ BSSendUnicodeChar(0x017C)
+ Else If (PriorDeadKey = "c6") ; punkt drunter
+ BSSendUnicodeChar(0x1E93)
+ Else
+ sendinput {blind}z
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x017D)
+ Else If (PriorDeadKey = "a1") ; akut
+ BSSendUnicodeChar(0x0179)
+ Else If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x017B)
+ Else If (PriorDeadKey = "c6") ; punkt drunter
+ BSSendUnicodeChar(0x1E92)
+ Else
+ sendinput {blind}Z
+ }
+ else if Ebene = 3
+ send ``{space} ; untot
+ else if Ebene = 4
+ SendUnicodeChar(0x03B6) ;zeta
+ else if Ebene = 7
+ SendUnicodeChar(0x2124) ; Ganze Zahlen
+ PriorDeadKey := ""
+return
+
+*n::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E03)
+ Else
+ sendinput {blind}b
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E02)
+ Else
+ sendinput {blind}B
+ }
+ else if Ebene = 3
+ send {blind}{+}
+ else if Ebene = 4
+ SendUnicodeChar(0x03B2) ;beta
+ else if Ebene = 7
+ SendUnicodeChar(0x21D2) ; daraus folgt (Implikation)
+ PriorDeadKey := ""
+return
+
+*m::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E41)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E43)
+ Else
+ sendinput {blind}m
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "a5") ; punkt darüber
+ BSSendUnicodeChar(0x1E40)
+ Else If (PriorDeadKey = "c6") ; punkt darunter
+ BSSendUnicodeChar(0x1E42)
+ Else
+ sendinput {blind}M
+ }
+ else if Ebene = 3
+ send `%
+ else if Ebene = 4
+ SendUnicodeChar(0x03BC) ;micro, mu wäre 0x00B5
+ else if Ebene = 5
+ Send 1
+ else if Ebene = 7
+ SendUnicodeChar(0x21D4) ; Äquivalenz
+ PriorDeadKey := ""
+return
+
+*,::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind},
+ else if Ebene = 3
+ send '
+ else if Ebene = 4
+ SendUnicodeChar(0x03F1) ; varrho
+ else if Ebene = 5
+ Send 2
+ else if Ebene = 7
+ SendUnicodeChar(0x21D0) ; Doppelpfeil nach links
+ PriorDeadKey := ""
+return
+
+*.::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}.
+ else if Ebene = 2
+ SendUnicodeChar(0x2026) ; ellipse
+ else if Ebene = 3
+ send "
+ else if Ebene = 4
+ SendUnicodeChar(0x03B8) ;theta
+ else if Ebene = 5
+ Send 3
+ else if Ebene = 7
+ SendUnicodeChar(0x0398) ; Theta
+ PriorDeadKey := ""
+return
+
+
+*-::
+ EbeneAktualisieren()
+ if Ebene = 1
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0135)
+ Else If (PriorDeadKey = "c2") ; caron
+ BSSendUnicodeChar(0x01F0)
+ Else
+ sendinput {blind}j
+ }
+ else if Ebene = 2
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x0134)
+ Else
+ sendinput {blind}J
+ }
+ else if Ebene = 3
+ send `;
+ else if Ebene = 4
+ SendUnicodeChar(0x03D1) ; vartheta
+ else if Ebene = 5
+ Send .
+ else if Ebene = 7
+ SendUnicodeChar(0x2261) ; identisch zu (auch über tote Tasten)
+ PriorDeadKey := ""
+return
+
+/*
+ ------------------------------------------------------
+ Numpad
+ ------------------------------------------------------
+
+ folgende Tasten verhalten sich bei ein- und ausgeschaltetem
+ NumLock gleich:
+*/
+
+*NumpadDiv::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ send {NumpadDiv}
+ else if Ebene = 3
+ send ÷
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2215) ; slash
+ PriorDeadKey := ""
+return
+
+*NumpadMult::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ send {NumpadMult}
+ else if Ebene = 3
+ send ×
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x22C5) ; cdot
+ PriorDeadKey := ""
+return
+
+*NumpadSub::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x207B)
+ Else
+ send {blind}{NumpadSub}
+ }
+ else if ( (Ebene = 3) or (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2212) ; echtes minus
+ PriorDeadKey := ""
+return
+
+*NumpadAdd::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ {
+ If (PriorDeadKey = "c1") ; circumflex
+ BSSendUnicodeChar(0x207A)
+ Else
+ send {blind}{NumpadAdd}
+ }
+ else if Ebene = 3
+ send ±
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2213) ; -+
+ PriorDeadKey := ""
+return
+
+*NumpadEnter::
+ EbeneAktualisieren()
+ if ( (Ebene = 1) or (Ebene = 2) )
+ send {NumpadEnter}
+ else if Ebene = 3
+ SendUnicodeChar(0x2260) ; neq
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2248) ; approx
+ PriorDeadKey := ""
+return
+
+/*
+ folgende Tasten verhalten sich bei ein- und ausgeschaltetem NumLock
+ unterschiedlich:
+
+ bei NumLock ein
+*/
+
+*Numpad7::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad7}
+ else if Ebene = 2
+ send {NumpadHome}
+ else if Ebene = 3
+ SendUnicodeChar(0x20D7) ; Combining Vektorpfeil
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x226A) ; ll
+ PriorDeadKey := ""
+return
+
+*Numpad8::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad8}
+ else if Ebene = 2
+ send {NumpadUp}
+ else if Ebene = 3
+ SendUnicodeChar(0x2191) ; uparrow
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2229) ; intersection
+ PriorDeadKey := ""
+return
+
+*Numpad9::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad9}
+ else if Ebene = 2
+ send {NumpadPgUp}
+ else if Ebene = 3
+ SendUnicodeChar(0x2297) ; Circled Times
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x226B) ; gg
+ PriorDeadKey := ""
+return
+
+*Numpad4::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad4}
+ else if Ebene = 2
+ send {NumpadLeft}
+ else if Ebene = 3
+ SendUnicodeChar(0x2190) ; leftarrow
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2282) ; subset of
+ PriorDeadKey := ""
+return
+
+*Numpad5::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad5}
+ else if Ebene = 2
+ send {€}
+ else if Ebene = 3
+ SendUnicodeChar(0x221E) ; Infty
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x220B) ; Element
+ PriorDeadKey := ""
+return
+
+*Numpad6::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad6}
+ else if Ebene = 2
+ send {NumpadRight}
+ else if Ebene = 3
+ SendUnicodeChar(0x2192) ; rightarrow
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2283) ; superset of
+ PriorDeadKey := ""
+return
+
+*Numpad1::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad1}
+ else if Ebene = 2
+ send {NumpadEnd}
+ else if Ebene = 3
+ SendUnicodeChar(0x21CB) ; LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2264) ; leq
+ PriorDeadKey := ""
+return
+
+*Numpad2::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad2}
+ else if Ebene = 2
+ send {NumpadDown}
+ else if Ebene = 3
+ SendUnicodeChar(0x2193) ; downarrow
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x222A) ; vereinigt
+ PriorDeadKey := ""
+return
+
+*Numpad3::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad3}
+ else if Ebene = 2
+ send {NumpadPgDn}
+ else if Ebene = 3
+ SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2265) ; geq
+ PriorDeadKey := ""
+return
+
+*Numpad0::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad0}
+ else if Ebene = 2
+ send {NumpadIns}
+ else if Ebene = 3
+ send `%
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ send ‰
+ PriorDeadKey := ""
+return
+
+*NumpadDot::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadDot}
+ else if Ebene = 2
+ send {NumpadDel}
+ else if Ebene = 3
+ send .
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ send `,
+ PriorDeadKey := ""
+return
+
+/*
+ bei NumLock aus
+*/
+
+*NumpadHome::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad7}
+ else if Ebene = 2
+ send {NumpadHome}
+ else if Ebene = 3
+ SendUnicodeChar(0x20D7) ; Combining Vektorpfeil
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x226A) ; ll
+ PriorDeadKey := ""
+return
+
+*NumpadUp::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadUp}
+ else if Ebene = 2
+ send {Numpad8}
+ else if Ebene = 3
+ SendUnicodeChar(0x2191) ; uparrow
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2229) ; intersection
+ PriorDeadKey := ""
+return
+
+*NumpadPgUp::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad9}
+ else if Ebene = 2
+ send {NumpadPgUp}
+ else if Ebene = 3
+ SendUnicodeChar(0x2297) ; Circled Times
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x226B) ; gg
+ PriorDeadKey := ""
+return
+
+*NumpadLeft::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadLeft}
+ else if Ebene = 2
+ send {Numpad4}
+ else if Ebene = 3
+ SendUnicodeChar(0x2190) ; leftarrow
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2282) ; subset of
+ PriorDeadKey := ""
+return
+
+*NumpadClear::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {blind}{Numpad5}
+ else if Ebene = 2
+ send {€}
+ else if Ebene = 3
+ SendUnicodeChar(0x221E) ; Infty
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x220B) ; Element
+ PriorDeadKey := ""
+return
+
+*NumpadRight::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadRight}
+ else if Ebene = 2
+ send {Numpad6}
+ else if Ebene = 3
+ SendUnicodeChar(0x2192) ; rightarrow
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2283) ; superset of
+ PriorDeadKey := ""
+return
+
+*NumpadEnd::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadEnd}
+ else if Ebene = 2
+ send {Numpad1}
+ else if Ebene = 3
+ SendUnicodeChar(0x21CB) ; LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2264) ; leq
+ PriorDeadKey := ""
+return
+
+*NumpadDown::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadDown}
+ else if Ebene = 2
+ send {Numpad2}
+ else if Ebene = 3
+ SendUnicodeChar(0x2193) ; downarrow
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x222A) ; vereinigt
+ PriorDeadKey := ""
+return
+
+*NumpadPgDn::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadPgDn}
+ else if Ebene = 2
+ send {Numpad3}
+ else if Ebene = 3
+ SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ SendUnicodeChar(0x2265) ; geq
+ PriorDeadKey := ""
+return
+
+*NumpadIns::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadIns}
+ else if Ebene = 2
+ send {Numpad0}
+ else if Ebene = 3
+ send `%
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ send ‰
+ PriorDeadKey := ""
+return
+
+*NumpadDel::
+ EbeneAktualisieren()
+ if Ebene = 1
+ send {NumpadDel}
+ else if Ebene = 2
+ send {NumpadDot}
+ else if Ebene = 3
+ send .
+ else if ( (Ebene = 4) or (Ebene = 5) )
+ send `,
+ PriorDeadKey := ""
+return
+
+
+
+/*
+ ------------------------------------------------------
+ Sondertasten
+ ------------------------------------------------------
+*/
+
+*Space::
+ EbeneAktualisieren()
+ if Ebene = 4
+ SendUnicodeChar(0x00A0) ; geschütztes Leerzeichen
+ else if Ebene = 5
+ Send 0
+ else if Ebene = 7
+ SendUnicodeChar(0x202F) ; schmales Leerzeichen
+ else
+ Send {blind}{Space}
+ PriorDeadKey := ""
+return
+
+/*
+ Folgende Tasten sind nur aufgeführt, um PriorDeadKey zu leeren.
+ Irgendwie sieht das noch nicht schön aus. Vielleicht lässt sich dieses
+ Problem irgendwie eleganter lösen...
+
+ Nachtrag:
+ Weil es mit Alt+Tab Probleme gab, wird hier jetzt erstmal rumgeflickschustert,
+ bis eine allgemeinere Lösung gefunden wurde.
+*/
+
+*Enter::
+ sendinput {Blind}{Enter}
+ PriorDeadKey := ""
+return
+
+*Backspace::
+ sendinput {Blind}{Backspace}
+ PriorDeadKey := ""
+return
+
+
+
+/*
+Tab wurde rausgenommen, weil es Probleme mit AltTab und ShiftAltTab gab.
+Allerdings kommt es jetzt zu komischen Ergebnissen, wenn man Tab nach
+einem DeadKey drückt...
+
+*Tab::
+ send {Blind}{Tab}
+ PriorDeadKey := ""
+return
+
+*/
+
+*Home::
+ sendinput {Blind}{Home}
+ PriorDeadKey := ""
+return
+
+*End::
+ sendinput {Blind}{End}
+ PriorDeadKey := ""
+return
+
+*PgUp::
+ sendinput {Blind}{PgUp}
+ PriorDeadKey := ""
+return
+
+*PgDn::
+ sendinput {Blind}{PgDn}
+ PriorDeadKey := ""
+return
+
+*Up::
+ sendinput {Blind}{Up}
+ PriorDeadKey := ""
+return
+
+*Down::
+ sendinput {Blind}{Down}
+ PriorDeadKey := ""
+return
+
+*Left::
+ sendinput {Blind}{Left}
+ PriorDeadKey := ""
+return
+
+*Right::
+ sendinput {Blind}{Right}
+ PriorDeadKey := ""
+return
+
+
+/*
+ ------------------------------------------------------
+ Funktionen
+ ------------------------------------------------------
+*/
+
+EbeneAktualisieren()
+{
+ global
+ Ebene = 1
+
+ ; ist Shift down?
+ if ( GetKeyState("Shift","P") )
+ {
+ Ebene += 1
+ }
+ ; ist Mod3 down?
+ if ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ) {
+ ; ist Mod4 down?
+ if ( GetKeyState("<","P") or GetKeyState("SC138","P") ) {
+ Ebene +=6
+ }
+ else Ebene += 2
+ }
+ ; ist Mod4 down? Mod3 hat Vorrang!
+ else if ( GetKeyState("<","P") or GetKeyState("SC138","P") ) {
+ ; ist Mod3 down?
+ if ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ) {
+ Ebene +=6
+ }
+ else Ebene += 4
+ }
+
+ return
+}
+
+
+/*************************
+ Alte Methoden
+*************************/
+
+/*
+Unicode(code)
+{
+ saved_clipboard := ClipboardAll
+ Transform, Clipboard, Unicode, %code%
+ sendplay ^v
+ Clipboard := saved_clipboard
+}
+
+BSUnicode(code)
+{
+ saved_clipboard := ClipboardAll
+ Transform, Clipboard, Unicode, %code%
+ sendplay {bs}^v
+ Clipboard := saved_clipboard
+}
+*/
+
+SendUnicodeChar(charCode)
+{
+ VarSetCapacity(ki, 28 * 2, 0)
+
+ EncodeInteger(&ki + 0, 1)
+ EncodeInteger(&ki + 6, charCode)
+ EncodeInteger(&ki + 8, 4)
+ EncodeInteger(&ki +28, 1)
+ EncodeInteger(&ki +34, charCode)
+ EncodeInteger(&ki +36, 4|2)
+
+ DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
+}
+
+
+BSSendUnicodeChar(charCode)
+{
+ send {bs}
+ VarSetCapacity(ki, 28 * 2, 0)
+
+ EncodeInteger(&ki + 0, 1)
+ EncodeInteger(&ki + 6, charCode)
+ EncodeInteger(&ki + 8, 4)
+ EncodeInteger(&ki +28, 1)
+ EncodeInteger(&ki +34, charCode)
+ EncodeInteger(&ki +36, 4|2)
+
+ DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
+}
+
+
+EncodeInteger(ref, val)
+{
+ DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)
+}
+
+
+/*
+ ------------------------------------------------------
+ Shift+Pause "pausiert" das Script.
+ ------------------------------------------------------
+*/
+
++pause::suspend
diff --git a/windows/kbdneo2/Quelldateien/README.txt b/windows/kbdneo2/Quelldateien/README.txt
new file mode 100644
index 0000000..8d00f7a
--- /dev/null
+++ b/windows/kbdneo2/Quelldateien/README.txt
@@ -0,0 +1,17 @@
+1. WinDDK (Bestandteil von WDK) installieren.
+
+2. Im Ordner \src\input\layout\all_kbds\kbdneo2 des WDKs einen neuen Ordner namens 'kbdneo2' anlegen.
+
+3. Alle Quelldateien in diesen Ordner kopieren.
+
+4. Die Datei 'dirs' im Ordner \src\input\layout\all_kbds\kbdneo2 des WDKs um die Zeile 'kbdneo2' erweitern. Die Datei könnte nun so aussehen:
+> DIRS= \
+> kbdfr \
+> kbdgr \
+> kbdneo2
+
+5. Mit einem normalem Texteditor können nun die Quelldateien bearbeitet werden.
+
+6. Zum kompilieren des Treibers die 'Checked Build Environment' starten und zum Ordner mit den Quelldateien wechseln und den Befehl Build ausführen.
+> cd src\input\layout\all_kbds\kbdneo2
+> build
diff --git a/windows/kbdneo2/Quelldateien/kbdneo2.c b/windows/kbdneo2/Quelldateien/kbdneo2.c
new file mode 100644
index 0000000..32e8ec4
--- /dev/null
+++ b/windows/kbdneo2/Quelldateien/kbdneo2.c
@@ -0,0 +1,804 @@
+/***************************************************************************\
+* Module Name: KBDNEO2.C
+*
+* keyboard layout for German
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* History:
+\***************************************************************************/
+
+#include <windows.h>
+#include "kbd.h"
+#include "kbdneo2.h"
+
+#if defined(_M_IA64)
+#pragma section(".data")
+#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
+#else
+#pragma data_seg(".data")
+#define ALLOC_SECTION_LDATA
+#endif
+
+/***************************************************************************\
+* ausVK[] - Virtual Scan Code to Virtual Key conversion table for German
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA USHORT ausVK[] = {
+ T00, T01, T02, T03, T04, T05, T06, T07,
+ T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
+ T10, T11, T12, T13, T14, T15, T16, T17,
+ T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
+ T20, T21, T22, T23, T24, T25, T26, T27,
+ T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
+ T30, T31, T32, T33, T34, T35,
+
+ /*
+ * Right-hand Shift key must have KBDEXT bit set.
+ */
+ T36 | KBDEXT,
+
+ T37 | KBDMULTIVK, // numpad_* + Shift/Alt -> SnapShot
+
+ T38, T39, T3A, T3B, T3C, T3D, T3E,
+ T3F, T40, T41, T42, T43, T44,
+
+ /*
+ * NumLock Key:
+ * KBDEXT - VK_NUMLOCK is an Extended key
+ * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
+ */
+ T45 | KBDEXT | KBDMULTIVK,
+
+ T46 | KBDMULTIVK,
+
+ /*
+ * Number Pad keys:
+ * KBDNUMPAD - digits 0-9 and decimal point.
+ * KBDSPECIAL - require special processing by Windows
+ */
+ T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home)
+ T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up),
+ T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp),
+ T4A,
+ T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left),
+ T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear),
+ T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right),
+ T4E,
+ T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End),
+ T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down),
+ T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn),
+ T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins),
+ T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del),
+
+ T54, T55, T56, T57, T58, T59, T5A, T5B,
+ T5C, T5D, T5E, T5F, T60, T61, T62, T63,
+ T64, T65, T66, T67, T68, T69, T6A, T6B,
+ T6C, T6D, T6E, T6F, T70, T71, T72, T73,
+ T74, T75, T76, T77, T78, T79, T7A, T7B,
+ T7C, T7D, T7E
+
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
+ { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track
+ { 0x19, X19 | KBDEXT }, // Speedracer: Next Track
+ { 0x1D, X1D | KBDEXT }, // RControl
+ { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute
+ { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2
+ { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause
+ { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop
+ { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down
+ { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up
+ { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home
+ { 0x35, X35 | KBDEXT }, // Numpad Divide
+ { 0x37, X37 | KBDEXT }, // Snapshot
+ { 0x38, X38 | KBDEXT }, // RMenu
+ { 0x47, X47 | KBDEXT }, // Home
+ { 0x48, X48 | KBDEXT }, // Up
+ { 0x49, X49 | KBDEXT }, // Prior
+ { 0x4B, X4B | KBDEXT }, // Left
+ { 0x4D, X4D | KBDEXT }, // Right
+ { 0x4F, X4F | KBDEXT }, // End
+ { 0x50, X50 | KBDEXT }, // Down
+ { 0x51, X51 | KBDEXT }, // Next
+ { 0x52, X52 | KBDEXT }, // Insert
+ { 0x53, X53 | KBDEXT }, // Delete
+ { 0x5B, X5B | KBDEXT }, // Left Win
+ { 0x5C, X5C | KBDEXT }, // Right Win
+ { 0x5D, X5D | KBDEXT }, // Application
+ { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep
+ { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search
+ { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites
+ { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh
+ { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop
+ { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward
+ { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back
+ { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1
+ { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail
+ { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector
+ { 0x1C, X1C | KBDEXT }, // Numpad Enter
+ { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause)
+ { 0, 0 }
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
+ { 0x1D, Y1D }, // Pause
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aVkToBits[] - map Virtual Keys to Modifier Bits
+*
+* See kbd.h for a full description.
+*
+* German Keyboard has only three shifter keys:
+* SHIFT (L & R) affects alphabnumeric keys,
+* CTRL (L & R) is used to generate control characters
+* ALT (L & R) used for generating characters by number with numpad
+\***************************************************************************/
+static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
+ { VK_SHIFT , KBDSHIFT },
+ { VK_CONTROL , KBDCTRL },
+ { VK_MENU , KBDALT },
+ { VK_KANA , KBDKANA },
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aModification[] - map character modifier bits to modification number
+*
+* See kbd.h for a full description.
+*
+\***************************************************************************/
+static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
+ &aVkToBits[0],
+ 14,
+ {
+ // Modifier NEO
+ // Ebene 1 - nix
+ // Ebene 2 - Shift
+ // Ebene 3 - Kana
+ // Ebene 4 - AltGr
+ // Ebene 5 - Kana+Shift
+ // Ebene 6 - AltGr+Kana
+ //
+ // Modification# // Keys Pressed
+ // ============= // =============
+ 0, // 0000
+ 1, // 0001 Shift
+ 6, // 0010 Strg
+ 7, // 0011 Shift + Strg
+ SHFT_INVALID, // 0100 Menu
+ SHFT_INVALID, // 0101 Shift + Menu
+ 3, // 0110 Strg + Menu
+ SHFT_INVALID, // 0111 Shift + Strg + Menu
+ 2, // 1000 Kana
+ 4, // 1001 Shift + Kana
+ SHFT_INVALID, // 1010 Strg + Kana
+ SHFT_INVALID, // 1011 Shift + Strg + Kana
+ SHFT_INVALID, // 1100 Menu + Kana
+ SHFT_INVALID, // 1101 Shift + Menu + Kana
+ 5 // 1110 Menu + Strg + Kana
+
+ }
+};
+
+
+/***************************************************************************\
+*
+* aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states
+* aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states
+* aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states
+* aVkToWch5[] - Virtual Key to WCHAR translation for 5 shift states
+* aVkToWch6[] - Virtual Key to WCHAR translation for 6 shift states
+* aVkToWch7[] - Virtual Key to WCHAR translation for 7 shift states
+* aVkToWch8[] - Virtual Key to WCHAR translation for 8 shift states
+* aVkToWch9[] - Virtual Key to WCHAR translation for 9 shift states
+*
+* Table attributes: Unordered Scan, null-terminated
+*
+* Search this table for an entry with a matching Virtual Key to find the
+* corresponding unshifted and shifted WCHAR characters.
+*
+* Special values for VirtualKey (column 1)
+* 0xff - dead chars for the previous entry
+* 0 - terminate the list
+*
+* Special values for Attributes (column 2)
+* CAPLOK bit - CAPS-LOCK affect this key like SHIFT
+*
+* Special values for wch[*] (column 3 & 4)
+* WCH_NONE - No character
+* WCH_DEAD - Dead Key (diaresis) or invalid (US keyboard has none)
+* WCH_LGTR - Ligature (generates multiple characters)
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS2 aVkToWch2[] = {
+// | | Shift |
+// |===========|=========|
+{VK_DECIMAL ,0 ,',' ,',' },
+{0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
+// | | SHIFT | KANA | ALT+CTL |
+// | |===============|================|===============|
+{VK_ADD ,0 ,'+' ,'+' ,0x00b1 ,0x2213 },
+{VK_DIVIDE ,0 ,'/' ,'/' ,0x00f7 ,0x2215 },
+{VK_MULTIPLY ,0 ,'*' ,'*' ,0x00d7 ,0x22c5 },
+{VK_SUBTRACT ,0 ,'-' ,'-' ,WCH_NONE ,0x2052 },
+{0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
+// | | SHIFT | KANA | ALT+CTL | KANA+Shift | ALT+CTL+Kana |
+// | |===============|================|===============|===============|================|
+{VK_OEM_1 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD },
+{0xff ,0 ,'^' ,0x030c ,0x0306 ,0x00b7 ,0x0335 ,0x0323 },
+{'1' ,CAPLOK ,'1' ,0x00b0 ,0x00B9 ,0x2022 ,0x2640 ,0x00ac },
+{'3' ,CAPLOK ,'3' ,0x00a7 ,0x00b3 ,WCH_NONE ,0x2640 ,0x2227 },
+{'4' ,CAPLOK ,'4' ,0x00bb ,0x203A ,WCH_NONE ,0x2113 ,0x02d4 },
+{'5' ,CAPLOK ,'5' ,0x00ab ,0x2039 ,WCH_NONE ,0x2020 ,0x2221 },
+{'7' ,CAPLOK ,'7' ,0x0024 ,0x00a5 ,0x00a4 ,0x03f0 ,0x2209 },
+{'8' ,CAPLOK ,'8' ,0x201E ,0x201A ,0x002F ,WCH_NONE ,0x2204 },
+{'9' ,CAPLOK ,'9' ,0x201C ,0x2018 ,0x002A ,WCH_NONE ,0x2226 },
+{'0' ,CAPLOK ,'0' ,0x201D ,0x2019 ,0x002D ,WCH_NONE ,0x2205 },
+{VK_OEM_MINUS ,0 ,'-' ,0x2013 ,0x2014 ,0X2011 ,0x00AD ,0x2227 },
+{VK_OEM_2 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD },
+{0xff ,0 ,0x0301 ,0x0300 ,0x0327 ,0x0307 ,0x0328 ,0x030a },
+{VK_TAB ,0 ,'\t' ,'\t' ,'\t' ,'\t' ,'\t' ,'\t' },
+{'X' ,CAPLOK ,'x' ,'X' ,WCH_NONE ,WCH_NONE ,0x03BE ,0x039E },
+{'V' ,CAPLOK ,'v' ,'V' ,'_' ,'\b' ,WCH_NONE ,0x2259 },
+{'L' ,CAPLOK ,'l' ,'L' ,'[' ,WCH_NONE ,0x03BB ,0x039b },
+{'C' ,CAPLOK ,'c' ,'C' ,']' ,0x007f ,0x03C7 ,0x2102 },
+{'W' ,CAPLOK ,'w' ,'W' ,0x005E ,WCH_NONE ,0x1f7c ,0x03a9 },
+{'K' ,CAPLOK ,'k' ,'K' ,'!' ,0x00A1 ,0x03BA ,0x221a },
+{'H' ,CAPLOK ,'h' ,'H' ,'<' ,'7' ,0x03C8 ,0x03A8 },
+{'G' ,CAPLOK ,'g' ,'G' ,'>' ,'8' ,0x03B3 ,0x0393 },
+{'F' ,CAPLOK ,'f' ,'F' ,'=' ,'9' ,0x03C6 ,0x03A6 },
+{'Q' ,CAPLOK ,'q' ,'Q' ,'&' ,'+' ,0x0278 ,0x211a },
+{'U' ,CAPLOK ,'u' ,'U' ,'\\' ,WCH_NONE ,WCH_NONE ,0x222e },
+{'I' ,CAPLOK ,'i' ,'I' ,'/' ,WCH_NONE ,0x03B9 ,0x222b },
+{'A' ,CAPLOK ,'a' ,'A' ,'{' ,WCH_NONE ,0x03B1 ,0x2200 },
+{'E' ,CAPLOK ,'e' ,'E' ,'}' ,WCH_NONE ,0x03B5 ,0x2203 },
+{'O' ,CAPLOK ,'o' ,'O' ,'*' ,WCH_NONE ,0x03bf ,0x2208 },
+{'S' ,CAPLOK ,'s' ,'S' ,'?' ,0x00BF ,0x03C3 ,0x03A3 },
+{'N' ,CAPLOK ,'n' ,'N' ,'(' ,'4' ,0x03BD ,0x2115 },
+{'R' ,CAPLOK ,'r' ,'R' ,')' ,'5' ,0x03C1 ,0x211d },
+{'T' ,CAPLOK ,'t' ,'T' ,'-' ,'6' ,0x03C4 ,0x2202 },
+{'D' ,CAPLOK ,'d' ,'D' ,':' ,',' ,0x03B4 ,0x0394 },
+{VK_OEM_5 ,CAPLOK ,0x00FC ,0x00DC ,'#' ,0x001b ,WCH_NONE ,0x221d },
+{VK_OEM_6 ,CAPLOK ,0x00F6 ,0x00D6 ,'$' ,'\t' ,WCH_NONE ,0x2111 },
+{VK_OEM_7 ,CAPLOK ,0x00E4 ,0x00C4 ,'|' ,WCH_NONE ,0x03B7 ,0x211c },
+{'P' ,CAPLOK ,'p' ,'P' ,'~' ,'\r' ,0x03C0 ,0x03A0 },
+{'Z' ,CAPLOK ,'z' ,'Z' ,'`' ,WCH_NONE ,0x03B6 ,0x2124 },
+{'B' ,CAPLOK ,'b' ,'B' ,'+' ,WCH_NONE ,0x03B2 ,0x212d },
+{'M' ,CAPLOK ,'m' ,'M' ,'%' ,'1' ,0x00b5 ,0x21d4 },
+{VK_OEM_COMMA ,0 ,',' ,0x22ee ,'\'' ,'2' ,0x03F1 ,0x21d0 },
+{VK_OEM_PERIOD ,0 ,'.' ,0x2026 ,'\"' ,'3' ,0x03B8 ,0x0398 },
+{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS7 aVkToWch7[] = {
+// | | SHIFT | KANA | ALT+CTL | KANA+Shift | ALT+CTL+Kana | Control |
+// | |===============|================|===============|===============|================|===============|
+{VK_OEM_3 ,CAPLOK ,0x00df ,0x1E9E ,0x017F ,WCH_NONE ,0x03C2 ,0x018F ,0x2218 },
+{VK_OEM_4 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,0x001d },
+{0xff ,0 ,0x0303 ,0x0304 ,0x0308 ,0x0337 ,0x030b ,0x0326 ,WCH_NONE },
+{'Y' ,CAPLOK ,'y' ,'Y' ,'@' ,WCH_NONE ,0x03C5 ,0x2207 ,0x001c },
+{VK_SPACE ,0 ,' ' ,' ' ,0x00A0 ,'0' ,' ' ,0x2009 ,' ' },
+{VK_BACK ,0 ,'\b' ,'\b' ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x007f },
+{VK_ESCAPE ,0 ,0x001b ,0x001b ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x001b },
+{VK_RETURN ,0 ,'\r' ,'\r' ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,'\n' },
+{VK_CANCEL ,0 ,0x0003 ,0x0003 ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x0003 },
+{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = {
+// | | SHIFT | KANA | ALT+CTL | KANA+Shift | ALT+CTL+Kana | Control | Control+Shift |
+// | |===============|================|===============|===============|================|===============|===============|
+{'2' ,CAPLOK ,'2' ,0x2116 ,0x00b2 ,0x2023 ,0x26A5 ,0x2228 ,WCH_NONE ,0x0000 },
+{'6' ,CAPLOK ,'6' ,0x20ac ,0x00Ac ,0x00a3 ,WCH_NONE ,0x2225 ,WCH_NONE ,0x001e },
+{'J' ,CAPLOK ,'j' ,'J' ,';' ,'.' ,0x03D1 ,0x2261 ,WCH_NONE ,0x001f },
+{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+// Put this last so that VkKeyScan interprets number characters
+// as coming from the main section of the kbd (aVkToWch2 and
+// aVkToWch5) before considering the numpad (aVkToWch1).
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS1 aVkToWch1[] = {
+ { VK_NUMPAD0 , 0 , '0' },
+ { VK_NUMPAD1 , 0 , '1' },
+ { VK_NUMPAD2 , 0 , '2' },
+ { VK_NUMPAD3 , 0 , '3' },
+ { VK_NUMPAD4 , 0 , '4' },
+ { VK_NUMPAD5 , 0 , '5' },
+ { VK_NUMPAD6 , 0 , '6' },
+ { VK_NUMPAD7 , 0 , '7' },
+ { VK_NUMPAD8 , 0 , '8' },
+ { VK_NUMPAD9 , 0 , '9' },
+ { 0 , 0 , '\0' }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+ { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch7, 7, sizeof(aVkToWch7[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch1, 1, sizeof(aVkToWch1[0]) },
+ { NULL, 0, 0 },
+};
+
+/***************************************************************************\
+* aKeyNames[], aKeyNamesExt[] - Virtual Scancode to Key Name tables
+*
+* Table attributes: Ordered Scan (by scancode), null-terminated
+*
+* Only the names of Extended, NumPad, Dead and Non-Printable keys are here.
+* (Keys producing printable characters are named by that character)
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
+ 0x01, L"ESC",
+ 0x0e, L"R\x00DC" L"CK",
+ 0x0f, L"TABULATOR",
+ 0x1c, L"EINGABE",
+ 0x1d, L"STRG",
+ 0x2a, L"UMSCHALT",
+ 0x36, L"UMSCHALT RECHTS",
+ 0x37, L" (ZEHNERTASTATUR)",
+ 0x38, L"ALT",
+ 0x39, L"LEER",
+ 0x3a, L"FESTSTELL",
+ 0x3b, L"F1",
+ 0x3c, L"F2",
+ 0x3d, L"F3",
+ 0x3e, L"F4",
+ 0x3f, L"F5",
+ 0x40, L"F6",
+ 0x41, L"F7",
+ 0x42, L"F8",
+ 0x43, L"F9",
+ 0x44, L"F10",
+ 0x45, L"PAUSE",
+ 0x46, L"ROLLEN-FESTSTELL",
+ 0x47, L"7 (ZEHNERTASTATUR)",
+ 0x48, L"8 (ZEHNERTASTATUR)",
+ 0x49, L"9 (ZEHNERTASTATUR)",
+ 0x4a, L"- (ZEHNERTASTATUR)",
+ 0x4b, L"4 (ZEHNERTASTATUR)",
+ 0x4c, L"5 (ZEHNERTASTATUR)",
+ 0x4d, L"6 (ZEHNERTASTATUR)",
+ 0x4e, L"+ (ZEHNERTASTATUR)",
+ 0x4f, L"1 (ZEHNERTASTATUR)",
+ 0x50, L"2 (ZEHNERTASTATUR)",
+ 0x51, L"3 (ZEHNERTASTATUR)",
+ 0x52, L"0 (ZEHNERTASTATUR)",
+ 0x53, L"KOMMA (ZEHNERTASTATUR)",
+ 0x57, L"F11",
+ 0x58, L"F12",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
+ 0x1c, L"EINGABE (ZEHNERTASTATUR)",
+ 0x1d, L"STRG-RECHTS",
+ 0x35, L" (ZEHNERTASTATUR)",
+ 0x37, L"DRUCK",
+ 0x38, L"ALT GR",
+ 0x45, L"NUM-FESTSTELL",
+ 0x46, L"UNTBR",
+ 0x47, L"POS1",
+ 0x48, L"NACH-OBEN",
+ 0x49, L"BILD-NACH-OBEN",
+ 0x4b, L"NACH-LINKS",
+ 0x4d, L"NACH-RECHTS",
+ 0x4f, L"ENDE",
+ 0x50, L"NACH-UNTEN",
+ 0x51, L"BILD-NACH-UNTEN",
+ 0x52, L"EINFG",
+ 0x53, L"ENTF",
+ 0x54, L"<00>",
+ 0x56, L"HILFE",
+ 0x5b, L"LINKE WINDOWS",
+ 0x5c, L"RECHTE WINDOWS",
+ 0x5d, L"ANWENDUNG",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA DEADKEY_LPWSTR aKeyNamesDead[] = {
+ L"^" L"ZIRKUMFLEX",
+ L"\x030c" L"CARON",
+ L"\x0306" L"BREVIS",
+ L"\x0335" L"QUERSTRICH",
+ L"\x00b7" L"DOT_MID",
+ L"\x0323" L"DOT_BELOW",
+
+ L"\x0301" L"AKUT",
+ L"\x0300" L"GRAVIS",
+ L"\x0327" L"CEDILLA",
+ L"\x0328" L"OGONEK",
+ L"\x0307" L"DOT_ABOVE",
+ L"\x030a" L"RING",
+
+ L"\x0303" L"TILDE",
+ L"\x0304" L"MAKRON",
+ L"\x0308" L"DIAERASE",
+ L"\x030b" L"DOPPEL_AKUT",
+ L"\x0337" L"SCHRAEGSTRICH",
+ L"\x0326" L"KOMMA_BELOW",
+
+
+ NULL
+};
+
+static ALLOC_SECTION_LDATA DEADKEY aDeadKey[] = {
+
+// Anfang der Taste links neben der 1
+ DEADTRANS( L'1' , L'^' , 0x00b9 , 0x0000), //ZIRKUMFLEX
+ DEADTRANS( L'2' , L'^' , 0x00b2 , 0x0000),
+ DEADTRANS( L'3' , L'^' , 0x00b3 , 0x0000),
+ DEADTRANS( L'A' , L'^' , 0x00c2 , 0x0000),
+ DEADTRANS( L'E' , L'^' , 0x00ca , 0x0000),
+ DEADTRANS( L'I' , L'^' , 0x00ce , 0x0000),
+ DEADTRANS( L'O' , L'^' , 0x00d4 , 0x0000),
+ DEADTRANS( L'U' , L'^' , 0x00db , 0x0000),
+ DEADTRANS( L'a' , L'^' , 0x00e2 , 0x0000),
+ DEADTRANS( L'e' , L'^' , 0x00ea , 0x0000),
+ DEADTRANS( L'i' , L'^' , 0x00ee , 0x0000),
+ DEADTRANS( L'o' , L'^' , 0x00f4 , 0x0000),
+ DEADTRANS( L'u' , L'^' , 0x00fb , 0x0000),
+ DEADTRANS( L'C' , L'^' , 0x0108 , 0x0000),
+ DEADTRANS( L'c' , L'^' , 0x0109 , 0x0000),
+ DEADTRANS( L'G' , L'^' , 0x011c , 0x0000),
+ DEADTRANS( L'g' , L'^' , 0x011d , 0x0000),
+ DEADTRANS( L'H' , L'^' , 0x0124 , 0x0000),
+ DEADTRANS( L'h' , L'^' , 0x0125 , 0x0000),
+ DEADTRANS( L'J' , L'^' , 0x0134 , 0x0000),
+ DEADTRANS( L'j' , L'^' , 0x0135 , 0x0000),
+ DEADTRANS( L'S' , L'^' , 0x015c , 0x0000),
+ DEADTRANS( L's' , L'^' , 0x015d , 0x0000),
+ DEADTRANS( L'W' , L'^' , 0x0174 , 0x0000),
+ DEADTRANS( L'w' , L'^' , 0x0175 , 0x0000),
+ DEADTRANS( L'Y' , L'^' , 0x0176 , 0x0000),
+ DEADTRANS( L'y' , L'^' , 0x0177 , 0x0000),
+ DEADTRANS( L'Z' , L'^' , 0x1e90 , 0x0000),
+ DEADTRANS( L'z' , L'^' , 0x1e91 , 0x0000),
+ DEADTRANS( L'1' , L'^' , 0x00b9 , 0x0000),
+ DEADTRANS( L'2' , L'^' , 0x00b2 , 0x0000),
+ DEADTRANS( L'3' , L'^' , 0x00b3 , 0x0000),
+ DEADTRANS( L'4' , L'^' , 0x2074 , 0x0000),
+ DEADTRANS( L'5' , L'^' , 0x2075 , 0x0000),
+ DEADTRANS( L'6' , L'^' , 0x2076 , 0x0000),
+ DEADTRANS( L'7' , L'^' , 0x2077 , 0x0000),
+ DEADTRANS( L'8' , L'^' , 0x2078 , 0x0000),
+ DEADTRANS( L'9' , L'^' , 0x2079 , 0x0000),
+ DEADTRANS( L'0' , L'^' , 0x2070 , 0x0000),
+ DEADTRANS( L'+' , L'^' , 0x207a , 0x0000),
+ DEADTRANS( L'-' , L'^' , 0x207b , 0x0000),
+ DEADTRANS( L'=' , L'^' , 0x207c , 0x0000),
+ DEADTRANS( L'(' , L'^' , 0x207d , 0x0000),
+ DEADTRANS( L')' , L'^' , 0x207e , 0x0000),
+ DEADTRANS( L'n' , L'^' , 0x207f , 0x0000),
+ DEADTRANS( L' ' , L'^' , L'^' , 0x0000),
+
+ DEADTRANS( L'C' , 0x030c , 0x010c , 0x0000), //CARON
+ DEADTRANS( L'c' , 0x030c , 0x010d , 0x0000),
+ DEADTRANS( L'D' , 0x030c , 0x010e , 0x0000),
+ DEADTRANS( L'd' , 0x030c , 0x010f , 0x0000),
+ DEADTRANS( L'E' , 0x030c , 0x011a , 0x0000),
+ DEADTRANS( L'e' , 0x030c , 0x011b , 0x0000),
+ DEADTRANS( L'L' , 0x030c , 0x013d , 0x0000),
+ DEADTRANS( L'l' , 0x030c , 0x013e , 0x0000),
+ DEADTRANS( L'N' , 0x030c , 0x0147 , 0x0000),
+ DEADTRANS( L'n' , 0x030c , 0x0148 , 0x0000),
+ DEADTRANS( L'R' , 0x030c , 0x0158 , 0x0000),
+ DEADTRANS( L'r' , 0x030c , 0x0159 , 0x0000),
+ DEADTRANS( L'S' , 0x030c , 0x0160 , 0x0000),
+ DEADTRANS( L's' , 0x030c , 0x0161 , 0x0000),
+ DEADTRANS( L'T' , 0x030c , 0x0164 , 0x0000),
+ DEADTRANS( L't' , 0x030c , 0x0165 , 0x0000),
+ DEADTRANS( L'Z' , 0x030c , 0x017d , 0x0000),
+ DEADTRANS( L'z' , 0x030c , 0x017e , 0x0000),
+ DEADTRANS( L'A' , 0x030c , 0x01cd , 0x0000),
+ DEADTRANS( L'a' , 0x030c , 0x01ce , 0x0000),
+ DEADTRANS( L'I' , 0x030c , 0x01cf , 0x0000),
+ DEADTRANS( L'i' , 0x030c , 0x01d0 , 0x0000),
+ DEADTRANS( L'O' , 0x030c , 0x01d1 , 0x0000),
+ DEADTRANS( L'o' , 0x030c , 0x01d2 , 0x0000),
+ DEADTRANS( L'U' , 0x030c , 0x01d3 , 0x0000),
+ DEADTRANS( L'u' , 0x030c , 0x01d4 , 0x0000),
+ DEADTRANS( L'G' , 0x030c , 0x01e6 , 0x0000),
+ DEADTRANS( L'g' , 0x030c , 0x01e7 , 0x0000),
+ DEADTRANS( L'K' , 0x030c , 0x01e8 , 0x0000),
+ DEADTRANS( L'k' , 0x030c , 0x01e9 , 0x0000),
+ DEADTRANS( L'j' , 0x030c , 0x01f0 , 0x0000),
+ DEADTRANS( L'H' , 0x030c , 0x021e , 0x0000),
+ DEADTRANS( L'h' , 0x030c , 0x021f , 0x0000),
+ DEADTRANS( 0x00fc , 0x030c , 0x01da , 0x0000),
+ DEADTRANS( 0x00dc , 0x030c , 0x01d9 , 0x0000),
+ DEADTRANS( L' ' , 0x030c , 0x030c , 0x0000),
+
+ DEADTRANS( L'A' , 0x0306 , 0x0102 , 0x0000), //BREVIS
+ DEADTRANS( L'a' , 0x0306 , 0x0103 , 0x0000),
+ DEADTRANS( L'E' , 0x0306 , 0x0114 , 0x0000),
+ DEADTRANS( L'e' , 0x0306 , 0x0115 , 0x0000),
+ DEADTRANS( L'G' , 0x0306 , 0x011e , 0x0000),
+ DEADTRANS( L'g' , 0x0306 , 0x011f , 0x0000),
+ DEADTRANS( L'I' , 0x0306 , 0x012c , 0x0000),
+ DEADTRANS( L'i' , 0x0306 , 0x012d , 0x0000),
+ DEADTRANS( L'O' , 0x0306 , 0x014e , 0x0000),
+ DEADTRANS( L'o' , 0x0306 , 0x014f , 0x0000),
+ DEADTRANS( L'U' , 0x0306 , 0x016c , 0x0000),
+ DEADTRANS( L'u' , 0x0306 , 0x016d , 0x0000),
+ DEADTRANS( L' ' , 0x0306 , 0x0306 , 0x0000),
+
+ DEADTRANS( L'1' , 0x0335 , 0x2081 , 0x0000), //QUERSTRICH
+ DEADTRANS( L'2' , 0x0335 , 0x2082 , 0x0000),
+ DEADTRANS( L'3' , 0x0335 , 0x2083 , 0x0000),
+ DEADTRANS( L'4' , 0x0335 , 0x2084 , 0x0000),
+ DEADTRANS( L'5' , 0x0335 , 0x2085 , 0x0000),
+ DEADTRANS( L'6' , 0x0335 , 0x2086 , 0x0000),
+ DEADTRANS( L'7' , 0x0335 , 0x2087 , 0x0000),
+ DEADTRANS( L'8' , 0x0335 , 0x2088 , 0x0000),
+ DEADTRANS( L'9' , 0x0335 , 0x2089 , 0x0000),
+ DEADTRANS( L'0' , 0x0335 , 0x2080 , 0x0000),
+ DEADTRANS( L'+' , 0x0335 , 0x208a , 0x0000),
+ DEADTRANS( L'-' , 0x0335 , 0x208b , 0x0000),
+ DEADTRANS( L'=' , 0x0335 , 0x208c , 0x0000),
+ DEADTRANS( L'(' , 0x0335 , 0x208d , 0x0000),
+ DEADTRANS( L')' , 0x0335 , 0x208e , 0x0000),
+ DEADTRANS( L'x' , 0x0335 , 0x2093 , 0x0000),
+ DEADTRANS( L' ' , 0x0335 , 0x0335 , 0x0000),
+
+ DEADTRANS( L' ' , 0x00b7 , 0x00b7 , 0x0000), //DOT_MID
+
+ DEADTRANS( L'B' , 0x0323 , 0x1e04 , 0x0000), //DOT_BELOW
+ DEADTRANS( L'b' , 0x0323 , 0x1e05 , 0x0000),
+ DEADTRANS( L'D' , 0x0323 , 0x1e0c , 0x0000),
+ DEADTRANS( L'd' , 0x0323 , 0x1e0d , 0x0000),
+ DEADTRANS( L'H' , 0x0323 , 0x1e24 , 0x0000),
+ DEADTRANS( L'h' , 0x0323 , 0x1e25 , 0x0000),
+ DEADTRANS( L'K' , 0x0323 , 0x1e32 , 0x0000),
+ DEADTRANS( L'k' , 0x0323 , 0x1e33 , 0x0000),
+ DEADTRANS( L'L' , 0x0323 , 0x1e36 , 0x0000),
+ DEADTRANS( L'l' , 0x0323 , 0x1e37 , 0x0000),
+ DEADTRANS( L'M' , 0x0323 , 0x1e42 , 0x0000),
+ DEADTRANS( L'm' , 0x0323 , 0x1e43 , 0x0000),
+ DEADTRANS( L'N' , 0x0323 , 0x1e46 , 0x0000),
+ DEADTRANS( L'n' , 0x0323 , 0x1e47 , 0x0000),
+ DEADTRANS( L'R' , 0x0323 , 0x1e5a , 0x0000),
+ DEADTRANS( L'r' , 0x0323 , 0x1e5b , 0x0000),
+ DEADTRANS( L'S' , 0x0323 , 0x1e62 , 0x0000),
+ DEADTRANS( L's' , 0x0323 , 0x1e63 , 0x0000),
+ DEADTRANS( L'T' , 0x0323 , 0x1e6c , 0x0000),
+ DEADTRANS( L't' , 0x0323 , 0x1e6d , 0x0000),
+ DEADTRANS( L'V' , 0x0323 , 0x1e7e , 0x0000),
+ DEADTRANS( L'v' , 0x0323 , 0x1e7f , 0x0000),
+ DEADTRANS( L'W' , 0x0323 , 0x1e88 , 0x0000),
+ DEADTRANS( L'w' , 0x0323 , 0x1e89 , 0x0000),
+ DEADTRANS( L'Z' , 0x0323 , 0x1e92 , 0x0000),
+ DEADTRANS( L'z' , 0x0323 , 0x1e93 , 0x0000),
+ DEADTRANS( L'A' , 0x0323 , 0x1ea0 , 0x0000),
+ DEADTRANS( L'a' , 0x0323 , 0x1ea1 , 0x0000),
+ DEADTRANS( L'E' , 0x0323 , 0x1eb8 , 0x0000),
+ DEADTRANS( L'e' , 0x0323 , 0x1eb9 , 0x0000),
+ DEADTRANS( L'I' , 0x0323 , 0x1eca , 0x0000),
+ DEADTRANS( L'i' , 0x0323 , 0x1ecb , 0x0000),
+ DEADTRANS( L'O' , 0x0323 , 0x1ecc , 0x0000),
+ DEADTRANS( L'o' , 0x0323 , 0x1ecd , 0x0000),
+ DEADTRANS( L'Y' , 0x0323 , 0x1ef4 , 0x0000),
+ DEADTRANS( L'y' , 0x0323 , 0x1ef5 , 0x0000),
+ DEADTRANS( L' ' , 0x0323 , 0x0323 , 0x0000),
+// Ende der Taste links neben der 1
+// Anfang der Tasten zwei rechts neben der 0
+ DEADTRANS( L'a' , 0x0301 , 0x00e1 , 0x0000), //AKUT
+ DEADTRANS( L'e' , 0x0301 , 0x00e9 , 0x0000),
+ DEADTRANS( L'i' , 0x0301 , 0x00ed , 0x0000),
+ DEADTRANS( L'o' , 0x0301 , 0x00f3 , 0x0000),
+ DEADTRANS( L'u' , 0x0301 , 0x00fa , 0x0000),
+ DEADTRANS( L'y' , 0x0301 , 0x00fd , 0x0000),
+ DEADTRANS( L'A' , 0x0301 , 0x00c1 , 0x0000),
+ DEADTRANS( L'E' , 0x0301 , 0x00c9 , 0x0000),
+ DEADTRANS( L'I' , 0x0301 , 0x00cd , 0x0000),
+ DEADTRANS( L'O' , 0x0301 , 0x00d3 , 0x0000),
+ DEADTRANS( L'U' , 0x0301 , 0x00da , 0x0000),
+ DEADTRANS( L'Y' , 0x0301 , 0x00dd , 0x0000),
+ DEADTRANS( L'C' , 0x0301 , 0x0106 , 0x0000),
+ DEADTRANS( L'c' , 0x0301 , 0x0106 , 0x0000),
+ DEADTRANS( L'L' , 0x0301 , 0x0139 , 0x0000),
+ DEADTRANS( L'l' , 0x0301 , 0x013a , 0x0000),
+ DEADTRANS( L'N' , 0x0301 , 0x0143 , 0x0000),
+ DEADTRANS( L'n' , 0x0301 , 0x0144 , 0x0000),
+ DEADTRANS( L'R' , 0x0301 , 0x0154 , 0x0000),
+ DEADTRANS( L'r' , 0x0301 , 0x0155 , 0x0000),
+ DEADTRANS( L'S' , 0x0301 , 0x015a , 0x0000),
+ DEADTRANS( L's' , 0x0301 , 0x015b , 0x0000),
+ DEADTRANS( L'Z' , 0x0301 , 0x0179 , 0x0000),
+ DEADTRANS( L'z' , 0x0301 , 0x017a , 0x0000),
+ DEADTRANS( 0x00fc , 0x0301 , 0x01d8 , 0x0000),
+ DEADTRANS( 0x00dc , 0x0301 , 0x01d7 , 0x0000),
+ DEADTRANS( L'G' , 0x0301 , 0x01f4 , 0x0000),
+ DEADTRANS( L'g' , 0x0301 , 0x01f5 , 0x0000),
+ DEADTRANS( L'K' , 0x0301 , 0x1e30 , 0x0000),
+ DEADTRANS( L'k' , 0x0301 , 0x1e31 , 0x0000),
+ DEADTRANS( L'M' , 0x0301 , 0x1e3e , 0x0000),
+ DEADTRANS( L'm' , 0x0301 , 0x1e3f , 0x0000),
+ DEADTRANS( L'P' , 0x0301 , 0x1e54 , 0x0000),
+ DEADTRANS( L'p' , 0x0301 , 0x1e55 , 0x0000),
+ DEADTRANS( L'W' , 0x0301 , 0x1e82 , 0x0000),
+ DEADTRANS( L'w' , 0x0301 , 0x1e83 , 0x0000),
+ DEADTRANS( L' ' , 0x0301 , 0x0301 , 0x0000),
+
+ DEADTRANS( L'a' , 0x0300 , 0x00e0 , 0x0000), //GRAVIS
+ DEADTRANS( L'e' , 0x0300 , 0x00e8 , 0x0000),
+ DEADTRANS( L'i' , 0x0300 , 0x00ec , 0x0000),
+ DEADTRANS( L'o' , 0x0300 , 0x00f2 , 0x0000),
+ DEADTRANS( L'u' , 0x0300 , 0x00f9 , 0x0000),
+ DEADTRANS( L'A' , 0x0300 , 0x00c0 , 0x0000),
+ DEADTRANS( L'E' , 0x0300 , 0x00c8 , 0x0000),
+ DEADTRANS( L'I' , 0x0300 , 0x00cc , 0x0000),
+ DEADTRANS( L'O' , 0x0300 , 0x00d2 , 0x0000),
+ DEADTRANS( L'U' , 0x0300 , 0x00d9 , 0x0000),
+ DEADTRANS( 0x00dc , 0x0300 , 0x01db , 0x0000),
+ DEADTRANS( 0x00fc , 0x0300 , 0x01dc , 0x0000),
+ DEADTRANS( L'N' , 0x0300 , 0x01f8 , 0x0000),
+ DEADTRANS( L'n' , 0x0300 , 0x01f9 , 0x0000),
+ DEADTRANS( L'W' , 0x0300 , 0x1e80 , 0x0000),
+ DEADTRANS( L'w' , 0x0300 , 0x1e81 , 0x0000),
+ DEADTRANS( L'Y' , 0x0300 , 0x1ef2 , 0x0000),
+ DEADTRANS( L'y' , 0x0300 , 0x1ef3 , 0x0000),
+ DEADTRANS( L' ' , 0x0300 , 0x0300 , 0x0000),
+
+ DEADTRANS( L'C' , 0x0327 , 0x00c7 , 0x0000), //CEDILLA
+ DEADTRANS( L'c' , 0x0327 , 0x00e7 , 0x0000),
+ DEADTRANS( L'G' , 0x0327 , 0x0122 , 0x0000),
+ DEADTRANS( L'g' , 0x0327 , 0x0123 , 0x0000),
+ DEADTRANS( L'K' , 0x0327 , 0x0136 , 0x0000),
+ DEADTRANS( L'k' , 0x0327 , 0x0137 , 0x0000),
+ DEADTRANS( L'L' , 0x0327 , 0x013b , 0x0000),
+ DEADTRANS( L'l' , 0x0327 , 0x013c , 0x0000),
+ DEADTRANS( L'N' , 0x0327 , 0x0145 , 0x0000),
+ DEADTRANS( L'n' , 0x0327 , 0x0146 , 0x0000),
+ DEADTRANS( L'R' , 0x0327 , 0x0156 , 0x0000),
+ DEADTRANS( L'r' , 0x0327 , 0x0157 , 0x0000),
+ DEADTRANS( L'S' , 0x0327 , 0x015e , 0x0000),
+ DEADTRANS( L's' , 0x0327 , 0x015f , 0x0000),
+ DEADTRANS( L'T' , 0x0327 , 0x0162 , 0x0000),
+ DEADTRANS( L't' , 0x0327 , 0x0163 , 0x0000),
+ DEADTRANS( L'E' , 0x0327 , 0x0228 , 0x0000),
+ DEADTRANS( L'e' , 0x0327 , 0x0229 , 0x0000),
+ DEADTRANS( L'D' , 0x0327 , 0x1e10 , 0x0000),
+ DEADTRANS( L'd' , 0x0327 , 0x1e11 , 0x0000),
+ DEADTRANS( L'H' , 0x0327 , 0x1e28 , 0x0000),
+ DEADTRANS( L'h' , 0x0327 , 0x1e29 , 0x0000),
+ DEADTRANS( L' ' , 0x0327 , 0x0327 , 0x0000),
+
+ DEADTRANS( L'A' , 0x0328 , 0x0104 , 0x0000), //OGONEK
+ DEADTRANS( L'a' , 0x0328 , 0x0105 , 0x0000),
+ DEADTRANS( L'E' , 0x0328 , 0x0118 , 0x0000),
+ DEADTRANS( L'e' , 0x0328 , 0x0119 , 0x0000),
+ DEADTRANS( L'I' , 0x0328 , 0x012e , 0x0000),
+ DEADTRANS( L'i' , 0x0328 , 0x012f , 0x0000),
+ DEADTRANS( L'U' , 0x0328 , 0x0172 , 0x0000),
+ DEADTRANS( L'u' , 0x0328 , 0x0173 , 0x0000),
+ DEADTRANS( L'O' , 0x0328 , 0x01ea , 0x0000),
+ DEADTRANS( L'o' , 0x0328 , 0x01eb , 0x0000),
+ DEADTRANS( L' ' , 0x0328 , 0x0328 , 0x0000),
+
+ DEADTRANS( L'C' , 0x0307 , 0x010a , 0x0000), //DOT_ABOVE
+ DEADTRANS( L'c' , 0x0307 , 0x010b , 0x0000),
+ DEADTRANS( L'E' , 0x0307 , 0x0116 , 0x0000),
+ DEADTRANS( L'e' , 0x0307 , 0x0117 , 0x0000),
+ DEADTRANS( L'G' , 0x0307 , 0x0120 , 0x0000),
+ DEADTRANS( L'g' , 0x0307 , 0x0121 , 0x0000),
+ DEADTRANS( L'I' , 0x0307 , 0x0130 , 0x0000),
+ DEADTRANS( L'i' , 0x0307 , 0x0131 , 0x0000),
+ DEADTRANS( L'Z' , 0x0307 , 0x017b , 0x0000),
+ DEADTRANS( L'z' , 0x0307 , 0x017c , 0x0000),
+ DEADTRANS( L'A' , 0x0307 , 0x0226 , 0x0000),
+ DEADTRANS( L'a' , 0x0307 , 0x0227 , 0x0000),
+ DEADTRANS( L'O' , 0x0307 , 0x022e , 0x0000),
+ DEADTRANS( L'o' , 0x0307 , 0x022f , 0x0000),
+ DEADTRANS( L'B' , 0x0307 , 0x1e02 , 0x0000),
+ DEADTRANS( L'b' , 0x0307 , 0x1e03 , 0x0000),
+ DEADTRANS( L'D' , 0x0307 , 0x1e0a , 0x0000),
+ DEADTRANS( L'd' , 0x0307 , 0x1e0b , 0x0000),
+ DEADTRANS( L'F' , 0x0307 , 0x1e1e , 0x0000),
+ DEADTRANS( L'f' , 0x0307 , 0x1e1f , 0x0000),
+ DEADTRANS( L'H' , 0x0307 , 0x1e22 , 0x0000),
+ DEADTRANS( L'h' , 0x0307 , 0x1e23 , 0x0000),
+ DEADTRANS( L'M' , 0x0307 , 0x1e40 , 0x0000),
+ DEADTRANS( L'm' , 0x0307 , 0x1e41 , 0x0000),
+ DEADTRANS( L'N' , 0x0307 , 0x1e44 , 0x0000),
+ DEADTRANS( L'n' , 0x0307 , 0x1e45 , 0x0000),
+ DEADTRANS( L'P' , 0x0307 , 0x1e56 , 0x0000),
+ DEADTRANS( L'p' , 0x0307 , 0x1e57 , 0x0000),
+ DEADTRANS( L'R' , 0x0307 , 0x1e58 , 0x0000),
+ DEADTRANS( L'r' , 0x0307 , 0x1e59 , 0x0000),
+ DEADTRANS( L'S' , 0x0307 , 0x1e60 , 0x0000),
+ DEADTRANS( L's' , 0x0307 , 0x1e61 , 0x0000),
+ DEADTRANS( L'T' , 0x0307 , 0x1e6a , 0x0000),
+ DEADTRANS( L't' , 0x0307 , 0x1e6b , 0x0000),
+ DEADTRANS( L'W' , 0x0307 , 0x1e86 , 0x0000),
+ DEADTRANS( L'w' , 0x0307 , 0x1e87 , 0x0000),
+ DEADTRANS( L'X' , 0x0307 , 0x1e8a , 0x0000),
+ DEADTRANS( L'x' , 0x0307 , 0x1e8b , 0x0000),
+ DEADTRANS( L'Y' , 0x0307 , 0x1e8e , 0x0000),
+ DEADTRANS( L'y' , 0x0307 , 0x1e8f , 0x0000),
+ DEADTRANS( L' ' , 0x0307 , 0x0307 , 0x0000),
+
+ DEADTRANS( L'E' , 0x030a , 0x0116 , 0x0000), //RING
+ DEADTRANS( L'e' , 0x030a , 0x030a , 0x0000),
+ DEADTRANS( L'e' , 0x030a , 0x030a , 0x0000),
+
+
+ DEADTRANS( L'e' , 0x030a , 0x030a , 0x0000),
+
+
+
+
+
+
+
+
+
+
+// Ende der Tasten zwei rechts neben der 0
+//Fehlt noch viel :(
+ 0, 0
+};
+
+
+static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
+ /*
+ * Modifier keys
+ */
+ &CharModifiers,
+
+ /*
+ * Characters tables
+ */
+ aVkToWcharTable,
+
+ /*
+ * Diacritics
+ */
+ aDeadKey,
+
+ /*
+ * Names of Keys
+ */
+ aKeyNames,
+ aKeyNamesExt,
+ aKeyNamesDead,
+
+ /*
+ * Scan codes to Virtual Keys
+ */
+ ausVK,
+ sizeof(ausVK) / sizeof(ausVK[0]),
+ aE0VscToVk,
+ aE1VscToVk,
+
+ /*
+ * Locale-specific special processing
+ */
+ MAKELONG(KLLF_ALTGR, KBD_VERSION),
+
+ /*
+ * Ligatures
+ */
+ 0,
+ 0,
+ NULL
+};
+
+PKBDTABLES KbdLayerDescriptor(VOID)
+{
+ return &KbdTables;
+}
diff --git a/windows/kbdneo2/Quelldateien/kbdneo2.def b/windows/kbdneo2/Quelldateien/kbdneo2.def
new file mode 100644
index 0000000..6207414
--- /dev/null
+++ b/windows/kbdneo2/Quelldateien/kbdneo2.def
@@ -0,0 +1,4 @@
+LIBRARY KBDNEO2
+
+EXPORTS
+ KbdLayerDescriptor @1
diff --git a/windows/kbdneo2/Quelldateien/kbdneo2.h b/windows/kbdneo2/Quelldateien/kbdneo2.h
new file mode 100644
index 0000000..e4177b1
--- /dev/null
+++ b/windows/kbdneo2/Quelldateien/kbdneo2.h
@@ -0,0 +1,109 @@
+/****************************** Module Header ******************************\
+* Module Name: KBDNEO2.H
+*
+* keyboard layout header for NEO German
+*
+* Various defines for use by keyboard input code.
+*
+* History: Ver 0.1
+*
+\***************************************************************************/
+
+/*
+ * kbd type should be controlled by cl command-line argument
+ */
+#define KBD_TYPE 4
+
+/*
+* Include the basis of all keyboard table values
+*/
+#include "kbd.h"
+#include <dontuse.h>
+/***************************************************************************\
+* The table below defines the virtual keys for various keyboard types where
+* the keyboard differ from the US keyboard.
+*
+* _EQ() : all keyboard types have the same virtual key for this scancode
+* _NE() : different virtual keys for this scancode, depending on kbd type
+*
+* +------+ +----------+----------+----------+----------+----------+----------+
+* | Scan | | kbd | kbd | kbd | kbd | kbd | kbd |
+* | code | | type 1 | type 2 | type 3 | type 4 | type 5 | type 6 |
+\****+-------+_+----------+----------+----------+----------+----------+----------+*/
+
+#undef T0D
+#define T0D _EQ( OEM_2 )
+#undef T10
+#define T10 _EQ( 'X' )
+#undef T11
+#define T11 _EQ( 'V' )
+#undef T12
+#define T12 _EQ( 'L' )
+#undef T13
+#define T13 _EQ( 'C' )
+#undef T14
+#define T14 _EQ( 'W' )
+#undef T15
+#define T15 _EQ( 'K' )
+#undef T16
+#define T16 _EQ( 'H' )
+#undef T17
+#define T17 _EQ( 'G' )
+#undef T18
+#define T18 _EQ( 'F' )
+#undef T19
+#define T19 _EQ( 'Q' )
+#undef T1A
+#define T1A _EQ( OEM_3 )
+#undef T1B
+#define T1B _EQ( OEM_4 )
+#undef T1E
+#define T1E _EQ( 'U' )
+#undef T1F
+#define T1F _EQ( 'I' )
+#undef T20
+#define T20 _EQ( 'A' )
+#undef T21
+#define T21 _EQ( 'E' )
+#undef T22
+#define T22 _EQ( 'O' )
+#undef T23
+#define T23 _EQ( 'S' )
+#undef T24
+#define T24 _EQ( 'N' )
+#undef T25
+#define T25 _EQ( 'R' )
+#undef T26
+#define T26 _EQ( 'T' )
+#undef T27
+#define T27 _EQ( 'D' )
+#undef T28
+#define T28 _EQ( 'Y' )
+#undef T29
+#define T29 _EQ( OEM_1 )
+#undef T2B
+#define T2B _EQ( KANA ) // Mod 3
+// #define T2B _EQ( OEM_ROYA )
+#undef T2C
+#define T2C _EQ( OEM_5 )
+#undef T2D
+#define T2D _EQ( OEM_6 )
+#undef T2E
+#define T2E _EQ( OEM_7 )
+#undef T2F
+#define T2F _EQ( 'P' )
+#undef T30
+#define T30 _EQ( 'Z' )
+#undef T31
+#define T31 _EQ( 'B' )
+#undef T35
+#define T35 _EQ( 'J' )
+#undef T3A
+#define T3A _EQ( KANA )// Mod 3
+// #define T3A _EQ( OEM_ROYA )
+#undef X38
+#define X38 _EQ( RMENU )// Mod 5
+// #define X38 _EQ( OEM_102 )
+#undef T56
+#define T56 _EQ( RMENU )// Mod 5
+// #define T56 _EQ( OEM_102 ) \ No newline at end of file
diff --git a/windows/kbdneo2/Quelldateien/kbdneo2.rc b/windows/kbdneo2/Quelldateien/kbdneo2.rc
new file mode 100644
index 0000000..ec83d64
--- /dev/null
+++ b/windows/kbdneo2/Quelldateien/kbdneo2.rc
@@ -0,0 +1,11 @@
+#include <windows.h>
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_DRV_KEYBOARD
+#define VER_FILEDESCRIPTION_STR "NEO2 German ergonomic Keyboard Layout"
+#define VER_INTERNALNAME_STR "kbdneo2"
+#define VER_ORIGINALFILENAME_STR "kbdneo2.dll"
+
+#define VER_LANGNEUTRAL
+#include "common.ver"
diff --git a/windows/kbdneo2/Quelldateien/makefile b/windows/kbdneo2/Quelldateien/makefile
new file mode 100644
index 0000000..23d6985
--- /dev/null
+++ b/windows/kbdneo2/Quelldateien/makefile
@@ -0,0 +1,15 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!IF DEFINED(_NT_TARGET_VERSION)
+! IF $(_NT_TARGET_VERSION)>=0x501
+! INCLUDE $(NTMAKEENV)\makefile.def
+! ELSE
+! message BUILDMSG: Warning : The sample "$(MAKEDIR)" is not valid for the current OS target.
+! ENDIF
+!ELSE
+! INCLUDE $(NTMAKEENV)\makefile.def
+!ENDIF
+
diff --git a/windows/kbdneo2/Quelldateien/makefile.inc b/windows/kbdneo2/Quelldateien/makefile.inc
new file mode 100644
index 0000000..fdf82aa
--- /dev/null
+++ b/windows/kbdneo2/Quelldateien/makefile.inc
@@ -0,0 +1 @@
+!INCLUDE ..\..\makefile.inc
diff --git a/windows/kbdneo2/Quelldateien/sources b/windows/kbdneo2/Quelldateien/sources
new file mode 100644
index 0000000..a4d98f3
--- /dev/null
+++ b/windows/kbdneo2/Quelldateien/sources
@@ -0,0 +1,2 @@
+TARGETNAME=kbdneo2
+!INCLUDE ..\..\sources.inc
diff --git a/windows/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll b/windows/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll
new file mode 100644
index 0000000..0f69144
--- /dev/null
+++ b/windows/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll
Binary files differ
diff --git a/windows/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll b/windows/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll
new file mode 100644
index 0000000..ad26439
--- /dev/null
+++ b/windows/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll
Binary files differ
diff --git a/windows/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll b/windows/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll
new file mode 100644
index 0000000..f207250
--- /dev/null
+++ b/windows/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll
Binary files differ
diff --git a/windows/kbdneo2/Treiber/64bit_Windows_Server_2003_und_Windows_XP/NEO20.dll b/windows/kbdneo2/Treiber/64bit_Windows_Server_2003_und_Windows_XP/NEO20.dll
new file mode 100644
index 0000000..8fdcd18
--- /dev/null
+++ b/windows/kbdneo2/Treiber/64bit_Windows_Server_2003_und_Windows_XP/NEO20.dll
Binary files differ
diff --git a/windows/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll b/windows/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll
new file mode 100644
index 0000000..24c8ce4
--- /dev/null
+++ b/windows/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll
Binary files differ
diff --git a/windows/kbdneo2/Treiber/README.txt b/windows/kbdneo2/Treiber/README.txt
new file mode 100644
index 0000000..45491f3
--- /dev/null
+++ b/windows/kbdneo2/Treiber/README.txt
@@ -0,0 +1,16 @@
+==Installation der Windows-Treiber ==
+Zur Zeit gibt es leider noch keine eigene Installationsroutine für diese Treiber. Deshalb muss zuerst noch die MSKLC-Variante installiert werden und anschließend die NEO20.dll-Datei im Ordner \WINDOWS\system32 mit der hier
+vorhandenen Datei überschrieben werden.
+
+1.) MSKLC installieren
+2.) NEO20.dll nach \WINDOWS\system32 kopieren und die dort vorhandene Version überschreiben
+3.) Jetzt kann in der Systemsteuerung (Start->Einstellungen->Systemsteuerung) unter „Regions- und Sprachoptionen“ -> Reiter „Sprachen“ -> „Details“ -> „Hinzufügen“ -> „Tastaturlayout/IME“ -> „Deutsch (NEO ergonomisch 2.0)“ hinzugefügt werden.
+
+Es ist keine Registry-Änderung mehr nötig!
+
+==Installation der Windows-Treiber ==
+1.) Einige spezielle Funktionen lassen sich (noch?) nicht belegen und sind deshalb leider nicht verfügbar.
+Dazu gehören leider die Pfeiltasten, Entf, Seite hoch/runter, Einfg, Pos1 und Ende.
+2.) Ein Einrasten von Modifiern ist treibertechnisch leider nicht möglich.
+3.) Die Kombo-/Komponier-/Compose-Taste wird nicht unterstützt.
+4.) Leider verwenden einige Programme Strg+Alt+… für Shortcuts. Damit kann es zu Konflikten zwischen den Programmen und den Ebenen 4 und 6 kommen.
diff --git a/windows/msklc/NEO20_amd64.msi b/windows/msklc/NEO20_amd64.msi
new file mode 100644
index 0000000..ef7bf58
--- /dev/null
+++ b/windows/msklc/NEO20_amd64.msi
Binary files differ
diff --git a/windows/msklc/NEO20_i386.msi b/windows/msklc/NEO20_i386.msi
new file mode 100644
index 0000000..2a6916e
--- /dev/null
+++ b/windows/msklc/NEO20_i386.msi
Binary files differ
diff --git a/windows/msklc/NEO20_ia64.msi b/windows/msklc/NEO20_ia64.msi
new file mode 100644
index 0000000..5c5911d
--- /dev/null
+++ b/windows/msklc/NEO20_ia64.msi
Binary files differ
diff --git a/windows/msklc/README.txt b/windows/msklc/README.txt
new file mode 100644
index 0000000..bb498ef
--- /dev/null
+++ b/windows/msklc/README.txt
@@ -0,0 +1,35 @@
+NEO Tastaturlayout 2.0 (Version für Windows XP)
+===============================================
+
+== Allgemeines ==
+Mit dem msklc-Treiber allein stehen nur die ersten 4 Ebenen von NEO2.0 zur
+Verfügung. Dies liegt an der technischen Beschränkung der Software.
+Um den vollen Umfang nutzen zu können, muss ein ahk-Skript zusätzlich verwendet werden.
+
+== Installieren (nur als Admin möglich!) ==
+Zur Installation einfach Doppelklick auf die Datei „setup.exe“ (ggf. nur als
+„setup“ angezeigt).
+
+== Aktualisieren ==
+Achtung: NEO 2.0 befindet sich noch in Entwicklung. Falls eine neuere Version
+von NEO 2.0 installiert werden soll, so muss evtl. die bereits installierte
+zunächst entfernt werden (wie oben beschrieben).
+Wenn bei der Installation dennoch Probleme auftreten, muss über die System-
+steuerung -> Software der Eintrag „Deutsch (NEO ergonomisch 2.0)“ gelöscht
+werden.
+
+== Modifier (Mod3 und Mod4) einrichten ==
+Um die Belegung der Modifier (Mod3, Mod4) zu erreichen, muss die Datei
+„Mod3_Mod4_neo20.reg“ (bzw. „Mod3_Mod4_neo20“) runtergeladen und installiert
+werden. Die Änderung wirkt sich erst nach einer Neuanmeldung des Benutzers
+aus!
+WARNUNG: Diese Änderung (der Modifier) wirkt sich auf alle Benutzer und alle
+Tastaturlayouts aus!
+
+== Deinstallation ==
+Rückgängig gemacht wird die Umstellung, indem die Datei
+„reset_CapsLock_AltGr.reg“ (bzw. „reset_CapsLock_AltGr“) installiert wird.
+
+== FAQ ==
+Bei Problemen erst mal in die FAQ schauen, das meiste ist bekannt.
+Hier: https://neo.eigenheimstrasse.de/svn/FAQ.txt
diff --git a/windows/msklc/TODO.txt b/windows/msklc/TODO.txt
new file mode 100644
index 0000000..ab88265
--- /dev/null
+++ b/windows/msklc/TODO.txt
@@ -0,0 +1,22 @@
+Neo 2.0 Windowstreiber, TODO
+=============================
+
+0) Alle folgenden Punkte können mit einem entsprechenden ahk-Skript
+ ermöglicht werden. Bis auf Punkt 6) können alle gestrichen werden,
+ wenn das Skript vorliegt.
+
+1) Ebenen 4 und 6 sind über SGCaps realisiert. Gibt es eine Möglichkeit,
+ Caps-Lock, eine andere Realisierung wäre wünschenswert.
+
+2) Ein „Hack“ für die aktuelle Belegung der Modifier fehlt noch.
+
+3) CapsLock über Tastenkombinationen scheint mit dem MS Layouteditor
+ nicht machbar.
+
+4) Numpad geht in höheren Ebenen nicht. Hier gibt es im Layouteditor
+ offenbar keine Möglichkeit.
+
+5) Eine Belegung von Space in höheren Ebenen ist mit dem MS Layouteditor
+ nicht möglich.
+
+6) Sind alle Deadkeys richtig belegt? Fehlen noch bestimmte Zeichen?
diff --git a/windows/msklc/amd64/NEO20.dll b/windows/msklc/amd64/NEO20.dll
new file mode 100644
index 0000000..0bf4509
--- /dev/null
+++ b/windows/msklc/amd64/NEO20.dll
Binary files differ
diff --git a/windows/msklc/i386/NEO20.dll b/windows/msklc/i386/NEO20.dll
new file mode 100644
index 0000000..83bd5dd
--- /dev/null
+++ b/windows/msklc/i386/NEO20.dll
Binary files differ
diff --git a/windows/msklc/ia64/NEO20.dll b/windows/msklc/ia64/NEO20.dll
new file mode 100644
index 0000000..c757ccf
--- /dev/null
+++ b/windows/msklc/ia64/NEO20.dll
Binary files differ
diff --git a/windows/msklc/setup.exe b/windows/msklc/setup.exe
new file mode 100644
index 0000000..605579e
--- /dev/null
+++ b/windows/msklc/setup.exe
Binary files differ
diff --git a/windows/msklc/wow64/NEO20.dll b/windows/msklc/wow64/NEO20.dll
new file mode 100644
index 0000000..0f23157
--- /dev/null
+++ b/windows/msklc/wow64/NEO20.dll
Binary files differ
diff --git a/windows/neo_portable.zip b/windows/neo_portable.zip
new file mode 100644
index 0000000..ccf3666
--- /dev/null
+++ b/windows/neo_portable.zip
Binary files differ