diff options
| author | florian <florian@b9310e46-f624-0410-8ea1-cfbb3a30dc96> | 2008-05-06 07:47:03 +0000 | 
|---|---|---|
| committer | florian <florian@b9310e46-f624-0410-8ea1-cfbb3a30dc96> | 2008-05-06 07:47:03 +0000 | 
| commit | 0012904f168be57d1c98ec187572174c330eb14f (patch) | |
| tree | df9b8158473910111f776ed62f38c729173af8bf | |
| parent | 7ec1eaf246160591da77907432ee990b49659671 (diff) | |
| download | neo-layout-0012904f168be57d1c98ec187572174c330eb14f.tar.gz neo-layout-0012904f168be57d1c98ec187572174c330eb14f.tar.bz2 neo-layout-0012904f168be57d1c98ec187572174c330eb14f.zip  | |
git-svn-id: https://svn.neo-layout.org@501 b9310e46-f624-0410-8ea1-cfbb3a30dc96
28 files changed, 6505 insertions, 0 deletions
diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..5d34a9d --- /dev/null +++ b/README.txt @@ -0,0 +1,24 @@ + +== Neo 2.0 für Windows ==
 +Für eine Vielzahl von Windowsversionen stehen Treiber zur Verfügung.
 +
 +== 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 die Quelldateien und eine fertige NEO20.dll. 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.
 +Diese Version ist jedoch 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/autohotkey/README.txt b/autohotkey/README.txt new file mode 100644 index 0000000..4b4c207 --- /dev/null +++ b/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/autohotkey/neo20-all-in-one.ahk b/autohotkey/neo20-all-in-one.ahk new file mode 100644 index 0000000..8a30849 --- /dev/null +++ b/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/autohotkey/neo20-all-in-one.exe b/autohotkey/neo20-all-in-one.exe Binary files differnew file mode 100644 index 0000000..31a37b5 --- /dev/null +++ b/autohotkey/neo20-all-in-one.exe diff --git a/autohotkey/neo20_mod-test.ahk b/autohotkey/neo20_mod-test.ahk new file mode 100644 index 0000000..bb7b736 --- /dev/null +++ b/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/kbdneo2/Quelldateien/README.txt b/kbdneo2/Quelldateien/README.txt new file mode 100644 index 0000000..8d00f7a --- /dev/null +++ b/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/kbdneo2/Quelldateien/kbdneo2.c b/kbdneo2/Quelldateien/kbdneo2.c new file mode 100644 index 0000000..32e8ec4 --- /dev/null +++ b/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/kbdneo2/Quelldateien/kbdneo2.def b/kbdneo2/Quelldateien/kbdneo2.def new file mode 100644 index 0000000..6207414 --- /dev/null +++ b/kbdneo2/Quelldateien/kbdneo2.def @@ -0,0 +1,4 @@ +LIBRARY KBDNEO2
 +
 +EXPORTS
 +    KbdLayerDescriptor @1
 diff --git a/kbdneo2/Quelldateien/kbdneo2.h b/kbdneo2/Quelldateien/kbdneo2.h new file mode 100644 index 0000000..e4177b1 --- /dev/null +++ b/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/kbdneo2/Quelldateien/kbdneo2.rc b/kbdneo2/Quelldateien/kbdneo2.rc new file mode 100644 index 0000000..ec83d64 --- /dev/null +++ b/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/kbdneo2/Quelldateien/makefile b/kbdneo2/Quelldateien/makefile new file mode 100644 index 0000000..23d6985 --- /dev/null +++ b/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/kbdneo2/Quelldateien/makefile.inc b/kbdneo2/Quelldateien/makefile.inc new file mode 100644 index 0000000..fdf82aa --- /dev/null +++ b/kbdneo2/Quelldateien/makefile.inc @@ -0,0 +1 @@ +!INCLUDE ..\..\makefile.inc
 diff --git a/kbdneo2/Quelldateien/sources b/kbdneo2/Quelldateien/sources new file mode 100644 index 0000000..a4d98f3 --- /dev/null +++ b/kbdneo2/Quelldateien/sources @@ -0,0 +1,2 @@ +TARGETNAME=kbdneo2
 +!INCLUDE ..\..\sources.inc
 diff --git a/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll b/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll Binary files differnew file mode 100644 index 0000000..0f69144 --- /dev/null +++ b/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll diff --git a/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll b/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll Binary files differnew file mode 100644 index 0000000..ad26439 --- /dev/null +++ b/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll diff --git a/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll b/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll Binary files differnew file mode 100644 index 0000000..f207250 --- /dev/null +++ b/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll diff --git a/kbdneo2/Treiber/64bit_Windows_Server_2003_und Windows_XP/NEO20.dll b/kbdneo2/Treiber/64bit_Windows_Server_2003_und Windows_XP/NEO20.dll Binary files differnew file mode 100644 index 0000000..8fdcd18 --- /dev/null +++ b/kbdneo2/Treiber/64bit_Windows_Server_2003_und Windows_XP/NEO20.dll diff --git a/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll b/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll Binary files differnew file mode 100644 index 0000000..24c8ce4 --- /dev/null +++ b/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll diff --git a/kbdneo2/Treiber/README.txt b/kbdneo2/Treiber/README.txt new file mode 100644 index 0000000..622623e --- /dev/null +++ b/kbdneo2/Treiber/README.txt @@ -0,0 +1,24 @@ +==Windows-Treiber==
 +Leider gibt es bislang noch keine eigene Installationsroutine. Zur Installation
 +muss deshalb zur Zeit noch die MSKLC-Variante installiert werden, anschließend 
 +muss die NEO20.dll-Datei im Ordner \WINDOWS\system32 mit der hier vorhandenen 
 +Datei überschrieben werden.
 +
 +1.) MSKLC-Variante installieren
 +2.) NEO20.dll nach \WINDOWS\system32 kopieren und die dort vorhandene Version
 +    überschreiben
 +
 +Es ist keine Registry-Änderung mehr nötig!
 +
 +
 +
 +==Einschränkungen des Windows-Treibers==
 +1.) Einige Steuertasten lassen sich (noch?) nicht belegen und stehen deshalb 
 +nicht zur Verfügung.
 +Dazu gehören leider auch die Pfeiltasten, Entf, Seite
 +hoch/runter, Einfg, Pos1 und Ende.
 +2.) Ein Einrasten von Modifiern ist leider nicht möglich.
 +3.) Bei vielen Programmen wird die Kombination Alt+Strg+… für Shortcuts verwendet 
 +und kann so in Konflikt mit den höheren Ebenen (Ebene 4 und 6) kommen.
 +4.) Die Belegung des Ziffernblocks ist noch unvollständig.
 +5.) Es gibt keine Kombo-/Komponier-/Compose-/Multi-Key-Taste.
\ No newline at end of file diff --git a/msklc/NEO20_amd64.msi b/msklc/NEO20_amd64.msi Binary files differnew file mode 100644 index 0000000..ef7bf58 --- /dev/null +++ b/msklc/NEO20_amd64.msi diff --git a/msklc/NEO20_i386.msi b/msklc/NEO20_i386.msi Binary files differnew file mode 100644 index 0000000..2a6916e --- /dev/null +++ b/msklc/NEO20_i386.msi diff --git a/msklc/NEO20_ia64.msi b/msklc/NEO20_ia64.msi Binary files differnew file mode 100644 index 0000000..5c5911d --- /dev/null +++ b/msklc/NEO20_ia64.msi diff --git a/msklc/amd64/NEO20.dll b/msklc/amd64/NEO20.dll Binary files differnew file mode 100644 index 0000000..0bf4509 --- /dev/null +++ b/msklc/amd64/NEO20.dll diff --git a/msklc/i386/NEO20.dll b/msklc/i386/NEO20.dll Binary files differnew file mode 100644 index 0000000..83bd5dd --- /dev/null +++ b/msklc/i386/NEO20.dll diff --git a/msklc/ia64/NEO20.dll b/msklc/ia64/NEO20.dll Binary files differnew file mode 100644 index 0000000..c757ccf --- /dev/null +++ b/msklc/ia64/NEO20.dll diff --git a/msklc/setup.exe b/msklc/setup.exe Binary files differnew file mode 100644 index 0000000..605579e --- /dev/null +++ b/msklc/setup.exe diff --git a/msklc/wow64/NEO20.dll b/msklc/wow64/NEO20.dll Binary files differnew file mode 100644 index 0000000..0f23157 --- /dev/null +++ b/msklc/wow64/NEO20.dll diff --git a/neo_portable.zip b/neo_portable.zip Binary files differnew file mode 100644 index 0000000..ccf3666 --- /dev/null +++ b/neo_portable.zip  | 
