pcb-rnd 2.2.4 (r32605)
~~~~~~~~~~~~~~~~~~~~~~
pcb-rnd part:

	[act_draw]
		-Fix: when introducing a new per layer shape in a transformed shape respect smirror

	[ar_extern]
		-Add: generic external autorouter plugin with GUI and CLI; supports route-rnd

	[autoroute]
		-Fix: remove seemingly false positive assert(0) when box expansion is called on "any dir" - which probably shouldn't happen but doesn't seem to cause any problem (test file: bug_files/ara.lht; bug inherited from PCB, still present in 4.2.0)

	[core]
		-Del: move Attributes() from core to oldactions - propedit took over this role long ago
		-Del: pcb_layer_edit_attrib() - nothing uses this helper function anymore, we switched to propedit
		-Del: pcb_pstk_drc_check_clearance() - was used by drc_orig only; this is generally not the right way of checking the clearance anyway
		-Del: buffer side mirroring: old silk layer swap code that depended on special behaviour of silk layers before the data model rewrite
		-Del: crosshair shapes from the menu and action code, crosshair shape increment function
		-Cleanup: remove CamelCase internal type name
		-Cleanup: move layer group thickness attribute function from board.c to layer_grp.c where it really belongs
		-Cleanup: remove undo_old_str.h, only undo_old depends on it
		-Change: default conf for sch import; footprint placement: around frame, footprint removal: remove
		-Fix: register line points in id2obj hash
		-Fix: detect both ways two arcs can be the same (positive and negative delta angle) to prevent dups on GUI create
		-Fix: uninit the extobj infra before plugin unload to avoid invalid memory addressing
		-Fix: old undo: line point rotate90's undo shouldn't rotate the whole line, only the point (broke rubber banded rotation)
		-Fix: poly side clearance: poly restore artifacts because object bounding box includes only the object side clearance and have to be adjusted with the poly enforced clearance value if it is larger
		-Fix: arc approximation bug for negative delta angles (wrong start angle)
		-Fix: automatically remove overlapping line segments drawn, even if they are pre-existing lines moved
		-Fix: don't crash if footprint file could not be mapped - no map means no footprint in a multi-footprint format
		-Add: pcb_xordraw_movecopy() gets an arg for whether the modifier key is pressed so the operation can behave differently
		-Add: crosshair poly point move: calculate angle-keeping move for the xor-draw, when modifier is pressed
		-Add: pstk shape absolute set for polygon shapes size
		-Add: missing thermal calculation for line corner case: 0-long line
		-Add: smart label placing ("smart" as in: try to avoid overlaps)
		-Add: new conf node: appearance/label_thickness to make label text thickness configurable
		-Add: buffer scale GUI offers entries for thickness scale and subc recursion

	[dialogs]
		-Del: don't call the old, lesstif-specific dialog implementations for library and netlistm always use the new, centralized dialogs
		-Cleanup: generalize the project conf save mechanism and centralize it from the lib tab so other tabs can use it too
		-Fix: preferences: general and sizes and color and window tabs save in project file
		-Fix: library param dialog shouldn't crash if the example string got from the parametric footprint is empty
		-Fix: preferences dialog: create and save library changes in project file by creating the project file as needed
		-Fix: library dialog focus set to the filter entry on dialog creation
		-Change: drc viewlist preview is flipped globally
		-Add: padstack editor: absolute shape size set (next to grow and shrink)
		-Add: preferences: show config role target only for tabs where it matters
		-Add: preferences: key tab for configuring key translations/overrides

	[doc]
		-Add: missing conf tree node doc for design/drc* and design/thermal
		-Add: missing conf subtree doc for import/footprint_removal
		-Add: document the basic menu layout and anchors
		-Add: document menu file nodes: /scripts, /static_toolbar, /anchored
		-Add: document menu file root name
		-Add: document the menu patch file format
		-Add: link user doc from menus to the formal lihata tree description in the developer doc
		-Add: bugreport howto section for export related bugs
		-Add: auto-generate the file format support part of the datasheet
		-Add: auto-generate the file format section of the package description

	[drc_orig]
		-Del: whole plugin, use drc_query instead

	[export_openscad]
		-Fix: bottom-side models shall not be mirrored but rotated 180 degrees vertically else asymmetric models will break (bugfix proposed by Alexey)
		-Fix: when creating a local copy of a model module, keep the parameter list in the module definition

	[export_stl]
		-Cleanup: simplify the code: contour is always available during triangulation
		-Add: cut out padstack holes from the face polys before triangulation
		-Add: create cutout for polygon and line shaped slots
		-Add: create cutout for manually drawn internal contour loops
		-Add: implement drill dia filter
		-Add: --min-slot-line to control how to export line-slots
		-Add: --slot-poly (and --no-slot-poly) to control whether polygon based slots are exported
		-Add: --cutouts/--no-cutouts to control if manual drawn cutouts should be included
		-Add: model support (with minimal stl parser for loading the models)

	[exto_std]
		-Fix: bus: make sure the bus is cleared and recalculated when a new floater is added, since the new floater may affect existing segments at junctions
		-Fix: bus: removeing/generating the copper trace lines should update polygon clipping for clearance
		-Fix: bus: clearance value is not halved anymore

	[extobj]
		-Add: action ExtobjToggle to convert between static subcircuit and extended object forth and back
		-Add: menu item in the context popup for converting between extobj and static subc

	[import_accel_net]
		-Add: infra for the accel_net import plugin

	[import_orcad_net]
		-Add: import plugin for orcad netlists

	[import_pads_net]
		-Add: import plugin for PADS netlists

	[import_protel_net]
		-Add: import plugin for protel netlist 2.0

	[io_eagle]
		-Fix: create the aux layer of subcircuits on load

	[io_pcb]
		-Cleanup: move layer group string parser from core to io_pcb, that's the only one format that should ever use it, for compatibility

	[io_tedax]
		-Add: extend the layer write function to also write layernet blocks used in route_req
		-Add: write route_req blocks
		-Add: extend the stackup save API so it can be limited to specific layer group types - useful for saving only copper groups in a route_req
		-Add: route_res parser
		-Add: read conf lists from external autorouters
		-Add: list drc scripts as plugin capability

	[lib_hid_pcbui]
		-Update: swap order of layersel and rotue style docked subbox creation so that layersel ends up on top
		-Fix: context popup click: prefer the 'E' mark of extended objects over anything else

	[librnd]
		-Del: edit_attributes from the HID API - use the propedit instead
		-Del: TODO on wchar: won't be supported, by policy
		-Cleanup: remove the unused label argument from the scalar DAD entries (inherited from the old, export-oriented attribute system)
		-Cleanup: move attrib.[ch] out, back to pcb-rnd core - it's pcb-rnd specific code that got in the hidlib only because of the old custom per hid attribute dialog implementations
		-Change: mark crosshair shapes related conf node obsolete
		-Change: replace local librnd from the dedicated repo
		-Add: extend the preview dad creation macro with the keyboard event callback
		-Add: feature macro for configuring the hid api to work without the excess label macro arguments (transition toward 3.0.0)

	[menu]
		-Cleanup: remove vendor drill menu items, insert anchors in preparation of plugin installed menus
		-Cleanup: simplify timed layer menu and layer key updates using the new hid GUI batch timer - also makes sure there's only one update
		-Cleanup: run route-style update from the same central hid gui timer batch callback that layer menu update is running from to minimize the number of merges
		-Cleanup: simplify calling conventions in layer_menu code - there are no callbacks, remove the excess context struct
		-Move: import_dsn menu from core to plugin
		-Move: import_mucs menu from core to plugin
		-Move: io_hyp menu from core to plugin
		-Move: import_hpgl menu from core to plugin
		-Move: io_kicad menu from core to plugin
		-Move: import_mentor_sch menu from core to plugin
		-Move: import_ipcd356 menu from core to plugin
		-Move: import_tinycad menu from core to plugin
		-Move: import_calay menu from core to plugin
		-Move: import_ltspice menu from core to plugin
		-Move: import_fpcb_nl menu from core to plugin
		-Move: io_tedax menu from core to plugin
		-Change: use the menu merging mechanism for installing the route style menus
		-Change: use the menu merging mechanism for installing the layer menus
		-Change: use the menu merging mechanism for installing the live scripting menus
		-Change: use the menu merging mechanism for installing the order pcb plugin
		-Add: preferences dialog: tab for the menu files (patches)
		-Add: name the root node to identify the file
		-Add: build infra for plugin embedded menu patch files
		-Add: anchor for autorouters
		-Add: checkbox menu item for controlling automatic trace merging

	[netlist]
		-Fix: do not ignore subcircuit nonetlist flag

	[pcblib]
		-Fix: subc common: do not ignore text string argument when creating subc text
		-Add: subc common: subc begin function gets an optional attribute array for the new subc's attributes
		-Add: common_subc: layer polygon functions
		-Add: common_subc helper for creating poly shape for padstacks

	[pstk]
		-Fix: when a shape is derived (copied), transformed shapes that are smirrored shall use the mirrored layer type flags (fixes the bug of bottom side smd pad getting a 'top side' mask that should appear on the bottom side because of the subc flip but with the bug appeared on top side until reload)
		-Fix: no return value in void functions

	[rubberband_orig]
		-Fix: don't let rubberband mess with subc locked lines and arcs
		-Fix: disable rubber band in ortho refraction because it does stupid things
		-Fix: auto-remove overlapping line segments introduced by moving line endpoints around

	[scconfig]
		-Fix: do not hardwire -ldl, use scconfig detected link flag

	[script]
		-Fix: if a script creates a timer before the GUI is started, do not start the timer (it requires the GUI), but remember to start the timer after the GUI init

	[tool_std]
		-Add: moving poly point: pass on whether the control key is pressed
		-Add: batch line merge optimization in move so rubber banding won't get confused with lines disappearing in the middle of the operation

	[util]
		-Fix: make distclean should remove bxl2txt objects and generated Makefile
		-Fix: fp2preview: use full path of the footprint file for loading
		-Update: bisecter default svn url points to svn.repo.hu instead of plain repo.hu for stability on server reorgs

	[vendordrill]
		-Add: plugin embedded menu patch for creating all the menus the plugin needs

librnd part:

	[core]
		-Del: edit_attributes from the HID API - use the propedit instead
		-Del: internal attrib.h dependency
		-Del: TODO on wchar: won't be supported, by policy
		-Del: crosshair shape enum; mark crosshair shapes related conf node obsolete
		-Cleanup: move attrib.[ch] out, back to pcb-rnd core - it's pcb-rnd specific code that got in the hidlib only because of the old custom per hid attribute dialog implementations
		-Cleanup: (optionally) remove the unused label argument from the scalar DAD entries (inherited from the old, export-oriented attribute system); depends on feature macro for configuring the hid api to work without the excess label macro arguments (transition toward 3.0.0)
		-Move: key modifiers to hid_cfg.h - it belongs there by prefix and hid_dad will need it too
		-Update: dad preview API change for scripting
		-Fix: print error message on actions not found in interactive command parsing mode
		-Fix: automatically update editor/grids_idx on grid change (unless it's rooted in a grids_idx change)
		-Fix: update menu checkboxes after menu merge
		-Fix: don't run the menu checkbox update if there's no gui or the gui doesn't support it
		-Add: HID API: preview keypress callback hook
		-Add: load the keyboard callback for preview widget on creation
		-Add: HATF for initial focus of a widget on widget creation; useful in corner cases like the library window where the filter text shall have the initial focus instead of buttons or the tree
		-Add: DAD: hatf for setting preview flip to local or global
		-Add: comment/doc: explain what raw and translated key codes stand for
		-Add: configurable key translation table (useful for non-US layout)
		-Add: input key to key desc converter

	[gtk]
		-Del: custom attributes editor window - use the propedit instead
		-Del: crosshair shapes
		-Del: unnecessary pcb-rnd dependency
		-Cleanup: menu accel text leak
		-Cleanup: use the side-correct GUI zoom/pan function for previews; remove the old, non-side-correct zoom/pan function
		-Cleanup: rename zoom/pan function, remove the _side suffix - we have only the side-correct version now
		-Cleanup: simplify and centralize the global/local flip logics
		-Split: keyboard: key translation function from top window key handling so it can be reused for preview later
		-Fix: don't force-show all widgets in a dockbox on creation
		-Fix: menu insert position: ignore anchors properly
		-Fix: decouple preview from global board flip; consider local flip when calculating zoom-to-win
		-Fix: local preview flip: keep the view box after the flip
		-Fix: global flip following previews should adjust view box to remain at the same location on board flip
		-Fix: don't update menu checkbox states during menu merge inhibit: there will be a single update at the end
		-Add: make docked subwindow positions persistent, per dock box
		-Add: preview widget taking focus to handle keyboard event after mouse clicks
		-Add: implement RND_HATF_INIT_FOCUS
		-Add: support for preview hatf on global flip
		-Add: temporary tab key handler for local flipped preview widgets

	[hid]
		-Cleanup: centralize sending the GUI_INITED event so that inhibits can be added in one place
		-Cleanup: free menu key structs and hashes (memory leak)
		-Add: HID API extension: create menu from existing lihata tree node
		-Add: helper: GUI batch timer to simplify plugin timed updates

	[irc]
		-Fix: remove pcb-rnd dependency
		-Fix: handle disconnect event and mark the connection broken
		-Fix: set initial widget focus on the text input box

	[lesstif]
		-Del: brave setting for the new tree-table widget - always enabled, to help the transition
		-Del: locally implemented library and netlist dialogs
		-Del: custom attributes editor window - use the propedit instead
		-Del: crosshair shapes
		-Del: unnecessary pcb-rnd dependencies
		-Del: special casing of thin draw render - pcb-rnd-dependent, the core should decide about these things, not the HIDs
		-Del: remove dummy text object from dock window
		-Cleanup: remove pcb-rnd dependency on mark draw callback
		-Cleanup: remove pcb-rnd crosshair.h dependency with some dead code
		-Cleanup: remove dead code from old status bar
		-Cleanup: remove pcb-rnd dependency on layer_vis
		-Cleanup: remove pcb-rnd dependencies from menu
		-Cleanup: split up top window creation to smaller pieces to make the code easier to follow
		-Cleanup: remove code duplication on command line hiding, making sure all code paths will set back the focus on the drawing area
		-Change: DoWindows() action calls through to the new dialog actions instead of activating the old, local dialog implementations
		-Fix: DAD: remember wltop for hbox and box: some code will hide/show whole boxes
		-Fix: show bottom dockbox when command line is open in full screen mode
		-Fix: make sure it's always the drawing area that gets the keyboard events
		-Fix: pretend picture labels and text labels are buttons so they can receive clicks
		-Fix: FillBox: get preferred (should-be-minimal) widget size instead of current widget size so that negative sizing is possible
		-Fix: scrolled box: force minimum size so dialogs can be resized to smaller
		-Fix: the Pages widget allows resizing to smaller
		-Fix: menu insert position: ignore anchors properly
		-Fix: mangle key events in the main drawing area return so pressing tab to flip board won't get interpreted by motif to change widget focus
		-Fix: don't update menu checkbox states during menu merge inhibit: there will be a single update at the end
		-Split: preview input callback for mouse and keyboard
		-Split: key translation from top window key handling so it can be reused in preview key handling later
		-Add: TOP_INFOBAR dock, TOP_RIGHT dock and TOP_LEFT dock (toolbar under the menu)
		-Add: implement dock_leave() hook
		-Add: support for full screen mode
		-Add: emulate vertical text using \n's for now
		-Add: enable left side dock (layer selector and route style edit)
		-Add: fillbox: minsize property to bypass the xt/xm preferred size mechanism that doesn't seem to work well with scrolled boxes
		-Add: key handling for the preview widget
		-Add: implement RND_HATF_INIT_FOCUS
		-Add: implement local and global flip for preview widgets

	[lib_hid_common]
		-Fix: do not accidentally overwrite the gui inited flag on log window open - fixes: once closed log window not reopening/popping-up on new warnings/errors

	[libporty_net]
		-Fix: make distclean removes generated files

	[menu]
		-Del: remove the old dynamic menu API - everything must use the merging API now
		-Split: move menu related code from hid_cfg to hid_menu; add top comment to explain what hid_cfg and hid_menu are for
		-Rename: hid's ->hid_cfg to ->menu as it holds only the menu by now
		-Cleanup: load the menu centrally, instead of each hid trying to load it
		-Cleanup: rename menu loader function - it's not a generic cfg loader but a dedicated menu loader
		-Cleanup: move the high level file name assembly part from the low level menu loader into the caller, hid_init
		-Cleanup: type correctness in menu create API call in lesstif
		-Change: use the menu merging mechanism for installing the grid menu
		-Fix: menu loading from NULL file name is normal - skip the file instead of a crash
		-Fix: CreateMenu(): print an error if creating the menu failed
		-Add: MenuPatch action
		-Add: "menu system", with an ordered (by prio) list of patches and priority based menu file merging
		-Add: API for the GUI HIDs to announce when they are ready for the menus
		-Add: reimplement CreateMenu() and RemoveMenu() actions based on menu merging
		-Add: props based API for menu creation for plugins that need to create menus dynamically

	[poly]
		-Del: octagon generator - legacy code, required only for io compatibility, already impleented in the related pcb-rnd plugin
		-Del: rnd_poly_square_pin_factors() - used only in pcb-rnd legacy IO
		-Add: comment/explain the is-point-inside-the-poly function (after decoding the code)

	[scconfig]
		-Del: pcb-rnd related parts from hooks.c and Makefile template
		-Del: pcb-rnd-specific dotdir from config
		-Update: make lesstif part of the hidlib
		-Fix: hidlib static link flags: make sure -lXm is before -lXt else motif won't initialize
		-Fix: do not hardwire -ldl, use scconfig detected link flag
		-Fix: gui detect logics: don't crash on missing settings

pcb-rnd 2.2.2 (r32086)
~~~~~~~~~~~~~~~~~~~~~~
	[act_draw]
		-Add: PolyBool() action
		-Add: low level draw using gc: DrawText() and DrawColor()
		-Add: DrawLine() for low level, gc based rendering
		-Add: DrawPoly() for low level, gc based rendering

	[act_read]
		-Fix: missing argument in ReadGroup() syntax description
		-Add: ReadGroup() field accessor: ltypehas matches the 4th argument's layer type flag (specified as a string) and returns 0 or 1 if the layer group has that type
		-Add: ObjCenter() action that returns the x or y coord of the center of an object (for scripting)

	[autoroute]
		-Fix: optimize with manhattan lines only
		-Fix: refine the 'netlist stale' error message to get the user use the right rats optimization
		-Del: false-positive(?) assert
		-Add: temporary rats nest optimization for the old autorouter (manhattan)

	[build]
		-Change: set drc_orig to disable-all to make sure it doesn't end up in production unless explicitly enabled
		-Add: detect byaccic and ureglex unless disabled
		-Add: generate byaccic and ureglex rules

	[cam]
		-Fix: GUI: do not create excess directories while the user is typing an output path

	[clearance]
		-Add: polygon's enforce_clearance field

	[conf]
		-Add: public counter on how many times each conf root got replaced; this helps the caller detect side effects of e.g. loading a design file that brought its own design level conf

	[core]
		-Fix: when freeing a subc, don't unreg it if parent is INVALID: it may simply be an unregistered subcircuit
		-Fix: idpath: str->idpath conversion went wrong when path was prefixed with data address
		-Fix: idpath: idpath->str in non-relative mode shall insert data name in front of the path
		-Fix: when loading a new board, if it doesn't have a conf subtree make sure to reset the design role conf tree upon successful load so the design conf of the previous board won't leak in
		-Fix: unnecessary recursion in dynflag clear (turned O(n) into O(n^2))
		-Fix: padstack broken ring check: a ring can not be broken if there's no hole
		-Fix: io incompat listing in batch mode
		-Fix: selected operation shall recurse and apply to subc floaters
		-Fix: MoveLayer() gi and ga shouldn't allow creating new layers in a substrate group (happened on the cross-section view)
		-Fix: object snap: use mouse coord, not crosshair coord so multiple snap points in between grid points are accessible; screen-search for snapping start with grid/8, then check grid/4 radius before searching in the original grid/2 - this gives it a chance to find the closer object first
		-Fix: PCB_FP_FOPEN_IN_DST_ shouldn't use FILE as sizeof(FILE) is not always known
		-Fix: cursor key direction mixed up in menu file
		-Fix: toss buffer should not copy/move objects that are part of a subc (fixes bug: floater refdes text copied as a standalone second text object)
		-Fix: RouteStyle() set generates the necessary route-style-changed event and if we were setting the current style, updates the pen too, so the current style stays selected
		-Fix: do not double-add subc-parts in the rtree on move-buffer undo
		-Fix: snap: grid realign should use crosshair coords, not mouse cursor coords, but grid size is still set to 0;0 - this allows both picking the alignment to a "background image" and realign to an object
		-Fix: snap: prefer snapping to subc origin over snapping to grid
		-Fix: arc split undo: add the new arc to the remove list
		-Del: layer naming styles other then pcb-rnd and fixed (old, pre-CAM gerber layer namings)
		-Del: special case code that placed donut rats
		-Cleanup: prefix LIB_ enum members with PCB_ to keep the namespace clean
		-Move: deprecate the MinClearGap() action; move it from core to oldactions plugin
		-Add: footprint API: new hook for moving file type detection from fp_fs to format plugins
		-Add: extend the fp_fopen() API so it can split up the file name to sub-footprint name and this info is accessible for the caller
		-Add: subfpname parameter to the footprint parse API so multi-footprint files get which footprint to load
		-Add: implement pstk prototype free fields (also fixes related memleaks)
		-Add: fungw: automatic idpath type conversions
		-Add: inline function to calculate object iid
		-Add: Netlist() action commands for enabling/disabling all rats
		-Add: text clearance style is determined by 'boolean' text attribute "tight_clearance"
		-Add: text scale_x and scale_y
		-Add: generic call for retrieving a pointer to the thermal char of any object (to unify padstack and non-padstack access)
		-Add: undoable any-object thermal operation (works on lines and polygons)
		-Add: text placement by bbox: create text utility function by bbox/anchor scaling/placement (useful for alien formats)
		-Add: when a footprint format supports multiple footprints per file, map the file and offer selection on import
		-Add: optional interactive object list selector for the case there are multiple objects found on a screen search (the user can pick one)
		-Add: local (per layer-type) clearance change in prototypes are undoable
		-Add: make padstack proto shape grow undoable
		-Add: pstk proto scale is undoable
		-Add: Netlist(): AutoLen and NoAutoLen actions to change automatic net calculation bit of a net
		-Add: generalize the board thickness calculation function so it can calculate the thickness of a stack between two layer groups, optionally filtering for layer group type as well; also works for a subset of the stack
		-Add: expose the API for deciding if two lines overlap and can be simplified
		-Add: layer group addressing syntax: #gid, for use from scripts
		-Add: RouteStyle(): upgrade to be able to set and get some fields
		-Add: RouteStyle() accepts "@current" as first argument for working with the current style (useful for set and get)

	[ddraft]
		-Fix: trim's esc handling

	[dialogs]
		-Fix: printing padstack proto details respects grid unit when choosing unit
		-Fix: padstack generator: don't derive from non-existing shapes
		-Fix: padstack dialog: undo on shape grow/shrink: group all transformed-shape undos into one serial so it can all be undone at once
		-Fix: parametric footprint edit dialog: when generating the command, always include the mandatory parameters
		-Fix: parametric footprint edit: don't print empty parameter even if it changed
		-Fix: parametric footprint dialog: truncate trailing zeros after decimal point when printing coords
		-Fix: parametric footprint dialog: do not use parameters of a different footprint to fill in the newly open dialog
		-Add: conf tree: explicit indication, with a long help text, of read-only tree nodes
		-Add: conf tree: explicit note about creating a new value with a long help text explaining the special case for bools
		-Add: netlist dialog: button for enabling/disabling all rats
		-Add: netlist dialog: double click on a net row will toggle disable on it
		-Add: advanced search: expose text scale_x and scale_y fields
		-Add: footprint map chooser dialog - used when multiple footprints are available for loading from a file
		-Add: layer bindings: allow changing the target layer on the right side and recalculate the recipe for it
		-Add: object list selector dialog: when enabled, clicking on a location with multiple objects offer a selection window
		-Add: drc dialog: extra button that jumps to the drc configuration dialog in preferences
		-Add: tooltips for the netlist dialog
		-Add: netlist dialog: buttons for net length calculation to display net length calc results in the netlist table
		-Add: padstack dialog: padstack thermal summary on the instance tab

	[distalign]
		-Del: distaligntext plugin -> distalign can handle every case

	[doc]
		-Fix: conf merging: use a more clear terminology on board files
		-Fix: terminology (Element vs. subcircuit, property vs. attribute
		-Fix: query: lists are always iterated, even in function arguments, except when wrapped in list()
		-Del: remove the documentation of MinClearGap - it's deprecated
		-Update: conf: preferences dialog is not gtk-only anymore
		-Update: linux official package availability: remove arch, because it is not maintained; add the debian derived systems that picked it up and a link to repology for the full list
		-Add: Marks and Gridless recommendations for distalign actions
		-Add: io_lihata v7 changelog
		-Add: data model doc includes poly enforce_clearance
		-Add: document text object's tight_clearance attribute (with lihata v7)
		-Add: gfx in data model
		-Add: data model: document text scale_x and scale_y fields
		-Add: privacy policy
		-Add: developer doc: API doc on pcb_text_by_bbox
		-Add: lihata format doc: document pcb-rnd-drc-query-v*
		-Add: layer groups attributes: thickness and  "dielectric" for Er
		-Add: document the new PolyBool() action
		-Add: layer group addressing syntax: #gid
		-Add: query: convert language description to html and move it to the user doc
		-Add: query: explain keywords and describe very simple rules that are a single expression with no keywords
		-Add: query: explain query usage outside of the DRC
		-Add: query: make sure all functions are documented and grouped by topic

	[draw_csect]
		-Add: print layer group thickness attribute on cross section when available

	[draw_fontsel]
		-Cleanup: initialize all fields of sample text to 0 to avoid accidental mirroring

	[drc_query]
		-Fix: missing const definitions for min_copper_overlap and min_copper_clearance
		-Cleanup: use IID comparisons instead of ID or bbox comparisons for making object pairs uniqe - more robust solution
		-Add: drc rule for "ko.id" layer groups
		-Add: dialog box upgrades for the optional rule source field
		-Add: DrcQueryRuleMod(): action to modify drc_query rules
		-Add: DrcQueryDefMod(): action to modify drc_query definitions
		-Add: rule import/export in tEDAx format
		-Add: rule import/export in lihata format
		-Add: progress bar (and CLI progress report) on DRC execution; also prints number of violations found

	[export_gerber]
		-Del: the layer naming style option: only the default pcb-rnd naming style is available
		-Del: all excellon cross-call related code

	[export_openems]
		-Change: centralize layer group thickness function so later on every part of the code gets the same thickness; make sure the mesher uses the same layer thicknesses as the xml export code
		-Add: optional xml output for direct flow
		-Add: layer group thickness falls back to openems export default per layer group type (copper or substrate) with an error message, if it is not specified in the stackup

	[export_svg]
		-Add: --true-size changes the <svg> header to write width and height in mm, matching the viewport

	[find.c]
		-Fix: don't require object parent layer group to exist - it won't in case of unbound subc layers
		-Cleanup: remove global var Bloat, use reentrant ctx->bloat instead
		-Cleanup: remove long unused macro EXPAND_BOUNDS
		-Add: option to ignore clearances in low level isc
		-Add: allow_noncopper_pstk option to let non-copper shapes of padstacks "conduct" for special tests
		-Add: implement "anylayer" option for pstk vs. anything intersection calculation (for calculating overlaps properly)

	[formula]
		-Add: action for microstrip impedance
		-Add: action for coplanar wave guide
		-Add: generic non-linear equation "solver" based on a single variable, bisecting within an expected range of that variable looking for the right result of a random function (action) within the specified error margin
		-Add: the query plugin should depend on lib_forumla because drc scripts may want to run the actions for calculating e.g. microstrip impedance

	[fp_fs]
		-Fix: don't crash when popen fails
		-Fix: popen() won't work with "rb", only with "r"
		-Cleanup: memory leak on working directory
		-Split: move out format detection from fp_fs so io_ plugins can do the file format
		-Change: open footprint files in binary mode instead of text: text parsers should be fine with this while it is essential for binary parsers on win32
		-Add: create footprint lib out of a file that contains multiple footprints
		-Add: optimization: cache fp map result per file, using the file's mtime

	[gfx]
		-Fix: bbox calculation should reset the bbox to invalid coords instead of 0;0 so the upper left corner of the bbox will come out right
		-Fix: FlagEdit() should work on gfx objects
		-Add: the gfx object should remember preferred pixmap ID for a save/load/save round trip
		-Add: set pixmap ref ID to 0 when a new pixmap is assigned to a gfx so its ID will be determined automatically on save
		-Add: keep pixmap id on dup
		-Add: subc convert and xor draw frame in subc
		-Add: update() should recalculate the bbox (it's cheap and depends on the corners that are just updated)
		-Add: support gfx in subc dup_at()
		-Add: PCB_OBJ_GFX_POINT: use rnd_point_t to track gfx conrers so that the tool infra can grab them for resize
		-Add: crosshair snap to gfx corner points
		-Add: gfx resize xor-draw: ortho-project dx/dy to the sides to calculate how the new pixmap rectangle would look like
		-Add: undoable resize-by-corner-move implementation
		-Add: action to load pixmap into a gfx object in buffer
		-Add: Import pixmap to buffer in the menu: File/Import
		-Add: attribute render_level, with value "above" or "under" to control rendering order within the layer
		-Add: interactive, measure based resizer
		-Add: upgrade GfxMod() so it can set transparent color by idpath and color or pixel coords
		-Add: upgrade GfxMod(resize) so it accepts idpath, pdx, pdy, len (for scripting)
		-Add: menu, action and low level code for manually picking the transparent color

	[gtk]
		-Add: new config options to control whether a window is set transient-for and/or "presented" after creation

	[hid_gtk2_gl]
		-Fix: Draw everything in expose events instead of only the dirty rect because scissor isn't used

	[import_sch2]
		-Del: old import schematics plugin - use the new one
		-Fix: the automatically selected tEDAx import format should work even if the user did not change format selection

	[io_bxl]
		-Add: load footprints from BXL files

	[io_eagle]
		-Fix: initialize state struct to 0 to avoid depending on uninitialized memory when some default settings are not present in the file
		-Fix: binary: invalid memory handlig on binary tree free
		-Fix: binary: when overwrites an existing property do not leak memory on the old key and value: keep the old hash table entry, free and replace the old value
		-Fix: binary: text mirroring applied to angles too; this once again inverts 90/270 edge cases
		-Fix: binary: bitfield extraction mask calculated wrong, causing extra bits to leak in
		-Fix: binary: do not ingore the spin bit of text objects
		-Fix: binary: disable the code that ruined subc coords
		-Fix: binary: oad long/free text; better error messages on free text read errors
		-Fix: binary: register 0x2d84 as unknown block
		-Fix: do not warn for missing fonts, the format does not have embedded font
		-Fix: arc angles: derive delta angle from the curve parameter
		-Add: function to calculate on-screen length of a string in eagle default font
		-Add: calculate bbox width and height of text assuming default eagle font
		-Add: text object: calculate anchor x;y position using the align field and bbox sizes
		-Add: use bbox based text placement for higher precision
		-Add: support for (x) mirrored text
		-Add: parse the spin bit of rotation for text

	[io_kicad]
		-Fix: kicad_parse_any_text() needs to get parent module mirror bit because the text object suffers that transformation too
		-Fix: set refdes text floater and pick up "reference" text as refdes
		-Cleanup: remove old element terminology
		-Add: rewrite the code to use the central bbox based text placement to support X mirror and x/y scaling

	[io_lihata]
		-Add: faster parametric footprint detection: anything starting with #! should be parametric
		-Add: support loading v7 boards (new default file format)

	[io_pcb]
		-Cleanup: use RND_FUNC_UNUSED, which is scconfig detected, instead of a gcc version dependent macro
		-Cleanup: don't depend on compat_cc.h, it's for the poly code only now
		-Fix: when setting conf nodes also reset and bump conf tree counter to make sure the settings are preserved

	[io_tedax]
		-Cleanup: remove old element terminology
		-Add: load and save drc_query_rule blocks
		-Add: when importing through the central netlist import infra, also load drc blocks
		-Add: action to run a test parse on a file name or an open FILE *
		-Add: create drc_query rules for tEDAx drc block

	[irc]
		-Add: a minimalistic IRC client behind the 'online support' button

	[lib_compat_help]
		-Fix: create heavy->light converted padstacks with the right origin, not with 0;0

	[lib_hid_common]
		-Fix: Dad() shouldn't crash when "set" called before the dialog box is runing
		-Add: Dad() action: preview widget creation
		-Add: Dad(set) works on input fields typed "real"
		-Add: Dad(): set enum as int
		-Add: Dad(default) to set widget default value on creation
		-Add: Dad() set/get works on tabbed
		-Add: Dad() returns the return value of the callback action for the preview widget mouse event callbacks
		-Add: Dad() "help" command to add tooltip

	[lib_hid_pcbui]
		-Fix: respect loose subc and allow popup() to pick up objects from the subc
		-Fix: do not describe location for the wrong object (from cached temp string), misleading the user
		-Add: comment to clarify the main usage of the DecribeLocation action
		-Add: DescribeLocation (tooltip) prints rat line info when cursor lands on a rat line
		-Add: DescribeLocation print terminal name in parenthesis after the terminal ID when it differs from the terminal ID
		-Add: big blue button for on-line support (minimalistic IRC client)

	[lib_polyhelp]
		-Fix: make PolyHatch() undoable

	[librnd]
		-Fix: pixmap hash should use transparent pixel values in the hash as they are also used in key comparison
		-Fix: when free'ing pixmap fields, also free the renderer's cache
		-Fix: hid action parse can properly return the real result of the last action while keeping the "stop executing multiple actions if any fails" concept
		-Fix: dad spin on real numbers: don't use step 0 at value 0 for up/down spin buttons, that wouldn't change the value!
		-Fix: missing compat macro for PCB_ACT_MAY_CONVARG()
		-Cleanup: rename pcb_ prefix to rnd_ prefix
		-Cleanup: centralize istrue() to rnd_istrue(), plus add rnd_isfalse() helper to complement it
		-Add: install pcb_compat.h and pcb-printf.h for allowing compilation of older versions of ringdove apps for a while
		-Add: portable RND_MIN, RND_MAX and RND_SGN so the code long term won't depend on redefining MIN/MAX
		-Add: base64 string encode/decode
		-Add: compile and include libulzw in 3rd lib
		-Add: fungw pointer domain for FILE*
		-Add: pixmap: low level pixmap dup
		-Add: pixmap: call to free hid side cache (useful for redraw after changing pixels)
		-Add: HID API: pixmap uninit call so the HID cache can be invalidated on core pixmap change
		-Add: the get_coords API (librnd's and HID's) return int to indicate if esc was pressed
		-Add: #define M_E for c89-portability
		-Add: fungw ptr domain for GC (for scripted low level draws)
		-Add: DAD: str<->bit conversion of HATF_TIGHT
		-Add: expose the low level of rnd_parse_command(): rnd_parse_command_res() that can return a typed result properly

	[netlist]
		-Fix: consider only the first island of non-full-polys when figuring where rats are to be connected so they won't end up connecting to invisible polygon islands

	[pcblib]
		-Fix: qf(): silkmark position was away from the corner
		-Add: qf() silkmark help: mention that it is drawn only if bodysilk is also drawn

	[propedit]
		-Fix: when tight_clearance is toggled, run pre/post of the object
		-Fix: when changing objects with side effect, recalculate bbox and redraw them
		-Fix: padstack proto is not a coord but an int
		-Fix: respect loose subc and allow propedit(object) to pick up objects from the subc
		-Add: map and set enforce_clearance
		-Add: PropToggle() action to toggle flags and attributes
		-Add: introduce data type 'double' for editing text scale
		-Add: change text scale_x and scale_y

	[query]
		-Fix: coord conv: don't try to convert VOID as string
		-Fix: execute multiple rules per program
		-Fix: query(dump) doesn't crash on syntax error but returns error
		-Change: .netseg returns an object, not an object ID (object IDs are not always unique because of subcircuits)
		-Move: search dialog from dialogs to query because it will be more tightly coupled with the query compiler
		-Add: overlap() ignores clearances
		-Add: overlap() uses allow_noncopper_pstk so pstk-pstk overlap can be tested with non-copper
		-Add: layerlist() for listing all layers in order of appearance in data
		-Add: accept .layer.type for layer's type, as .type may be processed by the caller for object type
		-Add: \ protected newline is ignored like whitespace - this allows multi-line rules
		-Add: violation list can contain text that is then appended to the drc description
		-Add: .IID field for instance ID (useful for (A.IID <= B.IID) checks for sorting pairs)
		-Add: support for text scale_x and scale_y
		-Add: overlap() takes an optional bloat argument
		-Add: intersect() is a variant of overlap, requires layer objects to be in the same layer group
		-Add: abs() function
		-Add: progress bar
		-Add: net segment length calculator
		-Add: net seg len: report if the search was blocked by a bad object
		-Add: helper action: QueryCalcNetLen() for calculation simple net length or return error on the complex case
		-Add: search dialog decompile: if the expression is in a valid form, fill in the GUI dialog
		-Add: thermal_on(): query function to get thermal shape bits translated into a string of characters
		-Add: arc .width and .height properties

	[report]
		-Change: replace local net length implementation with query's
		-Add: print idpath at the end of the object report
		-Add: polygon report mentions polygon enforced minimum clearance, when it is not 0
		-Add: print rat anchors as well, for debugging
		-Add: print text scales
		-Add: UI layer based net length report

	[res]
		-Add: menu for toggling tight_clearance of text objects
		-Add: obj list popup control submenu on {m d o}
		-Add: menu items for visual net length reports
		-Add: netlist length menu: {n l l} for refresh netlist lengths in the netlist dialog (opens the dialog if not already open)
		-Add: layer group context menu to create top/bottom silk/paste/mask layer groups

	[scconfig]
		-Fix: repo.hu -> svn.repo.hu in externs (more reliable hostname)
		-Split: librnd split: separate the code that is used for librnd
		-Del: dmalloc support - use valgrind instead
		-Add: allow plugins to inject extra args to sphash (e.g. for --multi)
		-Add: gen_conf: require first level const struct be const, except for special temp structs in core and librnd

	[script]
		-Add: live script reload&rerun button for better support of using external editors
		-Add: ActionString() action so scritps can build a call in a string

	[tests]
		-Fix: drc_query test: sort output so it does not depend on order of reports
		-Fix: drc_query: zone clear: change the drawing so the drc error occurs at a single pinpoint instead of on a parallel line-line that may yield in different bbox depending on order of objects
		-Fix: drc_query reproducability: introduce a conf node for getting the drc always use the bbox of all red and blue objects, without optimization and focus on red, for reproducible view box output for tests
		-Update: pcb-printf test for the new function name
		-Update: propedit test for the new print file name
		-Add: base64 tester
		-Add: propedit: include testing doubles

	[tool_std]
		-Fix: the text tool applies pen (routing style) attributes
		-Fix: don't limit thermal tool to padstacks
		-Fix: uninitialized text field for the size indication 'A' of the text tool
		-Fix: can not keep ids on "drag & drop move selected" (explanation in comment); fixes undo bug with multiple moves of the same selected object
		-Add: simplified insert tool, make it the default
		-Add: allow the optional object selector for insert, lock, polyhole, remove and thermal

	[util]
		-Add: sign.sh: sign files with openssl
		-Add: pcb-rnd-svg: compare pcb-rnd renders using svg


pcb-rnd 2.2.1 (r30749)
~~~~~~~~~~~~~~~~~~~~~~
	[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 &current 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: &current 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 <librnd/core>
		-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 <obj> in eval, also include the object ID, like <obj ID=%ld> 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 <smd> 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: <smd> 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
