I use an autohotkey script I found in the circle templates topic as well, only it's done using fourths instead of eighths. I've personally edited it a bit and it works just fine for me, using 40d9.
;Full circle. Inner radius, outer radius
#g::
fullCircle(8,10)
exit
;Circle sections, if you don't want to make a whole circle
#c::
circleQuarter
("{NumPadDown}","{NumPadUp}","{NumPadRight}","{NumPadLeft}"
,0,0)
circleQuarter
("{NumPadRight}","{NumPadLeft}","{NumPadUp}","{NumPadDown}"
,0,0)
circleQuarter
("{NumPadUp}","{NumPadDown}","{NumPadLeft}","{NumPadRight}"
,0,0)
circleQuarter
("{NumPadLeft}","{NumPadRight}","{NumPadDown}","{NumPadUp}"
,0,0)
exit
fullCircle(inner, outer)
{
circleQuarter
("{NumPadDown}","{NumPadUp}","{NumPadRight}","{NumPadLeft}"
,inner,outer)
circleQuarter
("{NumPadRight}","{NumPadLeft}","{NumPadUp}","{NumPadDown}"
,inner,outer)
circleQuarter
("{NumPadUp}","{NumPadDown}","{NumPadLeft}","{NumPadRight}"
,inner,outer)
circleQuarter
("{NumPadLeft}","{NumPadRight}","{NumPadDown}","{NumPadUp}"
,inner,outer)
}
;Quarter-circle
circleQuarter(up,down,left,right,inner,outer)
{
x := 0
y := 0
innerBound := % inner*inner
outerBound := % outer*outer
loop,%outer%
{
if GetKeyState("q", "P")
{
break
}
loop,%outer% ; For a square that is as large as the
outer radius
{
if GetKeyState("q", "P")
{
break
}
if((x*x)+(y*y) <= outerBound && (x*x)+(y*y) >=
innerBound)
{
dig(right,0)
}
move(right,1)
x++
}
move(up,1)
move(left,outer)
y++
x := 0
}
move(down,outer)
}
;Utility functions
dig(dir,number)
{
send d
send {Enter}
move(dir, number)
send {Enter}
}
move(dir,number)
{
loop
{
if GetKeyState("q", "P")
{
break
}
if number <= 0
{
break
}
send %dir%
number--
}
}