--- parse.c.orig	Fri Apr 14 11:19:34 2000
+++ parse.c	Fri Sep  1 16:48:44 2000
@@ -140,28 +140,35 @@
 
 // set up to interpret the line as an intel hex record
 // DEBUG should verify the checksum here
-//
-static bool GetIntelRecord(FILE *theFile)
+// Return true if done, false if good data, and -1 if record should be skipped
+static int GetIntelRecord(FILE *theFile)
 {
-	bool done = false;
-	switch(atoh(lineBuffer[7],lineBuffer[8]))
+    int	rtype = atoh(lineBuffer[7],lineBuffer[8]);
+    switch (rtype)
 	{
 		case DATARECORD:												// don't know how to cope with anything but 16-bit addresses for now
 			byteIdx = 9;													// the ninth character is the high nibble of the first data byte
 			byteCount = atoh(lineBuffer[1],lineBuffer[2]);
 			byteAddress = atoh(lineBuffer[3],lineBuffer[4])*256 + atoh(lineBuffer[5],lineBuffer[6]);
-			break;
+	return false;
 			
 		case ENDRECORD:
-			break;
+	return true;
 			
-		case SEGADDRESS:
 		case EXTADDRESS:
+	if (('0' != lineBuffer[3]) || ('0' != lineBuffer[4]) || 
+	    ('0' != lineBuffer[5]) || ('0' != lineBuffer[6]) ||
+	    ('0' != lineBuffer[9]) || ('0' != lineBuffer[10]) ||
+	    ('0' != lineBuffer[11]) || ('0' != lineBuffer[12])) {
+	    fprintf (stderr, "Error! Non 0 Extended address\n");
+	}
+	return -1;
+
+    case SEGADDRESS:
 		default:
-			done = true;
-			break;
+	fprintf (stderr, "Unrecognized record type 0x%x\n", rtype);
+	return -1;
 	}
-	return(!done);
 }
 
 
@@ -232,30 +239,43 @@
 	bool done = false;
 	bool overflow = false;		// set true when oversized line is read
 	
-	if( GetLine(theFile, lineBuffer, MAX_LINE_LEN,&done,&overflow) )
+    while ( GetLine(theFile, lineBuffer, MAX_LINE_LEN,&done,&overflow) )
 	{
-		if(overflow)
+	int recReturn;
+	if (done)
 		{
-			fprintf(stderr,"Line too long, truncation occurred\n");
+	    return false;		/* end of file */
 		}
-		if(!done)
-		{
+
 			if(lineBuffer[0] == INTEL_CHAR)
 			{
-				done = !GetIntelRecord(theFile);
+	    recReturn = GetIntelRecord(theFile);
 			}
 			else if(lineBuffer[0] == MOT_CHAR)
 			{
-				done = !GetMotRecord(theFile);
+	    recReturn = GetMotRecord(theFile);
 			}
-			else
-			{
+	else {
 				fprintf(stderr,"Unrecognized record format: '%c'\n",lineBuffer[0]);
-				done = true;
+	    return false;		/* bail out */
 			}
+
+	if (recReturn > 0)
+	{
+	    return false;		/* end of file */
 		}
+	if (recReturn < 0)
+	{ 
+	    continue;			/* non data record, skip it */
+	}
+	return true;			/* got data, done */
+    }
+    if(overflow)
+    {
+	fprintf(stderr,"Error! Line too long, truncation occurred\n");
+	return false;		/* have to bail at this point */
 	}
-	return(!done);					// return true if okay
+    return false;			/* GetLine out of data */
 }
 
 
