root/windows/neo-vars/src/source/tools.ahk @ 2186

Revision 2186, 21.8 KB (checked in by mösi, 3 years ago)

Römische-Zahlen-Eingabe in Ordnung gebracht und mit direkten Unicode-Zeichen versehen.

Line 
1; -*- encoding: utf-8 -*-
2
3; Römische Zahlen
4CMS__Comp := 1
5CMS__CompU000072 := 1
6CMS__CompU000052 := 1
7CDS__CompU000072U00004F := "P__Rom1"
8;CDS__CompU000072U000031 := "P__Rom1"
9;CDS__CompU000052U000031 := "P__Rom1"
10CDS__CompU000052U00004F := "P__Rom2"
11;CDS__CompU000072U000032 := "P__Rom2"
12;CDS__CompU000052U000032 := "P__Rom2"
13CDS__CompU000072U00006F := "P__Rom3"
14;CDS__CompU000072U000033 := "P__Rom3"
15;CDS__CompU000052U000033 := "P__Rom3"
16CDS__CompU000052U00006F := "P__Rom4"
17;CDS__CompU000072U000034 := "P__Rom4"
18;CDS__CompU000052U000034 := "P__Rom4"
19
20GUISYM("P__Rom1","ⅶ")
21GUISYM("P__Rom2","Ⅶ")
22GUISYM("P__Rom3","vii")
23GUISYM("P__Rom4","VII")
24
25CharProc__Rom1() {
26  global
27  ; starte klein geschriebene römische Zahlen, verwende U2160++
28  PressHookProc := "Roman"
29  RomanMode := 1
30  RomanSum := 0
31}
32
33CharProc__Rom2() {
34  global
35  ; starte groß geschriebene römische Zahlen, verwende U2160++
36  PressHookProc := "Roman"
37  RomanMode := 2
38  RomanSum := 0
39}
40
41CharProc__Rom3() {
42  global
43  ; starte klein geschriebene römische Zahlen, verwende Buchstaben
44  PressHookProc := "Roman"
45  RomanMode := 3
46  RomanSum := 0
47}
48
49CharProc__Rom4() {
50  global
51  ; starte groß geschriebene römische Zahlen, verwende Buchstaben
52  PressHookProc := "Roman"
53  RomanMode := 4
54  RomanSum := 0
55}
56
57GenRomanDigit(Pos, DigitIs, DigitTest, str0, str1, str2, str3, str4, str5) {
58  res := ""
59  if (DigitIs == DigitTest)
60    res := EncodeUniComposeA(str%Pos%)
61  return res
62}
63
64PressHookRoman(PhysKey, ActKey, Char) {
65  global
66  if (SubStr(Char,1,1) == "P")
67    CharStarDown(PhysKey, ActKey, Char)
68  else if ((Char == "U000030") or (Char == "S__N__0"))
69    RomanSum := 10*RomanSum
70  else if ((Char == "U000031") or (Char == "S__N__1"))
71    RomanSum := 10*RomanSum + 1
72  else if ((Char == "U000032") or (Char == "S__N__2"))
73    RomanSum := 10*RomanSum + 2
74  else if ((Char == "U000033") or (Char == "S__N__3"))
75    RomanSum := 10*RomanSum + 3
76  else if ((Char == "U000034") or (Char == "S__N__4"))
77    RomanSum := 10*RomanSum + 4
78  else if ((Char == "U000035") or (Char == "S__N__5"))
79    RomanSum := 10*RomanSum + 5
80  else if ((Char == "U000036") or (Char == "S__N__6"))
81    RomanSum := 10*RomanSum + 6
82  else if ((Char == "U000037") or (Char == "S__N__7"))
83    RomanSum := 10*RomanSum + 7
84  else if ((Char == "U000038") or (Char == "S__N__8"))
85    RomanSum := 10*RomanSum + 8
86  else if ((Char == "U000039") or (Char == "S__N__9"))
87    RomanSum := 10*RomanSum + 9
88  else if ((Char == "U00000D") or (Char == "U000020")) {
89    RomanSum := mod(RomanSum,400000)
90    RomanStr := ""
91    RomanPos := 0
92    if (RomanMode == 1)
93      loop {
94        RomanDigit := mod(RomanSum,10)
95        RomanSum := RomanSum//10
96        RomanStr := GenRomanDigit(RomanPos,RomanDigit,1,"ⅰ","ⅹ","ⅽ","ⅿ","ↂ","ↈ") . RomanStr
97        RomanStr := GenRomanDigit(RomanPos,RomanDigit,2,"ⅰⅰ","ⅹⅹ","ⅽⅽ","ⅿⅿ","ↂↂ","ↈↈ") . RomanStr
98        RomanStr := GenRomanDigit(RomanPos,RomanDigit,3,"ⅰⅰⅰ","ⅹⅹⅹ","ⅽⅽⅽ","ⅿⅿⅿ","ↂↂↂ","ↈↈↈ") . RomanStr
99        RomanStr := GenRomanDigit(RomanPos,RomanDigit,4,"ⅰⅴ","ⅹⅼ","ⅽⅾ","ↀↁ","ↂↇ","") . RomanStr
100        RomanStr := GenRomanDigit(RomanPos,RomanDigit,5,"ⅴ","ⅼ","ⅾ","ↁ","ↇ","") . RomanStr
101        RomanStr := GenRomanDigit(RomanPos,RomanDigit,6,"ⅴⅰ","ⅼⅹ","ⅾⅽ","ↁↀ","ↇↂ","") . RomanStr
102        RomanStr := GenRomanDigit(RomanPos,RomanDigit,7,"ⅴⅰⅰ","ⅼⅹⅹ","ⅾⅽⅽ","ↁↀↀ","ↇↂↂ","") . RomanStr
103        RomanStr := GenRomanDigit(RomanPos,RomanDigit,8,"ⅴⅰⅰⅰ","ⅼⅹⅹⅹ","ⅾⅽⅽⅽ","ↁↀↀↀ","ↇↂↂↂ","") . RomanStr
104        RomanStr := GenRomanDigit(RomanPos,RomanDigit,9,"ⅰⅹ","ⅹⅽ","ⅽⅿ","ↀↂ","ↂↈ","") . RomanStr
105        if (RomanSum == 0)
106          break
107        RomanPos := RomanPos + 1
108      }
109    else if (RomanMode == 2)
110      loop {
111        RomanDigit := mod(RomanSum,10)
112        RomanSum := RomanSum//10
113        RomanStr := GenRomanDigit(RomanPos,RomanDigit,1,"Ⅰ","Ⅹ","Ⅽ","Ⅿ","ↂ","ↈ") . RomanStr
114        RomanStr := GenRomanDigit(RomanPos,RomanDigit,2,"ⅠⅠ","ⅩⅩ","ⅭⅭ","ⅯⅯ","ↂↂ","ↈↈ") . RomanStr
115        RomanStr := GenRomanDigit(RomanPos,RomanDigit,3,"ⅠⅠⅠ","ⅩⅩⅩ","ⅭⅭⅭ","ⅯⅯⅯ","ↂↂↂ","ↈↈↈ") . RomanStr
116        RomanStr := GenRomanDigit(RomanPos,RomanDigit,4,"ⅠⅤ","ⅩⅬ","ⅭⅮ","Ⅿↁ","ↂↇU002182U002187","") . RomanStr
117        RomanStr := GenRomanDigit(RomanPos,RomanDigit,5,"Ⅴ","Ⅼ","Ⅾ","ↁ","ↇ","") . RomanStr
118        RomanStr := GenRomanDigit(RomanPos,RomanDigit,6,"ⅤⅠ","ⅬⅩ","ⅮⅭ","ↁⅯ","ↇↂ","") . RomanStr
119        RomanStr := GenRomanDigit(RomanPos,RomanDigit,7,"ⅤⅠⅠ","ⅬⅩⅩ","ⅮⅭⅭ","ↁⅯⅯ","ↇↂↂ","") . RomanStr
120        RomanStr := GenRomanDigit(RomanPos,RomanDigit,8,"ⅤⅠⅠⅠ","ⅬⅩⅩⅩ","ⅮⅭⅭⅭ","ↁⅯⅯⅯ","ↇↂↂↂ","") . RomanStr
121        RomanStr := GenRomanDigit(RomanPos,RomanDigit,9,"ⅠⅩ","ⅩⅭ","ⅭⅯ","Ⅿↂ","ↂↈ","") . RomanStr
122        if (RomanSum == 0)
123          break
124        RomanPos := RomanPos + 1
125      }
126    else if (RomanMode == 3)
127      loop {
128        RomanDigit := mod(RomanSum,10)
129        RomanSum := RomanSum//10
130        RomanStr := GenRomanDigit(RomanPos,RomanDigit,1,"i"   ,"x"   ,"c"   ,"m"  ,"","") . RomanStr
131        RomanStr := GenRomanDigit(RomanPos,RomanDigit,2,"ii"  ,"xx"  ,"cc"  ,"mm" ,"","") . RomanStr
132        RomanStr := GenRomanDigit(RomanPos,RomanDigit,3,"iii" ,"xxx" ,"ccc" ,"mmm","","") . RomanStr
133        RomanStr := GenRomanDigit(RomanPos,RomanDigit,4,"iv"  ,"xl"  ,"cd"  ,""   ,"","") . RomanStr
134        RomanStr := GenRomanDigit(RomanPos,RomanDigit,5,"v"   ,"l"   ,"d"   ,""   ,"","") . RomanStr
135        RomanStr := GenRomanDigit(RomanPos,RomanDigit,6,"vi"  ,"lx"  ,"dc"  ,""   ,"","") . RomanStr
136        RomanStr := GenRomanDigit(RomanPos,RomanDigit,7,"vii" ,"lxx" ,"dcc" ,""   ,"","") . RomanStr
137        RomanStr := GenRomanDigit(RomanPos,RomanDigit,8,"viii","lxxx","dccc",""   ,"","") . RomanStr
138        RomanStr := GenRomanDigit(RomanPos,RomanDigit,9,"ix"  ,"xc"  ,"cm"  ,""   ,"","") . RomanStr
139        if (RomanSum == 0)
140          break
141        RomanPos := RomanPos + 1
142      }
143    else if (RomanMode == 4)
144      loop {
145        RomanDigit := mod(RomanSum,10)
146        RomanSum := RomanSum//10
147        RomanStr := GenRomanDigit(RomanPos,RomanDigit,1,"I"   ,"X"   ,"C"   ,"M"  ,"","") . RomanStr
148        RomanStr := GenRomanDigit(RomanPos,RomanDigit,2,"II"  ,"XX"  ,"CC"  ,"MM" ,"","") . RomanStr
149        RomanStr := GenRomanDigit(RomanPos,RomanDigit,3,"III" ,"XXX" ,"CCC" ,"MMM","","") . RomanStr
150        RomanStr := GenRomanDigit(RomanPos,RomanDigit,4,"IV"  ,"XL"  ,"CD"  ,""   ,"","") . RomanStr
151        RomanStr := GenRomanDigit(RomanPos,RomanDigit,5,"V"   ,"L"   ,"D"   ,""   ,"","") . RomanStr
152        RomanStr := GenRomanDigit(RomanPos,RomanDigit,6,"VI"  ,"LX"  ,"DC"  ,""   ,"","") . RomanStr
153        RomanStr := GenRomanDigit(RomanPos,RomanDigit,7,"VII" ,"LXX" ,"DCC" ,""   ,"","") . RomanStr
154        RomanStr := GenRomanDigit(RomanPos,RomanDigit,8,"VIII","LXXX","DCCC",""   ,"","") . RomanStr
155        RomanStr := GenRomanDigit(RomanPos,RomanDigit,9,"IX"  ,"XC"  ,"CM"  ,""   ,"","") . RomanStr
156        if (RomanSum == 0)
157          break
158        RomanPos := RomanPos + 1
159      }
160    loop {
161      if (RomanStr == "")
162        break ; erledigt
163      CharOut(SubStr(RomanStr,1,7))
164      RomanStr := SubStr(RomanStr,8)
165    }
166    PressHookProc := ""
167  } else
168    PressHookProc := ""
169}
170
171CMS__CompU000075 := 1
172CMS__CompU000055 := 1
173CDS__CompU000075U000075 := "P___Uni"
174CDS__CompU000075U000055 := "P___Uni"
175CDS__CompU000055U000075 := "P___Uni"
176CDS__CompU000055U000055 := "P___Uni"
177CMS__CompU000064 := 1
178CMS__CompU000044 := 1
179CDS__CompU000064U000064 := "P__DUni"
180CDS__CompU000064U000044 := "P__DUni"
181CDS__CompU000044U000064 := "P__DUni"
182CDS__CompU000044U000044 := "P__DUni"
183
184CP5VK41SC01E := "P___Uni"
185GUISYM("P___Uni","UU")
186
187CharProc___Uni() {
188  global
189  ; starte Unicode-Hex-in-Zeichen-Umwandlung
190  PressHookProc := "Uni"
191  UniSum := ""
192}
193
194CharProc__DUni() {
195  global
196  ; starte Unicode-Zeichen-in-Hex-Umwandlung
197  CharOutFilterProc := "DUni"
198}
199
200PressHookUni(PhysKey, ActKey, Char) {
201  global
202  if (SubStr(Char,1,1) == "P")
203    CharStarDown(PhysKey, ActKey, Char)
204  else if ((Char == "U000030") or (Char == "S__N__0"))
205    UniSum := UniSum . "0"
206  else if ((Char == "U000031") or (Char == "S__N__1"))
207    UniSum := UniSum . "1"
208  else if ((Char == "U000032") or (Char == "S__N__2"))
209    UniSum := UniSum . "2"
210  else if ((Char == "U000033") or (Char == "S__N__3"))
211    UniSum := UniSum . "3"
212  else if ((Char == "U000034") or (Char == "S__N__4"))
213    UniSum := UniSum . "4"
214  else if ((Char == "U000035") or (Char == "S__N__5"))
215    UniSum := UniSum . "5"
216  else if ((Char == "U000036") or (Char == "S__N__6"))
217    UniSum := UniSum . "6"
218  else if ((Char == "U000037") or (Char == "S__N__7"))
219    UniSum := UniSum . "7"
220  else if ((Char == "U000038") or (Char == "S__N__8"))
221    UniSum := UniSum . "8"
222  else if ((Char == "U000039") or (Char == "S__N__9"))
223    UniSum := UniSum . "9"
224  else if ((Char == "U000041") or (Char == "U000061"))
225    UniSum := UniSum . "A"
226  else if ((Char == "U000042") or (Char == "U000062"))
227    UniSum := UniSum . "B"
228  else if ((Char == "U000043") or (Char == "U000063"))
229    UniSum := UniSum . "C"
230  else if ((Char == "U000044") or (Char == "U000064"))
231    UniSum := UniSum . "D"
232  else if ((Char == "U000045") or (Char == "U000065"))
233    UniSum := UniSum . "E"
234  else if ((Char == "U000046") or (Char == "U000066"))
235    UniSum := UniSum . "F"
236  else if ((Char == "U00000D") or (Char == "U000020")) {
237    UniSum := "U" . SubStr("000000" . UniSum, -7)
238    PP%PhysKey% := UniSum
239    PR%PhysKey% := UniSum
240    CharOutDown(UniSum)
241    PressHookProc := ""
242  } else
243    PressHookProc := ""
244}
245
246CharOutFilterDUni(char,down,up) {
247  global
248  if (!down or char == "S__L_M2" or char == "S__R_M2")
249    return char
250  CharOutFilterProc := ""
251  dchar := char
252  if (substr(dchar,1,3) == "U00")
253    dchar := "U" . substr(dchar,4)
254  TrayTip,Unicode-Zeichen,%dchar%,10,1
255  return char
256}
257
258EncodeUni(str) {
259SetFormat, Integer, hex
260;  MsgBox % Asc(SubStr(str,1,1)) . Asc(SubStr(str,2,1))
261  result := ""
262  loop {
263    char := asc(SubStr(str,1,1))
264    str  := SubStr(str,2)
265    if (char < 0x80)
266      result .= "U" . SubStr("000000" . SubStr(char,3),-5)
267    else if (char < 0xC0) {
268      ; error
269    } else if (char < 0xE0) {
270       char2 := asc(Substr(str,1,1))
271       str   := SubStr(str,2)
272       if ((char2 < 0x80) or (char2 > 0xBF)) {
273         ; error
274       } else {
275         result .= "U" . SubStr("000000" . SubStr((((char & 0x1F) << 6) + (char2 & 0x3F)),3),-5)
276       }
277    } else if (char < 0xF8) {
278       char2 := asc(SubStr(str,1,1))
279       char3 := asc(SubStr(str,2,1))
280       str   := SubStr(str,3)
281       if ((char2 < 0x80) or (char2 > 0xBF)
282           or (char3 < 0x80) or (char3 > 0xBF)) {
283         ; error
284       } else {
285         result .= "U" . SubStr("000000" . SubStr((((char & 0x0F) << 12) + ((char2 & 0x3F) << 6) + (char3 & 0x3F)),3),-5)
286       }
287    } else if (char < 0xFC) {
288       char2 := asc(SubStr(str,1,1))
289       char3 := asc(SubStr(str,2,1))
290       char3 := asc(SubStr(str,3,1))
291       str   := SubStr(str,4)
292       if (   (char2 < 0x80) or (char2 > 0xBF)
293           or (char3 < 0x80) or (char3 > 0xBF)
294           or (char4 < 0x80) or (char4 > 0xBF)) {
295         ; error
296       } else {
297         result .= "U" . SubStr("000000" . SubStr((((char & 0x07) << 18) + ((char2 & 0x3F) << 12) + ((char3 & 0x3F) << 6) + (char4 & 0x3F)),3),-5)
298       }
299    }
300    if (str == "")
301      break
302  }
303  SetFormat, Integer, d
304  StringUpper,result,result
305  return result
306}
307
308
309; Simple calculator
310
311CDS__CompU000075U000063 := "P__Cal1"
312CDS__CompU000055U000043 := "P__Cal2"
313
314CharProc__Cal1() {
315  global
316  ; starte Calculator ohne Echo
317  PressHookProc := "Calc"
318  CalcEcho := 0
319  CalcVar1 := ""
320  CalcVar2 := ""
321  CalcOp := ""
322  CalcPhase := 0
323  CalcHexOut := 0
324}
325
326CharProc__Cal2() {
327  global
328  ; starte Calculator mit Echo
329  PressHookProc := "Calc"
330  CalcEcho := 1
331  CalcVar1 := ""
332  CalcVar2 := ""
333  CalcOp := ""
334  CalcPhase := 0
335  CalcHexOut := 0
336}
337
338PressHookCalc(PhysKey, ActKey, Char) {
339  global
340  if (SubStr(Char,1,1) == "P")
341    CharStarDown(PhysKey, ActKey, Char)
342  else if (CalcPhase == 0) {
343    if      ((Char == "U000030") or (Char == "S__N__0"))
344      CalcVar1 := CalcVar1 . "0"
345    else if ((Char == "U000031") or (Char == "S__N__1"))
346      CalcVar1 := CalcVar1 . "1"
347    else if ((Char == "U000032") or (Char == "S__N__2"))
348      CalcVar1 := CalcVar1 . "2"
349    else if ((Char == "U000033") or (Char == "S__N__3"))
350      CalcVar1 := CalcVar1 . "3"
351    else if ((Char == "U000034") or (Char == "S__N__4"))
352      CalcVar1 := CalcVar1 . "4"
353    else if ((Char == "U000035") or (Char == "S__N__5"))
354      CalcVar1 := CalcVar1 . "5"
355    else if ((Char == "U000036") or (Char == "S__N__6"))
356      CalcVar1 := CalcVar1 . "6"
357    else if ((Char == "U000037") or (Char == "S__N__7"))
358      CalcVar1 := CalcVar1 . "7"
359    else if ((Char == "U000038") or (Char == "S__N__8"))
360      CalcVar1 := CalcVar1 . "8"
361    else if ((Char == "U000039") or (Char == "S__N__9"))
362      CalcVar1 := CalcVar1 . "9"
363    else if ((Char == "U000039") or (Char == "S__N__9"))
364      CalcVar1 := CalcVar1 . "9"
365    else if ((Char == "U000041") or (Char == "U000061"))
366      CalcVar1 := CalcVar1 . "A"
367    else if ((Char == "U000042") or (Char == "U000062"))
368      CalcVar1 := CalcVar1 . "B"
369    else if ((Char == "U000043") or (Char == "U000063"))
370      CalcVar1 := CalcVar1 . "C"
371    else if ((Char == "U000044") or (Char == "U000064"))
372      CalcVar1 := CalcVar1 . "D"
373    else if ((Char == "U000045") or (Char == "U000065"))
374      CalcVar1 := CalcVar1 . "E"
375    else if ((Char == "U000046") or (Char == "U000066"))
376      CalcVar1 := CalcVar1 . "F"
377    else if ((Char == "U00002E") or (Char == "U00002C") or (Char=="S__NDot"))
378      CalcVar1 := CalcVar1 . "."
379    else if ((Char == "U000078") or (Char == "U000058")) {
380      CalcVar1 := CalcVar1 . "x"
381      CalcHexOut := 1
382    } else if ((Char == "U00002B") or (Char == "S__NAdd")) {
383      CalcOp := "+"
384      CalcPhase := 1
385    } else if ((Char == "U00002D") or (Char == "S__NSub")) {
386      CalcOp := "-"
387      CalcPhase := 1
388    } else if ((Char == "U00002A") or (Char == "S__NMul")) {
389      CalcOp := "*"
390      CalcPhase := 1
391    } else if ((Char == "U00002F") or (Char == "S__NDiv")) {
392      CalcOp := "/"
393      CalcPhase := 1
394    } else if (Char == "U000026") {
395      CalcOp := "&"
396      CalcPhase := 1
397    } else if (Char == "U00007C") {
398      CalcOp := "|"
399      CalcPhase := 1
400    } else
401      PressHookProc := ""
402    if (CalcEcho) {
403      PP%PhysKey% := Char
404      PR%PhysKey% := Char
405      CharOutDown(Char)
406    }
407  } else if (CalcPhase == 1) {
408    if      ((Char == "U000030") or (Char == "S__N__0"))
409      CalcVar2 := CalcVar2 . "0"
410    else if ((Char == "U000031") or (Char == "S__N__1"))
411      CalcVar2 := CalcVar2 . "1"
412    else if ((Char == "U000032") or (Char == "S__N__2"))
413      CalcVar2 := CalcVar2 . "2"
414    else if ((Char == "U000033") or (Char == "S__N__3"))
415      CalcVar2 := CalcVar2 . "3"
416    else if ((Char == "U000034") or (Char == "S__N__4"))
417      CalcVar2 := CalcVar2 . "4"
418    else if ((Char == "U000035") or (Char == "S__N__5"))
419      CalcVar2 := CalcVar2 . "5"
420    else if ((Char == "U000036") or (Char == "S__N__6"))
421      CalcVar2 := CalcVar2 . "6"
422    else if ((Char == "U000037") or (Char == "S__N__7"))
423      CalcVar2 := CalcVar2 . "7"
424    else if ((Char == "U000038") or (Char == "S__N__8"))
425      CalcVar2 := CalcVar2 . "8"
426    else if ((Char == "U000039") or (Char == "S__N__9"))
427      CalcVar2 := CalcVar2 . "9"
428    else if ((Char == "U000041") or (Char == "U000061"))
429      CalcVar2 := CalcVar2 . "A"
430    else if ((Char == "U000042") or (Char == "U000062"))
431      CalcVar2 := CalcVar2 . "B"
432    else if ((Char == "U000043") or (Char == "U000063"))
433      CalcVar2 := CalcVar2 . "C"
434    else if ((Char == "U000044") or (Char == "U000064"))
435      CalcVar2 := CalcVar2 . "D"
436    else if ((Char == "U000045") or (Char == "U000065"))
437      CalcVar2 := CalcVar2 . "E"
438    else if ((Char == "U000046") or (Char == "U000066"))
439      CalcVar2 := CalcVar2 . "F"
440    else if ((Char == "U00002E") or (Char == "U00002C") or (Char=="S__NDot"))
441      CalcVar2 := CalcVar2 . "."
442    else if ((Char == "U000078") or (Char == "U000058")) {
443      CalcVar2 := CalcVar2 . "x"
444      CalcHexOut := 1
445    } else if ((Char == "U00000D") or (Char == "S__NEnt") or (Char=="U000020") or (Char=="U00003D")) {
446      if      (CalcOp == "+")
447        CalcResult := CalcVar1 + CalcVar2
448      else if (CalcOp == "-")
449        CalcResult := CalcVar1 - CalcVar2
450      else if (CalcOp == "*")
451        CalcResult := CalcVar1 * CalcVar2
452      else if (CalcOp == "/")
453        CalcResult := CalcVar1 / CalcVar2
454      else if (CalcOp == "&")
455        CalcResult := CalcVar1 & CalcVar2
456      else if (CalcOp == "|")
457        CalcResult := CalcVar1 | CalcVar2
458      else
459        CalcResult := "Invalid"
460      if (CalcHexOut and (CalcResult != "")) {
461        SetFormat,Integer,h
462        CalcResult := CalcResult + 0
463        SetFormat,Integer,d
464      }
465      tosend := EncodeUni(CalcResult)
466      if (CalcEcho) {
467        Char := "U00003D"
468        PP%PhysKey% := Char
469        PR%PhysKey% := Char
470        CharOutDown(Char)
471      }
472      loop {
473        if (SubStr(tosend,1,1)=="P") {
474          SubProc := SubStr(tosend,2,6)
475          CharProc%SubProc%()
476        } else {
477          CharOut(SubStr(tosend,1,7))
478        }
479        tosend := SubStr(tosend,8)
480        if (tosend == "")
481          break                ; erledigt
482      }
483      PressHookProc := ""
484      return ; vermeide, bei CharEcho das aktuelle Zeichen nach dem Ergebnis noch einmal auszugeben
485    } else
486      PressHookProc := ""
487    if (CalcEcho) {
488      PP%PhysKey% := Char
489      PR%PhysKey% := Char
490      CharOutDown(Char)
491    }
492  } else {
493    PressHookProc := ""
494    if (CalcEcho) {
495      PP%PhysKey% := Char
496      PR%PhysKey% := Char
497      CharOutDown(Char)
498    }
499  }
500}
501
502CDS__CompU000055U000057 := "P___WMN"
503CDS__CompU000075U000077 := "P___WMN"
504
505CharProc___WMN() {
506  global
507  ok := DllCall("OpenClipboard")
508  if (!ok) {
509    TrayTip,Wie mit NEO,Fehler in OpenClipboard,10,1
510    return
511  }
512  uclph:=DllCall("GetClipboardData","uint",CF_UNICODETEXT:=13)
513  if (uclph == 0) {
514    DllCall("CloseClipboard")
515    TrayTip,Wie mit NEO,Fehler in GetClipboardData,10,1
516    return
517  }
518  uclp := DllCall("GlobalLock","uint",uclph)
519  if (uclp == 0) {
520    DllCall("CloseClipboard")
521    TrayTip,Wie mit NEO,Fehler in GlobalLock,10,1
522    return
523  }
524  a := *(uclp+0)
525  b := *(uclp+1)
526
527  a += 256*b
528
529  if ((a >= 0xD800) and (a <= 0xDBFF)) {
530    c := *(uclp+2)
531    d := *(uclp+3)
532
533    c += 256*d
534    if ((c >= 0xDC00) and (c <= 0xDFFF)) {
535      a := (a & 0x3FF) * 1024 + (c & 0x3FF) + 65536
536    }
537  }
538
539  DllCall("GlobalUnlock","uint",uclph)
540  DllCall("CloseClipboard")
541
542SetFormat,Integer,h
543  a += 0
544SetFormat,Integer,d
545  if (a < 0x10000) {
546    ap := "U" . substr("000000" . substr(a,3),-3)
547    a  := "U" . substr("000000" . substr(a,3),-5)
548  } else {
549    ap := "U" . substr("000000" . substr(a,3),-5)
550    a  := ap
551  }
552
553  Gui,2:Destroy
554  Gui,2:Font,,DejaVu Sans
555  Gui,2:Margin,10,0
556  Gui,2:Add,Text,,% "`r`nDas Zeichen " . ap . " kann wie folgt eingegeben werden:"
557  loop,parse,CRC%a%,%A_Space%
558  {
559    this_wmn := ""
560    this_wmnk := ""
561    nthis := 0
562    this_wtt := A_LoopField
563    if (this_wtt == "")
564      continue ; probably at first or last entry
565    loop {
566      if (this_wtt == "")
567        break
568      this_char7 := substr(this_wtt,1,7)
569      this_char  := this_char7
570      this_wtt := substr(this_wtt,8)
571      if (CB%this_char% != "")
572        this_char := CB%this_char%
573      else if (CS%this_char% != "")
574        this_char := CS%this_char%
575      ; this_char will contain Uxxxx if no shortcut is present. Fix this here.
576      this_wmn .= " <" . this_char . ">"
577      if (CRK%this_char7% == "") {
578        nthis := 1
579        this_wmnk .= " <" . this_char7 . ">"
580      } else
581        this_wmnk .= " " . KeyLong(CRK%this_char7%)
582    }
583    if (this_wmn != "")
584      this_wmn := SubStr(this_wmn,2)
585    if (this_wmnk != "")
586      this_wmnk := SubStr(this_wmnk,2)
587    Gui,2:Font,,Dejavu Sans Bold
588    if (nthis == 1)
589      Gui,2:Add,Text,,% "Wegen fehlender Tastenbelegung nicht als Compose:"
590    else
591      Gui,2:Add,Text,,% "Als Compose:"
592    Gui,2:Font,,Dejavu Sans
593    Gui,2:Add,Text,,% this_wmn . "`r`noder`r`n" . this_wmnk
594  }
595
596  wmnk := KeyLong(CRK%a%)
597  Gui,2:Font,,Dejavu Sans Bold
598  if (wmnk != "") {
599    Gui,2:Add,Text,,% "Als Tastendruck:"
600    Gui,2:Font,,Dejavu Sans
601    Gui,2:Add,Text,,% wmnk
602  } else
603    Gui,2:Add,Text,,% "Als Tastendruck nicht verfuegbar"
604
605  Gui,2:Add, Button, Default xp+100 yp+40, OK
606  Gui,2:Show
607  return
608
609  2ButtonOK:
610  2GuiEscape:
611    Gui,2:Destroy
612    return
613}
614
615KeyLong(key) {
616  global
617  num := 0
618  twmnk := ""
619  loop,parse,key,%A_Space%
620  {
621    tis_wmn := ""
622    tis_wtt := A_LoopField
623    if (tis_wtt == "")
624      continue ; probably at first or last entry
625    tis_layer := substr(tis_wtt,3,1)
626    base_key_pos := "CP1" . substr(tis_wtt,4)
627
628    base_key := %base_key_pos%
629    if (CB%base_key_pos% != "")
630      base_key := CB%base_key_pos%
631    else if (CB%base_key% != "")
632      base_key := CB%base_key%
633    else if (CS%base_key% != "")
634      base_key := CS%base_key%
635
636    twmnk .= "/<" . CBS____M%tis_layer% . base_key . ">"
637    num := num + 1
638  }
639  if (num == 0)
640    return ""
641  else if (num == 1)
642    return SubStr(twmnk,2)
643  else
644    return "(" . SubStr(twmnk,2) . ")"
645}
Note: See TracBrowser for help on using the browser.