summaryrefslogtreecommitdiff
path: root/noncore/tools/calc2/engine.cpp
Unidiff
Diffstat (limited to 'noncore/tools/calc2/engine.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/tools/calc2/engine.cpp133
1 files changed, 70 insertions, 63 deletions
diff --git a/noncore/tools/calc2/engine.cpp b/noncore/tools/calc2/engine.cpp
index e843e29..74cd701 100644
--- a/noncore/tools/calc2/engine.cpp
+++ b/noncore/tools/calc2/engine.cpp
@@ -21,6 +21,13 @@
21#include "engine.h" 21#include "engine.h"
22
23/* OPIE */
24#include <opie2/odebug.h>
25
26/* QT */
22#include <qstring.h> 27#include <qstring.h>
23#include <math.h>
24#include <qlcdnumber.h> 28#include <qlcdnumber.h>
25 29
30/* STD */
31#include <math.h>
32
26Data Engine::evalStack (Data num, bool inbrace = FALSE) 33Data Engine::evalStack (Data num, bool inbrace = FALSE)
@@ -36,4 +43,4 @@ Data Engine::evalStack (Data num, bool inbrace = FALSE)
36 if (!stack.isEmpty ()) 43 if (!stack.isEmpty ())
37 if (i->precedence <= stack.top()->precedence) 44 if (i->precedence <= stack.top()->precedence)
38 i->acc = evalStack (i->acc, inbrace); 45 i->acc = evalStack (i->acc, inbrace);
39 46
@@ -44,6 +51,6 @@ Data Engine::evalStack (Data num, bool inbrace = FALSE)
44 if (isnan (num.dbl) || isinf (num.dbl)) { 51 if (isnan (num.dbl) || isinf (num.dbl)) {
45 qDebug ("bad result from operation"); 52 odebug << "bad result from operation" << oendl;
46 state = sError; 53 state = sError;
47 clearData(&num); 54 clearData(&num);
48 return num; 55 return num;
49 } 56 }
@@ -91,18 +98,18 @@ void Engine::pushValue (char v)
91 switch (currentRep) { 98 switch (currentRep) {
92 case rDouble: 99 case rDouble:
93 displayString.append(v); 100 displayString.append(v);
94 num.dbl=displayString.toDouble(&ok); 101 num.dbl=displayString.toDouble(&ok);
95 break; 102 break;
96 case rFraction: 103 case rFraction:
97 break; 104 break;
98 default: 105 default:
99 displayString.append(v); 106 displayString.append(v);
100 num.i=displayString.toInt(&ok, calcBase()); 107 num.i=displayString.toInt(&ok, calcBase());
101 }; 108 };
102 if (!ok) { 109 if (!ok) {
103 state = sError; 110 state = sError;
104 odebug << "pushValue() - num->string conversion" << oendl; 111 odebug << "pushValue() - num->string conversion" << oendl;
105 } else { 112 } else {
106 const QString constString = displayString; 113 const QString constString = displayString;
107 emit(display(constString)); 114 emit(display(constString));
108 }; 115 };
@@ -115,3 +122,3 @@ void Engine::pushValue (char v)
115 } else if (state == sError) { 122 } else if (state == sError) {
116 qDebug ("in error state"); 123 odebug << "in error state" << oendl;
117 return; 124 return;
@@ -124,12 +131,12 @@ void Engine::del ()
124 switch (currentRep) { 131 switch (currentRep) {
125 case rDouble: 132 case rDouble:
126 displayString.truncate(displayString.length()); 133 displayString.truncate(displayString.length());
127 num.dbl=displayString.toDouble(&ok); 134 num.dbl=displayString.toDouble(&ok);
128 break; 135 break;
129 case rFraction: 136 case rFraction:
130 odebug << "not available" << oendl; 137 odebug << "not available" << oendl;
131 break; 138 break;
132 default: 139 default:
133 displayString.truncate(displayString.length()); 140 displayString.truncate(displayString.length());
134 num.i = displayString.toInt(&ok, calcBase()); 141 num.i = displayString.toInt(&ok, calcBase());
135 }; 142 };
@@ -137,7 +144,7 @@ void Engine::del ()
137 if (!ok) { 144 if (!ok) {
138 state = sError; 145 state = sError;
139 odebug << "del() - num->string conversion" << oendl; 146 odebug << "del() - num->string conversion" << oendl;
140 } else { 147 } else {
141 const QString constString = displayString; 148 const QString constString = displayString;
142 emit(display(constString)); 149 emit(display(constString));
143 }; 150 };
@@ -147,11 +154,11 @@ void Engine::displayData(Data d) {
147 switch (currentRep) { 154 switch (currentRep) {
148 case rDouble: 155 case rDouble:
149 displayString.setNum(d.dbl); 156 displayString.setNum(d.dbl);
150 break; 157 break;
151 case rFraction: 158 case rFraction:
152 odebug << "fractional display not yet impl" << oendl; 159 odebug << "fractional display not yet impl" << oendl;
153 break; 160 break;
154 default: 161 default:
155 displayString.setNum(d.i, calcBase()); 162 displayString.setNum(d.i, calcBase());
156 break; 163 break;
157 }; 164 };
@@ -164,14 +171,14 @@ int Engine::calcBase () {
164 switch (currentRep) { 171 switch (currentRep) {
165 case rBin: 172 case rBin:
166 return 2; 173 return 2;
167 case rOct: 174 case rOct:
168 return 8; 175 return 8;
169 case rDec: 176 case rDec:
170 return 10; 177 return 10;
171 case rHex: 178 case rHex:
172 return 16; 179 return 16;
173 default: 180 default:
174 state = sError; 181 state = sError;
175 odebug << "Error - attempt to calc base for non-integer" << oendl; 182 odebug << "Error - attempt to calc base for non-integer" << oendl;
176 return 10; 183 return 10;
177 }; 184 };
@@ -182,11 +189,11 @@ class iOpenBrace:public Instruction {
182 public: 189 public:
183 iOpenBrace (Engine *e):Instruction (100) {engine = e;}; 190 iOpenBrace (Engine *e):Instruction (100) {engine = e;};
184 ~iOpenBrace () {}; 191 ~iOpenBrace () {};
185 192
186 Data eval (Data num) { 193 Data eval (Data num) {
187 engine->decBraces(); 194 engine->decBraces();
188 return num; 195 return num;
189 }; 196 };
190 private: 197 private:
191 Engine *engine; 198 Engine *engine;
192}; 199};