REBOL [
	Title: "Numbers " 
    File: %numbers.r
    Author: "Lami Gabriele"
    Email: koteth@gmail.com
	Date:    10-July-2009
	Purpose: "Number structure visual analyzer"
]
ena: 121
positions: []
dimPal: 3 

unitar: func [ ele enne ][ either (( (ele // enne) == 1 ) or (( ele // enne) == (enne - 1)))[ 1  ] ["-"] ]

evaluateUni: func [ en ] [
	for j 1 en 1[ st: copy "" 
		for i 1 en 1[ 
			append st unitar i * j en 
			sr: square-root en   
			if ( unitar i * j en ) == 1  [ append positions ( as-pair i j  ) * 350 / en + 23x23 ]
		]
	]
 	positions
]
evaluateUni ena

refre: does[ 	
	positions: copy []
	evaluateUni ena
	pis: copy []
	posi: copy positions
	foreach p posi[ insert tail pis  reduce[ 'fill-pen 160.209.215.100 'circle p dimPal ]  ]
	out: form ( length? positions ) / 2 == ( ena - 1 )
	insert tail pis reduce [  'text 230x5 join "numero primo: "   out ]
	scrn/effect/draw: copy []
	append scrn/effect/draw pis
	show scrn	
]

refreNoEval: does[ 	
	pis: copy []
	posi: copy positions
	foreach p posi[ insert tail pis  reduce[ 'fill-pen 160.209.215.100 'circle p dimPal ]  ]
	out: form ( length? positions ) / 2 == ( ena - 1 )
	insert tail pis reduce [  'text 230x5 join "prime number: "   out ]
	scrn/effect/draw: copy []
	append scrn/effect/draw pis
	show scrn	
]
lay: layout [  

	scrn: box 400x400 black effect [
		draw [ text "unit" ]
		rotate 50
		gradmul 180.180.210 180.60.255
	]
	slider 200x16 ena / 300 [
 		ena: to-integer value * 300
		inpNum/data: form ena
		inpNum/text: form ena
		show inpNum
		refre
	]
	inpNum: field form ena [
		print to-integer inpNum/text
	 	ena: to-integer inpNum/text    	
	]
	at 330x460
	btn "Change"  [ 
		refre 
	]	
	slider 100x15 dimPal / 10 [
		dimPal: to-integer  value    * 10 
		refreNoEval 
	]
]

view lay