File: TestCalc.pls

package info (click to toggle)
libbsf-java 1%3A2.3.0%2Bcvs20050308a-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,460 kB
  • ctags: 1,264
  • sloc: java: 7,643; cpp: 2,514; xml: 1,773; jsp: 463; ansic: 182; makefile: 61; python: 45; sh: 29
file content (73 lines) | stat: -rw-r--r-- 1,788 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#************************************************************
#* A simple four function calculator, written in PerlScript *
#************************************************************/
# *** create a result window
$result = CreateBean("java.awt.TextField", "0");

# *** create a panel of buttons
$panel = CreateBean("java.awt.Panel");
$panel->setLayout( CreateBean("java.awt.GridLayout", 4, 4));

$buttons = '789*456/123-C0.+';
for(  $i= 0 ; $i< length($buttons); ++$i)
{
   $label = substr($buttons,$i,1);
   $button = CreateBean("java.awt.Button", $label);
   $panel->add($button);

   if(-1 !=  index("*/-+", $label))
   {
     $button->onaction("&op(\"$label\");");
   }
   elsif ($label eq "C") 
   {
      $button->onaction("&clear");
   }  
   else 
   {
      $button->onaction("&press(\"$label\");");
   }  
} 

# *** Place everything in the frame
$frame->title("PerlScript Calc");
$frame->resize( 130, 200);
$frame->add( "North", $result );
$frame->add( "Center", $panel );
$frame->validate();

# *** Initialize the state of the calculator
$mem = 0;
$nextOp = "+";
$autoClear = 0;

# *** handle data entry keys
sub  press 
{
   $key= $_[0];
   if( $autoClear ){ $result->text("0");}
   if($result->text eq "0" &&  $key ne "." ){ $result->text("");}
   if( $key eq "." && (-1 != index($result->text, "."))){  $key="";}
   $result->text( $result->text . $key);
   $autoClear=0;
}

#  *** handle arithmetic keys
sub op
{
   $key= $_[0];
   $num = $result->text+0;
   if( $nextOp eq "+" ){ $mem = $mem + $num;}
   if( $nextOp eq "-" ){  $mem = $mem - $num;}
   if( $nextOp eq "*" ){  $mem = $mem * $num;}
   if( $nextOp eq "/" ){ $mem = $mem / $num;}
   $nextOp = $key;

   $result->text ( "" . $mem);
   $autoClear=1;
}

sub clear
{
  $mem=0 ; $nextOp="+"; $result->text("0");
}