# Campimeter.py
#
# I needed the facility to have a maximised Terminal window on OSX 10.7.5 and this was the result...
# A DEMO to show how to increase the size of a Terminal window and obtain the maximum usable size on a _desktop_.
# The Terminal window must be initially set manually at the uppermost left hand corner and Python started inside
# this window. The colours for this DEMO inside OSX 10.7.5, are grey background, red square and yellow asterisk/characters...
#
# Written in such a way as anyone can understand how it works, youngsters too.
#
# To run type from the Python prompt:-
#
# >>> exec(open("/full/path/to/Campimeter.py).read())
#
# Where "/full/path/to/" is where you have saved this code; then have a little fun...
#
# This code generates a crude Campimeter... http://en.wikipedia.org/wiki/Campimeter ...and is used to check
# visual field. Just focus on the red square in the centre of the window after pressing from the initial
# window and then press Ctrl-C immediately after you see an asterisk flash. It is possible to get the Ctrl-C to
# _crash_ out and stop the DEMO if Ctrl-C is pressed at any other time than just after seeing the asterisk flash.
# The cursor has not been turned off and will be seen on the left hand side of the window, so try to ignore it.
#
# $VER: Campimeter.py_Version_0.00.10_(C)2012_B.Walker_G0LCU.
# This code is issued as Public Domain and you may do with it as you please.
#
# I have not reset the Terminal back to its original state although all of the information how to do it is in
# this code. Colours are easily reset in Python and I have shown this many times on this site...
#
# Designed and tested on a Macbook Pro, OSX 10.7.5 using Python Versions 2.6.7 and 2.7.1. Also tested on Debian
# Linux 6.0.x using Python versions 2.6.6, 2.7.2 and 3.1.3...
# It would be interesting to see which other platform variants this idea works on; just add a comment...
# All imports required.
import os
import sys
import random
import time
# Ensure Python Version 3.x.x is included...
if sys.version[0]=="3": raw_input=input
# Set some values as global, my choice! ;o)
global row
global column
global attempts
# Allocate initial Terminal window values to be much greater than the allowed Terminal size on the desktop...
row=200
column=300
attempts=0
# Set the Terminal window size larger than its default!
sys.stdout.write("\x1b[8;{rows};{cols}t".format(rows=row,cols=column))
# Set up a basic user window starting with a grey, cleared window...
print("\033[1;93;100m")
n=os.system("clear")
# Add a delay to allow settings to settle...
time.sleep(1)
print("\n$VER: Campimeter.py_Version_0.00.10_(C)2012_B.Walker_G0LCU.\n")
print("Press the key to start. After this window is exited focus on")
print("the centred, coloured square. Position yourself until you are both")
print("comfortable and the screen presents a wide field of view. Use the two")
print("keys Ctrl-C if and when you see a randomly positioned _*_ displayed.\n")
print("The larger the display used the better, have fun...\n")
# time.sleep(1)
raw_input("Press the key to continue...")
# Now get the _new_ real size of the Terminal window...
rows,columns=os.popen("stty size","r").read().split()
row=int(rows)
column=int(columns)
def locate(user_string="$VER: Campimeter.py_Version_0.00.10_(C)2012-2013_B.Walker_G0LCU.",x=0,y=0):
# Don't allow any user errors. Python's own error detection will check for
# syntax and concatination, etc, etc, errors.
x=int(x)
y=int(y)
if x>=255: x=255
if y>=255: y=255
if x<=0: x=0
if y<=0: y=0
HORIZ=str(x)
VERT=str(y)
# Plot the user_string at the starting position HORIZ, VERT...
print("\033["+VERT+";"+HORIZ+"f"+user_string)
def main():
# Ensure certain _variables_ remain global, my choice... ;o)
global row
global column
global attempts
# Note:- row and colour are already set.
attempts=0
# Clear the window for the test.
n=os.system("clear")
# Set the centred red square for the start...
locate("\033[0;41;41m \033[1;93;100m ",int(column/2),int(row/2))
# This is set for 5 possible attempts only. Just change the number 5 to your number of attempts.
for n in range(0,5,1):
try:
# Have a random start waiting time...
waiting_time=int(random.random()*6)
time.sleep(waiting_time)
coloured_spot_column=int(random.random()*int(columns))
coloured_spot_row=int(random.random()*int(rows))
# Display a coloured asterisk randomly on screen for a brief period...
locate("\033[1;93;100m*\033[1;93;100m ",coloured_spot_column,coloured_spot_row)
# This is the timer to display the asterisk and is made relatively easy...
time.sleep(0.2)
# Clear this displayed asterisk...
locate("\033[1;93;100m \033[1;93;100m ",coloured_spot_column,coloured_spot_row)
# Because this code does not detect whether the red square might be overwritten,
# ensure that it is redrawn at the centre of the Terminal window.
locate("\033[0;41;41m \033[1;93;100m ",int(column/2),int(row/2))
# Hold long enough to react to Ctrl-C...
time.sleep(1)
except KeyboardInterrupt:
# After pressing Ctrl-C ensure ^c or ^C is not seen on the screen and update.
print("\b\b\b\b ")
attempts=attempts+1
time.sleep(1)
# Give the results for this fun project and re-run if required...
print("You had "+str(attempts)+" successes out of "+str((n+1))+" possible attempts...\n")
again=raw_input("Do you want to try again? (Y/N):- ")
if again=="y" or again=="Y": main()
main()
# It is easy to reset the Terminal back to the default sze AND colours using the methods already shown.
# I have not bothered, as the intent of this DEMO is to show how to increase the size of the Terminal
# window and obtain the real, new size too.
# End of Campimeter.py DEMO.
# Enjoy finding simple solutuions to often very difficult problems...