PROGRAM CIRCLE

      	INTEGER PGBEG, PGBAND
      	INTEGER JUNK, MODE
      	CHARACTER*1 CH
      	REAL X,Y,xp(3),yp(3)
	REAL xcenter,ycenter,r
	REAL a1,a2,a3,a4
	REAL b1,b2,b3,b4

C 	Open device for graphics.

      	IF (PGBEG(0,'?',1,1) .NE. 1) STOP

 
C-------Define the background and line color----------
	
1	call PGSCR(0,1.0,1.0,1.0)
	call PGSCR(1,0.0,0.0,0.0)	
	call pgenv(-50.0,50.0,-50.0,50.0,1,1)
c	call PGSCR(1,0.0,0.0,0.0)	
c	CALL PGBOX('x',5.0,0,'y',5.0,1)
	call pgsci(1)
	call PGSFS(2)

C	Loop to read and display cursor position. Initial position for cursor
C 	is center of viewport. 
C
      	X = 0.0
      	Y = 0.0
      	MODE = 0
	ic=0

10	DO 11 i=1,3
	
		JUNK = PGBAND(MODE, 1, X, Y, X,Y,CH)
          	WRITE (*, '(2F8.3,I4)') X,Y,ICHAR(CH)
C         Check for exit
          	IF (CH.EQ.'/' ) GOTO 20
C         Check for switch of cursor type.
          	IF (CH.EQ.'+') THEN
             	   MODE = MOD(MODE+1,8)
             	   WRITE (*,*) 'Cursor mode:', MODE
             	   GOTO 10
          	END IF
c          	CALL PGPT1(X, Y, ICHAR(CH))
           	CALL PGPT1(X, Y, 3)
		ic=ic+1    
		xp(i)=x
		yp(i)=y
		if (ic .eq. 3) goto 19
11	continue

C ------Calculate the coordinates of the center

19	a1=(yp(1)-yp(2))/(xp(1)-xp(2))
	a2=(yp(1)-yp(3))/(xp(1)-xp(3))
	a3=(yp(1)**2-yp(2)**2+xp(1)**2-xp(2)**2)/(2*(xp(1)-xp(2)))
	a4=(yp(1)**2-yp(3)**2+xp(1)**2-xp(3)**2)/(2*(xp(1)-xp(3)))

	b1=(xp(1)-xp(2))/(yp(1)-yp(2))
	b2=(xp(1)-xp(3))/(yp(1)-yp(3))
	b3=(yp(1)**2-yp(2)**2+xp(1)**2-xp(2)**2)/(2*(yp(1)-yp(2)))
	b4=(yp(1)**2-yp(3)**2+xp(1)**2-xp(3)**2)/(2*(yp(1)-yp(3)))
	
	xcenter=(b3-b4)/(b1-b2)
	ycenter=(a3-a4)/(a1-a2)

c ------Mark the center----------------
	CALL PGPT1(xcenter, ycenter, 3)

c ------Find the radius----------------
	r=(xcenter-xp(1))**2+(ycenter-yp(1))**2
	r=r**0.5

c ------Draw the circle-------------------
	call PGCIRC(xcenter,ycenter,r)
	goto 1

C 	Close the device and exit
20    	CALL PGEND
      	END