changeset 62:9d7e2937883d

pads2gpcb: select specific drawing levels for silk with -s
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sun, 31 Jan 2016 05:30:33 +0000
parents ff1d565d233c
children 455a0051f9d2
files pads2gpcb/Makefile pads2gpcb/decals.c pads2gpcb/main.c pads2gpcb/silkselect.c
diffstat 4 files changed, 45 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/pads2gpcb/Makefile	Sun Jan 31 05:02:49 2016 +0000
+++ b/pads2gpcb/Makefile	Sun Jan 31 05:30:33 2016 +0000
@@ -1,6 +1,7 @@
 CC=	gcc
 CFLAGS=	-O2
-OBJS=	decals.o globals.o gpcbout.o main.o rdunits.o readpads.o writeelem.o
+OBJS=	decals.o globals.o gpcbout.o main.o rdunits.o readpads.o silkselect.o \
+	writeelem.o
 HDRS=	globals.h gpcbout.h struct.h
 PROG=	pads2gpcb
 BINDIR=	/usr/local/bin
--- a/pads2gpcb/decals.c	Sun Jan 31 05:02:49 2016 +0000
+++ b/pads2gpcb/decals.c	Sun Jan 31 05:30:33 2016 +0000
@@ -12,7 +12,7 @@
 static struct footprint_body fpbody;
 static struct footprint_pad *pins_array;
 
-#define	MAX_SILK_LINES	16
+#define	MAX_SILK_LINES	64
 static struct element_line silk_lines[MAX_SILK_LINES];
 static struct element_arc silk_arcs[MAX_SILK_LINES];
 static int num_silk_lines;
@@ -58,6 +58,17 @@
 }
 
 static
+drawpiece_silk_candidate()
+{
+	int level;
+
+	if (input_line_nfields != 5)
+		return(0);
+	level = atoi(input_line_fields[4]);
+	return is_drawlevel_selected(level);
+}
+
+static
 try_silk_open_closed()
 {
 	int ncoord, i, bad;
@@ -67,11 +78,6 @@
 	if (strcmp(input_line_fields[0], "OPEN") &&
 	    strcmp(input_line_fields[0], "CLOSED"))
 		return(0);
-	if (input_line_nfields != 5)
-		return(0);
-	if (strcmp(input_line_fields[4], "0") &&
-	    strcmp(input_line_fields[4], "1"))
-		return(0);
 	ncoord = atoi(input_line_fields[1]);
 	if (ncoord < 2) {
 		printf("line %d: silk %s piece ncoord < 2\n", input_lineno,
@@ -125,11 +131,6 @@
 
 	if (strcmp(input_line_fields[0], "CIRCLE"))
 		return(0);
-	if (input_line_nfields != 5)
-		return(0);
-	if (strcmp(input_line_fields[4], "0") &&
-	    strcmp(input_line_fields[4], "1"))
-		return(0);
 	if (strcmp(input_line_fields[1], "2")) {
 		printf("line %d: silk CIRCLE piece ncoord != 2\n",
 			input_lineno);
@@ -213,7 +214,7 @@
 			input_filename, input_lineno);
 		exit(1);
 	}
-	if (do_footprint_silk) {
+	if (do_footprint_silk && drawpiece_silk_candidate()) {
 		if (try_silk_open_closed())
 			return;
 		if (try_silk_circle())
--- a/pads2gpcb/main.c	Sun Jan 31 05:02:49 2016 +0000
+++ b/pads2gpcb/main.c	Sun Jan 31 05:30:33 2016 +0000
@@ -58,11 +58,13 @@
 {
 	int c;
 	extern int optind;
+	extern char *optarg;
 
-	while ((c = getopt(argc, argv, "sw:")) != EOF)
+	while ((c = getopt(argc, argv, "s:w:")) != EOF)
 		switch (c) {
 		case 's':
 			do_footprint_silk = 1;
+			select_drawlevel_for_silk(atoi(optarg));
 			continue;
 		case 'w':
 			process_write_option();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pads2gpcb/silkselect.c	Sun Jan 31 05:30:33 2016 +0000
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#define	MAX_LEVEL_SELECT	8
+
+static int select_array[MAX_LEVEL_SELECT];
+static int num_select;
+
+select_drawlevel_for_silk(level)
+{
+	if (num_select >= MAX_LEVEL_SELECT) {
+		fprintf(stderr, "Error: MAX_LEVEL_SELECT exceeded\n");
+		exit(1);
+	}
+	select_array[num_select++] = level;
+	return(0);
+}
+
+is_drawlevel_selected(level)
+{
+	int i;
+
+	for (i = 0; i < num_select; i++)
+		if (select_array[i] == level)
+			return(1);
+	return(0);
+}