;spirograph, by Foxy (uses default line size and color)
;Usage: "spiro   "
;uses ipt-1 SINE and COSINE
{ "" CHATSTR = "$1" GREPSUB ATOI ring = "$2" GREPSUB ATOI wheel =
  "$3" GREPSUB ATOI hole = MOUSEPOS cy = cx = ring wheel - wr =
  ring -360 * wheel / 360 + ws = 0 ra = 0 ld = 1 rnd =
 { dv = { dv rnd *= } { ring rnd / dv % NOT wheel rnd / dv % NOT AND } WHILE
 } [ 2 3 5 7 11 13 ] FOREACH
  wheel rnd / 360 * rnd =
  { ra ws * 360 / wa =  cx ra SINE wr * 1000 / + wa SINE hole * 1000 / +
    cy ra COSINE wr * 1000 / + wa COSINE hole * 1000 / +
  } spt DEF
 { spt EXEC 12 ra += spt EXEC LINE ld ++
  { BREAK } ld 128 == IF
 } { ra rnd < } WHILE
} CHATSTR "^spiro ([0-9]+) ([0-9]+) ([0-9]+)" GREPSTR IF