File: parser.h

package info (click to toggle)
pcb-rnd 2.1.1-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 29,260 kB
  • sloc: ansic: 198,059; sh: 5,767; yacc: 5,568; makefile: 2,519; awk: 1,737; lex: 1,073; python: 519; lisp: 169; tcl: 67; xml: 40; perl: 34; ruby: 5
file content (251 lines) | stat: -rw-r--r-- 7,346 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
/*
 * read hyperlynx files
 * Copyright 2012 Koen De Vleeschauwer.
 *
 * This file is part of pcb-rnd.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef PCB_IO_HYP_PARSER_H
#define PCB_IO_HYP_PARSER_H

#include <stdio.h>
#include "pcb_bool.h"
#include "board.h"

	/* 
	 * Parameters passed on by the parser.
	 * All variables added here are initialized in new_record().
	 */

typedef enum { PAD_TYPE_METAL, PAD_TYPE_ANTIPAD, PAD_TYPE_THERMAL_RELIEF } pad_type_enum;

typedef enum { PIN_SIM_IN, PIN_SIM_OUT, PIN_SIM_BOTH } pin_function_enum;

typedef enum { POLYGON_TYPE_POUR, POLYGON_TYPE_PLANE, POLYGON_TYPE_COPPER, POLYGON_TYPE_PAD,
	POLYGON_TYPE_ANTIPAD
} polygon_type_enum;

typedef struct {
	double vers;									/* version of the hyp file format */
	pcb_bool detailed;						/* data detailed enough for power integrity */
	pcb_bool unit_system_english;	/* english or metric units */
	pcb_bool metal_thickness_weight;	/* copper by weight or by length */
	double default_plane_separation;	/* trace to plane separation */

	/* stackup record */
	pcb_bool use_die_for_metal;		/* dielectric constant and loss tangent of dielectric for metal layers */
	double bulk_resistivity;
	pcb_bool conformal;
	double epsilon_r;
	char *layer_name;
	double loss_tangent;
	char *material_name;
	double plane_separation;
	double plating_thickness;
	pcb_bool prepreg;
	double temperature_coefficient;	/* temperature coefficient of resistivity */
	double thickness;							/* layer thickness */

	/* stackup record flags */
	pcb_bool bulk_resistivity_set;
	pcb_bool conformal_set;
	pcb_bool epsilon_r_set;
	pcb_bool layer_name_set;
	pcb_bool loss_tangent_set;
	pcb_bool material_name_set;
	pcb_bool plane_separation_set;
	pcb_bool plating_thickness_set;
	pcb_bool prepreg_set;
	pcb_bool temperature_coefficient_set;
	pcb_bool thickness_set;

	/* device record */
	char *device_type;
	char *ref;
	double value_float;
	char *value_string;
	char *package;

	/* device record flags */
	pcb_bool name_set;
	pcb_bool value_float_set;
	pcb_bool value_string_set;
	pcb_bool package_set;

	/* supplies record */
	pcb_bool voltage_specified;
	pcb_bool conversion;

	/* padstack record */
	char *padstack_name;
	double drill_size;
	double pad_shape;
	double pad_sx;
	double pad_sy;
	double pad_angle;
	double thermal_clear_shape;
	double thermal_clear_sx;
	double thermal_clear_sy;
	double thermal_clear_angle;
	pad_type_enum pad_type;

	/* padstack record flags */
	pcb_bool padstack_name_set;
	pcb_bool drill_size_set;
	pcb_bool pad_type_set;

	/* net record */
	double width;
	double left_plane_separation;
	pcb_bool width_set;
	pcb_bool left_plane_separation_set;

	/* via subrecord of net */
	char *layer1_name;
	pcb_bool layer1_name_set;
	char *layer2_name;
	pcb_bool layer2_name_set;
	char *via_pad_shape;
	pcb_bool via_pad_shape_set;
	double via_pad_sx;
	pcb_bool via_pad_sx_set;
	double via_pad_sy;
	pcb_bool via_pad_sy_set;
	double via_pad_angle;
	pcb_bool via_pad_angle_set;
	char *via_pad1_shape;
	pcb_bool via_pad1_shape_set;
	double via_pad1_sx;
	pcb_bool via_pad1_sx_set;
	double via_pad1_sy;
	pcb_bool via_pad1_sy_set;
	double via_pad1_angle;
	pcb_bool via_pad1_angle_set;
	char *via_pad2_shape;
	pcb_bool via_pad2_shape_set;
	double via_pad2_sx;
	pcb_bool via_pad2_sx_set;
	double via_pad2_sy;
	pcb_bool via_pad2_sy_set;
	double via_pad2_angle;
	pcb_bool via_pad2_angle_set;

	/* pin subrecord of net */
	char *pin_reference;
	pcb_bool pin_reference_set;
	pin_function_enum pin_function;
	pcb_bool pin_function_set;

	/* useg subrecord of net */
	char *zlayer_name;
	pcb_bool zlayer_name_set;
	double length;
	double impedance;
	pcb_bool impedance_set;
	double delay;
	double resistance;
	pcb_bool resistance_set;

	/* polygon subrecord of net */
	int id;
	pcb_bool id_set;
	polygon_type_enum polygon_type;
	pcb_bool polygon_type_set;

	/* net class record */
	char *net_class_name;
	char *net_name;

	/* key record */
	char *key;

	/* Attributes */
	char *name;										/* attribute name */
	char *value;									/* attribute value */

	/* point, line and arc coordinates */
	double x;											/* coordinates point */
	double y;											/* coordinates point */
	double x1;										/* coordinates point 1 */
	double y1;										/* coordinates point 1 */
	double x2;										/* coordinates point 2 */
	double y2;										/* coordinates point 2 */
	double xc;										/* coordinates arc */
	double yc;										/* coordinates arc */
	double r;											/* coordinates arc */
} parse_param;

	/* exec_* routines are called by parser to interpret hyperlynx file */
pcb_bool exec_board_file(parse_param * h);
pcb_bool exec_version(parse_param * h);
pcb_bool exec_data_mode(parse_param * h);
pcb_bool exec_units(parse_param * h);
pcb_bool exec_plane_sep(parse_param * h);
pcb_bool exec_perimeter_segment(parse_param * h);
pcb_bool exec_perimeter_arc(parse_param * h);
pcb_bool exec_board_attribute(parse_param * h);

pcb_bool exec_options(parse_param * h);
pcb_bool exec_signal(parse_param * h);
pcb_bool exec_dielectric(parse_param * h);
pcb_bool exec_plane(parse_param * h);

pcb_bool exec_devices(parse_param * h);

pcb_bool exec_supplies(parse_param * h);

pcb_bool exec_pstk_element(parse_param * h);
pcb_bool exec_pstk_end(parse_param * h);

pcb_bool exec_net(parse_param * h);
pcb_bool exec_net_plane_separation(parse_param * h);
pcb_bool exec_net_attribute(parse_param * h);
pcb_bool exec_seg(parse_param * h);
pcb_bool exec_arc(parse_param * h);
pcb_bool exec_via(parse_param * h);
pcb_bool exec_via_v1(parse_param * h);	/* Old style via format */
pcb_bool exec_pin(parse_param * h);
pcb_bool exec_pad(parse_param * h);
pcb_bool exec_useg(parse_param * h);

pcb_bool exec_polygon_begin(parse_param * h);
pcb_bool exec_polygon_end(parse_param * h);
pcb_bool exec_polyvoid_begin(parse_param * h);
pcb_bool exec_polyvoid_end(parse_param * h);
pcb_bool exec_polyline_begin(parse_param * h);
pcb_bool exec_polyline_end(parse_param * h);
pcb_bool exec_line(parse_param * h);
pcb_bool exec_curve(parse_param * h);

pcb_bool exec_net_class(parse_param * h);
pcb_bool exec_net_class_element(parse_param * h);
pcb_bool exec_net_class_attribute(parse_param * h);

pcb_bool exec_end(parse_param * h);
pcb_bool exec_key(parse_param * h);

	/* called by pcb-rnd to load hyperlynx file */
pcb_bool hyp_parse(pcb_data_t * dest, const char *fname, int debug);
void hyp_error(const char *msg);

	/* create arc, hyperlynx-style */
pcb_arc_t *hyp_arc_new(pcb_layer_t * Layer, pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t X2, pcb_coord_t Y2, pcb_coord_t XC,
											 pcb_coord_t YC, pcb_coord_t Width, pcb_coord_t Height, pcb_bool_t Clockwise, pcb_coord_t Thickness,
											 pcb_coord_t Clearance, pcb_flag_t Flags);

#endif

	/* not truncated */