FOREIGN MODULE sun_awt_geom;

IMPORT
    java_util := "java.util",
    java_lang := "java.lang",
    java_awt_geom := "java.awt.geom";

TYPE

  AreaOp* = POINTER TO ABSTRACT RECORD (java_lang.Object)    (* Typebound Procedures *)
            STATIC
              CTAG_LEFT*         = 0;
              CTAG_RIGHT*        = 1;
              ETAG_ENTER*        = 1;
              ETAG_EXIT*         = -1;
              ETAG_IGNORE*       = 0;
              RSTAG_INSIDE*      = 1;
              RSTAG_OUTSIDE*     = -1;
              PROCEDURE finalizeSubCurves*(p0 : java_util.Vector;
                                           p1 : java_util.Vector);
              PROCEDURE obstructs*(p0 : REAL;
                                   p1 : REAL;
                                   p2 : INTEGER) : BOOLEAN;
              PROCEDURE resolveLinks*(p0 : java_util.Vector;
                                      p1 : java_util.Vector;
                                      p2 : java_util.Vector);
            END;

  AreaOp$AddOp* = POINTER TO EXTENSIBLE RECORD (AreaOp$CAGOp)    (* Typebound Procedures *)
                  STATIC
                    PROCEDURE Init*() : AreaOp$AddOp,CONSTRUCTOR;
                  END;

  AreaOp$CAGOp* = POINTER TO ABSTRACT RECORD (AreaOp)    (* Typebound Procedures *)
                  STATIC
                    PROCEDURE Init*() : AreaOp$CAGOp,CONSTRUCTOR;
                  END;

  AreaOp$EOWindOp* = POINTER TO EXTENSIBLE RECORD (AreaOp)    (* Typebound Procedures *)
                     STATIC
                       PROCEDURE Init*() : AreaOp$EOWindOp,CONSTRUCTOR;
                     END;

  AreaOp$IntOp* = POINTER TO EXTENSIBLE RECORD (AreaOp$CAGOp)    (* Typebound Procedures *)
                  STATIC
                    PROCEDURE Init*() : AreaOp$IntOp,CONSTRUCTOR;
                  END;

  AreaOp$NZWindOp* = POINTER TO EXTENSIBLE RECORD (AreaOp)    (* Typebound Procedures *)
                     STATIC
                       PROCEDURE Init*() : AreaOp$NZWindOp,CONSTRUCTOR;
                     END;

  AreaOp$SubOp* = POINTER TO EXTENSIBLE RECORD (AreaOp$CAGOp)    (* Typebound Procedures *)
                  STATIC
                    PROCEDURE Init*() : AreaOp$SubOp,CONSTRUCTOR;
                  END;

  AreaOp$XorOp* = POINTER TO EXTENSIBLE RECORD (AreaOp$CAGOp)    (* Typebound Procedures *)
                  STATIC
                    PROCEDURE Init*() : AreaOp$XorOp,CONSTRUCTOR;
                  END;

  Crossings* = POINTER TO ABSTRACT RECORD (java_lang.Object)    (* Typebound Procedures *)
               STATIC
                 debug*         = 0;
                 PROCEDURE findCrossings*(p0 : java_awt_geom.PathIterator;
                                          p1 : REAL;
                                          p2 : REAL;
                                          p3 : REAL;
                                          p4 : REAL) : Crossings;
                 PROCEDURE findCrossings*(p0 : java_util.Vector;
                                          p1 : REAL;
                                          p2 : REAL;
                                          p3 : REAL;
                                          p4 : REAL) : Crossings;
                 PROCEDURE Init*(p0 : REAL;
                                 p1 : REAL;
                                 p2 : REAL;
                                 p3 : REAL) : Crossings,CONSTRUCTOR;
               END;

  Crossings$EvenOdd* = POINTER TO RECORD (Crossings)    (* Typebound Procedures *)
                       STATIC
                         PROCEDURE Init*(p0 : REAL;
                                         p1 : REAL;
                                         p2 : REAL;
                                         p3 : REAL) : Crossings$EvenOdd,CONSTRUCTOR;
                       END;

  Crossings$NonZero* = POINTER TO RECORD (Crossings)    (* Typebound Procedures *)
                       STATIC
                         PROCEDURE Init*(p0 : REAL;
                                         p1 : REAL;
                                         p2 : REAL;
                                         p3 : REAL) : Crossings$NonZero,CONSTRUCTOR;
                       END;

  Curve* = POINTER TO ABSTRACT RECORD (java_lang.Object)    (* Typebound Procedures *)
             direction! : INTEGER;
           STATIC
             DECREASING*             = -1;
             INCREASING*             = 1;
             RECT_INTERSECTS*        = -2147483648;
             TMIN*                   = 0.0010;
             PROCEDURE diffbits*(p0 : REAL;
                                 p1 : REAL) : LONGINT;
             PROCEDURE Init*(p0 : INTEGER) : Curve,CONSTRUCTOR;
             PROCEDURE insertCubic*(    p0 : java_util.Vector;
                                        p1 : REAL;
                                        p2 : REAL;
                                    IN  p3 : ARRAY OF REAL);
             PROCEDURE insertLine*(p0 : java_util.Vector;
                                   p1 : REAL;
                                   p2 : REAL;
                                   p3 : REAL;
                                   p4 : REAL);
             PROCEDURE insertMove*(p0 : java_util.Vector;
                                   p1 : REAL;
                                   p2 : REAL);
             PROCEDURE insertQuad*(    p0 : java_util.Vector;
                                       p1 : REAL;
                                       p2 : REAL;
                                   IN  p3 : ARRAY OF REAL);
             PROCEDURE next*(p0 : REAL) : REAL;
             PROCEDURE orderof*(p0 : REAL;
                                p1 : REAL) : INTEGER;
             PROCEDURE pointCrossingsForCubic*(p0  : REAL;
                                               p1  : REAL;
                                               p2  : REAL;
                                               p3  : REAL;
                                               p4  : REAL;
                                               p5  : REAL;
                                               p6  : REAL;
                                               p7  : REAL;
                                               p8  : REAL;
                                               p9  : REAL;
                                               p10 : INTEGER) : INTEGER;
             PROCEDURE pointCrossingsForLine*(p0 : REAL;
                                              p1 : REAL;
                                              p2 : REAL;
                                              p3 : REAL;
                                              p4 : REAL;
                                              p5 : REAL) : INTEGER;
             PROCEDURE pointCrossingsForPath*(p0 : java_awt_geom.PathIterator;
                                              p1 : REAL;
                                              p2 : REAL) : INTEGER;
             PROCEDURE pointCrossingsForQuad*(p0 : REAL;
                                              p1 : REAL;
                                              p2 : REAL;
                                              p3 : REAL;
                                              p4 : REAL;
                                              p5 : REAL;
                                              p6 : REAL;
                                              p7 : REAL;
                                              p8 : INTEGER) : INTEGER;
             PROCEDURE prev*(p0 : REAL) : REAL;
             PROCEDURE rectCrossingsForCubic*(p0  : INTEGER;
                                              p1  : REAL;
                                              p2  : REAL;
                                              p3  : REAL;
                                              p4  : REAL;
                                              p5  : REAL;
                                              p6  : REAL;
                                              p7  : REAL;
                                              p8  : REAL;
                                              p9  : REAL;
                                              p10 : REAL;
                                              p11 : REAL;
                                              p12 : REAL;
                                              p13 : INTEGER) : INTEGER;
             PROCEDURE rectCrossingsForLine*(p0 : INTEGER;
                                             p1 : REAL;
                                             p2 : REAL;
                                             p3 : REAL;
                                             p4 : REAL;
                                             p5 : REAL;
                                             p6 : REAL;
                                             p7 : REAL;
                                             p8 : REAL) : INTEGER;
             PROCEDURE rectCrossingsForPath*(p0 : java_awt_geom.PathIterator;
                                             p1 : REAL;
                                             p2 : REAL;
                                             p3 : REAL;
                                             p4 : REAL) : INTEGER;
             PROCEDURE rectCrossingsForQuad*(p0  : INTEGER;
                                             p1  : REAL;
                                             p2  : REAL;
                                             p3  : REAL;
                                             p4  : REAL;
                                             p5  : REAL;
                                             p6  : REAL;
                                             p7  : REAL;
                                             p8  : REAL;
                                             p9  : REAL;
                                             p10 : REAL;
                                             p11 : INTEGER) : INTEGER;
             PROCEDURE round*(p0 : REAL) : REAL;
             PROCEDURE signeddiffbits*(p0 : REAL;
                                       p1 : REAL) : LONGINT;
           END;




PROCEDURE (self:AreaOp) calculate*(p0 : java_util.Vector;
                                   p1 : java_util.Vector) : java_util.Vector,NEW,EXTENSIBLE;

PROCEDURE (self:AreaOp) classify*(p0 : Edge) : INTEGER,NEW,ABSTRACT;

PROCEDURE (self:AreaOp) getState*() : INTEGER,NEW,ABSTRACT;

PROCEDURE (self:AreaOp) newRow*(),NEW,ABSTRACT;

PROCEDURE (self:AreaOp$AddOp) newClassification*(p0 : BOOLEAN;
                                                 p1 : BOOLEAN) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:AreaOp$CAGOp) classify*(p0 : Edge) : INTEGER,EXTENSIBLE;

PROCEDURE (self:AreaOp$CAGOp) getState*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:AreaOp$CAGOp) newClassification*(p0 : BOOLEAN;
                                                 p1 : BOOLEAN) : BOOLEAN,NEW,ABSTRACT;

PROCEDURE (self:AreaOp$CAGOp) newRow*(),EXTENSIBLE;

PROCEDURE (self:AreaOp$EOWindOp) classify*(p0 : Edge) : INTEGER,EXTENSIBLE;

PROCEDURE (self:AreaOp$EOWindOp) getState*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:AreaOp$EOWindOp) newRow*(),EXTENSIBLE;

PROCEDURE (self:AreaOp$IntOp) newClassification*(p0 : BOOLEAN;
                                                 p1 : BOOLEAN) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:AreaOp$NZWindOp) classify*(p0 : Edge) : INTEGER,EXTENSIBLE;

PROCEDURE (self:AreaOp$NZWindOp) getState*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:AreaOp$NZWindOp) newRow*(),EXTENSIBLE;

PROCEDURE (self:AreaOp$SubOp) newClassification*(p0 : BOOLEAN;
                                                 p1 : BOOLEAN) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:AreaOp$XorOp) newClassification*(p0 : BOOLEAN;
                                                 p1 : BOOLEAN) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:Crossings) accumulateCubic*(    p0 : REAL;
                                                p1 : REAL;
                                            IN  p2 : ARRAY OF REAL) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Crossings) accumulateLine*(p0 : REAL;
                                           p1 : REAL;
                                           p2 : REAL;
                                           p3 : REAL) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Crossings) accumulateLine*(p0 : REAL;
                                           p1 : REAL;
                                           p2 : REAL;
                                           p3 : REAL;
                                           p4 : INTEGER) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Crossings) accumulateQuad*(    p0 : REAL;
                                               p1 : REAL;
                                           IN  p2 : ARRAY OF REAL) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Crossings) covers*(p0 : REAL;
                                   p1 : REAL) : BOOLEAN,NEW,ABSTRACT;

PROCEDURE (self:Crossings) getXHi*() : REAL,NEW;

PROCEDURE (self:Crossings) getXLo*() : REAL,NEW;

PROCEDURE (self:Crossings) getYHi*() : REAL,NEW;

PROCEDURE (self:Crossings) getYLo*() : REAL,NEW;

PROCEDURE (self:Crossings) isEmpty*() : BOOLEAN,NEW;

PROCEDURE (self:Crossings) print*(),NEW,EXTENSIBLE;

PROCEDURE (self:Crossings) record*(p0 : REAL;
                                   p1 : REAL;
                                   p2 : INTEGER),NEW,ABSTRACT;

PROCEDURE (self:Crossings$EvenOdd) covers*(p0 : REAL;
                                           p1 : REAL) : BOOLEAN;

PROCEDURE (self:Crossings$EvenOdd) record*(p0 : REAL;
                                           p1 : REAL;
                                           p2 : INTEGER),EXTENSIBLE;

PROCEDURE (self:Crossings$NonZero) covers*(p0 : REAL;
                                           p1 : REAL) : BOOLEAN;

PROCEDURE (self:Crossings$NonZero) insert*(p0 : INTEGER;
                                           p1 : REAL;
                                           p2 : REAL;
                                           p3 : INTEGER),NEW,EXTENSIBLE;

PROCEDURE (self:Crossings$NonZero) record*(p0 : REAL;
                                           p1 : REAL;
                                           p2 : INTEGER),EXTENSIBLE;

PROCEDURE (self:Crossings$NonZero) remove*(p0 : INTEGER),NEW,EXTENSIBLE;

PROCEDURE (self:Curve) accumulateCrossings*(p0 : Crossings) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Curve) compareTo*(    p0 : Curve;
                                  IN  p1 : ARRAY OF REAL) : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:Curve) controlPointString*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:Curve) crossingsFor*(p0 : REAL;
                                     p1 : REAL) : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:Curve) dXforT*(p0 : REAL;
                               p1 : INTEGER) : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) dYforT*(p0 : REAL;
                               p1 : INTEGER) : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) enlarge*(p0 : java_awt_geom.Rectangle2D),NEW,ABSTRACT;

PROCEDURE (self:Curve) fairlyClose*(p0 : REAL;
                                    p1 : REAL) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Curve) findIntersect*(    p0  : Curve;
                                      IN  p1  : ARRAY OF REAL;
                                          p2  : REAL;
                                          p3  : INTEGER;
                                          p4  : INTEGER;
                                          p5  : REAL;
                                          p6  : REAL;
                                          p7  : REAL;
                                          p8  : REAL;
                                          p9  : REAL;
                                          p10 : REAL;
                                          p11 : REAL;
                                          p12 : REAL;
                                          p13 : REAL;
                                          p14 : REAL;
                                          p15 : REAL;
                                          p16 : REAL) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:Curve) getDirection*() : INTEGER,NEW;

PROCEDURE (self:Curve) getOrder*() : INTEGER,NEW,ABSTRACT;

PROCEDURE (self:Curve) getReversedCurve*() : Curve,NEW,ABSTRACT;

PROCEDURE (self:Curve) getSegment*(IN  p0 : ARRAY OF REAL) : INTEGER,NEW,ABSTRACT;

PROCEDURE (self:Curve) getSubCurve*(p0 : REAL;
                                    p1 : REAL) : Curve,NEW,EXTENSIBLE;

PROCEDURE (self:Curve) getSubCurve*(p0 : REAL;
                                    p1 : REAL;
                                    p2 : INTEGER) : Curve,NEW,ABSTRACT;

PROCEDURE (self:Curve) getWithDirection*(p0 : INTEGER) : Curve,NEW;

PROCEDURE (self:Curve) getX0*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getX1*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getXBot*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getXMax*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getXMin*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getXTop*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getY0*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getY1*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getYBot*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) getYTop*() : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) nextVertical*(p0 : REAL;
                                     p1 : REAL) : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) refineTforY*(p0 : REAL;
                                    p1 : REAL;
                                    p2 : REAL) : REAL,NEW,EXTENSIBLE;

PROCEDURE (self:Curve) TforY*(p0 : REAL) : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) toString*() : java_lang.String,EXTENSIBLE;

PROCEDURE (self:Curve) XforT*(p0 : REAL) : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) XforY*(p0 : REAL) : REAL,NEW,ABSTRACT;

PROCEDURE (self:Curve) YforT*(p0 : REAL) : REAL,NEW,ABSTRACT;

END sun_awt_geom.