aUCBLogo Demos and Tests / drawchartest


setCaseIgnored false

be drawchartest
   
setsc 0
   
setUpdateGraph false
   
scale=1
   
::textScale=2
   
textLength=0
   
initChars
   
ht
   
hue=0
   
forever
   
[   setsc hsb hue 1 .5
      
hue=hue+60
      
pu setxy -390 0 pd
      
drawText [ABCDEFGHIJKLMNOPQRSTUVWXYZ"draw
      
pu setxy -390 -100 pd
      
drawText [abcdefghijklmnopqrstuvwxyz"draw
      
pu setxy -390 -200 pd
      
drawText [0123456789:-?!.,'"_"draw
      
updateGraph
      
if Key? [stop]
   
]
   
   
be drawText :txt :action
      
tPos=pos
      
textLength=0
      
seth 0
      
ifelse list? :txt
      
[   make "numWords count :txt
         
repeat :numWords
         
[   make "chars item repcount :txt
            
make "numChars count :chars
            
repeat :numChars
            
[   drawChar item repcount :chars  :action
            
]
            
if not repcount == :numWords
            
[   rt 90 tfd lt 90
               
textLength=textLength+6
            
]
         
]
      
][
         
make "numChars count :txt
         
repeat :numChars
         
[   drawChar (item repcount :txt:action
         
]
      
]
      
make "textLength round (:textLength*:textScale )
      
if :action == "getLength [pu setpos :tPos seth 0]
   
end

   
be drawChar :c :action
      
make "validChar true
      
setPenSize list round(1*:scaleround(1*:scale)
      
seth 0
      
make "cPos pos
      
setPC rgb 1 1 0
      
pd
      
if action != "getLength
      
[   charvar=word "char_ BackslashEncode c
      
;   if name? charvar [run thing charvar]
         
if procedure? charvar [run charvar]
      
]
      
make "charWidth 0
      
if >= "A and2 <= "Z [make "charWidth 12]
      
if >= "a and2 <= "z [make "charWidth 10]
      
if >= "0 and2 <= "9 [make "charWidth 12]
      
case c
      
[   ["I make "charWidth 7]
         
["f make "charWidth 8]
         
["j make "charWidth 6]
         
["i make "charWidth 2]
         
["l make "charWidth 1]
         
["m make "charWidth 17]
         
["r make "charWidth 9]
         
["t make "charWidth 9]
         
["1 make "charWidth 11]
         
[": make "charWidth 1]
         
["- make "charWidth 10]
         
["? make "charWidth 11]
         
["! make "charWidth 1]
         
[". make "charWidth 3]
         
[", make "charWidth 5]
         
["' make "charWidth 5]
         
["" make "charWidth 6]
         
["_ make "charWidth 11]
         
[32 make "charWidth 7]
      
]
      
pu
      
setpos :cPos
      
seth 0
      
ifelse charWidth==0
      
[   make "validChar false
      
][
         
if action != "getLength 
         
[
      
;the 3 in "tfd 3" is assumed to be 3 by inputText.keyHit and most button procedures
            
rt 90 tfd :charWidth tfd lt 90
         
]
         
make "textLength :textLength+:charWidth+3
      
]
   
end
end

be tfd :dist
   
fd :dist*::textScale
end

be tbk :dist
   
bk :dist*::textScale
end

be ltCnr
   
arc2 -90 -::textScale*3*sqrt 2
;   lt 45 tfd 1.4 lt 45
end

be rtCnr
   
arc2 90 ::textScale*3*sqrt 2
;   rt 45 tfd 1.4 rt 45
end

be ltCnr2
   
arc2 -90 -::textScale*10.5
;   lt 45 tfd 1.4 lt 45
end

be rtCnr2
   
arc2 90 ::textScale*10.5
;   rt 45 tfd 1.4 rt 45
end

be initChars
   
charlist=
   
[   [A tfd 11 make "pos1 pos pu tfd 10 rt 90 tfd 5.5 make "pos2 pos tfd 5.5 rt 90 tfd 10 pd rt 90 tfd 11 tbk 11 lt 90 tfd 11 tbk 11 setpos :pos2 setpos :pos1]
      
[B tfd 21 rt 90 tfd rtCnr tfd rtCnr tfd lt 90 tfd 11 lt 90 tfd ltCnr tfd ltCnr]
      
[pu rt 90 tfd 11 rt 180 pd tfd rtCnr2 tfd rtCnr2 tfd 1]
      
[D tfd 21 rt 90 tfd rtCnr2 tfd rtCnr2 tfd 1]
      
[rt 90 tfd 11 tbk 11 lt 90 tfd 11 rt 90 tfd 10 tbk 10 lt 90 tfd 10 rt 90 tfd 12]
      
[F tfd 11 rt 90 tfd 10 tbk 10 lt 90 tfd 10 rt 90 tfd 12]
      
[pu rt 90 tfd 11 lt 90 pd tfd 11 lt 90 tfd tbk rt 90 tbk 11 lt 90 tfd rtCnr2 tfd rtCnr2 tfd 3]
      
[tfd 11 rt 90 tfd 11 tbk 11 lt 90 tfd 11 pu rt 90 tfd 11 rt 90 tfd pd tfd 21]
      
[pu rt 90 pd tfd tbk lt 90 tfd 21 lt 90 tfd tbk 7]
      
[pu tfd rt 180 pd tfd ltCnr tfd ltCnr tfd 17 lt 90 tfd tbk 6]
      
[K tfd 21 tbk 10 rt 45 tfd 14 tbk 14 rt 90 tfd 15]
      
[rt 90 tfd 11 tbk 11 lt 90 tfd 21]
      
[pu rt 90 tfd 11 lt 90 pd tfd 21 make "pos1 pos tbk 21 lt 90 pu tfd rt 90 tfd 11 make "pos2 pos tbk 11 lt 90 tfd rt 90 pd tfd 21 setpos :pos2 setpos :pos1]
      
[pu rt 90 tfd 11 pd make "pos1 pos lt 90 tfd 21 tbk 21 pu lt 90 tfd 11 rt 90 pd tfd 21 setpos :pos1]
      
[pu tfd pd repeat [tfd 13 rtCnr tfd rtCnr]]
      
[P tfd 21 rt 90 tfd rtCnr tfd rtCnr tfd 6]
      
[pu tfd pd repeat [tfd 13 rtCnr tfd rtCnrpu rt 90 tfd rt 45 pd tfd 8]
      
[R tfd 21 rt 90 tfd rtCnr tfd rtCnr tfd rt 45 tbk 15]
      
[pu rt 90 fd lt 180 rtCnr rt 180 ltCnr tfd ltCnr tfd ltCnr tfd rtCnr tfd rtCnr tfd rtCnr]
      
[pu rt 90 tfd pd lt 90 tfd 21 lt 90 tfd tbk 12]
      
[pu tfd pd tfd 17 rt 180 tfd 17 ltCnr tfd ltCnr tfd 17]
      
[pu rt 90 tfd lt 75 pd tfd 22 tbk 22 lt 30 tfd 22]
      
[pu rt 90 tfd 11 lt 90 tfd 21 rt 180 rt 90 tfd 11 lt 90 pd tfd 21 make "pos1 pos tbk 21 lt 90 pu tfd rt 90 tfd 11 make "pos2 pos tbk 11 lt 90 tfd rt 90 pd tfd 21 setpos :pos2 setpos :pos1]
      
[pu rt 90 tfd 11 lt 90 tfd 21 rt 180 pu make "pos1 pos tfd 21 lt 45 tfd 1.4 make "pos2 pos tbk 1.4 rt 45 rt 90 tfd 11 lt 45 tfd 1.4 make "pos3 pos tbk 1.4 rt 45 rt 90 tfd 21 pd setpos :pos2 pu setpos :pos1 pd setpos :pos3]
      
[pu rt 90 tfd lt 90 pd tfd 11 rt 30 tfd 12 tbk 12 lt 60 tfd 12]
      
[make "pos1 pos rt 90 tfd 12 pu tbk lt 90 tfd 21 pd lt 90 tfd 11 tbk 11 setpos :pos1]
      
      
[pu rt 90 tfd pd tfd tbk lt 90 tfd 12  tbk lt 90 tfd ltCnr tfd 2.5 ltCnr]
      
[b tfd 21 tbk 10 rt 90 tfd rtCnr tfd rtCnr tfd 3]
      
[pu rt 90 tfd tfd rt 180 pd tfd rtCnr tfd 2.5 rtCnr tfd 4]
      
[pu rt 90 tfd pd tfd tbk lt 90 tfd 21  tbk 10 lt 90 tfd ltCnr tfd 2.5 ltCnr]
      
[pu rt 90 tfd tfd rt 180 pd tfd rtCnr tfd 2.5 rtCnr rtCnr tfd rt 90 tfd 8]
      
[pu rt 90 tfd pd lt 90 tfd 11 lt 90 tfd tbk tfd rt 90 tfd rtCnr tfd 1]
      
[pu rt 90 tfd pd tfd rt 90 tfd rtCnr rtCnr rt 180 ltCnr ltCnr tfd 14  tbk lt 90 tfd ltCnr tfd 2.5 ltCnr]
      
[tfd 21 tbk 10 rt 90 tfd rtCnr tfd 7]
      
[rt 90 tfd tbk 1.5 lt 90 tfd 12 pu tfd pd tfd 2]
      
[pu rt 90 tfd lt 90 tfd 17 rt 180 pd tfd pu tfd pd tfd 13 rtCnr]
      
[k tfd make "pos1 pos tfd 14 tbk 21 rt 90 pu tfd 10 rt 90 tfd make "pos2 pos tbk lt 90 tbk lt 90 tfd 11 pd setpos :pos1 setpos :pos2]
      
[l tfd 22]
      
[m tfd 11 tbk rtCnr rtCnr tfd rt 180 tfd rtCnr rtCnr tfd 7]
      
[n tfd 11 tbk rtCnr tfd rtCnr tfd 7]
      
[pu tfd pd repeat [tfd rtCnr tfd rtCnr]]
      
[p tbk tfd 17 tbk rtCnr tfd rtCnr tfd rtCnr tfd rtCnr]
      
[pu rt 90 tfd ltCnr rt 180 pd rtCnr tfd rtCnr tfd rtCnr tfd rtCnr tfd 13 tbk 17]
      
[r tfd 11 tbk rtCnr tfd rtCnr]
      
[rt 180 ltCnr ltCnr ltCnr rtCnr rtCnr rtCnr]
      
[pu rt 90 tfd pd lt 90 tfd 11 lt 90 tfd tbk tfd rt 90 tfd 8]
      
[pu tfd 11 rt 180 pd tfd ltCnr tfd ltCnr tfd 6]
      
[pu tfd 12 make "pos1 pos tbk 12 rt 90 tfd make "pos2 pos tfd lt 90 tfd 11 pd setpos :pos2 setpos :pos1]
      
[pu tfd pd tfd tbk pu make "pos1 pos tbk rt 90 tfd make "pos2 pos tfd lt 90 tfd make "pos3 pos tbk rt 90 tfd make "pos4 pos tfd lt 90 tfd pd tfd tbk setpos :pos4 setpos :pos3 setpos :pos2 setpos :pos1]
      
[pu rt 90 tfd lt 90 tfd 11 rt 180 pu make "pos1 pos tfd 11 lt 45 tfd 1.4 make "pos2 pos tbk 1.4 rt 45 rt 90 tfd lt 45 tfd 1.4 make "pos3 pos tbk 1.4 rt 45 rt 90 tfd 11 pd setpos :pos2 pu setpos :pos1 pd setpos :pos3]
      
[pu tfd 11 make "pos1 pos tbk 19 make "pos2 pos tfd rt 90 tfd make "pos3 pos tfd lt 90 tfd 11 pd setpos :pos3 setpos :pos1 setpos :pos3 setpos :pos2]
      
[make "pos1 pos rt 90 tfd 10 pu tbk lt 90 tfd 11 pd lt 90 tfd tbk setpos :pos1]
      
      
[pu tfd pd repeat [tfd 13 rtCnr tfd rtCnrpu tfd rt 90 tfd 5.3 lt 70 pd tfd tbk 8]
      
[pu rt 90 tfd pd tfd tbk lt 90 tfd 21 lt 135 tfd 8]
      
[pu rt 90 tfd 11 lt 180 pd tfd 11 rt 90 tfd rtCnr tfd ltCnr tfd ltCnr tfd ltCnr]
      
[pu rt 90 tfd lt 180 rtCnr lt 180 pd ltCnr tfd ltCnr tfd ltCnr tfd rt 180 tfd ltCnr tfd ltCnr tfd ltCnr]
      
[pu rt 90 tfd lt 90 pd tfd 21 lt 135 tfd 13 lt 135 tfd 11]
      
[pu rt 90 tfd lt 180 rtCnr rt 180 ltCnr tfd ltCnr tfd ltCnr tfd rt 90 tfd 10 rt 90 tfd 10]
      
[pu tfd pd repeat [tfd rtCnr tfd rtCnrtfd 13 rtCnr tfd rtCnr]
      
[pu tfd 21 rt 90 pd tfd 11 rt 115 tfd 23]
      
[pu tfd pd repeat [tfd rtCnr tfd rtCnrtfd rtCnr tfd 1.5 rt 180 repeat [tfd rtCnr tfd rtCnr]]
      
[pu rt 90 tfd lt 180 rtCnr rt 180 ltCnr tfd ltCnr tfd 14 ltCnr tfd ltCnr tfd ltCnr  tfd ltCnr]
      
      
[: tfd pu tfd 8.5 pd tfd 2]
      
[pu tfd 11 rt 90 pd tfd 10]
      
[pu rt 90 tfd lt 90 pd tfd pu tfd pd tfd rtCnr tfd ltCnr tfd ltCnr tfd ltCnr tfd 1]
      
[! tfd pu tfd pd tfd 17]
      
[tfd 2]
      
[, pu tbk rt 30 pd tfd lt 30 tfd lt 90 tfd 3]
      
[pu tfd 17 rt 30 pd tfd lt 30 tfd lt 90 tfd 3]
      
[pu tfd 17 pd tfd pu rt 90 tfd rt 90 pd tfd 4]
      
[pu tbk rt 90 pd tfd 11]
   
]
   
foreach charlist
   
[
;      make (word "char_ first ?) bf ?
      
define (word ": ":char_ first ?) (list [] bf ?)
   
]
end