first of all..... a few of your "dialog events" were wrong:

on *:dialog:name:init:0 {
not :init:*:{

same for :close:

also, you can make it was smaller in a few places:


Code:
 
on 1:dialog:calculator:close:0 {
  unset %calc_active  
  unset %decimal  
  unset %equal  
  unset %add  
  unset %subtract  
  unset %multiply  
  unset %divide  
  unset %clear_entry  
  unset %all_clear  
  unset %memory_add  
  unset %memory_sub  
  unset %memory_recall  
  unset %memory_clear  
  unset %sign  
  unset %last_function 
  unset %enter_again
}
 


Can Become:

Code:
 
on 1:dialog:calculator:close:0 {
  unset %calc_active %decimal %equal %add %subtract %multiply %divide %clear_entry %all_clear %memory*  %sign %last_function %enter_again
}
 



And yet, and even better way to do it, would be to defina all your variable with a certain prefix:

%Calculator.add
%calculator.subtract
%calculator.devide
%calculator.clear_entry
%calculator.etc

so then you can turn a long code, into a simple one:

Code:
on 1:dialog:calculator:close:0 {
  unset %calculator.*
}

  


also, a few places you have... for example:

did -r blah blah1
did -r blah blah2

you can simplify this by doing:

did -r blah blah1,blah2,blah3,etc


also an error with MR:


if i do 666 + "MR" it doesnt allow it, and resets the + param, thus MR is my new and only param.... uif you understand what i mean....just thought i'd take a look at it and see if i can give ya more work wink