> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.
> You may not be able to read some parts of this message.

--PART.BOUNDARY.0054.789363485
Content-ID: <54_61_1_789363212>
Content-Type: text/plain
Content-Transfer-Encoding: 7Bit
Content-Description: <none>

Chin Huang,
Attached is the diff file for some changes that I think need to be 
made to news.c.  News.c compiles fine with these changes, but I 
have not recompiled souper, since I don't have the socket 
libraries yet.

Robert Blenis
e-mail:blenis@spanky.marc.gatech.edu

Os/2 Warp 3
... engage.
--PART.BOUNDARY.0054.789363485
Content-ID: <54_61_1_789363387>
Content-Type: text/plain
Content-Transfer-Encoding: 7Bit
Content-Description: <Text>

--- news.old.c	Thu Jan 05 08:20:00 1995
+++ news.c	Thu Jan 05 22:42:08 1995
@@ -5,6 +5,7 @@
 #include <io.h>
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include "socket.h"
 #include "nntp.h"
 #include "nntpcl.h"
@@ -303,6 +304,10 @@
     /* If the list is empty, make one new entry marking everything
        up to the lowest available article as read */
     if (head == NULL) {
+	if (lo == 1)	/* if lowest avail. article is 1, then leave read list empty */
+			/* otherwise when a new group was started, the first */
+			/* article would be skipped */
+		return NULL;
 	rp1 = (Range *)xmalloc(sizeof(Range));
 	rp1->lo = 1;
 	rp1->hi = (lo > 1) ? (lo-1) : 1;
@@ -326,6 +331,11 @@
 	    free(rp2);
 	    rp2 = rp3;
 	}
+	if (lo == 1) {	/* if lowest avail. article is 1, then leave read list empty */
+			/* otherwise when group is reset, the first article would be skipped */
+		free(head);
+		return NULL;
+	}
 	head->next = NULL;
 	return head;
     }
@@ -333,28 +343,35 @@
     /* Now walk through the list and eliminate ranges lower
        than the lowest available article */
     rp1 = head;
-    while (rp1 != NULL) {
-	/* If lowest read article of this range is smaller
-	   than the lowest available article, all the rest
-	   of the ranges are unnecessary */
-	if (rp1->lo < lo) {
-	    /* Make this range from 1 to lo */
-	    rp1->lo = 1;
-	    if (rp1->hi < lo) rp1->hi = lo - 1;
-
-	    /* Free the rest */
-	    rp2 = head;
-	    while (rp2 != rp1) {
-		rp3 = rp2->next;
-		free(rp2);
-		rp2 = rp3;
-	    }
-	    return rp1;
+	while (rp1->next != NULL) {
+		if( rp1->next->lo > lo )
+			break;
+		rp1=rp1->next;
+	}
+	if ((rp1->lo > lo) && (lo > 1)) {
+			/* rp1=1st in list and lowest avail. is < lowest read, so insert */
+			/* record marking 1..lo-1 (as long as lo != 1) as read. */
+		rp2 = (Range *)xmalloc(sizeof(Range));
+		rp2->lo = 1;
+		rp2->hi = lo-1;
+		rp2->next = rp1;
+		return rp2;
+	}
+	if (rp1->lo <= lo) {
+		rp1->lo = 1;
+		rp2 = head;	/* eliminate previous records */
+		while (rp2 != rp1) {
+			rp3 = rp2->next;
+			free(rp2);
+			rp2=rp3;
+		}
+		head = rp1;
+
+		if( rp1->hi < lo)
+			rp1->hi = lo-1;
 	}
-	rp1 = rp1->next;
-    }
 
-    return head;	/* Probably shouldn't get here */
+    return head;
 }
 
 /* Process an Xref line. */
@@ -467,7 +484,7 @@
     byteCount += artSize + 14;
 
     /* Write "rnews" line */
-    fprintf(msgf, "#! rnews %d\n", artSize);
+    fprintf(msgf, "#! rnews %ld\n", artSize);
 
     /* Copy article body. */
     fseek(tmpF, 0L, SEEK_SET);

--PART.BOUNDARY.0054.789363485--

