--- 2.4.1.2	1999/11/02 11:16:04
+++ 2.4.1.3	1999/11/04 12:15:19
@@ -1,4 +1,4 @@
-static char rcs_id[] = "$Id: http-analyze.c,v 2.4.1.2 1999/11/02 11:16:04 stefan Stab $";
+static char rcs_id[] = "$Id: http-analyze.c,v 2.4.1.3 1999/11/04 12:15:19 stefan Stab $";
 
 /*
 *************************************************************************
@@ -491,7 +491,7 @@
 static int use_vrml = 0;		/* create a VRML model */
 static int use_frames = 0;		/* if set create frames interface */
 static int use_hist = 0;		/* if set use values from history for expired period */
-static int autohide = 0;		/* if set automatically add base as hidden item for each URL */
+static int noautohide = 0;		/* if set don't automatically add base URLs as hidden items */
 static int nohist = 0;			/* if set ignore history file */
 static int nodefhid = 0;		/* if set don't collect image filenames */
 static int nocgistrip = 0;		/* if set don't strip arguments from CGI URLs */
@@ -1007,7 +1007,7 @@
 		  case 'e':	use_hist++;	 break;	/* use values from history */
 		  case 'f':	use_frames++;	 break;	/* generate also HTML frames */
 		  case 'g':	nonavpanel++;	 break;	/* don't create navigation panel */
-		  case 'k':	autohide++;	 break;	/* automatically add base as hidden item for each URL */
+		  case 'k':	noautohide++;	 break;	/* don't automatically add base URLs as hidden items */
 		  case 'n':	nohist++;	 break;	/* don't use history */
 		  case 'q':	nocgistrip++;	 break;	/* don't strip CGI arguments */
 		  case 'v':	verbose++;	 break;	/* be verbose */
@@ -1923,7 +1923,7 @@
 				np = lookupItem(urltab, &entry->request, entry->reqbase.len);
 				if (np == NULL || !np->cnt.hits) {	/* no mem or brand new */
 					uniq_urls++;
-					if (autohide && entry->reqbase.len)
+					if (!noautohide && entry->reqbase.len)
 						saveHiddenItem(HIDDEN_ITEMS, &entry->reqbase);
 				}
 
@@ -3453,7 +3453,7 @@
 		    buttons[(which)].wid, buttons[(which)].ht)
 
 	/*CONSTCOND*/
-	MAKE_BUTTON(1, BTN_YEAR, 1);
+	MAKE_BUTTON(1, BTN_YEAR, 1);	/* controlling expression is intentionally constant */
 	prString(ofp, NULL, FONT_HEAD2, NULL, NULL, NULL);
 	(void) fprintf(ofp, "<SELECT NAME=\"period\" onChange=\"loadMonth();\">\n"
 		"<OPTION SELECTED>%.3s %4d\n", monnam[idx], t.end.year);
@@ -3471,9 +3471,9 @@
 	(void) fprintf(ofp, "</SELECT>%s<BR>\n", FONT_END(FONT_VAR));
 
 	/*CONSTCOND*/
-	MAKE_BUTTON(2,  BTN_TOTALS, 1);
+	MAKE_BUTTON(2,  BTN_TOTALS, 1);	/* controlling expression is intentionally constant */
 	/*CONSTCOND*/
-	MAKE_BUTTON(3,  BTN_DAYS,   1);
+	MAKE_BUTTON(3,  BTN_DAYS,   1);	/* controlling expression is intentionally constant */
 	MAKE_BUTTON(4,  BTN_AVLOAD, sptab[SP_AVLOAD].ison);
 	MAKE_BUTTON(5,  BTN_TOPURL, lntab[FNAME_TOPFILES] != 0);
 	MAKE_BUTTON(6,  BTN_TOPDOM, lntab[FNAME_TOPSITES] != 0);
@@ -3597,7 +3597,7 @@
 #endif
 
 static void prLinks(FILE *const ofp, char *const title, char *const dpfx) {
-	char fname[MAX_FNAMELEN];
+	char fname[MAX_FNAMELEN], gname[MAX_FNAMELEN];
 	char period[SMALLSIZE];
 	int idx = (int)t.current.year;
 	int rc = 0;
@@ -3610,6 +3610,11 @@
 		(void) snprintf(fname, sizeof fname, "%s%04d", dpfx, idx);
 		if (access(fname, F_OK) == 0) {
 			rc++;
+			(void) snprintf(gname, sizeof gname, "%s/gr-icon" IMG_SFX, fname);
+#if !defined(OLD_GDLIB)
+			if (access(gname, F_OK) != 0)
+				(void) snprintf(gname, sizeof gname, "%s/gr-icon.gif", fname);
+#endif
 			if (idx == (int)t.current.year)
 				(void) snprintf(period, sizeof period, "%s",
 					GETMSG(191, "the last 12 months"));
@@ -3617,10 +3622,10 @@
 
 			(void) fprintf(ofp,
 				"<TR><TD BGCOLOR=\"#CCCCCC\" ALIGN=\"CENTER\" VALIGN=\"MIDDLE\">"
-				"<A HREF=\"%s/index.html\"><IMG SRC=\"%s/gr-icon" IMG_SFX "\""
+				"<A HREF=\"%s/index.html\"><IMG SRC=\"%s\""
 				" WIDTH=\"59\" HEIGHT=\"41\" ALT=\"\" BORDER=\"0\"></A></TD>\n"
 				"<TD BGCOLOR=\"#CCCCCC\" ALIGN=\"LEFT\" VALIGN=\"MIDDLE\">\n"
-				"<A HREF=\"%s/index.html\"", fname, fname, fname);
+				"<A HREF=\"%s/index.html\"", fname, gname, fname);
 			if (!nonavpanel)
 				(void) fprintf(ofp,
 					" onClick=\"createWin('%s/jsnav.html',"
@@ -4080,7 +4085,7 @@
 		return ((*(NLIST **)e2)->cnt.hits < (*(NLIST **)e1)->cnt.hits) ? -1 : 1;
 	}
 	if (ip[stamp1].col->cnt.hits == ip[stamp2].col->cnt.hits)
-		return stamp2 - stamp1;
+		return (stamp2 < stamp1) ? -1 : 1;
 	return (ip[stamp2].col->cnt.hits < ip[stamp1].col->cnt.hits) ? -1 : 1;
 }
 
@@ -4098,7 +4103,7 @@
 		return ((*(NLIST **)e2)->cnt.hits < (*(NLIST **)e1)->cnt.hits) ? -1 : 1;
 	}
 	if (ip[stamp1].col->cnt.hits == ip[stamp2].col->cnt.hits)
-		return stamp2 < stamp1 ? -1 : 1;
+		return (stamp2 < stamp1) ? -1 : 1;
 	return (ip[stamp2].col->cnt.hits < ip[stamp1].col->cnt.hits) ? -1 : 1;
 }
 
@@ -4127,7 +4132,7 @@
 		return ((*(NLIST **)e2)->cnt.hits < (*(NLIST **)e1)->cnt.hits) ? -1 : 1;
 	}
 	if (ip[stamp1].col->cnt.hits == ip[stamp2].col->cnt.hits)
-		return stamp2 < stamp1 ? -1 : 1;
+		return (stamp2 < stamp1) ? -1 : 1;
 	return (ip[stamp2].col->cnt.hits < ip[stamp1].col->cnt.hits) ? -1 : 1;
 }
 
@@ -4145,15 +4150,18 @@
 		return ((*(NLIST **)e2)->cnt.hits < (*(NLIST **)e1)->cnt.hits) ? -1 : 1;
 	}
 	if (ip[stamp1].col->cnt.hits == ip[stamp2].col->cnt.hits)
-		return stamp2 < stamp1 ? -1 : 1;
+		return (stamp2 < stamp1) ? -1 : 1;
 	return (ip[stamp2].col->cnt.hits < ip[stamp1].col->cnt.hits) ? -1 : 1;
 }
 
 /*
-** Sort list by internal country code.
+** Sort country list by number of hits.
 */
 static int sort_by_cntry(const void *e1, const void *e2) {
-	return ((*(COUNTRY **)e2)->cnt.hits - (*(COUNTRY **)e1)->cnt.hits);
+	if ((*(COUNTRY **)e2)->cnt.hits == (*(COUNTRY **)e1)->cnt.hits)
+		return 0;
+
+	return ((*(COUNTRY **)e2)->cnt.hits < (*(COUNTRY **)e1)->cnt.hits) ? -1 : 1;
 }
 
 /*
@@ -4175,7 +4183,7 @@
 */
 static int sort_by_slen(const void *e1, const void *e2) {
 	if (((ITEM_LIST *)e1)->len != ((ITEM_LIST *)e2)->len)
-		return ((ITEM_LIST *)e1)->len - ((ITEM_LIST *)e2)->len;
+		return (((ITEM_LIST *)e1)->len < ((ITEM_LIST *)e2)->len) ? -1 : 1;
 
 	return msiis_mode ?
 		strcasecmp(((ITEM_LIST *)e1)->pfx, ((ITEM_LIST *)e2)->pfx) :
@@ -4189,12 +4197,12 @@
 	if (((TOP_COUNTER *)e2)->cnt.hits == ((TOP_COUNTER *)e1)->cnt.hits) {
 		if (((TOP_COUNTER *)e2)->cnt.bytes > ((TOP_COUNTER *)e1)->cnt.bytes)
 			return 1;
-		else if (((TOP_COUNTER *)e2)->cnt.bytes > ((TOP_COUNTER *)e1)->cnt.bytes)
+		else if (((TOP_COUNTER *)e2)->cnt.bytes < ((TOP_COUNTER *)e1)->cnt.bytes)
 			return -1;
 		else
 			return 0;
 	}
-	return ((TOP_COUNTER *)e2)->cnt.hits < ((TOP_COUNTER *)e1)->cnt.hits ? -1 : 1;
+	return (((TOP_COUNTER *)e2)->cnt.hits < ((TOP_COUNTER *)e1)->cnt.hits) ? -1 : 1;
 }
 
 /*
@@ -4242,7 +4250,7 @@
 	avg_day.nomod /= ndays;
 	avg_day.views /= ndays;
 	avg_day.sessions /= ndays;
-	avg_day.bytes /= ndays;
+	avg_day.bytes /= (float)ndays;
 
 	if (max_day.bytes < 1024.0)
 		max_day.bytes = 1024.0;
--- 2.4.1.2	1999/11/02 11:10:28
+++ 2.4.1.3	1999/11/04 12:15:02
@@ -1 +1 @@
-#define PATCHLEVEL	2
+#define PATCHLEVEL	3
--- 1.23	1999/11/01 18:08:35
+++ CHANGES	1999/11/04 12:25:53
@@ -2,6 +2,25 @@
 =================================================
 
 --------------------------------------------------------------------------
+Changes in version 2.4pl3 / November, 3rd 1999
+--------------------------------------------------------------------------
+
+Bug fixes:
+        o Added code to link to the GIF versions of the graph icons
+	  if no PNG version is available.
+
+	o Fixed a bug in the sorting routines.
+
+
+--------------------------------------------------------------------------
+Changes in version 2.4pl2 / November, 2nd 1999
+--------------------------------------------------------------------------
+
+Enhancements:
+        o Added messages 187 and 188, corrected GD license terms.
+
+
+--------------------------------------------------------------------------
 Changes in version 2.4pl1 / November, 1st 1999
 --------------------------------------------------------------------------
 
