File: parser.h

package info (click to toggle)
pcb-rnd 3.1.7b-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,108 kB
  • sloc: ansic: 213,400; yacc: 6,241; sh: 4,698; awk: 3,016; makefile: 2,254; lex: 1,166; python: 519; xml: 261; lisp: 154; tcl: 67; perl: 34; javascript: 6; ruby: 5
file content (251 lines) | stat: -rw-r--r-- 7,358 bytes parent folder | download | duplicates (4)
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 <librnd/core/rnd_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 */
	rnd_bool detailed;						/* data detailed enough for power integrity */
	rnd_bool unit_system_english;	/* english or metric units */
	rnd_bool metal_thickness_weight;	/* copper by weight or by length */
	double default_plane_separation;	/* trace to plane separation */

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

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

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

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

	/* supplies record */
	rnd_bool voltage_specified;
	rnd_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 */
	rnd_bool padstack_name_set;
	rnd_bool drill_size_set;
	rnd_bool pad_type_set;

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

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

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

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

	/* polygon subrecord of net */
	int id;
	rnd_bool id_set;
	polygon_type_enum polygon_type;
	rnd_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 */
rnd_bool exec_board_file(parse_param * h);
rnd_bool exec_version(parse_param * h);
rnd_bool exec_data_mode(parse_param * h);
rnd_bool exec_units(parse_param * h);
rnd_bool exec_plane_sep(parse_param * h);
rnd_bool exec_perimeter_segment(parse_param * h);
rnd_bool exec_perimeter_arc(parse_param * h);
rnd_bool exec_board_attribute(parse_param * h);

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

rnd_bool exec_devices(parse_param * h);

rnd_bool exec_supplies(parse_param * h);

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

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

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

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

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

	/* called by pcb-rnd to load hyperlynx file */
rnd_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, rnd_coord_t X1, rnd_coord_t Y1, rnd_coord_t X2, rnd_coord_t Y2, rnd_coord_t XC,
											 rnd_coord_t YC, rnd_coord_t Width, rnd_coord_t Height, rnd_bool_t Clockwise, rnd_coord_t Thickness,
											 rnd_coord_t Clearance, pcb_flag_t Flags);

#endif

	/* not truncated */