Here is my 660 beast \:\) Like Glen, I just got a first version, and then a couple mods in...then didn't have as much time as I wanted to work on it after that. Wish I could have gotten it a bit more competitive.

 Code:
function a($)
   dim $1,$2,$3,$s
   $1="zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve",
       "thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"
   $2="","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"

   if $=4 OR $="four" AND $>0
      $a=""+$+" is magic."
   else
      if val($)>0 or $=0
         if val($)>19
            $3=len($2[$/10])+len($1[$ mod 10])
            if instr($,0)
               $3=$3-4
            endif
         else
            $3=len($1[$])
         endif
         While $3<>4
            $s=""+$s+$+" is "+$3+". "
            $=$3
            $3=len($1[$3])
         Loop
      else
         $3=$1[Len(join(split(join(split($," "),""),"-"),""))]
         While $3<>"four"
            $s=$s+$+" is "+$3+". "
            $=$3
            $3=$1[len($3)]
         Loop
      endif
      $a=""+$s+$+" is "+$3+". "+$3+" is magic."
   endif
endfunction