6 * PCB, interactive printed circuit board design
7 * Copyright (C) 2005 DJ Delorie
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
40 #ifdef HAVE_LIBDMALLOC
47 FlagCurrentStyle (int dummy
)
51 if (style
->Thick
== Settings
.LineThickness
&&
52 style
->Diameter
== Settings
.ViaThickness
&&
53 style
->Hole
== Settings
.ViaDrillingHole
&&
54 style
->Keepaway
== Settings
.Keepaway
)
64 return PCB
->Grid
> 1.0;
68 FlagGridSize (int dummy
)
70 return (int) (PCB
->Grid
+ 0.5);
74 FlagBuffer (int dummy
)
76 return (int) (Settings
.BufferNumber
+ 1);
80 FlagElementName (int dummy
)
82 if (TEST_FLAG (NAMEONPCBFLAG
, PCB
))
84 if (TEST_FLAG (DESCRIPTIONFLAG
, PCB
))
90 FlagTESTFLAG (int bit
)
92 return TEST_FLAG (bit
, PCB
) ? 1 : 0;
96 FlagSETTINGS (int ofs
)
98 return *(bool *) ((char *) (&Settings
) + ofs
);
105 return Settings
.Mode
;
106 return Settings
.Mode
== x
;
110 FlagHaveRegex (int x
)
112 #if defined(HAVE_REGCOMP) || defined(HAVE_RE_COMP)
129 FlagLayerShown (int n
)
134 return PCB
->ElementOn
;
142 return PCB
->InvisibleObjectsOn
;
144 return TEST_FLAG (SHOWMASKFLAG
, PCB
);
146 if (n
>= 0 && n
< max_layer
)
147 return PCB
->Data
->Layer
[n
].On
;
153 FlagLayerActive (int n
)
157 current_layer
= FL_RATS
;
158 else if (PCB
->SilkActive
)
159 current_layer
= FL_SILK
;
163 return current_layer
== n
;
166 #define OffsetOf(a,b) (int)(&(((a *)0)->b))
168 HID_Flag flags_flag_list
[] = {
169 {"style", FlagCurrentStyle
, 0},
170 {"grid", FlagGrid
, 0},
171 {"gridsize", FlagGridSize
, 0},
172 {"elementname", FlagElementName
, 0},
173 {"have_regex", FlagHaveRegex
, 0},
175 {"silk_shown", FlagLayerShown
, FL_SILK
},
176 {"pins_shown", FlagLayerShown
, FL_PINS
},
177 {"rats_shown", FlagLayerShown
, FL_RATS
},
178 {"vias_shown", FlagLayerShown
, FL_VIAS
},
179 {"back_shown", FlagLayerShown
, FL_BACK
},
180 {"mask_shown", FlagLayerShown
, FL_MASK
},
181 {"silk_active", FlagLayerActive
, FL_SILK
},
182 {"rats_active", FlagLayerActive
, FL_RATS
},
184 {"mode", FlagMode
, -1},
185 {"nomode", FlagMode
, NO_MODE
},
186 {"arcmode", FlagMode
, ARC_MODE
},
187 {"arrowmode", FlagMode
, ARROW_MODE
},
188 {"copymode", FlagMode
, COPY_MODE
},
189 {"insertpointmode", FlagMode
, INSERTPOINT_MODE
},
190 {"linemode", FlagMode
, LINE_MODE
},
191 {"lockmode", FlagMode
, LOCK_MODE
},
192 {"movemode", FlagMode
, MOVE_MODE
},
193 {"pastebuffermode", FlagMode
, PASTEBUFFER_MODE
},
194 {"polygonmode", FlagMode
, POLYGON_MODE
},
195 {"rectanglemode", FlagMode
, RECTANGLE_MODE
},
196 {"removemode", FlagMode
, REMOVE_MODE
},
197 {"rotatemode", FlagMode
, ROTATE_MODE
},
198 {"rubberbandmovemode", FlagMode
, RUBBERBANDMOVE_MODE
},
199 {"textmode", FlagMode
, TEXT_MODE
},
200 {"thermalmode", FlagMode
, THERMAL_MODE
},
201 {"viamode", FlagMode
, VIA_MODE
},
203 {"shownumber", FlagTESTFLAG
, SHOWNUMBERFLAG
},
204 {"localref", FlagTESTFLAG
, LOCALREFFLAG
},
205 {"checkplanes", FlagTESTFLAG
, CHECKPLANESFLAG
},
206 {"showdrc", FlagTESTFLAG
, SHOWDRCFLAG
},
207 {"rubberband", FlagTESTFLAG
, RUBBERBANDFLAG
},
208 {"description", FlagTESTFLAG
, DESCRIPTIONFLAG
},
209 {"nameonpcb", FlagTESTFLAG
, NAMEONPCBFLAG
},
210 {"autodrc", FlagTESTFLAG
, AUTODRCFLAG
},
211 {"alldirection", FlagTESTFLAG
, ALLDIRECTIONFLAG
},
212 {"swapstartdir", FlagTESTFLAG
, SWAPSTARTDIRFLAG
},
213 {"uniquename", FlagTESTFLAG
, UNIQUENAMEFLAG
},
214 {"clearnew", FlagTESTFLAG
, CLEARNEWFLAG
},
215 {"snappin", FlagTESTFLAG
, SNAPPINFLAG
},
216 {"showmask", FlagTESTFLAG
, SHOWMASKFLAG
},
217 {"thindraw", FlagTESTFLAG
, THINDRAWFLAG
},
218 {"orthomove", FlagTESTFLAG
, ORTHOMOVEFLAG
},
219 {"liveroute", FlagTESTFLAG
, LIVEROUTEFLAG
},
220 {"thindrawpoly", FlagTESTFLAG
, THINDRAWPOLYFLAG
},
221 {"locknames", FlagTESTFLAG
, LOCKNAMESFLAG
},
222 {"onlynames", FlagTESTFLAG
, ONLYNAMESFLAG
},
223 {"newfullpoly", FlagTESTFLAG
, NEWFULLPOLYFLAG
},
224 {"hidenames", FlagTESTFLAG
, HIDENAMESFLAG
},
226 {"fullpoly", FlagSETTINGS
, OffsetOf (SettingType
, FullPoly
)},
227 {"grid_units_mm", FlagSETTINGS
, OffsetOf (SettingType
, grid_units_mm
)},
228 {"clearline", FlagSETTINGS
, OffsetOf (SettingType
, ClearLine
)},
229 {"uniquenames", FlagSETTINGS
, OffsetOf (SettingType
, UniqueNames
)},
230 {"showsolderside", FlagSETTINGS
, OffsetOf (SettingType
, ShowSolderSide
)},
231 {"savelastcommand", FlagSETTINGS
, OffsetOf (SettingType
, SaveLastCommand
)},
232 {"saveintmp", FlagSETTINGS
, OffsetOf (SettingType
, SaveInTMP
)},
233 {"drawgrid", FlagSETTINGS
, OffsetOf (SettingType
, DrawGrid
)},
234 {"ratwarn", FlagSETTINGS
, OffsetOf (SettingType
, RatWarn
)},
235 {"stipplepolygons", FlagSETTINGS
, OffsetOf (SettingType
, StipplePolygons
)},
236 {"alldirectionlines", FlagSETTINGS
,
237 OffsetOf (SettingType
, AllDirectionLines
)},
238 {"rubberbandmode", FlagSETTINGS
, OffsetOf (SettingType
, RubberBandMode
)},
239 {"swapstartdirection", FlagSETTINGS
,
240 OffsetOf (SettingType
, SwapStartDirection
)},
241 {"showdrcmode", FlagSETTINGS
, OffsetOf (SettingType
, ShowDRC
)},
242 {"resetafterelement", FlagSETTINGS
,
243 OffsetOf (SettingType
, ResetAfterElement
)},
244 {"ringbellwhenfinished", FlagSETTINGS
,
245 OffsetOf (SettingType
, RingBellWhenFinished
)},
247 {"buffer", FlagBuffer
, 0},
251 REGISTER_FLAGS (flags_flag_list
)