      SUBROUTINE MY_GSAREA(IOPT,X,Y,N)
      INCLUDE 'Parametres.f'
c
c pour utiliser la macro d...f (en postscript) 
c il faut aparement ne pas depasser
c une certaine stacksize. L'experience montre qu'il ne faut
c pas depasser 398 points sur le contour. C'est l'objet
c du parameter nmaxstack
c
      PARAMETER (NN=10000,nmod=6,nmaxstack=300)
      REAL*4 X(N),Y(N)
      INTEGER*2 IXY(0:1,0:NN-1)
cc      integer isuc(3)
cc      data isuc /2,3,1/
      LOGICAL*4 DEDANS,DEHORS,ASSEZLOIN
      CHARACTER*2 FIFI
C
      IF (N.GT.NN) PRINT*,'Attention',N,' points (max',NN,')'
      if (ipostscript.eq.1) then
        if (gardefou) then
          dehors = .true.
          do i=1,n
            dehors = dehors.and.assezloin(x(i),y(i))
Cfj            IXY(0,i-1) = INT2(nint(origine_x + facteur_en_x*X(i)))
Cfj            IXY(1,i-1) = INT2(nint(origine_y + facteur_en_y*Y(i)))
            IXY(0,i-1) = nint(origine_x + facteur_en_x*X(i))
            IXY(1,i-1) = nint(origine_y + facteur_en_y*Y(i))
          enddo
          if (dehors) return
        else
          do i=1,n
Cfj            IXY(0,i-1) = INT2(nint(origine_x + facteur_en_x*X(i)))
Cfj            IXY(1,i-1) = INT2(nint(origine_y + facteur_en_y*Y(i)))
            IXY(0,i-1) = nint(origine_x + facteur_en_x*X(i))
            IXY(1,i-1) = nint(origine_y + facteur_en_y*Y(i))
          enddo
        endif
C
        if (icoulfond.ne.icoul_courante) then
          IF (IPSEUDO.NE.0) THEN
            IF (icoulfond.GT.NBCOLDEBASE2
     &.and..not.couleurtrouvee(icoulfond)) CALL CHERCHELACOUL(Icoulfond)
          ENDIF
          call x11loadcolor(icoulfond)
          call x11facette(IXY,N)
          call x11loadcolor(icoul_courante)
        else
          call x11facette(IXY,N)
        endif
        if (iopt.eq.1) then
          ixy(0,n) = ixy(0,0)
          ixy(1,n) = ixy(1,0)
          call x11polyligne(IXY,n+1)
        endif
      else
        if (sauve_graphic) then
          if (iopt.eq.1) call gsplnec(n,x,y)
          return
        endif
        if (i2dfond.ne.0) then
          if (ipostscript.eq.-1) then
            if (gris_fond(1:1).eq.'1') then
              if (iopt.eq.1) call gsplnec(n,x,y)
              return
            endif
          else
            if (couleur_fond(1:5).eq.'1 1 1') then
              if (iopt.eq.1) call gsplnec(n,x,y)
              return
            endif
          endif
        endif
        dedans = .false.
        do i=1,n
          if ((x(i).le.x1_clip.and.x(i).ge.x0_clip).and.
     &        (y(i).le.y1_clip.and.y(i).ge.y0_clip)) then
             dedans=.true.
             goto 1000
          endif
        enddo
        if (.not.dedans) then
          diam = 0.
          do i=1,n-1
            do j=i+1,n
              diam = max( ((x(i)-x(j))**2+(y(i)-y(j))**2),diam )
            enddo
          enddo
          diam = .5*sqrt(diam)
          xx0_clip = x0_clip - diam
          xx1_clip = x1_clip + diam
          yy0_clip = y0_clip - diam
          yy1_clip = y1_clip + diam
          do i=1,n
            if ((x(i).le.xx1_clip.and.x(i).ge.xx0_clip).and.
     &          (y(i).le.yy1_clip.and.y(i).ge.yy0_clip)) then
               dedans=.true.
               goto 1000
            endif
          enddo
        endif
1000    if (dedans) then
          if (n.le.nmaxstack) then
            if (iopt.eq.1) then
              FIFI = ' F'
              if (ityp_ligne.ne.ityp_ligne_pend
     &        .or.epais_ligne.ne.epais_ligne_pend)
     &             call ecrligne(bid,ibid,0)
              if (ipostscript.ne.-1.and.icoul_pend.ne.icoul_eff) then
                call ecriscoul(icoul_pend)
              endif
            else
              FIFI = ' f'
            endif
            bufferout(1:1) = 'd'
            iptbuf = 2
            if (n.le.nmod) then
c rectangle
              if (n.eq.4) then
                ix1 = nint(1000.*(origine_x + facteur_en_x*X(1)))
                ix2 = nint(1000.*(origine_x + facteur_en_x*X(2)))
                ix3 = nint(1000.*(origine_x + facteur_en_x*X(3)))
                ix4 = nint(1000.*(origine_x + facteur_en_x*X(4)))
                iy1 = nint(1000.*(origine_y + facteur_en_y*Y(1)))
                iy2 = nint(1000.*(origine_y + facteur_en_y*Y(2)))
                iy3 = nint(1000.*(origine_y + facteur_en_y*Y(3)))
                iy4 = nint(1000.*(origine_y + facteur_en_y*Y(4)))
                if (ix1.eq.ix2.and.ix3.eq.ix4
     &         .and.iy1.eq.iy4.and.iy2.eq.iy3) then
                  irect = 1
                elseif(ix1.eq.ix4.and.ix2.eq.ix3
     &            .and.iy1.eq.iy2.and.iy3.eq.iy4) then
                  irect = 2
                else
                  irect = 0
                endif
              else
                irect = 0
              endif
              if (irect.eq.0) then
                do i=1,n
                  XX = origine_x + facteur_en_x*X(I)
                  YY = origine_y + facteur_en_y*Y(I)
                  call ecrispascher(xx)
                  call ecrispascher(yy)
                enddo
              else
                call ecrispascheri(ix1)
                call ecrispascheri(iy1)
                if (irect.eq.1) then
                  call ecrispascheri(ix3)
                  call ecrispascheri(iy2)
                else
                  call ecrispascheri(ix2)
                  call ecrispascheri(iy3)
                endif
                if (iopt.eq.1) then
                  FIFI = ' Q'
                else
                  FIFI = ' q'
                endif
              endif
            else
              k = n/nmod
              ii = 0
              do j=1,k
                do i=1,nmod
                  ii = ii+1
                  XX = origine_x + facteur_en_x*X(II)
                  YY = origine_y + facteur_en_y*Y(II)
                  if (i.eq.1.and.j.gt.1) then
                    call ecrispascher0(xx)
                  else
                    call ecrispascher(xx)
                  endif
                  if (i.eq.nmod) then
                    call ecrispascher2(ilaser_file,yy)
                  else
                    call ecrispascher(yy)
                  endif
                enddo
              enddo
              if (ii.lt.n) then
                jj = ii
                do i=ii+1,n
                  jj = jj+1
                  XX = origine_x + facteur_en_x*X(jj)
                  YY = origine_y + facteur_en_y*Y(jj)
                  if (i.eq.ii+1) then
                    call ecrispascher0(xx)
                  else
                    call ecrispascher(xx)
                  endif
                  call ecrispascher(yy)
                enddo
              endif            
            endif
            if (ipostscript.eq.-1) then
              iptbuf2 = iptbuf+lgris_fond+2
              bufferout(iptbuf:iptbuf2) =
     &             ' '//gris_fond(1:lgris_fond)//FIFI
            else
              iptbuf2 = iptbuf+lcouleur_fond+2
              bufferout(iptbuf:iptbuf2) =
     &             ' '//couleur_fond(1:lcouleur_fond)//FIFI
            endif
            write(ilaser_file,'(a)') bufferout(1:iptbuf2)
            do i=1,iptbuf2
              bufferout(i:i) = ' '
            enddo
            iptbuf = 1
          else
            if (ipostscript.eq.-1) then
              write(ilaser_file,'(1x,a)') gris_fond(1:lgris_fond)//' g'
            else
              write(ilaser_file,'(1x,a)') 
     &              couleur_fond(1:lcouleur_fond)//' c'
            endif
            call gsmove(x(1),y(1))
            call gsplne(n,x,y)
            backspace(ilaser_file)
            write(ilaser_file,'(a)') 'fill'
          endif
        endif
Cfj        if (iopt.eq.1) then
Cfj          call gsplnec(n,x,y)
Cfj        endif
      endif
      end
