annotate pads2gpcb/decals.c @ 68:b7f49f029bc3

pads2gpcb: use Cartesian Y axis direction internally
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sun, 31 Jan 2016 23:19:37 +0000
parents 455a0051f9d2
children a7f0e9bb3fb7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
1 #include <stdio.h>
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
2 #include <stdlib.h>
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
3 #include <ctype.h>
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
4 #include <string.h>
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
5 #include <strings.h>
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
6 #include "globals.h"
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
7 #include "struct.h"
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
8
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
9 extern long convert_input_dim();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
10
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
11 static struct part_decal *current_decal;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
12 static struct footprint_body fpbody;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
13 static struct footprint_pad *pins_array;
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
14
62
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
15 #define MAX_SILK_LINES 64
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
16 static struct element_line silk_lines[MAX_SILK_LINES];
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
17 static struct element_arc silk_arcs[MAX_SILK_LINES];
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
18 static int num_silk_lines;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
19 static int num_silk_arcs;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
20
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
21 #define SOLDERMASK_DELTA (600 * 254)
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
22 #define CLEARANCE_SETTING (2000 * 254)
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
23
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
24 static void
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
25 enter_decal()
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
26 {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
27 struct part_decal *p, **pp;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
28 char *name = input_line_fields[0];
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
29
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
30 for (pp = &part_decal_list; p = *pp; pp = &p->next)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
31 if (!strcmp(p->name, name)) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
32 fprintf(stderr,
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
33 "%s line %d: decal name \"%s\" already defined\n",
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
34 input_filename, input_lineno, name);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
35 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
36 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
37 p = malloc(sizeof(struct part_decal) + strlen(name) + 1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
38 if (!p) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
39 perror("malloc of struct part_decal");
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
40 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
41 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
42 p->name = (char *)(p + 1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
43 strcpy(p->name, name);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
44 p->body = 0;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
45 p->next = 0;
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
46 *pp = p;
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
47 current_decal = p;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
48 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
49
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
50 static void
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
51 get_line_internal()
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
52 {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
53 if (!get_input_line()) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
54 fprintf(stderr,
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
55 "error: EOF in the middle of a part decal definition\n");
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
56 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
57 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
58 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
59
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
60 static
62
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
61 drawpiece_silk_candidate()
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
62 {
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
63 int level;
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
64
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
65 if (input_line_nfields != 5)
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
66 return(0);
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
67 level = atoi(input_line_fields[4]);
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
68 return is_drawlevel_selected(level);
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
69 }
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
70
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
71 static
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
72 try_silk_open_closed()
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
73 {
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
74 int ncoord, i, bad;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
75 long x[MAX_SILK_LINES+1], y[MAX_SILK_LINES+1];
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
76 long thickness;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
77
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
78 if (strcmp(input_line_fields[0], "OPEN") &&
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
79 strcmp(input_line_fields[0], "CLOSED"))
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
80 return(0);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
81 ncoord = atoi(input_line_fields[1]);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
82 if (ncoord < 2) {
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
83 printf("line %d: silk %s piece ncoord < 2\n", input_lineno,
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
84 input_line_fields[0]);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
85 return(0);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
86 }
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
87 if (ncoord > MAX_SILK_LINES + 1) {
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
88 printf("line %d: silk %s piece ncoord too big\n", input_lineno,
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
89 input_line_fields[0]);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
90 return(0);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
91 }
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
92 thickness = convert_input_dim(input_line_fields[2]);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
93
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
94 bad = 0;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
95 for (i = 0; i < ncoord; i++) {
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
96 get_line_internal();
53
0e18818206e5 pads2gpcb/decals.c: silk line extraction appears to work
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 52
diff changeset
97 parse_input_line_fields();
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
98 if (input_line_nfields != 2) {
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
99 printf("line %d: silk line coord not 2 numbers\n",
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
100 input_lineno);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
101 bad = 1;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
102 continue;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
103 }
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
104 x[i] = convert_input_dim(input_line_fields[0]);
68
b7f49f029bc3 pads2gpcb: use Cartesian Y axis direction internally
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
105 y[i] = convert_input_dim(input_line_fields[1]);
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
106 }
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
107 if (bad)
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
108 return(1);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
109
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
110 for (i = 0; i < ncoord - 1; i++) {
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
111 if (num_silk_lines >= MAX_SILK_LINES) {
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
112 printf("Too many silk lines!\n");
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
113 return(1);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
114 }
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
115 silk_lines[num_silk_lines].x1 = x[i];
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
116 silk_lines[num_silk_lines].y1 = y[i];
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
117 silk_lines[num_silk_lines].x2 = x[i+1];
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
118 silk_lines[num_silk_lines].y2 = y[i+1];
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
119 silk_lines[num_silk_lines].thickness = thickness;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
120 num_silk_lines++;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
121 }
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
122 return(1);
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
123 }
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
124
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
125 static
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
126 try_silk_circle()
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
127 {
54
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
128 int i, bad;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
129 long x[2], y[2];
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
130 long centre_x, centre_y, diameter, thickness;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
131
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
132 if (strcmp(input_line_fields[0], "CIRCLE"))
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
133 return(0);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
134 if (strcmp(input_line_fields[1], "2")) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
135 printf("line %d: silk CIRCLE piece ncoord != 2\n",
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
136 input_lineno);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
137 return(0);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
138 }
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
139 thickness = convert_input_dim(input_line_fields[2]);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
140
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
141 bad = 0;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
142 for (i = 0; i < 2; i++) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
143 get_line_internal();
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
144 parse_input_line_fields();
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
145 if (input_line_nfields != 2) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
146 printf("line %d: silk CIRCLE coord not 2 numbers\n",
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
147 input_lineno);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
148 bad = 1;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
149 continue;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
150 }
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
151 x[i] = convert_input_dim(input_line_fields[0]);
68
b7f49f029bc3 pads2gpcb: use Cartesian Y axis direction internally
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
152 y[i] = convert_input_dim(input_line_fields[1]);
54
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
153 }
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
154 if (bad)
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
155 return(1);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
156
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
157 /* find the centre and diameter */
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
158 if (x[0] == x[1]) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
159 centre_x = x[0];
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
160 if (y[0] < y[1]) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
161 diameter = y[1] - y[0];
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
162 centre_y = y[0] + diameter / 2;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
163 } else if (y[1] < y[0]) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
164 diameter = y[0] - y[1];
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
165 centre_y = y[1] + diameter / 2;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
166 } else
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
167 goto centre_diam_fail;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
168 } else if (y[0] == y[1]) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
169 centre_y = y[0];
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
170 if (x[0] < x[1]) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
171 diameter = x[1] - x[0];
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
172 centre_x = x[0] + diameter / 2;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
173 } else if (x[1] < x[0]) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
174 diameter = x[0] - x[1];
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
175 centre_x = x[1] + diameter / 2;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
176 } else
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
177 goto centre_diam_fail;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
178 } else {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
179 centre_diam_fail:
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
180 printf("line %d: unable to find circle centre and diameter\n",
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
181 input_lineno);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
182 return(1);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
183 }
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
184 if (diameter % 2)
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
185 printf("warning: line %d: circle diameter in nm is odd!\n",
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
186 input_lineno);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
187
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
188 if (num_silk_arcs >= MAX_SILK_LINES) {
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
189 printf("Too many silk arcs!\n");
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
190 return(1);
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
191 }
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
192 silk_arcs[num_silk_arcs].centre_x = centre_x;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
193 silk_arcs[num_silk_arcs].centre_y = centre_y;
59
aeef205f7580 pads2gpcb: width and height in ElementArc need be radius, not diameter
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 58
diff changeset
194 silk_arcs[num_silk_arcs].width = diameter / 2;
aeef205f7580 pads2gpcb: width and height in ElementArc need be radius, not diameter
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 58
diff changeset
195 silk_arcs[num_silk_arcs].height = diameter / 2;
54
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
196 silk_arcs[num_silk_arcs].start_angle = 0;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
197 silk_arcs[num_silk_arcs].delta_angle = 360;
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
198 silk_arcs[num_silk_arcs].thickness = thickness;
58
05fd0b432e8c pads2gpcb/decals.c: forgot to increment num_silk_arcs
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 55
diff changeset
199 num_silk_arcs++;
54
a930e05cf908 pads2gpcb/decals.c: silk circle extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 53
diff changeset
200 return(1);
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
201 }
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
202
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
203 static void
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
204 one_drawing_piece()
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
205 {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
206 int ncoord, i;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
207
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
208 /* extract silk lines and arcs if enabled, otherwise skip */
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
209 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
210 parse_input_line_fields();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
211 if (input_line_nfields < 2) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
212 fprintf(stderr,
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
213 "%s line %d: expected piece header line giving # of coords\n",
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
214 input_filename, input_lineno);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
215 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
216 }
62
9d7e2937883d pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 61
diff changeset
217 if (do_footprint_silk && drawpiece_silk_candidate()) {
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
218 if (try_silk_open_closed())
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
219 return;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
220 if (try_silk_circle())
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
221 return;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
222 }
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
223 ncoord = atoi(input_line_fields[1]);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
224 for (i = 0; i < ncoord; i++)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
225 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
226 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
227
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
228 static void
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
229 one_text_item()
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
230 {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
231 /* just skip it for now */
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
232 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
233 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
234 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
235 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
236
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
237 static void
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
238 one_attr_label()
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
239 {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
240 /* just skip it for now */
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
241 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
242 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
243 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
244 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
245
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
246 static void
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
247 read_pindef_line(idx)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
248 {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
249 get_line_internal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
250 if (input_line_buf[0] != 'T') {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
251 fprintf(stderr, "%s line %d: 'T' line expected\n",
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
252 input_filename, input_lineno);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
253 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
254 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
255 parse_input_line_fields();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
256 if (input_line_nfields != 5) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
257 fprintf(stderr, "%s line %d: expected 5 fields in 'T' line\n",
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
258 input_filename, input_lineno);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
259 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
260 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
261 input_line_fields[0]++;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
262
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
263 if (atoi(input_line_fields[4]) != idx + 1) {
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
264 fprintf(stderr,
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
265 "%s line %d: expected %d in the pin number field\n",
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
266 input_filename, input_lineno);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
267 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
268 }
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
269 pins_array[idx].x1 = convert_input_dim(input_line_fields[0]);
68
b7f49f029bc3 pads2gpcb: use Cartesian Y axis direction internally
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
270 pins_array[idx].y1 = convert_input_dim(input_line_fields[1]);
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
271 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
272
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
273 static void
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
274 process_pad_shape(padptr)
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
275 struct pad_shape_info *padptr;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
276 {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
277 padptr->short_dim = convert_input_dim(input_line_fields[1]);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
278 if (padptr->short_dim <= 0) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
279 printf("line %d: pad short dim <= 0\n", input_lineno);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
280 return;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
281 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
282 if (!strcmp(input_line_fields[2], "R")) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
283 padptr->rounded = 1;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
284 padptr->elongated = 0;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
285 } else if (!strcmp(input_line_fields[2], "S")) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
286 padptr->rounded = 0;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
287 padptr->elongated = 0;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
288 } else if (!strcmp(input_line_fields[2], "OF")) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
289 padptr->rounded = 1;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
290 padptr->elongated = 1;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
291 } else if (!strcmp(input_line_fields[2], "RF")) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
292 padptr->rounded = 0;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
293 padptr->elongated = 1;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
294 } else {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
295 printf("line %d: unsupported pad shape %s\n", input_lineno,
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
296 input_line_fields[2]);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
297 return;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
298 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
299 if (padptr->elongated) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
300 if (input_line_nfields < 6) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
301 fprintf(stderr,
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
302 "%s line %d: too few fields in OF/RF pad stack line\n",
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
303 input_filename, input_lineno);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
304 exit(1);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
305 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
306 padptr->angle = parse_input_angle_90s(input_line_fields[3]);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
307 if (padptr->angle != 0 && padptr->angle != 90) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
308 printf("line %d: unsupported OF/RF angle\n",
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
309 input_lineno);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
310 return;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
311 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
312 padptr->long_dim = convert_input_dim(input_line_fields[4]);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
313 if (strcmp(input_line_fields[5], "0")) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
314 printf("line %d: unsupported nonzero finoffset\n",
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
315 input_lineno);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
316 return;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
317 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
318 if (padptr->long_dim <= padptr->short_dim) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
319 printf("line %d: OF/RF long dim <= short dim\n",
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
320 input_lineno);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
321 return;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
322 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
323 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
324 padptr->valid = 1;
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
325 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
326
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
327 static void
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
328 one_padstack_def()
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
329 {
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
330 int pinno, stacklines, i;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
331 struct pad_shape_info *padptr;
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
332
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
333 get_line_internal();
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
334 parse_input_line_fields();
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
335 if (input_line_nfields != 3 || strcmp(input_line_fields[0], "PAD")) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
336 fprintf(stderr, "%s line %d: expected PAD header line\n",
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
337 input_filename, input_lineno);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
338 exit(1);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
339 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
340 pinno = atoi(input_line_fields[1]);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
341 stacklines = atoi(input_line_fields[2]);
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
342
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
343 if (pinno < 0 || pinno > fpbody.npins) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
344 fprintf(stderr, "%s line %d: PAD pinno field invalid\n",
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
345 input_filename, input_lineno);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
346 exit(1);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
347 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
348 if (pinno)
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
349 padptr = &pins_array[pinno-1].shape;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
350 else
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
351 padptr = &fpbody.default_pad;
43
4a50888d09ce pads2gpcb: handle error cases when the default pad is defined, but failed
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 41
diff changeset
352 padptr->defined = 1;
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
353
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
354 for (i = 0; i < stacklines; i++) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
355 get_line_internal();
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
356 parse_input_line_fields();
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
357 if (input_line_nfields < 3) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
358 fprintf(stderr,
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
359 "%s line %d: too few fields in pad stack line\n",
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
360 input_filename, input_lineno);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
361 exit(1);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
362 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
363 if (!strcmp(input_line_fields[0], "-2"))
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
364 process_pad_shape(padptr);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
365 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
366 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
367
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
368 static void
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
369 apply_default_padstack()
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
370 {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
371 int i;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
372
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
373 if (!fpbody.default_pad.valid)
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
374 return;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
375 for (i = 0; i < fpbody.npins; i++)
43
4a50888d09ce pads2gpcb: handle error cases when the default pad is defined, but failed
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 41
diff changeset
376 if (!pins_array[i].shape.defined)
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
377 pins_array[i].shape = fpbody.default_pad;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
378 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
379
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
380 static
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
381 convert_pad_to_gpcb(pinidx)
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
382 {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
383 struct footprint_pad *pin = pins_array + pinidx;
44
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
384 long long_minus_short, delta;
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
385
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
386 if (!pin->shape.valid) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
387 printf("error: no pad shape for pin #%d\n", pinidx + 1);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
388 return(-1);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
389 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
390 pin->thickness = pin->shape.short_dim;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
391 pin->clearance = CLEARANCE_SETTING;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
392 pin->mask = pin->thickness + SOLDERMASK_DELTA;
44
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
393 pin->x2 = pin->x1;
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
394 pin->y2 = pin->y1;
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
395 if (!pin->shape.elongated)
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
396 return(0);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
397 long_minus_short = pin->shape.long_dim - pin->shape.short_dim;
44
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
398 delta = long_minus_short / 2;
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
399 switch (pin->shape.angle) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
400 case 0:
44
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
401 pin->x1 -= delta;
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
402 pin->x2 += delta;
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
403 return(0);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
404 case 90:
44
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
405 pin->y1 -= delta;
bf1be6c97c28 pads2gpcb: fixed conversion of elongated pads
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 43
diff changeset
406 pin->y2 += delta;
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
407 return(0);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
408 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
409 return(-1);
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
410 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
411
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
412 static void
48
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
413 write_decal_as_element()
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
414 {
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
415 char *filename, *cp, *dp;
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
416 int c;
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
417 FILE *outf;
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
418
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
419 filename = malloc(strlen(current_decal->name) * 3 + 8);
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
420 if (!filename) {
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
421 perror("malloc for output file name");
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
422 exit(1);
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
423 }
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
424 strcpy(filename, "decals/");
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
425 dp = filename + 7;
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
426 for (cp = current_decal->name; *cp; ) {
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
427 c = *cp++;
49
b3b7013d9228 pads2gpcb.c/decals.c: allow underscores in written decal file names
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 48
diff changeset
428 if (isalnum(c) || c == '-' || c == '.' || c == '_')
48
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
429 *dp++ = c;
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
430 else {
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
431 sprintf(dp, "%%%02X", c);
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
432 dp += 3;
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
433 }
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
434 }
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
435 *dp = '\0';
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
436 outf = fopen(filename, "w");
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
437 if (!outf) {
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
438 perror(filename);
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
439 exit(1);
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
440 }
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
441 write_gpcb_element(outf, current_decal->body, 0, "", "", "", 0);
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
442 fclose(outf);
49
b3b7013d9228 pads2gpcb.c/decals.c: allow underscores in written decal file names
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 48
diff changeset
443 printf("Written to %s\n", filename);
48
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
444 free(filename);
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
445 }
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
446
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
447 static void
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
448 process_one_decal()
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
449 {
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
450 int num_drawing_pieces, num_padstack_defs;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
451 int num_text_items, num_attr_labels;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
452 int i, valid;
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
453
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
454 if (input_line_nfields < 7 || input_line_nfields > 9) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
455 fprintf(stderr,
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
456 "%s line %d: expected beginning of part decal definition, wrong # of fields\n",
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
457 input_filename, input_lineno);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
458 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
459 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
460 enter_decal();
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
461 printf("Processing decal %s\n", current_decal->name);
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
462 bzero(&fpbody, sizeof fpbody);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
463 if (input_line_fields[1][0] != 'I' && input_line_fields[1][0] != 'M'
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
464 || input_line_fields[1][1]) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
465 fprintf(stderr, "%s line %d: expected 'I' or 'M' in field 1\n",
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
466 input_filename, input_lineno);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
467 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
468 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
469 fpbody.src_units = input_line_fields[1][0];
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
470 if (input_units_global == 'B')
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
471 input_units_current = 'B';
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
472 else
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
473 input_units_current = fpbody.src_units;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
474 fpbody.mark_x = convert_input_dim(input_line_fields[2]);
68
b7f49f029bc3 pads2gpcb: use Cartesian Y axis direction internally
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 63
diff changeset
475 fpbody.mark_y = convert_input_dim(input_line_fields[3]);
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
476 num_drawing_pieces = atoi(input_line_fields[4]);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
477 fpbody.npins = atoi(input_line_fields[5]);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
478 num_padstack_defs = atoi(input_line_fields[6]);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
479 if (input_line_nfields > 7)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
480 num_text_items = atoi(input_line_fields[7]);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
481 else
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
482 num_text_items = 0;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
483 if (input_line_nfields > 8)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
484 num_attr_labels = atoi(input_line_fields[8]);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
485 else
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
486 num_attr_labels = 0;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
487
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
488 /* done parsing the header line, initialize some misc */
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
489 fpbody.refdes_scale = 100;
52
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
490 num_silk_lines = 0;
727d4e56d5c8 pads2gpcb/decals.c: silk line extraction implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 49
diff changeset
491 num_silk_arcs = 0;
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
492
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
493 /* read and process the miscellany */
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
494 for (i = 0; i < num_drawing_pieces; i++)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
495 one_drawing_piece();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
496 for (i = 0; i < num_text_items; i++)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
497 one_text_item();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
498 for (i = 0; i < num_attr_labels; i++)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
499 one_attr_label();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
500
61
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
501 /* deal with dummies */
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
502 if (fpbody.npins == 0 && num_padstack_defs == 0) {
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
503 printf("Dummy decal with no pins, skipping\n");
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
504 return;
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
505 }
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
506 if (fpbody.npins < 1) {
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
507 fprintf(stderr, "Error in decal %s: # of terminals %d < 1\n",
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
508 current_decal->name, fpbody.npins);
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
509 exit(1);
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
510 }
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
511 if (num_padstack_defs < 1) {
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
512 fprintf(stderr,
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
513 "Error in decal %s: # of pad stack defs %d < 1\n",
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
514 current_decal->name, num_padstack_defs);
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
515 exit(1);
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
516 }
ff1d565d233c pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 60
diff changeset
517
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
518 /* the meat: allocate and fill the pins array */
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
519 pins_array = malloc(sizeof(struct footprint_pad) * fpbody.npins);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
520 if (!pins_array) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
521 perror("malloc of the pins array");
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
522 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
523 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
524 fpbody.pins = pins_array;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
525 bzero(pins_array, sizeof(struct footprint_pad) * fpbody.npins);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
526 for (i = 0; i < fpbody.npins; i++)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
527 read_pindef_line(i);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
528 /* read and process the pad stack definitions */
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
529 for (i = 0; i < num_padstack_defs; i++)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
530 one_padstack_def();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
531
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
532 /* post-processing */
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
533 apply_default_padstack();
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
534 valid = 1;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
535 for (i = 0; i < fpbody.npins; i++)
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
536 if (convert_pad_to_gpcb(i) < 0)
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
537 valid = 0;
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
538 if (valid) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
539 /* good, save it */
55
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
540 if (num_silk_lines) {
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
541 fpbody.silk_lines =
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
542 malloc(sizeof(struct element_line) * num_silk_lines);
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
543 if (!fpbody.silk_lines) {
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
544 perror("malloc to save silk lines");
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
545 exit(1);
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
546 }
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
547 bcopy(silk_lines, fpbody.silk_lines,
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
548 sizeof(struct element_line) * num_silk_lines);
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
549 fpbody.num_silk_lines = num_silk_lines;
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
550 }
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
551 if (num_silk_arcs) {
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
552 fpbody.silk_arcs =
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
553 malloc(sizeof(struct element_arc) * num_silk_arcs);
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
554 if (!fpbody.silk_arcs) {
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
555 perror("malloc to save silk arcs");
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
556 exit(1);
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
557 }
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
558 bcopy(silk_arcs, fpbody.silk_arcs,
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
559 sizeof(struct element_arc) * num_silk_arcs);
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
560 fpbody.num_silk_arcs = num_silk_arcs;
e93375570f91 pads2gpcb/decals.c: saving of silk lines and arcs implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 54
diff changeset
561 }
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
562 current_decal->body = malloc(sizeof(struct footprint_body));
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
563 if (!current_decal->body) {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
564 perror("malloc to save footprint body");
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
565 exit(1);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
566 }
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
567 *current_decal->body = fpbody;
48
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
568 if (write_decal_files)
c977d637f038 pads2gpcb: decals/* writing implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 44
diff changeset
569 write_decal_as_element();
41
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
570 } else {
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
571 printf("decal to gpcb fp conversion FAILED\n");
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
572 free(pins_array);
a2d304ec3817 pads2gpcb: decal processing code compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 40
diff changeset
573 }
40
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
574 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
575
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
576 process_partdecal_section()
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
577 {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
578 for (;;) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
579 if (!get_input_line()) {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
580 fprintf(stderr, "error: EOF in PARTDECAL section\n");
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
581 exit(1);
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
582 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
583 if (input_line_buf[0] == '*') {
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
584 parse_starline();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
585 if (strcmp(input_line_starkw, "REMARK"))
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
586 break;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
587 else
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
588 continue;
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
589 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
590 parse_input_line_fields();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
591 if (input_line_nfields)
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
592 process_one_decal();
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
593 }
1c37bec20596 pads2gpcb: slowly working on the decal processing logic
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff changeset
594 }
63
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
595
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
596 struct part_decal *
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
597 find_decal_by_name(name)
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
598 char *name;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
599 {
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
600 struct part_decal *p;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
601
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
602 for (p = part_decal_list; p; p = p->next)
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
603 if (!strcmp(p->name, name))
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
604 break;
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
605 return(p);
455a0051f9d2 pads2gpcb: PARTTYPE parsing implemented, compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents: 62
diff changeset
606 }