[cairo] arc_to again

Behdad Esfahbod behdad at cs.toronto.edu
Tue Aug 9 20:29:18 PDT 2005


Hi,

I reworked the arc_to patch, added comments, overly commented
actually.  As per cworth's principle that "small changes in the
input should result in small changes in the visual output", I
decided to reduce the radius when the arc doesn't fit.

The problem with not doing this is that as the angle that the arc
has got to fit in approaches zero, the arc would go farther and
farther from the scene, and when finally the angle becomes zero,
the arc should be placed at infinity, so a decision should be
made, which most probably is to not draw the arc at all and the
visual appearance changes drastically.  So I went for reducing
the radius, that looks pretty smooth.

I'm attaching both the old and new patchesh, and the arclock test
code.  Run arclock with both patches and decide which one you
prefer to get in.  The patches include the sincos stuff too.


Cheers,

--behdad
http://behdad.org/
-------------- next part --------------
Index: configure.in
===================================================================
RCS file: /cvs/cairo/cairo/configure.in,v
retrieving revision 1.111
diff -u -p -r1.111 configure.in
--- configure.in	18 Jul 2005 18:51:42 -0000	1.111
+++ configure.in	27 Jul 2005 06:07:24 -0000
@@ -31,20 +31,19 @@ AM_CONFIG_HEADER(config.h)
 
 AM_MAINTAINER_MODE
 
+AC_GNU_SOURCE
 AC_PROG_CC
 AC_PROG_CPP
 AM_PROG_LIBTOOL
 AC_STDC_HEADERS
 AC_C_BIGENDIAN
 
-AC_CHECK_FUNCS(vasnprintf)
-	
+AC_CHECK_FUNCS(vasnprintf, sincos)
+
 AC_CHECK_LIBM
 
 LIBS="$LIBS $LIBM"
 
-AC_CHECK_FUNCS(sincos)
-
 dnl ===========================================================================
 
 AC_ARG_ENABLE(xlib,
Index: src/cairo-arc-private.h
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo-arc-private.h,v
retrieving revision 1.1
diff -u -p -r1.1 cairo-arc-private.h
--- src/cairo-arc-private.h	26 Apr 2005 19:38:06 -0000	1.1
+++ src/cairo-arc-private.h	27 Jul 2005 06:07:24 -0000
@@ -54,4 +54,11 @@ _cairo_arc_path_negative (cairo_t *cr,
 			  double   angle1,
 			  double   angle2);
 
+void
+_cairo_arc_with_handle (cairo_t *cr,
+			double x0, double y0,
+			double x1, double y1,
+			double x2, double y2,
+			double radius);
+
 #endif /* CAIRO_ARC_PRIVATE_H */
Index: src/cairo-arc.c
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo-arc.c,v
retrieving revision 1.3
diff -u -p -r1.3 cairo-arc.c
--- src/cairo-arc.c	11 Jul 2005 20:29:46 -0000	1.3
+++ src/cairo-arc.c	27 Jul 2005 06:07:24 -0000
@@ -61,7 +61,10 @@
 static double
 _arc_error_normalized (double angle)
 {
-    return 2.0/27.0 * pow (sin (angle / 4), 6) / pow (cos (angle / 4), 2);
+    double sin_, cos_;
+
+    _cairo_sincos (angle / 4, &sin_, &cos_);
+    return 2.0/27.0 * pow (sin_, 6) / pow (cos_, 2);
 }
 
 static double
@@ -164,10 +167,12 @@ _cairo_arc_segment (cairo_t *cr,
     double r_sin_B, r_cos_B;
     double h;
 
-    r_sin_A = radius * sin (angle_A);
-    r_cos_A = radius * cos (angle_A);
-    r_sin_B = radius * sin (angle_B);
-    r_cos_B = radius * cos (angle_B);
+    _cairo_sincos (angle_A, &r_sin_A, &r_cos_A);
+    _cairo_sincos (angle_B, &r_sin_B, &r_cos_B);
+    r_sin_A *= radius;
+    r_cos_A *= radius;
+    r_sin_B *= radius;
+    r_cos_B *= radius;
 
     h = 4.0/3.0 * tan ((angle_B - angle_A) / 4.0);
 
@@ -296,3 +301,49 @@ _cairo_arc_path_negative (cairo_t *cr,
 			     angle2, angle1,
 			     CAIRO_DIRECTION_REVERSE);
 }
+
+void
+_cairo_arc_with_handle (cairo_t *cr,
+			double x0, double y0,
+			double x1, double y1,
+			double x2, double y2,
+			double radius)
+{
+    double angle0, angle1, angle2, angled;
+    double xc, yc, dc;
+    cairo_direction_t dir;
+
+    angle0 = atan2 (y0 - y1, x0 - x1);
+    angle2 = atan2 (y2 - y1, x2 - x1);
+    angle1 = (angle0 + angle2) / 2;
+
+    angled = angle2 - angle0;
+
+    if (angled > M_PI || (angled < 0 && angled > -M_PI)) {
+      angle1 += M_PI;
+      angled = 2 * M_PI - angled;
+      angle0 += M_PI_2;
+      angle2 -= M_PI_2;
+      dir = CAIRO_DIRECTION_FORWARD;
+    } else {
+      angle0 -= M_PI_2;
+      angle2 += M_PI_2;
+      dir = CAIRO_DIRECTION_REVERSE;
+    }
+
+    /* distance of center from (x1,y1) */
+    dc = radius / sin (angled / 2);
+
+    _cairo_sincos (angle1, &yc, &xc);
+    xc = x1 + xc * dc;
+    yc = y1 + yc * dc;
+    /* (cx,cy) is the center of arc now */
+
+    if (dir == CAIRO_DIRECTION_FORWARD)
+      cairo_arc (cr, xc, yc, radius, angle0, angle2);
+    else
+      cairo_arc_negative (cr, xc, yc, radius, angle0, angle2);
+
+    cairo_line_to (cr, x2, y2);
+}
+
Index: src/cairo-matrix.c
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo-matrix.c,v
retrieving revision 1.29
diff -u -p -r1.29 cairo-matrix.c
--- src/cairo-matrix.c	20 Jun 2005 19:54:15 -0000	1.29
+++ src/cairo-matrix.c	27 Jul 2005 06:07:24 -0000
@@ -227,17 +227,12 @@ void
 cairo_matrix_init_rotate (cairo_matrix_t *matrix,
 			  double radians)
 {
-    double  s;
-    double  c;
-#if HAVE_SINCOS
-    sincos (radians, &s, &c);
-#else
-    s = sin (radians);
-    c = cos (radians);
-#endif
+    double  sin_, cos_;
+
+    _cairo_sincos (radians, &sin_, &cos_);
     cairo_matrix_init (matrix,
-		       c, s,
-		       -s, c,
+		       cos_, sin_,
+		       -sin_, cos_,
 		       0, 0);
 }
 slim_hidden_def(cairo_matrix_init_rotate);
Index: src/cairo-pattern.c
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo-pattern.c,v
retrieving revision 1.50
diff -u -p -r1.50 cairo-pattern.c
--- src/cairo-pattern.c	14 Jul 2005 22:47:18 -0000	1.50
+++ src/cairo-pattern.c	27 Jul 2005 06:07:25 -0000
@@ -1100,6 +1100,8 @@ _cairo_image_data_set_radial (cairo_radi
 		denumerator = -2.0 * c0_e * c0_c1;
 		
 		if (denumerator != 0.0) {
+		    double sin_, cos_;
+
 		    fraction = (c1_e * c1_e - c0_e * c0_e - c0_c1 * c0_c1) /
 			denumerator;
 
@@ -1110,8 +1112,9 @@ _cairo_image_data_set_radial (cairo_radi
 		    
 		    angle_c0 = acos (fraction);
 		    
-		    c0_y = cos (angle_c0) * c0_c1;
-		    c1_y = sin (angle_c0) * c0_c1;
+		    _cairo_sincos (angle_c0, &sin_, &cos_);
+		    c0_y = cos_ * c0_c1;
+		    c1_y = sin_ * c0_c1;
 		    
 		    y_x = sqrt (r1_2 - c1_y * c1_y);
 		    c0_x = y_x + c0_y;
Index: src/cairo-pen.c
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo-pen.c,v
retrieving revision 1.23
diff -u -p -r1.23 cairo-pen.c
--- src/cairo-pen.c	7 Apr 2005 17:01:49 -0000	1.23
+++ src/cairo-pen.c	27 Jul 2005 06:07:25 -0000
@@ -102,8 +102,11 @@ _cairo_pen_init (cairo_pen_t *pen, doubl
      */
     for (i=0; i < pen->num_vertices; i++) {
 	double theta = 2 * M_PI * i / (double) pen->num_vertices;
-	double dx = radius * cos (reflect ? -theta : theta);
-	double dy = radius * sin (reflect ? -theta : theta);
+	double dx, dy;
+
+	_cairo_sincos (reflect ? -theta : theta, &dx, &dy);
+	dx *= radius;
+	dy *= radius;
 	cairo_pen_vertex_t *v = &pen->vertices[i];
 	cairo_matrix_transform_distance (&gstate->ctm, &dx, &dy);
 	v->point.x = _cairo_fixed_from_double (dx);
Index: src/cairo.c
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo.c,v
retrieving revision 1.114
diff -u -p -r1.114 cairo.c
--- src/cairo.c	25 Jul 2005 19:29:24 -0000	1.114
+++ src/cairo.c	27 Jul 2005 06:07:25 -0000
@@ -1013,6 +1013,8 @@ cairo_arc (cairo_t *cr,
 	   double radius,
 	   double angle1, double angle2)
 {
+    double sin_, cos_;
+
     if (cr->status) {
 	_cairo_error (cr, cr->status);
 	return;
@@ -1025,9 +1027,11 @@ cairo_arc (cairo_t *cr,
     while (angle2 < angle1)
 	angle2 += 2 * M_PI;
 
+    _cairo_sincos (angle1, &sin_, &cos_);
+
     cairo_line_to (cr,
-		   xc + radius * cos (angle1),
-		   yc + radius * sin (angle1));
+		   xc + radius * cos_,
+		   yc + radius * sin_);
 
     _cairo_arc_path (cr, xc, yc, radius,
 		     angle1, angle2);
@@ -1053,6 +1057,8 @@ cairo_arc_negative (cairo_t *cr,
 		    double radius,
 		    double angle1, double angle2)
 {
+    double sin_, cos_;
+
     if (cr->status) {
 	_cairo_error (cr, cr->status);
 	return;
@@ -1065,30 +1071,37 @@ cairo_arc_negative (cairo_t *cr,
     while (angle2 > angle1)
 	angle2 -= 2 * M_PI;
 
+    _cairo_sincos (angle1, &sin_, &cos_);
+
     cairo_line_to (cr,
-		   xc + radius * cos (angle1),
-		   yc + radius * sin (angle1));
+		   xc + radius * cos_,
+		   yc + radius * sin_);
 
-     _cairo_arc_path_negative (cr, xc, yc, radius,
-			       angle1, angle2);
+    _cairo_arc_path_negative (cr, xc, yc, radius,
+			      angle1, angle2);
 }
 
-/* XXX: NYI
 void
 cairo_arc_to (cairo_t *cr,
 	      double x1, double y1,
 	      double x2, double y2,
 	      double radius)
 {
+    double x0, y0;
+
     if (cr->status)
 	return;
 
-    cr->status = _cairo_gstate_arc_to (cr->gstate,
-				       x1, y1,
-				       x2, y2,
-				       radius);
+    cairo_get_current_point (cr, &x0, &y0);
+
+
+
+    _cairo_arc_with_handle (cr,
+			    x0, y0,
+			    x1, y1,
+			    x2, y2,
+			    radius);
 }
-*/
 
 void
 cairo_rel_move_to (cairo_t *cr, double dx, double dy)
Index: src/cairo.h
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo.h,v
retrieving revision 1.139
diff -u -p -r1.139 cairo.h
--- src/cairo.h	25 Jul 2005 19:29:24 -0000	1.139
+++ src/cairo.h	27 Jul 2005 06:07:26 -0000
@@ -412,13 +412,11 @@ cairo_arc_negative (cairo_t *cr,
 		    double radius,
 		    double angle1, double angle2);
 
-/* XXX: NYI
 void
 cairo_arc_to (cairo_t *cr,
 	      double x1, double y1,
 	      double x2, double y2,
 	      double radius);
-*/
 
 void
 cairo_rel_move_to (cairo_t *cr, double dx, double dy);
Index: src/cairoint.h
===================================================================
RCS file: /cvs/cairo/cairo/src/cairoint.h,v
retrieving revision 1.169
diff -u -p -r1.169 cairoint.h
--- src/cairoint.h	25 Jul 2005 23:23:05 -0000	1.169
+++ src/cairoint.h	27 Jul 2005 06:07:26 -0000
@@ -65,6 +65,16 @@
 #include "cairo.h"
 #include <pixman.h>
 
+#if HAVE_SINCOS
+# define _cairo_sincos(angle,s,c) sincos((angle), (s), (c))
+#else
+# define _cairo_sincos(angle,s,c) do { \
+	double _sincos_angle = (angle); \
+	*(s) = sin(_sincos_angle); \
+	*(c) = cos(_sincos_angle); \
+	} while (0)
+#endif
+
 #if __GNUC__ >= 3 && defined(__ELF__)
 # define slim_hidden_proto(name)	slim_hidden_proto1(name, INT_##name)
 # define slim_hidden_def(name)		slim_hidden_def1(name, INT_##name)
-------------- next part --------------
SW5kZXg6IHNyYy9jYWlyby1hcmMtcHJpdmF0ZS5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9jYWlyby9jYWlyby9zcmMvY2Fp
cm8tYXJjLXByaXZhdGUuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQ0K
ZGlmZiAtdSAtcCAtcjEuMSBjYWlyby1hcmMtcHJpdmF0ZS5oDQotLS0gc3Jj
L2NhaXJvLWFyYy1wcml2YXRlLmgJMjYgQXByIDIwMDUgMTk6Mzg6MDYgLTAw
MDAJMS4xDQorKysgc3JjL2NhaXJvLWFyYy1wcml2YXRlLmgJMTAgQXVnIDIw
MDUgMDM6MjI6MjggLTAwMDANCkBAIC01NCw0ICs1NCwxMSBAQCBfY2Fpcm9f
YXJjX3BhdGhfbmVnYXRpdmUgKGNhaXJvX3QgKmNyLA0KIAkJCSAgZG91Ymxl
ICAgYW5nbGUxLA0KIAkJCSAgZG91YmxlICAgYW5nbGUyKTsNCiANCit2b2lk
DQorX2NhaXJvX2FyY193aXRoX2hhbmRzIChjYWlyb190ICpjciwNCisJCQlk
b3VibGUgeDAsIGRvdWJsZSB5MCwNCisJCQlkb3VibGUgeDEsIGRvdWJsZSB5
MSwNCisJCQlkb3VibGUgeDIsIGRvdWJsZSB5MiwNCisJCQlkb3VibGUgcmFk
aXVzKTsNCisNCiAjZW5kaWYgLyogQ0FJUk9fQVJDX1BSSVZBVEVfSCAqLw0K
SW5kZXg6IHNyYy9jYWlyby1hcmMuYw0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KUkNTIGZpbGU6IC9jdnMvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWFyYy5j
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40DQpkaWZmIC11IC1wIC1yMS40
IGNhaXJvLWFyYy5jDQotLS0gc3JjL2NhaXJvLWFyYy5jCTUgQXVnIDIwMDUg
MTc6MDU6MjkgLTAwMDAJMS40DQorKysgc3JjL2NhaXJvLWFyYy5jCTEwIEF1
ZyAyMDA1IDAzOjIyOjI4IC0wMDAwDQpAQCAtNTksNyArNTksMTAgQEANCiBz
dGF0aWMgZG91YmxlDQogX2FyY19lcnJvcl9ub3JtYWxpemVkIChkb3VibGUg
YW5nbGUpDQogew0KLSAgICByZXR1cm4gMi4wLzI3LjAgKiBwb3cgKHNpbiAo
YW5nbGUgLyA0KSwgNikgLyBwb3cgKGNvcyAoYW5nbGUgLyA0KSwgMik7DQor
ICAgIGRvdWJsZSBzaW5fLCBjb3NfOw0KKw0KKyAgICBfY2Fpcm9fc2luY29z
IChhbmdsZSAvIDQsICZzaW5fLCAmY29zXyk7DQorICAgIHJldHVybiAyLjAv
MjcuMCAqIHBvdyAoc2luXywgNikgLyBwb3cgKGNvc18sIDIpOw0KIH0NCiAN
CiBzdGF0aWMgZG91YmxlDQpAQCAtNzMsOCArNzYsNiBAQCBfYXJjX21heF9h
bmdsZV9mb3JfdG9sZXJhbmNlX25vcm1hbGl6ZWQgDQogCWRvdWJsZSBhbmds
ZTsNCiAJZG91YmxlIGVycm9yOw0KICAgICB9IHRhYmxlW10gPSB7DQotCXsg
TV9QSSAvIDEuMCwgICAwLjAxODUxODUxODUxODUxODUwMzYxMjcgfSwNCi0J
eyBNX1BJIC8gMi4wLCAgIDAuMDAwMjcyNTY3MTQzNzMwMTc5ODExMTU4IH0s
DQogCXsgTV9QSSAvIDMuMCwgICAyLjM4NjQ3MDQzNjUxNDYxMDQ3NDMzZS0w
NSB9LA0KIAl7IE1fUEkgLyA0LjAsICAgNC4yNDU1Mzc3NDQzMjIyNDQzMjc5
ZS0wNiB9LA0KIAl7IE1fUEkgLyA1LjAsICAgMS4xMTI4MTAwMTQ5NDM4OTA4
MTUyOGUtMDYgfSwNCkBAIC0xNjIsMTAgKzE2MywxMiBAQCBfY2Fpcm9fYXJj
X3NlZ21lbnQgKGNhaXJvX3QgKmNyLA0KICAgICBkb3VibGUgcl9zaW5fQiwg
cl9jb3NfQjsNCiAgICAgZG91YmxlIGg7DQogDQotICAgIHJfc2luX0EgPSBy
YWRpdXMgKiBzaW4gKGFuZ2xlX0EpOw0KLSAgICByX2Nvc19BID0gcmFkaXVz
ICogY29zIChhbmdsZV9BKTsNCi0gICAgcl9zaW5fQiA9IHJhZGl1cyAqIHNp
biAoYW5nbGVfQik7DQotICAgIHJfY29zX0IgPSByYWRpdXMgKiBjb3MgKGFu
Z2xlX0IpOw0KKyAgICBfY2Fpcm9fc2luY29zIChhbmdsZV9BLCAmcl9zaW5f
QSwgJnJfY29zX0EpOw0KKyAgICBfY2Fpcm9fc2luY29zIChhbmdsZV9CLCAm
cl9zaW5fQiwgJnJfY29zXfc-list.man,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fc-list/Attic/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fc-list/Attic/Makefile.in,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fontconfig
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fontconfig/Attic
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fontconfig/Attic/fcfreetype.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fontconfig/Attic/fcprivate.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fontconfig/Attic/fontconfig.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fontconfig/Attic/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/fontconfig/Attic/Makefile.in,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcatomic.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcblanks.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fccache.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fccfg.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fccharset.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcdbg.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcdefault.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcdir.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcfreetype.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcfs.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcinit.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcint.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcknownsets.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fclang.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fclist.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcmatch.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcmatrix.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcname.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcpat.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcstr.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fcxml.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fontconfig-def.cpp,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/fontconfig.man,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontconfig/src/Attic/Makefile.in,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontenc
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontenc/fontenc-def.cpp,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/fontenc/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype-def.cpp,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/cache
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/cache/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/config
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/config/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/internal
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/internal/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/internal/services
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/internal/services/Attic
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/freetype/internal/services/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/freetype2/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FS-def.cpp,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSCloseFt.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSClServ.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSConnServ.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSErrDis.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSErrHndlr.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSFlush.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSFontInfo.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSFtNames.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSGetCats.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSlib.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSlibInt.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSlibint.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSlibos.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSListCats.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSListExt.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSMisc.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSNextEv.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSOpenFont.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSOpenServ.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSQGlyphs.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSQuExt.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSQXExt.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSQXInfo.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSServName.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSSetCats.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSSync.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/FSSynchro.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/FS/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/appledri.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/appledri.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/appledristr.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/build-dispatch,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/dri_dispatch.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/dri_dispatch.defs,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/dri_dispatch.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/dri_driver.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/dri_driver.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/dri_glx.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/dri_glx.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/apple/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/Attic
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/Attic/highpc.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/Attic/lowpc.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/Attic/makeprofile.sh,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic/dri_glx.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic/dri_glx.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic/dri_util.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic/dri_util.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic/XF86dri.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic/xf86dri.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/Attic/xf86dristr.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/drm
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/dri/drm/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/dri
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/dri/drm
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/GL-def.cpp,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/glx
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/dri
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/common
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/ffb
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/gamma
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/i810
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/mga
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/r128
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/radeon
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/sis
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/drv/tdfx
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/GL/mesa/src/X86
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/Attic
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/Attic/glcontextmodes.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/Attic/glcontextmodes.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/clientattrib.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/compsize.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/dispatch.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/dri_glx.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/dri_glx.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/eval.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/glxclient.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/glxcmds.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/glxext.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/glxextensions.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/glxextensions.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/glx_pbuffer.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/glx_query.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/glx_texture_compression.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/g_render.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/g_single.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/g_vendpriv.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/indirect.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/indirect_init.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/indirect_init.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/indirect_wrap.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/packrender.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/packsingle.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/packvendpriv.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/pixel.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/pixelstore.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/render2.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/renderpix.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/single2.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/singlepix.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/size.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/vertarr.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/XF86dri.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/xf86dri.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/xf86dristr.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/glx/xfont.c,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/include
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/include/GL
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/include/GL/internal
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/include/GL/internal/Attic
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/include/GL/internal/Attic/glcore.h,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/array_cache
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/array_cache/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/array_cache/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/dri
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/common
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/common/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/common/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/ffb
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/ffb/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/ffb/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/gamma
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/gamma/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/gamma/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i810
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i810/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i810/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i830
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i830/Attic
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i830/Attic/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i830/Attic/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i915
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i915/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/i915/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/mach64
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/mach64/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/mach64/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/mga
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/mga/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/mga/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/r128
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/r128/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/r128/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/r200
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/r200/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/r200/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/radeon
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/radeon/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/radeon/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/savage
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/savage/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/savage/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/sis
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/sis/Imakefile,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/dri/sis/Imakefile.inc,v
/home/srv/cvs.freedesktop.org/cvs/xorg/xc/lib/GL/mesa/drivers/driNCgkJCQkJICAgICBHREtfVklTVUFMX1hWSVNVQUwgKHZpc3VhbCksDQoJ
CQkJCSAgICAgd2lkdGgsIGhlaWdodCk7DQogICAgfQ0KICAgIGVsc2Ugew0K
CWdfd2FybmluZyAoIlVzaW5nIENhaXJvIHJlbmRlcmluZyByZXF1aXJlcyB0
aGUgZHJhd2FibGUgYXJndW1lbnQgdG9cbiINCgkJICAgImhhdmUgYSBzcGVj
aWZpZWQgY29sb3JtYXAuIEFsbCB3aW5kb3dzIGhhdmUgYSBjb2xvcm1hcCxc
biINCgkJICAgImhvd2V2ZXIsIHBpeG1hcHMgb25seSBoYXZlIGNvbG9ybWFw
IGJ5IGRlZmF1bHQgaWYgdGhleVxuIg0KCQkgICAid2VyZSBjcmVhdGVkIHdp
dGggYSBub24tTlVMTCB3aW5kb3cgYXJndW1lbnQuIE90aGVyd2lzZVxuIg0K
CQkgICAiYSBjb2xvcm1hcCBtdXN0IGJlIHNldCBvbiB0aGVtIHdpdGggIg0K
CQkgICAiZ2RrX2RyYXdhYmxlX3NldF9jb2xvcm1hcCIpOw0KCXJldHVybiBO
VUxMOw0KICAgIH0NCiAgICBpZiAoc3VyZmFjZSkgew0KCWNyID0gY2Fpcm9f
Y3JlYXRlIChzdXJmYWNlKTsNCgljYWlyb19zdXJmYWNlX2Rlc3Ryb3kgKHN1
cmZhY2UpOw0KICAgIH0NCiAgICByZXR1cm4gY3I7DQp9DQojZW5kaWYNCg0K
c3RhdGljIHZvaWQNCmRyYXcgKGNhaXJvX3QgKmNyKQ0Kew0KICAgIHN0cnVj
dCB0aW1ldmFsIHQ7DQogICAgc3RydWN0IHRpbWV6b25lIHR6Ow0KICAgIGRv
dWJsZSBhbmdsZTsNCiAgICBpbnQgaTsNCg0KICAgIGNhaXJvX3NldF9saW5l
X2NhcCAoY3IsIENBSVJPX0xJTkVfQ0FQX1JPVU5EKTsNCiAgICBjYWlyb19z
ZXRfbGluZV93aWR0aCAoY3IsIC4wNSk7DQogICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2IgKGNyLCAuNSwgLjEsIC4xKTsNCiAgICBmb3IgKGkgPSAwOyBpIDwg
MTI7IGkrKykgew0KCWNhaXJvX21vdmVfdG8gKGNyLCBjb3MgKGkgKiBNX1BJ
IC8gNiksIHNpbiAoaSAqIE1fUEkgLyA2KSk7DQoJY2Fpcm9fbGluZV90byAo
Y3IsICgxLjAwMykqY29zIChpICogTV9QSSAvIDYpLCAoMS4wMDMpKnNpbiAo
aSAqIE1fUEkgLyA2KSk7DQogICAgICAgIGNhaXJvX3N0cm9rZSAoY3IpOw0K
ICAgIH0NCg0KICAgIGdldHRpbWVvZmRheSAoJnQsICZ0eik7DQogICAgYW5n
bGUgPSAoKHQudHZfc2VjICsgdC50dl91c2VjIC8gMTAwMDAwMC4wKSAvIDYw
LjAgLSB0ei50el9taW51dGVzd2VzdCkgKiAoMipNX1BJKTsNCg0KICAgIGNh
aXJvX3NldF9saW5lX2NhcCAoY3IsIENBSVJPX0xJTkVfQ0FQX0JVVFQpOw0K
ICAgIGNhaXJvX3NldF9saW5lX2pvaW4gKGNyLCBDQUlST19MSU5FX0pPSU5f
Uk9VTkQpOw0KDQogICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGggKGNyLCAuMDUp
Ow0KICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiIChjciwgLjUsIC41LCAuOSk7
DQogICAgY2Fpcm9fbW92ZV90byAoY3IsIC43KmNvcyhhbmdsZS82MC8xMiks
IC43KnNpbihhbmdsZS82MC8xMikpOw0KICAgIGNhaXJvX2xpbmVfdG8gKGNy
LCAwLCAwKTsNCiAgICBjYWlyb19saW5lX3RvIChjciwgY29zKGFuZ2xlLzYw
KSwgc2luKGFuZ2xlLzYwKSk7DQogICAgY2Fpcm9fc3Ryb2tlIChjcik7DQoN
CiAgICBjYWlyb19zZXRfbGluZV93aWR0aCAoY3IsIC4wMik7DQogICAgY2Fp
cm9fc2V0X3NvdXJjZV9yZ2IgKGNyLCAuOSwgLjEsIC4zKTsNCiAgICBjYWly
b19tb3ZlX3RvIChjciwgY29zKGFuZ2xlLzYwKSwgc2luKGFuZ2xlLzYwKSk7
DQogICAgY2Fpcm9fYXJjX3RvIChjciwgMCwgMCwgMS4wNSpjb3MoYW5nbGUp
LCAxLjA1KnNpbihhbmdsZSksIDAuMSk7DQogICAgY2Fpcm9fc3Ryb2tlIChj
cik7DQp9DQoNCnN0YXRpYyBnYm9vbGVhbg0KaGFuZGxlX2V4cG9zZSAoR3Rr
V2lkZ2V0ICAgICAgKndpZGdldCwNCgkgICAgICAgR2RrRXZlbnRFeHBvc2Ug
KmV2ZW50LA0KCSAgICAgICBncG9pbnRlcgkgICAgICAgZGF0YSkNCnsNCiAg
ICBjYWlyb190ICpjcjsNCiAgICBjciA9IGdka19jYWlyb19jcmVhdGUgKHdp
ZGdldC0+d2luZG93KTsNCg0KICAgIGNhaXJvX3RyYW5zbGF0ZSAoY3IsIDQw
MCwgNDAwKTsNCiAgICBjYWlyb19zY2FsZSAoY3IsIDMwMCwgMzAwKTsNCiAg
ICBjYWlyb19yb3RhdGUgKGNyLCAtTV9QSV8yKTsNCiAgICBkcmF3IChjcik7
DQogICAgY2Fpcm9fZGVzdHJveSAoY3IpOw0KICAgIHJldHVybiBGQUxTRTsN
Cn0NCg0Kc3RhdGljIHZvaWQNCnRpY2sgKEd0a1dpZGdldCAgICAgICp3aWRn
ZXQpDQp7DQogICAgR2RrUmVjdGFuZ2xlIHVwZGF0ZV9yZWN0Ow0KDQogICAg
dXBkYXRlX3JlY3QueCA9IDA7DQogICAgdXBkYXRlX3JlY3QueSA9IDA7DQog
ICAgdXBkYXRlX3JlY3Qud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lk
dGg7DQogICAgdXBkYXRlX3JlY3QuaGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0
aW9uLmhlaWdodDsNCg0KICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9yZWN0
KHdpZGdldC0+d2luZG93LCZ1cGRhdGVfcmVjdCxGQUxTRSk7DQp9DQoNCmlu
dCANCm1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikNCnsNCiAgICBHdGtX
aWRnZXQgKndpbmRvdywgKmRyYXdpbmdfYXJlYTsNCg0KICAgIGd0a19pbml0
ICgmYXJnYywgJmFyZ3YpOw0KDQogICAgd2luZG93ID0gZ3RrX3dpbmRvd19u
ZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOw0KDQogICAgZ3RrX3dpbmRvd19z
ZXRfZGVmYXVsdF9zaXplIChHVEtfV0lORE9XICh3aW5kb3cpLCBXSURUSCwg
SEVJR0hUKTsNCiAgICBndGtfd2luZG93X3NldF90aXRsZSAoR1RLX1dJTkRP
VyAod2luZG93KSwgImNhaXJvIGRlbW8iKTsNCg0KICAgIGdfc2lnbmFsX2Nv
bm5lY3QgKHdpbmRvdywgImRlc3Ryb3ktZXZlbnQiLA0KCQkgICAgICBHX0NB
TExCQUNLIChndGtfbWFpbl9xdWl0KSwgTlVMTCk7DQoNCiAgICBkcmF3aW5n
X2FyZWEgPSBndGtfZHJhd2luZ19hcmVhX25ldyAoKTsNCiAgICBndGtfY29u
dGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAod2luZG93KSwgZHJhd2luZ19h
cmVhKTsNCg0KICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGRyYXdpbmdfYXJlYSwg
ImV4cG9zZS1ldmVudCIsDQoJCSAgICAgIEdfQ0FMTEJBQ0sgKGhhbmRsZV9l
eHBvc2UpLCBOVUxMKTsNCg0KICAgIGdfdGltZW91dF9hZGQgKDEwMCwgKEdT
b3VyY2VGdW5jKSB0aWNrLCBkcmF3aW5nX2FyZWEpOw0KDQogICAgZ3RrX3dp
ZGdldF9zaG93X2FsbCAod2luZG93KTsNCg0KICAgIGd0a19tYWluICgpOw0K
ICAgIA0KICAgIHJldHVybiAwOw0KfQ0K


More information about the cairo mailing list