root/windows/autohotkey/neo20-all-in-one.ahk @ 591

Revision 591, 119.5 KB (checked in by dennis, 5 years ago)

Der Versuch, das viel zu lange gewordenene AHK-Skript in logische Eizelteile aufzuteilen.

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