From d5e0b153809160a43ecb858193a3491d12d1b260 Mon Sep 17 00:00:00 2001 From: mösi Date: Tue, 2 Dec 2008 15:37:22 +0000 Subject: Einen einfachen Taschenrechner über ♫cc hinzugefügt. ♫cc (mit Kleinbuchstaben) erlaubt die fehlerfreie Eingabe von zwei Zahlen (Ganzzahl oder Dezimal) mit einem Grundrechnungsoperator (+, -, * oder /) dazwischen, wobei die Berechnung mit einem nachfolgenden Space, Enter oder = erfolgt. Das Ergebnis wird dann als Tastendrücke an die aktive Applikation geschickt. Über ♫CC (Großbuchstaben) erfolgt zusätzlich ein Echo der eingegebenen Ziffern, und das Ergebnis wird immer mit einem = angehängt. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.neo-layout.org@1262 b9310e46-f624-0410-8ea1-cfbb3a30dc96 --- windows/neo-vars/src/source/tools.ahk | 145 ++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) diff --git a/windows/neo-vars/src/source/tools.ahk b/windows/neo-vars/src/source/tools.ahk index d00db25..a3c9861 100644 --- a/windows/neo-vars/src/source/tools.ahk +++ b/windows/neo-vars/src/source/tools.ahk @@ -286,3 +286,148 @@ SetFormat, Integer, hex StringUpper,result,result return result } + + +; Simple calculator + +CDSCompU0063U0063 := "PCal1" +CDSCompU0043U0043 := "PCal2" + +CharProcCal1() { + global + ; starte Calculator ohne Echo + PressHookProc := "Calc" + CalcEcho := 0 + CalcVar1 := "0" + CalcVar2 := "0" + CalcOp := "" + CalcPhase := 0 +} + +CharProcCal2() { + global + ; starte Calculator mit Echo + PressHookProc := "Calc" + CalcEcho := 1 + CalcVar1 := "0" + CalcVar2 := "0" + CalcOp := "" + CalcPhase := 0 +} + +PressHookCalc(PhysKey, ActKey, Char) { + global + if (SubStr(Char,1,1) == "P") + CharStarDown(PhysKey, ActKey, Char) + else if (CalcPhase == 0) { + if ((Char == "U0030") or (Char == "SN__0")) + CalcVar1 := CalcVar1 . "0" + else if ((Char == "U0031") or (Char == "SN__1")) + CalcVar1 := CalcVar1 . "1" + else if ((Char == "U0032") or (Char == "SN__2")) + CalcVar1 := CalcVar1 . "2" + else if ((Char == "U0033") or (Char == "SN__3")) + CalcVar1 := CalcVar1 . "3" + else if ((Char == "U0034") or (Char == "SN__4")) + CalcVar1 := CalcVar1 . "4" + else if ((Char == "U0035") or (Char == "SN__5")) + CalcVar1 := CalcVar1 . "5" + else if ((Char == "U0036") or (Char == "SN__6")) + CalcVar1 := CalcVar1 . "6" + else if ((Char == "U0037") or (Char == "SN__7")) + CalcVar1 := CalcVar1 . "7" + else if ((Char == "U0038") or (Char == "SN__8")) + CalcVar1 := CalcVar1 . "8" + else if ((Char == "U0039") or (Char == "SN__9")) + CalcVar1 := CalcVar1 . "9" + else if ((Char == "U002E") or (Char == "U002C") or (Char=="SNDot")) + CalcVar1 := CalcVar1 . "." + else if ((Char == "U002B") or (Char == "SNAdd")) { + CalcOp := "+" + CalcPhase := 1 + } else if ((Char == "U002D") or (Char == "SNSub")) { + CalcOp := "-" + CalcPhase := 1 + } else if ((Char == "U002A") or (Char == "SNMul")) { + CalcOp := "*" + CalcPhase := 1 + } else if ((Char == "U002F") or (Char == "SNDiv")) { + CalcOp := "/" + CalcPhase := 1 + } else + PressHookProc := "" + if (CalcEcho) { + PP%PhysKey% := Char + PR%PhysKey% := Char + CharOutDown(Char) + } + } else if (CalcPhase == 1) { + if ((Char == "U0030") or (Char == "SN__0")) + CalcVar2 := CalcVar2 . "0" + else if ((Char == "U0031") or (Char == "SN__1")) + CalcVar2 := CalcVar2 . "1" + else if ((Char == "U0032") or (Char == "SN__2")) + CalcVar2 := CalcVar2 . "2" + else if ((Char == "U0033") or (Char == "SN__3")) + CalcVar2 := CalcVar2 . "3" + else if ((Char == "U0034") or (Char == "SN__4")) + CalcVar2 := CalcVar2 . "4" + else if ((Char == "U0035") or (Char == "SN__5")) + CalcVar2 := CalcVar2 . "5" + else if ((Char == "U0036") or (Char == "SN__6")) + CalcVar2 := CalcVar2 . "6" + else if ((Char == "U0037") or (Char == "SN__7")) + CalcVar2 := CalcVar2 . "7" + else if ((Char == "U0038") or (Char == "SN__8")) + CalcVar2 := CalcVar2 . "8" + else if ((Char == "U0039") or (Char == "SN__9")) + CalcVar2 := CalcVar2 . "9" + else if ((Char == "U002E") or (Char == "U002C") or (Char=="SNDot")) + CalcVar2 := CalcVar2 . "." + else if ((Char == "U000D") or (Char == "SNEnt") or (Char=="U0020") or (Char=="U003D")) { + if (CalcOp == "+") + CalcResult := CalcVar1 + CalcVar2 + else if (CalcOp == "-") + CalcResult := CalcVar1 - CalcVar2 + else if (CalcOp == "*") + CalcResult := CalcVar1 * CalcVar2 + else if (CalcOp == "/") + CalcResult := CalcVar1 / CalcVar2 + else + CalcResult := "Invalid" + tosend := EncodeUni(CalcResult) + if (CalcEcho) { + Char := "U003D" + PP%PhysKey% := Char + PR%PhysKey% := Char + CharOutDown(Char) + } + loop { + if (SubStr(tosend,1,1)=="P") { + SubProc := SubStr(tosend,2,4) + CharProc%SubProc%() + } else { + CharOut(SubStr(tosend,1,5)) + } + tosend := SubStr(tosend,6) + if (tosend == "") + break ; erledigt + } + PressHookProc := "" + return ; vermeide, bei CharEcho das aktuelle Zeichen nach dem Ergebnis noch einmal auszugeben + } else + PressHookProc := "" + if (CalcEcho) { + PP%PhysKey% := Char + PR%PhysKey% := Char + CharOutDown(Char) + } + } else { + PressHookProc := "" + if (CalcEcho) { + PP%PhysKey% := Char + PR%PhysKey% := Char + CharOutDown(Char) + } + } +} -- cgit v1.2.3