/[projects]/dao/DelphiScanner/Components/tpsystools_4.04/examples/CBuilder/BcdCalU.cpp
ViewVC logotype

Contents of /dao/DelphiScanner/Components/tpsystools_4.04/examples/CBuilder/BcdCalU.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2671 - (show annotations) (download)
Tue Aug 25 18:15:15 2015 UTC (8 years, 8 months ago) by torben
File size: 12388 byte(s)
Added tpsystools component
1 // ***** BEGIN LICENSE BLOCK *****
2 // * Version: MPL 1.1
3 // *
4 // * The contents of this file are subject to the Mozilla Public License Version
5 // * 1.1 (the "License"); you may not use this file except in compliance with
6 // * the License. You may obtain a copy of the License at
7 // * http://www.mozilla.org/MPL/
8 // *
9 // * Software distributed under the License is distributed on an "AS IS" basis,
10 // * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 // * for the specific language governing rights and limitations under the
12 // * License.
13 // *
14 // * The Original Code is TurboPower SysTools
15 // *
16 // * The Initial Developer of the Original Code is
17 // * TurboPower Software
18 // *
19 // * Portions created by the Initial Developer are Copyright (C) 1996-2002
20 // * the Initial Developer. All Rights Reserved.
21 // *
22 // * Contributor(s):
23 // *
24 // * ***** END LICENSE BLOCK *****
25 //---------------------------------------------------------------------------
26 #include <vcl\vcl.h>
27 #pragma hdrstop
28
29 #include "BcdCalU.h"
30 //---------------------------------------------------------------------------
31 #pragma package(smart_init)
32 #pragma link "StBcd"
33 #pragma link "StStrL"
34
35 #pragma resource "*.dfm"
36 TBCDCalcDlg *BCDCalcDlg;
37 //---------------------------------------------------------------------------
38 __fastcall TBCDCalcDlg::TBCDCalcDlg(TComponent* Owner)
39 : TForm(Owner)
40 {
41 }
42 //---------------------------------------------------------------------------
43 void __fastcall TBCDCalcDlg::FormCreate(TObject *Sender)
44 {
45 Memo1->Lines->Strings[0] = "";
46 PendOp = 0;
47 DFHold = 0;
48 XBuffer = "0";
49 ClearOnNext = false;
50 }
51 //---------------------------------------------------------------------------
52 extern System::AnsiString __fastcall BytesToString(char * Value, Cardinal Size)
53 {
54 Cardinal Index;
55 String S, Res;
56
57 Res.SetLength(2*Size);
58
59 for (Cardinal I = 1; I <= Size; I++) {
60 Index = I*2;
61 S = HexBL(Value[I-1]);
62
63 Res[(Index)-1] = S[1];
64 Res[Index] = S[2];
65 };
66
67 return Res;
68 }
69 //---------------------------------------------------------------------------
70 void __fastcall TBCDCalcDlg::FormKeyPress(TObject *Sender, char &Key)
71 {
72 char HldOp;
73 int L;
74 TBcd BCD1;
75 String S;
76
77 if (Key == 13) {
78 if (XBuffer == "0") {
79 XBuffer = Memo1->Lines->Strings[0];
80 }
81 else {
82 EqualBtnClick(Sender);
83 XBuffer = "0";
84 };
85 Key = 0;
86 ClearOnNext = true;
87 };
88
89 if (BCDChar.Contains(Key)) {
90 if (Key == 'p') {
91 S = Memo1->Lines->Strings[0];
92 if (S[1] != '-') {
93 S.Insert('-', 1);
94 }
95 else {
96 S.Delete(1, 1);
97 }
98 Memo1->Lines->Strings[0] = S;
99 ValBcd_C(S, BCD1);
100 BCDString->Text = BytesToString((char *)BCD1, sizeof(BCD1));
101 Key = 0;
102 }
103 else {
104 if (ClearOnNext) {
105 Memo1->Lines->Strings[0] = "";
106 ClearOnNext = false;
107 };
108 };
109 };
110
111 if (BCDOper.Contains(Key)) {
112 if ((Key != 's') && (Key != 'e') && (Key != 'l')) {
113 if (Memo1->Lines->Strings[0] == "") {
114 Memo1->Lines->Strings[0] = "0";
115 };
116 if (XBuffer != "0") {
117 EqualBtnClick(Sender);
118 }
119 XBuffer = Memo1->Lines->Strings[0];
120 ValBcd_C(XBuffer, BCD1);
121 BCDString->Text = BytesToString((char *)BCD1, sizeof(BCD1));
122 PendOp = Key;
123 Key = 0;
124 ClearOnNext = true;
125 }
126 else {
127 HldOp = PendOp;
128 PendOp = Key;
129 EqualBtnClick(Sender);
130 PendOp = HldOp;
131 Key = 0;
132 };
133 };
134
135 if (BCDChar.Contains(Key)) {
136 S = Memo1->Lines->Strings[0];
137 L = S.Length();
138 if (L < Memo1->MaxLength) {
139 Memo1->Lines->Strings[0] = S + Key;
140 };
141 Key = 0;
142 };
143 Memo1->SetFocus();
144 Memo1->SelStart = Memo1->Text.Length();
145 Memo1->SelLength = 0;
146 }
147 //---------------------------------------------------------------------------
148 void __fastcall TBCDCalcDlg::ClearBtnClick(TObject *Sender)
149 {
150 XBuffer = "0";
151 Memo1->Lines->Strings[0] = "0";
152 BCDString->Text = "";
153 PendOp = 0;
154 ClearOnNext = true;
155 }
156 //---------------------------------------------------------------------------
157 void __fastcall TBCDCalcDlg::ClearEntryBtnClick(TObject *Sender)
158 {
159 Memo1->Lines->Strings[0] = '0';
160 ClearOnNext = true;
161 }
162 //---------------------------------------------------------------------------
163 void __fastcall TBCDCalcDlg::SevenKeyClick(TObject *Sender)
164 {
165 char c = '7';
166 FormKeyPress(Sender, c);
167 }
168 //---------------------------------------------------------------------------
169 void __fastcall TBCDCalcDlg::EightKeyClick(TObject *Sender)
170 {
171 char c = '8';
172 FormKeyPress(Sender, c);
173 }
174 //---------------------------------------------------------------------------
175 void __fastcall TBCDCalcDlg::NineKeyClick(TObject *Sender)
176 {
177 char c = '9';
178 FormKeyPress(Sender, c);
179 }
180 //---------------------------------------------------------------------------
181 void __fastcall TBCDCalcDlg::FourKeyClick(TObject *Sender)
182 {
183 char c = '4';
184 FormKeyPress(Sender, c);
185 }
186 //---------------------------------------------------------------------------
187 void __fastcall TBCDCalcDlg::FiveKeyClick(TObject *Sender)
188 {
189 char c = '5';
190 FormKeyPress(Sender, c);
191 }
192 //---------------------------------------------------------------------------
193 void __fastcall TBCDCalcDlg::SixKeyClick(TObject *Sender)
194 {
195 char c = '6';
196 FormKeyPress(Sender, c);
197 }
198 //---------------------------------------------------------------------------
199 void __fastcall TBCDCalcDlg::OneKeyClick(TObject *Sender)
200 {
201 char c = '1';
202 FormKeyPress(Sender, c);
203 }
204 //---------------------------------------------------------------------------
205 void __fastcall TBCDCalcDlg::TwoKeyClick(TObject *Sender)
206 {
207 char c = '2';
208 FormKeyPress(Sender, c);
209 }
210 //---------------------------------------------------------------------------
211 void __fastcall TBCDCalcDlg::ThreeKeyClick(TObject *Sender)
212 {
213 char c = '3';
214 FormKeyPress(Sender, c);
215 }
216 //---------------------------------------------------------------------------
217 void __fastcall TBCDCalcDlg::ZeroBtnClick(TObject *Sender)
218 {
219 char c = '0';
220 FormKeyPress(Sender, c);
221 }
222 //---------------------------------------------------------------------------
223 void __fastcall TBCDCalcDlg::DecKeyClick(TObject *Sender)
224 {
225 FormKeyPress(Sender, DecimalSeparator);
226 }
227 //---------------------------------------------------------------------------
228 void __fastcall TBCDCalcDlg::PlusMinusBtnClick(TObject *Sender)
229 {
230 char c = 'p';
231 FormKeyPress(Sender, c);
232 }
233 //---------------------------------------------------------------------------
234 void __fastcall TBCDCalcDlg::AddBtnClick(TObject *Sender)
235 {
236 char c = '+';
237 FormKeyPress(Sender, c);
238 }
239 //---------------------------------------------------------------------------
240 void __fastcall TBCDCalcDlg::SubBtnClick(TObject *Sender)
241 {
242 char c = '-';
243 FormKeyPress(Sender, c);
244 }
245 //---------------------------------------------------------------------------
246 void __fastcall TBCDCalcDlg::MulBtnClick(TObject *Sender)
247 {
248 char c = '*';
249 FormKeyPress(Sender, c);
250 }
251 //---------------------------------------------------------------------------
252 void __fastcall TBCDCalcDlg::DivBtnClick(TObject *Sender)
253 {
254 char c = '/';
255 FormKeyPress(Sender, c);
256 }
257 //---------------------------------------------------------------------------
258 void __fastcall TBCDCalcDlg::SqrtBtnClick(TObject *Sender)
259 {
260 char c = 's';
261 FormKeyPress(Sender, c);
262 }
263 //---------------------------------------------------------------------------
264 void __fastcall TBCDCalcDlg::ExpBtnClick(TObject *Sender)
265 {
266 char c = 'e';
267 FormKeyPress(Sender, c);
268 }
269 //---------------------------------------------------------------------------
270 void __fastcall TBCDCalcDlg::LnBtnClick(TObject *Sender)
271 {
272 char c = 'l';
273 FormKeyPress(Sender, c);
274 }
275 //---------------------------------------------------------------------------
276 void __fastcall TBCDCalcDlg::XtoYBtnClick(TObject *Sender)
277 {
278 char c = '^';
279 FormKeyPress(Sender, c);
280 }
281 //---------------------------------------------------------------------------
282 void __fastcall TBCDCalcDlg::EqualBtnClick(TObject *Sender)
283 {
284 Extended RV;
285 String S;
286 TBcd BCD;
287
288 if (PendOp != 0) {
289 S = Memo1->Lines->Strings[0];
290 if (S == "") {
291 MessageBeep(0);
292 return;
293 };
294
295 switch (PendOp) {
296 case '+' : {
297 RV = StrToFloat(XBuffer) + StrToFloat(S);
298 Memo1->Lines->Strings[0] = FloatToStr(RV);
299 ValBcd_C(Memo1->Lines->Strings[0], BCD);
300 BCDString->Text = BytesToString((char *)BCD, sizeof(BCD));
301 break;
302 };
303 case '-' : {
304 RV = StrToFloat(XBuffer) - StrToFloat(S);
305 Memo1->Lines->Strings[0] = FloatToStr(RV);
306 ValBcd_C(Memo1->Lines->Strings[0], BCD);
307 BCDString->Text = BytesToString((char *)BCD, sizeof(BCD));
308 break;
309 };
310 case '*' : {
311 RV = StrToFloat(XBuffer) * StrToFloat(S);
312 Memo1->Lines->Strings[0] = FloatToStr(RV);
313 ValBcd_C(Memo1->Lines->Strings[0], BCD);
314 BCDString->Text = BytesToString((char *)BCD, sizeof(BCD));
315 break;
316 };
317 case '/' : {
318 RV = StrToFloat(S);
319 if (RV == 0) {
320 Memo1->Lines->Strings[0] = "Divide by zero error";
321 PendOp = 0;
322 ClearOnNext = false;
323 }
324 else {
325 RV = StrToFloat(XBuffer) / StrToFloat(S);
326 Memo1->Lines->Strings[0] = FloatToStr(RV);
327 ValBcd_C(Memo1->Lines->Strings[0], BCD);
328 BCDString->Text = BytesToString((char *)BCD, sizeof(BCD));
329 };
330 break;
331 };
332 case 's' : {
333 RV = sqrt(StrToFloat(S));
334 Memo1->Lines->Strings[0] = FloatToStr(RV);
335 ValBcd_C(Memo1->Lines->Strings[0], BCD);
336 BCDString->Text = BytesToString((char *)BCD, sizeof(BCD));
337 break;
338 };
339 case 'e' : {
340 RV = exp(StrToFloat(S));
341 Memo1->Lines->Strings[0] = FloatToStr(RV);
342 ValBcd_C(Memo1->Lines->Strings[0], BCD);
343 BCDString->Text = BytesToString((char *)BCD, sizeof(BCD));
344 break;
345 };
346 case 'l' : {
347 RV = log(StrToFloat(S));
348 Memo1->Lines->Strings[0] = FloatToStr(RV);
349 ValBcd_C(Memo1->Lines->Strings[0], BCD);
350 BCDString->Text = BytesToString((char *)BCD, sizeof(BCD));
351 break;
352 };
353 case '^' : {
354 RV = exp(log(StrToFloat(XBuffer)) * StrToFloat(S));
355 Memo1->Lines->Strings[0] = FloatToStr(RV);
356 ValBcd_C(Memo1->Lines->Strings[0], BCD);
357 BCDString->Text = BytesToString((char *)BCD, sizeof(BCD));
358 break;
359 };
360 };
361 };
362
363 PendOp = 0;
364 ClearOnNext = true;
365 Memo1->SetFocus();
366 Memo1->SelStart = 0;
367 Memo1->SelLength = 0;
368 }
369 //---------------------------------------------------------------------------
370 void __fastcall TBCDCalcDlg::Copy1Click(TObject *Sender)
371 {
372 Memo1->SelectAll();
373 Memo1->CopyToClipboard();
374 Memo1->SelStart = 0;
375 }
376 //---------------------------------------------------------------------------
377 void __fastcall TBCDCalcDlg::Paste1Click(TObject *Sender)
378 {
379 String S = "";
380 String Nums = "";
381 bool IsNeg = false;
382 S = Clipboard()->AsText;
383 Nums = "0123456789";
384 Nums = Nums + Sysutils::DecimalSeparator;
385 if (S[1] == '-') {
386 IsNeg = true;
387 S = S.SubString(2, S.Length() - 1);
388 }
389
390 if (IsStrNumericL(S, Nums)) {
391 if (IsNeg) {
392 S = "-" + S;
393 }
394 Memo1->Lines->Strings[0] = S;
395 }
396 }
397 //---------------------------------------------------------------------------
398 void __fastcall TBCDCalcDlg::BSBtnClick(TObject *Sender)
399 {
400 Memo1->Lines->Strings[0] = Memo1->Lines->Strings[0].SubString(1, Memo1->Lines->Strings[0].Length() - 1);
401 if (Memo1->Lines->Strings[0].Length() == 0)
402 ClearBtnClick(ClearBtn);
403 }
404 //---------------------------------------------------------------------------
405 void __fastcall TBCDCalcDlg::FormShow(TObject *Sender)
406 {
407 BCDChar << '0' << '1' << '2' << '3' << '4' << '5' << '6' << '7' << '8' << '9' << DecimalSeparator << 'p';
408 BCDOper << '+' << '-' << '/' << '*' << '^' << 'e' << 'l' << 's' << '=';
409
410 }
411 //---------------------------------------------------------------------------
412

  ViewVC Help
Powered by ViewVC 1.1.20