SUB SafeLine(xa,ya,xb,yb,xi,yi,xf,yf,c)		'line from a to b, into rect i,f
 xxi=xi
 yyi=yi
 xxf=xf
 yyf=yf
 IF xxi>xxf THEN xxi=xf:xxf=xi
 IF yyi>yyf THEN yyi=yf:yyf=yi  
 xxa=xa
 yya=ya
 xxb=xb
 yyb=yb
 dx=xb-xa
 dy=yb-ya

 IF xxa<xxi AND xxb<xxi THEN EXIT SUB
 IF xxa>xxf AND xxb>xxf THEN EXIT SUB
 IF yya<yyi AND yyb<yyi THEN EXIT SUB
 IF yya>yyf AND yyb>yyf THEN EXIT SUB

' IF dx=0 AND xxa<xxi OR xxa>xxf THEN EXIT SUB
' IF dy=0 AND yya<yyi OR yya>yyf THEN EXIT SUB

' retta:
' (y-ya)*dx=(x-xa)*dy  y=(x*dy-xa*dy+ya*dx)/dx x=(y*dx-ya*dx+xa*dy)/dy

 IF xxa<xxi AND dx<>0	
  xxa=xxi
  yya=(xxa*dy-xa*dy+ya*dx)/dx
 END IF
 IF yya<yyi AND dy<>0
  yya=yyi
  xxa=(yya*dx-ya*dx+xa*dy)/dy
 END IF
 IF xxa>xxf AND dx<>0
  xxa=xxf
  yya=(xxa*dy-xa*dy+ya*dx)/dx
 END IF
 IF yya>yyf AND dy<>0
  yya=yyf
  xxa=(yya*dx-ya*dx+xa*dy)/dy
 END IF

 IF xxb<xxi AND dx<>0	
  xxb=xxi
  yyb=(xxb*dy-xa*dy+ya*dx)/dx
 END IF
 IF yyb<yyi AND dy<>0
  yyb=yyi
  xxb=(yyb*dx-ya*dx+xa*dy)/dy
 END IF
 IF xxb>xxf AND dx<>0	
  xxb=xxf
  yyb=(xxb*dy-xa*dy+ya*dx)/dx
 END IF
 IF yyb>yyf AND dy<>0
  yyb=yyf
  xxb=(yyb*dx-ya*dx+xa*dy)/dy
 END IF

 LINE (xxa,yya)-(xxb,yyb),c    
END SUB
