root/windows/autohotkey/neo20.ahk @ 688

Revision 688, 126.3 KB (checked in by dennis, 5 years ago)

Die SendUnicodeChar-Methode um den GDK-Workarround von Matthias Wächter ergänzt.

Line 
1/*
2*******************************************
3
4
5
6WICHTIGE WARNUNG:
7
8Dies ist inzwischen eine automatisch generierte
9Datei! Sie wird regelm��ig �berschrieben und
10sollte deshalb nicht mehr direkt bearbeitet werden!
11
12
13
14DIE AUSF�HRBARE DATEI AKTUALISIEREN:
15
16Um die neo20-all-in-one.exe auf den neuesten Stand zu
17bringen, reicht (wenn Autohotkey im Standardverzeichnis
18installiert wurde) ein Doppelklick auf die Batch-Datei
19Build-Update.bat
20
21
22
23HINWEISE F�R AHK-ENTWICKLER:
24
25Anstatt dieser Datei m�ssen die Dateien/Module im
26Source-Unterverzeichnis bearbeitet werden, etwa:
27Source\Changelog-and-Todo.ahk
28Source\Keys-Neo.ahk
29Source\Keys-Qwert-to-Neo.ahk
30Source\Methods-Layers.ahk
31Source\Methods-Lights.ahk
32
33Um die gemachten �nderungen zu testen, sollte die Datei
34Source\All.ahk
35verwendet werden, die alle Module einbindet und
36regul�r durch einen Doppelklick mit dem AHK-Interpreter
37gestartet werden kann.
38
39Der grosse Vorteil dieser Methode liegt daran, dass sich die
40Zeilennummern eventueller Fehlermeldungen nicht mehr auf
41die grosse "vereinigte" AHK-Datei, sondern auf die tats�ch-
42lich relevanten Module beziehen, z.B.:
43
44Error at line 64 in #include file "C:\...\autohotkey\Source\Methods-Lights.ahk"
45Line Text: CTL_CODE_LED(p_device_type, p_function, p_method, p_access)
46Error: Functions cannot contain functions.
47The programm will exit.
48
49
50
51AHK-LINKS
52
53Eine kurze Einf�hrung (Installation und Beispielscipt) findet man etwa auf
54http://www.kikizas.net/en/usbapps.ahk.html
55
56Eine alphabetische Liste aller erlaubten Kommandos findet man online unter
57http://www.autohotkey.com/docs/commands.htm
58
59
60
61*******************************************
62*/
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96/*
97*******************************************
98DU BIST GEWARNT WORDEN!
99*******************************************
100*/
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128/*
129    Titel:        NEO 2.0 beta Autohotkey-Treiber
130    $Revision:    624 $
131    $Date:        2008-07-08 18:50:00 +0200 (Di, 07 Jul 2008) $
132    Autoren:      Stefan Mayer <stm (at) neo-layout. o r g>
133                  Nora Geissler <nora_geissler (at) yahoo. d e>
134                  Matthias Berg <neo (at) matthias-berg. e u>
135                  ...
136                 
137                 
138                 
139                 
140    TODO:         - ausgiebig testen... (besonders Vollst�ndigkeit bei Deadkeys)
141                  - Bessere L�sung f�r das leeren von PriorDeadKey finden, damit die Sondertasten
142                    nicht mehr abgefangen werden m�ssen.
143                  - Testen ob die Capslockl�sung (siehe *1:: ebene 1) auch f�r Numpad gebraucht wird
144                  - Sind Ebenen vom Touchpad noch richtig?
145                  - Die Bildschirmtastatur mit Mod4 deaktiviert den Mod4-Lock
146                  - Auf der 6. Ebene von 2 und 3 werden Delta und Nabla gesendet, aber nicht die
147                    logischen Symbole UND und ODER (wie in der Referenz)
148    Ideen:        - Symbol �ndern (Neo-Logo abwarten)
149                  - bei Ebene 4 rechte Hand (Numpad) z.B. Numpad5 statt 5 senden
150                  - Tastatur-Reset: mod4+escape (oder ev. ein anderer Hotkey) soll die
151                    Tastatur wieder in den Normalzustand versetzen (d.h. alle Ebenen
152                    unlocken und Einhand, Lang-s oder Sonstwelche-Modi deaktivieren)
153                  - Die Varianten (lernModus, einHandNeo, Lang-s-Tastatur Qwertz/pausieren)
154                    sollten einheitlich (de-)aktiviert werden, etwa �ber Mod4 F9-F12
155
156
157    CHANGEHISTORY:
158                  Revision 687 (von Dennis Heidsiek):
159                  - Die SendUnicodeChar-Methode um den GDK-Workarround von Matthias W�chter erg�nzt
160                  - (An/Aus) Icons an Favicon der neuen Homepage angepasst
161                  Revision 645 (von Martin Roppelt):
162                  - Ellipse zus�tzlich auf M3+x;
163                  - Lang-s-Tastatur probeweise auf M4+Esc
164                  Revision 640 (von Dennis Heidsiek):
165                  - Der untote Zirkumflex (^) auf Ebene 3 funktioniert jetzt auch
166                    in Java-Programmen
167                  Revision 639 (von Martin Roppelt):
168                  - Lang-s-Tastatur kann nicht mehr durch einen Hotkey aktiviert werden
169                  Revision 629 (von Martin Roppelt):
170                  - Spitze Klammern (bra und ket) testweise auf M5+8/9
171                  Revision 624 (von Martin Roppelt):
172                  - Lang-s-Tastatur (ein- und auszuschalten durch Mod4+�)
173                  Revision 616 (von Dennis Heidsiek):
174                  - Der nicht funktionierende Mod5-Lock-Fix wurde wieder entfernt, da
175                    er sogar neue Fehler produzierte.
176                  Revision 615 (von Dennis Heidsiek):
177                  - Erfolgloser Versuch, den Mod4-Lock wiederherzustellen
178                    (durch eine Tilde vor den Scancodes der Bildschirmtastatur).
179                  - Rechtschreibfehler korrigiert.
180                  - Zwei AHK-Links eingef�gt.
181                  Revision 609 (von Dennis Heidsiek):
182                  - Vorl�ufiger Abschluss der AHK-Modularisierung.
183                  - Bessere Testm�glichkeit �All.ahk� f�r AHK-Entwickler hinzugef�gt, bei der
184                    sich die Zeilenangaben in Fehlermeldungen auf die tats�chlichen Module und
185                    nicht auf das gro�e �vereinigte� Skript beziehen.
186                  Revision 608 (von Martin Roppelt):
187                  - Rechtschreibfehler korrigiert und Dateinamen aktualisiert und sortiert.
188                  Revision 590 (von Dennis Heidsiek):
189                  - Erste technische Vorarbeiten zur logischen Modularisierung des viel
190                    zu lange gewordenen AHK-Quellcodes.
191                  - Neue Batch-Datei Build-Update.bat zur einfachen Aktualisierung der EXE-Datei
192                  Revision 583 (von Dennis Heidsiek):
193                  - Kleinere Korrekturen (Mod3+Numpad5, Mod5+Numpad5 und Mod3+Numpad9
194                    stimmen wieder mit der Referenz �berein).
195                  Revision 580 (von Matthias Berg):
196                  - Bildschirmtastatur jetzt mit Mod4+F* statt Strg+F*, dies deaktiviert
197                    jedoch leider den Mod4-Lock
198                  Revision 570 (von Matthias Berg):
199                  - Hotkeys f�r einHandNeo und lernModus durch entsprechende ScanCodes ersetzt
200                  Revision 568 (von Matthias Berg):
201                  - Sonderzeichen, Umlaute, z und y durch ScanCodes ersetzt
202                    * jetzt wird auch bei eingestelltem US Layout Neo verwendet.
203                      (z.B. f�r Chinesische InputMethodEditors)
204                    * rechter Mod3 geht noch nicht bei US Layout (weder ScanCode noch "\")
205                  Revision 567 (von Dennis Heidsiek):
206                  - Aktivierter Mod4 Lock wird jetzt �ber die Rollen-LED des Keybord angezeigt
207                    (analog zu CapsLock), die NUM-LED beh�lt ihr bisheriges Verhalten
208                  - Neue Option im Skript: UseMod4Light
209                  Revision 561 (von Matthias Berg):
210                  - Ebene 4 Tab verh�lt sich jetzt wie das andere Tab dank "goto neo_tab"
211                  Revision 560 (von Dennis Heidsiek):
212                  - Neue Option im Skript: bildschirmTastaturEinbinden bindet die PNG-Bilder der
213                    Bildschirmtastur mit in die exe-Datei ein, so dass sich der Benutzer nur eine Datei
214                    herunterladen muss
215                  Revision 559 (von Matthias Berg):
216                  - Shift+Alt+Tab Problem gel�st (muss noch mehr auf Nebeneffekte getestet werden)
217                  Revision 558 (von Matthias Berg):
218                  - Icon-Bug behoben
219                    * Hotkeys d�rfen nicht vor der folgenden Zeile stehen:
220                     "menu, tray, icon, neo.ico,,1"
221                  - lernModus-Konfigurations-Bug behoben: or statt and(not)
222                  - Ein paar leere Else-F�lle eingebaut (Verst�ndlichkeit, m�gliche Compilerprobleme vermeiden)   
223                  Revision 556 (von Matthias Berg):
224                  - lernModus (an/aus mit Strg+Komma)
225                    * im Skript konfigurierbar
226                    * Schaltet z.B. Qwertz Tasten aus, die es auf der 4. Ebene gibt (Return, Backspace,...)
227                    * Kann auch Backspace und/oder Entfernen der 4. Ebene ausschalten (gut zum Lernen richtig
228                      zu schreiben)
229                  - Bug aufgetaucht: Icons werden nicht mehr angezeigt
230                  Revision 544 (von Stefan Mayer):
231                  - ,.:; auf dem Mod4-Ziffernblock an die aktuelle Referenz angepasst
232                  - Versionen von rho, theta, kappa und phi an die aktuelle Referenz angepasst
233                  Revision 542 (von Matthias Berg):
234                  - bei EinHandNeo ist jetzt Space+y auch Mod4
235                  - AltGr-Bug  hoffentlich wieder behoben. Diesmal mit extra altGrPressed Variable
236                  - nurEbenenFuenfUndSechs umbenannt in ahkTreiberKombi und auf Ebene 4 statt 5 und 6 ge�ndert
237                  Revision 540 (von Matthias Berg):
238                  - stark �berarbeitet um Wartbarkeit zu erh�hen und Redundanz zu veringern
239                  - nurEbenenFuenfUndSechs sollte nun auch auf Neo Treiber statt Qwertz laufen
240                    * aber es muss noch jemand testen
241                    * Problem: was kann man abfangen, wenn eine tote Taste gedr�ckt wird
242                 - einHandNeo:
243                    * An-/Ausschalten mit STRG+Punkt
244                    * Buchstaben der rechten Hand werden mit Space zur linken Hand
245                    * Nebeneffekt: es gibt beim Festhalten von Space keine wiederholten Leerzeichen mehr
246                  Revision 532 (von Matthias Berg):
247                  - BildschirmTastatur
248                    * aktiviert mit strg+F1 bis 7 schaltet Keyboard ein oder aus
249                    * strg+F7 zeigt die zuletzt angezeigte Ebene an (und wieder aus).
250                    * strg+F8 schaltet AlwaysOnTop um   
251                  Revision 529 (von Stefan Mayer):
252                  - Icon wird automatisch geladen, falls .ico-Dateien im selbem Ordner
253                  - in der .exe sind die .ico mitgespeichert und werden geladen
254                  Revision 528 (von Matthias Berg):
255                  - Neo-Icon
256                  - Neo-Prozess jetzt automatisch auf hoher Prioritaet
257                    (siehe globale Schalter)
258                  - Mod3-Lock (nur wenn rechtes Mod3 zuerst gedr�ckt wird, andere L�sung f�hrte zum Caps-Bug)
259                  - Mod4-Lock (nur wenn das linke Mod4 zuerst gedr�ckt wird, andere L�sung f�hte zum AltGr-Bug)
260                  - Ein paar falsche Zeichen korrigiert
261                  Revision 527 (von Matthias Berg):
262                  - AltGr Problem hoffentlich behoben
263                  - Umschalt+Mod4 Bug behoben
264                  Revision 526 (von Matthias Berg):
265                  - Ebenen 1 bis 4 ausschalten per Umschalter siehe erste Codezeile
266                     nurEbenenFuenfUndSechs = 0
267                  - Mod4-Lock durch Mod4+Mod4
268                  - EbenenAktualisierung neu geschrieben
269                  - Ebene 6 �ber Mod3+Mod4
270                  - Ebenen (besonders Matheebene) an Referenz angepasst
271                    (allerdings kaum um Ebenen 1&2 gek�mmert, besonders Compose k�nnte noch �berholt werden)
272                  Revision 525 (von Matthias Berg):
273                  - Capslock bei Zahlen und Sonderzeichen ber�cksichtigt
274                  Revision 524 (von Matthias Berg):
275                  - umgekehrtes ^ f�r o, a, �,i  sowie f�r die grossen vokale ( 3. ton chinesisch)
276                    � damit wird jetzt PinYin vollst�ndig unterst�tzt caron, macron, akut, grave auf uiaeo�
277                  - Sonderzeichen senden wieder blind -> Shortcuts funktionieren, Capslock ist leider Shiftlock
278                  Revision 523 (von Matthias Berg):
279                        - CapsLock geht jetzt auch bei allen Zeichen ('send Zeichen' statt 'send {blind} Zeichen')
280                  - vertikale Ellipse eingebaut
281                  - Umschalt+Umschalt f�r Capslock statt Mod3+Mod3
282                  - bei Suspend wird jetzt wirklich togglesuspend aufgerufen (auch beim aktivieren per shift+pause)
283                  Revsion 490 (von Stefan Mayer):
284                  - SUBSCRIPT von 0 bis 9 sowie (auf Ziffernblock) + und -
285                    � auch bei Ziffernblock auf der 5. Ebene
286                  - Kein Parsen �ber die Zwischenablage mehr
287                  - Vista-kompatibel
288                  - Compose-Taste
289                    � Br�che (auf Zahlenreihe und Hardware-Ziffernblock)
290                    � r�mische Zahlen
291                    � Ligaturen und Copyright
292*/
293
294
295
296/******************
297 Globale Schalter *
298*******************
299*/
300
301; Im folgenden gilt (soweit nicht anders angegeben) Ja = 1, Nein = 0:
302ahkTreiberKombi := 0             ; Sollen Ebenen 1-4 ignoriert werden? (kann z.B. vom dll Treiber �bernommen werden)
303einHandNeo := 0                  ; Soll der Treiber im Einhandmodus betrieben werden?
304lernModus := 0                   ; Soll der Lernmodus aktiviert werden?
305bildschirmTastaturEinbinden := 1 ; Sollen die Bilder f�r die Bildschirmtastatur in die EXE-Datei miteingebunden werden (Nachteil: gr�ssere Dateigr�sse, Vorteil: Referenz f�r Anf�nger stets einfach verf�gbar)
306UseMod4Light := 1                ; Aktivierter Mod4 Lock wird �ber die Rollen-LED des Keybord angezeigt (analog zu CapsLock)
307LangSTastatur := 0               ; Sollen Lang-s auf s, s auf � und � auf M3+� gelegt werden?
308
309Process, Priority,, High
310
311
312/*************************
313 Recourcen-Verwaltung    *
314**************************
315*/
316
317; Versuche zuerst, eventuell in die EXE eingebundenen Dateien zu extrahieren
318FileInstall, neo.ico, neo.ico, 1
319FileInstall, neo_disabled.ico, neo_disabled.ico, 1
320
321if(bildschirmTastaturEinbinden==1) {
322   FileInstall, ebene1.png, ebene1.png, 1
323   FileInstall, ebene2.png, ebene2.png, 1
324   FileInstall, ebene3.png, ebene3.png, 1
325   FileInstall, ebene4.png, ebene4.png, 1
326   FileInstall, ebene5.png, ebene5.png, 1
327   FileInstall, ebene6.png, ebene6.png, 1
328}
329
330; Benutze die Dateien (soweit sie vorhanden sind)
331if ( FileExist("ebene1.png") && FileExist("ebene2.png") && FileExist("ebene3.png") && FileExist("ebene4.png") && FileExist("ebene5.png") && FileExist("ebene6.png") )
332  zeigeBildschirmTastatur = 1
333
334if ( FileExist("neo.ico") && FileExist("neo_disabled.ico") )
335  iconBenutzen = 1
336
337
338/*************************
339 lernModus Konfiguration *
340 nur relevant wenn       *
341 lernModus = 1           *
342 Strg+Komma schaltet um  *
343**************************
344*/
345; 0 = aus, 1 = an
346
347
348; die Nachfolgenden sind n�tzlich um sich die Qwertz-Tasten abzugew�hnen, da alle auf der 4. Ebene vorhanden.
349lernModus_std_Return = 0
350lernModus_std_Backspace = 0
351lernModus_std_PgUp = 0
352lernModus_std_PgDn = 0
353lernModus_std_Einf = 0
354lernModus_std_Entf = 0
355lernModus_std_Pos0 = 0
356lernModus_std_Ende = 0
357lernModus_std_Hoch = 0
358lernModus_std_Runter = 0
359lernModus_std_Links = 0
360lernModus_std_Rechts = 0
361lernModus_std_ZahlenReihe = 0
362
363
364
365; im folgenden kann man auch noch ein paar Tasten der 4. Ebene deaktivieren
366; n�tzlich um sich zu zwingen, richtig zu schreiben
367lernModus_neo_Backspace = 0
368lernModus_neo_Entf = 1
369
370
371 
372
373; aus Noras script kopiert:
374#usehook on
375#singleinstance force
376#LTrim
377  ; Quelltext kann einger�ckt werden,
378  ; msgbox ist trotzdem linksb�ndig
379
380SetTitleMatchMode 2
381SendMode Input 
382
383name    = Neo 2.0
384enable  = Aktiviere %name%
385disable = Deaktiviere %name%
386
387; �berpr�fung auf deutsches Tastaturlayout
388; ----------------------------------------
389
390regread, inputlocale, HKEY_CURRENT_USER, Keyboard Layout\Preload, 1
391regread, inputlocalealias, HKEY_CURRENT_USER
392     , Keyboard Layout\Substitutes, %inputlocale%
393if inputlocalealias <>
394   inputlocale = %inputlocalealias%
395if inputlocale <> 00000407
396{
397   suspend   
398   regread, inputlocale, HKEY_LOCAL_MACHINE
399     , SYSTEM\CurrentControlSet\Control\Keyboard Layouts\%inputlocale%
400     , Layout Text
401   msgbox, 48, Warnung!,
402     (
403     Nicht kompatibles Tastaturlayout:   
404     `t%inputlocale%   
405     `nDas deutsche QWERTZ muss als Standardlayout eingestellt 
406     sein, damit %name% wie erwartet funktioniert.   
407     `n�ndern Sie die Tastatureinstellung unter
408     `tSystemsteuerung   
409     `t-> Regions- und Sprachoptionen   
410     `t-> Sprachen
411     `t-> Details...   `n
412     )
413   exitapp
414}
415
416
417
418; Men� des Systray-Icons
419; ----------------------
420
421if (iconBenutzen)
422   menu, tray, icon, neo.ico,,1
423menu, tray, nostandard
424menu, tray, add, �ffnen, open
425   menu, helpmenu, add, About, about
426   menu, helpmenu, add, Autohotkey-Hilfe, help
427   menu, helpmenu, add
428   menu, helpmenu, add, http://&autohotkey.com/, autohotkey
429   menu, helpmenu, add, http://www.neo-layout.org/, neo
430menu, tray, add, Hilfe, :helpmenu
431menu, tray, add
432menu, tray, add, %disable%, togglesuspend
433menu, tray, default, %disable%
434menu, tray, add
435menu, tray, add, Edit, edit
436menu, tray, add, Reload, reload
437menu, tray, add
438menu, tray, add, Nicht im Systray anzeigen, hide
439menu, tray, add, %name% beenden, exitprogram
440menu, tray, tip, %name%
441
442
443/*
444   Variablen initialisieren
445*/
446
447Ebene = 1
448PriorDeadKey := ""
449
450
451 
452
453
454/*
455   EinHandNeo
456*/
457spacepressed := 0
458keypressed:= 0
459
460; Reihe 1
461gespiegelt_7 = neo_6
462gespiegelt_8 = neo_5
463gespiegelt_9 = neo_4
464gespiegelt_0 = neo_3
465gespiegelt_strich = neo_2
466gespiegelt_tot2 = neo_1
467
468; Reihe 2
469gespiegelt_k = neo_w
470gespiegelt_h = neo_c
471gespiegelt_g = neo_l
472gespiegelt_f = neo_v
473gespiegelt_q = neo_x
474gespiegelt_sz = neo_tab
475gespiegelt_tot3 = neo_tot1
476
477; Reihe 3
478gespiegelt_s = neo_o
479gespiegelt_n = neo_e
480gespiegelt_r = neo_a
481gespiegelt_t = neo_i
482gespiegelt_d = neo_u
483
484; Reihe 4
485gespiegelt_b = neo_z
486gespiegelt_m = neo_p
487gespiegelt_komma = neo_�
488gespiegelt_punkt = neo_�
489gespiegelt_j = neo_�
490
491
492
493
494/*
495   ------------------------------------------------------
496   Modifier
497   ------------------------------------------------------
498*/
499
500
501; CapsLock durch Umschalt+Umschalt
502;*CapsLock::return ; Nichts machen beim Capslock release event (weil es Mod3 ist)
503
504*#::return ; Nichts machen beim # release event (weil es Mod3 ist) ; # = SC02B
505
506;RShift wenn vorher LShift gedr�ckt wurde
507LShift & ~RShift:: 
508      if GetKeyState("CapsLock","T")
509      {
510         setcapslockstate, off
511      }
512      else
513      {
514         setcapslockstate, on
515      }
516return
517
518;LShift wenn vorher RShift gedr�ckt wurde
519RShift & ~LShift::
520      if GetKeyState("CapsLock","T")
521      {
522         setcapslockstate, off
523      }
524      else
525      {
526         setcapslockstate, on
527      }
528return
529
530; Mod4-Lock durch Mod4+Mod4
531IsMod4Locked := 0
532< & *SC138::
533      if (IsMod4Locked)
534      {
535         MsgBox Mod4-Feststellung aufgebehoben
536         IsMod4Locked = 0
537         if (UseMod4Light==1)
538         {
539            KeyboardLED(1,"off")
540         }
541      }
542      else
543      {
544         MsgBox Mod4 festgestellt: Um Mod4 wieder zu l�sen dr�cke beide Mod4 Tasten gleichzeitig
545         IsMod4Locked = 1
546         if (UseMod4Light==1)
547         {
548            KeyboardLED(1,"on")
549         }
550      }
551return
552
553*SC138::
554 altGrPressed := 1
555return  ; Damit AltGr nicht extra etwas schickt und als stiller Modifier geht.
556*SC138 up::
557 altGrPressed := 0
558return
559
560; das folgende wird seltsamerweise nicht gebraucht :) oder f�hrt zum AltGr Bug; Umschalt+� (Mod4) Zeigt �
561SC138 & *<::
562      if (IsMod4Locked)
563      {
564         MsgBox Mod4-Feststellung aufgebehoben
565         IsMod4Locked = 0
566      }
567      else
568      {
569         MsgBox Mod4 festgestellt: Um Mod4 wieder zu l�sen dr�cke beide Mod4 Tasten gleichzeitig
570         IsMod4Locked = 1
571      }
572return
573
574 
575 ; Mod3-Lock durch Mod3+Mod3
576IsMod3Locked := 0
577SC02B & *Capslock::  ; #
578      if (IsMod3Locked)
579      {
580         MsgBox Mod3-Feststellung aufgebehoben
581         IsMod3Locked = 0
582      }
583      else
584      {
585         MsgBox Mod3 festgestellt: Um Mod3 wieder zu l�sen dr�cke beide Mod3 Tasten gleichzeitig
586         IsMod3Locked = 1
587      }
588return
589
590
591*Capslock:: return
592;Capslock::MsgBox hallo
593/*
594Capslock & *:
595      if (IsMod3Locked)
596      {
597         MsgBox Mod3-Feststellung aufgebehoben
598         IsMod3Locked = 0
599      }
600      else
601      {
602         MsgBox Mod3 festgestellt: Um Mod3 wieder zu l�sen dr�cke beide Mod3 Tasten gleichzeitig
603         IsMod3Locked = 1
604      }
605return
606*/
607 
608/*
609;  Wird nicht mehr gebraucht weil jetzt auf b (bzw. *n::)
610; KP_Decimal durch Mod4+Mod4
611*<::
612*SC138::
613   if GetKeyState("<","P") and GetKeyState("SC138","P")
614   {
615      send {numpaddot}
616   }
617return
618 
619*/
620
621
622
623/*
624   ------------------------------------------------------
625   QWERTZ->Neo umwandlung
626   ------------------------------------------------------
627*/
628; Reihe 1
629*SC029::goto neo_tot1  ; Zirkumflex ^
630*1::goto neo_1
631*2::goto neo_2
632*3::goto neo_3
633*4::goto neo_4
634*5::goto neo_5
635*6::goto neo_6
636*7::
637     if( not(einHandNeo) or not(spacepressed) )
638       goto neo_7
639     else
640      {
641        keypressed := 1
642        goto %gespiegelt_7%
643      }
644return
645*8::
646     if( not(einHandNeo) or not(spacepressed) )
647       goto neo_8
648     else
649      {
650        keypressed := 1
651        goto %gespiegelt_8%
652      }
653return
654*9::
655     if( not(einHandNeo) or not(spacepressed) )
656       goto neo_9
657     else
658      {
659        keypressed := 1
660        goto %gespiegelt_9%
661      }
662return
663*0::
664     if( not(einHandNeo) or not(spacepressed) )
665       goto neo_0
666     else
667      {
668        keypressed := 1
669        goto %gespiegelt_0%
670      }
671return
672*SC00C::  ; �
673  if ( not(ahkTreiberKombi) )
674  {
675       if( not(einHandNeo) or not(spacepressed) )
676       goto neo_strich
677     else
678      {
679        keypressed := 1
680        goto %gespiegelt_strich%
681      }
682   }
683  else
684  {
685     goto neo_sz   
686  }
687*SC00D::goto neo_tot2  ; Akut                   
688; Reihe 2
689*Tab::goto neo_tab
690*q::
691  if ( not(ahkTreiberKombi) )
692  {
693     goto neo_x
694  }
695  else
696  {
697     goto neo_q   
698  }
699*w::
700  if ( not(ahkTreiberKombi) )
701  {
702     goto neo_v
703  }
704  else
705  {
706     goto neo_w   
707  }
708*e::
709  if ( not(ahkTreiberKombi) )
710  {
711     goto neo_l
712  }
713  else
714  {
715     goto neo_e   
716  }
717*r::
718  if ( not(ahkTreiberKombi) )
719  {
720     goto neo_c
721  }
722  else
723  {
724     goto neo_r   
725  }
726*t::
727  if ( not(ahkTreiberKombi) )
728  {
729     goto neo_w
730  }
731  else
732  {
733     goto neo_t   
734  }
735*SC015::  ; z
736  if ( not(ahkTreiberKombi) )
737  {
738     if( not(einHandNeo) or not(spacepressed) )
739       goto neo_k
740     else
741      {
742        keypressed := 1
743        goto %gespiegelt_k%
744      }
745  }
746  else
747  {
748     goto neo_z   
749  }
750*u::
751  if ( not(ahkTreiberKombi) )
752  {
753     if( not(einHandNeo) or not(spacepressed) )
754       goto neo_h
755     else
756      {
757        keypressed := 1
758        goto %gespiegelt_h%
759      }
760  }
761  else
762  {
763     goto neo_u   
764  }
765*i::
766  if ( not(ahkTreiberKombi) )
767  {
768     if( not(einHandNeo) or not(spacepressed) )
769       goto neo_g
770     else
771      {
772        keypressed := 1
773        goto %gespiegelt_g%
774      }
775  }
776  else
777  {
778     goto neo_i   
779  }
780*o::
781  if ( not(ahkTreiberKombi) )
782  {
783     if( not(einHandNeo) or not(spacepressed) )
784       goto neo_f
785     else
786      {
787        keypressed := 1
788        goto %gespiegelt_f%
789      }
790  }
791  else
792  {
793     goto neo_o   
794  }
795*p::
796  if ( not(ahkTreiberKombi) )
797  {
798     if( not(einHandNeo) or not(spacepressed) )
799       goto neo_q
800     else
801      {
802        keypressed := 1
803        goto %gespiegelt_q%
804      }
805  }
806  else
807  {
808     goto neo_p   
809  }
810*SC01A:: ; �
811  if ( not(ahkTreiberKombi) )
812  {
813     if( not(einHandNeo) or not(spacepressed) )
814       goto neo_sz
815     else
816      {
817        keypressed := 1
818        goto %gespiegelt_sz%
819      }
820  }
821  else
822  {
823     goto neo_�   
824  }
825*SC01B::  ; +
826  if ( not(ahkTreiberKombi) )
827  {
828     if( not(einHandNeo) or not(spacepressed) )
829       goto neo_tot3
830     else
831      {
832        keypressed := 1
833        goto %gespiegelt_tot3%
834      }
835  }
836  else
837  { } ; this should never happen
838; Reihe 3
839*a::
840  if ( not(ahkTreiberKombi) )
841  {
842     goto neo_u
843  }
844  else
845  {
846     goto neo_a   
847  }
848*s::
849  if ( not(ahkTreiberKombi) )
850  {
851     goto neo_i
852  }
853  else
854  {
855     goto neo_s   
856  }
857*d::goto neo_a
858  if ( not(ahkTreiberKombi) )
859  {
860     goto neo_a
861  }
862  else
863  {
864     goto neo_d   
865  }
866*f::
867  if ( not(ahkTreiberKombi) )
868  {
869     goto neo_e
870  }
871  else
872  {
873     goto neo_f   
874  }
875*g::
876  if ( not(ahkTreiberKombi) )
877  {
878     goto neo_o
879  }
880  else
881  {
882     goto neo_g   
883  }
884*h::
885  if ( not(ahkTreiberKombi) )
886  {
887     if( not(einHandNeo) or not(spacepressed) )
888       goto neo_s
889     else
890      {
891        keypressed := 1
892        goto %gespiegelt_s%
893      }
894  }
895  else
896  {
897     goto neo_h   
898  }
899*j::
900  if ( not(ahkTreiberKombi) )
901  {
902     if( not(einHandNeo) or not(spacepressed) )
903       goto neo_n
904     else
905      {
906        keypressed := 1
907        goto %gespiegelt_n%
908      }
909  }
910  else
911  {
912     goto neo_j   
913  }
914*k::
915  if ( not(ahkTreiberKombi) )
916  {
917     if( not(einHandNeo) or not(spacepressed) )
918       goto neo_r
919     else
920      {
921        keypressed := 1
922        goto %gespiegelt_r%
923      }
924  }
925  else
926  {
927     goto neo_k   
928  }
929*l::
930  if ( not(ahkTreiberKombi) )
931  {
932     if( not(einHandNeo) or not(spacepressed) )
933       goto neo_t
934     else
935      {
936        keypressed := 1
937        goto %gespiegelt_t%
938      }
939  }
940  else
941  {
942     goto neo_l   
943  }
944*SC027::  ; �
945  if ( not(ahkTreiberKombi) )
946  {
947     if( not(einHandNeo) or not(spacepressed) )
948       goto neo_d
949     else
950      {
951        keypressed := 1
952        goto %gespiegelt_d%
953      }
954  }
955  else
956  {
957     goto neo_�   
958  }
959*SC028::  ; �
960  if ( not(ahkTreiberKombi) )
961  {
962     goto neo_y
963  }
964  else
965  {
966     goto neo_�
967  }
968; Reihe 4
969*SC02C::  ; y
970  if ( not(ahkTreiberKombi) )
971  {
972     goto neo_�
973  }
974  else
975  {
976     goto neo_y   
977  }
978*x::
979  if ( not(ahkTreiberKombi) )
980  {
981     goto neo_�
982  }
983  else
984  {
985     goto neo_x   
986  }
987*c::
988  if ( not(ahkTreiberKombi) )
989  {
990     goto neo_�
991  }
992  else
993  {
994     goto neo_c
995  }
996*v::
997  if ( not(ahkTreiberKombi) )
998  {
999     goto neo_p
1000  }
1001  else
1002  {
1003     goto neo_v
1004  }
1005*b::
1006  if ( not(ahkTreiberKombi) )
1007  {
1008     goto neo_z
1009  }
1010  else
1011  {
1012     goto neo_b
1013  }
1014*n::
1015  if ( not(ahkTreiberKombi) )
1016  {
1017     if( not(einHandNeo) or not(spacepressed) )
1018       goto neo_b
1019     else
1020      {
1021        keypressed := 1
1022        goto %gespiegelt_b%
1023      }
1024  }
1025  else
1026  {
1027     goto neo_n
1028  }
1029*m::
1030     if( not(einHandNeo) or not(spacepressed) )
1031       goto neo_m
1032     else
1033      {
1034        keypressed := 1
1035        goto %gespiegelt_m%
1036      }
1037return
1038*SC033::  ; Komma ,
1039     if( not(einHandNeo) or not(spacepressed) )
1040       goto neo_komma
1041     else
1042      {
1043        keypressed := 1
1044        goto %gespiegelt_komma%
1045      }
1046return
1047*SC034::  ; Punkt .
1048     if( not(einHandNeo) or not(spacepressed) )
1049       goto neo_punkt
1050     else
1051      {
1052        keypressed := 1
1053        goto %gespiegelt_punkt%
1054      }
1055return
1056*SC035::  ; Minus -
1057  if ( not(ahkTreiberKombi) )
1058  {
1059     if( not(einHandNeo) or not(spacepressed) )
1060       goto neo_j
1061     else
1062      {
1063        keypressed := 1
1064        goto %gespiegelt_j%
1065      }
1066  }
1067  else
1068  {
1069     goto neo_strich
1070  }
1071; Numpad
1072*NumpadDiv::goto neo_NumpadDiv
1073*NumpadMult::goto neo_NumpadMult
1074*NumpadSub::goto neo_NumpadSub
1075*NumpadAdd::goto neo_NumpadAdd
1076*NumpadEnter::goto neo_NumpadEnter
1077*Numpad7::goto neo_Numpad7
1078*Numpad8::goto neo_Numpad8
1079*Numpad9::goto neo_Numpad9
1080*Numpad4::goto neo_Numpad4
1081*Numpad5::goto neo_Numpad5
1082*Numpad6::goto neo_Numpad6
1083*Numpad1::goto neo_Numpad1
1084*Numpad2::goto neo_Numpad2
1085*Numpad3::goto neo_Numpad3
1086*Numpad0::goto neo_Numpad0
1087*NumpadDot::goto neo_NumpadDot
1088*NumpadHome::goto neo_NumpadHome
1089*NumpadUp::goto neo_NumpadUp
1090*NumpadPgUp::goto neo_NumpadPgUp
1091*NumpadLeft::goto neo_NumpadLeft
1092*NumpadClear::goto neo_NumpadClear
1093*NumpadRight::goto neo_NumpadRight
1094*NumpadEnd::goto neo_NumpadEnd
1095*NumpadDown::goto neo_NumpadDown
1096*NumpadPgDn::goto neo_NumpadPgDn
1097*NumpadIns::goto neo_NumpadIns
1098*NumpadDel::goto neo_NumpadDel
1099
1100
1101
1102/*
1103Die eigentliche NEO-Belegung und der Hauptteil des AHK-Treibers.
1104
1105
1106   Ablauf bei toten Tasten:
1107   1. Ebene Aktualisieren
1108   2. Abh�ngig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen
1109   
1110   Ablauf bei "untoten" Tasten:
1111   1. Ebene Aktualisieren
1112   2. Abh�ngig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben
1113   3. "PriorDeadKey" mit leerem String �berschreiben
1114
1115   ------------------------------------------------------
1116   Reihe 1
1117   ------------------------------------------------------
1118*/
1119
1120
1121neo_tot1:
1122   EbeneAktualisieren()
1123   if Ebene = 1
1124   {
1125      SendUnicodeChar(0x02C6) ; circumflex, tot
1126      PriorDeadKey := "c1"
1127   }
1128   else if Ebene = 2
1129   {
1130      SendUnicodeChar(0x02C7) ; caron, tot
1131      PriorDeadKey := "c2"
1132   }
1133   else if Ebene = 3
1134   {
1135      SendUnicodeChar(0x02D8) ; brevis
1136      PriorDeadKey := "c3"
1137   }
1138   else if Ebene = 4
1139   {
1140      SendUnicodeChar(0x00B7) ; Mittenpunkt, tot
1141      PriorDeadKey := "c5"
1142   }
1143   else if Ebene = 5
1144   {
1145      send -                  ; querstrich, tot
1146      PriorDeadKey := "c4"
1147   }
1148   else if Ebene = 6
1149   {
1150      Send .                  ; punkt darunter (colon)
1151      PriorDeadKey := "c6"
1152   }
1153return
1154
1155neo_1:
1156   EbeneAktualisieren()
1157   if Ebene = 1
1158   {
1159      if (PriorDeadKey = "c1")          ; circumflex 1
1160         BSSendUnicodeChar(0x00B9)
1161      else if (PriorDeadKey = "c4")       ; toter -
1162         BSSendUnicodeChar(0x2081)
1163      else if (CompKey = "r_small_1")
1164         Comp3UnicodeChar(0x217A)          ; r�misch xi
1165      else if (CompKey = "r_capital_1")
1166         Comp3UnicodeChar(0x216A)          ; r�misch XI
1167      else
1168       { 
1169         if GetKeyState("CapsLock","T")
1170         {
1171           if (IsModifierPressed())
1172           {
1173             send {blind}1
1174           }
1175           else
1176           {
1177              send 1
1178           }   
1179         }
1180         else {
1181            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1182            {
1183                send {blind}1
1184            }
1185         }
1186       }
1187      if (PriorDeadKey = "comp")
1188         CompKey := "1"
1189      else if (CompKey = "r_small")
1190         CompKey := "r_small_1"
1191      else if (CompKey = "r_capital")
1192         CompKey := "r_capital_1"
1193      else
1194         CompKey := ""
1195   }
1196   else if Ebene = 2
1197   {
1198      send �
1199      CompKey := ""
1200   }
1201   else if Ebene = 3
1202   {
1203      SendUnicodeChar(0x00B9) ; 2 Hochgestellte
1204      CompKey := ""
1205   }
1206   else if Ebene = 4
1207   {
1208      SendUnicodeChar(0x2022) ; bullet
1209      CompKey := ""
1210   }
1211   else if Ebene = 5
1212   {
1213      SendUnicodeChar(0x2640) ; Piktogramm weiblich
1214      CompKey := ""
1215   }
1216   else if Ebene = 6
1217   {
1218      SendUnicodeChar(0x00AC) ; Nicht-Symbol
1219      CompKey := ""
1220   }
1221   PriorDeadKey := ""
1222return
1223
1224neo_2:
1225   EbeneAktualisieren()
1226   if Ebene = 1
1227   {
1228      if (PriorDeadKey = "c1")          ; circumflex
1229         BSSendUnicodeChar(0x00B2)
1230      else if (PriorDeadKey = "c4")       ; toter -
1231         BSSendUnicodeChar(0x2082)
1232      else if (CompKey = "r_small")
1233         CompUnicodeChar(0x2171)          ; r�misch ii
1234      else if (CompKey = "r_capital")
1235         CompUnicodeChar(0x2161)          ; r�misch II
1236      else if (CompKey = "r_small_1")
1237         Comp3UnicodeChar(0x217B)          ; r�misch xii
1238      else if (CompKey = "r_capital_1")
1239         Comp3UnicodeChar(0x216B)          ; r�misch XII
1240      else
1241       { 
1242         if GetKeyState("CapsLock","T")
1243         {
1244           if (IsModifierPressed())
1245           {
1246             send {blind}2
1247           }
1248           else
1249           {
1250              send 2
1251           }
1252               
1253         }
1254         else {
1255            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1256            {
1257                send {blind}2
1258            }
1259         }
1260       }
1261      if (PriorDeadKey = "comp")
1262         CompKey := "2"
1263      else
1264         CompKey := ""         
1265   }
1266   else if Ebene = 2
1267   {
1268      SendUnicodeChar(0x2116) ; numero
1269      CompKey := ""
1270   }
1271   else if Ebene = 3
1272   {   
1273      SendUnicodeChar(0x00B2) ; 2 Hochgestellte
1274      CompKey := ""
1275   }
1276   else if Ebene = 4
1277   {
1278      SendUnicodeChar(0x2023) ; aufzaehlungspfeil
1279      CompKey := ""
1280   }
1281   else if Ebene = 5
1282   {
1283      SendUnicodeChar(0x26A5) ; Piktogramm Zwitter
1284      CompKey := ""
1285   }
1286   else if Ebene = 6
1287   {
1288      SendUnicodeChar(0x2228) ; Logisches Oder
1289      CompKey := ""
1290   }
1291   PriorDeadKey := ""
1292return
1293
1294neo_3:
1295   EbeneAktualisieren()
1296   if Ebene = 1
1297   {
1298      if (PriorDeadKey = "c1")          ; circumflex
1299         BSSendUnicodeChar(0x00B3)
1300      else if (PriorDeadKey = "c4")       ; toter -
1301         BSSendUnicodeChar(0x2083)
1302      else if (CompKey = "1")
1303         CompUnicodeChar(0x2153)          ; 1/3
1304      else if (CompKey = "2")
1305         CompUnicodeChar(0x2154)          ; 2/3
1306      else if (CompKey = "r_small")
1307         CompUnicodeChar(0x2172)          ; r�misch iii
1308      else if (CompKey = "r_capital")
1309         CompUnicodeChar(0x2162)          ; r�misch III
1310      else
1311       { 
1312         if GetKeyState("CapsLock","T")
1313         {
1314           if (IsModifierPressed())
1315           {
1316             send {blind}3
1317           }
1318           else
1319           {
1320               send 3
1321           }   
1322         }
1323         else {
1324            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1325            {           
1326              send {blind}3
1327            }
1328         }
1329       }
1330      if (PriorDeadKey = "comp")
1331         CompKey := "3"
1332      else
1333         CompKey := ""         
1334   }
1335   else if Ebene = 2
1336   {
1337      send �
1338      CompKey := ""
1339   }
1340   else if Ebene = 3
1341   {
1342      SendUnicodeChar(0x00B3) ; 3 Hochgestellte
1343      CompKey := ""
1344   }
1345   else if Ebene = 4
1346   { } ; leer
1347   else if Ebene = 5
1348   {
1349      SendUnicodeChar(0x2642) ; Piktogramm Mann
1350      CompKey := ""
1351   }
1352   else if Ebene = 6
1353   {
1354      SendUnicodeChar(0x2227) ; Logisches Und
1355      CompKey := ""
1356   }   
1357   PriorDeadKey := ""
1358return
1359
1360neo_4:
1361   EbeneAktualisieren()
1362   if Ebene = 1
1363   {
1364      if (PriorDeadKey = "c1")          ; circumflex
1365         BSSendUnicodeChar(0x2074)
1366      else if (PriorDeadKey = "c4")       ; toter -
1367         BSSendUnicodeChar(0x2084)         
1368      else if (CompKey = "r_small")
1369         CompUnicodeChar(0x2173)          ; r�misch iv
1370      else if (CompKey = "r_capital")
1371         CompUnicodeChar(0x2163)          ; r�misch IV
1372      else
1373       { 
1374         if GetKeyState("CapsLock","T")
1375         {
1376           if (IsModifierPressed())
1377           {
1378             send {blind}4
1379           }
1380           else
1381           {
1382              send 4
1383           }
1384               
1385         }
1386         else
1387         {
1388           if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1389           {
1390               send {blind}4
1391           }
1392         }
1393       }
1394      if (PriorDeadKey = "comp")
1395         CompKey := "4"
1396      else
1397         CompKey := ""         
1398    }
1399   else if Ebene = 2
1400   {
1401      send �
1402      CompKey := ""
1403   }
1404    else if Ebene = 3
1405   {
1406      send �
1407      CompKey := ""
1408   }
1409   else if Ebene = 4
1410   {
1411      Send {PgUp}    ; Prev
1412      CompKey := ""
1413   }
1414   else if Ebene = 5
1415   {
1416      SendUnicodeChar(0x2113) ; Script small L
1417      CompKey := ""
1418   }
1419   else if Ebene = 6
1420   {
1421      SendUnicodeChar(0x22A5) ; Senkrecht
1422      CompKey := ""
1423   }   
1424   PriorDeadKey := ""
1425return
1426
1427neo_5:
1428   EbeneAktualisieren()
1429   if Ebene = 1
1430   {
1431      if (PriorDeadKey = "c1")          ; circumflex
1432         BSSendUnicodeChar(0x2075)
1433      else if (PriorDeadKey = "c4")       ; toter -
1434         BSSendUnicodeChar(0x2085)
1435      else if (CompKey = "1")
1436         CompUnicodeChar(0x2155)          ; 1/5
1437      else if (CompKey = "2")
1438         CompUnicodeChar(0x2156)          ; 2/5
1439      else if (CompKey = "3")
1440         CompUnicodeChar(0x2157)          ; 3/5
1441      else if (CompKey = "4")
1442         CompUnicodeChar(0x2158)          ; 4/5
1443      else if (CompKey = "r_small")
1444         CompUnicodeChar(0x2174)          ; r�misch v
1445      else if (CompKey = "r_capital")
1446         CompUnicodeChar(0x2164)          ; r�misch V
1447      else
1448       { 
1449         if GetKeyState("CapsLock","T")
1450         {
1451           if (IsModifierPressed())
1452           {
1453             send {blind}5
1454           }
1455           else
1456           {
1457              send 5
1458           }
1459               
1460         }
1461         else {
1462            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1463            {
1464               send {blind}5
1465            }
1466         }
1467       }
1468      if (PriorDeadKey = "comp")
1469         CompKey := "5"
1470      else
1471         CompKey := ""         
1472    }
1473   else if Ebene = 2
1474   {
1475      send �
1476      CompKey := ""
1477   }
1478   else if Ebene = 3
1479   {
1480      send �
1481      CompKey := ""
1482   }
1483   else if Ebene = 4
1484   { } ; leer
1485   else if Ebene = 5
1486   {
1487      SendUnicodeChar(0x2020) ; Kreuz (Dagger)
1488      CompKey := ""
1489   }
1490   else if Ebene = 6
1491   {
1492      SendUnicodeChar(0x2221) ; Winkel
1493      CompKey := ""
1494   }   
1495   PriorDeadKey := ""
1496return
1497
1498neo_6:
1499   EbeneAktualisieren()
1500   if Ebene = 1
1501   {
1502      if (PriorDeadKey = "c1")          ; circumflex
1503         BSSendUnicodeChar(0x2076)
1504      else if (PriorDeadKey = "c4")       ; toter -
1505         BSSendUnicodeChar(0x2086)         
1506      else if (CompKey = "1")
1507         CompUnicodeChar(0x2159)          ; 1/6
1508      else if (CompKey = "5")
1509         CompUnicodeChar(0x215A)          ; 5/6
1510      else if (CompKey = "r_small")
1511         CompUnicodeChar(0x2175)          ; r�misch vi
1512      else if (CompKey = "r_capital")
1513         CompUnicodeChar(0x2165)          ; r�misch VI
1514      else
1515       { 
1516         if GetKeyState("CapsLock","T")
1517         {
1518           if (IsModifierPressed())
1519           {
1520             send {blind}6
1521           }
1522           else
1523           {
1524              send 6
1525           }
1526               
1527         }
1528         else {
1529            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1530            {
1531              send {blind}6
1532            }
1533         }
1534       }
1535      if (PriorDeadKey = "comp")
1536         CompKey := "6"
1537      else
1538         CompKey := ""         
1539    }
1540   else if Ebene = 2
1541   {
1542      send �
1543      CompKey := ""
1544   }
1545   else if Ebene = 3
1546   {
1547      send �
1548      CompKey := ""
1549   }
1550   else if Ebene = 4
1551   {
1552      send �
1553      CompKey := ""
1554   }
1555   else if Ebene = 5
1556   {  } ; leer
1557   else if Ebene = 6
1558   {
1559      SendUnicodeChar(0x2225) ; parallel
1560      CompKey := ""
1561   }
1562   PriorDeadKey := ""
1563return
1564
1565neo_7:
1566   EbeneAktualisieren()
1567   if Ebene = 1
1568   {
1569      if (PriorDeadKey = "c1")          ; circumflex
1570         BSSendUnicodeChar(0x2077)
1571      else if (PriorDeadKey = "c4")       ; toter -
1572         BSSendUnicodeChar(0x2087)
1573      else if (CompKey = "r_small")
1574         CompUnicodeChar(0x2176)          ; r�misch vii
1575      else if (CompKey = "r_capital")
1576         CompUnicodeChar(0x2166)          ; r�misch VII
1577      else
1578       { 
1579         if GetKeyState("CapsLock","T")
1580         {
1581           if (IsModifierPressed())
1582           {
1583             send {blind}7
1584           }
1585           else
1586           {
1587              send 7
1588           }
1589               
1590         }
1591         else {
1592            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1593            {
1594               send {blind}7
1595            }
1596         }
1597       }
1598      if (PriorDeadKey = "comp")
1599         CompKey := "7"
1600      else
1601         CompKey := ""         
1602    }
1603   else if Ebene = 2
1604   {
1605      send $
1606      CompKey := ""
1607   }
1608   else if Ebene = 3
1609   {
1610      send �
1611      CompKey := ""
1612   }
1613   else if Ebene = 4
1614   {
1615      send �
1616      CompKey := ""
1617   }
1618   else if Ebene = 5
1619   {
1620      SendUnicodeChar(0x03BA) ; greek small letter kappa
1621      CompKey := ""
1622   }
1623   else if Ebene = 6
1624   {
1625      SendUnicodeChar(0x2209) ; nicht Element von
1626      CompKey := ""
1627   }
1628   PriorDeadKey := ""
1629return
1630
1631neo_8:
1632   EbeneAktualisieren()
1633   if Ebene = 1
1634   {
1635      if (PriorDeadKey = "c1")          ; circumflex
1636         BSSendUnicodeChar(0x2078)
1637      else if (PriorDeadKey = "c4")       ; toter -
1638         BSSendUnicodeChar(0x2088)
1639      else if (CompKey = "1")
1640         CompUnicodeChar(0x215B)          ; 1/8
1641      else if (CompKey = "3")
1642         CompUnicodeChar(0x215C)          ; 3/8
1643      else if (CompKey = "5")
1644         CompUnicodeChar(0x215D)          ; 5/8
1645      else if (CompKey = "7")
1646         CompUnicodeChar(0x215E)          ; 7/8
1647      else if (CompKey = "r_small")
1648         CompUnicodeChar(0x2177)          ; r�misch viii
1649      else if (CompKey = "r_capital")
1650         CompUnicodeChar(0x2167)          ; r�misch VIII
1651      else
1652       { 
1653         if GetKeyState("CapsLock","T")
1654         {
1655           if (IsModifierPressed())
1656           {
1657             send {blind}8
1658           }
1659           else
1660           {
1661              send 8
1662           }
1663               
1664         }
1665         else {
1666            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1667            {
1668              send {blind}8
1669            }   
1670         }
1671       }
1672      if (PriorDeadKey = "comp")
1673         CompKey := "8"
1674      else
1675         CompKey := ""         
1676    }
1677   else if Ebene = 2
1678   {
1679      send �
1680      CompKey := ""
1681   }
1682   else if Ebene = 3
1683   {
1684      send �
1685      CompKey := ""
1686   }
1687   else if Ebene = 4
1688   {
1689      Send /
1690      CompKey := ""
1691   }
1692   else if Ebene = 5
1693   {
1694      SendUnicodeChar(0x27E8) ;bra (�ffnende spitze klammer)
1695   }
1696   else if Ebene = 6
1697   {
1698      SendUnicodeChar(0x2204) ; es existiert nicht
1699      CompKey := ""
1700   }
1701   PriorDeadKey := ""
1702return
1703
1704neo_9:
1705   EbeneAktualisieren()
1706   if Ebene = 1
1707   {
1708      if (PriorDeadKey = "c1")          ; circumflex
1709         BSSendUnicodeChar(0x2079)
1710      else if (PriorDeadKey = "c4")       ; toter -
1711         BSSendUnicodeChar(0x2089)
1712      else if (CompKey = "r_small")
1713         CompUnicodeChar(0x2178)          ; r�misch ix
1714      else if (CompKey = "r_capital")
1715         CompUnicodeChar(0x2168)          ; r�misch IX
1716      else
1717       { 
1718         if GetKeyState("CapsLock","T")
1719         {
1720           if (IsModifierPressed())
1721           {
1722             send {blind}9
1723           }
1724           else
1725           {
1726              send 9
1727           }
1728               
1729         }
1730         else {
1731            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1732            {
1733              send {blind}9
1734            }
1735         }
1736       }
1737      if (PriorDeadKey = "comp")
1738         CompKey := "9"
1739      else
1740         CompKey := ""         
1741    }
1742   else if Ebene = 2
1743   {
1744      send �
1745      CompKey := ""
1746   }
1747   else if Ebene = 3
1748   {
1749      send �
1750      CompKey := ""
1751   }
1752   else if Ebene = 4
1753   {
1754      Send *
1755      CompKey := ""
1756   }
1757   else if Ebene = 5
1758   {
1759      SendUnicodeChar(0x27E9) ;ket (schlie�ende spitze klammer)
1760   }
1761   else if Ebene = 6
1762   {
1763      SendUnicodeChar(0x2226) ; nicht parallel
1764      CompKey := ""
1765   }
1766   PriorDeadKey := ""
1767return
1768
1769neo_0:
1770   EbeneAktualisieren()
1771   if Ebene = 1
1772   {
1773      if (PriorDeadKey = "c1")          ; circumflex
1774         BSSendUnicodeChar(0x2070)
1775      else if (PriorDeadKey = "c4")       ; toter -
1776         BSSendUnicodeChar(0x2080)         
1777      else if (CompKey = "r_small_1")
1778         Comp3UnicodeChar(0x2179)          ; r�misch x
1779      else if (CompKey = "r_capital_1")
1780         Comp3UnicodeChar(0x2169)          ; r�misch X
1781      else
1782       { 
1783         if GetKeyState("CapsLock","T")
1784         {
1785           if (IsModifierPressed())
1786           {
1787             send {blind}0
1788           }
1789           else
1790           {
1791              send 0
1792           }
1793               
1794         }
1795         else {
1796            if ( not(lernModus) or (lernModus_std_ZahlenReihe) )
1797            {
1798               send {blind}0
1799            }
1800         }
1801       }
1802      if (PriorDeadKey = "comp")
1803         CompKey := "0"
1804      else
1805         CompKey := ""         
1806    }
1807   else if Ebene = 2
1808   {
1809      send �
1810      CompKey := ""
1811   }
1812   else if Ebene = 3
1813   {
1814      send �
1815      CompKey := ""
1816   }
1817   else if Ebene = 4
1818   {
1819      Send -
1820      CompKey := ""
1821   }
1822   else if Ebene = 5
1823   {  } ; leer
1824   else if Ebene = 6
1825   {
1826      SendUnicodeChar(0x2205) ; leere Menge
1827      CompKey := ""
1828   }
1829   PriorDeadKey := ""
1830return
1831
1832neo_strich:
1833   EbeneAktualisieren()
1834   if Ebene = 1
1835        { 
1836         if GetKeyState("CapsLock","T")
1837         {
1838           if (IsModifierPressed())
1839           {
1840             send {blind}-
1841           }
1842           else
1843           {
1844              send -
1845           }
1846               
1847         }
1848         else {
1849           send {blind}-   ;Bindestrich
1850         }
1851       }
1852   else if Ebene = 2
1853      SendUnicodeChar(0x2013) ; Gedankenstrich
1854   else if Ebene = 3
1855      SendUnicodeChar(0x2014) ; Englische Gedankenstrich
1856   else if Ebene = 4
1857     { } ; leer ...  SendUnicodeChar(0x254C)
1858   else if Ebene = 5
1859      SendUnicodeChar(0x2011) ; gesch�tzter Bindestrich
1860   else if Ebene = 6
1861      SendUnicodeChar(0x00AD) ; weicher Trennstrich
1862   PriorDeadKey := ""   CompKey := ""
1863return
1864
1865neo_tot2:
1866   EbeneAktualisieren()
1867   if Ebene = 1
1868   {
1869      send {�}{space} ; akut, tot
1870      PriorDeadKey := "a1"
1871   }
1872   else if Ebene = 2
1873   {
1874      send ``{space}
1875      PriorDeadKey := "a2"
1876   }
1877   else if Ebene = 3
1878   {
1879      send � ; cedilla
1880      PriorDeadKey := "a3"
1881   }
1882   else if Ebene = 4
1883   {
1884      SendUnicodeChar(0x02D9) ; punkt oben dr�ber
1885      PriorDeadKey := "a5"
1886   }
1887   else if Ebene = 5
1888   {
1889      SendUnicodeChar(0x02DB) ; ogonek
1890      PriorDeadKey := "a4"
1891   }
1892   else if Ebene = 6
1893   {
1894      SendUnicodeChar(0x02DA)  ; ring obendrauf
1895      PriorDeadKey := "a6"
1896   }
1897return
1898
1899
1900/*
1901   ------------------------------------------------------
1902   Reihe 2
1903   ------------------------------------------------------
1904*/
1905
1906neo_x:
1907   EbeneAktualisieren()
1908   if Ebene = 1
1909      sendinput {blind}x
1910   else if Ebene = 2
1911      sendinput {blind}X
1912   else if Ebene = 3
1913      SendUnicodeChar(0x2026) ;Ellipse
1914   else if Ebene = 5
1915      SendUnicodeChar(0x03BE) ;xi
1916   else if Ebene = 6
1917      SendUnicodeChar(0x039E)  ; Xi
1918   PriorDeadKey := ""   CompKey := ""
1919return
1920
1921
1922neo_v:
1923   EbeneAktualisieren()
1924   if Ebene = 1
1925   {
1926      if (PriorDeadKey = "c6")      ; punkt darunter
1927         BSSendUnicodeChar(0x1E7F)
1928      else
1929         sendinput {blind}v
1930   }
1931   else if Ebene = 2
1932   {
1933      if (PriorDeadKey = "c6")      ; punkt darunter
1934         BSSendUnicodeChar(0x1E7E)
1935      else
1936         sendinput {blind}V
1937   }
1938   else if Ebene = 3
1939      send _
1940   else if Ebene = 4
1941      if ( not(lernModus) or (lernModus_neo_Backspace) )
1942      {
1943         Send {Backspace}
1944      }
1945      else
1946      {} ; leer
1947   else if Ebene = 6
1948      SendUnicodeChar(0x2259) ; estimates
1949   PriorDeadKey := ""   CompKey := ""
1950return
1951
1952
1953
1954neo_l:
1955   EbeneAktualisieren()
1956   if Ebene = 1
1957   {
1958      if (PriorDeadKey = "t5")       ; Schr�gstrich
1959         BSSendUnicodeChar(0x0142)
1960      else if (PriorDeadKey = "a1")      ; akut
1961         BSSendUnicodeChar(0x013A)
1962      else if (PriorDeadKey = "c2")     ; caron
1963         BSSendUnicodeChar(0x013E)
1964      else if (PriorDeadKey = "a3")    ; cedilla
1965         BSSendUnicodeChar(0x013C)
1966      else if (PriorDeadKey = "c5")  ; Mittenpunkt
1967         BSSendUnicodeChar(0x0140)
1968      else if (PriorDeadKey = "c6") ; punkt darunter
1969         BSSendUnicodeChar(0x1E37)
1970      else
1971         sendinput {blind}l
1972      if (PriorDeadKey = "comp")            ; compose
1973         CompKey := "l_small"
1974      else
1975         CompKey := ""
1976   }
1977   else if Ebene = 2
1978   {
1979      if (PriorDeadKey = "a1")           ; akut
1980         BSSendUnicodeChar(0x0139)
1981      else if (PriorDeadKey = "c2")     ; caron
1982         BSSendUnicodeChar(0x013D)
1983      else if (PriorDeadKey = "a3")    ; cedilla
1984         BSSendUnicodeChar(0x013B)
1985      else if (PriorDeadKey = "t5")  ; Schr�gstrich
1986         BSSendUnicodeChar(0x0141)
1987      else if (PriorDeadKey = "c5")  ; Mittenpunkt
1988         BSSendUnicodeChar(0x013F)
1989      else if (PriorDeadKey = "c6") ; punkt darunter
1990         BSSendUnicodeChar(0x1E36)
1991      else
1992         sendinput {blind}L
1993      if (PriorDeadKey = "comp")            ; compose
1994         CompKey := "l_capital"
1995      else CompKey := ""
1996   }     
1997   else if Ebene = 3
1998   {
1999      send [
2000      CompKey := ""
2001   }
2002   else if Ebene = 4
2003   {
2004      Sendinput {Blind}{Up}
2005      CompKey := ""
2006   }
2007   else if Ebene = 5
2008   {
2009      SendUnicodeChar(0x03BB) ; lambda
2010      CompKey := ""
2011   }
2012   else if Ebene = 6
2013   {
2014      SendUnicodeChar(0x039B) ; Lambda
2015      CompKey := ""
2016   }
2017   PriorDeadKey := ""
2018return
2019
2020
2021neo_c:
2022   EbeneAktualisieren()
2023   if Ebene = 1
2024   {
2025      if (PriorDeadKey = "c1")           ; circumflex
2026         BSSendUnicodeChar(0x0109)
2027      else if (PriorDeadKey = "c2")     ; caron
2028         BSSendUnicodeChar(0x010D)
2029      else if (PriorDeadKey = "a1")      ; akut
2030         BSSendUnicodeChar(0x0107)
2031      else if (PriorDeadKey = "a3")    ; cedilla
2032         BSSendUnicodeChar(0x00E7)
2033      else if (PriorDeadKey = "a5")  ; punkt dar�ber
2034         BSSendUnicodeChar(0x010B)
2035      else if ( (CompKey = "o_small") or (CompKey = "o_capital") )
2036         Send {bs}�
2037      else
2038      {         
2039         sendinput {blind}c     
2040      }
2041      if (PriorDeadKey = "comp")
2042         CompKey := "c_small"
2043      else
2044         CompKey := ""
2045   }
2046   else if Ebene = 2
2047   {
2048      if (PriorDeadKey = "c1")          ; circumflex
2049         BSSendUnicodeChar(0x0108)
2050      else if (PriorDeadKey = "c2")    ; caron
2051         BSSendUnicodeChar(0x010C)
2052      else if (PriorDeadKey = "a1")     ; akut
2053         BSSendUnicodeChar(0x0106)
2054      else if (PriorDeadKey = "a3")   ; cedilla
2055         BSSendUnicodeChar(0x00E6)
2056      else if (PriorDeadKey = "a5") ; punkt dar�ber
2057         BSSendUnicodeChar(0x010A)
2058      else if ( (CompKey = "o_small") or (CompKey = "o_capital") )
2059         Send {bs}�         
2060      else
2061         sendinput {blind}C
2062      if (PriorDeadKey = "comp")
2063         CompKey = "c_capital"
2064      else
2065         CompKey := ""
2066   }
2067   else if Ebene = 3
2068   {
2069      send ]
2070      CompKey := ""
2071   }
2072   else if Ebene = 4
2073   {
2074      if ( not(lernModus) or (lernModus_neo_Entf) )
2075      {
2076        Send {Del}
2077        CompKey := ""
2078      }
2079      else
2080      {} ; leer
2081   }
2082   else if Ebene = 5
2083   {
2084      SendUnicodeChar(0x03C7) ;chi
2085      CompKey := ""
2086   }
2087   else if Ebene = 6
2088   {
2089      SendUnicodeChar(0x2102)  ; C (Komplexe Zahlen)
2090      CompKey := ""
2091   }
2092   PriorDeadKey := ""
2093return
2094
2095neo_w:
2096   EbeneAktualisieren()
2097   if Ebene = 1
2098   {
2099      if (PriorDeadKey = "c1")           ; circumflex
2100         BSSendUnicodeChar(0x0175)
2101      else
2102         sendinput {blind}w
2103   }
2104   else if Ebene = 2
2105   {
2106      if (PriorDeadKey = "c1")           ; circumflex
2107         BSSendUnicodeChar(0x0174)
2108      else
2109         sendinput {blind}W
2110   }
2111   else if Ebene = 3
2112      SendUnicodeChar(0x005E) ; untotes ^ - Unicode-Name: CIRCUMFLEX ACCENT
2113      ;send {^}{space} ; Funktioniert nicht unter Java-Programmen
2114   else if Ebene = 4
2115      Send {Insert}
2116   else if Ebene = 5
2117      SendUnicodeChar(0x03C9) ; omega
2118   else if Ebene = 6
2119      SendUnicodeChar(0x03A9) ; Omega
2120   PriorDeadKey := ""   CompKey := ""
2121return
2122
2123neo_k:
2124   EbeneAktualisieren()
2125   if Ebene = 1
2126   {
2127      if (PriorDeadKey = "a3")         ; cedilla
2128         BSSendUnicodeChar(0x0137)
2129      else if (PriorDeadKey = "c6") ; punkt darunter
2130         BSSendUnicodeChar(0x1E33)
2131      else
2132         sendinput {blind}k
2133   }
2134   else if Ebene = 2
2135   {
2136      if (PriorDeadKey = "a3")         ; cedilla
2137         BSSendUnicodeChar(0x0136)
2138      else if (PriorDeadKey = "c6") ; punkt darunter
2139         BSSendUnicodeChar(0x1E32)
2140      else
2141         sendinput {blind}K
2142   }
2143   else if Ebene = 3
2144      sendraw !
2145   else if Ebene = 4
2146      Send �
2147   else if Ebene = 5
2148      SendUnicodeChar(0x03F0) ;kappa symbol (varkappa)
2149   else if Ebene = 6
2150      SendUnicodeChar(0x221A) ; Wurzel
2151   PriorDeadKey := ""   CompKey := ""
2152return
2153
2154neo_h:
2155   EbeneAktualisieren()
2156   if Ebene = 1
2157   {
2158      if (PriorDeadKey = "c1")           ; circumflex
2159         BSSendUnicodeChar(0x0125)
2160      else if (PriorDeadKey = "c4")   ; Querstrich
2161         BSSendUnicodeChar(0x0127)
2162      else if (PriorDeadKey = "a5")  ; punkt dar�ber
2163         BSSendUnicodeChar(0x1E23)
2164      else if (PriorDeadKey = "c6") ; punkt darunter
2165         BSSendUnicodeChar(0x1E25)
2166      else sendinput {blind}h
2167   }
2168   else if Ebene = 2
2169   {
2170      if (PriorDeadKey = "c1")           ; circumflex
2171         BSSendUnicodeChar(0x0124)
2172      else if (PriorDeadKey = "c4")   ; Querstrich
2173         BSSendUnicodeChar(0x0126)
2174      else if (PriorDeadKey = "a5")  ; punkt dar�ber
2175         BSSendUnicodeChar(0x1E22)
2176      else if (PriorDeadKey = "c6") ; punkt darunter
2177         BSSendUnicodeChar(0x1E24)
2178      else sendinput {blind}H
2179   }
2180   else if Ebene = 3
2181   {
2182      if (PriorDeadKey = "c4")    ; Querstrich
2183         BSSendUnicodeChar(0x2264) ; kleiner gleich
2184      else
2185         send {blind}<
2186   }
2187   else if Ebene = 4
2188   {
2189      if (PriorDeadKey = "c1")            ; circumflex
2190         BSSendUnicodeChar(0x2077)
2191      else if (PriorDeadKey = "c4")       ; toter -
2192         BSSendUnicodeChar(0x2087)
2193      else
2194         Send 7
2195   }
2196   else if Ebene = 5
2197      SendUnicodeChar(0x03C8) ;psi
2198   else if Ebene = 6
2199      SendUnicodeChar(0x03A8)  ; Psi
2200   PriorDeadKey := ""   CompKey := ""
2201return
2202
2203neo_g:
2204   EbeneAktualisieren()
2205   if Ebene = 1
2206   {
2207      if (PriorDeadKey = "c1")          ; circumflex
2208         BSSendUnicodeChar(0x011D)
2209      else if (PriorDeadKey = "c3")   ; brevis
2210         BSSendUnicodeChar(0x011F)
2211      else if (PriorDeadKey = "a3")   ; cedilla
2212         BSSendUnicodeChar(0x0123)
2213      else if (PriorDeadKey = "a5") ; punkt dar�ber
2214         BSSendUnicodeChar(0x0121)
2215      else sendinput {blind}g
2216   }
2217   else if Ebene = 2
2218   {
2219      if (PriorDeadKey = "c1")           ; circumflex
2220         BSSendUnicodeChar(0x011C)
2221      else if (PriorDeadKey = "c3")    ; brevis
2222         BSSendUnicodeChar(0x011E)
2223      else if (PriorDeadKey = "a3")    ; cedilla
2224         BSSendUnicodeChar(0x0122)
2225      else if (PriorDeadKey = "a5")  ; punkt dar�ber
2226         BSSendUnicodeChar(0x0120)
2227      else sendinput {blind}G
2228   }
2229   else if Ebene = 3
2230   {
2231      if (PriorDeadKey = "c4")    ; Querstrich
2232         SendUnicodeChar(0x2265) ; gr��er gleich
2233      else
2234         send >
2235   }
2236   else if Ebene = 4
2237   {
2238      if (PriorDeadKey = "c1")            ; circumflex
2239         BSSendUnicodeChar(0x2078)
2240      else if (PriorDeadKey = "c4")       ; toter -
2241         BSSendUnicodeChar(0x2088)
2242      else
2243         Send 8
2244   }
2245   else if Ebene = 5
2246      SendUnicodeChar(0x03B3) ;gamma
2247   else if Ebene = 6
2248      SendUnicodeChar(0x0393)  ; Gamma
2249   PriorDeadKey := ""   CompKey := ""
2250return
2251
2252neo_f:
2253   EbeneAktualisieren()
2254   if Ebene = 1
2255   {
2256      if (PriorDeadKey = "t5")      ; durchgestrichen
2257         BSSendUnicodeChar(0x0192)
2258      else if (PriorDeadKey = "a5") ; punkt dar�ber
2259         BSSendUnicodeChar(0x1E1F)
2260      else sendinput {blind}f
2261   }
2262   else if Ebene = 2
2263   {
2264      if (PriorDeadKey = "t5")       ; durchgestrichen
2265         BSSendUnicodeChar(0x0191)
2266      else if (PriorDeadKey = "a5")  ; punkt dar�ber
2267         BSSendUnicodeChar(0x1E1E)
2268      else sendinput {blind}F
2269   }
2270   else if Ebene = 3
2271   {
2272      if (PriorDeadKey = "c1")            ; circumflex
2273         BSSendUnicodeChar(0x2259)   ; entspricht
2274      else if (PriorDeadKey = "t1")       ; tilde
2275         BSSendUnicodeChar(0x2245)   ; ungef�hr gleich
2276      else if (PriorDeadKey = "t5")       ; Schr�gstrich
2277         BSSendUnicodeChar(0x2260)   ; ungleich
2278      else if (PriorDeadKey = "c4")       ; Querstrich
2279         BSSendUnicodeChar(0x2261)   ; identisch
2280      else if (PriorDeadKey = "c2")       ; caron
2281         BSSendUnicodeChar(0x225A)   ; EQUIANGULAR TO
2282      else if (PriorDeadKey = "a6")       ; ring dr�ber
2283         BSSendUnicodeChar(0x2257)   ; ring equal to
2284      else
2285         send `=
2286   }
2287   else if Ebene = 4
2288   {
2289      if (PriorDeadKey = "c1")            ; circumflex
2290         BSSendUnicodeChar(0x2079)
2291      else if (PriorDeadKey = "c4")       ; toter -
2292         BSSendUnicodeChar(0x2089)
2293      else
2294         Send 9
2295   }
2296   else if Ebene = 5
2297      SendUnicodeChar(0x03C6) ; phi
2298   else if Ebene = 6
2299      SendUnicodeChar(0x03A6)  ; Phi
2300   PriorDeadKey := ""   CompKey := ""
2301return
2302
2303neo_q:
2304   EbeneAktualisieren()
2305   if Ebene = 1
2306      sendinput {blind}q
2307   else if Ebene = 2
2308      sendinput {blind}Q
2309   else if Ebene = 3
2310      send {&}
2311   else if Ebene = 4
2312   {
2313      if (PriorDeadKey = "c1")            ; circumflex
2314         BSSendUnicodeChar(0x207A)
2315      else if (PriorDeadKey = "c4")       ; toter -
2316         BSSendUnicodeChar(0x208A)
2317      else
2318         Send {+}
2319   }
2320   else if Ebene = 5
2321      SendUnicodeChar(0x03D5) ; phi symbol (varphi)
2322   else if Ebene = 6
2323      SendUnicodeChar(0x211A) ; Q (rationale Zahlen)
2324   PriorDeadKey := ""   CompKey := ""
2325return
2326
2327neo_sz:
2328   EbeneAktualisieren()
2329   if Ebene = 1
2330      if GetKeyState("CapsLock","T")
2331      {
2332         SendUnicodeChar(0x1E9E) ; verssal-�
2333      }
2334      else
2335      {
2336         if (LangSTastatur = 1)
2337         {
2338            sendinput {blind}s
2339         }
2340         else
2341         {
2342            send �
2343         }
2344      }
2345   else if Ebene = 2
2346      if GetKeyState("CapsLock","T")
2347      {
2348         if (LangSTastatur = 1)
2349         {
2350            sendinput {blind}s
2351         }
2352         else
2353         {
2354            send �
2355         }
2356      }
2357      else
2358      {
2359         SendUnicodeChar(0x1E9E) ; versal-�
2360      }
2361   else if Ebene = 3
2362   {
2363      if (LangSTastatur = 1)
2364         send �
2365      else
2366         SendUnicodeChar(0x017F) ; langes s
2367   }
2368   else if Ebene = 5
2369      SendUnicodeChar(0x03C2) ; varsigma
2370   else if Ebene = 6
2371      SendUnicodeChar(0x2218) ; Verkn�pfungsoperator
2372   PriorDeadKey := ""   CompKey := ""
2373return
2374
2375
2376neo_tot3:
2377   EbeneAktualisieren()
2378   if Ebene = 1
2379   {
2380      SendUnicodeChar(0x02DC)  ; tilde, tot
2381      PriorDeadKey := "t1"
2382   }
2383   else if Ebene = 2
2384   {
2385      SendUnicodeChar(0x00AF)  ; macron, tot
2386      PriorDeadKey := "t2"
2387   }
2388   else if Ebene = 3
2389   {
2390      SendUnicodeChar(0x00A8)  ; Diaerese
2391      PriorDeadKey := "t3"
2392   }
2393   else if Ebene = 4
2394   {
2395      SendUnicodeChar(0x002F)  ; Schr�gstrich, tot
2396      PriorDeadKey := "t5"
2397   }
2398   else if Ebene = 5
2399   {
2400      sendUnicodeChar(0x02DD)  ;doppelakut
2401      PriorDeadKey := "t4"
2402   }
2403   else if Ebene = 6
2404   {
2405      SendUnicodeChar(0x02CF)  ; komma drunter, tot
2406      PriorDeadKey := "t6"
2407   }
2408return
2409
2410
2411/*
2412   ------------------------------------------------------
2413   Reihe 3
2414   ------------------------------------------------------
2415*/
2416
2417neo_u:
2418   EbeneAktualisieren()
2419   if Ebene = 1
2420   {
2421      if (PriorDeadKey = "c1")       ; circumflex
2422         BSSendUnicodeChar(0x00FB)
2423      else if (PriorDeadKey = "a1")  ; akut
2424         BSSendUnicodeChar(0x00FA)
2425      else if (PriorDeadKey = "a2")  ; grave
2426         BSSendUnicodeChar(0x00F9)
2427      else if (PriorDeadKey = "t3")  ; Diaerese
2428         Send, {bs}�
2429      else if (PriorDeadKey = "t4")  ; doppelakut
2430         BSSendUnicodeChar(0x0171)
2431      else if (PriorDeadKey = "c3")  ; brevis
2432         BSSendUnicodeChar(0x016D)
2433      else if (PriorDeadKey = "t2")  ; macron
2434         BSSendUnicodeChar(0x016B)
2435      else if (PriorDeadKey = "a4")  ; ogonek
2436         BSSendUnicodeChar(0x0173)
2437      else if (PriorDeadKey = "a6")  ; Ring
2438         BSSendUnicodeChar(0x016F)
2439      else if (PriorDeadKey = "t1")  ; tilde
2440         BSSendUnicodeChar(0x0169)
2441      else if (PriorDeadKey = "c2")  ; caron
2442         BSSendUnicodeChar(0x01D4)
2443      else
2444         sendinput {blind}u
2445   }
2446   else if Ebene = 2
2447   {
2448      if (PriorDeadKey = "c1")        ; circumflex
2449         BSSendUnicodeChar(0x00DB)
2450      else if (PriorDeadKey = "a1")   ; akut
2451         BSSendUnicodeChar(0x00DA)
2452      else if (PriorDeadKey = "a2")   ; grave
2453         BSSendUnicodeChar(0x00D9)
2454      else if (PriorDeadKey = "t3")   ; Diaerese
2455         Send, {bs}�
2456      else if (PriorDeadKey = "a6")   ; Ring
2457         BSSendUnicodeChar(0x016E)
2458      else if (PriorDeadKey = "c3")   ; brevis
2459         BSSendUnicodeChar(0x016C)
2460      else if (PriorDeadKey = "t4")   ; doppelakut
2461         BSSendUnicodeChar(0x0170)
2462      else if (PriorDeadKey = "c2")   ; caron
2463         BSSendUnicodeChar(0x01D3)
2464      else if (PriorDeadKey = "t2")   ; macron
2465         BSSendUnicodeChar(0x016A)
2466      else if (PriorDeadKey = "a4")   ; ogonek
2467         BSSendUnicodeChar(0x0172)
2468      else if (PriorDeadKey = "t1")   ; tilde
2469         BSSendUnicodeChar(0x0168)
2470      else
2471         sendinput {blind}U
2472   }
2473   else if Ebene = 3
2474      send \
2475   else if Ebene = 4
2476      Send {blind}{Home}
2477   else if Ebene = 5   
2478   {  } ; leer
2479   else if Ebene = 6
2480      SendUnicodeChar(0x222E) ; contour integral
2481   PriorDeadKey := ""   CompKey := ""
2482return
2483
2484neo_i:
2485   EbeneAktualisieren()
2486   if Ebene = 1
2487   {
2488      if (PriorDeadKey = "c1")        ; circumflex
2489         BSSendUnicodeChar(0x00EE)
2490      else if (PriorDeadKey = "a1")   ; akut
2491         BSSendUnicodeChar(0x00ED)
2492      else if (PriorDeadKey = "a2")   ; grave
2493         BSSendUnicodeChar(0x00EC)
2494      else if (PriorDeadKey = "t3")   ; Diaerese
2495         Send, {bs}�
2496      else if (PriorDeadKey = "t2")   ; macron
2497         BSSendUnicodeChar(0x012B)
2498      else if (PriorDeadKey = "c3")   ; brevis
2499         BSSendUnicodeChar(0x012D)
2500      else if (PriorDeadKey = "a5")   ; ogonek
2501         BSSendUnicodeChar(0x012F)
2502      else if (PriorDeadKey = "t1")   ; tilde
2503         BSSendUnicodeChar(0x0129)
2504      else if (PriorDeadKey = "a4")   ; punkt dar�ber
2505         BSSendUnicodeChar(0x0131)
2506      else if (PriorDeadKey = "c2")   ; caron
2507         BSSendUnicodeChar(0x01D0)
2508      else
2509         sendinput {blind}i
2510      if (PriorDeadKey = "comp")      ; compose
2511         CompKey := "i_small"
2512      else
2513         CompKey := ""
2514   }
2515   else if Ebene = 2
2516   {   
2517      if (PriorDeadKey = "c1")        ; circumflex
2518         BSSendUnicodeChar(0x00CE)
2519      else if (PriorDeadKey = "a1")   ; akut
2520         BSSendUnicodeChar(0x00CD)
2521      else if (PriorDeadKey = "a2")   ; grave
2522         BSSendUnicodeChar(0x00CC)
2523      else if (PriorDeadKey = "t3")   ; Diaerese
2524         Send, {bs}�
2525      else if (PriorDeadKey = "t2")   ; macron
2526         BSSendUnicodeChar(0x012A)
2527      else if (PriorDeadKey = "c3")   ; brevis
2528         BSSendUnicodeChar(0x012C)
2529      else if (PriorDeadKey = "a4")   ; ogonek
2530         BSSendUnicodeChar(0x012E)
2531      else if (PriorDeadKey = "t1")   ; tilde
2532         BSSendUnicodeChar(0x0128)
2533      else if (PriorDeadKey = "a5")   ; punkt dar�ber
2534         BSSendUnicodeChar(0x0130)
2535      else if (PriorDeadKey = "c2")   ; caron
2536         BSSendUnicodeChar(0x01CF)
2537      else
2538         sendinput {blind}I
2539      if (PriorDeadKey = "comp")      ; compose
2540         CompKey := "i_capital"
2541      else
2542         CompKey := ""
2543   }
2544   else if Ebene = 3
2545   {
2546      send `/
2547      CompKey := ""
2548   }
2549   else if Ebene = 4
2550   {
2551      Sendinput {Blind}{Left}
2552      CompKey := ""
2553   }
2554   else if Ebene = 5   
2555   {
2556      SendUnicodeChar(0x03B9) ; iota
2557      CompKey := ""
2558   }
2559   else if Ebene = 6
2560   {
2561      SendUnicodeChar(0x222B) ; integral
2562      CompKey := ""
2563   }
2564      PriorDeadKey := ""
2565return
2566
2567neo_a:
2568   EbeneAktualisieren()
2569   if Ebene = 1
2570   {
2571      if (PriorDeadKey = "c1")        ; circumflex
2572         BSSendUnicodeChar(0x00E2)
2573      else if (PriorDeadKey = "a1")   ; akut
2574         BSSendUnicodeChar(0x00E1)
2575      else if (PriorDeadKey = "a2")   ; grave
2576         BSSendUnicodeChar(0x00E0)
2577      else if (PriorDeadKey = "t3")   ; Diaerese
2578         send {bs}�
2579      else if (PriorDeadKey = "a6")   ; Ring
2580         Send {bs}�
2581      else if (PriorDeadKey = "t1")   ; tilde
2582         BSSendUnicodeChar(0x00E3)
2583      else if (PriorDeadKey = "a4")   ; ogonek
2584         BSSendUnicodeChar(0x0105)
2585      else if (PriorDeadKey = "t2")   ; macron
2586         BSSendUnicodeChar(0x0101)
2587      else if (PriorDeadKey = "c3")   ; brevis
2588         BSSendUnicodeChar(0x0103)
2589      else if (PriorDeadKey = "c2")   ; caron
2590         BSSendUnicodeChar(0x01CE)
2591      else
2592         sendinput {blind}a
2593      if (PriorDeadKey = "comp")      ; compose
2594         CompKey := "a_small"
2595      else
2596         CompKey := ""
2597   }
2598   else if Ebene = 2
2599   {
2600      if (PriorDeadKey = "c1")        ; circumflex
2601         BSSendUnicodeChar(0x00C2)
2602      else if (PriorDeadKey = "a1")   ; akut
2603         BSSendUnicodeChar(0x00C1)
2604      else if (PriorDeadKey = "a2")   ; grave
2605         BSSendUnicodeChar(0x00C0)
2606      else if (PriorDeadKey = "t3")   ; Diaerese
2607         send {bs}�
2608      else if (PriorDeadKey = "t1")   ; tilde
2609         BSSendUnicodeChar(0x00C3)
2610      else if (PriorDeadKey = "a6")   ; Ring
2611         Send {bs}�
2612      else if (PriorDeadKey = "t2")   ; macron
2613         BSSendUnicodeChar(0x0100)
2614      else if (PriorDeadKey = "c3")   ; brevis
2615         BSSendUnicodeChar(0x0102)
2616      else if (PriorDeadKey = "a4")   ; ogonek
2617         BSSendUnicodeChar(0x0104)
2618      else if (PriorDeadKey = "c2")   ; caron
2619         BSSendUnicodeChar(0x01CD)
2620      else
2621         sendinput {blind}A
2622      if (PriorDeadKey = "comp")      ; compose
2623         CompKey := "a_capital"
2624      else
2625         CompKey := ""
2626   }
2627   else if Ebene = 3
2628   {
2629      sendraw {
2630      CompKey := ""
2631   }
2632   else if Ebene = 4
2633   {
2634      Sendinput {Blind}{Down}
2635      CompKey := ""
2636   }
2637   else if Ebene = 5
2638   {
2639      SendUnicodeChar(0x03B1) ;alpha
2640      CompKey := ""
2641   }
2642   else if Ebene = 6
2643   {
2644      SendUnicodeChar(0x2200) ;fuer alle   
2645      CompKey := ""
2646   }
2647   PriorDeadKey := ""
2648return
2649
2650neo_e:
2651   EbeneAktualisieren()
2652   if Ebene = 1
2653   {
2654      if (PriorDeadKey = "c1")        ; circumflex
2655         BSSendUnicodeChar(0x00EA)
2656      else if (PriorDeadKey = "a1")   ; akut
2657         BSSendUnicodeChar(0x00E9)
2658      else if (PriorDeadKey = "a2")   ; grave
2659         BSSendUnicodeChar(0x00E8)
2660      else if (PriorDeadKey = "t3")   ; Diaerese
2661         Send, {bs}�
2662      else if (PriorDeadKey = "a4")   ; ogonek
2663         BSSendUnicodeChar(0x0119)
2664      else if (PriorDeadKey = "t2")   ; macron
2665         BSSendUnicodeChar(0x0113)
2666      else if (PriorDeadKey = "c3")   ; brevis
2667         BSSendUnicodeChar(0x0115)
2668      else if (PriorDeadKey = "c2")   ; caron
2669         BSSendUnicodeChar(0x011B)
2670      else if (PriorDeadKey = "a5")   ; punkt dar�ber
2671         BSSendUnicodeChar(0x0117)
2672      else if (CompKey = "a_small")   ; compose
2673      {
2674         Send {bs}�
2675         CompKey := ""
2676      }
2677      else if (CompKey = "o_small")   ; compose
2678      {
2679         Send {bs}�
2680         CompKey := ""
2681      }     
2682      else
2683         sendinput {blind}e
2684   }
2685   else if Ebene = 2
2686   {
2687      if (PriorDeadKey = "c1")        ; circumflex
2688         BSSendUnicodeChar(0x00CA)
2689      else if (PriorDeadKey = "a1")   ; akut
2690         BSSendUnicodeChar(0x00C9)
2691      else if (PriorDeadKey = "a2")   ; grave
2692         BSSendUnicodeChar(0x00C8)
2693      else if (PriorDeadKey = "t3")   ; Diaerese
2694         Send, {bs}�
2695      else if (PriorDeadKey = "c2")   ; caron
2696         BSSendUnicodeChar(0x011A)
2697      else if (PriorDeadKey = "t2")   ; macron
2698         BSSendUnicodeChar(0x0112)
2699      else if (PriorDeadKey = "c3")   ; brevis
2700         BSSendUnicodeChar(0x0114)
2701      else if (PriorDeadKey = "a4")   ; ogonek
2702         BSSendUnicodeChar(0x0118)
2703      else if (PriorDeadKey = "a5")   ; punkt dar�ber
2704         BSSendUnicodeChar(0x0116)
2705      else if (CompKey = "a_capital") ; compose
2706      {
2707         Send {bs}�
2708         CompKey := ""
2709      }
2710      else if (CompKey = "o_capital")        ; compose
2711      {
2712         Send {bs}�
2713         CompKey := ""
2714      }     
2715      else
2716         sendinput {blind}E
2717   }
2718   else if Ebene = 3
2719      sendraw }
2720   else if Ebene = 4
2721      Sendinput {Blind}{Right}
2722   else if Ebene = 5
2723        SendUnicodeChar(0x03B5) ;epsilon
2724   else if Ebene = 6
2725        SendUnicodeChar(0x2203) ;es existiert   
2726   PriorDeadKey := ""   CompKey := ""
2727return
2728
2729neo_o:
2730   EbeneAktualisieren()
2731   if Ebene = 1
2732   {
2733      if (PriorDeadKey = "c1")        ; circumflex
2734         BSSendUnicodeChar(0x00F4)
2735      else if (PriorDeadKey = "a1")   ; akut
2736         BSSendUnicodeChar(0x00F3)
2737      else if (PriorDeadKey = "a2")   ; grave
2738         BSSendUnicodeChar(0x00F2)
2739      else if (PriorDeadKey = "t3")   ; Diaerese
2740         Send, {bs}�
2741      else if (PriorDeadKey = "t1")   ; tilde
2742         BSSendUnicodeChar(0x00F5)
2743      else if (PriorDeadKey = "t4")   ; doppelakut
2744         BSSendUnicodeChar(0x0151)
2745      else if (PriorDeadKey = "t5")   ; Schr�gstrich
2746         BSSendUnicodeChar(0x00F8)
2747      else if (PriorDeadKey = "t2")   ; macron
2748         BSSendUnicodeChar(0x014D)
2749      else if (PriorDeadKey = "c3")   ; brevis
2750         BSSendUnicodeChar(0x014F)
2751      else if (PriorDeadKey = "a4")   ; ogonek
2752         BSSendUnicodeChar(0x01EB)
2753      else if (PriorDeadKey = "c2")   ; caron
2754         BSSendUnicodeChar(0x01D2)                     
2755      else
2756         sendinput {blind}o
2757      if (PriorDeadKey = "comp")      ; compose
2758         CompKey := "o_small"
2759      else
2760         CompKey := ""
2761   }
2762   else if Ebene = 2
2763   {
2764      if (PriorDeadKey = "c1")        ; circumflex
2765         BSSendUnicodeChar(0x00D4)
2766      else if (PriorDeadKey = "a1")   ; akut
2767         BSSendUnicodeChar(0x00D3)
2768      else if (PriorDeadKey = "a2")   ; grave
2769         BSSendUnicodeChar(0x00D2)
2770      else if (PriorDeadKey = "t5")   ; Schr�gstrich
2771         BSSendUnicodeChar(0x00D8)
2772      else if (PriorDeadKey = "t1")   ; tilde
2773         BSSendUnicodeChar(0x00D5)
2774      else if (PriorDeadKey = "t4")   ; doppelakut
2775         BSSendUnicodeChar(0x0150)
2776      else if (PriorDeadKey = "t3")   ; Diaerese
2777         send {bs}�
2778      else if (PriorDeadKey = "t2")   ; macron
2779         BSSendUnicodeChar(0x014C)
2780      else if (PriorDeadKey = "c3")   ; brevis
2781         BSSendUnicodeChar(0x014E)
2782      else if (PriorDeadKey = "a4")   ; ogonek
2783         BSSendUnicodeChar(0x01EA)
2784      else if (PriorDeadKey = "c2")   ; caron
2785         BSSendUnicodeChar(0x01D1)   
2786      else
2787         sendinput {blind}O
2788      if (PriorDeadKey = "comp")      ; compose
2789         CompKey := "o_capital"
2790      else
2791         CompKey := ""
2792   }
2793   else if Ebene = 3
2794   {
2795      send *
2796      CompKey := ""
2797   }
2798   else if Ebene = 4
2799   {
2800      Send {blind}{End}
2801      CompKey := ""
2802   }
2803   else if Ebene = 5
2804   {
2805      SendUnicodeChar(0x03BF) ; omicron
2806      CompKey := ""
2807   }
2808   else if Ebene = 6
2809   {
2810      SendUnicodeChar(0x2208) ; element of
2811      CompKey := ""
2812   }
2813   PriorDeadKey := ""
2814return
2815
2816neo_s:
2817   EbeneAktualisieren()
2818   if Ebene = 1
2819   {
2820      if (PriorDeadKey = "c1")      ; circumflex
2821         BSSendUnicodeChar(0x015D)
2822      else if (PriorDeadKey = "a1") ; akut
2823         BSSendUnicodeChar(0x015B)
2824      else if (PriorDeadKey = "c2") ; caron
2825         BSSendUnicodeChar(0x0161)
2826      else if (PriorDeadKey = "a3") ; cedilla
2827         BSSendUnicodeChar(0x015F)
2828      else if (PriorDeadKey = "a5") ; punkt dar�ber
2829         BSSendUnicodeChar(0x1E61)
2830      else if (PriorDeadKey = "c6") ; punkt darunter
2831         BSSendUnicodeChar(0x1E63)
2832      else
2833      {
2834         if (LangSTastatur = 1)
2835         {
2836            if GetKeyState("CapsLock","T")
2837               sendinput {blind}s
2838            else
2839               SendUnicodeChar(0x017F) ; langes s
2840         }
2841         else
2842            sendinput {blind}s
2843      }
2844      if (PriorDeadKey = "comp")
2845         CompKey := "s_small"
2846      else
2847         CompKey := ""
2848   }
2849   else if Ebene = 2
2850   {
2851      if (PriorDeadKey = "c1")      ; circumflex
2852         BSSendUnicodeChar(0x015C)
2853      else if (PriorDeadKey = "c2") ; caron
2854         BSSendUnicodeChar(0x0160)
2855      else if (PriorDeadKey = "a1") ; akut
2856         BSSendUnicodeChar(0x015A)
2857      else if (PriorDeadKey = "a3") ; cedilla
2858         BSSendUnicodeChar(0x015E)
2859      else if (PriorDeadKey = "a5") ; punkt dar�ber
2860         BSSendUnicodeChar(0x1E60)
2861      else if (PriorDeadKey = "c6") ; punkt darunter
2862         BSSendUnicodeChar(0x1E62)
2863      else
2864      {
2865         if GetKeyState("CapsLock","T") && (LangSTastatur = 1)
2866            SendUnicodeChar(0x017F)
2867         else
2868            sendinput {blind}S
2869      }
2870      if (PriorDeadKey = "comp")
2871         CompKey := "s_capital"
2872      else
2873         CompKey := ""
2874   }
2875   else if Ebene = 3
2876   {
2877      send ?
2878      CompKey := ""
2879   }
2880   else if Ebene = 4
2881   {
2882      Send �
2883      CompKey := ""
2884   }
2885   else if Ebene = 5
2886   {
2887      SendUnicodeChar(0x03C3) ;sigma
2888      CompKey := ""
2889   }
2890   else if Ebene = 6
2891   {
2892      SendUnicodeChar(0x03A3)  ; Sigma
2893      CompKey := ""
2894   }
2895   PriorDeadKey := ""
2896return
2897
2898neo_n:
2899   EbeneAktualisieren()
2900   if Ebene = 1
2901   {
2902      if (PriorDeadKey = "a1")          ; akut
2903         BSSendUnicodeChar(0x0144)
2904      else if (PriorDeadKey = "t1")     ; tilde
2905         BSSendUnicodeChar(0x00F1)
2906      else if (PriorDeadKey = "c2")    ; caron
2907         BSSendUnicodeChar(0x0148)
2908      else if (PriorDeadKey = "a3")   ; cedilla
2909         BSSendUnicodeChar(0x0146)
2910      else if (PriorDeadKey = "a5") ; punkt dar�ber
2911         BSSendUnicodeChar(0x1E45)
2912      else
2913         sendinput {blind}n
2914   }
2915   else if Ebene = 2
2916   {
2917      if (PriorDeadKey = "c2")         ; caron
2918         BSSendUnicodeChar(0x0147)
2919      else if (PriorDeadKey = "t1")     ; tilde
2920         BSSendUnicodeChar(0x00D1)
2921      else if (PriorDeadKey = "a1")     ; akut
2922         BSSendUnicodeChar(0x0143)
2923      else if (PriorDeadKey = "a3")   ; cedilla
2924         BSSendUnicodeChar(0x0145)
2925      else if (PriorDeadKey = "a5") ; punkt dar�ber
2926         BSSendUnicodeChar(0x1E44)
2927      else
2928         sendinput {blind}N
2929   }
2930   else if Ebene = 3
2931      send (
2932   else if Ebene = 4
2933   {
2934      if (PriorDeadKey = "c1")            ; circumflex
2935         BSSendUnicodeChar(0x2074)
2936      else if (PriorDeadKey = "c4")       ; toter -
2937         BSSendUnicodeChar(0x2084)
2938      else
2939         Send 4
2940   }
2941   else if Ebene = 5
2942      SendUnicodeChar(0x03BD) ; nu
2943   else if Ebene = 6
2944      SendUnicodeChar(0x2115) ; N (nat�rliche Zahlen)
2945   PriorDeadKey := ""   CompKey := ""
2946return
2947
2948neo_r:
2949   EbeneAktualisieren()
2950   if Ebene = 1
2951   {
2952      if (PriorDeadKey = "a1")           ; akut
2953         BSSendUnicodeChar(0x0155)
2954      else if (PriorDeadKey = "c2")     ; caron
2955         BSSendUnicodeChar(0x0159)
2956      else if (PriorDeadKey = "a3")    ; cedilla
2957         BSSendUnicodeChar(0x0157)
2958      else if (PriorDeadKey = "a5")  ; punkt dar�ber
2959         BSSendUnicodeChar(0x0E59)
2960      else if (PriorDeadKey = "c6") ; punkt darunter
2961         BSSendUnicodeChar(0x1E5B)
2962      else
2963         sendinput {blind}r
2964      if (PriorDeadKey = "comp")
2965         CompKey := "r_small"
2966      else
2967         CompKey := ""
2968   }
2969   else if Ebene = 2
2970   {
2971      if (PriorDeadKey = "c2")          ; caron
2972         BSSendUnicodeChar(0x0158)
2973      else if (PriorDeadKey = "a1")      ; akut
2974         BSSendUnicodeChar(0x0154)
2975      else if (PriorDeadKey = "a3")    ; cedilla
2976         BSSendUnicodeChar(0x0156)
2977      else if (PriorDeadKey = "a5")  ; punkt dar�ber
2978         BSSendUnicodeChar(0x1E58)
2979      else if (PriorDeadKey = "c6") ; punkt darunter
2980         BSSendUnicodeChar(0x1E5A)
2981      else
2982         sendinput {blind}R
2983      if (PriorDeadKey = "comp")
2984         CompKey := "r_capital"
2985      else
2986         CompKey := ""
2987   }
2988   else if Ebene = 3
2989   {
2990      send )
2991      CompKey := ""
2992   }
2993   else if Ebene = 4
2994   {
2995      if (PriorDeadKey = "c1")            ; circumflex
2996         BSSendUnicodeChar(0x2075)
2997      else if (PriorDeadKey = "c4")       ; toter -
2998         BSSendUnicodeChar(0x2085)
2999      else
3000         Send 5
3001      CompKey := ""
3002   }
3003   else if Ebene = 5
3004   {
3005      SendUnicodeChar(0x03F1) ; rho symbol (varrho)
3006      CompKey := ""
3007   }
3008   else if Ebene = 6
3009   {
3010      SendUnicodeChar(0x211D) ; R (reelle Zahlen)
3011      CompKey := ""
3012   }
3013   PriorDeadKey := ""
3014return
3015
3016neo_t:
3017     EbeneAktualisieren()
3018     if Ebene = 1
3019     {
3020        if (PriorDeadKey = "c2")          ; caron
3021           BSSendUnicodeChar(0x0165)
3022        else if (PriorDeadKey = "a3")    ; cedilla
3023           BSSendUnicodeChar(0x0163)
3024        else if (PriorDeadKey = "c4")   ; Querstrich
3025           BSSendUnicodeChar(0x0167)
3026        else if (PriorDeadKey = "a5")  ; punkt dar�ber
3027           BSSendUnicodeChar(0x1E6B)
3028        else if (PriorDeadKey = "c6") ; punkt darunter
3029           BSSendUnicodeChar(0x1E6D)
3030        else
3031           sendinput {blind}t
3032        if (PriorDeadKey = "comp")
3033           CompKey := "t_small"
3034        else
3035           CompKey := ""
3036     }
3037     else if Ebene = 2
3038     {
3039        if (PriorDeadKey = "c2")          ; caron
3040           BSSendUnicodeChar(0x0164)
3041        else if (PriorDeadKey = "a3")    ; cedilla
3042           BSSendUnicodeChar(0x0162)
3043        else if (PriorDeadKey = "c4")   ; Querstrich
3044           BSSendUnicodeChar(0x0166)
3045        else if (PriorDeadKey = "a5")  ; punkt dar�ber
3046           BSSendUnicodeChar(0x1E6A)
3047        else if (PriorDeadKey = "c6") ; punkt darunter
3048           BSSendUnicodeChar(0x1E6C)
3049        else
3050           sendinput {blind}T
3051        if (PriorDeadKey = "comp")
3052           CompKey := "t_capital"
3053        else
3054           CompKey := ""
3055     }
3056     else if Ebene = 3
3057     {
3058        send {blind}- ; Bis
3059        CompKey := ""
3060     }
3061     else if Ebene = 4
3062     {
3063        if (PriorDeadKey = "c1")            ; circumflex
3064           BSSendUnicodeChar(0x2076)
3065        else if (PriorDeadKey = "c4")       ; toter -
3066           BSSendUnicodeChar(0x2086)
3067        else
3068           Send 6
3069        CompKey := ""
3070     }
3071     else if Ebene = 5
3072     {
3073        SendUnicodeChar(0x03C4) ; tau
3074        CompKey := ""
3075     }
3076     else if Ebene = 6
3077     {
3078        SendUnicodeChar(0x2202 ) ; partielle Ableitung
3079        CompKey := ""
3080     }
3081     PriorDeadKey := ""
3082return
3083
3084neo_d:
3085   EbeneAktualisieren()
3086   if Ebene = 1
3087   {
3088      if (PriorDeadKey = "c4")        ; Querstrich
3089         BSSendUnicodeChar(0x0111)
3090      else if (PriorDeadKey = "t5")  ; Schr�gstrich
3091         BSSendUnicodeChar(0x00F0)
3092      else if (PriorDeadKey = "c2")     ; caron
3093         BSSendUnicodeChar(0x010F)
3094      else if (PriorDeadKey = "a5")  ; punkt dar�ber
3095         BSSendUnicodeChar(0x1E0B)
3096      else if (PriorDeadKey = "c6") ; punkt darunter
3097         BSSendUnicodeChar(0x1E0D)
3098      else
3099         sendinput {blind}d
3100   }
3101   else if Ebene = 2
3102   {
3103      if (PriorDeadKey = "c4")        ; Querstrich
3104         BSSendUnicodeChar(0x0110)
3105      else if (PriorDeadKey = "t5")  ; Schr�gstrich
3106         BSSendUnicodeChar(0x00D0)
3107      else if (PriorDeadKey = "c2")     ; caron
3108         BSSendUnicodeChar(0x010E)
3109      else if (PriorDeadKey = "a5")  ; punkt dar�ber
3110         BSSendUnicodeChar(0x1E0A)
3111      else if (PriorDeadKey = "c6") ; punkt darunter
3112         BSSendUnicodeChar(0x1E0D)
3113      else sendinput {blind}D
3114   }
3115   else if Ebene = 3
3116      send :
3117   else if Ebene = 4
3118     Send `,
3119   else if Ebene = 5
3120      SendUnicodeChar(0x03B4) ;delta
3121   else if Ebene = 6
3122      SendUnicodeChar(0x0394)  ; Delta
3123   PriorDeadKey := ""   CompKey := ""
3124return
3125
3126neo_y:
3127   EbeneAktualisieren()
3128   if Ebene = 1
3129   {
3130      if (PriorDeadKey = "t3")       ; Diaerese
3131         Send {bs}�
3132      else if (PriorDeadKey = "a1")      ; akut
3133         BSSendUnicodeChar(0x00FD)
3134      else if (PriorDeadKey = "c1")    ; circumflex
3135         BSSendUnicodeChar(0x0177)
3136      else
3137         sendinput {blind}y
3138   }
3139   else if Ebene = 2
3140   {
3141      if (PriorDeadKey = "a1")           ; akut
3142         BSSendUnicodeChar(0x00DD)
3143      else if (PriorDeadKey = "t3")    ; Diaerese
3144         Send {bs}�
3145      else if (PriorDeadKey = "c1")      ; circumflex
3146         BSSendUnicodeChar(0x0176)
3147      else
3148         sendinput {blind}Y
3149   }
3150   else if Ebene = 3
3151      send @
3152   else if Ebene = 4
3153      Send .
3154   else if Ebene = 5
3155      SendUnicodeChar(0x03C5) ; upsilon
3156   else if Ebene = 6
3157      SendUnicodeChar(0x2207) ; nabla
3158   PriorDeadKey := ""   CompKey := ""
3159return
3160
3161;SC02B (#) wird zu Mod3
3162
3163
3164/*
3165   ------------------------------------------------------
3166   Reihe 4
3167   ------------------------------------------------------
3168*/
3169
3170;SC056 (<) wird zu Mod4
3171
3172neo_�:
3173   EbeneAktualisieren()
3174   if Ebene = 1
3175   {
3176      if (PriorDeadKey = "t2")        ; macron
3177         BSSendUnicodeChar(0x01D6)
3178      else if (PriorDeadKey = "a1")   ; akut
3179         BSSendUnicodeChar(0x01D8)
3180      else if (PriorDeadKey = "a2")   ; grave
3181         BSSendUnicodeChar(0x01DC)
3182      else if (PriorDeadKey = "c2")   ; caron
3183         BSSendUnicodeChar(0x01DA)
3184      else
3185         sendinput {blind}�
3186   }
3187   else if Ebene = 2
3188   {
3189      if (PriorDeadKey = "t2")        ; macron
3190         BSSendUnicodeChar(0x01D5)
3191      else if (PriorDeadKey = "a1")   ; akut
3192         BSSendUnicodeChar(0x01D7)
3193      else if (PriorDeadKey = "a2")   ; grave
3194         BSSendUnicodeChar(0x01DB)
3195      else if (PriorDeadKey = "c2")   ; caron
3196         BSSendUnicodeChar(0x01D9)
3197      else
3198         sendinput {blind}�
3199   }
3200   else if Ebene = 3
3201      send {blind}{#}
3202   else if Ebene = 4
3203      Send {Esc}
3204   else if Ebene = 5
3205     {} ; leer
3206   else if Ebene = 6
3207      SendUnicodeChar(0x221D) ; proportional
3208
3209   PriorDeadKey := ""   CompKey := ""
3210return
3211
3212neo_�:
3213   EbeneAktualisieren()
3214   if Ebene = 1
3215   {
3216      if (PriorDeadKey = "t2")        ; macron
3217         BSSendUnicodeChar(0x022B)
3218      else
3219         sendinput {blind}�
3220   }
3221   else if Ebene = 2
3222   {
3223      if (PriorDeadKey = "t2")        ; macron
3224         BSSendUnicodeChar(0x022A)
3225      else
3226         sendinput {blind}�
3227   }
3228   else if Ebene = 3
3229      send $
3230   else if Ebene = 4
3231      goto neo_tab
3232   else if Ebene = 5
3233       {} ;leer
3234   else if Ebene = 6
3235      SendUnicodeChar(0x2111) ; Fraktur I
3236   PriorDeadKey := ""   CompKey := ""
3237return
3238
3239neo_�:
3240   EbeneAktualisieren()
3241   if Ebene = 1
3242   {
3243      if (PriorDeadKey = "t2")        ; macron
3244         BSSendUnicodeChar(0x01DF)
3245      else
3246         sendinput {blind}�
3247   }
3248   else if Ebene = 2
3249   {
3250      if (PriorDeadKey = "t2")        ; macron
3251         BSSendUnicodeChar(0x001DE)
3252      else
3253         sendinput {blind}�
3254   }
3255   else if Ebene = 3
3256      send |
3257   else if Ebene = 4
3258      Send {PgDn}    ; Next
3259   else if Ebene = 5
3260      SendUnicodeChar(0x03B7) ; eta
3261   else if Ebene = 6
3262      SendUnicodeChar(0x211C) ; altes R
3263   PriorDeadKey := ""   CompKey := ""
3264return
3265
3266neo_p:
3267   EbeneAktualisieren()
3268   if Ebene = 1
3269   {
3270      if (PriorDeadKey = "a5")      ; punkt dar�ber
3271         BSSendUnicodeChar(0x1E57)
3272      else
3273         sendinput {blind}p
3274   }
3275   else if Ebene = 2
3276   {
3277      if (PriorDeadKey = "a5")      ; punkt dar�ber
3278         BSSendUnicodeChar(0x1E56)
3279      else
3280         sendinput {blind}P
3281   }
3282   else if Ebene = 3
3283   {
3284      if (PriorDeadKey = "t1")    ; tilde
3285         BSSendUnicodeChar(0x2248)
3286      else
3287         sendraw ~
3288   }     
3289   else if Ebene = 4
3290        Send {Enter}
3291   else if Ebene = 5
3292      SendUnicodeChar(0x03C0) ;pi
3293   else if Ebene = 6
3294      SendUnicodeChar(0x03A0)  ; Pi
3295   PriorDeadKey := ""   CompKey := ""
3296return
3297
3298neo_z:
3299   EbeneAktualisieren()
3300   if Ebene = 1
3301   {
3302      if (PriorDeadKey = "c2")         ; caron
3303         BSSendUnicodeChar(0x017E)
3304      else if (PriorDeadKey = "a1")     ; akut
3305         BSSendUnicodeChar(0x017A)
3306      else if (PriorDeadKey = "a5") ; punkt dr�ber
3307         BSSendUnicodeChar(0x017C)
3308      else if (PriorDeadKey = "c6") ; punkt drunter
3309         BSSendUnicodeChar(0x1E93)
3310      else
3311         sendinput {blind}z
3312   }
3313   else if Ebene = 2
3314   {
3315      if (PriorDeadKey = "c2")         ; caron 
3316         BSSendUnicodeChar(0x017D)
3317      else if (PriorDeadKey = "a1")     ; akut
3318         BSSendUnicodeChar(0x0179)
3319      else if (PriorDeadKey = "a5") ; punkt dar�ber
3320         BSSendUnicodeChar(0x017B)
3321      else if (PriorDeadKey = "c6") ; punkt drunter
3322         BSSendUnicodeChar(0x1E92)
3323      else
3324         sendinput {blind}Z
3325   }
3326   else if Ebene = 3
3327      send ``{space} ; untot
3328   else if Ebene = 4
3329     {} ; leer   
3330   else if Ebene = 5
3331      SendUnicodeChar(0x03B6) ;zeta
3332   else if Ebene = 6
3333      SendUnicodeChar(0x2124)  ; Z (ganze Zahlen)
3334   PriorDeadKey := ""   CompKey := ""
3335return
3336
3337neo_b:
3338   EbeneAktualisieren()
3339   if Ebene = 1
3340   {
3341      if (PriorDeadKey = "a5")      ; punkt dar�ber
3342         BSSendUnicodeChar(0x1E03)
3343      else
3344         sendinput {blind}b
3345   }
3346   else if Ebene = 2
3347   {
3348      if (PriorDeadKey = "a5")       ; punkt dar�ber
3349         BSSendUnicodeChar(0x1E02)
3350      else
3351         sendinput {blind}B
3352   }
3353   else if Ebene = 3
3354      send {blind}{+}
3355   else if Ebene = 4
3356      send :
3357   else if Ebene = 5
3358      SendUnicodeChar(0x03B2) ; beta
3359   else if Ebene = 6
3360      SendUnicodeChar(0x21D2) ; Doppel-Pfeil rechts
3361   PriorDeadKey := ""   CompKey := ""
3362return
3363
3364neo_m:
3365   EbeneAktualisieren()
3366   if Ebene = 1
3367   {
3368      if (PriorDeadKey = "a5")       ; punkt dar�ber
3369         BSSendUnicodeChar(0x1E41)
3370      else if (PriorDeadKey = "c6") ; punkt darunter
3371         BSSendUnicodeChar(0x1E43)
3372      else if ( (CompKey = "t_small") or (CompKey = "t_capital") )       ; compose
3373         CompUnicodeChar(0x2122)          ; TM
3374      else if ( (CompKey = "s_small") or (CompKey = "s_capital") )       ; compose
3375         CompUnicodeChar(0x2120)          ; SM
3376      else
3377         sendinput {blind}m
3378   }
3379   else if Ebene = 2
3380   {
3381      if (PriorDeadKey = "a5")       ; punkt dar�ber
3382         BSSendUnicodeChar(0x1E40)
3383      else if (PriorDeadKey = "c6") ; punkt darunter
3384         BSSendUnicodeChar(0x1E42)
3385      else if ( (CompKey = "t_capital") or (CompKey = "t_small") )       ; compose
3386         CompUnicodeChar(0x2122)          ; TM
3387      else if ( (CompKey = "s_capital") or (CompKey = "s_small") )       ; compose
3388         CompUnicodeChar(0x2120)          ; SM
3389      else
3390         sendinput {blind}M
3391   }
3392   else if Ebene = 3
3393      send `%
3394   else if Ebene = 4
3395   {
3396      if (PriorDeadKey = "c1")            ; circumflex
3397         BSSendUnicodeChar(0x00B9)
3398      else if (PriorDeadKey = "c4")       ; toter -
3399         BSSendUnicodeChar(0x2081)
3400      else
3401         Send 1
3402   }
3403   else if Ebene = 5
3404      SendUnicodeChar(0x03BC) ; griechisch mu, micro w�re 0x00B5
3405   else if Ebene = 6
3406      SendUnicodeChar(0x21D4) ; doppelter Doppelpfeil (genau dann wenn)
3407   PriorDeadKey := ""   CompKey := ""
3408return
3409
3410neo_komma:
3411   EbeneAktualisieren()
3412   if Ebene = 1
3413       { 
3414         if GetKeyState("CapsLock","T")
3415         {
3416           if (IsModifierPressed())
3417           {
3418             send {blind},
3419           }
3420           else
3421           {
3422              send `,
3423           }
3424               
3425         }
3426         else
3427         {
3428           send {blind},
3429         }
3430       }
3431   else if Ebene = 2
3432       SendUnicodeChar(0x22EE) ;  vertikale ellipse
3433   else if Ebene = 3
3434      send "
3435   else if Ebene = 4
3436   {
3437      if (PriorDeadKey = "c1")            ; circumflex
3438         BSSendUnicodeChar(0x00B2)
3439      else if (PriorDeadKey = "c4")       ; toter -
3440         BSSendUnicodeChar(0x2082)
3441      else
3442         Send 2
3443   }
3444   else if Ebene = 5
3445      SendUnicodeChar(0x03C1) ; rho
3446   else if Ebene = 6
3447      SendUnicodeChar(0x21D0) ; Doppelpfeil links
3448   PriorDeadKey := ""   CompKey := ""
3449return
3450
3451neo_punkt:
3452   EbeneAktualisieren()
3453   if Ebene = 1
3454        { 
3455         if GetKeyState("CapsLock","T")
3456         {
3457           if (IsModifierPressed())
3458           {
3459             send {blind}.
3460           }
3461           else
3462           {
3463              send .
3464           }
3465               
3466         }
3467         else {
3468           send {blind}.
3469         }
3470       }
3471  else if Ebene = 2
3472      SendUnicodeChar(0x2026)  ; ellipse
3473   else if Ebene = 3
3474      send '
3475   else if Ebene = 4
3476   {
3477      if (PriorDeadKey = "c1")            ; circumflex
3478         BSSendUnicodeChar(0x00B3)
3479      else if (PriorDeadKey = "c4")       ; toter -
3480         BSSendUnicodeChar(0x2083)
3481      else
3482         Send 3
3483   }
3484   else if Ebene = 5
3485      SendUnicodeChar(0x03D1) ; theta symbol (vartheta)
3486   else if Ebene = 6
3487      SendUnicodeChar(0x0398)  ; Theta
3488   PriorDeadKey := ""   CompKey := ""
3489return
3490
3491
3492neo_j:
3493   EbeneAktualisieren()
3494   if Ebene = 1
3495   {
3496      if (PriorDeadKey = "c1")           ; circumflex
3497         BSSendUnicodeChar(0x0135)
3498      else if (PriorDeadKey = "c2")      ; caron
3499         BSSendUnicodeChar(0x01F0)
3500      else if (CompKey = "i_small")        ; compose
3501         CompUnicodeChar(0x0133)          ; ij
3502      else if (CompKey = "l_small")        ; compose
3503         CompUnicodeChar(0x01C9)          ; lj
3504      else if (CompKey = "l_capital")       ; compose
3505         CompUnicodeChar(0x01C8)          ; Lj
3506      else
3507         sendinput {blind}j
3508   }
3509   else if Ebene = 2
3510   {
3511      if (PriorDeadKey = "c1")            ; circumflex
3512         BSSendUnicodeChar(0x0134)
3513      else if (CompKey = "i_capital")        ; compose
3514         CompUnicodeChar(0x0132)          ; IJ
3515      else if (CompKey = "l_capital")        ; compose
3516         CompUnicodeChar(0x01C7)          ; LJ
3517      else
3518         sendinput {blind}J
3519   }
3520   else if Ebene = 3
3521      send `;
3522   else if Ebene = 4
3523     Send `;
3524   else if Ebene = 5
3525      SendUnicodeChar(0x03B8) ; theta
3526   else if Ebene = 6
3527      SendUnicodeChar(0x2261) ; identisch
3528   PriorDeadKey := ""   CompKey := ""
3529return
3530
3531/*
3532   ------------------------------------------------------
3533   Numpad
3534   ------------------------------------------------------
3535
3536   folgende Tasten verhalten sich bei ein- und ausgeschaltetem
3537   NumLock gleich:
3538*/
3539
3540neo_NumpadDiv:
3541   EbeneAktualisieren()
3542   if ( (Ebene = 1) or (Ebene = 2) )
3543      send {NumpadDiv}
3544   else if Ebene = 3
3545      send �
3546   else if ( (Ebene = 4) or (Ebene = 5) )
3547      SendUnicodeChar(0x2215)   ; slash
3548   PriorDeadKey := ""   CompKey := ""
3549return
3550
3551neo_NumpadMult:
3552   EbeneAktualisieren()
3553   if ( (Ebene = 1) or (Ebene = 2) )
3554      send {NumpadMult}
3555   else if Ebene = 3
3556      send �
3557   else if ( (Ebene = 4) or (Ebene = 5) )
3558      SendUnicodeChar(0x22C5)  ; cdot
3559   PriorDeadKey := ""   CompKey := ""
3560return
3561
3562neo_NumpadSub:
3563   EbeneAktualisieren()
3564   if ( (Ebene = 1) or (Ebene = 2) )
3565   {
3566      if (PriorDeadKey = "c1")          ; circumflex
3567         BSSendUnicodeChar(0x207B)
3568      else if (PriorDeadKey = "c4")       ; toter -
3569         BSSendUnicodeChar(0x208B)         
3570      else
3571         send {blind}{NumpadSub}
3572   }
3573   else if Ebene = 3
3574      SendUnicodeChar(0x2212) ; echtes minus
3575   PriorDeadKey := ""   CompKey := ""
3576return
3577
3578neo_NumpadAdd:
3579   EbeneAktualisieren()
3580   if ( (Ebene = 1) or (Ebene = 2) )
3581   {
3582      if (PriorDeadKey = "c1")          ; circumflex
3583         BSSendUnicodeChar(0x207A)
3584      else if (PriorDeadKey = "c4")       ; toter -
3585         BSSendUnicodeChar(0x208A)         
3586      else
3587         send {blind}{NumpadAdd}
3588   }
3589   else if Ebene = 3
3590      send �
3591   else if ( (Ebene = 4) or (Ebene = 5) )
3592      SendUnicodeChar(0x2213)   ; -+
3593   PriorDeadKey := ""   CompKey := ""
3594return
3595
3596neo_NumpadEnter:
3597   EbeneAktualisieren()
3598   if ( (Ebene = 1) or (Ebene = 2) )
3599      send {NumpadEnter}     
3600   else if Ebene = 3
3601      SendUnicodeChar(0x2260) ; neq
3602   else if ( (Ebene = 4) or (Ebene = 5) )
3603      SendUnicodeChar(0x2248) ; approx
3604   PriorDeadKey := ""   CompKey := ""
3605return
3606
3607/*
3608   folgende Tasten verhalten sich bei ein- und ausgeschaltetem NumLock
3609   unterschiedlich:
3610
3611   bei NumLock ein
3612*/
3613
3614
3615
3616neo_Numpad7:
3617   EbeneAktualisieren()
3618   if Ebene = 1
3619   {
3620      send {blind}{Numpad7}
3621      if (PriorDeadKey = "comp")
3622         CompKey := "Num_7"
3623      else
3624         CompKey := ""       
3625   }
3626   else if Ebene = 2
3627   {
3628      send {NumpadHome}
3629      CompKey := ""
3630   }
3631   else if Ebene = 3
3632   {
3633      SendUnicodeChar(0x2195)   ; Hoch-Runter-Pfeil
3634      CompKey := ""
3635   }
3636   else if ( (Ebene = 4) or (Ebene = 5) )
3637   {
3638      SendUnicodeChar(0x226A)  ; ll
3639      CompKey := ""
3640   }
3641   PriorDeadKey := ""
3642return
3643
3644neo_Numpad8:
3645   EbeneAktualisieren()
3646   if Ebene = 1
3647   {
3648      if (CompKey = "Num_1")
3649         CompUnicodeChar(0x215B)       ; 1/8
3650      else if (CompKey = "Num_3")
3651         CompUnicodeChar(0x215C)       ; 3/8
3652      else if (CompKey = "Num_5")
3653         CompUnicodeChar(0x215D)       ; 5/8
3654      else if (CompKey = "Num_7")
3655         CompUnicodeChar(0x215E)       ; 7/8
3656      else
3657         send {blind}{Numpad8}
3658      if (PriorDeadKey = "comp")
3659         CompKey := "Num_8"
3660      else
3661         CompKey := ""
3662   }
3663   else if Ebene = 2
3664   {
3665      send {NumpadUp}
3666      CompKey := ""
3667   }
3668   else if Ebene = 3
3669   {
3670      SendUnicodeChar(0x2191)     ; uparrow
3671      CompKey := ""
3672   }
3673   else if ( (Ebene = 4) or (Ebene = 5) )
3674   {
3675      SendUnicodeChar(0x2229)    ; intersection
3676      CompKey := ""
3677   }
3678   PriorDeadKey := ""   CompKey := ""
3679return
3680
3681neo_Numpad9:
3682   EbeneAktualisieren()
3683   if Ebene = 1
3684   {
3685      send {blind}{Numpad9}
3686      if (PriorDeadKey = "comp")
3687         CompKey := "Num_9"
3688      else
3689         CompKey := ""
3690   }
3691   else if Ebene = 2
3692   {
3693      send {NumpadPgUp}
3694      CompKey := ""
3695   }
3696   else if Ebene = 3
3697   {
3698      SendUnicodeChar(0x2297) ; Tensorprodukt ; Vektor in die Ebene zeigend
3699      CompKey := ""
3700   }
3701   else if ( (Ebene = 4) or (Ebene = 5) )
3702   {
3703      SendUnicodeChar(0x226B)  ; gg
3704      CompKey := ""
3705   }
3706   PriorDeadKey := ""
3707return
3708
3709
3710
3711neo_Numpad4:
3712   EbeneAktualisieren()
3713   if Ebene = 1
3714   {
3715      if (CompKey = "Num_1")
3716         CompUnicodeChar(0x00BC)       ; 1/4
3717      else if (CompKey = "Num_3")
3718         CompUnicodeChar(0x00BE)       ; 3/4
3719      else
3720         send {blind}{Numpad4}
3721      if (PriorDeadKey = "comp")
3722         CompKey := "Num_4"
3723      else
3724         CompKey := ""
3725   }
3726   else if Ebene = 2
3727   {
3728      send {NumpadLeft}
3729      CompKey := ""
3730   }
3731   else if Ebene = 3
3732   {
3733      SendUnicodeChar(0x2190)     ; leftarrow
3734      CompKey := ""
3735   }
3736   else if ( (Ebene = 4) or (Ebene = 5) )
3737   {
3738      SendUnicodeChar(0x2282)  ; subset of
3739      CompKey := ""
3740   }
3741   PriorDeadKey := ""
3742return
3743
3744neo_Numpad5:
3745   EbeneAktualisieren()
3746   if Ebene = 1
3747   {
3748      if (CompKey = "Num_1")
3749         CompUnicodeChar(0x2155)       ; 1/5
3750      else if (CompKey = "Num_2")
3751         CompUnicodeChar(0x2156)       ; 2/5
3752      else if (CompKey = "Num_3")
3753         CompUnicodeChar(0x2157)       ; 3/5
3754      else if (CompKey = "Num_4")
3755         CompUnicodeChar(0x2158)       ; 4/5
3756      else
3757         send {blind}{Numpad5}
3758      if (PriorDeadKey = "comp")
3759         CompKey := "Num_5"
3760      else
3761         CompKey := ""
3762   }
3763   else if Ebene = 2
3764   {
3765      send {NumpadClear}
3766      CompKey := ""
3767   }
3768   else if Ebene = 3
3769   {
3770      SendUnicodeChar(0x221E) ; INFINITY
3771      CompKey := ""
3772   }
3773   else if ( (Ebene = 4) or (Ebene = 5) )
3774   {
3775      SendUnicodeChar(0x220B) ; enth�lt das Element
3776      CompKey := ""
3777   }
3778   PriorDeadKey := ""
3779return
3780
3781neo_Numpad6:
3782   EbeneAktualisieren()
3783   if Ebene = 1
3784   {
3785      if (CompKey = "Num_1")
3786         CompUnicodeChar(0x2159)       ; 1/6
3787      else if (CompKey = "Num_5")
3788         CompUnicodeChar(0x215A)       ; 5/6
3789      else
3790         send {blind}{Numpad6}
3791      if (PriorDeadKey = "comp")
3792         CompKey := "Num_6"
3793      else
3794         CompKey := ""
3795   }
3796   else if Ebene = 2
3797   {
3798      send {NumpadRight}
3799      CompKey := ""
3800   }
3801   else if Ebene = 3
3802   {
3803      SendUnicodeChar(0x2192)     ; rightarrow
3804      CompKey := ""
3805   }
3806   else if ( (Ebene = 4) or (Ebene = 5) )
3807   {
3808      SendUnicodeChar(0x2283) ; superset of
3809      CompKey := ""
3810   }
3811   PriorDeadKey := ""
3812return
3813
3814neo_Numpad1:
3815   EbeneAktualisieren()
3816   if Ebene = 1
3817   {
3818      send {blind}{Numpad1}
3819      if (PriorDeadKey = "comp")
3820         CompKey := "Num_1"
3821      else
3822         CompKey := ""
3823   }
3824   else if Ebene = 2
3825   {
3826      send {NumpadEnd}
3827      CompKey := ""
3828   }
3829   else if Ebene = 3
3830   {
3831      SendUnicodeChar(0x2194) ; Links-Rechts-Pfeil
3832      CompKey := ""
3833   }
3834   else if ( (Ebene = 4) or (Ebene = 5) )
3835   {
3836      SendUnicodeChar(0x2264)   ; leq
3837      CompKey := ""
3838   }
3839   PriorDeadKey := ""
3840return
3841
3842neo_Numpad2:
3843   EbeneAktualisieren()
3844   if Ebene = 1
3845   {
3846      if (CompKey = "Num_1")
3847         CompUnicodeChar(0x00BD)       ; 1/2
3848      else
3849         send {blind}{Numpad2}
3850      if (PriorDeadKey = "comp")
3851         CompKey := "Num_2"
3852      else
3853         CompKey := ""
3854   }
3855   else if Ebene = 2
3856   {
3857      send {NumpadDown}
3858      CompKey := ""
3859   }
3860   else if Ebene = 3
3861   {
3862      SendUnicodeChar(0x2193)     ; downarrow
3863      CompKey := ""
3864   }
3865   else if ( (Ebene = 4) or (Ebene = 5) )
3866   {
3867      SendUnicodeChar(0x222A)  ; vereinigt
3868      CompKey := ""
3869   }
3870   PriorDeadKey := ""
3871return
3872
3873neo_Numpad3:
3874   EbeneAktualisieren()
3875   if Ebene = 1
3876   {
3877      if (CompKey = "Num_1")
3878         CompUnicodeChar(0x2153)       ; 1/3
3879      else if (CompKey = "Num_2")
3880         CompUnicodeChar(0x2154)       ; 2/3
3881      else
3882         send {blind}{Numpad3}
3883      if (PriorDeadKey = "comp")
3884         CompKey := "Num_3"
3885      else
3886         CompKey := ""
3887   }
3888   else if Ebene = 2
3889      send {NumpadPgDn}
3890   else if Ebene = 3
3891      SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
3892   else if ( (Ebene = 4) or (Ebene = 5) )
3893      SendUnicodeChar(0x2265)  ; geq
3894   PriorDeadKey := ""   CompKey := ""
3895return
3896
3897neo_Numpad0:
3898   EbeneAktualisieren()
3899   if Ebene = 1
3900   {
3901      send {blind}{Numpad0}
3902      if (PriorDeadKey = "comp")
3903         CompKey := "Num_0"
3904      else
3905         CompKey := ""
3906   }
3907   else if Ebene = 2
3908   {
3909      send {NumpadIns}
3910      CompKey := ""
3911   }
3912   else if Ebene = 3
3913   {
3914      send `%
3915      CompKey := ""
3916   }
3917   else if ( (Ebene = 4) or (Ebene = 5) )
3918   {
3919      send �
3920      CompKey := ""
3921   }
3922   PriorDeadKey := ""
3923return
3924
3925neo_NumpadDot:
3926   EbeneAktualisieren()
3927   if Ebene = 1
3928   {
3929      send {NumpadDot}
3930      CompKey := ""
3931   }
3932   else if Ebene = 2
3933   {
3934      send {NumpadDel}
3935      CompKey := ""
3936   }
3937   else if Ebene = 3
3938   {
3939      send .
3940      CompKey := ""
3941   }
3942   else if ( (Ebene = 4) or (Ebene = 5) )
3943   {
3944      send `,
3945      CompKey := ""
3946   }
3947   PriorDeadKey := ""
3948return
3949
3950/*
3951   bei NumLock aus
3952*/
3953
3954neo_NumpadHome:
3955   EbeneAktualisieren()
3956   if Ebene = 1
3957   {
3958      send {NumpadHome}
3959      CompKey := ""
3960   }
3961   else if Ebene = 2
3962   {
3963      send {Numpad7}
3964      if (PriorDeadKey = "comp")
3965         CompKey := "Num_7"
3966      else
3967         CompKey := ""
3968   }
3969   else if ( (Ebene = 4) or (Ebene = 5) )
3970   {
3971      SendUnicodeChar(0x226A)  ; ll
3972      CompKey := ""
3973   }
3974   PriorDeadKey := ""
3975return
3976
3977neo_NumpadUp:
3978   EbeneAktualisieren()
3979   if Ebene = 1
3980   {
3981      send {NumpadUp}
3982      CompKey := ""
3983   }
3984   else if Ebene = 2
3985   {
3986      if (CompKey = "Num_1")
3987         CompUnicodeChar(0x215B)       ; 1/8
3988      else if (CompKey = "Num_3")
3989         CompUnicodeChar(0x215C)       ; 3/8
3990      else if (CompKey = "Num_5")
3991         CompUnicodeChar(0x215D)       ; 5/8
3992      else if (CompKey = "Num_7")
3993         CompUnicodeChar(0x215E)       ; 7/8
3994      else
3995         send {Numpad8}
3996      if (PriorDeadKey = "comp")
3997         CompKey := "Num_8"
3998      else
3999         CompKey := ""
4000   }
4001   else if Ebene = 3
4002   {
4003      SendUnicodeChar(0x2191)     ; uparrow
4004      CompKey := ""
4005   }
4006   else if ( (Ebene = 4) or (Ebene = 5) )
4007   {
4008      SendUnicodeChar(0x2229)    ; intersection
4009      CompKey := ""
4010   }
4011   PriorDeadKey := ""
4012return
4013
4014neo_NumpadPgUp:
4015   EbeneAktualisieren()
4016   if Ebene = 1
4017   {
4018      send {NumpadPgUp}
4019      CompKey := ""
4020   }
4021   else if Ebene = 2
4022   {
4023      send {Numpad9}
4024      if (PriorDeadKey = "comp")
4025         CompKey := "Num_9"
4026      else
4027         CompKey := ""
4028   }
4029   else if ( (Ebene = 4) or (Ebene = 5) )
4030   {
4031
4032      SendUnicodeChar(0x226B)  ; gg
4033      CompKey := ""
4034   }
4035   PriorDeadKey := ""
4036return
4037
4038neo_NumpadLeft:
4039   EbeneAktualisieren()
4040   if Ebene = 1
4041   {
4042      send {NumpadLeft}
4043      CompKey := ""
4044   }
4045   else if Ebene = 2
4046   {
4047      if (CompKey = "Num_1")
4048         CompUnicodeChar(0x00BC)       ; 1/4
4049      else if (CompKey = "Num_3")
4050         CompUnicodeChar(0x00BE)       ; 3/4
4051      else
4052         send {Numpad4}
4053      if (PriorDeadKey = "comp")
4054         CompKey := "Num_4"
4055      else
4056         CompKey := ""
4057   }
4058   else if Ebene = 3
4059   {
4060      SendUnicodeChar(0x2190)     ; leftarrow
4061      CompKey := ""
4062   }
4063   else if ( (Ebene = 4) or (Ebene = 5) )
4064   {
4065      SendUnicodeChar(0x2282)  ; subset of
4066      CompKey := ""
4067   }
4068   PriorDeadKey := ""
4069return
4070
4071neo_NumpadClear:
4072   EbeneAktualisieren()
4073   if Ebene = 1
4074   {
4075      send {NumpadClear}
4076      CompKey := ""
4077   }
4078   else if Ebene = 2
4079   {
4080      if (CompKey = "Num_1")
4081         CompUnicodeChar(0x2155)       ; 1/5
4082      else if (CompKey = "Num_2")
4083         CompUnicodeChar(0x2156)       ; 2/5
4084      else if (CompKey = "Num_3")
4085         CompUnicodeChar(0x2157)       ; 3/5
4086      else if (CompKey = "Num_4")
4087         CompUnicodeChar(0x2158)       ; 4/5
4088      else
4089         send {Numpad5}
4090      if (PriorDeadKey = "comp")
4091         CompKey := "Num_5"
4092      else
4093         CompKey := ""
4094   }
4095   else if Ebene = 3
4096   {
4097      send �
4098      CompKey := ""
4099   }
4100   else if ( (Ebene = 4) or (Ebene = 5) )
4101   {
4102      SendUnicodeChar(0x220A) ; small element of
4103      CompKey := ""
4104   }
4105   PriorDeadKey := ""
4106return
4107
4108neo_NumpadRight:
4109   EbeneAktualisieren()
4110   if Ebene = 1
4111   {
4112      send {NumpadRight}
4113      CompKey := ""
4114   }
4115   else if Ebene = 2
4116   {
4117      if (CompKey = "Num_1")
4118         CompUnicodeChar(0x2159)       ; 1/6
4119      else if (CompKey = "Num_5")
4120         CompUnicodeChar(0x215A)       ; 5/6
4121      else
4122         send {Numpad6}
4123      if (PriorDeadKey = "comp")
4124         CompKey := "Num_6"
4125      else
4126         CompKey := ""
4127   }
4128   else if Ebene = 3
4129   {
4130      SendUnicodeChar(0x2192)     ; rightarrow
4131      CompKey := ""
4132   }
4133   else if ( (Ebene = 4) or (Ebene = 5) )
4134   {
4135      SendUnicodeChar(0x2283) ; superset of
4136      CompKey := ""
4137   }
4138   PriorDeadKey := ""
4139return
4140
4141neo_NumpadEnd:
4142   EbeneAktualisieren()
4143   if Ebene = 1
4144   {
4145      send {NumpadEnd}
4146      CompKey := ""
4147   }
4148   else if Ebene = 2
4149   {
4150      send {Numpad1}
4151      if (PriorDeadKey = "comp")
4152         CompKey := "Num_1"
4153      else
4154         CompKey := ""
4155   }
4156   else if Ebene = 3
4157   {
4158      SendUnicodeChar(0x21CB) ; LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
4159      CompKey := ""
4160   }
4161   else if ( (Ebene = 4) or (Ebene = 5) )
4162   {
4163      SendUnicodeChar(0x2264)   ; leq
4164      CompKey := ""
4165   }
4166   PriorDeadKey := ""
4167return
4168
4169neo_NumpadDown:
4170   EbeneAktualisieren()
4171   if Ebene = 1
4172   {
4173      send {NumpadDown}
4174      CompKey := ""
4175   }
4176   else if Ebene = 2
4177   {
4178      if (CompKey = "Num_1")
4179         CompUnicodeChar(0x00BD)       ; 1/2
4180      else
4181         send {Numpad2}
4182      if (PriorDeadKey = "comp")
4183         CompKey := "Num_2"
4184      else
4185         CompKey := ""
4186   }
4187   else if Ebene = 3
4188   {
4189      SendUnicodeChar(0x2193)     ; downarrow
4190      CompKey := ""
4191   }
4192   else if ( (Ebene = 4) or (Ebene = 5) )
4193   {
4194      SendUnicodeChar(0x222A)  ; vereinigt
4195      CompKey := ""
4196   }
4197   PriorDeadKey := ""
4198return
4199
4200neo_NumpadPgDn:
4201   EbeneAktualisieren()
4202   if Ebene = 1
4203   {
4204      send {NumpadPgDn}
4205      CompKey := ""
4206   }
4207   else if Ebene = 2
4208   {
4209      if (CompKey = "Num_1")
4210         CompUnicodeChar(0x2153)       ; 1/3
4211      else if (CompKey = "Num_2")
4212         CompUnicodeChar(0x2154)       ; 2/3
4213      else
4214         send {Numpad3}
4215      if (PriorDeadKey = "comp")
4216         CompKey := "Num_3"
4217      else
4218         CompKey := ""
4219   }
4220   else if Ebene = 3
4221   {
4222      SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON   
4223      CompKey := ""
4224   }
4225   else if ( (Ebene = 4) or (Ebene = 5) )
4226   {
4227      SendUnicodeChar(0x2265)  ; geq
4228      CompKey := ""
4229   }
4230   PriorDeadKey := ""
4231return
4232
4233neo_NumpadIns:
4234   EbeneAktualisieren()
4235   if Ebene = 1
4236   {
4237      send {NumpadIns}
4238      CompKey := ""
4239   }
4240   else if Ebene = 2
4241   {
4242      send {Numpad0}
4243      if (PriorDeadKey = "comp")
4244         CompKey := "Num_0"
4245      else
4246         CompKey := ""
4247   }
4248   else if Ebene = 3
4249   {
4250      send `%
4251      CompKey := ""
4252   }
4253   else if ( (Ebene = 4) or (Ebene = 5) )
4254   {
4255      send �
4256      CompKey := ""
4257   }
4258   PriorDeadKey := ""
4259return
4260
4261neo_NumpadDel:
4262   EbeneAktualisieren()
4263   if Ebene = 1
4264   {
4265      send {NumpadDel}
4266      CompKey := ""
4267   }
4268   else if Ebene = 2
4269   {
4270      send {NumpadDot}
4271      CompKey := ""
4272   }
4273   else if Ebene = 3
4274   {
4275      send .
4276      CompKey := ""
4277   }
4278   else if ( (Ebene = 4) or (Ebene = 5) )
4279   {
4280      send `,
4281      CompKey := ""
4282   }
4283   PriorDeadKey := ""
4284return
4285
4286
4287/*
4288   ------------------------------------------------------
4289   Sondertasten
4290   ------------------------------------------------------
4291*/
4292*space::
4293   if (einHandNeo)
4294    spacepressed := 1
4295   else
4296    goto neo_SpaceUp
4297return
4298
4299*space up::
4300   if (einHandNeo)
4301   {
4302     if (keypressed)
4303     {
4304       keypressed := 0
4305       spacepressed := 0   
4306     }
4307     else
4308     {
4309        goto neo_SpaceUp
4310     }
4311   }
4312   else
4313     { } ;do nothing
4314return
4315
4316neo_SpaceUp:
4317     EbeneAktualisieren()
4318     if Ebene = 1
4319     {
4320        if (CompKey = "r_small_1")
4321           Comp3UnicodeChar(0x2170)          ; r�misch i
4322        else if (CompKey = "r_capital_1")
4323           Comp3UnicodeChar(0x2160)          ; r�misch I
4324        else
4325           Send {blind}{Space}
4326     }
4327     if  Ebene  =  2
4328        Send  {blind}{Space}
4329     if Ebene = 3
4330        Send {blind}{Space}
4331     if Ebene = 4
4332     {
4333        if (PriorDeadKey = "c1")            ; circumflex
4334           BSSendUnicodeChar(0x2070)
4335        else if (PriorDeadKey = "c4")       ; toter -
4336           BSSendUnicodeChar(0x2080)
4337        else
4338           Send 0
4339     }
4340     else if Ebene = 5
4341        SendUnicodeChar(0x00A0)   ; gesch�tztes Leerzeichen
4342     else if Ebene = 6
4343        SendUnicodeChar(0x202F) ; schmales Leerzeichen
4344     PriorDeadKey := ""   CompKey := ""
4345  spacepressed := 0     
4346  keypressed := 0       
4347return
4348
4349/*
4350*Space::
4351   EbeneAktualisieren()
4352   if Ebene = 1
4353   {
4354      if (CompKey = "r_small_1")
4355         Comp3UnicodeChar(0x2170)          ; r�misch i
4356      else if (CompKey = "r_capital_1")
4357         Comp3UnicodeChar(0x2160)          ; r�misch I
4358      else
4359         Send {blind}{Space}
4360   }
4361   if  Ebene  =  2
4362      Send  {blind}{Space}
4363   if Ebene = 3
4364      Send {blind}{Space}
4365   if Ebene = 4
4366   {
4367      if (PriorDeadKey = "c1")            ; circumflex
4368         BSSendUnicodeChar(0x2070)
4369      else if (PriorDeadKey = "c4")       ; toter -
4370         BSSendUnicodeChar(0x2080)
4371      else
4372         Send 0
4373   }
4374   else if Ebene = 5
4375      SendUnicodeChar(0x00A0)   ; gesch�tztes Leerzeichen
4376   else if Ebene = 6
4377      SendUnicodeChar(0x202F) ; schmales Leerzeichen
4378   PriorDeadKey := ""   CompKey := ""
4379return
4380*/
4381/*
4382   Folgende Tasten sind nur aufgef�hrt, um PriorDeadKey zu leeren.
4383   Irgendwie sieht das noch nicht sch�n aus. Vielleicht l�sst sich dieses
4384   Problem irgendwie eleganter l�sen...
4385   
4386   Nachtrag:
4387   Weil es mit Alt+Tab Probleme gab, wird hier jetzt erstmal rumgeflickschustert,
4388   bis eine allgemeinere L�sung gefunden wurde.
4389*/
4390
4391*Enter::
4392   if ( not(lernModus) or (lernModus_std_Return) )
4393   {
4394     sendinput {Blind}{Enter}
4395     PriorDeadKey := ""   CompKey := ""
4396   }
4397return
4398
4399*Backspace::
4400   if ( not(lernModus) or (lernModus_std_Backspace) )
4401   {
4402     sendinput {Blind}{Backspace}
4403     PriorDeadKey := ""   CompKey := ""
4404   }
4405return
4406
4407*Del::
4408   if ( not(lernModus) or (lernModus_std_Entf) )
4409   {
4410     sendinput {Blind}{Del}
4411   }
4412return
4413
4414*Ins::
4415   if ( not(lernModus) or (lernModus_std_Einf) )
4416   {
4417     sendinput {Blind}{Ins}
4418   }
4419return
4420
4421
4422
4423
4424
4425/*
4426Auf Mod3+Tab liegt Compose. AltTab funktioniert, jedoch ShiftAltTab nicht.
4427Wenigstens kommt es jetzt nicht mehr zu komischen Ergebnissen, wenn man Tab
4428nach einem DeadKey dr�ckt...
4429*/
4430
4431neo_tab:
4432   if ( GetKeyState("SC038","P") )
4433   {
4434    Send,{Blind}{AltDown}{tab}
4435   
4436/*
4437     if (isShiftPressed())
4438     {
4439      Send,{ShiftDown}{AltDown}{tab}
4440     }
4441     else
4442     {       
4443;       msgbox alt+tab
4444        Send,{AltDown}{tab}
4445      ; SC038 & Tab::AltTab            ; http://de.autohotkey.com/docs/Hotkeys.htm#AltTabDetail
4446     }
4447*/
4448   }
4449   else if (IsMod3Pressed()) ;#
4450   {
4451      #Include *i %a_scriptdir%\ComposeLaunch.ahk
4452      #Include *i %a_scriptdir%\Source\ComposeLaunch.ahk
4453      PriorDeadKey := "comp"
4454      CompKey := ""
4455   }
4456   else
4457   {
4458      send {blind}{Tab}
4459      PriorDeadKey := ""
4460      CompKey := ""
4461   }
4462return
4463
4464*SC038 up::
4465   PriorDeadKey := ""   CompKey := ""
4466   send {blind}{AltUp}
4467return
4468   
4469*SC038 down::                    ; LAlt, damit AltTab funktioniert
4470    Send,{Blind}{AltDown}
4471   PriorDeadKey := ""   CompKey := ""
4472return
4473
4474*Home::
4475   if ( not(lernModus) or (lernModus_std_Pos1) )
4476   {
4477     sendinput {Blind}{Home}
4478     PriorDeadKey := ""   CompKey := ""
4479   }
4480return
4481
4482*End::
4483   if ( not(lernModus) or (lernModus_std_Ende) )
4484   {
4485     sendinput {Blind}{End}
4486     PriorDeadKey := ""   CompKey := ""
4487   }
4488return
4489
4490*PgUp::
4491   if ( not(lernModus) or (lernModus_std_PgUp) )
4492   {
4493     sendinput {Blind}{PgUp}
4494     PriorDeadKey := ""   CompKey := ""
4495   }
4496return
4497
4498*PgDn::
4499   if ( not(lernModus) or (lernModus_std_PgDn) )
4500   {
4501     sendinput {Blind}{PgDn}
4502     PriorDeadKey := ""   CompKey := ""
4503   }
4504return
4505
4506*Up::
4507   if ( not(lernModus) or (lernModus_std_Hoch) )
4508   {
4509     sendinput {Blind}{Up}
4510     PriorDeadKey := ""   CompKey := ""
4511   }
4512return
4513
4514*Down::
4515   if ( not(lernModus) or (lernModus_std_Runter) )
4516   {
4517     sendinput {Blind}{Down}
4518     PriorDeadKey := ""   CompKey := ""
4519   }
4520return
4521
4522*Left::
4523   if ( not(lernModus) or (lernModus_std_Links) )
4524   {
4525     sendinput {Blind}{Left}
4526     PriorDeadKey := ""   CompKey := ""
4527   }
4528return
4529
4530*Right::
4531   if ( not(lernModus) or (lernModus_std_Rechts) )
4532   {
4533     sendinput {Blind}{Right}
4534     PriorDeadKey := ""   CompKey := ""
4535   }
4536return
4537
4538
4539
4540
4541/*
4542   ------------------------------------------------------
4543   Methode KeyboardLED zur Steuerung der Keyboard-LEDs
4544   (NumLock/CapsLock/ScrollLock-Lichter)
4545   
4546   Benutzungshinweise: Man benutze
4547   KeyboardLED(LEDvalue,"Cmd"), wobei
4548   Cmd = on/off/switch,
4549   LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4
4550   bzw. eine beliebige Summe dieser Werte:
4551   AlleAus=0, CapsLock+NumLock=6, etc.
4552   
4553   Der folgende Code wurde �bernommen von:
4554   http://www.autohotkey.com/forum/viewtopic.php?t=10532
4555   
4556   Um eventuelle Wechselwirkungen mit dem bestehenden
4557   Code (insb. der Unicode-Konvertierung) auszuschie�en,
4558   sind auch alle (Hilfsmethoden) mit dem Postfix LED
4559   versehen worden.
4560   ------------------------------------------------------
4561*/
4562
4563KeyboardLED(LEDvalue, Cmd)  ; LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4 ; Cmd = on/off/switch
4564{
4565  Static h_device
4566  If ! h_device ; initialise
4567    {
4568    device =\Device\KeyBoardClass0
4569    SetUnicodeStrLED(fn,device)
4570    h_device:=NtCreateFileLED(fn,0+0x00000100+0x00000080+0x00100000,1,1,0x00000040+0x00000020,0)
4571    }
4572
4573  VarSetCapacity( output_actual, 4, 0 )
4574  input_size = 4
4575  VarSetCapacity( input, input_size, 0 )
4576
4577  If Cmd= switch  ;switches every LED according to LEDvalue
4578   KeyLED:= LEDvalue
4579  If Cmd= on  ;forces all choosen LED's to ON (LEDvalue= 0 ->LED's according to keystate)
4580   KeyLED:= LEDvalue | (GetKeyState("ScrollLock", "T") + 2*GetKeyState("NumLock", "T") + 4*GetKeyState("CapsLock", "T"))
4581  If Cmd= off  ;forces all choosen LED's to OFF (LEDvalue= 0 ->LED's according to keystate)
4582    {
4583    LEDvalue:= LEDvalue ^ 7
4584    KeyLED:= LEDvalue & (GetKeyState("ScrollLock", "T") + 2*GetKeyState("NumLock", "T") + 4*GetKeyState("CapsLock", "T"))
4585    }
4586  ; EncodeIntegerLED( KeyLED, 1, &input, 2 ) ;input bit pattern (KeyLED): bit 0 = scrolllock ;bit 1 = numlock ;bit 2 = capslock
4587  input := Chr(1) Chr(1) Chr(KeyLED)
4588  input := Chr(1)
4589  input=
4590  success := DllCall( "DeviceIoControl"
4591              , "uint", h_device
4592              , "uint", CTL_CODE_LED( 0x0000000b     ; FILE_DEVICE_KEYBOARD
4593                        , 2
4594                        , 0             ; METHOD_BUFFERED
4595                        , 0  )          ; FILE_ANY_ACCESS
4596              , "uint", &input
4597              , "uint", input_size
4598              , "uint", 0
4599              , "uint", 0
4600              , "uint", &output_actual
4601              , "uint", 0 )
4602}
4603
4604CTL_CODE_LED( p_device_type, p_function, p_method, p_access )
4605{
4606  Return, ( p_device_type << 16 ) | ( p_access << 14 ) | ( p_function << 2 ) | p_method
4607}
4608
4609
4610NtCreateFileLED(ByRef wfilename,desiredaccess,sharemode,createdist,flags,fattribs)
4611{
4612  VarSetCapacity(fh,4,0)
4613  VarSetCapacity(objattrib,24,0)
4614  VarSetCapacity(io,8,0)
4615  VarSetCapacity(pus,8)
4616  uslen:=DllCall("lstrlenW","str",wfilename)*2
4617  InsertIntegerLED(uslen,pus,0,2)
4618  InsertIntegerLED(uslen,pus,2,2)
4619  InsertIntegerLED(&wfilename,pus,4)
4620  InsertIntegerLED(24,objattrib,0)
4621  InsertIntegerLED(&pus,objattrib,8)
4622  status:=DllCall("ntdll\ZwCreateFile","str",fh,"UInt",desiredaccess,"str",objattrib,"str",io,"UInt",0,"UInt",fattribs
4623                  ,"UInt",sharemode,"UInt",createdist,"UInt",flags,"UInt",0,"UInt",0, "UInt")
4624  return ExtractIntegerLED(fh)
4625}
4626
4627
4628SetUnicodeStrLED(ByRef out, str_)
4629{
4630  VarSetCapacity(st1, 8, 0)
4631  InsertIntegerLED(0x530025, st1)
4632  VarSetCapacity(out, (StrLen(str_)+1)*2, 0)
4633  DllCall("wsprintfW", "str", out, "str", st1, "str", str_, "Cdecl UInt")
4634}
4635
4636
4637ExtractIntegerLED(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4)
4638; pSource is a string (buffer) whose memory area contains a raw/binary integer at pOffset.
4639; The caller should pass true for pSigned to interpret the result as signed vs. unsigned.
4640; pSize is the size of PSource's integer in bytes (e.g. 4 bytes for a DWORD or Int).
4641; pSource must be ByRef to avoid corruption during the formal-to-actual copying process
4642; (since pSource might contain valid data beyond its first binary zero).
4643{
4644  Loop %pSize%  ; Build the integer by adding up its bytes.
4645    result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1)
4646  if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
4647    return result  ; Signed vs. unsigned doesn't matter in these cases.
4648  ; Otherwise, convert the value (now known to be 32-bit) to its signed counterpart:
4649  return -(0xFFFFFFFF - result + 1)
4650}
4651
4652
4653InsertIntegerLED(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
4654; The caller must ensure that pDest has sufficient capacity.  To preserve any existing contents in pDest,
4655; only pSize number of bytes starting at pOffset are altered in it.
4656{
4657  Loop %pSize%  ; Copy each byte in the integer into the structure as raw binary data.
4658    DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF)
4659}
4660
4661
4662
4663
4664/*
4665   ------------------------------------------------------
4666   Funktionen
4667   ------------------------------------------------------
4668*/
4669
4670/*
4671Ebenen laut Referenz:
46721. Ebene (kein Mod)      4. Ebene (Mod4)
46732. Ebene (Umschalt)      5. Ebene (Umschalt+Mod3)
46743. Ebene (Mod3)          6. Ebene (Mod3+Mod4)
4675*/
4676
4677EbeneAktualisieren()
4678{
4679   global
4680   if (ahkTreiberKombi)
4681   {
4682      if ( IsMod4Pressed() and not(IsShiftPressed()) and not(IsMod3Pressed()))
4683      {
4684         Ebene = 6     
4685      }
4686      else
4687      {
4688        Ebene = -1
4689      } 
4690   }
4691   else
4692   {   
4693     if ( IsShiftPressed() )
4694     {  ; Umschalt
4695        if ( IsMod3Pressed() )
4696            { ; Umschalt UND Mod3
4697            if ( IsMod4Pressed() )
4698            {  ; Umschalt UND Mod3 UND Mod4
4699               ; Ebene 8 impliziert Ebene 6
4700               Ebene = 6
4701             }
4702            else
4703            { ; Umschald UND Mod3 NICHT Mod4
4704                Ebene = 5                 
4705            }
4706        }
4707        else
4708        {  ; Umschalt NICHT Mod3
4709            if ( IsMod4Pressed() )
4710            {  ; Umschalt UND Mod4 NICHT Mod3
4711               ; Ebene 7 impliziert Ebene 4
4712                Ebene = 4
4713            }
4714            else
4715            { ; Umschalt NICHT Mod3 NICHT Mod4
4716               Ebene = 2   
4717            }
4718         }   
4719     }
4720     else
4721     { ; NICHT Umschalt
4722        if ( IsMod3Pressed() )
4723        { ; Mod3 NICHT Umschalt
4724           if ( IsMod4Pressed() )
4725           {  ; Mod3 UND Mod4 NICHT Umschalt
4726               Ebene = 6
4727           }
4728           else
4729           { ; Mod3 NICHT Mod4 NICHT Umschalt
4730               Ebene = 3   
4731           }
4732        }
4733        else
4734        {  ; NICHT Umschalt NICHT Mod3
4735           if ( IsMod4Pressed() )
4736           {  ; Mod4 NICHT Umschalt NICHT Mod3
4737               Ebene = 4
4738           }
4739           else
4740           { ; NICHT Umschalt NICHT Mod3 NICHT Mod4
4741               Ebene = 1
4742           }
4743        }   
4744      }
4745   }
4746}
4747
4748
4749
4750IsShiftPressed()
4751{
4752  return GetKeyState("Shift","P")
4753}
4754
4755IsMod3Pressed()
4756{
4757   global
4758   if (IsMod3Locked)
4759   {
4760       return (not ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ))  ; # = SC02B
4761   }
4762   else {
4763      return ( GetKeyState("CapsLock","P") or GetKeyState("#","P") )  ; # = SC02B
4764   }
4765}
4766
4767IsMod4Pressed()
4768{
4769   global
4770   if( not(einHandNeo) or not(spacepressed) )
4771   {
4772     if (IsMod4Locked)
4773     {
4774         return (not ( GetKeyState("<","P") or GetKeyState("SC138","P") or altGrPressed ))
4775     }
4776     else {
4777         return ( GetKeyState("<","P") or GetKeyState("SC138","P") or altGrPressed )
4778     }
4779   }
4780   else
4781   {
4782     if (IsMod4Locked)
4783     {
4784         return (not ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P")  or altGrPressed ))
4785     }
4786     else {
4787         return ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P") or altGrPressed )
4788     }
4789   }
4790   
4791}
4792
4793
4794/*************************
4795  Alte Methoden
4796*************************/
4797
4798/*
4799Unicode(code)
4800{
4801   saved_clipboard := ClipboardAll
4802   Transform, Clipboard, Unicode, %code%
4803   sendplay ^v
4804   Clipboard := saved_clipboard
4805}
4806
4807BSUnicode(code)
4808{
4809   saved_clipboard := ClipboardAll
4810   Transform, Clipboard, Unicode, %code%
4811   sendplay {bs}^v
4812   Clipboard := saved_clipboard
4813}
4814*/
4815
4816IsModifierPressed()
4817{
4818   if (GetKeyState("LControl","P") or GetKeyState("RControl","P") or GetKeyState("LAlt","P") or GetKeyState("RAltl","P") or GetKeyState("LWin","P") or GetKeyState("RWin","P") or GetKeyState("LShift","P") or GetKeyState("RShift","P") or GetKeyState("AltGr","P") )
4819    {
4820       return 1
4821    }
4822    else
4823    {
4824       return 0
4825    }
4826}
4827
4828SendUnicodeChar(charCode)
4829{
4830   IfWinActive, ahk_class gdkWindowToplevel
4831   {
4832      StringLower, charCode, charCode
4833      send % "^+u" . SubStr(charCode,3) . " "
4834   } else {
4835      VarSetCapacity(ki, 28 * 2, 0)
4836
4837      EncodeInteger(&ki + 0, 1)
4838      EncodeInteger(&ki + 6, charCode)
4839      EncodeInteger(&ki + 8, 4)
4840      EncodeInteger(&ki +28, 1)
4841      EncodeInteger(&ki +34, charCode)
4842      EncodeInteger(&ki +36, 4|2)
4843
4844      DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
4845   }
4846}
4847/*
4848�ber den GDK-Workarround:
4849Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html
4850
4851Der Aufruf von �SubStr(charCode,3)� geht davon aus, dass alle charCodes in Hex mit f�hrendem �0x� angegeben sind. Die abenteuerliche �^+u�-Konstruktion ben�tigt im �brigen den Hex-Wert in Kleinschrift, was derzeit nicht bei den Zeichendefinitionen umgesetzt ist, daher zentral und weniger fehlertr�chtig an dieser Stelle. Au�erdem ein abschlie�end gesendetes Space, sonst bleibt der �eingetippte� Unicode-Wert noch kurz sichtbar stehen, bevor er sich GTK-sei-dank in das gew�nschte Zeichen verwandelt.
4852*/
4853
4854
4855BSSendUnicodeChar(charCode)
4856{
4857   send {bs}
4858   SendUnicodeChar(charCode)
4859}
4860
4861CompUnicodeChar(charCode)
4862{
4863   send {bs}
4864     SendUnicodeChar(charCode)
4865}
4866
4867Comp3UnicodeChar(charCode)
4868{
4869   send {bs}
4870   send {bs}
4871   SendUnicodeChar(charCode)
4872}
4873
4874
4875EncodeInteger(ref, val)
4876{
4877   DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)
4878}
4879
4880
4881;Lang-s-Tastatur:
4882{
4883SC056 & *Esc::
4884LangSTastatur := not(LangSTastatur) ; schaltet die Lang-s-Tastatur ein und aus
4885;if (LangSTastatur) SoundBeep ;auskommentieren, um Warnton zu erzeugen
4886return
4887}
4888
4889
4890/*
4891   ------------------------------------------------------
4892   BildschirmTastatur
4893   ------------------------------------------------------
4894*/
4895guiErstellt = 0
4896alwaysOnTop = 1
4897aktuellesBild = ebene1.png
4898SC056 & *F1::
4899SC138 & *F1::
4900{
4901  if (zeigeBildschirmTastatur)
4902    goto Switch1
4903  return
4904}
4905SC056 & *F2::
4906SC138 & *F2::
4907{
4908  if (zeigeBildschirmTastatur)
4909    goto Switch2
4910  return
4911}
4912SC056 & *F3::
4913SC138 & *F3::
4914{
4915  if (zeigeBildschirmTastatur)
4916    goto Switch3
4917  return
4918}
4919SC056 & *F4::
4920SC138 & *F4::
4921{
4922  if (zeigeBildschirmTastatur)
4923    goto Switch4
4924  return
4925}
4926SC056 & *F5::
4927SC138 & *F5::
4928{
4929  if (zeigeBildschirmTastatur)
4930    goto Switch5
4931  return
4932}
4933SC056 & *F6::
4934SC138 & *F6::
4935{
4936  if (zeigeBildschirmTastatur)
4937    goto Switch6
4938  return
4939}
4940SC056 & *F7::
4941SC138 & *F7::
4942{
4943  if (zeigeBildschirmTastatur)
4944    goto Show
4945  return
4946}
4947SC056 & *F8::
4948SC138 & *F8::
4949{
4950  if (zeigeBildschirmTastatur)
4951    goto ToggleAlwaysOnTop
4952  return
4953}
4954Switch1:
4955  if (guiErstellt)
4956  {
4957     if (Image == "ebene1.png")
4958        goto Close
4959     else
4960     {
4961       Image = ebene1.png
4962       SetTimer, Refresh
4963     }
4964  }
4965  else
4966  {
4967    Image = ebene1.png
4968    goto Show   
4969  }
4970Return
4971
4972Switch2:
4973  if (guiErstellt)
4974  {
4975     if (Image == "ebene2.png")
4976        goto Close
4977     else
4978     {
4979       Image = ebene2.png
4980       SetTimer, Refresh
4981     }
4982  }
4983  else
4984  {
4985    Image = ebene2.png
4986    goto Show   
4987  }
4988Return
4989
4990Switch3:
4991  if (guiErstellt)
4992  {
4993     if (Image == "ebene3.png")
4994        goto Close
4995     else
4996     {
4997       Image = ebene3.png
4998       SetTimer, Refresh
4999     }
5000  }
5001  else
5002  {
5003    Image = ebene3.png
5004    goto Show   
5005  }
5006Return
5007
5008Switch4:
5009  if (guiErstellt)
5010  {
5011     if (Image == "ebene4.png")
5012        goto Close
5013     else
5014     {
5015       Image = ebene4.png
5016       SetTimer, Refresh
5017     }
5018  }
5019  else
5020  {
5021    Image = ebene4.png
5022    goto Show   
5023  }
5024Return
5025
5026Switch5:
5027  if (guiErstellt)
5028  {
5029     if (Image == "ebene5.png")
5030        goto Close
5031     else
5032     {
5033       Image = ebene5.png
5034       SetTimer, Refresh
5035     }
5036  }
5037  else
5038  {
5039    Image = ebene5.png
5040    goto Show   
5041  }
5042Return
5043
5044Switch6:
5045  if (guiErstellt)
5046  {
5047     if (Image == "ebene6.png")
5048        goto Close
5049     else
5050     {
5051       Image = ebene6.png
5052       SetTimer, Refresh
5053     }
5054  }
5055  else
5056  {
5057    Image = ebene6.png
5058    goto Show   
5059  }
5060Return
5061
5062Show:
5063  if (guiErstellt)
5064  {
5065     goto Close
5066  }
5067  else
5068  {
5069    if (Image = "")
5070    {
5071      Image = ebene1.png
5072    }     
5073    yPosition := A_ScreenHeight -270
5074    Gui, Color, FFFFFF
5075    Gui, Add, Button, xm+5 gSwitch1, F1
5076    Gui, Add, Text, x+5, kleine Buchstaben
5077    Gui, Add, Button, xm+5 gSwitch2, F2
5078    Gui, Add, Text, x+5, gro�e Buchstaben
5079    Gui, Add, Button, xm+5 gSwitch3, F3
5080    Gui, Add, Text, x+5, Satz-/Sonderzeichen
5081    Gui, Add, Button, xm+5 gSwitch4, F4
5082    Gui, Add, Text, x+5, Zahlen / Steuerung
5083    Gui, Add, Button, xm+5 gSwitch5, F5
5084    Gui, Add, Text, x+5, Sprachen
5085    Gui, Add, Button, xm+5 gSwitch6, F6
5086    Gui, Add, Text, x+5, Mathesymbole
5087    Gui, Add, Button, xm+5 gShow, F7
5088    Gui, Add, Text, x+5, An /
5089    Gui, Add, Text, y+3, Aus
5090    Gui, Add, Button, x+10 y+-30 gShow, F8
5091    Gui, Add, Text, x+5, OnTop
5092    Gui, Add, Picture,AltSubmit ys w564 h200 vPicture, %Image%
5093    Gui, +AlwaysOnTop
5094    Gui, Show, y%yposition% Autosize
5095    SetTimer, Refresh
5096    guiErstellt = 1
5097  }
5098Return
5099
5100Close:
5101  guiErstellt = 0
5102  Gui, Destroy
5103Return
5104
5105Refresh:
5106   If (Image != OldImage)
5107   {
5108      GuiControl, , Picture, %Image%
5109      OldImage := Image
5110   }
5111Return
5112
5113ToggleAlwaysOnTop:
5114    if (alwaysOnTop)
5115    {
5116      Gui, -AlwaysOnTop
5117      alwaysOnTop = 0   
5118    }
5119    else
5120    {
5121      Gui, +AlwaysOnTop
5122      alwaysOnTop = 1
5123    }
5124Return
5125 ; Ende der BildschirmTastatur
5126
5127
5128/*
5129   ------------------------------------------------------
5130   Shift+Pause "pausiert" das Script.
5131   ------------------------------------------------------
5132*/
5133
5134+pause::
5135Suspend, Permit
5136   goto togglesuspend
5137return
5138
5139; ------------------------------------
5140
5141^SC034::einHandNeo := not(einHandNeo)  ; Punkt
5142^SC033::lernModus := not(lernModus)    ; Komma
5143
5144
5145
5146togglesuspend:
5147   if A_IsSuspended
5148   {
5149      menu, tray, rename, %enable%, %disable%
5150      menu, tray, tip, %name%
5151      if (iconBenutzen)
5152          menu, tray, icon, neo.ico,,1 
5153      suspend , off ; Schaltet Suspend aus -> NEO
5154   }
5155   else
5156   {
5157      menu, tray, rename, %disable%, %enable%
5158      menu, tray, tip, %name% : Deaktiviert
5159      if (iconBenutzen)
5160         menu, tray, icon, neo_disabled.ico,,1
5161      suspend , on  ; Schaltet Suspend ein -> QWERTZ
5162   }
5163
5164return
5165
5166
5167help:
5168   Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm
5169return
5170
5171
5172about:
5173   msgbox, 64, %name% � Ergonomische Tastaturbelegung,
5174   (
5175   %name%
5176   `nDas Neo-Layout ersetzt das �bliche deutsche
5177   Tastaturlayout mit der Alternative Neo,
5178   beschrieben auf http://neo-layout.org/.
5179   `nDazu sind keine Administratorrechte n�tig.
5180   `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke
5181   abgefangen und statt dessen eine �bersetzung weitergeschickt.
5182   `nDies geschieht transparent f�r den Anwender,
5183   es muss nichts installiert werden.
5184   `nDie Zeichen�bersetzung kann leicht �ber das Icon im
5185   Systemtray deaktiviert werden.  `n
5186   )
5187return
5188
5189
5190neo:
5191   run http://neo-layout.org/
5192return
5193
5194autohotkey:
5195   run http://autohotkey.com/
5196return
5197
5198open:
5199   ListLines ; shows the Autohotkey window
5200return
5201
5202edit:
5203   edit
5204return
5205
5206reload:
5207   Reload
5208return
5209
5210hide:
5211   menu, tray, noicon
5212return
5213
5214exitprogram:
5215   exitapp
5216return
5217
5218
5219
5220
5221
5222
Note: See TracBrowser for help on using the browser.