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

Revision 553, 106.7 KB (checked in by stmayer, 5 years ago)

ahk: Mod4-Ziffernblock mit ,.:;

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