% class Main < Iowa::Component attr_accessor :number, :numberArray attr_accessor :operator, :operatorArray attr_accessor :stack, :stackItem def awake @numberArray = 0..9 @operatorArray = [ :+, :-, :/, :*] @stack = [""] @valueEntered = false end def pressNumber if @valueEntered @stack.push "" @valueEntered = false end @stack.last << @number.to_s end def pressOperator if(@stack.size > 1) o1 = @stack.pop.to_f o2 = @stack.pop.to_f @stack.push o2.send(@operator, o1).to_s end @valueEntered = true end def del @stack.last.chop! unless @valueEntered end def enter @valueEntered = true end def decimal @stack.last << "." unless @stack.last =~ /\./ end #to make backtracking work def dup copy = super() copy.stack = @stack.collect {|i| i.dup} copy end end %> stackList { list = stack item = stackItem } numberButton { action = :pressNumber value = number } operatorButton { action = :pressOperator value = operator } ?>