diff -ur webtrace-conv.old/dec/tr-stat.cc webtrace-conv/dec/tr-stat.cc
--- webtrace-conv.old/dec/tr-stat.cc    Tue Feb 23 17:28:34 1999
+++ webtrace-conv/dec/tr-stat.cc        Fri Jul  9 10:13:34 1999
@@ -50,7 +50,7 @@
 
 void sort_rlog()
 {
-       heapsort((void *)rlog, num_rlog, sizeof(ReqLog), compare);
+       qsort((void *)rlog, num_rlog, sizeof(ReqLog), compare);
        double t = rlog[0].time;
        for (unsigned int i = 0; i < num_rlog; i++) {
                rlog[i].time -= t;
@@ -86,7 +86,7 @@
        Tcl_DeleteHashTable(&urlHash);
 
        // sort using access frequencies
-       heapsort((void *)tbl, sz, sizeof(URL*), compare_url);
+       qsort((void *)tbl, sz, sizeof(URL*), compare_url);
        umap = new int[url];
        // write sorted url to page table
        for (i = 0; i < sz; i++) {
diff -ur webtrace-conv.old/epa/tr-stat.cc webtrace-conv/epa/tr-stat.cc
--- webtrace-conv.old/epa/tr-stat.cc    Tue Feb 23 17:30:04 1999
+++ webtrace-conv/epa/tr-stat.cc        Fri Jul  9 12:57:38 1999
@@ -72,7 +72,7 @@
 
 void sort_rlog()
 {
-       heapsort((void *)rlog, num_rlog, sizeof(ReqLog), compare);
+       qsort((void *)rlog, num_rlog, sizeof(ReqLog), compare);
        double t = rlog[0].time;
        for (unsigned int i = 0; i < num_rlog; i++) {
                rlog[i].time -= t;
@@ -109,7 +109,7 @@
        Tcl_DeleteHashTable(&urlHash);
 
        // sort using access frequencies
-       heapsort((void *)tbl, sz, sizeof(URL*), compare_url);
+       qsort((void *)tbl, sz, sizeof(URL*), compare_url);
        umap = new int[url];
        // write sorted url to page table
        for (i = 0; i < sz; i++) {
@@ -191,36 +191,43 @@
        if (feof(stdin) || ferror(stdin))
                return 0;
 
-       char *tmp = buf, *code, *date, *method;
-       lfe.client = strsep(&tmp, " ");
-       date = strsep(&tmp, " "); 
-       method = strsep(&tmp, " ");     // GET/POST
+       char *tmp = buf, *code, *method, *date;
+       lfe.client = strtok(tmp, " ");
+       date = strtok(NULL, " "); 
+       method = strtok(NULL, " ");     // GET/POST
        *(method++) = 0;
        if (strcmp(method, "GET") != 0) 
                // Only take GET requests
                return -1;
 
-       lfe.url = strsep(&tmp, " "); 
+       lfe.url = strtok(NULL, " "); 
        if (strchr(lfe.url, '?') != NULL) 
                // Do not take any url that contains '?'
                return -1;
-       strsep(&tmp, " ");              // HTTP/1.0
-       code = strsep(&tmp, " ");       // return code
+       strtok(NULL, " ");              // HTTP/1.0
+       code = strtok(NULL, " ");       // return code
        if ((atoi(code) != 200) && (atoi(code) != 304)) 
                return -1;
-       lfe.size = atoi(tmp);           // size
+       // last element: size
+       tmp = strtok(NULL, " ");
+       lfe.size = atoi(tmp);
 
        // parse date
-       tmp = date + 1;
+       // date is from internal string of strtok(), we have to copy it. 
+       // What a stupid strtok()!!!!
+       tmp = new char[strlen(date)+1];
+       strcpy(tmp, date);
+       date = tmp + 1;
        lfe.time = 0;
-       date = strsep(&tmp, ":"); // day
+       date = strtok(date, ":"); // day
        lfe.time = atoi(date);
-       date = strsep(&tmp, ":"); // hour
+       date = strtok(NULL, ":"); // hour
        lfe.time = lfe.time*24 + atoi(date);
-       date = strsep(&tmp, ":"); // minute
+       date = strtok(NULL, ":"); // minute
        lfe.time = lfe.time*60 + atoi(date);
-       tmp[2] = 0; // get rid of the last ']'
-       lfe.time = lfe.time*60 + atoi(tmp);
+       date = strtok(NULL, "]");
+       lfe.time = lfe.time*60 + atoi(date);
+       delete []tmp;
 
        return 1;
 }
diff -ur webtrace-conv.old/nlanr/logparse.cc webtrace-conv/nlanr/logparse.cc
--- webtrace-conv.old/nlanr/logparse.cc Sat Feb 13 13:03:01 1999
+++ webtrace-conv/nlanr/logparse.cc     Fri Jul  9 14:03:14 1999
@@ -17,59 +17,76 @@
        }
 
        // Parse a line and fill an lf_entry
-       char *p = buf, *q, *tmp1, *tmp2;
+       char *p = buf, *q, *tmp1, *tmp2, *ret_code;
        u_int32_t lapse;
 
        // first two entries: <TimeStamp> and <Elapsed Time>
-       q = strsep(&p, " ");
+       q = strtok(p, " ");
        ne.rt = strtod(q, NULL);
-       q = strsep(&p, " ");
+       q = strtok(NULL, " ");
        lapse = strtoul(q, NULL, 10);
        ne.rt -= (double)lapse/1000.0;
 
        // Client address
-       q = strsep(&p, " ");
+       q = strtok(NULL, " ");
        ne.cid = (u_int32_t)inet_addr(q);
 
        // Log tags, do not store them but use it to filter entries
-       tmp1 = q = strsep(&p, " ");
-       tmp2 = strsep(&tmp1, "/");
-       tmp2 += 4; // Ignore the first 4 char "TCP_"
-       if ((strcmp(tmp2, "MISS") == 0) || 
-           (strcmp(tmp2, "CLIENT_REFRESH_MISS") == 0) || 
-           (strcmp(tmp2, "IMS_MISS") == 0) || 
-           (strcmp(tmp2, "DENIED") == 0)) 
-               return -1;      // Return negative to discard this entry
+       ret_code = strtok(NULL, " ");
+       if (ret_code == NULL) { abort(); } 
+       // XXX Have to handle this return code in the end because we are using
+       // strtok() and it cannot interleave two strings :( STUPID!!
 
        // Page size
-       q = strsep(&p, " "); 
+       q = strtok(NULL, " "); 
        ne.size = strtoul(q, NULL, 10);
 
        // Request method, GET only
-       q = strsep(&p, " ");
+       q = strtok(NULL, " ");
        if (strcmp(q, "GET") != 0) 
                return -1;
 
        // URL
-       q = strsep(&p, " ");
+       q = strtok(NULL, " ");
+       if (q == NULL) abort(); 
        if (strchr(q, '?') != NULL) 
                // Do not accept any URL containing '?'
                return -1;
        ne.url = new char[strlen(q) + 1];
        strcpy(ne.url, q);
        // Try to locate server name from the URL
-       tmp1 = strsep(&q, "/");
+       // XXX no more parsing from the original string!!!!
+       tmp1 = strtok(q, "/");
        if (strcmp(tmp1, "http:") != 0) {
                // How come this isn't a http request???
                delete []ne.url;
                return -1;
        }
-       tmp1 = strsep(&q, "/"); 
-       tmp1 = strsep(&q, "/");
+       tmp1 = strtok(NULL, "/"); 
+       if (tmp1 == NULL) abort();
        ne.sid = new char[strlen(tmp1) + 1];
        strcpy(ne.sid, tmp1);
 
+       // Now check return codes
+       if (ret_code == NULL) abort();
+       tmp1 = new char[strlen(ret_code)+1];
+       strcpy(tmp1, ret_code);
+       tmp2 = strtok(tmp1, "/");
+       tmp2 += 4; // Ignore the first 4 char "TCP_"
+       if ((strcmp(tmp2, "MISS") == 0) || 
+           (strcmp(tmp2, "CLIENT_REFRESH_MISS") == 0) || 
+           (strcmp(tmp2, "IMS_MISS") == 0) || 
+           (strcmp(tmp2, "DENIED") == 0)) {
+               delete []ne.url;
+               delete []ne.sid;
+               delete []tmp1;
+               return -1;      // Return negative to discard this entry
+       }
+       delete []tmp1;
+
        // All the rest are useless, do not parse them
        return 0;
 }
+
+
 
diff -ur webtrace-conv.old/nlanr/tr-stat.cc webtrace-conv/nlanr/tr-stat.cc
--- webtrace-conv.old/nlanr/tr-stat.cc  Tue Feb 23 17:29:31 1999
+++ webtrace-conv/nlanr/tr-stat.cc      Fri Jul  9 10:02:34 1999
@@ -63,7 +63,7 @@
 
 void sort_rlog()
 {
-       heapsort((void *)rlog, num_rlog, sizeof(ReqLog), compare);
+       qsort((void *)rlog, num_rlog, sizeof(ReqLog), compare);
        double t = rlog[0].time;
        for (unsigned int i = 0; i < num_rlog; i++) {
                rlog[i].time -= t;
@@ -96,7 +96,7 @@
        Tcl_DeleteHashTable(&urlHash);
 
        // sort using access frequencies
-       heapsort((void *)tbl, sz, sizeof(URL*), compare_url);
+       qsort((void *)tbl, sz, sizeof(URL*), compare_url);
        umap = new int[url];
        // write sorted url to page table
        for (i = 0; i < sz; i++) {
diff -ur webtrace-conv.old/ucb/logparse.cc webtrace-conv/ucb/logparse.cc
--- webtrace-conv.old/ucb/logparse.cc   Sat Feb 13 11:09:45 1999
+++ webtrace-conv/ucb/logparse.cc       Fri Jul  9 10:15:15 1999
@@ -57,7 +57,7 @@
   unsigned char blockbuf[60], *tmp;
   int           uln, ret;
 
-  if ((ret = correct_read(logfile_fd, (void *) blockbuf, (size_t) 60)) != 60) {
+  if ((ret = correct_read(logfile_fd, (char *)blockbuf, (size_t) 60)) != 60) {
     if (ret == 0)
       return 1;
 /*    fprintf(stderr, "read 60 failed...%d\n", ret); */
@@ -93,7 +93,7 @@
     fprintf(stderr, "out of memory in lf_get_next_netry!\n");
     exit(1);
   }
-  if ((ret = correct_read(logfile_fd, (void *) (nextentry->url), (size_t) uln))
+  if ((ret = correct_read(logfile_fd, (char *) (nextentry->url), (size_t) uln))
       != uln ) {
     if (ret == 0) {
       free(nextentry->url);
diff -ur webtrace-conv.old/ucb/tr-stat.cc webtrace-conv/ucb/tr-stat.cc
--- webtrace-conv.old/ucb/tr-stat.cc    Tue Feb 23 17:29:00 1999
+++ webtrace-conv/ucb/tr-stat.cc        Fri Jul  9 10:01:35 1999
@@ -66,7 +66,7 @@
 
 void sort_rlog()
 {
-       heapsort((void *)rlog, num_rlog, sizeof(ReqLog), compare);
+       qsort((void *)rlog, num_rlog, sizeof(ReqLog), compare);
        double t = rlog[0].time;
        for (unsigned int i = 0; i < num_rlog; i++) {
                rlog[i].time -= t;
@@ -144,12 +144,12 @@
         * filters out entries
         */
        char *str, *idx = (char *)lfe.url, *tmp;
-       tmp = strsep(&idx, " ");
+       tmp = strtok(idx, " ");
        if (strcmp(tmp, "GET") != 0) { 
                /* We only count GETs */
                return -1;
        }
-       str = strsep(&idx, ".");        /* This is the URL to be entered */
+       str = strtok(NULL, ".");        /* This is the URL to be entered */
 
        time = (double)lfe.crs + (double)lfe.cru/(double)1000000.0;
 
diff -ur webtrace-conv.old/ucb/utils.cc webtrace-conv/ucb/utils.cc
--- webtrace-conv.old/ucb/utils.cc      Tue Feb 23 17:29:01 1999
+++ webtrace-conv/ucb/utils.cc  Fri Jul  9 10:16:57 1999
@@ -146,10 +146,10 @@
   rsec = mult * ((double) t1.tv_sec);
   rusec = mult * ((double) t1.tv_usec);
 
-  ret.tv_sec = rsec;
-  ret.tv_usec = rusec;
+  ret.tv_sec = (long)rsec;
+  ret.tv_usec = (long)rusec;
 
-  ret.tv_usec += ((double) 1000000.0 * (rsec - (double) ret.tv_sec));
+  ret.tv_usec += (long)((double) 1000000.0 * (rsec - (double) ret.tv_sec));
   while (ret.tv_usec > 1000000) {
     ret.tv_usec -= 1000000;
     ret.tv_sec += 1;
@@ -204,10 +204,10 @@
   rsec = mult * ((double) t1.tv_sec);
   rnsec = mult * ((double) t1.tv_nsec);
 
-  ret.tv_sec = rsec;
-  ret.tv_nsec = rnsec;
+  ret.tv_sec = (long)rsec;
+  ret.tv_nsec = (long)rnsec;
 
-  ret.tv_nsec += ((double) 1000000000.0 * (rsec - (double) ret.tv_sec));
+  ret.tv_nsec += (long)((double) 1000000000.0 * (rsec - (double) ret.tv_sec));
   while (ret.tv_nsec > 1000000000) {
     ret.tv_nsec -= 1000000000;
     ret.tv_sec += 1;
@@ -355,7 +355,7 @@
     int     ns;
 
     fromlen = sizeof (from);
-    if ((ns = accept (s, (void *) &from, (void *)&fromlen)) < 0)
+    if ((ns = accept (s, (struct sockaddr*)&from, &fromlen)) < 0)
         return -1;
     return ns;
 }
