#! /usr/bin/env ioobjc


ObjcBridge autoLookupClassNamesOn

buffer := ""
memory := 0.0
operator := ""

[NSObject newSubclassNamed:"Controller"] do(
	[addVariableNamed:"output"]
	setSlot("add:",
		method(sender,
			[self compute:sender]
			operator = "+"
		)
	)
	setSlot("compute:",
		method(sender,
			if(operator == "", memory = self output doubleValue)
			if(operator == "+", memory = memory + self output doubleValue)
			if(operator == "-", memory = memory - self output doubleValue)
			if(operator == "*", memory = memory * self output doubleValue)
			if(operator == "/", memory = memory / self output doubleValue)
			if(operator == "sqrt", memory = self output doubleValue sqrt)
			[self output setFloatValue:memory]
			operator = ""
			buffer = ""
		)
	)
	setSlot("clear:",
		method(sender,
			[self output setFloatValue:0.0]
			buffer = ""
			memory = 0
		)
	)
	setSlot("digit:",
		method(sender,
			buffer = buffer .. sender tag
			[self output setStringValue:buffer]
		)
	)
	setSlot("div:",
		method(sender,
			[self compute:sender]
			operator = "/"
		)
	)
	setSlot("dot:",
		method(sender,
			buffer = buffer .. "."
			[self output setStringValue:buffer]
		)
	)
	setSlot("mul:",
		method(sender,
			[self compute:sender]
			operator = "*"
		)
	)
	setSlot("sub:",
		method(sender,
			[self compute:sender]
			operator = "-"
		)
	)
	setSlot("sqrt:",
		method(sender,
			operator = "sqrt"
			[self compute:sender]
		)
	)
	setSlot("windowWillClose:", method(notification, [NSApplication sharedApplication stop:notification]))
)

ObjcBridge main
