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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2671 - (hide annotations) (download)
Tue Aug 25 18:15:15 2015 UTC (8 years, 9 months ago) by torben
File size: 12388 byte(s)
Added tpsystools component
1 torben 2671 // ***** 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