--- ppm/bmptoppm.c.orig	Mon Oct  4 18:12:07 1993
+++ ppm/bmptoppm.c	Sat Oct 16 02:53:18 1999
@@ -348,6 +348,8 @@
 
 	long            ncolors = (1 << cBitCount);
 
+	if (cBitCount == 24) return 0;
+
 	for (i = 0; i < ncolors; i++)
 	{
 		B[i] = (pixval) GetByte(fp);
@@ -385,29 +387,45 @@
 	int             rc;
 	unsigned        x;
 
-	if ((b = pm_bitinit(fp, "r")) == (BITSTREAM) 0)
+	if (cBitCount == 24)
 	{
-		return -1;
-	}
+		for (x = 0; x < cx; x++, row++)
+		{
+			pixval  b,g,r;
 
-	for (x = 0; x < cx; x++, row++)
-	{
-		unsigned long   v;
+			b = (pixval) GetByte(fp);
+			g = (pixval) GetByte(fp);
+			r = (pixval) GetByte(fp);
+			nbyte += 3;
 
-		if ((rc = pm_bitread(b, cBitCount, &v)) == -1)
+			PPM_ASSIGN(*row, r, g, b);
+		}
+	}
+	else 
+	{
+		if ((b = pm_bitinit(fp, "r")) == (BITSTREAM) 0)
 		{
 			return -1;
 		}
-		nbyte += rc;
 
-		PPM_ASSIGN(*row, R[v], G[v], B[v]);
-	}
+		for (x = 0; x < cx; x++, row++)
+		{
+			unsigned long   v;
 
-	if ((rc = pm_bitfini(b)) != 0)
-	{
-		return -1;
-	}
+			if ((rc = pm_bitread(b, cBitCount, &v)) == -1)
+			{
+				return -1;
+			}
+			nbyte += rc;
+
+			PPM_ASSIGN(*row, R[v], G[v], B[v]);
+		}
 
+		if ((rc = pm_bitfini(b)) != 0)
+		{
+			return -1;
+		}
+	}
 	/*
 	 * Make sure we read a multiple of 4 bytes.
 	 */
