pcb-rnd 2.2.1 (r30680) ~~~~~~~~~~~~~~~~~~~~~~ [autoplace] -Fix: replace the totally broken code for "smd vs. thru-hole" query -Fix: do not allow overlap of subc bbox on the primary layer (fixes the problem that was caused by not allowing padstack/term overlap only) [brave] -Change: invert clipbatch - Gabriel probably would have reported already if anything broke, consider bacth clipping safe [build] -Fix: do not compile librnd for make clean -Fix: use target CC for genlist aux object compilation -Del: build system special casing for core action registration with auto-generated lists - since core actions are only a small part of all actions by now, there is no point in special casing; remove PCB_REGISTER_ACTIONS_FUNC() and PCB_REGISTER_ACTIONS_CALL() (split API for semi-automated action registration) - there is only one, manual API now -Split: hooks for librnd to make common infra reusable for sch-rnd -Move: calculate generic cflags before src/Makefile, so they can be included in Makefile.conf [cam] -Cleanup: make the error message of 'failed to produce any content' more clear about the reason (no layer group) -Add: separate global option for okempty-content and okempty-group [conf] -Add: new drc const subtree -Add: make sure centrally defined new drc consts are kept in sync with the legacy version unless they are overdefined [core] -Fix: undo: batch poly clipping to speed things up -Fix: wireframe_draw, thin_draw, thin_draw_poly and check_planes is communicated to the draw code through xform instead of global conf - export doesn't have to automatically reproduce GUI behavior on this -Fix: do not draw padstack shapes in check_planes mode - padstacks are not considered "planes", not even if they are of polygon shape -Fix: hide_names, show_solder_side, invis_other_groups, black_current_group draw is communicated to the draw code through xform instead of global conf - export doesn't have to automatically reproduce GUI behavior on this -Fix: loadfrom(netlist, ...) prints an error message if none of the import plugins could handle the file -Fix: do not try to remove unlisted subcircuits on import that have the NONETLIST flag set -Fix: data_mirror batches all low level undo into a single serial -Fix: cut-to-buffer object removal is undoable -Fix: rat anchor resolver on polygon shall use forced poly clipping to make sure the endpoint geometry calculation can be done -Fix: don't crash on search if it ends up on a polygon that got cleared out of existnece -Fix: message action: don't do invalid memory reads when argument can not be converted to string -Fix: ChangeName() shouldn't crash if there's no parent subc on the object being changed -Fix: in compat mode flag conversion accepts octagon flag on padstacks -Fix: potentially uninitialized variable in ChangeName() -Fix: segfault on {e t} on no-object -Fix: Select() redraws the objects that changed flags (or the whole screen) -Fix: arc angles edit: final/output delta sanitization so it's never larger than 360 deg -Fix: arc angles undo shall reclip sorrunding polygon -Fix: configure default mode (tool id) to -1 for invalid; any other tool id is unsafe as tool IDs are dynamically allocated on plugin load in random order -Fix: tool: arrow tool selects copy/move/line tool by name instead of hardwired tool IDs -Fix: tool: arrow selection: increase undo serial after new selection is made so it is not undone together with the operation that follows -Fix: rats_patch API bug: global var declaration shall be extern (potential compilation error) -Fix: rat line drawing shouldn't snap to -6;-6 mil as a special case, it should use the normal grid snapping as per default -Del: crosshair range - do not try to restrict objects into the drawing area -Cleanup: move standard tools out to a (core) plugin called tool_std -Cleanup: reference tools by name, not ID, where possible, in preparation of fixed tool ID removal -Cleanup: rat layer tool enforcement is event based so the tool code does not need to know anything about the application specific tool logics -Cleanup: move tool logic from crosshair to tool_logic.c -Cleanup: generalize action execution from file, using librnd's new call instead of local implementation -Cleanup: remove static tool IDs from standard tools -Move: tool_note is really crosshair_note - it is application specific, move it from generic tool infra to crosshair -Move: hid crosshair notify function to librnd - it is a generic hid API + event wrapper -Change: API CHANGE: plug_import support_prio can not have a FILE * argument because the meaning of args[] is implementation-specific - do not open the first arg as file centrally either -Add: object implementation: gfx -Add: tool API: escape() callback so each tool can handle escape locally -Add: API CHANGE: extend the import plug API for multiple file names -Add: API CHANGE: split plug import api's new single_file and the idea of "all arguments are filenames" so the API is generic enough for external commands (e.g. make) -Add: plug_import API: mark plugins that execute user specified external commands (import_net_cmd) -Add: plug_import: utility call to look up importer by name -Add: new conf nodes for the footprint import placement, dispersion and footprint removal -Add: import excess part removal option: view list -Add: conf setting for silently creating boards that are named on the command line (useful in batch/scripting to create initial boards) -Add: Undo() commands: FreezeSerial, UnFreezeSerial and IncSerial so scripts can batch undo operations -Add: make line, arc, text, poly, padstack, subcircuit mirroring undoable -Add: xform: flag_color bit to indicate whether selected/found/warn color should be drawn; pstk, arc, line, poly, text rendering ignores flag colors when intructed -Add: {v n} on subc toggles a hidden internal flag; when the flag is set, any terminal name change will turn on name visibility on the subc-part object -Add: LayerVisReset() action to expose the internal call -Add: when polygon clears out of existnce, the error message should include #id so it's easier to find it -Add: new conf subtree drc_disable, for separating per rule disable bools from the rule specifications (disable flags typically need to be in an editable role while rules may be in read-only roles) -Add: draw a small padlock symbol on locked subcircuits [dad] -Add: support for optional creation-time widget geometry: character width -Add: spin compound can set character width (geo) [dialogs] -Fix: preferences shouldn't crash on printing hlists -Fix: preferences/conf tree: don't crash when hashlist item edit is attempted -Fix: library filter: unhide all before expanding all, gtk doesn't like to expand hidden nodes -Fix: parametric edit: truncate enum desc if longer than 32 chars -Fix: parametric edit: if there are more than 16 parameters, make the window scrollable -Fix: parametric edit: do not overwrite filter text with example when footprint name is valid but dialog footprint name had () suffix -Fix: library window: make preview less jumpy when the refreshing announcement is shown or hidden -Fix: advanced search: query expression should be wide by default because expressions tend to be long -Fix: preferences/conf don't let a broken content editor dialog pop up for hash lists, they are just not editable on GUI -Fix: advanced search dialog: text string (@.string) operator should be string match not generic numeric ops -Fix: padstack geo edit dialog: changing a shape should mark the parent board changed -Fix: padstack editor dialog: proto edit operates on the non-transformed prototype of the padstack to avoid top/bottom confusion on smirror -Optimize: shave off ~70 pixels horizontally from the padstack proto dialog -Optimize: make the padstack dialog more compact horizontally -Optimize: rearrange hole entry fields so the padstack dialog is within the 800x600 limit -Add: export dialog: composite export attribute triggers function callback so the exorter can build that part of the dialog dynamically -Add: viewlist optionally takes a 3rd argument for an existing list pointer (takes over list ownership) -Add: advanced search GUI entry for gfx fields -Add: use checkbox for parametric dialog boolean parameter -Add: more detailed table header in padstack proto edit -Add: HLIST handling in the config dialog (for the new drc_query rule config) -Add: advanced search offers view list as action to perform on objects found -Add: mark the old drc settings obsolete and include an url with the details; create a frame for the new drc dispatch; drc rule button calls the implementations rule list action -Add: padstack proto editor: indicate smirrored padstack [distalign] -Fix: distribute() and align() arguments from the second are optional -Fix: excess undo on move caused doubled displacement of object in an undo after align() or distribute() -Fix: in align(), when the reference is first or last, make sure to pick the left/top or bottom/right coordinate for reference, independently from the align target -Add: do not assume object is a subcircuit, operate on any object type [distaligntext] -Fix: aligntext() arguments from the 2nd are optional [doc] -Fix: typo in user manual / invocation: --gui ddoesn't take '=' -Fix: typo: doc-rnd is long gone -Fix: distalign plugin doc: wrong header level -Fix: headers in scripting rosetta -Fix: rats are not circuits on the phsyical board: those are nets -Cleanup: reoder sections in 05_ui so it reflects importance of different UIs better -Cleanup: replace the CLI documentation and explain what actions are -Del: the old details on Import() from the action ref; replace with a help page to switch to ImportSch() -Del: links to other EDA does not belong in the user manual -Del: links to generic pcb fabbing techniques - out of scope for an user doc -Del: local toc for gtk dialogs - we need content, not placeholders -Del: don't document acompnet - it is not yet released -Split: intro section into hierarchical -Split: user manual into 3 volumes -Update: Mode() for the new parameters -Update: new netlist format (action) -Update: keys for the latest menu changes -Update: GetXY() optional arg -Update: action ref for align() and distribute(): they work on objects, not only subcircuits by now -Update: pcb-rnd is part of ringdove -Update: openscad doc terminology from element to subcircuit -Update: model objects drawing for padstack -Update: model: board size is really only the drawing area size -Update: model: board font is optional -Update: model: board includes generic configuration -Tune: better alignment of the thermal table, make it less vertical by cutting it in half and use a horizontal layout -Tune: make oversized model/object images smaller on the web render -Add: note on how custom layer colors are lost in alien formats -Add: cam: okempty-group and okempty-content -Add: help: detailed explanation for an import config error message -Add: document the new placement/removal methods of ElementList -Add: err0002 for the Import() -> ImportSch() transition -Add: motivation: 2020 is about ringdove -Add: document ¤t as valid layer syntax -Add: scripting: system-installed fungw requires system-installed genht on standard path for now -Add: link layer addressing in appendix index -Add: document the hlist conf type -Add: drc_query: document the config side; single-expression tutorial for drc_query -Add: link drc_query/ from feature index -Add: explain the no-hole case when checking for padstack overlapping holes -Add: specify the drc_query tEDAx block -Add: manual page for bxl2txt(1) -Add: history: data model rewrite -Add: utility to list all html links recursively, down -Add: 08_util: section numbering, index.html with toc -Add: 07_io: section numbering, index.html with toc -Add: link bridges.svg -Add: convert openscad plain text description to html -Add: model: board also includes route styles [draw_csect] -Fix: do not use hardwired colors for background and buttons - rather use configured background color and grid color for foreground, that combination should be visible on both dark and light bakcground -Fix: draw hover-text with the annotation color so it is visible over any background [drc] -Fix: reset the drc list centrally, not from drc_orig, to allow alternative drc implementations -Add: infra for registering drc implementations [drc_orig] -Split: net bloat/shrink logics from the hardwired C drc code for reuse -Move: net integrity check from drc_orig to query - it is required by a query function and drc_orig will be removed long term -Change: simplify net integrity check API by removing the hardwired view list used only by drc_orig (which can use cb_data to pass it instead) -Add: plugin config so the original drc engine can be disabled [drc_query] -Add: plugin for the query() programmable/scriptable DRC -Add: rewrite all old DRC rules as query scripts -Add: gui to control and edit DRC rules one by one [export_dxf] -Add: separate warning for no-content, suppress with [okempty-content] [export_excellon] -Add: separate warning for no-content, suppress with [okempty-content] [export_gcode] -Add: separate warning for no-content, suppress with [okempty-content] [export_gerber] -Cleanup: remove long unused, disabled code for the old LPC/LPD support -Add: separate warning for no-content, suppress with [okempty-content] -Add: naming style penalty: 8 seconds wait -Add: large warning that tries to redirect users from direct gerber export to cam -Add: GUI export warning more bold with a button to switch to the cam export dialog quickly [export_openscad] -Fix: don't print arc approx closing line from uninitialized variable if arc could not be drawn -Fix: arc approximation for negative delta angles [export_png] -Add: separate tracking of empty output due to no objects on existing layer groups -Add: enable flag colors only when as-shown is set [export_ps] -Add: separate warning for no-content, suppress with [okempty-content] -Add: eps: enable flag colors only when as-shown is set [export_svg] -Add: separate warning for no-content, suppress with [okempty-content] -Add: enable flag colors only when as-shown is set [extobj] -Fix: typo in API: makr instead of mark -Fix: single click selection: select all floaters of the same extobj -Fix: block selection selects or unselects all floater of an extobj at once -Fix: when copying subcircuits to buffer from extobj-floater side effect, make sure each subc is copied only once even if multiple floaters would trigger the copy -Fix: return 0 when no floater flag sync happened (missing return value) -Add: dialog and unpack helpers for the int type -Add: the bus extended object -Add: floater flag sync call so selection flag can be applied to all floaters at once [find] -Fix: hshadow hole vs. line/arc intersection (always returned false instead of checking for intersection) -Fix: unplated hshadow shouldn't indicate galvanic connection to lines and arc ever -Fix: hshadow slot vs. line/arc intersection (always returned false instead of checking for intersection) -Fix: pstk-pstk intersection for the hshadow case -Fix: hshadow hole/slot vs. polygon (with or without thermal) intersection (always returned false instead of checking for intersection) -Fix: no-shape hole/slot vs. line/arc intersection (always returned false instead of checking for intersection) -Fix: no-shape hole/slot vs. poly (with all thermals) intersection (always returned false instead of checking for intersection) -Fix: uninitialized object type for pstk vs. polygon padstack connection check -Fix: line/arc/poly vs. full poly intersect checks on all polygon islands -Add: find from obj can start with empty find (NULL obj) for easier loop searches [gtk] -Fix: draw crosshair even when x < 0 -Fix: gl: draw full screen crosshair, even on coords outside of the drawing area -Fix: don't hardwire pcb-rnd in window title -Fix: determine text height properly even for truncated text (matters on high res screen) -Fix: uninitialized memory in color widget temp color -Fix: the preview widget shall ignore board flip for buttons (since it is ignoring it for drawing too) -Fix: wt_preview: mouse motion and button release should also ignore board flip -Change: allow rendering objects outside of the drawing area -Cleanup: replace pcb_any_obj_t * dep with void * - the GUI needs to be portable among apps -Add: implement get_dad_hidlib() -Add: pixmap API binding -Add: remove hotkey when removing menu item -Add: apply DAD character width on string input [import_calay] -Add: plug_import registration so it works with the import_sch2 plugin -Add: support_prio does a test-parse before saying yes to a file [import_edif] -Fix: wrong use of pcb_fopen() (leaked in due to missing #include) -Fix: proper error reporting using pcb_message() instead of fprintf [import_fpcb_nl] -Fix: don't return error after succesfully loading the netlist -Add: plug_import registration so it works with the import_sch2 plugin -Add: support_prio reads the header [import_gnetlist] -Add: reimplement gnetlist import as a small plugin -Add: local config for gnetlist name [import_hpgl] -Fix: wrong action arg when switching to the buffer tool [import_ipcd356] -Add: plug_import registration so it works with the import_sch2 plugin -Add: support_prio does a test parse before saying yes -Fix: don't crash on mismatching format -Fix: don't accept a leftover-space from a previous line [import_ltspice] -Add: plug_import registration so it works with the import_sch2 plugin -Add: support_prio does a test-parse before saying yes -Fix: always render base name properly, even if the file name is wrong [import_mentor_sch] -Add: plug_import registration so it works with the import_sch2 plugin -Add: make mentor_sch a low prio fallback because we can't tell it apart from edif by a test-parse -Tune: never accept mentor sch in autodetect because the edif problem [import_net_action] -Add: netlist import plugin for pcb-rnd action scripts (useful for scripts/programs generating the netlist in action script, e.g. gsch2pcb-rnd or gnetlist -g pcbfwd) [import_net_cmd] -Add: initial implementation (system() wrapper) with env var sets -Fix: support_prio is always 0 to avoid autodetected command execution [import_sch] -Del: do not initialize own config, fully rely on import_sch2's (avoids double registration of conf nodes) -Del: ImportGUI() - replace it with a dummy implementation that warns and calls ImportSch() -Del: remove the old gnetlist-only import schematics from the menu -Change: make using DeprecatedImport() more painful with a sleep(8) -Add: print a bold warning about feature removal, direct the user to err0002 for full description and links -Add: Import() placeholder in oldactions to tell users how to upgrade [import_sch2] -Add: format-neutral import plugin with a better GUI and input file names and format stored in config [import_tinycad] -Fix: do not crash when read fails on test-parse -Add: plug_import registration so it works with the import_sch2 plugin -Add: support_prio loads the netlist to make sure it's valid [io_kicad] -Fix: kicad save: subc main layer should be F.cu for subcircuits placed on the top -Fix: save polygons in subc as fp_poly instead of zone - modules don't have zones -Add: plug_import registration (of the eeschema schematics load) so it works with the import_sch2 plugin -Add: read_net's support_prio does a test-parse before saying yes to a file [io_mentor_cell] -Add: Consider text mirrored flag when calculating bounds. -Add: Consider text thickness when calculating bounds. [io_pcb] -Fix: when saving special shaped pin (old pin shape patch), shape 1 or 17 are plain octagons, save them with the octagon flag instead of square+shape for better comaptibility [io_tedax] -Add: plug_import registration so it works with the import_sch2 plugin [layer] -Fix: layer delete undo: insert the layer back using its original lid at its original group position -Fix: when layer IDs are moved, update layer objects' ->parent field as well -Fix: MoveLayer() return value is 0 for a succesful step+ or step- so it doesn't break script execution -Fix: 'insert layer after' menu: batch insert and move so it is undone at once -Fix: unbind subcircuits from board layer before removing it -Add: replace the old layer move undo code with new one that works for create/remove -Add: new undo code for layer append and remove -Add: layer rename/recolor undo -Add: make layergroup name and purpose string changes undoable -Add: undoable layer group type (location & material) change -Add: undoable layer group del -Add: make pcb_layergrp_dup() undoable -Add: make pcb_layer_create() undoable -Add: make pcb_layergrp_step_layer() always undoable -Add: new action: LayerByStack(select, next|prev) -Add: standard layer addressing: ¤t means the currently selected layer -Add: default board file copper and silk layer key bindings -Add: the LayerVisReset() action does the historical mask and paste hiding -Split: layer move code core into a separate append and delete function because it was too large and they are really unrelated -Split: layer vis function for hiding paste and mask (for historical reasons) into a separate, public function since actions will need to access it [lesstif] -Fix: don't hardwire pcb-rnd in window title -Add: pixmap draw binding -Add: remove hotkey when removing menu item -Add: DAD: apply optional character width on string input widget on creation -Add: mouse cursor reg/set from tool -Add: implement get_dad_hidlib() [lib_hid_common] -Fix: prompt-for and log window gets the app name from hidlib instead of hardwiring "pcb-rnd" -Cleanup: remove pcb-specific #includes to make sure the plugin is hidlib-usable -Move: toolbar code from lib_hid_pcbui to lib_hid_common so other ringdove apps can use it (optional) -Add: API: macro-free variant of Zoom()'s help for ringdove apps [gl] -Fix: always draw crosshair end-to-end of screen view area -Add: pixmap: Enable Alpha test when rendering textures [lib_hid_pcbui] -Fix: Zoom() generalization: define action syntax in lib_hid_common, overload it from lib_hid_pcbui -Cleanup: make toolbar code independet of pcb-rnd internals, depending only on librnd -Split: zoom code to pcb-rnd-specific and generic so the generic part can be moved; move zoom core to lib_hid_common so it can be reused by other ringdove apps -Move: NOGUI to PCB_GUI_NOGUI in lib_hid_common for reuse in generalized zoom/pan actions -Move: Center(), Pan() and Scroll() to lib_hid_common - they are hidlib-generic, reusable in other ringdove apps -Move: Command() to lib_hid_common - depends only on hidlib, needed by all ringdove apps -Add: create custom layer keys at the @layerkeys anchor in the menu system, reading key config from layer attributes -Add: timed update of layer attr key menu after attribute change -Add: LayerHotkey() action for interactively set the hotkeys of a layer -Add: use a timer to batch layer menu rebuild requests [librnd] -Fix: tool: mode change callback: avoid infinite recursion by locking -Fix: printf %ma prints degrees to at most 6 digits, not truncating them to integer -Fix: make sure the Fullscreen() action returns 0 on success -Fix: polyarea: memory leak on head item in contour include -Fix: Cursor(): calculate coordinates correctly both for board and view cases, for all variants of flips in view -Fix: strict c89 violation: don't cast function pointer to void * without the central wrapper -Cleanup: #include safety: use -Cleanup: rename tool API calls to remove some historical confusion and simplfy names: notify->press, remove _objects suffix -Cleanup: remove Mode(None) in favor of Mode(Arrow) to unify tool invocation conventions (address tools by their native name so the 1:1 translation can be removed) -Cleanup: remove 1:1 tool name translation table from Tool() -Cleanup: rtree doesn't depend on pcb_any_obj_t *, uses void * instead -Cleanup: split global_typedefs so librnd doesn't contain PCB-specific types -Cleanup: decouple "note" coordinates and states from crosshair - these are really tool states and should be in the hidlib struct to be reentrant -Cleanup: make 'grabbed' mark reentrant by moving it into the hidlib struct as tool_grabbed -Cleanup: const correctness in rtree compat -Del: get rid of macro.h - merge into librnd/core/misc_util.h -Split: separate librnd code from pcb-rnd code -Split: move generic actions from gui_act.c and main_act.c to librnd -Split: SetGrid() from SetValue() so that it can be used by other ringdove apps from menu -Change: remove hardwired rat layer drawing flag from the tool code in favor of an unsigned long bitfield each app can use differently -Rename: Mode() to Tool() for clarity, keep Mode() as an alias for backward compatibility -Move: Conf() from core to librnd -Move: Message() to librnd -Move: grid related actions from core to librnd because menu files of other apps will also depend on it -Add: Tool(): if parameter is not a command, select tool by name -Add: spare pcb_hidlib_t fields for binary compatibility -Add: API for registering app events -Add: pcb_conf_grow() to allow dynamically growing lists -Add: hid API: function to retrieve current hidlib from the GUI within a DAD callback -Add: pcb_hidlib_t * as first arg in crosshair callbacks to make them reentrant -Add: GetXY() optionally returns x or y coord; first arg is an optional message -Add: expose point-in-triangle function in the public API -Add: more convenient pixmap API for loading pixmaps for the cache (for gfx) -Add: hid_cfg lihata insertion: allow inserting lists under hashes, not only text nodes -Add: menu key helper: remove a hotkey from the tree -Add: convert from custom fungw types to FGW_STR when called with FGW_AUTO -Add: stand-alone menu script subtrees: menu action execution: if an action list child is a symlink, follow it; if an action list child is a list, recurse and execute each action there too -Add: introduce the HLIST conf type, for list-of-opaque-hash-nodes for specialized plugin subtrees -Add: conf: a variant of the get_at() API that returns the node from the merged plugin conf tree -Add: call conf callback new_item_post() when creating new native nodes -Add: conf: conf change callback on inserting new lht nodes in a hlist for the first time -Add: conf: function to convert string to native config type -Add: conf: call for unregistering a single conf field -Add: conf: low level field registration returns the new field so the caller doesn't need to look it up -Add: conf: flags to auto-free description and hash_path of nodes (useful for dynamically registered nodes) -Add: conf native: action name for GUI editing (useful for hlists) -Add: flag for auto-free dynamic alocated value (for dynamic conf fields) [propedit] -Fix: dialog: bool is never relative - always copy the value to the right side on row selection -Fix: do not auto-apply relative changes, but auto-apply absolute changes -Add: propsel set for all numeric fields of the gfx object [pstk] -Fix: poly shape grow/shrink (offset): negate value if polygon is inverted so grow always results in polygon bigger than the original -Fix: when copying a padstack prototype, strdup the name so names are detached -Add: function pcb_pstk_shape_mech_or_hole_at() that returns a shape for the hole to remove special casing on caller side -Add: padstack proto dup and proto name change and some of the shape geometry changes made undoable -Add: low level accessors for exposing untransformed padstack shapes (for editing prototypes) [query] -Fix: parser survives empty expression -Fix: access: make sure coord type is returned (instead of int) for querying coord fields -Fix: be tolerant for excess newlines in the script -Fix: free find context after a netlist-object listing -Fix: query(): print proper error message on invalid or missing first arg -Add: support for gfx fields: cx, cy, sx, sy, rot and derived field area -Add: support for rule, let and assert -Add: iterator activity map: run only those iterators that are referenced in an expression -Add: query function: distance() for the case of 4 coords -Add: when printing in eval, also include the object ID, like to make the print useful -Add: query function: mklist(): user scripts can create and even return lists -Add: query function: netlist() - returns an unordered list of nets -Add: special case iterator: when a function returns a list, it must be iterated locally -Add: net accessor for .name and attributes -Add: netterms() to return the terminals of a net -Add: query functions get execute context so they can access the cache (and pcb later) -Add: require and pass on (pcb_board_t *) so the code doesn't have to depend on PCB -Add: query function: netobjs(): return all objects of a net -Add: query function: subcobjs() returns a list of direct subc objects -Add: query function: action(): convert arguments and call the action -Add: query function to return one (terminal) object of each net segment -Add: query functions for searching for breaks and shorts on a given net specified by an object -Add: query function: getconf(): expose config settings (so that a drc const subtree will be accessible later) -Add: $name shorthand for accessing drc constants -Add: query funnction violation(): creates a list with metadata for drc presentation -Add: query(view, ...) to collect results in a view list -Add: query(evalidp, ...) for eval with idpaths printed (useful for debugging and external script processing) -Add: $dwg_area_x and $dwg_area_y for easy/quick access of board drawing area extents -Add: query functions: glue function for padstack neck check -Add: query function: poly_num_islands(): zero for clipped-out-of-existence polygons, >1 for fullpoly with multiple islands -Add: persistent/shared execution cache concept -Add: look up and save PCB_OBJ_NET_TERM for netlist cache to make queries cheaper [report] -Fix: Report(AllNetLengths) unit parameter handling bug caused crash on uninitialized variable -Cleanup: make the documentation on various syntax options more clear -Cleanup: split report content per object type into separate functions because the switch grew unbearably large -Add: report on text and gfx objects -Add: object report should print the footprint attribute for subcircuits [res/menu] -Fix: re-add polygon close and polygon previous point that got removed in the 2.0.0 menu upgrade -Fix: Tool() calls shall use lowercase tool names -Cleanup: split the import menu into sections using separators (it grew too big) to make room for the new sch import -Cleanup: regroup import menu file formats so netlists are in a separate block -Change: use lower case tool names because this API is switching to case sensitive -Change: use the new, shorter tool names, as registered by tool_std -Change: make the new ImportSch() based import schematics the default, top entry in the import menu, remove the old gschem-only importer menu -Rename: Mode() to Tool() for clarity -Rename: Tool(PasteBuffer) to Tool(buffer) for the unified by-tool-name invocation -Add: @layerkeys anchor for attribute defined layer keys -Add: menu/key binding for previous/next layers -Add: layer context popup: hotkey set -Add: view and GUI reset menu items [stroke] -Fix: remove static tool ID referencing - use Mode(Escape) for stopping line drawing -Cleanup: convert the stroke API from stub to event based -Cleanup: move pcb_mid_stroke state from core to the plugin - the core should only notify the plugin using events, but all states must be stored in the plugin -Cleanup: don't depend on PCB -Cleanup: do not directly use crosshair X and Y, that is app-dependent - get these through event args -Change: the stroke plugin is now part of the hidlib [tests] -Fix: librnd test: need to use source vesion of librnd.mak, it is not available before the first (local) install -Fix: tests implemeted in C shall use the same cflags as src/ so objects are linkable -Fix: librnd: the includes-test requires the same glue layer as the main test -Fix: make clean from conf test needs to remove diag obj as it may have been compiled by this dir -Add: RTT: new test case for making sure flag colors and wireframe don't leak in to graphical exports -Add: drc_query tests -Add: query test: getconf() [util] -Del: code change statistics: with librnd and tool move, chgstat lost its remaining validity -Del: workarounds/unwarn* - we are not using #warnings anymore -Del: pcb-strip: the old/obsolete .pcb format is not ours, we shouldn't keep utils to edit it -Add: bxl2txt and txt2bxl for low level conversion of bxl binary files to bxl text files for debug -Add: script to verify a downloaded signed file [win32] -Fix: explicit dependency on librnd .a files (gsch2pcb-rnd is linked against them) -Update: gsch2pcb-rnd uses LIBRND_EXE instead of non-existent $(EXE) -Update: gsch2pcb-rnd shouldn't depend on constant paths, that wouldn't work on win32 -Add: missing include for the win32 path hacks in import_gnetlist -Add: librnd.mak should have LIBRND_EXE, the .exe suffix on windows (all ringdove apps will need this for cross-compilation) -Add: detect and use target ar for building .a files pcb-rnd 2.2.0 (r29205) ~~~~~~~~~~~~~~~~~~~~~~ [act_draw] -Add: action for layer object duplication [act_read] -Add: ReadGroup(): action for querying group fields [asm] -Fix: template for x and y didn't append the coordinate values to the right string [autocrop] -Fix: both board size change and data move should be undoable [bom] -Cleanup: remove local string list implementation in favor of common vts0 -Cleanup: name space conventions -Cleanup: no need to cast malloc() return value, the code is not C++ -Cleanup: code formatting & whitespace -Fix: obsolete comment on what the plugin does [cam] -Fix: default cam jobs: gerber assy exports always export both the virtual and the doc layer for compatibility with old and new stackups -Fix: negative layer group offset sign bug (should count _back_ from the last group) -Add: doc: mention [output options] in the syntax comment -Add: executing a cam export script should be a single export session [core] -Cleanup: remove dolists.h and make action table registration macros more explicit to simplify the API -Cleanup: attribute change callback should always happen, including when the attribute is free'd so administration depending on the callback will always work -Cleanup: attribute memory leak at object free -Cleanup: centralize/move subc-terminal-hash administration into attrib post-change handler, so it can not miss any term change -Cleanup: actions: get hidlib through argv0 instead if using global var PCB -Cleanup: change order of functions in main.c so path initialziation is on top, close to path var declarations -Cleanup: simplify the exec_prefix code by not re-implementing strchr() -Cleanup: de-doxyfy the exec_prefix comment -Cleanup: remove use of appearance/color/crosshair - redundant with appearance/color/cross -Cleanup: const correctness in pcb_poly_contour_copy(), pcb_poly_contour_new(), cntrbox_adjust(), pcb_poly_contour_inside() -Cleanup: footprint API: take a conf list instead of a ':' separated lsit of strings for footprint search path -Cleanup: centralize pcb aux unit vector size as more and more parts of the code start to depend on it -Fix: do draw arcs with 0 thickness, only omit negative thickness objects -Fix: minimum thickness should be minimum size and maximum thickness should be maximum coord - don't constraint thickness beyond our number representation -Fix: allow arc radius to go down to 0 and text to scale down to 1% - don't constraint it with a random value when nothing breaks -Fix: do update subc->terminals hash if a terminal is removed or added back by undo -Fix: still draw "cleared out of existence" polygon's as-drawn contour if it was requested -Fix: objects that are being free'd need to be removed from their rtree -Fix: attribute free should be done in 2 steps (notify then free), to avoid cached pointers dangling -Fix: run-time concat of config paths - don't assume all parts are compile-time-known (helps win32) -Fix: pcb_crosshair.snapped_pstk was never set back to NULL after leaving the snapped padstack -Fix: Cursor() steps really in grid unit when addressed by grid in last arg and is not snapped -Fix: Cursor(): when leaving the snapped padstack, don't go much further than really needed -Fix: file-action: new pcb action legitimately uses the PCB variable directly, but it needs to notify the GUI about the new PCB as soon as possible -Fix: default boards: group name for top and bottom assy should have _ for separator, not -, for consistency -Fix: set color before drawing marks. -Fix: do not set crosshair color if nothing is drawn from the crosshair -Fix: polygon support: pline's head vnode is a pointer, not a local struct - this adds one extra allocation per pline, but removes the special casing for head, which is required for the 'exclude head' bugfix later -Fix: pcb_poly_vertex_exclude() can be called with the pline the node is deleted from; if the node is the head, the pline's head is bumped to the next node to avoid dangling head -Fix: thermal/padstack-shape poly render corner case: in gcode, the hole and slot shape does need to be subtracted on mech layers -Fix: padstack x-mirroring: also have to reverse the order of polygon points to keep the normal vectors in the right direction (wihout this, shrinking/growing will do the opposite) -Fix: fp fopen: return the first footprint found instead of returning NULL if the last search path didn't have it -Fix: poly draw helper: when drawing optimization (single line instead of polygon too small), set line cap and width -Fix: move-to-current-layer: make sure the original (sometimes bound) layer (parent of the object) is passed as original layer instead of the resolved board layer so the undo would put the object back to its right layer -Fix: move-to-layer undo: do not assume the other layer is in PCB, it can be a subc layer as well -Fix: NewGroup(): uninitialized attr argument caused segfaults in some cases -Fix: allow setting clearance value through the Change infrastructure to smaller than DRC minimum (pcb-rnd is not a nanny, it should just do what the user ordered) -Fix: pcb_lineop_move_point_with_route() shall return the original line object instead of NULL (extobj will need it) -Fix: route code should copy attributes of lines and arcs being split -Fix: line endpoint move with the route code does not swap endpoints -Fix: invalid memory handling on routing style caused by emitting the event before the correct pcb is made global -Fix: inhibit redraws while creating a new board -Fix: moving arc endpoint did not set return value properly, caused uninitialized pointer return -Fix: when undoing flags, re-clip on flag changes that affect poly clipping (the CLEAR* flags) -Fix: make low level calls of board size change undoable (will fix non-undoable autocrop) -Fix: uninitialized memory in undo slot allocation caused invalid memory access of parent-subc-ID when undoing 'create object' -Fix: when grabbing an arc with radius=0, do not ever grab the endpoint - the only reasonable thing to move is the arc itself -Fix: 0 radius arc is special case in wireframe draw: should be a single, full-circle arc, no end-point calculation needed -Fix: selected move, keeping object IDs, must do the ID manipulation before adding the object to the undo list -Fix: disabled win32 debug print on path calculation: use the new, prefixed vairable names -Fix: double free on text object destroy -Fix: do not export poly annotation overlay (should appear only on gui) -Fix: color: packed set color did not really set the packed field -Split: layer(grp) addressing code from cam and layer to layer_addr.[ch] -Split: drc clearance indication color from cross color -Split: mark color conf node from the cross(hair) color, especially because the crosshair is inverted -Split: (crosshair-) attached object color from cross(hair) color into a separate conf node so the user has more freedom in setting different colors -Tune: layer alpha for gl raised from 0.7 to 0.75 so that the slot/hole color with standard colors don't end up hiding the slots; darken the default color for padstacks to get them visible on both gdk and gl with the default setup -Change: load the menu file from confdir, not sharedir -Update: default boards have substrate thickness set to 1.6mm finished -Add: poly seg accessor -Add: polyarea: rename and publish the function that calculates the edge tree -Add: polyarea: a forced include_vertex() variant that doesn't do anything smart after including the vertex -Add: polyon offset post-processing: remove self-intersection where possible -Add: callback based arc approximation helper with configurable resolution and scan direction -Add: API change: pcb_buffer_copy_to_layout() gets a keep_id argument that will be used later to make sure selected objects that moved through a buffer copy don't get new IDs -Add: API change: copy-to-buffer API for keeping IDs (for seamless "move selected object" using a buffer) -Add: centralize layer stackup update inhibition in loading boards (the gui may be slow and all io plugins change the stack in multiple steps anyway) -Add: printf hardedning: safe low level printf API (printf format string hardening) for using unsafe format string from the user -Add: undoable object attribute change call -Add: hooks for type-common pre/post calls on operations -Add: subc layer creation helper/shorthand (for extobj) -Add: subc move origin calls -Add: buffer scaling GUI: input both x and y scale and provide a lock checkbox to keep them in sync -Add: attribute: helper function for attribute query with both global and "::" namespace -Add: centralized board thickness calculator (multiple plugins depend on this) -Add: action infra: layergrp and layergrpid fungw types (so scripts can access groups) -Add: export session begin/end events to inform plugins which calls will be for a single session [dialogs] -Fix: layer binding dialog: allow 'global' location to be set explicitly -Fix: library window: enable the edit button not only when '(' is entered in the filter but also when a parametric is clicked in the tree -Fix: preferences: disable library path move, edit and remove buttons when no row is selected -Fix: library window: do not attempt to generate the parametric footprint until the clsoing parenthesis appears - this spares unwanted error messages while typing a long parametric -Fix: library window: do not crash when parametric footprint edit clicked after a single click select of a parametric footprint in the tree -Fix: library window: prefer the footprint of the active row in the tree when editing a parametric footprint using the edit button, if the last operation was a click (and prefer the filter text if the last operation was editing the text) -Fix: library window: memory handling bug when picking up footprint name for parametric edit button from the tree -Fix: preferences library tab help button: the same dialog is invoked in two different contexts, better use the global var for getting the struct for now -Fix: preferences lib help: do not crash if $() subst has undefined value -Fix: preferences: editing an existing library path won't start with an empty edit value but the original value filled in -Fix: padstack lib window: scroll the padstack list as it can grow real huge -Fix: on win32 the posix shell has to be used explicitly for getting --help on parametric footprints -Add: new layer types in the advanced search dialog -Add: pressing the export button in the direct export dialog should begin/end a new export session [doc] -Fix: packager's doc: don't lise .so and .pup files for plugins that are built-in -Fix: packager's doc: do not generate a non-existing lib package for each lib plugin -Fix: packaging: include files in the core package, but put sch-import related files in the sch import package -Fix: packaging librnd-dev should depend on librnd, the headers are usuless without the libs -Fix: packager's doc: missing librnd.mak from librnd-dev -Fix: packager's doc: missing librnd binaries from the file list -Fix: bridges.svg: we don't yet write eagle, only read; there's no separate breadboard export anymore -Fix: data model: remove text 90-degree-rotation-only from the doc, it's not true anymore -Update: fungw installation path (detector picks it up from multiple standard paths) -Change: fungw installation:make mawk dependency only optional but recommended in fung winstallation now, that we have fawk -Change: link to the windows downloads from the experimental version to the official version -Change: packager's doc: change the long description syntax from debian to plain text (as this file is used for rpms too) -Change: compact bridges.svg horizontally to make room for even more plugins -Split: layer group addressing from cam, move it to the appendix as many things will use it -Add: windows dev doc links to the pool node describing the cross compilation steps -Add: long/detailed package descriptions for the lib packages -Add: smartdisperse doc -Add: bridges: hkp board import, g-code export, openems export, excellon export, dsn, tEDAx, eagle DRU -Add: add short command line summary for each cam section header to make the context easier to understand -Add: data model: text thickness -Add: fungw installation: note on when it is needed -Add: packaging: move .so-with-no-ver-suffix to the -dev package (Debian policy) [export_excellon] -Add: per export session tool numbering, with an option for a per file numbering [export_gcode] -Change: plugin got rewritten from scratch using millpath [export_gerber] -Fix: implicit outline shall be drawn, boundary layer is not empty with that -Fix: use a per session global aperture count, so subsequent sessions restart counting -Add: option for per layer aperture numbering [export_openems] -Add: enable openems export plugin by default (simulation) [export_ps] -Fix: the boundary is never empty: it's either explicit or implicit [export_stl] -Add: STL export HID for board outline [export_svg] -Fix: don't crash in print footer if failed to create the output file [extobj] -Add: extended object infra -Add: line-of-vias extended object -Add: dimension line extended object -Add: experimental, unstable cord extended object [fp_wget] -Fix: footprint search needs to be per backend because index format differs between gedasymbols and edakrill [fungw] -Cleanup: use macro PCB_ACT_HIDLIB, shorthand to argv[0].val.argv0.user_call_ctx to simplify the code -Fix: wrong gtk context passing to keyboard handler ruined hidlib passdown -Split: pcb_actionl() and pcb_actionva(); pcb_actionl() is kept for compatibility for some releases, but shouldn't be used -Change: use pcb_actionva() instead of pcb_actionl() so pcb_actionl() can be removed later on -Add: always reset user_call_ctx() when directly calling fungw functions - actions now get the hidlib context -Add: pcb_hid_get_flag() gets pcb_hidlib_t * so it can pass it on to actions as user_call_ctx -Add: pcb_actionv_bin() gets (pcb_hidlib_t *) as first arg so it can be passed down to the action -Add: pcb_action(), pcb_actionva(), pcb_parse_actions(), pcb_parse_command(), pcb_actionv(), pcb_cli_common() get (pcb_hidlib_t *) as first arg so it can be passed down to the actions [gl] -Fix: xor drawing in the gl hid so that it matches the gdk hid. [gtk] -Fix: don't crash on menu sync while creating a new PCB and hidlib is NULL -Fix: don't let gtk_init() change the locale on windows, that ruins strtod() -Fix: attribute dialog run: wm-close shoudl return a large negative value instead of 1; some dialogs try to return meaningful values using small positive numbers for different close buttons [hidlib] -Cleanup: gui_MayOverwriteFile() doesn't need to get an explicit hidlib arg, it's in argv[0] -Fix: librnd installation: .so shorthand symlinks should always be relative, including full path to the build dir will break it in packaging -Fix: cross color explanation: not related to drc anymore, but is inverted -Fix: rtree.h shouldn't depend on pcb-rnd-only rtree2_compat.h, that breaks librnd; rtree2_compat.h should depend on rtree.h -Fix: also install safe_fs_dir.h with librnd (does not have a .o so does not get auto-selected) -Fix: need to install compat_inc.h too for librnd (doesn't have a .o, required by safe_fs_dir) -Fix: compat_inc.h needs header watchdog because of #defines that could cause redefine warnings -Fix: pcb_opendir() shouldn't crash if file name resolution fails -API CHANGE: pcb_hidlib_adjust_attached_objects() needs to get (pcb_hidlib_t *) so it cna pass it down to the tool code (and to actions in turn) -Move: pcb_set_point_bounding_box() from box to obj_common because it depends on pcb internals while box.[ch] is part of librnd -Add: when there is no system-installed fungw, use the local version of the c binding (for apps that depend on registering fungw engines written in C directly) -Add: comment in system installed fungw condition in the .mak file to make the situation more clear [io_eagle] -Fix: don't truncate text rotation to 90 degree steps -Fix: proper (filled) rectangle support -Fix: plugin dependencies (lib_compat_help and shape) -Fix: missing default pad shape (round) -Fix: use the layer parameter of smd pads for top/bottom -Fix: pin/via/hole should call eagle_create_pstk() instead of compatibility calls -Add: apply polygon clip inhibit on binary load too to speed it up -Add: implement trace curve using arc() -Add: roundness support for pads -Add: create octagonal padstack shape -Add: long pads seem to be having a hardwired 2:1 ratio -Add: offset pad shape is the same as oblong for now -Add: support for long and offset pins from binary (untested) -Add: support for polygon holes -Add: rot is applied [layer] -Cleanup: redundant comment, whitespace, indentation -Cleanup: remove global var PCB refs from parts of the code (for reentrancy) -Cleanup: layer address decoding goes by const strings, without having to modify the input for the splitup (will make action argument parsing more efficient) -Cleanup: make transoformations optional in layer address decoding -Fix: layer group substrate fixup: handling layer group size as unsigned caused overflow on group size 0 -Fix: layer.c respects layergrp notification inhibit -Del: LAYER_PTR() macro - use the safe, reentrant layer get function instead -Move: first level layer address parser function from hid_cam to layer_addr -Add: default group map for the doc new layers; also set init-invis -Add: pcb_layergrp_upgrade_by_map() to create layers by any map -Add: turn force_end into a bitfield flag (enum), for init-invis -Add: map based layer group creation (always-create-duplicate version) -Add: separate mini-tables for non-copper top, bottom and global layer groups so they can be created without copper -Add: default layer group map contains the outline boundary group -Add: layer group address accepts #gid -Add: layer group str2id follows the same layer group addressing that cam follows (this extends the syntax for all actions too) -Add: strn2bit() version of str2bit() that doesn't require nul-terminater string but stops at len -Add: new layer addressing options: group/#count, where count can be positive or negative (forward or backward counting) and an optional + or - suffix limits the search for positive or negtive layers -Add: layer addressing: search by name within a group (the @ prefix) -Add: layer address: global by name for the @ prefix -Add: group-to-address functions -Add: layer-to-address functions [lesstif] -Fix: don't crash on menu update when hidlib is NULL (happens on new pcb from gui) -Fix: use the same return value for wm close that gtk uses [lib_hid_common] -Add: dad() action can get and set bool widgets [lib_polyhelp] -Fix: topoly map_contour() uses a faster, dynamic flag based marking of objects already visited -Fix: integer overflow on map_contour -Fix: use the central arc approximation call for more detailed arc tracing -Move: board contour to poly conversion from export_openscad because this is common in any 3d export -Add: expose the 'how' flag on automatic board outline mapping -Add: prepare for multiple plines to appear after a poly offseting in poly-to-line conv -Change: action topoly(outline) calls the higher level API that will do the cutouts as well [millpath] -Fix: when scaling down lines in width, also scale them down in length, so there's no "corner" collision -Fix: copper remove: work by copper group, not by copper layer, because the final graphics is per group -Fix: don't crash on empty polygon/layer group -Tune: allow 500 nm overcut because of dense polygon arc approximation in thermals -Add: calcualte (and display) the remaining copper poly - will be required for over-cut checks -Add: remove cuts that affect remaining copper -Add: mill around full and non-full polygons -Add: decompose text so it can be traced around with the router -Add: scripted toolpath API, with support for trace_spiral -Add: mill() can execute a script (optional) [mincut] -Cleanup: namespace pollution with solve() -Cleanup: README for the low level solver: remove any geda/pcb specific part, they are not going to use this code ever -Del: summary of alternative ideas - mincut was the winner, this document is only of historical interest (moved to the pool) -Fix: pressing cancel should stop mincut for this short-circuit-search, for subsequent shorts (there may be more than one) -Update: test code: use genht directly, there's no copy in lihata anymore; test code shouldn't use safe_fs for popen(), just go with the raw libc calls [netlist] -Fix: creating new networks by drawing rat lines is undoable -Fix: adding terminals to networks by drawing rat lines is undoable -Fix: emit netlist changed event to get the netlist window updated when rat drawn new net is undone [propedit] -Fix: typo in dialog box label "Attribut" -Fix: attribute changes are undoable (except for the board, which is not an object) -Fix: layergrp:editgroup scope so that right click on the cross-section view layer group addresses the right layer -Add: "subc" scope (similar to object without ID, but picks up subcircuits only) [pstk] -Fix: thermal shape change should be undoable -Fix: hshadow-near-box bug: hshadow shoudl behave like the hole it shadows (if there is a hole) [puller] -Add: help text: explain that without arguments the GlobalPuller() action operates on the current layer (so it is much less global than the name suggests) [res] -Add: ctrl+arrow keys for no-mouse scroll -Add: multi-key plain qwerty based cursor movement, left and right click options [scconfig] -Cleanup: del redundant default setting -Fix: make cc/ldflags_dynlib and cc/so_undefined optional - win32 for example won't have these -Fix: use $(HOSTCC) for compiling tools required for the compilation, attach $(EXE) to the target executable (on windows that'd provide the .exe) -Fix: make sure to build puplug util with HOSTCC -Fix: proper dependencu for puplug's .a -Fix: make sure libminuid is compiled with target CC -Fix: do 2-step puplug compilation (for host and target) only in cross-compiling mode -Fix: do not turn a buildin back to a plugin because of plugins depending on it -Fix: link order of -l's does matter for building plugin .so's with gcc if --as-needed is enabled, and it's enabled by default since ver 9 -Fix: librnd-3rd.so should always depend on -ldl, but should also depoend on -lfungw if system-installed fungw is present -Fix: always set LIBRND_3RD_LDFLAGS, empty for local fungw -Change: install config files in CONFDIR, not DATADIR -Add: hidden config option can_live_without_dynlib for disabling the hard dependency on -ldl when cross compiling to win32 -Add: detect new fungw feature user_call_ctx and accept system installed fungw only if it is found -Add: --confdir and related confdir variables in Makefile.conf and config.h - if not set, same as sharedir, for compatibility [smartdisperse] -Fix: invalid memory handling on iterating terminals [stroke] -Fix: wrong plugin conf file name [subc] -Add: inhibit parts changed mechanism to save on bbox recalculations when a subc with many padstacks suffer an operation [tests] -Add: installed-librnd test for figuring if all headers are independent of pcb-rnd core [tool] -Fix: moving selected objects (through the buffer) should not change the ID of the objects -Fix: react on conf node editor/mode changes and update tool selection (including the cursor) -Fix: uninit sequence: need to dereg the conf binding before hidlib uninit but need to uninit the rest of the tool system after -Fix: locking: do not set the tool if we are already setting the tool -Add: pass on (pcb_hidlib_t *) to all tool calls because they may need to call actions -Cleanup: don't use PCB->hidlib where hidlib is available from arg [undo] -Cleanup: namespace pollution: move local flag sets in the .c -Cleanup: remove long unused macros for old undo array allocation -Fix: when CLEARPOLY or CLEARPOLYPOLY flag changes during undo, that should trigger an object redraw -Fix: the 'remove' undo/redo of subc floaters preserve subc parent id and layer id [win32] -Fix: installation path detection bugs on path sep and missing /lib -Cleanup: remove unnecessary g_win32_get_package_installation_directory() call