diff pads2gpcb/decals.c @ 61:ff1d565d233c

pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sun, 31 Jan 2016 05:02:49 +0000
parents 0444db01fa4a
children 9d7e2937883d
line wrap: on
line diff
--- a/pads2gpcb/decals.c	Sun Jan 31 03:29:33 2016 +0000
+++ b/pads2gpcb/decals.c	Sun Jan 31 05:02:49 2016 +0000
@@ -484,18 +484,6 @@
 	else
 		num_attr_labels = 0;
 
-	/* sanity checks */
-	if (fpbody.npins < 1) {
-		fprintf(stderr, "%s line %d: # of terminals %d < 1\n",
-			input_filename, input_lineno, fpbody.npins);
-		exit(1);
-	}
-	if (num_padstack_defs < 1) {
-		fprintf(stderr, "%s line %d: # of pad stack defs %d < 1\n",
-			input_filename, input_lineno, num_padstack_defs);
-		exit(1);
-	}
-
 	/* done parsing the header line, initialize some misc */
 	fpbody.refdes_scale = 100;
 	num_silk_lines = 0;
@@ -509,6 +497,23 @@
 	for (i = 0; i < num_attr_labels; i++)
 		one_attr_label();
 
+	/* deal with dummies */
+	if (fpbody.npins == 0 && num_padstack_defs == 0) {
+		printf("Dummy decal with no pins, skipping\n");
+		return;
+	}
+	if (fpbody.npins < 1) {
+		fprintf(stderr, "Error in decal %s: # of terminals %d < 1\n",
+			current_decal->name, fpbody.npins);
+		exit(1);
+	}
+	if (num_padstack_defs < 1) {
+		fprintf(stderr,
+			"Error in decal %s: # of pad stack defs %d < 1\n",
+			current_decal->name, num_padstack_defs);
+		exit(1);
+	}
+
 	/* the meat: allocate and fill the pins array */
 	pins_array = malloc(sizeof(struct footprint_pad) * fpbody.npins);
 	if (!pins_array) {