|
|
1.1 ! root 1: /* ! 2: * SimpleCalc -- Randy Nelson ! 3: * A general class that directly supports a calculator interface ! 4: * Created 8-8-90 ! 5: * ! 6: * You may freely copy, distribute and reuse the code in this example. ! 7: * NeXT disclaims any warranty of any kind, expressed or implied, as to ! 8: * its fitness for any particular use. ! 9: */ ! 10: ! 11: #import <objc/Object.h> ! 12: ! 13: @interface SimpleCalc:Object ! 14: { ! 15: id infoPanel; ! 16: id helpPanel; ! 17: ! 18: id display; /* a text object -- to show the output and input */ ! 19: ! 20: id enterKey; /* outlet to set the key equivalents */ ! 21: ! 22: id stringSet; /* our string external to the source */ ! 23: ! 24: int operator; /* represents the current operator or zero */ ! 25: ! 26: double accumulator; /* a buffer to hold the first number entered */ ! 27: ! 28: BOOL numberHasADecimal, ! 29: startingSecondNumber, ! 30: treatingOperationKeyLikeEqualKey, ! 31: noFirstNumber; /* flags that describe the calculators state */ ! 32: } ! 33: ! 34: - doInit; ! 35: /* initialize an instance of the class and its flags for start-up ! 36: * also used by the clear all key ! 37: */ ! 38: ! 39: - numberKeys:sender; ! 40: /* sent by any number key or the decimal point key in the interface (0-9, .) ! 41: * appends the character to display using appendToDisplay: ! 42: * erases the previous number if startingSecondNumber ! 43: */ ! 44: ! 45: - numberDirectFromDisplay:sender; ! 46: /* sent as the action of displayer -- allows direct entry of numbers ! 47: * startingSecondNumber gets YES ! 48: */ ! 49: ! 50: - equalsKey:sender; ! 51: /* sent by the equals key in the interface (=) ! 52: * at this point accumulator holds the first number ! 53: * operator holds an int defined to an operation ! 54: * displayer hold the second number ! 55: * performs the operation and leaves the result in the dsplayer ! 56: */ ! 57: ! 58: - operationKeys:sender; ! 59: /* sent by the operation keys in the interface (+, -, * and /) ! 60: * sets the value of operation ! 61: * acts like equals to chain a calculation when ! 62: * treatingOperationKeyLikeEqualKey ! 63: */ ! 64: ! 65: - clearKeys:sender; ! 66: /* sent by either clear key in the interface(clear, clear all) ! 67: * clear -- zeros the display -- allows re-enetering a number ! 68: * clear all -- resets by calling init ! 69: */ ! 70: ! 71: - decimal; ! 72: /* called by numberKeys: when it finds the number is a decimal point ! 73: * checks first if numberHasADecimal already ! 74: * if not -- appendToDisplay: a decimal point ! 75: */ ! 76: ! 77: - appendToDisplay:(const char *)theDigit; ! 78: /* sent by objects wanting to append a digit to the number in the displayer ! 79: * removes the leading zeros a zero value displayer has ! 80: * unless there is a decimal point ! 81: */ ! 82: ! 83: - appDidInit:sender; ! 84: /* handles some key equivalent setting and orders the window front ! 85: * should be Application's delegate to receive ! 86: */ ! 87: ! 88: - windowWillClose:sender; ! 89: /* quits app when window is closed ! 90: * for example -- app's quit menu item can send performClose: to window ! 91: * should be Window's delegate to receive ! 92: */ ! 93: ! 94: - infoPanel:sender; ! 95: - helpPanel:sender; ! 96: /* sent by the menu in interface ! 97: * creates the panels as they are needed ! 98: */ ! 99: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.