    Program e02zafe

!     E02ZAF Example Program Text

!     Mark 24 Release. NAG Copyright 2012.

!     .. Use Statements ..
      Use nag_library, Only: e02zaf, nag_wp
!     .. Implicit None Statement ..
      Implicit None
!     .. Parameters ..
      Integer, Parameter               :: nin = 5, nout = 6
!     .. Local Scalars ..
      Integer                          :: i, iadres, ifail, m, nadres, npoint, &
                                          px, py
!     .. Local Arrays ..
      Real (Kind=nag_wp), Allocatable  :: lamda(:), mu(:), x(:), y(:)
      Integer, Allocatable             :: adres(:), point(:)
!     .. Executable Statements ..
      Write (nout,*) 'E02ZAF Example Program Results'

!     Skip heading in data file
      Read (nin,*)

      Read (nin,*) m
      Read (nin,*) px, py
      nadres = (px-7)*(py-7)
      npoint = m + nadres
      Allocate (adres(nadres),lamda(px),mu(py),x(m),y(m),point(npoint))

!     Read data points and intercepts of panel sides

      Read (nin,*)(x(i),y(i),i=1,m)

      If (px>8) Then
        Read (nin,*) lamda(5:(px-4))
      End If

      If (py>8) Then
        Read (nin,*) mu(5:(py-4))
      End If

!     Sort points into panel order

      ifail = 0
      Call e02zaf(px,py,lamda,mu,m,x,y,point,npoint,adres,nadres,ifail)

!     Output points in panel order

      Do i = 1, nadres
        Write (nout,*)
        Write (nout,99999) 'Panel', i
        iadres = m + i

loop:   Do
          iadres = point(iadres)

          If (iadres<=0) Then
            Exit loop
          End If

          Write (nout,99998) x(iadres), y(iadres)
        End Do loop

      End Do

99999 Format (1X,A,I4)
99998 Format (1X,2F7.2)
    End Program e02zafe
