[color=Green]REM === DRAW a LINE. Ported from BBC Basic version. AllyCat December 2016.
REM Inputs are X1, Y1, X2, Y2:
REM Does not destroys values of X1, Y1
REM JYB and Hippy optimised[/color]
[color=Navy]#simspeed 20
#picaxe [/color][color=Black]08m2 [/color][color=Green]; And almost any other[/color]
[color=Blue]symbol [/color][color=Purple]x1 [/color][color=DarkCyan]= [/color][color=Purple]b3[/color]
[color=Blue]symbol [/color][color=Purple]x2 [/color][color=DarkCyan]= [/color][color=Purple]b4[/color]
[color=Blue]symbol [/color][color=Purple]y1 [/color][color=DarkCyan]= [/color][color=Purple]b5 [/color]
[color=Blue]symbol [/color][color=Purple]y2 [/color][color=DarkCyan]= [/color][color=Purple]b6[/color]
[color=Blue]symbol [/color][color=Purple]sx [/color][color=DarkCyan]= [/color][color=Purple]b7[/color]
[color=Blue]symbol [/color][color=Purple]sy [/color][color=DarkCyan]= [/color][color=Purple]b8[/color]
[color=Blue]symbol [/color][color=Purple]dx [/color][color=DarkCyan]= [/color][color=Purple]w7[/color]
[color=Blue]symbol [/color][color=Purple]dy [/color][color=DarkCyan]= [/color][color=Purple]w8[/color]
[color=Blue]symbol [/color][color=Purple]er [/color][color=DarkCyan]= [/color][color=Purple]w0 [/color]
[color=Navy]#macro [/color][color=Black]Plot[/color][color=Blue]([/color][color=Black]pX,pY[/color][color=Blue])
sertxd([/color][color=Black]#pX,[/color][color=Red]" "[/color][color=Black],#pY,[/color][color=Blue]cr)[/color]
[color=Navy]#endmacro
#macro [/color][color=Black]DrawLine[/color][color=Blue]([/color][color=Black]XX1,YY1,XX2,YY2[/color][color=Blue])
[/color][color=Purple]x1 [/color][color=DarkCyan]=[/color][color=Black]xx1
[/color][color=Purple]y1 [/color][color=DarkCyan]= [/color][color=Black]yy1
[/color][color=Purple]x2 [/color][color=DarkCyan]= [/color][color=Black]xx2
[/color][color=Purple]y2 [/color][color=DarkCyan]= [/color][color=Black]yy2
[/color][color=Blue]GOSUB [/color][color=Black]Line[/color]
[color=Navy]#endmacro[/color]
[color=Black]DrawLine[/color][color=Blue]([/color][color=Navy]0[/color][color=Black],[/color][color=Navy]10[/color][color=Black],[/color][color=Navy]10[/color][color=Black],[/color][color=Navy]3[/color][color=Blue])[/color]
[color=Black]DrawLine[/color][color=Blue]([/color][color=Navy]10[/color][color=Black],[/color][color=Navy]10[/color][color=Black],[/color][color=Navy]0[/color][color=Black],[/color][color=Navy]3[/color][color=Blue])[/color]
[color=Black]DrawLine[/color][color=Blue]([/color][color=Navy]10[/color][color=Black],[/color][color=Navy]12[/color][color=Black],[/color][color=Navy]10[/color][color=Black],[/color][color=Navy]3[/color][color=Blue])[/color]
[color=Black]DrawLine[/color][color=Blue]([/color][color=Navy]10[/color][color=Black],[/color][color=Navy]3[/color][color=Black],[/color][color=Navy]0[/color][color=Black],[/color][color=Navy]3[/color][color=Blue])[/color]
[color=Green]'DrawLine(127,63,127,0)
'DrawLine(0,63,0,0)[/color]
[color=Blue]end[/color]
[color=Black]Line:[/color]
[color=Blue]sertxd(cr[/color][color=Black],[/color][color=Blue]cr[/color][color=Black],#[/color][color=Purple]X1[/color][color=Black],[/color][color=Red]", "[/color][color=Black],#[/color][color=Purple]Y1[/color][color=Black],[/color][color=Red]" -- "[/color][color=Black],#[/color][color=Purple]X2[/color][color=Black],[/color][color=Red]", "[/color][color=Black],#[/color][color=Purple]Y2[/color][color=Black],[/color][color=Blue]cr)
if [/color][color=Purple]x1 [/color][color=DarkCyan]< [/color][color=Purple]x2 [/color][color=Blue]then [/color][color=Black]: [/color][color=Purple]sx [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Black]: [/color][color=Purple]dx [/color][color=DarkCyan]= [/color][color=Purple]x2 [/color][color=DarkCyan]- [/color][color=Purple]x1 [/color][color=Black]: [/color][color=Blue]else [/color][color=Purple]sx [/color][color=DarkCyan]= -[/color][color=Navy]1 [/color][color=Black]: [/color][color=Purple]dx [/color][color=DarkCyan]= [/color][color=Purple]x1 [/color][color=DarkCyan]- [/color][color=Purple]x2 [/color][color=Black]: [/color][color=Blue]endif
if [/color][color=Purple]y1 [/color][color=DarkCyan]< [/color][color=Purple]y2 [/color][color=Blue]then [/color][color=Black]: [/color][color=Purple]sy [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Black]: [/color][color=Purple]dy [/color][color=DarkCyan]= [/color][color=Purple]y2 [/color][color=DarkCyan]- [/color][color=Purple]y1 [/color][color=Black]: [/color][color=Blue]else [/color][color=Purple]sy [/color][color=DarkCyan]= -[/color][color=Navy]1 [/color][color=Black]: [/color][color=Purple]dy [/color][color=DarkCyan]= [/color][color=Purple]y1 [/color][color=DarkCyan]- [/color][color=Purple]y2 [/color][color=Black]: [/color][color=Blue]endif
if [/color][color=Purple]dx [/color][color=DarkCyan]> [/color][color=Purple]dy [/color][color=Blue]then [/color][color=Black]: [/color][color=Purple]er [/color][color=DarkCyan]= [/color][color=Purple]dx [/color][color=Black]: [/color][color=Blue]else [/color][color=Purple]er [/color][color=DarkCyan]= [/color][color=Purple]dy [/color][color=Black]: [/color][color=Blue]endif [/color][color=Green]; Don't divide "er" by 2[/color]
[color=Purple]dx [/color][color=DarkCyan]=[/color][color=Purple]dx[/color][color=DarkCyan]+[/color][color=Purple]dx [/color][color=Black]: [/color][color=Purple]dy [/color][color=DarkCyan]=[/color][color=Purple]dy[/color][color=DarkCyan]+[/color][color=Purple]dy[/color]
[color=Blue]if [/color][color=Purple]dx [/color][color=DarkCyan]> [/color][color=Purple]dy [/color][color=Blue]then
do
[/color][color=Black]plot[/color][color=Blue]([/color][color=Purple]X1[/color][color=Black],[/color][color=Purple]Y1[/color][color=Blue])
if [/color][color=Purple]x1 [/color][color=DarkCyan]= [/color][color=Purple]x2 [/color][color=Blue]then exit [/color][color=Green]; Or return from subroutine
[/color][color=Purple]x1 [/color][color=DarkCyan]= [/color][color=Purple]x1 [/color][color=DarkCyan]+ [/color][color=Purple]sx [/color][color=Black]: [/color][color=Purple]er [/color][color=DarkCyan]= [/color][color=Purple]er [/color][color=DarkCyan]- [/color][color=Purple]dy
[/color][color=Blue]if [/color][color=Purple]bit15[/color][color=DarkCyan]=[/color][color=Navy]1 [/color][color=Blue]then [/color][color=Green]; It's Negative
[/color][color=Purple]er [/color][color=DarkCyan]= [/color][color=Purple]er [/color][color=DarkCyan]+ [/color][color=Purple]dx [/color][color=Black]: [/color][color=Purple]y1 [/color][color=DarkCyan]= [/color][color=Purple]y1 [/color][color=DarkCyan]+ [/color][color=Purple]sy
[/color][color=Blue]endif
loop
else
do
[/color][color=Black]plot[/color][color=Blue]([/color][color=Purple]X1[/color][color=Black],[/color][color=Purple]Y1[/color][color=Blue])
if [/color][color=Purple]y1 [/color][color=DarkCyan]= [/color][color=Purple]y2 [/color][color=Blue]then exit [/color][color=Green]; Or return from subroutine
[/color][color=Purple]y1 [/color][color=DarkCyan]= [/color][color=Purple]y1 [/color][color=DarkCyan]+ [/color][color=Purple]sy [/color][color=Black]: [/color][color=Purple]er [/color][color=DarkCyan]= [/color][color=Purple]er [/color][color=DarkCyan]- [/color][color=Purple]dx
[/color][color=Blue]if [/color][color=Purple]bit15[/color][color=DarkCyan]=[/color][color=Navy]1 [/color][color=Blue]then
[/color][color=Purple]er [/color][color=DarkCyan]= [/color][color=Purple]er [/color][color=DarkCyan]+ [/color][color=Purple]dy [/color][color=Black]: [/color][color=Purple]x1 [/color][color=DarkCyan]= [/color][color=Purple]x1 [/color][color=DarkCyan]+ [/color][color=Purple]sx
[/color][color=Blue]endif
loop
endif
return[/color]