
!distribute word $ into x2,y2
!if circle notwordof $minor1 $minor2
 !if $parm1=$parm2
  error=same_point
  !exit
 !endif
 !if $parm1>$linecnt or $parm2>$linecnt
  error=out_range
  !exit
 !endif
 pari_out=!exec pari got=line_intersect($parm1,$parm2); print(got);\
	print(incipl(got));\
	print(incipc(got));\
	print(goalcheck(1,got))
 !distribute lines $pari_out into pout,inci,inci2,goalcheck
 inci=!nospace $inci
 inci2=!nospace $inci2
 !distribute item $pout into x,y
!else
 !if line notwordof $minor1 $minor2
  !if $parm1=$parm2
   error=same_point
   !exit
  !endif
  !if $parm1>$circlecnt or $parm2>$circlecnt
   error=out_range
   !exit
  !endif
  pari_out=!exec pari got=circle_intersect($parm1,$parm2); print(got);\
	print(incipl(got));\
	print(incipc(got)); nn=matsize(got)[2];\
	if(nn==4,print(incipl(vecextract(got,"3..4"))));\
	if(nn==4,print(incipc(vecextract(got,"3..4"))));\
	print(goalcheck(1,vecextract(got,"1..2")));\
	if(nn==4,print(goalcheck(1,vecextract(got,"3..4"))))
 !else
  !if $minor1=circle
   p=$parm1
   parm1=$parm2
   parm2=$p
   minor1=line
   minor2=circle
  !endif
  !if $parm1>$linecnt or $parm2>$circlecnt
   error=out_range
   !exit
  !endif
  pari_out=!exec pari got=lc_intersect($parm1,$parm2); print(got);\
	print(incipl(got));\
	print(incipc(got)); nn=matsize(got)[2];\
	if(nn==4,print(incipl(vecextract(got,"3..4"))));\
	if(nn==4,print(incipc(vecextract(got,"3..4"))));\
	print(goalcheck(1,vecextract(got,"1..2")));\
	if(nn==4,print(goalcheck(1,vecextract(got,"3..4"))))
 !endif
 !distribute lines $pari_out into pout,inci,inci2,inci3,inci4,goalcheck,goalcheck2
 inci=!nospace $inci
 inci2=!nospace $inci2
 inci3=!nospace $inci3
 inci4=!nospace $inci4
 !distribute item $pout into x,y,x2,y2
!endif
!if error iswordof $pari_out
 error=!word 2 of $pari_out
 !exit
!endif
!if $y=$empty
 error=pari_fail
 !exit
!endif

!if $step<$stepcnt
 !read proc/triminci
!endif
points=!line 1 to $pointcnt of $points
hidepoint=!char 1 to $pointcnt of $hidepoint
steplist=!line 1 to $step of $steplist
!if $inci!=$empty
 ii=!replace , by ,l $ in l $inci
!endif
!if $inci2!=$empty
 i2=!replace , by ,c $ in c $inci2
 ii=!append item $i2 to $ii
!endif
!for i in $inci
 l=!line $i of $inciline
 l=!append item $[$pointcnt+1] to $l
 inciline=!replace line number $i by $l in $inciline
!next i
!for i in $inci2
 l=!line $i of $incicircle
 l=!append item $[$pointcnt+1] to $l
 incicircle=!replace line number $i by $l in $incicircle
!next i
!if $minor1=line
 pm=$parm1,$x,$y
 !read proc/segexpand
!endif
!if $minor2=line
 pm=$parm2,$x,$y
 !read proc/segexpand
!endif

!if $y2=$empty
 points=!append line $x,$y,$point_color to $points
 incipoint=!append line $ii to $incipoint
 hidepoint=$hidepoint+
 !advance pointcnt
 steplist=!append line point,$pointcnt,$parm1,$parm2,$minor1,$minor2 to $steplist
 !advance step
 !if $goalcheck>0
  goalready=!replace item number $goalcheck by $step in $goalready
 !endif
!else
 !if $minor1=line
  pm=$parm1,$x2,$y2
  !read proc/segexpand
 !endif
 !if $minor2=line
  pm=$parm2,$x,$y
  !read proc/segexpand
 !endif
 !if $inci3!=$empty
  jj=!replace , by ,l $ in l $inci3
 !endif
 !if $inci4!=$empty
  i2=!replace , by ,c $ in c $inci4
  jj=!append item $i2 to $jj
 !endif
 points=!append line $x,$y,$point_color\
  $x2,$y2,$point_color to $points
 incipoint=!append line $ii\
$jj to $incipoint
 hidepoint=$hidepoint++
 pointcnt=$[$pointcnt+2]
 !for i in $inci3
  l=!line $i of $inciline
  l=!append item $pointcnt to $l
  inciline=!replace line number $i by $l in $inciline
 !next i
 !for i in $inci4
  l=!line $i of $incicircle
  l=!append item $pointcnt to $l
  incicircle=!replace line number $i by $l in $incicircle
 !next i
 steplist=!append line point,$[$pointcnt-1],$parm1,$parm2,$minor1,$minor2\
  point,$pointcnt,$parm1,$parm2,$minor1,$minor2 to $steplist
 step=$[$step+2]
 !if $goalcheck>0
  goalready=!replace item number $goalcheck by $step-1 in $goalready
 !endif
 !if $goalcheck2>0
  goalready=!replace item number $goalcheck2 by $step in $goalready
 !endif
!endif

