def yesno ( prompt = "Yes or no?", value = "yes" ):
	if value == "yes":
		answer = "[YES] no"
		selected = True

	elif value == "no":
		answer = "yes [NO]"
		selected = False

	else:
		raise ValueError("Incorrect value " + value)

	display = Display()

	display.message(prompt + "\n" + answer)

	while True:

		if display.button_select():
			display.clear()
			return(selected)

		elif display.button_left() or display.button_right():
			if selected:
				answer = "yes [NO]"
				selected = False
			else:
				answer = "[YES] no"
				selected = True

			display.message(prompt + "\n" + answer)
def text (prompt = "Enter text...", value = ""):
	maxlen = 16

	if len(value) > maxlen:
		raise ValueError("Value too long")

	display = Display()

	letters = letter_choices()
	answer = []
	column = 0

	if value:
		for i in range(0, len(value)):
			answer.append(value[i])
	else:
		for i in range (0, maxlen):
			answer.append(' ')

	display.message( prompt + "\n" + string.join(answer, '') )
	display.move_cursor(col = column, row = 1)
	display.blink_cursor()

	while True:

		if display.button_select():
			return( string.join(answer, '') )

		elif display.button_left():
			if column > 0:
				column -= 1
				display.move_cursor(col = column, row = 1)

		elif display.button_right():
			if column < 15:
				column += 1
				display.move_cursor(col = column, row = 1)

		elif display.button_up():
			letter = answer[column]
			index = letters.index(letter)
			if index < (len(letters) - 1):
				index += 1
			else:
				index = 0

			answer[column] = letters[index]
			display.message( prompt + "\n" + string.join(answer, '') )
			display.move_cursor(col = column, row = 1)

		elif display.button_down():
			letter = answer[column]
			index = letters.index(letter)
			if index > 0:
				index -= 1
			else:
				index = len(letters) - 1

			answer[column] = letters[index]
			display.message( prompt + "\n" + string.join(answer, '') )
			display.move_cursor(col = column, row = 1)
def longtext (prompt = "Enter text...", value = ""):
	display = Display()

	letters = letter_choices()	# possible character values

	cursor_column = 0			# the column where the cursor is at
	answer_column = 0			# the current column somewhere in the answer
	display_column = 0			# the column to start displaying at

	# initialize the answer
	answer = []
	if value:
		for i in range(0, len(value)):
			answer.append(value[i])
	else:
		answer.append(' ')

	display.message( prompt + "\n" + string.join(answer, '')[display_column:16] )
	display.move_cursor(col = cursor_column, row = 1)
	display.blink_cursor()

	while True:

		if display.button_select():
			return( string.join(answer, '').strip() )

		elif display.button_left():
			logging.debug("left")

			logging.debug( "before start column = " + str(display_column) )
			logging.debug( "before answer column = " + str(answer_column) )
			logging.debug( "before cursor column = " + str(cursor_column) )

			if cursor_column > 0:
				logging.debug( "decrementing cursor column and moving cursor" )
				cursor_column -= 1
				display.move_cursor(col = cursor_column, row = 1)

				answer_column -= 1

			elif answer_column > 0:
				logging.debug( "decrementing answer and start column and scrolling display" )
				answer_column -= 1
				display_column -= 1
				display.message( prompt + "\n" + string.join(answer, '')[display_column:display_column+16] )
				display.move_cursor(col = cursor_column, row = 1)

			else:
				logging.debug( "not moving any cursors, already at start of display and of answer" )

			logging.debug( "after start column = " + str(display_column) )
			logging.debug( "after answer column = " + str(answer_column) )
			logging.debug( "after cursor column = " + str(cursor_column) )

		elif display.button_right():
			logging.debug( "right" )

			logging.debug( "before start column = " + str(display_column) )
			logging.debug( "before answer column = " + str(answer_column) )
			logging.debug( "before cursor column = " + str(cursor_column) )

			answer_column += 1
			if answer_column == len(answer):
				logging.debug( "appending space" )
				answer.append(' ')

			if cursor_column < 15:
				logging.debug( "incrementing cursor column and moving cursor" )
				cursor_column += 1
				display.move_cursor(col = cursor_column, row = 1)

			else:
				logging.debug( "incrementing start column and scrolling answer" )
				display_column += 1
				display.message( prompt + "\n" + string.join(answer, '')[display_column:display_column+16] )
				display.move_cursor(col = cursor_column, row = 1)

			logging.debug( "after start column = " + str(display_column) )
			logging.debug( "after answer column = " + str(answer_column) )
			logging.debug( "after cursor column = " + str(cursor_column) )

		elif display.button_up():
			letter = answer[answer_column]
			index = letters.index(letter)
			if index < (len(letters) - 1):
				index += 1
			else:
				index = 0

			answer[answer_column] = letters[index]
			display.message( prompt + "\n" + string.join(answer, '')[display_column:display_column+16] )
			display.move_cursor(col = cursor_column, row = 1)

		elif display.button_down():
			letter = answer[answer_column]
			index = letters.index(letter)
			if index > 0:
				index -= 1
			else:
				index = len(letters) - 1

			answer[answer_column] = letters[index]
			display.message( prompt + "\n" + string.join(answer, '')[display_column:display_column+16] )
			display.move_cursor(col = cursor_column, row = 1)
	exit(0)

signal.signal(signal.SIGINT, exit_handler)
signal.signal(signal.SIGQUIT, exit_handler)
signal.signal(signal.SIGTERM, exit_handler)


display = Display()
timefmt = "%Y/%m/%d\n%H:%M:%S"

old_t = int(time.time())

display.message(time.strftime(timefmt))

while True:
	if display.button_select():
		if Input.yesno(prompt = "Exit?" , value = "no"):
			display.stop()
			exit(0)

		if Input.yesno(prompt = "Reboot?" , value = "no"):
			display.message("Rebooting...")
			os.system("/sbin/shutdown -r now")
			time.sleep(1)
			exit(0)

		if Input.yesno(prompt = "Shutdown?" , value = "no"):
			display.message("Shutting down...")
			os.system("/sbin/shutdown -h -P now")
			time.sleep(1)
			exit(0)