dgaudet 98/02/28 16:31:51
Modified:src CHANGES
src/modules/standard mod_imap.c
Log:
fix border processing for polys
PR: 1771
Submitted by: Konstantin Morshnev [EMAIL PROTECTED]
Revision ChangesPath
1.675 +4 -0 apache-1.3/src/CHANGES
Index: CHANGES
===
RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.674
retrieving revision 1.675
diff -u -r1.674 -r1.675
--- CHANGES 1998/03/01 00:19:33 1.674
+++ CHANGES 1998/03/01 00:31:47 1.675
@@ -1,5 +1,9 @@
Changes with Apache 1.3b6
+ *) The poly directive in image maps did not include the borders of the
+ polygon, whereas the rect directive does. Fix this inconsistency.
+ [Konstantin Morshnev [EMAIL PROTECTED]] PR#1771
+
*) Make \\ behave as expected. [EMAIL PROTECTED]
*) Add `Rule HIDE' to Configuration to hide the Apache symbol
1.42 +23 -74apache-1.3/src/modules/standard/mod_imap.c
Index: mod_imap.c
===
RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_imap.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- mod_imap.c1998/02/01 22:05:40 1.41
+++ mod_imap.c1998/03/01 00:31:50 1.42
@@ -196,86 +196,35 @@
return (radius2 = radius1);
}
+#define fmin(a,b) (((a)(b))?(b):(a))
+#define fmax(a,b) (((a)(b))?(a):(b))
+
static int pointinpoly(const double point[2], double pgon[MAXVERTS][2])
{
-int i, numverts, inside_flag, xflag0;
-int crossings;
-double *p;
-const double *stop;
-double tx, ty, y;
-
-for (i = 0; pgon[i][X] != -1 i MAXVERTS; i++);
-
-numverts = i;
-crossings = 0;
-
-tx = point[X];
-ty = point[Y];
-y = pgon[numverts - 1][Y];
+int i, numverts, crossings = 0;
+double x = point[X], y = point[Y];
-p = (double *) pgon + 1;
-if ((y = ty) != (*p = ty)) {
-
- xflag0 = (pgon[numverts - 1][X] = tx);
-if (xflag0 == (*(double *) pgon = tx)) {
-if (xflag0) {
-crossings++;
- }
-}
-else {
-crossings += (pgon[numverts - 1][X] - (y - ty) *
- (*(double *) pgon - pgon[numverts - 1][X]) /
- (*p - y)) = tx;
-}
+for (numverts = 0; pgon[numverts][X] != -1 numverts MAXVERTS;
+ numverts++) {
+ /* just counting the vertexes */
}
-stop = pgon[numverts];
-
-for (y = *p, p += 2; p stop; y = *p, p += 2) {
-
-if (y = ty) {
-
-while ((p stop) (*p = ty)) {
-p += 2;
- }
-
-if (p = stop) {
-break;
-}
- if ((xflag0 = (*(p - 3) = tx)) == (*(p - 1) = tx)) {
-
-if (xflag0) {
-crossings++;
- }
-}
-else {
-crossings += (*(p - 3) - (*(p - 2) - ty) *
- (*(p - 1) - *(p - 3)) / (*p - *(p - 2))) = tx;
-}
-}
-else {
-while ((p stop) (*p ty)) {
-p += 2;
- }
-
-if (p = stop) {
-break;
- }
-
-if ((xflag0 = (*(p - 3) = tx)) == (*(p - 1) = tx)) {
-if (xflag0) {
-crossings++;
- }
-}
-else {
-crossings += (*(p - 3) - (*(p - 2) - ty) *
- (*(p - 1) - *(p - 3)) / (*p - *(p - 2))) = tx;
-}
-}
+for (i = 0; i numverts; i++) {
+double x1=pgon[i][X];
+double y1=pgon[i][Y];
+double x2=pgon[(i + 1) % numverts][X];
+double y2=pgon[(i + 1) % numverts][Y];
+double d=(y - y1) * (x2 - x1) - (x - x1) * (y2 - y1);
+
+if ((y1 = y) != (y2 = y)) {
+ crossings +=y2 - y1 = 0 ? d = 0 : d = 0;
+ }
+if (!d fmin(x1,x2) = x x = fmax(x1,x2)
+ fmin(y1,y2) = y y = fmax(y1,y2)) {
+ return 1;
+ }
}
-
-inside_flag = crossings 0x01;
-return (inside_flag);
+return crossings 0x01;
}