pcb-rnd 2.0.1 (r18980)
~~~~~~~~~~~~~~~~~~~~~~
	[bbox]
		-Add: naked bbox for every object (does not include clearance or other invisible effects)

	[cam]
		-Add: common interface to tell export plugins what layers to export in which file

	[cli]
		-Add: multi-language/multi-syntax CLI
		-Add: configurable prompt
		-Add: hid_gtk* includes the cli prompt
		-Add: hid_batch includes the cli prompt
		-Add: hid_lesstif prints the central prompt
		-Add: mode stack with mode enter/leave helpers

	[conf]
		-Del: default_layer_name[] - should be coming from the default board, code shouldn't assume uninitialized layers have initialized layer names
		-Del: default groups from config - depend on default board instead
		-Del: route styles from the config - default board should bring it
		-Del: via-specific select color
		-Del: remove pin-specific selected color
		-Del: remove subc-specific selected color
		-Del: element selected color
		-Del: remove rat-specific selected color
		-Del: obsolete color setting: element-nonetlist
		-Del: unused color conf node: black
		-Del: remove the white color (not used)
		-Del: remove unused color.invisible_mark

	[core]
		-Optimize: implement dynamic Level-of-Details in text rendering - draw less lines for small text
		-Optimize: dynamic level-of-detail for padstack marks
		-Optimize: thin draw poly contour: level-of-detail control: skip points too dense
		-Optimize: draw helper poly clipping: if a polygon is fully within the clip box, do not do the expensive clipping
		-Optimize: level-of-detail control for subc dashed bbox
		-Optimize: draw logics: use cheaper storage for do_group
		-Optimize: cheaper return from width calculation if string is NULL
		-Optimize: simpler, cheaper term label draw with low level text draw call
		-Cleanup: memory leak in path subst
		-Cleanup: memory leak on conflist overwrite
		-Cleanup: memory leak: uninit ui layers
		-Cleanup: memory leak on dynamic hid callbacks on native config nodes
		-Cleanup: memory leak: conf files hash
		-Cleanup: memory leak on board dummy layers
		-Cleanup: memory leak on plugin dir init
		-Cleanup: pcb_lrealpath contains an strdup, an extra strdup on caller's side makes a mem leak
		-Cleanup: memory leak on pcb_snprintf
		-Cleanup: memory leak on hid cfg init by brave.c
		-Cleanup: memory leak in layer vis hid reg
		-Cleanup: layer name memory leak
		-Cleanup: memory leaks in pcb_snprintf() and pcb_vsnprintf()
		-Cleanup: rtree memory leak
		-Cleanup: find.c memory leak on padstack lists
		-Fix: label text centering corner case on mirrored view and vertical text
		-Fix: delayed heavy terminal draw for polygon, text, line, arc
		-Fix: do not call pcb_notify_crosshair_change(pcb_true) twice in a row when the crosshair moves - this is an error condition that will lead to most HIDs doing an expensive full redraw
		-Fix: when an object is selected or unselected, make sure it is redrawn
		-Fix: restore the crosshair colour after drawing the drc outline around the line shape
		-Fix: restore the crosshair colour after drawing the drc outline for an attached arc tool shape
		-Fix: FreeRotateBuffer() refuses to rotate angles too large (to avoid double precision floating number instability)
		-Fix: mark the board changed on layer group operations that changes the layer stackup
		-Fix: When drawing the UI layer, call set_drawing_mode (flush) before calling end_layer, instead of after.
		-Fix: find.c padstack intersection bug: circular shape vs. arc typos made intersections not detected
		-Fix: don't call NetlistShow() if there's no net name available
		-Fix: make sure the board's file format is not affected by a backup save
		-Fix: copy+paste crosshair range uses the naked bbox of the buffer, allowing objects to be moved near the edge of the drawing area even if clearance is beyond the drawing area
		-Fix: don't use O(n^2) algo for finding duplicate arcs when we have rtrees
		-Fix: crosshair saves original object x;y only on move-start so it doesn't interfere with the original functionality
		-Fix: also set tx;ty to the current crosshair coord before a move so a double click doesn't reuse an old target coord from the previous operation (or a 0;0 in the first op)
		-Fix: PromptFor() should return a string
		-Fix: redraw the screen after buffer operations (should fix delayed draw on lesstif/irix)
		-Fix: arrow tool: remember click coords even before the mouse is moved; fixes random object jumpyness on click-move-in-place
		-Fix: pstk's flag change op shouldn't quit if padstack is locked - let the higher-level caller decide whether locked objects should be ignored
		-Fix: allow locked objects to be deselected, not "locking the selected flag"
		-Fix: locked objects shouldn't be removed on move or cut-to-buffer operations
		-Fix: when a new board is loaded, rebind all buffer layers to avoid dangling bound layer pointers (still pointing to the previous boards' layers)
		-Fix: text, arc, poly low level move should update naked bbox as well
		-Fix: text bbox calculation typo with arc's Y
		-Del: remove the erase color - with the drawing mode API the rendering mechanism doesn't depend on this hack any more
		-Del: holes_after mechanism from the rendering code: always assume it is set to 1
		-Del: remove SelectedElements from Flip() action's syntax description (old terminology)
		-Del: action handler for ExecCommand - merged with System()
		-Del: action_act.c and action_helper.c
		-Del: all-in-one about box content string (last user was the lesstif hid's home-grown about box)
		-Move: pcb_act_PCBChanged() to oldactions
		-Move: pcb_act_RouteStylesChanged(), pcb_act_NetlistChanged() and pcb_act_LibraryChanged to oldactions (pcb-rnd has an event system)
		-Move: pcb_act_MinMaskGap() to oldactions
		-Move: pcb_act_ChangePaste() and pcb_act_ChangeHole() to oldactions
		-Move: deprecated actions for changing octagon/square flag moved to oldactions
		-Split: low level text string draw function from pcb_text_t draw function to make calls cheaper where the caller is not drawing an existing text object
		-Add: helper funciton to calculate text string height
		-Add: draw API and infrastructure for delayed heavy term rendering
		-Add: save last seen raw mouse pointer coords in the crosshair struct
		-Add: make terminal label printout size configurable
		-Add: default menu: layer group context popup contains a del group item
		-Add: cli: hook for the /tab action
		-Add: actions: cli edit hook
		-Add: use putenv() if setenv() is not available
		-Add: expose the low level id search that doesn't throw a hace on not-found
		-Add: zoom to selection and zoom to found in the menu

	[ddraft]
		-Add: new action: trim(): cutting edge objects to remove excess segments of lines and arcs
		-Add: new action: split(): cutting edge objects to split lines and arcs into multiple objects
		-Add: new action: constraint() for line drawing (angle and length)
		-Add: new action: perp and paral and tang to constraint lines 
		-Add: constraint GUI: dialog box to set or reset constraints
		-Add: new action: ddraft() with a custom, 2d drawing mini-language
		-Add: new CLI mode that uses the ddraft() syntax

	[dialog]
		-Fix: flag edit dialog refuses to operate on locked objects (it would get out of sync very fast)
		-Fix: padstack editor now allows setting clearance to 0
		-Add: new export dialog with tabs on the left
		-Add: new about box
		-Add: layer binding dialog: enforce current layer model limitations: when the user selects outline, make it global; when the users selects anything else but copper, reset stack offset

	[distalign]
		-Fix: Distribute() accepts optional gridless as the last argument

	[doc]
		-Add: document the new PCB_HID_COMP_POSITIVE_XOR drawing mode
		-Add: template reference for padstack prototype
		-Add: fungw action doc
		-Add: explain how fungw functions are allowed to change their arguments
		-Add: writeup on lib64/
		-Add: fungw actions: raw example of extended coordinate load
		-Add: developer doc with code snippets for fungw based action implementation
		-Add: fungw action: calling other actions
		-Add: introducing the CAM feature
		-Add: a section for scripting (fungw)
		-Add: document ddraft
		-Add: EasyEDA on bridges
		-Add: explain what the lock flag does
		-Update: new version of GPL2 (from Debian's /usr/share) with the right FSF address and some white space fixups
		-Update: datasheet: update list of supported scripting languages, replace gpmi with fungw
		-Update: datasheet: file formats

	[draw]
		-Optimize: batch subc and padstack mark draws into one large xor draw session; batch subc and padtsack label draw in a separate non-xor draw session for now
		-Optimize: do not use delay draw for padstack labels - they are drawn in a separate pass anyway

	[draw_csect]
		-Add: button for creating outline layer when it's not available

	[export_ps]
		-Add: show-toc option (default on, works only in single-file mode)
		-Add: --single-page option to merge multiple layer groups (useful with --cam)

	[fontmode]
		-Fix: set layer color from defaults for the layers created for font editing to avoid a crash

	[fp_fs]
		-Fix: memory leak on non-existing paths

	[fp_wget]
		-Add: cache dir patch is configurable

	[gl]
		-Optimize: do not draw sophisticated round end caps for objects thinner than 1 pixel
		-Optimize: do not use triangles for lines too thin - use plain old lines
		-Optimize: tesselate with less number of points for polygons, when contour points are too dense
		-Change: inline low level gl drawing functions to cut back on function call overhead
		-Add: Support for XOR drawing mode

	[gtk]
		-Optimize: cheaper rendering of single-pixel objects
		-Cleanup: memleak on config hid reg
		-Fix: race-condition-free window position/size query
		-Fix: when entering the drawing area, do a full redraw (invalidate-all) so the code does not depend on "xor-undraw" of the corsshair attached object
		-Fix: all active top window widgets should let the central key handler handle all keyoard input
		-Fix: don't change layer colors without the explicit request of the user
		-Fix: property editor configures the preview layer name/color for all layers it uses
		-Fix: for a context-popup, find subcircuits padstacks first and proceed to anythign non-subc-part only if none found; this allows right-clicking on subc padstacks
		-Fix: get coords shall not change the input parameters if the user exits with an esc
		-Fix: when handing keyboard presses (e.g. esc) in get coord, be more careful not to interfere with previous or next GUI interaction: accept only keys that are pressed _and_ released during the loop
		-Fix: side correct zoom to window shall update .pcb_x and .pcb_y because get_coords think the coords are available
		-Fix: advanced search expression build table: subcircuit footprint, refdes and value are all attributes, not properties
		-Del: action LayerGroupsChanged (switched to events)
		-Del: separate config subtree for selection colors; now that there is only one selection color, it shuld go in the main colors
		-Del: get rid of the local About box implementation in favor of the central one
		-Del: local ExportGUI implementation in favor of the central one
		-Update: the layer selector widget uses layer's real color instead of guessing
		-Add: action: ZoomTo(selected) and ZoomTo(found)
		-Add: SwapSides() second arg S option for changing layer selection when swapping side
		-Add: advanced search wizard table: common flags
		-Add: when zooming to window, move the crosshair to the center of the window
		-Add: attribute dialog: implement PCB_HATF_LEFT_TAB
		-Add: implement the command entry hooks (tab, mouse clicks, editing)
		-Change: property editor dialog's main tree is scrollable
		-Change: mark the separate command window deprecated on the GUI

	[gtk2_gdk]
		-Optimize: draw dot instead of complex object when object is too small
		-Optimize: omit too dense polygon corners (level-of-details control)
		-Optimize: detect axis aligned rectangles and draw them cheaper
		-Fix: crosshair coord rounding error
		-Add: render burst sets zoom level in core for optimization

	[gtk2_gl]
		-Cleanup: more static functions to avoid name pollution
		-Cleanup: use int from GL, not gint from GLib

	[hid]
		-Optimize: use centrally cached cap style and line width set to remove some load from the HIDs
		-Optimize: centrally cached xor/faded hid calls
		-Cleanup: rename cap styles with pcb_ prefix and avoid CamelCase
		-Cleanup: centralize action GetXY - it does nothing HID-specific by now
		-Cleanup: centralize the printer calibration action - has nothing HID-specific
		-Move: clip.[ch] out from core, to lib_hid_common, as an inline function: it's used exclusively by renderers for line clipping
		-Del: Trace_Cap: same as Round_Cap, no reason for the case/code duplication
		-Del: Beveled_Cap: this hack was apperantly used for octagonal pins - padstacks don't have secial casing for octagons
		-Del: API CHANGE: x and y coords are no longer passed as action arguments - only a few actions need coords and there are two different kind of coords (crosshair and pointer) so actions shall query for coords when they need it
		-Del: API CHANGE: needs-coord from action registration: semi-automatic, central coord query for actions got removed already
		-Del: remove the "erase" color and rely on the drawing mode for negative draw
		-Del: holes_after from the API: it's always enabled now
		-Change: API CHANGE: get coords can be forced to query the user for a new set of coords - some actions may need two, distinct set of coordinates
		-Add: central gc cache struct in all hid gcs
		-Add: centralize hid creation and destroy so that the core-side cache can be maintained
		-Add: new API to make GUI zoom level available for core
		-Add: comment that recommends updating the core zoom level in burst start
		-Add: introduce PCB_HID_COMP_POSITIVE_XOR to help non-sw-render HIDs optimizing their XOR draws
		-Add: PCB_HATF_LEFT_TAB for moving TABBED's tabs to the left (for a vertical align that works better when there are a lot of tabs)
		-Add: DAD helper macro to build a DAD entry dupping an existing attr
		-Add: extend the mouse input event API with a flag for whether the command line is open at the time of the event; this will be used for mouse integration with cli modes
		-Add: API to query or change command line entry

	[import_fpcb_nl]
		-Add: import freepcb netlist (import schematics from EasyEDA)

	[io_lihata]
		-Fix: saving font should not write invalid nodes
		-Add: read layer color from v5 boards

	[layer]
		-Fix: properly clreate new (missing) layer groups when upgrading the stack for padstack
		-Fix: when creating new layer groups for a padstack upgrade, make sure new bottom paste and bottom silk and bottom mask end up below bottom copper
		-Fix: don't overwrite silk's color permanently while rendering
		-Fix: when composite drawing mask and paste, set the base color to the first layer's color
		-Fix: when drawing bound layers, use the real layer's actual color (if real layer is available) instead of default color
		-Fix: creating a new layer should set the change flag on the board
		-Split: create intern misc layer code: separate the logic (where/why to create) from the mechanical part (low level data field fill in)
		-Del: per layer selected color - use a global layer-object-selected-color instead
		-Del: vtlayer - use vtp0 instead because UI layer pointers must be persistent because of object parent links
		-Change: layer color is dynamically alloced (because it is loaded from the board file)
		-Change: multi layer composite draw respects each layers own color and doesn't force using the same color
		-Add: API for unified string-to-layer-id conversion
		-Add: helper function to determine the default color of a new layer
		-Add: force flag to enforce loading default layer colors (useful for loading old/alien formats without proper layer color support)
		-Add: helper functions for change layer color
		-Add: ui layer vector and ui layer lookup by id
		-Add: when new layer is created, set its color to default
		-Add: DelGroup() action, similar to EditGroup

	[lesstif]
		-Optimize: direct rendering mode optimization
		-Fix: issue a (delayed) redraw on entering the drawing area so that the crosshair attached object is drawn properly
		-Fix: draw attached objects from the crosshair change notification callback
		-Fix: at the end of a full redraw, draw crosshair-attached objects only once, without drawing mode setting
		-Fix: draw crosshair attached objects on the leave notification to keep the xor drawn objects coherent
		-Fix: attached object redraw on leave happens only if crosshair is on
		-Fix: when leaving the drawing area, refresh the mark so it remains on the screen
		-Del: action LoadVendorFrom() - done in the vendor plugin
		-Del: get rid of the local About box implementation in favor of the central one
		-Del: local ExportGUI implementation (in favor of the new, central export dialog)
		-Del: command entry action comment shouldn't explain action syntax, especially that that's only one of the backends
		-Change: mark the lesstif-specific LibraryShow action deprecated
		-Change: gui command entry + mouse clicking: command entry should not close or lose keyboard focus
		-Add: action ZoomTo(selected)
		-Add: action ZoomTo(found)
		-Add: SwapSides() second arg S option for changing layer selection when swap sides
		-Add: when zooming to window, move the crosshair to the center of the window
		-Add: set core zoom level in render burst
		-Add: command entry: support for cli /edit hook

	[lib_compat_help]
		-Fix: padstack->pad conversion: centralize the *2 on clearance value, that's how the old formats store it
		-Fix: padstack->pad conversion: determine polygon shaped mask size properly

	[mincut]
		-Optimize: do not run mincut if there surely won't be a solution (no cuttable objects in between S and T)
		-Fix: free up the graph after use to cut back on mem leaks
		-Fix: memory leak on network names
		-Fix: solver free's cloned graph on error return to avoid memleak

	[propedit]
		-Add: color field for real layers
		-Add: map and set object flags

	[pstk]
		-Optimize: unplated hole graphics: use a smaller circle within the hole, so XOR can be avoided
		-Fix: set line cap and width for drawing holes
		-Fix: remove excess xor draw setup
		-Fix: set line end cap before thin drawing padstack shapes - on some layers there's nothing else drawn that'd set the cap
		-Change: display teminal name centered for padstacks - same happens with heavy terminals
		-Add: action for breaking up a padstack
		-Add: when bbox is vertical, print vertical term label so the label is aligned with pad orientation

	[query]
		-Fix: qyery() action sets the result field and returns success instead of returning the version number (which would mean error)
		-Fix: don't execute the callback if current object is NULL
		-Fix: don't let common bounding box based area accessor block the more precise, per object code
		-Add: line length square (cheaper calculations)
		-Add: line area accessor
		-Add: arc length^2
		-Add: arc area
		-Add: return true area of polygons
		-Add: support for executing flag lookups

	[report]
		-Fix: report(subc) should report only about subcircuits and nothing else

	[scconfig]
		-Add: print help of scconfig default args
		-Add: detect putenv() if setenv() is not available

	[script]
		-Add: new action: ListScripts()
		-Add: new action: LoadScript()
		-Add: new action: UnLoadScript()
		-Add: CLI mode for script oneliners
		-Change: switch over all actions to the fungw API

	[subc]
		-Fix: get rotation angle inversion bug (fixes e.g. sch reimport rotation messup problem)
		-Add: use subc_nonetlist for drawing the dashed outline of subcircuits with the nonetlist flag set
		-Add: configuration setting for showing only visible-side subc marks (default on)

	[tool]
		-Fix: use the naked bbox for moving objs so they can reach the sides of the drawing area
		-Del: pcb_adjust_attached_object(): was a wrapper around the tool's implementation, use that directly
		-Del: the 'none' tool menu: there's no such tool, use the arrow tool instead
		-Move: old tool related helpers pcb_release_mode() and pcb_notify_mode() to tool.[ch] to clean up action_helper
		-Cleanup: pcb_act_ChkMode() should use the tool infra for converting string to tool id instead of a local list of tool names
		-Split: separate target x,y fields in crosshair for move/copy; this allows detaching where the object will land from the current crosshair coord (allowing plugins to recalculate or restrict the target coords)
		-Add: before a selected-move, store the starting coordinates so plugins, e.g. ddraft/constraint can calculate how far the move went
		-Add: when the command line is open, override the normal notify/release action and try the cli backend first; perform the normal actions only if the backend did not handle it

	[thermal]
		-Fix: thermal arc angle overflow corner case, on line end caps (reported by Ade)

pcb-rnd 2.0.0 (r17177)
~~~~~~~~~~~~~~~~~~~~~~

	-Del: old data model
	-Cleanup: use macro.h only where it is really needed, do not include it from central headers (reduce unnecessary dependencies)
	-Cleanup: remove doxygen

	[grid]
		-Add: SetValue() can double or halve the current grid
		-Add: extend board grid set API for explicit offset
		-Add: grid() action
		-Add: conf setting: grids_idx for remembering which grid is selected from the list
		-Add: helper function to create the anchored menus
		-Add: action to select specific grid by index
		-Add: initialize update_on and checked for the dynamic grid menus
		-Add: grid index invalidate (on custom grid setting)
		-Add: update the dynamic menu on gui init event
		-Add: update the grid dynamic menu when the config changes

	[menu]
		-Fix: make cut-to-buffer undoable by not depending on the special move buffer function
		-Add: new default multi-stroke menu file for both gtk and lesstif
		-Add: context menu (per object type)
		-Add: quickplace: via, line and arc
		-Add: submenu for displaying different subcircuit IDs
		-Add: extend the API so menu items can be inserted after an existing menu item (opposed to appending at the end of the menu)
		-Add: new default menu file for the configurable grid
		-Add: buffer normalization menu
		-Change: edit attributes of current layer uses the property editor instead of the obsolete attribute editor
		-Change: edit layer attributes from the popup menu uses the property editor instead of the obsolete attribute editor
		-Change: use propedit for editing board attributes
		-Rename: buffer #5 to scratchpad (the code often overwrites it as side effect of other operations)

	[autocrop]
		-Change: rewrite the whole code to use core functions instead of local reimplementation of moves; simpler logic for rounding coords
		-Add: do not do anything if no change is required
		-Add: clip polys and draw screen only once, not for each move

	[autoroute]
		-Fix: line end coord flicker that killed rubber band

	[conf]
		-Fix: hide_names description: it really hides floaters
		-Fix: iterator should increase the index counter
		-Fix: prepend list items in the reverse order so the final order of items is the same as in the file
		-Fix: array merging: do not overwrite non-NULL items with NULL items - this lets a config entry modify something in the middle of an array without removing the first many items
		-Fix: check for node type in tree traversal to avoid assert in liblihata; throw an error for invalid subtrees and remove them
		-Fix: buffer overrun on conf node names too long
		-Fix: buffer overrun on conf path too long
		-Change: mark [pin/pad] show_number obsolete
		-Cleanup: rewrite the missing node ignore mechanism so it works for whole subtrees and can be applied to both old and optional subtrees
		-Cleanup: remove drc and conf sections from the default boards; default config should be coming from internal and system config files so that the user can easily override them (config settings coming from the default board have the DESIGN role that is hard to override)
		-Add: conf_set_dry() "mkdirp" flag for auto-creating policy subtrees; conf_set() auto-creates the subtree
		-Add: more exact error messages on conf parse error (list and array item must be text)
		-Add: infrastructure for loading custom (per plugin) config files from system and user dirs
		-Add: remember the name of list items - on some lists, like export_xy's templates this matters
		-Add: publish conf file reg/unreg API

	[core]
		-Fix: change.c should include change.h to detect API mismatch
		-Fix: auto-via is created as a padstack to avoid depending on vias
		-Fix: when moving a line to another layer and an auto-via is added, use padstacks, not via
		-Fix: do not merge new line to an existing line if the existing line is part of a subc or has term set
		-Fix: do not announce which menu file has been loaded: action PrintFiles will tell
		-Fix: when rotating buffer, do not expect text or padstack rtree to be non-NULL - if they are NULL, just skip the administration
		-Fix: the actions that change layer visibility/selection should invalidate the drawing and send out layer change event to get everything redrawn
		-Fix: The 'Text Tool scale' key mappings were reversed with regards to + & -
		-Fix: do not crash in layer select action when invalid layer number is chosen
		-Fix: do not call route styles changed event when only the active route style is selected - the conf events will be picked up
		-Fix: make sure to emit the routes changed event when the routes are initialized (on load or new board creation)
		-Fix: when loading a footprint-as-board, set the board size to make sure the footprint fits
		-Fix: search: prefer padstacks that have copper shape on the right side, then padstacks that have any shape on the right side then ones with shape on the current layer and only then any other padstack over the given location
		-Fix: data_is_empty: because of buffers: if global lists are empty, it's enough to check layers for pure emptiness, no global side effects should be checked
		-Fix: don't segfault if element attr is attempted to set on a non-existing subc
		-Fix: clip polys only when clip inhibit decreases to 0
		-Fix: pcb_chg_obj_name_query() doesn't handle dyntext floater subc parts as terminals
		-Fix: operation on selected objects can recurse to subcircuits if SUBC_PART is part of target type
		-Fix: don't execute operation twice on subc parts (by r16304)
		-Fix: allow rotate function to operate on subc floaters
		-Fix: do not let the user to select-move or select-remove subc parts (not even floaters, because parent could not be tracked over the buffer)
		-Fix: consider a padstack for screen search only if it has a shape on a visible layer
		-Fix: allow padstacks to change (global) clearance
		-Fix: text object: don't crash if a non-subc dyntext tries to reference parent subc
		-Fix: MoveToCurrentLayer on a subc part (floater) object keeps the object within the subcircuit, either by using an existing subc layer or allocating a new bound layer
		-Fix: make sure redo never adds new undo entries (would render the rest of the redo stack unusable)
		-Fix: search-by-location shouldn't find floaters when they are locked
		-Fix: do not find hidden floaters on click
		-Fix: hide floaters works on non-silk objects as well
		-Fix: call get_export_options() when invoking the exporter using -x, to make sure the options are initialized before the cli processor goes through them; the nogui version shouldn't throw an error, the fallback is a nop
		-Fix: SaveTo() with no args shouldn't segfault
		-Fix: SaveTo(Layout) shouldn't tolerate file name or format; when specified, it would be ignored; to avoid confusion, rather throw an error
		-Fix: emergency format typo - use the configured format
		-Fix: on footprint import always use the footprint attribute instead of the name attribute
		-Fix: search on padstacks: accept the padstack found if it has hole on the current layer
		-Fix: temporary turn off flip/solder-side-view while replacing subcircuits from ElementList(), to avoid coord flip confusion and wrong y coord of the replacement subc
		-Fix: freeze undo while rotating buffer to make sure nothing ends up on the undo (buffer operations are not undoable)
		-Fix: when moving an unselected subc with drag&drop it should never snap to any object in the original subc
		-Fix: when mirroring data, provide an option for mirroring text coords only without mirroring the text graphics ("onsolder" flag); this needs to be used for subc and buffer mirroring to keep text objects in place
		-Fix: flag_str: when converting to string in compatibility mode, permit hidename for subcircuits
		-Fix: 2 layer default board typos
		-Fix: find.c: rat vs. padstack intersection must consider whether padstack has shape on the given layer
		-Del: obj_all_op.h, obj_all_list.h, trunk/src/obj_all.h - include the op headers directly
		-Del: old data model: PCB_OBJ_* constants for the old model
		-Del: obsolete API: get_unit_list()
		-Del: increments config type (the new grid code handles these)
		-Del: remove mask from the ToggleView() help - mask is not a special layer anymore
		-Del: redundant drc settings from pcb_board_t - they are only in config now
		-Del: redundant board meta: poly_isle_area
		-Del: remove conf vs. board header redundancy: max_width and max_height are board parameters, not config
		-Del: default thermal style from pcb_board_t - used only by the autorouter, this should be a local setting there
		-Del: the line object should have no Number field - use the term attribute to indicate terminal ID instead
		-Cleanup: simplify the API of pcb_chg_obj_name_query() (remove type/ptr1/ptr2/ptr3)
		-Cleanup: move loop end macros from macro.h to obj_common.h - because it's much less general than it was originally and layers are becoming objects anyway
		-Cleanup: rename PCB_ANYOBJFIELDS to PCB_ANY_PRIMITIVE_FIELDS to make room for generalization (any object may be non-drawing-primitive)
		-Change: old data model: drc enforce line vs. padstack, while drawing, switched over to the new data model
		-Change: padstack search precedence: current layer has prio over side
		-Move: ListRotations to the oldactions plugin - this feature is redundant with the query function and the xy exporters
		-Add: warn and return error on copy or move to buffer with empty selection
		-Add: missing element->subc transition on rats patch footprint replace
		-Add: old data model: rewrite SaveTo(AllUnusedPins, ...) for the new data model
		-Add: check and warn on uninit if any of the plug chains are non-empty - such bugs can lead to uninit-crash with plugins
		-Add: pass on background and foreground color on dynamic menu creation
		-Add: ChkRst() action for route style checkbox menus
		-Add: net structs, pcb_layer_t, pcb_layergrp_t are now compatible with pcb_any_obj_t
		-Add: enable action EditGroup(attrib, key=value)
		-Add: virtual layer button: padstacks (pstk_on controls whether padstack shapes are drawn, not only holes)
		-Add: pcb api ver to avoid loading mismatching plugins
		-Add: pcb_chg_obj_name_query() special case: when changing a subc part dyn text that contains %a.parent.refdes%, assume it's a change on the parent subc's refdes
		-Add: pcb_chg_obj_name_query() won't edit subc refdes immediately on "refdes text", it asks first, giving the user a chance to change the dyntext template
		-Add: config setting for also drawing the bounding box when xor-drawing a text object (e.g. for move)
		-Add: optional, runtime HID fallback mechanism (if there is no X, the batch HID will start)
		-Add: helper function to print the current key sequence in a string (for status line indication)
		-Add: Buffer(Push) and Buffer(Pop) to let actions temporarily switch buffer then go back
		-Add: PasteBuffer(normalize) - to clean up after an import
		-Add: inline func for coord abs (portable implementation to replace labs()/llabs())
		-Add: system() sets PCB_RND_BOARD_FILE_NAME; exports crosshair X, Y and current layer's name in env vars
		-Add: command line option for dumping all object flag names per object type
		-Add: action Rotate90
		-Add: hid_nogui prints progress bar to stderr if verbosity level is high enough
		-Add: progress bar on data poly clipping after 2 seconds; poly clipping can be cancelled (at a cost of exiting pcb-rnd)
		-Add: assert() on invalid menu ID
		-Add: throw an error for any plugin conf field that is unregistered - such bugs cause segfault with dynamic loaded plugins
		-Add: extend the padstack mirror API so that x mirroring can be disabled

	[diag]
		-Fix: integrity: do not check more layers than what the parent has (e.g. few subc layers vs. a lot of board layers where the subc is hosted)
		-Fix: missing newlines at the end of error messages
		-Fix: respect prefix when printing lihata dump section headers
		-Add: integrity test on layer's parent
		-Add: integrity checks for object's ->type field
		-Add: integrity test on layer group type/parent
		-Add: integrity tests for non-global outline layers
		-Add: print comments about which section of the emitted lihata dump is for main and for plugin trees

	[dialogs]
		-Fix: padstack shape copy does not bloat the shape
		-Fix: padstack dialog uses real tabs instead of local button based implementation
		-Fix: shape gen sets clearance to 0
		-Fix: flag edit prints object type in text, not in magic number
		-Add: padstack editor, 3rd tab: auto generate common cases
		-Add: padstackedit can be invoked with a selected tab open
		-Add: include optional prototype name in instance proto button text

	[distaligntext]
		-Cleanup: remove doxygen
		-Cleanup: don't repeat the file name in comment
		-Change: rewrite element loops to subc loops - floater text on the first level considered

	[doc]
		-Fix: use $(MAKE) instead of hardwired make
		-Del: old Debian list generation: we don't do custom Debian packaging anymore
		-Update: wishlist: data model rewrite done
		-Add: user manual, ui: explain multi-stroke key bindings, prepare the key tree
		-Add: multi-stroke key assignment: document non-leaf choices
		-Add: document new key tree nodes
		-Add: keytree flat list
		-Add: document what's new in lihata v5
		-Add: manual page for fp2subc
		-Add: document lihata board v5 news: route style via proto ID
		-Add: document lihata v5 padstack proto name feature
		-Add: lihata -> html render script for the file format doc
		-Add: lihata board and friends file format spec
		-Add: technical details on the xy exporter templates
		-Add: mods3: explain plugin status words
		-Add: link mods3 tables from plugin creation howto for classes and status words
		-Add: document the new stroke plugin
		-Add: document the polystitch plugin
		-Add: minimalistic user documentation for the autoplace plugin
		-Add: minimalistic user manual for the autoroute plugin
		-Add: list svn mirrors, explain when the mirrors should be used

	[export_bom]
		-Fix: use the centralized footprint name lookup

	[export_dsn]
		-Fix: do not x-flip padstack placement within subc - that swaps the pads
		-Fix: y flip in padstack placement within subcircuit
		-Fix: mirror x shapes of padstacks when parent subcircuit is on the other side (freerouting dsn import bug workaround)
		-Fix: padstack mirrored x placement as a workaround for freerouting's dsn importer bug
		-Fix: heavy terminal placement within subcircuits, including proper y flip
		-Fix: make sure layer names are unique by prefixing group name with group ID
		-Workaround: subc front/back and inverted padstack layer stackup to work around a bug in freerouting.net dsn importer
		-Cleanup: rewrite layer support to use core data directly (also removes glib dependency)

	[export_dxf]
		-Fix: arc angles for all positive and negative deltas (simplify the code to remove bugs)

	[export_ipcd356]
		-Change: full rewrite

	[export_png]
		-Fix: in photo mode, use the slower, but more accurate line drawing method for zero-length lines

	[export_ps]
		-Fix: ps_bloat now works
		-Del: polygrid export option - PolyHatch() does it better

	[export_xy]
		-Fix: don't count subcircuits in int, use pcb_cardinal_t (int may be 16 bit)
		-Fix: use central subc footprint name mechanism
		-Fix: unregister conf nodes in uninit
		-Add: local plugin configuration for templates
		-Add: conf list parser for templates
		-Add: lihata conf version of the original templates
		-Add: compile and install export_xy.conf
		-Cleanup: terminology in template field names: subc/terminal instead of elem/pad
		-Cleanup: rename "elem." to "subc." and "pad." to "term." in the template for consistency
		-Cleanup: rename subc.name to subc.refdes and subc.desc to subc.footprint for consistency with code terminology
		-Cleanup: rename element_num to count for consistency in the terminology

	[fp_board]
		-Fix: C89 forbids mixed declarations and code

	[fp_wget]
		-Fix: error messages are not sent to stdout
		-Add: common helper function for searching the index for a footprint name
		-Add: gedasymbols: if path is the cookie, accept it and search for the footprint short name in the index
		-Add: footprint path search for edakrill

	[gpmi]
		-Fix: remove the old MAX_LAYERS+2 hack - silks are not special any more
		-Del: debug draw API
		-Update: new menu creation API
		-Update: plugin dependencies

	[gtk]
		-Fix: do not discriminate keypad keys
		-Fix: SEL -> ARR in mode button icon for consistency with the code/doc terminology
		-Fix: emit layer vis change event from wt_layersel on any visibility affecting changes to keep menus in sync
		-Fix: when removing a menu widget, also remove its action from the action list
		-Fix: bindings so that the route style widget is updated when the route style selection changes (from the menu or via the action)
		-Fix: pinout window: do not enforce window sizes too large for large footprints
		-Fix: coord correctness: zoom/pan coord conversion doesn't cast coords to gint
		-Fix: drc window reset shall remove old report widgets
		-Fix: coord entry: let the user change units
		-Fix: side-correct zoom-to-win
		-Fix: do not include file name for SaveTo(Layout) - it knows the file name
		-Fix: advanced search non-integer fields are retyped to DOUBLE from INT
		-Fix: allow negative integers in config pov's spinbox (e.g. subc dash_freq can be set to -1)
		-Fix: give focus to the drawing window before entering the main loop so key presses are handled even if the mouse cursor haven't yet entered the drawing area
		-Change: mouse button assignment is in sync with the default menu file
		-Add: option for context-sensitive popups: per object type under the cursor
		-Add: status line: display key sequence
		-Add: low level zoom action feature: zoom(x1,y1,x2,y2) and high level ZoomTo() action  that doesn't try to query the new center
		-Add: advanced search: subc and host subc fields
		-Add: advanced search: subcircuit rotation and side field
		-Add: advanced search: padstack fields in the advanced search
		-Add: missing action EditLayerGroups for compatibility with lesstif

	[hid]
		-Fix: gtk or lesstif X initialization failure does not result in exit() from the HID code but returns error so that main.c has the chance to handle it later
		-Fix: coord correctness: set_crosshair() takes coords, not ints
		-Cleanup: API indentation and excess _ in argument names
		-Del: debug draw API - use UI layers instead
		-Del: radio menu support - gui logic is implemented deeper, no toolkit support required
		-Move: centralize SetUnits action from the lesstif and gtk hids into core
		-Change: pass on menu properties as a struct, not as a bunch of const char *args, to make the API easier to extend
		-Change: parse arg/command line API has an integer return value so HIDs are not forced to exit but can indicate if initialization fails
		-Add: publish the main hid config for each GUI hids so that anchored menus can be added from the outside, without the GUI hids knowing about all anchors by name
		-Add: API to look up and map @anchor menus
		-Add: API for removing menu items under an anchor
		-Add: remove menu subtree by lihata node (for removing under-anchored menu items)
		-Add: checked and update_on fields for dynamic menus
		-Add: background and foreground color fields in dynamic menu struct
		-Add: API to force a global menu checkbox update
		-Add: wrap pcb_gui->attribute_dialog as it may not be always available

	[import_dsn]
		-Update: load layer group id__names as exported by export_dsn

	[import_hpgl]
		-Fix: Y flip

	[import_ipcd356]
		-Add: new plugin to load terminals and netlist for test points

	[io_lihata]
		-Fix: test route style entry type before use
		-Fix: throw an error when a padstack references to an invalid prototype
		-Fix: handle buggy input: no data in subc
		-Fix: don't segfault if poly padstack proto shape contains invalid coordinate
		-Fix: when setting up new layer groups, set parent and type properly
		-Fix: v4: save heavy terminal thermals (and warn if saving to <v4)
		-Fix: v4: write subcircuit v4 for board v5
		-Fix: remove invalid nodes (placeholders) from the tree before saving a subcircuit file to avoid broken output
		-Fix: initialize zoom to 0, as the conversion may fail
		-Fix: throw an error if font allocation fails (instead of segf)
		-Fix: quit parsing on floating point conv errors
		-Fix: be more pedantic on basic field parsing errors (such as coords, ints or floats): distinguish between optional and required fields; always throw an error on existing but broken value, throw an useful error on missing required fields
		-Fix: early exit on error to avoid asserts in padstack creation
		-Fix: require layer group to be a hash
		-Fix: don't load polygon with no geometry
		-Fix: do not crash if element objects is missing or not a list
		-Fix: do not accept polygons with broken coord table
		-Fix: buffer overrun on too many input layers
		-Fix: uninitialized fields: optional fields should be set to a default value before parsing them
		-Fix: rat line attribute is loaded into the newly initialized rat line, not into an uninited temp
		-Fix: make sure basic objects are hashes on load, throw meaningful error if they are not
		-Fix: more pedantic error message generation on missing values
		-Fix: require subc.ID to be a hash, throw a meaningful error message if not
		-Fix: place dummy clearance node while saving polygon to make sure a clearance removed will be removed from the file
		-Fix: do not warn for missing bool in layer visibility and flags
		-Fix: flag default value, when not set, is false
		-Fix: moving a pad to the other side should happen only if the pad itself is marked onsolder (subc side does not matter)
		-Fix: missing space in parse error message
		-Change: do not save cursor; warn if cursor is loaded
		-Add: layer stackup validation: cross-link checks
		-Add: validate layer stackup for the few remaining restrictions
		-Add: v5: save & load layer group and netlist network attributes
		-Add: warn for (suspected) version incompatibilities on saving objects with new attributes
		-Add: v5: save layer color
		-Add: v5: warn for loading old data model objects from lihata v5+
		-Add: v5: load/save route style via proto
		-Add: v5: load/save padstack proto name
		-Add: when loading old (below-v5) lihata files, process board meta once again after loading the configs, because board meta should override conf
		-Add: unify parser error reporting, with file name : line number . col number
		-Add: explicit error messages on conditions that used to be silent parse errors

	[io_pcb]
		-Fix: conf conversion bug: isle area is not coords because of the square, put it in the config as %f
		-Fix: do not x-mirror on-solder pads, data read from the file is already mirrored
		-Fix: handle element hidename flag on load
		-Fix: when there's no subc refdes text found, write the element with refdes text at 0;0
		-Fix: preserve refdes text coords and directions in a round trip when hidename is active
		-Fix: proper load/save round trip on element pad clearance
		-Add: when saving an old element, export the hidename flag when there's no refdes text

	[layer]
		-Fix: don't crash when layer group references non-existing layer
		-Move: centralize menu-button-only virtual layers
		-Add: ChkView() action to return whether a layer is visible, for the menu 'checked' infrastructure
		-Add: ChkLayer() action for returning the current selection
		-Add: virtual layer menu button abbreviated names
		-Add: utility function for layer menu button lookup by name
		-Add: support virtual menu layers in select/check actions
		-Add: support virtual layer menu entries in layer view actions
		-Add: gui actions for layer view can handle ui layer with the ui: prefix
		-Add: workaround for non-global outline layers (invalid combination) on layer binding

	[lesstif]
		-Fix: remove menu node by lihata node should call the by-node remover in core
		-Fix: do not discriminate keypad
		-Fix: top silk layer visibility (remove special casing)
		-Fix: coord correctness: zoom/pan works with pcb_coord_t instead of int
		-Fix: do not configure scroll bars with invalid size (integer overflow)
		-Fix: do not pass filename to SaveTo(Layout), that action knows the file name
		-Fix: fallback progress bar while the gui is not initialized
		-Fix: make sure to initialize the lesstif menu in core only once to avoid invalid IDs
		-Fix: unregister hid attributes on uninit
		-Fix: use a separate cookie for registering the menuconfig hid - double registering with the same cookie would result in id -1 that in turn crashes the menu system
		-Del: old route style code
		-Add: ZoomTo() action (and a low level zoom-to-window function)
		-Add: implement menu feature: update_on

	[lib_compat_help]
		-Fix: uninitialized memory on refpins in element rotation rev engineering
		-Fix: old pin objects with no plating still can have masks (e.g. mounting holes)

	[lib_hid_common]
		-Add: enable central generation of layer menus with background color
		-Add: central code for listing route styles under the @routstyle menu anchor
		-Add: refresh the menus when new board is loaded

	[lib_padstack_hash]
		-Del: the new data model has built-in padstacks, no need to emulate padstacks using pins/pads any more

	[libuhpgl]
		-Fix: accept 1 or 2 arguments for VS
		-Add: ignore unknown instruction WU
		-Add: ignore unknown instruction PW - probably pen width?
		-Add: accept space as separator between coords (number lists) - there is a dialect out there that does this
		-Add: ignore LT (line type: dash pattern) for now

	[padstack]
		-Fix: avoid reusing free'd memory when a polyline needs to be inverted for a padstack shape
		-Fix: change clear size op took clearance with a *2 factor
		-Fix: zero length line pad conversion bug
		-Fix: do not clamp relative clearance change values to absolute minimum clearance
		-Fix: relative clearance change op in positive direction
		-Fix: wrong clamping on negative clearance change - don't *2 the minimal values
		-Fix: set padstack proto on insert_or_free()
		-Fix: make clearance minimum enforcement symmetric
		-Fix: when making a modification on an in-buffer padstack, such as rotation, force generating the transformed shape and update ->shapei
		-Fix: rotate op needs to invert angle if padstack is x-mirrored, because padstack transformation data is interpreted as "rotate first, then mirror"
		-Fix: for mirroring y_offs=0 does not mean "no coord change": the y coord can still be non-zero in which case it needs to be mirrored. Introduce a special y_offs value to indicate "don't mirror coords"
		-Add: event on creating padstacks
		-Add: low level function for changing prototype name

	[plugins]
		-Fix: better corner case handling for hook unregister for the case the target pointer is the head of the list
		-Fix: unregister all plugin hooks to avoid quit-time-segfault (dangling pointers left on the plug chains, backing structs already unmapped by dlclose)

	[polystitch]
		-Fix: pcb_coord_t correctness
		-Change: rewrite the core of the plugin so that it doesn't try to generate a (self-intersecting, invalid) polygon, but converts the inner polygon into a valid hole in the outer polygon
		-Cleanup: do not use global variables when no global state is necessary for the task

	[propedit]
		-Fix: attempt to change layer properties only on prefix match or attributes
		-Fix: mark layers being edited as the first step, do not trust storing the pointers
		-Fix: clearance value halving on set
		-Add: propedit(layers) and propedit(layer:id) so layer attributes can be edited
		-Add: accept multiple layer IDs
		-Add: layer id "current" means the current layer
		-Add: operate on layer groups
		-Add: operate on boards
		-Add: allow editing subc part padstack in loose subc mode
		-Add: extend loose subc editing to all subc part objects (not limited to padstack)
		-Add: allow editing subc parts that are freely editable (terminals, floaters or anything in loose subc mode)

	[query]
		-Fix: properly compare NULL string to empty string (they should be the same for now)
		-Fix: make subcircuit access recursive - subcircuit parts should be dealt with
		-Fix: do not segfault on uninitialized variables
		-Add: padstack shape accessor
		-Add: new field: subc (references to the direct parent subc)
		-Add: generalize accessing the common fields; subc field access works on parent subcircuits
		-Add: more sophisticated eval printout: take only coords as bools, print the value of the rest; void is always false
		-Add: subc rotation access
		-Add: access subc side (TOP or BOTTOM)

	[renumber]
		-Cleanup: remove doxygen
		-Cleanup: const correctness

	[report]
		-Fix: report all net lengths using pcb_message() instead of direct log writes so the user has more control
		-Fix: use pcb_message() instead of direct logging for more control
		-Fix: excess undo interfering with user's undo
		-Update: use the new data model for looking up net name for found objects
		-Cleanup: split and simplify the net name lookup code
		-Cleanup: get rid of DrillInfoTypePtr - use * for pointers
		-Cleanup: get rid of CamelCase

	[rtree]
		-Del: old rtree implementation in favor of genrtree

	[rubberband]
		-Fix: don't mix var decl with code, C89 doesn't allow that
		-Fix: the event PCB_EVENT_RUBBER_CONSTRAIN_MAIN_LINE was using int where it should have been using pcb_coord_t

	[scconfig]
		-Fix: use detected host cc to compile puplug utils
		-Fix: do not hardwire inline - use the detection from scconfig
		-Change: force lib_compat_help to be a builtin because core temporarily depends on it
		-Change: use local coord abs implementation instead of labs/llabs because llabs is not c89 and leads to feature macro hell on GNU
		-Del: export_dsn -> glib dependency

	[shape]
		-Fix: use tabbed widget instead of local tab implementation (works better on small screen)
		-Fix: don't warn on start for invalid dia
		-Fix: roundrect: don't crash on missing arg
		-Fix: avoid generating self intersecting polygons when round rect rounding radius is 0
		-Fix: placing round rect: if there's only one arg, it should be the size

	[stroke]
		-Rewrite: new, configuration+action based stroke implementation, rewritten from scratch
		-Fix: gesture direction should not invert when board is flipped
		-Fix: coord type correctness: event coords are passed as pcb_coord_t, not as int
		-Fix: don't use bit shift on coords, c89 doesn't guarantee that would work on signed ints
		-Fix: warn only once for missing libstroke, and only if the gesture is large enough
		-Change: API CHANGE: stroke finish returns integer; 0 on success (gesture recognized)
		-Add: hack when processing mouse button release action: return 1 if stroke is enabled and gesture is recognized so that the context popup menu is not opened
		-Add: bind right mouse button press/release to stroke in the menu file
		-Add: rotation gestures
		-Add: stroke() action with stroke(gesture, seq)
		-Add: bindings for zoom in and out
		-Add: stopline feature, also supports poly and poly hole
		-Add: the config explains the dial pad idea of sequence descriptions
		-Add: option for warning on unknown/unconfigured sequences

	[subc]
		-Fix: const correctness: host transf can't take const subc because of the subc cache updates
		-Fix: when rotating all subc parts, restore undo to avoid padstack rotations getting on the undo list separately
		-Fix: unified handling of subc_op undo - subc size change operations are undo-batched
		-Fix: undo strategy: when subc-only undo/redo is done, freeze undo adds
		-Fix: don't let flag change of subcircuit already in buffer get on the undo list - buffer flags changes won't be undoable
		-Add: menu item for controlling the loose subc flag
		-Add: update subc when part padstack is changed
		-Add: configurable subc visible bbox dash frequency
		-Add: helper function to return the footprint name of a subc

	[teardrops]
		-Fix: c89 forbids mixed declarations and code

	[tool]
		-Fix: move: do not perform the move if dx==0 and dy==0
		-Fix: dereference pointer in pcb_tool_get macro
		-Fix: reset crosshair bounds after placing a drag&drop move so the crosshair move is not limited
		-Split: define in tool files if the tool can be selected in rat drawing mode
		-Split: tool (un)init code into tool files
		-Move: pcb_crosshair_save/restore_mode to tool.[ch] as pcb_tool_save/restore

	[util]
		-Del: old, resource file based keylist -> html converter (pcb-rnd long ago switched to lht)
		-Add: keylist graphviz drawing for multikey combos
		-Add: keylist can generate a boxed html version (each box is a starting letter)
		-Add: keylist script uses css magic for the boxed version to get boxes float

	[vendor]
		-Fix: count total number of holes again
		-Fix: re-enable route style tuning
		-Fix: re-enable setting the current 'pen' via drill
		-Add: event for tuning newly placed padstacks when vendor drill mapping is enabled (replaces the stub)
