aUCBLogo Demos and Tests / spelltest


to init_numpad_coors
   
numpad=array 9
   
repeat 9
   
[   numpad.repcount=
         
((list (mod (repcount-13)  int (repcount-1)/3)-1)*letter_scrunch*size/2
   
]
end

to make_path P
   
local [coors]
   
if (count P) == [P=word P P]
   
coors=array count P
   
repeat count P
   
[   coors.repcount=numpad.(int P.repcount)
   
]
   
output coors
end

to make_letter L
   
if and list? L  (count L) > 1
   
[   output se  make_path first L  make_letter bf L
   
]
   
output make_path first L
end

to init_letters size
   
letter_scrunch list  7/8  1
   
letter_width int 12/8*size*(first letter_scrunch)
   
letter_height int 14/8*size*(first bf letter_scrunch)
   
letter_size list letter_width letter_height
   
init_numpad_coors
   
letters=
   
[   [1486463]
      
[5317954]
      
[3179]
      
[178621]
      
[9746413]
      
[145479]
      
[563179]
      
[1745693]
      
[1325879]
      
[79324]
      
[1745953]
      
[713]
      
[17593]
      
[1739]
      
[17931]
      
[17964]
      
[531793]
      
[1795453]
      
[974631]
      
[7982]
      
[7139]
      
[729]
      
[71539]
      
[19573]
      
[75952]
      
[7913]

      
[1 482]
      
[2 796413]
      
[3 7965631]
      
[4 2846]
      
[5 974631]
      
[6 971364]
      
[7 791]
      
[8 47964136]
      
[9 647931]
      
[0 179319]

      
[+ 46528]
      
[- 46]
      
[* 285375645915]
      
[/ 19]
      
[. 12]
      
[, 15]
      
[75]
      
[13]
      
[= 13 46]
      
[< 349]
      
[> 167]
      
[% 19 32 78]
      
[12 45]
      
[57 68]
      
[78965 21]
      
[! 58 21]

      
[12 55]
      
[3289]
      
[7821]
      
[359]
      
[157]
      
[95453]
      
[75651]
      
[73]
   
]
   
foreach letters
   
[   make (word "letter_ first ?)  make_letter bf ?
   
]
   
advance_letter_proc = [advance_letter_horizontal]
   
advance_letter_circular_angle=10
   
newline_after_spell=false
   
newline_clean=false
   
setPenSize int letter_size*2/15
end

to advance_letter_horizontal
     
rt 90  fd letter_width  lt 90
end
to advance_letter_vertical
     
rt 180  fd letter_width  lt 180
end
to advance_letter_circular
   
local [a]
   
a=advance_letter_circular_angle
     
rt 90-a  fd letter_width  lt 90+a
end

to hLetter
   
advance_letter_proc = [advance_letter_horizontal]
end
to vLetter
   
advance_letter_proc = [advance_letter_vertical]
end
to cLetter
   
advance_letter_proc = [advance_letter_circular]
end

to clean_line
   
fillRect
      
(list    -letter_width/2   letter_height/2*1.1)
      
(list 800-letter_width/2  -letter_height/2*1.1)
   
updateGraph
end

to edge
   
setXY  -400+letter_width/2  300-letter_height/2
   
setHeading 0
end

to newline
    
setX -400+letter_width
   
setHeading 0
   
catch "error  [setY ycor-letter_height]
   
setHeading 0
   
if not empty? error [edge]
   
if newline_clean [clean_line]
end

to advance_letter
   
catch "error advance_letter_proc
   
if not empty? error [newline]
end

to write_letter L
   
local [m lettername coors c]

   
if L=="\    [repeat [advance_letterstop]
   
if L=="\   [stop]
   
if L=="
   
[newline stop]

;   m=Matrix
   
pushMatrix
      
setTurtleMatrix
      
letter word "letter_ L
      
ifelse name? letter
      
[   coors thing word "letter_ L
      
][   coors letter_?   (pr [unknown letterL)
      
]
      
pd
      
line :coors pc
      
pu
   
popMatrix
;   setMatrix m
end

to spell letter
   
foreach letter
   
[   ifelse char? ?
      
[   write_letter ?
      
]
      
[   spell ?
      
]
      
advance_letter
   
]
   
if newline_after_spell [newline]
end

to myhome
   
setPos p0
   
setHeading h0
end

to spelltest
;   cs
;perspective
   
local [p0 h0]
   
p0=pos
   
h0=heading
   
pu    WindowMode  setFloodColor  hsb 0 0 1
   
init_letters 40
   
spell "hello
   
myhome  bk 100 rt advance_letter_circular_angle*4
   
cLetter
   
spell "world
   
myhome   rt advance_letter_circular_angle*8  bk 200
   
advance_letter_circular_angle=5
   
setPrintPrecision 15
   
spell pi
   
hletter
   
init_letters 12
   
myhome  lt 120  fd 400  rt 65
   
spell [Variables won`tConstants aren`t.]
end

to spelltest2      ;one more example
   
local [hue]
   
ht
   
forever 
   
[   setpc hsb 5*repcount 1 1  
      
spelltest  
      
updateGraph
      
if key? [stop]
   
]
end

to spelltext      ;and a third example
   
ht edge 
   
fence  seth 0  
   
setpc bitnot sc  
   
setfc hsb 0 0 1
   
newline_after_spell=true
   
newline_clean=true
   
foreach procedures [spell fulltext ?]
end